[Zrouter-src-freebsd] ZRouter.org: push to FreeBSD HEAD tree

zrouter-src-freebsd at zrouter.org zrouter-src-freebsd at zrouter.org
Fri Aug 10 12:34:52 UTC 2012


details:   http://zrouter.org/hg/FreeBSD/head//rev/2d798fd21d78
changeset: 520:2d798fd21d78
user:      Aleksandr Rybalko <ray at ddteam.net>
date:      Fri Aug 10 14:19:25 2012 +0300
description:
FreeBSD HEAD @svn 239172r.

diffstat:

 head/Makefile.inc1                                                        =
     |      5 +-
 head/UPDATING                                                             =
     |      7 +-
 head/bin/sh/jobs.c                                                        =
     |     85 +-
 head/bin/sh/trap.c                                                        =
     |     10 +-
 head/bin/sh/trap.h                                                        =
     |      3 +-
 head/cddl/contrib/opensolaris/cmd/dtrace/dtrace.c                         =
     |      4 +-
 head/cddl/contrib/opensolaris/cmd/zpool/zpool.8                           =
     |     45 +-
 head/cddl/contrib/opensolaris/cmd/zpool/zpool_main.c                      =
     |    435 +-
 head/cddl/contrib/opensolaris/lib/libdtrace/common/dt_proc.c              =
     |      3 +-
 head/cddl/contrib/opensolaris/lib/libzfs/common/libzfs.h                  =
     |      3 +-
 head/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_status.c           =
     |     25 +
 head/cddl/lib/libzfs/Makefile                                             =
     |      6 +-
 head/contrib/compiler-rt/LICENSE.TXT                                      =
     |      3 +-
 head/contrib/compiler-rt/lib/absvti2.c                                    =
     |      4 +-
 head/contrib/compiler-rt/lib/adddf3.c                                     =
     |      4 +-
 head/contrib/compiler-rt/lib/addsf3.c                                     =
     |      4 +-
 head/contrib/compiler-rt/lib/addvti3.c                                    =
     |      4 +-
 head/contrib/compiler-rt/lib/arm/aeabi_idivmod.S                          =
     |     27 +
 head/contrib/compiler-rt/lib/arm/aeabi_ldivmod.S                          =
     |     30 +
 head/contrib/compiler-rt/lib/arm/aeabi_memcmp.S                           =
     |     19 +
 head/contrib/compiler-rt/lib/arm/aeabi_memcpy.S                           =
     |     19 +
 head/contrib/compiler-rt/lib/arm/aeabi_memmove.S                          =
     |     19 +
 head/contrib/compiler-rt/lib/arm/aeabi_memset.S                           =
     |     32 +
 head/contrib/compiler-rt/lib/arm/aeabi_uidivmod.S                         =
     |     28 +
 head/contrib/compiler-rt/lib/arm/aeabi_uldivmod.S                         =
     |     30 +
 head/contrib/compiler-rt/lib/ashldi3.c                                    =
     |      2 +-
 head/contrib/compiler-rt/lib/ashlti3.c                                    =
     |      4 +-
 head/contrib/compiler-rt/lib/ashrdi3.c                                    =
     |      2 +-
 head/contrib/compiler-rt/lib/ashrti3.c                                    =
     |      4 +-
 head/contrib/compiler-rt/lib/assembly.h                                   =
     |      3 +
 head/contrib/compiler-rt/lib/atomic.c                                     =
     |    315 +
 head/contrib/compiler-rt/lib/clzti2.c                                     =
     |      4 +-
 head/contrib/compiler-rt/lib/cmpti2.c                                     =
     |      4 +-
 head/contrib/compiler-rt/lib/ctzti2.c                                     =
     |      4 +-
 head/contrib/compiler-rt/lib/divdf3.c                                     =
     |      2 +-
 head/contrib/compiler-rt/lib/divmoddi4.c                                  =
     |      2 -
 head/contrib/compiler-rt/lib/divsf3.c                                     =
     |      2 +-
 head/contrib/compiler-rt/lib/divsi3.c                                     =
     |     10 +-
 head/contrib/compiler-rt/lib/divti3.c                                     =
     |      4 +-
 head/contrib/compiler-rt/lib/extendsfdf2.c                                =
     |      2 +-
 head/contrib/compiler-rt/lib/ffsti2.c                                     =
     |      4 +-
 head/contrib/compiler-rt/lib/fixdfdi.c                                    =
     |      2 +-
 head/contrib/compiler-rt/lib/fixdfsi.c                                    =
     |      2 +-
 head/contrib/compiler-rt/lib/fixdfti.c                                    =
     |      4 +-
 head/contrib/compiler-rt/lib/fixsfdi.c                                    =
     |      2 +-
 head/contrib/compiler-rt/lib/fixsfsi.c                                    =
     |      2 +-
 head/contrib/compiler-rt/lib/fixsfti.c                                    =
     |      4 +-
 head/contrib/compiler-rt/lib/fixunsdfdi.c                                 =
     |      2 +-
 head/contrib/compiler-rt/lib/fixunsdfsi.c                                 =
     |      2 +-
 head/contrib/compiler-rt/lib/fixunsdfti.c                                 =
     |      4 +-
 head/contrib/compiler-rt/lib/fixunssfdi.c                                 =
     |      2 +-
 head/contrib/compiler-rt/lib/fixunssfsi.c                                 =
     |      2 +-
 head/contrib/compiler-rt/lib/fixunssfti.c                                 =
     |      4 +-
 head/contrib/compiler-rt/lib/fixunsxfti.c                                 =
     |      4 +-
 head/contrib/compiler-rt/lib/fixxfti.c                                    =
     |      4 +-
 head/contrib/compiler-rt/lib/floatdidf.c                                  =
     |      2 +-
 head/contrib/compiler-rt/lib/floatdisf.c                                  =
     |      2 +-
 head/contrib/compiler-rt/lib/floatsidf.c                                  =
     |      2 +-
 head/contrib/compiler-rt/lib/floatsisf.c                                  =
     |      2 +-
 head/contrib/compiler-rt/lib/floattidf.c                                  =
     |      4 +-
 head/contrib/compiler-rt/lib/floattisf.c                                  =
     |      4 +-
 head/contrib/compiler-rt/lib/floattixf.c                                  =
     |      4 +-
 head/contrib/compiler-rt/lib/floatundidf.c                                =
     |      2 +-
 head/contrib/compiler-rt/lib/floatundisf.c                                =
     |      2 +-
 head/contrib/compiler-rt/lib/floatunsidf.c                                =
     |      2 +-
 head/contrib/compiler-rt/lib/floatunsisf.c                                =
     |      2 +-
 head/contrib/compiler-rt/lib/floatuntidf.c                                =
     |      4 +-
 head/contrib/compiler-rt/lib/floatuntisf.c                                =
     |      4 +-
 head/contrib/compiler-rt/lib/floatuntixf.c                                =
     |      4 +-
 head/contrib/compiler-rt/lib/fp_lib.h                                     =
     |      2 +-
 head/contrib/compiler-rt/lib/int_endianness.h                             =
     |      9 +-
 head/contrib/compiler-rt/lib/int_util.c                                   =
     |     13 +
 head/contrib/compiler-rt/lib/int_util.h                                   =
     |      7 +-
 head/contrib/compiler-rt/lib/lshrdi3.c                                    =
     |      2 +-
 head/contrib/compiler-rt/lib/lshrti3.c                                    =
     |      4 +-
 head/contrib/compiler-rt/lib/modti3.c                                     =
     |      4 +-
 head/contrib/compiler-rt/lib/muldf3.c                                     =
     |      4 +-
 head/contrib/compiler-rt/lib/muldi3.c                                     =
     |      2 +-
 head/contrib/compiler-rt/lib/muloti4.c                                    =
     |      4 +-
 head/contrib/compiler-rt/lib/mulsf3.c                                     =
     |      4 +-
 head/contrib/compiler-rt/lib/multi3.c                                     =
     |      4 +-
 head/contrib/compiler-rt/lib/mulvti3.c                                    =
     |      4 +-
 head/contrib/compiler-rt/lib/negdf2.c                                     =
     |      2 +-
 head/contrib/compiler-rt/lib/negsf2.c                                     =
     |      2 +-
 head/contrib/compiler-rt/lib/negti2.c                                     =
     |      4 +-
 head/contrib/compiler-rt/lib/negvti2.c                                    =
     |      4 +-
 head/contrib/compiler-rt/lib/parityti2.c                                  =
     |      4 +-
 head/contrib/compiler-rt/lib/popcountti2.c                                =
     |      4 +-
 head/contrib/compiler-rt/lib/powitf2.c                                    =
     |      4 +-
 head/contrib/compiler-rt/lib/subdf3.c                                     =
     |      2 +-
 head/contrib/compiler-rt/lib/subsf3.c                                     =
     |      2 +-
 head/contrib/compiler-rt/lib/subvti3.c                                    =
     |      4 +-
 head/contrib/compiler-rt/lib/truncdfsf2.c                                 =
     |      2 +-
 head/contrib/compiler-rt/lib/ucmpti2.c                                    =
     |      4 +-
 head/contrib/compiler-rt/lib/udivmoddi4.c                                 =
     |      2 -
 head/contrib/compiler-rt/lib/udivmodti4.c                                 =
     |      4 +-
 head/contrib/compiler-rt/lib/udivsi3.c                                    =
     |      3 +-
 head/contrib/compiler-rt/lib/udivti3.c                                    =
     |      4 +-
 head/contrib/compiler-rt/lib/umodti3.c                                    =
     |      4 +-
 head/contrib/groff/tmac/doc-common                                        =
     |      3 -
 head/contrib/groff/tmac/doc-syms                                          =
     |      3 +-
 head/contrib/groff/tmac/doc.tmac                                          =
     |      2 +-
 head/contrib/groff/tmac/groff_mdoc.man                                    =
     |      2 -
 head/contrib/libarchive/FREEBSD-Xlist                                     =
     |      4 +-
 head/contrib/libarchive/FREEBSD-upgrade                                   =
     |      8 +-
 head/contrib/libarchive/NEWS                                              =
     |     18 +-
 head/contrib/libarchive/README                                            =
     |     13 +-
 head/contrib/libarchive/cpio/bsdcpio.1                                    =
     |      4 +-
 head/contrib/libarchive/cpio/cmdline.c                                    =
     |      3 +-
 head/contrib/libarchive/cpio/cpio.c                                       =
     |     38 +-
 head/contrib/libarchive/cpio/cpio.h                                       =
     |      6 +-
 head/contrib/libarchive/cpio/test/main.c                                  =
     |    323 +-
 head/contrib/libarchive/cpio/test/test.h                                  =
     |     14 +-
 head/contrib/libarchive/cpio/test/test_pathmatch.c                        =
     |    243 -
 head/contrib/libarchive/libarchive/archive.h                              =
     |    156 +-
 head/contrib/libarchive/libarchive/archive_acl.c                          =
     |     65 +-
 head/contrib/libarchive/libarchive/archive_check_magic.c                  =
     |      3 +-
 head/contrib/libarchive/libarchive/archive_endian.h                       =
     |     10 +-
 head/contrib/libarchive/libarchive/archive_entry.3                        =
     |      6 +-
 head/contrib/libarchive/libarchive/archive_entry.c                        =
     |     80 +-
 head/contrib/libarchive/libarchive/archive_entry.h                        =
     |     63 +-
 head/contrib/libarchive/libarchive/archive_entry_acl.3                    =
     |      4 +-
 head/contrib/libarchive/libarchive/archive_entry_link_resolver.c          =
     |      4 +-
 head/contrib/libarchive/libarchive/archive_entry_linkify.3                =
     |      4 +-
 head/contrib/libarchive/libarchive/archive_entry_paths.3                  =
     |      4 +-
 head/contrib/libarchive/libarchive/archive_entry_perms.3                  =
     |      4 +-
 head/contrib/libarchive/libarchive/archive_entry_stat.3                   =
     |      6 +-
 head/contrib/libarchive/libarchive/archive_entry_stat.c                   =
     |     10 +-
 head/contrib/libarchive/libarchive/archive_entry_time.3                   =
     |      6 +-
 head/contrib/libarchive/libarchive/archive_getdate.c                      =
     |   1037 +
 head/contrib/libarchive/libarchive/archive_match.c                        =
     |   1836 +
 head/contrib/libarchive/libarchive/archive_pathmatch.c                    =
     |    459 +
 head/contrib/libarchive/libarchive/archive_pathmatch.h                    =
     |     52 +
 head/contrib/libarchive/libarchive/archive_ppmd7.c                        =
     |      5 +-
 head/contrib/libarchive/libarchive/archive_private.h                      =
     |      3 +-
 head/contrib/libarchive/libarchive/archive_read.3                         =
     |      6 +-
 head/contrib/libarchive/libarchive/archive_read.c                         =
     |     13 +-
 head/contrib/libarchive/libarchive/archive_read_data.3                    =
     |      4 +-
 head/contrib/libarchive/libarchive/archive_read_disk.3                    =
     |      6 +-
 head/contrib/libarchive/libarchive/archive_read_disk_entry_from_file.c    =
     |    419 +-
 head/contrib/libarchive/libarchive/archive_read_disk_posix.c              =
     |    503 +-
 head/contrib/libarchive/libarchive/archive_read_disk_private.h            =
     |     25 +-
 head/contrib/libarchive/libarchive/archive_read_extract.3                 =
     |      4 +-
 head/contrib/libarchive/libarchive/archive_read_filter.3                  =
     |      4 +-
 head/contrib/libarchive/libarchive/archive_read_format.3                  =
     |      6 +-
 head/contrib/libarchive/libarchive/archive_read_free.3                    =
     |      6 +-
 head/contrib/libarchive/libarchive/archive_read_header.3                  =
     |      4 +-
 head/contrib/libarchive/libarchive/archive_read_new.3                     =
     |      6 +-
 head/contrib/libarchive/libarchive/archive_read_open.3                    =
     |      6 +-
 head/contrib/libarchive/libarchive/archive_read_open_fd.c                 =
     |      6 +-
 head/contrib/libarchive/libarchive/archive_read_open_filename.c           =
     |     14 +-
 head/contrib/libarchive/libarchive/archive_read_private.h                 =
     |      6 +-
 head/contrib/libarchive/libarchive/archive_read_set_options.3             =
     |      4 +-
 head/contrib/libarchive/libarchive/archive_read_support_filter_rpm.c      =
     |      2 +-
 head/contrib/libarchive/libarchive/archive_read_support_format_7zip.c     =
     |    142 +-
 head/contrib/libarchive/libarchive/archive_read_support_format_cab.c      =
     |    210 +-
 head/contrib/libarchive/libarchive/archive_read_support_format_cpio.c     =
     |     57 +-
 head/contrib/libarchive/libarchive/archive_read_support_format_iso9660.c  =
     |     38 +-
 head/contrib/libarchive/libarchive/archive_read_support_format_lha.c      =
     |     12 +-
 head/contrib/libarchive/libarchive/archive_read_support_format_mtree.c    =
     |     15 +-
 head/contrib/libarchive/libarchive/archive_read_support_format_rar.c      =
     |     68 +-
 head/contrib/libarchive/libarchive/archive_read_support_format_tar.c      =
     |    156 +-
 head/contrib/libarchive/libarchive/archive_read_support_format_xar.c      =
     |     19 +-
 head/contrib/libarchive/libarchive/archive_read_support_format_zip.c      =
     |    160 +-
 head/contrib/libarchive/libarchive/archive_string.c                       =
     |    760 +-
 head/contrib/libarchive/libarchive/archive_string.h                       =
     |     12 +-
 head/contrib/libarchive/libarchive/archive_string_composition.h           =
     |    945 +-
 head/contrib/libarchive/libarchive/archive_string_sprintf.c               =
     |     16 +-
 head/contrib/libarchive/libarchive/archive_util.3                         =
     |      6 +-
 head/contrib/libarchive/libarchive/archive_util.c                         =
     |      7 +-
 head/contrib/libarchive/libarchive/archive_write.3                        =
     |      6 +-
 head/contrib/libarchive/libarchive/archive_write.c                        =
     |      6 +-
 head/contrib/libarchive/libarchive/archive_write_add_filter.c             =
     |     66 +
 head/contrib/libarchive/libarchive/archive_write_add_filter_bzip2.c       =
     |     14 +-
 head/contrib/libarchive/libarchive/archive_write_add_filter_compress.c    =
     |     20 +-
 head/contrib/libarchive/libarchive/archive_write_add_filter_gzip.c        =
     |     36 +-
 head/contrib/libarchive/libarchive/archive_write_add_filter_program.c     =
     |    106 +-
 head/contrib/libarchive/libarchive/archive_write_add_filter_xz.c          =
     |     12 +-
 head/contrib/libarchive/libarchive/archive_write_blocksize.3              =
     |      4 +-
 head/contrib/libarchive/libarchive/archive_write_data.3                   =
     |      8 +-
 head/contrib/libarchive/libarchive/archive_write_disk.3                   =
     |      6 +-
 head/contrib/libarchive/libarchive/archive_write_disk_acl.c               =
     |    249 +
 head/contrib/libarchive/libarchive/archive_write_disk_posix.c             =
     |    161 +-
 head/contrib/libarchive/libarchive/archive_write_disk_private.h           =
     |      7 +-
 head/contrib/libarchive/libarchive/archive_write_disk_set_standard_lookup.=
c    |     30 +-
 head/contrib/libarchive/libarchive/archive_write_filter.3                 =
     |      4 +-
 head/contrib/libarchive/libarchive/archive_write_finish_entry.3           =
     |      6 +-
 head/contrib/libarchive/libarchive/archive_write_format.3                 =
     |      4 +-
 head/contrib/libarchive/libarchive/archive_write_free.3                   =
     |      4 +-
 head/contrib/libarchive/libarchive/archive_write_header.3                 =
     |      4 +-
 head/contrib/libarchive/libarchive/archive_write_new.3                    =
     |      4 +-
 head/contrib/libarchive/libarchive/archive_write_open.3                   =
     |      8 +-
 head/contrib/libarchive/libarchive/archive_write_open_filename.c          =
     |    169 +-
 head/contrib/libarchive/libarchive/archive_write_private.h                =
     |      4 +-
 head/contrib/libarchive/libarchive/archive_write_set_format_7zip.c        =
     |     57 +-
 head/contrib/libarchive/libarchive/archive_write_set_format_ar.c          =
     |      4 +-
 head/contrib/libarchive/libarchive/archive_write_set_format_cpio.c        =
     |     13 +-
 head/contrib/libarchive/libarchive/archive_write_set_format_cpio_newc.c   =
     |      9 +-
 head/contrib/libarchive/libarchive/archive_write_set_format_gnutar.c      =
     |      6 +-
 head/contrib/libarchive/libarchive/archive_write_set_format_iso9660.c     =
     |    151 +-
 head/contrib/libarchive/libarchive/archive_write_set_format_mtree.c       =
     |     10 +-
 head/contrib/libarchive/libarchive/archive_write_set_format_pax.c         =
     |     11 +-
 head/contrib/libarchive/libarchive/archive_write_set_format_ustar.c       =
     |      6 +-
 head/contrib/libarchive/libarchive/archive_write_set_format_xar.c         =
     |     17 +-
 head/contrib/libarchive/libarchive/archive_write_set_format_zip.c         =
     |    340 +-
 head/contrib/libarchive/libarchive/archive_write_set_options.3            =
     |      8 +-
 head/contrib/libarchive/libarchive/cpio.5                                 =
     |      4 +-
 head/contrib/libarchive/libarchive/libarchive-formats.5                   =
     |    106 +-
 head/contrib/libarchive/libarchive/libarchive.3                           =
     |     69 +-
 head/contrib/libarchive/libarchive/libarchive_changes.3                   =
     |      2 +-
 head/contrib/libarchive/libarchive/libarchive_internals.3                 =
     |      6 +-
 head/contrib/libarchive/libarchive/tar.5                                  =
     |      4 +-
 head/contrib/libarchive/libarchive/test/main.c                            =
     |    323 +-
 head/contrib/libarchive/libarchive/test/read_open_memory.c                =
     |      4 +-
 head/contrib/libarchive/libarchive/test/test.h                            =
     |     18 +-
 head/contrib/libarchive/libarchive/test/test_acl_freebsd_nfs4.c           =
     |   1094 +
 head/contrib/libarchive/libarchive/test/test_acl_freebsd_posix1e.c        =
     |    520 +
 head/contrib/libarchive/libarchive/test/test_archive_getdate.c            =
     |     81 +
 head/contrib/libarchive/libarchive/test/test_archive_match_owner.c        =
     |    289 +
 head/contrib/libarchive/libarchive/test/test_archive_match_path.c         =
     |    450 +
 head/contrib/libarchive/libarchive/test/test_archive_match_time.c         =
     |   1358 +
 head/contrib/libarchive/libarchive/test/test_archive_pathmatch.c          =
     |    244 +
 head/contrib/libarchive/libarchive/test/test_archive_string_conversion.c  =
     |    487 +-
 head/contrib/libarchive/libarchive/test/test_compat_zip.c                 =
     |     16 +-
 head/contrib/libarchive/libarchive/test/test_read_disk_directory_traversal=
s.c  |    527 +-
 head/contrib/libarchive/libarchive/test/test_read_format_7zip.c           =
     |     18 +-
 head/contrib/libarchive/libarchive/test/test_read_format_cab.c            =
     |    116 +-
 head/contrib/libarchive/libarchive/test/test_read_format_cpio_svr4_bzip2_r=
pm.c |      2 +-
 head/contrib/libarchive/libarchive/test/test_read_format_cpio_svr4_gzip_rp=
m.c  |      2 +-
 head/contrib/libarchive/libarchive/test/test_read_format_rar.c            =
     |     25 +-
 head/contrib/libarchive/libarchive/test/test_read_format_rar_unicode.rar.u=
u    |      5 +-
 head/contrib/libarchive/libarchive/test/test_read_format_tar_filename.c   =
     |      2 +-
 head/contrib/libarchive/libarchive/test/test_read_pax_truncated.c         =
     |      6 +-
 head/contrib/libarchive/libarchive/test/test_read_position.c              =
     |      4 +-
 head/contrib/libarchive/libarchive/test/test_sparse_basic.c               =
     |     28 +-
 head/contrib/libarchive/libarchive/test/test_write_format_zip.c           =
     |      4 +-
 head/contrib/libarchive/libarchive_fe/err.c                               =
     |      4 +-
 head/contrib/libarchive/libarchive_fe/err.h                               =
     |     14 +-
 head/contrib/libarchive/libarchive_fe/matching.c                          =
     |    281 -
 head/contrib/libarchive/libarchive_fe/matching.h                          =
     |     46 -
 head/contrib/libarchive/libarchive_fe/pathmatch.c                         =
     |    255 -
 head/contrib/libarchive/libarchive_fe/pathmatch.h                         =
     |     42 -
 head/contrib/libarchive/tar/bsdtar.1                                      =
     |      4 +-
 head/contrib/libarchive/tar/bsdtar.c                                      =
     |     87 +-
 head/contrib/libarchive/tar/bsdtar.h                                      =
     |     17 +-
 head/contrib/libarchive/tar/getdate.c                                     =
     |   1037 -
 head/contrib/libarchive/tar/read.c                                        =
     |     82 +-
 head/contrib/libarchive/tar/test/main.c                                   =
     |    323 +-
 head/contrib/libarchive/tar/test/test.h                                   =
     |     14 +-
 head/contrib/libarchive/tar/test/test_basic.c                             =
     |      8 +-
 head/contrib/libarchive/tar/test/test_format_newc.c                       =
     |     64 +
 head/contrib/libarchive/tar/test/test_getdate.c                           =
     |     80 -
 head/contrib/libarchive/tar/test/test_option_nodump.c                     =
     |     68 +
 head/contrib/libarchive/tar/tree.c                                        =
     |    848 -
 head/contrib/libarchive/tar/tree.h                                        =
     |    141 -
 head/contrib/libarchive/tar/write.c                                       =
     |    656 +-
 head/contrib/llvm/tools/clang/lib/Driver/Tools.cpp                        =
     |     12 +-
 head/contrib/opie/libopie/hash.c                                          =
     |     11 +-
 head/contrib/opie/libopie/hashlen.c                                       =
     |     11 +-
 head/etc/devd/usb.conf                                                    =
     |    286 +-
 head/games/fortune/datfiles/fortunes                                      =
     |     11 +-
 head/gnu/usr.bin/groff/tmac/mdoc.local                                    =
     |      4 +-
 head/include/gssapi/gssapi.h                                              =
     |     20 +-
 head/lib/libarchive/Makefile                                              =
     |      7 +-
 head/lib/libarchive/config_freebsd.h                                      =
     |      6 +-
 head/lib/libarchive/test/Makefile                                         =
     |     10 +-
 head/lib/libc/gen/fts.c                                                   =
     |      5 +-
 head/lib/libc/gen/ftw.c                                                   =
     |      5 +-
 head/lib/libc/gen/nftw.c                                                  =
     |     18 +-
 head/lib/libc/locale/Makefile.inc                                         =
     |      7 +-
 head/lib/libc/locale/isgraph.3                                            =
     |     22 +-
 head/lib/libc/locale/islower.3                                            =
     |     21 +-
 head/lib/libc/locale/ispunct.3                                            =
     |     22 +-
 head/lib/libc/locale/isspace.3                                            =
     |     22 +-
 head/lib/libc/locale/nl_langinfo.3                                        =
     |     18 +-
 head/lib/libedit/el.c                                                     =
     |     26 +-
 head/lib/libedit/histedit.h                                               =
     |      9 +-
 head/lib/libedit/term.c                                                   =
     |      4 +-
 head/lib/libpam/modules/pam_krb5/pam_krb5.c                               =
     |     21 +-
 head/lib/libpam/modules/pam_unix/pam_unix.c                               =
     |      6 +-
 head/lib/msun/ld128/s_expl.c                                              =
     |     16 +-
 head/lib/msun/ld80/s_expl.c                                               =
     |     30 +-
 head/lib/msun/src/s_cbrtl.c                                               =
     |     28 +-
 head/libexec/rtld-elf/arm/rtld_start.S                                    =
     |      8 +-
 head/libexec/rtld-elf/map_object.c                                        =
     |      6 +-
 head/rescue/rescue/Makefile                                               =
     |      4 +-
 head/sbin/camcontrol/camcontrol.c                                         =
     |      4 +-
 head/sbin/fsck_ffs/suj.c                                                  =
     |      4 +-
 head/sbin/geom/class/multipath/geom_multipath.c                           =
     |     28 +-
 head/sbin/geom/class/multipath/gmultipath.8                               =
     |     11 +-
 head/sbin/geom/class/sched/gsched.8                                       =
     |     16 +-
 head/sbin/geom/class/virstor/gvirstor.8                                   =
     |     11 +-
 head/sbin/ggate/shared/ggate.h                                            =
     |      6 +-
 head/sbin/ipfw/dummynet.c                                                 =
     |     16 +-
 head/sbin/ipfw/ipfw2.c                                                    =
     |     10 +-
 head/sbin/ipfw/nat.c                                                      =
     |      4 +-
 head/sbin/md5/Makefile                                                    =
     |      8 +-
 head/sbin/md5/md5.1                                                       =
     |     20 +-
 head/sbin/md5/md5.c                                                       =
     |     24 +-
 head/sbin/shutdown/shutdown.c                                             =
     |      8 +-
 head/share/examples/kld/dyn_sysctl/dyn_sysctl.c                           =
     |      8 +-
 head/share/man/man4/Makefile                                              =
     |      3 +-
 head/share/man/man4/ahci.4                                                =
     |     19 +-
 head/share/man/man4/hptiop.4                                              =
     |     54 +-
 head/share/man/man4/netmap.4                                              =
     |     48 +-
 head/share/man/man4/polling.4                                             =
     |      3 +-
 head/share/man/man4/umodem.4                                              =
     |      6 +-
 head/share/man/man4/uplcom.4                                              =
     |      6 +-
 head/share/man/man4/uslcom.4                                              =
     |    142 +-
 head/share/man/man4/vale.4                                                =
     |    131 +
 head/share/man/man5/rc.conf.5                                             =
     |      4 +-
 head/share/misc/bsd-family-tree                                           =
     |      6 +-
 head/share/misc/committers-ports.dot                                      =
     |      5 +-
 head/sys/amd64/amd64/elf_machdep.c                                        =
     |      3 +-
 head/sys/amd64/amd64/fpu.c                                                =
     |      4 +-
 head/sys/amd64/amd64/initcpu.c                                            =
     |     10 +-
 head/sys/amd64/amd64/pmap.c                                               =
     |     97 +-
 head/sys/amd64/include/cpufunc.h                                          =
     |      9 +-
 head/sys/arm/arm/bcopyinout.S                                             =
     |      5 +-
 head/sys/arm/arm/bcopyinout_xscale.S                                      =
     |      4 +-
 head/sys/arm/arm/exception.S                                              =
     |      5 +-
 head/sys/arm/arm/pmap.c                                                   =
     |      4 +-
 head/sys/arm/at91/at91_machdep.c                                          =
     |     34 +-
 head/sys/arm/at91/at91_pio_sam9g45.h                                      =
     |    272 +
 head/sys/arm/at91/at91_pmc.c                                              =
     |     69 +-
 head/sys/arm/at91/at91_pmcreg.h                                           =
     |     20 +-
 head/sys/arm/at91/at91_spi.c                                              =
     |     20 +-
 head/sys/arm/at91/at91sam9g45.c                                           =
     |    177 +
 head/sys/arm/at91/at91sam9g45reg.h                                        =
     |    294 +
 head/sys/arm/at91/at91sam9x25.c                                           =
     |    201 -
 head/sys/arm/at91/at91sam9x25reg.h                                        =
     |    316 -
 head/sys/arm/at91/at91sam9x5.c                                            =
     |    201 +
 head/sys/arm/at91/at91sam9x5reg.h                                         =
     |    315 +
 head/sys/arm/at91/board_sam9260ek.c                                       =
     |     82 +-
 head/sys/arm/at91/board_sn9g45.c                                          =
     |     55 +
 head/sys/arm/at91/files.at91                                              =
     |     13 +-
 head/sys/arm/at91/if_ate.c                                                =
     |     28 +-
 head/sys/arm/at91/std.at91sam9g45                                         =
     |     14 +
 head/sys/arm/at91/std.atmel                                               =
     |      5 +-
 head/sys/arm/at91/std.sam9x25ek                                           =
     |      4 +-
 head/sys/arm/at91/std.sn9g45                                              =
     |     12 +
 head/sys/arm/at91/uart_bus_at91usart.c                                    =
     |      8 +-
 head/sys/arm/conf/ATMEL                                                   =
     |     14 +-
 head/sys/arm/conf/ETHERNUT5                                               =
     |      6 +-
 head/sys/arm/conf/ETHERNUT5.hints                                         =
     |      4 +-
 head/sys/arm/conf/HL201                                                   =
     |      4 +-
 head/sys/arm/conf/KB920X                                                  =
     |      8 +-
 head/sys/arm/conf/QILA9G20                                                =
     |      3 +-
 head/sys/arm/conf/SAM9260EK                                               =
     |     56 +-
 head/sys/arm/conf/SAM9260EK.hints                                         =
     |     71 +-
 head/sys/arm/conf/SAM9G20EK                                               =
     |      3 +-
 head/sys/arm/conf/SAM9X25EK                                               =
     |      5 +-
 head/sys/arm/conf/SN9G45                                                  =
     |    129 +
 head/sys/arm/mv/common.c                                                  =
     |     17 +-
 head/sys/arm/mv/gpio.c                                                    =
     |      5 +-
 head/sys/arm/mv/ic.c                                                      =
     |      6 +-
 head/sys/arm/mv/kirkwood/kirkwood.c                                       =
     |      4 +-
 head/sys/arm/mv/mv_sata.c                                                 =
     |      3 +-
 head/sys/arm/mv/mvreg.h                                                   =
     |      3 +-
 head/sys/boot/common/Makefile.inc                                         =
     |     16 +-
 head/sys/boot/common/disk.c                                               =
     |    918 +-
 head/sys/boot/common/disk.h                                               =
     |     20 +-
 head/sys/boot/common/part.c                                               =
     |    839 +
 head/sys/boot/common/part.h                                               =
     |     82 +
 head/sys/boot/ficl/Makefile                                               =
     |      4 +-
 head/sys/boot/i386/libi386/Makefile                                       =
     |      6 +-
 head/sys/boot/i386/libi386/biosdisk.c                                     =
     |   1223 +-
 head/sys/boot/i386/libi386/devicename.c                                   =
     |     87 +-
 head/sys/boot/i386/libi386/libi386.h                                      =
     |      3 +-
 head/sys/boot/i386/loader/Makefile                                        =
     |      5 +-
 head/sys/boot/i386/loader/main.c                                          =
     |     20 +-
 head/sys/boot/i386/pmbr/pmbr.s                                            =
     |     45 +-
 head/sys/boot/pc98/boot2/boot2.c                                          =
     |     13 +-
 head/sys/boot/pc98/btx/btxldr/btxldr.S                                    =
     |      6 +-
 head/sys/boot/pc98/btx/lib/btxcsu.S                                       =
     |      6 +-
 head/sys/boot/pc98/cdboot/cdboot.S                                        =
     |      6 +-
 head/sys/boot/pc98/libpc98/Makefile                                       =
     |      5 +-
 head/sys/boot/sparc64/loader/main.c                                       =
     |     54 +-
 head/sys/boot/userboot/test/test.c                                        =
     |     30 +-
 head/sys/boot/userboot/userboot.h                                         =
     |      8 +-
 head/sys/boot/userboot/userboot/Makefile                                  =
     |      3 +-
 head/sys/boot/userboot/userboot/bootinfo32.c                              =
     |      4 +-
 head/sys/boot/userboot/userboot/copy.c                                    =
     |      3 +-
 head/sys/boot/userboot/userboot/devicename.c                              =
     |     82 +-
 head/sys/boot/userboot/userboot/main.c                                    =
     |      6 +-
 head/sys/boot/userboot/userboot/userboot_disk.c                           =
     |     85 +-
 head/sys/boot/zfs/Makefile                                                =
     |      4 +-
 head/sys/boot/zfs/zfs.c                                                   =
     |    107 +-
 head/sys/cam/ata/ata_all.h                                                =
     |      3 +-
 head/sys/cam/ata/ata_xpt.c                                                =
     |     14 +-
 head/sys/cam/cam_ccb.h                                                    =
     |      3 +-
 head/sys/cam/cam_periph.c                                                 =
     |      9 +-
 head/sys/cam/cam_xpt.c                                                    =
     |      3 +-
 head/sys/cam/ctl/scsi_ctl.c                                               =
     |    130 +-
 head/sys/cam/scsi/scsi_cd.c                                               =
     |    132 +-
 head/sys/cam/scsi/scsi_da.c                                               =
     |    135 +-
 head/sys/cam/scsi/scsi_enc.c                                              =
     |      4 +-
 head/sys/cam/scsi/scsi_enc_safte.c                                        =
     |      4 +-
 head/sys/cam/scsi/scsi_enc_ses.c                                          =
     |      4 +-
 head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa.c                 =
     |     21 +-
 head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfeature.h        =
     |      2 +-
 head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfeature.c            =
     |      9 +-
 head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c           =
     |      1 +
 head/sys/cddl/contrib/opensolaris/uts/common/sys/fs/zfs.h                 =
     |      1 +
 head/sys/conf/NOTES                                                       =
     |      4 +-
 head/sys/conf/files                                                       =
     |     13 +-
 head/sys/conf/files.powerpc                                               =
     |      3 +-
 head/sys/conf/kern.post.mk                                                =
     |      6 +-
 head/sys/dev/acpica/acpi_cpu.c                                            =
     |     34 +-
 head/sys/dev/agp/agp.c                                                    =
     |      3 +-
 head/sys/dev/agp/agp_i810.c                                               =
     |      3 +-
 head/sys/dev/ahci/ahci.c                                                  =
     |    138 +-
 head/sys/dev/ahci/ahci.h                                                  =
     |     22 +-
 head/sys/dev/ahci/ahciem.c                                                =
     |    600 +
 head/sys/dev/aic7xxx/aic79xx_osm.c                                        =
     |      3 +-
 head/sys/dev/aic7xxx/aic_osm_lib.c                                        =
     |      5 +-
 head/sys/dev/ath/ah_osdep.h                                               =
     |      8 +-
 head/sys/dev/ath/ath_hal/ah.c                                             =
     |      5 +-
 head/sys/dev/ath/ath_hal/ah.h                                             =
     |     21 +-
 head/sys/dev/ath/ath_hal/ah_desc.h                                        =
     |     25 +-
 head/sys/dev/ath/ath_hal/ah_devid.h                                       =
     |     11 +-
 head/sys/dev/ath/ath_hal/ah_internal.h                                    =
     |      3 +-
 head/sys/dev/ath/ath_hal/ar5210/ar5210.h                                  =
     |      5 +-
 head/sys/dev/ath/ath_hal/ar5210/ar5210_attach.c                           =
     |      3 +-
 head/sys/dev/ath/ath_hal/ar5210/ar5210_xmit.c                             =
     |      8 +-
 head/sys/dev/ath/ath_hal/ar5211/ar5211.h                                  =
     |      5 +-
 head/sys/dev/ath/ath_hal/ar5211/ar5211_attach.c                           =
     |      3 +-
 head/sys/dev/ath/ath_hal/ar5211/ar5211_xmit.c                             =
     |      8 +-
 head/sys/dev/ath/ath_hal/ar5212/ar5212.h                                  =
     |      5 +-
 head/sys/dev/ath/ath_hal/ar5212/ar5212_attach.c                           =
     |      3 +-
 head/sys/dev/ath/ath_hal/ar5212/ar5212_xmit.c                             =
     |      8 +-
 head/sys/dev/ath/ath_hal/ar5416/ar5416.h                                  =
     |     10 +-
 head/sys/dev/ath/ath_hal/ar5416/ar5416_attach.c                           =
     |      3 +-
 head/sys/dev/ath/ath_hal/ar5416/ar5416_xmit.c                             =
     |     20 +-
 head/sys/dev/ath/ath_rate/sample/sample.c                                 =
     |     14 +-
 head/sys/dev/ath/if_ath.c                                                 =
     |    183 +-
 head/sys/dev/ath/if_ath_beacon.c                                          =
     |     15 +-
 head/sys/dev/ath/if_ath_misc.h                                            =
     |     11 +-
 head/sys/dev/ath/if_ath_rx.c                                              =
     |      6 +-
 head/sys/dev/ath/if_ath_rx_edma.c                                         =
     |      6 +-
 head/sys/dev/ath/if_ath_tx.c                                              =
     |    249 +-
 head/sys/dev/ath/if_ath_tx.h                                              =
     |     12 +-
 head/sys/dev/ath/if_ath_tx_edma.c                                         =
     |    157 +-
 head/sys/dev/ath/if_ath_tx_ht.c                                           =
     |     28 +-
 head/sys/dev/ath/if_athioctl.h                                            =
     |      3 +-
 head/sys/dev/ath/if_athvar.h                                              =
     |     39 +-
 head/sys/dev/bce/if_bce.c                                                 =
     |      4 +-
 head/sys/dev/cesa/cesa.c                                                  =
     |      3 +-
 head/sys/dev/cxgb/ulp/iw_cxgb/iw_cxgb_provider.c                          =
     |      4 +-
 head/sys/dev/cxgbe/firmware/t4fw_interface.h                              =
     |      4 +-
 head/sys/dev/e1000/if_igb.c                                               =
     |     57 +-
 head/sys/dev/e1000/if_lem.c                                               =
     |    106 +-
 head/sys/dev/esp/ncr53c9x.c                                               =
     |     62 +-
 head/sys/dev/hptiop/hptiop.c                                              =
     |     14 +-
 head/sys/dev/ipmi/ipmi.c                                                  =
     |      9 +-
 head/sys/dev/ipmi/ipmivars.h                                              =
     |      3 +-
 head/sys/dev/isp/isp.c                                                    =
     |    571 +-
 head/sys/dev/isp/isp_freebsd.c                                            =
     |   1873 +-
 head/sys/dev/isp/isp_freebsd.h                                            =
     |    173 +-
 head/sys/dev/isp/isp_library.c                                            =
     |    399 +-
 head/sys/dev/isp/isp_library.h                                            =
     |     10 +-
 head/sys/dev/isp/isp_pci.c                                                =
     |    100 +-
 head/sys/dev/isp/isp_sbus.c                                               =
     |     98 +-
 head/sys/dev/isp/isp_stds.h                                               =
     |     80 +-
 head/sys/dev/isp/isp_target.c                                             =
     |     97 +-
 head/sys/dev/isp/isp_target.h                                             =
     |      3 +-
 head/sys/dev/isp/ispmbox.h                                                =
     |    114 +-
 head/sys/dev/isp/ispvar.h                                                 =
     |     48 +-
 head/sys/dev/ispfw/asm_2300.h                                             =
     |  12615 +++++----
 head/sys/dev/md/md.c                                                      =
     |     29 +-
 head/sys/dev/mge/if_mge.c                                                 =
     |      6 +-
 head/sys/dev/mii/e1000phy.c                                               =
     |      9 +-
 head/sys/dev/mlx/mlxvar.h                                                 =
     |      4 +-
 head/sys/dev/mps/mps.c                                                    =
     |     61 +-
 head/sys/dev/mps/mps_sas.c                                                =
     |      5 +-
 head/sys/dev/mps/mps_table.c                                              =
     |     14 +-
 head/sys/dev/mps/mps_user.c                                               =
     |     32 +-
 head/sys/dev/mps/mpsvar.h                                                 =
     |     10 +-
 head/sys/dev/mvs/mvs_soc.c                                                =
     |      3 +-
 head/sys/dev/netmap/if_em_netmap.h                                        =
     |      4 +-
 head/sys/dev/netmap/if_igb_netmap.h                                       =
     |      4 +-
 head/sys/dev/netmap/ixgbe_netmap.h                                        =
     |      4 +-
 head/sys/dev/netmap/netmap.c                                              =
     |    915 +-
 head/sys/dev/netmap/netmap_kern.h                                         =
     |     94 +-
 head/sys/dev/netmap/netmap_mem2.c                                         =
     |     13 +-
 head/sys/dev/pccbb/pccbb_pci.c                                            =
     |      7 +-
 head/sys/dev/pci/pci_pci.c                                                =
     |      9 +-
 head/sys/dev/puc/puc_cfg.h                                                =
     |      4 +-
 head/sys/dev/puc/pucdata.c                                                =
     |     52 +-
 head/sys/dev/sdhci/sdhci.c                                                =
     |      4 +-
 head/sys/dev/spibus/spi.h                                                 =
     |      5 +-
 head/sys/dev/spibus/spibus.c                                              =
     |      5 +-
 head/sys/dev/usb/controller/at91dci_atmelarm.c                            =
     |      6 +-
 head/sys/dev/usb/controller/ohci_atmelarm.c                               =
     |      3 +-
 head/sys/dev/usb/serial/uftdi.c                                           =
     |    604 +-
 head/sys/dev/usb/serial/uftdi_reg.h                                       =
     |      3 +-
 head/sys/dev/usb/serial/uslcom.c                                          =
     |     76 +-
 head/sys/dev/usb/usbdevs                                                  =
     |    727 +-
 head/sys/dev/wtap/if_wtap.c                                               =
     |     10 +-
 head/sys/fs/fifofs/fifo_vnops.c                                           =
     |     33 +-
 head/sys/fs/nfs/nfs_commonport.c                                          =
     |      3 +-
 head/sys/fs/nfsclient/nfs_clbio.c                                         =
     |     35 +-
 head/sys/fs/nwfs/nwfs_io.c                                                =
     |     35 +-
 head/sys/fs/smbfs/smbfs_io.c                                              =
     |     35 +-
 head/sys/fs/tmpfs/tmpfs_subr.c                                            =
     |      3 +-
 head/sys/fs/tmpfs/tmpfs_vnops.c                                           =
     |      3 +-
 head/sys/geom/gate/g_gate.c                                               =
     |    156 +-
 head/sys/geom/geom.h                                                      =
     |      8 +-
 head/sys/geom/geom_dev.c                                                  =
     |     22 +-
 head/sys/geom/geom_disk.c                                                 =
     |     28 +-
 head/sys/geom/geom_disk.h                                                 =
     |      4 +-
 head/sys/geom/geom_event.c                                                =
     |      8 +-
 head/sys/geom/geom_io.c                                                   =
     |     10 +-
 head/sys/geom/geom_slice.c                                                =
     |      3 +-
 head/sys/geom/geom_subr.c                                                 =
     |     97 +-
 head/sys/geom/geom_vfs.c                                                  =
     |      2 +-
 head/sys/geom/multipath/g_multipath.c                                     =
     |     76 +-
 head/sys/geom/part/g_part.c                                               =
     |      3 +-
 head/sys/geom/virstor/g_virstor.c                                         =
     |      8 +-
 head/sys/gnu/fs/reiserfs/reiserfs_vfsops.c                                =
     |      6 +-
 head/sys/i386/i386/machdep.c                                              =
     |      4 +-
 head/sys/i386/i386/pmap.c                                                 =
     |      8 +-
 head/sys/i386/i386/trap.c                                                 =
     |     20 +-
 head/sys/i386/i386/vm86.c                                                 =
     |      8 +-
 head/sys/i386/i386/vm_machdep.c                                           =
     |      6 +-
 head/sys/i386/include/cpufunc.h                                           =
     |      9 +-
 head/sys/i386/include/pcpu.h                                              =
     |     24 +-
 head/sys/i386/isa/npx.c                                                   =
     |     33 +-
 head/sys/i386/linux/linux_proto.h                                         =
     |      6 +-
 head/sys/i386/linux/linux_syscall.h                                       =
     |      4 +-
 head/sys/i386/linux/linux_syscalls.c                                      =
     |      4 +-
 head/sys/i386/linux/linux_sysent.c                                        =
     |      4 +-
 head/sys/i386/linux/linux_systrace_args.c                                 =
     |      6 +-
 head/sys/i386/linux/syscalls.master                                       =
     |      4 +-
 head/sys/i386/xen/pmap.c                                                  =
     |      4 +-
 head/sys/ia64/ia64/pmap.c                                                 =
     |      3 +-
 head/sys/kern/kern_clocksource.c                                          =
     |     85 +-
 head/sys/kern/kern_descrip.c                                              =
     |     10 +-
 head/sys/kern/kern_intr.c                                                 =
     |     54 +-
 head/sys/kern/kern_ktr.c                                                  =
     |      6 +-
 head/sys/kern/kern_proc.c                                                 =
     |      3 +-
 head/sys/kern/sched_4bsd.c                                                =
     |     81 +-
 head/sys/kern/sched_ule.c                                                 =
     |     15 +-
 head/sys/kern/subr_uio.c                                                  =
     |      4 +-
 head/sys/kern/sys_pipe.c                                                  =
     |     10 +-
 head/sys/kern/sys_process.c                                               =
     |      3 +-
 head/sys/kern/uipc_syscalls.c                                             =
     |      3 +-
 head/sys/kern/vfs_syscalls.c                                              =
     |     46 +-
 head/sys/kern/vfs_vnops.c                                                 =
     |     62 +-
 head/sys/mips/include/pmap.h                                              =
     |      4 +-
 head/sys/mips/mips/pmap.c                                                 =
     |    121 +-
 head/sys/mips/mips/trap.c                                                 =
     |      4 +-
 head/sys/modules/ahci/Makefile                                            =
     |      4 +-
 head/sys/modules/cam/Makefile                                             =
     |      3 +-
 head/sys/net/bpf_zerocopy.c                                               =
     |      3 +-
 head/sys/net/flowtable.c                                                  =
     |      6 +-
 head/sys/net/if_llatbl.c                                                  =
     |     80 +-
 head/sys/net/if_llatbl.h                                                  =
     |     40 +-
 head/sys/net/if_loop.c                                                    =
     |     30 +-
 head/sys/net/if_var.h                                                     =
     |      4 +-
 head/sys/net80211/ieee80211.h                                             =
     |      4 +-
 head/sys/net80211/ieee80211_hwmp.c                                        =
     |     25 +-
 head/sys/netgraph/ng_ether.c                                              =
     |      4 +-
 head/sys/netgraph/ng_pptpgre.c                                            =
     |      4 +-
 head/sys/netinet/if_ether.c                                               =
     |    128 +-
 head/sys/netinet/in.c                                                     =
     |    103 +-
 head/sys/netinet/in_cksum.c                                               =
     |      4 +-
 head/sys/netinet/ip_dummynet.h                                            =
     |      6 +-
 head/sys/netinet/ipfw/dummynet.txt                                        =
     |      4 +-
 head/sys/netinet/ipfw/ip_dn_io.c                                          =
     |     39 +-
 head/sys/netinet/ipfw/ip_dummynet.c                                       =
     |      9 +-
 head/sys/netinet/ipfw/ip_fw2.c                                            =
     |      4 +-
 head/sys/netinet/ipfw/ip_fw_dynamic.c                                     =
     |     20 +-
 head/sys/netinet/ipfw/ip_fw_log.c                                         =
     |      8 +-
 head/sys/netinet/sctp_bsd_addr.c                                          =
     |     30 +-
 head/sys/netinet/sctp_input.c                                             =
     |      4 +-
 head/sys/netinet/sctp_pcb.c                                               =
     |     11 +-
 head/sys/netinet/sctp_uio.h                                               =
     |      6 +-
 head/sys/netinet/tcp_timer.c                                              =
     |     49 +-
 head/sys/netinet6/in6.c                                                   =
     |    105 +-
 head/sys/netinet6/ip6_ipsec.c                                             =
     |     10 +-
 head/sys/netinet6/ip6_output.c                                            =
     |     23 +-
 head/sys/nfsclient/nfs_bio.c                                              =
     |     35 +-
 head/sys/ofed/include/linux/gfp.h                                         =
     |      1 +
 head/sys/powerpc/conf/GENERIC                                             =
     |      3 +-
 head/sys/powerpc/conf/GENERIC64                                           =
     |      3 +-
 head/sys/powerpc/powermac/nvbl.c                                          =
     |    197 +
 head/sys/powerpc/powerpc/busdma_machdep.c                                 =
     |     43 +-
 head/sys/sparc64/include/pmap.h                                           =
     |     10 +-
 head/sys/sparc64/sparc64/pmap.c                                           =
     |     10 +-
 head/sys/sys/bus.h                                                        =
     |      4 +-
 head/sys/sys/fcntl.h                                                      =
     |      5 +-
 head/sys/sys/pipe.h                                                       =
     |      6 +-
 head/sys/sys/refcount.h                                                   =
     |      4 +-
 head/sys/ufs/ffs/ffs_vnops.c                                              =
     |      3 +-
 head/sys/vm/device_pager.c                                                =
     |      3 +-
 head/sys/vm/sg_pager.c                                                    =
     |      3 +-
 head/sys/vm/vm_page.c                                                     =
     |     92 +-
 head/sys/vm/vm_page.h                                                     =
     |     90 +-
 head/sys/vm/vm_pageout.c                                                  =
     |     79 +-
 head/sys/vm/vnode_pager.c                                                 =
     |     36 +-
 head/sys/x86/x86/busdma_machdep.c                                         =
     |     45 +-
 head/sys/x86/x86/local_apic.c                                             =
     |     45 +-
 head/sys/x86/x86/tsc.c                                                    =
     |    107 +-
 head/tools/regression/lib/libc/gen/Makefile                               =
     |      4 +-
 head/tools/regression/lib/libc/gen/test-ftw.c                             =
     |    141 +
 head/tools/tools/ath/ath_prom_read/Makefile                               =
     |      3 +-
 head/tools/tools/ath/athaggrstats/Makefile                                =
     |      3 +-
 head/tools/tools/ath/athratestats/main.c                                  =
     |    148 +-
 head/tools/tools/ath/athstats/Makefile                                    =
     |      3 +-
 head/tools/tools/ath/common/ah_osdep.h                                    =
     |      3 +-
 head/tools/tools/bootparttest/Makefile                                    =
     |     19 +
 head/tools/tools/bootparttest/bootparttest.c                              =
     |    172 +
 head/tools/tools/bootparttest/malloc.c                                    =
     |     44 +
 head/tools/tools/netmap/pkt-gen.c                                         =
     |     15 +-
 head/usr.bin/calendar/calendars/calendar.freebsd                          =
     |      3 +-
 head/usr.bin/cpio/Makefile                                                =
     |      6 +-
 head/usr.bin/cpio/test/Makefile                                           =
     |     13 +-
 head/usr.bin/du/du.c                                                      =
     |      4 +-
 head/usr.bin/find/extern.h                                                =
     |      6 +-
 head/usr.bin/find/find.1                                                  =
     |     12 +-
 head/usr.bin/find/find.c                                                  =
     |     10 +-
 head/usr.bin/find/function.c                                              =
     |     21 +-
 head/usr.bin/find/main.c                                                  =
     |      3 +-
 head/usr.bin/find/option.c                                                =
     |      6 +-
 head/usr.bin/make/var.c                                                   =
     |      4 +-
 head/usr.bin/script/script.1                                              =
     |     28 +-
 head/usr.bin/script/script.c                                              =
     |    220 +-
 head/usr.bin/tar/Makefile                                                 =
     |     10 +-
 head/usr.bin/tar/test/Makefile                                            =
     |     10 +-
 head/usr.sbin/ctladm/ctladm.c                                             =
     |      4 +-
 head/usr.sbin/portsnap/portsnap/portsnap.8                                =
     |     10 +-
 head/usr.sbin/portsnap/portsnap/portsnap.sh                               =
     |     22 +-
 633 files changed, 35095 insertions(+), 18673 deletions(-)

diffs (78903 lines):

diff -r 6b68d37bb4dc -r 2d798fd21d78 head/Makefile.inc1
--- a/head/Makefile.inc1	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/Makefile.inc1	Fri Aug 10 14:19:25 2012 +0300
@@ -1,5 +1,5 @@
 #
-# $FreeBSD: head/Makefile.inc1 238051 2012-07-03 06:41:00Z obrien $
+# $FreeBSD: head/Makefile.inc1 238926 2012-07-30 23:14:24Z mm $
 #
 # Make command line options:
 #	-DNO_CLEANDIR run ${MAKE} clean, instead of ${MAKE} cleandir
@@ -1277,7 +1277,7 @@
 		lib/ncurses/ncurses lib/ncurses/ncursesw \
 		lib/libopie lib/libpam ${_lib_libthr} \
 		lib/libradius lib/libsbuf lib/libtacplus \
-		${_cddl_lib_libumem} \
+		${_cddl_lib_libumem} ${_cddl_lib_libnvpair} \
 		lib/libutil ${_lib_libypclnt} lib/libz lib/msun \
 		${_secure_lib_libcrypto} ${_secure_lib_libssh} \
 		${_secure_lib_libssl}
@@ -1301,6 +1301,7 @@
=20
 .if ${MK_CDDL} !=3D "no"
 _cddl_lib_libumem=3D cddl/lib/libumem
+_cddl_lib_libnvpair=3D cddl/lib/libnvpair
 _cddl_lib=3D cddl/lib
 .endif
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/UPDATING
--- a/head/UPDATING	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/UPDATING	Fri Aug 10 14:19:25 2012 +0300
@@ -24,6 +24,11 @@
 	disable the most expensive debugging functionality run
 	"ln -s 'abort:false,junk:false' /etc/malloc.conf".)
=20
+20120727:
+	The sparc64 ZFS loader has been changed to no longer try to auto-
+	detect ZFS providers based on diskN aliases but now requires these
+	to be explicitly listed in the OFW boot-device environment variable.=20
+
 20120712:
 	The OpenSSL has been upgraded to 1.0.1c.  Any binaries requiring
 	libcrypto.so.6 or libssl.so.6 must be recompiled.  Also, there are
@@ -1615,4 +1620,4 @@
 Contact Warner Losh if you have any questions about your use of
 this document.
=20
-$FreeBSD: head/UPDATING 238405 2012-07-12 19:30:53Z jkim $
+$FreeBSD: head/UPDATING 238851 2012-07-27 18:23:11Z marius $
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/bin/sh/jobs.c
--- a/head/bin/sh/jobs.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/bin/sh/jobs.c	Fri Aug 10 14:19:25 2012 +0300
@@ -36,7 +36,7 @@
 #endif
 #endif /* not lint */
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/bin/sh/jobs.c 238470 2012-07-15 10:49:16Z jilles =
$");
+__FBSDID("$FreeBSD: head/bin/sh/jobs.c 238888 2012-07-29 18:04:38Z jilles =
$");
=20
 #include <sys/ioctl.h>
 #include <sys/param.h>
@@ -87,6 +87,10 @@
 volatile sig_atomic_t breakwaitcmd =3D 0;	/* should wait be terminated? */
 static int ttyfd =3D -1;
=20
+/* mode flags for dowait */
+#define DOWAIT_BLOCK	0x1 /* wait until a child exits */
+#define DOWAIT_SIG	0x2 /* if DOWAIT_BLOCK, abort on signals */
+
 #if JOBS
 static void restartjob(struct job *);
 #endif
@@ -94,7 +98,6 @@
 static struct job *getjob(char *);
 pid_t getjobpgrp(char *);
 static pid_t dowait(int, struct job *);
-static pid_t waitproc(int, int *);
 static void checkzombies(void);
 static void cmdtxt(union node *);
 static void cmdputs(const char *);
@@ -519,7 +522,7 @@
 					break;
 			}
 		}
-	} while (dowait(1, (struct job *)NULL) !=3D -1);
+	} while (dowait(DOWAIT_BLOCK | DOWAIT_SIG, (struct job *)NULL) !=3D -1);
 	in_waitcmd--;
=20
 	return 0;
@@ -966,7 +969,7 @@
 	INTOFF;
 	TRACE(("waitforjob(%%%td) called\n", jp - jobtab + 1));
 	while (jp->state =3D=3D 0)
-		if (dowait(1, jp) =3D=3D -1)
+		if (dowait(DOWAIT_BLOCK | (Tflag ? DOWAIT_SIG : 0), jp) =3D=3D -1)
 			dotrap();
 #if JOBS
 	if (jp->jobctl) {
@@ -1004,14 +1007,20 @@
 }
=20
=20
+static void
+dummy_handler(int sig)
+{
+}
=20
 /*
  * Wait for a process to terminate.
  */
=20
 static pid_t
-dowait(int block, struct job *job)
+dowait(int mode, struct job *job)
 {
+	struct sigaction sa, osa;
+	sigset_t mask, omask;
 	pid_t pid;
 	int status;
 	struct procstat *sp;
@@ -1021,15 +1030,49 @@
 	int stopped;
 	int sig;
 	int coredump;
+	int wflags;
+	int restore_sigchld;
=20
 	TRACE(("dowait(%d) called\n", block));
+	restore_sigchld =3D 0;
+	if ((mode & DOWAIT_SIG) !=3D 0) {
+		sigfillset(&mask);
+		sigprocmask(SIG_BLOCK, &mask, &omask);
+		INTOFF;
+		if (!issigchldtrapped()) {
+			restore_sigchld =3D 1;
+			sa.sa_handler =3D dummy_handler;
+			sa.sa_flags =3D 0;
+			sigemptyset(&sa.sa_mask);
+			sigaction(SIGCHLD, &sa, &osa);
+		}
+	}
 	do {
-		pid =3D waitproc(block, &status);
+#if JOBS
+		if (iflag)
+			wflags =3D WUNTRACED | WCONTINUED;
+		else
+#endif
+			wflags =3D 0;
+		if ((mode & (DOWAIT_BLOCK | DOWAIT_SIG)) !=3D DOWAIT_BLOCK)
+			wflags |=3D WNOHANG;
+		pid =3D wait3(&status, wflags, (struct rusage *)NULL);
 		TRACE(("wait returns %d, status=3D%d\n", (int)pid, status));
-	} while ((pid =3D=3D -1 && errno =3D=3D EINTR && breakwaitcmd =3D=3D 0) ||
-		 (pid > 0 && WIFSTOPPED(status) && !iflag));
+		if (pid =3D=3D 0 && (mode & DOWAIT_SIG) !=3D 0) {
+			sigsuspend(&omask);
+			pid =3D -1;
+			if (int_pending())
+				break;
+		}
+	} while (pid =3D=3D -1 && errno =3D=3D EINTR && breakwaitcmd =3D=3D 0);
 	if (pid =3D=3D -1 && errno =3D=3D ECHILD && job !=3D NULL)
 		job->state =3D JOBDONE;
+	if ((mode & DOWAIT_SIG) !=3D 0) {
+		if (restore_sigchld)
+			sigaction(SIGCHLD, &osa, NULL);
+		sigprocmask(SIG_SETMASK, &omask, NULL);
+		INTON;
+	}
 	if (breakwaitcmd !=3D 0) {
 		breakwaitcmd =3D 0;
 		if (pid <=3D 0)
@@ -1050,7 +1093,11 @@
 					TRACE(("Changing status of proc %d from 0x%x to 0x%x\n",
 						   (int)pid, sp->status,
 						   status));
-					sp->status =3D status;
+					if (WIFCONTINUED(status)) {
+						sp->status =3D -1;
+						jp->state =3D 0;
+					} else
+						sp->status =3D status;
 					thisjob =3D jp;
 				}
 				if (sp->status =3D=3D -1)
@@ -1108,26 +1155,6 @@
=20
=20
 /*
- * Do a wait system call.  If job control is compiled in, we accept
- * stopped processes.  If block is zero, we return a value of zero
- * rather than blocking.
- */
-static pid_t
-waitproc(int block, int *status)
-{
-	int flags;
-
-#if JOBS
-	flags =3D WUNTRACED;
-#else
-	flags =3D 0;
-#endif
-	if (block =3D=3D 0)
-		flags |=3D WNOHANG;
-	return wait3(status, flags, (struct rusage *)NULL);
-}
-
-/*
  * return 1 if there are stopped jobs, otherwise 0
  */
 int job_warning =3D 0;
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/bin/sh/trap.c
--- a/head/bin/sh/trap.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/bin/sh/trap.c	Fri Aug 10 14:19:25 2012 +0300
@@ -36,7 +36,7 @@
 #endif
 #endif /* not lint */
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/bin/sh/trap.c 238477 2012-07-15 11:18:52Z jilles =
$");
+__FBSDID("$FreeBSD: head/bin/sh/trap.c 238888 2012-07-29 18:04:38Z jilles =
$");
=20
 #include <signal.h>
 #include <unistd.h>
@@ -368,6 +368,14 @@
 }
=20
=20
+int
+issigchldtrapped(void)
+{
+
+	return (trap[SIGCHLD] !=3D NULL && *trap[SIGCHLD] !=3D '\0');
+}
+
+
 /*
  * Signal handler.
  */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/bin/sh/trap.h
--- a/head/bin/sh/trap.h	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/bin/sh/trap.h	Fri Aug 10 14:19:25 2012 +0300
@@ -30,7 +30,7 @@
  * SUCH DAMAGE.
  *
  *	@(#)trap.h	8.3 (Berkeley) 6/5/95
- * $FreeBSD: head/bin/sh/trap.h 223060 2011-06-13 21:03:27Z jilles $
+ * $FreeBSD: head/bin/sh/trap.h 238888 2012-07-29 18:04:38Z jilles $
  */
=20
 extern int pendingsigs;
@@ -41,6 +41,7 @@
 int have_traps(void);
 void setsignal(int);
 void ignoresig(int);
+int issigchldtrapped(void);
 void onsig(int);
 void dotrap(void);
 void setinteractive(int);
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/cddl/contrib/opensolaris/cmd/dtra=
ce/dtrace.c
--- a/head/cddl/contrib/opensolaris/cmd/dtrace/dtrace.c	Mon Jul 30 11:44:18=
 2012 +0300
+++ b/head/cddl/contrib/opensolaris/cmd/dtrace/dtrace.c	Fri Aug 10 14:19:25=
 2012 +0300
@@ -70,8 +70,6 @@
 #define	E_ERROR		1
 #define	E_USAGE		2
=20
-#define IMPATIENT_LIMIT	2
-
 static const char DTRACE_OPTSTR[] =3D
 	"3:6:aAb:Bc:CD:ef:FGhHi:I:lL:m:n:o:p:P:qs:SU:vVwx:X:Z";
=20
@@ -1204,7 +1202,7 @@
 	if (!g_intr)
 		g_newline =3D 1;
=20
-	if (g_intr++ > IMPATIENT_LIMIT)
+	if (g_intr++)
 		g_impatient =3D 1;
 }
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/cddl/contrib/opensolaris/cmd/zpoo=
l/zpool.8
--- a/head/cddl/contrib/opensolaris/cmd/zpool/zpool.8	Mon Jul 30 11:44:18 2=
012 +0300
+++ b/head/cddl/contrib/opensolaris/cmd/zpool/zpool.8	Fri Aug 10 14:19:25 2=
012 +0300
@@ -22,7 +22,7 @@
 .\" Copyright (c) 2011, Justin T. Gibbs <gibbs at FreeBSD.org>
 .\" Copyright (c) 2012 by Delphix. All Rights Reserved.
 .\"
-.\" $FreeBSD: head/cddl/contrib/opensolaris/cmd/zpool/zpool.8 236960 2012-=
06-12 14:40:19Z mm $
+.\" $FreeBSD: head/cddl/contrib/opensolaris/cmd/zpool/zpool.8 238926 2012-=
07-30 23:14:24Z mm $
 .\"
 .Dd November 28, 2011
 .Dt ZPOOL 8
@@ -1636,21 +1636,22 @@
 .Op Fl v
 .Xc
 .Pp
-Displays all pools formatted using a different
+Displays pools which do not have all supported features enabled and pools
+formatted using a legacy
 .Tn ZFS
-pool on-disk version. Older versions can continue to be used, but some
-features may not be available. These pools can be upgraded using
-.Qq Nm Cm upgrade Fl a .
-Pools that are formatted with a more recent version are also displayed,
-although these pools will be inaccessible on the system.
+version number.
+These pools can continue to be used, but some features may not be availabl=
e.
+Use
+.Nm Cm upgrade Fl a
+to enable all features on all pools.
 .Bl -tag -width indent
 .It Fl v
-Displays
+Displays legacy
 .Tn ZFS
-pool versions supported by the current software. The current
-.Tn ZFS
-pool version and all previous supported versions are displayed, along
-with an explanation of the features provided with each version.
+versions supported by the current software.
+See
+.Xr zpool-features.5
+for a description of feature flags features supported by the current softw=
are.
 .El
 .It Xo
 .Nm
@@ -1659,18 +1660,22 @@
 .Fl a | Ar pool ...
 .Xc
 .Pp
-Upgrades the given pool to the latest on-disk pool version. Once this is d=
one,
-the pool will no longer be accessible on systems running older versions of=
 the
-software.
+Enables all supported features on the given pool.
+Once this is done, the pool will no longer be accessible on systems that do
+not support feature flags.
+See
+.Xr zpool-features.5
+for details on compatability with system sthat support feature flags, but =
do
+not support all features enabled on the pool.
 .Bl -tag -width indent
 .It Fl a
-Upgrades all pools.
+Enables all supported features on all pools.
 .It Fl V Ar version
-Upgrade to the specified version. If the
+Upgrade to the specified legacy version. If the
 .Fl V
-flag is not specified, the pool is upgraded to the most recent version. Th=
is
-option can only be used to increase the version number, and only up to the=
 most
-recent version supported by this software.
+flag is specified, no features will be enabled on the pool.
+This option can only be used to increase version number up to the last
+supported legacy version number.
 .El
 .El
 .Sh EXAMPLES
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/cddl/contrib/opensolaris/cmd/zpoo=
l/zpool_main.c
--- a/head/cddl/contrib/opensolaris/cmd/zpool/zpool_main.c	Mon Jul 30 11:44=
:18 2012 +0300
+++ b/head/cddl/contrib/opensolaris/cmd/zpool/zpool_main.c	Fri Aug 10 14:19=
:25 2012 +0300
@@ -389,6 +389,18 @@
 	}
 }
=20
+static boolean_t
+prop_list_contains_feature(nvlist_t *proplist)
+{
+	nvpair_t *nvp;
+	for (nvp =3D nvlist_next_nvpair(proplist, NULL); NULL !=3D nvp;
+	    nvp =3D nvlist_next_nvpair(proplist, nvp)) {
+		if (zpool_prop_feature(nvpair_name(nvp)))
+			return (B_TRUE);
+	}
+	return (B_FALSE);
+}
+
 /*
  * Add a property pair (name, string-value) into a property nvlist.
  */
@@ -412,12 +424,30 @@
 	proplist =3D *props;
=20
 	if (poolprop) {
+		const char *vname =3D zpool_prop_to_name(ZPOOL_PROP_VERSION);
+
 		if ((prop =3D zpool_name_to_prop(propname)) =3D=3D ZPROP_INVAL &&
 		    !zpool_prop_feature(propname)) {
 			(void) fprintf(stderr, gettext("property '%s' is "
 			    "not a valid pool property\n"), propname);
 			return (2);
 		}
+
+		/*
+		 * feature@ properties and version should not be specified
+		 * at the same time.
+		 */
+		if ((prop =3D=3D ZPROP_INVAL && zpool_prop_feature(propname) &&
+		    nvlist_exists(proplist, vname)) ||
+		    (prop =3D=3D ZPOOL_PROP_VERSION &&
+		    prop_list_contains_feature(proplist))) {
+			(void) fprintf(stderr, gettext("'feature@' and "
+			    "'version' properties cannot be specified "
+			    "together\n"));
+			return (2);
+		}
+
+
 		if (zpool_prop_feature(propname))
 			normnm =3D propname;
 		else
@@ -1583,8 +1613,8 @@
 		break;
=20
 	case ZPOOL_STATUS_VERSION_OLDER:
-		(void) printf(gettext(" status: The pool is formatted using an "
-		    "older on-disk version.\n"));
+		(void) printf(gettext(" status: The pool is formatted using a "
+		    "legacy on-disk version.\n"));
 		break;
=20
 	case ZPOOL_STATUS_VERSION_NEWER:
@@ -1592,6 +1622,11 @@
 		    "incompatible version.\n"));
 		break;
=20
+	case ZPOOL_STATUS_FEAT_DISABLED:
+		(void) printf(gettext(" status: Some supported features are "
+		    "not enabled on the pool.\n"));
+		break;
+
 	case ZPOOL_STATUS_UNSUP_FEAT_READ:
 		(void) printf(gettext("status: The pool uses the following "
 		    "feature(s) not supported on this sytem:\n"));
@@ -1638,19 +1673,21 @@
 	 * Print out an action according to the overall state of the pool.
 	 */
 	if (vs->vs_state =3D=3D VDEV_STATE_HEALTHY) {
-		if (reason =3D=3D ZPOOL_STATUS_VERSION_OLDER)
+		if (reason =3D=3D ZPOOL_STATUS_VERSION_OLDER ||
+		    reason =3D=3D ZPOOL_STATUS_FEAT_DISABLED) {
 			(void) printf(gettext(" action: The pool can be "
 			    "imported using its name or numeric identifier, "
 			    "though\n\tsome features will not be available "
 			    "without an explicit 'zpool upgrade'.\n"));
-		else if (reason =3D=3D ZPOOL_STATUS_HOSTID_MISMATCH)
+		} else if (reason =3D=3D ZPOOL_STATUS_HOSTID_MISMATCH) {
 			(void) printf(gettext(" action: The pool can be "
 			    "imported using its name or numeric "
 			    "identifier and\n\tthe '-f' flag.\n"));
-		else
+		} else {
 			(void) printf(gettext(" action: The pool can be "
 			    "imported using its name or numeric "
 			    "identifier.\n"));
+		}
 	} else if (vs->vs_state =3D=3D VDEV_STATE_DEGRADED) {
 		(void) printf(gettext(" action: The pool can be imported "
 		    "despite missing or damaged devices.  The\n\tfault "
@@ -4108,12 +4145,13 @@
 		break;
=20
 	case ZPOOL_STATUS_VERSION_OLDER:
-		(void) printf(gettext("status: The pool is formatted using an "
-		    "older on-disk format.  The pool can\n\tstill be used, but "
-		    "some features are unavailable.\n"));
+		(void) printf(gettext("status: The pool is formatted using a "
+		    "legacy on-disk format.  The pool can\n\tstill be used, "
+		    "but some features are unavailable.\n"));
 		(void) printf(gettext("action: Upgrade the pool using 'zpool "
 		    "upgrade'.  Once this is done, the\n\tpool will no longer "
-		    "be accessible on older software versions.\n"));
+		    "be accessible on software that does not support feature\n"
+		    "\tflags.\n"));
 		break;
=20
 	case ZPOOL_STATUS_VERSION_NEWER:
@@ -4125,6 +4163,16 @@
 		    "backup.\n"));
 		break;
=20
+	case ZPOOL_STATUS_FEAT_DISABLED:
+		(void) printf(gettext("status: Some supported features are not "
+		    "enabled on the pool. The pool can\n\tstill be used, but "
+		    "some features are unavailable.\n"));
+		(void) printf(gettext("action: Enable all features using "
+		    "'zpool upgrade'. Once this is done,\n\tthe pool may no "
+		    "longer be accessible by software that does not support\n\t"
+		    "the features. See zpool-features(5) for details.\n"));
+		break;
+
 	case ZPOOL_STATUS_UNSUP_FEAT_READ:
 		(void) printf(gettext("status: The pool cannot be accessed on "
 		    "this system because it uses the\n\tfollowing feature(s) "
@@ -4354,15 +4402,14 @@
 }
=20
 typedef struct upgrade_cbdata {
-	int	cb_all;
 	int	cb_first;
-	int	cb_newer;
 	char	cb_poolname[ZPOOL_MAXNAMELEN];
 	int	cb_argc;
 	uint64_t cb_version;
 	char	**cb_argv;
 } upgrade_cbdata_t;
=20
+#ifdef __FreeBSD__
 static int
 is_root_pool(zpool_handle_t *zhp)
 {
@@ -4388,56 +4435,161 @@
 	return (poolname !=3D NULL && strcmp(poolname, zpool_get_name(zhp)) =3D=
=3D 0);
 }
=20
+static void
+root_pool_upgrade_check(zpool_handle_t *zhp, char *poolname, int size) {
+
+	if (poolname[0] =3D=3D '\0' && is_root_pool(zhp))
+		(void) strlcpy(poolname, zpool_get_name(zhp), size);
+}
+#endif	/* FreeBSD */
+
+static int
+upgrade_version(zpool_handle_t *zhp, uint64_t version)
+{
+	int ret;
+	nvlist_t *config;
+	uint64_t oldversion;
+
+	config =3D zpool_get_config(zhp, NULL);
+	verify(nvlist_lookup_uint64(config, ZPOOL_CONFIG_VERSION,
+	    &oldversion) =3D=3D 0);
+
+	assert(SPA_VERSION_IS_SUPPORTED(oldversion));
+	assert(oldversion < version);
+
+	ret =3D zpool_upgrade(zhp, version);
+	if (ret !=3D 0)
+		return (ret);
+
+	if (version >=3D SPA_VERSION_FEATURES) {
+		(void) printf(gettext("Successfully upgraded "
+		    "'%s' from version %llu to feature flags.\n"),
+		    zpool_get_name(zhp), oldversion);
+	} else {
+		(void) printf(gettext("Successfully upgraded "
+		    "'%s' from version %llu to version %llu.\n"),
+		    zpool_get_name(zhp), oldversion, version);
+	}
+
+	return (0);
+}
+
+static int
+upgrade_enable_all(zpool_handle_t *zhp, int *countp)
+{
+	int i, ret, count;
+	boolean_t firstff =3D B_TRUE;
+	nvlist_t *enabled =3D zpool_get_features(zhp);
+
+	count =3D 0;
+	for (i =3D 0; i < SPA_FEATURES; i++) {
+		const char *fname =3D spa_feature_table[i].fi_uname;
+		const char *fguid =3D spa_feature_table[i].fi_guid;
+		if (!nvlist_exists(enabled, fguid)) {
+			char *propname;
+			verify(-1 !=3D asprintf(&propname, "feature@%s", fname));
+			ret =3D zpool_set_prop(zhp, propname,
+			    ZFS_FEATURE_ENABLED);
+			if (ret !=3D 0) {
+				free(propname);
+				return (ret);
+			}
+			count++;
+
+			if (firstff) {
+				(void) printf(gettext("Enabled the "
+				    "following features on '%s':\n"),
+				    zpool_get_name(zhp));
+				firstff =3D B_FALSE;
+			}
+			(void) printf(gettext("  %s\n"), fname);
+			free(propname);
+		}
+	}
+
+	if (countp !=3D NULL)
+		*countp =3D count;
+	return (0);
+}
+
 static int
 upgrade_cb(zpool_handle_t *zhp, void *arg)
 {
 	upgrade_cbdata_t *cbp =3D arg;
 	nvlist_t *config;
 	uint64_t version;
-	int ret =3D 0;
+	boolean_t printnl =3D B_FALSE;
+	int ret;
=20
 	config =3D zpool_get_config(zhp, NULL);
 	verify(nvlist_lookup_uint64(config, ZPOOL_CONFIG_VERSION,
 	    &version) =3D=3D 0);
=20
-	if (!cbp->cb_newer && SPA_VERSION_IS_SUPPORTED(version) &&
-	    version !=3D SPA_VERSION) {
-		if (!cbp->cb_all) {
-			if (cbp->cb_first) {
-				(void) printf(gettext("The following pools are "
-				    "out of date, and can be upgraded.  After "
-				    "being\nupgraded, these pools will no "
-				    "longer be accessible by older software "
-				    "versions.\n\n"));
-				(void) printf(gettext("VER  POOL\n"));
-				(void) printf(gettext("---  ------------\n"));
-				cbp->cb_first =3D B_FALSE;
-			}
-
-			(void) printf("%2llu   %s\n", (u_longlong_t)version,
-			    zpool_get_name(zhp));
-		} else {
+	assert(SPA_VERSION_IS_SUPPORTED(version));
+
+	if (version < cbp->cb_version) {
+		cbp->cb_first =3D B_FALSE;
+		ret =3D upgrade_version(zhp, cbp->cb_version);
+		if (ret !=3D 0)
+			return (ret);
+#ifdef __FreeBSD__
+		root_pool_upgrade_check(zhp, cbp->cb_poolname,
+		    sizeof(cbp->cb_poolname));
+#endif	/* ___FreeBSD__ */
+		printnl =3D B_TRUE;
+
+#ifdef illumos
+		/*
+		 * If they did "zpool upgrade -a", then we could
+		 * be doing ioctls to different pools.  We need
+		 * to log this history once to each pool, and bypass
+		 * the normal history logging that happens in main().
+		 */
+		(void) zpool_log_history(g_zfs, history_str);
+		log_history =3D B_FALSE;
+#endif
+	}
+
+	if (cbp->cb_version >=3D SPA_VERSION_FEATURES) {
+		int count;
+		ret =3D upgrade_enable_all(zhp, &count);
+		if (ret !=3D 0)
+			return (ret);
+
+		if (count > 0) {
 			cbp->cb_first =3D B_FALSE;
-			ret =3D zpool_upgrade(zhp, cbp->cb_version);
-			if (!ret) {
-				(void) printf(gettext("Successfully upgraded "
-				    "'%s'\n\n"), zpool_get_name(zhp));
-				if (cbp->cb_poolname[0] =3D=3D '\0' &&
-				    is_root_pool(zhp)) {
-					(void) strlcpy(cbp->cb_poolname,
-					    zpool_get_name(zhp),
-					    sizeof(cbp->cb_poolname));
-				}
-			}
+			printnl =3D B_TRUE;
 		}
-	} else if (cbp->cb_newer && !SPA_VERSION_IS_SUPPORTED(version)) {
-		assert(!cbp->cb_all);
-
+	}
+
+	if (printnl) {
+		(void) printf(gettext("\n"));
+	}
+
+	return (0);
+}
+
+static int
+upgrade_list_older_cb(zpool_handle_t *zhp, void *arg)
+{
+	upgrade_cbdata_t *cbp =3D arg;
+	nvlist_t *config;
+	uint64_t version;
+
+	config =3D zpool_get_config(zhp, NULL);
+	verify(nvlist_lookup_uint64(config, ZPOOL_CONFIG_VERSION,
+	    &version) =3D=3D 0);
+
+	assert(SPA_VERSION_IS_SUPPORTED(version));
+
+	if (version < SPA_VERSION_FEATURES) {
 		if (cbp->cb_first) {
 			(void) printf(gettext("The following pools are "
-			    "formatted using an unsupported software version "
-			    "and\ncannot be accessed on the current "
-			    "system.\n\n"));
+			    "formatted with legacy version numbers and can\n"
+			    "be upgraded to use feature flags.  After "
+			    "being upgraded, these pools\nwill no "
+			    "longer be accessible by software that does not "
+			    "support feature\nflags.\n\n"));
 			(void) printf(gettext("VER  POOL\n"));
 			(void) printf(gettext("---  ------------\n"));
 			cbp->cb_first =3D B_FALSE;
@@ -4447,14 +4599,65 @@
 		    zpool_get_name(zhp));
 	}
=20
-	zpool_close(zhp);
-	return (ret);
+	return (0);
+}
+
+static int
+upgrade_list_disabled_cb(zpool_handle_t *zhp, void *arg)
+{
+	upgrade_cbdata_t *cbp =3D arg;
+	nvlist_t *config;
+	uint64_t version;
+
+	config =3D zpool_get_config(zhp, NULL);
+	verify(nvlist_lookup_uint64(config, ZPOOL_CONFIG_VERSION,
+	    &version) =3D=3D 0);
+
+	if (version >=3D SPA_VERSION_FEATURES) {
+		int i;
+		boolean_t poolfirst =3D B_TRUE;
+		nvlist_t *enabled =3D zpool_get_features(zhp);
+
+		for (i =3D 0; i < SPA_FEATURES; i++) {
+			const char *fguid =3D spa_feature_table[i].fi_guid;
+			const char *fname =3D spa_feature_table[i].fi_uname;
+			if (!nvlist_exists(enabled, fguid)) {
+				if (cbp->cb_first) {
+					(void) printf(gettext("\nSome "
+					    "supported features are not "
+					    "enabled on the following pools. "
+					    "Once a\nfeature is enabled the "
+					    "pool may become incompatible with "
+					    "software\nthat does not support "
+					    "the feature. See "
+					    "zpool-features(5) for "
+					    "details.\n\n"));
+					(void) printf(gettext("POOL  "
+					    "FEATURE\n"));
+					(void) printf(gettext("------"
+					    "---------\n"));
+					cbp->cb_first =3D B_FALSE;
+				}
+
+				if (poolfirst) {
+					(void) printf(gettext("%s\n"),
+					    zpool_get_name(zhp));
+					poolfirst =3D B_FALSE;
+				}
+
+				(void) printf(gettext("      %s\n"), fname);
+			}
+		}
+	}
+
+	return (0);
 }
=20
 /* ARGSUSED */
 static int
 upgrade_one(zpool_handle_t *zhp, void *data)
 {
+	boolean_t printnl =3D B_FALSE;
 	upgrade_cbdata_t *cbp =3D data;
 	uint64_t cur_version;
 	int ret;
@@ -4469,30 +4672,53 @@
 	cur_version =3D zpool_get_prop_int(zhp, ZPOOL_PROP_VERSION, NULL);
 	if (cur_version > cbp->cb_version) {
 		(void) printf(gettext("Pool '%s' is already formatted "
-		    "using more current version '%llu'.\n"),
+		    "using more current version '%llu'.\n\n"),
 		    zpool_get_name(zhp), cur_version);
 		return (0);
 	}
-	if (cur_version =3D=3D cbp->cb_version) {
+
+	if (cbp->cb_version !=3D SPA_VERSION && cur_version =3D=3D cbp->cb_versio=
n) {
 		(void) printf(gettext("Pool '%s' is already formatted "
-		    "using the current version.\n"), zpool_get_name(zhp));
+		    "using version %llu.\n\n"), zpool_get_name(zhp),
+		    cbp->cb_version);
 		return (0);
 	}
=20
-	ret =3D zpool_upgrade(zhp, cbp->cb_version);
-
-	if (!ret) {
-		(void) printf(gettext("Successfully upgraded '%s' "
-		    "from version %llu to version %llu\n\n"),
-		    zpool_get_name(zhp), (u_longlong_t)cur_version,
-		    (u_longlong_t)cbp->cb_version);
-		if (cbp->cb_poolname[0] =3D=3D '\0' && is_root_pool(zhp)) {
-			(void) strlcpy(cbp->cb_poolname, zpool_get_name(zhp),
+	if (cur_version !=3D cbp->cb_version) {
+		printnl =3D B_TRUE;
+		ret =3D upgrade_version(zhp, cbp->cb_version);
+		if (ret !=3D 0)
+			return (ret);
+#ifdef __FreeBSD__
+		root_pool_upgrade_check(zhp, cbp->cb_poolname,
+		    sizeof(cbp->cb_poolname));
+#endif	/* ___FreeBSD__ */
+	}
+
+	if (cbp->cb_version >=3D SPA_VERSION_FEATURES) {
+		int count =3D 0;
+		ret =3D upgrade_enable_all(zhp, &count);
+		if (ret !=3D 0)
+			return (ret);
+
+		if (count !=3D 0) {
+			printnl =3D B_TRUE;
+#ifdef __FreeBSD__
+			root_pool_upgrade_check(zhp, cbp->cb_poolname,
 			    sizeof(cbp->cb_poolname));
+#endif	/* __FreeBSD __*/
+		} else if (cur_version =3D=3D SPA_VERSION) {
+			(void) printf(gettext("Pool '%s' already has all "
+			    "supported features enabled.\n"),
+			    zpool_get_name(zhp));
 		}
 	}
=20
-	return (ret !=3D 0);
+	if (printnl) {
+		(void) printf(gettext("\n"));
+	}
+
+	return (0);
 }
=20
 /*
@@ -4511,6 +4737,7 @@
 	upgrade_cbdata_t cb =3D { 0 };
 	int ret =3D 0;
 	boolean_t showversions =3D B_FALSE;
+	boolean_t upgradeall =3D B_FALSE;
 	char *end;
=20
=20
@@ -4518,7 +4745,7 @@
 	while ((c =3D getopt(argc, argv, ":avV:")) !=3D -1) {
 		switch (c) {
 		case 'a':
-			cb.cb_all =3D B_TRUE;
+			upgradeall =3D B_TRUE;
 			break;
 		case 'v':
 			showversions =3D B_TRUE;
@@ -4551,19 +4778,19 @@
=20
 	if (cb.cb_version =3D=3D 0) {
 		cb.cb_version =3D SPA_VERSION;
-	} else if (!cb.cb_all && argc =3D=3D 0) {
+	} else if (!upgradeall && argc =3D=3D 0) {
 		(void) fprintf(stderr, gettext("-V option is "
 		    "incompatible with other arguments\n"));
 		usage(B_FALSE);
 	}
=20
 	if (showversions) {
-		if (cb.cb_all || argc !=3D 0) {
+		if (upgradeall || argc !=3D 0) {
 			(void) fprintf(stderr, gettext("-v option is "
 			    "incompatible with other arguments\n"));
 			usage(B_FALSE);
 		}
-	} else if (cb.cb_all) {
+	} else if (upgradeall) {
 		if (argc !=3D 0) {
 			(void) fprintf(stderr, gettext("-a option should not "
 			    "be used along with a pool name\n"));
@@ -4573,9 +4800,25 @@
=20
 	(void) printf(gettext("This system supports ZFS pool feature "
 	    "flags.\n\n"));
-	cb.cb_first =3D B_TRUE;
 	if (showversions) {
-		(void) printf(gettext("The following versions are "
+		int i;
+
+		(void) printf(gettext("The following features are "
+		    "supported:\n\n"));
+		(void) printf(gettext("FEAT DESCRIPTION\n"));
+		(void) printf("----------------------------------------------"
+		    "---------------\n");
+		for (i =3D 0; i < SPA_FEATURES; i++) {
+			zfeature_info_t *fi =3D &spa_feature_table[i];
+			const char *ro =3D fi->fi_can_readonly ?
+			    " (read-only compatible)" : "";
+
+			(void) printf("%-37s%s\n", fi->fi_uname, ro);
+			(void) printf("     %s\n", fi->fi_desc);
+		}
+		(void) printf("\n");
+
+		(void) printf(gettext("The following legacy versions are also "
 		    "supported:\n\n"));
 		(void) printf(gettext("VER  DESCRIPTION\n"));
 		(void) printf("---  -----------------------------------------"
@@ -4618,32 +4861,44 @@
 		(void) printf(gettext("\nFor more information on a particular "
 		    "version, including supported releases,\n"));
 		(void) printf(gettext("see the ZFS Administration Guide.\n\n"));
-	} else if (argc =3D=3D 0) {
-		int notfound;
-
+	} else if (argc =3D=3D 0 && upgradeall) {
+		cb.cb_first =3D B_TRUE;
 		ret =3D zpool_iter(g_zfs, upgrade_cb, &cb);
-		notfound =3D cb.cb_first;
-
-		if (!cb.cb_all && ret =3D=3D 0) {
-			if (!cb.cb_first)
-				(void) printf("\n");
-			cb.cb_first =3D B_TRUE;
-			cb.cb_newer =3D B_TRUE;
-			ret =3D zpool_iter(g_zfs, upgrade_cb, &cb);
-			if (!cb.cb_first) {
-				notfound =3D B_FALSE;
-				(void) printf("\n");
+		if (ret =3D=3D 0 && cb.cb_first) {
+			if (cb.cb_version =3D=3D SPA_VERSION) {
+				(void) printf(gettext("All pools are already "
+				    "formatted using feature flags.\n\n"));
+				(void) printf(gettext("Every feature flags "
+				    "pool already has all supported features "
+				    "enabled.\n"));
+			} else {
+				(void) printf(gettext("All pools are already "
+				    "formatted with version %llu or higher.\n"),
+				    cb.cb_version);
 			}
 		}
-
-		if (ret =3D=3D 0) {
-			if (notfound)
-				(void) printf(gettext("All pools are formatted "
-				    "using this version.\n"));
-			else if (!cb.cb_all)
-				(void) printf(gettext("Use 'zpool upgrade -v' "
-				    "for a list of available versions and "
-				    "their associated\nfeatures.\n"));
+	} else if (argc =3D=3D 0) {
+		cb.cb_first =3D B_TRUE;
+		ret =3D zpool_iter(g_zfs, upgrade_list_older_cb, &cb);
+		assert(ret =3D=3D 0);
+
+		if (cb.cb_first) {
+			(void) printf(gettext("All pools are formatted "
+			    "using feature flags.\n\n"));
+		} else {
+			(void) printf(gettext("\nUse 'zpool upgrade -v' "
+			    "for a list of available legacy versions.\n"));
+		}
+
+		cb.cb_first =3D B_TRUE;
+		ret =3D zpool_iter(g_zfs, upgrade_list_disabled_cb, &cb);
+		assert(ret =3D=3D 0);
+
+		if (cb.cb_first) {
+			(void) printf(gettext("Every feature flags pool has "
+			    "all supported features enabled.\n"));
+		} else {
+			(void) printf(gettext("\n"));
 		}
 	} else {
 		ret =3D for_each_pool(argc, argv, B_FALSE, NULL,
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/cddl/contrib/opensolaris/lib/libd=
trace/common/dt_proc.c
--- a/head/cddl/contrib/opensolaris/lib/libdtrace/common/dt_proc.c	Mon Jul =
30 11:44:18 2012 +0300
+++ b/head/cddl/contrib/opensolaris/lib/libdtrace/common/dt_proc.c	Fri Aug =
10 14:19:25 2012 +0300
@@ -942,7 +942,8 @@
 		    (int)dpr->dpr_pid, strerror(err));
 	}
=20
-	(void) pthread_mutex_unlock(&dpr->dpr_lock);
+	if (err =3D=3D 0)
+		(void) pthread_mutex_unlock(&dpr->dpr_lock);
 	(void) pthread_attr_destroy(&a);
=20
 	return (err);
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/cddl/contrib/opensolaris/lib/libz=
fs/common/libzfs.h
--- a/head/cddl/contrib/opensolaris/lib/libzfs/common/libzfs.h	Mon Jul 30 1=
1:44:18 2012 +0300
+++ b/head/cddl/contrib/opensolaris/lib/libzfs/common/libzfs.h	Fri Aug 10 1=
4:19:25 2012 +0300
@@ -316,7 +316,8 @@
 	 * requiring administrative attention.  There is no corresponding
 	 * message ID.
 	 */
-	ZPOOL_STATUS_VERSION_OLDER,	/* older on-disk version */
+	ZPOOL_STATUS_VERSION_OLDER,	/* older legacy on-disk version */
+	ZPOOL_STATUS_FEAT_DISABLED,	/* supported features are disabled */
 	ZPOOL_STATUS_RESILVERING,	/* device being resilvered */
 	ZPOOL_STATUS_OFFLINE_DEV,	/* device online */
 	ZPOOL_STATUS_REMOVED_DEV,	/* removed device */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/cddl/contrib/opensolaris/lib/libz=
fs/common/libzfs_status.c
--- a/head/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_status.c	Mon J=
ul 30 11:44:18 2012 +0300
+++ b/head/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_status.c	Fri A=
ug 10 14:19:25 2012 +0300
@@ -44,6 +44,7 @@
 #include <string.h>
 #include <unistd.h>
 #include "libzfs_impl.h"
+#include "zfeature_common.h"
=20
 /*
  * Message ID table.  This must be kept in sync with the ZPOOL_STATUS_* de=
fines
@@ -319,6 +320,30 @@
 	if (SPA_VERSION_IS_SUPPORTED(version) && version !=3D SPA_VERSION)
 		return (ZPOOL_STATUS_VERSION_OLDER);
=20
+	/*
+	 * Usable pool with disabled features
+	 */
+	if (version >=3D SPA_VERSION_FEATURES) {
+		int i;
+		nvlist_t *feat;
+
+		if (isimport) {
+			feat =3D fnvlist_lookup_nvlist(config,
+			    ZPOOL_CONFIG_LOAD_INFO);
+			feat =3D fnvlist_lookup_nvlist(feat,
+			    ZPOOL_CONFIG_ENABLED_FEAT);
+		} else {
+			feat =3D fnvlist_lookup_nvlist(config,
+			    ZPOOL_CONFIG_FEATURE_STATS);
+		}
+
+		for (i =3D 0; i < SPA_FEATURES; i++) {
+			zfeature_info_t *fi =3D &spa_feature_table[i];
+			if (!nvlist_exists(feat, fi->fi_guid))
+				return (ZPOOL_STATUS_FEAT_DISABLED);
+		}
+	}
+
 	return (ZPOOL_STATUS_OK);
 }
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/cddl/lib/libzfs/Makefile
--- a/head/cddl/lib/libzfs/Makefile	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/cddl/lib/libzfs/Makefile	Fri Aug 10 14:19:25 2012 +0300
@@ -1,4 +1,4 @@
-# $FreeBSD: head/cddl/lib/libzfs/Makefile 236884 2012-06-11 11:35:22Z mm $
+# $FreeBSD: head/cddl/lib/libzfs/Makefile 238926 2012-07-30 23:14:24Z mm $
=20
 .PATH: ${.CURDIR}/../../../cddl/compat/opensolaris/misc
 .PATH: ${.CURDIR}/../../../sys/cddl/contrib/opensolaris/common/zfs
@@ -6,8 +6,8 @@
 .PATH: ${.CURDIR}/../../../cddl/contrib/opensolaris/lib/libzfs/common
=20
 LIB=3D	zfs
-DPADD=3D	${LIBMD} ${LIBPTHREAD} ${LIBUMEM} ${LIBUTIL} ${LIBM}
-LDADD=3D	-lmd -lpthread -lumem -lutil -lm
+DPADD=3D	${LIBMD} ${LIBPTHREAD} ${LIBUMEM} ${LIBUTIL} ${LIBM} ${LIBNVPAIR}
+LDADD=3D	-lmd -lpthread -lumem -lutil -lm -lnvpair
=20
 SRCS=3D	deviceid.c \
 	fsshare.c \
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/LICENSE.TXT
--- a/head/contrib/compiler-rt/LICENSE.TXT	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/compiler-rt/LICENSE.TXT	Fri Aug 10 14:19:25 2012 +0300
@@ -94,5 +94,4 @@
=20
 Program             Directory
 -------             ---------
-sysinfo             lib/asan/sysinfo
-mach_override       lib/asan/mach_override
+mach_override       lib/interception/mach_override
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/absvti2.c
--- a/head/contrib/compiler-rt/lib/absvti2.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/compiler-rt/lib/absvti2.c	Fri Aug 10 14:19:25 2012 +0300
@@ -12,10 +12,10 @@
  * =3D=3D=3D--------------------------------------------------------------=
--------=3D=3D=3D
  */
=20
+#include "int_lib.h"
+
 #if __x86_64
=20
-#include "int_lib.h"
-
 /* Returns: absolute value */
=20
 /* Effects: aborts if abs(x) < 0 */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/adddf3.c
--- a/head/contrib/compiler-rt/lib/adddf3.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/compiler-rt/lib/adddf3.c	Fri Aug 10 14:19:25 2012 +0300
@@ -15,7 +15,7 @@
 #define DOUBLE_PRECISION
 #include "fp_lib.h"
=20
-ARM_EABI_FNALIAS(dadd, adddf3);
+ARM_EABI_FNALIAS(dadd, adddf3)
=20
 COMPILER_RT_ABI fp_t
 __adddf3(fp_t a, fp_t b) {
@@ -85,7 +85,7 @@
    =20
     // Shift the significand of b by the difference in exponents, with a s=
ticky
     // bottom bit to get rounding correct.
-    const int align =3D aExponent - bExponent;
+    const unsigned int align =3D aExponent - bExponent;
     if (align) {
         if (align < typeWidth) {
             const bool sticky =3D bSignificand << (typeWidth - align);
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/addsf3.c
--- a/head/contrib/compiler-rt/lib/addsf3.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/compiler-rt/lib/addsf3.c	Fri Aug 10 14:19:25 2012 +0300
@@ -15,7 +15,7 @@
 #define SINGLE_PRECISION
 #include "fp_lib.h"
=20
-ARM_EABI_FNALIAS(fadd, addsf3);
+ARM_EABI_FNALIAS(fadd, addsf3)
=20
 fp_t __addsf3(fp_t a, fp_t b) {
=20
@@ -84,7 +84,7 @@
    =20
     // Shift the significand of b by the difference in exponents, with a s=
ticky
     // bottom bit to get rounding correct.
-    const int align =3D aExponent - bExponent;
+    const unsigned int align =3D aExponent - bExponent;
     if (align) {
         if (align < typeWidth) {
             const bool sticky =3D bSignificand << (typeWidth - align);
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/addvti3.c
--- a/head/contrib/compiler-rt/lib/addvti3.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/compiler-rt/lib/addvti3.c	Fri Aug 10 14:19:25 2012 +0300
@@ -12,10 +12,10 @@
  * =3D=3D=3D--------------------------------------------------------------=
--------=3D=3D=3D
  */
=20
+#include "int_lib.h"
+
 #if __x86_64
=20
-#include "int_lib.h"
-
 /* Returns: a + b */
=20
 /* Effects: aborts if a + b overflows */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/arm/aeabi=
_idivmod.S
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/head/contrib/compiler-rt/lib/arm/aeabi_idivmod.S	Fri Aug 10 14:19:25 =
2012 +0300
@@ -0,0 +1,27 @@
+//=3D=3D=3D-- aeabi_idivmod.S - EABI idivmod implementation --------------=
-------=3D=3D=3D//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois=
 Open
+// Source Licenses. See LICENSE.TXT for details.
+//
+//=3D=3D=3D---------------------------------------------------------------=
-------=3D=3D=3D//
+
+#include "../assembly.h"
+
+// struct { int quot, int rem} __aeabi_idivmod(int numerator, int denomina=
tor) {
+//   int rem, quot;
+//   quot =3D __divmodsi4(numerator, denominator, &rem);
+//   return {quot, rem};
+// }
+
+        .syntax unified
+        .align 2
+DEFINE_COMPILERRT_FUNCTION(__aeabi_idivmod)
+        push    { lr }
+        sub     sp, sp, #4
+        mov     r2, sp
+        bl      SYMBOL_NAME(__divmodsi4)
+        ldr     r1, [sp]
+        add     sp, sp, #4
+        pop     { pc }
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/arm/aeabi=
_ldivmod.S
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/head/contrib/compiler-rt/lib/arm/aeabi_ldivmod.S	Fri Aug 10 14:19:25 =
2012 +0300
@@ -0,0 +1,30 @@
+//=3D=3D=3D-- aeabi_ldivmod.S - EABI ldivmod implementation --------------=
-------=3D=3D=3D//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois=
 Open
+// Source Licenses. See LICENSE.TXT for details.
+//
+//=3D=3D=3D---------------------------------------------------------------=
-------=3D=3D=3D//
+
+#include "../assembly.h"
+
+// struct { int64_t quot, int64_t rem}
+//        __aeabi_ldivmod(int64_t numerator, int64_t denominator) {
+//   int64_t rem, quot;
+//   quot =3D __divmoddi4(numerator, denominator, &rem);
+//   return {quot, rem};
+// }
+
+        .syntax unified
+        .align 2
+DEFINE_COMPILERRT_FUNCTION(__aeabi_ldivmod)
+        push    {r11, lr}
+        sub     sp, sp, #16
+        add     r12, sp, #8
+        str     r12, [sp]
+        bl      SYMBOL_NAME(__divmoddi4)
+        ldr     r2, [sp, #8]
+        ldr     r3, [sp, #12]
+        add     sp, sp, #16
+        pop     {r11, pc}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/arm/aeabi=
_memcmp.S
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/head/contrib/compiler-rt/lib/arm/aeabi_memcmp.S	Fri Aug 10 14:19:25 2=
012 +0300
@@ -0,0 +1,19 @@
+//=3D=3D=3D-- aeabi_memcmp.S - EABI memcmp implementation ----------------=
-------=3D=3D=3D//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois=
 Open
+// Source Licenses. See LICENSE.TXT for details.
+//
+//=3D=3D=3D---------------------------------------------------------------=
-------=3D=3D=3D//
+
+#include "../assembly.h"
+
+//  void __aeabi_memcmp(void *dest, void *src, size_t n) { memcmp(dest, sr=
c, n); }
+
+        .align 2
+DEFINE_COMPILERRT_FUNCTION(__aeabi_memcmp)
+        b       memcmp
+
+DEFINE_AEABI_FUNCTION_ALIAS(__aeabi_memcmp4, __aeabi_memcmp)
+DEFINE_AEABI_FUNCTION_ALIAS(__aeabi_memcmp8, __aeabi_memcmp)
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/arm/aeabi=
_memcpy.S
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/head/contrib/compiler-rt/lib/arm/aeabi_memcpy.S	Fri Aug 10 14:19:25 2=
012 +0300
@@ -0,0 +1,19 @@
+//=3D=3D=3D-- aeabi_memcpy.S - EABI memcpy implementation ----------------=
-------=3D=3D=3D//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois=
 Open
+// Source Licenses. See LICENSE.TXT for details.
+//
+//=3D=3D=3D---------------------------------------------------------------=
-------=3D=3D=3D//
+
+#include "../assembly.h"
+
+//  void __aeabi_memcpy(void *dest, void *src, size_t n) { memcpy(dest, sr=
c, n); }
+
+        .align 2
+DEFINE_COMPILERRT_FUNCTION(__aeabi_memcpy)
+        b       memcpy
+
+DEFINE_AEABI_FUNCTION_ALIAS(__aeabi_memcpy4, __aeabi_memcpy)
+DEFINE_AEABI_FUNCTION_ALIAS(__aeabi_memcpy8, __aeabi_memcpy)
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/arm/aeabi=
_memmove.S
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/head/contrib/compiler-rt/lib/arm/aeabi_memmove.S	Fri Aug 10 14:19:25 =
2012 +0300
@@ -0,0 +1,19 @@
+//=3D=3D=3D-- aeabi_memmove.S - EABI memmove implementation --------------=
------=3D=3D=3D//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois=
 Open
+// Source Licenses. See LICENSE.TXT for details.
+//
+//=3D=3D=3D---------------------------------------------------------------=
------=3D=3D=3D//
+
+#include "../assembly.h"
+
+//  void __aeabi_memmove(void *dest, void *src, size_t n) { memmove(dest, =
src, n); }
+
+        .align 2
+DEFINE_COMPILERRT_FUNCTION(__aeabi_memmove)
+        b       memmove
+
+DEFINE_AEABI_FUNCTION_ALIAS(__aeabi_memmove4, __aeabi_memmove)
+DEFINE_AEABI_FUNCTION_ALIAS(__aeabi_memmove8, __aeabi_memmove)
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/arm/aeabi=
_memset.S
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/head/contrib/compiler-rt/lib/arm/aeabi_memset.S	Fri Aug 10 14:19:25 2=
012 +0300
@@ -0,0 +1,32 @@
+//=3D=3D=3D-- aeabi_memset.S - EABI memset implementation ----------------=
-------=3D=3D=3D//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois=
 Open
+// Source Licenses. See LICENSE.TXT for details.
+//
+//=3D=3D=3D---------------------------------------------------------------=
-------=3D=3D=3D//
+
+#include "../assembly.h"
+
+//  void __aeabi_memset(void *dest, size_t n, int c) { memset(dest, c, n);=
 }
+//  void __aeabi_memclr(void *dest, size_t n) { __aeabi_memset(dest, n, 0)=
; }
+
+        .align 2
+DEFINE_COMPILERRT_FUNCTION(__aeabi_memset)
+        mov     r3, r1
+        mov     r1, r2
+        mov     r2, r3
+        b       memset
+
+DEFINE_AEABI_FUNCTION_ALIAS(__aeabi_memset4, __aeabi_memset)
+DEFINE_AEABI_FUNCTION_ALIAS(__aeabi_memset8, __aeabi_memset)
+       =20
+DEFINE_COMPILERRT_FUNCTION(__aeabi_memclr)
+        mov     r2, r1
+        mov     r1, #0
+        b       memset
+
+DEFINE_AEABI_FUNCTION_ALIAS(__aeabi_memclr4, __aeabi_memclr)
+DEFINE_AEABI_FUNCTION_ALIAS(__aeabi_memclr8, __aeabi_memclr)
+
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/arm/aeabi=
_uidivmod.S
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/head/contrib/compiler-rt/lib/arm/aeabi_uidivmod.S	Fri Aug 10 14:19:25=
 2012 +0300
@@ -0,0 +1,28 @@
+//=3D=3D=3D-- aeabi_uidivmod.S - EABI uidivmod implementation ------------=
-------=3D=3D=3D//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois=
 Open
+// Source Licenses. See LICENSE.TXT for details.
+//
+//=3D=3D=3D---------------------------------------------------------------=
-------=3D=3D=3D//
+
+#include "../assembly.h"
+
+// struct { unsigned quot, unsigned rem}
+//        __aeabi_uidivmod(unsigned numerator, unsigned denominator) {
+//   unsigned rem, quot;
+//   quot =3D __udivmodsi4(numerator, denominator, &rem);
+//   return {quot, rem};
+// }
+
+        .syntax unified
+        .align 2
+DEFINE_COMPILERRT_FUNCTION(__aeabi_uidivmod)
+        push    { lr }
+        sub     sp, sp, #4
+        mov     r2, sp
+        bl      SYMBOL_NAME(__udivmodsi4)
+        ldr     r1, [sp]
+        add     sp, sp, #4
+        pop     { pc }
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/arm/aeabi=
_uldivmod.S
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/head/contrib/compiler-rt/lib/arm/aeabi_uldivmod.S	Fri Aug 10 14:19:25=
 2012 +0300
@@ -0,0 +1,30 @@
+//=3D=3D=3D-- aeabi_uldivmod.S - EABI uldivmod implementation ------------=
-------=3D=3D=3D//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois=
 Open
+// Source Licenses. See LICENSE.TXT for details.
+//
+//=3D=3D=3D---------------------------------------------------------------=
-------=3D=3D=3D//
+
+#include "../assembly.h"
+
+// struct { uint64_t quot, uint64_t rem}
+//        __aeabi_uldivmod(uint64_t numerator, uint64_t denominator) {
+//   uint64_t rem, quot;
+//   quot =3D __udivmoddi4(numerator, denominator, &rem);
+//   return {quot, rem};
+// }
+
+        .syntax unified
+        .align 2
+DEFINE_COMPILERRT_FUNCTION(__aeabi_uldivmod)
+        push	{r11, lr}
+        sub	sp, sp, #16
+        add	r12, sp, #8
+        str	r12, [sp]
+        bl	SYMBOL_NAME(__udivmoddi4)
+        ldr	r2, [sp, #8]
+        ldr	r3, [sp, #12]
+        add	sp, sp, #16
+        pop	{r11, pc}
\ No newline at end of file
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/ashldi3.c
--- a/head/contrib/compiler-rt/lib/ashldi3.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/compiler-rt/lib/ashldi3.c	Fri Aug 10 14:19:25 2012 +0300
@@ -18,7 +18,7 @@
=20
 /* Precondition:  0 <=3D b < bits_in_dword */
=20
-ARM_EABI_FNALIAS(llsl, ashldi3);
+ARM_EABI_FNALIAS(llsl, ashldi3)
=20
 COMPILER_RT_ABI di_int
 __ashldi3(di_int a, si_int b)
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/ashlti3.c
--- a/head/contrib/compiler-rt/lib/ashlti3.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/compiler-rt/lib/ashlti3.c	Fri Aug 10 14:19:25 2012 +0300
@@ -12,10 +12,10 @@
  * =3D=3D=3D--------------------------------------------------------------=
--------=3D=3D=3D
  */
=20
+#include "int_lib.h"
+
 #if __x86_64
=20
-#include "int_lib.h"
-
 /* Returns: a << b */
=20
 /* Precondition:  0 <=3D b < bits_in_tword */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/ashrdi3.c
--- a/head/contrib/compiler-rt/lib/ashrdi3.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/compiler-rt/lib/ashrdi3.c	Fri Aug 10 14:19:25 2012 +0300
@@ -18,7 +18,7 @@
=20
 /* Precondition:  0 <=3D b < bits_in_dword */
=20
-ARM_EABI_FNALIAS(lasr, ashrdi3);
+ARM_EABI_FNALIAS(lasr, ashrdi3)
=20
 COMPILER_RT_ABI di_int
 __ashrdi3(di_int a, si_int b)
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/ashrti3.c
--- a/head/contrib/compiler-rt/lib/ashrti3.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/compiler-rt/lib/ashrti3.c	Fri Aug 10 14:19:25 2012 +0300
@@ -12,10 +12,10 @@
  * =3D=3D=3D--------------------------------------------------------------=
--------=3D=3D=3D
  */
=20
+#include "int_lib.h"
+
 #if __x86_64
=20
-#include "int_lib.h"
-
 /* Returns: arithmetic a >> b */
=20
 /* Precondition:  0 <=3D b < bits_in_tword */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/assembly.h
--- a/head/contrib/compiler-rt/lib/assembly.h	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/compiler-rt/lib/assembly.h	Fri Aug 10 14:19:25 2012 +0300
@@ -25,9 +25,11 @@
 #if defined(__APPLE__)
 #define HIDDEN_DIRECTIVE .private_extern
 #define LOCAL_LABEL(name) L_##name
+#define FILE_LEVEL_DIRECTIVE  .subsections_via_symbols
 #else
 #define HIDDEN_DIRECTIVE .hidden
 #define LOCAL_LABEL(name) .L_##name
+#define FILE_LEVEL_DIRECTIVE =20
 #endif
=20
 #define GLUE2(a, b) a ## b
@@ -42,6 +44,7 @@
 #endif
=20
 #define DEFINE_COMPILERRT_FUNCTION(name)                   \
+  FILE_LEVEL_DIRECTIVE     SEPARATOR                       \
   .globl SYMBOL_NAME(name) SEPARATOR                       \
   DECLARE_SYMBOL_VISIBILITY(name)                          \
   SYMBOL_NAME(name):
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/atomic.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/head/contrib/compiler-rt/lib/atomic.c	Fri Aug 10 14:19:25 2012 +0300
@@ -0,0 +1,315 @@
+/*=3D=3D=3D-- atomic.c - Implement support functions for atomic operations=
.------=3D=3D=3D
+ *
+ *                     The LLVM Compiler Infrastructure
+ *
+ * This file is dual licensed under the MIT and the University of Illinois=
 Open
+ * Source Licenses. See LICENSE.TXT for details.
+ *
+ *=3D=3D=3D---------------------------------------------------------------=
-------=3D=3D=3D
+ *
+ *  atomic.c defines a set of functions for performing atomic accesses on
+ *  arbitrary-sized memory locations.  This design uses locks that should
+ *  be fast in the uncontended case, for two reasons:
+ *=20
+ *  1) This code must work with C programs that do not link to anything
+ *     (including pthreads) and so it should not depend on any pthread
+ *     functions.
+ *  2) Atomic operations, rather than explicit mutexes, are most commonly =
used
+ *     on code where contended operations are rate.
+ *=20
+ *  To avoid needing a per-object lock, this code allocates an array of
+ *  locks and hashes the object pointers to find the one that it should us=
e.
+ *  For operations that must be atomic on two locations, the lower lock is
+ *  always acquired first, to avoid deadlock.
+ *
+ *=3D=3D=3D---------------------------------------------------------------=
-------=3D=3D=3D
+ */
+
+#include <stdint.h>
+#include <string.h>
+
+// Clang objects if you redefine a builtin.  This little hack allows us to
+// define a function with the same name as an intrinsic.
+#pragma redefine_extname __atomic_load_c __atomic_load
+#pragma redefine_extname __atomic_store_c __atomic_store
+#pragma redefine_extname __atomic_exchange_c __atomic_exchange
+#pragma redefine_extname __atomic_compare_exchange_c __atomic_compare_exch=
ange
+
+/// Number of locks.  This allocates one page on 32-bit platforms, two on
+/// 64-bit.  This can be specified externally if a different trade between
+/// memory usage and contention probability is required for a given platfo=
rm.
+#ifndef SPINLOCK_COUNT
+#define SPINLOCK_COUNT (1<<10)
+#endif
+static const long SPINLOCK_MASK =3D SPINLOCK_COUNT - 1;
+
+//////////////////////////////////////////////////////////////////////////=
//////
+// Platform-specific lock implementation.  Falls back to spinlocks if none=
 is
+// defined.  Each platform should define the Lock type, and corresponding
+// lock() and unlock() functions.
+//////////////////////////////////////////////////////////////////////////=
//////
+#ifdef __FreeBSD__
+#include <errno.h>
+#include <sys/types.h>
+#include <machine/atomic.h>
+#include <sys/umtx.h>
+typedef struct _usem Lock;
+inline static void unlock(Lock *l) {
+  __c11_atomic_store((_Atomic(uint32_t)*)&l->_count, 1, __ATOMIC_RELEASE);
+  __c11_atomic_thread_fence(__ATOMIC_SEQ_CST);
+  if (l->_has_waiters)
+      _umtx_op(l, UMTX_OP_SEM_WAKE, 1, 0, 0);
+}
+inline static void lock(Lock *l) {
+  uint32_t old =3D 1;
+  while (!__c11_atomic_compare_exchange_weak((_Atomic(uint32_t)*)&l->_coun=
t, &old,
+        0, __ATOMIC_ACQUIRE, __ATOMIC_RELAXED)) {
+    _umtx_op(l, UMTX_OP_SEM_WAIT, 0, 0, 0);
+    old =3D 1;
+  }
+}
+/// locks for atomic operations
+static Lock locks[SPINLOCK_COUNT] =3D { [0 ...  SPINLOCK_COUNT-1] =3D {0,1=
,0} };
+#else
+typedef _Atomic(uintptr_t) Lock;
+/// Unlock a lock.  This is a release operation.
+inline static void unlock(Lock *l) {
+  __c11_atomic_store(l, 0, __ATOMIC_RELEASE);
+}
+/// Locks a lock.  In the current implementation, this is potentially
+/// unbounded in the contended case.
+inline static void lock(Lock *l) {
+  uintptr_t old =3D 0;
+  while (!__c11_atomic_compare_exchange_weak(l, &old, 1, __ATOMIC_ACQUIRE,
+        __ATOMIC_RELAXED))
+    old =3D 0;
+}
+/// locks for atomic operations
+static Lock locks[SPINLOCK_COUNT];
+#endif
+
+
+/// Returns a lock to use for a given pointer. =20
+static inline Lock *lock_for_pointer(void *ptr) {
+  intptr_t hash =3D (intptr_t)ptr;
+  // Disregard the lowest 4 bits.  We want all values that may be part of =
the
+  // same memory operation to hash to the same value and therefore use the=
 same
+  // lock. =20
+  hash >>=3D 4;
+  // Use the next bits as the basis for the hash
+  intptr_t low =3D hash & SPINLOCK_MASK;
+  // Now use the high(er) set of bits to perturb the hash, so that we don't
+  // get collisions from atomic fields in a single object
+  hash >>=3D 16;
+  hash ^=3D low;
+  // Return a pointer to the word to use
+  return locks + (hash & SPINLOCK_MASK);
+}
+
+/// Macros for determining whether a size is lock free.  Clang can not yet
+/// codegen __atomic_is_lock_free(16), so for now we assume 16-byte values=
 are
+/// not lock free.
+#define IS_LOCK_FREE_1 __c11_atomic_is_lock_free(1)
+#define IS_LOCK_FREE_2 __c11_atomic_is_lock_free(2)
+#define IS_LOCK_FREE_4 __c11_atomic_is_lock_free(4)
+#define IS_LOCK_FREE_8 __c11_atomic_is_lock_free(8)
+#define IS_LOCK_FREE_16 0
+
+/// Macro that calls the compiler-generated lock-free versions of functions
+/// when they exist.
+#define LOCK_FREE_CASES() \
+  do {\
+  switch (size) {\
+    case 2:\
+      if (IS_LOCK_FREE_2) {\
+        LOCK_FREE_ACTION(uint16_t);\
+      }\
+    case 4:\
+      if (IS_LOCK_FREE_4) {\
+        LOCK_FREE_ACTION(uint32_t);\
+      }\
+    case 8:\
+      if (IS_LOCK_FREE_8) {\
+        LOCK_FREE_ACTION(uint64_t);\
+      }\
+    case 16:\
+      if (IS_LOCK_FREE_16) {\
+        /* FIXME: __uint128_t isn't available on 32 bit platforms.
+        LOCK_FREE_ACTION(__uint128_t);*/\
+      }\
+  }\
+  } while (0)
+
+
+/// An atomic load operation.  This is atomic with respect to the source
+/// pointer only.
+void __atomic_load_c(int size, void *src, void *dest, int model) {
+#define LOCK_FREE_ACTION(type) \
+    *((type*)dest) =3D __c11_atomic_load((_Atomic(type)*)src, model);\
+    return;
+  LOCK_FREE_CASES();
+#undef LOCK_FREE_ACTION
+  Lock *l =3D lock_for_pointer(src);
+  lock(l);
+  memcpy(dest, src, size);
+  unlock(l);
+}
+
+/// An atomic store operation.  This is atomic with respect to the destina=
tion
+/// pointer only.
+void __atomic_store_c(int size, void *dest, void *src, int model) {
+#define LOCK_FREE_ACTION(type) \
+    __c11_atomic_store((_Atomic(type)*)dest, *(type*)dest, model);\
+    return;
+  LOCK_FREE_CASES();
+#undef LOCK_FREE_ACTION
+  Lock *l =3D lock_for_pointer(dest);
+  lock(l);
+  memcpy(dest, src, size);
+  unlock(l);
+}
+
+/// Atomic compare and exchange operation.  If the value at *ptr is identi=
cal
+/// to the value at *expected, then this copies value at *desired to *ptr.=
  If
+/// they  are not, then this stores the current value from *ptr in *expect=
ed.
+///
+/// This function returns 1 if the exchange takes place or 0 if it fails.=20
+int __atomic_compare_exchange_c(int size, void *ptr, void *expected,
+    void *desired, int success, int failure) {
+#define LOCK_FREE_ACTION(type) \
+  return __c11_atomic_compare_exchange_strong((_Atomic(type)*)ptr, (type*)=
expected,\
+      *(type*)desired, success, failure)
+  LOCK_FREE_CASES();
+#undef LOCK_FREE_ACTION
+  Lock *l =3D lock_for_pointer(ptr);
+  lock(l);
+  if (memcmp(ptr, expected, size) =3D=3D 0) {
+    memcpy(ptr, desired, size);
+    unlock(l);
+    return 1;
+  }
+  memcpy(expected, ptr, size);
+  unlock(l);
+  return 0;
+}
+
+/// Performs an atomic exchange operation between two pointers.  This is a=
tomic
+/// with respect to the target address.
+void __atomic_exchange_c(int size, void *ptr, void *val, void *old, int mo=
del) {
+#define LOCK_FREE_ACTION(type) \
+    *(type*)old =3D __c11_atomic_exchange((_Atomic(type)*)ptr, *(type*)val=
,\
+        model);\
+    return;
+  LOCK_FREE_CASES();
+#undef LOCK_FREE_ACTION
+  Lock *l =3D lock_for_pointer(ptr);
+  lock(l);
+  memcpy(old, ptr, size);
+  memcpy(ptr, val, size);
+  unlock(l);
+}
+
+//////////////////////////////////////////////////////////////////////////=
//////
+// Where the size is known at compile time, the compiler may emit calls to
+// specialised versions of the above functions.
+//////////////////////////////////////////////////////////////////////////=
//////
+#define OPTIMISED_CASES\
+  OPTIMISED_CASE(1, IS_LOCK_FREE_1, uint8_t)\
+  OPTIMISED_CASE(2, IS_LOCK_FREE_2, uint16_t)\
+  OPTIMISED_CASE(4, IS_LOCK_FREE_4, uint32_t)\
+  OPTIMISED_CASE(8, IS_LOCK_FREE_8, uint64_t)\
+  /* FIXME: __uint128_t isn't available on 32 bit platforms.
+  OPTIMISED_CASE(16, IS_LOCK_FREE_16, __uint128_t)*/\
+
+#define OPTIMISED_CASE(n, lockfree, type)\
+type __atomic_load_##n(type *src, int model) {\
+  if (lockfree)\
+    return __c11_atomic_load((_Atomic(type)*)src, model);\
+  Lock *l =3D lock_for_pointer(src);\
+  lock(l);\
+  type val =3D *src;\
+  unlock(l);\
+  return val;\
+}
+OPTIMISED_CASES
+#undef OPTIMISED_CASE
+
+#define OPTIMISED_CASE(n, lockfree, type)\
+void  __atomic_store_##n(type *dest, type val, int model) {\
+  if (lockfree) {\
+    __c11_atomic_store((_Atomic(type)*)dest, val, model);\
+    return;\
+  }\
+  Lock *l =3D lock_for_pointer(dest);\
+  lock(l);\
+  *dest =3D val;\
+  unlock(l);\
+  return;\
+}
+OPTIMISED_CASES
+#undef OPTIMISED_CASE
+
+#define OPTIMISED_CASE(n, lockfree, type)\
+type __atomic_exchange_##n(type *dest, type val, int model) {\
+  if (lockfree)\
+    return __c11_atomic_exchange((_Atomic(type)*)dest, val, model);\
+  Lock *l =3D lock_for_pointer(dest);\
+  lock(l);\
+  type tmp =3D *dest;\
+  *dest =3D val;\
+  unlock(l);\
+  return tmp;\
+}
+OPTIMISED_CASES
+#undef OPTIMISED_CASE
+
+#define OPTIMISED_CASE(n, lockfree, type)\
+int __atomic_compare_exchange_##n(type *ptr, type *expected, type desired,\
+    int success, int failure) {\
+  if (lockfree)\
+    return __c11_atomic_compare_exchange_strong((_Atomic(type)*)ptr, expec=
ted, desired,\
+        success, failure);\
+  Lock *l =3D lock_for_pointer(ptr);\
+  lock(l);\
+  if (*ptr =3D=3D *expected) {\
+    *ptr =3D desired;\
+    unlock(l);\
+    return 1;\
+  }\
+  *expected =3D *ptr;\
+  unlock(l);\
+  return 0;\
+}
+OPTIMISED_CASES
+#undef OPTIMISED_CASE
+
+//////////////////////////////////////////////////////////////////////////=
//////
+// Atomic read-modify-write operations for integers of various sizes.
+//////////////////////////////////////////////////////////////////////////=
//////
+#define ATOMIC_RMW(n, lockfree, type, opname, op) \
+type __atomic_fetch_##opname##_##n(type *ptr, type val, int model) {\
+  if (lockfree) \
+    return __c11_atomic_fetch_##opname((_Atomic(type)*)ptr, val, model);\
+  Lock *l =3D lock_for_pointer(ptr);\
+  lock(l);\
+  type tmp =3D *ptr;\
+  *ptr =3D tmp op val;\
+  unlock(l);\
+  return tmp;\
+}
+
+#define OPTIMISED_CASE(n, lockfree, type) ATOMIC_RMW(n, lockfree, type, ad=
d, +)
+OPTIMISED_CASES
+#undef OPTIMISED_CASE
+#define OPTIMISED_CASE(n, lockfree, type) ATOMIC_RMW(n, lockfree, type, su=
b, -)
+OPTIMISED_CASES
+#undef OPTIMISED_CASE
+#define OPTIMISED_CASE(n, lockfree, type) ATOMIC_RMW(n, lockfree, type, an=
d, &)
+OPTIMISED_CASES
+#undef OPTIMISED_CASE
+#define OPTIMISED_CASE(n, lockfree, type) ATOMIC_RMW(n, lockfree, type, or=
, |)
+OPTIMISED_CASES
+#undef OPTIMISED_CASE
+#define OPTIMISED_CASE(n, lockfree, type) ATOMIC_RMW(n, lockfree, type, xo=
r, ^)
+OPTIMISED_CASES
+#undef OPTIMISED_CASE
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/clzti2.c
--- a/head/contrib/compiler-rt/lib/clzti2.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/compiler-rt/lib/clzti2.c	Fri Aug 10 14:19:25 2012 +0300
@@ -12,10 +12,10 @@
  * =3D=3D=3D--------------------------------------------------------------=
--------=3D=3D=3D
  */
=20
+#include "int_lib.h"
+
 #if __x86_64
=20
-#include "int_lib.h"
-
 /* Returns: the number of leading 0-bits */
=20
 /* Precondition: a !=3D 0 */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/cmpti2.c
--- a/head/contrib/compiler-rt/lib/cmpti2.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/compiler-rt/lib/cmpti2.c	Fri Aug 10 14:19:25 2012 +0300
@@ -12,10 +12,10 @@
  * =3D=3D=3D--------------------------------------------------------------=
--------=3D=3D=3D
  */
=20
+#include "int_lib.h"
+
 #if __x86_64
=20
-#include "int_lib.h"
-
 /* Returns:  if (a <  b) returns 0
  *           if (a =3D=3D b) returns 1
  *           if (a >  b) returns 2
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/ctzti2.c
--- a/head/contrib/compiler-rt/lib/ctzti2.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/compiler-rt/lib/ctzti2.c	Fri Aug 10 14:19:25 2012 +0300
@@ -12,10 +12,10 @@
  * =3D=3D=3D--------------------------------------------------------------=
--------=3D=3D=3D
  */
=20
+#include "int_lib.h"
+
 #if __x86_64
=20
-#include "int_lib.h"
-
 /* Returns: the number of trailing 0-bits */
=20
 /* Precondition: a !=3D 0 */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/divdf3.c
--- a/head/contrib/compiler-rt/lib/divdf3.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/compiler-rt/lib/divdf3.c	Fri Aug 10 14:19:25 2012 +0300
@@ -19,7 +19,7 @@
 #define DOUBLE_PRECISION
 #include "fp_lib.h"
=20
-ARM_EABI_FNALIAS(ddiv, divdf3);
+ARM_EABI_FNALIAS(ddiv, divdf3)
=20
 fp_t __divdf3(fp_t a, fp_t b) {
    =20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/divmoddi4=
.c
--- a/head/contrib/compiler-rt/lib/divmoddi4.c	Mon Jul 30 11:44:18 2012 +03=
00
+++ b/head/contrib/compiler-rt/lib/divmoddi4.c	Fri Aug 10 14:19:25 2012 +03=
00
@@ -16,8 +16,6 @@
=20
 extern COMPILER_RT_ABI di_int __divdi3(di_int a, di_int b);
=20
-ARM_EABI_FNALIAS(ldivmod, divmoddi4);
-
 /* Returns: a / b, *rem =3D a % b  */
=20
 COMPILER_RT_ABI di_int
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/divsf3.c
--- a/head/contrib/compiler-rt/lib/divsf3.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/compiler-rt/lib/divsf3.c	Fri Aug 10 14:19:25 2012 +0300
@@ -19,7 +19,7 @@
 #define SINGLE_PRECISION
 #include "fp_lib.h"
=20
-ARM_EABI_FNALIAS(fdiv, divsf3);
+ARM_EABI_FNALIAS(fdiv, divsf3)
=20
 fp_t __divsf3(fp_t a, fp_t b) {
    =20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/divsi3.c
--- a/head/contrib/compiler-rt/lib/divsi3.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/compiler-rt/lib/divsi3.c	Fri Aug 10 14:19:25 2012 +0300
@@ -18,7 +18,7 @@
=20
 /* Returns: a / b */
=20
-ARM_EABI_FNALIAS(idiv, divsi3);
+ARM_EABI_FNALIAS(idiv, divsi3)
=20
 COMPILER_RT_ABI si_int
 __divsi3(si_int a, si_int b)
@@ -29,5 +29,11 @@
     a =3D (a ^ s_a) - s_a;                         /* negate if s_a =3D=3D=
 -1 */
     b =3D (b ^ s_b) - s_b;                         /* negate if s_b =3D=3D=
 -1 */
     s_a ^=3D s_b;                                  /* sign of quotient */
-    return (__udivsi3(a, b) ^ s_a) - s_a;        /* negate if s_a =3D=3D -=
1 */
+    /*
+     * On CPUs without unsigned hardware division support,
+     *  this calls __udivsi3 (notice the cast to su_int).
+     * On CPUs with unsigned hardware division support,
+     *  this uses the unsigned division instruction.
+     */
+    return ((su_int)a/(su_int)b ^ s_a) - s_a;    /* negate if s_a =3D=3D -=
1 */
 }
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/divti3.c
--- a/head/contrib/compiler-rt/lib/divti3.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/compiler-rt/lib/divti3.c	Fri Aug 10 14:19:25 2012 +0300
@@ -12,10 +12,10 @@
  * =3D=3D=3D--------------------------------------------------------------=
--------=3D=3D=3D
  */
=20
+#include "int_lib.h"
+
 #if __x86_64
=20
-#include "int_lib.h"
-
 tu_int __udivmodti4(tu_int a, tu_int b, tu_int* rem);
=20
 /* Returns: a / b */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/extendsfd=
f2.c
--- a/head/contrib/compiler-rt/lib/extendsfdf2.c	Mon Jul 30 11:44:18 2012 +=
0300
+++ b/head/contrib/compiler-rt/lib/extendsfdf2.c	Fri Aug 10 14:19:25 2012 +=
0300
@@ -66,7 +66,7 @@
=20
 // End helper routines.  Conversion implementation follows.
=20
-ARM_EABI_FNALIAS(f2d, extendsfdf2);
+ARM_EABI_FNALIAS(f2d, extendsfdf2)
=20
 dst_t __extendsfdf2(src_t a) {
    =20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/ffsti2.c
--- a/head/contrib/compiler-rt/lib/ffsti2.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/compiler-rt/lib/ffsti2.c	Fri Aug 10 14:19:25 2012 +0300
@@ -12,10 +12,10 @@
  * =3D=3D=3D--------------------------------------------------------------=
--------=3D=3D=3D
  */
=20
+#include "int_lib.h"
+
 #if __x86_64
=20
-#include "int_lib.h"
-
 /* Returns: the index of the least significant 1-bit in a, or
  * the value zero if a is zero. The least significant bit is index one.
  */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/fixdfdi.c
--- a/head/contrib/compiler-rt/lib/fixdfdi.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/compiler-rt/lib/fixdfdi.c	Fri Aug 10 14:19:25 2012 +0300
@@ -23,7 +23,7 @@
=20
 /* seee eeee eeee mmmm mmmm mmmm mmmm mmmm | mmmm mmmm mmmm mmmm mmmm mmmm=
 mmmm mmmm */
=20
-ARM_EABI_FNALIAS(d2lz, fixdfdi);
+ARM_EABI_FNALIAS(d2lz, fixdfdi)
=20
 di_int
 __fixdfdi(double a)
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/fixdfsi.c
--- a/head/contrib/compiler-rt/lib/fixdfsi.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/compiler-rt/lib/fixdfsi.c	Fri Aug 10 14:19:25 2012 +0300
@@ -18,7 +18,7 @@
=20
 #include "int_lib.h"
=20
-ARM_EABI_FNALIAS(d2iz, fixdfsi);
+ARM_EABI_FNALIAS(d2iz, fixdfsi)
=20
 int __fixdfsi(fp_t a) {
    =20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/fixdfti.c
--- a/head/contrib/compiler-rt/lib/fixdfti.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/compiler-rt/lib/fixdfti.c	Fri Aug 10 14:19:25 2012 +0300
@@ -12,10 +12,10 @@
  * =3D=3D=3D--------------------------------------------------------------=
--------=3D=3D=3D
  */
=20
+#include "int_lib.h"
+
 #if __x86_64
=20
-#include "int_lib.h"
-
 /* Returns: convert a to a signed long long, rounding toward zero. */
=20
 /* Assumption: double is a IEEE 64 bit floating point type=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/fixsfdi.c
--- a/head/contrib/compiler-rt/lib/fixsfdi.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/compiler-rt/lib/fixsfdi.c	Fri Aug 10 14:19:25 2012 +0300
@@ -23,7 +23,7 @@
=20
 /* seee eeee emmm mmmm mmmm mmmm mmmm mmmm */
=20
-ARM_EABI_FNALIAS(d2lz, fixsfdi);
+ARM_EABI_FNALIAS(d2lz, fixsfdi)
=20
 COMPILER_RT_ABI di_int
 __fixsfdi(float a)
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/fixsfsi.c
--- a/head/contrib/compiler-rt/lib/fixsfsi.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/compiler-rt/lib/fixsfsi.c	Fri Aug 10 14:19:25 2012 +0300
@@ -16,7 +16,7 @@
 #define SINGLE_PRECISION
 #include "fp_lib.h"
=20
-ARM_EABI_FNALIAS(f2iz, fixsfsi);
+ARM_EABI_FNALIAS(f2iz, fixsfsi)
=20
 COMPILER_RT_ABI int
 __fixsfsi(fp_t a) {
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/fixsfti.c
--- a/head/contrib/compiler-rt/lib/fixsfti.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/compiler-rt/lib/fixsfti.c	Fri Aug 10 14:19:25 2012 +0300
@@ -12,10 +12,10 @@
  * =3D=3D=3D--------------------------------------------------------------=
--------=3D=3D=3D
  */
=20
+#include "int_lib.h"
+
 #if __x86_64
=20
-#include "int_lib.h"
-
 /* Returns: convert a to a signed long long, rounding toward zero. */
=20
 /* Assumption: float is a IEEE 32 bit floating point type=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/fixunsdfd=
i.c
--- a/head/contrib/compiler-rt/lib/fixunsdfdi.c	Mon Jul 30 11:44:18 2012 +0=
300
+++ b/head/contrib/compiler-rt/lib/fixunsdfdi.c	Fri Aug 10 14:19:25 2012 +0=
300
@@ -26,7 +26,7 @@
=20
 /* seee eeee eeee mmmm mmmm mmmm mmmm mmmm | mmmm mmmm mmmm mmmm mmmm mmmm=
 mmmm mmmm */
=20
-ARM_EABI_FNALIAS(d2ulz, fixunsdfdi);
+ARM_EABI_FNALIAS(d2ulz, fixunsdfdi)
=20
 COMPILER_RT_ABI du_int
 __fixunsdfdi(double a)
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/fixunsdfs=
i.c
--- a/head/contrib/compiler-rt/lib/fixunsdfsi.c	Mon Jul 30 11:44:18 2012 +0=
300
+++ b/head/contrib/compiler-rt/lib/fixunsdfsi.c	Fri Aug 10 14:19:25 2012 +0=
300
@@ -26,7 +26,7 @@
=20
 /* seee eeee eeee mmmm mmmm mmmm mmmm mmmm | mmmm mmmm mmmm mmmm mmmm mmmm=
 mmmm mmmm */
=20
-ARM_EABI_FNALIAS(d2uiz, fixunsdfsi);
+ARM_EABI_FNALIAS(d2uiz, fixunsdfsi)
=20
 COMPILER_RT_ABI su_int
 __fixunsdfsi(double a)
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/fixunsdft=
i.c
--- a/head/contrib/compiler-rt/lib/fixunsdfti.c	Mon Jul 30 11:44:18 2012 +0=
300
+++ b/head/contrib/compiler-rt/lib/fixunsdfti.c	Fri Aug 10 14:19:25 2012 +0=
300
@@ -12,10 +12,10 @@
  * =3D=3D=3D--------------------------------------------------------------=
--------=3D=3D=3D
  */
=20
+#include "int_lib.h"
+
 #if __x86_64
=20
-#include "int_lib.h"
-
 /* Returns: convert a to a unsigned long long, rounding toward zero.
  *          Negative values all become zero.
  */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/fixunssfd=
i.c
--- a/head/contrib/compiler-rt/lib/fixunssfdi.c	Mon Jul 30 11:44:18 2012 +0=
300
+++ b/head/contrib/compiler-rt/lib/fixunssfdi.c	Fri Aug 10 14:19:25 2012 +0=
300
@@ -25,7 +25,7 @@
=20
 /* seee eeee emmm mmmm mmmm mmmm mmmm mmmm */
=20
-ARM_EABI_FNALIAS(f2ulz, fixunssfdi);
+ARM_EABI_FNALIAS(f2ulz, fixunssfdi)
=20
 COMPILER_RT_ABI du_int
 __fixunssfdi(float a)
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/fixunssfs=
i.c
--- a/head/contrib/compiler-rt/lib/fixunssfsi.c	Mon Jul 30 11:44:18 2012 +0=
300
+++ b/head/contrib/compiler-rt/lib/fixunssfsi.c	Fri Aug 10 14:19:25 2012 +0=
300
@@ -26,7 +26,7 @@
=20
 /* seee eeee emmm mmmm mmmm mmmm mmmm mmmm */
=20
-ARM_EABI_FNALIAS(f2uiz, fixunssfsi);
+ARM_EABI_FNALIAS(f2uiz, fixunssfsi)
=20
 COMPILER_RT_ABI su_int
 __fixunssfsi(float a)
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/fixunssft=
i.c
--- a/head/contrib/compiler-rt/lib/fixunssfti.c	Mon Jul 30 11:44:18 2012 +0=
300
+++ b/head/contrib/compiler-rt/lib/fixunssfti.c	Fri Aug 10 14:19:25 2012 +0=
300
@@ -12,10 +12,10 @@
  * =3D=3D=3D--------------------------------------------------------------=
--------=3D=3D=3D
  */
=20
+#include "int_lib.h"
+
 #if __x86_64
=20
-#include "int_lib.h"
-
 /* Returns: convert a to a unsigned long long, rounding toward zero.
  *          Negative values all become zero.
  */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/fixunsxft=
i.c
--- a/head/contrib/compiler-rt/lib/fixunsxfti.c	Mon Jul 30 11:44:18 2012 +0=
300
+++ b/head/contrib/compiler-rt/lib/fixunsxfti.c	Fri Aug 10 14:19:25 2012 +0=
300
@@ -12,10 +12,10 @@
  * =3D=3D=3D--------------------------------------------------------------=
--------=3D=3D=3D
  */
=20
+#include "int_lib.h"
+
 #if __x86_64
=20
-#include "int_lib.h"
-
 /* Returns: convert a to a unsigned long long, rounding toward zero.
  *          Negative values all become zero.
  */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/fixxfti.c
--- a/head/contrib/compiler-rt/lib/fixxfti.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/compiler-rt/lib/fixxfti.c	Fri Aug 10 14:19:25 2012 +0300
@@ -12,10 +12,10 @@
  * =3D=3D=3D--------------------------------------------------------------=
--------=3D=3D=3D
  */
=20
+#include "int_lib.h"
+
 #if __x86_64
=20
-#include "int_lib.h"
-
 /* Returns: convert a to a signed long long, rounding toward zero. */
=20
 /* Assumption: long double is an intel 80 bit floating point type padded w=
ith 6 bytes
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/floatdidf=
.c
--- a/head/contrib/compiler-rt/lib/floatdidf.c	Mon Jul 30 11:44:18 2012 +03=
00
+++ b/head/contrib/compiler-rt/lib/floatdidf.c	Fri Aug 10 14:19:25 2012 +03=
00
@@ -22,7 +22,7 @@
=20
 /* seee eeee eeee mmmm mmmm mmmm mmmm mmmm | mmmm mmmm mmmm mmmm mmmm mmmm=
 mmmm mmmm */
=20
-ARM_EABI_FNALIAS(l2d, floatdidf);
+ARM_EABI_FNALIAS(l2d, floatdidf)
=20
 #ifndef __SOFT_FP__
 /* Support for systems that have hardware floating-point; we'll set the in=
exact flag
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/floatdisf=
.c
--- a/head/contrib/compiler-rt/lib/floatdisf.c	Mon Jul 30 11:44:18 2012 +03=
00
+++ b/head/contrib/compiler-rt/lib/floatdisf.c	Fri Aug 10 14:19:25 2012 +03=
00
@@ -22,7 +22,7 @@
=20
 #include "int_lib.h"
=20
-ARM_EABI_FNALIAS(l2f, floatdisf);
+ARM_EABI_FNALIAS(l2f, floatdisf)
=20
 COMPILER_RT_ABI float
 __floatdisf(di_int a)
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/floatsidf=
.c
--- a/head/contrib/compiler-rt/lib/floatsidf.c	Mon Jul 30 11:44:18 2012 +03=
00
+++ b/head/contrib/compiler-rt/lib/floatsidf.c	Fri Aug 10 14:19:25 2012 +03=
00
@@ -18,7 +18,7 @@
=20
 #include "int_lib.h"
=20
-ARM_EABI_FNALIAS(i2d, floatsidf);
+ARM_EABI_FNALIAS(i2d, floatsidf)
=20
 fp_t __floatsidf(int a) {
    =20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/floatsisf=
.c
--- a/head/contrib/compiler-rt/lib/floatsisf.c	Mon Jul 30 11:44:18 2012 +03=
00
+++ b/head/contrib/compiler-rt/lib/floatsisf.c	Fri Aug 10 14:19:25 2012 +03=
00
@@ -18,7 +18,7 @@
=20
 #include "int_lib.h"
=20
-ARM_EABI_FNALIAS(i2f, floatsisf);
+ARM_EABI_FNALIAS(i2f, floatsisf)
=20
 fp_t __floatsisf(int a) {
    =20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/floattidf=
.c
--- a/head/contrib/compiler-rt/lib/floattidf.c	Mon Jul 30 11:44:18 2012 +03=
00
+++ b/head/contrib/compiler-rt/lib/floattidf.c	Fri Aug 10 14:19:25 2012 +03=
00
@@ -12,10 +12,10 @@
  * =3D=3D=3D--------------------------------------------------------------=
--------=3D=3D=3D
  */=20
=20
+#include "int_lib.h"
+
 #if __x86_64
=20
-#include "int_lib.h"
-
 /* Returns: convert a to a double, rounding toward even.*/
=20
 /* Assumption: double is a IEEE 64 bit floating point type=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/floattisf=
.c
--- a/head/contrib/compiler-rt/lib/floattisf.c	Mon Jul 30 11:44:18 2012 +03=
00
+++ b/head/contrib/compiler-rt/lib/floattisf.c	Fri Aug 10 14:19:25 2012 +03=
00
@@ -12,10 +12,10 @@
  * =3D=3D=3D--------------------------------------------------------------=
--------=3D=3D=3D
  */
=20
+#include "int_lib.h"
+
 #if __x86_64
=20
-#include "int_lib.h"
-
 /* Returns: convert a to a float, rounding toward even. */
=20
 /* Assumption: float is a IEEE 32 bit floating point type=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/floattixf=
.c
--- a/head/contrib/compiler-rt/lib/floattixf.c	Mon Jul 30 11:44:18 2012 +03=
00
+++ b/head/contrib/compiler-rt/lib/floattixf.c	Fri Aug 10 14:19:25 2012 +03=
00
@@ -12,10 +12,10 @@
  * =3D=3D=3D--------------------------------------------------------------=
--------=3D=3D=3D
  */
=20
+#include "int_lib.h"
+
 #if __x86_64
=20
-#include "int_lib.h"
-
 /* Returns: convert a to a long double, rounding toward even. */
=20
 /* Assumption: long double is a IEEE 80 bit floating point type padded to =
128 bits
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/floatundi=
df.c
--- a/head/contrib/compiler-rt/lib/floatundidf.c	Mon Jul 30 11:44:18 2012 +=
0300
+++ b/head/contrib/compiler-rt/lib/floatundidf.c	Fri Aug 10 14:19:25 2012 +=
0300
@@ -22,7 +22,7 @@
=20
 #include "int_lib.h"
=20
-ARM_EABI_FNALIAS(ul2d, floatundidf);
+ARM_EABI_FNALIAS(ul2d, floatundidf)
=20
 #ifndef __SOFT_FP__
 /* Support for systems that have hardware floating-point; we'll set the in=
exact flag
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/floatundi=
sf.c
--- a/head/contrib/compiler-rt/lib/floatundisf.c	Mon Jul 30 11:44:18 2012 +=
0300
+++ b/head/contrib/compiler-rt/lib/floatundisf.c	Fri Aug 10 14:19:25 2012 +=
0300
@@ -22,7 +22,7 @@
=20
 #include "int_lib.h"
=20
-ARM_EABI_FNALIAS(ul2f, floatundisf);
+ARM_EABI_FNALIAS(ul2f, floatundisf)
=20
 COMPILER_RT_ABI float
 __floatundisf(du_int a)
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/floatunsi=
df.c
--- a/head/contrib/compiler-rt/lib/floatunsidf.c	Mon Jul 30 11:44:18 2012 +=
0300
+++ b/head/contrib/compiler-rt/lib/floatunsidf.c	Fri Aug 10 14:19:25 2012 +=
0300
@@ -18,7 +18,7 @@
=20
 #include "int_lib.h"
=20
-ARM_EABI_FNALIAS(ui2d, floatunsidf);
+ARM_EABI_FNALIAS(ui2d, floatunsidf)
=20
 fp_t __floatunsidf(unsigned int a) {
    =20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/floatunsi=
sf.c
--- a/head/contrib/compiler-rt/lib/floatunsisf.c	Mon Jul 30 11:44:18 2012 +=
0300
+++ b/head/contrib/compiler-rt/lib/floatunsisf.c	Fri Aug 10 14:19:25 2012 +=
0300
@@ -18,7 +18,7 @@
=20
 #include "int_lib.h"
=20
-ARM_EABI_FNALIAS(ui2f, floatunsisf);
+ARM_EABI_FNALIAS(ui2f, floatunsisf)
=20
 fp_t __floatunsisf(unsigned int a) {
    =20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/floatunti=
df.c
--- a/head/contrib/compiler-rt/lib/floatuntidf.c	Mon Jul 30 11:44:18 2012 +=
0300
+++ b/head/contrib/compiler-rt/lib/floatuntidf.c	Fri Aug 10 14:19:25 2012 +=
0300
@@ -12,10 +12,10 @@
  * =3D=3D=3D--------------------------------------------------------------=
--------=3D=3D=3D
  */
=20
+#include "int_lib.h"
+
 #if __x86_64
=20
-#include "int_lib.h"
-
 /* Returns: convert a to a double, rounding toward even. */
=20
 /* Assumption: double is a IEEE 64 bit floating point type=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/floatunti=
sf.c
--- a/head/contrib/compiler-rt/lib/floatuntisf.c	Mon Jul 30 11:44:18 2012 +=
0300
+++ b/head/contrib/compiler-rt/lib/floatuntisf.c	Fri Aug 10 14:19:25 2012 +=
0300
@@ -12,10 +12,10 @@
  * =3D=3D=3D--------------------------------------------------------------=
--------=3D=3D=3D
  */
=20
+#include "int_lib.h"
+
 #if __x86_64
=20
-#include "int_lib.h"
-
 /* Returns: convert a to a float, rounding toward even. */
=20
 /* Assumption: float is a IEEE 32 bit floating point type=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/floatunti=
xf.c
--- a/head/contrib/compiler-rt/lib/floatuntixf.c	Mon Jul 30 11:44:18 2012 +=
0300
+++ b/head/contrib/compiler-rt/lib/floatuntixf.c	Fri Aug 10 14:19:25 2012 +=
0300
@@ -12,10 +12,10 @@
  * =3D=3D=3D--------------------------------------------------------------=
--------=3D=3D=3D
  */
=20
+#include "int_lib.h"
+
 #if __x86_64
=20
-#include "int_lib.h"
-
 /* Returns: convert a to a long double, rounding toward even. */
=20
 /* Assumption: long double is a IEEE 80 bit floating point type padded to =
128 bits
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/fp_lib.h
--- a/head/contrib/compiler-rt/lib/fp_lib.h	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/compiler-rt/lib/fp_lib.h	Fri Aug 10 14:19:25 2012 +0300
@@ -124,7 +124,7 @@
     *lo =3D *lo << count;
 }
=20
-static inline void wideRightShiftWithSticky(rep_t *hi, rep_t *lo, int coun=
t) {
+static inline void wideRightShiftWithSticky(rep_t *hi, rep_t *lo, unsigned=
 int count) {
     if (count < typeWidth) {
         const bool sticky =3D *lo << (typeWidth - count);
         *lo =3D *hi << (typeWidth - count) | *lo >> count | sticky;
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/int_endia=
nness.h
--- a/head/contrib/compiler-rt/lib/int_endianness.h	Mon Jul 30 11:44:18 201=
2 +0300
+++ b/head/contrib/compiler-rt/lib/int_endianness.h	Fri Aug 10 14:19:25 201=
2 +0300
@@ -31,7 +31,7 @@
=20
 /* .. */
=20
-#if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) ||=
 defined(__DragonFly__)
+#if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) ||=
 defined(__DragonFly__) || defined(__minix)
 #include <sys/endian.h>
=20
 #if _BYTE_ORDER =3D=3D _BIG_ENDIAN
@@ -80,6 +80,13 @@
=20
 #endif /* GNU/Linux */
=20
+#if defined(_WIN32)
+
+#define _YUGA_LITTLE_ENDIAN 1
+#define _YUGA_BIG_ENDIAN    0
+
+#endif /* Windows */
+
 /* . */
=20
 #if !defined(_YUGA_LITTLE_ENDIAN) || !defined(_YUGA_BIG_ENDIAN)
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/int_util.c
--- a/head/contrib/compiler-rt/lib/int_util.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/compiler-rt/lib/int_util.c	Fri Aug 10 14:19:25 2012 +0300
@@ -29,6 +29,19 @@
   panic("%s:%d: abort in %s", file, line, function);
 }
=20
+#elif __APPLE__ && !__STATIC__
+
+/* from libSystem.dylib */
+extern void __assert_rtn(const char *func, const char *file,=20
+                     int line, const char * message) __attribute__((noretu=
rn));
+
+__attribute__((weak))
+__attribute__((visibility("hidden")))
+void compilerrt_abort_impl(const char *file, int line, const char *functio=
n) {
+  __assert_rtn(function, file, line, "libcompiler_rt abort");
+}
+
+
 #else
=20
 /* Get the system definition of abort() */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/int_util.h
--- a/head/contrib/compiler-rt/lib/int_util.h	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/compiler-rt/lib/int_util.h	Fri Aug 10 14:19:25 2012 +0300
@@ -22,11 +22,8 @@
 /** \brief Trigger a program abort (or panic for kernel code). */
 #define compilerrt_abort() compilerrt_abort_impl(__FILE__, __LINE__, \
                                                  __FUNCTION__)
+
 void compilerrt_abort_impl(const char *file, int line,
-                           const char *function)
-#ifndef KERNEL_USE
-  __attribute__((weak))
-#endif
-  __attribute__((noreturn)) __attribute__((visibility("hidden")));
+                           const char *function) __attribute__((noreturn));
=20
 #endif /* INT_UTIL_H */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/lshrdi3.c
--- a/head/contrib/compiler-rt/lib/lshrdi3.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/compiler-rt/lib/lshrdi3.c	Fri Aug 10 14:19:25 2012 +0300
@@ -18,7 +18,7 @@
=20
 /* Precondition:  0 <=3D b < bits_in_dword */
=20
-ARM_EABI_FNALIAS(llsr, lshrdi3);
+ARM_EABI_FNALIAS(llsr, lshrdi3)
=20
 COMPILER_RT_ABI di_int
 __lshrdi3(di_int a, si_int b)
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/lshrti3.c
--- a/head/contrib/compiler-rt/lib/lshrti3.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/compiler-rt/lib/lshrti3.c	Fri Aug 10 14:19:25 2012 +0300
@@ -12,10 +12,10 @@
  * =3D=3D=3D--------------------------------------------------------------=
--------=3D=3D=3D
  */
=20
+#include "int_lib.h"
+
 #if __x86_64
=20
-#include "int_lib.h"
-
 /* Returns: logical a >> b */
=20
 /* Precondition:  0 <=3D b < bits_in_tword */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/modti3.c
--- a/head/contrib/compiler-rt/lib/modti3.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/compiler-rt/lib/modti3.c	Fri Aug 10 14:19:25 2012 +0300
@@ -12,10 +12,10 @@
  * =3D=3D=3D--------------------------------------------------------------=
--------=3D=3D=3D
  */
=20
+#include "int_lib.h"
+
 #if __x86_64
=20
-#include "int_lib.h"
-
 tu_int __udivmodti4(tu_int a, tu_int b, tu_int* rem);
=20
 /*Returns: a % b */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/muldf3.c
--- a/head/contrib/compiler-rt/lib/muldf3.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/compiler-rt/lib/muldf3.c	Fri Aug 10 14:19:25 2012 +0300
@@ -15,7 +15,7 @@
 #define DOUBLE_PRECISION
 #include "fp_lib.h"
=20
-ARM_EABI_FNALIAS(dmul, muldf3);
+ARM_EABI_FNALIAS(dmul, muldf3)
=20
 COMPILER_RT_ABI fp_t
 __muldf3(fp_t a, fp_t b) {
@@ -96,7 +96,7 @@
         // a zero of the appropriate sign.  Mathematically there is no nee=
d to
         // handle this case separately, but we make it a special case to
         // simplify the shift logic.
-        const int shift =3D 1 - productExponent;
+        const unsigned int shift =3D 1U - (unsigned int)productExponent;
         if (shift >=3D typeWidth) return fromRep(productSign);
        =20
         // Otherwise, shift the significand of the result so that the round
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/muldi3.c
--- a/head/contrib/compiler-rt/lib/muldi3.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/compiler-rt/lib/muldi3.c	Fri Aug 10 14:19:25 2012 +0300
@@ -40,7 +40,7 @@
=20
 /* Returns: a * b */
=20
-ARM_EABI_FNALIAS(lmul, muldi3);
+ARM_EABI_FNALIAS(lmul, muldi3)
=20
 COMPILER_RT_ABI di_int
 __muldi3(di_int a, di_int b)
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/muloti4.c
--- a/head/contrib/compiler-rt/lib/muloti4.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/compiler-rt/lib/muloti4.c	Fri Aug 10 14:19:25 2012 +0300
@@ -12,10 +12,10 @@
  * =3D=3D=3D--------------------------------------------------------------=
--------=3D=3D=3D
  */
=20
+#include "int_lib.h"
+
 #if __x86_64
=20
-#include "int_lib.h"
-
 /* Returns: a * b */
=20
 /* Effects: sets *overflow to 1  if a * b overflows */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/mulsf3.c
--- a/head/contrib/compiler-rt/lib/mulsf3.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/compiler-rt/lib/mulsf3.c	Fri Aug 10 14:19:25 2012 +0300
@@ -15,7 +15,7 @@
 #define SINGLE_PRECISION
 #include "fp_lib.h"
=20
-ARM_EABI_FNALIAS(fmul, mulsf3);
+ARM_EABI_FNALIAS(fmul, mulsf3)
=20
 COMPILER_RT_ABI fp_t
 __mulsf3(fp_t a, fp_t b) {
@@ -92,7 +92,7 @@
     if (productExponent <=3D 0) {
         // Result is denormal before rounding, the exponent is zero and we
         // need to shift the significand.
-        wideRightShiftWithSticky(&productHi, &productLo, 1 - productExpone=
nt);
+        wideRightShiftWithSticky(&productHi, &productLo, 1U - (unsigned)pr=
oductExponent);
     }
    =20
     else {
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/multi3.c
--- a/head/contrib/compiler-rt/lib/multi3.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/compiler-rt/lib/multi3.c	Fri Aug 10 14:19:25 2012 +0300
@@ -12,10 +12,10 @@
  * =3D=3D=3D--------------------------------------------------------------=
--------=3D=3D=3D
  */
=20
+#include "int_lib.h"
+
 #if __x86_64
=20
-#include "int_lib.h"
-
 /* Returns: a * b */
=20
 static
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/mulvti3.c
--- a/head/contrib/compiler-rt/lib/mulvti3.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/compiler-rt/lib/mulvti3.c	Fri Aug 10 14:19:25 2012 +0300
@@ -12,10 +12,10 @@
  * =3D=3D=3D--------------------------------------------------------------=
--------=3D=3D=3D
  */
=20
+#include "int_lib.h"
+
 #if __x86_64
=20
-#include "int_lib.h"
-
 /* Returns: a * b */
=20
 /* Effects: aborts if a * b overflows */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/negdf2.c
--- a/head/contrib/compiler-rt/lib/negdf2.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/compiler-rt/lib/negdf2.c	Fri Aug 10 14:19:25 2012 +0300
@@ -14,7 +14,7 @@
 #define DOUBLE_PRECISION
 #include "fp_lib.h"
=20
-ARM_EABI_FNALIAS(dneg, negdf2);
+ARM_EABI_FNALIAS(dneg, negdf2)
=20
 fp_t __negdf2(fp_t a) {
     return fromRep(toRep(a) ^ signBit);
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/negsf2.c
--- a/head/contrib/compiler-rt/lib/negsf2.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/compiler-rt/lib/negsf2.c	Fri Aug 10 14:19:25 2012 +0300
@@ -14,7 +14,7 @@
 #define SINGLE_PRECISION
 #include "fp_lib.h"
=20
-ARM_EABI_FNALIAS(fneg, negsf2);
+ARM_EABI_FNALIAS(fneg, negsf2)
=20
 COMPILER_RT_ABI fp_t
 __negsf2(fp_t a) {
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/negti2.c
--- a/head/contrib/compiler-rt/lib/negti2.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/compiler-rt/lib/negti2.c	Fri Aug 10 14:19:25 2012 +0300
@@ -12,10 +12,10 @@
  * =3D=3D=3D--------------------------------------------------------------=
--------=3D=3D=3D
  */
=20
+#include "int_lib.h"
+
 #if __x86_64
=20
-#include "int_lib.h"
-
 /* Returns: -a */
=20
 ti_int
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/negvti2.c
--- a/head/contrib/compiler-rt/lib/negvti2.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/compiler-rt/lib/negvti2.c	Fri Aug 10 14:19:25 2012 +0300
@@ -12,10 +12,10 @@
  *=3D=3D=3D---------------------------------------------------------------=
-------=3D=3D=3D
  */
=20
+#include "int_lib.h"
+
 #if __x86_64
=20
-#include "int_lib.h"
-
 /* Returns: -a */
=20
 /* Effects: aborts if -a overflows */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/parityti2=
.c
--- a/head/contrib/compiler-rt/lib/parityti2.c	Mon Jul 30 11:44:18 2012 +03=
00
+++ b/head/contrib/compiler-rt/lib/parityti2.c	Fri Aug 10 14:19:25 2012 +03=
00
@@ -12,10 +12,10 @@
  * =3D=3D=3D--------------------------------------------------------------=
--------=3D=3D=3D
  */=20
=20
+#include "int_lib.h"
+
 #if __x86_64
=20
-#include "int_lib.h"
-
 /* Returns: 1 if number of bits is odd else returns 0 */
=20
 si_int __paritydi2(di_int a);
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/popcountt=
i2.c
--- a/head/contrib/compiler-rt/lib/popcountti2.c	Mon Jul 30 11:44:18 2012 +=
0300
+++ b/head/contrib/compiler-rt/lib/popcountti2.c	Fri Aug 10 14:19:25 2012 +=
0300
@@ -12,10 +12,10 @@
  * =3D=3D=3D--------------------------------------------------------------=
--------=3D=3D=3D
  */
=20
+#include "int_lib.h"
+
 #if __x86_64
=20
-#include "int_lib.h"
-
 /* Returns: count of 1 bits */
=20
 si_int
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/powitf2.c
--- a/head/contrib/compiler-rt/lib/powitf2.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/compiler-rt/lib/powitf2.c	Fri Aug 10 14:19:25 2012 +0300
@@ -12,10 +12,10 @@
  * =3D=3D=3D--------------------------------------------------------------=
--------=3D=3D=3D
  */
=20
+#include "int_lib.h"
+
 #if _ARCH_PPC
=20
-#include "int_lib.h"
-
 /* Returns: a ^ b */
=20
 long double
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/subdf3.c
--- a/head/contrib/compiler-rt/lib/subdf3.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/compiler-rt/lib/subdf3.c	Fri Aug 10 14:19:25 2012 +0300
@@ -18,7 +18,7 @@
 fp_t COMPILER_RT_ABI __adddf3(fp_t a, fp_t b);
=20
=20
-ARM_EABI_FNALIAS(dsub, subdf3);
+ARM_EABI_FNALIAS(dsub, subdf3)
=20
 // Subtraction; flip the sign bit of b and add.
 COMPILER_RT_ABI fp_t
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/subsf3.c
--- a/head/contrib/compiler-rt/lib/subsf3.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/compiler-rt/lib/subsf3.c	Fri Aug 10 14:19:25 2012 +0300
@@ -17,7 +17,7 @@
=20
 fp_t COMPILER_RT_ABI __addsf3(fp_t a, fp_t b);
=20
-ARM_EABI_FNALIAS(fsub, subsf3);
+ARM_EABI_FNALIAS(fsub, subsf3)
=20
 // Subtraction; flip the sign bit of b and add.
 COMPILER_RT_ABI fp_t
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/subvti3.c
--- a/head/contrib/compiler-rt/lib/subvti3.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/compiler-rt/lib/subvti3.c	Fri Aug 10 14:19:25 2012 +0300
@@ -12,10 +12,10 @@
  * =3D=3D=3D--------------------------------------------------------------=
--------=3D=3D=3D
  */
=20
+#include "int_lib.h"
+
 #if __x86_64
=20
-#include "int_lib.h"
-
 /* Returns: a - b */
=20
 /* Effects: aborts if a - b overflows */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/truncdfsf=
2.c
--- a/head/contrib/compiler-rt/lib/truncdfsf2.c	Mon Jul 30 11:44:18 2012 +0=
300
+++ b/head/contrib/compiler-rt/lib/truncdfsf2.c	Fri Aug 10 14:19:25 2012 +0=
300
@@ -64,7 +64,7 @@
=20
 // End helper routines.  Conversion implementation follows.
=20
-ARM_EABI_FNALIAS(d2f, truncdfsf2);
+ARM_EABI_FNALIAS(d2f, truncdfsf2)
=20
 COMPILER_RT_ABI dst_t
 __truncdfsf2(src_t a) {
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/ucmpti2.c
--- a/head/contrib/compiler-rt/lib/ucmpti2.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/compiler-rt/lib/ucmpti2.c	Fri Aug 10 14:19:25 2012 +0300
@@ -12,10 +12,10 @@
  * =3D=3D=3D--------------------------------------------------------------=
--------=3D=3D=3D
  */
=20
+#include "int_lib.h"
+
 #if __x86_64
=20
-#include "int_lib.h"
-
 /* Returns:  if (a <  b) returns 0
  *           if (a =3D=3D b) returns 1
  *           if (a >  b) returns 2
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/udivmoddi=
4.c
--- a/head/contrib/compiler-rt/lib/udivmoddi4.c	Mon Jul 30 11:44:18 2012 +0=
300
+++ b/head/contrib/compiler-rt/lib/udivmoddi4.c	Fri Aug 10 14:19:25 2012 +0=
300
@@ -20,8 +20,6 @@
=20
 /* Translated from Figure 3-40 of The PowerPC Compiler Writer's Guide */
=20
-ARM_EABI_FNALIAS(uldivmod, udivmoddi4);
-
 COMPILER_RT_ABI du_int
 __udivmoddi4(du_int a, du_int b, du_int* rem)
 {
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/udivmodti=
4.c
--- a/head/contrib/compiler-rt/lib/udivmodti4.c	Mon Jul 30 11:44:18 2012 +0=
300
+++ b/head/contrib/compiler-rt/lib/udivmodti4.c	Fri Aug 10 14:19:25 2012 +0=
300
@@ -12,10 +12,10 @@
  * =3D=3D=3D--------------------------------------------------------------=
--------=3D=3D=3D
  */=20
=20
+#include "int_lib.h"
+
 #if __x86_64
=20
-#include "int_lib.h"
-
 /* Effects: if rem !=3D 0, *rem =3D a % b=20
  * Returns: a / b=20
  */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/udivsi3.c
--- a/head/contrib/compiler-rt/lib/udivsi3.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/compiler-rt/lib/udivsi3.c	Fri Aug 10 14:19:25 2012 +0300
@@ -18,8 +18,9 @@
=20
 /* Translated from Figure 3-40 of The PowerPC Compiler Writer's Guide */
=20
-ARM_EABI_FNALIAS(uidiv, udivsi3);
+ARM_EABI_FNALIAS(uidiv, udivsi3)
=20
+/* This function should not call __divsi3! */
 COMPILER_RT_ABI su_int
 __udivsi3(su_int n, su_int d)
 {
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/udivti3.c
--- a/head/contrib/compiler-rt/lib/udivti3.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/compiler-rt/lib/udivti3.c	Fri Aug 10 14:19:25 2012 +0300
@@ -12,10 +12,10 @@
  * =3D=3D=3D--------------------------------------------------------------=
--------=3D=3D=3D
  */
=20
+#include "int_lib.h"
+
 #if __x86_64
=20
-#include "int_lib.h"
-
 tu_int __udivmodti4(tu_int a, tu_int b, tu_int* rem);
=20
 /* Returns: a / b */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/compiler-rt/lib/umodti3.c
--- a/head/contrib/compiler-rt/lib/umodti3.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/compiler-rt/lib/umodti3.c	Fri Aug 10 14:19:25 2012 +0300
@@ -12,10 +12,10 @@
  * =3D=3D=3D--------------------------------------------------------------=
--------=3D=3D=3D
  */
=20
+#include "int_lib.h"
+
 #if __x86_64
=20
-#include "int_lib.h"
-
 tu_int __udivmodti4(tu_int a, tu_int b, tu_int* rem);
=20
 /* Returns: a % b */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/groff/tmac/doc-common
--- a/head/contrib/groff/tmac/doc-common	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/groff/tmac/doc-common	Fri Aug 10 14:19:25 2012 +0300
@@ -574,10 +574,7 @@
 .ds doc-operating-system-FreeBSD-8.0     8.0
 .ds doc-operating-system-FreeBSD-8.1     8.1
 .ds doc-operating-system-FreeBSD-8.2     8.2
-.ds doc-operating-system-FreeBSD-8.3     8.3
 .ds doc-operating-system-FreeBSD-9.0     9.0
-.ds doc-operating-system-FreeBSD-9.1     9.1
-.ds doc-operating-system-FreeBSD-10.0    10.0
 .
 .ds doc-operating-system-Darwin-8.0.0  8.0.0
 .ds doc-operating-system-Darwin-8.1.0  8.1.0
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/groff/tmac/doc-syms
--- a/head/contrib/groff/tmac/doc-syms	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/groff/tmac/doc-syms	Fri Aug 10 14:19:25 2012 +0300
@@ -661,7 +661,7 @@
 .as doc-str-St--susv3          " (\*[Lq]\*[doc-Tn-font-size]SUSv3\*[doc-st=
r-St]\*[Rq])
 .ds doc-str-St--svid4          System\~V Interface Definition, Fourth Edit=
ion
 .as doc-str-St--svid4          " (\*[Lq]\*[doc-Tn-font-size]SVID\*[doc-str=
-St]\^4\*[Rq])
-.ds doc-str-St--xbd5           \*[doc-Tn-font-size]X/Open\*[doc-str-St] Sy=
stem Interface Definitions Issue\~5
+.ds doc-str-St--xbd5           \*[doc-Tn-font-size]X/Open\*[doc-str-St] Ba=
se Definitions Issue\~5
 .as doc-str-St--xbd5           " (\*[Lq]\*[doc-Tn-font-size]XBD\*[doc-str-=
St]\^5\*[Rq])
 .ds doc-str-St--xcu5           \*[doc-Tn-font-size]X/Open\*[doc-str-St] Co=
mmands and Utilities Issue\~5
 .as doc-str-St--xcu5           " (\*[Lq]\*[doc-Tn-font-size]XCU\*[doc-str-=
St]\^5\*[Rq])
@@ -814,7 +814,6 @@
 .ds doc-str-Lb-librt       \*[Px] \*[doc-str-Lb]Real-time Library (librt, =
\-lrt)
 .ds doc-str-Lb-libsdp      Bluetooth Service Discovery Protocol User Libra=
ry (libsdp, \-lsdp)
 .ds doc-str-Lb-libssp      Buffer Overflow Protection Library (libssp, \-l=
ssp)
-.ds doc-str-Lb-libstdthreads C11 Threads Library (libstdthreads, \-lstdthr=
eads)
 .ds doc-str-Lb-libSystem   System Library (libSystem, \-lSystem)
 .ds doc-str-Lb-libtermcap  Termcap Access Library (libtermcap, \-ltermcap)
 .ds doc-str-Lb-libterminfo Terminal Information Library (libterminfo, \-lt=
erminfo)
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/groff/tmac/doc.tmac
--- a/head/contrib/groff/tmac/doc.tmac	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/groff/tmac/doc.tmac	Fri Aug 10 14:19:25 2012 +0300
@@ -438,7 +438,7 @@
 .      \" last argument
 .      if (\n[doc-reg-dfr1] =3D=3D 4) \
 .        nop \|\-\c
-.      nop \f[]\s[0]\c
+.      nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\c
 .      doc-print-and-reset
 .    \}
 .    el \{\
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/groff/tmac/groff_mdoc.man
--- a/head/contrib/groff/tmac/groff_mdoc.man	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/groff/tmac/groff_mdoc.man	Fri Aug 10 14:19:25 2012 +0300
@@ -1797,8 +1797,6 @@
 .Lb libsdp
 .It Li libssp
 .Lb libssp
-.It Li libstdthreads
-.Lb libstdthreads
 .It Li libSystem
 .Lb libSystem
 .It Li libtermcap
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/FREEBSD-Xlist
--- a/head/contrib/libarchive/FREEBSD-Xlist	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/FREEBSD-Xlist	Fri Aug 10 14:19:25 2012 +0300
@@ -1,4 +1,6 @@
-$FreeBSD: head/contrib/libarchive/FREEBSD-Xlist 232153 2012-02-25 10:58:02=
Z mm $
+.git
+.gitattributes
+.gitignore
 CMakeLists.txt
 CTestConfig.cmake
 INSTALL
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/FREEBSD-upgrade
--- a/head/contrib/libarchive/FREEBSD-upgrade	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/FREEBSD-upgrade	Fri Aug 10 14:19:25 2012 +0300
@@ -1,10 +1,10 @@
-$FreeBSD: head/contrib/libarchive/FREEBSD-upgrade 228835 2011-12-23 08:50:=
26Z mm $
+$FreeBSD: head/contrib/libarchive/FREEBSD-upgrade 238827 2012-07-27 08:28:=
44Z mm $
=20
 libarchive
=20
-The source code is pulled with svn:
+The source code is pulled with git:
=20
-	svn checkout http://libarchive.googlecode.com/svn/release/2.8
+	git clone -b release git://github.com/libarchive/libarchive.git
=20
 For the contrib directory files and directories were pruned by:
 =09
@@ -21,4 +21,4 @@
 branch (aka HEAD).  Never make local changes on the vendor branch.
=20
 mm at FreeBSD.org
-21-December-2011
+27-July-2012
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/NEWS
--- a/head/contrib/libarchive/NEWS	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/NEWS	Fri Aug 10 14:19:25 2012 +0300
@@ -1,14 +1,10 @@
-Jan 10, 2012: Issue 223: Skip atime tests if atime not supported
-Jan 09, 2012: Issue 222: Errors saving sparse files to pax archives
-Jan 09, 2012: Issue 221: allow archive_*_free(NULL)
-Dec 31, 2011: Issue 212: configure script on Solaris
-Dec 30, 2011: Issue 218: empty contents extracting Zip files with bsdcpio
-Dec 30, 2011: Issue 217: fix compile warning
-Dec 30, 2011: Issue 216: truncated filenames in listings
-Dec 28, 2011: Issue 210: memory leak on Windows
-Dec 28, 2011: Issue 206: fix hardlink tests on Windows 2000
-Dec 27, 2011: Issue 208: Don't hang when using external compression
-   program on Windows
+Mar 27, 2012: libarchive 3.0.4 released
+
+Feb 05, 2012: libarchive development now hosted at GitHub.
+    http://libarchive.github.com/
+Feb 05, 2012: libarchive's issue tracker remains at Google Code.
+    http://code.google.com/p/libarchive/issues/list
+Feb 05, 2012: libarchive's mailing lists remain at Google Groups.
=20
 Dec 24, 2011: libarchive 3.0.2 released
 Dec 23, 2011: Various fixes merged from FreeBSD
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/README
--- a/head/contrib/libarchive/README	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/README	Fri Aug 10 14:19:25 2012 +0300
@@ -1,9 +1,14 @@
 README for libarchive bundle.
=20
 Questions?  Issues?
-   * http://libarchive.googlecode.com/ is the home for ongoing
-     libarchive development, including issue tracker, additional
-     documentation, and links to the libarchive mailing lists.
+   * http://libarchive.github.com/ is the home for ongoing
+     libarchive development, including documentation, and
+     links to the libarchive mailing lists.
+   * To report an issue, use the issue tracker at
+     http://code.google.com/p/libarchive/issues/list
+   * To submit an enhancement to libarchive, please submit
+     a pull request via GitHub.
+     https://github.com/libarchive/libarchive/pulls
=20
 This distribution bundle includes the following components:
    * libarchive: a library for reading and writing streaming archives
@@ -66,6 +71,7 @@
   * ZIP archives (with uncompressed or "deflate" compressed entries)
   * GNU and BSD 'ar' archives
   * 'mtree' format
+  * 7-Zip archives
   * Microsoft CAB format
   * LHA and LZH archives
   * RAR archives
@@ -92,6 +98,7 @@
   * GNU and BSD 'ar' archives
   * 'mtree' format
   * ISO9660 format
+  * 7-Zip archives
   * XAR archives
=20
 When creating archives, the result can be filtered with any of the followi=
ng:
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/cpio/bsdcpio.1
--- a/head/contrib/libarchive/cpio/bsdcpio.1	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/cpio/bsdcpio.1	Fri Aug 10 14:19:25 2012 +0300
@@ -22,9 +22,9 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\" $FreeBSD: head/contrib/libarchive/cpio/bsdcpio.1 232153 2012-02-25 10:=
58:02Z mm $
+.\" $FreeBSD: head/contrib/libarchive/cpio/bsdcpio.1 238856 2012-07-28 06:=
38:44Z mm $
 .\"
-.Dd December 21, 2007
+.Dd December 24, 2011
 .Dt CPIO 1
 .Os
 .Sh NAME
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/cpio/cmdline.c
--- a/head/contrib/libarchive/cpio/cmdline.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/cpio/cmdline.c	Fri Aug 10 14:19:25 2012 +0300
@@ -26,7 +26,7 @@
=20
=20
 #include "cpio_platform.h"
-__FBSDID("$FreeBSD: head/contrib/libarchive/cpio/cmdline.c 232153 2012-02-=
25 10:58:02Z mm $");
+__FBSDID("$FreeBSD: head/contrib/libarchive/cpio/cmdline.c 238856 2012-07-=
28 06:38:44Z mm $");
=20
 #ifdef HAVE_ERRNO_H
 #include <errno.h>
@@ -346,6 +346,7 @@
 				snprintf(errbuff, sizeof(errbuff),
 				    "Couldn't lookup user ``%s''", user);
 				errbuff[sizeof(errbuff) - 1] =3D '\0';
+				free(user);
 				return (errbuff);
 			}
 		}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/cpio/cpio.c
--- a/head/contrib/libarchive/cpio/cpio.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/cpio/cpio.c	Fri Aug 10 14:19:25 2012 +0300
@@ -26,7 +26,7 @@
=20
=20
 #include "cpio_platform.h"
-__FBSDID("$FreeBSD: head/contrib/libarchive/cpio/cpio.c 232153 2012-02-25 =
10:58:02Z mm $");
+__FBSDID("$FreeBSD: head/contrib/libarchive/cpio/cpio.c 238856 2012-07-28 =
06:38:44Z mm $");
=20
 #include <sys/types.h>
 #include <archive.h>
@@ -82,7 +82,6 @@
 #include "cpio.h"
 #include "err.h"
 #include "line_reader.h"
-#include "matching.h"
=20
 /* Fixed size of uname/gname caches. */
 #define	name_cache_size 101
@@ -190,6 +189,10 @@
 	cpio->bytes_per_block =3D 512;
 	cpio->filename =3D NULL;
=20
+	cpio->matching =3D archive_match_new();
+	if (cpio->matching =3D=3D NULL)
+		lafe_errc(1, 0, "Out of memory");
+
 	while ((opt =3D cpio_getopt(cpio)) !=3D -1) {
 		switch (opt) {
 		case '0': /* GNU convention: --null, -0 */
@@ -216,14 +219,20 @@
 			cpio->extract_flags &=3D ~ARCHIVE_EXTRACT_NO_AUTODIR;
 			break;
 		case 'E': /* NetBSD/OpenBSD */
-			lafe_include_from_file(&cpio->matching,
-			    cpio->argument, cpio->option_null);
+			if (archive_match_include_pattern_from_file(
+			    cpio->matching, cpio->argument,
+			    cpio->option_null) !=3D ARCHIVE_OK)
+				lafe_errc(1, 0, "Error : %s",
+				    archive_error_string(cpio->matching));
 			break;
 		case 'F': /* NetBSD/OpenBSD/GNU cpio */
 			cpio->filename =3D cpio->argument;
 			break;
 		case 'f': /* POSIX 1997 */
-			lafe_exclude(&cpio->matching, cpio->argument);
+			if (archive_match_exclude_pattern(cpio->matching,
+			    cpio->argument) !=3D ARCHIVE_OK)
+				lafe_errc(1, 0, "Error : %s",
+				    archive_error_string(cpio->matching));
 			break;
 		case 'H': /* GNU cpio (also --format) */
 			cpio->format =3D cpio->argument;
@@ -369,9 +378,6 @@
 	/* -v overrides -V */
 	if (cpio->dot && cpio->verbose)
 		cpio->dot =3D 0;
-	/* -v overrides -V */
-	if (cpio->dot && cpio->verbose)
-		cpio->dot =3D 0;
 	/* TODO: Flag other nonsensical combinations. */
=20
 	switch (cpio->mode) {
@@ -385,7 +391,10 @@
 		break;
 	case 'i':
 		while (*cpio->argv !=3D NULL) {
-			lafe_include(&cpio->matching, *cpio->argv);
+			if (archive_match_include_pattern(cpio->matching,
+			    *cpio->argv) !=3D ARCHIVE_OK)
+				lafe_errc(1, 0, "Error : %s",
+				    archive_error_string(cpio->matching));
 			--cpio->argc;
 			++cpio->argv;
 		}
@@ -405,6 +414,7 @@
 		    "Must specify at least one of -i, -o, or -p");
 	}
=20
+	archive_match_free(cpio->matching);
 	free_cache(cpio->gname_cache);
 	free_cache(cpio->uname_cache);
 	return (cpio->return_value);
@@ -909,7 +919,7 @@
 			lafe_errc(1, archive_errno(a),
 			    "%s", archive_error_string(a));
 		}
-		if (lafe_excluded(cpio->matching, archive_entry_pathname(entry)))
+		if (archive_match_path_excluded(cpio->matching, entry))
 			continue;
 		if (cpio->option_rename) {
 			destpath =3D cpio_rename(archive_entry_pathname(entry));
@@ -1011,7 +1021,7 @@
 			lafe_errc(1, archive_errno(a),
 			    "%s", archive_error_string(a));
 		}
-		if (lafe_excluded(cpio->matching, archive_entry_pathname(entry)))
+		if (archive_match_path_excluded(cpio->matching, entry))
 			continue;
 		if (cpio->verbose)
 			list_item_verbose(cpio, entry);
@@ -1306,7 +1316,8 @@
 	if (pwent =3D=3D NULL) {
 		*name =3D NULL;
 		if (errno !=3D 0 && errno !=3D ENOENT)
-			lafe_warnc(errno, "getpwuid(%d) failed", id);
+			lafe_warnc(errno, "getpwuid(%s) failed",
+			    cpio_i64toa((int64_t)id));
 		return (errno);
 	}
=20
@@ -1333,7 +1344,8 @@
 	if (grent =3D=3D NULL) {
 		*name =3D NULL;
 		if (errno !=3D 0)
-			lafe_warnc(errno, "getgrgid(%d) failed", id);
+			lafe_warnc(errno, "getgrgid(%s) failed",
+			    cpio_i64toa((int64_t)id));
 		return (errno);
 	}
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/cpio/cpio.h
--- a/head/contrib/libarchive/cpio/cpio.h	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/cpio/cpio.h	Fri Aug 10 14:19:25 2012 +0300
@@ -22,7 +22,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.
  *
- * $FreeBSD: head/contrib/libarchive/cpio/cpio.h 232153 2012-02-25 10:58:0=
2Z mm $
+ * $FreeBSD: head/contrib/libarchive/cpio/cpio.h 238856 2012-07-28 06:38:4=
4Z mm $
  */
=20
 #ifndef CPIO_H_INCLUDED
@@ -31,8 +31,6 @@
 #include "cpio_platform.h"
 #include <stdio.h>
=20
-#include "matching.h"
-
 /*
  * The internal state for the "cpio" program.
  *
@@ -88,7 +86,7 @@
 	struct name_cache *gname_cache;
=20
 	/* Work data. */
-	struct lafe_matching  *matching;
+	struct archive   *matching;
 	char		 *buff;
 	size_t		  buff_size;
 };
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/cpio/test/main=
.c
--- a/head/contrib/libarchive/cpio/test/main.c	Mon Jul 30 11:44:18 2012 +03=
00
+++ b/head/contrib/libarchive/cpio/test/main.c	Fri Aug 10 14:19:25 2012 +03=
00
@@ -24,6 +24,9 @@
  */
=20
 #include "test.h"
+#ifdef HAVE_SYS_IOCTL_H
+#include <sys/ioctl.h>
+#endif
 #ifdef HAVE_SYS_TIME_H
 #include <sys/time.h>
 #endif
@@ -31,6 +34,16 @@
 #ifdef HAVE_ICONV_H
 #include <iconv.h>
 #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 <linux/ext2_fs.h>      /* for Linux file flags */
+#endif
+#if defined(HAVE_EXT2FS_EXT2_FS_H) && !defined(__CYGWIN__)
+#include <ext2fs/ext2_fs.h>     /* Linux file flags, broken on Cygwin */
+#endif
 #include <limits.h>
 #include <locale.h>
 #ifdef HAVE_SIGNAL_H
@@ -46,7 +59,7 @@
  * TODO: Move this into a separate configuration header, have all test
  * suites share one copy of this file.
  */
-__FBSDID("$FreeBSD: head/contrib/libarchive/cpio/test/main.c 232153 2012-0=
2-25 10:58:02Z mm $");
+__FBSDID("$FreeBSD: head/contrib/libarchive/cpio/test/main.c 238856 2012-0=
7-28 06:38:44Z mm $");
 #define KNOWNREF	"test_option_f.cpio.uu"
 #define ENVBASE "BSDCPIO" /* Prefix for environment variables. */
 #define	PROGRAM "bsdcpio" /* Name of program being tested. */
@@ -116,7 +129,14 @@
 #endif
=20
 #if defined(_WIN32) && !defined(__CYGWIN__)
-void *GetFunctionKernel32(const char *name)
+static void	*GetFunctionKernel32(const char *);
+static int	 my_CreateSymbolicLinkA(const char *, const char *, int);
+static int	 my_CreateHardLinkA(const char *, const char *);
+static int	 my_GetFileInformationByName(const char *,
+		     BY_HANDLE_FILE_INFORMATION *);
+
+static void *
+GetFunctionKernel32(const char *name)
 {
 	static HINSTANCE lib;
 	static int set;
@@ -155,7 +175,7 @@
 	return f =3D=3D NULL ? 0 : (*f)(linkname, target, NULL);
 }
=20
-int
+static int
 my_GetFileInformationByName(const char *path, BY_HANDLE_FILE_INFORMATION *=
bhfi)
 {
 	HANDLE h;
@@ -1507,7 +1527,7 @@
 /* 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)
+    const char *path, int mode, int csize, const void *contents)
 {
 #if defined(_WIN32) && !defined(__CYGWIN__)
 	/* TODO: Rework this to set file mode as well. */
@@ -1521,8 +1541,13 @@
 		return (0);
 	}
 	if (contents !=3D NULL) {
-		if (strlen(contents)
-		    !=3D fwrite(contents, 1, strlen(contents), f)) {
+		size_t wsize;
+
+		if (csize < 0)
+			wsize =3D strlen(contents);
+		else
+			wsize =3D (size_t)csize;
+		if (wsize !=3D fwrite(contents, 1, wsize, f)) {
 			fclose(f);
 			failure_start(file, line,
 			    "Could not write file %s", path);
@@ -1542,10 +1567,16 @@
 		return (0);
 	}
 	if (contents !=3D NULL) {
-		if ((ssize_t)strlen(contents)
-		    !=3D write(fd, contents, strlen(contents))) {
+		ssize_t wsize;
+
+		if (csize < 0)
+			wsize =3D (ssize_t)strlen(contents);
+		else
+			wsize =3D (ssize_t)csize;
+		if (wsize !=3D write(fd, contents, wsize)) {
 			close(fd);
-			failure_start(file, line, "Could not write to %s", path);
+			failure_start(file, line,
+			    "Could not write to %s", path);
 			failure_finish(NULL);
 			return (0);
 		}
@@ -1716,6 +1747,52 @@
 #endif /* defined(_WIN32) && !defined(__CYGWIN__) */
 }
=20
+/* Set nodump, report failures. */
+int
+assertion_nodump(const char *file, int line, const char *pathname)
+{
+#if defined(HAVE_STRUCT_STAT_ST_FLAGS) && defined(UF_NODUMP)
+	int r;
+
+	assertion_count(file, line);
+	r =3D chflags(pathname, UF_NODUMP);
+	if (r < 0) {
+		failure_start(file, line, "Can't set nodump %s\n", pathname);
+		failure_finish(NULL);
+		return (0);
+	}
+#elif defined(EXT2_IOC_GETFLAGS) && defined(HAVE_WORKING_EXT2_IOC_GETFLAGS=
)\
+	 && defined(EXT2_NODUMP_FL)
+	int fd, r, flags;
+
+	assertion_count(file, line);
+	fd =3D open(pathname, O_RDONLY | O_NONBLOCK);
+	if (fd < 0) {
+		failure_start(file, line, "Can't open %s\n", pathname);
+		failure_finish(NULL);
+		return (0);
+	}
+	r =3D ioctl(fd, EXT2_IOC_GETFLAGS, &flags);
+	if (r < 0) {
+		failure_start(file, line, "Can't get flags %s\n", pathname);
+		failure_finish(NULL);
+		return (0);
+	}
+	flags |=3D EXT2_NODUMP_FL;
+	r =3D ioctl(fd, EXT2_IOC_SETFLAGS, &flags);
+	if (r < 0) {
+		failure_start(file, line, "Can't set nodump %s\n", pathname);
+		failure_finish(NULL);
+		return (0);
+	}
+	close(fd);
+#else
+	(void)pathname; /* UNUSED */
+	assertion_count(file, line);
+#endif
+	return (1);
+}
+
 /*
  *
  *  UTILITIES for use by tests.
@@ -1744,7 +1821,7 @@
 		return (value);
=20
 	++tested;
-	assertion_make_file(__FILE__, __LINE__, "canSymlink.0", 0644, "a");
+	assertion_make_file(__FILE__, __LINE__, "canSymlink.0", 0644, 1, "a");
 	/* Note: Cygwin has its own symlink() emulation that does not
 	 * use the Win32 CreateSymbolicLink() function. */
 #if defined(_WIN32) && !defined(__CYGWIN__)
@@ -1794,6 +1871,70 @@
 }
=20
 /*
+ * Can this filesystem handle nodump flags.
+ */
+#if defined(HAVE_STRUCT_STAT_ST_FLAGS) && defined(UF_NODUMP)
+
+int
+canNodump(void)
+{
+	const char *path =3D "cannodumptest";
+	struct stat sb;
+
+	assertion_make_file(__FILE__, __LINE__, path, 0644, 0, NULL);
+	if (chflags(path, UF_NODUMP) < 0)
+		return (0);
+	if (stat(path, &sb) < 0)
+		return (0);
+	if (sb.st_flags & UF_NODUMP)
+		return (1);
+	return (0);
+}
+
+#elif defined(EXT2_IOC_GETFLAGS) && defined(HAVE_WORKING_EXT2_IOC_GETFLAGS=
)\
+	 && defined(EXT2_NODUMP_FL)
+
+int
+canNodump(void)
+{
+	const char *path =3D "cannodumptest";
+	int fd, r, flags;
+
+	assertion_make_file(__FILE__, __LINE__, path, 0644, 0, NULL);
+	fd =3D open(path, O_RDONLY | O_NONBLOCK);
+	if (fd < 0)
+		return (0);
+	r =3D ioctl(fd, EXT2_IOC_GETFLAGS, &flags);
+	if (r < 0)
+		return (0);
+	flags |=3D EXT2_NODUMP_FL;
+	r =3D ioctl(fd, EXT2_IOC_SETFLAGS, &flags);
+	if (r < 0)
+		return (0);
+	close(fd);
+	fd =3D open(path, O_RDONLY | O_NONBLOCK);
+	if (fd < 0)
+		return (0);
+	r =3D ioctl(fd, EXT2_IOC_GETFLAGS, &flags);
+	if (r < 0)
+		return (0);
+	close(fd);
+	if (flags & EXT2_NODUMP_FL)
+		return (1);
+	return (0);
+}
+
+#else
+
+int
+canNodump()
+{
+	return (0);
+}
+
+#endif
+
+/*
  * 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.
@@ -2236,17 +2377,77 @@
 	return strdup(buff);
 }
=20
+static int
+get_test_set(int *test_set, int limit, const char *test)
+{
+	int start, end;
+	int idx =3D 0;
+
+	if (test =3D=3D NULL) {
+		/* Default: Run all tests. */
+		for (;idx < limit; idx++)
+			test_set[idx] =3D idx;
+		return (limit);
+	}
+	if (*test >=3D '0' && *test <=3D '9') {
+		const char *vp =3D test;
+		start =3D 0;
+		while (*vp >=3D '0' && *vp <=3D '9') {
+			start *=3D 10;
+			start +=3D *vp - '0';
+			++vp;
+		}
+		if (*vp =3D=3D '\0') {
+			end =3D start;
+		} else if (*vp =3D=3D '-') {
+			++vp;
+			if (*vp =3D=3D '\0') {
+				end =3D limit - 1;
+			} else {
+				end =3D 0;
+				while (*vp >=3D '0' && *vp <=3D '9') {
+					end *=3D 10;
+					end +=3D *vp - '0';
+					++vp;
+				}
+			}
+		} else
+			return (-1);
+		if (start < 0 || end >=3D limit || start > end)
+			return (-1);
+		while (start <=3D end)
+			test_set[idx++] =3D start++;
+	} else {
+		size_t len =3D strlen(test);
+		for (start =3D 0; start < limit; ++start) {
+			const char *name =3D tests[start].name;
+			const char *p;
+
+			while ((p =3D strchr(name, test[0])) !=3D NULL) {
+				if (strncmp(p, test, len) =3D=3D 0) {
+					test_set[idx++] =3D start;
+					break;
+				} else
+					name =3D p + 1;
+			}
+
+		}
+	}
+	return ((idx =3D=3D 0)?-1:idx);
+}
+
 int
 main(int argc, char **argv)
 {
 	static const int limit =3D sizeof(tests) / sizeof(tests[0]);
-	int i =3D 0, j =3D 0, start, end, tests_run =3D 0, tests_failed =3D 0, op=
tion;
+	int test_set[sizeof(tests) / sizeof(tests[0])];
+	int i =3D 0, j =3D 0, tests_run =3D 0, tests_failed =3D 0, option;
 	time_t now;
 	char *refdir_alloc =3D NULL;
 	const char *progname;
 	char **saved_argv;
 	const char *tmp, *option_arg, *p;
-	char tmpdir[256], *pwd, *testprogdir, *tmp2 =3D NULL;
+	char tmpdir[256], *pwd, *testprogdir, *tmp2 =3D NULL, *vlevel =3D NULL;
 	char tmpdir_timestamp[256];
=20
 	(void)argc; /* UNUSED */
@@ -2332,6 +2533,19 @@
 	if (getenv(ENVBASE "_DEBUG") !=3D NULL)
 		dump_on_failure =3D 1;
=20
+	/* Allow -v to be controlled through the environment. */
+	if (getenv("_VERBOSITY_LEVEL") !=3D NULL)
+	{
+		vlevel =3D getenv("_VERBOSITY_LEVEL");
+		verbosity =3D atoi(vlevel);
+		if (verbosity < VERBOSITY_SUMMARY_ONLY || verbosity > VERBOSITY_FULL)
+		{
+			/* Unsupported verbosity levels are silently ignored */
+			vlevel =3D NULL;
+			verbosity =3D VERBOSITY_PASSFAIL;
+		}
+	}
+
 	/* Get the directory holding test files from environment. */
 	refdir =3D getenv(ENVBASE "_TEST_FILES");
=20
@@ -2379,7 +2593,8 @@
 #endif
 				break;
 			case 'q':
-				verbosity--;
+				if (!vlevel)
+					verbosity--;
 				break;
 			case 'r':
 				refdir =3D option_arg;
@@ -2388,7 +2603,8 @@
 				until_failure++;
 				break;
 			case 'v':
-				verbosity++;
+				if (!vlevel)
+					verbosity++;
 				break;
 			default:
 				fprintf(stderr, "Unrecognized option '%c'\n",
@@ -2501,78 +2717,27 @@
 	saved_argv =3D argv;
 	do {
 		argv =3D saved_argv;
-		if (*argv =3D=3D NULL) {
-			/* Default: Run all tests. */
-			for (i =3D 0; i < limit; i++) {
+		do {
+			int test_num;
+
+			test_num =3D get_test_set(test_set, limit, *argv);
+			if (test_num < 0) {
+				printf("*** INVALID Test %s\n", *argv);
+				free(refdir_alloc);
+				usage(progname);
+				return (1);
+			}
+			for (i =3D 0; i < test_num; i++) {
 				tests_run++;
-				if (test_run(i, tmpdir)) {
+				if (test_run(test_set[i], tmpdir)) {
 					tests_failed++;
 					if (until_failure)
 						goto finish;
 				}
 			}
-		} else {
-			while (*(argv) !=3D NULL) {
-				if (**argv >=3D '0' && **argv <=3D '9') {
-					char *vp =3D *argv;
-					start =3D 0;
-					while (*vp >=3D '0' && *vp <=3D '9') {
-						start *=3D 10;
-						start +=3D *vp - '0';
-						++vp;
-					}
-					if (*vp =3D=3D '\0') {
-						end =3D start;
-					} else if (*vp =3D=3D '-') {
-						++vp;
-						if (*vp =3D=3D '\0') {
-							end =3D limit - 1;
-						} else {
-							end =3D 0;
-							while (*vp >=3D '0' && *vp <=3D '9') {
-								end *=3D 10;
-								end +=3D *vp - '0';
-								++vp;
-							}
-						}
-					} else {
-						printf("*** INVALID Test %s\n", *argv);
-						free(refdir_alloc);
-						usage(progname);
-						return (1);
-					}
-					if (start < 0 || end >=3D limit || start > end) {
-						printf("*** INVALID Test %s\n", *argv);
-						free(refdir_alloc);
-						usage(progname);
-						return (1);
-					}
-				} else {
-					for (start =3D 0; start < limit; ++start) {
-						if (strcmp(*argv, tests[start].name) =3D=3D 0)
-							break;
-					}
-					end =3D start;
-					if (start >=3D limit) {
-						printf("*** INVALID Test ``%s''\n",
-						    *argv);
-						free(refdir_alloc);
-						usage(progname);
-						/* usage() never returns */
-					}
-				}
-				while (start <=3D end) {
-					tests_run++;
-					if (test_run(start, tmpdir)) {
-						tests_failed++;
-						if (until_failure)
-							goto finish;
-					}
-					++start;
-				}
+			if (*argv !=3D NULL)
 				argv++;
-			}
-		}
+		} while (*argv !=3D NULL);
 	} while (until_failure);
=20
 finish:
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/cpio/test/test=
.h
--- a/head/contrib/libarchive/cpio/test/test.h	Mon Jul 30 11:44:18 2012 +03=
00
+++ b/head/contrib/libarchive/cpio/test/test.h	Fri Aug 10 14:19:25 2012 +03=
00
@@ -22,7 +22,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.
  *
- * $FreeBSD: head/contrib/libarchive/cpio/test/test.h 232153 2012-02-25 10=
:58:02Z mm $
+ * $FreeBSD: head/contrib/libarchive/cpio/test/test.h 238856 2012-07-28 06=
:38:44Z mm $
  */
=20
 /* Every test program should #include "test.h" as the first thing. */
@@ -194,11 +194,15 @@
 #define assertMakeDir(dirname, mode)	\
   assertion_make_dir(__FILE__, __LINE__, dirname, mode)
 #define assertMakeFile(path, mode, contents) \
-  assertion_make_file(__FILE__, __LINE__, path, mode, contents)
+  assertion_make_file(__FILE__, __LINE__, path, mode, -1, contents)
+#define assertMakeBinFile(path, mode, csize, contents) \
+  assertion_make_file(__FILE__, __LINE__, path, mode, csize, contents)
 #define assertMakeHardlink(newfile, oldfile)	\
   assertion_make_hardlink(__FILE__, __LINE__, newfile, oldfile)
 #define assertMakeSymlink(newfile, linkto)	\
   assertion_make_symlink(__FILE__, __LINE__, newfile, linkto)
+#define assertNodump(path)      \
+  assertion_nodump(__FILE__, __LINE__, path)
 #define assertUmask(mask)	\
   assertion_umask(__FILE__, __LINE__, mask)
 #define assertUtimes(pathname, atime, atime_nsec, mtime, mtime_nsec)	\
@@ -241,9 +245,10 @@
 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_file(const char *, int, const char *, int, int, const v=
oid *);
 int assertion_make_hardlink(const char *, int, const char *newpath, const =
char *);
 int assertion_make_symlink(const char *, int, const char *newpath, const c=
har *);
+int assertion_nodump(const char *, int, const char *);
 int assertion_non_empty_file(const char *, int, const char *);
 int assertion_text_file_contents(const char *, int, const char *buff, cons=
t char *f);
 int assertion_umask(const char *, int, int);
@@ -267,6 +272,9 @@
 /* Return true if this platform can run the "gunzip" program. */
 int canGunzip(void);
=20
+/* Return true if this filesystem can handle nodump flags. */
+int canNodump(void);
+
 /* Return true if the file has large i-node number(>0xffffffff). */
 int is_LargeInode(const char *);
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/cpio/test/test=
_pathmatch.c
--- a/head/contrib/libarchive/cpio/test/test_pathmatch.c	Mon Jul 30 11:44:1=
8 2012 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,243 +0,0 @@
-/*-
- * 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 WARRANTI=
ES
- * 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 US=
E,
- * 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: head/contrib/libarchive/cpio/test/test_pathmatch.c 228=
763 2011-12-21 11:13:29Z mm $");
-
-#include "pathmatch.h"
-
-/*
- * Verify that the pattern matcher implements the wildcard logic specified
- * in SUSv2 for the cpio command.  This is essentially the
- * shell glob syntax:
- *   * - matches any sequence of chars, including '/'
- *   ? - matches any single char, including '/'
- *   [...] - matches any of a set of chars, '-' specifies a range,
- *        initial '!' is undefined
- *
- * The specification in SUSv2 is a bit incomplete, I assume the following:
- *   Trailing '-' in [...] is not special.
- *
- * TODO: Figure out if there's a good way to extend this to handle
- * Windows paths that use '\' as a path separator.  <sigh>
- */
-
-DEFINE_TEST(test_pathmatch)
-{
-	assertEqualInt(1, lafe_pathmatch("a/b/c", "a/b/c", 0));
-	assertEqualInt(0, lafe_pathmatch("a/b/", "a/b/c", 0));
-	assertEqualInt(0, lafe_pathmatch("a/b", "a/b/c", 0));
-	assertEqualInt(0, lafe_pathmatch("a/b/c", "a/b/", 0));
-	assertEqualInt(0, lafe_pathmatch("a/b/c", "a/b", 0));
-
-	/* Empty pattern only matches empty string. */
-	assertEqualInt(1, lafe_pathmatch("","", 0));
-	assertEqualInt(0, lafe_pathmatch("","a", 0));
-	assertEqualInt(1, lafe_pathmatch("*","", 0));
-	assertEqualInt(1, lafe_pathmatch("*","a", 0));
-	assertEqualInt(1, lafe_pathmatch("*","abcd", 0));
-	/* SUSv2: * matches / */
-	assertEqualInt(1, lafe_pathmatch("*","abcd/efgh/ijkl", 0));
-	assertEqualInt(1, lafe_pathmatch("abcd*efgh/ijkl","abcd/efgh/ijkl", 0));
-	assertEqualInt(1, lafe_pathmatch("abcd***efgh/ijkl","abcd/efgh/ijkl", 0));
-	assertEqualInt(1, lafe_pathmatch("abcd***/efgh/ijkl","abcd/efgh/ijkl", 0)=
);
-	assertEqualInt(0, lafe_pathmatch("?", "", 0));
-	assertEqualInt(0, lafe_pathmatch("?", "\0", 0));
-	assertEqualInt(1, lafe_pathmatch("?", "a", 0));
-	assertEqualInt(0, lafe_pathmatch("?", "ab", 0));
-	assertEqualInt(1, lafe_pathmatch("?", ".", 0));
-	assertEqualInt(1, lafe_pathmatch("?", "?", 0));
-	assertEqualInt(1, lafe_pathmatch("a", "a", 0));
-	assertEqualInt(0, lafe_pathmatch("a", "ab", 0));
-	assertEqualInt(0, lafe_pathmatch("a", "ab", 0));
-	assertEqualInt(1, lafe_pathmatch("a?c", "abc", 0));
-	/* SUSv2: ? matches / */
-	assertEqualInt(1, lafe_pathmatch("a?c", "a/c", 0));
-	assertEqualInt(1, lafe_pathmatch("a?*c*", "a/c", 0));
-	assertEqualInt(1, lafe_pathmatch("*a*", "a/c", 0));
-	assertEqualInt(1, lafe_pathmatch("*a*", "/a/c", 0));
-	assertEqualInt(1, lafe_pathmatch("*a*", "defaaaaaaa", 0));
-	assertEqualInt(0, lafe_pathmatch("a*", "defghi", 0));
-	assertEqualInt(0, lafe_pathmatch("*a*", "defghi", 0));
-
-	/* Character classes */
-	assertEqualInt(1, lafe_pathmatch("abc[def", "abc[def", 0));
-	assertEqualInt(0, lafe_pathmatch("abc[def]", "abc[def", 0));
-	assertEqualInt(0, lafe_pathmatch("abc[def", "abcd", 0));
-	assertEqualInt(1, lafe_pathmatch("abc[def]", "abcd", 0));
-	assertEqualInt(1, lafe_pathmatch("abc[def]", "abce", 0));
-	assertEqualInt(1, lafe_pathmatch("abc[def]", "abcf", 0));
-	assertEqualInt(0, lafe_pathmatch("abc[def]", "abcg", 0));
-	assertEqualInt(1, lafe_pathmatch("abc[d*f]", "abcd", 0));
-	assertEqualInt(1, lafe_pathmatch("abc[d*f]", "abc*", 0));
-	assertEqualInt(0, lafe_pathmatch("abc[d*f]", "abcdefghi", 0));
-	assertEqualInt(0, lafe_pathmatch("abc[d*", "abcdefghi", 0));
-	assertEqualInt(1, lafe_pathmatch("abc[d*", "abc[defghi", 0));
-	assertEqualInt(1, lafe_pathmatch("abc[d-f]", "abcd", 0));
-	assertEqualInt(1, lafe_pathmatch("abc[d-f]", "abce", 0));
-	assertEqualInt(1, lafe_pathmatch("abc[d-f]", "abcf", 0));
-	assertEqualInt(0, lafe_pathmatch("abc[d-f]", "abcg", 0));
-	assertEqualInt(0, lafe_pathmatch("abc[d-fh-k]", "abca", 0));
-	assertEqualInt(1, lafe_pathmatch("abc[d-fh-k]", "abcd", 0));
-	assertEqualInt(1, lafe_pathmatch("abc[d-fh-k]", "abce", 0));
-	assertEqualInt(1, lafe_pathmatch("abc[d-fh-k]", "abcf", 0));
-	assertEqualInt(0, lafe_pathmatch("abc[d-fh-k]", "abcg", 0));
-	assertEqualInt(1, lafe_pathmatch("abc[d-fh-k]", "abch", 0));
-	assertEqualInt(1, lafe_pathmatch("abc[d-fh-k]", "abci", 0));
-	assertEqualInt(1, lafe_pathmatch("abc[d-fh-k]", "abcj", 0));
-	assertEqualInt(1, lafe_pathmatch("abc[d-fh-k]", "abck", 0));
-	assertEqualInt(0, lafe_pathmatch("abc[d-fh-k]", "abcl", 0));
-	assertEqualInt(0, lafe_pathmatch("abc[d-fh-k]", "abc-", 0));
-
-	/* [] matches nothing, [!] is the same as ? */
-	assertEqualInt(0, lafe_pathmatch("abc[]efg", "abcdefg", 0));
-	assertEqualInt(0, lafe_pathmatch("abc[]efg", "abcqefg", 0));
-	assertEqualInt(0, lafe_pathmatch("abc[]efg", "abcefg", 0));
-	assertEqualInt(1, lafe_pathmatch("abc[!]efg", "abcdefg", 0));
-	assertEqualInt(1, lafe_pathmatch("abc[!]efg", "abcqefg", 0));
-	assertEqualInt(0, lafe_pathmatch("abc[!]efg", "abcefg", 0));
-
-	/* I assume: Trailing '-' is non-special. */
-	assertEqualInt(0, lafe_pathmatch("abc[d-fh-]", "abcl", 0));
-	assertEqualInt(1, lafe_pathmatch("abc[d-fh-]", "abch", 0));
-	assertEqualInt(1, lafe_pathmatch("abc[d-fh-]", "abc-", 0));
-	assertEqualInt(1, lafe_pathmatch("abc[d-fh-]", "abc-", 0));
-
-	/* ']' can be backslash-quoted within a character class. */
-	assertEqualInt(1, lafe_pathmatch("abc[\\]]", "abc]", 0));
-	assertEqualInt(1, lafe_pathmatch("abc[\\]d]", "abc]", 0));
-	assertEqualInt(1, lafe_pathmatch("abc[\\]d]", "abcd", 0));
-	assertEqualInt(1, lafe_pathmatch("abc[d\\]]", "abc]", 0));
-	assertEqualInt(1, lafe_pathmatch("abc[d\\]]", "abcd", 0));
-	assertEqualInt(1, lafe_pathmatch("abc[d]e]", "abcde]", 0));
-	assertEqualInt(1, lafe_pathmatch("abc[d\\]e]", "abc]", 0));
-	assertEqualInt(0, lafe_pathmatch("abc[d\\]e]", "abcd]e", 0));
-	assertEqualInt(0, lafe_pathmatch("abc[d]e]", "abc]", 0));
-
-	/* backslash-quoted chars can appear as either end of a range. */
-	assertEqualInt(1, lafe_pathmatch("abc[\\d-f]gh", "abcegh", 0));
-	assertEqualInt(0, lafe_pathmatch("abc[\\d-f]gh", "abcggh", 0));
-	assertEqualInt(0, lafe_pathmatch("abc[\\d-f]gh", "abc\\gh", 0));
-	assertEqualInt(1, lafe_pathmatch("abc[d-\\f]gh", "abcegh", 0));
-	assertEqualInt(1, lafe_pathmatch("abc[\\d-\\f]gh", "abcegh", 0));
-	assertEqualInt(1, lafe_pathmatch("abc[\\d-\\f]gh", "abcegh", 0));
-	/* backslash-quoted '-' isn't special. */
-	assertEqualInt(0, lafe_pathmatch("abc[d\\-f]gh", "abcegh", 0));
-	assertEqualInt(1, lafe_pathmatch("abc[d\\-f]gh", "abc-gh", 0));
-
-	/* Leading '!' negates a character class. */
-	assertEqualInt(0, lafe_pathmatch("abc[!d]", "abcd", 0));
-	assertEqualInt(1, lafe_pathmatch("abc[!d]", "abce", 0));
-	assertEqualInt(1, lafe_pathmatch("abc[!d]", "abcc", 0));
-	assertEqualInt(0, lafe_pathmatch("abc[!d-z]", "abcq", 0));
-	assertEqualInt(1, lafe_pathmatch("abc[!d-gi-z]", "abch", 0));
-	assertEqualInt(1, lafe_pathmatch("abc[!fgijkl]", "abch", 0));
-	assertEqualInt(0, lafe_pathmatch("abc[!fghijkl]", "abch", 0));
-
-	/* Backslash quotes next character. */
-	assertEqualInt(0, lafe_pathmatch("abc\\[def]", "abc\\d", 0));
-	assertEqualInt(1, lafe_pathmatch("abc\\[def]", "abc[def]", 0));
-	assertEqualInt(0, lafe_pathmatch("abc\\\\[def]", "abc[def]", 0));
-	assertEqualInt(0, lafe_pathmatch("abc\\\\[def]", "abc\\[def]", 0));
-	assertEqualInt(1, lafe_pathmatch("abc\\\\[def]", "abc\\d", 0));
-	assertEqualInt(1, lafe_pathmatch("abcd\\", "abcd\\", 0));
-	assertEqualInt(0, lafe_pathmatch("abcd\\", "abcd\\[", 0));
-	assertEqualInt(0, lafe_pathmatch("abcd\\", "abcde", 0));
-	assertEqualInt(0, lafe_pathmatch("abcd\\[", "abcd\\", 0));
-
-	/*
-	 * Because '.' and '/' have special meanings, we can
-	 * identify many equivalent paths even if they're expressed
-	 * differently.  (But quoting a character with '\\' suppresses
-	 * special meanings!)
-	 */
-	assertEqualInt(0, lafe_pathmatch("a/b/", "a/bc", 0));
-	assertEqualInt(1, lafe_pathmatch("a/./b", "a/b", 0));
-	assertEqualInt(0, lafe_pathmatch("a\\/./b", "a/b", 0));
-	assertEqualInt(0, lafe_pathmatch("a/\\./b", "a/b", 0));
-	assertEqualInt(0, lafe_pathmatch("a/.\\/b", "a/b", 0));
-	assertEqualInt(0, lafe_pathmatch("a\\/\\.\\/b", "a/b", 0));
-	assertEqualInt(1, lafe_pathmatch("./abc/./def/", "abc/def/", 0));
-	assertEqualInt(1, lafe_pathmatch("abc/def", "./././abc/./def", 0));
-	assertEqualInt(1, lafe_pathmatch("abc/def/././//", "./././abc/./def/", 0)=
);
-	assertEqualInt(1, lafe_pathmatch(".////abc/.//def", "./././abc/./def", 0)=
);
-	assertEqualInt(1, lafe_pathmatch("./abc?def/", "abc/def/", 0));
-	failure("\"?./\" is not the same as \"/./\"");
-	assertEqualInt(0, lafe_pathmatch("./abc?./def/", "abc/def/", 0));
-	failure("Trailing '/' should match no trailing '/'");
-	assertEqualInt(1, lafe_pathmatch("./abc/./def/", "abc/def", 0));
-	failure("Trailing '/./' is still the same directory.");
-	assertEqualInt(1, lafe_pathmatch("./abc/./def/./", "abc/def", 0));
-	failure("Trailing '/.' is still the same directory.");
-	assertEqualInt(1, lafe_pathmatch("./abc/./def/.", "abc/def", 0));
-	assertEqualInt(1, lafe_pathmatch("./abc/./def", "abc/def/", 0));
-	failure("Trailing '/./' is still the same directory.");
-	assertEqualInt(1, lafe_pathmatch("./abc/./def", "abc/def/./", 0));
-	failure("Trailing '/.' is still the same directory.");
-	assertEqualInt(1, lafe_pathmatch("./abc*/./def", "abc/def/.", 0));
-
-	/* Matches not anchored at beginning. */
-	assertEqualInt(0,
-	    lafe_pathmatch("bcd", "abcd", PATHMATCH_NO_ANCHOR_START));
-	assertEqualInt(1,
-	    lafe_pathmatch("abcd", "abcd", PATHMATCH_NO_ANCHOR_START));
-	assertEqualInt(0,
-	    lafe_pathmatch("^bcd", "abcd", PATHMATCH_NO_ANCHOR_START));
-	assertEqualInt(1,
-	    lafe_pathmatch("b/c/d", "a/b/c/d", PATHMATCH_NO_ANCHOR_START));
-	assertEqualInt(0,
-	    lafe_pathmatch("b/c", "a/b/c/d", PATHMATCH_NO_ANCHOR_START));
-	assertEqualInt(0,
-	    lafe_pathmatch("^b/c", "a/b/c/d", PATHMATCH_NO_ANCHOR_START));
-
-	/* Matches not anchored at end. */
-	assertEqualInt(0,
-	    lafe_pathmatch("bcd", "abcd", PATHMATCH_NO_ANCHOR_END));
-	assertEqualInt(1,
-	    lafe_pathmatch("abcd", "abcd", PATHMATCH_NO_ANCHOR_END));
-	assertEqualInt(1,
-	    lafe_pathmatch("abcd", "abcd/", PATHMATCH_NO_ANCHOR_END));
-	assertEqualInt(1,
-	    lafe_pathmatch("abcd", "abcd/.", PATHMATCH_NO_ANCHOR_END));
-	assertEqualInt(0,
-	    lafe_pathmatch("abc", "abcd", PATHMATCH_NO_ANCHOR_END));
-	assertEqualInt(1,
-	    lafe_pathmatch("a/b/c", "a/b/c/d", PATHMATCH_NO_ANCHOR_END));
-	assertEqualInt(0,
-	    lafe_pathmatch("a/b/c$", "a/b/c/d", PATHMATCH_NO_ANCHOR_END));
-	assertEqualInt(1,
-	    lafe_pathmatch("a/b/c$", "a/b/c", PATHMATCH_NO_ANCHOR_END));
-	assertEqualInt(1,
-	    lafe_pathmatch("a/b/c$", "a/b/c/", PATHMATCH_NO_ANCHOR_END));
-	assertEqualInt(1,
-	    lafe_pathmatch("a/b/c/", "a/b/c/d", PATHMATCH_NO_ANCHOR_END));
-	assertEqualInt(0,
-	    lafe_pathmatch("a/b/c/$", "a/b/c/d", PATHMATCH_NO_ANCHOR_END));
-	assertEqualInt(1,
-	    lafe_pathmatch("a/b/c/$", "a/b/c/", PATHMATCH_NO_ANCHOR_END));
-	assertEqualInt(1,
-	    lafe_pathmatch("a/b/c/$", "a/b/c", PATHMATCH_NO_ANCHOR_END));
-	assertEqualInt(0,
-	    lafe_pathmatch("b/c", "a/b/c/d", PATHMATCH_NO_ANCHOR_END));
-}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive.h
--- a/head/contrib/libarchive/libarchive/archive.h	Mon Jul 30 11:44:18 2012=
 +0300
+++ b/head/contrib/libarchive/libarchive/archive.h	Fri Aug 10 14:19:25 2012=
 +0300
@@ -22,7 +22,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.
  *
- * $FreeBSD: head/contrib/libarchive/libarchive/archive.h 232153 2012-02-2=
5 10:58:02Z mm $
+ * $FreeBSD: head/contrib/libarchive/libarchive/archive.h 238856 2012-07-2=
8 06:38:44Z mm $
  */
=20
 #ifndef ARCHIVE_H_INCLUDED
@@ -56,23 +56,14 @@
 # else
 #  define	__LA_SSIZE_T	long
 # endif
-# 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 <unistd.h>  /* ssize_t, uid_t, and gid_t */
+# include <unistd.h>  /* ssize_t */
 # if defined(_SCO_DS)
 #  define	__LA_INT64_T	long long
 # else
 #  define	__LA_INT64_T	int64_t
 # endif
 # define	__LA_SSIZE_T	ssize_t
-# define	__LA_UID_T	uid_t
-# define	__LA_GID_T	gid_t
 #endif
=20
 /*
@@ -127,13 +118,13 @@
  * assert that ARCHIVE_VERSION_NUMBER >=3D 2012108.
  */
 /* Note: Compiler will complain if this does not match archive_entry.h! */
-#define	ARCHIVE_VERSION_NUMBER 3000003
+#define	ARCHIVE_VERSION_NUMBER 3000004
 __LA_DECL int		archive_version_number(void);
=20
 /*
  * Textual name/version of the library, useful for version displays.
  */
-#define	ARCHIVE_VERSION_STRING "libarchive 3.0.3"
+#define	ARCHIVE_VERSION_STRING "libarchive 3.0.4"
 __LA_DECL const char *	archive_version_string(void);
=20
 /* Declare our basic types. */
@@ -567,6 +558,8 @@
 __LA_DECL int archive_write_set_compression_xz(struct archive *);
 #endif
=20
+/* A convenience function to set the filter based on the code. */
+__LA_DECL int archive_write_add_filter(struct archive *, int filter_code);
 __LA_DECL int archive_write_add_filter_bzip2(struct archive *);
 __LA_DECL int archive_write_add_filter_compress(struct archive *);
 __LA_DECL int archive_write_add_filter_gzip(struct archive *);
@@ -758,11 +751,42 @@
  * traversal.
  */
 __LA_DECL int	archive_read_disk_descend(struct archive *);
+__LA_DECL int	archive_read_disk_can_descend(struct archive *);
 __LA_DECL int	archive_read_disk_current_filesystem(struct archive *);
 __LA_DECL int	archive_read_disk_current_filesystem_is_synthetic(struct arc=
hive *);
 __LA_DECL int	archive_read_disk_current_filesystem_is_remote(struct archiv=
e *);
 /* Request that the access time of the entry visited by travesal be restor=
ed. */
 __LA_DECL int  archive_read_disk_set_atime_restored(struct archive *);
+/*
+ * Set behavior. The "flags" argument selects optional behavior.
+ */
+/* Request that the access time of the entry visited by travesal be restor=
ed.
+ * This is the same as archive_read_disk_set_atime_restored. */
+#define	ARCHIVE_READDISK_RESTORE_ATIME		(0x0001)
+/* Default: Do not skip an entry which has nodump flags. */
+#define	ARCHIVE_READDISK_HONOR_NODUMP		(0x0002)
+/* Default: Skip a mac resource fork file whose prefix is "._" because of
+ * using copyfile. */
+#define	ARCHIVE_READDISK_MAC_COPYFILE		(0x0004)
+/* Default: Do not traverse mount points. */
+#define	ARCHIVE_READDISK_NO_TRAVERSE_MOUNTS	(0x0008)
+
+__LA_DECL int  archive_read_disk_set_behavior(struct archive *,
+		    int flags);
+
+/*
+ * Set archive_match object that will be used in archive_read_disk to
+ * know whether an entry should be skipped. The callback function
+ * _excluded_func will be invoked when an entry is skipped by the result
+ * of archive_match.
+ */
+__LA_DECL int	archive_read_disk_set_matching(struct archive *,
+		    struct archive *_matching, void (*_excluded_func)
+		    (struct archive *, void *, struct archive_entry *),
+		    void *_client_data);
+__LA_DECL int	archive_read_disk_set_metadata_filter_callback(struct archiv=
e *,
+		    int (*_metadata_filter_func)(struct archive *, void *,
+		    	struct archive_entry *), void *_client_data);
=20
 /*
  * Accessor functions to read/set various information in
@@ -802,14 +826,116 @@
 			    struct archive *src);
 __LA_DECL int		 archive_file_count(struct archive *);
=20
+/*
+ * ARCHIVE_MATCH API
+ */
+__LA_DECL struct archive *archive_match_new(void);
+__LA_DECL int	archive_match_free(struct archive *);
+
+/*
+ * Test if archive_entry is excluded.
+ * This is a convenience function. This is the same as calling all
+ * archive_match_path_excluded, archive_match_time_excluded
+ * and archive_match_owner_excluded.
+ */
+__LA_DECL int	archive_match_excluded(struct archive *,
+		    struct archive_entry *);
+
+/*
+ * Test if pathname is excluded. The conditions are set by following funct=
ions.
+ */
+__LA_DECL int	archive_match_path_excluded(struct archive *,
+		    struct archive_entry *);
+/* Add exclusion pathname pattern. */
+__LA_DECL int	archive_match_exclude_pattern(struct archive *, const char *=
);
+__LA_DECL int	archive_match_exclude_pattern_w(struct archive *,
+		    const wchar_t *);
+/* Add exclusion pathname pattern from file. */
+__LA_DECL int	archive_match_exclude_pattern_from_file(struct archive *,
+		    const char *, int _nullSeparator);
+__LA_DECL int	archive_match_exclude_pattern_from_file_w(struct archive *,
+		    const wchar_t *, int _nullSeparator);
+/* Add inclusion pathname pattern. */
+__LA_DECL int	archive_match_include_pattern(struct archive *, const char *=
);
+__LA_DECL int	archive_match_include_pattern_w(struct archive *,
+		    const wchar_t *);
+/* Add inclusion pathname pattern from file. */
+__LA_DECL int	archive_match_include_pattern_from_file(struct archive *,
+		    const char *, int _nullSeparator);
+__LA_DECL int	archive_match_include_pattern_from_file_w(struct archive *,
+		    const wchar_t *, int _nullSeparator);
+/*
+ * How to get statistic information for inclusion patterns.
+ */
+/* Return the amount number of unmatched inclusion patterns. */
+__LA_DECL int	archive_match_path_unmatched_inclusions(struct archive *);
+/* Return the pattern of unmatched inclusion with ARCHIVE_OK.
+ * Return ARCHIVE_EOF if there is no inclusion pattern. */
+__LA_DECL int	archive_match_path_unmatched_inclusions_next(
+		    struct archive *, const char **);
+__LA_DECL int	archive_match_path_unmatched_inclusions_next_w(
+		    struct archive *, const wchar_t **);
+
+/*
+ * Test if a file is excluded by its time stamp.
+ * The conditions are set by following functions.
+ */
+__LA_DECL int	archive_match_time_excluded(struct archive *,
+		    struct archive_entry *);
+
+/*
+ * Flags to tell a matching type of time stamps. These are used for
+ * following functinos.
+ */
+/* Time flag: mtime to be tested. */
+#define ARCHIVE_MATCH_MTIME	(0x0100)
+/* Time flag: ctime to be tested. */
+#define ARCHIVE_MATCH_CTIME	(0x0200)
+/* Comparison flag: Match the time if it is newer than. */
+#define ARCHIVE_MATCH_NEWER	(0x0001)
+/* Comparison flag: Match the time if it is older than. */
+#define ARCHIVE_MATCH_OLDER	(0x0002)
+/* Comparison flag: Match the time if it is equal to. */
+#define ARCHIVE_MATCH_EQUAL	(0x0010)
+/* Set inclusion time. */
+__LA_DECL int	archive_match_include_time(struct archive *, int _flag,
+		    time_t _sec, long _nsec);
+/* Set inclusion time by a date string. */
+__LA_DECL int	archive_match_include_date(struct archive *, int _flag,
+		    const char *_datestr);
+__LA_DECL int	archive_match_include_date_w(struct archive *, int _flag,
+		    const wchar_t *_datestr);
+/* Set inclusion time by a particluar file. */
+__LA_DECL int	archive_match_include_file_time(struct archive *,
+		    int _flag, const char *_pathname);
+__LA_DECL int	archive_match_include_file_time_w(struct archive *,
+		    int _flag, const wchar_t *_pathname);
+/* Add exclusion entry. */
+__LA_DECL int	archive_match_exclude_entry(struct archive *,
+		    int _flag, struct archive_entry *);
+
+/*
+ * Test if a file is excluded by its uid ,gid, uname or gname.
+ * The conditions are set by following functions.
+ */
+__LA_DECL int	archive_match_owner_excluded(struct archive *,
+		    struct archive_entry *);
+/* Add inclusion uid, gid, uname and gname. */
+__LA_DECL int	archive_match_include_uid(struct archive *, __LA_INT64_T);
+__LA_DECL int	archive_match_include_gid(struct archive *, __LA_INT64_T);
+__LA_DECL int	archive_match_include_uname(struct archive *, const char *);
+__LA_DECL int	archive_match_include_uname_w(struct archive *,
+		    const wchar_t *);
+__LA_DECL int	archive_match_include_gname(struct archive *, const char *);
+__LA_DECL int	archive_match_include_gname_w(struct archive *,
+		    const wchar_t *);
+
 #ifdef __cplusplus
 }
 #endif
=20
 /* These are meaningless outside of this header. */
 #undef __LA_DECL
-#undef __LA_GID_T
-#undef __LA_UID_T
=20
 /* These need to remain defined because they're used in the
  * callback type definitions.  XXX Fix this.  This is ugly. XXX */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_acl.c
--- a/head/contrib/libarchive/libarchive/archive_acl.c	Mon Jul 30 11:44:18 =
2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_acl.c	Fri Aug 10 14:19:25 =
2012 +0300
@@ -422,8 +422,11 @@
 	*permset =3D acl->acl_p->permset;
 	*tag =3D acl->acl_p->tag;
 	*id =3D acl->acl_p->id;
-	if (archive_mstring_get_mbs(a, &acl->acl_p->name, name) !=3D 0)
+	if (archive_mstring_get_mbs(a, &acl->acl_p->name, name) !=3D 0) {
+		if (errno =3D=3D ENOMEM)
+			return (ARCHIVE_FATAL);
 		*name =3D NULL;
+	}
 	acl->acl_p =3D acl->acl_p->next;
 	return (ARCHIVE_OK);
 }
@@ -441,7 +444,7 @@
 	const wchar_t *prefix;
 	wchar_t separator;
 	struct archive_acl_entry *ap;
-	int id;
+	int id, r;
 	wchar_t *wp;
=20
 	if (acl->acl_text_w !=3D NULL) {
@@ -461,9 +464,11 @@
 				length +=3D 8; /* "default:" */
 			length +=3D 5; /* tag name */
 			length +=3D 1; /* colon */
-			if (archive_mstring_get_wcs(a, &ap->name, &wname) =3D=3D 0 &&
-			    wname !=3D NULL)
+			r =3D archive_mstring_get_wcs(a, &ap->name, &wname);
+			if (r =3D=3D 0 && wname !=3D NULL)
 				length +=3D wcslen(wname);
+			else if (r < 0 && errno =3D=3D ENOMEM)
+				return (NULL);
 			else
 				length +=3D sizeof(uid_t) * 3 + 1;
 			length ++; /* colon */
@@ -487,7 +492,7 @@
 	/* Now, allocate the string and actually populate it. */
 	wp =3D acl->acl_text_w =3D (wchar_t *)malloc(length * sizeof(wchar_t));
 	if (wp =3D=3D NULL)
-		__archive_errx(1, "No memory to generate the text version of the ACL");
+		return (NULL);
 	count =3D 0;
 	if ((flags & ARCHIVE_ENTRY_ACL_TYPE_ACCESS) !=3D 0) {
 		append_entry_w(&wp, NULL, ARCHIVE_ENTRY_ACL_USER_OBJ, NULL,
@@ -502,16 +507,19 @@
=20
 		ap =3D acl->acl_head;
 		while (ap !=3D NULL) {
-			if ((ap->type & ARCHIVE_ENTRY_ACL_TYPE_ACCESS) !=3D 0 &&
-				archive_mstring_get_wcs(a, &ap->name, &wname) =3D=3D 0) {
-				*wp++ =3D separator;
-				if (flags & ARCHIVE_ENTRY_ACL_STYLE_EXTRA_ID)
-					id =3D ap->id;
-				else
-					id =3D -1;
-				append_entry_w(&wp, NULL, ap->tag, wname,
-				    ap->permset, id);
-				count++;
+			if ((ap->type & ARCHIVE_ENTRY_ACL_TYPE_ACCESS) !=3D 0) {
+				r =3D archive_mstring_get_wcs(a, &ap->name, &wname);
+				if (r =3D=3D 0) {
+					*wp++ =3D separator;
+					if (flags & ARCHIVE_ENTRY_ACL_STYLE_EXTRA_ID)
+						id =3D ap->id;
+					else
+						id =3D -1;
+					append_entry_w(&wp, NULL, ap->tag, wname,
+					    ap->permset, id);
+					count++;
+				} else if (r < 0 && errno =3D=3D ENOMEM)
+					return (NULL);
 			}
 			ap =3D ap->next;
 		}
@@ -526,17 +534,20 @@
 		ap =3D acl->acl_head;
 		count =3D 0;
 		while (ap !=3D NULL) {
-			if ((ap->type & ARCHIVE_ENTRY_ACL_TYPE_DEFAULT) !=3D 0 &&
-				archive_mstring_get_wcs(a, &ap->name, &wname) =3D=3D 0) {
-				if (count > 0)
-					*wp++ =3D separator;
-				if (flags & ARCHIVE_ENTRY_ACL_STYLE_EXTRA_ID)
-					id =3D ap->id;
-				else
-					id =3D -1;
-				append_entry_w(&wp, prefix, ap->tag,
-				    wname, ap->permset, id);
-				count ++;
+			if ((ap->type & ARCHIVE_ENTRY_ACL_TYPE_DEFAULT) !=3D 0) {
+				r =3D archive_mstring_get_wcs(a, &ap->name, &wname);
+				if (r =3D=3D 0) {
+					if (count > 0)
+						*wp++ =3D separator;
+					if (flags & ARCHIVE_ENTRY_ACL_STYLE_EXTRA_ID)
+						id =3D ap->id;
+					else
+						id =3D -1;
+					append_entry_w(&wp, prefix, ap->tag,
+					    wname, ap->permset, id);
+					count ++;
+				} else if (r < 0 && errno =3D=3D ENOMEM)
+					return (NULL);
 			}
 			ap =3D ap->next;
 		}
@@ -675,7 +686,7 @@
 	/* Now, allocate the string and actually populate it. */
 	p =3D acl->acl_text =3D (char *)malloc(length);
 	if (p =3D=3D NULL)
-		__archive_errx(1, "No memory to generate the text version of the ACL");
+		return (-1);
 	count =3D 0;
 	if ((flags & ARCHIVE_ENTRY_ACL_TYPE_ACCESS) !=3D 0) {
 		append_entry(&p, NULL, ARCHIVE_ENTRY_ACL_USER_OBJ, NULL,
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_check_magic.c
--- a/head/contrib/libarchive/libarchive/archive_check_magic.c	Mon Jul 30 1=
1:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_check_magic.c	Fri Aug 10 1=
4:19:25 2012 +0300
@@ -24,7 +24,7 @@
  */
=20
 #include "archive_platform.h"
-__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/archive_check_magic=
.c 232153 2012-02-25 10:58:02Z mm $");
+__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/archive_check_magic=
.c 238856 2012-07-28 06:38:44Z mm $");
=20
 #ifdef HAVE_SYS_TYPES_H
 #include <sys/types.h>
@@ -94,6 +94,7 @@
 	case ARCHIVE_READ_MAGIC:	return ("archive_read");
 	case ARCHIVE_WRITE_DISK_MAGIC:	return ("archive_write_disk");
 	case ARCHIVE_READ_DISK_MAGIC:	return ("archive_read_disk");
+	case ARCHIVE_MATCH_MAGIC:	return ("archive_match");
 	default:			return NULL;
 	}
 }
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_endian.h
--- a/head/contrib/libarchive/libarchive/archive_endian.h	Mon Jul 30 11:44:=
18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_endian.h	Fri Aug 10 14:19:=
25 2012 +0300
@@ -23,7 +23,7 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: head/contrib/libarchive/libarchive/archive_endian.h 228763 20=
11-12-21 11:13:29Z mm $
+ * $FreeBSD: head/contrib/libarchive/libarchive/archive_endian.h 238856 20=
12-07-28 06:38:44Z mm $
  *
  * Borrowed from FreeBSD's <sys/endian.h>
  */
@@ -126,8 +126,8 @@
 {
 	unsigned char *p =3D (unsigned char *)pp;
=20
-	archive_be32enc(p, u >> 32);
-	archive_be32enc(p + 4, u & 0xffffffff);
+	archive_be32enc(p, (uint32_t)(u >> 32));
+	archive_be32enc(p + 4, (uint32_t)(u & 0xffffffff));
 }
=20
 static inline void
@@ -155,8 +155,8 @@
 {
 	unsigned char *p =3D (unsigned char *)pp;
=20
-	archive_le32enc(p, u & 0xffffffff);
-	archive_le32enc(p + 4, u >> 32);
+	archive_le32enc(p, (uint32_t)(u & 0xffffffff));
+	archive_le32enc(p + 4, (uint32_t)(u >> 32));
 }
=20
 #endif
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_entry.3
--- a/head/contrib/libarchive/libarchive/archive_entry.3	Mon Jul 30 11:44:1=
8 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_entry.3	Fri Aug 10 14:19:2=
5 2012 +0300
@@ -23,9 +23,9 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\" $FreeBSD: head/contrib/libarchive/libarchive/archive_entry.3 232153 20=
12-02-25 10:58:02Z mm $
+.\" $FreeBSD: head/contrib/libarchive/libarchive/archive_entry.3 238856 20=
12-07-28 06:38:44Z mm $
 .\"
-.Dd Feburary 22, 2010
+.Dd Feburary 2, 2012
 .Dt ARCHIVE_ENTRY 3
 .Os
 .Sh NAME
@@ -34,6 +34,8 @@
 .Nm archive_entry_free ,
 .Nm archive_entry_new ,
 .Nd functions for managing archive entry descriptions
+.Sh LIBRARY
+Streaming Archive Library (libarchive, -larchive)
 .Sh SYNOPSIS
 .In archive_entry.h
 .Ft "struct archive_entry *"
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_entry.c
--- a/head/contrib/libarchive/libarchive/archive_entry.c	Mon Jul 30 11:44:1=
8 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_entry.c	Fri Aug 10 14:19:2=
5 2012 +0300
@@ -24,7 +24,7 @@
  */
=20
 #include "archive_platform.h"
-__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/archive_entry.c 232=
153 2012-02-25 10:58:02Z mm $");
+__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/archive_entry.c 238=
856 2012-07-28 06:38:44Z mm $");
=20
 #ifdef HAVE_SYS_STAT_H
 #include <sys/stat.h>
@@ -375,8 +375,11 @@
 	char *p;
=20
 	if (archive_mstring_get_mbs(entry->archive,
-	    &entry->ae_fflags_text, &f) =3D=3D 0 && f !=3D NULL)
-		return (f);
+	    &entry->ae_fflags_text, &f) =3D=3D 0) {
+		if (f !=3D NULL)
+			return (f);
+	} else if (errno =3D=3D ENOMEM)
+		__archive_errx(1, "No memory");
=20
 	if (entry->ae_fflags_set =3D=3D 0  &&  entry->ae_fflags_clear =3D=3D 0)
 		return (NULL);
@@ -390,6 +393,8 @@
 	if (archive_mstring_get_mbs(entry->archive,
 	    &entry->ae_fflags_text, &f) =3D=3D 0)
 		return (f);
+	if (errno =3D=3D ENOMEM)
+		__archive_errx(1, "No memory");
 	return (NULL);
 }
=20
@@ -405,6 +410,8 @@
 	const char *p;
 	if (archive_mstring_get_mbs(entry->archive, &entry->ae_gname, &p) =3D=3D =
0)
 		return (p);
+	if (errno =3D=3D ENOMEM)
+		__archive_errx(1, "No memory");
 	return (NULL);
 }
=20
@@ -414,6 +421,8 @@
 	const wchar_t *p;
 	if (archive_mstring_get_wcs(entry->archive, &entry->ae_gname, &p) =3D=3D =
0)
 		return (p);
+	if (errno =3D=3D ENOMEM)
+		__archive_errx(1, "No memory");
 	return (NULL);
 }
=20
@@ -428,9 +437,13 @@
 archive_entry_hardlink(struct archive_entry *entry)
 {
 	const char *p;
-	if ((entry->ae_set & AE_SET_HARDLINK) && archive_mstring_get_mbs(
+	if ((entry->ae_set & AE_SET_HARDLINK) =3D=3D 0)
+		return (NULL);
+	if (archive_mstring_get_mbs(
 	    entry->archive, &entry->ae_hardlink, &p) =3D=3D 0)
 		return (p);
+	if (errno =3D=3D ENOMEM)
+		__archive_errx(1, "No memory");
 	return (NULL);
 }
=20
@@ -438,9 +451,13 @@
 archive_entry_hardlink_w(struct archive_entry *entry)
 {
 	const wchar_t *p;
-	if ((entry->ae_set & AE_SET_HARDLINK) && archive_mstring_get_wcs(
+	if ((entry->ae_set & AE_SET_HARDLINK) =3D=3D 0)
+		return (NULL);
+	if (archive_mstring_get_wcs(
 	    entry->archive, &entry->ae_hardlink, &p) =3D=3D 0)
 		return (p);
+	if (errno =3D=3D ENOMEM)
+		__archive_errx(1, "No memory");
 	return (NULL);
 }
=20
@@ -511,6 +528,8 @@
 	if (archive_mstring_get_mbs(
 	    entry->archive, &entry->ae_pathname, &p) =3D=3D 0)
 		return (p);
+	if (errno =3D=3D ENOMEM)
+		__archive_errx(1, "No memory");
 	return (NULL);
 }
=20
@@ -521,6 +540,8 @@
 	if (archive_mstring_get_wcs(
 	    entry->archive, &entry->ae_pathname, &p) =3D=3D 0)
 		return (p);
+	if (errno =3D=3D ENOMEM)
+		__archive_errx(1, "No memory");
 	return (NULL);
 }
=20
@@ -584,6 +605,8 @@
 	if (archive_mstring_get_mbs(
 	    entry->archive, &entry->ae_sourcepath, &p) =3D=3D 0)
 		return (p);
+	if (errno =3D=3D ENOMEM)
+		__archive_errx(1, "No memory");
 	return (NULL);
 }
=20
@@ -601,9 +624,13 @@
 archive_entry_symlink(struct archive_entry *entry)
 {
 	const char *p;
-	if ((entry->ae_set & AE_SET_SYMLINK) && archive_mstring_get_mbs(
+	if ((entry->ae_set & AE_SET_SYMLINK) =3D=3D 0)
+		return (NULL);
+	if (archive_mstring_get_mbs(
 	    entry->archive, &entry->ae_symlink, &p) =3D=3D 0)
 		return (p);
+	if (errno =3D=3D ENOMEM)
+		__archive_errx(1, "No memory");
 	return (NULL);
 }
=20
@@ -611,9 +638,13 @@
 archive_entry_symlink_w(struct archive_entry *entry)
 {
 	const wchar_t *p;
-	if ((entry->ae_set & AE_SET_SYMLINK) && archive_mstring_get_wcs(
+	if ((entry->ae_set & AE_SET_SYMLINK) =3D=3D 0)
+		return (NULL);
+	if (archive_mstring_get_wcs(
 	    entry->archive, &entry->ae_symlink, &p) =3D=3D 0)
 		return (p);
+	if (errno =3D=3D ENOMEM)
+		__archive_errx(1, "No memory");
 	return (NULL);
 }
=20
@@ -641,6 +672,8 @@
 	const char *p;
 	if (archive_mstring_get_mbs(entry->archive, &entry->ae_uname, &p) =3D=3D =
0)
 		return (p);
+	if (errno =3D=3D ENOMEM)
+		__archive_errx(1, "No memory");
 	return (NULL);
 }
=20
@@ -650,6 +683,8 @@
 	const wchar_t *p;
 	if (archive_mstring_get_wcs(entry->archive, &entry->ae_uname, &p) =3D=3D =
0)
 		return (p);
+	if (errno =3D=3D ENOMEM)
+		__archive_errx(1, "No memory");
 	return (NULL);
 }
=20
@@ -730,6 +765,8 @@
 	if (archive_mstring_update_utf8(entry->archive,
 	    &entry->ae_gname, name) =3D=3D 0)
 		return (1);
+	if (errno =3D=3D ENOMEM)
+		__archive_errx(1, "No memory");
 	return (0);
 }
=20
@@ -796,6 +833,8 @@
 	if (archive_mstring_update_utf8(entry->archive,
 	    &entry->ae_hardlink, target) =3D=3D 0)
 		return (1);
+	if (errno =3D=3D ENOMEM)
+		__archive_errx(1, "No memory");
 	return (0);
 }
=20
@@ -932,7 +971,11 @@
 	else
 		r =3D archive_mstring_update_utf8(entry->archive,
 		    &entry->ae_hardlink, target);
-	return ((r =3D=3D 0)? 1: 0);
+	if (r =3D=3D 0)
+		return (1);
+	if (errno =3D=3D ENOMEM)
+		__archive_errx(1, "No memory");
+	return (0);
 }
=20
 int
@@ -1005,6 +1048,8 @@
 	if (archive_mstring_update_utf8(entry->archive,
 	    &entry->ae_pathname, name) =3D=3D 0)
 		return (1);
+	if (errno =3D=3D ENOMEM)
+		__archive_errx(1, "No memory");
 	return (0);
 }
=20
@@ -1115,6 +1160,8 @@
 	if (archive_mstring_update_utf8(entry->archive,
 	    &entry->ae_symlink, linkname) =3D=3D 0)
 		return (1);
+	if (errno =3D=3D ENOMEM)
+		__archive_errx(1, "No memory");
 	return (0);
 }
=20
@@ -1164,6 +1211,8 @@
 	if (archive_mstring_update_utf8(entry->archive,
 	    &entry->ae_uname, name) =3D=3D 0)
 		return (1);
+	if (errno =3D=3D ENOMEM)
+		__archive_errx(1, "No memory");
 	return (0);
 }
=20
@@ -1269,7 +1318,12 @@
 archive_entry_acl_next(struct archive_entry *entry, int want_type, int *ty=
pe,
     int *permset, int *tag, int *id, const char **name)
 {
-	return archive_acl_next(entry->archive, &entry->acl, want_type, type, per=
mset, tag, id, name);
+	int r;
+	r =3D archive_acl_next(entry->archive, &entry->acl, want_type, type,
+		permset, tag, id, name);
+	if (r =3D=3D ARCHIVE_FATAL && errno =3D=3D ENOMEM)
+		__archive_errx(1, "No memory");
+	return (r);
 }
=20
 /*
@@ -1279,7 +1333,11 @@
 const wchar_t *
 archive_entry_acl_text_w(struct archive_entry *entry, int flags)
 {
-	return archive_acl_text_w(entry->archive, &entry->acl, flags);
+	const wchar_t *r;
+	r =3D archive_acl_text_w(entry->archive, &entry->acl, flags);
+	if (r =3D=3D NULL && errno =3D=3D ENOMEM)
+		__archive_errx(1, "No memory");
+	return (r);
 }
=20
 const char *
@@ -1288,7 +1346,7 @@
 	const char *p;
 	if (archive_acl_text_l(&entry->acl, flags, &p, NULL, NULL) !=3D 0
 	    && errno =3D=3D ENOMEM)
-		return (NULL);
+		__archive_errx(1, "No memory");
 	return (p);
 }
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_entry.h
--- a/head/contrib/libarchive/libarchive/archive_entry.h	Mon Jul 30 11:44:1=
8 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_entry.h	Fri Aug 10 14:19:2=
5 2012 +0300
@@ -22,14 +22,14 @@
  * (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: head/contrib/libarchive/libarchive/archive_entry.h 232153 201=
2-02-25 10:58:02Z mm $
+ * $FreeBSD: head/contrib/libarchive/libarchive/archive_entry.h 238856 201=
2-07-28 06:38:44Z mm $
  */
=20
 #ifndef ARCHIVE_ENTRY_H_INCLUDED
 #define	ARCHIVE_ENTRY_H_INCLUDED
=20
 /* Note: Compiler will complain if this does not match archive.h! */
-#define	ARCHIVE_VERSION_NUMBER 3000003
+#define	ARCHIVE_VERSION_NUMBER 3000004
=20
 /*
  * Note: archive_entry.h is for use outside of libarchive; the
@@ -47,21 +47,9 @@
 #include <windows.h>
 #endif
=20
-/* Get appropriate definitions of standard POSIX-style types. */
-/* These should match the types used in 'struct stat' */
+/* Get a suitable 64-bit integer type. */
 #if defined(_WIN32) && !defined(__CYGWIN__)
-#define	__LA_INT64_T	__int64
-# if defined(__BORLANDC__)
-#  define	__LA_UID_T	uid_t  /* Remove in libarchive 3.2 */
-#  define	__LA_GID_T	gid_t  /* Remove in libarchive 3.2 */
-#  define	__LA_DEV_T	dev_t
-#  define	__LA_MODE_T	mode_t
-# else
-#  define	__LA_UID_T	short  /* Remove in libarchive 3.2 */
-#  define	__LA_GID_T	short  /* Remove in libarchive 3.2 */
-#  define	__LA_DEV_T	unsigned int
-#  define	__LA_MODE_T	unsigned short
-# endif
+# define	__LA_INT64_T	__int64
 #else
 #include <unistd.h>
 # if defined(_SCO_DS)
@@ -69,19 +57,19 @@
 # else
 #  define	__LA_INT64_T	int64_t
 # endif
-# define	__LA_UID_T	uid_t /* Remove in libarchive 3.2 */
-# define	__LA_GID_T	gid_t /* Remove in libarchive 3.2 */
-# define	__LA_DEV_T	dev_t
+#endif
+
+/* Get a suitable definition for mode_t */
+#if ARCHIVE_VERSION_NUMBER >=3D 3999000
+/* Switch to plain 'int' for libarchive 4.0.  It's less broken than 'mode_=
t' */
+# define	__LA_MODE_T	int
+#elif defined(_WIN32) && !defined(__CYGWIN__) && !defined(__BORLANDC__)
+# define	__LA_MODE_T	unsigned short
+#else
 # define	__LA_MODE_T	mode_t
 #endif
=20
 /*
- * Remove this for libarchive 3.2, since ino_t is no longer used.
- */
-#define	__LA_INO_T	ino_t
-
-
-/*
  * On Windows, define LIBARCHIVE_STATIC if you're building or using a
  * .lib.  The default here assumes you're building a DLL.  Only
  * libarchive source should ever define __LIBARCHIVE_BUILD.
@@ -149,14 +137,18 @@
  * portable values to platform-native values when entries are read from
  * or written to disk.
  */
-#define	AE_IFMT		0170000
-#define	AE_IFREG	0100000
-#define	AE_IFLNK	0120000
-#define	AE_IFSOCK	0140000
-#define	AE_IFCHR	0020000
-#define	AE_IFBLK	0060000
-#define	AE_IFDIR	0040000
-#define	AE_IFIFO	0010000
+/*
+ * In libarchive 4.0, we can drop the casts here.
+ * They're needed to work around Borland C's broken mode_t.
+ */
+#define AE_IFMT		((__LA_MODE_T)0170000)
+#define AE_IFREG	((__LA_MODE_T)0100000)
+#define AE_IFLNK	((__LA_MODE_T)0120000)
+#define AE_IFSOCK	((__LA_MODE_T)0140000)
+#define AE_IFCHR	((__LA_MODE_T)0020000)
+#define AE_IFBLK	((__LA_MODE_T)0060000)
+#define AE_IFDIR	((__LA_MODE_T)0040000)
+#define AE_IFIFO	((__LA_MODE_T)0010000)
=20
 /*
  * Basic object manipulation
@@ -321,7 +313,10 @@
  * manipulate archives on systems different than the ones they were
  * created on.
  *
- * TODO: On Linux, provide both stat32 and stat64 versions of these functi=
ons.
+ * TODO: On Linux and other LFS systems, provide both stat32 and
+ * stat64 versions of these functions and all of the macro glue so
+ * that archive_entry_stat is magically defined to
+ * archive_entry_stat32 or archive_entry_stat64 as appropriate.
  */
 __LA_DECL const struct stat	*archive_entry_stat(struct archive_entry *);
 __LA_DECL void	archive_entry_copy_stat(struct archive_entry *, const struc=
t stat *);
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_entry_acl.3
--- a/head/contrib/libarchive/libarchive/archive_entry_acl.3	Mon Jul 30 11:=
44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_entry_acl.3	Fri Aug 10 14:=
19:25 2012 +0300
@@ -22,7 +22,7 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.Dd February 21, 2010
+.Dd February 2, 2012
 .Dt ARCHIVE_ENTRY_ACL 3
 .Os
 .Sh NAME
@@ -35,6 +35,8 @@
 .Nm archive_entry_acl_reset ,
 .Nm archive_entry_acl_text_w
 .Nd functions for manipulating Access Control Lists in archive entry descr=
iptions
+.Sh LIBRARY
+Streaming Archive Library (libarchive, -larchive)
 .Sh SYNOPSIS
 .In archive_entry.h
 .Ft void
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_entry_link_resolver.c
--- a/head/contrib/libarchive/libarchive/archive_entry_link_resolver.c	Mon =
Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_entry_link_resolver.c	Fri =
Aug 10 14:19:25 2012 +0300
@@ -24,7 +24,7 @@
  */
=20
 #include "archive_platform.h"
-__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/archive_entry_link_=
resolver.c 232153 2012-02-25 10:58:02Z mm $");
+__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/archive_entry_link_=
resolver.c 238856 2012-07-28 06:38:44Z mm $");
=20
 #ifdef HAVE_SYS_STAT_H
 #include <sys/stat.h>
@@ -362,7 +362,7 @@
 	if (res->number_entries > res->number_buckets * 2)
 		grow_hash(res);
=20
-	hash =3D archive_entry_dev(entry) ^ archive_entry_ino64(entry);
+	hash =3D (size_t)(archive_entry_dev(entry) ^ archive_entry_ino64(entry));
 	bucket =3D hash & (res->number_buckets - 1);
=20
 	/* If we could allocate the entry, record it. */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_entry_linkify.3
--- a/head/contrib/libarchive/libarchive/archive_entry_linkify.3	Mon Jul 30=
 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_entry_linkify.3	Fri Aug 10=
 14:19:25 2012 +0300
@@ -22,7 +22,7 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.Dd February 20, 2010
+.Dd February 2, 2012
 .Dt ARCHIVE_ENTRY_LINKIFY 3
 .Os
 .Sh NAME
@@ -33,7 +33,7 @@
 .Nm archive_entry_linkify
 .Nd hardlink resolver functions
 .Sh LIBRARY
-.Lb libarchive
+Streaming Archive Library (libarchive, -larchive)
 .Sh SYNOPSIS
 .In archive_entry.h
 .Ft struct archive_entry_linkresolver *
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_entry_paths.3
--- a/head/contrib/libarchive/libarchive/archive_entry_paths.3	Mon Jul 30 1=
1:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_entry_paths.3	Fri Aug 10 1=
4:19:25 2012 +0300
@@ -22,7 +22,7 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.Dd February 22, 2010
+.Dd February 2, 2012
 .Dt ARCHIVE_ENTRY_PATHS 3
 .Os
 .Sh NAME
@@ -51,6 +51,8 @@
 .Nm archive_entry_copy_symlink_w ,
 .Nm archve_entry_update_symlink_utf8
 .Nd functions for manipulating path names in archive entry descriptions
+.Sh LIBRARY
+Streaming Archive Library (libarchive, -larchive)
 .Sh SYNOPSIS
 .In archive_entry.h
 .Ft const char *
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_entry_perms.3
--- a/head/contrib/libarchive/libarchive/archive_entry_perms.3	Mon Jul 30 1=
1:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_entry_perms.3	Fri Aug 10 1=
4:19:25 2012 +0300
@@ -23,7 +23,7 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.Dd February 22, 2010
+.Dd February 2, 2012
 .Dt ARCHIVE_ENTRY_PERMS 3
 .Os
 .Sh NAME
@@ -52,6 +52,8 @@
 .Nm archive_entry_copy_fflags_text ,
 .Nm archive_entry_copy_fflags_text_w
 .Nd functions for manipulating ownership and permissions in archive entry =
descriptions
+.Sh LIBRARY
+Streaming Archive Library (libarchive, -larchive)
 .Sh SYNOPSIS
 .In archive_entry.h
 .Ft gid_t
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_entry_stat.3
--- a/head/contrib/libarchive/libarchive/archive_entry_stat.3	Mon Jul 30 11=
:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_entry_stat.3	Fri Aug 10 14=
:19:25 2012 +0300
@@ -22,8 +22,8 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.Dd May 12, 2008
-.Dt ARCHIVE_ENTRY 3
+.Dd February 2, 2012
+.Dt ARCHIVE_ENTRY_STAT 3
 .Os
 .Sh NAME
 .Nm archive_entry_stat ,
@@ -56,6 +56,8 @@
 .Nm archive_entry_rdevminor ,
 .Nm archive_entry_set_rdevminor ,
 .Nd accessor functions for manipulating archive entry descriptions
+.Sh LIBRARY
+Streaming Archive Library (libarchive, -larchive)
 .Sh SYNOPSIS
 .In archive_entry.h
 .Ft const struct stat *
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_entry_stat.c
--- a/head/contrib/libarchive/libarchive/archive_entry_stat.c	Mon Jul 30 11=
:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_entry_stat.c	Fri Aug 10 14=
:19:25 2012 +0300
@@ -24,7 +24,7 @@
  */
=20
 #include "archive_platform.h"
-__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/archive_entry_stat.=
c 232153 2012-02-25 10:58:02Z mm $");
+__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/archive_entry_stat.=
c 238856 2012-07-28 06:38:44Z mm $");
=20
 #ifdef HAVE_SYS_STAT_H
 #include <sys/stat.h>
@@ -70,12 +70,12 @@
 	st->st_ctime =3D archive_entry_ctime(entry);
 	st->st_mtime =3D archive_entry_mtime(entry);
 	st->st_dev =3D archive_entry_dev(entry);
-	st->st_gid =3D archive_entry_gid(entry);
-	st->st_uid =3D archive_entry_uid(entry);
-	st->st_ino =3D archive_entry_ino64(entry);
+	st->st_gid =3D (gid_t)archive_entry_gid(entry);
+	st->st_uid =3D (uid_t)archive_entry_uid(entry);
+	st->st_ino =3D (ino_t)archive_entry_ino64(entry);
 	st->st_nlink =3D archive_entry_nlink(entry);
 	st->st_rdev =3D archive_entry_rdev(entry);
-	st->st_size =3D archive_entry_size(entry);
+	st->st_size =3D (off_t)archive_entry_size(entry);
 	st->st_mode =3D archive_entry_mode(entry);
=20
 	/*
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_entry_time.3
--- a/head/contrib/libarchive/libarchive/archive_entry_time.3	Mon Jul 30 11=
:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_entry_time.3	Fri Aug 10 14=
:19:25 2012 +0300
@@ -23,9 +23,9 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\" $FreeBSD: src/lib/libarchive/archive_entry.3,v 1.18 2008/05/26 17:00:2=
2 kientzle Exp $
+.\" $FreeBSD$
 .\"
-.Dd February 21, 2010
+.Dd February 2, 2012
 .Dt ARCHIVE_ENTRY_TIME 3
 .Os
 .Sh NAME
@@ -50,6 +50,8 @@
 .Nm archive_entry_set_mtime ,
 .Nm archive_entry_unset_mtime ,
 .Nd functions for manipulating times in archive entry descriptions
+.Sh LIBRARY
+Streaming Archive Library (libarchive, -larchive)
 .Sh SYNOPSIS
 .In archive_entry.h
 .Ft time_t
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_getdate.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/head/contrib/libarchive/libarchive/archive_getdate.c	Fri Aug 10 14:19=
:25 2012 +0300
@@ -0,0 +1,1037 @@
+/*
+ * This code is in the public domain and has no copyright.
+ *
+ * This is a plain C recursive-descent translation of an old
+ * public-domain YACC grammar that has been used for parsing dates in
+ * very many open-source projects.
+ *
+ * Since the original authors were generous enough to donate their
+ * work to the public domain, I feel compelled to match their
+ * generosity.
+ *
+ * Tim Kientzle, February 2009.
+ */
+
+/*
+ * Header comment from original getdate.y:
+ */
+
+/*
+**  Originally written by Steven M. Bellovin <smb at research.att.com> while
+**  at the University of North Carolina at Chapel Hill.  Later tweaked by
+**  a couple of people on Usenet.  Completely overhauled by Rich $alz
+**  <rsalz at bbn.com> and Jim Berets <jberets at bbn.com> in August, 1990;
+**
+**  This grammar has 10 shift/reduce conflicts.
+**
+**  This code is in the public domain and has no copyright.
+*/
+
+#ifdef __FreeBSD__
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+#endif
+
+#include <ctype.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+
+/* This file defines a single public function. */
+time_t __archive_get_date(time_t now, char *);
+
+/* Basic time units. */
+#define	EPOCH		1970
+#define	MINUTE		(60L)
+#define	HOUR		(60L * MINUTE)
+#define	DAY		(24L * HOUR)
+
+/* Daylight-savings mode:  on, off, or not yet known. */
+enum DSTMODE { DSTon, DSToff, DSTmaybe };
+/* Meridian:  am or pm. */
+enum { tAM, tPM };
+/* Token types returned by nexttoken() */
+enum { tAGO =3D 260, tDAY, tDAYZONE, tAMPM, tMONTH, tMONTH_UNIT, tSEC_UNIT,
+       tUNUMBER, tZONE, tDST };
+struct token { int token; time_t value; };
+
+/*
+ * Parser state.
+ */
+struct gdstate {
+	struct token *tokenp; /* Pointer to next token. */
+	/* HaveXxxx counts how many of this kind of phrase we've seen;
+	 * it's a fatal error to have more than one time, zone, day,
+	 * or date phrase. */
+	int	HaveYear;
+	int	HaveMonth;
+	int	HaveDay;
+	int	HaveWeekDay; /* Day of week */
+	int	HaveTime; /* Hour/minute/second */
+	int	HaveZone; /* timezone and/or DST info */
+	int	HaveRel; /* time offset; we can have more than one */
+	/* Absolute time values. */
+	time_t	Timezone;  /* Seconds offset from GMT */
+	time_t	Day;
+	time_t	Hour;
+	time_t	Minutes;
+	time_t	Month;
+	time_t	Seconds;
+	time_t	Year;
+	/* DST selection */
+	enum DSTMODE	DSTmode;
+	/* Day of week accounting, e.g., "3rd Tuesday" */
+	time_t	DayOrdinal; /* "3" in "3rd Tuesday" */
+	time_t	DayNumber; /* "Tuesday" in "3rd Tuesday" */
+	/* Relative time values: hour/day/week offsets are measured in
+	 * seconds, month/year are counted in months. */
+	time_t	RelMonth;
+	time_t	RelSeconds;
+};
+
+/*
+ * A series of functions that recognize certain common time phrases.
+ * Each function returns 1 if it managed to make sense of some of the
+ * tokens, zero otherwise.
+ */
+
+/*
+ *  hour:minute or hour:minute:second with optional AM, PM, or numeric
+ *  timezone offset
+ */
+static int
+timephrase(struct gdstate *gds)
+{
+	if (gds->tokenp[0].token =3D=3D tUNUMBER
+	    && gds->tokenp[1].token =3D=3D ':'
+	    && gds->tokenp[2].token =3D=3D tUNUMBER
+	    && gds->tokenp[3].token =3D=3D ':'
+	    && gds->tokenp[4].token =3D=3D tUNUMBER) {
+		/* "12:14:18" or "22:08:07" */
+		++gds->HaveTime;
+		gds->Hour =3D gds->tokenp[0].value;
+		gds->Minutes =3D gds->tokenp[2].value;
+		gds->Seconds =3D gds->tokenp[4].value;
+		gds->tokenp +=3D 5;
+	}
+	else if (gds->tokenp[0].token =3D=3D tUNUMBER
+	    && gds->tokenp[1].token =3D=3D ':'
+	    && gds->tokenp[2].token =3D=3D tUNUMBER) {
+		/* "12:14" or "22:08" */
+		++gds->HaveTime;
+		gds->Hour =3D gds->tokenp[0].value;
+		gds->Minutes =3D gds->tokenp[2].value;
+		gds->Seconds =3D 0;
+		gds->tokenp +=3D 3;
+	}
+	else if (gds->tokenp[0].token =3D=3D tUNUMBER
+	    && gds->tokenp[1].token =3D=3D tAMPM) {
+		/* "7" is a time if it's followed by "am" or "pm" */
+		++gds->HaveTime;
+		gds->Hour =3D gds->tokenp[0].value;
+		gds->Minutes =3D gds->Seconds =3D 0;
+		/* We'll handle the AM/PM below. */
+		gds->tokenp +=3D 1;
+	} else {
+		/* We can't handle this. */
+		return 0;
+	}
+
+	if (gds->tokenp[0].token =3D=3D tAMPM) {
+		/* "7:12pm", "12:20:13am" */
+		if (gds->Hour =3D=3D 12)
+			gds->Hour =3D 0;
+		if (gds->tokenp[0].value =3D=3D tPM)
+			gds->Hour +=3D 12;
+		gds->tokenp +=3D 1;
+	}
+	if (gds->tokenp[0].token =3D=3D '+'
+	    && gds->tokenp[1].token =3D=3D tUNUMBER) {
+		/* "7:14+0700" */
+		gds->HaveZone++;
+		gds->DSTmode =3D DSToff;
+		gds->Timezone =3D - ((gds->tokenp[1].value / 100) * HOUR
+		    + (gds->tokenp[1].value % 100) * MINUTE);
+		gds->tokenp +=3D 2;
+	}
+	if (gds->tokenp[0].token =3D=3D '-'
+	    && gds->tokenp[1].token =3D=3D tUNUMBER) {
+		/* "19:14:12-0530" */
+		gds->HaveZone++;
+		gds->DSTmode =3D DSToff;
+		gds->Timezone =3D + ((gds->tokenp[1].value / 100) * HOUR
+		    + (gds->tokenp[1].value % 100) * MINUTE);
+		gds->tokenp +=3D 2;
+	}
+	return 1;
+}
+
+/*
+ * Timezone name, possibly including DST.
+ */
+static int
+zonephrase(struct gdstate *gds)
+{
+	if (gds->tokenp[0].token =3D=3D tZONE
+	    && gds->tokenp[1].token =3D=3D tDST) {
+		gds->HaveZone++;
+		gds->Timezone =3D gds->tokenp[0].value;
+		gds->DSTmode =3D DSTon;
+		gds->tokenp +=3D 1;
+		return 1;
+	}
+
+	if (gds->tokenp[0].token =3D=3D tZONE) {
+		gds->HaveZone++;
+		gds->Timezone =3D gds->tokenp[0].value;
+		gds->DSTmode =3D DSToff;
+		gds->tokenp +=3D 1;
+		return 1;
+	}
+
+	if (gds->tokenp[0].token =3D=3D tDAYZONE) {
+		gds->HaveZone++;
+		gds->Timezone =3D gds->tokenp[0].value;
+		gds->DSTmode =3D DSTon;
+		gds->tokenp +=3D 1;
+		return 1;
+	}
+	return 0;
+}
+
+/*
+ * Year/month/day in various combinations.
+ */
+static int
+datephrase(struct gdstate *gds)
+{
+	if (gds->tokenp[0].token =3D=3D tUNUMBER
+	    && gds->tokenp[1].token =3D=3D '/'
+	    && gds->tokenp[2].token =3D=3D tUNUMBER
+	    && gds->tokenp[3].token =3D=3D '/'
+	    && gds->tokenp[4].token =3D=3D tUNUMBER) {
+		gds->HaveYear++;
+		gds->HaveMonth++;
+		gds->HaveDay++;
+		if (gds->tokenp[0].value >=3D 13) {
+			/* First number is big:  2004/01/29, 99/02/17 */
+			gds->Year =3D gds->tokenp[0].value;
+			gds->Month =3D gds->tokenp[2].value;
+			gds->Day =3D gds->tokenp[4].value;
+		} else if ((gds->tokenp[4].value >=3D 13)
+		    || (gds->tokenp[2].value >=3D 13)) {
+			/* Last number is big:  01/07/98 */
+			/* Middle number is big:  01/29/04 */
+			gds->Month =3D gds->tokenp[0].value;
+			gds->Day =3D gds->tokenp[2].value;
+			gds->Year =3D gds->tokenp[4].value;
+		} else {
+			/* No significant clues: 02/03/04 */
+			gds->Month =3D gds->tokenp[0].value;
+			gds->Day =3D gds->tokenp[2].value;
+			gds->Year =3D gds->tokenp[4].value;
+		}
+		gds->tokenp +=3D 5;
+		return 1;
+	}
+
+	if (gds->tokenp[0].token =3D=3D tUNUMBER
+	    && gds->tokenp[1].token =3D=3D '/'
+	    && gds->tokenp[2].token =3D=3D tUNUMBER) {
+		/* "1/15" */
+		gds->HaveMonth++;
+		gds->HaveDay++;
+		gds->Month =3D gds->tokenp[0].value;
+		gds->Day =3D gds->tokenp[2].value;
+		gds->tokenp +=3D 3;
+		return 1;
+	}
+
+	if (gds->tokenp[0].token =3D=3D tUNUMBER
+	    && gds->tokenp[1].token =3D=3D '-'
+	    && gds->tokenp[2].token =3D=3D tUNUMBER
+	    && gds->tokenp[3].token =3D=3D '-'
+	    && gds->tokenp[4].token =3D=3D tUNUMBER) {
+		/* ISO 8601 format.  yyyy-mm-dd.  */
+		gds->HaveYear++;
+		gds->HaveMonth++;
+		gds->HaveDay++;
+		gds->Year =3D gds->tokenp[0].value;
+		gds->Month =3D gds->tokenp[2].value;
+		gds->Day =3D gds->tokenp[4].value;
+		gds->tokenp +=3D 5;
+		return 1;
+	}
+
+	if (gds->tokenp[0].token =3D=3D tUNUMBER
+	    && gds->tokenp[1].token =3D=3D '-'
+	    && gds->tokenp[2].token =3D=3D tMONTH
+	    && gds->tokenp[3].token =3D=3D '-'
+	    && gds->tokenp[4].token =3D=3D tUNUMBER) {
+		gds->HaveYear++;
+		gds->HaveMonth++;
+		gds->HaveDay++;
+		if (gds->tokenp[0].value > 31) {
+			/* e.g. 1992-Jun-17 */
+			gds->Year =3D gds->tokenp[0].value;
+			gds->Month =3D gds->tokenp[2].value;
+			gds->Day =3D gds->tokenp[4].value;
+		} else {
+			/* e.g. 17-JUN-1992.  */
+			gds->Day =3D gds->tokenp[0].value;
+			gds->Month =3D gds->tokenp[2].value;
+			gds->Year =3D gds->tokenp[4].value;
+		}
+		gds->tokenp +=3D 5;
+		return 1;
+	}
+
+	if (gds->tokenp[0].token =3D=3D tMONTH
+	    && gds->tokenp[1].token =3D=3D tUNUMBER
+	    && gds->tokenp[2].token =3D=3D ','
+	    && gds->tokenp[3].token =3D=3D tUNUMBER) {
+		/* "June 17, 2001" */
+		gds->HaveYear++;
+		gds->HaveMonth++;
+		gds->HaveDay++;
+		gds->Month =3D gds->tokenp[0].value;
+		gds->Day =3D gds->tokenp[1].value;
+		gds->Year =3D gds->tokenp[3].value;
+		gds->tokenp +=3D 4;
+		return 1;
+	}
+
+	if (gds->tokenp[0].token =3D=3D tMONTH
+	    && gds->tokenp[1].token =3D=3D tUNUMBER) {
+		/* "May 3" */
+		gds->HaveMonth++;
+		gds->HaveDay++;
+		gds->Month =3D gds->tokenp[0].value;
+		gds->Day =3D gds->tokenp[1].value;
+		gds->tokenp +=3D 2;
+		return 1;
+	}
+
+	if (gds->tokenp[0].token =3D=3D tUNUMBER
+	    && gds->tokenp[1].token =3D=3D tMONTH
+	    && gds->tokenp[2].token =3D=3D tUNUMBER) {
+		/* "12 Sept 1997" */
+		gds->HaveYear++;
+		gds->HaveMonth++;
+		gds->HaveDay++;
+		gds->Day =3D gds->tokenp[0].value;
+		gds->Month =3D gds->tokenp[1].value;
+		gds->Year =3D gds->tokenp[2].value;
+		gds->tokenp +=3D 3;
+		return 1;
+	}
+
+	if (gds->tokenp[0].token =3D=3D tUNUMBER
+	    && gds->tokenp[1].token =3D=3D tMONTH) {
+		/* "12 Sept" */
+		gds->HaveMonth++;
+		gds->HaveDay++;
+		gds->Day =3D gds->tokenp[0].value;
+		gds->Month =3D gds->tokenp[1].value;
+		gds->tokenp +=3D 2;
+		return 1;
+	}
+
+	return 0;
+}
+
+/*
+ * Relative time phrase: "tomorrow", "yesterday", "+1 hour", etc.
+ */
+static int
+relunitphrase(struct gdstate *gds)
+{
+	if (gds->tokenp[0].token =3D=3D '-'
+	    && gds->tokenp[1].token =3D=3D tUNUMBER
+	    && gds->tokenp[2].token =3D=3D tSEC_UNIT) {
+		/* "-3 hours" */
+		gds->HaveRel++;
+		gds->RelSeconds -=3D gds->tokenp[1].value * gds->tokenp[2].value;
+		gds->tokenp +=3D 3;
+		return 1;
+	}
+	if (gds->tokenp[0].token =3D=3D '+'
+	    && gds->tokenp[1].token =3D=3D tUNUMBER
+	    && gds->tokenp[2].token =3D=3D tSEC_UNIT) {
+		/* "+1 minute" */
+		gds->HaveRel++;
+		gds->RelSeconds +=3D gds->tokenp[1].value * gds->tokenp[2].value;
+		gds->tokenp +=3D 3;
+		return 1;
+	}
+	if (gds->tokenp[0].token =3D=3D tUNUMBER
+	    && gds->tokenp[1].token =3D=3D tSEC_UNIT) {
+		/* "1 day" */
+		gds->HaveRel++;
+		gds->RelSeconds +=3D gds->tokenp[1].value * gds->tokenp[2].value;
+		gds->tokenp +=3D 3;
+		return 1;
+	}
+	if (gds->tokenp[0].token =3D=3D '-'
+	    && gds->tokenp[1].token =3D=3D tUNUMBER
+	    && gds->tokenp[2].token =3D=3D tMONTH_UNIT) {
+		/* "-3 months" */
+		gds->HaveRel++;
+		gds->RelMonth -=3D gds->tokenp[1].value * gds->tokenp[2].value;
+		gds->tokenp +=3D 3;
+		return 1;
+	}
+	if (gds->tokenp[0].token =3D=3D '+'
+	    && gds->tokenp[1].token =3D=3D tUNUMBER
+	    && gds->tokenp[2].token =3D=3D tMONTH_UNIT) {
+		/* "+5 years" */
+		gds->HaveRel++;
+		gds->RelMonth +=3D gds->tokenp[1].value * gds->tokenp[2].value;
+		gds->tokenp +=3D 3;
+		return 1;
+	}
+	if (gds->tokenp[0].token =3D=3D tUNUMBER
+	    && gds->tokenp[1].token =3D=3D tMONTH_UNIT) {
+		/* "2 years" */
+		gds->HaveRel++;
+		gds->RelMonth +=3D gds->tokenp[0].value * gds->tokenp[1].value;
+		gds->tokenp +=3D 2;
+		return 1;
+	}
+	if (gds->tokenp[0].token =3D=3D tSEC_UNIT) {
+		/* "now", "tomorrow" */
+		gds->HaveRel++;
+		gds->RelSeconds +=3D gds->tokenp[0].value;
+		++gds->tokenp;
+		return 1;
+	}
+	if (gds->tokenp[0].token =3D=3D tMONTH_UNIT) {
+		/* "month" */
+		gds->HaveRel++;
+		gds->RelMonth +=3D gds->tokenp[0].value;
+		gds->tokenp +=3D 1;
+		return 1;
+	}
+	return 0;
+}
+
+/*
+ * Day of the week specification.
+ */
+static int
+dayphrase(struct gdstate *gds)
+{
+	if (gds->tokenp[0].token =3D=3D tDAY) {
+		/* "tues", "wednesday," */
+		gds->HaveWeekDay++;
+		gds->DayOrdinal =3D 1;
+		gds->DayNumber =3D gds->tokenp[0].value;
+		gds->tokenp +=3D 1;
+		if (gds->tokenp[0].token =3D=3D ',')
+			gds->tokenp +=3D 1;
+		return 1;
+	}
+	if (gds->tokenp[0].token =3D=3D tUNUMBER
+		&& gds->tokenp[1].token =3D=3D tDAY) {
+		/* "second tues" "3 wed" */
+		gds->HaveWeekDay++;
+		gds->DayOrdinal =3D gds->tokenp[0].value;
+		gds->DayNumber =3D gds->tokenp[1].value;
+		gds->tokenp +=3D 2;
+		return 1;
+	}
+	return 0;
+}
+
+/*
+ * Try to match a phrase using one of the above functions.
+ * This layer also deals with a couple of generic issues.
+ */
+static int
+phrase(struct gdstate *gds)
+{
+	if (timephrase(gds))
+		return 1;
+	if (zonephrase(gds))
+		return 1;
+	if (datephrase(gds))
+		return 1;
+	if (dayphrase(gds))
+		return 1;
+	if (relunitphrase(gds)) {
+		if (gds->tokenp[0].token =3D=3D tAGO) {
+			gds->RelSeconds =3D -gds->RelSeconds;
+			gds->RelMonth =3D -gds->RelMonth;
+			gds->tokenp +=3D 1;
+		}
+		return 1;
+	}
+
+	/* Bare numbers sometimes have meaning. */
+	if (gds->tokenp[0].token =3D=3D tUNUMBER) {
+		if (gds->HaveTime && !gds->HaveYear && !gds->HaveRel) {
+			gds->HaveYear++;
+			gds->Year =3D gds->tokenp[0].value;
+			gds->tokenp +=3D 1;
+			return 1;
+		}
+
+		if(gds->tokenp[0].value > 10000) {
+			/* "20040301" */
+			gds->HaveYear++;
+			gds->HaveMonth++;
+			gds->HaveDay++;
+			gds->Day=3D (gds->tokenp[0].value)%100;
+			gds->Month=3D (gds->tokenp[0].value/100)%100;
+			gds->Year =3D gds->tokenp[0].value/10000;
+			gds->tokenp +=3D 1;
+			return 1;
+		}
+
+		if (gds->tokenp[0].value < 24) {
+			gds->HaveTime++;
+			gds->Hour =3D gds->tokenp[0].value;
+			gds->Minutes =3D 0;
+			gds->Seconds =3D 0;
+			gds->tokenp +=3D 1;
+			return 1;
+		}
+
+		if ((gds->tokenp[0].value / 100 < 24)
+		    && (gds->tokenp[0].value % 100 < 60)) {
+			/* "513" is same as "5:13" */
+			gds->Hour =3D gds->tokenp[0].value / 100;
+			gds->Minutes =3D gds->tokenp[0].value % 100;
+			gds->Seconds =3D 0;
+			gds->tokenp +=3D 1;
+			return 1;
+		}
+	}
+
+	return 0;
+}
+
+/*
+ * A dictionary of time words.
+ */
+static struct LEXICON {
+	size_t		abbrev;
+	const char	*name;
+	int		type;
+	time_t		value;
+} const TimeWords[] =3D {
+	/* am/pm */
+	{ 0, "am",		tAMPM,	tAM },
+	{ 0, "pm",		tAMPM,	tPM },
+
+	/* Month names. */
+	{ 3, "january",		tMONTH,  1 },
+	{ 3, "february",	tMONTH,  2 },
+	{ 3, "march",		tMONTH,  3 },
+	{ 3, "april",		tMONTH,  4 },
+	{ 3, "may",		tMONTH,  5 },
+	{ 3, "june",		tMONTH,  6 },
+	{ 3, "july",		tMONTH,  7 },
+	{ 3, "august",		tMONTH,  8 },
+	{ 3, "september",	tMONTH,  9 },
+	{ 3, "october",		tMONTH, 10 },
+	{ 3, "november",	tMONTH, 11 },
+	{ 3, "december",	tMONTH, 12 },
+
+	/* Days of the week. */
+	{ 2, "sunday",		tDAY, 0 },
+	{ 3, "monday",		tDAY, 1 },
+	{ 2, "tuesday",		tDAY, 2 },
+	{ 3, "wednesday",	tDAY, 3 },
+	{ 2, "thursday",	tDAY, 4 },
+	{ 2, "friday",		tDAY, 5 },
+	{ 2, "saturday",	tDAY, 6 },
+
+	/* Timezones: Offsets are in seconds. */
+	{ 0, "gmt",  tZONE,     0*HOUR }, /* Greenwich Mean */
+	{ 0, "ut",   tZONE,     0*HOUR }, /* Universal (Coordinated) */
+	{ 0, "utc",  tZONE,     0*HOUR },
+	{ 0, "wet",  tZONE,     0*HOUR }, /* Western European */
+	{ 0, "bst",  tDAYZONE,  0*HOUR }, /* British Summer */
+	{ 0, "wat",  tZONE,     1*HOUR }, /* West Africa */
+	{ 0, "at",   tZONE,     2*HOUR }, /* Azores */
+	/* { 0, "bst", tZONE, 3*HOUR }, */ /* Brazil Standard: Conflict */
+	/* { 0, "gst", tZONE, 3*HOUR }, */ /* Greenland Standard: Conflict*/
+	{ 0, "nft",  tZONE,     3*HOUR+30*MINUTE }, /* Newfoundland */
+	{ 0, "nst",  tZONE,     3*HOUR+30*MINUTE }, /* Newfoundland Standard */
+	{ 0, "ndt",  tDAYZONE,  3*HOUR+30*MINUTE }, /* Newfoundland Daylight */
+	{ 0, "ast",  tZONE,     4*HOUR }, /* Atlantic Standard */
+	{ 0, "adt",  tDAYZONE,  4*HOUR }, /* Atlantic Daylight */
+	{ 0, "est",  tZONE,     5*HOUR }, /* Eastern Standard */
+	{ 0, "edt",  tDAYZONE,  5*HOUR }, /* Eastern Daylight */
+	{ 0, "cst",  tZONE,     6*HOUR }, /* Central Standard */
+	{ 0, "cdt",  tDAYZONE,  6*HOUR }, /* Central Daylight */
+	{ 0, "mst",  tZONE,     7*HOUR }, /* Mountain Standard */
+	{ 0, "mdt",  tDAYZONE,  7*HOUR }, /* Mountain Daylight */
+	{ 0, "pst",  tZONE,     8*HOUR }, /* Pacific Standard */
+	{ 0, "pdt",  tDAYZONE,  8*HOUR }, /* Pacific Daylight */
+	{ 0, "yst",  tZONE,     9*HOUR }, /* Yukon Standard */
+	{ 0, "ydt",  tDAYZONE,  9*HOUR }, /* Yukon Daylight */
+	{ 0, "hst",  tZONE,     10*HOUR }, /* Hawaii Standard */
+	{ 0, "hdt",  tDAYZONE,  10*HOUR }, /* Hawaii Daylight */
+	{ 0, "cat",  tZONE,     10*HOUR }, /* Central Alaska */
+	{ 0, "ahst", tZONE,     10*HOUR }, /* Alaska-Hawaii Standard */
+	{ 0, "nt",   tZONE,     11*HOUR }, /* Nome */
+	{ 0, "idlw", tZONE,     12*HOUR }, /* Intl Date Line West */
+	{ 0, "cet",  tZONE,     -1*HOUR }, /* Central European */
+	{ 0, "met",  tZONE,     -1*HOUR }, /* Middle European */
+	{ 0, "mewt", tZONE,     -1*HOUR }, /* Middle European Winter */
+	{ 0, "mest", tDAYZONE,  -1*HOUR }, /* Middle European Summer */
+	{ 0, "swt",  tZONE,     -1*HOUR }, /* Swedish Winter */
+	{ 0, "sst",  tDAYZONE,  -1*HOUR }, /* Swedish Summer */
+	{ 0, "fwt",  tZONE,     -1*HOUR }, /* French Winter */
+	{ 0, "fst",  tDAYZONE,  -1*HOUR }, /* French Summer */
+	{ 0, "eet",  tZONE,     -2*HOUR }, /* Eastern Eur, USSR Zone 1 */
+	{ 0, "bt",   tZONE,     -3*HOUR }, /* Baghdad, USSR Zone 2 */
+	{ 0, "it",   tZONE,     -3*HOUR-30*MINUTE },/* Iran */
+	{ 0, "zp4",  tZONE,     -4*HOUR }, /* USSR Zone 3 */
+	{ 0, "zp5",  tZONE,     -5*HOUR }, /* USSR Zone 4 */
+	{ 0, "ist",  tZONE,     -5*HOUR-30*MINUTE },/* Indian Standard */
+	{ 0, "zp6",  tZONE,     -6*HOUR }, /* USSR Zone 5 */
+	/* { 0, "nst",  tZONE, -6.5*HOUR }, */ /* North Sumatra: Conflict */
+	/* { 0, "sst", tZONE, -7*HOUR }, */ /* So Sumatra, USSR 6: Conflict */
+	{ 0, "wast", tZONE,     -7*HOUR }, /* West Australian Standard */
+	{ 0, "wadt", tDAYZONE,  -7*HOUR }, /* West Australian Daylight */
+	{ 0, "jt",   tZONE,     -7*HOUR-30*MINUTE },/* Java (3pm in Cronusland!)*/
+	{ 0, "cct",  tZONE,     -8*HOUR }, /* China Coast, USSR Zone 7 */
+	{ 0, "jst",  tZONE,     -9*HOUR }, /* Japan Std, USSR Zone 8 */
+	{ 0, "cast", tZONE,     -9*HOUR-30*MINUTE },/* Ctrl Australian Std */
+	{ 0, "cadt", tDAYZONE,  -9*HOUR-30*MINUTE },/* Ctrl Australian Daylt */
+	{ 0, "east", tZONE,     -10*HOUR }, /* Eastern Australian Std */
+	{ 0, "eadt", tDAYZONE,  -10*HOUR }, /* Eastern Australian Daylt */
+	{ 0, "gst",  tZONE,     -10*HOUR }, /* Guam Std, USSR Zone 9 */
+	{ 0, "nzt",  tZONE,     -12*HOUR }, /* New Zealand */
+	{ 0, "nzst", tZONE,     -12*HOUR }, /* New Zealand Standard */
+	{ 0, "nzdt", tDAYZONE,  -12*HOUR }, /* New Zealand Daylight */
+	{ 0, "idle", tZONE,     -12*HOUR }, /* Intl Date Line East */
+
+	{ 0, "dst",  tDST,		0 },
+
+	/* Time units. */
+	{ 4, "years",		tMONTH_UNIT,	12 },
+	{ 5, "months",		tMONTH_UNIT,	1 },
+	{ 9, "fortnights",	tSEC_UNIT,	14 * DAY },
+	{ 4, "weeks",		tSEC_UNIT,	7 * DAY },
+	{ 3, "days",		tSEC_UNIT,	DAY },
+	{ 4, "hours",		tSEC_UNIT,	HOUR },
+	{ 3, "minutes",		tSEC_UNIT,	MINUTE },
+	{ 3, "seconds",		tSEC_UNIT,	1 },
+
+	/* Relative-time words. */
+	{ 0, "tomorrow",	tSEC_UNIT,	DAY },
+	{ 0, "yesterday",	tSEC_UNIT,	-DAY },
+	{ 0, "today",		tSEC_UNIT,	0 },
+	{ 0, "now",		tSEC_UNIT,	0 },
+	{ 0, "last",		tUNUMBER,	-1 },
+	{ 0, "this",		tSEC_UNIT,	0 },
+	{ 0, "next",		tUNUMBER,	2 },
+	{ 0, "first",		tUNUMBER,	1 },
+	{ 0, "1st",		tUNUMBER,	1 },
+/*	{ 0, "second",		tUNUMBER,	2 }, */
+	{ 0, "2nd",		tUNUMBER,	2 },
+	{ 0, "third",		tUNUMBER,	3 },
+	{ 0, "3rd",		tUNUMBER,	3 },
+	{ 0, "fourth",		tUNUMBER,	4 },
+	{ 0, "4th",		tUNUMBER,	4 },
+	{ 0, "fifth",		tUNUMBER,	5 },
+	{ 0, "5th",		tUNUMBER,	5 },
+	{ 0, "sixth",		tUNUMBER,	6 },
+	{ 0, "seventh",		tUNUMBER,	7 },
+	{ 0, "eighth",		tUNUMBER,	8 },
+	{ 0, "ninth",		tUNUMBER,	9 },
+	{ 0, "tenth",		tUNUMBER,	10 },
+	{ 0, "eleventh",	tUNUMBER,	11 },
+	{ 0, "twelfth",		tUNUMBER,	12 },
+	{ 0, "ago",		tAGO,		1 },
+
+	/* Military timezones. */
+	{ 0, "a",	tZONE,	1*HOUR },
+	{ 0, "b",	tZONE,	2*HOUR },
+	{ 0, "c",	tZONE,	3*HOUR },
+	{ 0, "d",	tZONE,	4*HOUR },
+	{ 0, "e",	tZONE,	5*HOUR },
+	{ 0, "f",	tZONE,	6*HOUR },
+	{ 0, "g",	tZONE,	7*HOUR },
+	{ 0, "h",	tZONE,	8*HOUR },
+	{ 0, "i",	tZONE,	9*HOUR },
+	{ 0, "k",	tZONE,	10*HOUR },
+	{ 0, "l",	tZONE,	11*HOUR },
+	{ 0, "m",	tZONE,	12*HOUR },
+	{ 0, "n",	tZONE,	-1*HOUR },
+	{ 0, "o",	tZONE,	-2*HOUR },
+	{ 0, "p",	tZONE,	-3*HOUR },
+	{ 0, "q",	tZONE,	-4*HOUR },
+	{ 0, "r",	tZONE,	-5*HOUR },
+	{ 0, "s",	tZONE,	-6*HOUR },
+	{ 0, "t",	tZONE,	-7*HOUR },
+	{ 0, "u",	tZONE,	-8*HOUR },
+	{ 0, "v",	tZONE,	-9*HOUR },
+	{ 0, "w",	tZONE,	-10*HOUR },
+	{ 0, "x",	tZONE,	-11*HOUR },
+	{ 0, "y",	tZONE,	-12*HOUR },
+	{ 0, "z",	tZONE,	0*HOUR },
+
+	/* End of table. */
+	{ 0, NULL,	0,	0 }
+};
+
+/*
+ * Year is either:
+ *  =3D A number from 0 to 99, which means a year from 1970 to 2069, or
+ *  =3D The actual year (>=3D100).
+ */
+static time_t
+Convert(time_t Month, time_t Day, time_t Year,
+	time_t Hours, time_t Minutes, time_t Seconds,
+	time_t Timezone, enum DSTMODE DSTmode)
+{
+	static int DaysInMonth[12] =3D {
+		31, 0, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
+	};
+	time_t	Julian;
+	int	i;
+
+	if (Year < 69)
+		Year +=3D 2000;
+	else if (Year < 100)
+		Year +=3D 1900;
+	DaysInMonth[1] =3D Year % 4 =3D=3D 0 && (Year % 100 !=3D 0 || Year % 400 =
=3D=3D 0)
+	    ? 29 : 28;
+	/* Checking for 2038 bogusly assumes that time_t is 32 bits.  But
+	   I'm too lazy to try to check for time_t overflow in another way.  */
+	if (Year < EPOCH || Year > 2038
+	    || Month < 1 || Month > 12
+	    /* Lint fluff:  "conversion from long may lose accuracy" */
+	    || Day < 1 || Day > DaysInMonth[(int)--Month]
+	    || Hours < 0 || Hours > 23
+	    || Minutes < 0 || Minutes > 59
+	    || Seconds < 0 || Seconds > 59)
+		return -1;
+
+	Julian =3D Day - 1;
+	for (i =3D 0; i < Month; i++)
+		Julian +=3D DaysInMonth[i];
+	for (i =3D EPOCH; i < Year; i++)
+		Julian +=3D 365 + (i % 4 =3D=3D 0);
+	Julian *=3D DAY;
+	Julian +=3D Timezone;
+	Julian +=3D Hours * HOUR + Minutes * MINUTE + Seconds;
+	if (DSTmode =3D=3D DSTon
+	    || (DSTmode =3D=3D DSTmaybe && localtime(&Julian)->tm_isdst))
+		Julian -=3D HOUR;
+	return Julian;
+}
+
+
+static time_t
+DSTcorrect(time_t Start, time_t Future)
+{
+	time_t	StartDay;
+	time_t	FutureDay;
+
+	StartDay =3D (localtime(&Start)->tm_hour + 1) % 24;
+	FutureDay =3D (localtime(&Future)->tm_hour + 1) % 24;
+	return (Future - Start) + (StartDay - FutureDay) * HOUR;
+}
+
+
+static time_t
+RelativeDate(time_t Start, time_t zone, int dstmode,
+    time_t DayOrdinal, time_t DayNumber)
+{
+	struct tm	*tm;
+	time_t	t, now;
+
+	t =3D Start - zone;
+	tm =3D gmtime(&t);
+	now =3D Start;
+	now +=3D DAY * ((DayNumber - tm->tm_wday + 7) % 7);
+	now +=3D 7 * DAY * (DayOrdinal <=3D 0 ? DayOrdinal : DayOrdinal - 1);
+	if (dstmode =3D=3D DSTmaybe)
+		return DSTcorrect(Start, now);
+	return now - Start;
+}
+
+
+static time_t
+RelativeMonth(time_t Start, time_t Timezone, time_t RelMonth)
+{
+	struct tm	*tm;
+	time_t	Month;
+	time_t	Year;
+
+	if (RelMonth =3D=3D 0)
+		return 0;
+	tm =3D localtime(&Start);
+	Month =3D 12 * (tm->tm_year + 1900) + tm->tm_mon + RelMonth;
+	Year =3D Month / 12;
+	Month =3D Month % 12 + 1;
+	return DSTcorrect(Start,
+	    Convert(Month, (time_t)tm->tm_mday, Year,
+		(time_t)tm->tm_hour, (time_t)tm->tm_min, (time_t)tm->tm_sec,
+		Timezone, DSTmaybe));
+}
+
+/*
+ * Tokenizer.
+ */
+static int
+nexttoken(char **in, time_t *value)
+{
+	char	c;
+	char	buff[64];
+
+	for ( ; ; ) {
+		while (isspace((unsigned char)**in))
+			++*in;
+
+		/* Skip parenthesized comments. */
+		if (**in =3D=3D '(') {
+			int Count =3D 0;
+			do {
+				c =3D *(*in)++;
+				if (c =3D=3D '\0')
+					return c;
+				if (c =3D=3D '(')
+					Count++;
+				else if (c =3D=3D ')')
+					Count--;
+			} while (Count > 0);
+			continue;
+		}
+
+		/* Try the next token in the word table first. */
+		/* This allows us to match "2nd", for example. */
+		{
+			char *src =3D *in;
+			const struct LEXICON *tp;
+			unsigned i =3D 0;
+
+			/* Force to lowercase and strip '.' characters. */
+			while (*src !=3D '\0'
+			    && (isalnum((unsigned char)*src) || *src =3D=3D '.')
+			    && i < sizeof(buff)-1) {
+				if (*src !=3D '.') {
+					if (isupper((unsigned char)*src))
+						buff[i++] =3D tolower((unsigned char)*src);
+					else
+						buff[i++] =3D *src;
+				}
+				src++;
+			}
+			buff[i] =3D '\0';
+
+			/*
+			 * Find the first match.  If the word can be
+			 * abbreviated, make sure we match at least
+			 * the minimum abbreviation.
+			 */
+			for (tp =3D TimeWords; tp->name; tp++) {
+				size_t abbrev =3D tp->abbrev;
+				if (abbrev =3D=3D 0)
+					abbrev =3D strlen(tp->name);
+				if (strlen(buff) >=3D abbrev
+				    && strncmp(tp->name, buff, strlen(buff))
+				    	=3D=3D 0) {
+					/* Skip over token. */
+					*in =3D src;
+					/* Return the match. */
+					*value =3D tp->value;
+					return tp->type;
+				}
+			}
+		}
+
+		/*
+		 * Not in the word table, maybe it's a number.  Note:
+		 * Because '-' and '+' have other special meanings, I
+		 * don't deal with signed numbers here.
+		 */
+		if (isdigit((unsigned char)(c =3D **in))) {
+			for (*value =3D 0; isdigit((unsigned char)(c =3D *(*in)++)); )
+				*value =3D 10 * *value + c - '0';
+			(*in)--;
+			return (tUNUMBER);
+		}
+
+		return *(*in)++;
+	}
+}
+
+#define	TM_YEAR_ORIGIN 1900
+
+/* Yield A - B, measured in seconds.  */
+static long
+difftm (struct tm *a, struct tm *b)
+{
+	int ay =3D a->tm_year + (TM_YEAR_ORIGIN - 1);
+	int by =3D b->tm_year + (TM_YEAR_ORIGIN - 1);
+	int days =3D (
+		/* difference in day of year */
+		a->tm_yday - b->tm_yday
+		/* + intervening leap days */
+		+  ((ay >> 2) - (by >> 2))
+		-  (ay/100 - by/100)
+		+  ((ay/100 >> 2) - (by/100 >> 2))
+		/* + difference in years * 365 */
+		+  (long)(ay-by) * 365
+		);
+	return (days * DAY + (a->tm_hour - b->tm_hour) * HOUR
+	    + (a->tm_min - b->tm_min) * MINUTE
+	    + (a->tm_sec - b->tm_sec));
+}
+
+/*
+ *
+ * The public function.
+ *
+ * TODO: tokens[] array should be dynamically sized.
+ */
+time_t
+__archive_get_date(time_t now, char *p)
+{
+	struct token	tokens[256];
+	struct gdstate	_gds;
+	struct token	*lasttoken;
+	struct gdstate	*gds;
+	struct tm	local, *tm;
+	struct tm	gmt, *gmt_ptr;
+	time_t		Start;
+	time_t		tod;
+	long		tzone;
+
+	/* Clear out the parsed token array. */
+	memset(tokens, 0, sizeof(tokens));
+	/* Initialize the parser state. */
+	memset(&_gds, 0, sizeof(_gds));
+	gds =3D &_gds;
+
+	/* Look up the current time. */
+	memset(&local, 0, sizeof(local));
+	tm =3D localtime (&now);
+	if (tm =3D=3D NULL)
+		return -1;
+	local =3D *tm;
+
+	/* Look up UTC if we can and use that to determine the current
+	 * timezone offset. */
+	memset(&gmt, 0, sizeof(gmt));
+	gmt_ptr =3D gmtime (&now);
+	if (gmt_ptr !=3D NULL) {
+		/* Copy, in case localtime and gmtime use the same buffer. */
+		gmt =3D *gmt_ptr;
+	}
+	if (gmt_ptr !=3D NULL)
+		tzone =3D difftm (&gmt, &local);
+	else
+		/* This system doesn't understand timezones; fake it. */
+		tzone =3D 0;
+	if(local.tm_isdst)
+		tzone +=3D HOUR;
+
+	/* Tokenize the input string. */
+	lasttoken =3D tokens;
+	while ((lasttoken->token =3D nexttoken(&p, &lasttoken->value)) !=3D 0) {
+		++lasttoken;
+		if (lasttoken > tokens + 255)
+			return -1;
+	}
+	gds->tokenp =3D tokens;
+
+	/* Match phrases until we run out of input tokens. */
+	while (gds->tokenp < lasttoken) {
+		if (!phrase(gds))
+			return -1;
+	}
+
+	/* Use current local timezone if none was specified. */
+	if (!gds->HaveZone) {
+		gds->Timezone =3D tzone;
+		gds->DSTmode =3D DSTmaybe;
+	}
+
+	/* If a timezone was specified, use that for generating the default
+	 * time components instead of the local timezone. */
+	if (gds->HaveZone && gmt_ptr !=3D NULL) {
+		now -=3D gds->Timezone;
+		gmt_ptr =3D gmtime (&now);
+		if (gmt_ptr !=3D NULL)
+			local =3D *gmt_ptr;
+		now +=3D gds->Timezone;
+	}
+
+	if (!gds->HaveYear)
+		gds->Year =3D local.tm_year + 1900;
+	if (!gds->HaveMonth)
+		gds->Month =3D local.tm_mon + 1;
+	if (!gds->HaveDay)
+		gds->Day =3D local.tm_mday;
+	/* Note: No default for hour/min/sec; a specifier that just
+	 * gives date always refers to 00:00 on that date. */
+
+	/* If we saw more than one time, timezone, weekday, year, month,
+	 * or day, then give up. */
+	if (gds->HaveTime > 1 || gds->HaveZone > 1 || gds->HaveWeekDay > 1
+	    || gds->HaveYear > 1 || gds->HaveMonth > 1 || gds->HaveDay > 1)
+		return -1;
+
+	/* Compute an absolute time based on whatever absolute information
+	 * we collected. */
+	if (gds->HaveYear || gds->HaveMonth || gds->HaveDay
+	    || gds->HaveTime || gds->HaveWeekDay) {
+		Start =3D Convert(gds->Month, gds->Day, gds->Year,
+		    gds->Hour, gds->Minutes, gds->Seconds,
+		    gds->Timezone, gds->DSTmode);
+		if (Start < 0)
+			return -1;
+	} else {
+		Start =3D now;
+		if (!gds->HaveRel)
+			Start -=3D local.tm_hour * HOUR + local.tm_min * MINUTE
+			    + local.tm_sec;
+	}
+
+	/* Add the relative offset. */
+	Start +=3D gds->RelSeconds;
+	Start +=3D RelativeMonth(Start, gds->Timezone, gds->RelMonth);
+
+	/* Adjust for day-of-week offsets. */
+	if (gds->HaveWeekDay
+	    && !(gds->HaveYear || gds->HaveMonth || gds->HaveDay)) {
+		tod =3D RelativeDate(Start, gds->Timezone,
+		    gds->DSTmode, gds->DayOrdinal, gds->DayNumber);
+		Start +=3D tod;
+	}
+
+	/* -1 is an error indicator, so return 0 instead of -1 if
+	 * that's the actual time. */
+	return Start =3D=3D -1 ? 0 : Start;
+}
+
+
+#if	defined(TEST)
+
+/* ARGSUSED */
+int
+main(int argc, char **argv)
+{
+    time_t	d;
+
+    while (*++argv !=3D NULL) {
+	    (void)printf("Input: %s\n", *argv);
+	    d =3D get_date(*argv);
+	    if (d =3D=3D -1)
+		    (void)printf("Bad format - couldn't convert.\n");
+	    else
+		    (void)printf("Output: %s\n", ctime(&d));
+    }
+    exit(0);
+    /* NOTREACHED */
+}
+#endif	/* defined(TEST) */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_match.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/head/contrib/libarchive/libarchive/archive_match.c	Fri Aug 10 14:19:2=
5 2012 +0300
@@ -0,0 +1,1836 @@
+/*-
+ * Copyright (c) 2003-2007 Tim Kientzle
+ * Copyright (c) 2012 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 WARRANTI=
ES
+ * 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 US=
E,
+ * 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 <errno.h>
+#endif
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+
+#include "archive.h"
+#include "archive_private.h"
+#include "archive_entry.h"
+#include "archive_pathmatch.h"
+#include "archive_rb.h"
+#include "archive_string.h"
+
+struct match {
+	struct match		*next;
+	int			 matches;
+	struct archive_mstring	 pattern;
+};
+
+struct match_list {
+	struct match		*first;
+	struct match		**last;
+	int			 count;
+	int			 unmatched_count;
+	struct match		*unmatched_next;
+	int			 unmatched_eof;
+};
+
+struct match_file {
+	struct archive_rb_node	 node;
+	struct match_file	*next;
+	struct archive_mstring	 pathname;
+	int			 flag;
+	time_t			 mtime_sec;
+	long			 mtime_nsec;
+	time_t			 ctime_sec;
+	long			 ctime_nsec;
+};
+
+struct entry_list {
+	struct match_file	*first;
+	struct match_file	**last;
+	int			 count;
+};
+
+struct id_array {
+	size_t			 size;/* Allocated size */
+	size_t			 count;
+	int64_t			*ids;
+};
+
+#define PATTERN_IS_SET		1
+#define TIME_IS_SET		2
+#define ID_IS_SET		4
+
+struct archive_match {
+	struct archive		 archive;
+
+	/* exclusion/inclusion set flag. */
+	int			 setflag;
+
+	/*
+	 * Matching filename patterns.
+	 */
+	struct match_list	 exclusions;
+	struct match_list	 inclusions;
+
+	/*
+	 * Matching time stamps.
+	 */
+	time_t			 now;
+	int			 newer_mtime_filter;
+	time_t			 newer_mtime_sec;
+	long			 newer_mtime_nsec;
+	int			 newer_ctime_filter;
+	time_t			 newer_ctime_sec;
+	long			 newer_ctime_nsec;
+	int			 older_mtime_filter;
+	time_t			 older_mtime_sec;
+	long			 older_mtime_nsec;
+	int			 older_ctime_filter;
+	time_t			 older_ctime_sec;
+	long			 older_ctime_nsec;
+	/*
+	 * Matching time stamps with its filename.
+	 */
+	struct archive_rb_tree	 exclusion_tree;
+	struct entry_list 	 exclusion_entry_list;
+
+	/*
+	 * Matching file owners.
+	 */
+	struct id_array 	 inclusion_uids;
+	struct id_array 	 inclusion_gids;
+	struct match_list	 inclusion_unames;
+	struct match_list	 inclusion_gnames;
+};
+
+static int	add_pattern_from_file(struct archive_match *,
+		    struct match_list *, int, const void *, int);
+static int	add_entry(struct archive_match *, int,
+		    struct archive_entry *);
+static int	add_owner_id(struct archive_match *, struct id_array *,
+		    int64_t);
+static int	add_owner_name(struct archive_match *, struct match_list *,
+		    int, const void *);
+static int	add_pattern_mbs(struct archive_match *, struct match_list *,
+		    const char *);
+static int	add_pattern_wcs(struct archive_match *, struct match_list *,
+		    const wchar_t *);
+static int	cmp_key_mbs(const struct archive_rb_node *, const void *);
+static int	cmp_key_wcs(const struct archive_rb_node *, const void *);
+static int	cmp_node_mbs(const struct archive_rb_node *,
+		    const struct archive_rb_node *);
+static int	cmp_node_wcs(const struct archive_rb_node *,
+		    const struct archive_rb_node *);
+static void	entry_list_add(struct entry_list *, struct match_file *);
+static void	entry_list_free(struct entry_list *);
+static void	entry_list_init(struct entry_list *);
+static int	error_nomem(struct archive_match *);
+static void	match_list_add(struct match_list *, struct match *);
+static void	match_list_free(struct match_list *);
+static void	match_list_init(struct match_list *);
+static int	match_list_unmatched_inclusions_next(struct archive_match *,
+		    struct match_list *, int, const void **);
+static int	match_owner_id(struct id_array *, int64_t);
+#if !defined(_WIN32) || defined(__CYGWIN__)
+static int	match_owner_name_mbs(struct archive_match *,
+		    struct match_list *, const char *);
+#else
+static int	match_owner_name_wcs(struct archive_match *,
+		    struct match_list *, const wchar_t *);
+#endif
+static int	match_path_exclusion(struct archive_match *,
+		    struct match *, int, const void *);
+static int	match_path_inclusion(struct archive_match *,
+		    struct match *, int, const void *);
+static int	owner_excluded(struct archive_match *,
+		    struct archive_entry *);
+static int	path_excluded(struct archive_match *, int, const void *);
+static int	set_timefilter(struct archive_match *, int, time_t, long,
+		    time_t, long);
+static int	set_timefilter_pathname_mbs(struct archive_match *,
+		    int, const char *);
+static int	set_timefilter_pathname_wcs(struct archive_match *,
+		    int, const wchar_t *);
+static int	set_timefilter_date(struct archive_match *, int, const char *);
+static int	set_timefilter_date_w(struct archive_match *, int,
+		    const wchar_t *);
+static int	time_excluded(struct archive_match *,
+		    struct archive_entry *);
+static int	validate_time_flag(struct archive *, int, const char *);
+
+time_t __archive_get_date(time_t now, const char *);
+#define get_date __archive_get_date
+
+static const struct archive_rb_tree_ops rb_ops_mbs =3D {
+	cmp_node_mbs, cmp_key_mbs
+};
+
+static const struct archive_rb_tree_ops rb_ops_wcs =3D {
+	cmp_node_wcs, cmp_key_wcs
+};
+
+/*
+ * The matching logic here needs to be re-thought.  I started out to
+ * try to mimic gtar's matching logic, but it's not entirely
+ * consistent.  In particular 'tar -t' and 'tar -x' interpret patterns
+ * on the command line as anchored, but --exclude doesn't.
+ */
+
+static int
+error_nomem(struct archive_match *a)
+{
+	archive_set_error(&(a->archive), ENOMEM, "No memory");
+	a->archive.state =3D ARCHIVE_STATE_FATAL;
+	return (ARCHIVE_FATAL);
+}
+
+/*
+ * Create an ARCHIVE_MATCH object.
+ */
+struct archive *
+archive_match_new(void)
+{
+	struct archive_match *a;
+
+	a =3D (struct archive_match *)calloc(1, sizeof(*a));
+	if (a =3D=3D NULL)
+		return (NULL);
+	a->archive.magic =3D ARCHIVE_MATCH_MAGIC;
+	a->archive.state =3D ARCHIVE_STATE_NEW;
+	match_list_init(&(a->inclusions));
+	match_list_init(&(a->exclusions));
+	__archive_rb_tree_init(&(a->exclusion_tree), &rb_ops_mbs);
+	entry_list_init(&(a->exclusion_entry_list));
+	match_list_init(&(a->inclusion_unames));
+	match_list_init(&(a->inclusion_gnames));
+	time(&a->now);
+	return (&(a->archive));
+}
+
+/*
+ * Free an ARCHIVE_MATCH object.
+ */
+int
+archive_match_free(struct archive *_a)
+{
+	struct archive_match *a;
+
+	if (_a =3D=3D NULL)
+		return (ARCHIVE_OK);
+	archive_check_magic(_a, ARCHIVE_MATCH_MAGIC,
+	    ARCHIVE_STATE_ANY | ARCHIVE_STATE_FATAL, "archive_match_free");
+	a =3D (struct archive_match *)_a;
+	match_list_free(&(a->inclusions));
+	match_list_free(&(a->exclusions));
+	entry_list_free(&(a->exclusion_entry_list));
+	free(a->inclusion_uids.ids);
+	free(a->inclusion_gids.ids);
+	match_list_free(&(a->inclusion_unames));
+	match_list_free(&(a->inclusion_gnames));
+	free(a);
+	return (ARCHIVE_OK);
+}
+
+/*
+ * Convenience function to perform all exclusion tests.
+ *
+ * Returns 1 if archive entry is excluded.
+ * Returns 0 if archive entry is not excluded.
+ * Returns <0 if something error happened.
+ */
+int
+archive_match_excluded(struct archive *_a, struct archive_entry *entry)
+{
+	struct archive_match *a;
+	int r;
+
+	archive_check_magic(_a, ARCHIVE_MATCH_MAGIC,
+	    ARCHIVE_STATE_NEW, "archive_match_excluded_ae");
+
+	a =3D (struct archive_match *)_a;
+	if (entry =3D=3D NULL) {
+		archive_set_error(&(a->archive), EINVAL, "entry is NULL");
+		return (ARCHIVE_FAILED);
+	}
+
+	r =3D 0;
+	if (a->setflag & PATTERN_IS_SET) {
+#if defined(_WIN32) && !defined(__CYGWIN__)
+		r =3D path_excluded(a, 0, archive_entry_pathname_w(entry));
+#else
+		r =3D path_excluded(a, 1, archive_entry_pathname(entry));
+#endif
+		if (r !=3D 0)
+			return (r);
+	}
+
+	if (a->setflag & TIME_IS_SET) {
+		r =3D time_excluded(a, entry);
+		if (r !=3D 0)
+			return (r);
+	}
+
+	if (a->setflag & ID_IS_SET)
+		r =3D owner_excluded(a, entry);
+	return (r);
+}
+
+/*
+ * Utility functions to manage exclusion/inclusion patterns
+ */
+
+int
+archive_match_exclude_pattern(struct archive *_a, const char *pattern)
+{
+	struct archive_match *a;
+	int r;
+
+	archive_check_magic(_a, ARCHIVE_MATCH_MAGIC,
+	    ARCHIVE_STATE_NEW, "archive_match_exclude_pattern");
+	a =3D (struct archive_match *)_a;
+
+	if (pattern =3D=3D NULL || *pattern =3D=3D '\0') {
+		archive_set_error(&(a->archive), EINVAL, "pattern is empty");
+		return (ARCHIVE_FAILED);
+	}
+	if ((r =3D add_pattern_mbs(a, &(a->exclusions), pattern)) !=3D ARCHIVE_OK)
+		return (r);
+	return (ARCHIVE_OK);
+}
+
+int
+archive_match_exclude_pattern_w(struct archive *_a, const wchar_t *pattern)
+{
+	struct archive_match *a;
+	int r;
+
+	archive_check_magic(_a, ARCHIVE_MATCH_MAGIC,
+	    ARCHIVE_STATE_NEW, "archive_match_exclude_pattern_w");
+	a =3D (struct archive_match *)_a;
+
+	if (pattern =3D=3D NULL || *pattern =3D=3D L'\0') {
+		archive_set_error(&(a->archive), EINVAL, "pattern is empty");
+		return (ARCHIVE_FAILED);
+	}
+	if ((r =3D add_pattern_wcs(a, &(a->exclusions), pattern)) !=3D ARCHIVE_OK)
+		return (r);
+	return (ARCHIVE_OK);
+}
+
+int
+archive_match_exclude_pattern_from_file(struct archive *_a,
+    const char *pathname, int nullSeparator)
+{
+	struct archive_match *a;
+
+	archive_check_magic(_a, ARCHIVE_MATCH_MAGIC,
+	    ARCHIVE_STATE_NEW, "archive_match_exclude_pattern_from_file");
+	a =3D (struct archive_match *)_a;
+
+	return add_pattern_from_file(a, &(a->exclusions), 1, pathname,
+		nullSeparator);
+}
+
+int
+archive_match_exclude_pattern_from_file_w(struct archive *_a,
+    const wchar_t *pathname, int nullSeparator)
+{
+	struct archive_match *a;
+
+	archive_check_magic(_a, ARCHIVE_MATCH_MAGIC,
+	    ARCHIVE_STATE_NEW, "archive_match_exclude_pattern_from_file_w");
+	a =3D (struct archive_match *)_a;
+
+	return add_pattern_from_file(a, &(a->exclusions), 0, pathname,
+		nullSeparator);
+}
+
+int
+archive_match_include_pattern(struct archive *_a, const char *pattern)
+{
+	struct archive_match *a;
+	int r;
+
+	archive_check_magic(_a, ARCHIVE_MATCH_MAGIC,
+	    ARCHIVE_STATE_NEW, "archive_match_include_pattern");
+	a =3D (struct archive_match *)_a;
+
+	if (pattern =3D=3D NULL || *pattern =3D=3D '\0') {
+		archive_set_error(&(a->archive), EINVAL, "pattern is empty");
+		return (ARCHIVE_FAILED);
+	}
+	if ((r =3D add_pattern_mbs(a, &(a->inclusions), pattern)) !=3D ARCHIVE_OK)
+		return (r);
+	return (ARCHIVE_OK);
+}
+
+int
+archive_match_include_pattern_w(struct archive *_a, const wchar_t *pattern)
+{
+	struct archive_match *a;
+	int r;
+
+	archive_check_magic(_a, ARCHIVE_MATCH_MAGIC,
+	    ARCHIVE_STATE_NEW, "archive_match_include_pattern_w");
+	a =3D (struct archive_match *)_a;
+
+	if (pattern =3D=3D NULL || *pattern =3D=3D L'\0') {
+		archive_set_error(&(a->archive), EINVAL, "pattern is empty");
+		return (ARCHIVE_FAILED);
+	}
+	if ((r =3D add_pattern_wcs(a, &(a->inclusions), pattern)) !=3D ARCHIVE_OK)
+		return (r);
+	return (ARCHIVE_OK);
+}
+
+int
+archive_match_include_pattern_from_file(struct archive *_a,
+    const char *pathname, int nullSeparator)
+{
+	struct archive_match *a;
+
+	archive_check_magic(_a, ARCHIVE_MATCH_MAGIC,
+	    ARCHIVE_STATE_NEW, "archive_match_include_pattern_from_file");
+	a =3D (struct archive_match *)_a;
+
+	return add_pattern_from_file(a, &(a->inclusions), 1, pathname,
+		nullSeparator);
+}
+
+int
+archive_match_include_pattern_from_file_w(struct archive *_a,
+    const wchar_t *pathname, int nullSeparator)
+{
+	struct archive_match *a;
+
+	archive_check_magic(_a, ARCHIVE_MATCH_MAGIC,
+	    ARCHIVE_STATE_NEW, "archive_match_include_pattern_from_file_w");
+	a =3D (struct archive_match *)_a;
+
+	return add_pattern_from_file(a, &(a->inclusions), 0, pathname,
+		nullSeparator);
+}
+
+/*
+ * Test functions for pathname patterns.
+ *
+ * Returns 1 if archive entry is excluded.
+ * Returns 0 if archive entry is not excluded.
+ * Returns <0 if something error happened.
+ */
+int
+archive_match_path_excluded(struct archive *_a,
+    struct archive_entry *entry)
+{
+	struct archive_match *a;
+
+	archive_check_magic(_a, ARCHIVE_MATCH_MAGIC,
+	    ARCHIVE_STATE_NEW, "archive_match_path_excluded");
+
+	a =3D (struct archive_match *)_a;
+	if (entry =3D=3D NULL) {
+		archive_set_error(&(a->archive), EINVAL, "entry is NULL");
+		return (ARCHIVE_FAILED);
+	}
+
+	/* If we don't have exclusion/inclusion pattern set at all,
+	 * the entry is always not excluded. */
+	if ((a->setflag & PATTERN_IS_SET) =3D=3D 0)
+		return (0);
+#if defined(_WIN32) && !defined(__CYGWIN__)
+	return (path_excluded(a, 0, archive_entry_pathname_w(entry)));
+#else
+	return (path_excluded(a, 1, archive_entry_pathname(entry)));
+#endif
+}
+
+/*
+ * Utilty functions to get statistic information for inclusion patterns.
+ */
+int
+archive_match_path_unmatched_inclusions(struct archive *_a)
+{
+	struct archive_match *a;
+
+	archive_check_magic(_a, ARCHIVE_MATCH_MAGIC,
+	    ARCHIVE_STATE_NEW, "archive_match_unmatched_inclusions");
+	a =3D (struct archive_match *)_a;
+
+	return (a->inclusions.unmatched_count);
+}
+
+int
+archive_match_path_unmatched_inclusions_next(struct archive *_a,
+    const char **_p)
+{
+	struct archive_match *a;
+	const void *v;
+	int r;
+
+	archive_check_magic(_a, ARCHIVE_MATCH_MAGIC,
+	    ARCHIVE_STATE_NEW, "archive_match_unmatched_inclusions_next");
+	a =3D (struct archive_match *)_a;
+
+	r =3D match_list_unmatched_inclusions_next(a, &(a->inclusions), 1, &v);
+	*_p =3D (const char *)v;
+	return (r);
+}
+
+int
+archive_match_path_unmatched_inclusions_next_w(struct archive *_a,
+    const wchar_t **_p)
+{
+	struct archive_match *a;
+	const void *v;
+	int r;
+
+	archive_check_magic(_a, ARCHIVE_MATCH_MAGIC,
+	    ARCHIVE_STATE_NEW, "archive_match_unmatched_inclusions_next_w");
+	a =3D (struct archive_match *)_a;
+
+	r =3D match_list_unmatched_inclusions_next(a, &(a->inclusions), 0, &v);
+	*_p =3D (const wchar_t *)v;
+	return (r);
+}
+
+/*
+ * Add inclusion/exclusion patterns.
+ */
+static int
+add_pattern_mbs(struct archive_match *a, struct match_list *list,
+    const char *pattern)
+{
+	struct match *match;
+	size_t len;
+
+	match =3D calloc(1, sizeof(*match));
+	if (match =3D=3D NULL)
+		return (error_nomem(a));
+	/* Both "foo/" and "foo" should match "foo/bar". */
+	len =3D strlen(pattern);
+	if (len && pattern[len - 1] =3D=3D '/')
+		--len;
+	archive_mstring_copy_mbs_len(&(match->pattern), pattern, len);
+	match_list_add(list, match);
+	a->setflag |=3D PATTERN_IS_SET;
+	return (ARCHIVE_OK);
+}
+
+static int
+add_pattern_wcs(struct archive_match *a, struct match_list *list,
+    const wchar_t *pattern)
+{
+	struct match *match;
+	size_t len;
+
+	match =3D calloc(1, sizeof(*match));
+	if (match =3D=3D NULL)
+		return (error_nomem(a));
+	/* Both "foo/" and "foo" should match "foo/bar". */
+	len =3D wcslen(pattern);
+	if (len && pattern[len - 1] =3D=3D L'/')
+		--len;
+	archive_mstring_copy_wcs_len(&(match->pattern), pattern, len);
+	match_list_add(list, match);
+	a->setflag |=3D PATTERN_IS_SET;
+	return (ARCHIVE_OK);
+}
+
+static int
+add_pattern_from_file(struct archive_match *a, struct match_list *mlist,
+    int mbs, const void *pathname, int nullSeparator)
+{
+	struct archive *ar;
+	struct archive_entry *ae;
+	struct archive_string as;
+	const void *buff;
+	size_t size;
+	int64_t offset;
+	int r;
+
+	ar =3D archive_read_new();=20
+	if (ar =3D=3D NULL) {
+		archive_set_error(&(a->archive), ENOMEM, "No memory");
+		return (ARCHIVE_FATAL);
+	}
+	r =3D archive_read_support_format_raw(ar);
+	if (r !=3D ARCHIVE_OK) {
+		archive_copy_error(&(a->archive), ar);
+		archive_read_free(ar);
+		return (r);
+	}
+	if (mbs)
+		r =3D archive_read_open_filename(ar, pathname, 512*20);
+	else
+		r =3D archive_read_open_filename_w(ar, pathname, 512*20);
+	if (r !=3D ARCHIVE_OK) {
+		archive_copy_error(&(a->archive), ar);
+		archive_read_free(ar);
+		return (r);
+	}
+	r =3D archive_read_next_header(ar, &ae);
+	if (r !=3D ARCHIVE_OK) {
+		archive_copy_error(&(a->archive), ar);
+		archive_read_free(ar);
+		return (r);
+	}
+
+	archive_string_init(&as);
+
+	while ((r =3D archive_read_data_block(ar, &buff, &size, &offset))
+	    =3D=3D ARCHIVE_OK) {
+		const char *b =3D (const char *)buff;
+
+		while (size) {
+			const char *s =3D (const char *)b;
+			size_t length =3D 0;
+			int found_separator =3D 0;
+
+			while (length < size) {
+				if (nullSeparator) {
+					if (*b =3D=3D '\0') {
+						found_separator =3D 1;
+						break;
+					}
+				} else {
+			            	if (*b =3D=3D 0x0d || *b =3D=3D 0x0a) {
+						found_separator =3D 1;
+						break;
+					}
+				}
+				b++;
+				length++;
+			}
+			if (!found_separator) {
+				archive_strncat(&as, s, length);
+				/* Read next data block. */
+				break;
+			}
+			b++;
+			size -=3D length + 1;
+			archive_strncat(&as, s, length);
+
+			/* If the line is not empty, add the pattern. */
+			if (archive_strlen(&as) > 0) {
+				/* Add pattern. */
+				r =3D add_pattern_mbs(a, mlist, as.s);
+				if (r !=3D ARCHIVE_OK) {
+					archive_read_free(ar);
+					archive_string_free(&as);
+					return (r);
+				}
+				archive_string_empty(&as);
+			}
+		}
+	}
+
+	/* If something error happend, report it immediately. */=20
+	if (r < ARCHIVE_OK) {
+		archive_copy_error(&(a->archive), ar);
+		archive_read_free(ar);
+		archive_string_free(&as);
+		return (r);
+	}
+
+	/* If the line is not empty, add the pattern. */
+	if (r =3D=3D ARCHIVE_EOF && archive_strlen(&as) > 0) {
+		/* Add pattern. */
+		r =3D add_pattern_mbs(a, mlist, as.s);
+		if (r !=3D ARCHIVE_OK) {
+			archive_read_free(ar);
+			archive_string_free(&as);
+			return (r);
+		}
+	}
+	archive_read_free(ar);
+	archive_string_free(&as);
+	return (ARCHIVE_OK);
+}
+
+/*
+ * Test if pathname is excluded by inclusion/exclusion patterns.
+ */
+static int
+path_excluded(struct archive_match *a, int mbs, const void *pathname)
+{
+	struct match *match;
+	struct match *matched;
+	int r;
+
+	if (a =3D=3D NULL)
+		return (0);
+
+	/* Mark off any unmatched inclusions. */
+	/* In particular, if a filename does appear in the archive and
+	 * is explicitly included and excluded, then we don't report
+	 * it as missing even though we don't extract it.
+	 */
+	matched =3D NULL;
+	for (match =3D a->inclusions.first; match !=3D NULL;
+	    match =3D match->next){
+		if (match->matches =3D=3D 0 &&
+		    (r =3D match_path_inclusion(a, match, mbs, pathname)) !=3D 0) {
+			if (r < 0)
+				return (r);
+			a->inclusions.unmatched_count--;
+			match->matches++;
+			matched =3D match;
+		}
+	}
+
+	/* Exclusions take priority */
+	for (match =3D a->exclusions.first; match !=3D NULL;
+	    match =3D match->next){
+		r =3D match_path_exclusion(a, match, mbs, pathname);
+		if (r)
+			return (r);
+	}
+
+	/* It's not excluded and we found an inclusion above, so it's
+	 * included. */
+	if (matched !=3D NULL)
+		return (0);
+
+
+	/* We didn't find an unmatched inclusion, check the remaining ones. */
+	for (match =3D a->inclusions.first; match !=3D NULL;
+	    match =3D match->next){
+		/* We looked at previously-unmatched inclusions already. */
+		if (match->matches > 0 &&
+		    (r =3D match_path_inclusion(a, match, mbs, pathname)) !=3D 0) {
+			if (r < 0)
+				return (r);
+			match->matches++;
+			return (0);
+		}
+	}
+
+	/* If there were inclusions, default is to exclude. */
+	if (a->inclusions.first !=3D NULL)
+	    return (1);
+
+	/* No explicit inclusions, default is to match. */
+	return (0);
+}
+
+/*
+ * This is a little odd, but it matches the default behavior of
+ * gtar.  In particular, 'a*b' will match 'foo/a1111/222b/bar'
+ *
+ */
+static int
+match_path_exclusion(struct archive_match *a, struct match *m,
+    int mbs, const void *pn)
+{
+	int flag =3D PATHMATCH_NO_ANCHOR_START | PATHMATCH_NO_ANCHOR_END;
+	int r;
+
+	if (mbs) {
+		const char *p;
+		r =3D archive_mstring_get_mbs(&(a->archive), &(m->pattern), &p);
+		if (r =3D=3D 0)
+			return (archive_pathmatch(p, (const char *)pn, flag));
+	} else {
+		const wchar_t *p;
+		r =3D archive_mstring_get_wcs(&(a->archive), &(m->pattern), &p);
+		if (r =3D=3D 0)
+			return (archive_pathmatch_w(p, (const wchar_t *)pn,
+				flag));
+	}
+	if (errno =3D=3D ENOMEM)
+		return (error_nomem(a));
+	return (0);
+}
+
+/*
+ * Again, mimic gtar:  inclusions are always anchored (have to match
+ * the beginning of the path) even though exclusions are not anchored.
+ */
+static int
+match_path_inclusion(struct archive_match *a, struct match *m,
+    int mbs, const void *pn)
+{
+	int flag =3D PATHMATCH_NO_ANCHOR_END;
+	int r;
+
+	if (mbs) {
+		const char *p;
+		r =3D archive_mstring_get_mbs(&(a->archive), &(m->pattern), &p);
+		if (r =3D=3D 0)
+			return (archive_pathmatch(p, (const char *)pn, flag));
+	} else {
+		const wchar_t *p;
+		r =3D archive_mstring_get_wcs(&(a->archive), &(m->pattern), &p);
+		if (r =3D=3D 0)
+			return (archive_pathmatch_w(p, (const wchar_t *)pn,
+				flag));
+	}
+	if (errno =3D=3D ENOMEM)
+		return (error_nomem(a));
+	return (0);
+}
+
+static void
+match_list_init(struct match_list *list)
+{
+	list->first =3D NULL;
+	list->last =3D &(list->first);
+	list->count =3D 0;
+}
+
+static void
+match_list_free(struct match_list *list)
+{
+	struct match *p, *q;
+
+	for (p =3D list->first; p !=3D NULL; ) {
+		q =3D p;
+		p =3D p->next;
+		archive_mstring_clean(&(q->pattern));
+		free(q);
+	}
+}
+
+static void
+match_list_add(struct match_list *list, struct match *m)
+{
+	*list->last =3D m;
+	list->last =3D &(m->next);
+	list->count++;
+	list->unmatched_count++;
+}
+
+static int
+match_list_unmatched_inclusions_next(struct archive_match *a,
+    struct match_list *list, int mbs, const void **vp)
+{
+	struct match *m;
+
+	*vp =3D NULL;
+	if (list->unmatched_eof) {
+		list->unmatched_eof =3D 0;
+		return (ARCHIVE_EOF);
+	}
+	if (list->unmatched_next =3D=3D NULL) {
+		if (list->unmatched_count =3D=3D 0)
+			return (ARCHIVE_EOF);
+		list->unmatched_next =3D list->first;
+	}
+
+	for (m =3D list->unmatched_next; m !=3D NULL; m =3D m->next) {
+		int r;
+
+		if (m->matches)
+			continue;
+		if (mbs) {
+			const char *p;
+			r =3D archive_mstring_get_mbs(&(a->archive),
+				&(m->pattern), &p);
+			if (r < 0 && errno =3D=3D ENOMEM)
+				return (error_nomem(a));
+			if (p =3D=3D NULL)
+				p =3D "";
+			*vp =3D p;
+		} else {
+			const wchar_t *p;
+			r =3D archive_mstring_get_wcs(&(a->archive),
+				&(m->pattern), &p);
+			if (r < 0 && errno =3D=3D ENOMEM)
+				return (error_nomem(a));
+			if (p =3D=3D NULL)
+				p =3D L"";
+			*vp =3D p;
+		}
+		list->unmatched_next =3D m->next;
+		if (list->unmatched_next =3D=3D NULL)
+			/* To return EOF next time. */
+			list->unmatched_eof =3D 1;
+		return (ARCHIVE_OK);
+	}
+	list->unmatched_next =3D NULL;
+	return (ARCHIVE_EOF);
+}
+
+/*
+ * Utility functions to manage inclusion timestamps.
+ */
+int
+archive_match_include_time(struct archive *_a, int flag, time_t sec,
+    long nsec)
+{
+	int r;
+
+	r =3D validate_time_flag(_a, flag, "archive_match_include_time");
+	if (r !=3D ARCHIVE_OK)
+		return (r);
+	return set_timefilter((struct archive_match *)_a, flag,
+			sec, nsec, sec, nsec);
+}
+
+int
+archive_match_include_date(struct archive *_a, int flag,
+    const char *datestr)
+{
+	int r;
+
+	r =3D validate_time_flag(_a, flag, "archive_match_include_date");
+	if (r !=3D ARCHIVE_OK)
+		return (r);
+	return set_timefilter_date((struct archive_match *)_a, flag, datestr);
+}
+
+int
+archive_match_include_date_w(struct archive *_a, int flag,
+    const wchar_t *datestr)
+{
+	int r;
+
+	r =3D validate_time_flag(_a, flag, "archive_match_include_date_w");
+	if (r !=3D ARCHIVE_OK)
+		return (r);
+
+	return set_timefilter_date_w((struct archive_match *)_a, flag, datestr);
+}
+
+int
+archive_match_include_file_time(struct archive *_a, int flag,
+    const char *pathname)
+{
+	int r;
+
+	r =3D validate_time_flag(_a, flag, "archive_match_include_file_time");
+	if (r !=3D ARCHIVE_OK)
+		return (r);
+	return set_timefilter_pathname_mbs((struct archive_match *)_a,
+			flag, pathname);
+}
+
+int
+archive_match_include_file_time_w(struct archive *_a, int flag,
+    const wchar_t *pathname)
+{
+	int r;
+
+	r =3D validate_time_flag(_a, flag, "archive_match_include_file_time_w");
+	if (r !=3D ARCHIVE_OK)
+		return (r);
+	return set_timefilter_pathname_wcs((struct archive_match *)_a,
+			flag, pathname);
+}
+
+int
+archive_match_exclude_entry(struct archive *_a, int flag,
+    struct archive_entry *entry)
+{
+	struct archive_match *a;
+	int r;
+
+	archive_check_magic(_a, ARCHIVE_MATCH_MAGIC,
+	    ARCHIVE_STATE_NEW, "archive_match_time_include_entry");
+	a =3D (struct archive_match *)_a;
+
+	if (entry =3D=3D NULL) {
+		archive_set_error(&(a->archive), EINVAL, "entry is NULL");
+		return (ARCHIVE_FAILED);
+	}
+	r =3D validate_time_flag(_a, flag, "archive_match_exclude_entry");
+	if (r !=3D ARCHIVE_OK)
+		return (r);
+	return (add_entry(a, flag, entry));
+}
+
+/*
+ * Test function for time stamps.
+ *
+ * Returns 1 if archive entry is excluded.
+ * Returns 0 if archive entry is not excluded.
+ * Returns <0 if something error happened.
+ */
+int
+archive_match_time_excluded(struct archive *_a,
+    struct archive_entry *entry)
+{
+	struct archive_match *a;
+
+	archive_check_magic(_a, ARCHIVE_MATCH_MAGIC,
+	    ARCHIVE_STATE_NEW, "archive_match_time_excluded_ae");
+
+	a =3D (struct archive_match *)_a;
+	if (entry =3D=3D NULL) {
+		archive_set_error(&(a->archive), EINVAL, "entry is NULL");
+		return (ARCHIVE_FAILED);
+	}
+
+	/* If we don't have inclusion time set at all, the entry is always
+	 * not excluded. */
+	if ((a->setflag & TIME_IS_SET) =3D=3D 0)
+		return (0);
+	return (time_excluded(a, entry));
+}
+
+static int
+validate_time_flag(struct archive *_a, int flag, const char *_fn)
+{
+	archive_check_magic(_a, ARCHIVE_MATCH_MAGIC,
+	    ARCHIVE_STATE_NEW, _fn);
+
+	/* Check a type of time. */
+	if (flag &
+	   ((~(ARCHIVE_MATCH_MTIME | ARCHIVE_MATCH_CTIME)) & 0xff00)) {
+		archive_set_error(_a, EINVAL, "Invalid time flag");
+		return (ARCHIVE_FAILED);
+	}
+	if ((flag & (ARCHIVE_MATCH_MTIME | ARCHIVE_MATCH_CTIME)) =3D=3D 0) {
+		archive_set_error(_a, EINVAL, "No time flag");
+		return (ARCHIVE_FAILED);
+	}
+
+	/* Check a type of comparison. */
+	if (flag &
+	   ((~(ARCHIVE_MATCH_NEWER | ARCHIVE_MATCH_OLDER
+			| ARCHIVE_MATCH_EQUAL)) & 0x00ff)) {
+		archive_set_error(_a, EINVAL, "Invalid comparison flag");
+		return (ARCHIVE_FAILED);
+	}
+	if ((flag & (ARCHIVE_MATCH_NEWER | ARCHIVE_MATCH_OLDER
+	    | ARCHIVE_MATCH_EQUAL)) =3D=3D 0) {
+		archive_set_error(_a, EINVAL, "No comparison flag");
+		return (ARCHIVE_FAILED);
+	}
+
+	return (ARCHIVE_OK);
+}
+
+#define JUST_EQUAL(t) (((t) &  (ARCHIVE_MATCH_EQUAL |\
+	ARCHIVE_MATCH_NEWER | ARCHIVE_MATCH_OLDER)) =3D=3D ARCHIVE_MATCH_EQUAL)
+static int
+set_timefilter(struct archive_match *a, int timetype,
+    time_t mtime_sec, long mtime_nsec, time_t ctime_sec, long ctime_nsec)
+{
+	if (timetype & ARCHIVE_MATCH_MTIME) {
+		if ((timetype & ARCHIVE_MATCH_NEWER) || JUST_EQUAL(timetype)) {
+			a->newer_mtime_filter =3D timetype;
+			a->newer_mtime_sec =3D mtime_sec;
+			a->newer_mtime_nsec =3D mtime_nsec;
+			a->setflag |=3D TIME_IS_SET;
+		}
+		if ((timetype & ARCHIVE_MATCH_OLDER) || JUST_EQUAL(timetype)) {
+			a->older_mtime_filter =3D timetype;
+			a->older_mtime_sec =3D mtime_sec;
+			a->older_mtime_nsec =3D mtime_nsec;
+			a->setflag |=3D TIME_IS_SET;
+		}
+	}
+	if (timetype & ARCHIVE_MATCH_CTIME) {
+		if ((timetype & ARCHIVE_MATCH_NEWER) || JUST_EQUAL(timetype)) {
+			a->newer_ctime_filter =3D timetype;
+			a->newer_ctime_sec =3D ctime_sec;
+			a->newer_ctime_nsec =3D ctime_nsec;
+			a->setflag |=3D TIME_IS_SET;
+		}
+		if ((timetype & ARCHIVE_MATCH_OLDER) || JUST_EQUAL(timetype)) {
+			a->older_ctime_filter =3D timetype;
+			a->older_ctime_sec =3D ctime_sec;
+			a->older_ctime_nsec =3D ctime_nsec;
+			a->setflag |=3D TIME_IS_SET;
+		}
+	}
+	return (ARCHIVE_OK);
+}
+
+static int
+set_timefilter_date(struct archive_match *a, int timetype, const char *dat=
estr)
+{
+	time_t t;
+
+	if (datestr =3D=3D NULL || *datestr =3D=3D '\0') {
+		archive_set_error(&(a->archive), EINVAL, "date is empty");
+		return (ARCHIVE_FAILED);
+	}
+	t =3D get_date(a->now, datestr);
+	if (t =3D=3D (time_t)-1) {
+		archive_set_error(&(a->archive), EINVAL, "invalid date string");
+		return (ARCHIVE_FAILED);
+	}
+	return set_timefilter(a, timetype, t, 0, t, 0);
+}
+
+static int
+set_timefilter_date_w(struct archive_match *a, int timetype,
+    const wchar_t *datestr)
+{
+	struct archive_string as;
+	time_t t;
+
+	if (datestr =3D=3D NULL || *datestr =3D=3D L'\0') {
+		archive_set_error(&(a->archive), EINVAL, "date is empty");
+		return (ARCHIVE_FAILED);
+	}
+
+	archive_string_init(&as);
+	if (archive_string_append_from_wcs(&as, datestr, wcslen(datestr)) < 0) {
+		archive_string_free(&as);
+		if (errno =3D=3D ENOMEM)
+			return (error_nomem(a));
+		archive_set_error(&(a->archive), -1,
+		    "Failed to convert WCS to MBS");
+		return (ARCHIVE_FAILED);
+	}
+	t =3D get_date(a->now, as.s);
+	archive_string_free(&as);
+	if (t =3D=3D (time_t)-1) {
+		archive_set_error(&(a->archive), EINVAL, "invalid date string");
+		return (ARCHIVE_FAILED);
+	}
+	return set_timefilter(a, timetype, t, 0, t, 0);
+}
+
+#if defined(_WIN32) && !defined(__CYGWIN__)
+#define EPOC_TIME ARCHIVE_LITERAL_ULL(116444736000000000)
+static int
+set_timefilter_find_data(struct archive_match *a, int timetype,
+    DWORD ftLastWriteTime_dwHighDateTime, DWORD ftLastWriteTime_dwLowDateT=
ime,
+    DWORD ftCreationTime_dwHighDateTime, DWORD ftCreationTime_dwLowDateTim=
e)
+{
+	ULARGE_INTEGER utc;
+	time_t ctime_sec, mtime_sec;
+	long ctime_ns, mtime_ns;
+
+	utc.HighPart =3D ftCreationTime_dwHighDateTime;
+	utc.LowPart =3D ftCreationTime_dwLowDateTime;
+	if (utc.QuadPart >=3D EPOC_TIME) {
+		utc.QuadPart -=3D EPOC_TIME;
+		ctime_sec =3D (time_t)(utc.QuadPart / 10000000);
+		ctime_ns =3D (long)(utc.QuadPart % 10000000) * 100;
+	} else {
+		ctime_sec =3D 0;
+		ctime_ns =3D 0;
+	}
+	utc.HighPart =3D ftLastWriteTime_dwHighDateTime;
+	utc.LowPart =3D ftLastWriteTime_dwLowDateTime;
+	if (utc.QuadPart >=3D EPOC_TIME) {
+		utc.QuadPart -=3D EPOC_TIME;
+		mtime_sec =3D (time_t)(utc.QuadPart / 10000000);
+		mtime_ns =3D (long)(utc.QuadPart % 10000000) * 100;
+	} else {
+		mtime_sec =3D 0;
+		mtime_ns =3D 0;
+	}
+	return set_timefilter(a, timetype,
+			mtime_sec, mtime_ns, ctime_sec, ctime_ns);
+}
+
+static int
+set_timefilter_pathname_mbs(struct archive_match *a, int timetype,
+    const char *path)
+{
+	/* NOTE: stat() on Windows cannot handle nano seconds. */
+	HANDLE h;
+	WIN32_FIND_DATA d;
+
+	if (path =3D=3D NULL || *path =3D=3D '\0') {
+		archive_set_error(&(a->archive), EINVAL, "pathname is empty");
+		return (ARCHIVE_FAILED);
+	}
+	h =3D FindFirstFileA(path, &d);
+	if (h =3D=3D INVALID_HANDLE_VALUE) {
+		la_dosmaperr(GetLastError());
+		archive_set_error(&(a->archive), errno,
+		    "Failed to FindFirstFileA");
+		return (ARCHIVE_FAILED);
+	}
+	FindClose(h);
+	return set_timefilter_find_data(a, timetype,
+	    d.ftLastWriteTime.dwHighDateTime, d.ftLastWriteTime.dwLowDateTime,
+	    d.ftCreationTime.dwHighDateTime, d.ftCreationTime.dwLowDateTime);
+}
+
+static int
+set_timefilter_pathname_wcs(struct archive_match *a, int timetype,
+    const wchar_t *path)
+{
+	HANDLE h;
+	WIN32_FIND_DATAW d;
+
+	if (path =3D=3D NULL || *path =3D=3D L'\0') {
+		archive_set_error(&(a->archive), EINVAL, "pathname is empty");
+		return (ARCHIVE_FAILED);
+	}
+	h =3D FindFirstFileW(path, &d);
+	if (h =3D=3D INVALID_HANDLE_VALUE) {
+		la_dosmaperr(GetLastError());
+		archive_set_error(&(a->archive), errno,
+		    "Failed to FindFirstFile");
+		return (ARCHIVE_FAILED);
+	}
+	FindClose(h);
+	return set_timefilter_find_data(a, timetype,
+	    d.ftLastWriteTime.dwHighDateTime, d.ftLastWriteTime.dwLowDateTime,
+	    d.ftCreationTime.dwHighDateTime, d.ftCreationTime.dwLowDateTime);
+}
+
+#else /* _WIN32 && !__CYGWIN__ */
+
+static int
+set_timefilter_stat(struct archive_match *a, int timetype, struct stat *st)
+{
+	struct archive_entry *ae;
+	time_t ctime_sec, mtime_sec;
+	long ctime_ns, mtime_ns;
+
+	ae =3D archive_entry_new();
+	if (ae =3D=3D NULL)
+		return (error_nomem(a));
+	archive_entry_copy_stat(ae, st);
+	ctime_sec =3D archive_entry_ctime(ae);
+	ctime_ns =3D archive_entry_ctime_nsec(ae);
+	mtime_sec =3D archive_entry_mtime(ae);
+	mtime_ns =3D archive_entry_mtime_nsec(ae);
+	archive_entry_free(ae);
+	return set_timefilter(a, timetype, mtime_sec, mtime_ns,
+			ctime_sec, ctime_ns);
+}
+
+static int
+set_timefilter_pathname_mbs(struct archive_match *a, int timetype,
+    const char *path)
+{
+	struct stat st;
+
+	if (path =3D=3D NULL || *path =3D=3D '\0') {
+		archive_set_error(&(a->archive), EINVAL, "pathname is empty");
+		return (ARCHIVE_FAILED);
+	}
+	if (stat(path, &st) !=3D 0) {
+		archive_set_error(&(a->archive), errno, "Failed to stat()");
+		return (ARCHIVE_FAILED);
+	}
+	return (set_timefilter_stat(a, timetype, &st));
+}
+
+static int
+set_timefilter_pathname_wcs(struct archive_match *a, int timetype,
+    const wchar_t *path)
+{
+	struct archive_string as;
+	int r;
+
+	if (path =3D=3D NULL || *path =3D=3D L'\0') {
+		archive_set_error(&(a->archive), EINVAL, "pathname is empty");
+		return (ARCHIVE_FAILED);
+	}
+
+	/* Convert WCS filename to MBS filename. */
+	archive_string_init(&as);
+	if (archive_string_append_from_wcs(&as, path, wcslen(path)) < 0) {
+		archive_string_free(&as);
+		if (errno =3D=3D ENOMEM)
+			return (error_nomem(a));
+		archive_set_error(&(a->archive), -1,
+		    "Failed to convert WCS to MBS");
+		return (ARCHIVE_FAILED);
+	}
+
+	r =3D set_timefilter_pathname_mbs(a, timetype, as.s);
+	archive_string_free(&as);
+
+	return (r);
+}
+#endif /* _WIN32 && !__CYGWIN__ */
+
+/*
+ * Call back funtions for archive_rb.
+ */
+static int
+cmp_node_mbs(const struct archive_rb_node *n1,
+    const struct archive_rb_node *n2)
+{
+	struct match_file *f1 =3D (struct match_file *)(uintptr_t)n1;
+	struct match_file *f2 =3D (struct match_file *)(uintptr_t)n2;
+	const char *p1, *p2;
+
+	archive_mstring_get_mbs(NULL, &(f1->pathname), &p1);
+	archive_mstring_get_mbs(NULL, &(f2->pathname), &p2);
+	if (p1 =3D=3D NULL)
+		return (1);
+	if (p2 =3D=3D NULL)
+		return (-1);
+	return (strcmp(p1, p2));
+}
+       =20
+static int
+cmp_key_mbs(const struct archive_rb_node *n, const void *key)
+{
+	struct match_file *f =3D (struct match_file *)(uintptr_t)n;
+	const char *p;
+
+	archive_mstring_get_mbs(NULL, &(f->pathname), &p);
+	if (p =3D=3D NULL)
+		return (-1);
+	return (strcmp(p, (const char *)key));
+}
+
+static int
+cmp_node_wcs(const struct archive_rb_node *n1,
+    const struct archive_rb_node *n2)
+{
+	struct match_file *f1 =3D (struct match_file *)(uintptr_t)n1;
+	struct match_file *f2 =3D (struct match_file *)(uintptr_t)n2;
+	const wchar_t *p1, *p2;
+
+	archive_mstring_get_wcs(NULL, &(f1->pathname), &p1);
+	archive_mstring_get_wcs(NULL, &(f2->pathname), &p2);
+	if (p1 =3D=3D NULL)
+		return (1);
+	if (p2 =3D=3D NULL)
+		return (-1);
+	return (wcscmp(p1, p2));
+}
+       =20
+static int
+cmp_key_wcs(const struct archive_rb_node *n, const void *key)
+{
+	struct match_file *f =3D (struct match_file *)(uintptr_t)n;
+	const wchar_t *p;
+
+	archive_mstring_get_wcs(NULL, &(f->pathname), &p);
+	if (p =3D=3D NULL)
+		return (-1);
+	return (wcscmp(p, (const wchar_t *)key));
+}
+
+static void
+entry_list_init(struct entry_list *list)
+{
+	list->first =3D NULL;
+	list->last =3D &(list->first);
+	list->count =3D 0;
+}
+
+static void
+entry_list_free(struct entry_list *list)
+{
+	struct match_file *p, *q;
+
+	for (p =3D list->first; p !=3D NULL; ) {
+		q =3D p;
+		p =3D p->next;
+		archive_mstring_clean(&(q->pathname));
+		free(q);
+	}
+}
+
+static void
+entry_list_add(struct entry_list *list, struct match_file *file)
+{
+	*list->last =3D file;
+	list->last =3D &(file->next);
+	list->count++;
+}
+
+static int
+add_entry(struct archive_match *a, int flag,
+    struct archive_entry *entry)
+{
+	struct match_file *f;
+	const void *pathname;
+	int r;
+
+	f =3D calloc(1, sizeof(*f));
+	if (f =3D=3D NULL)
+		return (error_nomem(a));
+
+#if defined(_WIN32) && !defined(__CYGWIN__)
+	pathname =3D archive_entry_pathname_w(entry);
+	if (pathname =3D=3D NULL) {
+		free(f);
+		archive_set_error(&(a->archive), EINVAL, "pathname is NULL");
+		return (ARCHIVE_FAILED);
+	}
+	archive_mstring_copy_wcs(&(f->pathname), pathname);
+	a->exclusion_tree.rbt_ops =3D &rb_ops_wcs;
+#else
+	pathname =3D archive_entry_pathname(entry);
+	if (pathname =3D=3D NULL) {
+		free(f);
+		archive_set_error(&(a->archive), EINVAL, "pathname is NULL");
+		return (ARCHIVE_FAILED);
+	}
+	archive_mstring_copy_mbs(&(f->pathname), pathname);
+	a->exclusion_tree.rbt_ops =3D &rb_ops_mbs;
+#endif
+	f->flag =3D flag;
+	f->mtime_sec =3D archive_entry_mtime(entry);
+	f->mtime_nsec =3D archive_entry_mtime_nsec(entry);
+	f->ctime_sec =3D archive_entry_ctime(entry);
+	f->ctime_nsec =3D archive_entry_ctime_nsec(entry);
+	r =3D __archive_rb_tree_insert_node(&(a->exclusion_tree), &(f->node));
+	if (!r) {
+		struct match_file *f2;
+
+		/* Get the duplicated file. */
+		f2 =3D (struct match_file *)__archive_rb_tree_find_node(
+			&(a->exclusion_tree), pathname);
+
+		/*
+		 * We always overwrite comparison condision.
+		 * If you do not want to overwrite it, you should not
+		 * call archive_match_exclude_entry(). We cannot know
+		 * what behavior you really expect since overwriting
+		 * condition might be different with the flag.
+		 */
+		if (f2 !=3D NULL) {
+			f2->flag =3D f->flag;
+			f2->mtime_sec =3D f->mtime_sec;
+			f2->mtime_nsec =3D f->mtime_nsec;
+			f2->ctime_sec =3D f->ctime_sec;
+			f2->ctime_nsec =3D f->ctime_nsec;
+		}
+		/* Release the duplicated file. */
+		archive_mstring_clean(&(f->pathname));
+		free(f);
+		return (ARCHIVE_OK);
+	}
+	entry_list_add(&(a->exclusion_entry_list), f);
+	a->setflag |=3D TIME_IS_SET;
+	return (ARCHIVE_OK);
+}
+
+/*
+ * Test if entry is excluded by its timestamp.
+ */
+static int
+time_excluded(struct archive_match *a, struct archive_entry *entry)
+{
+	struct match_file *f;
+	const void *pathname;
+	time_t sec;
+	long nsec;
+
+	/*
+	 * If this file/dir is excluded by a time comparison, skip it.
+	 */
+	if (a->newer_ctime_filter) {
+		/* If ctime is not set, use mtime instead. */
+		if (archive_entry_ctime_is_set(entry))
+			sec =3D archive_entry_ctime(entry);
+		else
+			sec =3D archive_entry_mtime(entry);
+		if (sec < a->newer_ctime_sec)
+			return (1); /* Too old, skip it. */
+		if (sec =3D=3D a->newer_ctime_sec) {
+			if (archive_entry_ctime_is_set(entry))
+				nsec =3D archive_entry_ctime_nsec(entry);
+			else
+				nsec =3D archive_entry_mtime_nsec(entry);
+			if (nsec < a->newer_ctime_nsec)
+				return (1); /* Too old, skip it. */
+			if (nsec =3D=3D a->newer_ctime_nsec &&
+			    (a->newer_ctime_filter & ARCHIVE_MATCH_EQUAL)
+			      =3D=3D 0)
+				return (1); /* Equal, skip it. */
+		}
+	}
+	if (a->older_ctime_filter) {
+		/* If ctime is not set, use mtime instead. */
+		if (archive_entry_ctime_is_set(entry))
+			sec =3D archive_entry_ctime(entry);
+		else
+			sec =3D archive_entry_mtime(entry);
+		if (sec > a->older_ctime_sec)
+			return (1); /* Too new, skip it. */
+		if (sec =3D=3D a->older_ctime_sec) {
+			if (archive_entry_ctime_is_set(entry))
+				nsec =3D archive_entry_ctime_nsec(entry);
+			else
+				nsec =3D archive_entry_mtime_nsec(entry);
+			if (nsec > a->older_ctime_nsec)
+				return (1); /* Too new, skip it. */
+			if (nsec =3D=3D a->older_ctime_nsec &&
+			    (a->older_ctime_filter & ARCHIVE_MATCH_EQUAL)
+			      =3D=3D 0)
+				return (1); /* Eeual, skip it. */
+		}
+	}
+	if (a->newer_mtime_filter) {
+		sec =3D archive_entry_mtime(entry);
+		if (sec < a->newer_mtime_sec)
+			return (1); /* Too old, skip it. */
+		if (sec =3D=3D a->newer_mtime_sec) {
+			nsec =3D archive_entry_mtime_nsec(entry);
+			if (nsec < a->newer_mtime_nsec)
+				return (1); /* Too old, skip it. */
+			if (nsec =3D=3D a->newer_mtime_nsec &&
+			    (a->newer_mtime_filter & ARCHIVE_MATCH_EQUAL)
+			       =3D=3D 0)
+				return (1); /* Equal, skip it. */
+		}
+	}
+	if (a->older_mtime_filter) {
+		sec =3D archive_entry_mtime(entry);
+		if (sec > a->older_mtime_sec)
+			return (1); /* Too new, skip it. */
+		nsec =3D archive_entry_mtime_nsec(entry);
+		if (sec =3D=3D a->older_mtime_sec) {
+			if (nsec > a->older_mtime_nsec)
+				return (1); /* Too new, skip it. */
+			if (nsec =3D=3D a->older_mtime_nsec &&
+			    (a->older_mtime_filter & ARCHIVE_MATCH_EQUAL)
+			       =3D=3D 0)
+				return (1); /* Equal, skip it. */
+		}
+	}
+
+	/* If there is no excluson list, include the file. */
+	if (a->exclusion_entry_list.count =3D=3D 0)
+		return (0);
+
+#if defined(_WIN32) && !defined(__CYGWIN__)
+	pathname =3D archive_entry_pathname_w(entry);
+	a->exclusion_tree.rbt_ops =3D &rb_ops_wcs;
+#else
+	pathname =3D archive_entry_pathname(entry);
+	a->exclusion_tree.rbt_ops =3D &rb_ops_mbs;
+#endif
+	if (pathname =3D=3D NULL)
+		return (0);
+
+	f =3D (struct match_file *)__archive_rb_tree_find_node(
+		&(a->exclusion_tree), pathname);
+	/* If the file wasn't rejected, include it. */
+	if (f =3D=3D NULL)
+		return (0);
+
+	if (f->flag & ARCHIVE_MATCH_CTIME) {
+		sec =3D archive_entry_ctime(entry);
+		if (f->ctime_sec > sec) {
+			if (f->flag & ARCHIVE_MATCH_OLDER)
+				return (1);
+		} else if (f->ctime_sec < sec) {
+			if (f->flag & ARCHIVE_MATCH_NEWER)
+				return (1);
+		} else {
+			nsec =3D archive_entry_ctime_nsec(entry);
+			if (f->ctime_nsec > nsec) {
+				if (f->flag & ARCHIVE_MATCH_OLDER)
+					return (1);
+			} else if (f->ctime_nsec < nsec) {
+				if (f->flag & ARCHIVE_MATCH_NEWER)
+					return (1);
+			} else if (f->flag & ARCHIVE_MATCH_EQUAL)
+				return (1);
+		}
+	}
+	if (f->flag & ARCHIVE_MATCH_MTIME) {
+		sec =3D archive_entry_mtime(entry);
+		if (f->mtime_sec > sec) {
+			if (f->flag & ARCHIVE_MATCH_OLDER)
+				return (1);
+		} else if (f->mtime_sec < sec) {
+			if (f->flag & ARCHIVE_MATCH_NEWER)
+				return (1);
+		} else {
+			nsec =3D archive_entry_mtime_nsec(entry);
+			if (f->mtime_nsec > nsec) {
+				if (f->flag & ARCHIVE_MATCH_OLDER)
+					return (1);
+			} else if (f->mtime_nsec < nsec) {
+				if (f->flag & ARCHIVE_MATCH_NEWER)
+					return (1);
+			} else if (f->flag & ARCHIVE_MATCH_EQUAL)
+				return (1);
+		}
+	}
+	return (0);
+}
+
+/*
+ * Utility functions to manage inclusion owners
+ */
+
+int
+archive_match_include_uid(struct archive *_a, int64_t uid)
+{
+	struct archive_match *a;
+
+	archive_check_magic(_a, ARCHIVE_MATCH_MAGIC,
+	    ARCHIVE_STATE_NEW, "archive_match_include_uid");
+	a =3D (struct archive_match *)_a;
+	return (add_owner_id(a, &(a->inclusion_uids), uid));
+}
+
+int
+archive_match_include_gid(struct archive *_a, int64_t gid)
+{
+	struct archive_match *a;
+
+	archive_check_magic(_a, ARCHIVE_MATCH_MAGIC,
+	    ARCHIVE_STATE_NEW, "archive_match_include_gid");
+	a =3D (struct archive_match *)_a;
+	return (add_owner_id(a, &(a->inclusion_gids), gid));
+}
+
+int
+archive_match_include_uname(struct archive *_a, const char *uname)
+{
+	struct archive_match *a;
+
+	archive_check_magic(_a, ARCHIVE_MATCH_MAGIC,
+	    ARCHIVE_STATE_NEW, "archive_match_include_uname");
+	a =3D (struct archive_match *)_a;
+	return (add_owner_name(a, &(a->inclusion_unames), 1, uname));
+}
+
+int
+archive_match_include_uname_w(struct archive *_a, const wchar_t *uname)
+{
+	struct archive_match *a;
+
+	archive_check_magic(_a, ARCHIVE_MATCH_MAGIC,
+	    ARCHIVE_STATE_NEW, "archive_match_include_uname_w");
+	a =3D (struct archive_match *)_a;
+	return (add_owner_name(a, &(a->inclusion_unames), 0, uname));
+}
+
+int
+archive_match_include_gname(struct archive *_a, const char *gname)
+{
+	struct archive_match *a;
+
+	archive_check_magic(_a, ARCHIVE_MATCH_MAGIC,
+	    ARCHIVE_STATE_NEW, "archive_match_include_gname");
+	a =3D (struct archive_match *)_a;
+	return (add_owner_name(a, &(a->inclusion_gnames), 1, gname));
+}
+
+int
+archive_match_include_gname_w(struct archive *_a, const wchar_t *gname)
+{
+	struct archive_match *a;
+
+	archive_check_magic(_a, ARCHIVE_MATCH_MAGIC,
+	    ARCHIVE_STATE_NEW, "archive_match_include_gname_w");
+	a =3D (struct archive_match *)_a;
+	return (add_owner_name(a, &(a->inclusion_gnames), 0, gname));
+}
+
+/*
+ * Test function for owner(uid, gid, uname, gname).
+ *
+ * Returns 1 if archive entry is excluded.
+ * Returns 0 if archive entry is not excluded.
+ * Returns <0 if something error happened.
+ */
+int
+archive_match_owner_excluded(struct archive *_a,
+    struct archive_entry *entry)
+{
+	struct archive_match *a;
+
+	archive_check_magic(_a, ARCHIVE_MATCH_MAGIC,
+	    ARCHIVE_STATE_NEW, "archive_match_id_excluded_ae");
+
+	a =3D (struct archive_match *)_a;
+	if (entry =3D=3D NULL) {
+		archive_set_error(&(a->archive), EINVAL, "entry is NULL");
+		return (ARCHIVE_FAILED);
+	}
+
+	/* If we don't have inclusion id set at all, the entry is always
+	 * not excluded. */
+	if ((a->setflag & ID_IS_SET) =3D=3D 0)
+		return (0);
+	return (owner_excluded(a, entry));
+}
+
+static int
+add_owner_id(struct archive_match *a, struct id_array *ids, int64_t id)
+{
+	unsigned i;
+
+	if (ids->count + 1 >=3D ids->size) {
+		if (ids->size =3D=3D 0)
+			ids->size =3D 8;
+		else
+			ids->size *=3D 2;
+		ids->ids =3D realloc(ids->ids, sizeof(*ids->ids) * ids->size);
+		if (ids->ids =3D=3D NULL)
+			return (error_nomem(a));
+	}
+
+	/* Find an insert point. */
+	for (i =3D 0; i < ids->count; i++) {
+		if (ids->ids[i] >=3D id)
+			break;
+	}
+
+	/* Add oowner id. */
+	if (i =3D=3D ids->count)
+		ids->ids[ids->count++] =3D id;
+	else if (ids->ids[i] !=3D id) {
+		memmove(&(ids->ids[i+1]), &(ids->ids[i]),
+		    (ids->count - i) * sizeof(ids->ids[0]));
+		ids->ids[i] =3D id;
+		ids->count++;
+	}
+	a->setflag |=3D ID_IS_SET;
+	return (ARCHIVE_OK);
+}
+
+static int
+match_owner_id(struct id_array *ids, int64_t id)
+{
+	unsigned b, m, t;
+
+	t =3D 0;
+	b =3D ids->count;
+	while (t < b) {
+		m =3D (t + b)>>1;
+		if (ids->ids[m] =3D=3D id)
+			return (1);
+		if (ids->ids[m] < id)
+			t =3D m + 1;
+		else
+			b =3D m;
+	}
+	return (0);
+}
+
+static int
+add_owner_name(struct archive_match *a, struct match_list *list,
+    int mbs, const void *name)
+{
+	struct match *match;
+
+	match =3D calloc(1, sizeof(*match));
+	if (match =3D=3D NULL)
+		return (error_nomem(a));
+	if (mbs)
+		archive_mstring_copy_mbs(&(match->pattern), name);
+	else
+		archive_mstring_copy_wcs(&(match->pattern), name);
+	match_list_add(list, match);
+	a->setflag |=3D ID_IS_SET;
+	return (ARCHIVE_OK);
+}
+
+#if !defined(_WIN32) || defined(__CYGWIN__)
+static int
+match_owner_name_mbs(struct archive_match *a, struct match_list *list,
+    const char *name)
+{
+	struct match *m;
+	const char *p;
+
+	if (name =3D=3D NULL || *name =3D=3D '\0')
+		return (0);
+	for (m =3D list->first; m; m =3D m->next) {
+		if (archive_mstring_get_mbs(&(a->archive), &(m->pattern), &p)
+		    < 0 && errno =3D=3D ENOMEM)
+			return (error_nomem(a));
+		if (p !=3D NULL && strcmp(p, name) =3D=3D 0) {
+			m->matches++;
+			return (1);
+		}
+	}
+	return (0);
+}
+#else
+static int
+match_owner_name_wcs(struct archive_match *a, struct match_list *list,
+    const wchar_t *name)
+{
+	struct match *m;
+	const wchar_t *p;
+
+	if (name =3D=3D NULL || *name =3D=3D L'\0')
+		return (0);
+	for (m =3D list->first; m; m =3D m->next) {
+		if (archive_mstring_get_wcs(&(a->archive), &(m->pattern), &p)
+		    < 0 && errno =3D=3D ENOMEM)
+			return (error_nomem(a));
+		if (p !=3D NULL && wcscmp(p, name) =3D=3D 0) {
+			m->matches++;
+			return (1);
+		}
+	}
+	return (0);
+}
+#endif
+
+/*
+ * Test if entry is excluded by uid, gid, uname or gname.
+ */
+static int
+owner_excluded(struct archive_match *a, struct archive_entry *entry)
+{
+	int r;
+
+	if (a->inclusion_uids.count) {
+		if (!match_owner_id(&(a->inclusion_uids),
+		    archive_entry_uid(entry)))
+			return (1);
+	}
+
+	if (a->inclusion_gids.count) {
+		if (!match_owner_id(&(a->inclusion_gids),
+		    archive_entry_gid(entry)))
+			return (1);
+	}
+
+	if (a->inclusion_unames.count) {
+#if defined(_WIN32) && !defined(__CYGWIN__)
+		r =3D match_owner_name_wcs(a, &(a->inclusion_unames),
+			archive_entry_uname_w(entry));
+#else
+		r =3D match_owner_name_mbs(a, &(a->inclusion_unames),
+			archive_entry_uname(entry));
+#endif
+		if (!r)
+			return (1);
+		else if (r < 0)
+			return (r);
+	}
+
+	if (a->inclusion_gnames.count) {
+#if defined(_WIN32) && !defined(__CYGWIN__)
+		r =3D match_owner_name_wcs(a, &(a->inclusion_gnames),
+			archive_entry_gname_w(entry));
+#else
+		r =3D match_owner_name_mbs(a, &(a->inclusion_gnames),
+			archive_entry_gname(entry));
+#endif
+		if (!r)
+			return (1);
+		else if (r < 0)
+			return (r);
+	}
+	return (0);
+}
+
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_pathmatch.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/head/contrib/libarchive/libarchive/archive_pathmatch.c	Fri Aug 10 14:=
19:25 2012 +0300
@@ -0,0 +1,459 @@
+/*-
+ * 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
+ *    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(S) ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTI=
ES
+ * 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 US=
E,
+ * 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_STRING_H
+#include <string.h>
+#endif
+#ifdef HAVE_WCHAR_H
+#include <wchar.h>
+#endif
+
+#include "archive_pathmatch.h"
+
+/*
+ * Check whether a character 'c' is matched by a list specification [...]:
+ *    * Leading '!' or '^' negates the class.
+ *    * <char>-<char> is a range of characters
+ *    * \<char> removes any special meaning for <char>
+ *
+ * Some interesting boundary cases:
+ *   a-d-e is one range (a-d) followed by two single characters - and e.
+ *   \a-\d is same as a-d
+ *   a\-d is three single characters: a, d, -
+ *   Trailing - is not special (so [a-] is two characters a and -).
+ *   Initial - is not special ([a-] is same as [-a] is same as [\\-a])
+ *   This function never sees a trailing \.
+ *   [] always fails
+ *   [!] always succeeds
+ */
+static int
+pm_list(const char *start, const char *end, const char c, int flags)
+{
+	const char *p =3D start;
+	char rangeStart =3D '\0', nextRangeStart;
+	int match =3D 1, nomatch =3D 0;
+
+	/* This will be used soon... */
+	(void)flags; /* UNUSED */
+
+	/* If this is a negated class, return success for nomatch. */
+	if ((*p =3D=3D '!' || *p =3D=3D '^') && p < end) {
+		match =3D 0;
+		nomatch =3D 1;
+		++p;
+	}
+
+	while (p < end) {
+		nextRangeStart =3D '\0';
+		switch (*p) {
+		case '-':
+			/* Trailing or initial '-' is not special. */
+			if ((rangeStart =3D=3D '\0') || (p =3D=3D end - 1)) {
+				if (*p =3D=3D c)
+					return (match);
+			} else {
+				char rangeEnd =3D *++p;
+				if (rangeEnd =3D=3D '\\')
+					rangeEnd =3D *++p;
+				if ((rangeStart <=3D c) && (c <=3D rangeEnd))
+					return (match);
+			}
+			break;
+		case '\\':
+			++p;
+			/* Fall through */
+		default:
+			if (*p =3D=3D c)
+				return (match);
+			nextRangeStart =3D *p; /* Possible start of range. */
+		}
+		rangeStart =3D nextRangeStart;
+		++p;
+	}
+	return (nomatch);
+}
+
+static int
+pm_list_w(const wchar_t *start, const wchar_t *end, const wchar_t c, int f=
lags)
+{
+	const wchar_t *p =3D start;
+	wchar_t rangeStart =3D L'\0', nextRangeStart;
+	int match =3D 1, nomatch =3D 0;
+
+	/* This will be used soon... */
+	(void)flags; /* UNUSED */
+
+	/* If this is a negated class, return success for nomatch. */
+	if ((*p =3D=3D L'!' || *p =3D=3D L'^') && p < end) {
+		match =3D 0;
+		nomatch =3D 1;
+		++p;
+	}
+
+	while (p < end) {
+		nextRangeStart =3D L'\0';
+		switch (*p) {
+		case L'-':
+			/* Trailing or initial '-' is not special. */
+			if ((rangeStart =3D=3D L'\0') || (p =3D=3D end - 1)) {
+				if (*p =3D=3D c)
+					return (match);
+			} else {
+				wchar_t rangeEnd =3D *++p;
+				if (rangeEnd =3D=3D L'\\')
+					rangeEnd =3D *++p;
+				if ((rangeStart <=3D c) && (c <=3D rangeEnd))
+					return (match);
+			}
+			break;
+		case L'\\':
+			++p;
+			/* Fall through */
+		default:
+			if (*p =3D=3D c)
+				return (match);
+			nextRangeStart =3D *p; /* Possible start of range. */
+		}
+		rangeStart =3D nextRangeStart;
+		++p;
+	}
+	return (nomatch);
+}
+
+/*
+ * If s is pointing to "./", ".//", "./././" or the like, skip it.
+ */
+static const char *
+pm_slashskip(const char *s) {
+	while ((*s =3D=3D '/')
+	    || (s[0] =3D=3D '.' && s[1] =3D=3D '/')
+	    || (s[0] =3D=3D '.' && s[1] =3D=3D '\0'))
+		++s;
+	return (s);
+}
+
+static const wchar_t *
+pm_slashskip_w(const wchar_t *s) {
+	while ((*s =3D=3D L'/')
+	    || (s[0] =3D=3D L'.' && s[1] =3D=3D L'/')
+	    || (s[0] =3D=3D L'.' && s[1] =3D=3D L'\0'))
+		++s;
+	return (s);
+}
+
+static int
+pm(const char *p, const char *s, int flags)
+{
+	const char *end;
+
+	/*
+	 * Ignore leading './', './/', '././', etc.
+	 */
+	if (s[0] =3D=3D '.' && s[1] =3D=3D '/')
+		s =3D pm_slashskip(s + 1);
+	if (p[0] =3D=3D '.' && p[1] =3D=3D '/')
+		p =3D pm_slashskip(p + 1);
+
+	for (;;) {
+		switch (*p) {
+		case '\0':
+			if (s[0] =3D=3D '/') {
+				if (flags & PATHMATCH_NO_ANCHOR_END)
+					return (1);
+				/* "dir" =3D=3D "dir/" =3D=3D "dir/." */
+				s =3D pm_slashskip(s);
+			}
+			return (*s =3D=3D '\0');
+		case '?':
+			/* ? always succeeds, unless we hit end of 's' */
+			if (*s =3D=3D '\0')
+				return (0);
+			break;
+		case '*':
+			/* "*" =3D=3D "**" =3D=3D "***" ... */
+			while (*p =3D=3D '*')
+				++p;
+			/* Trailing '*' always succeeds. */
+			if (*p =3D=3D '\0')
+				return (1);
+			while (*s) {
+				if (archive_pathmatch(p, s, flags))
+					return (1);
+				++s;
+			}
+			return (0);
+		case '[':
+			/*
+			 * Find the end of the [...] character class,
+			 * ignoring \] that might occur within the class.
+			 */
+			end =3D p + 1;
+			while (*end !=3D '\0' && *end !=3D ']') {
+				if (*end =3D=3D '\\' && end[1] !=3D '\0')
+					++end;
+				++end;
+			}
+			if (*end =3D=3D ']') {
+				/* We found [...], try to match it. */
+				if (!pm_list(p + 1, end, *s, flags))
+					return (0);
+				p =3D end; /* Jump to trailing ']' char. */
+				break;
+			} else
+				/* No final ']', so just match '['. */
+				if (*p !=3D *s)
+					return (0);
+			break;
+		case '\\':
+			/* Trailing '\\' matches itself. */
+			if (p[1] =3D=3D '\0') {
+				if (*s !=3D '\\')
+					return (0);
+			} else {
+				++p;
+				if (*p !=3D *s)
+					return (0);
+			}
+			break;
+		case '/':
+			if (*s !=3D '/' && *s !=3D '\0')
+				return (0);
+			/* Note: pattern "/\./" won't match "/";
+			 * pm_slashskip() correctly stops at backslash. */
+			p =3D pm_slashskip(p);
+			s =3D pm_slashskip(s);
+			if (*p =3D=3D '\0' && (flags & PATHMATCH_NO_ANCHOR_END))
+				return (1);
+			--p; /* Counteract the increment below. */
+			--s;
+			break;
+		case '$':
+			/* '$' is special only at end of pattern and only
+			 * if PATHMATCH_NO_ANCHOR_END is specified. */
+			if (p[1] =3D=3D '\0' && (flags & PATHMATCH_NO_ANCHOR_END)){
+				/* "dir" =3D=3D "dir/" =3D=3D "dir/." */
+				return (*pm_slashskip(s) =3D=3D '\0');
+			}
+			/* Otherwise, '$' is not special. */
+			/* FALL THROUGH */
+		default:
+			if (*p !=3D *s)
+				return (0);
+			break;
+		}
+		++p;
+		++s;
+	}
+}
+
+static int
+pm_w(const wchar_t *p, const wchar_t *s, int flags)
+{
+	const wchar_t *end;
+
+	/*
+	 * Ignore leading './', './/', '././', etc.
+	 */
+	if (s[0] =3D=3D L'.' && s[1] =3D=3D L'/')
+		s =3D pm_slashskip_w(s + 1);
+	if (p[0] =3D=3D L'.' && p[1] =3D=3D L'/')
+		p =3D pm_slashskip_w(p + 1);
+
+	for (;;) {
+		switch (*p) {
+		case L'\0':
+			if (s[0] =3D=3D L'/') {
+				if (flags & PATHMATCH_NO_ANCHOR_END)
+					return (1);
+				/* "dir" =3D=3D "dir/" =3D=3D "dir/." */
+				s =3D pm_slashskip_w(s);
+			}
+			return (*s =3D=3D L'\0');
+		case L'?':
+			/* ? always succeeds, unless we hit end of 's' */
+			if (*s =3D=3D L'\0')
+				return (0);
+			break;
+		case L'*':
+			/* "*" =3D=3D "**" =3D=3D "***" ... */
+			while (*p =3D=3D L'*')
+				++p;
+			/* Trailing '*' always succeeds. */
+			if (*p =3D=3D L'\0')
+				return (1);
+			while (*s) {
+				if (archive_pathmatch_w(p, s, flags))
+					return (1);
+				++s;
+			}
+			return (0);
+		case L'[':
+			/*
+			 * Find the end of the [...] character class,
+			 * ignoring \] that might occur within the class.
+			 */
+			end =3D p + 1;
+			while (*end !=3D L'\0' && *end !=3D L']') {
+				if (*end =3D=3D L'\\' && end[1] !=3D L'\0')
+					++end;
+				++end;
+			}
+			if (*end =3D=3D L']') {
+				/* We found [...], try to match it. */
+				if (!pm_list_w(p + 1, end, *s, flags))
+					return (0);
+				p =3D end; /* Jump to trailing ']' char. */
+				break;
+			} else
+				/* No final ']', so just match '['. */
+				if (*p !=3D *s)
+					return (0);
+			break;
+		case L'\\':
+			/* Trailing '\\' matches itself. */
+			if (p[1] =3D=3D L'\0') {
+				if (*s !=3D L'\\')
+					return (0);
+			} else {
+				++p;
+				if (*p !=3D *s)
+					return (0);
+			}
+			break;
+		case L'/':
+			if (*s !=3D L'/' && *s !=3D L'\0')
+				return (0);
+			/* Note: pattern "/\./" won't match "/";
+			 * pm_slashskip() correctly stops at backslash. */
+			p =3D pm_slashskip_w(p);
+			s =3D pm_slashskip_w(s);
+			if (*p =3D=3D L'\0' && (flags & PATHMATCH_NO_ANCHOR_END))
+				return (1);
+			--p; /* Counteract the increment below. */
+			--s;
+			break;
+		case L'$':
+			/* '$' is special only at end of pattern and only
+			 * if PATHMATCH_NO_ANCHOR_END is specified. */
+			if (p[1] =3D=3D L'\0' && (flags & PATHMATCH_NO_ANCHOR_END)){
+				/* "dir" =3D=3D "dir/" =3D=3D "dir/." */
+				return (*pm_slashskip_w(s) =3D=3D L'\0');
+			}
+			/* Otherwise, '$' is not special. */
+			/* FALL THROUGH */
+		default:
+			if (*p !=3D *s)
+				return (0);
+			break;
+		}
+		++p;
+		++s;
+	}
+}
+
+/* Main entry point. */
+int
+__archive_pathmatch(const char *p, const char *s, int flags)
+{
+	/* Empty pattern only matches the empty string. */
+	if (p =3D=3D NULL || *p =3D=3D '\0')
+		return (s =3D=3D NULL || *s =3D=3D '\0');
+
+	/* Leading '^' anchors the start of the pattern. */
+	if (*p =3D=3D '^') {
+		++p;
+		flags &=3D ~PATHMATCH_NO_ANCHOR_START;
+	}
+
+	if (*p =3D=3D '/' && *s !=3D '/')
+		return (0);
+
+	/* Certain patterns and file names anchor implicitly. */
+	if (*p =3D=3D '*' || *p =3D=3D '/' || *p =3D=3D '/') {
+		while (*p =3D=3D '/')
+			++p;
+		while (*s =3D=3D '/')
+			++s;
+		return (pm(p, s, flags));
+	}
+
+	/* If start is unanchored, try to match start of each path element. */
+	if (flags & PATHMATCH_NO_ANCHOR_START) {
+		for ( ; s !=3D NULL; s =3D strchr(s, '/')) {
+			if (*s =3D=3D '/')
+				s++;
+			if (pm(p, s, flags))
+				return (1);
+		}
+		return (0);
+	}
+
+	/* Default: Match from beginning. */
+	return (pm(p, s, flags));
+}
+
+int
+__archive_pathmatch_w(const wchar_t *p, const wchar_t *s, int flags)
+{
+	/* Empty pattern only matches the empty string. */
+	if (p =3D=3D NULL || *p =3D=3D L'\0')
+		return (s =3D=3D NULL || *s =3D=3D L'\0');
+
+	/* Leading '^' anchors the start of the pattern. */
+	if (*p =3D=3D L'^') {
+		++p;
+		flags &=3D ~PATHMATCH_NO_ANCHOR_START;
+	}
+
+	if (*p =3D=3D L'/' && *s !=3D L'/')
+		return (0);
+
+	/* Certain patterns and file names anchor implicitly. */
+	if (*p =3D=3D L'*' || *p =3D=3D L'/' || *p =3D=3D L'/') {
+		while (*p =3D=3D L'/')
+			++p;
+		while (*s =3D=3D L'/')
+			++s;
+		return (pm_w(p, s, flags));
+	}
+
+	/* If start is unanchored, try to match start of each path element. */
+	if (flags & PATHMATCH_NO_ANCHOR_START) {
+		for ( ; s !=3D NULL; s =3D wcschr(s, L'/')) {
+			if (*s =3D=3D L'/')
+				s++;
+			if (pm_w(p, s, flags))
+				return (1);
+		}
+		return (0);
+	}
+
+	/* Default: Match from beginning. */
+	return (pm_w(p, s, flags));
+}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_pathmatch.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/head/contrib/libarchive/libarchive/archive_pathmatch.h	Fri Aug 10 14:=
19:25 2012 +0300
@@ -0,0 +1,52 @@
+/*-
+ * 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
+ *    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(S) ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTI=
ES
+ * 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 US=
E,
+ * 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
+#ifndef __LIBARCHIVE_TEST
+#error This header is only to be used internally to libarchive.
+#endif
+#endif
+
+#ifndef ARCHIVE_PATHMATCH_H
+#define ARCHIVE_PATHMATCH_H
+
+/* Don't anchor at beginning unless the pattern starts with "^" */
+#define PATHMATCH_NO_ANCHOR_START	1
+/* Don't anchor at end unless the pattern ends with "$" */
+#define PATHMATCH_NO_ANCHOR_END 	2
+
+/* Note that "^" and "$" are not special unless you set the corresponding
+ * flag above. */
+
+int __archive_pathmatch(const char *p, const char *s, int flags);
+int __archive_pathmatch_w(const wchar_t *p, const wchar_t *s, int flags);
+
+#define archive_pathmatch(p, s, f)	__archive_pathmatch(p, s, f)
+#define archive_pathmatch_w(p, s, f)	__archive_pathmatch_w(p, s, f)
+
+#endif
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_ppmd7.c
--- a/head/contrib/libarchive/libarchive/archive_ppmd7.c	Mon Jul 30 11:44:1=
8 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_ppmd7.c	Fri Aug 10 14:19:2=
5 2012 +0300
@@ -415,7 +415,7 @@
     upState.Freq =3D (Byte)(1 + ((2 * cf <=3D s0) ? (5 * cf > s0) : ((2 * =
cf + 3 * s0 - 1) / (2 * s0))));
   }
=20
-  do
+  while (numPs !=3D 0)
   {
     /* Create Child */
     CTX_PTR c1; /* =3D AllocContext(p); */
@@ -435,7 +435,6 @@
     SetSuccessor(ps[--numPs], REF(c1));
     c =3D c1;
   }
-  while (numPs !=3D 0);
  =20
   return c;
 }
@@ -778,7 +777,7 @@
       if(p->Range >=3D p->Bottom)
         break;
       else
-        p->Range =3D -p->Low & (p->Bottom - 1);
+        p->Range =3D ((uint32_t)(-(int32_t)p->Low)) & (p->Bottom - 1);
     }
     p->Code =3D (p->Code << 8) | p->Stream->Read((void *)p->Stream);
     p->Range <<=3D 8;
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_private.h
--- a/head/contrib/libarchive/libarchive/archive_private.h	Mon Jul 30 11:44=
:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_private.h	Fri Aug 10 14:19=
:25 2012 +0300
@@ -22,7 +22,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.
  *
- * $FreeBSD: head/contrib/libarchive/libarchive/archive_private.h 232153 2=
012-02-25 10:58:02Z mm $
+ * $FreeBSD: head/contrib/libarchive/libarchive/archive_private.h 238856 2=
012-07-28 06:38:44Z mm $
  */
=20
 #ifndef __LIBARCHIVE_BUILD
@@ -50,6 +50,7 @@
 #define	ARCHIVE_READ_MAGIC	(0xdeb0c5U)
 #define	ARCHIVE_WRITE_DISK_MAGIC (0xc001b0c5U)
 #define	ARCHIVE_READ_DISK_MAGIC (0xbadb0c5U)
+#define	ARCHIVE_MATCH_MAGIC	(0xcad11c9U)
=20
 #define	ARCHIVE_STATE_NEW	1U
 #define	ARCHIVE_STATE_HEADER	2U
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_read.3
--- a/head/contrib/libarchive/libarchive/archive_read.3	Mon Jul 30 11:44:18=
 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_read.3	Fri Aug 10 14:19:25=
 2012 +0300
@@ -22,14 +22,16 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\" $FreeBSD: head/contrib/libarchive/libarchive/archive_read.3 232153 201=
2-02-25 10:58:02Z mm $
+.\" $FreeBSD: head/contrib/libarchive/libarchive/archive_read.3 238856 201=
2-07-28 06:38:44Z mm $
 .\"
-.Dd March 23, 2011
+.Dd February 2, 2012
 .Dt ARCHIVE_READ 3
 .Os
 .Sh NAME
 .Nm archive_read
 .Nd functions for reading streaming archives
+.Sh LIBRARY
+Streaming Archive Library (libarchive, -larchive)
 .Sh SYNOPSIS
 .In archive.h
 .Sh DESCRIPTION
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_read.c
--- a/head/contrib/libarchive/libarchive/archive_read.c	Mon Jul 30 11:44:18=
 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_read.c	Fri Aug 10 14:19:25=
 2012 +0300
@@ -32,7 +32,7 @@
  */
=20
 #include "archive_platform.h"
-__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/archive_read.c 2321=
53 2012-02-25 10:58:02Z mm $");
+__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/archive_read.c 2388=
56 2012-07-28 06:38:44Z mm $");
=20
 #ifdef HAVE_ERRNO_H
 #include <errno.h>
@@ -201,7 +201,6 @@
 			request -=3D get;
 			total +=3D get;
 		}
-		return total;
 	} else if (self->archive->client.seeker !=3D NULL
 		&& request > 64 * 1024) {
 		/* If the client provided a seeker but not a skipper,
@@ -638,8 +637,8 @@
 			len =3D s;
 		} else if (a->read_data_output_offset <
 		    a->read_data_offset) {
-			len =3D a->read_data_offset -
-			    a->read_data_output_offset;
+			len =3D (size_t)(a->read_data_offset -
+			    a->read_data_output_offset);
 		} else
 			len =3D 0;
=20
@@ -1231,7 +1230,7 @@
=20
 	/* Use up the copy buffer first. */
 	if (filter->avail > 0) {
-		min =3D minimum(request, (int64_t)filter->avail);
+		min =3D (size_t)minimum(request, (int64_t)filter->avail);
 		filter->next +=3D min;
 		filter->avail -=3D min;
 		request -=3D min;
@@ -1241,7 +1240,7 @@
=20
 	/* Then use up the client buffer. */
 	if (filter->client_avail > 0) {
-		min =3D minimum(request, (int64_t)filter->client_avail);
+		min =3D (size_t)minimum(request, (int64_t)filter->client_avail);
 		filter->client_next +=3D min;
 		filter->client_avail -=3D min;
 		request -=3D min;
@@ -1283,7 +1282,7 @@
 		if (bytes_read >=3D request) {
 			filter->client_next =3D
 			    ((const char *)filter->client_buff) + request;
-			filter->client_avail =3D bytes_read - request;
+			filter->client_avail =3D (size_t)(bytes_read - request);
 			filter->client_total =3D bytes_read;
 			total_bytes_skipped +=3D request;
 			filter->position +=3D request;
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_read_data.3
--- a/head/contrib/libarchive/libarchive/archive_read_data.3	Mon Jul 30 11:=
44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_read_data.3	Fri Aug 10 14:=
19:25 2012 +0300
@@ -24,7 +24,7 @@
 .\"
 .\" $FreeBSD$
 .\"
-.Dd March 22, 2011
+.Dd February 2, 2012
 .Dt ARCHIVE_READ_DATA 3
 .Os
 .Sh NAME
@@ -33,6 +33,8 @@
 .Nm archive_read_data_skip ,
 .Nm archive_read_data_into_fd
 .Nd functions for reading streaming archives
+.Sh LIBRARY
+Streaming Archive Library (libarchive, -larchive)
 .Sh SYNOPSIS
 .In archive.h
 .Ft ssize_t
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_read_disk.3
--- a/head/contrib/libarchive/libarchive/archive_read_disk.3	Mon Jul 30 11:=
44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_read_disk.3	Fri Aug 10 14:=
19:25 2012 +0300
@@ -22,9 +22,9 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\" $FreeBSD: head/contrib/libarchive/libarchive/archive_read_disk.3 23215=
3 2012-02-25 10:58:02Z mm $
+.\" $FreeBSD: head/contrib/libarchive/libarchive/archive_read_disk.3 23885=
6 2012-07-28 06:38:44Z mm $
 .\"
-.Dd March 10, 2009
+.Dd February 2, 2012
 .Dt ARCHIVE_READ_DISK 3
 .Os
 .Sh NAME
@@ -42,6 +42,8 @@
 .Nm archive_read_finish ,
 .Nm archive_read_free
 .Nd functions for reading objects from disk
+.Sh LIBRARY
+Streaming Archive Library (libarchive, -larchive)
 .Sh SYNOPSIS
 .In archive.h
 .Ft struct archive *
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_read_disk_entry_from_file.c
--- a/head/contrib/libarchive/libarchive/archive_read_disk_entry_from_file.=
c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_read_disk_entry_from_file.=
c	Fri Aug 10 14:19:25 2012 +0300
@@ -1,6 +1,6 @@
 /*-
  * Copyright (c) 2003-2009 Tim Kientzle
- * Copyright (c) 2010 Michihiro NAKAJIMA
+ * Copyright (c) 2010-2012 Michihiro NAKAJIMA
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -25,7 +25,7 @@
  */
=20
 #include "archive_platform.h"
-__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/archive_read_disk_e=
ntry_from_file.c 232153 2012-02-25 10:58:02Z mm $");
+__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/archive_read_disk_e=
ntry_from_file.c 238909 2012-07-30 14:47:35Z mm $");
=20
 /* This is the tree-walking code for POSIX systems. */
 #if !defined(_WIN32) || defined(__CYGWIN__)
@@ -73,6 +73,9 @@
 #ifdef HAVE_LIMITS_H
 #include <limits.h>
 #endif
+#ifdef HAVE_LINUX_TYPES_H
+#include <linux/types.h>
+#endif
 #ifdef HAVE_LINUX_FIEMAP_H
 #include <linux/fiemap.h>
 #endif
@@ -111,14 +114,14 @@
 #define	ACL_GET_PERM acl_get_perm_np
 #endif
=20
-static int setup_acls_posix1e(struct archive_read_disk *,
-    struct archive_entry *, int fd);
+static int setup_acls(struct archive_read_disk *,
+    struct archive_entry *, int *fd);
 static int setup_mac_metadata(struct archive_read_disk *,
-    struct archive_entry *, int fd);
+    struct archive_entry *, int *fd);
 static int setup_xattrs(struct archive_read_disk *,
-    struct archive_entry *, int fd);
+    struct archive_entry *, int *fd);
 static int setup_sparse(struct archive_read_disk *,
-    struct archive_entry *, int fd);
+    struct archive_entry *, int *fd);
=20
 int
 archive_read_disk_entry_from_file(struct archive *_a,
@@ -187,8 +190,13 @@
 	 * this is an extra step, it has a nice side-effect: We get an
 	 * 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 =3D open(path, O_RDONLY | O_NONBLOCK);
+		if (fd < 0) {
+			if (a->tree !=3D NULL)
+				fd =3D a->open_on_current_dir(a->tree, path,
+					O_RDONLY | O_NONBLOCK);
+			else
+				fd =3D open(path, O_RDONLY | O_NONBLOCK);
+		}
 		if (fd >=3D 0) {
 			unsigned long stflags;
 			r =3D ioctl(fd, EXT2_IOC_GETFLAGS, &stflags);
@@ -210,13 +218,21 @@
 			    "Couldn't read link data");
 			return (ARCHIVE_FAILED);
 		}
+		if (a->tree !=3D NULL) {
 #ifdef HAVE_READLINKAT
-		if (a->entry_wd_fd >=3D 0)
-			lnklen =3D readlinkat(a->entry_wd_fd, path,
-			    linkbuffer, linkbuffer_len);
-		else
+			lnklen =3D readlinkat(a->tree_current_dir_fd(a->tree),
+			    path, linkbuffer, linkbuffer_len);
+#else
+			if (a->tree_enter_working_dir(a->tree) !=3D 0) {
+				archive_set_error(&a->archive, errno,
+				    "Couldn't read link data");
+				free(linkbuffer);
+				return (ARCHIVE_FAILED);
+			}
+			lnklen =3D readlink(path, linkbuffer, linkbuffer_len);
 #endif /* HAVE_READLINKAT */
-		lnklen =3D readlink(path, linkbuffer, linkbuffer_len);
+		} else
+			lnklen =3D readlink(path, linkbuffer, linkbuffer_len);
 		if (lnklen < 0) {
 			archive_set_error(&a->archive, errno,
 			    "Couldn't read link data");
@@ -229,14 +245,16 @@
 	}
 #endif /* HAVE_READLINK || HAVE_READLINKAT */
=20
-	r =3D setup_acls_posix1e(a, entry, fd);
-	r1 =3D setup_xattrs(a, entry, fd);
+	r =3D setup_acls(a, entry, &fd);
+	r1 =3D setup_xattrs(a, entry, &fd);
 	if (r1 < r)
 		r =3D r1;
-	r1 =3D setup_mac_metadata(a, entry, fd);
-	if (r1 < r)
-		r =3D r1;
-	r1 =3D setup_sparse(a, entry, fd);
+	if (a->enable_copyfile) {
+		r1 =3D setup_mac_metadata(a, entry, &fd);
+		if (r1 < r)
+			r =3D r1;
+	}
+	r1 =3D setup_sparse(a, entry, &fd);
 	if (r1 < r)
 		r =3D r1;
=20
@@ -262,7 +280,7 @@
  */
 static int
 setup_mac_metadata(struct archive_read_disk *a,
-    struct archive_entry *entry, int fd)
+    struct archive_entry *entry, int *fd)
 {
 	int tempfd =3D -1;
 	int copyfile_flags =3D COPYFILE_NOFOLLOW | COPYFILE_ACL | COPYFILE_XATTR;
@@ -272,6 +290,7 @@
 	int have_attrs;
 	const char *name, *tempdir, *tempfile =3D NULL;
=20
+	(void)fd; /* UNUSED */
 	name =3D archive_entry_sourcepath(entry);
 	if (name =3D=3D NULL)
 		name =3D archive_entry_pathname(entry);
@@ -281,6 +300,14 @@
 		return (ARCHIVE_WARN);
 	}
=20
+	if (a->tree !=3D NULL) {
+		if (a->tree_enter_working_dir(a->tree) !=3D 0) {
+			archive_set_error(&a->archive, errno,
+				    "Couldn't change dir");
+				return (ARCHIVE_FAILED);
+		}
+	}
+
 	/* Short-circuit if there's nothing to do. */
 	have_attrs =3D copyfile(name, NULL, 0, copyfile_flags | COPYFILE_CHECK);
 	if (have_attrs =3D=3D -1) {
@@ -351,7 +378,7 @@
  */
 static int
 setup_mac_metadata(struct archive_read_disk *a,
-    struct archive_entry *entry, int fd)
+    struct archive_entry *entry, int *fd)
 {
 	(void)a; /* UNUSED */
 	(void)entry; /* UNUSED */
@@ -362,15 +389,16 @@
=20
=20
 #ifdef HAVE_POSIX_ACL
-static void setup_acl_posix1e(struct archive_read_disk *a,
+static int translate_acl(struct archive_read_disk *a,
     struct archive_entry *entry, acl_t acl, int archive_entry_acl_type);
=20
 static int
-setup_acls_posix1e(struct archive_read_disk *a,
-    struct archive_entry *entry, int fd)
+setup_acls(struct archive_read_disk *a,
+    struct archive_entry *entry, int *fd)
 {
 	const char	*accpath;
 	acl_t		 acl;
+	int		r;
=20
 	accpath =3D archive_entry_sourcepath(entry);
 	if (accpath =3D=3D NULL)
@@ -378,9 +406,38 @@
=20
 	archive_entry_acl_clear(entry);
=20
+	/* Try NFS4 ACL first. */
+	if (*fd >=3D 0)
+		acl =3D acl_get_fd(*fd);
+#if HAVE_ACL_GET_LINK_NP
+	else if (!a->follow_symlinks)
+		acl =3D acl_get_link_np(accpath, ACL_TYPE_NFS4);
+#else
+	else if ((!a->follow_symlinks)
+	    && (archive_entry_filetype(entry) =3D=3D AE_IFLNK))
+		/* We can't get the ACL of a symlink, so we assume it can't
+		   have one. */
+		acl =3D NULL;
+#endif
+	else
+		acl =3D acl_get_file(accpath, ACL_TYPE_NFS4);
+#if HAVE_ACL_IS_TRIVIAL_NP
+	/* Ignore "trivial" ACLs that just mirror the file mode. */
+	acl_is_trivial_np(acl, &r);
+	if (r) {
+		acl_free(acl);
+		acl =3D NULL;
+	}
+#endif
+	if (acl !=3D NULL) {
+		translate_acl(a, entry, acl, ARCHIVE_ENTRY_ACL_TYPE_NFS4);
+		acl_free(acl);
+		return (ARCHIVE_OK);
+	}
+
 	/* Retrieve access ACL from file. */
-	if (fd >=3D 0)
-		acl =3D acl_get_fd(fd);
+	if (*fd >=3D 0)
+		acl =3D acl_get_fd(*fd);
 #if HAVE_ACL_GET_LINK_NP
 	else if (!a->follow_symlinks)
 		acl =3D acl_get_link_np(accpath, ACL_TYPE_ACCESS);
@@ -394,7 +451,7 @@
 	else
 		acl =3D acl_get_file(accpath, ACL_TYPE_ACCESS);
 	if (acl !=3D NULL) {
-		setup_acl_posix1e(a, entry, acl,
+		translate_acl(a, entry, acl,
 		    ARCHIVE_ENTRY_ACL_TYPE_ACCESS);
 		acl_free(acl);
 	}
@@ -403,7 +460,7 @@
 	if (S_ISDIR(archive_entry_mode(entry))) {
 		acl =3D acl_get_file(accpath, ACL_TYPE_DEFAULT);
 		if (acl !=3D NULL) {
-			setup_acl_posix1e(a, entry, acl,
+			translate_acl(a, entry, acl,
 			    ARCHIVE_ENTRY_ACL_TYPE_DEFAULT);
 			acl_free(acl);
 		}
@@ -412,68 +469,181 @@
 }
=20
 /*
- * Translate POSIX.1e ACL into libarchive internal structure.
+ * Translate system ACL into libarchive internal structure.
  */
-static void
-setup_acl_posix1e(struct archive_read_disk *a,
-    struct archive_entry *entry, acl_t acl, int archive_entry_acl_type)
+
+static struct {
+        int archive_perm;
+        int platform_perm;
+} acl_perm_map[] =3D {
+        {ARCHIVE_ENTRY_ACL_EXECUTE, ACL_EXECUTE},
+        {ARCHIVE_ENTRY_ACL_WRITE, ACL_WRITE},
+        {ARCHIVE_ENTRY_ACL_READ, ACL_READ},
+        {ARCHIVE_ENTRY_ACL_READ_DATA, ACL_READ_DATA},
+        {ARCHIVE_ENTRY_ACL_LIST_DIRECTORY, ACL_LIST_DIRECTORY},
+        {ARCHIVE_ENTRY_ACL_WRITE_DATA, ACL_WRITE_DATA},
+        {ARCHIVE_ENTRY_ACL_ADD_FILE, ACL_ADD_FILE},
+        {ARCHIVE_ENTRY_ACL_APPEND_DATA, ACL_APPEND_DATA},
+        {ARCHIVE_ENTRY_ACL_ADD_SUBDIRECTORY, ACL_ADD_SUBDIRECTORY},
+        {ARCHIVE_ENTRY_ACL_READ_NAMED_ATTRS, ACL_READ_NAMED_ATTRS},
+        {ARCHIVE_ENTRY_ACL_WRITE_NAMED_ATTRS, ACL_WRITE_NAMED_ATTRS},
+        {ARCHIVE_ENTRY_ACL_DELETE_CHILD, ACL_DELETE_CHILD},
+        {ARCHIVE_ENTRY_ACL_READ_ATTRIBUTES, ACL_READ_ATTRIBUTES},
+        {ARCHIVE_ENTRY_ACL_WRITE_ATTRIBUTES, ACL_WRITE_ATTRIBUTES},
+        {ARCHIVE_ENTRY_ACL_DELETE, ACL_DELETE},
+        {ARCHIVE_ENTRY_ACL_READ_ACL, ACL_READ_ACL},
+        {ARCHIVE_ENTRY_ACL_WRITE_ACL, ACL_WRITE_ACL},
+        {ARCHIVE_ENTRY_ACL_WRITE_OWNER, ACL_WRITE_OWNER},
+        {ARCHIVE_ENTRY_ACL_SYNCHRONIZE, ACL_SYNCHRONIZE}
+};
+
+static struct {
+        int archive_inherit;
+        int platform_inherit;
+} acl_inherit_map[] =3D {
+        {ARCHIVE_ENTRY_ACL_ENTRY_FILE_INHERIT, ACL_ENTRY_FILE_INHERIT},
+	{ARCHIVE_ENTRY_ACL_ENTRY_DIRECTORY_INHERIT, ACL_ENTRY_DIRECTORY_INHERIT},
+	{ARCHIVE_ENTRY_ACL_ENTRY_NO_PROPAGATE_INHERIT, ACL_ENTRY_NO_PROPAGATE_INH=
ERIT},
+	{ARCHIVE_ENTRY_ACL_ENTRY_INHERIT_ONLY, ACL_ENTRY_INHERIT_ONLY}
+};
+
+static int
+translate_acl(struct archive_read_disk *a,
+    struct archive_entry *entry, acl_t acl, int default_entry_acl_type)
 {
 	acl_tag_t	 acl_tag;
+	acl_entry_type_t acl_type;
+	acl_flagset_t	 acl_flagset;
 	acl_entry_t	 acl_entry;
 	acl_permset_t	 acl_permset;
+	int		 brand, i, r, entry_acl_type;
 	int		 s, ae_id, ae_tag, ae_perm;
 	const char	*ae_name;
=20
+
+	// FreeBSD "brands" ACLs as POSIX.1e or NFSv4
+	// Make sure the "brand" on this ACL is consistent
+	// with the default_entry_acl_type bits provided.
+	acl_get_brand_np(acl, &brand);
+	switch (brand) {
+	case ACL_BRAND_POSIX:
+		switch (default_entry_acl_type) {
+		case ARCHIVE_ENTRY_ACL_TYPE_ACCESS:
+		case ARCHIVE_ENTRY_ACL_TYPE_DEFAULT:
+			entry_acl_type =3D default_entry_acl_type;
+			break;
+		default:
+			// XXX set warning message?
+			return ARCHIVE_FAILED;
+		}
+		break;
+	case ACL_BRAND_NFS4:
+		if (default_entry_acl_type & ~ARCHIVE_ENTRY_ACL_TYPE_NFS4) {
+			// XXX set warning message?
+			return ARCHIVE_FAILED;
+		}
+		break;
+	default:
+		// XXX set warning message?
+		return ARCHIVE_FAILED;
+		break;
+	}
+
+
 	s =3D acl_get_entry(acl, ACL_FIRST_ENTRY, &acl_entry);
 	while (s =3D=3D 1) {
 		ae_id =3D -1;
 		ae_name =3D NULL;
+		ae_perm =3D 0;
=20
 		acl_get_tag_type(acl_entry, &acl_tag);
-		if (acl_tag =3D=3D ACL_USER) {
+		switch (acl_tag) {
+		case ACL_USER:
 			ae_id =3D (int)*(uid_t *)acl_get_qualifier(acl_entry);
 			ae_name =3D archive_read_disk_uname(&a->archive, ae_id);
 			ae_tag =3D ARCHIVE_ENTRY_ACL_USER;
-		} else if (acl_tag =3D=3D ACL_GROUP) {
+			break;
+		case ACL_GROUP:
 			ae_id =3D (int)*(gid_t *)acl_get_qualifier(acl_entry);
 			ae_name =3D archive_read_disk_gname(&a->archive, ae_id);
 			ae_tag =3D ARCHIVE_ENTRY_ACL_GROUP;
-		} else if (acl_tag =3D=3D ACL_MASK) {
+			break;
+		case ACL_MASK:
 			ae_tag =3D ARCHIVE_ENTRY_ACL_MASK;
-		} else if (acl_tag =3D=3D ACL_USER_OBJ) {
+			break;
+		case ACL_USER_OBJ:
 			ae_tag =3D ARCHIVE_ENTRY_ACL_USER_OBJ;
-		} else if (acl_tag =3D=3D ACL_GROUP_OBJ) {
+			break;
+		case ACL_GROUP_OBJ:
 			ae_tag =3D ARCHIVE_ENTRY_ACL_GROUP_OBJ;
-		} else if (acl_tag =3D=3D ACL_OTHER) {
+			break;
+		case ACL_OTHER:
 			ae_tag =3D ARCHIVE_ENTRY_ACL_OTHER;
-		} else {
+			break;
+		case ACL_EVERYONE:
+			ae_tag =3D ARCHIVE_ENTRY_ACL_EVERYONE;
+			break;
+		default:
 			/* Skip types that libarchive can't support. */
+			s =3D acl_get_entry(acl, ACL_NEXT_ENTRY, &acl_entry);
 			continue;
 		}
=20
+		// XXX acl type maps to allow/deny/audit/YYYY bits
+		// XXX acl_get_entry_type_np on FreeBSD returns EINVAL for
+		// non-NFSv4 ACLs
+		entry_acl_type =3D default_entry_acl_type;
+		r =3D acl_get_entry_type_np(acl_entry, &acl_type);
+		if (r =3D=3D 0) {
+			switch (acl_type) {
+			case ACL_ENTRY_TYPE_ALLOW:
+				entry_acl_type =3D ARCHIVE_ENTRY_ACL_TYPE_ALLOW;
+				break;
+			case ACL_ENTRY_TYPE_DENY:
+				entry_acl_type =3D ARCHIVE_ENTRY_ACL_TYPE_DENY;
+				break;
+			case ACL_ENTRY_TYPE_AUDIT:
+				entry_acl_type =3D ARCHIVE_ENTRY_ACL_TYPE_AUDIT;
+				break;
+			case ACL_ENTRY_TYPE_ALARM:
+				entry_acl_type =3D ARCHIVE_ENTRY_ACL_TYPE_ALARM;
+				break;
+			}
+		}
+
+		/*
+		 * Libarchive stores "flag" (NFSv4 inheritance bits)
+		 * in the ae_perm bitmap.
+		 */
+		acl_get_flagset_np(acl_entry, &acl_flagset);
+                for (i =3D 0; i < (int)(sizeof(acl_inherit_map) / sizeof(a=
cl_inherit_map[0])); ++i) {
+			if (acl_get_flag_np(acl_flagset,
+					    acl_inherit_map[i].platform_inherit))
+				ae_perm |=3D acl_inherit_map[i].archive_inherit;
+
+                }
+
 		acl_get_permset(acl_entry, &acl_permset);
-		ae_perm =3D 0;
-		/*
-		 * acl_get_perm() is spelled differently on different
-		 * platforms; see above.
-		 */
-		if (ACL_GET_PERM(acl_permset, ACL_EXECUTE))
-			ae_perm |=3D ARCHIVE_ENTRY_ACL_EXECUTE;
-		if (ACL_GET_PERM(acl_permset, ACL_READ))
-			ae_perm |=3D ARCHIVE_ENTRY_ACL_READ;
-		if (ACL_GET_PERM(acl_permset, ACL_WRITE))
-			ae_perm |=3D ARCHIVE_ENTRY_ACL_WRITE;
+                for (i =3D 0; i < (int)(sizeof(acl_perm_map) / sizeof(acl_=
perm_map[0])); ++i) {
+			/*
+			 * acl_get_perm() is spelled differently on different
+			 * platforms; see above.
+			 */
+			if (ACL_GET_PERM(acl_permset, acl_perm_map[i].platform_perm))
+				ae_perm |=3D acl_perm_map[i].archive_perm;
+		}
=20
-		archive_entry_acl_add_entry(entry,
-		    archive_entry_acl_type, ae_perm, ae_tag,
-		    ae_id, ae_name);
+		archive_entry_acl_add_entry(entry, entry_acl_type,
+					    ae_perm, ae_tag,
+					    ae_id, ae_name);
=20
 		s =3D acl_get_entry(acl, ACL_NEXT_ENTRY, &acl_entry);
 	}
+	return (ARCHIVE_OK);
 }
 #else
 static int
-setup_acls_posix1e(struct archive_read_disk *a,
+setup_acls(struct archive_read_disk *a,
     struct archive_entry *entry, int fd)
 {
 	(void)a;      /* UNUSED */
@@ -568,7 +738,7 @@
=20
 static int
 setup_xattrs(struct archive_read_disk *a,
-    struct archive_entry *entry, int fd)
+    struct archive_entry *entry, int *fd)
 {
 	char *list, *p;
 	const char *path;
@@ -578,16 +748,30 @@
 	if (path =3D=3D NULL)
 		path =3D archive_entry_pathname(entry);
=20
+	if (*fd < 0 && a->tree !=3D NULL) {
+		if (a->follow_symlinks ||
+		    archive_entry_filetype(entry) !=3D AE_IFLNK)
+			*fd =3D a->open_on_current_dir(a->tree, path,
+				O_RDONLY | O_NONBLOCK);
+		if (*fd < 0) {
+			if (a->tree_enter_working_dir(a->tree) !=3D 0) {
+				archive_set_error(&a->archive, errno,
+				    "Couldn't access %s", path);
+				return (ARCHIVE_FAILED);
+			}
+		}
+	}
+
 #if HAVE_FLISTXATTR
-	if (fd >=3D 0)
-		list_size =3D flistxattr(fd, NULL, 0);
+	if (*fd >=3D 0)
+		list_size =3D flistxattr(*fd, NULL, 0);
 	else if (!a->follow_symlinks)
 		list_size =3D llistxattr(path, NULL, 0);
 	else
 		list_size =3D listxattr(path, NULL, 0);
 #elif HAVE_FLISTEA
-	if (fd >=3D 0)
-		list_size =3D flistea(fd, NULL, 0);
+	if (*fd >=3D 0)
+		list_size =3D flistea(*fd, NULL, 0);
 	else if (!a->follow_symlinks)
 		list_size =3D llistea(path, NULL, 0);
 	else
@@ -611,15 +795,15 @@
 	}
=20
 #if HAVE_FLISTXATTR
-	if (fd >=3D 0)
-		list_size =3D flistxattr(fd, list, list_size);
+	if (*fd >=3D 0)
+		list_size =3D flistxattr(*fd, list, list_size);
 	else if (!a->follow_symlinks)
 		list_size =3D llistxattr(path, list, list_size);
 	else
 		list_size =3D listxattr(path, list, list_size);
 #elif HAVE_FLISTEA
-	if (fd >=3D 0)
-		list_size =3D flistea(fd, list, list_size);
+	if (*fd >=3D 0)
+		list_size =3D flistea(*fd, list, list_size);
 	else if (!a->follow_symlinks)
 		list_size =3D llistea(path, list, list_size);
 	else
@@ -637,7 +821,7 @@
 		if (strncmp(p, "system.", 7) =3D=3D 0 ||
 				strncmp(p, "xfsroot.", 8) =3D=3D 0)
 			continue;
-		setup_xattr(a, entry, p, fd);
+		setup_xattr(a, entry, p, *fd);
 	}
=20
 	free(list);
@@ -698,6 +882,7 @@
 		size =3D extattr_get_file(accpath, namespace, name, value, size);
=20
 	if (size =3D=3D -1) {
+		free(value);
 		archive_set_error(&a->archive, errno,
 		    "Couldn't read extended attribute");
 		return (ARCHIVE_WARN);
@@ -711,7 +896,7 @@
=20
 static int
 setup_xattrs(struct archive_read_disk *a,
-    struct archive_entry *entry, int fd)
+    struct archive_entry *entry, int *fd)
 {
 	char buff[512];
 	char *list, *p;
@@ -723,8 +908,22 @@
 	if (path =3D=3D NULL)
 		path =3D archive_entry_pathname(entry);
=20
-	if (fd >=3D 0)
-		list_size =3D extattr_list_fd(fd, namespace, NULL, 0);
+	if (*fd < 0 && a->tree !=3D NULL) {
+		if (a->follow_symlinks ||
+		    archive_entry_filetype(entry) !=3D AE_IFLNK)
+			*fd =3D a->open_on_current_dir(a->tree, path,
+				O_RDONLY | O_NONBLOCK);
+		if (*fd < 0) {
+			if (a->tree_enter_working_dir(a->tree) !=3D 0) {
+				archive_set_error(&a->archive, errno,
+				    "Couldn't access %s", path);
+				return (ARCHIVE_FAILED);
+			}
+		}
+	}
+
+	if (*fd >=3D 0)
+		list_size =3D extattr_list_fd(*fd, namespace, NULL, 0);
 	else if (!a->follow_symlinks)
 		list_size =3D extattr_list_link(path, namespace, NULL, 0);
 	else
@@ -746,8 +945,8 @@
 		return (ARCHIVE_FATAL);
 	}
=20
-	if (fd >=3D 0)
-		list_size =3D extattr_list_fd(fd, namespace, list, list_size);
+	if (*fd >=3D 0)
+		list_size =3D extattr_list_fd(*fd, namespace, list, list_size);
 	else if (!a->follow_symlinks)
 		list_size =3D extattr_list_link(path, namespace, list, list_size);
 	else
@@ -769,7 +968,7 @@
 		name =3D buff + strlen(buff);
 		memcpy(name, p + 1, len);
 		name[len] =3D '\0';
-		setup_xattr(a, entry, namespace, name, buff, fd);
+		setup_xattr(a, entry, namespace, name, buff, *fd);
 		p +=3D 1 + len;
 	}
=20
@@ -784,7 +983,7 @@
  */
 static int
 setup_xattrs(struct archive_read_disk *a,
-    struct archive_entry *entry, int fd)
+    struct archive_entry *entry, int *fd)
 {
 	(void)a;     /* UNUSED */
 	(void)entry; /* UNUSED */
@@ -813,14 +1012,13 @@
=20
 static int
 setup_sparse(struct archive_read_disk *a,
-    struct archive_entry *entry, int fd)
+    struct archive_entry *entry, int *fd)
 {
 	char buff[4096];
 	struct fiemap *fm;
 	struct fiemap_extent *fe;
 	int64_t size;
 	int count, do_fiemap;
-	int initial_fd =3D fd;
 	int exit_sts =3D ARCHIVE_OK;
=20
 	if (archive_entry_filetype(entry) !=3D AE_IFREG
@@ -828,14 +1026,18 @@
 	    || archive_entry_hardlink(entry) !=3D NULL)
 		return (ARCHIVE_OK);
=20
-	if (fd < 0) {
+	if (*fd < 0) {
 		const char *path;
=20
 		path =3D archive_entry_sourcepath(entry);
 		if (path =3D=3D NULL)
 			path =3D archive_entry_pathname(entry);
-		fd =3D open(path, O_RDONLY | O_NONBLOCK);
-		if (fd < 0) {
+		if (a->tree !=3D NULL)
+			*fd =3D a->open_on_current_dir(a->tree, path,
+				O_RDONLY | O_NONBLOCK);
+		else
+			*fd =3D open(path, O_RDONLY | O_NONBLOCK);
+		if (*fd < 0) {
 			archive_set_error(&a->archive, errno,
 			    "Can't open `%s'", path);
 			return (ARCHIVE_FAILED);
@@ -853,18 +1055,11 @@
 	for (;;) {
 		int i, r;
=20
-		r =3D ioctl(fd, FS_IOC_FIEMAP, fm);=20
+		r =3D ioctl(*fd, FS_IOC_FIEMAP, fm);=20
 		if (r < 0) {
-			/* When errno is ENOTTY, it is better we should
-			 * return ARCHIVE_OK because an earlier version
-			 *(<2.6.28) cannot perfom FS_IOC_FIEMAP.
-			 * We should also check if errno is EOPNOTSUPP,
-			 * it means "Operation not supported". */
-			if (errno !=3D ENOTTY && errno !=3D EOPNOTSUPP) {
-				archive_set_error(&a->archive, errno,
-				    "FIEMAP failed");
-				exit_sts =3D ARCHIVE_FAILED;
-			}
+			/* When something error happens, it is better we
+			 * should return ARCHIVE_OK because an earlier
+			 * version(<2.6.28) cannot perfom FS_IOC_FIEMAP. */
 			goto exit_setup_sparse;
 		}
 		if (fm->fm_mapped_extents =3D=3D 0)
@@ -896,8 +1091,6 @@
 			break;
 	}
 exit_setup_sparse:
-	if (initial_fd !=3D fd)
-		close(fd);
 	return (exit_sts);
 }
=20
@@ -909,10 +1102,9 @@
=20
 static int
 setup_sparse(struct archive_read_disk *a,
-    struct archive_entry *entry, int fd)
+    struct archive_entry *entry, int *fd)
 {
 	int64_t size;
-	int initial_fd =3D fd;
 	off_t initial_off; /* FreeBSD/Solaris only, so off_t okay here */
 	off_t off_s, off_e; /* FreeBSD/Solaris only, so off_t okay here */
 	int exit_sts =3D ARCHIVE_OK;
@@ -923,22 +1115,38 @@
 		return (ARCHIVE_OK);
=20
 	/* Does filesystem support the reporting of hole ? */
-	if (fd >=3D 0) {
-		if (fpathconf(fd, _PC_MIN_HOLE_SIZE) <=3D 0)
+	if (*fd < 0 && a->tree !=3D NULL) {
+		const char *path;
+
+		path =3D archive_entry_sourcepath(entry);
+		if (path =3D=3D NULL)
+			path =3D archive_entry_pathname(entry);
+		*fd =3D a->open_on_current_dir(a->tree, path,
+				O_RDONLY | O_NONBLOCK);
+		if (*fd < 0) {
+			archive_set_error(&a->archive, errno,
+			    "Can't open `%s'", path);
+			return (ARCHIVE_FAILED);
+		}
+	}
+
+	if (*fd >=3D 0) {
+		if (fpathconf(*fd, _PC_MIN_HOLE_SIZE) <=3D 0)
 			return (ARCHIVE_OK);
-		initial_off =3D lseek(fd, 0, SEEK_CUR);
+		initial_off =3D lseek(*fd, 0, SEEK_CUR);
 		if (initial_off !=3D 0)
-			lseek(fd, 0, SEEK_SET);
+			lseek(*fd, 0, SEEK_SET);
 	} else {
 		const char *path;
=20
 		path =3D archive_entry_sourcepath(entry);
 		if (path =3D=3D NULL)
 			path =3D archive_entry_pathname(entry);
+		=09
 		if (pathconf(path, _PC_MIN_HOLE_SIZE) <=3D 0)
 			return (ARCHIVE_OK);
-		fd =3D open(path, O_RDONLY | O_NONBLOCK);
-		if (fd < 0) {
+		*fd =3D open(path, O_RDONLY | O_NONBLOCK);
+		if (*fd < 0) {
 			archive_set_error(&a->archive, errno,
 			    "Can't open `%s'", path);
 			return (ARCHIVE_FAILED);
@@ -949,7 +1157,7 @@
 	off_s =3D 0;
 	size =3D archive_entry_size(entry);
 	while (off_s < size) {
-		off_s =3D lseek(fd, off_s, SEEK_DATA);
+		off_s =3D lseek(*fd, off_s, SEEK_DATA);
 		if (off_s =3D=3D (off_t)-1) {
 			if (errno =3D=3D ENXIO)
 				break;/* no more hole */
@@ -958,10 +1166,10 @@
 			exit_sts =3D ARCHIVE_FAILED;
 			goto exit_setup_sparse;
 		}
-		off_e =3D lseek(fd, off_s, SEEK_HOLE);
-		if (off_s =3D=3D (off_t)-1) {
+		off_e =3D lseek(*fd, off_s, SEEK_HOLE);
+		if (off_e =3D=3D (off_t)-1) {
 			if (errno =3D=3D ENXIO) {
-				off_e =3D lseek(fd, 0, SEEK_END);
+				off_e =3D lseek(*fd, 0, SEEK_END);
 				if (off_e !=3D (off_t)-1)
 					break;/* no more data */
 			}
@@ -977,10 +1185,7 @@
 		off_s =3D off_e;
 	}
 exit_setup_sparse:
-	if (initial_fd !=3D fd)
-		close(fd);
-	else
-		lseek(fd, initial_off, SEEK_SET);
+	lseek(*fd, initial_off, SEEK_SET);
 	return (exit_sts);
 }
=20
@@ -991,7 +1196,7 @@
  */
 static int
 setup_sparse(struct archive_read_disk *a,
-    struct archive_entry *entry, int fd)
+    struct archive_entry *entry, int *fd)
 {
 	(void)a;     /* UNUSED */
 	(void)entry; /* UNUSED */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_read_disk_posix.c
--- a/head/contrib/libarchive/libarchive/archive_read_disk_posix.c	Mon Jul =
30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_read_disk_posix.c	Fri Aug =
10 14:19:25 2012 +0300
@@ -1,6 +1,6 @@
 /*-
  * Copyright (c) 2003-2009 Tim Kientzle
- * Copyright (c) 2010,2011 Michihiro NAKAJIMA
+ * Copyright (c) 2010-2012 Michihiro NAKAJIMA
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -52,6 +52,19 @@
 #ifdef HAVE_LINUX_MAGIC_H
 #include <linux/magic.h>
 #endif
+#ifdef HAVE_LINUX_FS_H
+#include <linux/fs.h>
+#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 <linux/ext2_fs.h>      /* for Linux file flags */
+#endif
+#if defined(HAVE_EXT2FS_EXT2_FS_H) && !defined(__CYGWIN__)
+#include <ext2fs/ext2_fs.h>     /* Linux file flags, broken on Cygwin */
+#endif
 #ifdef HAVE_DIRECT_H
 #include <direct.h>
 #endif
@@ -76,6 +89,9 @@
 #ifdef HAVE_UNISTD_H
 #include <unistd.h>
 #endif
+#ifdef HAVE_SYS_IOCTL_H
+#include <sys/ioctl.h>
+#endif
=20
 #include "archive.h"
 #include "archive_string.h"
@@ -222,6 +238,7 @@
 	char			 symlink_mode;
 	struct filesystem	*current_filesystem;
 	struct filesystem	*filesystem_table;
+	int			 initial_filesystem_id;
 	int			 current_filesystem_id;
 	int			 max_filesystem_id;
 	int			 allocated_filesytem;
@@ -240,6 +257,7 @@
 #define	onWorkingDir	64 /* We are on the working dir where we are
 			    * reading directory entry at this time. */
 #define	needsRestoreTimes 128
+#define	onInitialDir	256 /* We are on the initial dir. */
=20
 static int
 tree_dir_next_posix(struct tree *t);
@@ -342,6 +360,7 @@
 static int	setup_sparse(struct archive_read_disk *, struct archive_entry *=
);
 static int	close_and_restore_time(int fd, struct tree *,
 		    struct restore_time *);
+static int	open_on_current_dir(struct tree *, const char *, int);
=20
=20
 static struct archive_vtable *
@@ -430,16 +449,19 @@
 {
 	struct archive_read_disk *a;
=20
-	a =3D (struct archive_read_disk *)malloc(sizeof(*a));
+	a =3D (struct archive_read_disk *)calloc(1, sizeof(*a));
 	if (a =3D=3D NULL)
 		return (NULL);
-	memset(a, 0, sizeof(*a));
 	a->archive.magic =3D ARCHIVE_READ_DISK_MAGIC;
 	a->archive.state =3D ARCHIVE_STATE_NEW;
 	a->archive.vtable =3D archive_read_disk_vtable();
 	a->lookup_uname =3D trivial_lookup_uname;
 	a->lookup_gname =3D trivial_lookup_gname;
-	a->entry_wd_fd =3D -1;
+	a->enable_copyfile =3D 1;
+	a->traverse_mount_points =3D 1;
+	a->open_on_current_dir =3D open_on_current_dir;
+	a->tree_current_dir_fd =3D tree_current_dir_fd;
+	a->tree_enter_working_dir =3D tree_enter_working_dir;
 	return (&a->archive);
 }
=20
@@ -555,6 +577,37 @@
 #endif
 }
=20
+int
+archive_read_disk_set_behavior(struct archive *_a, int flags)
+{
+	struct archive_read_disk *a =3D (struct archive_read_disk *)_a;
+	int r =3D ARCHIVE_OK;
+
+	archive_check_magic(_a, ARCHIVE_READ_DISK_MAGIC,
+	    ARCHIVE_STATE_ANY, "archive_read_disk_honor_nodump");
+
+	if (flags & ARCHIVE_READDISK_RESTORE_ATIME)
+		r =3D archive_read_disk_set_atime_restored(_a);
+	else {
+		a->restore_time =3D 0;
+		if (a->tree !=3D NULL)
+			a->tree->flags &=3D ~needsRestoreTimes;
+	}
+	if (flags & ARCHIVE_READDISK_HONOR_NODUMP)
+		a->honor_nodump =3D 1;
+	else
+		a->honor_nodump =3D 0;
+	if (flags & ARCHIVE_READDISK_MAC_COPYFILE)
+		a->enable_copyfile =3D 1;
+	else
+		a->enable_copyfile =3D 0;
+	if (flags & ARCHIVE_READDISK_NO_TRAVERSE_MOUNTS)
+		a->traverse_mount_points =3D 0;
+	else
+		a->traverse_mount_points =3D 1;
+	return (r);
+}
+
 /*
  * Trivial implementations of gname/uname lookup functions.
  * These are normally overridden by the client, but these stub
@@ -685,13 +738,8 @@
 			flags |=3D O_NOATIME;
 		do {
 #endif
-#ifdef HAVE_OPENAT
-			t->entry_fd =3D openat(tree_current_dir_fd(t),
+			t->entry_fd =3D open_on_current_dir(t,
 			    tree_current_access_path(t), flags);
-#else
-			tree_enter_working_dir(t);
-			t->entry_fd =3D open(tree_current_access_path(t), flags);
-#endif
 #if defined(O_NOATIME)
 			/*
 			 * When we did open the file with O_NOATIME flag,
@@ -802,29 +850,17 @@
 }
=20
 static int
-_archive_read_next_header2(struct archive *_a, struct archive_entry *entry)
+next_entry(struct archive_read_disk *a, struct tree *t,
+    struct archive_entry *entry)
 {
-	struct archive_read_disk *a =3D (struct archive_read_disk *)_a;
-	struct tree *t;
 	const struct stat *st; /* info to use for this entry */
 	const struct stat *lst;/* lstat() information */
-	int descend, fd =3D -1, r;
+	const char *name;
+	int descend, r;
=20
-	archive_check_magic(_a, ARCHIVE_READ_DISK_MAGIC,
-	    ARCHIVE_STATE_HEADER | ARCHIVE_STATE_DATA,
-	    "archive_read_next_header2");
-
-	t =3D a->tree;
-	if (t->entry_fd >=3D 0) {
-		close_and_restore_time(t->entry_fd, t, &t->restore_time);
-		t->entry_fd =3D -1;
-	}
-#if !(defined(HAVE_OPENAT) && defined(HAVE_FSTATAT) && defined(HAVE_FDOPEN=
DIR))
-	/* Restore working directory. */
-	tree_enter_working_dir(t);
-#endif
 	st =3D NULL;
 	lst =3D NULL;
+	t->descend =3D 0;
 	do {
 		switch (tree_next(t)) {
 		case TREE_ERROR_FATAL:
@@ -859,6 +895,38 @@
 		}=09
 	} while (lst =3D=3D NULL);
=20
+#ifdef __APPLE__
+	if (a->enable_copyfile) {
+		/* If we're using copyfile(), ignore "._XXX" files. */
+		const char *bname =3D strrchr(tree_current_path(t), '/');
+		if (bname =3D=3D NULL)
+			bname =3D tree_current_path(t);
+		else
+			++bname;
+		if (bname[0] =3D=3D '.' && bname[1] =3D=3D '_')
+			return (ARCHIVE_RETRY);
+	}
+#endif
+
+	archive_entry_copy_pathname(entry, tree_current_path(t));
+	/*
+	 * Perform path matching.
+	 */
+	if (a->matching) {
+		r =3D archive_match_path_excluded(a->matching, entry);
+		if (r < 0) {
+			archive_set_error(&(a->archive), errno,
+			    "Faild : %s", archive_error_string(a->matching));
+			return (r);
+		}
+		if (r) {
+			if (a->excluded_cb_func)
+				a->excluded_cb_func(&(a->archive),
+				    a->excluded_cb_data, entry);
+			return (ARCHIVE_RETRY);
+		}
+	}
+
 	/*
 	 * Distinguish 'L'/'P'/'H' symlink following.
 	 */
@@ -897,13 +965,44 @@
 		tree_enter_initial_dir(t);
 		return (ARCHIVE_FATAL);
 	}
+	if (t->initial_filesystem_id =3D=3D -1)
+		t->initial_filesystem_id =3D t->current_filesystem_id;
+	if (!a->traverse_mount_points) {
+		if (t->initial_filesystem_id !=3D t->current_filesystem_id)
+			return (ARCHIVE_RETRY);
+	}
 	t->descend =3D descend;
=20
-	archive_entry_set_pathname(entry, tree_current_path(t));
-	archive_entry_copy_sourcepath(entry, tree_current_access_path(t));
+	/*
+	 * Honor nodump flag.
+	 * If the file is marked with nodump flag, do not return this entry.
+	 */
+	if (a->honor_nodump) {
+#if defined(HAVE_STRUCT_STAT_ST_FLAGS) && defined(UF_NODUMP)
+		if (st->st_flags & UF_NODUMP)
+			return (ARCHIVE_RETRY);
+#elif defined(EXT2_IOC_GETFLAGS) && defined(EXT2_NODUMP_FL) &&\
+      defined(HAVE_WORKING_EXT2_IOC_GETFLAGS)
+		if (S_ISREG(st->st_mode) || S_ISDIR(st->st_mode)) {
+			unsigned long stflags;
+
+			t->entry_fd =3D open_on_current_dir(t,
+			    tree_current_access_path(t), O_RDONLY | O_NONBLOCK);
+			if (t->entry_fd >=3D 0) {
+				r =3D ioctl(t->entry_fd, EXT2_IOC_GETFLAGS,
+					&stflags);
+				if (r =3D=3D 0 && (stflags & EXT2_NODUMP_FL) !=3D 0)
+					return (ARCHIVE_RETRY);
+			}
+		}
+#endif
+	}
+
 	archive_entry_copy_stat(entry, st);
=20
-	/* Save the times to be restored. */
+	/* Save the times to be restored. This must be in before
+	 * calling archive_read_disk_descend() or any chance of it,
+	 * especially, invokng a callback. */
 	t->restore_time.mtime =3D archive_entry_mtime(entry);
 	t->restore_time.mtime_nsec =3D archive_entry_mtime_nsec(entry);
 	t->restore_time.atime =3D archive_entry_atime(entry);
@@ -911,39 +1010,102 @@
 	t->restore_time.filetype =3D archive_entry_filetype(entry);
 	t->restore_time.noatime =3D t->current_filesystem->noatime;
=20
-#if defined(HAVE_OPENAT) && defined(HAVE_FSTATAT) && defined(HAVE_FDOPENDI=
R)
 	/*
-	 * Open the current file to freely gather its metadata anywhere in
-	 * working directory.
-	 * Note: A symbolic link file cannot be opened with O_NOFOLLOW.
+	 * Perform time matching.
 	 */
-	if (a->follow_symlinks || archive_entry_filetype(entry) !=3D AE_IFLNK)
-		fd =3D openat(tree_current_dir_fd(t), tree_current_access_path(t),
-		    O_RDONLY | O_NONBLOCK);
-	/* Restore working directory if openat() operation failed or
-	 * the file is a symbolic link. */
-	if (fd < 0)
-		tree_enter_working_dir(t);
+	if (a->matching) {
+		r =3D archive_match_time_excluded(a->matching, entry);
+		if (r < 0) {
+			archive_set_error(&(a->archive), errno,
+			    "Faild : %s", archive_error_string(a->matching));
+			return (r);
+		}
+		if (r) {
+			if (a->excluded_cb_func)
+				a->excluded_cb_func(&(a->archive),
+				    a->excluded_cb_data, entry);
+			return (ARCHIVE_RETRY);
+		}
+	}
=20
-	/* The current direcotry fd is needed at
-	 * archive_read_disk_entry_from_file() function to read link data
-	 * with readlinkat(). */
-	a->entry_wd_fd =3D tree_current_dir_fd(t);
-#endif
+	/* Lookup uname/gname */
+	name =3D archive_read_disk_uname(&(a->archive), archive_entry_uid(entry));
+	if (name !=3D NULL)
+		archive_entry_copy_uname(entry, name);
+	name =3D archive_read_disk_gname(&(a->archive), archive_entry_gid(entry));
+	if (name !=3D NULL)
+		archive_entry_copy_gname(entry, name);
+
+	/*
+	 * Perform owner matching.
+	 */
+	if (a->matching) {
+		r =3D archive_match_owner_excluded(a->matching, entry);
+		if (r < 0) {
+			archive_set_error(&(a->archive), errno,
+			    "Faild : %s", archive_error_string(a->matching));
+			return (r);
+		}
+		if (r) {
+			if (a->excluded_cb_func)
+				a->excluded_cb_func(&(a->archive),
+				    a->excluded_cb_data, entry);
+			return (ARCHIVE_RETRY);
+		}
+	}
+
+	/*
+	 * Invoke a meta data filter callback.
+	 */
+	if (a->metadata_filter_func) {
+		if (!a->metadata_filter_func(&(a->archive),
+		    a->metadata_filter_data, entry))
+			return (ARCHIVE_RETRY);
+	}
=20
 	/*
 	 * Populate the archive_entry with metadata from the disk.
 	 */
-	r =3D archive_read_disk_entry_from_file(&(a->archive), entry, fd, st);
+	archive_entry_copy_sourcepath(entry, tree_current_access_path(t));
+	r =3D archive_read_disk_entry_from_file(&(a->archive), entry,
+		t->entry_fd, st);
=20
-	/* Close the file descriptor used for reding the current file
-	 * metadata at archive_read_disk_entry_from_file(). */
-	if (fd >=3D 0)
-		close(fd);
+	return (r);
+}
+
+static int
+_archive_read_next_header2(struct archive *_a, struct archive_entry *entry)
+{
+	struct archive_read_disk *a =3D (struct archive_read_disk *)_a;
+	struct tree *t;
+	int r;
+
+	archive_check_magic(_a, ARCHIVE_READ_DISK_MAGIC,
+	    ARCHIVE_STATE_HEADER | ARCHIVE_STATE_DATA,
+	    "archive_read_next_header2");
+
+	t =3D a->tree;
+	if (t->entry_fd >=3D 0) {
+		close_and_restore_time(t->entry_fd, t, &t->restore_time);
+		t->entry_fd =3D -1;
+	}
+
+	for (;;) {
+		r =3D next_entry(a, t, entry);
+		if (t->entry_fd >=3D 0) {
+			close(t->entry_fd);
+			t->entry_fd =3D -1;
+		}
+
+		if (r =3D=3D ARCHIVE_RETRY) {
+			archive_entry_clear(entry);
+			continue;
+		}
+		break;
+	}
=20
 	/* Return to the initial directory. */
 	tree_enter_initial_dir(t);
-	archive_entry_copy_sourcepath(entry, tree_current_path(t));
=20
 	/*
 	 * EOF and FATAL are persistent at this layer.  By
@@ -956,6 +1118,8 @@
 		break;
 	case ARCHIVE_OK:
 	case ARCHIVE_WARN:
+		/* Overwrite the sourcepath based on the initial directory. */
+		archive_entry_copy_sourcepath(entry, tree_current_path(t));
 		t->entry_total =3D 0;
 		if (archive_entry_filetype(entry) =3D=3D AE_IFREG) {
 			t->nlink =3D archive_entry_nlink(entry);
@@ -1018,6 +1182,48 @@
 	return (ARCHIVE_OK);
 }
=20
+int
+archive_read_disk_set_matching(struct archive *_a, struct archive *_ma,
+    void (*_excluded_func)(struct archive *, void *, struct archive_entry =
*),
+    void *_client_data)
+{
+	struct archive_read_disk *a =3D (struct archive_read_disk *)_a;
+	archive_check_magic(_a, ARCHIVE_READ_DISK_MAGIC,
+	    ARCHIVE_STATE_ANY, "archive_read_disk_set_matching");
+	a->matching =3D _ma;
+	a->excluded_cb_func =3D _excluded_func;
+	a->excluded_cb_data =3D _client_data;
+	return (ARCHIVE_OK);
+}
+
+int
+archive_read_disk_set_metadata_filter_callback(struct archive *_a,
+    int (*_metadata_filter_func)(struct archive *, void *,
+    struct archive_entry *), void *_client_data)
+{
+	struct archive_read_disk *a =3D (struct archive_read_disk *)_a;
+
+	archive_check_magic(_a, ARCHIVE_READ_DISK_MAGIC, ARCHIVE_STATE_ANY,
+	    "archive_read_disk_set_metadata_filter_callback");
+
+	a->metadata_filter_func =3D _metadata_filter_func;
+	a->metadata_filter_data =3D _client_data;
+	return (ARCHIVE_OK);
+}
+
+int
+archive_read_disk_can_descend(struct archive *_a)
+{
+	struct archive_read_disk *a =3D (struct archive_read_disk *)_a;
+	struct tree *t =3D a->tree;
+
+	archive_check_magic(_a, ARCHIVE_READ_DISK_MAGIC,
+	    ARCHIVE_STATE_HEADER | ARCHIVE_STATE_DATA,
+	    "archive_read_disk_can_descend");
+
+	return (t->visit_type =3D=3D TREE_REGULAR && t->descend);
+}
+
 /*
  * Called by the client to mark the directory just returned from
  * tree_next() as needing to be visited.
@@ -1028,14 +1234,12 @@
 	struct archive_read_disk *a =3D (struct archive_read_disk *)_a;
 	struct tree *t =3D a->tree;
=20
-	archive_check_magic(_a, ARCHIVE_READ_DISK_MAGIC, ARCHIVE_STATE_DATA,
+	archive_check_magic(_a, ARCHIVE_READ_DISK_MAGIC,
+	    ARCHIVE_STATE_HEADER | ARCHIVE_STATE_DATA,
 	    "archive_read_disk_descend");
=20
-	if (t->visit_type !=3D TREE_REGULAR || !t->descend) {
-		archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
-		    "Ignored the request descending the current object");
-		return (ARCHIVE_WARN);
-	}
+	if (t->visit_type !=3D TREE_REGULAR || !t->descend)
+		return (ARCHIVE_OK);
=20
 	if (tree_current_is_physical_dir(t)) {
 		tree_push(t, t->basename, t->current_filesystem_id,
@@ -1079,8 +1283,12 @@
 	archive_string_init(&path);
 	if (archive_string_append_from_wcs(&path, pathname,
 	    wcslen(pathname)) !=3D 0) {
-		archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
-		    "Can't convert a path to a char string");
+		if (errno =3D=3D ENOMEM)
+			archive_set_error(&a->archive, ENOMEM,
+			    "Can't allocate memory");
+		else
+			archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
+			    "Can't convert a path to a char string");
 		a->archive.state =3D ARCHIVE_STATE_FATAL;
 		ret =3D ARCHIVE_FATAL;
 	} else
@@ -1268,7 +1476,7 @@
 	t->current_filesystem->synthetic =3D -1;
 	t->current_filesystem->remote =3D -1;
 	if (tree_current_is_symblic_link_target(t)) {
-#if defined(HAVE_OPENAT) && defined(HAVE_FSTATAT) && defined(HAVE_FDOPENDI=
R)
+#if defined(HAVE_OPENAT)
 		/*
 		 * Get file system statistics on any directory
 		 * where current is.
@@ -1285,6 +1493,10 @@
 			xr =3D get_xfer_size(t, fd, NULL);
 		close(fd);
 #else
+		if (tree_enter_working_dir(t) !=3D 0) {
+			archive_set_error(&a->archive, errno, "fchdir failed");
+			return (ARCHIVE_FAILED);
+		}
 		r =3D statfs(tree_current_access_path(t), &sfs);
 		if (r =3D=3D 0)
 			xr =3D get_xfer_size(t, -1, tree_current_access_path(t));
@@ -1334,9 +1546,13 @@
 	t->current_filesystem->name_max =3D sfs.f_namemax;
 #else
 	/* Mac OS X does not have f_namemax in struct statfs. */
-	if (tree_current_is_symblic_link_target(t))
+	if (tree_current_is_symblic_link_target(t)) {
+		if (tree_enter_working_dir(t) !=3D 0) {
+			archive_set_error(&a->archive, errno, "fchdir failed");
+			return (ARCHIVE_FAILED);
+		}
 		nm =3D pathconf(tree_current_access_path(t), _PC_NAME_MAX);
-	else
+	} else
 		nm =3D fpathconf(tree_current_dir_fd(t), _PC_NAME_MAX);
 	if (nm =3D=3D -1)
 		t->current_filesystem->name_max =3D NAME_MAX;
@@ -1360,6 +1576,10 @@
 	int r, xr =3D 0;
=20
 	t->current_filesystem->synthetic =3D -1;
+	if (tree_enter_working_dir(t) !=3D 0) {
+		archive_set_error(&a->archive, errno, "fchdir failed");
+		return (ARCHIVE_FAILED);
+	}
 	if (tree_current_is_symblic_link_target(t)) {
 		r =3D statvfs(tree_current_access_path(t), &sfs);
 		if (r =3D=3D 0)
@@ -1384,17 +1604,24 @@
 		 * for pathconf() function. */
 		t->current_filesystem->xfer_align =3D sfs.f_frsize;
 		t->current_filesystem->max_xfer_size =3D -1;
+#if defined(HAVE_STRUCT_STATVFS_F_IOSIZE)
 		t->current_filesystem->min_xfer_size =3D sfs.f_iosize;
 		t->current_filesystem->incr_xfer_size =3D sfs.f_iosize;
+#else
+		t->current_filesystem->min_xfer_size =3D sfs.f_bsize;
+		t->current_filesystem->incr_xfer_size =3D sfs.f_bsize;
+#endif
 	}
 	if (sfs.f_flag & ST_LOCAL)
 		t->current_filesystem->remote =3D 0;
 	else
 		t->current_filesystem->remote =3D 1;
=20
+#if defined(ST_NOATIME)
 	if (sfs.f_flag & ST_NOATIME)
 		t->current_filesystem->noatime =3D 1;
 	else
+#endif
 		t->current_filesystem->noatime =3D 0;
=20
 	/* Set maximum filename length. */
@@ -1427,7 +1654,7 @@
 	int r, vr =3D 0, xr =3D 0;
=20
 	if (tree_current_is_symblic_link_target(t)) {
-#if defined(HAVE_OPENAT) && defined(HAVE_FSTATAT) && defined(HAVE_FDOPENDI=
R)
+#if defined(HAVE_OPENAT)
 		/*
 		 * Get file system statistics on any directory
 		 * where current is.
@@ -1445,6 +1672,10 @@
 			xr =3D get_xfer_size(t, fd, NULL);
 		close(fd);
 #else
+		if (tree_enter_working_dir(t) !=3D 0) {
+			archive_set_error(&a->archive, errno, "fchdir failed");
+			return (ARCHIVE_FAILED);
+		}
 		vr =3D statvfs(tree_current_access_path(t), &svfs);
 		r =3D statfs(tree_current_access_path(t), &sfs);
 		if (r =3D=3D 0)
@@ -1456,9 +1687,11 @@
 		r =3D fstatfs(tree_current_dir_fd(t), &sfs);
 		if (r =3D=3D 0)
 			xr =3D get_xfer_size(t, tree_current_dir_fd(t), NULL);
-#elif defined(HAVE_OPENAT) && defined(HAVE_FSTATAT) && defined(HAVE_FDOPEN=
DIR)
-#error "Unexpected case. Please tell us about this error."
 #else
+		if (tree_enter_working_dir(t) !=3D 0) {
+			archive_set_error(&a->archive, errno, "fchdir failed");
+			return (ARCHIVE_FAILED);
+		}
 		vr =3D statvfs(".", &svfs);
 		r =3D statfs(".", &sfs);
 		if (r =3D=3D 0)
@@ -1529,7 +1762,7 @@
 	t->current_filesystem->synthetic =3D -1;/* Not supported */
 	t->current_filesystem->remote =3D -1;/* Not supported */
 	if (tree_current_is_symblic_link_target(t)) {
-#if defined(HAVE_OPENAT) && defined(HAVE_FSTATAT) && defined(HAVE_FDOPENDI=
R)
+#if defined(HAVE_OPENAT)
 		/*
 		 * Get file system statistics on any directory
 		 * where current is.
@@ -1546,6 +1779,10 @@
 			xr =3D get_xfer_size(t, fd, NULL);
 		close(fd);
 #else
+		if (tree_enter_working_dir(t) !=3D 0) {
+			archive_set_error(&a->archive, errno, "fchdir failed");
+			return (ARCHIVE_FAILED);
+		}
 		r =3D statvfs(tree_current_access_path(t), &sfs);
 		if (r =3D=3D 0)
 			xr =3D get_xfer_size(t, -1, tree_current_access_path(t));
@@ -1555,9 +1792,11 @@
 		r =3D fstatvfs(tree_current_dir_fd(t), &sfs);
 		if (r =3D=3D 0)
 			xr =3D get_xfer_size(t, tree_current_dir_fd(t), NULL);
-#elif defined(HAVE_OPENAT) && defined(HAVE_FSTATAT) && defined(HAVE_FDOPEN=
DIR)
-#error "Unexpected case. Please tell us about this error."
 #else
+		if (tree_enter_working_dir(t) !=3D 0) {
+			archive_set_error(&a->archive, errno, "fchdir failed");
+			return (ARCHIVE_FAILED);
+		}
 		r =3D statvfs(".", &sfs);
 		if (r =3D=3D 0)
 			xr =3D get_xfer_size(t, -1, ".");
@@ -1615,9 +1854,13 @@
 #if defined(HAVE_READDIR_R)
 	/* Set maximum filename length. */
 #  if defined(_PC_NAME_MAX)
-	if (tree_current_is_symblic_link_target(t))
+	if (tree_current_is_symblic_link_target(t)) {
+		if (tree_enter_working_dir(t) !=3D 0) {
+			archive_set_error(&a->archive, errno, "fchdir failed");
+			return (ARCHIVE_FAILED);
+		}
 		nm =3D pathconf(tree_current_access_path(t), _PC_NAME_MAX);
-	else
+	} else
 		nm =3D fpathconf(tree_current_dir_fd(t), _PC_NAME_MAX);
 	if (nm =3D=3D -1)
 #  endif /* _PC_NAME_MAX */
@@ -1697,6 +1940,18 @@
 	return (0);
 }
=20
+static int
+open_on_current_dir(struct tree *t, const char *path, int flags)
+{
+#ifdef HAVE_OPENAT
+	return (openat(tree_current_dir_fd(t), path, flags));
+#else
+	if (tree_enter_working_dir(t) !=3D 0)
+		return (-1);
+	return (open(path, flags));
+#endif
+}
+
 /*
  * Add a directory path to the current stack.
  */
@@ -1778,6 +2033,7 @@
 tree_reopen(struct tree *t, const char *path, int restore_time)
 {
 	t->flags =3D (restore_time)?needsRestoreTimes:0;
+	t->flags |=3D onInitialDir;
 	t->visit_type =3D 0;
 	t->tree_errno =3D 0;
 	t->dirname_length =3D 0;
@@ -1790,6 +2046,7 @@
 	t->entry_fd =3D -1;
 	t->entry_eof =3D 0;
 	t->entry_remaining_bytes =3D 0;
+	t->initial_filesystem_id =3D -1;
=20
 	/* First item is set up a lot like a symlink traversal. */
 	tree_push(t, path, 0, 0, 0, NULL);
@@ -1803,12 +2060,14 @@
 static int
 tree_descent(struct tree *t)
 {
-	int r =3D 0;
+	int flag, new_fd, r =3D 0;
=20
-#if defined(HAVE_OPENAT) && defined(HAVE_FSTATAT) && defined(HAVE_FDOPENDI=
R)
-	int new_fd;
 	t->dirname_length =3D archive_strlen(&t->path);
-	new_fd =3D openat(t->working_dir_fd, t->stack->name.s, O_RDONLY);
+	flag =3D O_RDONLY;
+#if defined(O_DIRECTORY)
+	flag |=3D O_DIRECTORY;
+#endif
+	new_fd =3D open_on_current_dir(t, t->stack->name.s, flag);
 	if (new_fd < 0) {
 		t->tree_errno =3D errno;
 		r =3D TREE_ERROR_DIR;
@@ -1822,30 +2081,10 @@
 				t->maxOpenCount =3D t->openCount;
 		} else
 			close(t->working_dir_fd);
+		/* Renew the current working directory. */
 		t->working_dir_fd =3D new_fd;
+		t->flags &=3D ~onWorkingDir;
 	}
-#else
-	/* If it is a link, set up fd for the ascent. */
-	if (t->stack->flags & isDirLink)
-		t->stack->symlink_parent_fd =3D t->working_dir_fd;
-	else {
-		close(t->working_dir_fd);
-		t->openCount--;
-	}
-	t->working_dir_fd =3D -1;
-	t->dirname_length =3D archive_strlen(&t->path);
-	if (chdir(t->stack->name.s) !=3D 0)
-	{
-		t->tree_errno =3D errno;
-		r =3D TREE_ERROR_DIR;
-	} else {
-		t->depth++;
-		t->working_dir_fd =3D open(".", O_RDONLY);
-		t->openCount++;
-		if (t->openCount > t->maxOpenCount)
-			t->maxOpenCount =3D t->openCount;
-	}
-#endif
 	return (r);
 }
=20
@@ -1856,37 +2095,21 @@
 tree_ascend(struct tree *t)
 {
 	struct tree_entry *te;
-	int r =3D 0, prev_dir_fd;
+	int new_fd, r =3D 0, prev_dir_fd;
=20
 	te =3D t->stack;
 	prev_dir_fd =3D t->working_dir_fd;
-#if defined(HAVE_OPENAT) && defined(HAVE_FSTATAT) && defined(HAVE_FDOPENDI=
R)
 	if (te->flags & isDirLink)
-		t->working_dir_fd =3D te->symlink_parent_fd;
-	else {
-		int new_fd =3D openat(t->working_dir_fd, "..", O_RDONLY);
-		if (new_fd < 0) {
-			t->tree_errno =3D errno;
-			r =3D TREE_ERROR_FATAL;
-		} else
-			t->working_dir_fd =3D new_fd;
-	}
-#else
-	if (te->flags & isDirLink) {
-		if (fchdir(te->symlink_parent_fd) !=3D 0) {
-			t->tree_errno =3D errno;
-			r =3D TREE_ERROR_FATAL;
-		} else
-			t->working_dir_fd =3D te->symlink_parent_fd;
+		new_fd =3D te->symlink_parent_fd;
+	else
+		new_fd =3D open_on_current_dir(t, "..", O_RDONLY);
+	if (new_fd < 0) {
+		t->tree_errno =3D errno;
+		r =3D TREE_ERROR_FATAL;
 	} else {
-		if (chdir("..") !=3D 0) {
-			t->tree_errno =3D errno;
-			r =3D TREE_ERROR_FATAL;
-		} else
-			t->working_dir_fd =3D open(".", O_RDONLY);
-	}
-#endif
-	if (r =3D=3D 0) {
+		/* Renew the current working directory. */
+		t->working_dir_fd =3D new_fd;
+		t->flags &=3D ~onWorkingDir;
 		/* Current directory has been changed, we should
 		 * close an fd of previous working directory. */
 		close_and_restore_time(prev_dir_fd, t, &te->restore_time);
@@ -1907,10 +2130,12 @@
 {
 	int r =3D 0;
=20
-	if (t->flags & onWorkingDir) {
+	if ((t->flags & onInitialDir) =3D=3D 0) {
 		r =3D fchdir(t->initial_dir_fd);
-		if (r =3D=3D 0)
+		if (r =3D=3D 0) {
 			t->flags &=3D ~onWorkingDir;
+			t->flags |=3D onInitialDir;
+		}
 	}
 	return (r);
 }
@@ -1930,8 +2155,10 @@
 	 */
 	if (t->depth > 0 && (t->flags & onWorkingDir) =3D=3D 0) {
 		r =3D fchdir(t->working_dir_fd);
-		if (r =3D=3D 0)
+		if (r =3D=3D 0) {
+			t->flags &=3D ~onInitialDir;
 			t->flags |=3D onWorkingDir;
+		}
 	}
 	return (r);
 }
@@ -2040,7 +2267,8 @@
 #if defined(HAVE_FDOPENDIR)
 		if ((t->d =3D fdopendir(dup(t->working_dir_fd))) =3D=3D NULL) {
 #else
-		if ((t->d =3D opendir(".")) =3D=3D NULL) {
+		if (tree_enter_working_dir(t) !=3D 0 ||
+		    (t->d =3D opendir(".")) =3D=3D NULL) {
 #endif
 			r =3D tree_ascend(t); /* Undo "chdir" */
 			tree_pop(t);
@@ -2111,6 +2339,8 @@
 		if (fstatat(tree_current_dir_fd(t),
 		    tree_current_access_path(t), &t->st, 0) !=3D 0)
 #else
+		if (tree_enter_working_dir(t) !=3D 0)
+			return NULL;
 		if (stat(tree_current_access_path(t), &t->st) !=3D 0)
 #endif
 			return NULL;
@@ -2131,6 +2361,8 @@
 		    tree_current_access_path(t), &t->lst,
 		    AT_SYMLINK_NOFOLLOW) !=3D 0)
 #else
+		if (tree_enter_working_dir(t) !=3D 0)
+			return NULL;
 		if (lstat(tree_current_access_path(t), &t->lst) !=3D 0)
 #endif
 			return NULL;
@@ -2152,7 +2384,10 @@
 	 */
 	if (t->flags & hasLstat) {
 		/* If lstat() says it's a dir, it must be a dir. */
-		if (S_ISDIR(tree_current_lstat(t)->st_mode))
+		st =3D tree_current_lstat(t);
+		if (st =3D=3D NULL)
+			return 0;
+		if (S_ISDIR(st->st_mode))
 			return 1;
 		/* Not a dir; might be a link to a dir. */
 		/* If it's not a link, then it's not a link to a dir. */
@@ -2186,9 +2421,13 @@
 	 * If stat() says it isn't a dir, then it's not a dir.
 	 * If stat() data is cached, this check is free, so do it first.
 	 */
-	if ((t->flags & hasStat)
-	    && (!S_ISDIR(tree_current_stat(t)->st_mode)))
-		return 0;
+	if (t->flags & hasStat) {
+		st =3D tree_current_stat(t);
+		if (st =3D=3D NULL)
+			return (0);
+		if (!S_ISDIR(st->st_mode))
+			return (0);
+	}
=20
 	/*
 	 * Either stat() said it was a dir (in which case, we have
@@ -2232,7 +2471,7 @@
=20
 	lst =3D tree_current_lstat(t);
 	st =3D tree_current_stat(t);
-	return (st !=3D NULL &&
+	return (st !=3D NULL && lst !=3D NULL &&
 	    (int64_t)st->st_dev =3D=3D t->current_filesystem->dev &&
 	    st->st_dev !=3D lst->st_dev);
 }
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_read_disk_private.h
--- a/head/contrib/libarchive/libarchive/archive_read_disk_private.h	Mon Ju=
l 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_read_disk_private.h	Fri Au=
g 10 14:19:25 2012 +0300
@@ -23,7 +23,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.
  *
- * $FreeBSD: head/contrib/libarchive/libarchive/archive_read_disk_private.=
h 232153 2012-02-25 10:58:02Z mm $
+ * $FreeBSD: head/contrib/libarchive/libarchive/archive_read_disk_private.=
h 238856 2012-07-28 06:38:44Z mm $
  */
=20
 #ifndef __LIBARCHIVE_BUILD
@@ -34,6 +34,7 @@
 #define ARCHIVE_READ_DISK_PRIVATE_H_INCLUDED
=20
 struct tree;
+struct archive_entry;
=20
 struct archive_read_disk {
 	struct archive	archive;
@@ -55,10 +56,18 @@
=20
 	/* Directory traversals. */
 	struct tree *tree;
+	int	(*open_on_current_dir)(struct tree*, const char *, int);
+	int	(*tree_current_dir_fd)(struct tree*);
+	int	(*tree_enter_working_dir)(struct tree*);
=20
 	/* Set 1 if users request to restore atime . */
 	int		 restore_time;
-	int		 entry_wd_fd;
+	/* Set 1 if users request to honor nodump flag . */
+	int		 honor_nodump;
+	/* Set 1 if users request to enable mac copyfile. */
+	int		 enable_copyfile;
+	/* Set 1 if users request to traverse mount points. */
+	int		 traverse_mount_points;
=20
 	const char * (*lookup_gname)(void *private, int64_t gid);
 	void	(*cleanup_gname)(void *private);
@@ -66,6 +75,18 @@
 	const char * (*lookup_uname)(void *private, int64_t uid);
 	void	(*cleanup_uname)(void *private);
 	void	 *lookup_uname_data;
+
+	int	(*metadata_filter_func)(struct archive *, void *,
+			struct archive_entry *);
+	void	*metadata_filter_data;
+
+	/* ARCHIVE_MATCH object. */
+	struct archive	*matching;
+	/* Callback function, this will be invoked when ARCHIVE_MATCH
+	 * archive_match_*_excluded_ae return true. */
+	void	(*excluded_cb_func)(struct archive *, void *,
+			 struct archive_entry *);
+	void	*excluded_cb_data;
 };
=20
 #endif
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_read_extract.3
--- a/head/contrib/libarchive/libarchive/archive_read_extract.3	Mon Jul 30 =
11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_read_extract.3	Fri Aug 10 =
14:19:25 2012 +0300
@@ -24,7 +24,7 @@
 .\"
 .\" $FreeBSD$
 .\"
-.Dd March 22, 2011
+.Dd February 2, 2012
 .Dt ARCHIVE_READ_EXTRACT 3
 .Os
 .Sh NAME
@@ -32,6 +32,8 @@
 .Nm archive_read_extract2 ,
 .Nm archive_read_extract_set_progress_callback
 .Nd functions for reading streaming archives
+.Sh LIBRARY
+Streaming Archive Library (libarchive, -larchive)
 .Sh SYNOPSIS
 .In archive.h
 .Ft int
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_read_filter.3
--- a/head/contrib/libarchive/libarchive/archive_read_filter.3	Mon Jul 30 1=
1:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_read_filter.3	Fri Aug 10 1=
4:19:25 2012 +0300
@@ -24,7 +24,7 @@
 .\"
 .\" $FreeBSD$
 .\"
-.Dd March 19, 2011
+.Dd February 2, 2012
 .Dt ARCHIVE_READ_FILTER 3
 .Os
 .Sh NAME
@@ -39,6 +39,8 @@
 .Nm archive_read_support_filter_program_signature
 .Nd functions for reading streaming archives
 .\"
+.Sh LIBRARY
+Streaming Archive Library (libarchive, -larchive)
 .Sh SYNOPSIS
 .In archive.h
 .Ft int
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_read_format.3
--- a/head/contrib/libarchive/libarchive/archive_read_format.3	Mon Jul 30 1=
1:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_read_format.3	Fri Aug 10 1=
4:19:25 2012 +0300
@@ -22,9 +22,9 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\" $FreeBSD: head/lib/libarchive/archive_read.3 191595 2009-04-27 20:13:1=
3Z kientzle $
+.\" $FreeBSD$
 .\"
-.Dd March 19, 2011
+.Dd February 2, 2012
 .Dt ARCHIVE_READ_FORMAT 3
 .Os
 .Sh NAME
@@ -45,6 +45,8 @@
 .Nm archive_read_support_format_zip
 .Nd functions for reading streaming archives
 .\"
+.Sh LIBRARY
+Streaming Archive Library (libarchive, -larchive)
 .Sh SYNOPSIS
 .In archive.h
 .Ft int
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_read_free.3
--- a/head/contrib/libarchive/libarchive/archive_read_free.3	Mon Jul 30 11:=
44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_read_free.3	Fri Aug 10 14:=
19:25 2012 +0300
@@ -22,9 +22,9 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\" $FreeBSD: head/lib/libarchive/archive_read.3 191595 2009-04-27 20:13:1=
3Z kientzle $
+.\" $FreeBSD$
 .\"
-.Dd March 20, 2011
+.Dd February 2, 2012
 .Dt ARCHIVE_READ_FREE 3
 .Os
 .Sh NAME
@@ -32,6 +32,8 @@
 .Nm archive_read_finish ,
 .Nm archive_read_free
 .Nd functions for reading streaming archives
+.Sh LIBRARY
+Streaming Archive Library (libarchive, -larchive)
 .Sh SYNOPSIS
 .In archive.h
 .Ft int
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_read_header.3
--- a/head/contrib/libarchive/libarchive/archive_read_header.3	Mon Jul 30 1=
1:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_read_header.3	Fri Aug 10 1=
4:19:25 2012 +0300
@@ -24,13 +24,15 @@
 .\"
 .\" $FreeBSD$
 .\"
-.Dd March 22, 2011
+.Dd February 2, 2012
 .Dt ARCHIVE_READ_HEADER 3
 .Os
 .Sh NAME
 .Nm archive_read_next_header ,
 .Nm archive_read_next_header2
 .Nd functions for reading streaming archives
+.Sh LIBRARY
+Streaming Archive Library (libarchive, -larchive)
 .Sh SYNOPSIS
 .In archive.h
 .Ft int
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_read_new.3
--- a/head/contrib/libarchive/libarchive/archive_read_new.3	Mon Jul 30 11:4=
4:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_read_new.3	Fri Aug 10 14:1=
9:25 2012 +0300
@@ -22,14 +22,16 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\" $FreeBSD: head/lib/libarchive/archive_read.3 191595 2009-04-27 20:13:1=
3Z kientzle $
+.\" $FreeBSD$
 .\"
-.Dd March 20, 2011
+.Dd February 2, 2012
 .Dt ARCHIVE_READ_NEW 3
 .Os
 .Sh NAME
 .Nm archive_read_new
 .Nd functions for reading streaming archives
+.Sh LIBRARY
+Streaming Archive Library (libarchive, -larchive)
 .Sh SYNOPSIS
 .In archive.h
 .Ft struct archive *
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_read_open.3
--- a/head/contrib/libarchive/libarchive/archive_read_open.3	Mon Jul 30 11:=
44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_read_open.3	Fri Aug 10 14:=
19:25 2012 +0300
@@ -22,9 +22,9 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\" $FreeBSD: head/lib/libarchive/archive_read.3 191595 2009-04-27 20:13:1=
3Z kientzle $
+.\" $FreeBSD$
 .\"
-.Dd March 19, 2011
+.Dd February 2, 2012
 .Dt ARCHIVE_READ_OPEN 3
 .Os
 .Sh NAME
@@ -35,6 +35,8 @@
 .Nm archive_read_open_filename ,
 .Nm archive_read_open_memory ,
 .Nd functions for reading streaming archives
+.Sh LIBRARY
+Streaming Archive Library (libarchive, -larchive)
 .Sh SYNOPSIS
 .In archive.h
 .Ft int
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_read_open_fd.c
--- a/head/contrib/libarchive/libarchive/archive_read_open_fd.c	Mon Jul 30 =
11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_read_open_fd.c	Fri Aug 10 =
14:19:25 2012 +0300
@@ -24,7 +24,7 @@
  */
=20
 #include "archive_platform.h"
-__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/archive_read_open_f=
d.c 232153 2012-02-25 10:58:02Z mm $");
+__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/archive_read_open_f=
d.c 238856 2012-07-28 06:38:44Z mm $");
=20
 #ifdef HAVE_SYS_STAT_H
 #include <sys/stat.h>
@@ -129,8 +129,8 @@
 file_skip(struct archive *a, void *client_data, int64_t request)
 {
 	struct read_fd_data *mine =3D (struct read_fd_data *)client_data;
-	off_t skip =3D (off_t)request;
-	off_t old_offset, new_offset;
+	int64_t skip =3D request;
+	int64_t old_offset, new_offset;
 	int skip_bits =3D sizeof(skip) * 8 - 1;  /* off_t is a signed type. */
=20
 	if (!mine->use_lseek)
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_read_open_filename.c
--- a/head/contrib/libarchive/libarchive/archive_read_open_filename.c	Mon J=
ul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_read_open_filename.c	Fri A=
ug 10 14:19:25 2012 +0300
@@ -24,7 +24,7 @@
  */
=20
 #include "archive_platform.h"
-__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/archive_read_open_f=
ilename.c 232153 2012-02-25 10:58:02Z mm $");
+__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/archive_read_open_f=
ilename.c 238856 2012-07-28 06:38:44Z mm $");
=20
 #ifdef HAVE_SYS_IOCTL_H
 #include <sys/ioctl.h>
@@ -130,9 +130,13 @@
 		archive_string_init(&fn);
 		if (archive_string_append_from_wcs(&fn, wfilename,
 		    wcslen(wfilename)) !=3D 0) {
-			archive_set_error(a, EINVAL,
-			    "Failed to convert a wide-character filename to"
-			    " a multi-byte filename");
+			if (errno =3D=3D ENOMEM)
+				archive_set_error(a, errno,
+				    "Can't allocate memory");
+			else
+				archive_set_error(a, EINVAL,
+				    "Failed to convert a wide-character"
+				    " filename to a multi-byte filename");
 			archive_string_free(&fn);
 			return (ARCHIVE_FATAL);
 		}
@@ -450,7 +454,7 @@
 file_seek(struct archive *a, void *client_data, int64_t request, int whenc=
e)
 {
 	struct read_file_data *mine =3D (struct read_file_data *)client_data;
-	off_t r;
+	int64_t r;
=20
 	/* We use off_t here because lseek() is declared that way. */
 	/* See above for notes about when off_t is less than 64 bits. */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_read_private.h
--- a/head/contrib/libarchive/libarchive/archive_read_private.h	Mon Jul 30 =
11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_read_private.h	Fri Aug 10 =
14:19:25 2012 +0300
@@ -22,7 +22,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.
  *
- * $FreeBSD: head/contrib/libarchive/libarchive/archive_read_private.h 232=
153 2012-02-25 10:58:02Z mm $
+ * $FreeBSD: head/contrib/libarchive/libarchive/archive_read_private.h 238=
856 2012-07-28 06:38:44Z mm $
  */
=20
 #ifndef __LIBARCHIVE_BUILD
@@ -134,8 +134,8 @@
=20
 	/* Dev/ino of the archive being read/written. */
 	int		  skip_file_set;
-	dev_t		  skip_file_dev;
-	ino_t		  skip_file_ino;
+	int64_t		  skip_file_dev;
+	int64_t		  skip_file_ino;
=20
 	/*
 	 * Used by archive_read_data() to track blocks and copy
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_read_set_options.3
--- a/head/contrib/libarchive/libarchive/archive_read_set_options.3	Mon Jul=
 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_read_set_options.3	Fri Aug=
 10 14:19:25 2012 +0300
@@ -24,7 +24,7 @@
 .\"
 .\" $FreeBSD$
 .\"
-.Dd April 13, 2009
+.Dd February 2, 2012
 .Dt ARCHIVE_READ_OPTIONS 3
 .Os
 .Sh NAME
@@ -34,6 +34,8 @@
 .Nm archive_read_set_options
 .Nd functions controlling options for reading archives
 .\"
+.Sh LIBRARY
+Streaming Archive Library (libarchive, -larchive)
 .Sh SYNOPSIS
 .Ft int
 .Fo archive_read_set_filter_option
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_read_support_filter_rpm.c
--- a/head/contrib/libarchive/libarchive/archive_read_support_filter_rpm.c	=
Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_read_support_filter_rpm.c	=
Fri Aug 10 14:19:25 2012 +0300
@@ -188,7 +188,7 @@
 			if (rpm->total_in + avail_in < RPM_LEAD_SIZE)
 				used +=3D avail_in;
 			else {
-				n =3D RPM_LEAD_SIZE - rpm->total_in;
+				n =3D (size_t)(RPM_LEAD_SIZE - rpm->total_in);
 				used +=3D n;
 				b +=3D n;
 				rpm->state =3D ST_HEADER;
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_read_support_format_7zip.c
--- a/head/contrib/libarchive/libarchive/archive_read_support_format_7zip.c=
	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_read_support_format_7zip.c=
	Fri Aug 10 14:19:25 2012 +0300
@@ -580,7 +580,7 @@
 		free_Header(&header);
 		if (r !=3D ARCHIVE_OK)
 			return (r);
-		zip->entries_remaining =3D zip->numFiles;
+		zip->entries_remaining =3D (size_t)zip->numFiles;
 		zip->entry =3D zip->entries;
 	} else {
 		++zip->entry;
@@ -653,19 +653,24 @@
 		 */
 		while (zip->entry_bytes_remaining > 0) {
 			const void *buff;
+			unsigned char *mem;
 			size_t size;
 			int64_t offset;
=20
 			r =3D archive_read_format_7zip_read_data(a, &buff,
 				&size, &offset);
-			if (r < ARCHIVE_WARN)
+			if (r < ARCHIVE_WARN) {
+				free(symname);
 				return (r);
-			symname =3D realloc(symname, symsize + size + 1);
-			if (symname =3D=3D NULL) {
+			}
+			mem =3D realloc(symname, symsize + size + 1);
+			if (mem =3D=3D NULL) {
+				free(symname);
 				archive_set_error(&a->archive, ENOMEM,
 				    "Can't allocate memory for Symname");
 				return (ARCHIVE_FATAL);
 			}
+			symname =3D mem;
 			memcpy(symname+symsize, buff, size);
 			symsize +=3D size;
 		}
@@ -715,7 +720,8 @@
 		return (ARCHIVE_EOF);
 	}
=20
-	bytes =3D read_stream(a, buff, zip->entry_bytes_remaining, 0);
+	bytes =3D read_stream(a, buff,
+		(size_t)zip->entry_bytes_remaining, 0);
 	if (bytes < 0)
 		return ((int)bytes);
 	if (bytes =3D=3D 0) {
@@ -773,7 +779,7 @@
 	 * If the length is at the beginning, we can skip the
 	 * compressed data much more quickly.
 	 */
-	bytes_skipped =3D skip_stream(a, zip->entry_bytes_remaining);
+	bytes_skipped =3D skip_stream(a, (size_t)zip->entry_bytes_remaining);
 	if (bytes_skipped < 0)
 		return (ARCHIVE_FATAL);
 	zip->entry_bytes_remaining =3D 0;
@@ -1053,7 +1059,7 @@
 		ff =3D &filters[fi];
 #endif
 		r =3D lzma_properties_decode(&filters[fi], NULL,
-		    coder1->properties, coder1->propertiesSize);
+		    coder1->properties, (size_t)coder1->propertiesSize);
 		if (r !=3D LZMA_OK) {
 			set_error(a, r);
 			return (ARCHIVE_FAILED);
@@ -1441,8 +1447,8 @@
 		} while (zip->ppstream.avail_out &&
 			(zip->ppstream.avail_in || flush_bytes));
=20
-		t_avail_in =3D zip->ppstream.avail_in;
-		t_avail_out =3D zip->ppstream.avail_out;
+		t_avail_in =3D (size_t)zip->ppstream.avail_in;
+		t_avail_out =3D (size_t)zip->ppstream.avail_out;
 		break;
 	}
 	default:
@@ -1505,6 +1511,10 @@
 {
 	int r =3D ARCHIVE_OK;
=20
+#if !defined(HAVE_ZLIB_H) &&\
+	!(defined(HAVE_BZLIB_H) && defined(BZ_CONFIG_ERROR))
+	(void)a;/* UNUSED */
+#endif
 #ifdef HAVE_LZMA_H
 	if (zip->lzstream_valid)
 		lzma_end(&(zip->lzstream));
@@ -1671,8 +1681,8 @@
 		return (0);
 	if (*p !=3D kSize)
 		return (-1);
-	pi->sizes =3D calloc(pi->numPackStreams, sizeof(uint64_t));
-	pi->positions =3D calloc(pi->numPackStreams, sizeof(uint64_t));
+	pi->sizes =3D calloc((size_t)pi->numPackStreams, sizeof(uint64_t));
+	pi->positions =3D calloc((size_t)pi->numPackStreams, sizeof(uint64_t));
 	if (pi->sizes =3D=3D NULL || pi->positions =3D=3D NULL)
 		return (-1);
=20
@@ -1689,9 +1699,9 @@
 	if (*p =3D=3D kEnd) {
 		/* PackStreamDigests[num] are not present. */
 		pi->digest.defineds =3D
-		    calloc(pi->numPackStreams, sizeof(*pi->digest.defineds));
+		    calloc((size_t)pi->numPackStreams, sizeof(*pi->digest.defineds));
 		pi->digest.digests =3D
-		    calloc(pi->numPackStreams, sizeof(*pi->digest.digests));
+		    calloc((size_t)pi->numPackStreams, sizeof(*pi->digest.digests));
 		if (pi->digest.defineds =3D=3D NULL || pi->digest.digests =3D=3D NULL)
 			return (-1);
 		return (0);
@@ -1700,7 +1710,7 @@
 	if (*p !=3D kSize)
 		return (-1);
=20
-	if (read_Digests(a, &(pi->digest), pi->numPackStreams) < 0)
+	if (read_Digests(a, &(pi->digest), (size_t)pi->numPackStreams) < 0)
 		return (-1);
=20
 	/*
@@ -1749,7 +1759,7 @@
 		/* Too many coders. */
 		return (-1);
=20
-	f->coders =3D calloc(f->numCoders, sizeof(*f->coders));
+	f->coders =3D calloc((size_t)f->numCoders, sizeof(*f->coders));
 	if (f->coders =3D=3D NULL)
 		return (-1);
 	for (i =3D 0; i< f->numCoders; i++) {
@@ -1801,14 +1811,14 @@
 			    a, &(f->coders[i].propertiesSize)) < 0)
 				return (-1);
 			if ((p =3D header_bytes(
-			    a, f->coders[i].propertiesSize)) =3D=3D NULL)
+			    a, (size_t)f->coders[i].propertiesSize)) =3D=3D NULL)
 				return (-1);
 			f->coders[i].properties =3D
-			    malloc(f->coders[i].propertiesSize);
+			    malloc((size_t)f->coders[i].propertiesSize);
 			if (f->coders[i].properties =3D=3D NULL)
 				return (-1);
 			memcpy(f->coders[i].properties, p,
-			    f->coders[i].propertiesSize);
+			    (size_t)f->coders[i].propertiesSize);
 		}
=20
 		numInStreamsTotal +=3D f->coders[i].numInStreams;
@@ -1822,9 +1832,13 @@
 	f->numBindPairs =3D numOutStreamsTotal - 1;
 	if (zip->header_bytes_remaining < f->numBindPairs)
 			return (-1);
-	f->bindPairs =3D calloc(f->numBindPairs, sizeof(*f->bindPairs));
-	if (f->bindPairs =3D=3D NULL)
-		return (-1);
+	if (f->numBindPairs > 0) {
+		f->bindPairs =3D
+			calloc((size_t)f->numBindPairs, sizeof(*f->bindPairs));
+		if (f->bindPairs =3D=3D NULL)
+			return (-1);
+	} else
+		f->bindPairs =3D NULL;
 	for (i =3D 0; i < f->numBindPairs; i++) {
 		if (parse_7zip_uint64(a, &(f->bindPairs[i].inIndex)) < 0)
 			return (-1);
@@ -1838,7 +1852,7 @@
=20
 	f->numPackedStreams =3D numInStreamsTotal - f->numBindPairs;
 	f->packedStreams =3D
-	    calloc(f->numPackedStreams, sizeof(*f->packedStreams));
+	    calloc((size_t)f->numPackedStreams, sizeof(*f->packedStreams));
 	if (f->packedStreams =3D=3D NULL)
 		return (-1);
 	if (f->numPackedStreams =3D=3D 1) {
@@ -1910,7 +1924,8 @@
 		goto failed;
 	switch (*p) {
 	case 0:
-		ci->folders =3D calloc(ci->numFolders, sizeof(*ci->folders));
+		ci->folders =3D
+			calloc((size_t)ci->numFolders, sizeof(*ci->folders));
 		if (ci->folders =3D=3D NULL)
 			return (-1);
 		for (i =3D 0; i < ci->numFolders; i++) {
@@ -1936,7 +1951,7 @@
 		unsigned j;
=20
 		folder->unPackSize =3D
-		    calloc(folder->numOutStreams, sizeof(*folder->unPackSize));
+		    calloc((size_t)folder->numOutStreams, sizeof(*folder->unPackSize));
 		if (folder->unPackSize =3D=3D NULL)
 			goto failed;
 		for (j =3D 0; j < folder->numOutStreams; j++) {
@@ -1954,7 +1969,7 @@
 		return (0);
 	if (*p !=3D kCRC)
 		goto failed;
-	if (read_Digests(a, &digest, ci->numFolders) < 0)
+	if (read_Digests(a, &digest, (size_t)ci->numFolders) < 0)
 		goto failed;
 	for (i =3D 0; i < ci->numFolders; i++) {
 		ci->folders[i].digest_defined =3D digest.defineds[i];
@@ -1978,8 +1993,8 @@
 static uint64_t
 folder_uncompressed_size(struct _7z_folder *f)
 {
-	int n =3D f->numOutStreams;
-	unsigned pairs =3D f->numBindPairs;
+	int n =3D (int)f->numOutStreams;
+	unsigned pairs =3D (unsigned)f->numBindPairs;
=20
 	while (--n >=3D 0) {
 		unsigned i;
@@ -2028,7 +2043,7 @@
 				return (-1);
 			if (1000000 < f[i].numUnpackStreams)
 				return (-1);
-			unpack_streams +=3D f[i].numUnpackStreams;
+			unpack_streams +=3D (size_t)f[i].numUnpackStreams;
 		}
 		if ((p =3D header_bytes(a, 1)) =3D=3D NULL)
 			return (-1);
@@ -2082,7 +2097,7 @@
 	numDigests =3D 0;
 	for (i =3D 0; i < numFolders; i++) {
 		if (f[i].numUnpackStreams !=3D 1 || !f[i].digest_defined)
-			numDigests +=3D f[i].numUnpackStreams;
+			numDigests +=3D (uint32_t)f[i].numUnpackStreams;
 	}
=20
 	if (type =3D=3D kCRC) {
@@ -2180,7 +2195,7 @@
 		f =3D si->ci.folders;
 		for (i =3D 0; i < si->ci.numFolders; i++) {
 			f[i].packIndex =3D packIndex;
-			packIndex +=3D f[i].numPackedStreams;
+			packIndex +=3D (uint32_t)f[i].numPackedStreams;
 			if (packIndex > si->pi.numPackStreams)
 				return (-1);
 		}
@@ -2190,7 +2205,7 @@
=20
 	if (*p =3D=3D kSubStreamsInfo) {
 		if (read_SubStreamsInfo(a, &(si->ss),
-		    si->ci.folders, si->ci.numFolders) < 0)
+		    si->ci.folders, (size_t)si->ci.numFolders) < 0)
 			return (-1);
 		if ((p =3D header_bytes(a, 1)) =3D=3D NULL)
 			return (-1);
@@ -2278,7 +2293,7 @@
 	if (1000000 < zip->numFiles)
 			return (-1);
=20
-	zip->entries =3D calloc(zip->numFiles, sizeof(*zip->entries));
+	zip->entries =3D calloc((size_t)zip->numFiles, sizeof(*zip->entries));
 	if (zip->entries =3D=3D NULL)
 		return (-1);
 	entries =3D zip->entries;
@@ -2303,12 +2318,12 @@
=20
 		switch (type) {
 		case kEmptyStream:
-			h->emptyStreamBools =3D calloc(zip->numFiles,
+			h->emptyStreamBools =3D calloc((size_t)zip->numFiles,
 			    sizeof(*h->emptyStreamBools));
 			if (h->emptyStreamBools =3D=3D NULL)
 				return (-1);
 			if (read_Bools(
-			    a, h->emptyStreamBools, zip->numFiles) < 0)
+			    a, h->emptyStreamBools, (size_t)zip->numFiles) < 0)
 				return (-1);
 			empty_streams =3D 0;
 			for (i =3D 0; i < zip->numFiles; i++) {
@@ -2317,6 +2332,12 @@
 			}
 			break;
 		case kEmptyFile:
+			if (empty_streams <=3D 0) {
+				/* Unexcepted sequence. Skip this. */
+				if (header_bytes(a, ll) =3D=3D NULL)
+					return (-1);
+				break;
+			}
 			h->emptyFileBools =3D calloc(empty_streams,
 			    sizeof(*h->emptyFileBools));
 			if (h->emptyFileBools =3D=3D NULL)
@@ -2325,6 +2346,12 @@
 				return (-1);
 			break;
 		case kAnti:
+			if (empty_streams <=3D 0) {
+				/* Unexcepted sequence. Skip this. */
+				if (header_bytes(a, ll) =3D=3D NULL)
+					return (-1);
+				break;
+			}
 			h->antiBools =3D calloc(empty_streams,
 			    sizeof(*h->antiBools));
 			if (h->antiBools =3D=3D NULL)
@@ -2403,15 +2430,15 @@
 			if ((p =3D header_bytes(a, 2)) =3D=3D NULL)
 				return (-1);
 			allAreDefined =3D *p;
-			h->attrBools =3D calloc(zip->numFiles,
+			h->attrBools =3D calloc((size_t)zip->numFiles,
 			    sizeof(*h->attrBools));
 			if (h->attrBools =3D=3D NULL)
 				return (-1);
 			if (allAreDefined)
-				memset(h->attrBools, 1, zip->numFiles);
+				memset(h->attrBools, 1, (size_t)zip->numFiles);
 			else {
 				if (read_Bools(a, h->attrBools,
-				      zip->numFiles) < 0)
+				      (size_t)zip->numFiles) < 0)
 					return (-1);
 			}
 			for (i =3D 0; i < zip->numFiles; i++) {
@@ -2445,7 +2472,7 @@
 			if ((size_t)sindex >=3D si->ss.unpack_streams)
 				return (-1);
 			if (entries[i].mode =3D=3D 0)
-				entries[i].mode =3D AE_IFREG | 0777;
+				entries[i].mode =3D AE_IFREG | 0666;
 			if (si->ss.digestsDefined[sindex])
 				entries[i].flg |=3D CRC32_IS_SET;
 			entries[i].ssIndex =3D sindex;
@@ -2465,7 +2492,7 @@
 				if (dir)
 					entries[i].mode =3D AE_IFDIR | 0777;
 				else
-					entries[i].mode =3D AE_IFREG | 0777;
+					entries[i].mode =3D AE_IFREG | 0666;
 			} else if (dir &&
 			    (entries[i].mode & AE_IFMT) !=3D AE_IFDIR) {
 				entries[i].mode &=3D ~AE_IFMT;
@@ -2541,7 +2568,7 @@
 	int allAreDefined;
 	unsigned i;
=20
-	timeBools =3D calloc(zip->numFiles, sizeof(*timeBools));
+	timeBools =3D calloc((size_t)zip->numFiles, sizeof(*timeBools));
 	if (timeBools =3D=3D NULL)
 		return (-1);
=20
@@ -2550,9 +2577,9 @@
 		goto failed;
 	allAreDefined =3D *p;
 	if (allAreDefined)
-		memset(timeBools, 1, zip->numFiles);
+		memset(timeBools, 1, (size_t)zip->numFiles);
 	else {
-		if (read_Bools(a, timeBools, zip->numFiles) < 0)
+		if (read_Bools(a, timeBools, (size_t)zip->numFiles) < 0)
 			goto failed;
 	}
=20
@@ -2563,7 +2590,7 @@
 		if (parse_7zip_uint64(a, &(h->dataIndex)) < 0)
 			goto failed;
 		if (1000000 < h->dataIndex)
-			return (-1);
+			goto failed;
 	}
=20
 	for (i =3D 0; i < zip->numFiles; i++) {
@@ -2897,10 +2924,10 @@
 			return (ARCHIVE_FATAL);
 		}
 		if (bytes_avail > (ssize_t)zip->pack_stream_inbytes_remaining)
-			bytes_avail =3D zip->pack_stream_inbytes_remaining;
+			bytes_avail =3D (ssize_t)zip->pack_stream_inbytes_remaining;
 		zip->pack_stream_inbytes_remaining -=3D bytes_avail;
 		if (bytes_avail > (ssize_t)zip->folder_outbytes_remaining)
-			bytes_avail =3D zip->folder_outbytes_remaining;
+			bytes_avail =3D (ssize_t)zip->folder_outbytes_remaining;
 		zip->folder_outbytes_remaining -=3D bytes_avail;
 		zip->uncompressed_buffer_bytes_remaining =3D bytes_avail;
 		return (ARCHIVE_OK);
@@ -2965,7 +2992,7 @@
 		size_t bytes_in, bytes_out;
 		const void *buff_in;
 		unsigned char *buff_out;
-		int eof;
+		int end_of_data;
=20
 		/*
 		 * Note: '1' here is a performance optimization.
@@ -2987,23 +3014,23 @@
 			- zip->uncompressed_buffer_bytes_remaining;
 		bytes_in =3D bytes_avail;
 		if (bytes_in > zip->pack_stream_inbytes_remaining)
-			bytes_in =3D zip->pack_stream_inbytes_remaining;
+			bytes_in =3D (size_t)zip->pack_stream_inbytes_remaining;
 		/* Drive decompression. */
 		r =3D decompress(a, zip, buff_out, &bytes_out,
 			buff_in, &bytes_in);
 		switch (r) {
 		case ARCHIVE_OK:
-			eof =3D 0;
+			end_of_data =3D 0;
 			break;
 		case ARCHIVE_EOF:
-			eof =3D 1;
+			end_of_data =3D 1;
 			break;
 		default:
 			return (ARCHIVE_FATAL);
 		}
 		zip->pack_stream_inbytes_remaining -=3D bytes_in;
 		if (bytes_out > zip->folder_outbytes_remaining)
-			bytes_out =3D zip->folder_outbytes_remaining;
+			bytes_out =3D (size_t)zip->folder_outbytes_remaining;
 		zip->folder_outbytes_remaining -=3D bytes_out;
 		zip->uncompressed_buffer_bytes_remaining +=3D bytes_out;
 		zip->pack_stream_bytes_unconsumed =3D bytes_in;
@@ -3021,7 +3048,7 @@
 		if (zip->pack_stream_inbytes_remaining =3D=3D 0 &&
 		    zip->folder_outbytes_remaining =3D=3D 0)
 			break;
-		if (eof || (bytes_in =3D=3D 0 && bytes_out =3D=3D 0)) {
+		if (end_of_data || (bytes_in =3D=3D 0 && bytes_out =3D=3D 0)) {
 			archive_set_error(&(a->archive),
 			    ARCHIVE_ERRNO_MISC, "Damaged 7-Zip archive");
 			return (ARCHIVE_FATAL);
@@ -3160,7 +3187,8 @@
 				return (ARCHIVE_FATAL);
 			}
 		}
-		skipped =3D get_uncompressed_data(a, buff, skip_bytes, 0);
+		skipped =3D get_uncompressed_data(
+			a, buff, (size_t)skip_bytes, 0);
 		if (skipped < 0)
 			return (skipped);
 		skip_bytes -=3D skipped;
@@ -3292,13 +3320,13 @@
 			}
 			coder2 =3D &(fc[3]);
 			zip->main_stream_bytes_remaining =3D
-				folder->unPackSize[2];
+				(size_t)folder->unPackSize[2];
 		} else if (coder2 !=3D NULL && coder2->codec =3D=3D _7Z_X86_BCJ2 &&
 		    zip->pack_stream_remaining =3D=3D 4 &&
 		    folder->numInStreams =3D=3D 5 && folder->numOutStreams =3D=3D 2) {
 			/* Source type 0 made by 7z */
 			zip->main_stream_bytes_remaining =3D
-				folder->unPackSize[0];
+				(size_t)folder->unPackSize[0];
 		} else {
 			/* We got an unexpected form. */
 			archive_set_error(&(a->archive),
@@ -3311,7 +3339,7 @@
 		if ((r =3D seek_pack(a)) < 0)
 			return (r);
 		zip->pack_stream_bytes_unconsumed =3D
-		    zip->pack_stream_inbytes_remaining;
+		    (size_t)zip->pack_stream_inbytes_remaining;
 		read_consume(a);
=20
 		/* Read following three sub streams. */
@@ -3333,7 +3361,7 @@
=20
 			/* Allocate memory for the decorded data of a sub
 			 * stream. */
-			b[i] =3D malloc(zip->folder_outbytes_remaining);
+			b[i] =3D malloc((size_t)zip->folder_outbytes_remaining);
 			if (b[i] =3D=3D NULL) {
 				archive_set_error(&a->archive, ENOMEM,
 				    "No memory for 7-Zip decompression");
@@ -3428,7 +3456,7 @@
 			    "Truncated 7-Zip file body");
 			return (ARCHIVE_FATAL);
 		}
-		bytes -=3D skipped_bytes;
+		bytes -=3D (size_t)skipped_bytes;
 		if (zip->pack_stream_bytes_unconsumed)
 			read_consume(a);
 	}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_read_support_format_cab.c
--- a/head/contrib/libarchive/libarchive/archive_read_support_format_cab.c	=
Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_read_support_format_cab.c	=
Fri Aug 10 14:19:25 2012 +0300
@@ -292,6 +292,8 @@
 	char			 end_of_archive;
 	char			 end_of_entry;
 	char			 end_of_entry_cleanup;
+	char			 read_data_invoked;
+	int64_t			 bytes_skipped;
=20
 	unsigned char		*uncompressed_buffer;
 	size_t			 uncompressed_buffer_size;
@@ -798,7 +800,7 @@
 		file->offset =3D archive_le32dec(p + CFFILE_uoffFolderStart);
 		file->folder =3D archive_le16dec(p + CFFILE_iFolder);
 		file->mtime =3D cab_dos_time(p + CFFILE_date_time);
-		file->attr =3D archive_le16dec(p + CFFILE_attribs);
+		file->attr =3D (uint8_t)archive_le16dec(p + CFFILE_attribs);
 		__archive_read_consume(a, 16);
=20
 		cab->cab_offset +=3D 16;
@@ -988,7 +990,7 @@
 	if (file->attr & ATTR_RDONLY)
 		archive_entry_set_mode(entry, AE_IFREG | 0555);
 	else
-		archive_entry_set_mode(entry, AE_IFREG | 0777);
+		archive_entry_set_mode(entry, AE_IFREG | 0666);
 	archive_entry_set_mtime(entry, file->mtime, 0);
=20
 	cab->entry_bytes_remaining =3D file->uncompressed_size;
@@ -1026,9 +1028,22 @@
 	default:
 		break;
 	}
+	if (cab->read_data_invoked =3D=3D 0) {
+		if (cab->bytes_skipped) {
+			if (cab->entry_cfdata =3D=3D NULL) {
+				r =3D cab_next_cfdata(a);
+				if (r < 0)
+					return (r);
+			}
+			if (cab_consume_cfdata(a, cab->bytes_skipped) < 0)
+				return (ARCHIVE_FATAL);
+			cab->bytes_skipped =3D 0;
+		}
+		cab->read_data_invoked =3D 1;
+	}
 	if (cab->entry_unconsumed) {
 		/* Consume as much as the compressor actually used. */
-		r =3D cab_consume_cfdata(a, cab->entry_unconsumed);
+		r =3D (int)cab_consume_cfdata(a, cab->entry_unconsumed);
 		cab->entry_unconsumed =3D 0;
 		if (r < 0)
 			return (r);
@@ -1358,46 +1373,25 @@
 	struct cab *cab =3D (struct cab *)(a->format->data);
 	struct cfdata *cfdata;
 	const void *d;
-	int64_t skipped_bytes;
=20
 	cfdata =3D cab->entry_cfdata;
=20
-	if (cfdata->uncompressed_avail =3D=3D 0 &&
-		cfdata->read_offset > 0) {
-		/* we've already skipped some bytes before really read. */
-		skipped_bytes =3D cfdata->read_offset;
-		cfdata->read_offset =3D 0;
-		cfdata->uncompressed_bytes_remaining +=3D skipped_bytes;
-	} else
-		skipped_bytes =3D 0;
-	do {
-		/*
-		 * Note: '1' here is a performance optimization.
-		 * Recall that the decompression layer returns a count of
-		 * available bytes; asking for more than that forces the
-		 * decompressor to combine reads by copying data.
-		 */
-		d =3D __archive_read_ahead(a, 1, avail);
-		if (*avail <=3D 0) {
-			*avail =3D truncated_error(a);
-			return (NULL);
-		}
-		if (*avail > cfdata->uncompressed_bytes_remaining)
-			*avail =3D cfdata->uncompressed_bytes_remaining;
-		cfdata->uncompressed_avail =3D cfdata->uncompressed_size;
-		cfdata->unconsumed =3D *avail;
-		cfdata->sum_ptr =3D d;
-		if (skipped_bytes > 0) {
-			skipped_bytes =3D
-			    cab_minimum_consume_cfdata(a, skipped_bytes);
-			if (skipped_bytes < 0) {
-				*avail =3D ARCHIVE_FATAL;
-				return (NULL);
-			}
-			continue;
-		}
-	} while (0);
-
+	/*
+	 * Note: '1' here is a performance optimization.
+	 * Recall that the decompression layer returns a count of
+	 * available bytes; asking for more than that forces the
+	 * decompressor to combine reads by copying data.
+	 */
+	d =3D __archive_read_ahead(a, 1, avail);
+	if (*avail <=3D 0) {
+		*avail =3D truncated_error(a);
+		return (NULL);
+	}
+	if (*avail > cfdata->uncompressed_bytes_remaining)
+		*avail =3D cfdata->uncompressed_bytes_remaining;
+	cfdata->uncompressed_avail =3D cfdata->uncompressed_size;
+	cfdata->unconsumed =3D *avail;
+	cfdata->sum_ptr =3D d;
 	return (d);
 }
=20
@@ -1543,7 +1537,7 @@
 			return (NULL);
 		}
 	}
-	uavail =3D cab->stream.total_out;
+	uavail =3D (uint16_t)cab->stream.total_out;
=20
 	if (uavail < cfdata->uncompressed_size) {
 		archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
@@ -1721,7 +1715,7 @@
 		}
 	}
=20
-	uavail =3D cab->xstrm.total_out;
+	uavail =3D (uint16_t)cab->xstrm.total_out;
 	/*
 	 * Make sure a read pointer advances to next CFDATA.
 	 */
@@ -1793,9 +1787,8 @@
 		rbytes -=3D cbytes;
=20
 		if (cfdata->uncompressed_avail =3D=3D 0 &&
-		    (cab->entry_cffolder->comptype =3D=3D COMPTYPE_NONE ||
-		     cab->entry_cffile->folder =3D=3D iFoldCONTINUED_PREV_AND_NEXT ||
-			 cab->entry_cffile->folder =3D=3D iFoldCONTINUED_FROM_PREV)) {
+		   (cab->entry_cffile->folder =3D=3D iFoldCONTINUED_PREV_AND_NEXT ||
+		    cab->entry_cffile->folder =3D=3D iFoldCONTINUED_FROM_PREV)) {
 			/* We have not read any data yet. */
 			if (cbytes =3D=3D cfdata->uncompressed_bytes_remaining) {
 				/* Skip whole current CFDATA. */
@@ -1821,8 +1814,8 @@
 				}
 				continue;
 			}
-			cfdata->read_offset +=3D cbytes;
-			cfdata->uncompressed_bytes_remaining -=3D cbytes;
+			cfdata->read_offset +=3D (uint16_t)cbytes;
+			cfdata->uncompressed_bytes_remaining -=3D (uint16_t)cbytes;
 			break;
 		} else if (cbytes =3D=3D 0) {
 			err =3D cab_next_cfdata(a);
@@ -1846,7 +1839,7 @@
 			if (avail <=3D 0)
 				return (ARCHIVE_FATAL);
 			if (avail > cbytes)
-				avail =3D cbytes;
+				avail =3D (ssize_t)cbytes;
 			if (cab_minimum_consume_cfdata(a, avail) < 0)
 				return (ARCHIVE_FATAL);
 			cbytes -=3D avail;
@@ -1875,8 +1868,8 @@
 		else
 			cbytes =3D cfdata->unconsumed;
 		rbytes -=3D cbytes;=20
-		cfdata->read_offset +=3D cbytes;
-		cfdata->uncompressed_bytes_remaining -=3D cbytes;
+		cfdata->read_offset +=3D (uint16_t)cbytes;
+		cfdata->uncompressed_bytes_remaining -=3D (uint16_t)cbytes;
 		cfdata->unconsumed -=3D cbytes;
 	} else {
 		cbytes =3D cfdata->uncompressed_avail - cfdata->read_offset;
@@ -1884,8 +1877,8 @@
 			if (consumed_bytes < cbytes)
 				cbytes =3D consumed_bytes;
 			rbytes -=3D cbytes;
-			cfdata->read_offset +=3D cbytes;
-			cfdata->uncompressed_bytes_remaining -=3D cbytes;
+			cfdata->read_offset +=3D (uint16_t)cbytes;
+			cfdata->uncompressed_bytes_remaining -=3D (uint16_t)cbytes;
 		}
=20
 		if (cfdata->unconsumed) {
@@ -1896,12 +1889,12 @@
 	}
 	if (cbytes) {
 		/* Compute the sum. */
-		cab_checksum_update(a, cbytes);
+		cab_checksum_update(a, (size_t)cbytes);
=20
 		/* Consume as much as the compressor actually used. */
 		__archive_read_consume(a, cbytes);
 		cab->cab_offset +=3D cbytes;
-		cfdata->compressed_bytes_remaining -=3D cbytes;
+		cfdata->compressed_bytes_remaining -=3D (uint16_t)cbytes;
 		if (cfdata->compressed_bytes_remaining =3D=3D 0) {
 			err =3D cab_checksum_finish(a);
 			if (err < 0)
@@ -1945,7 +1938,7 @@
 			return (bytes_avail);
 	}
 	if (bytes_avail > cab->entry_bytes_remaining)
-		bytes_avail =3D cab->entry_bytes_remaining;
+		bytes_avail =3D (ssize_t)cab->entry_bytes_remaining;
=20
 	*size =3D bytes_avail;
 	*offset =3D cab->entry_offset;
@@ -1954,6 +1947,11 @@
 	if (cab->entry_bytes_remaining =3D=3D 0)
 		cab->end_of_entry =3D 1;
 	cab->entry_unconsumed =3D bytes_avail;
+	if (cab->entry_cffolder->comptype =3D=3D COMPTYPE_NONE) {
+		/* Don't consume more than current entry used. */
+		if (cab->entry_cfdata->unconsumed > cab->entry_unconsumed)
+			cab->entry_cfdata->unconsumed =3D cab->entry_unconsumed;
+	}
 	return (ARCHIVE_OK);
 }
=20
@@ -1969,9 +1967,17 @@
 	if (cab->end_of_archive)
 		return (ARCHIVE_EOF);
=20
+	if (!cab->read_data_invoked) {
+		cab->bytes_skipped +=3D cab->entry_bytes_remaining;
+		cab->entry_bytes_remaining =3D 0;
+		/* This entry is finished and done. */
+		cab->end_of_entry_cleanup =3D cab->end_of_entry =3D 1;
+		return (ARCHIVE_OK);
+	}
+
 	if (cab->entry_unconsumed) {
 		/* Consume as much as the compressor actually used. */
-		r =3D cab_consume_cfdata(a, cab->entry_unconsumed);
+		r =3D (int)cab_consume_cfdata(a, cab->entry_unconsumed);
 		cab->entry_unconsumed =3D 0;
 		if (r < 0)
 			return (r);
@@ -1993,6 +1999,11 @@
 	if (bytes_skipped < 0)
 		return (ARCHIVE_FATAL);
=20
+	/* If the compression type is none(uncompressed), we've already
+	 * consumed data as much as the current entry size. */
+	if (cab->entry_cffolder->comptype =3D=3D COMPTYPE_NONE)
+		cab->entry_cfdata->unconsumed =3D 0;
+
 	/* This entry is finished and done. */
 	cab->end_of_entry_cleanup =3D cab->end_of_entry =3D 1;
 	return (ARCHIVE_OK);
@@ -2227,7 +2238,9 @@
=20
 /* Notify how many bits we consumed. */
 #define lzx_br_consume(br, n)	((br)->cache_avail -=3D (n))
-#define lzx_br_consume_unalined_bits(br) ((br)->cache_avail &=3D ~0x0f)
+#define lzx_br_consume_unaligned_bits(br) ((br)->cache_avail &=3D ~0x0f)
+
+#define lzx_br_is_unaligned(br)	((br)->cache_avail & 0x0f)
=20
 static const uint32_t cache_masks[] =3D {
 	0x00000000, 0x00000001, 0x00000003, 0x00000007,
@@ -2354,24 +2367,25 @@
 #define ST_RD_TRANSLATION_SIZE	1
 #define ST_RD_BLOCK_TYPE	2
 #define ST_RD_BLOCK_SIZE	3
-#define ST_RD_R0		4
-#define ST_RD_R1		5
-#define ST_RD_R2		6
-#define ST_COPY_UNCOMP1		7
-#define ST_COPY_UNCOMP2		8
-#define ST_RD_ALIGNED_OFFSET	9
-#define ST_RD_VERBATIM		10
-#define ST_RD_PRE_MAIN_TREE_256	11
-#define ST_MAIN_TREE_256	12
-#define ST_RD_PRE_MAIN_TREE_REM	13
-#define ST_MAIN_TREE_REM	14
-#define ST_RD_PRE_LENGTH_TREE	15
-#define ST_LENGTH_TREE		16
-#define ST_MAIN			17
-#define ST_LENGTH		18
-#define ST_OFFSET		19
-#define ST_REAL_POS		20
-#define ST_COPY			21
+#define ST_RD_ALIGNMENT		4
+#define ST_RD_R0		5
+#define ST_RD_R1		6
+#define ST_RD_R2		7
+#define ST_COPY_UNCOMP1		8
+#define ST_COPY_UNCOMP2		9
+#define ST_RD_ALIGNED_OFFSET	10
+#define ST_RD_VERBATIM		11
+#define ST_RD_PRE_MAIN_TREE_256	12
+#define ST_MAIN_TREE_256	13
+#define ST_RD_PRE_MAIN_TREE_REM	14
+#define ST_MAIN_TREE_REM	15
+#define ST_RD_PRE_LENGTH_TREE	16
+#define ST_LENGTH_TREE		17
+#define ST_MAIN			18
+#define ST_LENGTH		19
+#define ST_OFFSET		20
+#define ST_REAL_POS		21
+#define ST_COPY			22
=20
 static int
 lzx_decode(struct lzx_stream *strm, int last)
@@ -2475,15 +2489,25 @@
 					ds->state =3D ST_RD_ALIGNED_OFFSET;
 				break;
 			}
+			/* FALL THROUGH */
+		case ST_RD_ALIGNMENT:
 			/*
 			 * Handle an Uncompressed Block.
 			 */
 			/* Skip padding to align following field on
 			 * 16-bit boundary. */
-			if (br->cache_avail =3D=3D 32 || br->cache_avail =3D=3D 16)
-				lzx_br_consume(br, 16);
-			else
-				lzx_br_consume_unalined_bits(br);
+			if (lzx_br_is_unaligned(br))
+				lzx_br_consume_unaligned_bits(br);
+			else {
+				if (lzx_br_read_ahead(strm, br, 16))
+					lzx_br_consume(br, 16);
+				else {
+					ds->state =3D ST_RD_ALIGNMENT;
+					if (last)
+						goto failed;
+					return (ARCHIVE_OK);
+				}
+			}
 			/* Preparation to read repeated offsets R0,R1 and R2. */
 			ds->rbytes_avail =3D 0;
 			ds->state =3D ST_RD_R0;
@@ -2508,8 +2532,7 @@
 					lzx_br_consume(br, 16);
 					archive_le16enc(ds->rbytes, u16);
 					ds->rbytes_avail =3D 2;
-				} else
-					ds->rbytes_avail =3D 0;
+				}
 				if (ds->rbytes_avail < 4 && ds->br.have_odd) {
 					ds->rbytes[ds->rbytes_avail++] =3D
 					    ds->br.odd;
@@ -2525,6 +2548,7 @@
 					    *strm->next_in++;
 					strm->avail_in--;
 				}
+				ds->rbytes_avail =3D 0;
 				if (ds->state =3D=3D ST_RD_R0) {
 					ds->r0 =3D archive_le32dec(ds->rbytes);
 					if (ds->r0 < 0)
@@ -2549,8 +2573,7 @@
 			 * Copy bytes form next_in to next_out directly.
 			 */
 			while (ds->block_bytes_avail) {
-				unsigned char *d;
-				int l,ll;
+				int l;
=20
 				if (strm->avail_out <=3D 0)
 					/* Output buffer is empty. */
@@ -2568,17 +2591,16 @@
 					l =3D (int)strm->avail_out;
 				if (l > strm->avail_in)
 					l =3D (int)strm->avail_in;
-				ll =3D l;
-				d =3D &(ds->w_buff[ds->w_pos]);
-				while (--l >=3D 0) {
-					*strm->next_out++ =3D *strm->next_in;
-					*d++ =3D *strm->next_in++;
-				}
-				strm->avail_out -=3D ll;
-				strm->total_out +=3D ll;
-				strm->avail_in -=3D ll;
-				ds->w_pos =3D (ds->w_pos + ll) & ds->w_mask;
-				ds->block_bytes_avail -=3D ll;
+				memcpy(strm->next_out, strm->next_in, l);
+				memcpy(&(ds->w_buff[ds->w_pos]),
+				    strm->next_in, l);
+				strm->next_in +=3D l;
+				strm->avail_in -=3D l;
+				strm->next_out +=3D l;
+				strm->avail_out -=3D l;
+				strm->total_out +=3D l;
+				ds->w_pos =3D (ds->w_pos + l) & ds->w_mask;
+				ds->block_bytes_avail -=3D l;
 			}
 			/* FALL THROUGH */
 		case ST_COPY_UNCOMP2:
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_read_support_format_cpio.c
--- a/head/contrib/libarchive/libarchive/archive_read_support_format_cpio.c=
	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_read_support_format_cpio.c=
	Fri Aug 10 14:19:25 2012 +0300
@@ -25,7 +25,7 @@
  */
=20
 #include "archive_platform.h"
-__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/archive_read_suppor=
t_format_cpio.c 232153 2012-02-25 10:58:02Z mm $");
+__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/archive_read_suppor=
t_format_cpio.c 238856 2012-07-28 06:38:44Z mm $");
=20
 #ifdef HAVE_ERRNO_H
 #include <errno.h>
@@ -398,11 +398,12 @@
=20
 	/* If this is a symlink, read the link contents. */
 	if (archive_entry_filetype(entry) =3D=3D AE_IFLNK) {
-		h =3D __archive_read_ahead(a, cpio->entry_bytes_remaining, NULL);
+		h =3D __archive_read_ahead(a,
+			(size_t)cpio->entry_bytes_remaining, NULL);
 		if (h =3D=3D NULL)
 			return (ARCHIVE_FATAL);
 		if (archive_entry_copy_symlink_l(entry, (const char *)h,
-		    cpio->entry_bytes_remaining, sconv) !=3D 0) {
+		    (size_t)cpio->entry_bytes_remaining, sconv) !=3D 0) {
 			if (errno =3D=3D ENOMEM) {
 				archive_set_error(&a->archive, ENOMEM,
 				    "Can't allocate memory for Linkname");
@@ -458,7 +459,7 @@
 		if (bytes_read <=3D 0)
 			return (ARCHIVE_FATAL);
 		if (bytes_read > cpio->entry_bytes_remaining)
-			bytes_read =3D cpio->entry_bytes_remaining;
+			bytes_read =3D (ssize_t)cpio->entry_bytes_remaining;
 		*size =3D bytes_read;
 		cpio->entry_bytes_unconsumed =3D bytes_read;
 		*offset =3D cpio->entry_offset;
@@ -603,17 +604,23 @@
 		/* TODO: Abort here? */
 	}
=20
-	archive_entry_set_devmajor(entry, atol16(header + newc_devmajor_offset, n=
ewc_devmajor_size));
-	archive_entry_set_devminor(entry, atol16(header + newc_devminor_offset, n=
ewc_devminor_size));
+	archive_entry_set_devmajor(entry,
+		(dev_t)atol16(header + newc_devmajor_offset, newc_devmajor_size));
+	archive_entry_set_devminor(entry,=20
+		(dev_t)atol16(header + newc_devminor_offset, newc_devminor_size));
 	archive_entry_set_ino(entry, atol16(header + newc_ino_offset, newc_ino_si=
ze));
-	archive_entry_set_mode(entry, atol16(header + newc_mode_offset, newc_mode=
_size));
+	archive_entry_set_mode(entry,=20
+		(mode_t)atol16(header + newc_mode_offset, newc_mode_size));
 	archive_entry_set_uid(entry, atol16(header + newc_uid_offset, newc_uid_si=
ze));
 	archive_entry_set_gid(entry, atol16(header + newc_gid_offset, newc_gid_si=
ze));
-	archive_entry_set_nlink(entry, atol16(header + newc_nlink_offset, newc_nl=
ink_size));
-	archive_entry_set_rdevmajor(entry, atol16(header + newc_rdevmajor_offset,=
 newc_rdevmajor_size));
-	archive_entry_set_rdevminor(entry, atol16(header + newc_rdevminor_offset,=
 newc_rdevminor_size));
+	archive_entry_set_nlink(entry,
+		(unsigned int)atol16(header + newc_nlink_offset, newc_nlink_size));
+	archive_entry_set_rdevmajor(entry,
+		(dev_t)atol16(header + newc_rdevmajor_offset, newc_rdevmajor_size));
+	archive_entry_set_rdevminor(entry,
+		(dev_t)atol16(header + newc_rdevminor_offset, newc_rdevminor_size));
 	archive_entry_set_mtime(entry, atol16(header + newc_mtime_offset, newc_mt=
ime_size), 0);
-	*namelength =3D atol16(header + newc_namesize_offset, newc_namesize_size);
+	*namelength =3D (size_t)atol16(header + newc_namesize_offset, newc_namesi=
ze_size);
 	/* Pad name to 2 more than a multiple of 4. */
 	*name_pad =3D (2 - *namelength) & 3;
=20
@@ -767,15 +774,19 @@
 	/* Parse out octal fields. */
 	header =3D (const char *)h;
=20
-	archive_entry_set_dev(entry, atol8(header + odc_dev_offset, odc_dev_size)=
);
+	archive_entry_set_dev(entry,=20
+		(dev_t)atol8(header + odc_dev_offset, odc_dev_size));
 	archive_entry_set_ino(entry, atol8(header + odc_ino_offset, odc_ino_size)=
);
-	archive_entry_set_mode(entry, atol8(header + odc_mode_offset, odc_mode_si=
ze));
+	archive_entry_set_mode(entry,=20
+		(mode_t)atol8(header + odc_mode_offset, odc_mode_size));
 	archive_entry_set_uid(entry, atol8(header + odc_uid_offset, odc_uid_size)=
);
 	archive_entry_set_gid(entry, atol8(header + odc_gid_offset, odc_gid_size)=
);
-	archive_entry_set_nlink(entry, atol8(header + odc_nlink_offset, odc_nlink=
_size));
-	archive_entry_set_rdev(entry, atol8(header + odc_rdev_offset, odc_rdev_si=
ze));
+	archive_entry_set_nlink(entry,=20
+		(unsigned int)atol8(header + odc_nlink_offset, odc_nlink_size));
+	archive_entry_set_rdev(entry,
+		(dev_t)atol8(header + odc_rdev_offset, odc_rdev_size));
 	archive_entry_set_mtime(entry, atol8(header + odc_mtime_offset, odc_mtime=
_size), 0);
-	*namelength =3D atol8(header + odc_namesize_offset, odc_namesize_size);
+	*namelength =3D (size_t)atol8(header + odc_namesize_offset, odc_namesize_=
size);
 	*name_pad =3D 0; /* No padding of filename. */
=20
 	/*
@@ -816,15 +827,19 @@
 	/* Parse out octal fields. */
 	header =3D (const char *)h;
=20
-	archive_entry_set_dev(entry, atol16(header + afiol_dev_offset, afiol_dev_=
size));
+	archive_entry_set_dev(entry,=20
+		(dev_t)atol16(header + afiol_dev_offset, afiol_dev_size));
 	archive_entry_set_ino(entry, atol16(header + afiol_ino_offset, afiol_ino_=
size));
-	archive_entry_set_mode(entry, atol8(header + afiol_mode_offset, afiol_mod=
e_size));
+	archive_entry_set_mode(entry,
+		(mode_t)atol8(header + afiol_mode_offset, afiol_mode_size));
 	archive_entry_set_uid(entry, atol16(header + afiol_uid_offset, afiol_uid_=
size));
 	archive_entry_set_gid(entry, atol16(header + afiol_gid_offset, afiol_gid_=
size));
-	archive_entry_set_nlink(entry, atol16(header + afiol_nlink_offset, afiol_=
nlink_size));
-	archive_entry_set_rdev(entry, atol16(header + afiol_rdev_offset, afiol_rd=
ev_size));
+	archive_entry_set_nlink(entry,
+		(unsigned int)atol16(header + afiol_nlink_offset, afiol_nlink_size));
+	archive_entry_set_rdev(entry,
+		(dev_t)atol16(header + afiol_rdev_offset, afiol_rdev_size));
 	archive_entry_set_mtime(entry, atol16(header + afiol_mtime_offset, afiol_=
mtime_size), 0);
-	*namelength =3D atol16(header + afiol_namesize_offset, afiol_namesize_siz=
e);
+	*namelength =3D (size_t)atol16(header + afiol_namesize_offset, afiol_name=
size_size);
 	*name_pad =3D 0; /* No padding of filename. */
=20
 	cpio->entry_bytes_remaining =3D
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_read_support_format_iso9660.c
--- a/head/contrib/libarchive/libarchive/archive_read_support_format_iso966=
0.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_read_support_format_iso966=
0.c	Fri Aug 10 14:19:25 2012 +0300
@@ -26,7 +26,7 @@
  */
=20
 #include "archive_platform.h"
-__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/archive_read_suppor=
t_format_iso9660.c 232153 2012-02-25 10:58:02Z mm $");
+__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/archive_read_suppor=
t_format_iso9660.c 238856 2012-07-28 06:38:44Z mm $");
=20
 #ifdef HAVE_ERRNO_H
 #include <errno.h>
@@ -975,8 +975,8 @@
 		iso9660->current_position =3D parent->offset;
 	}
=20
-	step =3D ((parent->size + iso9660->logical_block_size -1) /
-	    iso9660->logical_block_size) * iso9660->logical_block_size;
+	step =3D (size_t)(((parent->size + iso9660->logical_block_size -1) /
+	    iso9660->logical_block_size) * iso9660->logical_block_size);
 	b =3D __archive_read_ahead(a, step, NULL);
 	if (b =3D=3D NULL) {
 		archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
@@ -1397,7 +1397,7 @@
 		return (ARCHIVE_FATAL);
 	}
 	if (bytes_read > iso9660->entry_bytes_remaining)
-		bytes_read =3D iso9660->entry_bytes_remaining;
+		bytes_read =3D (ssize_t)iso9660->entry_bytes_remaining;
 	avail =3D bytes_read;
 	uncompressed_size =3D 0;
=20
@@ -1405,9 +1405,9 @@
 		size_t ceil, xsize;
=20
 		/* Allocate block pointers buffer. */
-		ceil =3D (zisofs->pz_uncompressed_size +
-			(1LL << zisofs->pz_log2_bs) - 1)
-			>> zisofs->pz_log2_bs;
+		ceil =3D (size_t)((zisofs->pz_uncompressed_size +
+			(((int64_t)1) << zisofs->pz_log2_bs) - 1)
+			>> zisofs->pz_log2_bs);
 		xsize =3D (ceil + 1) * 4;
 		if (zisofs->block_pointers_alloc < xsize) {
 			size_t alloc;
@@ -1671,7 +1671,7 @@
 	if (*buff =3D=3D NULL)
 		return (ARCHIVE_FATAL);
 	if (bytes_read > iso9660->entry_bytes_remaining)
-		bytes_read =3D iso9660->entry_bytes_remaining;
+		bytes_read =3D (ssize_t)iso9660->entry_bytes_remaining;
 	*size =3D bytes_read;
 	*offset =3D iso9660->entry_sparse_offset;
 	iso9660->entry_sparse_offset +=3D bytes_read;
@@ -2277,7 +2277,7 @@
 			archive_set_error(&a->archive, ENOMEM, "Out of memory");
 			return (ARCHIVE_FATAL);
 		}
-		p =3D malloc(new_size * sizeof(p[0]));
+		p =3D calloc(new_size, sizeof(p[0]));
 		if (p =3D=3D NULL) {
 			archive_set_error(&a->archive, ENOMEM, "Out of memory");
 			return (ARCHIVE_FATAL);
@@ -2527,9 +2527,6 @@
=20
 	if (!file->symlink_continues || file->symlink.length < 1)
 		archive_string_empty(&file->symlink);
-	else if (!file->symlink_continues &&
-	    file->symlink.s[file->symlink.length - 1] !=3D '/')
-		separator =3D "/";
 	file->symlink_continues =3D 0;
=20
 	/*
@@ -3099,6 +3096,8 @@
 {
 	struct tm tm;
 	int offset;
+	time_t t;
+
 	memset(&tm, 0, sizeof(tm));
 	tm.tm_year =3D v[0];
 	tm.tm_mon =3D v[1] - 1;
@@ -3112,7 +3111,10 @@
 		tm.tm_hour -=3D offset / 4;
 		tm.tm_min -=3D (offset % 4) * 15;
 	}
-	return (time_from_tm(&tm));
+	t =3D time_from_tm(&tm);
+	if (t =3D=3D (time_t)-1)
+		return ((time_t)0);
+	return (t);
 }
=20
 static time_t
@@ -3120,6 +3122,8 @@
 {
 	struct tm tm;
 	int offset;
+	time_t t;
+
 	memset(&tm, 0, sizeof(tm));
 	tm.tm_year =3D (v[0] - '0') * 1000 + (v[1] - '0') * 100
 	    + (v[2] - '0') * 10 + (v[3] - '0')
@@ -3135,7 +3139,10 @@
 		tm.tm_hour -=3D offset / 4;
 		tm.tm_min -=3D (offset % 4) * 15;
 	}
-	return (time_from_tm(&tm));
+	t =3D time_from_tm(&tm);
+	if (t =3D=3D (time_t)-1)
+		return ((time_t)0);
+	return (t);
 }
=20
 static time_t
@@ -3149,7 +3156,8 @@
 #else
 	/* Else use direct calculation using POSIX assumptions. */
 	/* First, fix up tm_yday based on the year/month/day. */
-	mktime(t);
+	if (mktime(t) =3D=3D (time_t)-1)
+		return ((time_t)-1);
 	/* Then we can compute timegm() from first principles. */
 	return (t->tm_sec + t->tm_min * 60 + t->tm_hour * 3600
 	    + t->tm_yday * 86400 + (t->tm_year - 70) * 31536000
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_read_support_format_lha.c
--- a/head/contrib/libarchive/libarchive/archive_read_support_format_lha.c	=
Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_read_support_format_lha.c	=
Fri Aug 10 14:19:25 2012 +0300
@@ -951,7 +951,7 @@
=20
 	/* Read extended headers */
 	err2 =3D lha_read_file_extended_header(a, lha, NULL, 2,
-	    lha->compsize + 2, &extdsize);
+	    (size_t)(lha->compsize + 2), &extdsize);
 	if (err2 < ARCHIVE_WARN)
 		return (err2);
 	if (err2 < err)
@@ -1446,7 +1446,7 @@
 		return (ARCHIVE_FATAL);
 	}
 	if (bytes_avail > lha->entry_bytes_remaining)
-		bytes_avail =3D lha->entry_bytes_remaining;
+		bytes_avail =3D (ssize_t)lha->entry_bytes_remaining;
 	lha->entry_crc_calculated =3D
 	    lha_crc16(lha->entry_crc_calculated, *buff, bytes_avail);
 	*size =3D bytes_avail;
@@ -1529,7 +1529,7 @@
 		return (ARCHIVE_FATAL);
 	}
 	if (bytes_avail > lha->entry_bytes_remaining)
-		bytes_avail =3D lha->entry_bytes_remaining;
+		bytes_avail =3D (ssize_t)lha->entry_bytes_remaining;
=20
 	lha->strm.avail_in =3D bytes_avail;
 	lha->strm.total_in =3D 0;
@@ -1575,7 +1575,7 @@
 archive_read_format_lha_read_data_skip(struct archive_read *a)
 {
 	struct lha *lha;
-	off_t bytes_skipped;
+	int64_t bytes_skipped;
=20
 	lha =3D (struct lha *)(a->format->data);
=20
@@ -2016,7 +2016,7 @@
 		if (ds->w_pos - ds->copy_pos <=3D strm->avail_out)
 			copy_bytes =3D ds->w_pos - ds->copy_pos;
 		else
-			copy_bytes =3D strm->avail_out;
+			copy_bytes =3D (size_t)strm->avail_out;
 		memcpy(strm->next_out,
 		    ds->w_buff + ds->copy_pos, copy_bytes);
 		ds->copy_pos +=3D copy_bytes;
@@ -2024,7 +2024,7 @@
 		if (ds->w_remaining <=3D strm->avail_out)
 			copy_bytes =3D ds->w_remaining;
 		else
-			copy_bytes =3D strm->avail_out;
+			copy_bytes =3D (size_t)strm->avail_out;
 		memcpy(strm->next_out,
 		    ds->w_buff + ds->w_size - ds->w_remaining, copy_bytes);
 		ds->w_remaining -=3D copy_bytes;
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_read_support_format_mtree.c
--- a/head/contrib/libarchive/libarchive/archive_read_support_format_mtree.=
c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_read_support_format_mtree.=
c	Fri Aug 10 14:19:25 2012 +0300
@@ -26,7 +26,7 @@
  */
=20
 #include "archive_platform.h"
-__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/archive_read_suppor=
t_format_mtree.c 232153 2012-02-25 10:58:02Z mm $");
+__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/archive_read_suppor=
t_format_mtree.c 238856 2012-07-28 06:38:44Z mm $");
=20
 #ifdef HAVE_SYS_STAT_H
 #include <sys/stat.h>
@@ -1183,7 +1183,7 @@
=20
 	comma1 =3D strchr(val, ',');
 	if (comma1 =3D=3D NULL) {
-		archive_entry_set_dev(entry, mtree_atol10(&val));
+		archive_entry_set_dev(entry, (dev_t)mtree_atol10(&val));
 		return (ARCHIVE_OK);
 	}
 	++comma1;
@@ -1194,8 +1194,8 @@
 		return (ARCHIVE_WARN);
 	}
 	++comma2;
-	archive_entry_set_rdevmajor(entry, mtree_atol(&comma1));
-	archive_entry_set_rdevminor(entry, mtree_atol(&comma2));
+	archive_entry_set_rdevmajor(entry, (dev_t)mtree_atol(&comma1));
+	archive_entry_set_rdevminor(entry, (dev_t)mtree_atol(&comma2));
 	return (ARCHIVE_OK);
 }
=20
@@ -1280,7 +1280,7 @@
 			if (val[0] >=3D '0' && val[0] <=3D '9') {
 				*parsed_kws |=3D MTREE_HAS_PERM;
 				archive_entry_set_perm(entry,
-				    mtree_atol8(&val));
+				    (mode_t)mtree_atol8(&val));
 			} else {
 				archive_set_error(&a->archive,
 				    ARCHIVE_ERRNO_FILE_FORMAT,
@@ -1292,7 +1292,8 @@
 	case 'n':
 		if (strcmp(key, "nlink") =3D=3D 0) {
 			*parsed_kws |=3D MTREE_HAS_NLINK;
-			archive_entry_set_nlink(entry, mtree_atol10(&val));
+			archive_entry_set_nlink(entry,
+				(unsigned int)mtree_atol10(&val));
 			break;
 		}
 	case 'r':
@@ -1434,7 +1435,7 @@
 	*buff =3D mtree->buff;
 	*offset =3D mtree->offset;
 	if ((int64_t)mtree->buffsize > mtree->cur_size - mtree->offset)
-		bytes_to_read =3D mtree->cur_size - mtree->offset;
+		bytes_to_read =3D (size_t)(mtree->cur_size - mtree->offset);
 	else
 		bytes_to_read =3D mtree->buffsize;
 	bytes_read =3D read(mtree->fd, mtree->buff, bytes_to_read);
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_read_support_format_rar.c
--- a/head/contrib/libarchive/libarchive/archive_read_support_format_rar.c	=
Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_read_support_format_rar.c	=
Fri Aug 10 14:19:25 2012 +0300
@@ -453,7 +453,7 @@
       if (br->next_in =3D=3D NULL)
         return (0);
       if (br->avail_in > rar->bytes_remaining)
-        br->avail_in =3D rar->bytes_remaining;
+        br->avail_in =3D (ssize_t)rar->bytes_remaining;
       if (br->avail_in =3D=3D 0)
         return (0);
     }
@@ -481,7 +481,7 @@
       return (ARCHIVE_FATAL);
     }
     if (br->avail_in > rar->bytes_remaining)
-      br->avail_in =3D rar->bytes_remaining;
+      br->avail_in =3D (ssize_t)rar->bytes_remaining;
     if (br->cache_avail =3D=3D 0)
       (void)rar_br_fillup(a, br);
   }
@@ -522,7 +522,7 @@
 static inline int
 lzss_offset_for_position(struct lzss *lzss, int64_t pos)
 {
-  return pos & lzss->mask;
+  return (int)(pos & lzss->mask);
 }
=20
 static inline unsigned char *
@@ -1084,11 +1084,11 @@
     return (ARCHIVE_FATAL);
   }
=20
-  if ((h =3D __archive_read_ahead(a, header_size - 7, NULL)) =3D=3D NULL)
+  if ((h =3D __archive_read_ahead(a, (size_t)header_size - 7, NULL)) =3D=
=3D NULL)
     return (ARCHIVE_FATAL);
=20
   /* File Header CRC check. */
-  crc32_val =3D crc32(crc32_val, h, header_size - 7);
+  crc32_val =3D crc32(crc32_val, h, (unsigned)(header_size - 7));
   if ((crc32_val & 0xffff) !=3D archive_le16dec(rar_header.crc)) {
     archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
       "Header CRC error");
@@ -1131,9 +1131,6 @@
     rar->unp_size =3D archive_le32dec(file_header.unp_size);
   }
=20
-  /* TODO: Need to use CRC check for these kind of cases.
-   * For now, check if sizes are not < 0.
-   */
   if (rar->packed_size < 0 || rar->unp_size < 0)
   {
     archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
@@ -1148,7 +1145,7 @@
     size_t distance =3D p - (const char *)h;
     header_size +=3D rar->packed_size;
     /* Make sure we have the extended data. */
-    if ((h =3D __archive_read_ahead(a, header_size - 7, NULL)) =3D=3D NULL)
+    if ((h =3D __archive_read_ahead(a, (size_t)header_size - 7, NULL)) =3D=
=3D NULL)
         return (ARCHIVE_FATAL);
     p =3D h;
     endp =3D p + header_size - 7;
@@ -1161,13 +1158,17 @@
       "Invalid filename size");
     return (ARCHIVE_FATAL);
   }
-  if (rar->filename_allocated < filename_size+2) {
-    rar->filename =3D realloc(rar->filename, filename_size+2);
-    if (rar->filename =3D=3D NULL) {
+  if (rar->filename_allocated < filename_size * 2 + 2) {
+    char *newptr;
+    size_t newsize =3D filename_size * 2 + 2;
+    newptr =3D realloc(rar->filename, newsize);
+    if (newptr =3D=3D NULL) {
       archive_set_error(&a->archive, ENOMEM,
                         "Couldn't allocate memory.");
       return (ARCHIVE_FATAL);
     }
+    rar->filename =3D newptr;
+    rar->filename_allocated =3D newsize;
   }
   filename =3D rar->filename;
   memcpy(filename, p, filename_size);
@@ -1176,15 +1177,17 @@
   {
     if (filename_size !=3D strlen(filename))
     {
-      unsigned char highbyte, flagbits, flagbyte, length, offset;
+      unsigned char highbyte, flagbits, flagbyte, offset;
+      unsigned fn_end;
=20
       end =3D filename_size;
+      fn_end =3D filename_size * 2;
       filename_size =3D 0;
       offset =3D strlen(filename) + 1;
       highbyte =3D *(p + offset++);
       flagbits =3D 0;
       flagbyte =3D 0;
-      while (offset < end && filename_size < end)
+      while (offset < end && filename_size < fn_end)
       {
         if (!flagbits)
         {
@@ -1210,19 +1213,26 @@
             break;
           case 3:
           {
-            length =3D *(p + offset++);
-            while (length)
-            {
-	          if (filename_size >=3D end)
-			    break;
-              filename[filename_size++] =3D *(p + offset);
+            char extra, high;
+            uint8_t length =3D *(p + offset++);
+
+            if (length & 0x80) {
+              extra =3D *(p + offset++);
+              high =3D (char)highbyte;
+            } else
+              extra =3D high =3D 0;
+            length =3D (length & 0x7f) + 2;
+            while (length && filename_size < fn_end) {
+              unsigned cp =3D filename_size >> 1;
+              filename[filename_size++] =3D high;
+              filename[filename_size++] =3D p[cp] + extra;
               length--;
             }
           }
           break;
         }
       }
-      if (filename_size >=3D end) {
+      if (filename_size > fn_end) {
         archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
           "Invalid filename");
         return (ARCHIVE_FATAL);
@@ -1322,7 +1332,8 @@
=20
   rar->bytes_remaining =3D rar->packed_size;
   rar->bytes_uncopied =3D rar->bytes_unconsumed =3D 0;
-  rar->lzss.position =3D rar->dictionary_size =3D rar->offset =3D 0;
+  rar->lzss.position =3D rar->offset =3D 0;
+  rar->dictionary_size =3D 0;
   rar->offset_outgoing =3D 0;
   rar->br.cache_avail =3D 0;
   rar->br.avail_in =3D 0;
@@ -1477,11 +1488,12 @@
   int ret =3D (ARCHIVE_OK);
=20
   rar =3D (struct rar *)(a->format->data);
-  if ((h =3D __archive_read_ahead(a, rar->packed_size, NULL)) =3D=3D NULL)
+  if ((h =3D __archive_read_ahead(a, (size_t)rar->packed_size, NULL)) =3D=
=3D NULL)
     return (ARCHIVE_FATAL);
   p =3D h;
=20
-  if (archive_entry_copy_symlink_l(entry, p, rar->packed_size, sconv))
+  if (archive_entry_copy_symlink_l(entry,
+      p, (size_t)rar->packed_size, sconv))
   {
     if (errno =3D=3D ENOMEM)
     {
@@ -1528,7 +1540,7 @@
     return (ARCHIVE_FATAL);
   }
   if (bytes_avail > rar->bytes_remaining)
-    bytes_avail =3D rar->bytes_remaining;
+    bytes_avail =3D (ssize_t)rar->bytes_remaining;
=20
   *size =3D bytes_avail;
   *offset =3D rar->offset;
@@ -1587,7 +1599,7 @@
       if (rar->bytes_uncopied > (rar->unp_buffer_size - rar->unp_offset))
         bs =3D rar->unp_buffer_size - rar->unp_offset;
       else
-        bs =3D rar->bytes_uncopied;
+        bs =3D (size_t)rar->bytes_uncopied;
       ret =3D copy_from_lzss_window(a, buff, rar->offset, bs);
       if (ret !=3D ARCHIVE_OK)
         return (ret);
@@ -1715,7 +1727,7 @@
     if (rar->bytes_uncopied > (rar->unp_buffer_size - rar->unp_offset))
       bs =3D rar->unp_buffer_size - rar->unp_offset;
     else
-      bs =3D rar->bytes_uncopied;
+      bs =3D (size_t)rar->bytes_uncopied;
     ret =3D copy_from_lzss_window(a, buff, rar->offset, bs);
     if (ret !=3D ARCHIVE_OK)
       return (ret);
@@ -1978,7 +1990,7 @@
     if (rar->unp_size >=3D DICTIONARY_MAX_SIZE)
       rar->dictionary_size =3D DICTIONARY_MAX_SIZE;
     else
-      rar->dictionary_size =3D rar_fls(rar->unp_size) << 1;
+      rar->dictionary_size =3D rar_fls((unsigned int)rar->unp_size) << 1;
     rar->lzss.window =3D (unsigned char *)realloc(rar->lzss.window,
                                                 rar->dictionary_size);
     if (rar->lzss.window =3D=3D NULL) {
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_read_support_format_tar.c
--- a/head/contrib/libarchive/libarchive/archive_read_support_format_tar.c	=
Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_read_support_format_tar.c	=
Fri Aug 10 14:19:25 2012 +0300
@@ -25,7 +25,7 @@
  */
=20
 #include "archive_platform.h"
-__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/archive_read_suppor=
t_format_tar.c 232153 2012-02-25 10:58:02Z mm $");
+__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/archive_read_suppor=
t_format_tar.c 238856 2012-07-28 06:38:44Z mm $");
=20
 #ifdef HAVE_ERRNO_H
 #include <errno.h>
@@ -527,56 +527,57 @@
=20
 	tar =3D (struct tar *)(a->format->data);
=20
-skip_hole:
-	/* Remove exhausted entries from sparse list. */
-	while (tar->sparse_list !=3D NULL &&
-	    tar->sparse_list->remaining =3D=3D 0) {
-		p =3D tar->sparse_list;
-		tar->sparse_list =3D p->next;
-		free(p);
+	for (;;) {
+		/* Remove exhausted entries from sparse list. */
+		while (tar->sparse_list !=3D NULL &&
+		    tar->sparse_list->remaining =3D=3D 0) {
+			p =3D tar->sparse_list;
+			tar->sparse_list =3D p->next;
+			free(p);
+		}
+
+		if (tar->entry_bytes_unconsumed) {
+			__archive_read_consume(a, tar->entry_bytes_unconsumed);
+			tar->entry_bytes_unconsumed =3D 0;
+		}
+
+		/* If we're at end of file, return EOF. */
+		if (tar->sparse_list =3D=3D NULL ||
+		    tar->entry_bytes_remaining =3D=3D 0) {
+			if (__archive_read_consume(a, tar->entry_padding) < 0)
+				return (ARCHIVE_FATAL);
+			tar->entry_padding =3D 0;
+			*buff =3D NULL;
+			*size =3D 0;
+			*offset =3D tar->realsize;
+			return (ARCHIVE_EOF);
+		}
+
+		*buff =3D __archive_read_ahead(a, 1, &bytes_read);
+		if (bytes_read < 0)
+			return (ARCHIVE_FATAL);
+		if (*buff =3D=3D NULL) {
+			archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
+			    "Truncated tar archive");
+			return (ARCHIVE_FATAL);
+		}
+		if (bytes_read > tar->entry_bytes_remaining)
+			bytes_read =3D (ssize_t)tar->entry_bytes_remaining;
+		/* Don't read more than is available in the
+		 * current sparse block. */
+		if (tar->sparse_list->remaining < bytes_read)
+			bytes_read =3D (ssize_t)tar->sparse_list->remaining;
+		*size =3D bytes_read;
+		*offset =3D tar->sparse_list->offset;
+		tar->sparse_list->remaining -=3D bytes_read;
+		tar->sparse_list->offset +=3D bytes_read;
+		tar->entry_bytes_remaining -=3D bytes_read;
+		tar->entry_bytes_unconsumed =3D bytes_read;
+
+		if (!tar->sparse_list->hole)
+			return (ARCHIVE_OK);
+		/* Current is hole data and skip this. */
 	}
-
-	if (tar->entry_bytes_unconsumed) {
-		__archive_read_consume(a, tar->entry_bytes_unconsumed);
-		tar->entry_bytes_unconsumed =3D 0;
-	}
-
-	/* If we're at end of file, return EOF. */
-	if (tar->sparse_list =3D=3D NULL || tar->entry_bytes_remaining =3D=3D 0) {
-		if (__archive_read_consume(a, tar->entry_padding) < 0)
-			return (ARCHIVE_FATAL);
-		tar->entry_padding =3D 0;
-		*buff =3D NULL;
-		*size =3D 0;
-		*offset =3D tar->realsize;
-		return (ARCHIVE_EOF);
-	}
-
-	*buff =3D __archive_read_ahead(a, 1, &bytes_read);
-	if (bytes_read < 0)
-		return (ARCHIVE_FATAL);
-	if (*buff =3D=3D NULL) {
-		archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
-		    "Truncated tar archive");
-		return (ARCHIVE_FATAL);
-	}
-	if (bytes_read > tar->entry_bytes_remaining)
-		bytes_read =3D tar->entry_bytes_remaining;
-	/* Don't read more than is available in the
-	 * current sparse block. */
-	if (tar->sparse_list->remaining < bytes_read)
-		bytes_read =3D tar->sparse_list->remaining;
-	*size =3D bytes_read;
-	*offset =3D tar->sparse_list->offset;
-	tar->sparse_list->remaining -=3D bytes_read;
-	tar->sparse_list->offset +=3D bytes_read;
-	tar->entry_bytes_remaining -=3D bytes_read;
-	tar->entry_bytes_unconsumed =3D bytes_read;
-
-	if (tar->sparse_list->hole)
-		goto skip_hole;
-
-	return (ARCHIVE_OK);
 }
=20
 static int
@@ -786,7 +787,7 @@
 	 * Test the checksum.  Note that POSIX specifies _unsigned_
 	 * bytes for this calculation.
 	 */
-	sum =3D tar_atol(header->checksum, sizeof(header->checksum));
+	sum =3D (int)tar_atol(header->checksum, sizeof(header->checksum));
 	check =3D 0;
 	for (i =3D 0; i < 148; i++)
 		check +=3D (unsigned char)bytes[i];
@@ -847,7 +848,7 @@
 	 * more to make sure that we don't overrun acl_text later.
 	 */
 	header =3D (const struct archive_entry_header_ustar *)h;
-	size =3D tar_atol(header->size, sizeof(header->size));
+	size =3D (size_t)tar_atol(header->size, sizeof(header->size));
 	err =3D read_body_to_string(a, tar, &(tar->acl_text), h, unconsumed);
 	if (err !=3D ARCHIVE_OK)
 		return (err);
@@ -1021,7 +1022,7 @@
 	}
=20
 	/* Fail if we can't make our buffer big enough. */
-	if (archive_string_ensure(as, size+1) =3D=3D NULL) {
+	if (archive_string_ensure(as, (size_t)size+1) =3D=3D NULL) {
 		archive_set_error(&a->archive, ENOMEM,
 		    "No memory");
 		return (ARCHIVE_FATAL);
@@ -1030,15 +1031,15 @@
 	tar_flush_unconsumed(a, unconsumed);
=20
 	/* Read the body into the string. */
-	*unconsumed =3D (size + 511) & ~ 511;
+	*unconsumed =3D (size_t)((size + 511) & ~ 511);
 	src =3D __archive_read_ahead(a, *unconsumed, NULL);
 	if (src =3D=3D NULL) {
 		*unconsumed =3D 0;
 		return (ARCHIVE_FATAL);
 	}
-	memcpy(as->s, src, size);
+	memcpy(as->s, src, (size_t)size);
 	as->s[size] =3D '\0';
-	as->length =3D size;
+	as->length =3D (size_t)size;
 	return (ARCHIVE_OK);
 }
=20
@@ -1068,7 +1069,8 @@
 		archive_string_empty(&(tar->entry_linkpath));
=20
 	/* Parse out the numeric fields (all are octal) */
-	archive_entry_set_mode(entry, tar_atol(header->mode, sizeof(header->mode)=
));
+	archive_entry_set_mode(entry,
+		(mode_t)tar_atol(header->mode, sizeof(header->mode)));
 	archive_entry_set_uid(entry, tar_atol(header->uid, sizeof(header->uid)));
 	archive_entry_set_gid(entry, tar_atol(header->gid, sizeof(header->gid)));
 	tar->entry_bytes_remaining =3D tar_atol(header->size, sizeof(header->size=
));
@@ -1310,13 +1312,13 @@
 	 * Q: Is the above idea really possible?  Even
 	 * when there are GNU or pax extension entries?
 	 */
-	data =3D __archive_read_ahead(a, size, NULL);
+	data =3D __archive_read_ahead(a, (size_t)size, NULL);
 	if (data =3D=3D NULL) {
 		*unconsumed =3D 0;
 		return (ARCHIVE_FATAL);
 	}
-	archive_entry_copy_mac_metadata(entry, data, size);
-	*unconsumed =3D (size + 511) & ~ 511;
+	archive_entry_copy_mac_metadata(entry, data, (size_t)size);
+	*unconsumed =3D (size_t)((size + 511) & ~ 511);
 	tar_flush_unconsumed(a, unconsumed);
 	return (tar_read_header(a, tar, entry, unconsumed));
 }
@@ -1424,9 +1426,9 @@
=20
 	/* Parse out device numbers only for char and block specials. */
 	if (header->typeflag[0] =3D=3D '3' || header->typeflag[0] =3D=3D '4') {
-		archive_entry_set_rdevmajor(entry,
+		archive_entry_set_rdevmajor(entry, (dev_t)
 		    tar_atol(header->rdevmajor, sizeof(header->rdevmajor)));
-		archive_entry_set_rdevminor(entry,
+		archive_entry_set_rdevminor(entry, (dev_t)
 		    tar_atol(header->rdevminor, sizeof(header->rdevminor)));
 	}
=20
@@ -1663,6 +1665,11 @@
 	long n;
 	int err =3D ARCHIVE_OK, r;
=20
+#ifndef __FreeBSD__
+	if (value =3D=3D NULL)
+		value =3D "";	/* Disable compiler warning; do not pass
+				 * NULL pointer to strlen().  */
+#endif
 	switch (key[0]) {
 	case 'G':
 		/* GNU "0.0" sparse pax format. */
@@ -1709,11 +1716,11 @@
=20
 		/* GNU "1.0" sparse pax format */
 		if (strcmp(key, "GNU.sparse.major") =3D=3D 0) {
-			tar->sparse_gnu_major =3D tar_atol10(value, strlen(value));
+			tar->sparse_gnu_major =3D (int)tar_atol10(value, strlen(value));
 			tar->sparse_gnu_pending =3D 1;
 		}
 		if (strcmp(key, "GNU.sparse.minor") =3D=3D 0) {
-			tar->sparse_gnu_minor =3D tar_atol10(value, strlen(value));
+			tar->sparse_gnu_minor =3D (int)tar_atol10(value, strlen(value));
 			tar->sparse_gnu_pending =3D 1;
 		}
 		if (strcmp(key, "GNU.sparse.name") =3D=3D 0) {
@@ -1796,20 +1803,20 @@
 			}
 		} else if (strcmp(key, "SCHILY.devmajor") =3D=3D 0) {
 			archive_entry_set_rdevmajor(entry,
-			    tar_atol10(value, strlen(value)));
+			    (dev_t)tar_atol10(value, strlen(value)));
 		} else if (strcmp(key, "SCHILY.devminor") =3D=3D 0) {
 			archive_entry_set_rdevminor(entry,
-			    tar_atol10(value, strlen(value)));
+			    (dev_t)tar_atol10(value, strlen(value)));
 		} else if (strcmp(key, "SCHILY.fflags") =3D=3D 0) {
 			archive_entry_copy_fflags_text(entry, value);
 		} else if (strcmp(key, "SCHILY.dev") =3D=3D 0) {
 			archive_entry_set_dev(entry,
-			    tar_atol10(value, strlen(value)));
+			    (dev_t)tar_atol10(value, strlen(value)));
 		} else if (strcmp(key, "SCHILY.ino") =3D=3D 0) {
 			archive_entry_set_ino(entry,
 			    tar_atol10(value, strlen(value)));
 		} else if (strcmp(key, "SCHILY.nlink") =3D=3D 0) {
-			archive_entry_set_nlink(entry,
+			archive_entry_set_nlink(entry, (unsigned)
 			    tar_atol10(value, strlen(value)));
 		} else if (strcmp(key, "SCHILY.realsize") =3D=3D 0) {
 			tar->realsize =3D tar_atol10(value, strlen(value));
@@ -2018,9 +2025,9 @@
=20
 	/* Parse out device numbers only for char and block specials */
 	if (header->typeflag[0] =3D=3D '3' || header->typeflag[0] =3D=3D '4') {
-		archive_entry_set_rdevmajor(entry,
+		archive_entry_set_rdevmajor(entry, (dev_t)
 		    tar_atol(header->rdevmajor, sizeof(header->rdevmajor)));
-		archive_entry_set_rdevminor(entry,
+		archive_entry_set_rdevminor(entry, (dev_t)
 		    tar_atol(header->rdevminor, sizeof(header->rdevminor)));
 	} else
 		archive_entry_set_rdev(entry, 0);
@@ -2255,7 +2262,8 @@
 	 * don't require this, but they should.
 	 */
 	do {
-		bytes_read =3D readline(a, tar, &p, tar_min(*remaining, 100), unconsumed=
);
+		bytes_read =3D readline(a, tar, &p,
+			(ssize_t)tar_min(*remaining, 100), unconsumed);
 		if (bytes_read <=3D 0)
 			return (ARCHIVE_FATAL);
 		*remaining -=3D bytes_read;
@@ -2296,7 +2304,7 @@
 	remaining =3D tar->entry_bytes_remaining;
=20
 	/* Parse entries. */
-	entries =3D gnu_sparse_10_atol(a, tar, &remaining, unconsumed);
+	entries =3D (int)gnu_sparse_10_atol(a, tar, &remaining, unconsumed);
 	if (entries < 0)
 		return (ARCHIVE_FATAL);
 	/* Parse the individual entries. */
@@ -2314,11 +2322,11 @@
 	}
 	/* Skip rest of block... */
 	tar_flush_unconsumed(a, unconsumed);
-	bytes_read =3D tar->entry_bytes_remaining - remaining;
+	bytes_read =3D (ssize_t)(tar->entry_bytes_remaining - remaining);
 	to_skip =3D 0x1ff & -bytes_read;
 	if (to_skip !=3D __archive_read_consume(a, to_skip))
 		return (ARCHIVE_FATAL);
-	return (bytes_read + to_skip);
+	return ((ssize_t)(bytes_read + to_skip));
 }
=20
 /*
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_read_support_format_xar.c
--- a/head/contrib/libarchive/libarchive/archive_read_support_format_xar.c	=
Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_read_support_format_xar.c	=
Fri Aug 10 14:19:25 2012 +0300
@@ -23,7 +23,7 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 #include "archive_platform.h"
-__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/archive_read_suppor=
t_format_xar.c 232153 2012-02-25 10:58:02Z mm $");
+__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/archive_read_suppor=
t_format_xar.c 238856 2012-07-28 06:38:44Z mm $");
=20
 #ifdef HAVE_ERRNO_H
 #include <errno.h>
@@ -183,9 +183,9 @@
 	time_t			 mtime;
 	time_t			 atime;
 	struct archive_string	 uname;
-	uid_t			 uid;
+	int64_t			 uid;
 	struct archive_string	 gname;
-	gid_t			 gid;
+	int64_t			 gid;
 	mode_t			 mode;
 	dev_t			 dev;
 	dev_t			 devmajor;
@@ -602,7 +602,8 @@
 		r =3D move_reading_point(a, xar->toc_chksum_offset);
 		if (r !=3D ARCHIVE_OK)
 			return (r);
-		b =3D __archive_read_ahead(a, xar->toc_chksum_size, &bytes);
+		b =3D __archive_read_ahead(a,
+			(size_t)xar->toc_chksum_size, &bytes);
 		if (bytes < 0)
 			return ((int)bytes);
 		if ((uint64_t)bytes < xar->toc_chksum_size) {
@@ -611,7 +612,8 @@
 			    "Truncated archive file");
 			return (ARCHIVE_FATAL);
 		}
-		r =3D checksum_final(a, b, xar->toc_chksum_size, NULL, 0);
+		r =3D checksum_final(a, b,
+			(size_t)xar->toc_chksum_size, NULL, 0);
 		__archive_read_consume(a, xar->toc_chksum_size);
 		xar->offset +=3D xar->toc_chksum_size;
 		if (r !=3D ARCHIVE_OK)
@@ -2065,7 +2067,7 @@
 					xar->file->hdnext =3D xar->hdlink_orgs;
 					xar->hdlink_orgs =3D xar->file;
 				} else {
-					xar->file->link =3D atol10(attr->value,
+					xar->file->link =3D (unsigned)atol10(attr->value,
 					    strlen(attr->value));
 					if (xar->file->link > 0)
 						if (add_link(a, xar, xar->file) !=3D ARCHIVE_OK) {
@@ -2761,7 +2763,7 @@
 		xar->file->has |=3D HAS_MODE;
 		xar->file->mode =3D
 		    (xar->file->mode & AE_IFMT) |
-		    (atol8(s, len) & ~AE_IFMT);
+		    ((mode_t)(atol8(s, len)) & ~AE_IFMT);
 		break;
 	case FILE_GROUP:
 		xar->file->has |=3D HAS_GID;
@@ -3076,12 +3078,15 @@
 		attr->name =3D strdup(
 		    (const char *)xmlTextReaderConstLocalName(reader));
 		if (attr->name =3D=3D NULL) {
+			free(attr);
 			archive_set_error(&a->archive, ENOMEM, "Out of memory");
 			return (ARCHIVE_FATAL);
 		}
 		attr->value =3D strdup(
 		    (const char *)xmlTextReaderConstValue(reader));
 		if (attr->value =3D=3D NULL) {
+			free(attr->name);
+			free(attr);
 			archive_set_error(&a->archive, ENOMEM, "Out of memory");
 			return (ARCHIVE_FATAL);
 		}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_read_support_format_zip.c
--- a/head/contrib/libarchive/libarchive/archive_read_support_format_zip.c	=
Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_read_support_format_zip.c	=
Fri Aug 10 14:19:25 2012 +0300
@@ -25,7 +25,7 @@
  */
=20
 #include "archive_platform.h"
-__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/archive_read_suppor=
t_format_zip.c 232153 2012-02-25 10:58:02Z mm $");
+__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/archive_read_suppor=
t_format_zip.c 238856 2012-07-28 06:38:44Z mm $");
=20
 #ifdef HAVE_ERRNO_H
 #include <errno.h>
@@ -38,17 +38,19 @@
 #endif
=20
 #include "archive.h"
+#include "archive_endian.h"
 #include "archive_entry.h"
 #include "archive_entry_locale.h"
 #include "archive_private.h"
+#include "archive_rb.h"
 #include "archive_read_private.h"
-#include "archive_endian.h"
=20
 #ifndef HAVE_ZLIB_H
 #include "archive_crc32.h"
 #endif
=20
 struct zip_entry {
+	struct archive_rb_node	node;
 	int64_t			local_header_offset;
 	int64_t			compressed_size;
 	int64_t			uncompressed_size;
@@ -71,11 +73,13 @@
 	size_t			central_directory_size;
 	size_t			central_directory_entries;
 	char			have_central_directory;
+	int64_t			offset;
=20
 	/* List of entries (seekable Zip only) */
 	size_t			entries_remaining;
 	struct zip_entry	*zip_entries;
 	struct zip_entry	*entry;
+	struct archive_rb_tree	tree;
=20
 	size_t			unconsumed;
=20
@@ -275,13 +279,37 @@
 }
=20
 static int
+cmp_node(const struct archive_rb_node *n1, const struct archive_rb_node *n=
2)
+{
+	const struct zip_entry *e1 =3D (const struct zip_entry *)n1;
+	const struct zip_entry *e2 =3D (const struct zip_entry *)n2;
+
+	return ((int)(e2->local_header_offset - e1->local_header_offset));
+}
+
+static int
+cmp_key(const struct archive_rb_node *n, const void *key)
+{
+	/* This function won't be called */
+	(void)n; /* UNUSED */
+	(void)key; /* UNUSED */
+	return 1;
+}
+
+static int
 slurp_central_directory(struct archive_read *a, struct zip *zip)
 {
 	unsigned i;
+	static const struct archive_rb_tree_ops rb_ops =3D {
+		&cmp_node, &cmp_key
+	};
=20
 	__archive_read_seek(a, zip->central_directory_offset, SEEK_SET);
+	zip->offset =3D zip->central_directory_offset;
+	__archive_rb_tree_init(&zip->tree, &rb_ops);
=20
-	zip->zip_entries =3D calloc(zip->central_directory_entries, sizeof(struct=
 zip_entry));
+	zip->zip_entries =3D calloc(zip->central_directory_entries,
+				sizeof(struct zip_entry));
 	for (i =3D 0; i < zip->central_directory_entries; ++i) {
 		struct zip_entry *zip_entry =3D &zip->zip_entries[i];
 		size_t filename_length, extra_length, comment_length;
@@ -300,7 +328,7 @@
 		zip_entry->system =3D p[5];
 		/* version_required =3D archive_le16dec(p + 6); */
 		zip_entry->flags =3D archive_le16dec(p + 8);
-		zip_entry->compression =3D archive_le16dec(p + 10);
+		zip_entry->compression =3D (char)archive_le16dec(p + 10);
 		zip_entry->mtime =3D zip_time(p + 12);
 		zip_entry->crc32 =3D archive_le32dec(p + 16);
 		zip_entry->compressed_size =3D archive_le32dec(p + 20);
@@ -320,6 +348,8 @@
 		if (zip_entry->system =3D=3D 3) {
 			zip_entry->mode =3D external_attributes >> 16;
 		}
+		/* Register an entry to RB tree to sort it by file offset. */
+		__archive_rb_tree_insert_node(&zip->tree, &zip_entry->node);
=20
 		/* We don't read the filename until we get to the
 		   local file header.  Reading it here would speed up
@@ -333,11 +363,19 @@
 		    46 + filename_length + extra_length + comment_length);
 	}
=20
-	/* TODO: Sort zip entries by file offset so that we
-	   can optimize get_next_header() to use skip instead of
-	   seek. */
+	return ARCHIVE_OK;
+}
=20
-	return ARCHIVE_OK;
+static int64_t
+zip_read_consume(struct archive_read *a, int64_t bytes)
+{
+	struct zip *zip =3D (struct zip *)a->format->data;
+	int64_t skip;
+
+	skip =3D __archive_read_consume(a, bytes);
+	if (skip > 0)
+		zip->offset +=3D skip;
+	return (skip);
 }
=20
 static int
@@ -345,7 +383,7 @@
 	struct archive_entry *entry)
 {
 	struct zip *zip =3D (struct zip *)a->format->data;
-	int r;
+	int r, ret =3D ARCHIVE_OK;
=20
 	a->archive.archive_format =3D ARCHIVE_FORMAT_ZIP;
 	if (a->archive.archive_format_name =3D=3D NULL)
@@ -356,26 +394,33 @@
 		zip->entries_remaining =3D zip->central_directory_entries;
 		if (r !=3D ARCHIVE_OK)
 			return r;
-		zip->entry =3D zip->zip_entries;
-	} else {
-		++zip->entry;
+		/* Get first entry whose local header offset is lower than
+		 * other entries in the archive file. */
+		zip->entry =3D
+		    (struct zip_entry *)ARCHIVE_RB_TREE_MIN(&zip->tree);
+	} else if (zip->entry !=3D NULL) {
+		/* Get next entry in local header offset order. */
+		zip->entry =3D (struct zip_entry *)__archive_rb_tree_iterate(
+		    &zip->tree, &zip->entry->node, ARCHIVE_RB_DIR_RIGHT);
 	}
=20
-	if (zip->entries_remaining <=3D 0)
+	if (zip->entries_remaining <=3D 0 || zip->entry =3D=3D NULL)
 		return ARCHIVE_EOF;
 	--zip->entries_remaining;
=20
-	/* TODO: If entries are sorted by offset within the file, we
-	   should be able to skip here instead of seeking.  Skipping is
-	   typically faster (easier for I/O layer to optimize). */
-	__archive_read_seek(a, zip->entry->local_header_offset, SEEK_SET);
+	if (zip->offset !=3D zip->entry->local_header_offset) {
+		__archive_read_seek(a, zip->entry->local_header_offset,
+			SEEK_SET);
+		zip->offset =3D zip->entry->local_header_offset;
+	}
 	zip->unconsumed =3D 0;
 	r =3D zip_read_local_file_header(a, entry, zip);
 	if (r !=3D ARCHIVE_OK)
 		return r;
 	if ((zip->entry->mode & AE_IFMT) =3D=3D AE_IFLNK) {
 		const void *p;
-		size_t linkname_length =3D archive_entry_size(entry);
+		struct archive_string_conv *sconv;
+		size_t linkname_length =3D (size_t)archive_entry_size(entry);
=20
 		archive_entry_set_size(entry, 0);
 		p =3D __archive_read_ahead(a, linkname_length, NULL);
@@ -385,17 +430,40 @@
 			return ARCHIVE_FATAL;
 		}
=20
+		sconv =3D zip->sconv;
+		if (sconv =3D=3D NULL && (zip->entry->flags & ZIP_UTF8_NAME))
+			sconv =3D zip->sconv_utf8;
+		if (sconv =3D=3D NULL)
+			sconv =3D zip->sconv_default;
 		if (archive_entry_copy_symlink_l(entry, p, linkname_length,
-		    NULL) !=3D 0) {
-			/* NOTE: If the last argument is NULL, this will
-			 * fail only by memeory allocation failure. */
-			archive_set_error(&a->archive, ENOMEM,
-			    "Can't allocate memory for Symlink");
-			return (ARCHIVE_FATAL);
+		    sconv) !=3D 0) {
+			if (errno !=3D ENOMEM && sconv =3D=3D zip->sconv_utf8 &&
+			    (zip->entry->flags & ZIP_UTF8_NAME))
+			    archive_entry_copy_symlink_l(entry, p,
+				linkname_length, NULL);
+			if (errno =3D=3D ENOMEM) {
+				archive_set_error(&a->archive, ENOMEM,
+				    "Can't allocate memory for Symlink");
+				return (ARCHIVE_FATAL);
+			}
+			/*
+			 * Since there is no character-set regulation for
+			 * symlink name, do not report the conversion error
+			 * in an automatic conversion.
+			 */
+			if (sconv !=3D zip->sconv_utf8 ||
+			    (zip->entry->flags & ZIP_UTF8_NAME) =3D=3D 0) {
+				archive_set_error(&a->archive,
+				    ARCHIVE_ERRNO_FILE_FORMAT,
+				    "Symlink cannot be converted "
+				    "from %s to current locale.",
+				    archive_string_conversion_charset_name(
+					sconv));
+				ret =3D ARCHIVE_WARN;
+			}
 		}
-		/* TODO: handle character-set issues? */
 	}
-	return ARCHIVE_OK;
+	return (ret);
 }
=20
 static int
@@ -489,7 +557,7 @@
 	memset(zip->entry, 0, sizeof(struct zip_entry));
=20
 	/* Search ahead for the next local file header. */
-	__archive_read_consume(a, zip->unconsumed);
+	zip_read_consume(a, zip->unconsumed);
 	zip->unconsumed =3D 0;
 	for (;;) {
 		int64_t skipped =3D 0;
@@ -509,7 +577,7 @@
=20
 				if (p[2] =3D=3D '\003' && p[3] =3D=3D '\004') {
 					/* Regular file entry. */
-					__archive_read_consume(a, skipped);
+					zip_read_consume(a, skipped);
 					return zip_read_local_file_header(a, entry, zip);
 				}
=20
@@ -520,7 +588,7 @@
 			++p;
 			++skipped;
 		}
-		__archive_read_consume(a, skipped);
+		zip_read_consume(a, skipped);
 	}
 }
=20
@@ -569,7 +637,7 @@
 	version =3D p[4];
 	zip_entry->system =3D p[5];
 	zip_entry->flags =3D archive_le16dec(p + 6);
-	zip_entry->compression =3D archive_le16dec(p + 8);
+	zip_entry->compression =3D (char)archive_le16dec(p + 8);
 	zip_entry->mtime =3D zip_time(p + 10);
 	local_crc32 =3D archive_le32dec(p + 14);
 	compressed_size =3D archive_le32dec(p + 18);
@@ -577,7 +645,7 @@
 	filename_length =3D archive_le16dec(p + 26);
 	extra_length =3D archive_le16dec(p + 28);
=20
-	__archive_read_consume(a, 30);
+	zip_read_consume(a, 30);
=20
 	if (zip->have_central_directory) {
 		/* If we read the central dir entry, we must have size information
@@ -647,7 +715,7 @@
 		    archive_string_conversion_charset_name(sconv));
 		ret =3D ARCHIVE_WARN;
 	}
-	__archive_read_consume(a, filename_length);
+	zip_read_consume(a, filename_length);
=20
 	if (zip_entry->mode =3D=3D 0) {
 		/* Especially in streaming mode, we can end up
@@ -659,14 +727,14 @@
 			if (len > 0 && wp[len - 1] =3D=3D L'/')
 				zip_entry->mode =3D AE_IFDIR | 0777;
 			else
-				zip_entry->mode =3D AE_IFREG | 0777;
+				zip_entry->mode =3D AE_IFREG | 0666;
 		} else {
 			cp =3D archive_entry_pathname(entry);
 			len =3D (cp !=3D NULL)?strlen(cp):0;
 			if (len > 0 && cp[len - 1] =3D=3D '/')
 				zip_entry->mode =3D AE_IFDIR | 0777;
 			else
-				zip_entry->mode =3D AE_IFREG | 0777;
+				zip_entry->mode =3D AE_IFREG | 0666;
 		}
 	}
=20
@@ -677,7 +745,7 @@
 		return (ARCHIVE_FATAL);
 	}
 	process_extra(h, extra_length, zip_entry);
-	__archive_read_consume(a, extra_length);
+	zip_read_consume(a, extra_length);
=20
 	/* Populate some additional entry fields: */
 	archive_entry_set_mode(entry, zip_entry->mode);
@@ -774,7 +842,7 @@
 		return (ARCHIVE_FAILED);
 	}
=20
-	__archive_read_consume(a, zip->unconsumed);
+	zip_read_consume(a, zip->unconsumed);
 	zip->unconsumed =3D 0;
=20
 	switch(zip->entry->compression) {
@@ -926,7 +994,7 @@
 			return (ARCHIVE_FATAL);
 		}
 		if (bytes_avail > zip->entry_bytes_remaining)
-			bytes_avail =3D zip->entry_bytes_remaining;
+			bytes_avail =3D (ssize_t)zip->entry_bytes_remaining;
 	}
 	*size =3D bytes_avail;
 	zip->entry_bytes_remaining -=3D bytes_avail;
@@ -990,7 +1058,7 @@
 	compressed_buff =3D __archive_read_ahead(a, 1, &bytes_avail);
 	if (0 =3D=3D (zip->entry->flags & ZIP_LENGTH_AT_END)
 	    && bytes_avail > zip->entry_bytes_remaining) {
-		bytes_avail =3D zip->entry_bytes_remaining;
+		bytes_avail =3D (ssize_t)zip->entry_bytes_remaining;
 	}
 	if (bytes_avail <=3D 0) {
 		archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT,
@@ -1030,7 +1098,7 @@
=20
 	/* Consume as much as the compressor actually used. */
 	bytes_avail =3D zip->stream.total_in;
-	__archive_read_consume(a, bytes_avail);
+	zip_read_consume(a, bytes_avail);
 	zip->entry_bytes_remaining -=3D bytes_avail;
 	zip->entry_compressed_bytes_read +=3D bytes_avail;
=20
@@ -1070,14 +1138,11 @@
 	/* If we've already read to end of data, we're done. */
 	if (zip->end_of_entry)
 		return (ARCHIVE_OK);
-	/* If we're seeking, we're done. */
-	if (zip->have_central_directory)
-		return (ARCHIVE_OK);
=20
 	/* So we know we're streaming... */
 	if (0 =3D=3D (zip->entry->flags & ZIP_LENGTH_AT_END)) {
 		/* We know the compressed length, so we can just skip. */
-		int64_t bytes_skipped =3D __archive_read_consume(a,
+		int64_t bytes_skipped =3D zip_read_consume(a,
 		    zip->entry_bytes_remaining + zip->unconsumed);
 		if (bytes_skipped < 0)
 			return (ARCHIVE_FATAL);
@@ -1100,11 +1165,11 @@
 			if (r !=3D ARCHIVE_OK)
 				return (r);
 		}
-		break;
+		return ARCHIVE_OK;
 #endif
 	default: /* Uncompressed or unknown. */
 		/* Scan for a PK\007\010 signature. */
-		__archive_read_consume(a, zip->unconsumed);
+		zip_read_consume(a, zip->unconsumed);
 		zip->unconsumed =3D 0;
 		for (;;) {
 			const char *p, *buff;
@@ -1122,14 +1187,13 @@
 				else if (p[3] =3D=3D '\007') { p +=3D 1; }
 				else if (p[3] =3D=3D '\010' && p[2] =3D=3D '\007'
 				    && p[1] =3D=3D 'K' && p[0] =3D=3D 'P') {
-					__archive_read_consume(a, p - buff + 16);
+					zip_read_consume(a, p - buff + 16);
 					return ARCHIVE_OK;
 				} else { p +=3D 4; }
 			}
-			__archive_read_consume(a, p - buff);
+			zip_read_consume(a, p - buff);
 		}
 	}
-	return ARCHIVE_OK;
 }
=20
 static int
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_string.c
--- a/head/contrib/libarchive/libarchive/archive_string.c	Mon Jul 30 11:44:=
18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_string.c	Fri Aug 10 14:19:=
25 2012 +0300
@@ -25,7 +25,7 @@
  */
=20
 #include "archive_platform.h"
-__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/archive_string.c 23=
2153 2012-02-25 10:58:02Z mm $");
+__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/archive_string.c 23=
8856 2012-07-28 06:38:44Z mm $");
=20
 /*
  * Basic resizable string support, to simplify manipulating arbitrary-sized
@@ -61,9 +61,6 @@
 #include <windows.h>
 #include <locale.h>
 #endif
-#if defined(__APPLE__)
-#include <CoreServices/CoreServices.h>
-#endif
=20
 #include "archive_endian.h"
 #include "archive_private.h"
@@ -115,11 +112,6 @@
 #endif
 	/* A temporary buffer for normalization. */
 	struct archive_string		 utftmp;
-#if defined(__APPLE__)
-	UnicodeToTextInfo		 uniInfo;
-	struct archive_string		 utf16nfc;
-	struct archive_string		 utf16nfd;
-#endif
 	int (*converter[2])(struct archive_string *, const void *, size_t,
 	    struct archive_string_conv *);
 	int				 nconverter;
@@ -164,29 +156,29 @@
 static int is_big_endian(void);
 static int strncat_in_codepage(struct archive_string *, const void *,
     size_t, struct archive_string_conv *);
-static int win_strncat_from_utf16be(struct archive_string *, const void *,=
 size_t,
-    struct archive_string_conv *);
-static int win_strncat_from_utf16le(struct archive_string *, const void *,=
 size_t,
-    struct archive_string_conv *);
-static int win_strncat_to_utf16be(struct archive_string *, const void *, s=
ize_t,
-    struct archive_string_conv *);
-static int win_strncat_to_utf16le(struct archive_string *, const void *, s=
ize_t,
-    struct archive_string_conv *);
+static int win_strncat_from_utf16be(struct archive_string *, const void *,
+    size_t, struct archive_string_conv *);
+static int win_strncat_from_utf16le(struct archive_string *, const void *,
+    size_t, struct archive_string_conv *);
+static int win_strncat_to_utf16be(struct archive_string *, const void *,
+    size_t, struct archive_string_conv *);
+static int win_strncat_to_utf16le(struct archive_string *, const void *,
+    size_t, struct archive_string_conv *);
 #endif
-static int best_effort_strncat_from_utf16be(struct archive_string *, const=
 void *,
-    size_t, struct archive_string_conv *);
-static int best_effort_strncat_from_utf16le(struct archive_string *, const=
 void *,
-    size_t, struct archive_string_conv *);
-static int best_effort_strncat_to_utf16be(struct archive_string *, const v=
oid *,
-    size_t, struct archive_string_conv *);
-static int best_effort_strncat_to_utf16le(struct archive_string *, const v=
oid *,
-    size_t, struct archive_string_conv *);
+static int best_effort_strncat_from_utf16be(struct archive_string *,
+    const void *, size_t, struct archive_string_conv *);
+static int best_effort_strncat_from_utf16le(struct archive_string *,
+    const void *, size_t, struct archive_string_conv *);
+static int best_effort_strncat_to_utf16be(struct archive_string *,
+    const void *, size_t, struct archive_string_conv *);
+static int best_effort_strncat_to_utf16le(struct archive_string *,
+    const void *, size_t, struct archive_string_conv *);
 #if defined(HAVE_ICONV)
 static int iconv_strncat_in_locale(struct archive_string *, const void *,
     size_t, struct archive_string_conv *);
 #endif
-static int best_effort_strncat_in_locale(struct archive_string *, const vo=
id *,
-    size_t, struct archive_string_conv *);
+static int best_effort_strncat_in_locale(struct archive_string *,
+    const void *, size_t, struct archive_string_conv *);
 static int _utf8_to_unicode(uint32_t *, const char *, size_t);
 static int utf8_to_unicode(uint32_t *, const char *, size_t);
 static inline uint32_t combine_surrogate_pair(uint32_t, uint32_t);
@@ -201,10 +193,8 @@
     size_t, struct archive_string_conv *);
 static int archive_string_normalize_C(struct archive_string *, const void =
*,
     size_t, struct archive_string_conv *);
-#if defined(__APPLE__)
 static int archive_string_normalize_D(struct archive_string *, const void =
*,
     size_t, struct archive_string_conv *);
-#endif
 static int archive_string_append_unicode(struct archive_string *,
     const void *, size_t, struct archive_string_conv *);
=20
@@ -238,7 +228,8 @@
 }
=20
 void
-archive_wstring_concat(struct archive_wstring *dest, struct archive_wstrin=
g *src)
+archive_wstring_concat(struct archive_wstring *dest,
+    struct archive_wstring *src)
 {
 	if (archive_wstring_append(dest, src->s, src->length) =3D=3D NULL)
 		__archive_errx(1, "Out of memory");
@@ -443,10 +434,7 @@
 archive_wstring_append_from_mbs(struct archive_wstring *dest,
     const char *p, size_t len)
 {
-	int r =3D archive_wstring_append_from_mbs_in_codepage(dest, p, len, NULL);
-	if (r !=3D 0 && errno =3D=3D ENOMEM)
-		__archive_errx(1, "No memory");
-	return (r);
+	return archive_wstring_append_from_mbs_in_codepage(dest, p, len, NULL);
 }
=20
 static int
@@ -479,7 +467,8 @@
 			*ws++ =3D (wchar_t)*mp++;
 			count++;
 		}
-	} else if (sc !=3D NULL && (sc->flag & SCONV_NORMALIZATION_C)) {
+	} else if (sc !=3D NULL &&
+	    (sc->flag & (SCONV_NORMALIZATION_C | SCONV_NORMALIZATION_D))) {
 		/*
 		 * Normalize UTF-8 and UTF-16BE and convert it directly
 		 * to UTF-16 as wchar_t.
@@ -495,18 +484,23 @@
 		if (sc->flag & SCONV_FROM_UTF16) {
 			/*
 			 *  UTF-16BE/LE NFD =3D=3D=3D> UTF-16 NFC
+			 *  UTF-16BE/LE NFC =3D=3D=3D> UTF-16 NFD
 			 */
 			count =3D utf16nbytes(s, length);
 		} else {
 			/*
 			 *  UTF-8 NFD =3D=3D=3D> UTF-16 NFC
+			 *  UTF-8 NFC =3D=3D=3D> UTF-16 NFD
 			 */
 			count =3D mbsnbytes(s, length);
 		}
 		u16.s =3D (char *)dest->s;
 		u16.length =3D dest->length << 1;;
 		u16.buffer_length =3D dest->buffer_length;
-		ret =3D archive_string_normalize_C(&u16, s, count, sc);
+		if (sc->flag & SCONV_NORMALIZATION_C)
+			ret =3D archive_string_normalize_C(&u16, s, count, sc);
+		else
+			ret =3D archive_string_normalize_D(&u16, s, count, sc);
 		dest->s =3D (wchar_t *)u16.s;
 		dest->length =3D u16.length >> 1;
 		dest->buffer_length =3D u16.buffer_length;
@@ -519,7 +513,7 @@
 		if (NULL =3D=3D archive_wstring_ensure(dest,
 		    dest->length + count + 1))
 			return (-1);
-		wmemcpy(dest->s + dest->length, (wchar_t *)s, count);
+		wmemcpy(dest->s + dest->length, (const wchar_t *)s, count);
 		if ((sc->flag & SCONV_FROM_UTF16BE) && !is_big_endian()) {
 			uint16_t *u16 =3D (uint16_t *)(dest->s + dest->length);
 			int b;
@@ -537,6 +531,7 @@
 		}
 	} else {
 		DWORD mbflag;
+		size_t buffsize;
=20
 		if (sc =3D=3D NULL)
 			mbflag =3D 0;
@@ -548,48 +543,31 @@
 		} else
 			mbflag =3D MB_PRECOMPOSED;
=20
-		if (length =3D=3D 0) {
-			/*
-			 * We do not need to convert any characters but make
-			 * sure `dest' has a valid buffer(no NULL pointer).
-			 */
-			if (NULL =3D=3D archive_wstring_ensure(dest,
-			    dest->length + 1))
+		buffsize =3D dest->length + length + 1;
+		do {
+			/* Allocate memory for WCS. */
+			if (NULL =3D=3D archive_wstring_ensure(dest, buffsize))
 				return (-1);
-			dest->s[dest->length] =3D L'\0';
-			return (0);
-		}
-
-		/*
-		 * Count how many bytes are needed for WCS.
-		 */
-		count =3D MultiByteToWideChar(from_cp,
-		    mbflag, s, length, NULL, 0);
-		if (count =3D=3D 0) {
-			if (dest->s =3D=3D NULL) {
-				if (NULL =3D=3D archive_wstring_ensure(dest,
-				    dest->length + 1))
-					return (-1);
+			/* Convert MBS to WCS. */
+			count =3D MultiByteToWideChar(from_cp,
+			    mbflag, s, length, dest->s + dest->length,
+			    (dest->buffer_length >> 1) -1);
+			if (count =3D=3D 0 &&
+			    GetLastError() =3D=3D ERROR_INSUFFICIENT_BUFFER) {
+				/* Expand the WCS buffer. */
+				buffsize =3D dest->buffer_length << 1;
+				continue;
 			}
-			dest->s[dest->length] =3D L'\0';
-			return (-1);
-		}
-		/* Allocate memory for WCS. */
-		if (NULL =3D=3D archive_wstring_ensure(dest,
-		    dest->length + count + 1))
-			return (-1);
-		/* Convert MBS to WCS. */
-		count =3D MultiByteToWideChar(from_cp,
-		    mbflag, s, length, dest->s + dest->length, count);
-		if (count =3D=3D 0)
-			ret =3D -1;
+			if (count =3D=3D 0 && length !=3D 0)
+				ret =3D -1;
+		} while (0);
 	}
 	dest->length +=3D count;
 	dest->s[dest->length] =3D L'\0';
 	return (ret);
 }
=20
-#elif defined(HAVE_MBSNRTOWCS)
+#else
=20
 /*
  * Convert MBS to WCS.
@@ -600,42 +578,7 @@
     const char *p, size_t len)
 {
 	size_t r;
-	/*
-	 * No single byte will be more than one wide character,
-	 * so this length estimate will always be big enough.
-	 */
-	size_t wcs_length =3D len;
-	size_t mbs_length =3D len;
-	const char *mbs =3D p;
-	wchar_t *wcs;
-	mbstate_t shift_state;
-
-	memset(&shift_state, 0, sizeof(shift_state));
-	if (NULL =3D=3D archive_wstring_ensure(dest, dest->length + wcs_length + =
1))
-		__archive_errx(1,
-		    "No memory for archive_wstring_append_from_mbs()");
-	wcs =3D dest->s + dest->length;
-	r =3D mbsnrtowcs(wcs, &mbs, mbs_length, wcs_length, &shift_state);
-	if (r !=3D (size_t)-1) {
-		dest->length +=3D r;
-		dest->s[dest->length] =3D L'\0';
-		return (0);
-	}
-	dest->s[dest->length] =3D L'\0';
-	return (-1);
-}
-
-#else
-
-/*
- * Convert MBS to WCS.
- * Note: returns -1 if conversion fails.
- */
-int
-archive_wstring_append_from_mbs(struct archive_wstring *dest,
-    const char *p, size_t len)
-{
-	size_t r;
+	int ret_val =3D 0;
 	/*
 	 * No single byte will be more than one wide character,
 	 * so this length estimate will always be big enough.
@@ -650,23 +593,36 @@
 	memset(&shift_state, 0, sizeof(shift_state));
 #endif
 	if (NULL =3D=3D archive_wstring_ensure(dest, dest->length + wcs_length + =
1))
-		__archive_errx(1,
-		    "No memory for archive_wstring_append_from_mbs()");
+		return (-1);
 	wcs =3D dest->s + dest->length;
 	/*
 	 * We cannot use mbsrtowcs/mbstowcs here because those may convert
 	 * extra MBS when strlen(p) > len and one wide character consis of
 	 * multi bytes.
 	 */
-	while (wcs_length > 0 && *mbs && mbs_length > 0) {
+	while (*mbs && mbs_length > 0) {
+		if (wcs_length =3D=3D 0) {
+			dest->length =3D wcs - dest->s;
+			dest->s[dest->length] =3D L'\0';
+			wcs_length =3D mbs_length;
+			if (NULL =3D=3D archive_wstring_ensure(dest,
+			    dest->length + wcs_length + 1))
+				return (-1);
+			wcs =3D dest->s + dest->length;
+		}
 #if HAVE_MBRTOWC
 		r =3D mbrtowc(wcs, mbs, wcs_length, &shift_state);
 #else
 		r =3D mbtowc(wcs, mbs, wcs_length);
 #endif
 		if (r =3D=3D (size_t)-1 || r =3D=3D (size_t)-2) {
-			dest->s[dest->length] =3D L'\0';
-			return (-1);
+			ret_val =3D -1;
+			if (errno =3D=3D EILSEQ) {
+				++mbs;
+				--mbs_length;
+				continue;
+			} else
+				break;
 		}
 		if (r =3D=3D 0 || r > mbs_length)
 			break;
@@ -677,7 +633,7 @@
 	}
 	dest->length =3D wcs - dest->s;
 	dest->s[dest->length] =3D L'\0';
-	return (0);
+	return (ret_val);
 }
=20
 #endif
@@ -697,10 +653,7 @@
 archive_string_append_from_wcs(struct archive_string *as,
     const wchar_t *w, size_t len)
 {
-	int r =3D archive_string_append_from_wcs_in_codepage(as, w, len, NULL);
-	if (r !=3D 0 && errno =3D=3D ENOMEM)
-		__archive_errx(1, "No memory");
-	return (r);
+	return archive_string_append_from_wcs_in_codepage(as, w, len, NULL);
 }
=20
 static int
@@ -792,73 +745,6 @@
 	return (defchar_used?-1:ret);
 }
=20
-#elif defined(HAVE_WCSNRTOMBS)
-
-/*
- * Translates a wide character string into current locale character set
- * and appends to the archive_string.  Note: returns -1 if conversion
- * fails.
- */
-int
-archive_string_append_from_wcs(struct archive_string *as,
-    const wchar_t *w, size_t len)
-{
-	mbstate_t shift_state;
-	size_t r, ndest, nwc;
-	char *dest;
-	const wchar_t *wp, *wpp;
-	int ret_val =3D 0;
-
-	wp =3D w;
-	nwc =3D len;
-	ndest =3D len * 2;
-	/* Initialize the shift state. */
-	memset(&shift_state, 0, sizeof(shift_state));
-	while (nwc > 0) {
-		/* Allocate buffer for MBS. */
-		if (archive_string_ensure(as, as->length + ndest + 1) =3D=3D NULL)
-			__archive_errx(1, "Out of memory");
-
-		dest =3D as->s + as->length;
-		wpp =3D wp;
-		r =3D wcsnrtombs(dest, &wp, nwc,
-		    as->buffer_length - as->length -1,
-		    &shift_state);
-		if (r =3D=3D (size_t)-1) {
-			if (errno =3D=3D EILSEQ) {
-				/* Retry conversion just for safe WCS. */
-				size_t xwc =3D wp - wpp;
-				wp =3D wpp;
-				r =3D wcsnrtombs(dest, &wp, xwc,
-				    as->buffer_length - as->length -1,
-				    &shift_state);
-				if (r =3D=3D (size_t)-1)
-					/* This would not happen. */
-					return (-1);
-				as->length +=3D r;
-				nwc -=3D wp - wpp;
-				/* Skip an illegal wide char. */
-				as->s[as->length++] =3D '?';
-				wp++;
-				nwc--;
-				ret_val =3D -1;
-				continue;
-			} else {
-				ret_val =3D -1;
-				break;
-			}
-		}
-		as->length +=3D r;
-		if (wp =3D=3D NULL || (wp - wpp) >=3D (int64_t)nwc)
-			break;
-		/* Get a remaining WCS lenth. */
-		nwc -=3D wp - wpp;
-	}
-	/* All wide characters are translated to MBS. */
-	as->s[as->length] =3D '\0';
-	return (ret_val);
-}
-
 #elif defined(HAVE_WCTOMB) || defined(HAVE_WCRTOMB)
=20
 /*
@@ -893,7 +779,7 @@
 	 * as->s is still NULL.
 	 */
 	if (archive_string_ensure(as, as->length + len + 1) =3D=3D NULL)
-		__archive_errx(1, "Out of memory");
+		return (-1);
=20
 	p =3D as->s + as->length;
 	end =3D as->s + as->buffer_length - MB_CUR_MAX -1;
@@ -904,7 +790,7 @@
 			/* Re-allocate buffer for MBS. */
 			if (archive_string_ensure(as,
 			    as->length + len * 2 + 1) =3D=3D NULL)
-				__archive_errx(1, "Out of memory");
+				return (-1);
 			p =3D as->s + as->length;
 			end =3D as->s + as->buffer_length - MB_CUR_MAX -1;
 		}
@@ -946,6 +832,7 @@
 	(void)as;/* UNUSED */
 	(void)w;/* UNUSED */
 	(void)len;/* UNUSED */
+	errno =3D ENOSYS;
 	return (-1);
 }
=20
@@ -987,27 +874,6 @@
 	*psc =3D sc;
 }
=20
-#if defined(__APPLE__)
-
-static int
-createUniInfo(struct archive_string_conv *sconv)
-{
-	UnicodeMapping map;
-	OSStatus err;
-
-	map.unicodeEncoding =3D CreateTextEncoding(kTextEncodingUnicodeDefault,
-	    kUnicodeNoSubset, kUnicode16BitFormat);
-	map.otherEncoding =3D CreateTextEncoding(kTextEncodingUnicodeDefault,
-	    kUnicodeHFSPlusDecompVariant, kUnicode16BitFormat);
-	map.mappingVersion =3D kUnicodeUseLatestMapping;
-
-	sconv->uniInfo =3D NULL;
-	err =3D CreateUnicodeToTextInfo(&map, &(sconv->uniInfo));
-	return ((err =3D=3D noErr)? 0: -1);
-}
-
-#endif /* __APPLE__ */
-
 static void
 add_converter(struct archive_string_conv *sc, int (*converter)
     (struct archive_string *, const void *, size_t,
@@ -1066,9 +932,11 @@
=20
 		if (sc->flag & SCONV_BEST_EFFORT) {
 			if (sc->flag & SCONV_TO_UTF16BE)
-				add_converter(sc, best_effort_strncat_to_utf16be);
+				add_converter(sc,
+					best_effort_strncat_to_utf16be);
 			else
-				add_converter(sc, best_effort_strncat_to_utf16le);
+				add_converter(sc,
+					best_effort_strncat_to_utf16le);
 		} else
 			/* Make sure we have no converter. */
 			sc->nconverter =3D 0;
@@ -1082,12 +950,9 @@
 		/*
 		 * At least we should normalize a UTF-16BE string.
 		 */
-#if defined(__APPLE__)
 		if (sc->flag & SCONV_NORMALIZATION_D)
 			add_converter(sc,archive_string_normalize_D);
-		else
-#endif
-		if (sc->flag & SCONV_NORMALIZATION_C)
+		else if (sc->flag & SCONV_NORMALIZATION_C)
 			add_converter(sc, archive_string_normalize_C);
=20
 		if (sc->flag & SCONV_TO_UTF8) {
@@ -1135,12 +1000,9 @@
 		/*
 		 * At least we should normalize a UTF-8 string.
 		 */
-#if defined(__APPLE__)
 		if (sc->flag & SCONV_NORMALIZATION_D)
 			add_converter(sc,archive_string_normalize_D);
-		else
-#endif
-		if (sc->flag & SCONV_NORMALIZATION_C)
+		else if (sc->flag & SCONV_NORMALIZATION_C)
 			add_converter(sc, archive_string_normalize_C);
=20
 		/*
@@ -1174,6 +1036,16 @@
 #if HAVE_ICONV
 	if (sc->cd !=3D (iconv_t)-1) {
 		add_converter(sc, iconv_strncat_in_locale);
+		/*
+		 * iconv generally does not support UTF-8-MAC and so
+		 * we have to the output of iconv from NFC to NFD if
+		 * need.
+		 */
+		if ((sc->flag & SCONV_FROM_CHARSET) &&
+		    (sc->flag & SCONV_TO_UTF8)) {
+			if (sc->flag & SCONV_NORMALIZATION_D)
+				add_converter(sc, archive_string_normalize_D);
+		}
 		return;
 	}
 #endif
@@ -1253,10 +1125,6 @@
 		return (NULL);
 	}
 	archive_string_init(&sc->utftmp);
-#if defined(__APPLE__)
-	archive_string_init(&sc->utf16nfc);
-	archive_string_init(&sc->utf16nfd);
-#endif
=20
 	if (flag & SCONV_TO_CHARSET) {
 		/*
@@ -1335,13 +1203,35 @@
 	if ((flag & SCONV_FROM_CHARSET) &&
 	    (flag & (SCONV_FROM_UTF16 | SCONV_FROM_UTF8))) {
 #if defined(__APPLE__)
-		if (flag & SCONV_TO_UTF8) {
-			if (createUniInfo(sc) =3D=3D 0)
-				flag |=3D SCONV_NORMALIZATION_D;
-		} else
+		if (flag & SCONV_TO_UTF8)
+			flag |=3D SCONV_NORMALIZATION_D;
+		else
 #endif
 			flag |=3D SCONV_NORMALIZATION_C;
 	}
+#if defined(__APPLE__)
+	/*
+	 * In case writing an archive file, make sure that a filename
+	 * going to be passed to iconv is a Unicode NFC string since
+	 * a filename in HFS Plus filesystem is a Unicode NFD one and
+	 * iconv cannot handle it with "UTF-8" charset. It is simpler
+	 * than a use of "UTF-8-MAC" charset.
+	 */
+	if ((flag & SCONV_TO_CHARSET) &&
+	    (flag & (SCONV_FROM_UTF16 | SCONV_FROM_UTF8)) &&
+	    !(flag & (SCONV_TO_UTF16 | SCONV_TO_UTF8)))
+		flag |=3D SCONV_NORMALIZATION_C;
+	/*
+	 * In case reading an archive file. make sure that a filename
+	 * will be passed to users is a Unicode NFD string in order to
+	 * correctly compare the filename with other one which comes
+	 * from HFS Plus filesystem.
+	 */
+	if ((flag & SCONV_FROM_CHARSET) &&
+	   !(flag & (SCONV_FROM_UTF16 | SCONV_FROM_UTF8)) &&
+	    (flag & SCONV_TO_UTF8))
+		flag |=3D SCONV_NORMALIZATION_D;
+#endif
=20
 #if defined(HAVE_ICONV)
 	sc->cd_w =3D (iconv_t)-1;
@@ -1353,46 +1243,6 @@
 	    (flag & SCONV_WIN_CP)) {
 		/* This case we won't use iconv. */
 		sc->cd =3D (iconv_t)-1;
-#if defined(__APPLE__)
-	} else if ((flag & SCONV_FROM_CHARSET) && (flag & SCONV_TO_UTF8)) {
-		/*
-		 * In case reading an archive file.
-		 * Translate non-Unicode filenames in an archive file to
-		 * UTF-8-MAC filenames.
-		 */
-		sc->cd =3D iconv_open("UTF-8-MAC", fc);
-		if (sc->cd =3D=3D (iconv_t)-1) {
-			if ((sc->flag & SCONV_BEST_EFFORT) &&
-			    strcmp(fc, "CP932") =3D=3D 0) {
-				sc->cd =3D iconv_open("UTF-8-MAC", "SJIS");
-				if (sc->cd =3D=3D (iconv_t)-1) {
-					sc->cd =3D iconv_open(tc, fc);
-					if (sc->cd =3D=3D (iconv_t)-1)
-						sc->cd =3D iconv_open(tc, "SJIS");
-				}
-			} else
-				sc->cd =3D iconv_open(tc, fc);
-		}
-	} else if ((flag & SCONV_TO_CHARSET) && (flag & SCONV_FROM_UTF8)) {
-		/*
-		 * In case writing an archive file.
-		 * Translate UTF-8-MAC filenames in HFS Plus to non-Unicode
-		 * filenames.
-		 */
-		sc->cd =3D iconv_open(tc, "UTF-8-MAC");
-		if (sc->cd =3D=3D (iconv_t)-1) {
-			if ((sc->flag & SCONV_BEST_EFFORT) &&
-			    strcmp(tc, "CP932") =3D=3D 0) {
-				sc->cd =3D iconv_open("SJIS", "UTF-8-MAC");
-				if (sc->cd =3D=3D (iconv_t)-1) {
-					sc->cd =3D iconv_open(tc, fc);
-					if (sc->cd =3D=3D (iconv_t)-1)
-						sc->cd =3D iconv_open("SJIS", fc);
-				}
-			} else
-				sc->cd =3D iconv_open(tc, fc);
-		}
-#endif
 	} else {
 		sc->cd =3D iconv_open(tc, fc);
 		if (sc->cd =3D=3D (iconv_t)-1 && (sc->flag & SCONV_BEST_EFFORT)) {
@@ -1428,7 +1278,7 @@
 	sc->flag =3D flag;
=20
 	/*
-	 * Setup converters.
+	 * Set up converters.
 	 */
 	setup_converter(sc);
=20
@@ -1450,12 +1300,6 @@
 	if (sc->cd_w !=3D (iconv_t)-1)
 		iconv_close(sc->cd_w);
 #endif
-#if defined(__APPLE__)
-	archive_string_free(&sc->utf16nfc);
-	archive_string_free(&sc->utf16nfd);
-	if (sc->uniInfo !=3D NULL)
-		DisposeUnicodeToTextInfo(&(sc->uniInfo));
-#endif
 	free(sc);
 }
=20
@@ -1995,11 +1839,37 @@
 #else
 		if ((sc->flag & SCONV_UTF8_LIBARCHIVE_2) =3D=3D 0) {
 			sc->flag |=3D SCONV_UTF8_LIBARCHIVE_2;
-			/* Re-setup string converters. */
+			/* Set up string converters. */
 			setup_converter(sc);
 		}
 #endif
 		break;
+	case SCONV_SET_OPT_NORMALIZATION_C:
+		if ((sc->flag & SCONV_NORMALIZATION_C) =3D=3D 0) {
+			sc->flag |=3D SCONV_NORMALIZATION_C;
+			sc->flag &=3D ~SCONV_NORMALIZATION_D;
+			/* Set up string converters. */
+			setup_converter(sc);
+		}
+		break;
+	case SCONV_SET_OPT_NORMALIZATION_D:
+#if defined(HAVE_ICONV)
+		/*
+		 * If iconv will take the string, do not change the
+		 * setting of the normalization.
+		 */
+		if (!(sc->flag & SCONV_WIN_CP) &&
+		     (sc->flag & (SCONV_FROM_UTF16 | SCONV_FROM_UTF8)) &&
+		    !(sc->flag & (SCONV_TO_UTF16 | SCONV_TO_UTF8)))
+			break;
+#endif
+		if ((sc->flag & SCONV_NORMALIZATION_D) =3D=3D 0) {
+			sc->flag |=3D SCONV_NORMALIZATION_D;
+			sc->flag &=3D ~SCONV_NORMALIZATION_C;
+			/* Set up string converters. */
+			setup_converter(sc);
+		}
+		break;
 	default:
 		break;
 	}
@@ -2009,8 +1879,8 @@
  *
  * Copy one archive_string to another in locale conversion.
  *
- *	archive_strncpy_in_locale();
- *	archive_strcpy_in_locale();
+ *	archive_strncat_l();
+ *	archive_strncpy_l();
  *
  */
=20
@@ -2056,15 +1926,15 @@
 }
=20
 int
-archive_strncpy_in_locale(struct archive_string *as, const void *_p, size_=
t n,
+archive_strncpy_l(struct archive_string *as, const void *_p, size_t n,
     struct archive_string_conv *sc)
 {
 	as->length =3D 0;
-	return (archive_strncat_in_locale(as, _p, n, sc));
+	return (archive_strncat_l(as, _p, n, sc));
 }
=20
 int
-archive_strncat_in_locale(struct archive_string *as, const void *_p, size_=
t n,
+archive_strncat_l(struct archive_string *as, const void *_p, size_t n,
     struct archive_string_conv *sc)
 {
 	const void *s;
@@ -2291,7 +2161,6 @@
 	const char *p =3D (const char *)_p;
 	size_t r;
=20
-	(void)sc; /* UNUSED */
 #if HAVE_MBRTOWC
 	mbstate_t shift_state;
=20
@@ -2315,6 +2184,7 @@
 		p +=3D r;
 		n -=3D r;
 	}
+	(void)sc; /* UNUSED */
 	return (0); /* All Okey. */
 }
=20
@@ -2773,8 +2643,8 @@
  * If any surrogate pair are found, it would be canonicalized.
  */
 static int
-strncat_from_utf8_to_utf8(struct archive_string *as, const void *_p, size_=
t len,
-    struct archive_string_conv *sc)
+strncat_from_utf8_to_utf8(struct archive_string *as, const void *_p,
+    size_t len, struct archive_string_conv *sc)
 {
 	const char *s;
 	char *p, *endp;
@@ -3320,7 +3190,50 @@
 	return (ret);
 }
=20
-#if defined(__APPLE__)
+static int
+get_nfd(uint32_t *cp1, uint32_t *cp2, uint32_t uc)
+{
+	int t, b;
+
+	/*
+	 * These are not converted to NFD on Mac OS.
+	 */
+	if ((uc >=3D 0x2000 && uc <=3D 0x2FFF) ||
+	    (uc >=3D 0xF900 && uc <=3D 0xFAFF) ||
+	    (uc >=3D 0x2F800 && uc <=3D 0x2FAFF))
+		return (0);
+	/*
+	 * Those code points are not converted to NFD on Mac OS.
+	 * I do not know the reason because it is undocumented.
+	 *   NFC        NFD
+	 *   1109A  =3D=3D> 11099 110BA
+	 *   1109C  =3D=3D> 1109B 110BA
+	 *   110AB  =3D=3D> 110A5 110BA
+	 */
+	if (uc =3D=3D 0x1109A || uc =3D=3D 0x1109C || uc =3D=3D 0x110AB)
+		return (0);
+
+	t =3D 0;
+	b =3D sizeof(u_decomposition_table)/sizeof(u_decomposition_table[0]) -1;
+	while (b >=3D t) {
+		int m =3D (t + b) / 2;
+		if (u_decomposition_table[m].nfc < uc)
+			t =3D m + 1;
+		else if (u_decomposition_table[m].nfc > uc)
+			b =3D m - 1;
+		else {
+			*cp1 =3D u_decomposition_table[m].cp1;
+			*cp2 =3D u_decomposition_table[m].cp2;
+			return (1);
+		}
+	}
+	return (0);
+}
+
+#define REPLACE_UC_WITH(cp) do {		\
+	uc =3D cp;				\
+	ucptr =3D NULL;				\
+} while (0)
=20
 /*
  * Normalize UTF-8 characters to Form D and copy the result.
@@ -3329,110 +3242,170 @@
 archive_string_normalize_D(struct archive_string *as, const void *_p,
     size_t len, struct archive_string_conv *sc)
 {
-	const UniChar *inp;
-	char *outp;
-	size_t newsize;
-	ByteCount inCount, outCount;
-	ByteCount inAvail, outAvail;
-	OSStatus err;
-	int ret, saved_flag;
-
-	/*
-	 * Convert the current string to UTF-16LE for normalization.
-	 * The character-set of the current string must be UTF-16BE or
-	 * UTF-8.
-	 */
-	archive_string_empty(&(sc->utf16nfc));
-	saved_flag =3D sc->flag;/* save a flag. */
-	sc->flag &=3D ~(SCONV_TO_UTF16BE | SCONV_TO_UTF8);
-	sc->flag |=3D SCONV_TO_UTF16LE;
-	ret =3D archive_string_append_unicode(&(sc->utf16nfc), _p, len, sc);
-	sc->flag =3D saved_flag;/* restore the saved flag */
-	if (archive_strlen(&(sc->utf16nfc)) =3D=3D 0) {
-		if (archive_string_ensure(as, as->length + 1) =3D=3D NULL)
-			return (-1);
-		return (ret);
-	}
-
-	/*
-	 * Normalize an NFC string to be an NFD(HFS Plus version).
-	 */
-	newsize =3D sc->utf16nfc.length + 2;
-	if (archive_string_ensure(&(sc->utf16nfd), newsize) =3D=3D NULL)
-		return (-1);
-
-	inp =3D (UniChar *)sc->utf16nfc.s;
-	inAvail =3D archive_strlen(&(sc->utf16nfc));
-	sc->utf16nfd.length =3D 0;
-	outp =3D sc->utf16nfd.s;
-	outAvail =3D sc->utf16nfd.buffer_length -2;
-
-	do {
-		/* Reinitialize all state information. */
-		if (ResetUnicodeToTextInfo(sc->uniInfo) !=3D noErr)
-			goto return_no_changed_data;
-
-		inCount =3D outCount =3D 0;
-		err =3D ConvertFromUnicodeToText(sc->uniInfo,
-		    inAvail, inp,
-		    kUnicodeDefaultDirectionMask, 0, NULL, NULL, NULL,
-		    outAvail, &inCount, &outCount, outp);
-
-		if (err =3D=3D noErr) {
-			sc->utf16nfd.length =3D outCount;
-			sc->utf16nfd.s[sc->utf16nfd.length] =3D 0;
-			sc->utf16nfd.s[sc->utf16nfd.length+1] =3D 0;
-		} else if (err =3D=3D kTECOutputBufferFullStatus) {
-			newsize =3D inAvail - inCount;
-			if (newsize > inAvail)
-				newsize =3D inAvail;
-			newsize +=3D sc->utf16nfd.buffer_length + 2;
-			if (archive_string_ensure(&(sc->utf16nfd), newsize)
-			    =3D=3D NULL)
-				return (-1);
-			outp =3D sc->utf16nfd.s;
-			outAvail =3D sc->utf16nfd.buffer_length -2;
-		} else
-			goto return_no_changed_data;
-	} while (err =3D=3D kTECOutputBufferFullStatus);
-
-	/*
-	 * If there is a next-step conversion, we should convert
-	 * a UTF-16LE(NFD) string back to the original Unicode type.
-	 */
-	saved_flag =3D sc->flag;/* save a flag. */
-	if (!(sc->flag &
-	    (SCONV_TO_UTF16BE | SCONV_TO_UTF16LE | SCONV_TO_UTF8))) {
+	const char *s =3D (const char *)_p;
+	char *p, *endp;
+	uint32_t uc, uc2;
+	size_t w;
+	int always_replace, n, n2, ret =3D 0, spair, ts, tm;
+	int (*parse)(uint32_t *, const char *, size_t);
+	size_t (*unparse)(char *, size_t, uint32_t);
+
+	always_replace =3D 1;
+	ts =3D 1;/* text size. */
+	if (sc->flag & SCONV_TO_UTF16BE) {
+		unparse =3D unicode_to_utf16be;
+		ts =3D 2;
+		if (sc->flag & SCONV_FROM_UTF16BE)
+			always_replace =3D 0;
+	} else if (sc->flag & SCONV_TO_UTF16LE) {
+		unparse =3D unicode_to_utf16le;
+		ts =3D 2;
+		if (sc->flag & SCONV_FROM_UTF16LE)
+			always_replace =3D 0;
+	} else if (sc->flag & SCONV_TO_UTF8) {
+		unparse =3D unicode_to_utf8;
+		if (sc->flag & SCONV_FROM_UTF8)
+			always_replace =3D 0;
+	} else {
 		/*
 		 * This case is going to be converted to another
 		 * character-set through iconv.
 		 */
-		if (sc->flag & SCONV_FROM_UTF16BE)
-			sc->flag |=3D SCONV_TO_UTF16BE;
-		else if (sc->flag & SCONV_FROM_UTF16LE)
-			sc->flag |=3D SCONV_TO_UTF16LE;
+		always_replace =3D 0;
+		if (sc->flag & SCONV_FROM_UTF16BE) {
+			unparse =3D unicode_to_utf16be;
+			ts =3D 2;
+		} else if (sc->flag & SCONV_FROM_UTF16LE) {
+			unparse =3D unicode_to_utf16le;
+			ts =3D 2;
+		} else {
+			unparse =3D unicode_to_utf8;
+		}
+	}
+
+	if (sc->flag & SCONV_FROM_UTF16BE) {
+		parse =3D utf16be_to_unicode;
+		tm =3D 1;
+		spair =3D 4;/* surrogate pair size in UTF-16. */
+	} else if (sc->flag & SCONV_FROM_UTF16LE) {
+		parse =3D utf16le_to_unicode;
+		tm =3D 1;
+		spair =3D 4;/* surrogate pair size in UTF-16. */
+	} else {
+		parse =3D cesu8_to_unicode;
+		tm =3D ts;
+		spair =3D 6;/* surrogate pair size in UTF-8. */
+	}
+
+	if (archive_string_ensure(as, as->length + len * tm + ts) =3D=3D NULL)
+		return (-1);
+
+	p =3D as->s + as->length;
+	endp =3D as->s + as->buffer_length - ts;
+	while ((n =3D parse(&uc, s, len)) !=3D 0) {
+		const char *ucptr;
+		uint32_t cp1, cp2;
+		int SIndex;
+		struct {
+			uint32_t uc;
+			int ccc;
+		} fdc[FDC_MAX];
+		int fdi, fdj;
+		int ccc;
+
+check_first_code:
+		if (n < 0) {
+			/* Use a replaced unicode character. */
+			UNPARSE(p, endp, uc);
+			s +=3D n*-1;
+			len -=3D n*-1;
+			ret =3D -1;
+			continue;
+		} else if (n =3D=3D spair || always_replace)
+			/* uc is converted from a surrogate pair.
+			 * this should be treated as a changed code. */
+			ucptr =3D NULL;
 		else
-			sc->flag |=3D SCONV_TO_UTF8;
+			ucptr =3D s;
+		s +=3D n;
+		len -=3D n;
+
+		/* Hangul Decomposition. */
+		if ((SIndex =3D uc - HC_SBASE) >=3D 0 && SIndex < HC_SCOUNT) {
+			int L =3D HC_LBASE + SIndex / HC_NCOUNT;
+			int V =3D HC_VBASE + (SIndex % HC_NCOUNT) / HC_TCOUNT;
+			int T =3D HC_TBASE + SIndex % HC_TCOUNT;
+
+			REPLACE_UC_WITH(L);
+			WRITE_UC();
+			REPLACE_UC_WITH(V);
+			WRITE_UC();
+			if (T !=3D HC_TBASE) {
+				REPLACE_UC_WITH(T);
+				WRITE_UC();
+			}
+			continue;
+		}
+		if (IS_DECOMPOSABLE_BLOCK(uc) && CCC(uc) !=3D 0) {
+			WRITE_UC();
+			continue;
+		}
+
+		fdi =3D 0;
+		while (get_nfd(&cp1, &cp2, uc) && fdi < FDC_MAX) {
+			int k;
+
+			for (k =3D fdi; k > 0; k--)
+				fdc[k] =3D fdc[k-1];
+			fdc[0].ccc =3D CCC(cp2);
+			fdc[0].uc =3D cp2;
+			fdi++;
+			REPLACE_UC_WITH(cp1);
+		}
+
+		/* Read following code points. */
+		while ((n2 =3D parse(&uc2, s, len)) > 0 &&
+		    (ccc =3D CCC(uc2)) !=3D 0 && fdi < FDC_MAX) {
+			int j, k;
+
+			s +=3D n2;
+			len -=3D n2;
+			for (j =3D 0; j < fdi; j++) {
+				if (fdc[j].ccc > ccc)
+					break;
+			}
+			if (j < fdi) {
+				for (k =3D fdi; k > j; k--)
+					fdc[k] =3D fdc[k-1];
+				fdc[j].ccc =3D ccc;
+				fdc[j].uc =3D uc2;
+			} else {
+				fdc[fdi].ccc =3D ccc;
+				fdc[fdi].uc =3D uc2;
+			}
+			fdi++;
+		}
+
+		WRITE_UC();
+		for (fdj =3D 0; fdj < fdi; fdj++) {
+			REPLACE_UC_WITH(fdc[fdj].uc);
+			WRITE_UC();
+		}
+
+		if (n2 =3D=3D 0)
+			break;
+		REPLACE_UC_WITH(uc2);
+		n =3D n2;
+		ucptr =3D s;
+		goto check_first_code;
 	}
-	sc->flag &=3D ~(SCONV_FROM_UTF16BE | SCONV_FROM_UTF8);
-	sc->flag |=3D SCONV_FROM_UTF16LE;
-	if (archive_string_append_unicode(as, sc->utf16nfd.s,
-	    sc->utf16nfd.length, sc) !=3D 0)
-		ret =3D -1;
-	sc->flag =3D saved_flag;/* restore the saved flag */
+	as->length =3D p - as->s;
+	as->s[as->length] =3D '\0';
+	if (ts =3D=3D 2)
+		as->s[as->length+1] =3D '\0';
 	return (ret);
-
-return_no_changed_data:
-	/*
-	 * Something conversion error happened, so we return a no normalized
-	 * string with an error.
-	 */
-	(void)archive_string_append_unicode(as, _p, len, sc);
-	return (-1);
 }
=20
-#endif /* __APPLE__ */
-
 /*
  * libarchive 2.x made incorrect UTF-8 strings in the wrong assumption
  * that WCS is Unicode. It is true for several platforms but some are fals=
e.
@@ -3629,15 +3602,15 @@
 }
=20
 static int
-win_strncat_from_utf16be(struct archive_string *as, const void *_p, size_t=
 bytes,
-    struct archive_string_conv *sc)
+win_strncat_from_utf16be(struct archive_string *as, const void *_p,
+    size_t bytes, struct archive_string_conv *sc)
 {
 	return (win_strncat_from_utf16(as, _p, bytes, sc, 1));
 }
=20
 static int
-win_strncat_from_utf16le(struct archive_string *as, const void *_p, size_t=
 bytes,
-    struct archive_string_conv *sc)
+win_strncat_from_utf16le(struct archive_string *as, const void *_p,
+    size_t bytes, struct archive_string_conv *sc)
 {
 	return (win_strncat_from_utf16(as, _p, bytes, sc, 0));
 }
@@ -3655,8 +3628,8 @@
  * Return -1 if conversion failes.
  */
 static int
-win_strncat_to_utf16(struct archive_string *as16, const void *_p, size_t l=
ength,
-    struct archive_string_conv *sc, int bigendian)
+win_strncat_to_utf16(struct archive_string *as16, const void *_p,
+    size_t length, struct archive_string_conv *sc, int bigendian)
 {
 	const char *s =3D (const char *)_p;
 	char *u16;
@@ -3732,15 +3705,15 @@
 }
=20
 static int
-win_strncat_to_utf16be(struct archive_string *as16, const void *_p, size_t=
 length,
-    struct archive_string_conv *sc)
+win_strncat_to_utf16be(struct archive_string *as16, const void *_p,
+    size_t length, struct archive_string_conv *sc)
 {
 	return (win_strncat_to_utf16(as16, _p, length, sc, 1));
 }
=20
 static int
-win_strncat_to_utf16le(struct archive_string *as16, const void *_p, size_t=
 length,
-    struct archive_string_conv *sc)
+win_strncat_to_utf16le(struct archive_string *as16, const void *_p,
+    size_t length, struct archive_string_conv *sc)
 {
 	return (win_strncat_to_utf16(as16, _p, length, sc, 0));
 }
@@ -3914,7 +3887,7 @@
 		sc =3D archive_string_conversion_to_charset(a, "UTF-8", 1);
 		if (sc =3D=3D NULL)
 			return (-1);/* Couldn't allocate memory for sc. */
-		r =3D archive_strncpy_in_locale(&(aes->aes_mbs), aes->aes_mbs.s,
+		r =3D archive_strncpy_l(&(aes->aes_mbs), aes->aes_mbs.s,
 		    aes->aes_mbs.length, sc);
 		if (a =3D=3D NULL)
 			free_sconv_object(sc);
@@ -4043,7 +4016,7 @@
 				*length =3D aes->aes_mbs.length;
 			return (0);
 		}
-		ret =3D archive_strncpy_in_locale(&(aes->aes_mbs_in_locale),
+		ret =3D archive_strncpy_l(&(aes->aes_mbs_in_locale),
 		    aes->aes_mbs.s, aes->aes_mbs.length, sc);
 		*p =3D aes->aes_mbs_in_locale.s;
 		if (length !=3D NULL)
@@ -4084,7 +4057,8 @@
 int
 archive_mstring_copy_wcs(struct archive_mstring *aes, const wchar_t *wcs)
 {
-	return archive_mstring_copy_wcs_len(aes, wcs, wcs =3D=3D NULL ? 0 : wcsle=
n(wcs));
+	return archive_mstring_copy_wcs_len(aes, wcs,
+				wcs =3D=3D NULL ? 0 : wcslen(wcs));
 }
=20
 int
@@ -4143,7 +4117,7 @@
 		 * Translate multi-bytes from some character-set to UTF-8.
 		 */=20
 		sc->cd =3D sc->cd_w;
-		r =3D archive_strncpy_in_locale(&(aes->aes_utf8), mbs, len, sc);
+		r =3D archive_strncpy_l(&(aes->aes_utf8), mbs, len, sc);
 		sc->cd =3D cd;
 		if (r !=3D 0) {
 			aes->aes_set =3D 0;
@@ -4175,7 +4149,7 @@
 			aes->aes_set =3D 0;
 	}
 #else
-	r =3D archive_strncpy_in_locale(&(aes->aes_mbs), mbs, len, sc);
+	r =3D archive_strncpy_l(&(aes->aes_mbs), mbs, len, sc);
 	if (r =3D=3D 0)
 		aes->aes_set =3D AES_SET_MBS; /* Only MBS form is set now. */
 	else
@@ -4219,7 +4193,7 @@
 	sc =3D archive_string_conversion_from_charset(a, "UTF-8", 1);
 	if (sc =3D=3D NULL)
 		return (-1);/* Couldn't allocate memory for sc. */
-	r =3D archive_strcpy_in_locale(&(aes->aes_mbs), utf8, sc);
+	r =3D archive_strcpy_l(&(aes->aes_mbs), utf8, sc);
 	if (a =3D=3D NULL)
 		free_sconv_object(sc);
 	if (r !=3D 0)
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_string.h
--- a/head/contrib/libarchive/libarchive/archive_string.h	Mon Jul 30 11:44:=
18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_string.h	Fri Aug 10 14:19:=
25 2012 +0300
@@ -22,7 +22,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.
  *
- * $FreeBSD: head/contrib/libarchive/libarchive/archive_string.h 232153 20=
12-02-25 10:58:02Z mm $
+ * $FreeBSD: head/contrib/libarchive/libarchive/archive_string.h 238856 20=
12-07-28 06:38:44Z mm $
  *
  */
=20
@@ -110,18 +110,20 @@
 void
 archive_string_conversion_set_opt(struct archive_string_conv *, int);
 #define SCONV_SET_OPT_UTF8_LIBARCHIVE2X	1
+#define SCONV_SET_OPT_NORMALIZATION_C	2
+#define SCONV_SET_OPT_NORMALIZATION_D	4
=20
=20
 /* Copy one archive_string to another in locale conversion.
  * Return -1 if conversion failes. */
 int
-archive_strncpy_in_locale(struct archive_string *, const void *, size_t,
+archive_strncpy_l(struct archive_string *, const void *, size_t,
     struct archive_string_conv *);
=20
 /* Copy one archive_string to another in locale conversion.
  * Return -1 if conversion failes. */
 int
-archive_strncat_in_locale(struct archive_string *, const void *, size_t,
+archive_strncat_l(struct archive_string *, const void *, size_t,
     struct archive_string_conv *);
=20
=20
@@ -162,8 +164,8 @@
 	archive_strncpy((as), (p), ((p) =3D=3D NULL ? 0 : strlen(p)))
 #define	archive_wstrcpy(as,p) \
 	archive_wstrncpy((as), (p), ((p) =3D=3D NULL ? 0 : wcslen(p)))
-#define	archive_strcpy_in_locale(as,p,lo) \
-	archive_strncpy_in_locale((as), (p), ((p) =3D=3D NULL ? 0 : strlen(p)), (=
lo))
+#define	archive_strcpy_l(as,p,lo) \
+	archive_strncpy_l((as), (p), ((p) =3D=3D NULL ? 0 : strlen(p)), (lo))
=20
 /* Copy a C string to an archive_string with limit, resizing as necessary.=
 */
 #define	archive_strncpy(as,p,l) \
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_string_composition.h
--- a/head/contrib/libarchive/libarchive/archive_string_composition.h	Mon J=
ul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_string_composition.h	Fri A=
ug 10 14:19:25 2012 +0300
@@ -1,5 +1,5 @@
 /*-
- * Copyright (c) 2011 libarchive Project
+ * Copyright (c) 2011-2012 libarchive Project
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -29,7 +29,7 @@
 /*
  * ATTENTION!
  *  This file is generated by build/utils/gen_archive_string_composition_h=
.sh
- *  from http://unicode.org/Public/UNIDATA/UnicodeData.txt
+ *  from http://unicode.org/Public/6.0.0/ucd/UnicodeData.txt
  *
  *  See also http://unicode.org/report/tr15/
  */
@@ -1348,4 +1348,945 @@
   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
   0, 0, 0, 0, 0, 0, 0, 0, 0,37,38,};
=20
+struct unicode_decomposition_table {
+	uint32_t nfc;
+	uint32_t cp1;
+	uint32_t cp2;
+};
+
+static const struct unicode_decomposition_table u_decomposition_table[] =
=3D {
+	{ 0x000C0 , 0x00041 , 0x00300 },
+	{ 0x000C1 , 0x00041 , 0x00301 },
+	{ 0x000C2 , 0x00041 , 0x00302 },
+	{ 0x000C3 , 0x00041 , 0x00303 },
+	{ 0x000C4 , 0x00041 , 0x00308 },
+	{ 0x000C5 , 0x00041 , 0x0030A },
+	{ 0x000C7 , 0x00043 , 0x00327 },
+	{ 0x000C8 , 0x00045 , 0x00300 },
+	{ 0x000C9 , 0x00045 , 0x00301 },
+	{ 0x000CA , 0x00045 , 0x00302 },
+	{ 0x000CB , 0x00045 , 0x00308 },
+	{ 0x000CC , 0x00049 , 0x00300 },
+	{ 0x000CD , 0x00049 , 0x00301 },
+	{ 0x000CE , 0x00049 , 0x00302 },
+	{ 0x000CF , 0x00049 , 0x00308 },
+	{ 0x000D1 , 0x0004E , 0x00303 },
+	{ 0x000D2 , 0x0004F , 0x00300 },
+	{ 0x000D3 , 0x0004F , 0x00301 },
+	{ 0x000D4 , 0x0004F , 0x00302 },
+	{ 0x000D5 , 0x0004F , 0x00303 },
+	{ 0x000D6 , 0x0004F , 0x00308 },
+	{ 0x000D9 , 0x00055 , 0x00300 },
+	{ 0x000DA , 0x00055 , 0x00301 },
+	{ 0x000DB , 0x00055 , 0x00302 },
+	{ 0x000DC , 0x00055 , 0x00308 },
+	{ 0x000DD , 0x00059 , 0x00301 },
+	{ 0x000E0 , 0x00061 , 0x00300 },
+	{ 0x000E1 , 0x00061 , 0x00301 },
+	{ 0x000E2 , 0x00061 , 0x00302 },
+	{ 0x000E3 , 0x00061 , 0x00303 },
+	{ 0x000E4 , 0x00061 , 0x00308 },
+	{ 0x000E5 , 0x00061 , 0x0030A },
+	{ 0x000E7 , 0x00063 , 0x00327 },
+	{ 0x000E8 , 0x00065 , 0x00300 },
+	{ 0x000E9 , 0x00065 , 0x00301 },
+	{ 0x000EA , 0x00065 , 0x00302 },
+	{ 0x000EB , 0x00065 , 0x00308 },
+	{ 0x000EC , 0x00069 , 0x00300 },
+	{ 0x000ED , 0x00069 , 0x00301 },
+	{ 0x000EE , 0x00069 , 0x00302 },
+	{ 0x000EF , 0x00069 , 0x00308 },
+	{ 0x000F1 , 0x0006E , 0x00303 },
+	{ 0x000F2 , 0x0006F , 0x00300 },
+	{ 0x000F3 , 0x0006F , 0x00301 },
+	{ 0x000F4 , 0x0006F , 0x00302 },
+	{ 0x000F5 , 0x0006F , 0x00303 },
+	{ 0x000F6 , 0x0006F , 0x00308 },
+	{ 0x000F9 , 0x00075 , 0x00300 },
+	{ 0x000FA , 0x00075 , 0x00301 },
+	{ 0x000FB , 0x00075 , 0x00302 },
+	{ 0x000FC , 0x00075 , 0x00308 },
+	{ 0x000FD , 0x00079 , 0x00301 },
+	{ 0x000FF , 0x00079 , 0x00308 },
+	{ 0x00100 , 0x00041 , 0x00304 },
+	{ 0x00101 , 0x00061 , 0x00304 },
+	{ 0x00102 , 0x00041 , 0x00306 },
+	{ 0x00103 , 0x00061 , 0x00306 },
+	{ 0x00104 , 0x00041 , 0x00328 },
+	{ 0x00105 , 0x00061 , 0x00328 },
+	{ 0x00106 , 0x00043 , 0x00301 },
+	{ 0x00107 , 0x00063 , 0x00301 },
+	{ 0x00108 , 0x00043 , 0x00302 },
+	{ 0x00109 , 0x00063 , 0x00302 },
+	{ 0x0010A , 0x00043 , 0x00307 },
+	{ 0x0010B , 0x00063 , 0x00307 },
+	{ 0x0010C , 0x00043 , 0x0030C },
+	{ 0x0010D , 0x00063 , 0x0030C },
+	{ 0x0010E , 0x00044 , 0x0030C },
+	{ 0x0010F , 0x00064 , 0x0030C },
+	{ 0x00112 , 0x00045 , 0x00304 },
+	{ 0x00113 , 0x00065 , 0x00304 },
+	{ 0x00114 , 0x00045 , 0x00306 },
+	{ 0x00115 , 0x00065 , 0x00306 },
+	{ 0x00116 , 0x00045 , 0x00307 },
+	{ 0x00117 , 0x00065 , 0x00307 },
+	{ 0x00118 , 0x00045 , 0x00328 },
+	{ 0x00119 , 0x00065 , 0x00328 },
+	{ 0x0011A , 0x00045 , 0x0030C },
+	{ 0x0011B , 0x00065 , 0x0030C },
+	{ 0x0011C , 0x00047 , 0x00302 },
+	{ 0x0011D , 0x00067 , 0x00302 },
+	{ 0x0011E , 0x00047 , 0x00306 },
+	{ 0x0011F , 0x00067 , 0x00306 },
+	{ 0x00120 , 0x00047 , 0x00307 },
+	{ 0x00121 , 0x00067 , 0x00307 },
+	{ 0x00122 , 0x00047 , 0x00327 },
+	{ 0x00123 , 0x00067 , 0x00327 },
+	{ 0x00124 , 0x00048 , 0x00302 },
+	{ 0x00125 , 0x00068 , 0x00302 },
+	{ 0x00128 , 0x00049 , 0x00303 },
+	{ 0x00129 , 0x00069 , 0x00303 },
+	{ 0x0012A , 0x00049 , 0x00304 },
+	{ 0x0012B , 0x00069 , 0x00304 },
+	{ 0x0012C , 0x00049 , 0x00306 },
+	{ 0x0012D , 0x00069 , 0x00306 },
+	{ 0x0012E , 0x00049 , 0x00328 },
+	{ 0x0012F , 0x00069 , 0x00328 },
+	{ 0x00130 , 0x00049 , 0x00307 },
+	{ 0x00134 , 0x0004A , 0x00302 },
+	{ 0x00135 , 0x0006A , 0x00302 },
+	{ 0x00136 , 0x0004B , 0x00327 },
+	{ 0x00137 , 0x0006B , 0x00327 },
+	{ 0x00139 , 0x0004C , 0x00301 },
+	{ 0x0013A , 0x0006C , 0x00301 },
+	{ 0x0013B , 0x0004C , 0x00327 },
+	{ 0x0013C , 0x0006C , 0x00327 },
+	{ 0x0013D , 0x0004C , 0x0030C },
+	{ 0x0013E , 0x0006C , 0x0030C },
+	{ 0x00143 , 0x0004E , 0x00301 },
+	{ 0x00144 , 0x0006E , 0x00301 },
+	{ 0x00145 , 0x0004E , 0x00327 },
+	{ 0x00146 , 0x0006E , 0x00327 },
+	{ 0x00147 , 0x0004E , 0x0030C },
+	{ 0x00148 , 0x0006E , 0x0030C },
+	{ 0x0014C , 0x0004F , 0x00304 },
+	{ 0x0014D , 0x0006F , 0x00304 },
+	{ 0x0014E , 0x0004F , 0x00306 },
+	{ 0x0014F , 0x0006F , 0x00306 },
+	{ 0x00150 , 0x0004F , 0x0030B },
+	{ 0x00151 , 0x0006F , 0x0030B },
+	{ 0x00154 , 0x00052 , 0x00301 },
+	{ 0x00155 , 0x00072 , 0x00301 },
+	{ 0x00156 , 0x00052 , 0x00327 },
+	{ 0x00157 , 0x00072 , 0x00327 },
+	{ 0x00158 , 0x00052 , 0x0030C },
+	{ 0x00159 , 0x00072 , 0x0030C },
+	{ 0x0015A , 0x00053 , 0x00301 },
+	{ 0x0015B , 0x00073 , 0x00301 },
+	{ 0x0015C , 0x00053 , 0x00302 },
+	{ 0x0015D , 0x00073 , 0x00302 },
+	{ 0x0015E , 0x00053 , 0x00327 },
+	{ 0x0015F , 0x00073 , 0x00327 },
+	{ 0x00160 , 0x00053 , 0x0030C },
+	{ 0x00161 , 0x00073 , 0x0030C },
+	{ 0x00162 , 0x00054 , 0x00327 },
+	{ 0x00163 , 0x00074 , 0x00327 },
+	{ 0x00164 , 0x00054 , 0x0030C },
+	{ 0x00165 , 0x00074 , 0x0030C },
+	{ 0x00168 , 0x00055 , 0x00303 },
+	{ 0x00169 , 0x00075 , 0x00303 },
+	{ 0x0016A , 0x00055 , 0x00304 },
+	{ 0x0016B , 0x00075 , 0x00304 },
+	{ 0x0016C , 0x00055 , 0x00306 },
+	{ 0x0016D , 0x00075 , 0x00306 },
+	{ 0x0016E , 0x00055 , 0x0030A },
+	{ 0x0016F , 0x00075 , 0x0030A },
+	{ 0x00170 , 0x00055 , 0x0030B },
+	{ 0x00171 , 0x00075 , 0x0030B },
+	{ 0x00172 , 0x00055 , 0x00328 },
+	{ 0x00173 , 0x00075 , 0x00328 },
+	{ 0x00174 , 0x00057 , 0x00302 },
+	{ 0x00175 , 0x00077 , 0x00302 },
+	{ 0x00176 , 0x00059 , 0x00302 },
+	{ 0x00177 , 0x00079 , 0x00302 },
+	{ 0x00178 , 0x00059 , 0x00308 },
+	{ 0x00179 , 0x0005A , 0x00301 },
+	{ 0x0017A , 0x0007A , 0x00301 },
+	{ 0x0017B , 0x0005A , 0x00307 },
+	{ 0x0017C , 0x0007A , 0x00307 },
+	{ 0x0017D , 0x0005A , 0x0030C },
+	{ 0x0017E , 0x0007A , 0x0030C },
+	{ 0x001A0 , 0x0004F , 0x0031B },
+	{ 0x001A1 , 0x0006F , 0x0031B },
+	{ 0x001AF , 0x00055 , 0x0031B },
+	{ 0x001B0 , 0x00075 , 0x0031B },
+	{ 0x001CD , 0x00041 , 0x0030C },
+	{ 0x001CE , 0x00061 , 0x0030C },
+	{ 0x001CF , 0x00049 , 0x0030C },
+	{ 0x001D0 , 0x00069 , 0x0030C },
+	{ 0x001D1 , 0x0004F , 0x0030C },
+	{ 0x001D2 , 0x0006F , 0x0030C },
+	{ 0x001D3 , 0x00055 , 0x0030C },
+	{ 0x001D4 , 0x00075 , 0x0030C },
+	{ 0x001D5 , 0x000DC , 0x00304 },
+	{ 0x001D6 , 0x000FC , 0x00304 },
+	{ 0x001D7 , 0x000DC , 0x00301 },
+	{ 0x001D8 , 0x000FC , 0x00301 },
+	{ 0x001D9 , 0x000DC , 0x0030C },
+	{ 0x001DA , 0x000FC , 0x0030C },
+	{ 0x001DB , 0x000DC , 0x00300 },
+	{ 0x001DC , 0x000FC , 0x00300 },
+	{ 0x001DE , 0x000C4 , 0x00304 },
+	{ 0x001DF , 0x000E4 , 0x00304 },
+	{ 0x001E0 , 0x00226 , 0x00304 },
+	{ 0x001E1 , 0x00227 , 0x00304 },
+	{ 0x001E2 , 0x000C6 , 0x00304 },
+	{ 0x001E3 , 0x000E6 , 0x00304 },
+	{ 0x001E6 , 0x00047 , 0x0030C },
+	{ 0x001E7 , 0x00067 , 0x0030C },
+	{ 0x001E8 , 0x0004B , 0x0030C },
+	{ 0x001E9 , 0x0006B , 0x0030C },
+	{ 0x001EA , 0x0004F , 0x00328 },
+	{ 0x001EB , 0x0006F , 0x00328 },
+	{ 0x001EC , 0x001EA , 0x00304 },
+	{ 0x001ED , 0x001EB , 0x00304 },
+	{ 0x001EE , 0x001B7 , 0x0030C },
+	{ 0x001EF , 0x00292 , 0x0030C },
+	{ 0x001F0 , 0x0006A , 0x0030C },
+	{ 0x001F4 , 0x00047 , 0x00301 },
+	{ 0x001F5 , 0x00067 , 0x00301 },
+	{ 0x001F8 , 0x0004E , 0x00300 },
+	{ 0x001F9 , 0x0006E , 0x00300 },
+	{ 0x001FA , 0x000C5 , 0x00301 },
+	{ 0x001FB , 0x000E5 , 0x00301 },
+	{ 0x001FC , 0x000C6 , 0x00301 },
+	{ 0x001FD , 0x000E6 , 0x00301 },
+	{ 0x001FE , 0x000D8 , 0x00301 },
+	{ 0x001FF , 0x000F8 , 0x00301 },
+	{ 0x00200 , 0x00041 , 0x0030F },
+	{ 0x00201 , 0x00061 , 0x0030F },
+	{ 0x00202 , 0x00041 , 0x00311 },
+	{ 0x00203 , 0x00061 , 0x00311 },
+	{ 0x00204 , 0x00045 , 0x0030F },
+	{ 0x00205 , 0x00065 , 0x0030F },
+	{ 0x00206 , 0x00045 , 0x00311 },
+	{ 0x00207 , 0x00065 , 0x00311 },
+	{ 0x00208 , 0x00049 , 0x0030F },
+	{ 0x00209 , 0x00069 , 0x0030F },
+	{ 0x0020A , 0x00049 , 0x00311 },
+	{ 0x0020B , 0x00069 , 0x00311 },
+	{ 0x0020C , 0x0004F , 0x0030F },
+	{ 0x0020D , 0x0006F , 0x0030F },
+	{ 0x0020E , 0x0004F , 0x00311 },
+	{ 0x0020F , 0x0006F , 0x00311 },
+	{ 0x00210 , 0x00052 , 0x0030F },
+	{ 0x00211 , 0x00072 , 0x0030F },
+	{ 0x00212 , 0x00052 , 0x00311 },
+	{ 0x00213 , 0x00072 , 0x00311 },
+	{ 0x00214 , 0x00055 , 0x0030F },
+	{ 0x00215 , 0x00075 , 0x0030F },
+	{ 0x00216 , 0x00055 , 0x00311 },
+	{ 0x00217 , 0x00075 , 0x00311 },
+	{ 0x00218 , 0x00053 , 0x00326 },
+	{ 0x00219 , 0x00073 , 0x00326 },
+	{ 0x0021A , 0x00054 , 0x00326 },
+	{ 0x0021B , 0x00074 , 0x00326 },
+	{ 0x0021E , 0x00048 , 0x0030C },
+	{ 0x0021F , 0x00068 , 0x0030C },
+	{ 0x00226 , 0x00041 , 0x00307 },
+	{ 0x00227 , 0x00061 , 0x00307 },
+	{ 0x00228 , 0x00045 , 0x00327 },
+	{ 0x00229 , 0x00065 , 0x00327 },
+	{ 0x0022A , 0x000D6 , 0x00304 },
+	{ 0x0022B , 0x000F6 , 0x00304 },
+	{ 0x0022C , 0x000D5 , 0x00304 },
+	{ 0x0022D , 0x000F5 , 0x00304 },
+	{ 0x0022E , 0x0004F , 0x00307 },
+	{ 0x0022F , 0x0006F , 0x00307 },
+	{ 0x00230 , 0x0022E , 0x00304 },
+	{ 0x00231 , 0x0022F , 0x00304 },
+	{ 0x00232 , 0x00059 , 0x00304 },
+	{ 0x00233 , 0x00079 , 0x00304 },
+	{ 0x00385 , 0x000A8 , 0x00301 },
+	{ 0x00386 , 0x00391 , 0x00301 },
+	{ 0x00388 , 0x00395 , 0x00301 },
+	{ 0x00389 , 0x00397 , 0x00301 },
+	{ 0x0038A , 0x00399 , 0x00301 },
+	{ 0x0038C , 0x0039F , 0x00301 },
+	{ 0x0038E , 0x003A5 , 0x00301 },
+	{ 0x0038F , 0x003A9 , 0x00301 },
+	{ 0x00390 , 0x003CA , 0x00301 },
+	{ 0x003AA , 0x00399 , 0x00308 },
+	{ 0x003AB , 0x003A5 , 0x00308 },
+	{ 0x003AC , 0x003B1 , 0x00301 },
+	{ 0x003AD , 0x003B5 , 0x00301 },
+	{ 0x003AE , 0x003B7 , 0x00301 },
+	{ 0x003AF , 0x003B9 , 0x00301 },
+	{ 0x003B0 , 0x003CB , 0x00301 },
+	{ 0x003CA , 0x003B9 , 0x00308 },
+	{ 0x003CB , 0x003C5 , 0x00308 },
+	{ 0x003CC , 0x003BF , 0x00301 },
+	{ 0x003CD , 0x003C5 , 0x00301 },
+	{ 0x003CE , 0x003C9 , 0x00301 },
+	{ 0x003D3 , 0x003D2 , 0x00301 },
+	{ 0x003D4 , 0x003D2 , 0x00308 },
+	{ 0x00400 , 0x00415 , 0x00300 },
+	{ 0x00401 , 0x00415 , 0x00308 },
+	{ 0x00403 , 0x00413 , 0x00301 },
+	{ 0x00407 , 0x00406 , 0x00308 },
+	{ 0x0040C , 0x0041A , 0x00301 },
+	{ 0x0040D , 0x00418 , 0x00300 },
+	{ 0x0040E , 0x00423 , 0x00306 },
+	{ 0x00419 , 0x00418 , 0x00306 },
+	{ 0x00439 , 0x00438 , 0x00306 },
+	{ 0x00450 , 0x00435 , 0x00300 },
+	{ 0x00451 , 0x00435 , 0x00308 },
+	{ 0x00453 , 0x00433 , 0x00301 },
+	{ 0x00457 , 0x00456 , 0x00308 },
+	{ 0x0045C , 0x0043A , 0x00301 },
+	{ 0x0045D , 0x00438 , 0x00300 },
+	{ 0x0045E , 0x00443 , 0x00306 },
+	{ 0x00476 , 0x00474 , 0x0030F },
+	{ 0x00477 , 0x00475 , 0x0030F },
+	{ 0x004C1 , 0x00416 , 0x00306 },
+	{ 0x004C2 , 0x00436 , 0x00306 },
+	{ 0x004D0 , 0x00410 , 0x00306 },
+	{ 0x004D1 , 0x00430 , 0x00306 },
+	{ 0x004D2 , 0x00410 , 0x00308 },
+	{ 0x004D3 , 0x00430 , 0x00308 },
+	{ 0x004D6 , 0x00415 , 0x00306 },
+	{ 0x004D7 , 0x00435 , 0x00306 },
+	{ 0x004DA , 0x004D8 , 0x00308 },
+	{ 0x004DB , 0x004D9 , 0x00308 },
+	{ 0x004DC , 0x00416 , 0x00308 },
+	{ 0x004DD , 0x00436 , 0x00308 },
+	{ 0x004DE , 0x00417 , 0x00308 },
+	{ 0x004DF , 0x00437 , 0x00308 },
+	{ 0x004E2 , 0x00418 , 0x00304 },
+	{ 0x004E3 , 0x00438 , 0x00304 },
+	{ 0x004E4 , 0x00418 , 0x00308 },
+	{ 0x004E5 , 0x00438 , 0x00308 },
+	{ 0x004E6 , 0x0041E , 0x00308 },
+	{ 0x004E7 , 0x0043E , 0x00308 },
+	{ 0x004EA , 0x004E8 , 0x00308 },
+	{ 0x004EB , 0x004E9 , 0x00308 },
+	{ 0x004EC , 0x0042D , 0x00308 },
+	{ 0x004ED , 0x0044D , 0x00308 },
+	{ 0x004EE , 0x00423 , 0x00304 },
+	{ 0x004EF , 0x00443 , 0x00304 },
+	{ 0x004F0 , 0x00423 , 0x00308 },
+	{ 0x004F1 , 0x00443 , 0x00308 },
+	{ 0x004F2 , 0x00423 , 0x0030B },
+	{ 0x004F3 , 0x00443 , 0x0030B },
+	{ 0x004F4 , 0x00427 , 0x00308 },
+	{ 0x004F5 , 0x00447 , 0x00308 },
+	{ 0x004F8 , 0x0042B , 0x00308 },
+	{ 0x004F9 , 0x0044B , 0x00308 },
+	{ 0x00622 , 0x00627 , 0x00653 },
+	{ 0x00623 , 0x00627 , 0x00654 },
+	{ 0x00624 , 0x00648 , 0x00654 },
+	{ 0x00625 , 0x00627 , 0x00655 },
+	{ 0x00626 , 0x0064A , 0x00654 },
+	{ 0x006C0 , 0x006D5 , 0x00654 },
+	{ 0x006C2 , 0x006C1 , 0x00654 },
+	{ 0x006D3 , 0x006D2 , 0x00654 },
+	{ 0x00929 , 0x00928 , 0x0093C },
+	{ 0x00931 , 0x00930 , 0x0093C },
+	{ 0x00934 , 0x00933 , 0x0093C },
+	{ 0x009CB , 0x009C7 , 0x009BE },
+	{ 0x009CC , 0x009C7 , 0x009D7 },
+	{ 0x00B48 , 0x00B47 , 0x00B56 },
+	{ 0x00B4B , 0x00B47 , 0x00B3E },
+	{ 0x00B4C , 0x00B47 , 0x00B57 },
+	{ 0x00B94 , 0x00B92 , 0x00BD7 },
+	{ 0x00BCA , 0x00BC6 , 0x00BBE },
+	{ 0x00BCB , 0x00BC7 , 0x00BBE },
+	{ 0x00BCC , 0x00BC6 , 0x00BD7 },
+	{ 0x00C48 , 0x00C46 , 0x00C56 },
+	{ 0x00CC0 , 0x00CBF , 0x00CD5 },
+	{ 0x00CC7 , 0x00CC6 , 0x00CD5 },
+	{ 0x00CC8 , 0x00CC6 , 0x00CD6 },
+	{ 0x00CCA , 0x00CC6 , 0x00CC2 },
+	{ 0x00CCB , 0x00CCA , 0x00CD5 },
+	{ 0x00D4A , 0x00D46 , 0x00D3E },
+	{ 0x00D4B , 0x00D47 , 0x00D3E },
+	{ 0x00D4C , 0x00D46 , 0x00D57 },
+	{ 0x00DDA , 0x00DD9 , 0x00DCA },
+	{ 0x00DDC , 0x00DD9 , 0x00DCF },
+	{ 0x00DDD , 0x00DDC , 0x00DCA },
+	{ 0x00DDE , 0x00DD9 , 0x00DDF },
+	{ 0x01026 , 0x01025 , 0x0102E },
+	{ 0x01B06 , 0x01B05 , 0x01B35 },
+	{ 0x01B08 , 0x01B07 , 0x01B35 },
+	{ 0x01B0A , 0x01B09 , 0x01B35 },
+	{ 0x01B0C , 0x01B0B , 0x01B35 },
+	{ 0x01B0E , 0x01B0D , 0x01B35 },
+	{ 0x01B12 , 0x01B11 , 0x01B35 },
+	{ 0x01B3B , 0x01B3A , 0x01B35 },
+	{ 0x01B3D , 0x01B3C , 0x01B35 },
+	{ 0x01B40 , 0x01B3E , 0x01B35 },
+	{ 0x01B41 , 0x01B3F , 0x01B35 },
+	{ 0x01B43 , 0x01B42 , 0x01B35 },
+	{ 0x01E00 , 0x00041 , 0x00325 },
+	{ 0x01E01 , 0x00061 , 0x00325 },
+	{ 0x01E02 , 0x00042 , 0x00307 },
+	{ 0x01E03 , 0x00062 , 0x00307 },
+	{ 0x01E04 , 0x00042 , 0x00323 },
+	{ 0x01E05 , 0x00062 , 0x00323 },
+	{ 0x01E06 , 0x00042 , 0x00331 },
+	{ 0x01E07 , 0x00062 , 0x00331 },
+	{ 0x01E08 , 0x000C7 , 0x00301 },
+	{ 0x01E09 , 0x000E7 , 0x00301 },
+	{ 0x01E0A , 0x00044 , 0x00307 },
+	{ 0x01E0B , 0x00064 , 0x00307 },
+	{ 0x01E0C , 0x00044 , 0x00323 },
+	{ 0x01E0D , 0x00064 , 0x00323 },
+	{ 0x01E0E , 0x00044 , 0x00331 },
+	{ 0x01E0F , 0x00064 , 0x00331 },
+	{ 0x01E10 , 0x00044 , 0x00327 },
+	{ 0x01E11 , 0x00064 , 0x00327 },
+	{ 0x01E12 , 0x00044 , 0x0032D },
+	{ 0x01E13 , 0x00064 , 0x0032D },
+	{ 0x01E14 , 0x00112 , 0x00300 },
+	{ 0x01E15 , 0x00113 , 0x00300 },
+	{ 0x01E16 , 0x00112 , 0x00301 },
+	{ 0x01E17 , 0x00113 , 0x00301 },
+	{ 0x01E18 , 0x00045 , 0x0032D },
+	{ 0x01E19 , 0x00065 , 0x0032D },
+	{ 0x01E1A , 0x00045 , 0x00330 },
+	{ 0x01E1B , 0x00065 , 0x00330 },
+	{ 0x01E1C , 0x00228 , 0x00306 },
+	{ 0x01E1D , 0x00229 , 0x00306 },
+	{ 0x01E1E , 0x00046 , 0x00307 },
+	{ 0x01E1F , 0x00066 , 0x00307 },
+	{ 0x01E20 , 0x00047 , 0x00304 },
+	{ 0x01E21 , 0x00067 , 0x00304 },
+	{ 0x01E22 , 0x00048 , 0x00307 },
+	{ 0x01E23 , 0x00068 , 0x00307 },
+	{ 0x01E24 , 0x00048 , 0x00323 },
+	{ 0x01E25 , 0x00068 , 0x00323 },
+	{ 0x01E26 , 0x00048 , 0x00308 },
+	{ 0x01E27 , 0x00068 , 0x00308 },
+	{ 0x01E28 , 0x00048 , 0x00327 },
+	{ 0x01E29 , 0x00068 , 0x00327 },
+	{ 0x01E2A , 0x00048 , 0x0032E },
+	{ 0x01E2B , 0x00068 , 0x0032E },
+	{ 0x01E2C , 0x00049 , 0x00330 },
+	{ 0x01E2D , 0x00069 , 0x00330 },
+	{ 0x01E2E , 0x000CF , 0x00301 },
+	{ 0x01E2F , 0x000EF , 0x00301 },
+	{ 0x01E30 , 0x0004B , 0x00301 },
+	{ 0x01E31 , 0x0006B , 0x00301 },
+	{ 0x01E32 , 0x0004B , 0x00323 },
+	{ 0x01E33 , 0x0006B , 0x00323 },
+	{ 0x01E34 , 0x0004B , 0x00331 },
+	{ 0x01E35 , 0x0006B , 0x00331 },
+	{ 0x01E36 , 0x0004C , 0x00323 },
+	{ 0x01E37 , 0x0006C , 0x00323 },
+	{ 0x01E38 , 0x01E36 , 0x00304 },
+	{ 0x01E39 , 0x01E37 , 0x00304 },
+	{ 0x01E3A , 0x0004C , 0x00331 },
+	{ 0x01E3B , 0x0006C , 0x00331 },
+	{ 0x01E3C , 0x0004C , 0x0032D },
+	{ 0x01E3D , 0x0006C , 0x0032D },
+	{ 0x01E3E , 0x0004D , 0x00301 },
+	{ 0x01E3F , 0x0006D , 0x00301 },
+	{ 0x01E40 , 0x0004D , 0x00307 },
+	{ 0x01E41 , 0x0006D , 0x00307 },
+	{ 0x01E42 , 0x0004D , 0x00323 },
+	{ 0x01E43 , 0x0006D , 0x00323 },
+	{ 0x01E44 , 0x0004E , 0x00307 },
+	{ 0x01E45 , 0x0006E , 0x00307 },
+	{ 0x01E46 , 0x0004E , 0x00323 },
+	{ 0x01E47 , 0x0006E , 0x00323 },
+	{ 0x01E48 , 0x0004E , 0x00331 },
+	{ 0x01E49 , 0x0006E , 0x00331 },
+	{ 0x01E4A , 0x0004E , 0x0032D },
+	{ 0x01E4B , 0x0006E , 0x0032D },
+	{ 0x01E4C , 0x000D5 , 0x00301 },
+	{ 0x01E4D , 0x000F5 , 0x00301 },
+	{ 0x01E4E , 0x000D5 , 0x00308 },
+	{ 0x01E4F , 0x000F5 , 0x00308 },
+	{ 0x01E50 , 0x0014C , 0x00300 },
+	{ 0x01E51 , 0x0014D , 0x00300 },
+	{ 0x01E52 , 0x0014C , 0x00301 },
+	{ 0x01E53 , 0x0014D , 0x00301 },
+	{ 0x01E54 , 0x00050 , 0x00301 },
+	{ 0x01E55 , 0x00070 , 0x00301 },
+	{ 0x01E56 , 0x00050 , 0x00307 },
+	{ 0x01E57 , 0x00070 , 0x00307 },
+	{ 0x01E58 , 0x00052 , 0x00307 },
+	{ 0x01E59 , 0x00072 , 0x00307 },
+	{ 0x01E5A , 0x00052 , 0x00323 },
+	{ 0x01E5B , 0x00072 , 0x00323 },
+	{ 0x01E5C , 0x01E5A , 0x00304 },
+	{ 0x01E5D , 0x01E5B , 0x00304 },
+	{ 0x01E5E , 0x00052 , 0x00331 },
+	{ 0x01E5F , 0x00072 , 0x00331 },
+	{ 0x01E60 , 0x00053 , 0x00307 },
+	{ 0x01E61 , 0x00073 , 0x00307 },
+	{ 0x01E62 , 0x00053 , 0x00323 },
+	{ 0x01E63 , 0x00073 , 0x00323 },
+	{ 0x01E64 , 0x0015A , 0x00307 },
+	{ 0x01E65 , 0x0015B , 0x00307 },
+	{ 0x01E66 , 0x00160 , 0x00307 },
+	{ 0x01E67 , 0x00161 , 0x00307 },
+	{ 0x01E68 , 0x01E62 , 0x00307 },
+	{ 0x01E69 , 0x01E63 , 0x00307 },
+	{ 0x01E6A , 0x00054 , 0x00307 },
+	{ 0x01E6B , 0x00074 , 0x00307 },
+	{ 0x01E6C , 0x00054 , 0x00323 },
+	{ 0x01E6D , 0x00074 , 0x00323 },
+	{ 0x01E6E , 0x00054 , 0x00331 },
+	{ 0x01E6F , 0x00074 , 0x00331 },
+	{ 0x01E70 , 0x00054 , 0x0032D },
+	{ 0x01E71 , 0x00074 , 0x0032D },
+	{ 0x01E72 , 0x00055 , 0x00324 },
+	{ 0x01E73 , 0x00075 , 0x00324 },
+	{ 0x01E74 , 0x00055 , 0x00330 },
+	{ 0x01E75 , 0x00075 , 0x00330 },
+	{ 0x01E76 , 0x00055 , 0x0032D },
+	{ 0x01E77 , 0x00075 , 0x0032D },
+	{ 0x01E78 , 0x00168 , 0x00301 },
+	{ 0x01E79 , 0x00169 , 0x00301 },
+	{ 0x01E7A , 0x0016A , 0x00308 },
+	{ 0x01E7B , 0x0016B , 0x00308 },
+	{ 0x01E7C , 0x00056 , 0x00303 },
+	{ 0x01E7D , 0x00076 , 0x00303 },
+	{ 0x01E7E , 0x00056 , 0x00323 },
+	{ 0x01E7F , 0x00076 , 0x00323 },
+	{ 0x01E80 , 0x00057 , 0x00300 },
+	{ 0x01E81 , 0x00077 , 0x00300 },
+	{ 0x01E82 , 0x00057 , 0x00301 },
+	{ 0x01E83 , 0x00077 , 0x00301 },
+	{ 0x01E84 , 0x00057 , 0x00308 },
+	{ 0x01E85 , 0x00077 , 0x00308 },
+	{ 0x01E86 , 0x00057 , 0x00307 },
+	{ 0x01E87 , 0x00077 , 0x00307 },
+	{ 0x01E88 , 0x00057 , 0x00323 },
+	{ 0x01E89 , 0x00077 , 0x00323 },
+	{ 0x01E8A , 0x00058 , 0x00307 },
+	{ 0x01E8B , 0x00078 , 0x00307 },
+	{ 0x01E8C , 0x00058 , 0x00308 },
+	{ 0x01E8D , 0x00078 , 0x00308 },
+	{ 0x01E8E , 0x00059 , 0x00307 },
+	{ 0x01E8F , 0x00079 , 0x00307 },
+	{ 0x01E90 , 0x0005A , 0x00302 },
+	{ 0x01E91 , 0x0007A , 0x00302 },
+	{ 0x01E92 , 0x0005A , 0x00323 },
+	{ 0x01E93 , 0x0007A , 0x00323 },
+	{ 0x01E94 , 0x0005A , 0x00331 },
+	{ 0x01E95 , 0x0007A , 0x00331 },
+	{ 0x01E96 , 0x00068 , 0x00331 },
+	{ 0x01E97 , 0x00074 , 0x00308 },
+	{ 0x01E98 , 0x00077 , 0x0030A },
+	{ 0x01E99 , 0x00079 , 0x0030A },
+	{ 0x01E9B , 0x0017F , 0x00307 },
+	{ 0x01EA0 , 0x00041 , 0x00323 },
+	{ 0x01EA1 , 0x00061 , 0x00323 },
+	{ 0x01EA2 , 0x00041 , 0x00309 },
+	{ 0x01EA3 , 0x00061 , 0x00309 },
+	{ 0x01EA4 , 0x000C2 , 0x00301 },
+	{ 0x01EA5 , 0x000E2 , 0x00301 },
+	{ 0x01EA6 , 0x000C2 , 0x00300 },
+	{ 0x01EA7 , 0x000E2 , 0x00300 },
+	{ 0x01EA8 , 0x000C2 , 0x00309 },
+	{ 0x01EA9 , 0x000E2 , 0x00309 },
+	{ 0x01EAA , 0x000C2 , 0x00303 },
+	{ 0x01EAB , 0x000E2 , 0x00303 },
+	{ 0x01EAC , 0x01EA0 , 0x00302 },
+	{ 0x01EAD , 0x01EA1 , 0x00302 },
+	{ 0x01EAE , 0x00102 , 0x00301 },
+	{ 0x01EAF , 0x00103 , 0x00301 },
+	{ 0x01EB0 , 0x00102 , 0x00300 },
+	{ 0x01EB1 , 0x00103 , 0x00300 },
+	{ 0x01EB2 , 0x00102 , 0x00309 },
+	{ 0x01EB3 , 0x00103 , 0x00309 },
+	{ 0x01EB4 , 0x00102 , 0x00303 },
+	{ 0x01EB5 , 0x00103 , 0x00303 },
+	{ 0x01EB6 , 0x01EA0 , 0x00306 },
+	{ 0x01EB7 , 0x01EA1 , 0x00306 },
+	{ 0x01EB8 , 0x00045 , 0x00323 },
+	{ 0x01EB9 , 0x00065 , 0x00323 },
+	{ 0x01EBA , 0x00045 , 0x00309 },
+	{ 0x01EBB , 0x00065 , 0x00309 },
+	{ 0x01EBC , 0x00045 , 0x00303 },
+	{ 0x01EBD , 0x00065 , 0x00303 },
+	{ 0x01EBE , 0x000CA , 0x00301 },
+	{ 0x01EBF , 0x000EA , 0x00301 },
+	{ 0x01EC0 , 0x000CA , 0x00300 },
+	{ 0x01EC1 , 0x000EA , 0x00300 },
+	{ 0x01EC2 , 0x000CA , 0x00309 },
+	{ 0x01EC3 , 0x000EA , 0x00309 },
+	{ 0x01EC4 , 0x000CA , 0x00303 },
+	{ 0x01EC5 , 0x000EA , 0x00303 },
+	{ 0x01EC6 , 0x01EB8 , 0x00302 },
+	{ 0x01EC7 , 0x01EB9 , 0x00302 },
+	{ 0x01EC8 , 0x00049 , 0x00309 },
+	{ 0x01EC9 , 0x00069 , 0x00309 },
+	{ 0x01ECA , 0x00049 , 0x00323 },
+	{ 0x01ECB , 0x00069 , 0x00323 },
+	{ 0x01ECC , 0x0004F , 0x00323 },
+	{ 0x01ECD , 0x0006F , 0x00323 },
+	{ 0x01ECE , 0x0004F , 0x00309 },
+	{ 0x01ECF , 0x0006F , 0x00309 },
+	{ 0x01ED0 , 0x000D4 , 0x00301 },
+	{ 0x01ED1 , 0x000F4 , 0x00301 },
+	{ 0x01ED2 , 0x000D4 , 0x00300 },
+	{ 0x01ED3 , 0x000F4 , 0x00300 },
+	{ 0x01ED4 , 0x000D4 , 0x00309 },
+	{ 0x01ED5 , 0x000F4 , 0x00309 },
+	{ 0x01ED6 , 0x000D4 , 0x00303 },
+	{ 0x01ED7 , 0x000F4 , 0x00303 },
+	{ 0x01ED8 , 0x01ECC , 0x00302 },
+	{ 0x01ED9 , 0x01ECD , 0x00302 },
+	{ 0x01EDA , 0x001A0 , 0x00301 },
+	{ 0x01EDB , 0x001A1 , 0x00301 },
+	{ 0x01EDC , 0x001A0 , 0x00300 },
+	{ 0x01EDD , 0x001A1 , 0x00300 },
+	{ 0x01EDE , 0x001A0 , 0x00309 },
+	{ 0x01EDF , 0x001A1 , 0x00309 },
+	{ 0x01EE0 , 0x001A0 , 0x00303 },
+	{ 0x01EE1 , 0x001A1 , 0x00303 },
+	{ 0x01EE2 , 0x001A0 , 0x00323 },
+	{ 0x01EE3 , 0x001A1 , 0x00323 },
+	{ 0x01EE4 , 0x00055 , 0x00323 },
+	{ 0x01EE5 , 0x00075 , 0x00323 },
+	{ 0x01EE6 , 0x00055 , 0x00309 },
+	{ 0x01EE7 , 0x00075 , 0x00309 },
+	{ 0x01EE8 , 0x001AF , 0x00301 },
+	{ 0x01EE9 , 0x001B0 , 0x00301 },
+	{ 0x01EEA , 0x001AF , 0x00300 },
+	{ 0x01EEB , 0x001B0 , 0x00300 },
+	{ 0x01EEC , 0x001AF , 0x00309 },
+	{ 0x01EED , 0x001B0 , 0x00309 },
+	{ 0x01EEE , 0x001AF , 0x00303 },
+	{ 0x01EEF , 0x001B0 , 0x00303 },
+	{ 0x01EF0 , 0x001AF , 0x00323 },
+	{ 0x01EF1 , 0x001B0 , 0x00323 },
+	{ 0x01EF2 , 0x00059 , 0x00300 },
+	{ 0x01EF3 , 0x00079 , 0x00300 },
+	{ 0x01EF4 , 0x00059 , 0x00323 },
+	{ 0x01EF5 , 0x00079 , 0x00323 },
+	{ 0x01EF6 , 0x00059 , 0x00309 },
+	{ 0x01EF7 , 0x00079 , 0x00309 },
+	{ 0x01EF8 , 0x00059 , 0x00303 },
+	{ 0x01EF9 , 0x00079 , 0x00303 },
+	{ 0x01F00 , 0x003B1 , 0x00313 },
+	{ 0x01F01 , 0x003B1 , 0x00314 },
+	{ 0x01F02 , 0x01F00 , 0x00300 },
+	{ 0x01F03 , 0x01F01 , 0x00300 },
+	{ 0x01F04 , 0x01F00 , 0x00301 },
+	{ 0x01F05 , 0x01F01 , 0x00301 },
+	{ 0x01F06 , 0x01F00 , 0x00342 },
+	{ 0x01F07 , 0x01F01 , 0x00342 },
+	{ 0x01F08 , 0x00391 , 0x00313 },
+	{ 0x01F09 , 0x00391 , 0x00314 },
+	{ 0x01F0A , 0x01F08 , 0x00300 },
+	{ 0x01F0B , 0x01F09 , 0x00300 },
+	{ 0x01F0C , 0x01F08 , 0x00301 },
+	{ 0x01F0D , 0x01F09 , 0x00301 },
+	{ 0x01F0E , 0x01F08 , 0x00342 },
+	{ 0x01F0F , 0x01F09 , 0x00342 },
+	{ 0x01F10 , 0x003B5 , 0x00313 },
+	{ 0x01F11 , 0x003B5 , 0x00314 },
+	{ 0x01F12 , 0x01F10 , 0x00300 },
+	{ 0x01F13 , 0x01F11 , 0x00300 },
+	{ 0x01F14 , 0x01F10 , 0x00301 },
+	{ 0x01F15 , 0x01F11 , 0x00301 },
+	{ 0x01F18 , 0x00395 , 0x00313 },
+	{ 0x01F19 , 0x00395 , 0x00314 },
+	{ 0x01F1A , 0x01F18 , 0x00300 },
+	{ 0x01F1B , 0x01F19 , 0x00300 },
+	{ 0x01F1C , 0x01F18 , 0x00301 },
+	{ 0x01F1D , 0x01F19 , 0x00301 },
+	{ 0x01F20 , 0x003B7 , 0x00313 },
+	{ 0x01F21 , 0x003B7 , 0x00314 },
+	{ 0x01F22 , 0x01F20 , 0x00300 },
+	{ 0x01F23 , 0x01F21 , 0x00300 },
+	{ 0x01F24 , 0x01F20 , 0x00301 },
+	{ 0x01F25 , 0x01F21 , 0x00301 },
+	{ 0x01F26 , 0x01F20 , 0x00342 },
+	{ 0x01F27 , 0x01F21 , 0x00342 },
+	{ 0x01F28 , 0x00397 , 0x00313 },
+	{ 0x01F29 , 0x00397 , 0x00314 },
+	{ 0x01F2A , 0x01F28 , 0x00300 },
+	{ 0x01F2B , 0x01F29 , 0x00300 },
+	{ 0x01F2C , 0x01F28 , 0x00301 },
+	{ 0x01F2D , 0x01F29 , 0x00301 },
+	{ 0x01F2E , 0x01F28 , 0x00342 },
+	{ 0x01F2F , 0x01F29 , 0x00342 },
+	{ 0x01F30 , 0x003B9 , 0x00313 },
+	{ 0x01F31 , 0x003B9 , 0x00314 },
+	{ 0x01F32 , 0x01F30 , 0x00300 },
+	{ 0x01F33 , 0x01F31 , 0x00300 },
+	{ 0x01F34 , 0x01F30 , 0x00301 },
+	{ 0x01F35 , 0x01F31 , 0x00301 },
+	{ 0x01F36 , 0x01F30 , 0x00342 },
+	{ 0x01F37 , 0x01F31 , 0x00342 },
+	{ 0x01F38 , 0x00399 , 0x00313 },
+	{ 0x01F39 , 0x00399 , 0x00314 },
+	{ 0x01F3A , 0x01F38 , 0x00300 },
+	{ 0x01F3B , 0x01F39 , 0x00300 },
+	{ 0x01F3C , 0x01F38 , 0x00301 },
+	{ 0x01F3D , 0x01F39 , 0x00301 },
+	{ 0x01F3E , 0x01F38 , 0x00342 },
+	{ 0x01F3F , 0x01F39 , 0x00342 },
+	{ 0x01F40 , 0x003BF , 0x00313 },
+	{ 0x01F41 , 0x003BF , 0x00314 },
+	{ 0x01F42 , 0x01F40 , 0x00300 },
+	{ 0x01F43 , 0x01F41 , 0x00300 },
+	{ 0x01F44 , 0x01F40 , 0x00301 },
+	{ 0x01F45 , 0x01F41 , 0x00301 },
+	{ 0x01F48 , 0x0039F , 0x00313 },
+	{ 0x01F49 , 0x0039F , 0x00314 },
+	{ 0x01F4A , 0x01F48 , 0x00300 },
+	{ 0x01F4B , 0x01F49 , 0x00300 },
+	{ 0x01F4C , 0x01F48 , 0x00301 },
+	{ 0x01F4D , 0x01F49 , 0x00301 },
+	{ 0x01F50 , 0x003C5 , 0x00313 },
+	{ 0x01F51 , 0x003C5 , 0x00314 },
+	{ 0x01F52 , 0x01F50 , 0x00300 },
+	{ 0x01F53 , 0x01F51 , 0x00300 },
+	{ 0x01F54 , 0x01F50 , 0x00301 },
+	{ 0x01F55 , 0x01F51 , 0x00301 },
+	{ 0x01F56 , 0x01F50 , 0x00342 },
+	{ 0x01F57 , 0x01F51 , 0x00342 },
+	{ 0x01F59 , 0x003A5 , 0x00314 },
+	{ 0x01F5B , 0x01F59 , 0x00300 },
+	{ 0x01F5D , 0x01F59 , 0x00301 },
+	{ 0x01F5F , 0x01F59 , 0x00342 },
+	{ 0x01F60 , 0x003C9 , 0x00313 },
+	{ 0x01F61 , 0x003C9 , 0x00314 },
+	{ 0x01F62 , 0x01F60 , 0x00300 },
+	{ 0x01F63 , 0x01F61 , 0x00300 },
+	{ 0x01F64 , 0x01F60 , 0x00301 },
+	{ 0x01F65 , 0x01F61 , 0x00301 },
+	{ 0x01F66 , 0x01F60 , 0x00342 },
+	{ 0x01F67 , 0x01F61 , 0x00342 },
+	{ 0x01F68 , 0x003A9 , 0x00313 },
+	{ 0x01F69 , 0x003A9 , 0x00314 },
+	{ 0x01F6A , 0x01F68 , 0x00300 },
+	{ 0x01F6B , 0x01F69 , 0x00300 },
+	{ 0x01F6C , 0x01F68 , 0x00301 },
+	{ 0x01F6D , 0x01F69 , 0x00301 },
+	{ 0x01F6E , 0x01F68 , 0x00342 },
+	{ 0x01F6F , 0x01F69 , 0x00342 },
+	{ 0x01F70 , 0x003B1 , 0x00300 },
+	{ 0x01F72 , 0x003B5 , 0x00300 },
+	{ 0x01F74 , 0x003B7 , 0x00300 },
+	{ 0x01F76 , 0x003B9 , 0x00300 },
+	{ 0x01F78 , 0x003BF , 0x00300 },
+	{ 0x01F7A , 0x003C5 , 0x00300 },
+	{ 0x01F7C , 0x003C9 , 0x00300 },
+	{ 0x01F80 , 0x01F00 , 0x00345 },
+	{ 0x01F81 , 0x01F01 , 0x00345 },
+	{ 0x01F82 , 0x01F02 , 0x00345 },
+	{ 0x01F83 , 0x01F03 , 0x00345 },
+	{ 0x01F84 , 0x01F04 , 0x00345 },
+	{ 0x01F85 , 0x01F05 , 0x00345 },
+	{ 0x01F86 , 0x01F06 , 0x00345 },
+	{ 0x01F87 , 0x01F07 , 0x00345 },
+	{ 0x01F88 , 0x01F08 , 0x00345 },
+	{ 0x01F89 , 0x01F09 , 0x00345 },
+	{ 0x01F8A , 0x01F0A , 0x00345 },
+	{ 0x01F8B , 0x01F0B , 0x00345 },
+	{ 0x01F8C , 0x01F0C , 0x00345 },
+	{ 0x01F8D , 0x01F0D , 0x00345 },
+	{ 0x01F8E , 0x01F0E , 0x00345 },
+	{ 0x01F8F , 0x01F0F , 0x00345 },
+	{ 0x01F90 , 0x01F20 , 0x00345 },
+	{ 0x01F91 , 0x01F21 , 0x00345 },
+	{ 0x01F92 , 0x01F22 , 0x00345 },
+	{ 0x01F93 , 0x01F23 , 0x00345 },
+	{ 0x01F94 , 0x01F24 , 0x00345 },
+	{ 0x01F95 , 0x01F25 , 0x00345 },
+	{ 0x01F96 , 0x01F26 , 0x00345 },
+	{ 0x01F97 , 0x01F27 , 0x00345 },
+	{ 0x01F98 , 0x01F28 , 0x00345 },
+	{ 0x01F99 , 0x01F29 , 0x00345 },
+	{ 0x01F9A , 0x01F2A , 0x00345 },
+	{ 0x01F9B , 0x01F2B , 0x00345 },
+	{ 0x01F9C , 0x01F2C , 0x00345 },
+	{ 0x01F9D , 0x01F2D , 0x00345 },
+	{ 0x01F9E , 0x01F2E , 0x00345 },
+	{ 0x01F9F , 0x01F2F , 0x00345 },
+	{ 0x01FA0 , 0x01F60 , 0x00345 },
+	{ 0x01FA1 , 0x01F61 , 0x00345 },
+	{ 0x01FA2 , 0x01F62 , 0x00345 },
+	{ 0x01FA3 , 0x01F63 , 0x00345 },
+	{ 0x01FA4 , 0x01F64 , 0x00345 },
+	{ 0x01FA5 , 0x01F65 , 0x00345 },
+	{ 0x01FA6 , 0x01F66 , 0x00345 },
+	{ 0x01FA7 , 0x01F67 , 0x00345 },
+	{ 0x01FA8 , 0x01F68 , 0x00345 },
+	{ 0x01FA9 , 0x01F69 , 0x00345 },
+	{ 0x01FAA , 0x01F6A , 0x00345 },
+	{ 0x01FAB , 0x01F6B , 0x00345 },
+	{ 0x01FAC , 0x01F6C , 0x00345 },
+	{ 0x01FAD , 0x01F6D , 0x00345 },
+	{ 0x01FAE , 0x01F6E , 0x00345 },
+	{ 0x01FAF , 0x01F6F , 0x00345 },
+	{ 0x01FB0 , 0x003B1 , 0x00306 },
+	{ 0x01FB1 , 0x003B1 , 0x00304 },
+	{ 0x01FB2 , 0x01F70 , 0x00345 },
+	{ 0x01FB3 , 0x003B1 , 0x00345 },
+	{ 0x01FB4 , 0x003AC , 0x00345 },
+	{ 0x01FB6 , 0x003B1 , 0x00342 },
+	{ 0x01FB7 , 0x01FB6 , 0x00345 },
+	{ 0x01FB8 , 0x00391 , 0x00306 },
+	{ 0x01FB9 , 0x00391 , 0x00304 },
+	{ 0x01FBA , 0x00391 , 0x00300 },
+	{ 0x01FBC , 0x00391 , 0x00345 },
+	{ 0x01FC1 , 0x000A8 , 0x00342 },
+	{ 0x01FC2 , 0x01F74 , 0x00345 },
+	{ 0x01FC3 , 0x003B7 , 0x00345 },
+	{ 0x01FC4 , 0x003AE , 0x00345 },
+	{ 0x01FC6 , 0x003B7 , 0x00342 },
+	{ 0x01FC7 , 0x01FC6 , 0x00345 },
+	{ 0x01FC8 , 0x00395 , 0x00300 },
+	{ 0x01FCA , 0x00397 , 0x00300 },
+	{ 0x01FCC , 0x00397 , 0x00345 },
+	{ 0x01FCD , 0x01FBF , 0x00300 },
+	{ 0x01FCE , 0x01FBF , 0x00301 },
+	{ 0x01FCF , 0x01FBF , 0x00342 },
+	{ 0x01FD0 , 0x003B9 , 0x00306 },
+	{ 0x01FD1 , 0x003B9 , 0x00304 },
+	{ 0x01FD2 , 0x003CA , 0x00300 },
+	{ 0x01FD6 , 0x003B9 , 0x00342 },
+	{ 0x01FD7 , 0x003CA , 0x00342 },
+	{ 0x01FD8 , 0x00399 , 0x00306 },
+	{ 0x01FD9 , 0x00399 , 0x00304 },
+	{ 0x01FDA , 0x00399 , 0x00300 },
+	{ 0x01FDD , 0x01FFE , 0x00300 },
+	{ 0x01FDE , 0x01FFE , 0x00301 },
+	{ 0x01FDF , 0x01FFE , 0x00342 },
+	{ 0x01FE0 , 0x003C5 , 0x00306 },
+	{ 0x01FE1 , 0x003C5 , 0x00304 },
+	{ 0x01FE2 , 0x003CB , 0x00300 },
+	{ 0x01FE4 , 0x003C1 , 0x00313 },
+	{ 0x01FE5 , 0x003C1 , 0x00314 },
+	{ 0x01FE6 , 0x003C5 , 0x00342 },
+	{ 0x01FE7 , 0x003CB , 0x00342 },
+	{ 0x01FE8 , 0x003A5 , 0x00306 },
+	{ 0x01FE9 , 0x003A5 , 0x00304 },
+	{ 0x01FEA , 0x003A5 , 0x00300 },
+	{ 0x01FEC , 0x003A1 , 0x00314 },
+	{ 0x01FED , 0x000A8 , 0x00300 },
+	{ 0x01FF2 , 0x01F7C , 0x00345 },
+	{ 0x01FF3 , 0x003C9 , 0x00345 },
+	{ 0x01FF4 , 0x003CE , 0x00345 },
+	{ 0x01FF6 , 0x003C9 , 0x00342 },
+	{ 0x01FF7 , 0x01FF6 , 0x00345 },
+	{ 0x01FF8 , 0x0039F , 0x00300 },
+	{ 0x01FFA , 0x003A9 , 0x00300 },
+	{ 0x01FFC , 0x003A9 , 0x00345 },
+	{ 0x0219A , 0x02190 , 0x00338 },
+	{ 0x0219B , 0x02192 , 0x00338 },
+	{ 0x021AE , 0x02194 , 0x00338 },
+	{ 0x021CD , 0x021D0 , 0x00338 },
+	{ 0x021CE , 0x021D4 , 0x00338 },
+	{ 0x021CF , 0x021D2 , 0x00338 },
+	{ 0x02204 , 0x02203 , 0x00338 },
+	{ 0x02209 , 0x02208 , 0x00338 },
+	{ 0x0220C , 0x0220B , 0x00338 },
+	{ 0x02224 , 0x02223 , 0x00338 },
+	{ 0x02226 , 0x02225 , 0x00338 },
+	{ 0x02241 , 0x0223C , 0x00338 },
+	{ 0x02244 , 0x02243 , 0x00338 },
+	{ 0x02247 , 0x02245 , 0x00338 },
+	{ 0x02249 , 0x02248 , 0x00338 },
+	{ 0x02260 , 0x0003D , 0x00338 },
+	{ 0x02262 , 0x02261 , 0x00338 },
+	{ 0x0226D , 0x0224D , 0x00338 },
+	{ 0x0226E , 0x0003C , 0x00338 },
+	{ 0x0226F , 0x0003E , 0x00338 },
+	{ 0x02270 , 0x02264 , 0x00338 },
+	{ 0x02271 , 0x02265 , 0x00338 },
+	{ 0x02274 , 0x02272 , 0x00338 },
+	{ 0x02275 , 0x02273 , 0x00338 },
+	{ 0x02278 , 0x02276 , 0x00338 },
+	{ 0x02279 , 0x02277 , 0x00338 },
+	{ 0x02280 , 0x0227A , 0x00338 },
+	{ 0x02281 , 0x0227B , 0x00338 },
+	{ 0x02284 , 0x02282 , 0x00338 },
+	{ 0x02285 , 0x02283 , 0x00338 },
+	{ 0x02288 , 0x02286 , 0x00338 },
+	{ 0x02289 , 0x02287 , 0x00338 },
+	{ 0x022AC , 0x022A2 , 0x00338 },
+	{ 0x022AD , 0x022A8 , 0x00338 },
+	{ 0x022AE , 0x022A9 , 0x00338 },
+	{ 0x022AF , 0x022AB , 0x00338 },
+	{ 0x022E0 , 0x0227C , 0x00338 },
+	{ 0x022E1 , 0x0227D , 0x00338 },
+	{ 0x022E2 , 0x02291 , 0x00338 },
+	{ 0x022E3 , 0x02292 , 0x00338 },
+	{ 0x022EA , 0x022B2 , 0x00338 },
+	{ 0x022EB , 0x022B3 , 0x00338 },
+	{ 0x022EC , 0x022B4 , 0x00338 },
+	{ 0x022ED , 0x022B5 , 0x00338 },
+	{ 0x0304C , 0x0304B , 0x03099 },
+	{ 0x0304E , 0x0304D , 0x03099 },
+	{ 0x03050 , 0x0304F , 0x03099 },
+	{ 0x03052 , 0x03051 , 0x03099 },
+	{ 0x03054 , 0x03053 , 0x03099 },
+	{ 0x03056 , 0x03055 , 0x03099 },
+	{ 0x03058 , 0x03057 , 0x03099 },
+	{ 0x0305A , 0x03059 , 0x03099 },
+	{ 0x0305C , 0x0305B , 0x03099 },
+	{ 0x0305E , 0x0305D , 0x03099 },
+	{ 0x03060 , 0x0305F , 0x03099 },
+	{ 0x03062 , 0x03061 , 0x03099 },
+	{ 0x03065 , 0x03064 , 0x03099 },
+	{ 0x03067 , 0x03066 , 0x03099 },
+	{ 0x03069 , 0x03068 , 0x03099 },
+	{ 0x03070 , 0x0306F , 0x03099 },
+	{ 0x03071 , 0x0306F , 0x0309A },
+	{ 0x03073 , 0x03072 , 0x03099 },
+	{ 0x03074 , 0x03072 , 0x0309A },
+	{ 0x03076 , 0x03075 , 0x03099 },
+	{ 0x03077 , 0x03075 , 0x0309A },
+	{ 0x03079 , 0x03078 , 0x03099 },
+	{ 0x0307A , 0x03078 , 0x0309A },
+	{ 0x0307C , 0x0307B , 0x03099 },
+	{ 0x0307D , 0x0307B , 0x0309A },
+	{ 0x03094 , 0x03046 , 0x03099 },
+	{ 0x0309E , 0x0309D , 0x03099 },
+	{ 0x030AC , 0x030AB , 0x03099 },
+	{ 0x030AE , 0x030AD , 0x03099 },
+	{ 0x030B0 , 0x030AF , 0x03099 },
+	{ 0x030B2 , 0x030B1 , 0x03099 },
+	{ 0x030B4 , 0x030B3 , 0x03099 },
+	{ 0x030B6 , 0x030B5 , 0x03099 },
+	{ 0x030B8 , 0x030B7 , 0x03099 },
+	{ 0x030BA , 0x030B9 , 0x03099 },
+	{ 0x030BC , 0x030BB , 0x03099 },
+	{ 0x030BE , 0x030BD , 0x03099 },
+	{ 0x030C0 , 0x030BF , 0x03099 },
+	{ 0x030C2 , 0x030C1 , 0x03099 },
+	{ 0x030C5 , 0x030C4 , 0x03099 },
+	{ 0x030C7 , 0x030C6 , 0x03099 },
+	{ 0x030C9 , 0x030C8 , 0x03099 },
+	{ 0x030D0 , 0x030CF , 0x03099 },
+	{ 0x030D1 , 0x030CF , 0x0309A },
+	{ 0x030D3 , 0x030D2 , 0x03099 },
+	{ 0x030D4 , 0x030D2 , 0x0309A },
+	{ 0x030D6 , 0x030D5 , 0x03099 },
+	{ 0x030D7 , 0x030D5 , 0x0309A },
+	{ 0x030D9 , 0x030D8 , 0x03099 },
+	{ 0x030DA , 0x030D8 , 0x0309A },
+	{ 0x030DC , 0x030DB , 0x03099 },
+	{ 0x030DD , 0x030DB , 0x0309A },
+	{ 0x030F4 , 0x030A6 , 0x03099 },
+	{ 0x030F7 , 0x030EF , 0x03099 },
+	{ 0x030F8 , 0x030F0 , 0x03099 },
+	{ 0x030F9 , 0x030F1 , 0x03099 },
+	{ 0x030FA , 0x030F2 , 0x03099 },
+	{ 0x030FE , 0x030FD , 0x03099 },
+	{ 0x1109A , 0x11099 , 0x110BA },
+	{ 0x1109C , 0x1109B , 0x110BA },
+	{ 0x110AB , 0x110A5 , 0x110BA },
+};
+
 #endif /* ARCHIVE_STRING_COMPOSITION_H_INCLUDED */
+
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_string_sprintf.c
--- a/head/contrib/libarchive/libarchive/archive_string_sprintf.c	Mon Jul 3=
0 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_string_sprintf.c	Fri Aug 1=
0 14:19:25 2012 +0300
@@ -24,7 +24,7 @@
  */
=20
 #include "archive_platform.h"
-__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/archive_string_spri=
ntf.c 232153 2012-02-25 10:58:02Z mm $");
+__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/archive_string_spri=
ntf.c 238856 2012-07-28 06:38:44Z mm $");
=20
 /*
  * The use of printf()-family functions can be troublesome
@@ -38,7 +38,9 @@
  * here.  This is only used to format error messages, so doesn't
  * require any floating-point support or field-width handling.
  */
-
+#ifdef HAVE_ERRNO_H
+#include <errno.h>
+#endif
 #include <stdio.h>
=20
 #include "archive_string.h"
@@ -129,7 +131,7 @@
 			break;
 		case 'c':
 			s =3D va_arg(ap, int);
-			archive_strappend_char(as, s);
+			archive_strappend_char(as, (char)s);
 			break;
 		case 'd':
 			switch(long_flag) {
@@ -146,7 +148,9 @@
 				pw =3D va_arg(ap, wchar_t *);
 				if (pw =3D=3D NULL)
 					pw =3D L"(null)";
-				archive_string_append_from_wcs(as, pw, wcslen(pw));
+				if (archive_string_append_from_wcs(as, pw,
+				    wcslen(pw)) !=3D 0 && errno =3D=3D ENOMEM)
+					__archive_errx(1, "Out of memory");
 				break;
 			default:
 				p2 =3D va_arg(ap, char *);
@@ -160,7 +164,9 @@
 			pw =3D va_arg(ap, wchar_t *);
 			if (pw =3D=3D NULL)
 				pw =3D L"(null)";
-			archive_string_append_from_wcs(as, pw, wcslen(pw));
+			if (archive_string_append_from_wcs(as, pw,
+			    wcslen(pw)) !=3D 0 && errno =3D=3D ENOMEM)
+				__archive_errx(1, "Out of memory");
 			break;
 		case 'o': case 'u': case 'x': case 'X':
 			/* Common handling for unsigned integer formats. */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_util.3
--- a/head/contrib/libarchive/libarchive/archive_util.3	Mon Jul 30 11:44:18=
 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_util.3	Fri Aug 10 14:19:25=
 2012 +0300
@@ -22,9 +22,9 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\" $FreeBSD: head/contrib/libarchive/libarchive/archive_util.3 232153 201=
2-02-25 10:58:02Z mm $
+.\" $FreeBSD: head/contrib/libarchive/libarchive/archive_util.3 238856 201=
2-07-28 06:38:44Z mm $
 .\"
-.Dd January 8, 2005
+.Dd February 2, 2012
 .Dt ARCHIVE_UTIL 3
 .Os
 .Sh NAME
@@ -43,6 +43,8 @@
 .Nm archive_position ,
 .Nm archive_set_error
 .Nd libarchive utility functions
+.Sh LIBRARY
+Streaming Archive Library (libarchive, -larchive)
 .Sh SYNOPSIS
 .In archive.h
 .Ft void
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_util.c
--- a/head/contrib/libarchive/libarchive/archive_util.c	Mon Jul 30 11:44:18=
 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_util.c	Fri Aug 10 14:19:25=
 2012 +0300
@@ -25,7 +25,7 @@
  */
=20
 #include "archive_platform.h"
-__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/archive_util.c 2321=
53 2012-02-25 10:58:02Z mm $");
+__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/archive_util.c 2388=
56 2012-07-28 06:38:44Z mm $");
=20
 #ifdef HAVE_SYS_TYPES_H
 #include <sys/types.h>
@@ -243,8 +243,9 @@
 		archive_wstrcpy(&temp_name, tmp);
 		free(tmp);
 	} else {
-		archive_wstring_append_from_mbs(&temp_name, tmpdir,
-		    strlen(tmpdir));
+		if (archive_wstring_append_from_mbs(&temp_name, tmpdir,
+		    strlen(tmpdir)) < 0)
+			goto exit_tmpfile;
 		if (temp_name.s[temp_name.length-1] !=3D L'/')
 			archive_wstrappend_wchar(&temp_name, L'/');
 	}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_write.3
--- a/head/contrib/libarchive/libarchive/archive_write.3	Mon Jul 30 11:44:1=
8 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_write.3	Fri Aug 10 14:19:2=
5 2012 +0300
@@ -22,14 +22,16 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\" $FreeBSD: head/contrib/libarchive/libarchive/archive_write.3 232153 20=
12-02-25 10:58:02Z mm $
+.\" $FreeBSD: head/contrib/libarchive/libarchive/archive_write.3 238856 20=
12-07-28 06:38:44Z mm $
 .\"
-.Dd March 23, 2011
+.Dd February 2, 2012
 .Dt ARCHIVE_WRITE 3
 .Os
 .Sh NAME
 .Nm archive_write
 .Nd functions for creating archives
+.Sh LIBRARY
+Streaming Archive Library (libarchive, -larchive)
 .Sh SYNOPSIS
 .In archive.h
 .Sh DESCRIPTION
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_write.c
--- a/head/contrib/libarchive/libarchive/archive_write.c	Mon Jul 30 11:44:1=
8 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_write.c	Fri Aug 10 14:19:2=
5 2012 +0300
@@ -24,7 +24,7 @@
  */
=20
 #include "archive_platform.h"
-__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/archive_write.c 232=
153 2012-02-25 10:58:02Z mm $");
+__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/archive_write.c 238=
856 2012-07-28 06:38:44Z mm $");
=20
 /*
  * This file contains the "essential" portions of the write API, that
@@ -380,7 +380,7 @@
 		}
 	}
=20
-	while ((size_t)remaining > state->buffer_size) {
+	while ((size_t)remaining >=3D state->buffer_size) {
 		/* Write out full blocks directly to client. */
 		bytes_written =3D (a->client_writer)(&a->archive,
 		    a->client_data, buff, state->buffer_size);
@@ -623,7 +623,7 @@
 	if (a->skip_file_set &&
 	    archive_entry_dev_is_set(entry) &&
 	    archive_entry_ino_is_set(entry) &&
-	    archive_entry_dev(entry) =3D=3D a->skip_file_dev &&
+	    archive_entry_dev(entry) =3D=3D (dev_t)a->skip_file_dev &&
 	    archive_entry_ino64(entry) =3D=3D a->skip_file_ino) {
 		archive_set_error(&a->archive, 0,
 		    "Can't add archive to itself");
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_write_add_filter.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/head/contrib/libarchive/libarchive/archive_write_add_filter.c	Fri Aug=
 10 14:19:25 2012 +0300
@@ -0,0 +1,66 @@
+/*-
+ * Copyright (c) 2012 Ondrej Holy
+ * 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 WARRANTI=
ES
+ * 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 US=
E,
+ * 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_TYPES_H
+#include <sys/types.h>
+#endif
+
+#ifdef HAVE_ERRNO_H
+#include <errno.h>
+#endif
+
+#include "archive.h"
+#include "archive_private.h"
+
+/* A table that maps filter codes to functions. */
+static
+struct { int code; int (*setter)(struct archive *); } codes[] =3D
+{
+	{ ARCHIVE_FILTER_NONE,		archive_write_add_filter_none },
+	{ ARCHIVE_FILTER_GZIP,		archive_write_add_filter_gzip },
+	{ ARCHIVE_FILTER_BZIP2,		archive_write_add_filter_bzip2 },
+	{ ARCHIVE_FILTER_COMPRESS,	archive_write_add_filter_compress },
+	{ ARCHIVE_FILTER_LZMA,		archive_write_add_filter_lzma },
+	{ ARCHIVE_FILTER_XZ,		archive_write_add_filter_xz },
+	{ ARCHIVE_FILTER_LZIP,		archive_write_add_filter_lzip },
+	{ -1,			NULL }
+};
+
+int
+archive_write_add_filter(struct archive *a, int code)
+{
+	int i;
+
+	for (i =3D 0; codes[i].code !=3D -1; i++) {
+		if (code =3D=3D codes[i].code)
+			return ((codes[i].setter)(a));
+	}
+
+	archive_set_error(a, EINVAL, "No such filter");
+	return (ARCHIVE_FATAL);
+}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_write_add_filter_bzip2.c
--- a/head/contrib/libarchive/libarchive/archive_write_add_filter_bzip2.c	M=
on Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_write_add_filter_bzip2.c	F=
ri Aug 10 14:19:25 2012 +0300
@@ -133,10 +133,18 @@
 	if (ret !=3D 0)
 		return (ret);
=20
-	/* TODO: Find a better way to size this.  (Maybe look at the */
-	/* block size expected by the following filter?) */
 	if (data->compressed =3D=3D NULL) {
-		data->compressed_buffer_size =3D 65536;
+		size_t bs =3D 65536, bpb;
+		if (f->archive->magic =3D=3D ARCHIVE_WRITE_MAGIC) {
+			/* Buffer size should be a multiple number of the of bytes
+			 * per block for performance. */
+			bpb =3D archive_write_get_bytes_per_block(f->archive);
+			if (bpb > bs)
+				bs =3D bpb;
+			else if (bpb !=3D 0)
+				bs -=3D bs % bpb;
+		}
+		data->compressed_buffer_size =3D bs;
 		data->compressed
 		    =3D (char *)malloc(data->compressed_buffer_size);
 		if (data->compressed =3D=3D NULL) {
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_write_add_filter_compress.c
--- a/head/contrib/libarchive/libarchive/archive_write_add_filter_compress.=
c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_write_add_filter_compress.=
c	Fri Aug 10 14:19:25 2012 +0300
@@ -148,6 +148,7 @@
 {
 	int ret;
 	struct private_data *state;
+	size_t bs =3D 65536, bpb;
=20
 	f->code =3D ARCHIVE_COMPRESSION_COMPRESS;
 	f->name =3D "compress";
@@ -163,7 +164,16 @@
 		return (ARCHIVE_FATAL);
 	}
=20
-	state->compressed_buffer_size =3D 65536;
+	if (f->archive->magic =3D=3D ARCHIVE_WRITE_MAGIC) {
+		/* Buffer size should be a multiple number of the of bytes
+		 * per block for performance. */
+		bpb =3D archive_write_get_bytes_per_block(f->archive);
+		if (bpb > bs)
+			bs =3D bpb;
+		else if (bpb !=3D 0)
+			bs -=3D bs % bpb;
+	}
+	state->compressed_buffer_size =3D bs;
 	state->compressed =3D malloc(state->compressed_buffer_size);
=20
 	if (state->compressed =3D=3D NULL) {
@@ -386,12 +396,12 @@
=20
 		state->checkpoint =3D state->in_count + CHECK_GAP;
=20
-		if (state->in_count <=3D 0x007fffff)
-			ratio =3D state->in_count * 256 / state->out_count;
-		else if ((ratio =3D state->out_count / 256) =3D=3D 0)
+		if (state->in_count <=3D 0x007fffff && state->out_count !=3D 0)
+			ratio =3D (int)(state->in_count * 256 / state->out_count);
+		else if ((ratio =3D (int)(state->out_count / 256)) =3D=3D 0)
 			ratio =3D 0x7fffffff;
 		else
-			ratio =3D state->in_count / ratio;
+			ratio =3D (int)(state->in_count / ratio);
=20
 		if (ratio > state->compress_ratio)
 			state->compress_ratio =3D ratio;
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_write_add_filter_gzip.c
--- a/head/contrib/libarchive/libarchive/archive_write_add_filter_gzip.c	Mo=
n Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_write_add_filter_gzip.c	Fr=
i Aug 10 14:19:25 2012 +0300
@@ -135,7 +135,17 @@
 		return (ret);
=20
 	if (data->compressed =3D=3D NULL) {
-		data->compressed_buffer_size =3D 65536;
+		size_t bs =3D 65536, bpb;
+		if (f->archive->magic =3D=3D ARCHIVE_WRITE_MAGIC) {
+			/* Buffer size should be a multiple number of the of bytes
+			 * per block for performance. */
+			bpb =3D archive_write_get_bytes_per_block(f->archive);
+			if (bpb > bs)
+				bs =3D bpb;
+			else if (bpb !=3D 0)
+				bs -=3D bs % bpb;
+		}
+		data->compressed_buffer_size =3D bs;
 		data->compressed
 		    =3D (unsigned char *)malloc(data->compressed_buffer_size);
 		if (data->compressed =3D=3D NULL) {
@@ -155,10 +165,10 @@
 	data->compressed[1] =3D 0x8b;
 	data->compressed[2] =3D 0x08; /* "Deflate" compression */
 	data->compressed[3] =3D 0; /* No options */
-	data->compressed[4] =3D (t)&0xff;  /* Timestamp */
-	data->compressed[5] =3D (t>>8)&0xff;
-	data->compressed[6] =3D (t>>16)&0xff;
-	data->compressed[7] =3D (t>>24)&0xff;
+	data->compressed[4] =3D (uint8_t)(t)&0xff;  /* Timestamp */
+	data->compressed[5] =3D (uint8_t)(t>>8)&0xff;
+	data->compressed[6] =3D (uint8_t)(t>>16)&0xff;
+	data->compressed[7] =3D (uint8_t)(t>>24)&0xff;
 	data->compressed[8] =3D 0; /* No deflate options */
 	data->compressed[9] =3D 3; /* OS=3DUnix */
 	data->stream.next_out +=3D 10;
@@ -270,14 +280,14 @@
 	}
 	if (ret =3D=3D ARCHIVE_OK) {
 		/* Build and write out 8-byte trailer. */
-		trailer[0] =3D (data->crc)&0xff;
-		trailer[1] =3D (data->crc >> 8)&0xff;
-		trailer[2] =3D (data->crc >> 16)&0xff;
-		trailer[3] =3D (data->crc >> 24)&0xff;
-		trailer[4] =3D (data->total_in)&0xff;
-		trailer[5] =3D (data->total_in >> 8)&0xff;
-		trailer[6] =3D (data->total_in >> 16)&0xff;
-		trailer[7] =3D (data->total_in >> 24)&0xff;
+		trailer[0] =3D (uint8_t)(data->crc)&0xff;
+		trailer[1] =3D (uint8_t)(data->crc >> 8)&0xff;
+		trailer[2] =3D (uint8_t)(data->crc >> 16)&0xff;
+		trailer[3] =3D (uint8_t)(data->crc >> 24)&0xff;
+		trailer[4] =3D (uint8_t)(data->total_in)&0xff;
+		trailer[5] =3D (uint8_t)(data->total_in >> 8)&0xff;
+		trailer[6] =3D (uint8_t)(data->total_in >> 16)&0xff;
+		trailer[7] =3D (uint8_t)(data->total_in >> 24)&0xff;
 		ret =3D __archive_write_filter(f->next_filter, trailer, 8);
 	}
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_write_add_filter_program.c
--- a/head/contrib/libarchive/libarchive/archive_write_add_filter_program.c=
	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_write_add_filter_program.c=
	Fri Aug 10 14:19:25 2012 +0300
@@ -171,60 +171,62 @@
 	if (buf_len =3D=3D 0)
 		return (-1);
=20
-restart_write:
-	do {
-		ret =3D write(data->child_stdin, buf, buf_len);
-	} while (ret =3D=3D -1 && errno =3D=3D EINTR);
+	for (;;) {
+		do {
+			ret =3D write(data->child_stdin, buf, buf_len);
+		} while (ret =3D=3D -1 && errno =3D=3D EINTR);
=20
-	if (ret > 0)
-		return (ret);
-	if (ret =3D=3D 0) {
-		close(data->child_stdin);
-		data->child_stdin =3D -1;
-		fcntl(data->child_stdout, F_SETFL, 0);
-		return (0);
+		if (ret > 0)
+			return (ret);
+		if (ret =3D=3D 0) {
+			close(data->child_stdin);
+			data->child_stdin =3D -1;
+			fcntl(data->child_stdout, F_SETFL, 0);
+			return (0);
+		}
+		if (ret =3D=3D -1 && errno !=3D EAGAIN)
+			return (-1);
+
+		if (data->child_stdout =3D=3D -1) {
+			fcntl(data->child_stdin, F_SETFL, 0);
+			__archive_check_child(data->child_stdin,
+				data->child_stdout);
+			continue;
+		}
+
+		do {
+			ret =3D read(data->child_stdout,
+			    data->child_buf + data->child_buf_avail,
+			    data->child_buf_len - data->child_buf_avail);
+		} while (ret =3D=3D -1 && errno =3D=3D EINTR);
+
+		if (ret =3D=3D 0 || (ret =3D=3D -1 && errno =3D=3D EPIPE)) {
+			close(data->child_stdout);
+			data->child_stdout =3D -1;
+			fcntl(data->child_stdin, F_SETFL, 0);
+			continue;
+		}
+		if (ret =3D=3D -1 && errno =3D=3D EAGAIN) {
+			__archive_check_child(data->child_stdin,
+				data->child_stdout);
+			continue;
+		}
+		if (ret =3D=3D -1)
+			return (-1);
+
+		data->child_buf_avail +=3D ret;
+
+		ret =3D __archive_write_filter(f->next_filter,
+		    data->child_buf, data->child_buf_avail);
+		if (ret <=3D 0)
+			return (-1);
+
+		if ((size_t)ret < data->child_buf_avail) {
+			memmove(data->child_buf, data->child_buf + ret,
+			    data->child_buf_avail - ret);
+		}
+		data->child_buf_avail -=3D ret;
 	}
-	if (ret =3D=3D -1 && errno !=3D EAGAIN)
-		return (-1);
-
-	if (data->child_stdout =3D=3D -1) {
-		fcntl(data->child_stdin, F_SETFL, 0);
-		__archive_check_child(data->child_stdin, data->child_stdout);
-		goto restart_write;
-	}
-
-	do {
-		ret =3D read(data->child_stdout,
-		    data->child_buf + data->child_buf_avail,
-		    data->child_buf_len - data->child_buf_avail);
-	} while (ret =3D=3D -1 && errno =3D=3D EINTR);
-
-	if (ret =3D=3D 0 || (ret =3D=3D -1 && errno =3D=3D EPIPE)) {
-		close(data->child_stdout);
-		data->child_stdout =3D -1;
-		fcntl(data->child_stdin, F_SETFL, 0);
-		goto restart_write;
-	}
-	if (ret =3D=3D -1 && errno =3D=3D EAGAIN) {
-		__archive_check_child(data->child_stdin, data->child_stdout);
-		goto restart_write;
-	}
-	if (ret =3D=3D -1)
-		return (-1);
-
-	data->child_buf_avail +=3D ret;
-
-	ret =3D __archive_write_filter(f->next_filter,
-	    data->child_buf, data->child_buf_avail);
-	if (ret <=3D 0)
-		return (-1);
-
-	if ((size_t)ret < data->child_buf_avail) {
-		memmove(data->child_buf, data->child_buf + ret,
-		    data->child_buf_avail - ret);
-	}
-	data->child_buf_avail -=3D ret;
-	goto restart_write;
 }
=20
 /*
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_write_add_filter_xz.c
--- a/head/contrib/libarchive/libarchive/archive_write_add_filter_xz.c	Mon =
Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_write_add_filter_xz.c	Fri =
Aug 10 14:19:25 2012 +0300
@@ -298,7 +298,17 @@
 		return (ret);
=20
 	if (data->compressed =3D=3D NULL) {
-		data->compressed_buffer_size =3D 65536;
+		size_t bs =3D 65536, bpb;
+		if (f->archive->magic =3D=3D ARCHIVE_WRITE_MAGIC) {
+			/* Buffer size should be a multiple number of the of bytes
+			 * per block for performance. */
+			bpb =3D archive_write_get_bytes_per_block(f->archive);
+			if (bpb > bs)
+				bs =3D bpb;
+			else if (bpb !=3D 0)
+				bs -=3D bs % bpb;
+		}
+		data->compressed_buffer_size =3D bs;
 		data->compressed
 		    =3D (unsigned char *)malloc(data->compressed_buffer_size);
 		if (data->compressed =3D=3D NULL) {
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_write_blocksize.3
--- a/head/contrib/libarchive/libarchive/archive_write_blocksize.3	Mon Jul =
30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_write_blocksize.3	Fri Aug =
10 14:19:25 2012 +0300
@@ -24,7 +24,7 @@
 .\"
 .\" $FreeBSD$
 .\"
-.Dd March 23, 2011
+.Dd February 2, 2012
 .Dt ARCHIVE_WRITE_BLOCKSIZE 3
 .Os
 .Sh NAME
@@ -33,6 +33,8 @@
 .Nm archive_write_get_bytes_in_last_block ,
 .Nm archive_write_set_bytes_in_last_block
 .Nd functions for creating archives
+.Sh LIBRARY
+Streaming Archive Library (libarchive, -larchive)
 .Sh SYNOPSIS
 .In archive.h
 .Ft int
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_write_data.3
--- a/head/contrib/libarchive/libarchive/archive_write_data.3	Mon Jul 30 11=
:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_write_data.3	Fri Aug 10 14=
:19:25 2012 +0300
@@ -22,14 +22,16 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\" $FreeBSD: head/lib/libarchive/archive_write.3 201110 2009-12-28 03:31:=
29Z kientzle $
+.\" $FreeBSD$
 .\"
-.Dd March 23, 2011
-.Dt ARCHIVE_WRITE 3
+.Dd February 2, 2012
+.Dt ARCHIVE_WRITE_DATA 3
 .Os
 .Sh NAME
 .Nm archive_write_data
 .Nd functions for creating archives
+.Sh LIBRARY
+Streaming Archive Library (libarchive, -larchive)
 .Sh SYNOPSIS
 .In archive.h
 .Ft ssize_t
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_write_disk.3
--- a/head/contrib/libarchive/libarchive/archive_write_disk.3	Mon Jul 30 11=
:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_write_disk.3	Fri Aug 10 14=
:19:25 2012 +0300
@@ -22,9 +22,9 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\" $FreeBSD: head/contrib/libarchive/libarchive/archive_write_disk.3 2321=
53 2012-02-25 10:58:02Z mm $
+.\" $FreeBSD: head/contrib/libarchive/libarchive/archive_write_disk.3 2388=
56 2012-07-28 06:38:44Z mm $
 .\"
-.Dd August 5, 2008
+.Dd February 2, 2012
 .Dt ARCHIVE_WRITE_DISK 3
 .Os
 .Sh NAME
@@ -42,6 +42,8 @@
 .Nm archive_write_finish
 .Nm archive_write_free
 .Nd functions for creating objects on disk
+.Sh LIBRARY
+Streaming Archive Library (libarchive, -larchive)
 .Sh SYNOPSIS
 .In archive.h
 .Ft struct archive *
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_write_disk_acl.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/head/contrib/libarchive/libarchive/archive_write_disk_acl.c	Fri Aug 1=
0 14:19:25 2012 +0300
@@ -0,0 +1,249 @@
+/*-
+ * Copyright (c) 2003-2010 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
+ *    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(S) ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTI=
ES
+ * 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 US=
E,
+ * 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: head/lib/libarchive/archive_write_disk.c 201159 2009-1=
2-29 05:35:40Z kientzle $");
+
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_ACL_H
+#define _ACL_PRIVATE /* For debugging */
+#include <sys/acl.h>
+#endif
+#ifdef HAVE_ERRNO_H
+#include <errno.h>
+#endif
+
+#include "archive.h"
+#include "archive_entry.h"
+#include "archive_acl_private.h"
+#include "archive_write_disk_private.h"
+
+#ifndef HAVE_POSIX_ACL
+/* Default empty function body to satisfy mainline code. */
+int
+archive_write_disk_set_acls(struct archive *a, int fd, const char *name,
+	 struct archive_acl *abstract_acl)
+{
+	(void)a; /* UNUSED */
+	(void)fd; /* UNUSED */
+	(void)name; /* UNUSED */
+	(void)abstract_acl; /* UNUSED */
+	return (ARCHIVE_OK);
+}
+
+#else
+
+static int	set_acl(struct archive *, int fd, const char *,
+			struct archive_acl *,
+			acl_type_t, int archive_entry_acl_type, const char *tn);
+
+/*
+ * XXX TODO: What about ACL types other than ACCESS and DEFAULT?
+ */
+int
+archive_write_disk_set_acls(struct archive *a, int fd, const char *name,
+	 struct archive_acl *abstract_acl)
+{
+	int		 ret;
+
+	if (archive_acl_count(abstract_acl, ARCHIVE_ENTRY_ACL_TYPE_POSIX1E) > 0) {
+		ret =3D set_acl(a, fd, name, abstract_acl, ACL_TYPE_ACCESS,
+		    ARCHIVE_ENTRY_ACL_TYPE_ACCESS, "access");
+		if (ret !=3D ARCHIVE_OK)
+			return (ret);
+		ret =3D set_acl(a, fd, name, abstract_acl, ACL_TYPE_DEFAULT,
+		    ARCHIVE_ENTRY_ACL_TYPE_DEFAULT, "default");
+		return (ret);
+	} else if (archive_acl_count(abstract_acl, ARCHIVE_ENTRY_ACL_TYPE_NFS4) >=
 0) {
+		ret =3D set_acl(a, fd, name, abstract_acl, ACL_TYPE_NFS4,
+		    ARCHIVE_ENTRY_ACL_TYPE_NFS4, "nfs4");
+		return (ret);
+	} else
+		return ARCHIVE_OK;
+}
+
+static struct {
+	int archive_perm;
+	int platform_perm;
+} acl_perm_map[] =3D {
+	{ARCHIVE_ENTRY_ACL_EXECUTE, ACL_EXECUTE},
+	{ARCHIVE_ENTRY_ACL_WRITE, ACL_WRITE},
+	{ARCHIVE_ENTRY_ACL_READ, ACL_READ},
+	{ARCHIVE_ENTRY_ACL_READ_DATA, ACL_READ_DATA},
+	{ARCHIVE_ENTRY_ACL_LIST_DIRECTORY, ACL_LIST_DIRECTORY},
+	{ARCHIVE_ENTRY_ACL_WRITE_DATA, ACL_WRITE_DATA},
+	{ARCHIVE_ENTRY_ACL_ADD_FILE, ACL_ADD_FILE},
+	{ARCHIVE_ENTRY_ACL_APPEND_DATA, ACL_APPEND_DATA},
+	{ARCHIVE_ENTRY_ACL_ADD_SUBDIRECTORY, ACL_ADD_SUBDIRECTORY},
+	{ARCHIVE_ENTRY_ACL_READ_NAMED_ATTRS, ACL_READ_NAMED_ATTRS},
+	{ARCHIVE_ENTRY_ACL_WRITE_NAMED_ATTRS, ACL_WRITE_NAMED_ATTRS},
+	{ARCHIVE_ENTRY_ACL_DELETE_CHILD, ACL_DELETE_CHILD},
+	{ARCHIVE_ENTRY_ACL_READ_ATTRIBUTES, ACL_READ_ATTRIBUTES},
+	{ARCHIVE_ENTRY_ACL_WRITE_ATTRIBUTES, ACL_WRITE_ATTRIBUTES},
+	{ARCHIVE_ENTRY_ACL_DELETE, ACL_DELETE},
+	{ARCHIVE_ENTRY_ACL_READ_ACL, ACL_READ_ACL},
+	{ARCHIVE_ENTRY_ACL_WRITE_ACL, ACL_WRITE_ACL},
+	{ARCHIVE_ENTRY_ACL_WRITE_OWNER, ACL_WRITE_OWNER},
+	{ARCHIVE_ENTRY_ACL_SYNCHRONIZE, ACL_SYNCHRONIZE}
+};
+
+static struct {
+	int archive_inherit;
+	int platform_inherit;
+} acl_inherit_map[] =3D {
+	{ARCHIVE_ENTRY_ACL_ENTRY_FILE_INHERIT, ACL_ENTRY_FILE_INHERIT},
+	{ARCHIVE_ENTRY_ACL_ENTRY_DIRECTORY_INHERIT, ACL_ENTRY_DIRECTORY_INHERIT},
+	{ARCHIVE_ENTRY_ACL_ENTRY_NO_PROPAGATE_INHERIT, ACL_ENTRY_NO_PROPAGATE_INH=
ERIT},
+	{ARCHIVE_ENTRY_ACL_ENTRY_INHERIT_ONLY, ACL_ENTRY_INHERIT_ONLY}
+};
+
+static int
+set_acl(struct archive *a, int fd, const char *name,
+    struct archive_acl *abstract_acl,
+    acl_type_t acl_type, int ae_requested_type, const char *tname)
+{
+	acl_t		 acl;
+	acl_entry_t	 acl_entry;
+	acl_permset_t	 acl_permset;
+	acl_flagset_t	 acl_flagset;
+	int		 ret;
+	int		 ae_type, ae_permset, ae_tag, ae_id;
+	uid_t		 ae_uid;
+	gid_t		 ae_gid;
+	const char	*ae_name;
+	int		 entries;
+	int		 i;
+
+	ret =3D ARCHIVE_OK;
+	entries =3D archive_acl_reset(abstract_acl, ae_requested_type);
+	if (entries =3D=3D 0)
+		return (ARCHIVE_OK);
+	acl =3D acl_init(entries);
+	while (archive_acl_next(a, abstract_acl, ae_requested_type, &ae_type,
+		   &ae_permset, &ae_tag, &ae_id, &ae_name) =3D=3D ARCHIVE_OK) {
+		acl_create_entry(&acl, &acl_entry);
+
+		switch (ae_tag) {
+		case ARCHIVE_ENTRY_ACL_USER:
+			acl_set_tag_type(acl_entry, ACL_USER);
+			ae_uid =3D archive_write_disk_uid(a, ae_name, ae_id);
+			acl_set_qualifier(acl_entry, &ae_uid);
+			break;
+		case ARCHIVE_ENTRY_ACL_GROUP:
+			acl_set_tag_type(acl_entry, ACL_GROUP);
+			ae_gid =3D archive_write_disk_gid(a, ae_name, ae_id);
+			acl_set_qualifier(acl_entry, &ae_gid);
+			break;
+		case ARCHIVE_ENTRY_ACL_USER_OBJ:
+			acl_set_tag_type(acl_entry, ACL_USER_OBJ);
+			break;
+		case ARCHIVE_ENTRY_ACL_GROUP_OBJ:
+			acl_set_tag_type(acl_entry, ACL_GROUP_OBJ);
+			break;
+		case ARCHIVE_ENTRY_ACL_MASK:
+			acl_set_tag_type(acl_entry, ACL_MASK);
+			break;
+		case ARCHIVE_ENTRY_ACL_OTHER:
+			acl_set_tag_type(acl_entry, ACL_OTHER);
+			break;
+		case ARCHIVE_ENTRY_ACL_EVERYONE:
+			acl_set_tag_type(acl_entry, ACL_EVERYONE);
+			break;
+		default:
+			/* XXX */
+			break;
+		}
+
+		switch (ae_type) {
+		case ARCHIVE_ENTRY_ACL_TYPE_ALLOW:
+			acl_set_entry_type_np(acl_entry, ACL_ENTRY_TYPE_ALLOW);
+			break;
+		case ARCHIVE_ENTRY_ACL_TYPE_DENY:
+			acl_set_entry_type_np(acl_entry, ACL_ENTRY_TYPE_DENY);
+			break;
+		case ARCHIVE_ENTRY_ACL_TYPE_AUDIT:
+			acl_set_entry_type_np(acl_entry, ACL_ENTRY_TYPE_AUDIT);
+			break;
+		case ARCHIVE_ENTRY_ACL_TYPE_ALARM:
+			acl_set_entry_type_np(acl_entry, ACL_ENTRY_TYPE_ALARM);
+			break;
+		case ARCHIVE_ENTRY_ACL_TYPE_ACCESS:
+		case ARCHIVE_ENTRY_ACL_TYPE_DEFAULT:
+			// These don't translate directly into the system ACL.
+			break;
+		default:
+			// XXX error handling here.
+			break;
+		}
+
+		acl_get_permset(acl_entry, &acl_permset);
+		acl_clear_perms(acl_permset);
+
+		for (i =3D 0; i < (int)(sizeof(acl_perm_map) / sizeof(acl_perm_map[0]));=
 ++i) {
+			if (ae_permset & acl_perm_map[i].archive_perm)
+				acl_add_perm(acl_permset,
+					     acl_perm_map[i].platform_perm);
+		}
+
+		acl_get_flagset_np(acl_entry, &acl_flagset);
+		acl_clear_flags_np(acl_flagset);
+		for (i =3D 0; i < (int)(sizeof(acl_inherit_map) / sizeof(acl_inherit_map=
[0])); ++i) {
+			if (ae_permset & acl_inherit_map[i].archive_inherit)
+				acl_add_flag_np(acl_flagset,
+						acl_inherit_map[i].platform_inherit);
+		}
+	}
+
+	/* Try restoring the ACL through 'fd' if we can. */
+#if HAVE_ACL_SET_FD
+	if (fd >=3D 0 && acl_type =3D=3D ACL_TYPE_ACCESS && acl_set_fd(fd, acl) =
=3D=3D 0)
+		ret =3D ARCHIVE_OK;
+	else
+#else
+#if HAVE_ACL_SET_FD_NP
+	if (fd >=3D 0 && acl_set_fd_np(fd, acl, acl_type) =3D=3D 0)
+		ret =3D ARCHIVE_OK;
+	else
+#endif
+#endif
+#if HAVE_ACL_SET_LINK_NP
+	  if (acl_set_link_np(name, acl_type, acl) !=3D 0) {
+		archive_set_error(a, errno, "Failed to set %s acl", tname);
+		ret =3D ARCHIVE_WARN;
+	  }
+#else
+	/* TODO: Skip this if 'name' is a symlink. */
+	if (acl_set_file(name, acl_type, acl) !=3D 0) {
+		archive_set_error(a, errno, "Failed to set %s acl", tname);
+		ret =3D ARCHIVE_WARN;
+	}
+#endif
+	acl_free(acl);
+	return (ret);
+}
+#endif
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_write_disk_posix.c
--- a/head/contrib/libarchive/libarchive/archive_write_disk_posix.c	Mon Jul=
 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_write_disk_posix.c	Fri Aug=
 10 14:19:25 2012 +0300
@@ -32,9 +32,6 @@
 #ifdef HAVE_SYS_TYPES_H
 #include <sys/types.h>
 #endif
-#ifdef HAVE_SYS_ACL_H
-#include <sys/acl.h>
-#endif
 #ifdef HAVE_SYS_EXTATTR_H
 #include <sys/extattr.h>
 #endif
@@ -129,6 +126,7 @@
 #include "archive_string.h"
 #include "archive_entry.h"
 #include "archive_private.h"
+#include "archive_write_disk_private.h"
=20
 #ifndef O_BINARY
 #define O_BINARY 0
@@ -188,8 +186,8 @@
 	struct fixup_entry	*current_fixup;
 	int64_t			 user_uid;
 	int			 skip_file_set;
-	dev_t			 skip_file_dev;
-	ino_t			 skip_file_ino;
+	int64_t			 skip_file_dev;
+	int64_t			 skip_file_ino;
 	time_t			 start_time;
=20
 	int64_t (*lookup_gid)(void *private, const char *gname, int64_t gid);
@@ -267,11 +265,6 @@
 static int	create_parent_dir(struct archive_write_disk *, char *);
 static int	older(struct stat *, struct archive_entry *);
 static int	restore_entry(struct archive_write_disk *);
-#ifdef HAVE_POSIX_ACL
-static int	set_acl(struct archive_write_disk *, int fd, const char *, stru=
ct archive_acl *,
-		    acl_type_t, int archive_entry_acl_type, const char *tn);
-#endif
-static int	set_acls(struct archive_write_disk *, int fd, const char *, str=
uct archive_acl *);
 static int	set_mac_metadata(struct archive_write_disk *, const char *,
 				 const void *, size_t);
 static int	set_xattrs(struct archive_write_disk *);
@@ -570,6 +563,7 @@
=20
 	if (a->deferred & TODO_ACLS) {
 		fe =3D current_fixup(a, archive_entry_pathname(entry));
+		fe->fixup |=3D TODO_ACLS;
 		archive_acl_copy(&fe->acl, archive_entry_acl(entry));
 	}
=20
@@ -878,7 +872,7 @@
 	 * ACLs that prevent attribute changes (including time).
 	 */
 	if (a->todo & TODO_ACLS) {
-		int r2 =3D set_acls(a, a->fd,
+		int r2 =3D archive_write_disk_set_acls(&a->archive, a->fd,
 				  archive_entry_pathname(a->entry),
 				  archive_entry_acl(a->entry));
 		if (r2 < ret) ret =3D r2;
@@ -950,12 +944,12 @@
 int64_t
 archive_write_disk_uid(struct archive *_a, const char *name, int64_t id)
 {
-       struct archive_write_disk *a =3D (struct archive_write_disk *)_a;
-       archive_check_magic(&a->archive, ARCHIVE_WRITE_DISK_MAGIC,
-           ARCHIVE_STATE_ANY, "archive_write_disk_uid");
-       if (a->lookup_uid)
-               return (a->lookup_uid)(a->lookup_uid_data, name, id);
-       return (id);
+	struct archive_write_disk *a =3D (struct archive_write_disk *)_a;
+	archive_check_magic(&a->archive, ARCHIVE_WRITE_DISK_MAGIC,
+	    ARCHIVE_STATE_ANY, "archive_write_disk_uid");
+	if (a->lookup_uid)
+		return (a->lookup_uid)(a->lookup_uid_data, name, id);
+	return (id);
 }
=20
 /*
@@ -1143,9 +1137,10 @@
=20
 		/* If it's our archive, we're done. */
 		if (a->skip_file_set &&
-		    a->st.st_dev =3D=3D a->skip_file_dev &&
-		    a->st.st_ino =3D=3D a->skip_file_ino) {
-			archive_set_error(&a->archive, 0, "Refusing to overwrite archive");
+		    a->st.st_dev =3D=3D (dev_t)a->skip_file_dev &&
+		    a->st.st_ino =3D=3D (ino_t)a->skip_file_ino) {
+			archive_set_error(&a->archive, 0,
+			    "Refusing to overwrite archive");
 			return (ARCHIVE_FAILED);
 		}
=20
@@ -1163,7 +1158,7 @@
 			/* A dir is in the way of a non-dir, rmdir it. */
 			if (rmdir(a->name) !=3D 0) {
 				archive_set_error(&a->archive, errno,
-				    "Can't remove already-existing dir");
+				    "Can't replace existing directory with non-directory");
 				return (ARCHIVE_FAILED);
 			}
 			/* Try again. */
@@ -1380,7 +1375,8 @@
 		if (p->fixup & TODO_MODE_BASE)
 			chmod(p->name, p->mode);
 		if (p->fixup & TODO_ACLS)
-			set_acls(a, -1, p->name, &p->acl);
+			archive_write_disk_set_acls(&a->archive,
+						    -1, p->name, &p->acl);
 		if (p->fixup & TODO_FFLAGS)
 			set_fflags_platform(a, -1, p->name,
 			    p->mode, p->fflags_set, 0);
@@ -2529,7 +2525,7 @@
 	}
 	written =3D write(fd, metadata, metadata_size);
 	close(fd);
-	if (written !=3D metadata_size
+	if ((size_t)written !=3D metadata_size
 	    || copyfile(tmp.s, pathname, 0,
 			COPYFILE_UNPACK | COPYFILE_NOFOLLOW
 			| COPYFILE_ACL | COPYFILE_XATTR)) {
@@ -2542,125 +2538,6 @@
 }
 #endif
=20
-#ifndef HAVE_POSIX_ACL
-/* Default empty function body to satisfy mainline code. */
-static int
-set_acls(struct archive_write_disk *a, int fd, const char *name,
-	 struct archive_acl *aacl)
-{
-	(void)a; /* UNUSED */
-	(void)fd; /* UNUSED */
-	(void)name; /* UNUSED */
-	(void)aacl; /* UNUSED */
-	return (ARCHIVE_OK);
-}
-
-#else
-
-/*
- * XXX TODO: What about ACL types other than ACCESS and DEFAULT?
- */
-static int
-set_acls(struct archive_write_disk *a, int fd, const char *name,
-	 struct archive_acl *abstract_acl)
-{
-	int		 ret;
-
-	ret =3D set_acl(a, fd, name, abstract_acl, ACL_TYPE_ACCESS,
-	    ARCHIVE_ENTRY_ACL_TYPE_ACCESS, "access");
-	if (ret !=3D ARCHIVE_OK)
-		return (ret);
-	ret =3D set_acl(a, fd, name, abstract_acl, ACL_TYPE_DEFAULT,
-	    ARCHIVE_ENTRY_ACL_TYPE_DEFAULT, "default");
-	return (ret);
-}
-
-
-static int
-set_acl(struct archive_write_disk *a, int fd, const char *name,
-    struct archive_acl *abstract_acl,
-    acl_type_t acl_type, int ae_requested_type, const char *tname)
-{
-	acl_t		 acl;
-	acl_entry_t	 acl_entry;
-	acl_permset_t	 acl_permset;
-	int		 ret;
-	int		 ae_type, ae_permset, ae_tag, ae_id;
-	uid_t		 ae_uid;
-	gid_t		 ae_gid;
-	const char	*ae_name;
-	int		 entries;
-
-	ret =3D ARCHIVE_OK;
-	entries =3D archive_acl_reset(abstract_acl, ae_requested_type);
-	if (entries =3D=3D 0)
-		return (ARCHIVE_OK);
-	acl =3D acl_init(entries);
-	while (archive_acl_next(&a->archive, abstract_acl,
-	    ae_requested_type, &ae_type, &ae_permset, &ae_tag, &ae_id,
-	    &ae_name) =3D=3D ARCHIVE_OK) {
-		acl_create_entry(&acl, &acl_entry);
-
-		switch (ae_tag) {
-		case ARCHIVE_ENTRY_ACL_USER:
-			acl_set_tag_type(acl_entry, ACL_USER);
-			ae_uid =3D archive_write_disk_uid(&a->archive,
-			    ae_name, ae_id);
-			acl_set_qualifier(acl_entry, &ae_uid);
-			break;
-		case ARCHIVE_ENTRY_ACL_GROUP:
-			acl_set_tag_type(acl_entry, ACL_GROUP);
-			ae_gid =3D archive_write_disk_gid(&a->archive,
-			    ae_name, ae_id);
-			acl_set_qualifier(acl_entry, &ae_gid);
-			break;
-		case ARCHIVE_ENTRY_ACL_USER_OBJ:
-			acl_set_tag_type(acl_entry, ACL_USER_OBJ);
-			break;
-		case ARCHIVE_ENTRY_ACL_GROUP_OBJ:
-			acl_set_tag_type(acl_entry, ACL_GROUP_OBJ);
-			break;
-		case ARCHIVE_ENTRY_ACL_MASK:
-			acl_set_tag_type(acl_entry, ACL_MASK);
-			break;
-		case ARCHIVE_ENTRY_ACL_OTHER:
-			acl_set_tag_type(acl_entry, ACL_OTHER);
-			break;
-		default:
-			/* XXX */
-			break;
-		}
-
-		acl_get_permset(acl_entry, &acl_permset);
-		acl_clear_perms(acl_permset);
-		if (ae_permset & ARCHIVE_ENTRY_ACL_EXECUTE)
-			acl_add_perm(acl_permset, ACL_EXECUTE);
-		if (ae_permset & ARCHIVE_ENTRY_ACL_WRITE)
-			acl_add_perm(acl_permset, ACL_WRITE);
-		if (ae_permset & ARCHIVE_ENTRY_ACL_READ)
-			acl_add_perm(acl_permset, ACL_READ);
-	}
-
-	/* Try restoring the ACL through 'fd' if we can. */
-#if HAVE_ACL_SET_FD
-	if (fd >=3D 0 && acl_type =3D=3D ACL_TYPE_ACCESS && acl_set_fd(fd, acl) =
=3D=3D 0)
-		ret =3D ARCHIVE_OK;
-	else
-#else
-#if HAVE_ACL_SET_FD_NP
-	if (fd >=3D 0 && acl_set_fd_np(fd, acl, acl_type) =3D=3D 0)
-		ret =3D ARCHIVE_OK;
-	else
-#endif
-#endif
-	if (acl_set_file(name, acl_type, acl) !=3D 0) {
-		archive_set_error(&a->archive, errno, "Failed to set %s acl", tname);
-		ret =3D ARCHIVE_WARN;
-	}
-	acl_free(acl);
-	return (ret);
-}
-#endif
=20
 #if HAVE_LSETXATTR || HAVE_LSETEA
 /*
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_write_disk_private.h
--- a/head/contrib/libarchive/libarchive/archive_write_disk_private.h	Mon J=
ul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_write_disk_private.h	Fri A=
ug 10 14:19:25 2012 +0300
@@ -23,7 +23,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.
  *
- * $FreeBSD: head/contrib/libarchive/libarchive/archive_write_disk_private=
.h 228763 2011-12-21 11:13:29Z mm $
+ * $FreeBSD: head/contrib/libarchive/libarchive/archive_write_disk_private=
.h 238909 2012-07-30 14:47:35Z mm $
  */
=20
 #ifndef __LIBARCHIVE_BUILD
@@ -33,6 +33,11 @@
 #ifndef ARCHIVE_WRITE_DISK_PRIVATE_H_INCLUDED
 #define ARCHIVE_WRITE_DISK_PRIVATE_H_INCLUDED
=20
+#include "archive_acl_private.h"
+
 struct archive_write_disk;
=20
+int
+archive_write_disk_set_acls(struct archive *, int /* fd */, const char * /=
* pathname */, struct archive_acl *);
+
 #endif
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_write_disk_set_standard_lookup.c
--- a/head/contrib/libarchive/libarchive/archive_write_disk_set_standard_lo=
okup.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_write_disk_set_standard_lo=
okup.c	Fri Aug 10 14:19:25 2012 +0300
@@ -24,7 +24,7 @@
  */
=20
 #include "archive_platform.h"
-__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/archive_write_disk_=
set_standard_lookup.c 232153 2012-02-25 10:58:02Z mm $");
+__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/archive_write_disk_=
set_standard_lookup.c 238856 2012-07-28 06:38:44Z mm $");
=20
 #ifdef HAVE_SYS_TYPES_H
 #include <sys/types.h>
@@ -122,6 +122,7 @@
 		char _buffer[128];
 		size_t bufsize =3D 128;
 		char *buffer =3D _buffer;
+		char *allocated =3D NULL;
 		struct group	grent, *result;
 		int r;
=20
@@ -133,16 +134,15 @@
 			if (r !=3D ERANGE)
 				break;
 			bufsize *=3D 2;
-			if (buffer !=3D _buffer)
-				free(buffer);
-			buffer =3D malloc(bufsize);
-			if (buffer =3D=3D NULL)
+			free(allocated);
+			allocated =3D malloc(bufsize);
+			if (allocated =3D=3D NULL)
 				break;
+			buffer =3D allocated;
 		}
 		if (result !=3D NULL)
 			gid =3D result->gr_gid;
-		if (buffer !=3D _buffer)
-			free(buffer);
+		free(allocated);
 	}
 #  else /* HAVE_GETGRNAM_R */
 	{
@@ -158,7 +158,7 @@
 #else
 	#error No way to perform gid lookups on this platform
 #endif
-	b->id =3D gid;
+	b->id =3D (gid_t)gid;
=20
 	return (gid);
 }
@@ -192,6 +192,7 @@
 		char _buffer[128];
 		size_t bufsize =3D 128;
 		char *buffer =3D _buffer;
+		char *allocated =3D NULL;
 		struct passwd	pwent, *result;
 		int r;
=20
@@ -203,16 +204,15 @@
 			if (r !=3D ERANGE)
 				break;
 			bufsize *=3D 2;
-			if (buffer !=3D _buffer)
-				free(buffer);
-			buffer =3D malloc(bufsize);
-			if (buffer =3D=3D NULL)
+			free(allocated);
+			allocated =3D malloc(bufsize);
+			if (allocated =3D=3D NULL)
 				break;
+			buffer =3D allocated;
 		}
 		if (result !=3D NULL)
 			uid =3D result->pw_uid;
-		if (buffer !=3D _buffer)
-			free(buffer);
+		free(allocated);
 	}
 #  else /* HAVE_GETPWNAM_R */
 	{
@@ -228,7 +228,7 @@
 #else
 	#error No way to look up uids on this platform
 #endif
-	b->id =3D uid;
+	b->id =3D (uid_t)uid;
=20
 	return (uid);
 }
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_write_filter.3
--- a/head/contrib/libarchive/libarchive/archive_write_filter.3	Mon Jul 30 =
11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_write_filter.3	Fri Aug 10 =
14:19:25 2012 +0300
@@ -24,7 +24,7 @@
 .\"
 .\" $FreeBSD$
 .\"
-.Dd March 23, 2011
+.Dd February 2, 2012
 .Dt ARCHIVE_WRITE_FILTER 3
 .Os
 .Sh NAME
@@ -36,6 +36,8 @@
 .Nm archive_write_add_filter_none ,
 .Nm archive_write_add_filter_program ,
 .Nm archive_write_add_filter_xz
+.Sh LIBRARY
+Streaming Archive Library (libarchive, -larchive)
 .Sh SYNOPSIS
 .In archive.h
 .Ft int
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_write_finish_entry.3
--- a/head/contrib/libarchive/libarchive/archive_write_finish_entry.3	Mon J=
ul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_write_finish_entry.3	Fri A=
ug 10 14:19:25 2012 +0300
@@ -22,14 +22,16 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\" $FreeBSD: head/lib/libarchive/archive_write.3 201110 2009-12-28 03:31:=
29Z kientzle $
+.\" $FreeBSD$
 .\"
-.Dd March 23, 2011
+.Dd February 2, 2012
 .Dt ARCHIVE_WRITE_FINISH_ENTRY 3
 .Os
 .Sh NAME
 .Nm archive_write_finish_entry
 .Nd functions for creating archives
+.Sh LIBRARY
+Streaming Archive Library (libarchive, -larchive)
 .Sh SYNOPSIS
 .In archive.h
 .Ft int
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_write_format.3
--- a/head/contrib/libarchive/libarchive/archive_write_format.3	Mon Jul 30 =
11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_write_format.3	Fri Aug 10 =
14:19:25 2012 +0300
@@ -24,7 +24,7 @@
 .\"
 .\" $FreeBSD$
 .\"
-.Dd March 23, 2011
+.Dd February 2, 2012
 .Dt ARCHIVE_WRITE_FORMAT 3
 .Os
 .Sh NAME
@@ -35,6 +35,8 @@
 .Nm archive_write_set_format_shar_dump ,
 .Nm archive_write_set_format_ustar
 .Nd functions for creating archives
+.Sh LIBRARY
+Streaming Archive Library (libarchive, -larchive)
 .Sh SYNOPSIS
 .In archive.h
 .Ft int
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_write_free.3
--- a/head/contrib/libarchive/libarchive/archive_write_free.3	Mon Jul 30 11=
:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_write_free.3	Fri Aug 10 14=
:19:25 2012 +0300
@@ -24,7 +24,7 @@
 .\"
 .\" $FreeBSD$
 .\"
-.Dd March 23, 2011
+.Dd February 2, 2012
 .Dt ARCHIVE_WRITE_FREE 3
 .Os
 .Sh NAME
@@ -32,6 +32,8 @@
 .Nm archive_write_finish ,
 .Nm archive_write_free
 .Nd functions for creating archives
+.Sh LIBRARY
+Streaming Archive Library (libarchive, -larchive)
 .Sh SYNOPSIS
 .In archive.h
 .Ft int
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_write_header.3
--- a/head/contrib/libarchive/libarchive/archive_write_header.3	Mon Jul 30 =
11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_write_header.3	Fri Aug 10 =
14:19:25 2012 +0300
@@ -24,12 +24,14 @@
 .\"
 .\" $FreeBSD$
 .\"
-.Dd March 23, 2011
+.Dd February 2, 2012
 .Dt ARCHIVE_WRITE_HEADER 3
 .Os
 .Sh NAME
 .Nm archive_write_header
 .Nd functions for creating archives
+.Sh LIBRARY
+Streaming Archive Library (libarchive, -larchive)
 .Sh SYNOPSIS
 .In archive.h
 .Ft int
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_write_new.3
--- a/head/contrib/libarchive/libarchive/archive_write_new.3	Mon Jul 30 11:=
44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_write_new.3	Fri Aug 10 14:=
19:25 2012 +0300
@@ -24,12 +24,14 @@
 .\"
 .\" $FreeBSD$
 .\"
-.Dd March 23, 2011
+.Dd February 2, 2012
 .Dt ARCHIVE_WRITE_NEW 3
 .Os
 .Sh NAME
 .Nm archive_write_new
 .Nd functions for creating archives
+.Sh LIBRARY
+Streaming Archive Library (libarchive, -larchive)
 .Sh SYNOPSIS
 .In archive.h
 .Ft struct archive *
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_write_open.3
--- a/head/contrib/libarchive/libarchive/archive_write_open.3	Mon Jul 30 11=
:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_write_open.3	Fri Aug 10 14=
:19:25 2012 +0300
@@ -22,10 +22,10 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\" $FreeBSD: head/lib/libarchive/archive_write.3 201110 2009-12-28 03:31:=
29Z kientzle $
+.\" $FreeBSD$
 .\"
-.Dd March 23, 2011
-.Dt ARCHIVE_WRITE 3
+.Dd February 2, 2012
+.Dt ARCHIVE_WRITE_OPEN 3
 .Os
 .Sh NAME
 .Nm archive_write_open ,
@@ -34,6 +34,8 @@
 .Nm archive_write_open_filename ,
 .Nm archive_write_open_memory
 .Nd functions for creating archives
+.Sh LIBRARY
+Streaming Archive Library (libarchive, -larchive)
 .Sh SYNOPSIS
 .In archive.h
 .Ft int
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_write_open_filename.c
--- a/head/contrib/libarchive/libarchive/archive_write_open_filename.c	Mon =
Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_write_open_filename.c	Fri =
Aug 10 14:19:25 2012 +0300
@@ -24,7 +24,7 @@
  */
=20
 #include "archive_platform.h"
-__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/archive_write_open_=
filename.c 232153 2012-02-25 10:58:02Z mm $");
+__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/archive_write_open_=
filename.c 238856 2012-07-28 06:38:44Z mm $");
=20
 #ifdef HAVE_SYS_STAT_H
 #include <sys/stat.h>
@@ -54,16 +54,13 @@
=20
 struct write_file_data {
 	int		fd;
-	char		mbs_filename;
-	union {
-		char		m[1];
-		wchar_t		w[1];
-	} filename; /* Must be last! */
+	struct archive_mstring filename;
 };
=20
 static int	file_close(struct archive *, void *);
 static int	file_open(struct archive *, void *);
 static ssize_t	file_write(struct archive *, void *, const void *buff, size=
_t);
+static int	open_filename(struct archive *, int, const void *);
=20
 int
 archive_write_open_file(struct archive *a, const char *filename)
@@ -74,76 +71,69 @@
 int
 archive_write_open_filename(struct archive *a, const char *filename)
 {
-	struct write_file_data *mine;
=20
 	if (filename =3D=3D NULL || filename[0] =3D=3D '\0')
 		return (archive_write_open_fd(a, 1));
=20
-	mine =3D (struct write_file_data *)malloc(sizeof(*mine) + strlen(filename=
));
-	if (mine =3D=3D NULL) {
-		archive_set_error(a, ENOMEM, "No memory");
-		return (ARCHIVE_FATAL);
-	}
-	strcpy(mine->filename.m, filename);
-	mine->mbs_filename =3D 1;
-	mine->fd =3D -1;
-	return (archive_write_open(a, mine,
-		file_open, file_write, file_close));
+	return (open_filename(a, 1, filename));
 }
=20
 int
 archive_write_open_filename_w(struct archive *a, const wchar_t *filename)
 {
-#if defined(_WIN32) && !defined(__CYGWIN__)
-	struct write_file_data *mine;
=20
 	if (filename =3D=3D NULL || filename[0] =3D=3D L'\0')
 		return (archive_write_open_fd(a, 1));
=20
-	mine =3D malloc(sizeof(*mine) + wcslen(filename) * sizeof(wchar_t));
+	return (open_filename(a, 0, filename));
+}
+
+static int
+open_filename(struct archive *a, int mbs_fn, const void *filename)
+{
+	struct write_file_data *mine;
+	int r;
+
+	mine =3D (struct write_file_data *)calloc(1, sizeof(*mine));
 	if (mine =3D=3D NULL) {
 		archive_set_error(a, ENOMEM, "No memory");
 		return (ARCHIVE_FATAL);
 	}
-	wcscpy(mine->filename.w, filename);
-	mine->mbs_filename =3D 0;
+	if (mbs_fn)
+		r =3D archive_mstring_copy_mbs(&mine->filename, filename);
+	else
+		r =3D archive_mstring_copy_wcs(&mine->filename, filename);
+	if (r < 0) {
+		if (errno =3D=3D ENOMEM) {
+			archive_set_error(a, ENOMEM, "No memory");
+			return (ARCHIVE_FATAL);
+		}
+		if (mbs_fn)
+			archive_set_error(a, ARCHIVE_ERRNO_MISC,
+			    "Can't convert '%s' to WCS",
+			    (const char *)filename);
+		else
+			archive_set_error(a, ARCHIVE_ERRNO_MISC,
+			    "Can't convert '%S' to MBS",
+			    (const wchar_t *)filename);
+		return (ARCHIVE_FAILED);
+	}
 	mine->fd =3D -1;
 	return (archive_write_open(a, mine,
 		file_open, file_write, file_close));
-#else
-	/*
-	 * POSIX system does not support a wchar_t interface for
-	 * open() system call, so we have to translate a wchar_t
-	 * filename to multi-byte one and use it.
-	 */
-	struct archive_string fn;
-	int r;
-
-	if (filename =3D=3D NULL || filename[0] =3D=3D L'\0')
-		return (archive_write_open_fd(a, 1));
-
-	archive_string_init(&fn);
-	if (archive_string_append_from_wcs(&fn, filename,
-	    wcslen(filename)) !=3D 0) {
-		archive_set_error(a, EINVAL,
-		    "Failed to convert a wide-character filename to"
-		    " a multi-byte filename");
-		archive_string_free(&fn);
-		return (ARCHIVE_FATAL);
-	}
-	r =3D archive_write_open_filename(a, fn.s);
-	archive_string_free(&fn);
-	return (r);
-#endif
 }
=20
-
 static int
 file_open(struct archive *a, void *client_data)
 {
 	int flags;
 	struct write_file_data *mine;
 	struct stat st;
+#if defined(_WIN32) && !defined(__CYGWIN__)
+	wchar_t *fullpath;
+#endif
+	const wchar_t *wcs;
+	const char *mbs;
=20
 	mine =3D (struct write_file_data *)client_data;
 	flags =3D O_WRONLY | O_CREAT | O_TRUNC | O_BINARY;
@@ -151,46 +141,51 @@
 	/*
 	 * Open the file.
 	 */
-	if (mine->mbs_filename) {
-		mine->fd =3D open(mine->filename.m, flags, 0666);
-		if (mine->fd < 0) {
-			archive_set_error(a, errno, "Failed to open '%s'",
-			    mine->filename.m);
-			return (ARCHIVE_FATAL);
+	mbs =3D NULL; wcs =3D NULL;
+#if defined(_WIN32) && !defined(__CYGWIN__)
+	if (archive_mstring_get_wcs(a, &mine->filename, &wcs) !=3D 0) {
+		if (errno =3D=3D ENOMEM)
+			archive_set_error(a, errno, "No memory");
+		else {
+			archive_mstring_get_mbs(a, &mine->filename, &mbs);
+			archive_set_error(a, errno,
+			    "Can't convert '%s' to WCS", mbs);
 		}
+		return (ARCHIVE_FATAL);
+	}
+	fullpath =3D __la_win_permissive_name_w(wcs);
+	if (fullpath !=3D NULL) {
+		mine->fd =3D _wopen(fullpath, flags, 0666);
+		free(fullpath);
+	} else
+		mine->fd =3D _wopen(wcs, flags, 0666);
+#else
+	if (archive_mstring_get_mbs(a, &mine->filename, &mbs) !=3D 0) {
+		if (errno =3D=3D ENOMEM)
+			archive_set_error(a, errno, "No memory");
+		else {
+			archive_mstring_get_wcs(a, &mine->filename, &wcs);
+			archive_set_error(a, errno,
+			    "Can't convert '%S' to MBS", wcs);
+		}
+		return (ARCHIVE_FATAL);
+	}
+	mine->fd =3D open(mbs, flags, 0666);
+#endif
+	if (mine->fd < 0) {
+		if (mbs !=3D NULL)
+			archive_set_error(a, errno, "Failed to open '%s'", mbs);
+		else
+			archive_set_error(a, errno, "Failed to open '%S'", wcs);
+		return (ARCHIVE_FATAL);
+	}
=20
-		if (fstat(mine->fd, &st) !=3D 0) {
-			archive_set_error(a, errno, "Couldn't stat '%s'",
-			    mine->filename.m);
-			return (ARCHIVE_FATAL);
-		}
-	} else {
-#if defined(_WIN32) && !defined(__CYGWIN__)
-		mine->fd =3D _wopen(mine->filename.w, flags, 0666);
-		if (mine->fd < 0 && errno =3D=3D ENOENT) {
-			wchar_t *fullpath;
-			fullpath =3D __la_win_permissive_name_w(mine->filename.w);
-			if (fullpath !=3D NULL) {
-				mine->fd =3D _wopen(fullpath, flags, 0666);
-				free(fullpath);
-			}
-		}
-		if (mine->fd < 0) {
-			archive_set_error(a, errno, "Failed to open '%S'",
-			    mine->filename.w);
-			return (ARCHIVE_FATAL);
-		}
-
-		if (fstat(mine->fd, &st) !=3D 0) {
-			archive_set_error(a, errno, "Couldn't stat '%S'",
-			    mine->filename.w);
-			return (ARCHIVE_FATAL);
-		}
-#else
-		archive_set_error(a, ARCHIVE_ERRNO_MISC,
-		    "Unexpedted operation in archive_write_open_filename");
+	if (fstat(mine->fd, &st) !=3D 0) {
+		if (mbs !=3D NULL)
+			archive_set_error(a, errno, "Couldn't stat '%s'", mbs);
+		else
+			archive_set_error(a, errno, "Couldn't stat '%S'", wcs);
 		return (ARCHIVE_FATAL);
-#endif
 	}
=20
 	/*
@@ -218,7 +213,8 @@
 }
=20
 static ssize_t
-file_write(struct archive *a, void *client_data, const void *buff, size_t =
length)
+file_write(struct archive *a, void *client_data, const void *buff,
+    size_t length)
 {
 	struct write_file_data	*mine;
 	ssize_t	bytesWritten;
@@ -243,6 +239,7 @@
=20
 	(void)a; /* UNUSED */
 	close(mine->fd);
+	archive_mstring_clean(&mine->filename);
 	free(mine);
 	return (ARCHIVE_OK);
 }
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_write_private.h
--- a/head/contrib/libarchive/libarchive/archive_write_private.h	Mon Jul 30=
 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_write_private.h	Fri Aug 10=
 14:19:25 2012 +0300
@@ -22,7 +22,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.
  *
- * $FreeBSD: head/contrib/libarchive/libarchive/archive_write_private.h 23=
2153 2012-02-25 10:58:02Z mm $
+ * $FreeBSD: head/contrib/libarchive/libarchive/archive_write_private.h 23=
8856 2012-07-28 06:38:44Z mm $
  */
=20
 #ifndef __LIBARCHIVE_BUILD
@@ -72,7 +72,7 @@
=20
 	/* Dev/ino of the archive being written. */
 	int		  skip_file_set;
-	dev_t		  skip_file_dev;
+	int64_t		  skip_file_dev;
 	int64_t		  skip_file_ino;
=20
 	/* Utility:  Pointer to a block of nulls. */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_write_set_format_7zip.c
--- a/head/contrib/libarchive/libarchive/archive_write_set_format_7zip.c	Mo=
n Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_write_set_format_7zip.c	Fr=
i Aug 10 14:19:25 2012 +0300
@@ -199,7 +199,7 @@
 	/*
 	 * Compressed data buffer.
 	 */
-	unsigned char		 wbuff[1024 * 64];
+	unsigned char		 wbuff[512 * 20 * 6];
 	size_t			 wbuff_remaining;
=20
 	/*
@@ -498,7 +498,7 @@
 	if (archive_entry_filetype(entry) =3D=3D AE_IFLNK) {
 		ssize_t bytes;
 		const void *p =3D (const void *)archive_entry_symlink(entry);
-		bytes =3D compress_out(a, p, file->size, ARCHIVE_Z_RUN);
+		bytes =3D compress_out(a, p, (size_t)file->size, ARCHIVE_Z_RUN);
 		if (bytes < 0)
 			return ((int)bytes);
 		zip->entry_crc32 =3D crc32(zip->entry_crc32, p, bytes);
@@ -580,11 +580,11 @@
 	} while (zip->stream.avail_in);
 	if (run =3D=3D ARCHIVE_Z_FINISH) {
 		uint64_t bytes =3D sizeof(zip->wbuff) - zip->stream.avail_out;
-		if (write_to_temp(a, zip->wbuff, bytes) !=3D ARCHIVE_OK)
+		if (write_to_temp(a, zip->wbuff, (size_t)bytes) !=3D ARCHIVE_OK)
 			return (ARCHIVE_FATAL);
 		if ((zip->crc32flg & ENCODED_CRC32) && bytes)
 			zip->encoded_crc32 =3D crc32(zip->encoded_crc32,
-			    zip->wbuff, bytes);
+			    zip->wbuff, (unsigned)bytes);
 	}
=20
 	return (s);
@@ -599,7 +599,7 @@
 	zip =3D (struct _7zip *)a->format_data;
=20
 	if (s > zip->entry_bytes_remaining)
-		s =3D zip->entry_bytes_remaining;
+		s =3D (size_t)zip->entry_bytes_remaining;
 	if (s =3D=3D 0 || zip->cur_file =3D=3D NULL)
 		return (0);
 	bytes =3D compress_out(a, buff, s, ARCHIVE_Z_RUN);
@@ -622,7 +622,7 @@
 		return (ARCHIVE_OK);
=20
 	while (zip->entry_bytes_remaining > 0) {
-		s =3D zip->entry_bytes_remaining;
+		s =3D (size_t)zip->entry_bytes_remaining;
 		if (s > a->null_length)
 			s =3D a->null_length;
 		r =3D _7z_write_data(a, a->nulls, s);
@@ -1151,7 +1151,7 @@
 	struct _7zip *zip =3D (struct _7zip *)a->format_data;
 	struct file *file;
 	int r;
-	uint8_t mask, byte;
+	uint8_t b, mask;
=20
 	/*
 	 * Make Time Bools.
@@ -1188,23 +1188,23 @@
 		if (r < 0)
 			return (r);
=20
-		byte =3D 0;
+		b =3D 0;
 		mask =3D 0x80;
 		file =3D zip->file_list.first;
 		for (;file !=3D NULL; file =3D file->next) {
 			if (file->flg & flg)
-				byte |=3D mask;
+				b |=3D mask;
 			mask >>=3D 1;
 			if (mask =3D=3D 0) {
-				r =3D compress_out(a, &byte, 1, ARCHIVE_Z_RUN);
+				r =3D compress_out(a, &b, 1, ARCHIVE_Z_RUN);
 				if (r < 0)
 					return (r);
 				mask =3D 0x80;
-				byte =3D 0;
+				b =3D 0;
 			}
 		}
 		if (mask !=3D 0x80) {
-			r =3D compress_out(a, &byte, 1, ARCHIVE_Z_RUN);
+			r =3D compress_out(a, &b, 1, ARCHIVE_Z_RUN);
 			if (r < 0)
 				return (r);
 		}
@@ -1240,7 +1240,7 @@
 	struct _7zip *zip =3D (struct _7zip *)a->format_data;
 	struct file *file;
 	int r;
-	uint8_t mask, byte;
+	uint8_t b, mask;
=20
 	/*
 	 * Make FilesInfo.
@@ -1288,23 +1288,23 @@
 		if (r < 0)
 			return (r);
=20
-		byte =3D 0;
+		b =3D 0;
 		mask =3D 0x80;
 		file =3D zip->file_list.first;
 		for (;file !=3D NULL; file =3D file->next) {
 			if (file->size =3D=3D 0)
-				byte |=3D mask;
+				b |=3D mask;
 			mask >>=3D 1;
 			if (mask =3D=3D 0) {
-				r =3D compress_out(a, &byte, 1, ARCHIVE_Z_RUN);
+				r =3D compress_out(a, &b, 1, ARCHIVE_Z_RUN);
 				if (r < 0)
 					return (r);
 				mask =3D 0x80;
-				byte =3D 0;
+				b =3D 0;
 			}
 		}
 		if (mask !=3D 0x80) {
-			r =3D compress_out(a, &byte, 1, ARCHIVE_Z_RUN);
+			r =3D compress_out(a, &b, 1, ARCHIVE_Z_RUN);
 			if (r < 0)
 				return (r);
 		}
@@ -1321,25 +1321,25 @@
 		if (r < 0)
 			return (r);
=20
-		byte =3D 0;
+		b =3D 0;
 		mask =3D 0x80;
 		file =3D zip->file_list.first;
 		for (;file !=3D NULL; file =3D file->next) {
 			if (file->size)
 				continue;
 			if (!file->dir)
-				byte |=3D mask;
+				b |=3D mask;
 			mask >>=3D 1;
 			if (mask =3D=3D 0) {
-				r =3D compress_out(a, &byte, 1, ARCHIVE_Z_RUN);
+				r =3D compress_out(a, &b, 1, ARCHIVE_Z_RUN);
 				if (r < 0)
 					return (r);
 				mask =3D 0x80;
-				byte =3D 0;
+				b =3D 0;
 			}
 		}
 		if (mask !=3D 0x80) {
-			r =3D compress_out(a, &byte, 1, ARCHIVE_Z_RUN);
+			r =3D compress_out(a, &b, 1, ARCHIVE_Z_RUN);
 			if (r < 0)
 				return (r);
 		}
@@ -1492,6 +1492,7 @@
=20
 	if (0 > archive_entry_pathname_l(entry, &u16, &u16len, zip->sconv)) {
 		if (errno =3D=3D ENOMEM) {
+			free(file);
 			archive_set_error(&a->archive, ENOMEM,
 			    "Can't allocate memory for UTF-16LE");
 			return (ARCHIVE_FATAL);
@@ -1503,6 +1504,7 @@
 	}
 	file->utf16name =3D malloc(u16len + 2);
 	if (file->utf16name =3D=3D NULL) {
+		free(file);
 		archive_set_error(&a->archive, ENOMEM,
 		    "Can't allocate memory for Name");
 		return (ARCHIVE_FATAL);
@@ -1676,10 +1678,10 @@
 	 * a non-const pointer. */
 	strm->next_in =3D (Bytef *)(uintptr_t)(const void *)lastrm->next_in;
 	strm->avail_in =3D lastrm->avail_in;
-	strm->total_in =3D lastrm->total_in;
+	strm->total_in =3D (uLong)lastrm->total_in;
 	strm->next_out =3D lastrm->next_out;
 	strm->avail_out =3D lastrm->avail_out;
-	strm->total_out =3D lastrm->total_out;
+	strm->total_out =3D (uLong)lastrm->total_out;
 	if (deflateInit2(strm, level, Z_DEFLATED,
 	    (withheader)?15:-15,
 	    8, Z_DEFAULT_STRATEGY) !=3D Z_OK) {
@@ -1709,10 +1711,10 @@
 	 * a non-const pointer. */
 	strm->next_in =3D (Bytef *)(uintptr_t)(const void *)lastrm->next_in;
 	strm->avail_in =3D lastrm->avail_in;
-	strm->total_in =3D lastrm->total_in;
+	strm->total_in =3D (uLong)lastrm->total_in;
 	strm->next_out =3D lastrm->next_out;
 	strm->avail_out =3D lastrm->avail_out;
-	strm->total_out =3D lastrm->total_out;
+	strm->total_out =3D (uLong)lastrm->total_out;
 	r =3D deflate(strm,
 	    (action =3D=3D ARCHIVE_Z_FINISH)? Z_FINISH: Z_NO_FLUSH);
 	lastrm->next_in =3D strm->next_in;
@@ -1914,6 +1916,7 @@
 	if (level > 6)
 		level =3D 6;
 	if (lzma_lzma_preset(&lzma_opt, level)) {
+		free(strm);
 		lastrm->real_stream =3D NULL;
 		archive_set_error(a, ENOMEM,
 		    "Internal error initializing compression library");
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_write_set_format_ar.c
--- a/head/contrib/libarchive/libarchive/archive_write_set_format_ar.c	Mon =
Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_write_set_format_ar.c	Fri =
Aug 10 14:19:25 2012 +0300
@@ -26,7 +26,7 @@
  */
=20
 #include "archive_platform.h"
-__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/archive_write_set_f=
ormat_ar.c 232153 2012-02-25 10:58:02Z mm $");
+__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/archive_write_set_f=
ormat_ar.c 238856 2012-07-28 06:38:44Z mm $");
=20
 #ifdef HAVE_ERRNO_H
 #include <errno.h>
@@ -366,7 +366,7 @@
=20
 	ar =3D (struct ar_w *)a->format_data;
 	if (s > ar->entry_bytes_remaining)
-		s =3D ar->entry_bytes_remaining;
+		s =3D (size_t)ar->entry_bytes_remaining;
=20
 	if (ar->is_strtab > 0) {
 		if (ar->has_strtab > 0) {
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_write_set_format_cpio.c
--- a/head/contrib/libarchive/libarchive/archive_write_set_format_cpio.c	Mo=
n Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_write_set_format_cpio.c	Fr=
i Aug 10 14:19:25 2012 +0300
@@ -25,7 +25,7 @@
  */
=20
 #include "archive_platform.h"
-__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/archive_write_set_f=
ormat_cpio.c 232153 2012-02-25 10:58:02Z mm $");
+__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/archive_write_set_f=
ormat_cpio.c 238856 2012-07-28 06:38:44Z mm $");
=20
 #ifdef HAVE_ERRNO_H
 #include <errno.h>
@@ -189,7 +189,7 @@
=20
 	/* Don't store a mapping if we don't need to. */
 	if (archive_entry_nlink(entry) < 2) {
-		return ++cpio->ino_next;
+		return (int)(++cpio->ino_next);
 	}
=20
 	/* Look up old ino; if we have it, this is a hardlink
@@ -200,7 +200,7 @@
 	}
=20
 	/* Assign a new index number. */
-	ino_new =3D ++cpio->ino_next;
+	ino_new =3D (int)(++cpio->ino_next);
=20
 	/* Ensure space for the new mapping. */
 	if (cpio->ino_list_size <=3D cpio->ino_list_next) {
@@ -421,7 +421,7 @@
=20
 	cpio =3D (struct cpio *)a->format_data;
 	if (s > cpio->entry_bytes_remaining)
-		s =3D cpio->entry_bytes_remaining;
+		s =3D (size_t)cpio->entry_bytes_remaining;
=20
 	ret =3D __archive_write_output(a, buff, s);
 	cpio->entry_bytes_remaining -=3D s;
@@ -457,7 +457,7 @@
 	if (s =3D=3D 0)
 		return (v);
 	v =3D format_octal_recursive(v, p+1, s-1);
-	*p =3D '0' + (v & 7);
+	*p =3D '0' + ((char)v & 7);
 	return (v >> 3);
 }
=20
@@ -495,5 +495,6 @@
 	struct cpio *cpio;
=20
 	cpio =3D (struct cpio *)a->format_data;
-	return (__archive_write_nulls(a, cpio->entry_bytes_remaining));
+	return (__archive_write_nulls(a,
+		(size_t)cpio->entry_bytes_remaining));
 }
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_write_set_format_cpio_newc.c
--- a/head/contrib/libarchive/libarchive/archive_write_set_format_cpio_newc=
.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_write_set_format_cpio_newc=
.c	Fri Aug 10 14:19:25 2012 +0300
@@ -26,7 +26,7 @@
  */
=20
 #include "archive_platform.h"
-__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/archive_write_set_f=
ormat_cpio_newc.c 232153 2012-02-25 10:58:02Z mm $");
+__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/archive_write_set_f=
ormat_cpio_newc.c 238856 2012-07-28 06:38:44Z mm $");
=20
 #ifdef HAVE_ERRNO_H
 #include <errno.h>
@@ -350,7 +350,7 @@
 	}
=20
 	cpio->entry_bytes_remaining =3D archive_entry_size(entry);
-	cpio->padding =3D PAD4(cpio->entry_bytes_remaining);
+	cpio->padding =3D (int)PAD4(cpio->entry_bytes_remaining);
=20
 	/* Write the symlink now. */
 	if (p !=3D NULL  &&  *p !=3D '\0') {
@@ -380,7 +380,7 @@
=20
 	cpio =3D (struct cpio *)a->format_data;
 	if (s > cpio->entry_bytes_remaining)
-		s =3D cpio->entry_bytes_remaining;
+		s =3D (size_t)cpio->entry_bytes_remaining;
=20
 	ret =3D __archive_write_output(a, buff, s);
 	cpio->entry_bytes_remaining -=3D s;
@@ -453,5 +453,6 @@
 	struct cpio *cpio;
=20
 	cpio =3D (struct cpio *)a->format_data;
-	return (__archive_write_nulls(a, cpio->entry_bytes_remaining + cpio->padd=
ing));
+	return (__archive_write_nulls(a,
+		(size_t)cpio->entry_bytes_remaining + cpio->padding));
 }
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_write_set_format_gnutar.c
--- a/head/contrib/libarchive/libarchive/archive_write_set_format_gnutar.c	=
Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_write_set_format_gnutar.c	=
Fri Aug 10 14:19:25 2012 +0300
@@ -247,8 +247,8 @@
 	int ret;
=20
 	gnutar =3D (struct gnutar *)a->format_data;
-	ret =3D __archive_write_nulls(a,
-	    gnutar->entry_bytes_remaining + gnutar->entry_padding);
+	ret =3D __archive_write_nulls(a, (size_t)
+	    (gnutar->entry_bytes_remaining + gnutar->entry_padding));
 	gnutar->entry_bytes_remaining =3D gnutar->entry_padding =3D 0;
 	return (ret);
 }
@@ -261,7 +261,7 @@
=20
 	gnutar =3D (struct gnutar *)a->format_data;
 	if (s > gnutar->entry_bytes_remaining)
-		s =3D gnutar->entry_bytes_remaining;
+		s =3D (size_t)gnutar->entry_bytes_remaining;
 	ret =3D __archive_write_output(a, buff, s);
 	gnutar->entry_bytes_remaining -=3D s;
 	if (ret !=3D ARCHIVE_OK)
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_write_set_format_iso9660.c
--- a/head/contrib/libarchive/libarchive/archive_write_set_format_iso9660.c=
	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_write_set_format_iso9660.c=
	Fri Aug 10 14:19:25 2012 +0300
@@ -1698,7 +1698,7 @@
 	size_t ns;
 	int ret;
=20
-	ns =3D csize % LOGICAL_BLOCK_SIZE;
+	ns =3D (size_t)(csize % LOGICAL_BLOCK_SIZE);
 	if (ns !=3D 0)
 		ret =3D write_null(a, LOGICAL_BLOCK_SIZE - ns);
 	else
@@ -1725,8 +1725,8 @@
 		struct content *con;
 		size_t ts;
=20
-		ts =3D MULTI_EXTENT_SIZE - LOGICAL_BLOCK_SIZE -
-		    iso9660->cur_file->cur_content->size;
+		ts =3D (size_t)(MULTI_EXTENT_SIZE - LOGICAL_BLOCK_SIZE -
+		    iso9660->cur_file->cur_content->size);
=20
 		if (iso9660->zisofs.detect_magic)
 			zisofs_detect_magic(a, buff, ts);
@@ -1746,9 +1746,9 @@
 			return (ARCHIVE_FATAL);
=20
 		/* Compute the logical block number. */
-		iso9660->cur_file->cur_content->blocks =3D
-		    (iso9660->cur_file->cur_content->size
-		     + LOGICAL_BLOCK_SIZE -1) >> LOGICAL_BLOCK_BITS;
+		iso9660->cur_file->cur_content->blocks =3D (int)
+		    ((iso9660->cur_file->cur_content->size
+		     + LOGICAL_BLOCK_SIZE -1) >> LOGICAL_BLOCK_BITS);
=20
 		/*
 		 * Make next extent.
@@ -1796,7 +1796,7 @@
 	if (archive_entry_filetype(iso9660->cur_file->entry) !=3D AE_IFREG)
 		return (0);
 	if (s > iso9660->bytes_remaining)
-		s =3D iso9660->bytes_remaining;
+		s =3D (size_t)iso9660->bytes_remaining;
 	if (s =3D=3D 0)
 		return (0);
=20
@@ -1838,9 +1838,9 @@
 		return (ARCHIVE_FATAL);
=20
 	/* Compute the logical block number. */
-	iso9660->cur_file->cur_content->blocks =3D
-	    (iso9660->cur_file->cur_content->size
-	     + LOGICAL_BLOCK_SIZE -1) >> LOGICAL_BLOCK_BITS;
+	iso9660->cur_file->cur_content->blocks =3D (int)
+	    ((iso9660->cur_file->cur_content->size
+	     + LOGICAL_BLOCK_SIZE -1) >> LOGICAL_BLOCK_BITS);
=20
 	/* Add the current file to data file list. */
 	isofile_add_data_file(iso9660, iso9660->cur_file);
@@ -2244,7 +2244,7 @@
 		onepad =3D 0;
 	if (vdc =3D=3D VDC_UCS2) {
 		struct iso9660 *iso9660 =3D a->format_data;
-		if (archive_strncpy_in_locale(&iso9660->utf16be, s, strlen(s),
+		if (archive_strncpy_l(&iso9660->utf16be, s, strlen(s),
 		    iso9660->sconv_to_utf16be) !=3D 0 && errno =3D=3D ENOMEM) {
 			archive_set_error(&a->archive, ENOMEM,
 			    "Can't allocate memory for UTF-16BE");
@@ -2547,7 +2547,7 @@
 	set_digit(p+10, 2, tm.tm_min);
 	set_digit(p+12, 2, tm.tm_sec);
 	set_digit(p+14, 2, 0);
-	set_num_712(p+16, get_gmoffset(&tm)/(60*15));
+	set_num_712(p+16, (char)(get_gmoffset(&tm)/(60*15)));
 }
=20
 static void
@@ -2569,7 +2569,7 @@
 	set_num_711(p+3, tm.tm_hour);
 	set_num_711(p+4, tm.tm_min);
 	set_num_711(p+5, tm.tm_sec);
-	set_num_712(p+6, get_gmoffset(&tm)/(60*15));
+	set_num_712(p+6, (char)(get_gmoffset(&tm)/(60*15)));
 }
=20
=20
@@ -2941,8 +2941,8 @@
 			bp =3D extra_next_record(&ctl, length);
 		if (bp !=3D NULL) {
 			mode_t mode;
-			uid_t uid;
-			gid_t gid;
+			int64_t uid;
+			int64_t gid;
=20
 			mode =3D archive_entry_mode(file->entry);
 			uid =3D archive_entry_uid(file->entry);
@@ -2975,8 +2975,8 @@
 			/* file links (stat.st_nlink) */
 			set_num_733(bp+13,
 			    archive_entry_nlink(file->entry));
-			set_num_733(bp+21, uid);
-			set_num_733(bp+29, gid);
+			set_num_733(bp+21, (uint32_t)uid);
+			set_num_733(bp+29, (uint32_t)gid);
 			/* File Serial Number */
 			if (pxent->dir)
 				set_num_733(bp+37, pxent->dir_location);
@@ -3357,8 +3357,8 @@
 			bp[3] =3D length;
 			bp[4] =3D 1;	/* version	*/
 			dev =3D (uint64_t)archive_entry_rdev(file->entry);
-			set_num_733(bp + 5, dev >> 32);
-			set_num_733(bp + 13, dev & 0xFFFFFFFF);
+			set_num_733(bp + 5, (uint32_t)(dev >> 32));
+			set_num_733(bp + 13, (uint32_t)(dev & 0xFFFFFFFF));
 			bp +=3D length;
 		}
 		extra_tell_used_size(&ctl, length);
@@ -3492,7 +3492,7 @@
 			set_num_733(bp+11,
 			    xisoent->dir_block * LOGICAL_BLOCK_SIZE);
 		else
-			set_num_733(bp+11, file->cur_content->size);
+			set_num_733(bp+11, (uint32_t)file->cur_content->size);
 		/* Recording Date and Time */
 		/* NOTE:
 		 *  If a file type is symbolic link, you are seeing this
@@ -3669,7 +3669,7 @@
 		iso9660->wbuff_tail =3D iso9660->wbuff_offset + used;
 	if (iso9660->wbuff_offset < iso9660->wbuff_written) {
 		if (used > 0 &&
-		    write_to_temp(a, iso9660->wbuff, used) !=3D ARCHIVE_OK)
+		    write_to_temp(a, iso9660->wbuff, (size_t)used) !=3D ARCHIVE_OK)
 			return (ARCHIVE_FATAL);
 		iso9660->wbuff_offset =3D iso9660->wbuff_written;
 		lseek(iso9660->temp_fd, iso9660->wbuff_offset, SEEK_SET);
@@ -3688,12 +3688,12 @@
 		iso9660->wbuff_offset =3D off;
 		iso9660->wbuff_remaining =3D sizeof(iso9660->wbuff);
 	} else if (off <=3D iso9660->wbuff_tail) {
-		iso9660->wbuff_remaining =3D
-		    sizeof(iso9660->wbuff) - (off - iso9660->wbuff_offset);
+		iso9660->wbuff_remaining =3D (size_t)
+		    (sizeof(iso9660->wbuff) - (off - iso9660->wbuff_offset));
 	} else {
 		ext_bytes =3D off - iso9660->wbuff_tail;
-		iso9660->wbuff_remaining =3D sizeof(iso9660->wbuff)
-		   - (iso9660->wbuff_tail - iso9660->wbuff_offset);
+		iso9660->wbuff_remaining =3D (size_t)(sizeof(iso9660->wbuff)
+		   - (iso9660->wbuff_tail - iso9660->wbuff_offset));
 		while (ext_bytes >=3D (int64_t)iso9660->wbuff_remaining) {
 			if (write_null(a, (size_t)iso9660->wbuff_remaining)
 			    !=3D ARCHIVE_OK)
@@ -4814,13 +4814,19 @@
 		struct archive_wstring ws;
=20
 		if (wp !=3D NULL) {
+			int r;
 			archive_string_init(&ws);
 			archive_wstrcpy(&ws, wp);
 			cleanup_backslash_2(ws.s);
 			archive_string_empty(&(file->parentdir));
-			archive_string_append_from_wcs(&(file->parentdir),
+			r =3D archive_string_append_from_wcs(&(file->parentdir),
 			    ws.s, ws.length);
 			archive_wstring_free(&ws);
+			if (r < 0 && errno =3D=3D ENOMEM) {
+				archive_set_error(&a->archive, ENOMEM,
+				    "Can't allocate memory");
+				return (ARCHIVE_FATAL);
+			}
 		}
 	}
 #endif
@@ -4923,14 +4929,20 @@
 			struct archive_wstring ws;
=20
 			if (wp !=3D NULL) {
+				int r;
 				archive_string_init(&ws);
 				archive_wstrcpy(&ws, wp);
 				cleanup_backslash_2(ws.s);
 				archive_string_empty(&(file->symlink));
-				archive_string_append_from_wcs(
+				r =3D archive_string_append_from_wcs(
 				    &(file->symlink),
 				    ws.s, ws.length);
 				archive_wstring_free(&ws);
+				if (r < 0 && errno =3D=3D ENOMEM) {
+					archive_set_error(&a->archive, ENOMEM,
+					    "Can't allocate memory");
+					return (ARCHIVE_FATAL);
+				}
 			}
 		}
 #endif
@@ -5426,8 +5438,8 @@
 	iso9660->total_file_block =3D 0;
 	if ((isoent =3D iso9660->el_torito.catalog) !=3D NULL) {
 		isoent->file->content.location =3D location;
-		block =3D (archive_entry_size(isoent->file->entry) +
-		    LOGICAL_BLOCK_SIZE -1) >> LOGICAL_BLOCK_BITS;
+		block =3D (int)((archive_entry_size(isoent->file->entry) +
+		    LOGICAL_BLOCK_SIZE -1) >> LOGICAL_BLOCK_BITS);
 		location +=3D block;
 		iso9660->total_file_block +=3D block;
 	}
@@ -5435,7 +5447,7 @@
 		isoent->file->content.location =3D location;
 		size =3D fd_boot_image_size(iso9660->el_torito.media_type);
 		if (size =3D=3D 0)
-			size =3D archive_entry_size(isoent->file->entry);
+			size =3D (size_t)archive_entry_size(isoent->file->entry);
 		block =3D (size + LOGICAL_BLOCK_SIZE -1) >> LOGICAL_BLOCK_BITS;
 		location +=3D block;
 		iso9660->total_file_block +=3D block;
@@ -6262,9 +6274,14 @@
 		 * Get a length of MBS of a full-pathname.
 		 */
 		if ((int)np->file->basename_utf16.length > ffmax) {
-			archive_strncpy_in_locale(&iso9660->mbs,
+			if (archive_strncpy_l(&iso9660->mbs,
 			    (const char *)np->identifier, l,
-			    iso9660->sconv_from_utf16be);
+				iso9660->sconv_from_utf16be) !=3D 0 &&
+			    errno =3D=3D ENOMEM) {
+				archive_set_error(&a->archive, errno,
+				    "No memory");
+				return (ARCHIVE_FATAL);
+			}
 			np->mb_len =3D iso9660->mbs.length;
 			if (np->mb_len !=3D (int)np->file->basename.length)
 				weight =3D np->mb_len;
@@ -6364,7 +6381,7 @@
 			if (0x20 !=3D *s2++)
 				return (0x20
 				    - *(const unsigned char *)(s2 - 1));
-	} else if (p1->ext_len < p2->ext_len) {
+	} else if (p1->ext_len > p2->ext_len) {
 		s1 +=3D l;
 		l =3D p1->ext_len - p2->ext_len;
 		while (l--)
@@ -6452,7 +6469,7 @@
 		while (l--)
 			if (0 !=3D *s2++)
 				return (- *(const unsigned char *)(s2 - 1));
-	} else if (p1->ext_len < p2->ext_len) {
+	} else if (p1->ext_len > p2->ext_len) {
 		s1 +=3D l;
 		l =3D p1->ext_len - p2->ext_len;
 		while (l--)
@@ -6622,7 +6639,7 @@
  */
 static int
 isoent_rr_move_dir(struct archive_write *a, struct isoent **rr_moved,
-    struct isoent *isoent, struct isoent **newent)
+    struct isoent *curent, struct isoent **newent)
 {
 	struct iso9660 *iso9660 =3D a->format_data;
 	struct isoent *rrmoved, *mvent, *np;
@@ -6648,40 +6665,40 @@
 		*rr_moved =3D rrmoved;
 	}
 	/*
-	 * Make a clone of isoent which is going to be relocated
+	 * Make a clone of curent which is going to be relocated
 	 * to rr_moved.
 	 */
-	mvent =3D isoent_clone(isoent);
+	mvent =3D isoent_clone(curent);
 	if (mvent =3D=3D NULL) {
 		archive_set_error(&a->archive, ENOMEM,
 		    "Can't allocate memory");
 		return (ARCHIVE_FATAL);
 	}
 	/* linking..  and use for creating "CL", "PL" and "RE" */
-	mvent->rr_parent =3D isoent->parent;
-	isoent->rr_child =3D mvent;
+	mvent->rr_parent =3D curent->parent;
+	curent->rr_child =3D mvent;
 	/*
-	 * Move subdirectories from the isoent to mvent
+	 * Move subdirectories from the curent to mvent
 	 */
-	if (isoent->children.first !=3D NULL) {
-		*mvent->children.last =3D isoent->children.first;
-		mvent->children.last =3D isoent->children.last;
+	if (curent->children.first !=3D NULL) {
+		*mvent->children.last =3D curent->children.first;
+		mvent->children.last =3D curent->children.last;
 	}
 	for (np =3D mvent->children.first; np !=3D NULL; np =3D np->chnext)
 		np->parent =3D mvent;
-	mvent->children.cnt =3D isoent->children.cnt;
-	isoent->children.cnt =3D 0;
-	isoent->children.first =3D NULL;
-	isoent->children.last =3D &isoent->children.first;
-
-	if (isoent->subdirs.first !=3D NULL) {
-		*mvent->subdirs.last =3D isoent->subdirs.first;
-		mvent->subdirs.last =3D isoent->subdirs.last;
-	}
-	mvent->subdirs.cnt =3D isoent->subdirs.cnt;
-	isoent->subdirs.cnt =3D 0;
-	isoent->subdirs.first =3D NULL;
-	isoent->subdirs.last =3D &isoent->subdirs.first;
+	mvent->children.cnt =3D curent->children.cnt;
+	curent->children.cnt =3D 0;
+	curent->children.first =3D NULL;
+	curent->children.last =3D &curent->children.first;
+
+	if (curent->subdirs.first !=3D NULL) {
+		*mvent->subdirs.last =3D curent->subdirs.first;
+		mvent->subdirs.last =3D curent->subdirs.last;
+	}
+	mvent->subdirs.cnt =3D curent->subdirs.cnt;
+	curent->subdirs.cnt =3D 0;
+	curent->subdirs.first =3D NULL;
+	curent->subdirs.last =3D &curent->subdirs.first;
=20
 	/*
 	 * The mvent becomes a child of the rr_moved entry.
@@ -6694,7 +6711,7 @@
 	 * has to set the flag as a file.
 	 * See also RRIP 4.1.5.1 Description of the "CL" System Use Entry.
 	 */
-	isoent->dir =3D 0;
+	curent->dir =3D 0;
=20
 	*newent =3D mvent;
=20
@@ -7408,7 +7425,8 @@
 	/* Mark file->zisofs to create RRIP 'ZF' Use Entry. */
 	file->zisofs.header_size =3D ZF_HEADER_SIZE >> 2;
 	file->zisofs.log2_bs =3D ZF_LOG2_BS;
-	file->zisofs.uncompressed_size =3D archive_entry_size(file->entry);
+	file->zisofs.uncompressed_size =3D
+		(uint32_t)archive_entry_size(file->entry);
=20
 	/* Calculate a size of Block Pointers of zisofs. */
 	ceil =3D (file->zisofs.uncompressed_size + ZF_BLOCK_SIZE -1)
@@ -7436,13 +7454,14 @@
 	 * file.
 	 */
 	tsize =3D ZF_HEADER_SIZE + bpsize;
-	if (write_null(a, tsize) !=3D ARCHIVE_OK)
+	if (write_null(a, (size_t)tsize) !=3D ARCHIVE_OK)
 		return (ARCHIVE_FATAL);
=20
 	/*
 	 * Initialize some variables to make zisofs.
 	 */
-	archive_le32enc(&(iso9660->zisofs.block_pointers[0]), tsize);
+	archive_le32enc(&(iso9660->zisofs.block_pointers[0]),
+		(uint32_t)tsize);
 	iso9660->zisofs.remaining =3D file->zisofs.uncompressed_size;
 	iso9660->zisofs.making =3D 1;
 	iso9660->zisofs.allzero =3D 1;
@@ -7471,7 +7490,7 @@
=20
 	entry_size =3D archive_entry_size(file->entry);
 	if ((int64_t)sizeof(iso9660->zisofs.magic_buffer) > entry_size)
-		magic_max =3D entry_size;
+		magic_max =3D (int)entry_size;
 	else
 		magic_max =3D sizeof(iso9660->zisofs.magic_buffer);
=20
@@ -7647,7 +7666,7 @@
 			iso9660->zisofs.block_pointers_idx ++;
 			archive_le32enc(&(iso9660->zisofs.block_pointers[
 			    iso9660->zisofs.block_pointers_idx]),
-				iso9660->zisofs.total_size);
+				(uint32_t)iso9660->zisofs.total_size);
 			r =3D zisofs_init_zstream(a);
 			if (r !=3D ARCHIVE_OK)
 				return (ARCHIVE_FATAL);
@@ -7776,9 +7795,9 @@
 	size_t ceil, xsize;
=20
 	/* Allocate block pointers buffer. */
-	ceil =3D (zisofs->pz_uncompressed_size +
-		(1LL << zisofs->pz_log2_bs) - 1)
-		>> zisofs->pz_log2_bs;
+	ceil =3D (size_t)((zisofs->pz_uncompressed_size +
+		(((int64_t)1) << zisofs->pz_log2_bs) - 1)
+		>> zisofs->pz_log2_bs);
 	xsize =3D (ceil + 1) * 4;
 	if (zisofs->block_pointers =3D=3D NULL) {
 		size_t alloc =3D ((xsize >> 10) + 1) << 10;
@@ -7999,7 +8018,7 @@
 	fd =3D iso9660->temp_fd;
 	new_offset =3D wb_offset(a);
 	read_offset =3D file->content.offset_of_temp;
-	remaining =3D file->content.size;
+	remaining =3D (size_t)file->content.size;
 	if (remaining > 1024 * 32)
 		rbuff_size =3D 1024 * 32;
 	else
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_write_set_format_mtree.c
--- a/head/contrib/libarchive/libarchive/archive_write_set_format_mtree.c	M=
on Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_write_set_format_mtree.c	F=
ri Aug 10 14:19:25 2012 +0300
@@ -25,7 +25,7 @@
  */
=20
 #include "archive_platform.h"
-__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/archive_write_set_f=
ormat_mtree.c 232153 2012-02-25 10:58:02Z mm $");
+__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/archive_write_set_f=
ormat_mtree.c 238856 2012-07-28 06:38:44Z mm $");
=20
 #ifdef HAVE_SYS_TYPES_H
 #include <sys/types.h>
@@ -389,13 +389,13 @@
 		else if (*p =3D=3D '/')
 			al =3D p - path;
 	}
-	if (l =3D=3D -1)
+	if (l =3D=3D (size_t)-1)
 		goto alen;
 	size =3D p - path;
 	rp =3D p =3D path;
 	while (*p !=3D '\0') {
 		l =3D mbtowc(&wc, p, size);
-		if (l =3D=3D -1)
+		if (l =3D=3D (size_t)-1)
 			goto alen;
 		if (l =3D=3D 1 && (wc =3D=3D L'/' || wc =3D=3D L'\\'))
 			rp =3D p;
@@ -404,7 +404,7 @@
 	}
 	return (rp - path + 1);
 alen:
-	if (al =3D=3D -1)
+	if (al =3D=3D (size_t)-1)
 		return (0);
 	return (al + 1);
 }
@@ -1079,7 +1079,7 @@
 	struct mtree_writer *mtree=3D a->format_data;
=20
 	if (n > mtree->entry_bytes_remaining)
-		n =3D mtree->entry_bytes_remaining;
+		n =3D (size_t)mtree->entry_bytes_remaining;
 	mtree->entry_bytes_remaining -=3D n;
=20
 	/* We don't need to compute a regular file sum */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_write_set_format_pax.c
--- a/head/contrib/libarchive/libarchive/archive_write_set_format_pax.c	Mon=
 Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_write_set_format_pax.c	Fri=
 Aug 10 14:19:25 2012 +0300
@@ -25,7 +25,7 @@
  */
=20
 #include "archive_platform.h"
-__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/archive_write_set_f=
ormat_pax.c 232153 2012-02-25 10:58:02Z mm $");
+__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/archive_write_set_f=
ormat_pax.c 238856 2012-07-28 06:38:44Z mm $");
=20
 #ifdef HAVE_ERRNO_H
 #include <errno.h>
@@ -334,8 +334,7 @@
 		url_encoded_name =3D url_encode(name);
 		if (url_encoded_name !=3D NULL) {
 			/* Convert narrow-character to UTF-8. */
-			r =3D archive_strcpy_in_locale(
-			    &(pax->l_url_encoded_name),
+			r =3D archive_strcpy_l(&(pax->l_url_encoded_name),
 			    url_encoded_name, pax->sconv_utf8);
 			free(url_encoded_name); /* Done with this. */
 			if (r =3D=3D 0)
@@ -1324,7 +1323,7 @@
 			return (ARCHIVE_FATAL);
 		}
 		/* Pad out the end of the entry. */
-		r =3D __archive_write_nulls(a, pax->entry_padding);
+		r =3D __archive_write_nulls(a, (size_t)pax->entry_padding);
 		if (r !=3D ARCHIVE_OK) {
 			/* If a write fails, we're pretty much toast. */
 			return (ARCHIVE_FATAL);
@@ -1666,7 +1665,7 @@
 			pax->sparse_list =3D sb;
 		}
 	}
-	ret =3D __archive_write_nulls(a, remaining + pax->entry_padding);
+	ret =3D __archive_write_nulls(a, (size_t)(remaining + pax->entry_padding)=
);
 	pax->entry_bytes_remaining =3D pax->entry_padding =3D 0;
 	return (ret);
 }
@@ -1713,7 +1712,7 @@
 		p =3D ((const unsigned char *)buff) + total;
 		ws =3D s - total;
 		if (ws > pax->sparse_list->remaining)
-			ws =3D pax->sparse_list->remaining;
+			ws =3D (size_t)pax->sparse_list->remaining;
=20
 		if (pax->sparse_list->is_hole) {
 			/* Current block is hole thus we do not write
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_write_set_format_ustar.c
--- a/head/contrib/libarchive/libarchive/archive_write_set_format_ustar.c	M=
on Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_write_set_format_ustar.c	F=
ri Aug 10 14:19:25 2012 +0300
@@ -25,7 +25,7 @@
  */
=20
 #include "archive_platform.h"
-__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/archive_write_set_f=
ormat_ustar.c 232153 2012-02-25 10:58:02Z mm $");
+__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/archive_write_set_f=
ormat_ustar.c 238856 2012-07-28 06:38:44Z mm $");
=20
=20
 #ifdef HAVE_ERRNO_H
@@ -742,7 +742,7 @@
=20
 	ustar =3D (struct ustar *)a->format_data;
 	ret =3D __archive_write_nulls(a,
-	    ustar->entry_bytes_remaining + ustar->entry_padding);
+	    (size_t)(ustar->entry_bytes_remaining + ustar->entry_padding));
 	ustar->entry_bytes_remaining =3D ustar->entry_padding =3D 0;
 	return (ret);
 }
@@ -755,7 +755,7 @@
=20
 	ustar =3D (struct ustar *)a->format_data;
 	if (s > ustar->entry_bytes_remaining)
-		s =3D ustar->entry_bytes_remaining;
+		s =3D (size_t)ustar->entry_bytes_remaining;
 	ret =3D __archive_write_output(a, buff, s);
 	ustar->entry_bytes_remaining -=3D s;
 	if (ret !=3D ARCHIVE_OK)
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_write_set_format_xar.c
--- a/head/contrib/libarchive/libarchive/archive_write_set_format_xar.c	Mon=
 Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_write_set_format_xar.c	Fri=
 Aug 10 14:19:25 2012 +0300
@@ -46,10 +46,6 @@
 #include <zlib.h>
 #endif
=20
-#ifndef PATH_MAX
-#define PATH_MAX 4096
-#endif
-
 #include "archive.h"
 #include "archive_crypto_private.h"
 #include "archive_endian.h"
@@ -660,7 +656,7 @@
 	xar =3D (struct xar *)a->format_data;
=20
 	if (s > xar->bytes_remaining)
-		s =3D xar->bytes_remaining;
+		s =3D (size_t)xar->bytes_remaining;
 	if (s =3D=3D 0 || xar->cur_file =3D=3D NULL)
 		return (0);
 	if (xar->cur_file->data.compression =3D=3D NONE) {
@@ -741,7 +737,7 @@
 		return (ARCHIVE_OK);
=20
 	while (xar->bytes_remaining > 0) {
-		s =3D xar->bytes_remaining;
+		s =3D (size_t)xar->bytes_remaining;
 		if (s > a->null_length)
 			s =3D a->null_length;
 		w =3D xar_write_data(a, a->nulls, s);
@@ -2600,10 +2596,10 @@
 	 * a non-const pointer. */
 	strm->next_in =3D (Bytef *)(uintptr_t)(const void *)lastrm->next_in;
 	strm->avail_in =3D lastrm->avail_in;
-	strm->total_in =3D lastrm->total_in;
+	strm->total_in =3D (uLong)lastrm->total_in;
 	strm->next_out =3D lastrm->next_out;
 	strm->avail_out =3D lastrm->avail_out;
-	strm->total_out =3D lastrm->total_out;
+	strm->total_out =3D (uLong)lastrm->total_out;
 	if (deflateInit2(strm, level, Z_DEFLATED,
 	    (withheader)?15:-15,
 	    8, Z_DEFAULT_STRATEGY) !=3D Z_OK) {
@@ -2633,10 +2629,10 @@
 	 * a non-const pointer. */
 	strm->next_in =3D (Bytef *)(uintptr_t)(const void *)lastrm->next_in;
 	strm->avail_in =3D lastrm->avail_in;
-	strm->total_in =3D lastrm->total_in;
+	strm->total_in =3D (uLong)lastrm->total_in;
 	strm->next_out =3D lastrm->next_out;
 	strm->avail_out =3D lastrm->avail_out;
-	strm->total_out =3D lastrm->total_out;
+	strm->total_out =3D (uLong)lastrm->total_out;
 	r =3D deflate(strm,
 	    (action =3D=3D ARCHIVE_Z_FINISH)? Z_FINISH: Z_NO_FLUSH);
 	lastrm->next_in =3D strm->next_in;
@@ -2872,6 +2868,7 @@
 	if (level > 6)
 		level =3D 6;
 	if (lzma_lzma_preset(&lzma_opt, level)) {
+		free(strm);
 		lastrm->real_stream =3D NULL;
 		archive_set_error(a, ENOMEM,
 		    "Internal error initializing compression library");
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_write_set_format_zip.c
--- a/head/contrib/libarchive/libarchive/archive_write_set_format_zip.c	Mon=
 Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_write_set_format_zip.c	Fri=
 Aug 10 14:19:25 2012 +0300
@@ -48,7 +48,7 @@
  */
=20
 #include "archive_platform.h"
-__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/archive_write_set_f=
ormat_zip.c 232153 2012-02-25 10:58:02Z mm $");
+__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/archive_write_set_f=
ormat_zip.c 238856 2012-07-28 06:38:44Z mm $");
=20
 #ifdef HAVE_ERRNO_H
 #include <errno.h>
@@ -109,69 +109,75 @@
 static size_t path_length(struct archive_entry *);
 static int write_path(struct archive_entry *, struct archive_write *);
=20
-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];
-};
+#define LOCAL_FILE_HEADER_SIGNATURE		0
+#define LOCAL_FILE_HEADER_VERSION		4
+#define LOCAL_FILE_HEADER_FLAGS			6
+#define LOCAL_FILE_HEADER_COMPRESSION		8
+#define LOCAL_FILE_HEADER_TIMEDATE		10
+#define LOCAL_FILE_HEADER_CRC32			14
+#define LOCAL_FILE_HEADER_COMPRESSED_SIZE	18
+#define LOCAL_FILE_HEADER_UNCOMPRESSED_SIZE	22
+#define LOCAL_FILE_HEADER_FILENAME_LENGTH	26
+#define LOCAL_FILE_HEADER_EXTRA_LENGTH		28
+#define SIZE_LOCAL_FILE_HEADER			30
=20
-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];
-};
+#define FILE_HEADER_SIGNATURE			0
+#define FILE_HEADER_VERSION_BY			4
+#define FILE_HEADER_VERSION_EXTRACT		6
+#define FILE_HEADER_FLAGS			8
+#define FILE_HEADER_COMPRESSION			10
+#define FILE_HEADER_TIMEDATE			12
+#define FILE_HEADER_CRC32			16
+#define FILE_HEADER_COMPRESSED_SIZE		20
+#define FILE_HEADER_UNCOMPRESSED_SIZE		24
+#define FILE_HEADER_FILENAME_LENGTH		28
+#define FILE_HEADER_EXTRA_LENGTH		30
+#define FILE_HEADER_COMMENT_LENGTH		32
+#define FILE_HEADER_DISK_NUMBER			34
+#define FILE_HEADER_ATTRIBUTES_INTERNAL		36
+#define FILE_HEADER_ATTRIBUTES_EXTERNAL		38
+#define FILE_HEADER_OFFSET			42
+#define SIZE_FILE_HEADER			46
=20
-struct zip_data_descriptor {
-	char signature[4]; /* Not mandatory, but recommended by specification. */
-	char crc32[4];
-	char compressed_size[4];
-	char uncompressed_size[4];
-};
+	/* Not mandatory, but recommended by specification. */
+#define DATA_DESCRIPTOR_SIGNATURE		0
+#define DATA_DESCRIPTOR_CRC32			4
+#define DATA_DESCRIPTOR_COMPRESSED_SIZE		8
+#define DATA_DESCRIPTOR_UNCOMPRESSED_SIZE	12
+#define SIZE_DATA_DESCRIPTOR			16
=20
-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_version;
-	char unix_uid_size;
-	char unix_uid[4];
-	char unix_gid_size;
-	char unix_gid[4];
-};
+#define EXTRA_DATA_LOCAL_TIME_ID		0
+#define EXTRA_DATA_LOCAL_TIME_SIZE		2
+#define EXTRA_DATA_LOCAL_TIME_FLAG		4
+#define EXTRA_DATA_LOCAL_MTIME			5
+#define EXTRA_DATA_LOCAL_ATIME			9
+#define EXTRA_DATA_LOCAL_CTIME			13
+#define EXTRA_DATA_LOCAL_UNIX_ID		17
+#define EXTRA_DATA_LOCAL_UNIX_SIZE		19
+#define EXTRA_DATA_LOCAL_UNIX_VERSION		21
+#define EXTRA_DATA_LOCAL_UNIX_UID_SIZE		22
+#define EXTRA_DATA_LOCAL_UNIX_UID		23
+#define EXTRA_DATA_LOCAL_UNIX_GID_SIZE		27
+#define EXTRA_DATA_LOCAL_UNIX_GID		28
+#define SIZE_EXTRA_DATA_LOCAL			32
=20
-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];
-};
+#define EXTRA_DATA_CENTRAL_TIME_ID		0
+#define EXTRA_DATA_CENTRAL_TIME_SIZE		2
+#define EXTRA_DATA_CENTRAL_TIME_FLAG		4
+#define EXTRA_DATA_CENTRAL_MTIME		5
+#define EXTRA_DATA_CENTRAL_UNIX_ID		9
+#define EXTRA_DATA_CENTRAL_UNIX_SIZE		11
+#define SIZE_EXTRA_DATA_CENTRAL			13
+
+#define CENTRAL_DIRECTORY_END_SIGNATURE		0
+#define CENTRAL_DIRECTORY_END_DISK		4
+#define CENTRAL_DIRECTORY_END_START_DISK	6
+#define CENTRAL_DIRECTORY_END_ENTRIES_DISK	8
+#define CENTRAL_DIRECTORY_END_ENTRIES		10
+#define CENTRAL_DIRECTORY_END_SIZE		12
+#define CENTRAL_DIRECTORY_END_OFFSET		16
+#define CENTRAL_DIRECTORY_END_COMMENT_LENGTH	20
+#define SIZE_CENTRAL_DIRECTORY_END		22
=20
 struct zip_file_header_link {
 	struct zip_file_header_link *next;
@@ -184,7 +190,7 @@
 };
=20
 struct zip {
-	struct zip_data_descriptor data_descriptor;
+	uint8_t data_descriptor[SIZE_DATA_DESCRIPTOR];
 	struct zip_file_header_link *central_directory;
 	struct zip_file_header_link *central_directory_end;
 	int64_t offset;
@@ -203,17 +209,6 @@
 #endif
 };
=20
-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 *val)
@@ -291,6 +286,7 @@
 	zip->len_buf =3D 65536;
 	zip->buf =3D malloc(zip->len_buf);
 	if (zip->buf =3D=3D NULL) {
+		free(zip);
 		archive_set_error(&a->archive, ENOMEM,
 		    "Can't allocate compression buffer");
 		return (ARCHIVE_FATAL);
@@ -310,7 +306,7 @@
 	a->archive.archive_format =3D ARCHIVE_FORMAT_ZIP;
 	a->archive.archive_format_name =3D "ZIP";
=20
-	archive_le32enc(&zip->data_descriptor.signature,
+	archive_le32enc(&zip->data_descriptor[DATA_DESCRIPTOR_SIGNATURE],
 	    ZIP_SIGNATURE_DATA_DESCRIPTOR);
=20
 	return (ARCHIVE_OK);
@@ -332,9 +328,9 @@
 archive_write_zip_header(struct archive_write *a, struct archive_entry *en=
try)
 {
 	struct zip *zip;
-	struct zip_local_file_header h;
-	struct zip_extra_data_local e;
-	struct zip_data_descriptor *d;
+	uint8_t h[SIZE_LOCAL_FILE_HEADER];
+	uint8_t e[SIZE_EXTRA_DATA_LOCAL];
+	uint8_t *d;
 	struct zip_file_header_link *l;
 	struct archive_string_conv *sconv;
 	int ret, ret2 =3D ARCHIVE_OK;
@@ -374,7 +370,7 @@
 #endif
 		}
 	}
-	d =3D &zip->data_descriptor;
+	d =3D zip->data_descriptor;
 	size =3D archive_entry_size(entry);
 	zip->remaining_data_bytes =3D size;
=20
@@ -411,21 +407,47 @@
=20
 		if (archive_entry_pathname_l(entry, &p, &len, sconv) !=3D 0) {
 			if (errno =3D=3D ENOMEM) {
+				archive_entry_free(l->entry);
+				free(l);
 				archive_set_error(&a->archive, ENOMEM,
 				    "Can't allocate memory for Pathname");
 				return (ARCHIVE_FATAL);
 			}
 			archive_set_error(&a->archive,
 			    ARCHIVE_ERRNO_FILE_FORMAT,
-			    "Can't translate pathname '%s' to %s",
+			    "Can't translate Pathname '%s' to %s",
 			    archive_entry_pathname(entry),
 			    archive_string_conversion_charset_name(sconv));
 			ret2 =3D ARCHIVE_WARN;
 		}
 		if (len > 0)
 			archive_entry_set_pathname(l->entry, p);
+
+		/*
+		 * Although there is no character-set regulation for Symlink,
+		 * it is suitable to convert a character-set of Symlinke to
+		 * what those of the Pathname has been converted to.
+		 */
+		if (type =3D=3D AE_IFLNK) {
+			if (archive_entry_symlink_l(entry, &p, &len, sconv)) {
+				if (errno =3D=3D ENOMEM) {
+					archive_entry_free(l->entry);
+					free(l);
+					archive_set_error(&a->archive, ENOMEM,
+					    "Can't allocate memory "
+					    " for Symlink");
+					return (ARCHIVE_FATAL);
+				}
+				/*
+				 * Even if the strng conversion failed,
+				 * we should not report the error since
+				 * thre is no regulation for.
+				 */
+			} else if (len > 0)
+				archive_entry_set_symlink(l->entry, p);
+		}
 	}
-	/* If all character of a filename is ASCII, Reset UTF-8 Name flag. */
+	/* If all characters in a filename are ASCII, Reset UTF-8 Name flag. */
 	if ((l->flags & ZIP_FLAGS_UTF8_NAME) !=3D 0 &&
 	    is_all_ascii(archive_entry_pathname(l->entry)))
 		l->flags &=3D ~ZIP_FLAGS_UTF8_NAME;
@@ -458,13 +480,16 @@
 	 * directory. */
 	l->offset =3D zip->written_bytes;
=20
-	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, l->flags);
-	archive_le16enc(&h.compression, l->compression);
-	archive_le32enc(&h.timedate, dos_time(archive_entry_mtime(entry)));
-	archive_le16enc(&h.filename_length, (uint16_t)path_length(l->entry));
+	memset(h, 0, sizeof(h));
+	archive_le32enc(&h[LOCAL_FILE_HEADER_SIGNATURE],
+		ZIP_SIGNATURE_LOCAL_FILE_HEADER);
+	archive_le16enc(&h[LOCAL_FILE_HEADER_VERSION], ZIP_VERSION_EXTRACT);
+	archive_le16enc(&h[LOCAL_FILE_HEADER_FLAGS], l->flags);
+	archive_le16enc(&h[LOCAL_FILE_HEADER_COMPRESSION], l->compression);
+	archive_le32enc(&h[LOCAL_FILE_HEADER_TIMEDATE],
+		dos_time(archive_entry_mtime(entry)));
+	archive_le16enc(&h[LOCAL_FILE_HEADER_FILENAME_LENGTH],
+		(uint16_t)path_length(l->entry));
=20
 	switch (l->compression) {
 	case COMPRESSION_STORE:
@@ -472,12 +497,15 @@
 		 * 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);
+		archive_le32enc(&h[LOCAL_FILE_HEADER_COMPRESSED_SIZE],
+		    (uint32_t)size);
+		archive_le32enc(&h[LOCAL_FILE_HEADER_UNCOMPRESSED_SIZE],
+		    (uint32_t)size);
 		break;
 #ifdef HAVE_ZLIB_H
 	case COMPRESSION_DEFLATE:
-		archive_le32enc(&h.uncompressed_size, size);
+		archive_le32enc(&h[LOCAL_FILE_HEADER_UNCOMPRESSED_SIZE],
+		    (uint32_t)size);
=20
 		zip->stream.zalloc =3D Z_NULL;
 		zip->stream.zfree =3D Z_NULL;
@@ -495,28 +523,33 @@
 	}
=20
 	/* 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] =3D 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(&h[LOCAL_FILE_HEADER_EXTRA_LENGTH], sizeof(e));
+	archive_le16enc(&e[EXTRA_DATA_LOCAL_TIME_ID],
+		ZIP_SIGNATURE_EXTRA_TIMESTAMP);
+	archive_le16enc(&e[EXTRA_DATA_LOCAL_TIME_SIZE], 1 + 4 * 3);
+	e[EXTRA_DATA_LOCAL_TIME_FLAG] =3D 0x07;
+	archive_le32enc(&e[EXTRA_DATA_LOCAL_MTIME],
+	    (uint32_t)archive_entry_mtime(entry));
+	archive_le32enc(&e[EXTRA_DATA_LOCAL_ATIME],
+	    (uint32_t)archive_entry_atime(entry));
+	archive_le32enc(&e[EXTRA_DATA_LOCAL_CTIME],
+	    (uint32_t)archive_entry_ctime(entry));
=20
-	archive_le16enc(&e.unix_id, ZIP_SIGNATURE_EXTRA_NEW_UNIX);
-	archive_le16enc(&e.unix_size, sizeof(e.unix_version) +
-	    sizeof(e.unix_uid_size) + sizeof(e.unix_uid) +
-	    sizeof(e.unix_gid_size) + sizeof(e.unix_gid));
-	e.unix_version =3D 1;
-	e.unix_uid_size =3D 4;
-	archive_le32enc(&e.unix_uid, archive_entry_uid(entry));
-	e.unix_gid_size =3D 4;
-	archive_le32enc(&e.unix_gid, archive_entry_gid(entry));
+	archive_le16enc(&e[EXTRA_DATA_LOCAL_UNIX_ID],
+		ZIP_SIGNATURE_EXTRA_NEW_UNIX);
+	archive_le16enc(&e[EXTRA_DATA_LOCAL_UNIX_SIZE], 1 + (1 + 4) * 2);
+	e[EXTRA_DATA_LOCAL_UNIX_VERSION] =3D 1;
+	e[EXTRA_DATA_LOCAL_UNIX_UID_SIZE] =3D 4;
+	archive_le32enc(&e[EXTRA_DATA_LOCAL_UNIX_UID],
+		(uint32_t)archive_entry_uid(entry));
+	e[EXTRA_DATA_LOCAL_UNIX_GID_SIZE] =3D 4;
+	archive_le32enc(&e[EXTRA_DATA_LOCAL_UNIX_GID],
+		(uint32_t)archive_entry_gid(entry));
=20
-	archive_le32enc(&d->uncompressed_size, size);
+	archive_le32enc(&d[DATA_DESCRIPTOR_UNCOMPRESSED_SIZE],
+	    (uint32_t)size);
=20
-	ret =3D __archive_write_output(a, &h, sizeof(h));
+	ret =3D __archive_write_output(a, h, sizeof(h));
 	if (ret !=3D ARCHIVE_OK)
 		return (ARCHIVE_FATAL);
 	zip->written_bytes +=3D sizeof(h);
@@ -526,7 +559,7 @@
 		return (ARCHIVE_FATAL);
 	zip->written_bytes +=3D ret;
=20
-	ret =3D __archive_write_output(a, &e, sizeof(e));
+	ret =3D __archive_write_output(a, e, sizeof(e));
 	if (ret !=3D ARCHIVE_OK)
 		return (ARCHIVE_FATAL);
 	zip->written_bytes +=3D sizeof(e);
@@ -535,11 +568,11 @@
 		const unsigned char *p;
=20
 		p =3D (const unsigned char *)archive_entry_symlink(l->entry);
-		ret =3D __archive_write_output(a, p, size);
+		ret =3D __archive_write_output(a, p, (size_t)size);
 		if (ret !=3D ARCHIVE_OK)
 			return (ARCHIVE_FATAL);
 		zip->written_bytes +=3D size;
-		l->crc32 =3D crc32(l->crc32, p, size);
+		l->crc32 =3D crc32(l->crc32, p, (unsigned)size);
 	}
=20
 	if (ret2 !=3D ARCHIVE_OK)
@@ -606,7 +639,7 @@
 	/* Write the data descripter after file data has been written. */
 	int ret;
 	struct zip *zip =3D a->format_data;
-	struct zip_data_descriptor *d =3D &zip->data_descriptor;
+	uint8_t *d =3D zip->data_descriptor;
 	struct zip_file_header_link *l =3D zip->central_directory_end;
 #if HAVE_ZLIB_H
 	size_t reminder;
@@ -637,12 +670,13 @@
 #endif
 	}
=20
-	archive_le32enc(&d->crc32, l->crc32);
-	archive_le32enc(&d->compressed_size, l->compressed_size);
-	ret =3D __archive_write_output(a, d, sizeof(*d));
+	archive_le32enc(&d[DATA_DESCRIPTOR_CRC32], l->crc32);
+	archive_le32enc(&d[DATA_DESCRIPTOR_COMPRESSED_SIZE],
+		(uint32_t)l->compressed_size);
+	ret =3D __archive_write_output(a, d, SIZE_DATA_DESCRIPTOR);
 	if (ret !=3D ARCHIVE_OK)
 		return (ARCHIVE_FATAL);
-	zip->written_bytes +=3D sizeof(*d);
+	zip->written_bytes +=3D SIZE_DATA_DESCRIPTOR;
 	return (ARCHIVE_OK);
 }
=20
@@ -651,9 +685,9 @@
 {
 	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;
+	uint8_t h[SIZE_FILE_HEADER];
+	uint8_t end[SIZE_CENTRAL_DIRECTORY_END];
+	uint8_t e[SIZE_EXTRA_DATA_CENTRAL];
 	int64_t offset_start, offset_end;
 	int entries;
 	int ret;
@@ -670,10 +704,10 @@
 	 *   - 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);
+	memset(h, 0, sizeof(h));
+	archive_le32enc(&h[FILE_HEADER_SIGNATURE], ZIP_SIGNATURE_FILE_HEADER);
+	archive_le16enc(&h[FILE_HEADER_VERSION_BY], ZIP_VERSION_BY);
+	archive_le16enc(&h[FILE_HEADER_VERSION_EXTRACT], ZIP_VERSION_EXTRACT);
=20
 	entries =3D 0;
 	offset_start =3D zip->written_bytes;
@@ -681,31 +715,34 @@
 	/* Formatting individual header fields per entry and
 	 * writing each entry. */
 	while (l !=3D NULL) {
-		archive_le16enc(&h.flags, l->flags);
-		archive_le16enc(&h.compression, l->compression);
-		archive_le32enc(&h.timedate,
+		archive_le16enc(&h[FILE_HEADER_FLAGS], l->flags);
+		archive_le16enc(&h[FILE_HEADER_COMPRESSION], l->compression);
+		archive_le32enc(&h[FILE_HEADER_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,
+		archive_le32enc(&h[FILE_HEADER_CRC32], l->crc32);
+		archive_le32enc(&h[FILE_HEADER_COMPRESSED_SIZE],
+			(uint32_t)l->compressed_size);
+		archive_le32enc(&h[FILE_HEADER_UNCOMPRESSED_SIZE],
+			(uint32_t)archive_entry_size(l->entry));
+		archive_le16enc(&h[FILE_HEADER_FILENAME_LENGTH],
 			(uint16_t)path_length(l->entry));
-		archive_le16enc(&h.extra_length, sizeof(e));
-		archive_le16enc(&h.attributes_external[2],
+		archive_le16enc(&h[FILE_HEADER_EXTRA_LENGTH], sizeof(e));
+		archive_le16enc(&h[FILE_HEADER_ATTRIBUTES_EXTERNAL+2],
 			archive_entry_mode(l->entry));
-		archive_le32enc(&h.offset, l->offset);
+		archive_le32enc(&h[FILE_HEADER_OFFSET], (uint32_t)l->offset);
=20
 		/* 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] =3D 0x07;
-		archive_le32enc(&e.mtime, archive_entry_mtime(l->entry));
-		archive_le16enc(&e.unix_id, ZIP_SIGNATURE_EXTRA_NEW_UNIX);
-		archive_le16enc(&e.unix_size, 0x0000);
+		archive_le16enc(&e[EXTRA_DATA_CENTRAL_TIME_ID],
+			ZIP_SIGNATURE_EXTRA_TIMESTAMP);
+		archive_le16enc(&e[EXTRA_DATA_CENTRAL_TIME_SIZE], 1 + 4);
+		e[EXTRA_DATA_CENTRAL_TIME_FLAG] =3D 0x07;
+		archive_le32enc(&e[EXTRA_DATA_CENTRAL_MTIME],
+			(uint32_t)archive_entry_mtime(l->entry));
+		archive_le16enc(&e[EXTRA_DATA_CENTRAL_UNIX_ID],
+			ZIP_SIGNATURE_EXTRA_NEW_UNIX);
+		archive_le16enc(&e[EXTRA_DATA_CENTRAL_UNIX_SIZE], 0x0000);
=20
-		ret =3D __archive_write_output(a, &h, sizeof(h));
+		ret =3D __archive_write_output(a, h, sizeof(h));
 		if (ret !=3D ARCHIVE_OK)
 			return (ARCHIVE_FATAL);
 		zip->written_bytes +=3D sizeof(h);
@@ -715,7 +752,7 @@
 			return (ARCHIVE_FATAL);
 		zip->written_bytes +=3D ret;
=20
-		ret =3D __archive_write_output(a, &e, sizeof(e));
+		ret =3D __archive_write_output(a, e, sizeof(e));
 		if (ret !=3D ARCHIVE_OK)
 			return (ARCHIVE_FATAL);
 		zip->written_bytes +=3D sizeof(e);
@@ -726,15 +763,18 @@
 	offset_end =3D zip->written_bytes;
=20
 	/* 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);
+	memset(end, 0, sizeof(end));
+	archive_le32enc(&end[CENTRAL_DIRECTORY_END_SIGNATURE],
+		ZIP_SIGNATURE_CENTRAL_DIRECTORY_END);
+	archive_le16enc(&end[CENTRAL_DIRECTORY_END_ENTRIES_DISK], entries);
+	archive_le16enc(&end[CENTRAL_DIRECTORY_END_ENTRIES], entries);
+	archive_le32enc(&end[CENTRAL_DIRECTORY_END_SIZE],
+		(uint32_t)(offset_end - offset_start));
+	archive_le32enc(&end[CENTRAL_DIRECTORY_END_OFFSET],
+		(uint32_t)offset_start);
=20
 	/* Writing end of central directory. */
-	ret =3D __archive_write_output(a, &end, sizeof(end));
+	ret =3D __archive_write_output(a, end, sizeof(end));
 	if (ret !=3D ARCHIVE_OK)
 		return (ARCHIVE_FATAL);
 	zip->written_bytes +=3D sizeof(end);
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/arc=
hive_write_set_options.3
--- a/head/contrib/libarchive/libarchive/archive_write_set_options.3	Mon Ju=
l 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/archive_write_set_options.3	Fri Au=
g 10 14:19:25 2012 +0300
@@ -22,9 +22,9 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\" $FreeBSD: head/lib/libarchive/archive_write.3 201110 2009-12-28 03:31:=
29Z kientzle $
+.\" $FreeBSD$
 .\"
-.Dd Feb 27, 2010
+.Dd February 2, 2012
 .Dt ARCHIVE_WRITE_OPTIONS 3
 .Os
 .Sh NAME
@@ -33,8 +33,8 @@
 .Nm archive_write_set_option ,
 .Nm archive_write_set_options
 .Nd functions controlling options for reading archives
-.Sh SYNOPSIS
-.\"
+.Sh LIBRARY
+Streaming Archive Library (libarchive, -larchive)
 .Sh SYNOPSIS
 .Ft int
 .Fo archive_write_set_filter_option
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/cpi=
o.5
--- a/head/contrib/libarchive/libarchive/cpio.5	Mon Jul 30 11:44:18 2012 +0=
300
+++ b/head/contrib/libarchive/libarchive/cpio.5	Fri Aug 10 14:19:25 2012 +0=
300
@@ -22,9 +22,9 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\" $FreeBSD: head/contrib/libarchive/libarchive/cpio.5 228773 2011-12-21 =
15:18:52Z mm $
+.\" $FreeBSD: head/contrib/libarchive/libarchive/cpio.5 238856 2012-07-28 =
06:38:44Z mm $
 .\"
-.Dd October 5, 2007
+.Dd December 23, 2011
 .Dt CPIO 5
 .Os
 .Sh NAME
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/lib=
archive-formats.5
--- a/head/contrib/libarchive/libarchive/libarchive-formats.5	Mon Jul 30 11=
:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/libarchive-formats.5	Fri Aug 10 14=
:19:25 2012 +0300
@@ -22,9 +22,9 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\" $FreeBSD: head/contrib/libarchive/libarchive/libarchive-formats.5 2321=
53 2012-02-25 10:58:02Z mm $
+.\" $FreeBSD: head/contrib/libarchive/libarchive/libarchive-formats.5 2388=
56 2012-07-28 06:38:44Z mm $
 .\"
-.Dd December 27, 2009
+.Dd March 18, 2012
 .Dt LIBARCHIVE-FORMATS 5
 .Os
 .Sh NAME
@@ -51,11 +51,11 @@
 The
 .Xr libarchive 3
 library can read most tar archives.
-However, it only writes POSIX-standard
+It can write POSIX-standard
 .Dq ustar
 and
 .Dq pax interchange
-formats.
+formats and a subset of the legacy GNU tar format.
 .Pp
 All tar formats store each entry in one or more 512-byte records.
 The first record is used for file metadata, including filename,
@@ -70,13 +70,18 @@
 .It Cm gnutar
 The
 .Xr libarchive 3
-library can read GNU-format tar archives.
+library can read most GNU-format tar archives.
 It currently supports the most popular GNU extensions, including
 modern long filename and linkname support, as well as atime and ctime data.
 The libarchive library does not support multi-volume
 archives, nor the old GNU long filename format.
 It can read GNU sparse file entries, including the new POSIX-based
-formats, but cannot write GNU sparse file entries.
+formats.
+.Pp
+The
+.Xr libarchive 3
+library can write GNU tar format, including long filename
+and linkname support, as well as atime and ctime data.
 .It Cm pax
 The
 .Xr libarchive 3
@@ -98,6 +103,14 @@
 The libarchive library can read most of the SCHILY keys
 and most of the GNU keys introduced by GNU tar.
 It silently ignores any keywords that it does not understand.
+.Pp
+The pax interchange format converts filenames to Unicode
+and stores them using the UTF-8 encoding.
+Prior to libarchive 3.0, libarchive erroneously assumed
+that the system wide-character routines natively supported
+Unicode.
+This caused it to mis-handle non-ASCII filenames on systems
+that did not satisfy this assumption.
 .It Cm restricted pax
 The libarchive library can also write pax archives in which it
 attempts to suppress the extended attributes entry whenever
@@ -135,6 +148,8 @@
 Archive entries are limited to 8 gigabytes in size.
 .El
 Note that the pax interchange format has none of these restrictions.
+The ustar format is old and widely supported.
+It is recommended when compatibility is the primary concern.
 .El
 .Pp
 The libarchive library also reads a variety of commonly-used extensions to
@@ -268,19 +283,68 @@
 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.
+.Pp
+Libarchive reads ISO9660 images using a streaming strategy.
+This allows it to read compressed images directly
+(decompressing on the fly) and allows it to read images
+directly from network sockets, pipes, and other non-seekable
+data sources.
+This strategy works well for optimized ISO9660 images created
+by many popular programs.
+Such programs collect all directory information at the beginning
+of the ISO9660 image so it can be read from a physical disk
+with a minimum of seeking.
+However, not all ISO9660 images can be read in this fashion.
+.Pp
+Libarchive can also write ISO9660 images.
+Such images are fully optimized with the directory information
+preceding all file data.
+This is done by storing all file data to a temporary file
+while collecting directory information in memory.
+When the image is finished, libarchive writes out the
+directory structure followed by the file data.
+The location used for the temporary file can be changed
+by the usual environment variables.
 .Ss Zip format
 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
+Other zip compression algorithms are not supported.
+It can extract jar archives, archives that use Zip64 extensions and
 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
-limits libarchive's ability to support some self-extracting
-archives and ones that have been modified in certain ways.
+Libarchive can use either of two different strategies for
+reading Zip archives:
+a streaming strategy which is fast and can handle extremely
+large archives, and a seeking strategy which can correctly
+process self-extracting Zip archives and archives with
+deleted members or other in-place modifications.
+.Pp
+The streaming reader processes Zip archives as they are read.
+It can read archives of arbitrary size from tape or
+network sockets, and can decode Zip archives that have
+been separately compressed or encoded.
+However, self-extracting Zip archives and archives with
+certain types of modifications cannot be correctly
+handled.
+Such archives require that the reader first process the
+Central Directory, which is ordinarily located
+at the end of a Zip archive and is thus inaccessible
+to the streaming reader.
+If the program using libarchive has enabled seek support, then
+libarchive will use this to processes the central directory first.
+.Pp
+In particular, the seeking reader must be used to
+correctly handle self-extracting archives.
+Such archives consist of a program followed by a regular
+Zip archive.
+The streaming reader cannot parse the initial program
+portion, but the seeking reader starts by reading the
+Central Directory from the end of the archive.
+Similarly, Zip archives that have been modified in-place
+can have deleted entries or other garbage data that
+can only be accurately detected by first reading the
+Central Directory.
 .Ss Archive (library) file format
 The Unix archive format (commonly created by the
 .Xr ar 1
@@ -342,12 +406,18 @@
 If it cannot locate and open the file on disk, libarchive
 will return an error for any attempt to read the entry
 body.
+.Ss LHA
+XXX Information about libarchive's LHA support XXX
+.Ss CAB
+XXX Information about libarchive's CAB support XXX
+.Ss XAR
+XXX Information about libarchive's XAR support XXX
 .Ss RAR
-libarchive has limited support to read files in RAR format. Currently,
-libarchive can read single RAR files in RARv3 format which have been either
-created uncompressed, or compressed using any of the compression methods
-supported by the RARv3 format. libarchive can also extract RAR files which=
 have
-been created as self-extracting RAR files.
+Libarchive has limited support for reading RAR format archives.
+Currently, libarchive can read RARv3 format archives
+which have been either created uncompressed, or compressed using
+any of the compression methods supported by the RARv3 format.
+Libarchive can also read self-extracting RAR archives.
 .Sh SEE ALSO
 .Xr ar 1 ,
 .Xr cpio 1 ,
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/lib=
archive.3
--- a/head/contrib/libarchive/libarchive/libarchive.3	Mon Jul 30 11:44:18 2=
012 +0300
+++ b/head/contrib/libarchive/libarchive/libarchive.3	Fri Aug 10 14:19:25 2=
012 +0300
@@ -22,16 +22,14 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\" $FreeBSD: head/contrib/libarchive/libarchive/libarchive.3 232153 2012-=
02-25 10:58:02Z mm $
+.\" $FreeBSD: head/contrib/libarchive/libarchive/libarchive.3 238856 2012-=
07-28 06:38:44Z mm $
 .\"
-.Dd February 6, 2010
+.Dd March 18, 2012
 .Dt LIBARCHIVE 3
 .Os
 .Sh NAME
 .Nm libarchive
 .Nd functions for reading and writing streaming archives
-.Sh LIBRARY
-.Lb libarchive
 .Sh OVERVIEW
 The
 .Nm
@@ -66,15 +64,33 @@
 .It
 ISO9660 CD images (including RockRidge and Joliet extensions),
 .It
-Zip archives.
+Zip archives,
+.It
+ar archives (including GNU/SysV and BSD extensions),
+.It
+Microsoft CAB archives,
+.It
+LHA archives,
+.It
+mtree file tree descriptions,
+.It
+RAR archives,
+.It
+XAR archives.
 .El
 The library automatically detects archives compressed with
 .Xr gzip 1 ,
 .Xr bzip2 1 ,
 .Xr xz 1 ,
+.Xr lzip 1 ,
 or
 .Xr compress 1
 and decompresses them transparently.
+It can similarly detect and decode archives processed with
+.Xr uuencode 1
+or which have an
+.Xr rpm 1
+header.
 .Pp
 When writing an archive, you can specify the compression
 to be used and the format to use.
@@ -93,7 +109,17 @@
 .It
 Zip archive,
 .It
-two different variants of shar archives.
+two different variants of shar archives,
+.It
+ISO9660 CD images,
+.It
+7-Zip archives,
+.It
+ar archives,
+.It
+mtree file tree descriptions,
+.It
+XAR archives.
 .El
 Pax interchange format is an extension of the tar archive format that
 eliminates essentially all of the limitations of historic tar formats
@@ -145,9 +171,21 @@
 .Sh READING ENTRIES FROM DISK
 The
 .Xr archive_read_disk 3
-provides some support for populating
+supports for populating
 .Xr archive_entry 3
 objects from information in the filesystem.
+This includes the information accessible from the
+.Xr stat 2
+system call as well as ACLs, extended attributes,
+and other metadata.
+The
+.Xr archive_read_disk 3
+API also supports iterating over directory trees,
+which allows directories of files to be read using
+an API compatible with
+the
+.Xr archive_read 3
+API.
 .Sh DESCRIPTION
 Detailed descriptions of each function are provided by the
 corresponding manual pages.
@@ -227,7 +265,7 @@
 .An -nosplit
 The
 .Nm libarchive
-library was written by
+library was originally written by
 .An Tim Kientzle Aq kientzle at acm.org .
 .Sh BUGS
 Some archive formats support information that is not supported by
@@ -244,13 +282,8 @@
 For example, cpio formats do not support nanosecond timestamps;
 old tar formats do not support large device numbers.
 .Pp
-The
-.Xr archive_read_disk 3
-API should support iterating over filesystems;
-that would make it possible to share code among
-disk-to-archive, archive-to-archive, archive-to-disk,
-and disk-to-disk operations.
-Currently, it only supports reading the
-information for a single file.
-(Which is still quite useful, as it hides a lot
-of system-specific details.)
+The ISO9660 reader cannot yet read all ISO9660 images;
+it should learn how to seek.
+.Pp
+The AR writer requires the client program to use
+two passes, unlike all other libarchive writers.
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/lib=
archive_changes.3
--- a/head/contrib/libarchive/libarchive/libarchive_changes.3	Mon Jul 30 11=
:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/libarchive_changes.3	Fri Aug 10 14=
:19:25 2012 +0300
@@ -24,7 +24,7 @@
 .\"
 .\" $FreeBSD$
 .\"
-.Dd March 27, 2011
+.Dd December 23, 2011
 .Dt LIBARCHIVE_CHANGES 3
 .Os
 .Sh NAME
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/lib=
archive_internals.3
--- a/head/contrib/libarchive/libarchive/libarchive_internals.3	Mon Jul 30 =
11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/libarchive_internals.3	Fri Aug 10 =
14:19:25 2012 +0300
@@ -22,10 +22,10 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\" $FreeBSD: head/contrib/libarchive/libarchive/libarchive_internals.3 23=
2153 2012-02-25 10:58:02Z mm $
+.\" $FreeBSD: head/contrib/libarchive/libarchive/libarchive_internals.3 23=
8856 2012-07-28 06:38:44Z mm $
 .\"
-.Dd April 16, 2007
-.Dt LIBARCHIVE 3
+.Dd January 26, 2011
+.Dt LIBARCHIVE_INTERNALS 3
 .Os
 .Sh NAME
 .Nm libarchive_internals
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/tar=
.5
--- a/head/contrib/libarchive/libarchive/tar.5	Mon Jul 30 11:44:18 2012 +03=
00
+++ b/head/contrib/libarchive/libarchive/tar.5	Fri Aug 10 14:19:25 2012 +03=
00
@@ -22,9 +22,9 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\" $FreeBSD: head/contrib/libarchive/libarchive/tar.5 232153 2012-02-25 1=
0:58:02Z mm $
+.\" $FreeBSD: head/contrib/libarchive/libarchive/tar.5 238856 2012-07-28 0=
6:38:44Z mm $
 .\"
-.Dd December 27, 2009
+.Dd December 23, 2011
 .Dt TAR 5
 .Os
 .Sh NAME
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/tes=
t/main.c
--- a/head/contrib/libarchive/libarchive/test/main.c	Mon Jul 30 11:44:18 20=
12 +0300
+++ b/head/contrib/libarchive/libarchive/test/main.c	Fri Aug 10 14:19:25 20=
12 +0300
@@ -24,6 +24,9 @@
  */
=20
 #include "test.h"
+#ifdef HAVE_SYS_IOCTL_H
+#include <sys/ioctl.h>
+#endif
 #ifdef HAVE_SYS_TIME_H
 #include <sys/time.h>
 #endif
@@ -31,6 +34,16 @@
 #ifdef HAVE_ICONV_H
 #include <iconv.h>
 #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 <linux/ext2_fs.h>      /* for Linux file flags */
+#endif
+#if defined(HAVE_EXT2FS_EXT2_FS_H) && !defined(__CYGWIN__)
+#include <ext2fs/ext2_fs.h>     /* Linux file flags, broken on Cygwin */
+#endif
 #include <limits.h>
 #include <locale.h>
 #ifdef HAVE_SIGNAL_H
@@ -46,7 +59,7 @@
  * TODO: Move this into a separate configuration header, have all test
  * suites share one copy of this file.
  */
-__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/test/main.c 232153 =
2012-02-25 10:58:02Z mm $");
+__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/test/main.c 238856 =
2012-07-28 06:38:44Z mm $");
 #define KNOWNREF	"test_compat_gtar_1.tar.uu"
 #define	ENVBASE "LIBARCHIVE" /* Prefix for environment variables. */
 #undef	PROGRAM              /* Testing a library, not a program. */
@@ -114,7 +127,14 @@
 #endif
=20
 #if defined(_WIN32) && !defined(__CYGWIN__)
-void *GetFunctionKernel32(const char *name)
+static void	*GetFunctionKernel32(const char *);
+static int	 my_CreateSymbolicLinkA(const char *, const char *, int);
+static int	 my_CreateHardLinkA(const char *, const char *);
+static int	 my_GetFileInformationByName(const char *,
+		     BY_HANDLE_FILE_INFORMATION *);
+
+static void *
+GetFunctionKernel32(const char *name)
 {
 	static HINSTANCE lib;
 	static int set;
@@ -153,7 +173,7 @@
 	return f =3D=3D NULL ? 0 : (*f)(linkname, target, NULL);
 }
=20
-int
+static int
 my_GetFileInformationByName(const char *path, BY_HANDLE_FILE_INFORMATION *=
bhfi)
 {
 	HANDLE h;
@@ -1505,7 +1525,7 @@
 /* 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)
+    const char *path, int mode, int csize, const void *contents)
 {
 #if defined(_WIN32) && !defined(__CYGWIN__)
 	/* TODO: Rework this to set file mode as well. */
@@ -1519,8 +1539,13 @@
 		return (0);
 	}
 	if (contents !=3D NULL) {
-		if (strlen(contents)
-		    !=3D fwrite(contents, 1, strlen(contents), f)) {
+		size_t wsize;
+
+		if (csize < 0)
+			wsize =3D strlen(contents);
+		else
+			wsize =3D (size_t)csize;
+		if (wsize !=3D fwrite(contents, 1, wsize, f)) {
 			fclose(f);
 			failure_start(file, line,
 			    "Could not write file %s", path);
@@ -1540,10 +1565,16 @@
 		return (0);
 	}
 	if (contents !=3D NULL) {
-		if ((ssize_t)strlen(contents)
-		    !=3D write(fd, contents, strlen(contents))) {
+		ssize_t wsize;
+
+		if (csize < 0)
+			wsize =3D (ssize_t)strlen(contents);
+		else
+			wsize =3D (ssize_t)csize;
+		if (wsize !=3D write(fd, contents, wsize)) {
 			close(fd);
-			failure_start(file, line, "Could not write to %s", path);
+			failure_start(file, line,
+			    "Could not write to %s", path);
 			failure_finish(NULL);
 			return (0);
 		}
@@ -1714,6 +1745,52 @@
 #endif /* defined(_WIN32) && !defined(__CYGWIN__) */
 }
=20
+/* Set nodump, report failures. */
+int
+assertion_nodump(const char *file, int line, const char *pathname)
+{
+#if defined(HAVE_STRUCT_STAT_ST_FLAGS) && defined(UF_NODUMP)
+	int r;
+
+	assertion_count(file, line);
+	r =3D chflags(pathname, UF_NODUMP);
+	if (r < 0) {
+		failure_start(file, line, "Can't set nodump %s\n", pathname);
+		failure_finish(NULL);
+		return (0);
+	}
+#elif defined(EXT2_IOC_GETFLAGS) && defined(HAVE_WORKING_EXT2_IOC_GETFLAGS=
)\
+	 && defined(EXT2_NODUMP_FL)
+	int fd, r, flags;
+
+	assertion_count(file, line);
+	fd =3D open(pathname, O_RDONLY | O_NONBLOCK);
+	if (fd < 0) {
+		failure_start(file, line, "Can't open %s\n", pathname);
+		failure_finish(NULL);
+		return (0);
+	}
+	r =3D ioctl(fd, EXT2_IOC_GETFLAGS, &flags);
+	if (r < 0) {
+		failure_start(file, line, "Can't get flags %s\n", pathname);
+		failure_finish(NULL);
+		return (0);
+	}
+	flags |=3D EXT2_NODUMP_FL;
+	r =3D ioctl(fd, EXT2_IOC_SETFLAGS, &flags);
+	if (r < 0) {
+		failure_start(file, line, "Can't set nodump %s\n", pathname);
+		failure_finish(NULL);
+		return (0);
+	}
+	close(fd);
+#else
+	(void)pathname; /* UNUSED */
+	assertion_count(file, line);
+#endif
+	return (1);
+}
+
 /*
  *
  *  UTILITIES for use by tests.
@@ -1742,7 +1819,7 @@
 		return (value);
=20
 	++tested;
-	assertion_make_file(__FILE__, __LINE__, "canSymlink.0", 0644, "a");
+	assertion_make_file(__FILE__, __LINE__, "canSymlink.0", 0644, 1, "a");
 	/* Note: Cygwin has its own symlink() emulation that does not
 	 * use the Win32 CreateSymbolicLink() function. */
 #if defined(_WIN32) && !defined(__CYGWIN__)
@@ -1792,6 +1869,70 @@
 }
=20
 /*
+ * Can this filesystem handle nodump flags.
+ */
+#if defined(HAVE_STRUCT_STAT_ST_FLAGS) && defined(UF_NODUMP)
+
+int
+canNodump(void)
+{
+	const char *path =3D "cannodumptest";
+	struct stat sb;
+
+	assertion_make_file(__FILE__, __LINE__, path, 0644, 0, NULL);
+	if (chflags(path, UF_NODUMP) < 0)
+		return (0);
+	if (stat(path, &sb) < 0)
+		return (0);
+	if (sb.st_flags & UF_NODUMP)
+		return (1);
+	return (0);
+}
+
+#elif defined(EXT2_IOC_GETFLAGS) && defined(HAVE_WORKING_EXT2_IOC_GETFLAGS=
)\
+	 && defined(EXT2_NODUMP_FL)
+
+int
+canNodump(void)
+{
+	const char *path =3D "cannodumptest";
+	int fd, r, flags;
+
+	assertion_make_file(__FILE__, __LINE__, path, 0644, 0, NULL);
+	fd =3D open(path, O_RDONLY | O_NONBLOCK);
+	if (fd < 0)
+		return (0);
+	r =3D ioctl(fd, EXT2_IOC_GETFLAGS, &flags);
+	if (r < 0)
+		return (0);
+	flags |=3D EXT2_NODUMP_FL;
+	r =3D ioctl(fd, EXT2_IOC_SETFLAGS, &flags);
+	if (r < 0)
+		return (0);
+	close(fd);
+	fd =3D open(path, O_RDONLY | O_NONBLOCK);
+	if (fd < 0)
+		return (0);
+	r =3D ioctl(fd, EXT2_IOC_GETFLAGS, &flags);
+	if (r < 0)
+		return (0);
+	close(fd);
+	if (flags & EXT2_NODUMP_FL)
+		return (1);
+	return (0);
+}
+
+#else
+
+int
+canNodump()
+{
+	return (0);
+}
+
+#endif
+
+/*
  * 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.
@@ -2234,17 +2375,77 @@
 	return strdup(buff);
 }
=20
+static int
+get_test_set(int *test_set, int limit, const char *test)
+{
+	int start, end;
+	int idx =3D 0;
+
+	if (test =3D=3D NULL) {
+		/* Default: Run all tests. */
+		for (;idx < limit; idx++)
+			test_set[idx] =3D idx;
+		return (limit);
+	}
+	if (*test >=3D '0' && *test <=3D '9') {
+		const char *vp =3D test;
+		start =3D 0;
+		while (*vp >=3D '0' && *vp <=3D '9') {
+			start *=3D 10;
+			start +=3D *vp - '0';
+			++vp;
+		}
+		if (*vp =3D=3D '\0') {
+			end =3D start;
+		} else if (*vp =3D=3D '-') {
+			++vp;
+			if (*vp =3D=3D '\0') {
+				end =3D limit - 1;
+			} else {
+				end =3D 0;
+				while (*vp >=3D '0' && *vp <=3D '9') {
+					end *=3D 10;
+					end +=3D *vp - '0';
+					++vp;
+				}
+			}
+		} else
+			return (-1);
+		if (start < 0 || end >=3D limit || start > end)
+			return (-1);
+		while (start <=3D end)
+			test_set[idx++] =3D start++;
+	} else {
+		size_t len =3D strlen(test);
+		for (start =3D 0; start < limit; ++start) {
+			const char *name =3D tests[start].name;
+			const char *p;
+
+			while ((p =3D strchr(name, test[0])) !=3D NULL) {
+				if (strncmp(p, test, len) =3D=3D 0) {
+					test_set[idx++] =3D start;
+					break;
+				} else
+					name =3D p + 1;
+			}
+
+		}
+	}
+	return ((idx =3D=3D 0)?-1:idx);
+}
+
 int
 main(int argc, char **argv)
 {
 	static const int limit =3D sizeof(tests) / sizeof(tests[0]);
-	int i =3D 0, j =3D 0, start, end, tests_run =3D 0, tests_failed =3D 0, op=
tion;
+	int test_set[sizeof(tests) / sizeof(tests[0])];
+	int i =3D 0, j =3D 0, tests_run =3D 0, tests_failed =3D 0, option;
 	time_t now;
 	char *refdir_alloc =3D NULL;
 	const char *progname;
 	char **saved_argv;
 	const char *tmp, *option_arg, *p;
-	char tmpdir[256], *pwd, *testprogdir, *tmp2 =3D NULL;
+	char tmpdir[256], *pwd, *testprogdir, *tmp2 =3D NULL, *vlevel =3D NULL;
 	char tmpdir_timestamp[256];
=20
 	(void)argc; /* UNUSED */
@@ -2330,6 +2531,19 @@
 	if (getenv(ENVBASE "_DEBUG") !=3D NULL)
 		dump_on_failure =3D 1;
=20
+	/* Allow -v to be controlled through the environment. */
+	if (getenv("_VERBOSITY_LEVEL") !=3D NULL)
+	{
+		vlevel =3D getenv("_VERBOSITY_LEVEL");
+		verbosity =3D atoi(vlevel);
+		if (verbosity < VERBOSITY_SUMMARY_ONLY || verbosity > VERBOSITY_FULL)
+		{
+			/* Unsupported verbosity levels are silently ignored */
+			vlevel =3D NULL;
+			verbosity =3D VERBOSITY_PASSFAIL;
+		}
+	}
+
 	/* Get the directory holding test files from environment. */
 	refdir =3D getenv(ENVBASE "_TEST_FILES");
=20
@@ -2377,7 +2591,8 @@
 #endif
 				break;
 			case 'q':
-				verbosity--;
+				if (!vlevel)
+					verbosity--;
 				break;
 			case 'r':
 				refdir =3D option_arg;
@@ -2386,7 +2601,8 @@
 				until_failure++;
 				break;
 			case 'v':
-				verbosity++;
+				if (!vlevel)
+					verbosity++;
 				break;
 			default:
 				fprintf(stderr, "Unrecognized option '%c'\n",
@@ -2499,78 +2715,27 @@
 	saved_argv =3D argv;
 	do {
 		argv =3D saved_argv;
-		if (*argv =3D=3D NULL) {
-			/* Default: Run all tests. */
-			for (i =3D 0; i < limit; i++) {
+		do {
+			int test_num;
+
+			test_num =3D get_test_set(test_set, limit, *argv);
+			if (test_num < 0) {
+				printf("*** INVALID Test %s\n", *argv);
+				free(refdir_alloc);
+				usage(progname);
+				return (1);
+			}
+			for (i =3D 0; i < test_num; i++) {
 				tests_run++;
-				if (test_run(i, tmpdir)) {
+				if (test_run(test_set[i], tmpdir)) {
 					tests_failed++;
 					if (until_failure)
 						goto finish;
 				}
 			}
-		} else {
-			while (*(argv) !=3D NULL) {
-				if (**argv >=3D '0' && **argv <=3D '9') {
-					char *vp =3D *argv;
-					start =3D 0;
-					while (*vp >=3D '0' && *vp <=3D '9') {
-						start *=3D 10;
-						start +=3D *vp - '0';
-						++vp;
-					}
-					if (*vp =3D=3D '\0') {
-						end =3D start;
-					} else if (*vp =3D=3D '-') {
-						++vp;
-						if (*vp =3D=3D '\0') {
-							end =3D limit - 1;
-						} else {
-							end =3D 0;
-							while (*vp >=3D '0' && *vp <=3D '9') {
-								end *=3D 10;
-								end +=3D *vp - '0';
-								++vp;
-							}
-						}
-					} else {
-						printf("*** INVALID Test %s\n", *argv);
-						free(refdir_alloc);
-						usage(progname);
-						return (1);
-					}
-					if (start < 0 || end >=3D limit || start > end) {
-						printf("*** INVALID Test %s\n", *argv);
-						free(refdir_alloc);
-						usage(progname);
-						return (1);
-					}
-				} else {
-					for (start =3D 0; start < limit; ++start) {
-						if (strcmp(*argv, tests[start].name) =3D=3D 0)
-							break;
-					}
-					end =3D start;
-					if (start >=3D limit) {
-						printf("*** INVALID Test ``%s''\n",
-						    *argv);
-						free(refdir_alloc);
-						usage(progname);
-						/* usage() never returns */
-					}
-				}
-				while (start <=3D end) {
-					tests_run++;
-					if (test_run(start, tmpdir)) {
-						tests_failed++;
-						if (until_failure)
-							goto finish;
-					}
-					++start;
-				}
+			if (*argv !=3D NULL)
 				argv++;
-			}
-		}
+		} while (*argv !=3D NULL);
 	} while (until_failure);
=20
 finish:
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/tes=
t/read_open_memory.c
--- a/head/contrib/libarchive/libarchive/test/read_open_memory.c	Mon Jul 30=
 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/test/read_open_memory.c	Fri Aug 10=
 14:19:25 2012 +0300
@@ -24,7 +24,7 @@
  */
=20
 #include "test.h"
-__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/test/read_open_memo=
ry.c 232153 2012-02-25 10:58:02Z mm $");
+__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/test/read_open_memo=
ry.c 238856 2012-07-28 06:38:44Z mm $");
=20
 #include <errno.h>
 #include <stdlib.h>
@@ -68,7 +68,7 @@
  * that internals work correctly with just the minimal entry points.
  */
 int
-read_open_memory2(struct archive *a, void *buff, size_t size, size_t read_=
size)
+read_open_memory_minimal(struct archive *a, void *buff, size_t size, size_=
t read_size)
 {
 	return read_open_memory_internal(a, buff, size, read_size, 1);
 }
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/tes=
t/test.h
--- a/head/contrib/libarchive/libarchive/test/test.h	Mon Jul 30 11:44:18 20=
12 +0300
+++ b/head/contrib/libarchive/libarchive/test/test.h	Fri Aug 10 14:19:25 20=
12 +0300
@@ -22,7 +22,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.
  *
- * $FreeBSD: head/contrib/libarchive/libarchive/test/test.h 232153 2012-02=
-25 10:58:02Z mm $
+ * $FreeBSD: head/contrib/libarchive/libarchive/test/test.h 238856 2012-07=
-28 06:38:44Z mm $
  */
=20
 /* Every test program should #include "test.h" as the first thing. */
@@ -194,11 +194,15 @@
 #define assertMakeDir(dirname, mode)	\
   assertion_make_dir(__FILE__, __LINE__, dirname, mode)
 #define assertMakeFile(path, mode, contents) \
-  assertion_make_file(__FILE__, __LINE__, path, mode, contents)
+  assertion_make_file(__FILE__, __LINE__, path, mode, -1, contents)
+#define assertMakeBinFile(path, mode, csize, contents) \
+  assertion_make_file(__FILE__, __LINE__, path, mode, csize, contents)
 #define assertMakeHardlink(newfile, oldfile)	\
   assertion_make_hardlink(__FILE__, __LINE__, newfile, oldfile)
 #define assertMakeSymlink(newfile, linkto)	\
   assertion_make_symlink(__FILE__, __LINE__, newfile, linkto)
+#define assertNodump(path)	\
+  assertion_nodump(__FILE__, __LINE__, path)
 #define assertUmask(mask)	\
   assertion_umask(__FILE__, __LINE__, mask)
 #define assertUtimes(pathname, atime, atime_nsec, mtime, mtime_nsec)	\
@@ -241,9 +245,10 @@
 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_file(const char *, int, const char *, int, int, const v=
oid *);
 int assertion_make_hardlink(const char *, int, const char *newpath, const =
char *);
 int assertion_make_symlink(const char *, int, const char *newpath, const c=
har *);
+int assertion_nodump(const char *, int, const char *);
 int assertion_non_empty_file(const char *, int, const char *);
 int assertion_text_file_contents(const char *, int, const char *buff, cons=
t char *f);
 int assertion_umask(const char *, int, int);
@@ -267,6 +272,9 @@
 /* Return true if this platform can run the "gunzip" program. */
 int canGunzip(void);
=20
+/* Return true if this filesystem can handle nodump flags. */
+int canNodump(void);
+
 /* Return true if the file has large i-node number(>0xffffffff). */
 int is_LargeInode(const char *);
=20
@@ -289,8 +297,8 @@
=20
 /* Special customized read-from-memory interface. */
 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);
+/* _minimal version exercises a slightly different set of libarchive APIs.=
 */
+int read_open_memory_minimal(struct archive *, void *, size_t, size_t);
 /* _seek version produces a seekable file. */
 int read_open_memory_seek(struct archive *, void *, size_t, size_t);
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/tes=
t/test_acl_freebsd_nfs4.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/head/contrib/libarchive/libarchive/test/test_acl_freebsd_nfs4.c	Fri A=
ug 10 14:19:25 2012 +0300
@@ -0,0 +1,1094 @@
+/*-
+ * Copyright (c) 2003-2010 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 WARRANTI=
ES
+ * 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 US=
E,
+ * 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$");
+
+#if defined(__FreeBSD__) && __FreeBSD__ >=3D 8
+#define _ACL_PRIVATE
+#include <sys/acl.h>
+
+struct myacl_t {
+	int type;
+	int permset;
+	int tag;
+	int qual; /* GID or UID of user/group, depending on tag. */
+	const char *name; /* Name of user/group, depending on tag. */
+};
+
+static struct myacl_t acls_reg[] =3D {
+	/* For this test, we need the file owner to be able to read and write the=
 ACL. */
+	{ ARCHIVE_ENTRY_ACL_TYPE_ALLOW,
+	  ARCHIVE_ENTRY_ACL_READ_DATA | ARCHIVE_ENTRY_ACL_READ_ACL | ARCHIVE_ENTR=
Y_ACL_WRITE_ACL | ARCHIVE_ENTRY_ACL_READ_NAMED_ATTRS | ARCHIVE_ENTRY_ACL_RE=
AD_ATTRIBUTES,
+	  ARCHIVE_ENTRY_ACL_USER_OBJ, -1, ""},
+
+	/* An entry for each type. */
+	{ ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_EXECUTE,
+	  ARCHIVE_ENTRY_ACL_USER, 108, "user108" },
+	{ ARCHIVE_ENTRY_ACL_TYPE_DENY, ARCHIVE_ENTRY_ACL_EXECUTE,
+	  ARCHIVE_ENTRY_ACL_USER, 109, "user109" },
+
+	/* An entry for each permission. */
+	{ ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_EXECUTE,
+	  ARCHIVE_ENTRY_ACL_USER, 112, "user112" },
+	{ ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_READ_DATA,
+	  ARCHIVE_ENTRY_ACL_USER, 113, "user113" },
+	{ ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_WRITE_DATA,
+	  ARCHIVE_ENTRY_ACL_USER, 115, "user115" },
+	{ ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_APPEND_DATA,
+	  ARCHIVE_ENTRY_ACL_USER, 117, "user117" },
+	{ ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_READ_NAMED_ATTRS,
+	  ARCHIVE_ENTRY_ACL_USER, 119, "user119" },
+	{ ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_WRITE_NAMED_ATTRS,
+	  ARCHIVE_ENTRY_ACL_USER, 120, "user120" },
+	{ ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_READ_ATTRIBUTES,
+	  ARCHIVE_ENTRY_ACL_USER, 122, "user122" },
+	{ ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_WRITE_ATTRIBUTES,
+	  ARCHIVE_ENTRY_ACL_USER, 123, "user123" },
+	{ ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_DELETE,
+	  ARCHIVE_ENTRY_ACL_USER, 124, "user124" },
+	{ ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_READ_ACL,
+	  ARCHIVE_ENTRY_ACL_USER, 125, "user125" },
+	{ ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_WRITE_ACL,
+	  ARCHIVE_ENTRY_ACL_USER, 126, "user126" },
+	{ ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_WRITE_OWNER,
+	  ARCHIVE_ENTRY_ACL_USER, 127, "user127" },
+	{ ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_SYNCHRONIZE,
+	  ARCHIVE_ENTRY_ACL_USER, 128, "user128" },
+
+	/* One entry for each qualifier. */
+	{ ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_EXECUTE,
+	  ARCHIVE_ENTRY_ACL_USER, 135, "user135" },
+//	{ ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_EXECUTE,
+//	  ARCHIVE_ENTRY_ACL_USER_OBJ, -1, "" },
+	{ ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_EXECUTE,
+	  ARCHIVE_ENTRY_ACL_GROUP, 136, "group136" },
+	{ ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_EXECUTE,
+	  ARCHIVE_ENTRY_ACL_GROUP_OBJ, -1, "" },
+	{ ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_EXECUTE,
+	  ARCHIVE_ENTRY_ACL_EVERYONE, -1, "" }
+};
+
+
+static struct myacl_t acls_dir[] =3D {
+	/* For this test, we need to be able to read and write the ACL. */
+	{ ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_READ_ACL,
+	  ARCHIVE_ENTRY_ACL_USER_OBJ, -1, ""},
+
+	/* An entry for each type. */
+	{ ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_LIST_DIRECTORY,
+	  ARCHIVE_ENTRY_ACL_USER, 101, "user101" },
+	{ ARCHIVE_ENTRY_ACL_TYPE_DENY, ARCHIVE_ENTRY_ACL_LIST_DIRECTORY,
+	  ARCHIVE_ENTRY_ACL_USER, 102, "user102" },
+
+	/* An entry for each permission. */
+	{ ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_LIST_DIRECTORY,
+	  ARCHIVE_ENTRY_ACL_USER, 201, "user201" },
+	{ ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_ADD_FILE,
+	  ARCHIVE_ENTRY_ACL_USER, 202, "user202" },
+	{ ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_ADD_SUBDIRECTORY,
+	  ARCHIVE_ENTRY_ACL_USER, 203, "user203" },
+	{ ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_READ_NAMED_ATTRS,
+	  ARCHIVE_ENTRY_ACL_USER, 204, "user204" },
+	{ ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_WRITE_NAMED_ATTRS,
+	  ARCHIVE_ENTRY_ACL_USER, 205, "user205" },
+	{ ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_DELETE_CHILD,
+	  ARCHIVE_ENTRY_ACL_USER, 206, "user206" },
+	{ ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_READ_ATTRIBUTES,
+	  ARCHIVE_ENTRY_ACL_USER, 207, "user207" },
+	{ ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_WRITE_ATTRIBUTES,
+	  ARCHIVE_ENTRY_ACL_USER, 208, "user208" },
+	{ ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_DELETE,
+	  ARCHIVE_ENTRY_ACL_USER, 209, "user209" },
+	{ ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_READ_ACL,
+	  ARCHIVE_ENTRY_ACL_USER, 210, "user210" },
+	{ ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_WRITE_ACL,
+	  ARCHIVE_ENTRY_ACL_USER, 211, "user211" },
+	{ ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_WRITE_OWNER,
+	  ARCHIVE_ENTRY_ACL_USER, 212, "user212" },
+	{ ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_SYNCHRONIZE,
+	  ARCHIVE_ENTRY_ACL_USER, 213, "user213" },
+
+	/* One entry with each inheritance value. */
+	{ ARCHIVE_ENTRY_ACL_TYPE_ALLOW,
+	  ARCHIVE_ENTRY_ACL_READ_DATA | ARCHIVE_ENTRY_ACL_ENTRY_FILE_INHERIT,
+	  ARCHIVE_ENTRY_ACL_USER, 301, "user301" },
+	{ ARCHIVE_ENTRY_ACL_TYPE_ALLOW,
+	  ARCHIVE_ENTRY_ACL_READ_DATA | ARCHIVE_ENTRY_ACL_ENTRY_DIRECTORY_INHERIT,
+	  ARCHIVE_ENTRY_ACL_USER, 302, "user302" },
+#if 0
+	{ ARCHIVE_ENTRY_ACL_TYPE_ALLOW,
+	  ARCHIVE_ENTRY_ACL_READ_DATA | ARCHIVE_ENTRY_ACL_ENTRY_NO_PROPAGATE_INHE=
RIT,
+	  ARCHIVE_ENTRY_ACL_USER, 303, "user303" },
+	{ ARCHIVE_ENTRY_ACL_TYPE_ALLOW,
+	  ARCHIVE_ENTRY_ACL_READ_DATA | ARCHIVE_ENTRY_ACL_ENTRY_INHERIT_ONLY,
+	  ARCHIVE_ENTRY_ACL_USER, 304, "user304" },
+#endif
+
+#if 0
+	/* FreeBSD does not support audit entries. */
+	{ ARCHIVE_ENTRY_ACL_TYPE_AUDIT,
+	  ARCHIVE_ENTRY_ACL_READ_DATA | ARCHIVE_ENTRY_ACL_ENTRY_SUCCESSFUL_ACCESS,
+	  ARCHIVE_ENTRY_ACL_USER, 401, "user401" },
+	{ ARCHIVE_ENTRY_ACL_TYPE_AUDIT,
+	  ARCHIVE_ENTRY_ACL_READ_DATA | ARCHIVE_ENTRY_ACL_ENTRY_FAILED_ACCESS,
+	  ARCHIVE_ENTRY_ACL_USER, 402, "user402" },
+#endif
+
+	/* One entry for each qualifier. */
+	{ ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_LIST_DIRECTORY,
+	  ARCHIVE_ENTRY_ACL_USER, 501, "user501" },
+	{ ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_LIST_DIRECTORY,
+	  ARCHIVE_ENTRY_ACL_GROUP, 502, "group502" },
+	{ ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_LIST_DIRECTORY,
+	  ARCHIVE_ENTRY_ACL_GROUP_OBJ, -1, "" },
+	{ ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_LIST_DIRECTORY,
+	  ARCHIVE_ENTRY_ACL_EVERYONE, -1, "" }
+};
+
+static void
+set_acls(struct archive_entry *ae, struct myacl_t *acls, int start, int en=
d)
+{
+	int i;
+
+	archive_entry_acl_clear(ae);
+	if (start > 0) {
+		assertEqualInt(ARCHIVE_OK,
+			archive_entry_acl_add_entry(ae,
+			    acls[0].type, acls[0].permset, acls[0].tag,
+			    acls[0].qual, acls[0].name));
+	}
+	for (i =3D start; i < end; i++) {
+		assertEqualInt(ARCHIVE_OK,
+		    archive_entry_acl_add_entry(ae,
+			acls[i].type, acls[i].permset, acls[i].tag,
+			acls[i].qual, acls[i].name));
+	}
+}
+
+static int
+acl_permset_to_bitmap(acl_permset_t opaque_ps)
+{
+	static struct { int machine; int portable; } perms[] =3D {
+		{ACL_EXECUTE, ARCHIVE_ENTRY_ACL_EXECUTE},
+		{ACL_WRITE, ARCHIVE_ENTRY_ACL_WRITE},
+		{ACL_READ, ARCHIVE_ENTRY_ACL_READ},
+		{ACL_READ_DATA, ARCHIVE_ENTRY_ACL_READ_DATA},
+		{ACL_LIST_DIRECTORY, ARCHIVE_ENTRY_ACL_LIST_DIRECTORY},
+		{ACL_WRITE_DATA, ARCHIVE_ENTRY_ACL_WRITE_DATA},
+		{ACL_ADD_FILE, ARCHIVE_ENTRY_ACL_ADD_FILE},
+		{ACL_APPEND_DATA, ARCHIVE_ENTRY_ACL_APPEND_DATA},
+		{ACL_ADD_SUBDIRECTORY, ARCHIVE_ENTRY_ACL_ADD_SUBDIRECTORY},
+		{ACL_READ_NAMED_ATTRS, ARCHIVE_ENTRY_ACL_READ_NAMED_ATTRS},
+		{ACL_WRITE_NAMED_ATTRS, ARCHIVE_ENTRY_ACL_WRITE_NAMED_ATTRS},
+		{ACL_DELETE_CHILD, ARCHIVE_ENTRY_ACL_DELETE_CHILD},
+		{ACL_READ_ATTRIBUTES, ARCHIVE_ENTRY_ACL_READ_ATTRIBUTES},
+		{ACL_WRITE_ATTRIBUTES, ARCHIVE_ENTRY_ACL_WRITE_ATTRIBUTES},
+		{ACL_DELETE, ARCHIVE_ENTRY_ACL_DELETE},
+		{ACL_READ_ACL, ARCHIVE_ENTRY_ACL_READ_ACL},
+		{ACL_WRITE_ACL, ARCHIVE_ENTRY_ACL_WRITE_ACL},
+		{ACL_WRITE_OWNER, ARCHIVE_ENTRY_ACL_WRITE_OWNER},
+		{ACL_SYNCHRONIZE, ARCHIVE_ENTRY_ACL_SYNCHRONIZE}
+	};
+	int i, permset =3D 0;
+
+	for (i =3D 0; i < (int)(sizeof(perms)/sizeof(perms[0])); ++i)
+		if (acl_get_perm_np(opaque_ps, perms[i].machine))
+			permset |=3D perms[i].portable;
+	return permset;
+}
+
+static int
+acl_flagset_to_bitmap(acl_flagset_t opaque_fs)
+{
+	static struct { int machine; int portable; } flags[] =3D {
+		{ACL_ENTRY_FILE_INHERIT, ARCHIVE_ENTRY_ACL_ENTRY_FILE_INHERIT},
+		{ACL_ENTRY_DIRECTORY_INHERIT, ARCHIVE_ENTRY_ACL_ENTRY_DIRECTORY_INHERIT},
+		{ACL_ENTRY_NO_PROPAGATE_INHERIT, ARCHIVE_ENTRY_ACL_ENTRY_NO_PROPAGATE_IN=
HERIT},
+		{ACL_ENTRY_INHERIT_ONLY, ARCHIVE_ENTRY_ACL_ENTRY_INHERIT_ONLY},
+	};
+	int i, flagset =3D 0;
+
+	for (i =3D 0; i < (int)(sizeof(flags)/sizeof(flags[0])); ++i)
+		if (acl_get_flag_np(opaque_fs, flags[i].machine))
+			flagset |=3D flags[i].portable;
+	return flagset;
+}
+
+static int
+acl_match(acl_entry_t aclent, struct myacl_t *myacl)
+{
+	gid_t g, *gp;
+	uid_t u, *up;
+	acl_tag_t tag_type;
+	acl_permset_t opaque_ps;
+	acl_flagset_t opaque_fs;
+	int perms;
+
+	acl_get_tag_type(aclent, &tag_type);
+
+	/* translate the silly opaque permset to a bitmap */
+	acl_get_permset(aclent, &opaque_ps);
+	acl_get_flagset_np(aclent, &opaque_fs);
+	perms =3D acl_permset_to_bitmap(opaque_ps) | acl_flagset_to_bitmap(opaque=
_fs);
+	if (perms !=3D myacl->permset)
+		return (0);
+
+	switch (tag_type) {
+	case ACL_USER_OBJ:
+		if (myacl->tag !=3D ARCHIVE_ENTRY_ACL_USER_OBJ) return (0);
+		break;
+	case ACL_USER:
+		if (myacl->tag !=3D ARCHIVE_ENTRY_ACL_USER)
+			return (0);
+		up =3D acl_get_qualifier(aclent);
+		u =3D *up;
+		acl_free(up);
+		if ((uid_t)myacl->qual !=3D u)
+			return (0);
+		break;
+	case ACL_GROUP_OBJ:
+		if (myacl->tag !=3D ARCHIVE_ENTRY_ACL_GROUP_OBJ) return (0);
+		break;
+	case ACL_GROUP:
+		if (myacl->tag !=3D ARCHIVE_ENTRY_ACL_GROUP)
+			return (0);
+		gp =3D acl_get_qualifier(aclent);
+		g =3D *gp;
+		acl_free(gp);
+		if ((gid_t)myacl->qual !=3D g)
+			return (0);
+		break;
+	case ACL_MASK:
+		if (myacl->tag !=3D ARCHIVE_ENTRY_ACL_MASK) return (0);
+		break;
+	case ACL_EVERYONE:
+		if (myacl->tag !=3D ARCHIVE_ENTRY_ACL_EVERYONE) return (0);
+		break;
+	}
+	return (1);
+}
+
+static void
+compare_acls(acl_t acl, struct myacl_t *myacls, const char *filename, int =
start, int end)
+{
+	int *marker;
+	int entry_id =3D ACL_FIRST_ENTRY;
+	int matched;
+	int i, n;
+	acl_entry_t acl_entry;
+
+	n =3D end - start;
+	marker =3D malloc(sizeof(marker[0]) * (n + 1));
+	for (i =3D 0; i < n; i++)
+		marker[i] =3D i + start;
+	/* Always include the first ACE. */
+	if (start > 0) {
+	  marker[n] =3D 0;
+	  ++n;
+	}
+
+	/*
+	 * Iterate over acls in system acl object, try to match each
+	 * one with an item in the myacls array.
+	 */
+	while (1 =3D=3D acl_get_entry(acl, entry_id, &acl_entry)) {
+		/* After the first time... */
+		entry_id =3D ACL_NEXT_ENTRY;
+
+		/* Search for a matching entry (tag and qualifier) */
+		for (i =3D 0, matched =3D 0; i < n && !matched; i++) {
+			if (acl_match(acl_entry, &myacls[marker[i]])) {
+				/* We found a match; remove it. */
+				marker[i] =3D marker[n - 1];
+				n--;
+				matched =3D 1;
+			}
+		}
+
+		failure("ACL entry on file %s that shouldn't be there", filename);
+		assert(matched =3D=3D 1);
+	}
+
+	/* Dump entries in the myacls array that weren't in the system acl. */
+	for (i =3D 0; i < n; ++i) {
+		failure(" ACL entry %d missing from %s: "
+		    "type=3D%d,permset=3D%x,tag=3D%d,qual=3D%d,name=3D``%s''\n",
+		    marker[i], filename,
+		    myacls[marker[i]].type, myacls[marker[i]].permset,
+		    myacls[marker[i]].tag, myacls[marker[i]].qual,
+		    myacls[marker[i]].name);
+		assert(0); /* Record this as a failure. */
+	}
+	free(marker);
+}
+
+static void
+compare_entry_acls(struct archive_entry *ae, struct myacl_t *myacls, const=
 char *filename, int start, int end)
+{
+	int *marker;
+	int matched;
+	int i, n;
+	int type, permset, tag, qual;
+	const char *name;
+
+	/* Count ACL entries in myacls array and allocate an indirect array. */
+	n =3D end - start;
+	marker =3D malloc(sizeof(marker[0]) * (n + 1));
+	for (i =3D 0; i < n; i++)
+		marker[i] =3D i + start;
+	/* Always include the first ACE. */
+	if (start > 0) {
+	  marker[n] =3D 0;
+	  ++n;
+	}
+
+	/*
+	 * Iterate over acls in entry, try to match each
+	 * one with an item in the myacls array.
+	 */
+	assertEqualInt(n, archive_entry_acl_reset(ae, ARCHIVE_ENTRY_ACL_TYPE_NFS4=
));
+	while (ARCHIVE_OK =3D=3D archive_entry_acl_next(ae,
+	    ARCHIVE_ENTRY_ACL_TYPE_NFS4, &type, &permset, &tag, &qual, &name)) {
+
+		/* Search for a matching entry (tag and qualifier) */
+		for (i =3D 0, matched =3D 0; i < n && !matched; i++) {
+			if (tag =3D=3D myacls[marker[i]].tag
+			    && qual =3D=3D myacls[marker[i]].qual
+			    && permset =3D=3D myacls[marker[i]].permset
+			    && type =3D=3D myacls[marker[i]].type) {
+				/* We found a match; remove it. */
+				marker[i] =3D marker[n - 1];
+				n--;
+				matched =3D 1;
+			}
+		}
+
+		failure("ACL entry on file that shouldn't be there: "
+			"type=3D%d,permset=3D%x,tag=3D%d,qual=3D%d",
+			type,permset,tag,qual);
+		assert(matched =3D=3D 1);
+	}
+
+	/* Dump entries in the myacls array that weren't in the system acl. */
+	for (i =3D 0; i < n; ++i) {
+		failure(" ACL entry %d missing from %s: "
+		    "type=3D%d,permset=3D%x,tag=3D%d,qual=3D%d,name=3D``%s''\n",
+		    marker[i], filename,
+		    myacls[marker[i]].type, myacls[marker[i]].permset,
+		    myacls[marker[i]].tag, myacls[marker[i]].qual,
+		    myacls[marker[i]].name);
+		assert(0); /* Record this as a failure. */
+	}
+	free(marker);
+}
+#endif
+
+/*
+ * Verify ACL restore-to-disk.  This test is FreeBSD-specific.
+ */
+
+DEFINE_TEST(test_acl_freebsd_nfs4)
+{
+#if !defined(__FreeBSD__)
+	skipping("FreeBSD-specific NFS4 ACL restore test");
+#elif __FreeBSD__ < 8
+	skipping("NFS4 ACLs supported only on FreeBSD 8.0 and later");
+#else
+	char buff[64];
+	struct stat st;
+	struct archive *a;
+	struct archive_entry *ae;
+	int i, n;
+	acl_t acl;
+
+	/*
+	 * First, do a quick manual set/read of ACL data to
+	 * verify that the local filesystem does support ACLs.
+	 * If it doesn't, we'll simply skip the remaining tests.
+	 */
+	acl =3D acl_from_text("owner@:rwxp::allow,group@:rwp:f:allow");
+	assert((void *)acl !=3D NULL);
+	/* Create a test dir and try to set an ACL on it. */
+	if (!assertMakeDir("pretest", 0755)) {
+		acl_free(acl);
+		return;
+	}
+
+	n =3D acl_set_file("pretest", ACL_TYPE_NFS4, acl);
+	acl_free(acl);
+	if (n !=3D 0 && errno =3D=3D EOPNOTSUPP) {
+		skipping("NFS4 ACL tests require that NFS4 ACLs"
+		    " be enabled on the filesystem");
+		return;
+	}
+	if (n !=3D 0 && errno =3D=3D EINVAL) {
+		skipping("This filesystem does not support NFS4 ACLs");
+		return;
+	}
+	failure("acl_set_file(): errno =3D %d (%s)",
+	    errno, strerror(errno));
+	assertEqualInt(0, n);
+
+	/* Create a write-to-disk object. */
+	assert(NULL !=3D (a =3D archive_write_disk_new()));
+	archive_write_disk_set_options(a,
+	    ARCHIVE_EXTRACT_TIME | ARCHIVE_EXTRACT_PERM | ARCHIVE_EXTRACT_ACL);
+
+	/* Populate an archive entry with some metadata, including ACL info */
+	ae =3D archive_entry_new();
+	assert(ae !=3D NULL);
+	archive_entry_set_pathname(ae, "testall");
+	archive_entry_set_filetype(ae, AE_IFREG);
+	archive_entry_set_perm(ae, 0654);
+	archive_entry_set_mtime(ae, 123456, 7890);
+	archive_entry_set_size(ae, 0);
+	set_acls(ae, acls_reg, 0, (int)(sizeof(acls_reg)/sizeof(acls_reg[0])));
+
+	/* Write the entry to disk, including ACLs. */
+	assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae));
+
+	/* Likewise for a dir. */
+	archive_entry_set_pathname(ae, "dirall");
+	archive_entry_set_filetype(ae, AE_IFDIR);
+	archive_entry_set_perm(ae, 0654);
+	archive_entry_set_mtime(ae, 123456, 7890);
+	set_acls(ae, acls_dir, 0, (int)(sizeof(acls_dir)/sizeof(acls_dir[0])));
+	assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae));
+
+	for (i =3D 0; i < (int)(sizeof(acls_dir)/sizeof(acls_dir[0])); ++i) {
+	  sprintf(buff, "dir%d", i);
+	  archive_entry_set_pathname(ae, buff);
+	  archive_entry_set_filetype(ae, AE_IFDIR);
+	  archive_entry_set_perm(ae, 0654);
+	  archive_entry_set_mtime(ae, 123456 + i, 7891 + i);
+	  set_acls(ae, acls_dir, i, i + 1);
+	  assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae));
+	}
+
+	archive_entry_free(ae);
+
+	/* Close the archive. */
+	assertEqualIntA(a, ARCHIVE_OK, archive_write_close(a));
+	assertEqualInt(ARCHIVE_OK, archive_write_free(a));
+
+	/* Verify the data on disk. */
+	assertEqualInt(0, stat("testall", &st));
+	assertEqualInt(st.st_mtime, 123456);
+	acl =3D acl_get_file("testall", ACL_TYPE_NFS4);
+	assert(acl !=3D (acl_t)NULL);
+	compare_acls(acl, acls_reg, "testall", 0, (int)(sizeof(acls_reg)/sizeof(a=
cls_reg[0])));
+	acl_free(acl);
+
+	/* Verify single-permission dirs on disk. */
+	for (i =3D 0; i < (int)(sizeof(acls_dir)/sizeof(acls_dir[0])); ++i) {
+	  sprintf(buff, "dir%d", i);
+	  assertEqualInt(0, stat(buff, &st));
+	  assertEqualInt(st.st_mtime, 123456 + i);
+	  acl =3D acl_get_file(buff, ACL_TYPE_NFS4);
+	  assert(acl !=3D (acl_t)NULL);
+	  compare_acls(acl, acls_dir, buff, i, i + 1);
+	  acl_free(acl);
+	}
+
+	/* Verify "dirall" on disk. */
+	assertEqualInt(0, stat("dirall", &st));
+	assertEqualInt(st.st_mtime, 123456);
+	acl =3D acl_get_file("dirall", ACL_TYPE_NFS4);
+	assert(acl !=3D (acl_t)NULL);
+	compare_acls(acl, acls_dir, "dirall", 0,  (int)(sizeof(acls_dir)/sizeof(a=
cls_dir[0])));
+	acl_free(acl);
+
+	/* Read and compare ACL via archive_read_disk */
+	a =3D archive_read_disk_new();
+	assert(a !=3D NULL);
+	ae =3D archive_entry_new();
+	assert(ae !=3D NULL);
+	archive_entry_set_pathname(ae, "testall");
+	assertEqualInt(ARCHIVE_OK,
+		       archive_read_disk_entry_from_file(a, ae, -1, NULL));
+	compare_entry_acls(ae, acls_reg, "testall", 0, (int)(sizeof(acls_reg)/siz=
eof(acls_reg[0])));
+	archive_entry_free(ae);
+	assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+
+	/* Read and compare ACL via archive_read_disk */
+	a =3D archive_read_disk_new();
+	assert(a !=3D NULL);
+	ae =3D archive_entry_new();
+	assert(ae !=3D NULL);
+	archive_entry_set_pathname(ae, "dirall");
+	assertEqualInt(ARCHIVE_OK,
+		       archive_read_disk_entry_from_file(a, ae, -1, NULL));
+	compare_entry_acls(ae, acls_dir, "dirall", 0,  (int)(sizeof(acls_dir)/siz=
eof(acls_dir[0])));
+	archive_entry_free(ae);
+	assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+#endif
+}
+/*-
+ * Copyright (c) 2003-2010 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 WARRANTI=
ES
+ * 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 US=
E,
+ * 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$");
+
+#if defined(__FreeBSD__) && __FreeBSD__ >=3D 8
+#define _ACL_PRIVATE
+#include <sys/acl.h>
+
+struct myacl_t {
+	int type;
+	int permset;
+	int tag;
+	int qual; /* GID or UID of user/group, depending on tag. */
+	const char *name; /* Name of user/group, depending on tag. */
+};
+
+static struct myacl_t acls_reg[] =3D {
+	/* For this test, we need the file owner to be able to read and write the=
 ACL. */
+	{ ARCHIVE_ENTRY_ACL_TYPE_ALLOW,
+	  ARCHIVE_ENTRY_ACL_READ_DATA | ARCHIVE_ENTRY_ACL_READ_ACL | ARCHIVE_ENTR=
Y_ACL_WRITE_ACL | ARCHIVE_ENTRY_ACL_READ_NAMED_ATTRS | ARCHIVE_ENTRY_ACL_RE=
AD_ATTRIBUTES,
+	  ARCHIVE_ENTRY_ACL_USER_OBJ, -1, ""},
+
+	/* An entry for each type. */
+	{ ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_EXECUTE,
+	  ARCHIVE_ENTRY_ACL_USER, 108, "user108" },
+	{ ARCHIVE_ENTRY_ACL_TYPE_DENY, ARCHIVE_ENTRY_ACL_EXECUTE,
+	  ARCHIVE_ENTRY_ACL_USER, 109, "user109" },
+
+	/* An entry for each permission. */
+	{ ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_EXECUTE,
+	  ARCHIVE_ENTRY_ACL_USER, 112, "user112" },
+	{ ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_READ_DATA,
+	  ARCHIVE_ENTRY_ACL_USER, 113, "user113" },
+	{ ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_WRITE_DATA,
+	  ARCHIVE_ENTRY_ACL_USER, 115, "user115" },
+	{ ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_APPEND_DATA,
+	  ARCHIVE_ENTRY_ACL_USER, 117, "user117" },
+	{ ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_READ_NAMED_ATTRS,
+	  ARCHIVE_ENTRY_ACL_USER, 119, "user119" },
+	{ ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_WRITE_NAMED_ATTRS,
+	  ARCHIVE_ENTRY_ACL_USER, 120, "user120" },
+	{ ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_READ_ATTRIBUTES,
+	  ARCHIVE_ENTRY_ACL_USER, 122, "user122" },
+	{ ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_WRITE_ATTRIBUTES,
+	  ARCHIVE_ENTRY_ACL_USER, 123, "user123" },
+	{ ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_DELETE,
+	  ARCHIVE_ENTRY_ACL_USER, 124, "user124" },
+	{ ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_READ_ACL,
+	  ARCHIVE_ENTRY_ACL_USER, 125, "user125" },
+	{ ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_WRITE_ACL,
+	  ARCHIVE_ENTRY_ACL_USER, 126, "user126" },
+	{ ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_WRITE_OWNER,
+	  ARCHIVE_ENTRY_ACL_USER, 127, "user127" },
+	{ ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_SYNCHRONIZE,
+	  ARCHIVE_ENTRY_ACL_USER, 128, "user128" },
+
+	/* One entry for each qualifier. */
+	{ ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_EXECUTE,
+	  ARCHIVE_ENTRY_ACL_USER, 135, "user135" },
+//	{ ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_EXECUTE,
+//	  ARCHIVE_ENTRY_ACL_USER_OBJ, -1, "" },
+	{ ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_EXECUTE,
+	  ARCHIVE_ENTRY_ACL_GROUP, 136, "group136" },
+	{ ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_EXECUTE,
+	  ARCHIVE_ENTRY_ACL_GROUP_OBJ, -1, "" },
+	{ ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_EXECUTE,
+	  ARCHIVE_ENTRY_ACL_EVERYONE, -1, "" }
+};
+
+
+static struct myacl_t acls_dir[] =3D {
+	/* For this test, we need to be able to read and write the ACL. */
+	{ ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_READ_ACL,
+	  ARCHIVE_ENTRY_ACL_USER_OBJ, -1, ""},
+
+	/* An entry for each type. */
+	{ ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_LIST_DIRECTORY,
+	  ARCHIVE_ENTRY_ACL_USER, 101, "user101" },
+	{ ARCHIVE_ENTRY_ACL_TYPE_DENY, ARCHIVE_ENTRY_ACL_LIST_DIRECTORY,
+	  ARCHIVE_ENTRY_ACL_USER, 102, "user102" },
+
+	/* An entry for each permission. */
+	{ ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_LIST_DIRECTORY,
+	  ARCHIVE_ENTRY_ACL_USER, 201, "user201" },
+	{ ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_ADD_FILE,
+	  ARCHIVE_ENTRY_ACL_USER, 202, "user202" },
+	{ ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_ADD_SUBDIRECTORY,
+	  ARCHIVE_ENTRY_ACL_USER, 203, "user203" },
+	{ ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_READ_NAMED_ATTRS,
+	  ARCHIVE_ENTRY_ACL_USER, 204, "user204" },
+	{ ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_WRITE_NAMED_ATTRS,
+	  ARCHIVE_ENTRY_ACL_USER, 205, "user205" },
+	{ ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_DELETE_CHILD,
+	  ARCHIVE_ENTRY_ACL_USER, 206, "user206" },
+	{ ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_READ_ATTRIBUTES,
+	  ARCHIVE_ENTRY_ACL_USER, 207, "user207" },
+	{ ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_WRITE_ATTRIBUTES,
+	  ARCHIVE_ENTRY_ACL_USER, 208, "user208" },
+	{ ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_DELETE,
+	  ARCHIVE_ENTRY_ACL_USER, 209, "user209" },
+	{ ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_READ_ACL,
+	  ARCHIVE_ENTRY_ACL_USER, 210, "user210" },
+	{ ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_WRITE_ACL,
+	  ARCHIVE_ENTRY_ACL_USER, 211, "user211" },
+	{ ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_WRITE_OWNER,
+	  ARCHIVE_ENTRY_ACL_USER, 212, "user212" },
+	{ ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_SYNCHRONIZE,
+	  ARCHIVE_ENTRY_ACL_USER, 213, "user213" },
+
+	/* One entry with each inheritance value. */
+	{ ARCHIVE_ENTRY_ACL_TYPE_ALLOW,
+	  ARCHIVE_ENTRY_ACL_READ_DATA | ARCHIVE_ENTRY_ACL_ENTRY_FILE_INHERIT,
+	  ARCHIVE_ENTRY_ACL_USER, 301, "user301" },
+	{ ARCHIVE_ENTRY_ACL_TYPE_ALLOW,
+	  ARCHIVE_ENTRY_ACL_READ_DATA | ARCHIVE_ENTRY_ACL_ENTRY_DIRECTORY_INHERIT,
+	  ARCHIVE_ENTRY_ACL_USER, 302, "user302" },
+#if 0
+	{ ARCHIVE_ENTRY_ACL_TYPE_ALLOW,
+	  ARCHIVE_ENTRY_ACL_READ_DATA | ARCHIVE_ENTRY_ACL_ENTRY_NO_PROPAGATE_INHE=
RIT,
+	  ARCHIVE_ENTRY_ACL_USER, 303, "user303" },
+	{ ARCHIVE_ENTRY_ACL_TYPE_ALLOW,
+	  ARCHIVE_ENTRY_ACL_READ_DATA | ARCHIVE_ENTRY_ACL_ENTRY_INHERIT_ONLY,
+	  ARCHIVE_ENTRY_ACL_USER, 304, "user304" },
+#endif
+
+#if 0
+	/* FreeBSD does not support audit entries. */
+	{ ARCHIVE_ENTRY_ACL_TYPE_AUDIT,
+	  ARCHIVE_ENTRY_ACL_READ_DATA | ARCHIVE_ENTRY_ACL_ENTRY_SUCCESSFUL_ACCESS,
+	  ARCHIVE_ENTRY_ACL_USER, 401, "user401" },
+	{ ARCHIVE_ENTRY_ACL_TYPE_AUDIT,
+	  ARCHIVE_ENTRY_ACL_READ_DATA | ARCHIVE_ENTRY_ACL_ENTRY_FAILED_ACCESS,
+	  ARCHIVE_ENTRY_ACL_USER, 402, "user402" },
+#endif
+
+	/* One entry for each qualifier. */
+	{ ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_LIST_DIRECTORY,
+	  ARCHIVE_ENTRY_ACL_USER, 501, "user501" },
+	{ ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_LIST_DIRECTORY,
+	  ARCHIVE_ENTRY_ACL_GROUP, 502, "group502" },
+	{ ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_LIST_DIRECTORY,
+	  ARCHIVE_ENTRY_ACL_GROUP_OBJ, -1, "" },
+	{ ARCHIVE_ENTRY_ACL_TYPE_ALLOW, ARCHIVE_ENTRY_ACL_LIST_DIRECTORY,
+	  ARCHIVE_ENTRY_ACL_EVERYONE, -1, "" }
+};
+
+static void
+set_acls(struct archive_entry *ae, struct myacl_t *acls, int start, int en=
d)
+{
+	int i;
+
+	archive_entry_acl_clear(ae);
+	if (start > 0) {
+		assertEqualInt(ARCHIVE_OK,
+			archive_entry_acl_add_entry(ae,
+			    acls[0].type, acls[0].permset, acls[0].tag,
+			    acls[0].qual, acls[0].name));
+	}
+	for (i =3D start; i < end; i++) {
+		assertEqualInt(ARCHIVE_OK,
+		    archive_entry_acl_add_entry(ae,
+			acls[i].type, acls[i].permset, acls[i].tag,
+			acls[i].qual, acls[i].name));
+	}
+}
+
+static int
+acl_permset_to_bitmap(acl_permset_t opaque_ps)
+{
+	static struct { int machine; int portable; } perms[] =3D {
+		{ACL_EXECUTE, ARCHIVE_ENTRY_ACL_EXECUTE},
+		{ACL_WRITE, ARCHIVE_ENTRY_ACL_WRITE},
+		{ACL_READ, ARCHIVE_ENTRY_ACL_READ},
+		{ACL_READ_DATA, ARCHIVE_ENTRY_ACL_READ_DATA},
+		{ACL_LIST_DIRECTORY, ARCHIVE_ENTRY_ACL_LIST_DIRECTORY},
+		{ACL_WRITE_DATA, ARCHIVE_ENTRY_ACL_WRITE_DATA},
+		{ACL_ADD_FILE, ARCHIVE_ENTRY_ACL_ADD_FILE},
+		{ACL_APPEND_DATA, ARCHIVE_ENTRY_ACL_APPEND_DATA},
+		{ACL_ADD_SUBDIRECTORY, ARCHIVE_ENTRY_ACL_ADD_SUBDIRECTORY},
+		{ACL_READ_NAMED_ATTRS, ARCHIVE_ENTRY_ACL_READ_NAMED_ATTRS},
+		{ACL_WRITE_NAMED_ATTRS, ARCHIVE_ENTRY_ACL_WRITE_NAMED_ATTRS},
+		{ACL_DELETE_CHILD, ARCHIVE_ENTRY_ACL_DELETE_CHILD},
+		{ACL_READ_ATTRIBUTES, ARCHIVE_ENTRY_ACL_READ_ATTRIBUTES},
+		{ACL_WRITE_ATTRIBUTES, ARCHIVE_ENTRY_ACL_WRITE_ATTRIBUTES},
+		{ACL_DELETE, ARCHIVE_ENTRY_ACL_DELETE},
+		{ACL_READ_ACL, ARCHIVE_ENTRY_ACL_READ_ACL},
+		{ACL_WRITE_ACL, ARCHIVE_ENTRY_ACL_WRITE_ACL},
+		{ACL_WRITE_OWNER, ARCHIVE_ENTRY_ACL_WRITE_OWNER},
+		{ACL_SYNCHRONIZE, ARCHIVE_ENTRY_ACL_SYNCHRONIZE}
+	};
+	int i, permset =3D 0;
+
+	for (i =3D 0; i < (int)(sizeof(perms)/sizeof(perms[0])); ++i)
+		if (acl_get_perm_np(opaque_ps, perms[i].machine))
+			permset |=3D perms[i].portable;
+	return permset;
+}
+
+static int
+acl_flagset_to_bitmap(acl_flagset_t opaque_fs)
+{
+	static struct { int machine; int portable; } flags[] =3D {
+		{ACL_ENTRY_FILE_INHERIT, ARCHIVE_ENTRY_ACL_ENTRY_FILE_INHERIT},
+		{ACL_ENTRY_DIRECTORY_INHERIT, ARCHIVE_ENTRY_ACL_ENTRY_DIRECTORY_INHERIT},
+		{ACL_ENTRY_NO_PROPAGATE_INHERIT, ARCHIVE_ENTRY_ACL_ENTRY_NO_PROPAGATE_IN=
HERIT},
+		{ACL_ENTRY_INHERIT_ONLY, ARCHIVE_ENTRY_ACL_ENTRY_INHERIT_ONLY},
+	};
+	int i, flagset =3D 0;
+
+	for (i =3D 0; i < (int)(sizeof(flags)/sizeof(flags[0])); ++i)
+		if (acl_get_flag_np(opaque_fs, flags[i].machine))
+			flagset |=3D flags[i].portable;
+	return flagset;
+}
+
+static int
+acl_match(acl_entry_t aclent, struct myacl_t *myacl)
+{
+	gid_t g, *gp;
+	uid_t u, *up;
+	acl_tag_t tag_type;
+	acl_permset_t opaque_ps;
+	acl_flagset_t opaque_fs;
+	int perms;
+
+	acl_get_tag_type(aclent, &tag_type);
+
+	/* translate the silly opaque permset to a bitmap */
+	acl_get_permset(aclent, &opaque_ps);
+	acl_get_flagset_np(aclent, &opaque_fs);
+	perms =3D acl_permset_to_bitmap(opaque_ps) | acl_flagset_to_bitmap(opaque=
_fs);
+	if (perms !=3D myacl->permset)
+		return (0);
+
+	switch (tag_type) {
+	case ACL_USER_OBJ:
+		if (myacl->tag !=3D ARCHIVE_ENTRY_ACL_USER_OBJ) return (0);
+		break;
+	case ACL_USER:
+		if (myacl->tag !=3D ARCHIVE_ENTRY_ACL_USER)
+			return (0);
+		up =3D acl_get_qualifier(aclent);
+		u =3D *up;
+		acl_free(up);
+		if ((uid_t)myacl->qual !=3D u)
+			return (0);
+		break;
+	case ACL_GROUP_OBJ:
+		if (myacl->tag !=3D ARCHIVE_ENTRY_ACL_GROUP_OBJ) return (0);
+		break;
+	case ACL_GROUP:
+		if (myacl->tag !=3D ARCHIVE_ENTRY_ACL_GROUP)
+			return (0);
+		gp =3D acl_get_qualifier(aclent);
+		g =3D *gp;
+		acl_free(gp);
+		if ((gid_t)myacl->qual !=3D g)
+			return (0);
+		break;
+	case ACL_MASK:
+		if (myacl->tag !=3D ARCHIVE_ENTRY_ACL_MASK) return (0);
+		break;
+	case ACL_EVERYONE:
+		if (myacl->tag !=3D ARCHIVE_ENTRY_ACL_EVERYONE) return (0);
+		break;
+	}
+	return (1);
+}
+
+static void
+compare_acls(acl_t acl, struct myacl_t *myacls, const char *filename, int =
start, int end)
+{
+	int *marker;
+	int entry_id =3D ACL_FIRST_ENTRY;
+	int matched;
+	int i, n;
+	acl_entry_t acl_entry;
+
+	n =3D end - start;
+	marker =3D malloc(sizeof(marker[0]) * (n + 1));
+	for (i =3D 0; i < n; i++)
+		marker[i] =3D i + start;
+	/* Always include the first ACE. */
+	if (start > 0) {
+	  marker[n] =3D 0;
+	  ++n;
+	}
+
+	/*
+	 * Iterate over acls in system acl object, try to match each
+	 * one with an item in the myacls array.
+	 */
+	while (1 =3D=3D acl_get_entry(acl, entry_id, &acl_entry)) {
+		/* After the first time... */
+		entry_id =3D ACL_NEXT_ENTRY;
+
+		/* Search for a matching entry (tag and qualifier) */
+		for (i =3D 0, matched =3D 0; i < n && !matched; i++) {
+			if (acl_match(acl_entry, &myacls[marker[i]])) {
+				/* We found a match; remove it. */
+				marker[i] =3D marker[n - 1];
+				n--;
+				matched =3D 1;
+			}
+		}
+
+		failure("ACL entry on file %s that shouldn't be there", filename);
+		assert(matched =3D=3D 1);
+	}
+
+	/* Dump entries in the myacls array that weren't in the system acl. */
+	for (i =3D 0; i < n; ++i) {
+		failure(" ACL entry %d missing from %s: "
+		    "type=3D%d,permset=3D%x,tag=3D%d,qual=3D%d,name=3D``%s''\n",
+		    marker[i], filename,
+		    myacls[marker[i]].type, myacls[marker[i]].permset,
+		    myacls[marker[i]].tag, myacls[marker[i]].qual,
+		    myacls[marker[i]].name);
+		assert(0); /* Record this as a failure. */
+	}
+	free(marker);
+}
+
+static void
+compare_entry_acls(struct archive_entry *ae, struct myacl_t *myacls, const=
 char *filename, int start, int end)
+{
+	int *marker;
+	int matched;
+	int i, n;
+	int type, permset, tag, qual;
+	const char *name;
+
+	/* Count ACL entries in myacls array and allocate an indirect array. */
+	n =3D end - start;
+	marker =3D malloc(sizeof(marker[0]) * (n + 1));
+	for (i =3D 0; i < n; i++)
+		marker[i] =3D i + start;
+	/* Always include the first ACE. */
+	if (start > 0) {
+	  marker[n] =3D 0;
+	  ++n;
+	}
+
+	/*
+	 * Iterate over acls in entry, try to match each
+	 * one with an item in the myacls array.
+	 */
+	assertEqualInt(n, archive_entry_acl_reset(ae, ARCHIVE_ENTRY_ACL_TYPE_NFS4=
));
+	while (ARCHIVE_OK =3D=3D archive_entry_acl_next(ae,
+	    ARCHIVE_ENTRY_ACL_TYPE_NFS4, &type, &permset, &tag, &qual, &name)) {
+
+		/* Search for a matching entry (tag and qualifier) */
+		for (i =3D 0, matched =3D 0; i < n && !matched; i++) {
+			if (tag =3D=3D myacls[marker[i]].tag
+			    && qual =3D=3D myacls[marker[i]].qual
+			    && permset =3D=3D myacls[marker[i]].permset
+			    && type =3D=3D myacls[marker[i]].type) {
+				/* We found a match; remove it. */
+				marker[i] =3D marker[n - 1];
+				n--;
+				matched =3D 1;
+			}
+		}
+
+		failure("ACL entry on file that shouldn't be there: "
+			"type=3D%d,permset=3D%x,tag=3D%d,qual=3D%d",
+			type,permset,tag,qual);
+		assert(matched =3D=3D 1);
+	}
+
+	/* Dump entries in the myacls array that weren't in the system acl. */
+	for (i =3D 0; i < n; ++i) {
+		failure(" ACL entry %d missing from %s: "
+		    "type=3D%d,permset=3D%x,tag=3D%d,qual=3D%d,name=3D``%s''\n",
+		    marker[i], filename,
+		    myacls[marker[i]].type, myacls[marker[i]].permset,
+		    myacls[marker[i]].tag, myacls[marker[i]].qual,
+		    myacls[marker[i]].name);
+		assert(0); /* Record this as a failure. */
+	}
+	free(marker);
+}
+#endif
+
+/*
+ * Verify ACL restore-to-disk.  This test is FreeBSD-specific.
+ */
+
+DEFINE_TEST(test_acl_freebsd_nfs4)
+{
+#if !defined(__FreeBSD__)
+	skipping("FreeBSD-specific NFS4 ACL restore test");
+#elif __FreeBSD__ < 8
+	skipping("NFS4 ACLs supported only on FreeBSD 8.0 and later");
+#else
+	char buff[64];
+	struct stat st;
+	struct archive *a;
+	struct archive_entry *ae;
+	int i, n;
+	acl_t acl;
+
+	/*
+	 * First, do a quick manual set/read of ACL data to
+	 * verify that the local filesystem does support ACLs.
+	 * If it doesn't, we'll simply skip the remaining tests.
+	 */
+	acl =3D acl_from_text("owner@:rwxp::allow,group@:rwp:f:allow");
+	assert((void *)acl !=3D NULL);
+	/* Create a test dir and try to set an ACL on it. */
+	if (!assertMakeDir("pretest", 0755)) {
+		acl_free(acl);
+		return;
+	}
+
+	n =3D acl_set_file("pretest", ACL_TYPE_NFS4, acl);
+	acl_free(acl);
+	if (n !=3D 0 && errno =3D=3D EOPNOTSUPP) {
+		skipping("NFS4 ACL tests require that NFS4 ACLs"
+		    " be enabled on the filesystem");
+		return;
+	}
+	if (n !=3D 0 && errno =3D=3D EINVAL) {
+		skipping("This filesystem does not support NFS4 ACLs");
+		return;
+	}
+	failure("acl_set_file(): errno =3D %d (%s)",
+	    errno, strerror(errno));
+	assertEqualInt(0, n);
+
+	/* Create a write-to-disk object. */
+	assert(NULL !=3D (a =3D archive_write_disk_new()));
+	archive_write_disk_set_options(a,
+	    ARCHIVE_EXTRACT_TIME | ARCHIVE_EXTRACT_PERM | ARCHIVE_EXTRACT_ACL);
+
+	/* Populate an archive entry with some metadata, including ACL info */
+	ae =3D archive_entry_new();
+	assert(ae !=3D NULL);
+	archive_entry_set_pathname(ae, "testall");
+	archive_entry_set_filetype(ae, AE_IFREG);
+	archive_entry_set_perm(ae, 0654);
+	archive_entry_set_mtime(ae, 123456, 7890);
+	archive_entry_set_size(ae, 0);
+	set_acls(ae, acls_reg, 0, (int)(sizeof(acls_reg)/sizeof(acls_reg[0])));
+
+	/* Write the entry to disk, including ACLs. */
+	assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae));
+
+	/* Likewise for a dir. */
+	archive_entry_set_pathname(ae, "dirall");
+	archive_entry_set_filetype(ae, AE_IFDIR);
+	archive_entry_set_perm(ae, 0654);
+	archive_entry_set_mtime(ae, 123456, 7890);
+	set_acls(ae, acls_dir, 0, (int)(sizeof(acls_dir)/sizeof(acls_dir[0])));
+	assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae));
+
+	for (i =3D 0; i < (int)(sizeof(acls_dir)/sizeof(acls_dir[0])); ++i) {
+	  sprintf(buff, "dir%d", i);
+	  archive_entry_set_pathname(ae, buff);
+	  archive_entry_set_filetype(ae, AE_IFDIR);
+	  archive_entry_set_perm(ae, 0654);
+	  archive_entry_set_mtime(ae, 123456 + i, 7891 + i);
+	  set_acls(ae, acls_dir, i, i + 1);
+	  assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae));
+	}
+
+	archive_entry_free(ae);
+
+	/* Close the archive. */
+	assertEqualIntA(a, ARCHIVE_OK, archive_write_close(a));
+	assertEqualInt(ARCHIVE_OK, archive_write_free(a));
+
+	/* Verify the data on disk. */
+	assertEqualInt(0, stat("testall", &st));
+	assertEqualInt(st.st_mtime, 123456);
+	acl =3D acl_get_file("testall", ACL_TYPE_NFS4);
+	assert(acl !=3D (acl_t)NULL);
+	compare_acls(acl, acls_reg, "testall", 0, (int)(sizeof(acls_reg)/sizeof(a=
cls_reg[0])));
+	acl_free(acl);
+
+	/* Verify single-permission dirs on disk. */
+	for (i =3D 0; i < (int)(sizeof(acls_dir)/sizeof(acls_dir[0])); ++i) {
+	  sprintf(buff, "dir%d", i);
+	  assertEqualInt(0, stat(buff, &st));
+	  assertEqualInt(st.st_mtime, 123456 + i);
+	  acl =3D acl_get_file(buff, ACL_TYPE_NFS4);
+	  assert(acl !=3D (acl_t)NULL);
+	  compare_acls(acl, acls_dir, buff, i, i + 1);
+	  acl_free(acl);
+	}
+
+	/* Verify "dirall" on disk. */
+	assertEqualInt(0, stat("dirall", &st));
+	assertEqualInt(st.st_mtime, 123456);
+	acl =3D acl_get_file("dirall", ACL_TYPE_NFS4);
+	assert(acl !=3D (acl_t)NULL);
+	compare_acls(acl, acls_dir, "dirall", 0,  (int)(sizeof(acls_dir)/sizeof(a=
cls_dir[0])));
+	acl_free(acl);
+
+	/* Read and compare ACL via archive_read_disk */
+	a =3D archive_read_disk_new();
+	assert(a !=3D NULL);
+	ae =3D archive_entry_new();
+	assert(ae !=3D NULL);
+	archive_entry_set_pathname(ae, "testall");
+	assertEqualInt(ARCHIVE_OK,
+		       archive_read_disk_entry_from_file(a, ae, -1, NULL));
+	compare_entry_acls(ae, acls_reg, "testall", 0, (int)(sizeof(acls_reg)/siz=
eof(acls_reg[0])));
+	archive_entry_free(ae);
+	assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+
+	/* Read and compare ACL via archive_read_disk */
+	a =3D archive_read_disk_new();
+	assert(a !=3D NULL);
+	ae =3D archive_entry_new();
+	assert(ae !=3D NULL);
+	archive_entry_set_pathname(ae, "dirall");
+	assertEqualInt(ARCHIVE_OK,
+		       archive_read_disk_entry_from_file(a, ae, -1, NULL));
+	compare_entry_acls(ae, acls_dir, "dirall", 0,  (int)(sizeof(acls_dir)/siz=
eof(acls_dir[0])));
+	archive_entry_free(ae);
+	assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+#endif
+}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/tes=
t/test_acl_freebsd_posix1e.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/head/contrib/libarchive/libarchive/test/test_acl_freebsd_posix1e.c	Fr=
i Aug 10 14:19:25 2012 +0300
@@ -0,0 +1,520 @@
+/*-
+ * Copyright (c) 2003-2008 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 WARRANTI=
ES
+ * 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 US=
E,
+ * 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: head/lib/libarchive/test/test_acl_freebsd.c 189427 200=
9-03-06 04:21:23Z kientzle $");
+
+#if defined(__FreeBSD__) && __FreeBSD__ > 4
+#include <sys/acl.h>
+
+struct myacl_t {
+	int type;  /* Type of ACL: "access" or "default" */
+	int permset; /* Permissions for this class of users. */
+	int tag; /* Owner, User, Owning group, group, other, etc. */
+	int qual; /* GID or UID of user/group, depending on tag. */
+	const char *name; /* Name of user/group, depending on tag. */
+};
+
+static struct myacl_t acls2[] =3D {
+	{ ARCHIVE_ENTRY_ACL_TYPE_ACCESS, ARCHIVE_ENTRY_ACL_EXECUTE | ARCHIVE_ENTR=
Y_ACL_READ,
+	  ARCHIVE_ENTRY_ACL_USER_OBJ, -1, "" },
+	{ ARCHIVE_ENTRY_ACL_TYPE_ACCESS, ARCHIVE_ENTRY_ACL_READ,
+	  ARCHIVE_ENTRY_ACL_USER, 77, "user77" },
+	{ ARCHIVE_ENTRY_ACL_TYPE_ACCESS, 0,
+	  ARCHIVE_ENTRY_ACL_USER, 78, "user78" },
+	{ ARCHIVE_ENTRY_ACL_TYPE_ACCESS, ARCHIVE_ENTRY_ACL_READ,
+	  ARCHIVE_ENTRY_ACL_GROUP_OBJ, -1, "" },
+	{ ARCHIVE_ENTRY_ACL_TYPE_ACCESS, 0007,
+	  ARCHIVE_ENTRY_ACL_GROUP, 78, "group78" },
+	{ ARCHIVE_ENTRY_ACL_TYPE_ACCESS,
+	  ARCHIVE_ENTRY_ACL_WRITE | ARCHIVE_ENTRY_ACL_EXECUTE,
+	  ARCHIVE_ENTRY_ACL_OTHER, -1, "" },
+	{ ARCHIVE_ENTRY_ACL_TYPE_ACCESS,
+	  ARCHIVE_ENTRY_ACL_WRITE | ARCHIVE_ENTRY_ACL_READ | ARCHIVE_ENTRY_ACL_EX=
ECUTE,
+	  ARCHIVE_ENTRY_ACL_MASK, -1, "" },
+	{ 0, 0, 0, 0, NULL }
+};
+
+static void
+set_acls(struct archive_entry *ae, struct myacl_t *acls)
+{
+	int i;
+
+	archive_entry_acl_clear(ae);
+	for (i =3D 0; acls[i].name !=3D NULL; i++) {
+		archive_entry_acl_add_entry(ae,
+		    acls[i].type, acls[i].permset, acls[i].tag, acls[i].qual,
+		    acls[i].name);
+	}
+}
+
+static int
+acl_match(acl_entry_t aclent, struct myacl_t *myacl)
+{
+	gid_t g, *gp;
+	uid_t u, *up;
+	acl_tag_t tag_type;
+	acl_permset_t opaque_ps;
+	int permset =3D 0;
+
+	acl_get_tag_type(aclent, &tag_type);
+
+	/* translate the silly opaque permset to a bitmap */
+	acl_get_permset(aclent, &opaque_ps);
+	if (acl_get_perm_np(opaque_ps, ACL_EXECUTE))
+		permset |=3D ARCHIVE_ENTRY_ACL_EXECUTE;
+	if (acl_get_perm_np(opaque_ps, ACL_WRITE))
+		permset |=3D ARCHIVE_ENTRY_ACL_WRITE;
+	if (acl_get_perm_np(opaque_ps, ACL_READ))
+		permset |=3D ARCHIVE_ENTRY_ACL_READ;
+
+	if (permset !=3D myacl->permset)
+		return (0);
+
+	switch (tag_type) {
+	case ACL_USER_OBJ:
+		if (myacl->tag !=3D ARCHIVE_ENTRY_ACL_USER_OBJ) return (0);
+		break;
+	case ACL_USER:
+		if (myacl->tag !=3D ARCHIVE_ENTRY_ACL_USER)
+			return (0);
+		up =3D acl_get_qualifier(aclent);
+		u =3D *up;
+		acl_free(up);
+		if ((uid_t)myacl->qual !=3D u)
+			return (0);
+		break;
+	case ACL_GROUP_OBJ:
+		if (myacl->tag !=3D ARCHIVE_ENTRY_ACL_GROUP_OBJ) return (0);
+		break;
+	case ACL_GROUP:
+		if (myacl->tag !=3D ARCHIVE_ENTRY_ACL_GROUP)
+			return (0);
+		gp =3D acl_get_qualifier(aclent);
+		g =3D *gp;
+		acl_free(gp);
+		if ((gid_t)myacl->qual !=3D g)
+			return (0);
+		break;
+	case ACL_MASK:
+		if (myacl->tag !=3D ARCHIVE_ENTRY_ACL_MASK) return (0);
+		break;
+	case ACL_OTHER:
+		if (myacl->tag !=3D ARCHIVE_ENTRY_ACL_OTHER) return (0);
+		break;
+	}
+	return (1);
+}
+
+static void
+compare_acls(acl_t acl, struct myacl_t *myacls)
+{
+	int *marker;
+	int entry_id =3D ACL_FIRST_ENTRY;
+	int matched;
+	int i, n;
+	acl_entry_t acl_entry;
+
+	/* Count ACL entries in myacls array and allocate an indirect array. */
+	for (n =3D 0; myacls[n].name !=3D NULL; ++n)
+		continue;
+	marker =3D malloc(sizeof(marker[0]) * n);
+	for (i =3D 0; i < n; i++)
+		marker[i] =3D i;
+
+	/*
+	 * Iterate over acls in system acl object, try to match each
+	 * one with an item in the myacls array.
+	 */
+	while (1 =3D=3D acl_get_entry(acl, entry_id, &acl_entry)) {
+		/* After the first time... */
+		entry_id =3D ACL_NEXT_ENTRY;
+
+		/* Search for a matching entry (tag and qualifier) */
+		for (i =3D 0, matched =3D 0; i < n && !matched; i++) {
+			if (acl_match(acl_entry, &myacls[marker[i]])) {
+				/* We found a match; remove it. */
+				marker[i] =3D marker[n - 1];
+				n--;
+				matched =3D 1;
+			}
+		}
+
+		/* TODO: Print out more details in this case. */
+		failure("ACL entry on file that shouldn't be there");
+		assert(matched =3D=3D 1);
+	}
+
+	/* Dump entries in the myacls array that weren't in the system acl. */
+	for (i =3D 0; i < n; ++i) {
+		failure(" ACL entry missing from file: "
+		    "type=3D%d,permset=3D%d,tag=3D%d,qual=3D%d,name=3D``%s''\n",
+		    myacls[marker[i]].type, myacls[marker[i]].permset,
+		    myacls[marker[i]].tag, myacls[marker[i]].qual,
+		    myacls[marker[i]].name);
+		assert(0); /* Record this as a failure. */
+	}
+	free(marker);
+}
+
+#endif
+
+
+/*
+ * Verify ACL restore-to-disk.  This test is FreeBSD-specific.
+ */
+
+DEFINE_TEST(test_acl_freebsd_posix1e)
+{
+#if !defined(__FreeBSD__)
+	skipping("FreeBSD-specific ACL restore test");
+#elif __FreeBSD__ < 5
+	skipping("ACL restore supported only on FreeBSD 5.0 and later");
+#else
+	struct stat st;
+	struct archive *a;
+	struct archive_entry *ae;
+	int n, fd;
+	acl_t acl;
+
+	/*
+	 * First, do a quick manual set/read of ACL data to
+	 * verify that the local filesystem does support ACLs.
+	 * If it doesn't, we'll simply skip the remaining tests.
+	 */
+	acl =3D acl_from_text("u::rwx,u:1:rw,g::rwx,g:15:rx,o::rwx,m::rwx");
+	assert((void *)acl !=3D NULL);
+	/* Create a test file and try to set an ACL on it. */
+	fd =3D open("pretest", O_WRONLY | O_CREAT | O_EXCL, 0777);
+	failure("Could not create test file?!");
+	if (!assert(fd >=3D 0)) {
+		acl_free(acl);
+		return;
+	}
+
+	n =3D acl_set_fd(fd, acl);
+	acl_free(acl);
+	if (n !=3D 0 && errno =3D=3D EOPNOTSUPP) {
+		close(fd);
+		skipping("ACL tests require that ACL support be enabled on the filesyste=
m");
+		return;
+	}
+	if (n !=3D 0 && errno =3D=3D EINVAL) {
+		close(fd);
+		skipping("This filesystem does not support POSIX.1e ACLs");
+		return;
+	}
+	failure("acl_set_fd(): errno =3D %d (%s)",
+	    errno, strerror(errno));
+	assertEqualInt(0, n);
+	close(fd);
+
+	/* Create a write-to-disk object. */
+	assert(NULL !=3D (a =3D archive_write_disk_new()));
+	archive_write_disk_set_options(a,
+	    ARCHIVE_EXTRACT_TIME | ARCHIVE_EXTRACT_PERM | ARCHIVE_EXTRACT_ACL);
+
+	/* Populate an archive entry with some metadata, including ACL info */
+	ae =3D archive_entry_new();
+	assert(ae !=3D NULL);
+	archive_entry_set_pathname(ae, "test0");
+	archive_entry_set_mtime(ae, 123456, 7890);
+	archive_entry_set_size(ae, 0);
+	set_acls(ae, acls2);
+	assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae));
+	archive_entry_free(ae);
+
+	/* Close the archive. */
+	assertEqualIntA(a, ARCHIVE_OK, archive_write_close(a));
+	assertEqualInt(ARCHIVE_OK, archive_write_free(a));
+
+	/* Verify the data on disk. */
+	assertEqualInt(0, stat("test0", &st));
+	assertEqualInt(st.st_mtime, 123456);
+	acl =3D acl_get_file("test0", ACL_TYPE_ACCESS);
+	assert(acl !=3D (acl_t)NULL);
+	compare_acls(acl, acls2);
+	acl_free(acl);
+#endif
+}
+/*-
+ * Copyright (c) 2003-2008 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 WARRANTI=
ES
+ * 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 US=
E,
+ * 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: head/lib/libarchive/test/test_acl_freebsd.c 189427 200=
9-03-06 04:21:23Z kientzle $");
+
+#if defined(__FreeBSD__) && __FreeBSD__ > 4
+#include <sys/acl.h>
+
+struct myacl_t {
+	int type;  /* Type of ACL: "access" or "default" */
+	int permset; /* Permissions for this class of users. */
+	int tag; /* Owner, User, Owning group, group, other, etc. */
+	int qual; /* GID or UID of user/group, depending on tag. */
+	const char *name; /* Name of user/group, depending on tag. */
+};
+
+static struct myacl_t acls2[] =3D {
+	{ ARCHIVE_ENTRY_ACL_TYPE_ACCESS, ARCHIVE_ENTRY_ACL_EXECUTE | ARCHIVE_ENTR=
Y_ACL_READ,
+	  ARCHIVE_ENTRY_ACL_USER_OBJ, -1, "" },
+	{ ARCHIVE_ENTRY_ACL_TYPE_ACCESS, ARCHIVE_ENTRY_ACL_READ,
+	  ARCHIVE_ENTRY_ACL_USER, 77, "user77" },
+	{ ARCHIVE_ENTRY_ACL_TYPE_ACCESS, 0,
+	  ARCHIVE_ENTRY_ACL_USER, 78, "user78" },
+	{ ARCHIVE_ENTRY_ACL_TYPE_ACCESS, ARCHIVE_ENTRY_ACL_READ,
+	  ARCHIVE_ENTRY_ACL_GROUP_OBJ, -1, "" },
+	{ ARCHIVE_ENTRY_ACL_TYPE_ACCESS, 0007,
+	  ARCHIVE_ENTRY_ACL_GROUP, 78, "group78" },
+	{ ARCHIVE_ENTRY_ACL_TYPE_ACCESS,
+	  ARCHIVE_ENTRY_ACL_WRITE | ARCHIVE_ENTRY_ACL_EXECUTE,
+	  ARCHIVE_ENTRY_ACL_OTHER, -1, "" },
+	{ ARCHIVE_ENTRY_ACL_TYPE_ACCESS,
+	  ARCHIVE_ENTRY_ACL_WRITE | ARCHIVE_ENTRY_ACL_READ | ARCHIVE_ENTRY_ACL_EX=
ECUTE,
+	  ARCHIVE_ENTRY_ACL_MASK, -1, "" },
+	{ 0, 0, 0, 0, NULL }
+};
+
+static void
+set_acls(struct archive_entry *ae, struct myacl_t *acls)
+{
+	int i;
+
+	archive_entry_acl_clear(ae);
+	for (i =3D 0; acls[i].name !=3D NULL; i++) {
+		archive_entry_acl_add_entry(ae,
+		    acls[i].type, acls[i].permset, acls[i].tag, acls[i].qual,
+		    acls[i].name);
+	}
+}
+
+static int
+acl_match(acl_entry_t aclent, struct myacl_t *myacl)
+{
+	gid_t g, *gp;
+	uid_t u, *up;
+	acl_tag_t tag_type;
+	acl_permset_t opaque_ps;
+	int permset =3D 0;
+
+	acl_get_tag_type(aclent, &tag_type);
+
+	/* translate the silly opaque permset to a bitmap */
+	acl_get_permset(aclent, &opaque_ps);
+	if (acl_get_perm_np(opaque_ps, ACL_EXECUTE))
+		permset |=3D ARCHIVE_ENTRY_ACL_EXECUTE;
+	if (acl_get_perm_np(opaque_ps, ACL_WRITE))
+		permset |=3D ARCHIVE_ENTRY_ACL_WRITE;
+	if (acl_get_perm_np(opaque_ps, ACL_READ))
+		permset |=3D ARCHIVE_ENTRY_ACL_READ;
+
+	if (permset !=3D myacl->permset)
+		return (0);
+
+	switch (tag_type) {
+	case ACL_USER_OBJ:
+		if (myacl->tag !=3D ARCHIVE_ENTRY_ACL_USER_OBJ) return (0);
+		break;
+	case ACL_USER:
+		if (myacl->tag !=3D ARCHIVE_ENTRY_ACL_USER)
+			return (0);
+		up =3D acl_get_qualifier(aclent);
+		u =3D *up;
+		acl_free(up);
+		if ((uid_t)myacl->qual !=3D u)
+			return (0);
+		break;
+	case ACL_GROUP_OBJ:
+		if (myacl->tag !=3D ARCHIVE_ENTRY_ACL_GROUP_OBJ) return (0);
+		break;
+	case ACL_GROUP:
+		if (myacl->tag !=3D ARCHIVE_ENTRY_ACL_GROUP)
+			return (0);
+		gp =3D acl_get_qualifier(aclent);
+		g =3D *gp;
+		acl_free(gp);
+		if ((gid_t)myacl->qual !=3D g)
+			return (0);
+		break;
+	case ACL_MASK:
+		if (myacl->tag !=3D ARCHIVE_ENTRY_ACL_MASK) return (0);
+		break;
+	case ACL_OTHER:
+		if (myacl->tag !=3D ARCHIVE_ENTRY_ACL_OTHER) return (0);
+		break;
+	}
+	return (1);
+}
+
+static void
+compare_acls(acl_t acl, struct myacl_t *myacls)
+{
+	int *marker;
+	int entry_id =3D ACL_FIRST_ENTRY;
+	int matched;
+	int i, n;
+	acl_entry_t acl_entry;
+
+	/* Count ACL entries in myacls array and allocate an indirect array. */
+	for (n =3D 0; myacls[n].name !=3D NULL; ++n)
+		continue;
+	marker =3D malloc(sizeof(marker[0]) * n);
+	for (i =3D 0; i < n; i++)
+		marker[i] =3D i;
+
+	/*
+	 * Iterate over acls in system acl object, try to match each
+	 * one with an item in the myacls array.
+	 */
+	while (1 =3D=3D acl_get_entry(acl, entry_id, &acl_entry)) {
+		/* After the first time... */
+		entry_id =3D ACL_NEXT_ENTRY;
+
+		/* Search for a matching entry (tag and qualifier) */
+		for (i =3D 0, matched =3D 0; i < n && !matched; i++) {
+			if (acl_match(acl_entry, &myacls[marker[i]])) {
+				/* We found a match; remove it. */
+				marker[i] =3D marker[n - 1];
+				n--;
+				matched =3D 1;
+			}
+		}
+
+		/* TODO: Print out more details in this case. */
+		failure("ACL entry on file that shouldn't be there");
+		assert(matched =3D=3D 1);
+	}
+
+	/* Dump entries in the myacls array that weren't in the system acl. */
+	for (i =3D 0; i < n; ++i) {
+		failure(" ACL entry missing from file: "
+		    "type=3D%d,permset=3D%d,tag=3D%d,qual=3D%d,name=3D``%s''\n",
+		    myacls[marker[i]].type, myacls[marker[i]].permset,
+		    myacls[marker[i]].tag, myacls[marker[i]].qual,
+		    myacls[marker[i]].name);
+		assert(0); /* Record this as a failure. */
+	}
+	free(marker);
+}
+
+#endif
+
+
+/*
+ * Verify ACL restore-to-disk.  This test is FreeBSD-specific.
+ */
+
+DEFINE_TEST(test_acl_freebsd_posix1e)
+{
+#if !defined(__FreeBSD__)
+	skipping("FreeBSD-specific ACL restore test");
+#elif __FreeBSD__ < 5
+	skipping("ACL restore supported only on FreeBSD 5.0 and later");
+#else
+	struct stat st;
+	struct archive *a;
+	struct archive_entry *ae;
+	int n, fd;
+	acl_t acl;
+
+	/*
+	 * First, do a quick manual set/read of ACL data to
+	 * verify that the local filesystem does support ACLs.
+	 * If it doesn't, we'll simply skip the remaining tests.
+	 */
+	acl =3D acl_from_text("u::rwx,u:1:rw,g::rwx,g:15:rx,o::rwx,m::rwx");
+	assert((void *)acl !=3D NULL);
+	/* Create a test file and try to set an ACL on it. */
+	fd =3D open("pretest", O_WRONLY | O_CREAT | O_EXCL, 0777);
+	failure("Could not create test file?!");
+	if (!assert(fd >=3D 0)) {
+		acl_free(acl);
+		return;
+	}
+
+	n =3D acl_set_fd(fd, acl);
+	acl_free(acl);
+	if (n !=3D 0 && errno =3D=3D EOPNOTSUPP) {
+		close(fd);
+		skipping("ACL tests require that ACL support be enabled on the filesyste=
m");
+		return;
+	}
+	if (n !=3D 0 && errno =3D=3D EINVAL) {
+		close(fd);
+		skipping("This filesystem does not support POSIX.1e ACLs");
+		return;
+	}
+	failure("acl_set_fd(): errno =3D %d (%s)",
+	    errno, strerror(errno));
+	assertEqualInt(0, n);
+	close(fd);
+
+	/* Create a write-to-disk object. */
+	assert(NULL !=3D (a =3D archive_write_disk_new()));
+	archive_write_disk_set_options(a,
+	    ARCHIVE_EXTRACT_TIME | ARCHIVE_EXTRACT_PERM | ARCHIVE_EXTRACT_ACL);
+
+	/* Populate an archive entry with some metadata, including ACL info */
+	ae =3D archive_entry_new();
+	assert(ae !=3D NULL);
+	archive_entry_set_pathname(ae, "test0");
+	archive_entry_set_mtime(ae, 123456, 7890);
+	archive_entry_set_size(ae, 0);
+	set_acls(ae, acls2);
+	assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae));
+	archive_entry_free(ae);
+
+	/* Close the archive. */
+	assertEqualIntA(a, ARCHIVE_OK, archive_write_close(a));
+	assertEqualInt(ARCHIVE_OK, archive_write_free(a));
+
+	/* Verify the data on disk. */
+	assertEqualInt(0, stat("test0", &st));
+	assertEqualInt(st.st_mtime, 123456);
+	acl =3D acl_get_file("test0", ACL_TYPE_ACCESS);
+	assert(acl !=3D (acl_t)NULL);
+	compare_acls(acl, acls2);
+	acl_free(acl);
+#endif
+}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/tes=
t/test_archive_getdate.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/head/contrib/libarchive/libarchive/test/test_archive_getdate.c	Fri Au=
g 10 14:19:25 2012 +0300
@@ -0,0 +1,81 @@
+/*-
+ * 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 WARRANTI=
ES
+ * 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 US=
E,
+ * 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$");
+
+#include <time.h>
+
+/*
+ * Verify that the getdate() function works.
+ */
+
+time_t __archive_get_date(time_t, const char *);
+#define get_date __archive_get_date
+
+DEFINE_TEST(test_archive_getdate)
+{
+	time_t now =3D time(NULL);
+
+	assertEqualInt(get_date(now, "Jan 1, 1970 UTC"), 0);
+	assertEqualInt(get_date(now, "7:12:18-0530 4 May 1983"), 420900138);
+	assertEqualInt(get_date(now, "2004/01/29 513 mest"), 1075345980);
+	assertEqualInt(get_date(now, "99/02/17 7pm utc"), 919278000);
+	assertEqualInt(get_date(now, "02/17/99 7:11am est"), 919253460);
+	/* It's important that we handle ctime() format. */
+	assertEqualInt(get_date(now, "Sun Feb 22 17:38:26 PST 2009"),
+	    1235353106);
+	/* Basic relative offsets. */
+	/* If we use the actual current time as the reference, then
+	 * these tests break around DST changes, so it's actually
+	 * important to use a specific reference time here. */
+	assertEqualInt(get_date(0, "tomorrow"), 24 * 60 * 60);
+	assertEqualInt(get_date(0, "yesterday"), - 24 * 60 * 60);
+	assertEqualInt(get_date(0, "now + 1 hour"), 60 * 60);
+	assertEqualInt(get_date(0, "now + 1 hour + 1 minute"), 60 * 60 + 60);
+	/* Repeat the above for a different start time. */
+	now =3D 1231113600; /* Jan 5, 2009 00:00 UTC */
+	assertEqualInt(get_date(0, "Jan 5, 2009 00:00 UTC"), now);
+	assertEqualInt(get_date(now, "tomorrow"), now + 24 * 60 * 60);
+	assertEqualInt(get_date(now, "yesterday"), now - 24 * 60 * 60);
+	assertEqualInt(get_date(now, "now + 1 hour"), now + 60 * 60);
+	assertEqualInt(get_date(now, "now + 1 hour + 1 minute"),
+	    now + 60 * 60 + 60);
+	assertEqualInt(get_date(now, "tomorrow 5:16am UTC"),
+	    now + 24 * 60 * 60 + 5 * 60 * 60 + 16 * 60);
+	assertEqualInt(get_date(now, "UTC 5:16am tomorrow"),
+	    now + 24 * 60 * 60 + 5 * 60 * 60 + 16 * 60);
+
+	/* Jan 5, 2009 was a Monday. */
+	assertEqualInt(get_date(now, "monday UTC"), now);
+	assertEqualInt(get_date(now, "sunday UTC"), now + 6 * 24 * 60 * 60);
+	assertEqualInt(get_date(now, "tuesday UTC"), now + 24 * 60 * 60);
+	/* "next tuesday" is one week after "tuesday" */
+	assertEqualInt(get_date(now, "UTC next tuesday"),
+	    now + 8 * 24 * 60 * 60);
+	/* "last tuesday" is one week before "tuesday" */
+	assertEqualInt(get_date(now, "last tuesday UTC"),
+	    now - 6 * 24 * 60 * 60);
+	/* TODO: Lots more tests here. */
+}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/tes=
t/test_archive_match_owner.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/head/contrib/libarchive/libarchive/test/test_archive_match_owner.c	Fr=
i Aug 10 14:19:25 2012 +0300
@@ -0,0 +1,289 @@
+/*-
+ * Copyright (c) 2012 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 WARRANTI=
ES
+ * 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 US=
E,
+ * 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 void
+test_uid(void)
+{
+	struct archive_entry *ae;
+	struct archive *m;
+
+	if (!assert((m =3D archive_match_new()) !=3D NULL))
+		return;
+	if (!assert((ae =3D archive_entry_new()) !=3D NULL)) {
+		archive_match_free(m);
+		return;
+	}
+
+	assertEqualIntA(m, 0, archive_match_include_uid(m, 1000));
+	assertEqualIntA(m, 0, archive_match_include_uid(m, 1002));
+
+	archive_entry_set_uid(ae, 0);
+	failure("uid 0 should be excluded");
+	assertEqualInt(1, archive_match_owner_excluded(m, ae));
+	assertEqualInt(1, archive_match_excluded(m, ae));
+	archive_entry_set_uid(ae, 1000);
+	failure("uid 1000 should not be excluded");
+	assertEqualInt(0, archive_match_owner_excluded(m, ae));
+	assertEqualInt(0, archive_match_excluded(m, ae));
+	archive_entry_set_uid(ae, 1001);
+	failure("uid 1001 should be excluded");
+	assertEqualInt(1, archive_match_owner_excluded(m, ae));
+	assertEqualInt(1, archive_match_excluded(m, ae));
+	archive_entry_set_uid(ae, 1002);
+	failure("uid 1002 should not be excluded");
+	assertEqualInt(0, archive_match_owner_excluded(m, ae));
+	assertEqualInt(0, archive_match_excluded(m, ae));
+	archive_entry_set_uid(ae, 1003);
+	failure("uid 1003 should be excluded");
+	assertEqualInt(1, archive_match_owner_excluded(m, ae));
+	assertEqualInt(1, archive_match_excluded(m, ae));
+
+	/* Clean up. */
+	archive_entry_free(ae);
+	archive_match_free(m);
+}
+
+static void
+test_gid(void)
+{
+	struct archive_entry *ae;
+	struct archive *m;
+
+	if (!assert((m =3D archive_match_new()) !=3D NULL))
+		return;
+	if (!assert((ae =3D archive_entry_new()) !=3D NULL)) {
+		archive_match_free(m);
+		return;
+	}
+
+	assertEqualIntA(m, 0, archive_match_include_gid(m, 1000));
+	assertEqualIntA(m, 0, archive_match_include_gid(m, 1002));
+
+	archive_entry_set_gid(ae, 0);
+	failure("uid 0 should be excluded");
+	assertEqualInt(1, archive_match_owner_excluded(m, ae));
+	assertEqualInt(1, archive_match_excluded(m, ae));
+	archive_entry_set_gid(ae, 1000);
+	failure("uid 1000 should not be excluded");
+	assertEqualInt(0, archive_match_owner_excluded(m, ae));
+	assertEqualInt(0, archive_match_excluded(m, ae));
+	archive_entry_set_gid(ae, 1001);
+	failure("uid 1001 should be excluded");
+	assertEqualInt(1, archive_match_owner_excluded(m, ae));
+	assertEqualInt(1, archive_match_excluded(m, ae));
+	archive_entry_set_gid(ae, 1002);
+	failure("uid 1002 should not be excluded");
+	assertEqualInt(0, archive_match_owner_excluded(m, ae));
+	assertEqualInt(0, archive_match_excluded(m, ae));
+	archive_entry_set_gid(ae, 1003);
+	failure("uid 1003 should be excluded");
+	assertEqualInt(1, archive_match_owner_excluded(m, ae));
+	assertEqualInt(1, archive_match_excluded(m, ae));
+
+	/* Clean up. */
+	archive_entry_free(ae);
+	archive_match_free(m);
+}
+
+static void
+test_uname_mbs(void)
+{
+	struct archive_entry *ae;
+	struct archive *m;
+
+	if (!assert((m =3D archive_match_new()) !=3D NULL))
+		return;
+	if (!assert((ae =3D archive_entry_new()) !=3D NULL)) {
+		archive_match_free(m);
+		return;
+	}
+
+	assertEqualIntA(m, 0, archive_match_include_uname(m, "foo"));
+	assertEqualIntA(m, 0, archive_match_include_uname(m, "bar"));
+
+	archive_entry_copy_uname(ae, "unknown");
+	failure("User 'unknown' should be excluded");
+	assertEqualInt(1, archive_match_owner_excluded(m, ae));
+	assertEqualInt(1, archive_match_excluded(m, ae));
+	archive_entry_copy_uname(ae, "foo");
+	failure("User 'foo' should not be excluded");
+	assertEqualInt(0, archive_match_owner_excluded(m, ae));
+	assertEqualInt(0, archive_match_excluded(m, ae));
+	archive_entry_copy_uname(ae, "foo1");
+	failure("User 'foo1' should be excluded");
+	assertEqualInt(1, archive_match_owner_excluded(m, ae));
+	assertEqualInt(1, archive_match_excluded(m, ae));
+	archive_entry_copy_uname(ae, "bar");
+	failure("User 'bar' should not be excluded");
+	assertEqualInt(0, archive_match_owner_excluded(m, ae));
+	assertEqualInt(0, archive_match_excluded(m, ae));
+	archive_entry_copy_uname(ae, "bar1");
+	failure("User 'bar1' should be excluded");
+	assertEqualInt(1, archive_match_owner_excluded(m, ae));
+	assertEqualInt(1, archive_match_excluded(m, ae));
+
+	/* Clean up. */
+	archive_entry_free(ae);
+	archive_match_free(m);
+}
+
+static void
+test_uname_wcs(void)
+{
+	struct archive_entry *ae;
+	struct archive *m;
+
+	if (!assert((m =3D archive_match_new()) !=3D NULL))
+		return;
+	if (!assert((ae =3D archive_entry_new()) !=3D NULL)) {
+		archive_match_free(m);
+		return;
+	}
+
+	assertEqualIntA(m, 0, archive_match_include_uname_w(m, L"foo"));
+	assertEqualIntA(m, 0, archive_match_include_uname_w(m, L"bar"));
+
+	archive_entry_copy_uname_w(ae, L"unknown");
+	failure("User 'unknown' should be excluded");
+	assertEqualInt(1, archive_match_owner_excluded(m, ae));
+	assertEqualInt(1, archive_match_excluded(m, ae));
+	archive_entry_copy_uname_w(ae, L"foo");
+	failure("User 'foo' should not be excluded");
+	assertEqualInt(0, archive_match_owner_excluded(m, ae));
+	assertEqualInt(0, archive_match_excluded(m, ae));
+	archive_entry_copy_uname_w(ae, L"foo1");
+	failure("User 'foo1' should be excluded");
+	assertEqualInt(1, archive_match_owner_excluded(m, ae));
+	assertEqualInt(1, archive_match_excluded(m, ae));
+	archive_entry_copy_uname_w(ae, L"bar");
+	failure("User 'bar' should not be excluded");
+	assertEqualInt(0, archive_match_owner_excluded(m, ae));
+	assertEqualInt(0, archive_match_excluded(m, ae));
+	archive_entry_copy_uname_w(ae, L"bar1");
+	failure("User 'bar1' should be excluded");
+	assertEqualInt(1, archive_match_owner_excluded(m, ae));
+	assertEqualInt(1, archive_match_excluded(m, ae));
+
+	/* Clean up. */
+	archive_entry_free(ae);
+	archive_match_free(m);
+}
+
+static void
+test_gname_mbs(void)
+{
+	struct archive_entry *ae;
+	struct archive *m;
+
+	if (!assert((m =3D archive_match_new()) !=3D NULL))
+		return;
+	if (!assert((ae =3D archive_entry_new()) !=3D NULL)) {
+		archive_match_free(m);
+		return;
+	}
+
+	assertEqualIntA(m, 0, archive_match_include_gname(m, "foo"));
+	assertEqualIntA(m, 0, archive_match_include_gname(m, "bar"));
+
+	archive_entry_copy_gname(ae, "unknown");
+	failure("Group 'unknown' should be excluded");
+	assertEqualInt(1, archive_match_owner_excluded(m, ae));
+	assertEqualInt(1, archive_match_excluded(m, ae));
+	archive_entry_copy_gname(ae, "foo");
+	failure("Group 'foo' should not be excluded");
+	assertEqualInt(0, archive_match_owner_excluded(m, ae));
+	assertEqualInt(0, archive_match_excluded(m, ae));
+	archive_entry_copy_gname(ae, "foo1");
+	failure("Group 'foo1' should be excluded");
+	assertEqualInt(1, archive_match_owner_excluded(m, ae));
+	assertEqualInt(1, archive_match_excluded(m, ae));
+	archive_entry_copy_gname(ae, "bar");
+	failure("Group 'bar' should not be excluded");
+	assertEqualInt(0, archive_match_owner_excluded(m, ae));
+	assertEqualInt(0, archive_match_excluded(m, ae));
+	archive_entry_copy_gname(ae, "bar1");
+	failure("Group 'bar1' should be excluded");
+	assertEqualInt(1, archive_match_owner_excluded(m, ae));
+	assertEqualInt(1, archive_match_excluded(m, ae));
+
+	/* Clean up. */
+	archive_entry_free(ae);
+	archive_match_free(m);
+}
+
+static void
+test_gname_wcs(void)
+{
+	struct archive_entry *ae;
+	struct archive *m;
+
+	if (!assert((m =3D archive_match_new()) !=3D NULL))
+		return;
+	if (!assert((ae =3D archive_entry_new()) !=3D NULL)) {
+		archive_match_free(m);
+		return;
+	}
+
+	assertEqualIntA(m, 0, archive_match_include_gname_w(m, L"foo"));
+	assertEqualIntA(m, 0, archive_match_include_gname_w(m, L"bar"));
+
+	archive_entry_copy_gname_w(ae, L"unknown");
+	failure("Group 'unknown' should be excluded");
+	assertEqualInt(1, archive_match_owner_excluded(m, ae));
+	assertEqualInt(1, archive_match_excluded(m, ae));
+	archive_entry_copy_gname_w(ae, L"foo");
+	failure("Group 'foo' should not be excluded");
+	assertEqualInt(0, archive_match_owner_excluded(m, ae));
+	assertEqualInt(0, archive_match_excluded(m, ae));
+	archive_entry_copy_gname_w(ae, L"foo1");
+	failure("Group 'foo1' should be excluded");
+	assertEqualInt(1, archive_match_owner_excluded(m, ae));
+	assertEqualInt(1, archive_match_excluded(m, ae));
+	archive_entry_copy_gname_w(ae, L"bar");
+	failure("Group 'bar' should not be excluded");
+	assertEqualInt(0, archive_match_owner_excluded(m, ae));
+	assertEqualInt(0, archive_match_excluded(m, ae));
+	archive_entry_copy_gname_w(ae, L"bar1");
+	failure("Group 'bar1' should be excluded");
+	assertEqualInt(1, archive_match_owner_excluded(m, ae));
+	assertEqualInt(1, archive_match_excluded(m, ae));
+
+	/* Clean up. */
+	archive_entry_free(ae);
+	archive_match_free(m);
+}
+
+DEFINE_TEST(test_archive_match_owner)
+{
+	test_uid();
+	test_gid();
+	test_uname_mbs();
+	test_uname_wcs();
+	test_gname_mbs();
+	test_gname_wcs();
+}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/tes=
t/test_archive_match_path.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/head/contrib/libarchive/libarchive/test/test_archive_match_path.c	Fri=
 Aug 10 14:19:25 2012 +0300
@@ -0,0 +1,450 @@
+/*-
+ * Copyright (c) 2012 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 WARRANTI=
ES
+ * 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 US=
E,
+ * 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 void
+test_exclusion_mbs(void)
+{
+	struct archive_entry *ae;
+	struct archive *m;
+
+	if (!assert((m =3D archive_match_new()) !=3D NULL))
+		return;
+	if (!assert((ae =3D archive_entry_new()) !=3D NULL)) {
+		archive_match_free(m);
+		return;
+	}
+
+	/* Test for pattern "^aa*" */
+	assertEqualIntA(m, 0, archive_match_exclude_pattern(m, "^aa*"));
+
+	/* Test with 'aa1234', which should be excluded. */
+	archive_entry_copy_pathname(ae, "aa1234");
+	failure("'aa1234' should be excluded");
+	assertEqualInt(1, archive_match_path_excluded(m, ae));
+	assertEqualInt(1, archive_match_excluded(m, ae));
+	archive_entry_clear(ae);
+	archive_entry_copy_pathname_w(ae, L"aa1234");
+	failure("'aa1234' should be excluded");
+	assertEqualInt(1, archive_match_path_excluded(m, ae));
+	assertEqualInt(1, archive_match_excluded(m, ae));
+
+	/* Test with 'a1234', which should not be excluded. */
+	archive_entry_copy_pathname(ae, "a1234");
+	failure("'a1234' should not be excluded");
+	assertEqualInt(0, archive_match_path_excluded(m, ae));
+	assertEqualInt(0, archive_match_excluded(m, ae));
+	archive_entry_clear(ae);
+	archive_entry_copy_pathname_w(ae, L"a1234");
+	failure("'a1234' should not be excluded");
+	assertEqualInt(0, archive_match_path_excluded(m, ae));
+	assertEqualInt(0, archive_match_excluded(m, ae));
+
+	/* Clean up. */
+	archive_entry_free(ae);
+	archive_match_free(m);
+}
+
+static void
+test_exclusion_wcs(void)
+{
+	struct archive_entry *ae;
+	struct archive *m;
+
+	if (!assert((m =3D archive_match_new()) !=3D NULL))
+		return;
+	if (!assert((ae =3D archive_entry_new()) !=3D NULL)) {
+		archive_match_free(m);
+		return;
+	}
+
+	/* Test for pattern "^aa*" */
+	assertEqualIntA(m, 0, archive_match_exclude_pattern_w(m, L"^aa*"));
+
+	/* Test with 'aa1234', which should be excluded. */
+	archive_entry_copy_pathname(ae, "aa1234");
+	failure("'aa1234' should be excluded");
+	assertEqualInt(1, archive_match_path_excluded(m, ae));
+	assertEqualInt(1, archive_match_excluded(m, ae));
+	archive_entry_clear(ae);
+	archive_entry_copy_pathname_w(ae, L"aa1234");
+	failure("'aa1234' should be excluded");
+	assertEqualInt(1, archive_match_path_excluded(m, ae));
+	assertEqualInt(1, archive_match_excluded(m, ae));
+
+	/* Test with 'a1234', which should not be excluded. */
+	archive_entry_copy_pathname(ae, "a1234");
+	failure("'a1234' should not be excluded");
+	assertEqualInt(0, archive_match_path_excluded(m, ae));
+	assertEqualInt(0, archive_match_excluded(m, ae));
+	archive_entry_clear(ae);
+	archive_entry_copy_pathname_w(ae, L"a1234");
+	failure("'a1234' should not be excluded");
+	assertEqualInt(0, archive_match_path_excluded(m, ae));
+	assertEqualInt(0, archive_match_excluded(m, ae));
+
+	/* Clean up. */
+	archive_entry_free(ae);
+	archive_match_free(m);
+}
+
+static void
+exclusion_from_file(struct archive *m)
+{
+	struct archive_entry *ae;
+
+	if (!assert((ae =3D archive_entry_new()) !=3D NULL)) {
+		archive_match_free(m);
+		return;
+	}
+
+	/* Test with 'first', which should not be excluded. */
+	archive_entry_copy_pathname(ae, "first");
+	failure("'first' should not be excluded");
+	assertEqualInt(0, archive_match_path_excluded(m, ae));
+	assertEqualInt(0, archive_match_excluded(m, ae));
+	archive_entry_clear(ae);
+	archive_entry_copy_pathname_w(ae, L"first");
+	failure("'first' should not be excluded");
+	assertEqualInt(0, archive_match_path_excluded(m, ae));
+	assertEqualInt(0, archive_match_excluded(m, ae));
+
+	/* Test with 'second', which should be excluded. */
+	archive_entry_copy_pathname(ae, "second");
+	failure("'second' should be excluded");
+	assertEqualInt(1, archive_match_path_excluded(m, ae));
+	assertEqualInt(1, archive_match_excluded(m, ae));
+	archive_entry_clear(ae);
+	archive_entry_copy_pathname_w(ae, L"second");
+	failure("'second' should be excluded");
+	assertEqualInt(1, archive_match_path_excluded(m, ae));
+	assertEqualInt(1, archive_match_excluded(m, ae));
+
+	/* Test with 'third', which should not be excluded. */
+	archive_entry_copy_pathname(ae, "third");
+	failure("'third' should not be excluded");
+	assertEqualInt(0, archive_match_path_excluded(m, ae));
+	assertEqualInt(0, archive_match_excluded(m, ae));
+	archive_entry_clear(ae);
+	archive_entry_copy_pathname_w(ae, L"third");
+	failure("'third' should not be excluded");
+	assertEqualInt(0, archive_match_path_excluded(m, ae));
+	assertEqualInt(0, archive_match_excluded(m, ae));
+
+	/* Test with 'four', which should be excluded. */
+	archive_entry_copy_pathname(ae, "four");
+	failure("'four' should be excluded");
+	assertEqualInt(1, archive_match_path_excluded(m, ae));
+	assertEqualInt(1, archive_match_excluded(m, ae));
+	archive_entry_clear(ae);
+	archive_entry_copy_pathname_w(ae, L"four");
+	failure("'four' should be excluded");
+	assertEqualInt(1, archive_match_path_excluded(m, ae));
+	assertEqualInt(1, archive_match_excluded(m, ae));
+
+	/* Clean up. */
+	archive_entry_free(ae);
+}
+
+static void
+test_exclusion_from_file_mbs(void)
+{
+	struct archive *m;
+
+	/* Test1: read exclusion patterns from file */
+	if (!assert((m =3D archive_match_new()) !=3D NULL))
+		return;
+	assertEqualIntA(m, 0,
+	    archive_match_exclude_pattern_from_file(m, "exclusion", 0));
+	exclusion_from_file(m);
+	/* Clean up. */
+	archive_match_free(m);
+
+	/* Test2: read exclusion patterns in a null separator from file */
+	if (!assert((m =3D archive_match_new()) !=3D NULL))
+		return;
+	/* Test for pattern reading from file */
+	assertEqualIntA(m, 0,
+	    archive_match_exclude_pattern_from_file(m, "exclusion_null", 1));
+	exclusion_from_file(m);
+	/* Clean up. */
+	archive_match_free(m);
+}
+
+static void
+test_exclusion_from_file_wcs(void)
+{
+	struct archive *m;
+
+	/* Test1: read exclusion patterns from file */
+	if (!assert((m =3D archive_match_new()) !=3D NULL))
+		return;
+	assertEqualIntA(m, 0,
+	    archive_match_exclude_pattern_from_file_w(m, L"exclusion", 0));
+	exclusion_from_file(m);
+	/* Clean up. */
+	archive_match_free(m);
+
+	/* Test2: read exclusion patterns in a null separator from file */
+	if (!assert((m =3D archive_match_new()) !=3D NULL))
+		return;
+	/* Test for pattern reading from file */
+	assertEqualIntA(m, 0,
+	    archive_match_exclude_pattern_from_file_w(m, L"exclusion_null", 1));
+	exclusion_from_file(m);
+	/* Clean up. */
+	archive_match_free(m);
+}
+
+static void
+test_inclusion_mbs(void)
+{
+	struct archive_entry *ae;
+	struct archive *m;
+	const char *mp;
+
+	if (!assert((m =3D archive_match_new()) !=3D NULL))
+		return;
+	if (!assert((ae =3D archive_entry_new()) !=3D NULL)) {
+		archive_match_free(m);
+		return;
+	}
+
+	/* Test for pattern "^aa*" */
+	assertEqualIntA(m, 0, archive_match_include_pattern(m, "^aa*"));
+
+	/* Test with 'aa1234', which should not be excluded. */
+	archive_entry_copy_pathname(ae, "aa1234");
+	failure("'aa1234' should not be excluded");
+	assertEqualInt(0, archive_match_path_excluded(m, ae));
+	assertEqualInt(0, archive_match_excluded(m, ae));
+	archive_entry_clear(ae);
+	archive_entry_copy_pathname_w(ae, L"aa1234");
+	failure("'aa1234' should not be excluded");
+	assertEqualInt(0, archive_match_path_excluded(m, ae));
+	assertEqualInt(0, archive_match_excluded(m, ae));
+
+	/* Test with 'a1234', which should be excluded. */
+	archive_entry_copy_pathname(ae, "a1234");
+	failure("'a1234' should be excluded");
+	assertEqualInt(1, archive_match_path_excluded(m, ae));
+	assertEqualInt(1, archive_match_excluded(m, ae));
+	archive_entry_clear(ae);
+	archive_entry_copy_pathname_w(ae, L"a1234");
+	failure("'a1234' should be excluded");
+	assertEqualInt(1, archive_match_path_excluded(m, ae));
+	assertEqualInt(1, archive_match_excluded(m, ae));
+
+	/* Verify unmatched_inclusions. */
+	assertEqualInt(0, archive_match_path_unmatched_inclusions(m));
+	assertEqualIntA(m, ARCHIVE_EOF,
+	    archive_match_path_unmatched_inclusions_next(m, &mp));
+
+	/* Clean up. */
+	archive_entry_free(ae);
+	archive_match_free(m);
+}
+
+static void
+test_inclusion_wcs(void)
+{
+	struct archive_entry *ae;
+	struct archive *m;
+	const char *mp;
+
+	if (!assert((m =3D archive_match_new()) !=3D NULL))
+		return;
+	if (!assert((ae =3D archive_entry_new()) !=3D NULL)) {
+		archive_match_free(m);
+		return;
+	}
+
+	/* Test for pattern "^aa*" */
+	assertEqualIntA(m, 0, archive_match_include_pattern_w(m, L"^aa*"));
+
+	/* Test with 'aa1234', which should not be excluded. */
+	archive_entry_copy_pathname(ae, "aa1234");
+	failure("'aa1234' should not be excluded");
+	assertEqualInt(0, archive_match_path_excluded(m, ae));
+	assertEqualInt(0, archive_match_excluded(m, ae));
+	archive_entry_clear(ae);
+	archive_entry_copy_pathname_w(ae, L"aa1234");
+	failure("'aa1234' should not be excluded");
+	assertEqualInt(0, archive_match_path_excluded(m, ae));
+	assertEqualInt(0, archive_match_excluded(m, ae));
+
+	/* Test with 'a1234', which should be excluded. */
+	archive_entry_copy_pathname(ae, "a1234");
+	failure("'a1234' should be excluded");
+	assertEqualInt(1, archive_match_path_excluded(m, ae));
+	assertEqualInt(1, archive_match_excluded(m, ae));
+	archive_entry_clear(ae);
+	archive_entry_copy_pathname_w(ae, L"a1234");
+	failure("'a1234' should be excluded");
+	assertEqualInt(1, archive_match_path_excluded(m, ae));
+	assertEqualInt(1, archive_match_excluded(m, ae));
+
+	/* Verify unmatched_inclusions. */
+	assertEqualInt(0, archive_match_path_unmatched_inclusions(m));
+	assertEqualIntA(m, ARCHIVE_EOF,
+	    archive_match_path_unmatched_inclusions_next(m, &mp));
+
+	/* Clean up. */
+	archive_entry_free(ae);
+	archive_match_free(m);
+}
+
+static void
+test_inclusion_from_file_mbs(void)
+{
+	struct archive *m;
+
+	/* Test1: read inclusion patterns from file */
+	if (!assert((m =3D archive_match_new()) !=3D NULL))
+		return;
+	assertEqualIntA(m, 0,
+	    archive_match_include_pattern_from_file(m, "inclusion", 0));
+	exclusion_from_file(m);
+	/* Clean up. */
+	archive_match_free(m);
+
+	/* Test2: read inclusion patterns in a null separator from file */
+	if (!assert((m =3D archive_match_new()) !=3D NULL))
+		return;
+	assertEqualIntA(m, 0,
+	    archive_match_include_pattern_from_file(m, "inclusion_null", 1));
+	exclusion_from_file(m);
+	/* Clean up. */
+	archive_match_free(m);
+}
+
+static void
+test_inclusion_from_file_wcs(void)
+{
+	struct archive *m;
+
+	/* Test1: read inclusion patterns from file */
+	if (!assert((m =3D archive_match_new()) !=3D NULL))
+		return;
+	/* Test for pattern reading from file */
+	assertEqualIntA(m, 0,
+	    archive_match_include_pattern_from_file_w(m, L"inclusion", 0));
+	exclusion_from_file(m);
+	/* Clean up. */
+	archive_match_free(m);
+
+	/* Test2: read inclusion patterns in a null separator from file */
+	if (!assert((m =3D archive_match_new()) !=3D NULL))
+		return;
+	/* Test for pattern reading from file */
+	assertEqualIntA(m, 0,
+	    archive_match_include_pattern_from_file_w(m, L"inclusion_null", 1));
+	exclusion_from_file(m);
+	/* Clean up. */
+	archive_match_free(m);
+}
+
+static void
+test_exclusion_and_inclusion(void)
+{
+	struct archive_entry *ae;
+	struct archive *m;
+	const char *mp;
+	const wchar_t *wp;
+
+	if (!assert((m =3D archive_match_new()) !=3D NULL))
+		return;
+	if (!assert((ae =3D archive_entry_new()) !=3D NULL)) {
+		archive_match_free(m);
+		return;
+	}
+
+	assertEqualIntA(m, 0, archive_match_exclude_pattern(m, "^aaa*"));
+	assertEqualIntA(m, 0, archive_match_include_pattern_w(m, L"^aa*"));
+	assertEqualIntA(m, 0, archive_match_include_pattern(m, "^a1*"));
+
+	/* Test with 'aa1234', which should not be excluded. */
+	archive_entry_copy_pathname(ae, "aa1234");
+	failure("'aa1234' should not be excluded");
+	assertEqualInt(0, archive_match_path_excluded(m, ae));
+	assertEqualInt(0, archive_match_excluded(m, ae));
+	archive_entry_clear(ae);
+	archive_entry_copy_pathname_w(ae, L"aa1234");
+	failure("'aa1234' should not be excluded");
+	assertEqualInt(0, archive_match_path_excluded(m, ae));
+	assertEqualInt(0, archive_match_excluded(m, ae));
+
+	/* Test with 'aaa1234', which should be excluded. */
+	archive_entry_copy_pathname(ae, "aaa1234");
+	failure("'aaa1234' should be excluded");
+	assertEqualInt(1, archive_match_path_excluded(m, ae));
+	assertEqualInt(1, archive_match_excluded(m, ae));
+	archive_entry_clear(ae);
+	archive_entry_copy_pathname_w(ae, L"aaa1234");
+	failure("'aaa1234' should be excluded");
+	assertEqualInt(1, archive_match_path_excluded(m, ae));
+	assertEqualInt(1, archive_match_excluded(m, ae));
+
+	/* Verify unmatched_inclusions. */
+	assertEqualInt(1, archive_match_path_unmatched_inclusions(m));
+	/* Verify unmatched inclusion patterns. */
+	assertEqualIntA(m, ARCHIVE_OK,
+	    archive_match_path_unmatched_inclusions_next(m, &mp));
+	assertEqualString("^a1*", mp);
+	assertEqualIntA(m, ARCHIVE_EOF,
+	    archive_match_path_unmatched_inclusions_next(m, &mp));
+	/* Verify unmatched inclusion patterns again in Wide-Char. */
+	assertEqualIntA(m, ARCHIVE_OK,
+	    archive_match_path_unmatched_inclusions_next_w(m, &wp));
+	assertEqualWString(L"^a1*", wp);
+	assertEqualIntA(m, ARCHIVE_EOF,
+	    archive_match_path_unmatched_inclusions_next_w(m, &wp));
+
+	/* Clean up. */
+	archive_entry_free(ae);
+	archive_match_free(m);
+}
+
+DEFINE_TEST(test_archive_match_path)
+{
+	/* Make exclusion sample files which contain exclusion patterns. */
+	assertMakeFile("exclusion", 0666, "second\nfour\n");
+	assertMakeBinFile("exclusion_null", 0666, 12, "second\0four\0");
+	/* Make inclusion sample files which contain inclusion patterns. */
+	assertMakeFile("inclusion", 0666, "first\nthird\n");
+	assertMakeBinFile("inclusion_null", 0666, 12, "first\0third\0");
+
+	test_exclusion_mbs();
+	test_exclusion_wcs();
+	test_exclusion_from_file_mbs();
+	test_exclusion_from_file_wcs();
+	test_inclusion_mbs();
+	test_inclusion_wcs();
+	test_inclusion_from_file_mbs();
+	test_inclusion_from_file_wcs();
+	test_exclusion_and_inclusion();
+}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/tes=
t/test_archive_match_time.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/head/contrib/libarchive/libarchive/test/test_archive_match_time.c	Fri=
 Aug 10 14:19:25 2012 +0300
@@ -0,0 +1,1358 @@
+/*-
+ * Copyright (c) 2012 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 WARRANTI=
ES
+ * 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 US=
E,
+ * 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$");
+
+time_t __archive_get_date(time_t, const char *);
+
+static void
+test_newer_time(void)
+{
+	struct archive_entry *ae;
+	struct archive *m;
+
+	if (!assert((m =3D archive_match_new()) !=3D NULL))
+		return;
+	if (!assert((ae =3D archive_entry_new()) !=3D NULL)) {
+		archive_match_free(m);
+		return;
+	}
+
+	assertEqualIntA(m, 0, archive_match_include_time(m,
+	    ARCHIVE_MATCH_MTIME | ARCHIVE_MATCH_CTIME |
+	    ARCHIVE_MATCH_NEWER, 7880, 0));
+
+	archive_entry_copy_pathname(ae, "file1");
+	archive_entry_set_mtime(ae, 7880, 0);
+	archive_entry_set_ctime(ae, 7880, 0);
+	failure("Both Its mtime and ctime should be excluded");
+	assertEqualInt(1, archive_match_time_excluded(m, ae));
+	assertEqualInt(1, archive_match_excluded(m, ae));
+	archive_entry_set_mtime(ae, 7879, 999);
+	archive_entry_set_ctime(ae, 7879, 999);
+	failure("Both Its mtime and ctime should be excluded");
+	assertEqualInt(1, archive_match_time_excluded(m, ae));
+	assertEqualInt(1, archive_match_excluded(m, ae));
+
+	archive_entry_set_mtime(ae, 7881, 0);
+	archive_entry_set_ctime(ae, 7881, 0);
+	failure("Both Its mtime and ctime should not be excluded");
+	assertEqualInt(0, archive_match_time_excluded(m, ae));
+	assertEqualInt(0, archive_match_excluded(m, ae));
+
+	archive_entry_set_mtime(ae, 7880, 1);
+	archive_entry_set_ctime(ae, 7880, 0);
+	failure("Its mtime should be excluded");
+	assertEqualInt(1, archive_match_time_excluded(m, ae));
+	assertEqualInt(1, archive_match_excluded(m, ae));
+
+	archive_entry_set_mtime(ae, 7880, 0);
+	archive_entry_set_ctime(ae, 7880, 1);
+	failure("Its ctime should be excluded");
+	assertEqualInt(1, archive_match_time_excluded(m, ae));
+	assertEqualInt(1, archive_match_excluded(m, ae));
+
+	/* Clean up. */
+	archive_entry_free(ae);
+	archive_match_free(m);
+}
+
+static void
+test_newer_time_str(void)
+{
+	struct archive_entry *ae;
+	struct archive *m;
+	time_t now, t;
+
+	if (!assert((m =3D archive_match_new()) !=3D NULL))
+		return;
+	if (!assert((ae =3D archive_entry_new()) !=3D NULL)) {
+		archive_match_free(m);
+		return;
+	}
+
+	time(&now);
+
+	assertEqualIntA(m, 0, archive_match_include_date(m,
+	    ARCHIVE_MATCH_MTIME | ARCHIVE_MATCH_CTIME |
+	    ARCHIVE_MATCH_NEWER, "1980/2/1 0:0:0 UTC"));
+
+	/* Test1: Allow newer time. */
+	archive_entry_copy_pathname(ae, "file1");
+	t =3D __archive_get_date(now, "1980/2/1 0:0:0 UTC");
+	archive_entry_set_mtime(ae, t, 0);
+	archive_entry_set_ctime(ae, t, 0);
+	failure("Both Its mtime and ctime should be excluded");
+	assertEqualInt(1, archive_match_time_excluded(m, ae));
+	assertEqualInt(1, archive_match_excluded(m, ae));
+	t =3D __archive_get_date(now, "1980/1/1 0:0:0 UTC");
+	archive_entry_set_mtime(ae, t, 0);
+	archive_entry_set_ctime(ae, t, 0);
+	failure("Both Its mtime and ctime should be excluded");
+	assertEqualInt(1, archive_match_time_excluded(m, ae));
+	assertEqualInt(1, archive_match_excluded(m, ae));
+
+	t =3D __archive_get_date(now, "1980/2/1 0:0:1 UTC");
+	archive_entry_set_mtime(ae, t, 0);
+	archive_entry_set_ctime(ae, t, 0);
+	failure("Both Its mtime and ctime should not be excluded");
+	assertEqualInt(0, archive_match_time_excluded(m, ae));
+	assertEqualInt(0, archive_match_excluded(m, ae));
+
+	t =3D __archive_get_date(now, "1980/2/1 0:0:0 UTC");
+	archive_entry_set_mtime(ae, t, 1);
+	archive_entry_set_ctime(ae, t, 0);
+	failure("Its mtime should be excluded");
+	assertEqualInt(1, archive_match_time_excluded(m, ae));
+	assertEqualInt(1, archive_match_excluded(m, ae));
+
+	archive_entry_set_mtime(ae, t, 0);
+	archive_entry_set_ctime(ae, t, 1);
+	failure("Its ctime should be excluded");
+	assertEqualInt(1, archive_match_time_excluded(m, ae));
+	assertEqualInt(1, archive_match_excluded(m, ae));
+
+
+	/* Test2: Allow equal or newer time. */
+	assertEqualIntA(m, 0, archive_match_include_date(m,
+	    ARCHIVE_MATCH_MTIME | ARCHIVE_MATCH_CTIME |
+	    ARCHIVE_MATCH_NEWER | ARCHIVE_MATCH_EQUAL,
+	    "1980/2/1 0:0:0 UTC"));
+
+	archive_entry_copy_pathname(ae, "file1");
+	t =3D __archive_get_date(now, "1980/2/1 0:0:0 UTC");
+	archive_entry_set_mtime(ae, t, 0);
+	archive_entry_set_ctime(ae, t, 0);
+	failure("Both Its mtime and ctime should not be excluded");
+	assertEqualInt(0, archive_match_time_excluded(m, ae));
+	assertEqualInt(0, archive_match_excluded(m, ae));
+	t =3D __archive_get_date(now, "1980/1/1 0:0:0 UTC");
+	archive_entry_set_mtime(ae, t, 0);
+	archive_entry_set_ctime(ae, t, 0);
+	failure("Both Its mtime and ctime should be excluded");
+	assertEqualInt(1, archive_match_time_excluded(m, ae));
+	assertEqualInt(1, archive_match_excluded(m, ae));
+
+	t =3D __archive_get_date(now, "1980/2/1 0:0:1 UTC");
+	archive_entry_set_mtime(ae, t, 0);
+	archive_entry_set_ctime(ae, t, 0);
+	failure("Both Its mtime and ctime should not be excluded");
+	assertEqualInt(0, archive_match_time_excluded(m, ae));
+	assertEqualInt(0, archive_match_excluded(m, ae));
+
+	/* Clean up. */
+	archive_entry_free(ae);
+	archive_match_free(m);
+}
+
+static void
+test_newer_time_str_w(void)
+{
+	struct archive_entry *ae;
+	struct archive *m;
+	time_t now, t;
+
+	if (!assert((m =3D archive_match_new()) !=3D NULL))
+		return;
+	if (!assert((ae =3D archive_entry_new()) !=3D NULL)) {
+		archive_match_free(m);
+		return;
+	}
+
+	time(&now);
+
+	assertEqualIntA(m, 0, archive_match_include_date_w(m,
+	    ARCHIVE_MATCH_MTIME | ARCHIVE_MATCH_CTIME |
+	    ARCHIVE_MATCH_NEWER, L"1980/2/1 0:0:0 UTC"));
+
+	/* Test1: Allow newer time. */
+	archive_entry_copy_pathname(ae, "file1");
+	t =3D __archive_get_date(now, "1980/2/1 0:0:0 UTC");
+	archive_entry_set_mtime(ae, t, 0);
+	archive_entry_set_ctime(ae, t, 0);
+	failure("Both Its mtime and ctime should be excluded");
+	assertEqualInt(1, archive_match_time_excluded(m, ae));
+	assertEqualInt(1, archive_match_excluded(m, ae));
+	t =3D __archive_get_date(now, "1980/1/1 0:0:0 UTC");
+	archive_entry_set_mtime(ae, t, 0);
+	archive_entry_set_ctime(ae, t, 0);
+	failure("Both Its mtime and ctime should be excluded");
+	assertEqualInt(1, archive_match_time_excluded(m, ae));
+	assertEqualInt(1, archive_match_excluded(m, ae));
+
+	t =3D __archive_get_date(now, "1980/2/1 0:0:1 UTC");
+	archive_entry_set_mtime(ae, t, 0);
+	archive_entry_set_ctime(ae, t, 0);
+	failure("Both Its mtime and ctime should not be excluded");
+	assertEqualInt(0, archive_match_time_excluded(m, ae));
+	assertEqualInt(0, archive_match_excluded(m, ae));
+
+	t =3D __archive_get_date(now, "1980/2/1 0:0:0 UTC");
+	archive_entry_set_mtime(ae, t, 1);
+	archive_entry_set_ctime(ae, t, 0);
+	failure("Its mtime should be excluded");
+	assertEqualInt(1, archive_match_time_excluded(m, ae));
+	assertEqualInt(1, archive_match_excluded(m, ae));
+
+	archive_entry_set_mtime(ae, t, 0);
+	archive_entry_set_ctime(ae, t, 1);
+	failure("Its ctime should be excluded");
+	assertEqualInt(1, archive_match_time_excluded(m, ae));
+	assertEqualInt(1, archive_match_excluded(m, ae));
+
+
+	/* Test2: Allow equal or newer time. */
+	assertEqualIntA(m, 0, archive_match_include_date_w(m,
+	    ARCHIVE_MATCH_MTIME | ARCHIVE_MATCH_CTIME |
+	    ARCHIVE_MATCH_NEWER | ARCHIVE_MATCH_EQUAL,
+	    L"1980/2/1 0:0:0 UTC"));
+
+	archive_entry_copy_pathname(ae, "file1");
+	t =3D __archive_get_date(now, "1980/2/1 0:0:0 UTC");
+	archive_entry_set_mtime(ae, t, 0);
+	archive_entry_set_ctime(ae, t, 0);
+	failure("Both Its mtime and ctime should not be excluded");
+	assertEqualInt(0, archive_match_time_excluded(m, ae));
+	assertEqualInt(0, archive_match_excluded(m, ae));
+	t =3D __archive_get_date(now, "1980/1/1 0:0:0 UTC");
+	archive_entry_set_mtime(ae, t, 0);
+	archive_entry_set_ctime(ae, t, 0);
+	failure("Both Its mtime and ctime should be excluded");
+	assertEqualInt(1, archive_match_time_excluded(m, ae));
+	assertEqualInt(1, archive_match_excluded(m, ae));
+
+	t =3D __archive_get_date(now, "1980/2/1 0:0:1 UTC");
+	archive_entry_set_mtime(ae, t, 0);
+	archive_entry_set_ctime(ae, t, 0);
+	failure("Both Its mtime and ctime should not be excluded");
+	assertEqualInt(0, archive_match_time_excluded(m, ae));
+	assertEqualInt(0, archive_match_excluded(m, ae));
+
+	/* Clean up. */
+	archive_entry_free(ae);
+	archive_match_free(m);
+}
+
+static void
+test_newer_mtime_than_file_mbs(void)
+{
+	struct archive *a;
+	struct archive_entry *ae;
+	struct archive *m;
+
+	if (!assert((m =3D archive_match_new()) !=3D NULL))
+		return;
+	if (!assert((ae =3D archive_entry_new()) !=3D NULL)) {
+		archive_match_free(m);
+		return;
+	}
+	if (!assert((a =3D archive_read_disk_new()) !=3D NULL)) {
+		archive_match_free(m);
+		archive_entry_free(ae);
+		return;
+	}
+
+	/*
+	 * Test: newer mtime than a file specified in MBS file name.
+	 */
+	assertEqualIntA(m, 0, archive_match_include_file_time(m,
+	    ARCHIVE_MATCH_MTIME | ARCHIVE_MATCH_NEWER, "mid_mtime"));
+
+	/* Verify 'old_mtime' file. */
+	archive_entry_copy_pathname(ae, "old_mtime");
+	assertEqualIntA(a, ARCHIVE_OK,
+	    archive_read_disk_entry_from_file(a, ae, -1, NULL));
+	failure("old_mtime should be excluded");
+	assertEqualInt(1, archive_match_time_excluded(m, ae));
+	assertEqualInt(1, archive_match_excluded(m, ae));
+
+	/* Verify 'mid_mtime' file. */
+	archive_entry_clear(ae);
+	archive_entry_copy_pathname(ae, "mid_mtime");
+	assertEqualIntA(a, ARCHIVE_OK,
+	    archive_read_disk_entry_from_file(a, ae, -1, NULL));
+	failure("mid_mtime should be excluded");
+	assertEqualInt(1, archive_match_time_excluded(m, ae));
+	assertEqualInt(1, archive_match_excluded(m, ae));
+
+	/* Verify 'new_mtime' file. */
+	archive_entry_clear(ae);
+	archive_entry_copy_pathname(ae, "new_mtime");
+	assertEqualIntA(a, ARCHIVE_OK,
+	    archive_read_disk_entry_from_file(a, ae, -1, NULL));
+	failure("new_mtime should not be excluded");
+	assertEqualInt(0, archive_match_time_excluded(m, ae));
+	assertEqualInt(0, archive_match_excluded(m, ae));
+
+	/* Clean up. */
+	archive_read_free(a);
+	archive_entry_free(ae);
+	archive_match_free(m);
+}
+
+static void
+test_newer_ctime_than_file_mbs(void)
+{
+	struct archive *a;
+	struct archive_entry *ae;
+	struct archive *m;
+
+	if (!assert((m =3D archive_match_new()) !=3D NULL))
+		return;
+	if (!assert((ae =3D archive_entry_new()) !=3D NULL)) {
+		archive_match_free(m);
+		return;
+	}
+	if (!assert((a =3D archive_read_disk_new()) !=3D NULL)) {
+		archive_match_free(m);
+		archive_entry_free(ae);
+		return;
+	}
+
+	/*
+	 * Test: newer ctime than a file specified in MBS file name.
+	 */
+	assertEqualIntA(m, 0, archive_match_include_file_time(m,
+	    ARCHIVE_MATCH_CTIME | ARCHIVE_MATCH_NEWER, "mid_ctime"));
+
+	/* Verify 'old_ctime' file. */
+	archive_entry_copy_pathname(ae, "old_ctime");
+	assertEqualIntA(a, ARCHIVE_OK,
+	    archive_read_disk_entry_from_file(a, ae, -1, NULL));
+	failure("old_ctime should be excluded");
+	assertEqualInt(1, archive_match_time_excluded(m, ae));
+	assertEqualInt(1, archive_match_excluded(m, ae));
+
+	/* Verify 'mid_ctime' file. */
+	archive_entry_clear(ae);
+	archive_entry_copy_pathname(ae, "mid_ctime");
+	assertEqualIntA(a, ARCHIVE_OK,
+	    archive_read_disk_entry_from_file(a, ae, -1, NULL));
+	failure("mid_ctime should be excluded");
+	assertEqualInt(1, archive_match_time_excluded(m, ae));
+	assertEqualInt(1, archive_match_excluded(m, ae));
+
+	/* Verify 'new_ctime' file. */
+	archive_entry_clear(ae);
+	archive_entry_copy_pathname(ae, "new_ctime");
+	assertEqualIntA(a, ARCHIVE_OK,
+	    archive_read_disk_entry_from_file(a, ae, -1, NULL));
+	failure("new_ctime should not be excluded");
+	assertEqualInt(0, archive_match_time_excluded(m, ae));
+	assertEqualInt(0, archive_match_excluded(m, ae));
+
+	/* Clean up. */
+	archive_read_free(a);
+	archive_entry_free(ae);
+	archive_match_free(m);
+}
+
+static void
+test_newer_mtime_than_file_wcs(void)
+{
+	struct archive *a;
+	struct archive_entry *ae;
+	struct archive *m;
+
+	if (!assert((m =3D archive_match_new()) !=3D NULL))
+		return;
+	if (!assert((ae =3D archive_entry_new()) !=3D NULL)) {
+		archive_match_free(m);
+		return;
+	}
+	if (!assert((a =3D archive_read_disk_new()) !=3D NULL)) {
+		archive_match_free(m);
+		archive_entry_free(ae);
+		return;
+	}
+
+	/*
+	 * Test: newer mtime than a file specified in WCS file name.
+	 */
+	assertEqualIntA(m, 0, archive_match_include_file_time_w(m,
+	    ARCHIVE_MATCH_MTIME | ARCHIVE_MATCH_NEWER, L"mid_mtime"));
+
+	/* Verify 'old_mtime' file. */
+	archive_entry_copy_pathname(ae, "old_mtime");
+	assertEqualIntA(a, ARCHIVE_OK,
+	    archive_read_disk_entry_from_file(a, ae, -1, NULL));
+	failure("old_mtime should be excluded");
+	assertEqualInt(1, archive_match_time_excluded(m, ae));
+	assertEqualInt(1, archive_match_excluded(m, ae));
+
+	/* Verify 'mid_mtime' file. */
+	archive_entry_clear(ae);
+	archive_entry_copy_pathname(ae, "mid_mtime");
+	assertEqualIntA(a, ARCHIVE_OK,
+	    archive_read_disk_entry_from_file(a, ae, -1, NULL));
+	failure("mid_mtime should be excluded");
+	assertEqualInt(1, archive_match_time_excluded(m, ae));
+	assertEqualInt(1, archive_match_excluded(m, ae));
+
+	/* Verify 'new_mtime' file. */
+	archive_entry_clear(ae);
+	archive_entry_copy_pathname(ae, "new_mtime");
+	assertEqualIntA(a, ARCHIVE_OK,
+	    archive_read_disk_entry_from_file(a, ae, -1, NULL));
+	failure("new_mtime should not be excluded");
+	assertEqualInt(0, archive_match_time_excluded(m, ae));
+	assertEqualInt(0, archive_match_excluded(m, ae));
+
+	/* Clean up. */
+	archive_read_free(a);
+	archive_entry_free(ae);
+	archive_match_free(m);
+}
+
+static void
+test_newer_ctime_than_file_wcs(void)
+{
+	struct archive *a;
+	struct archive_entry *ae;
+	struct archive *m;
+
+	if (!assert((m =3D archive_match_new()) !=3D NULL))
+		return;
+	if (!assert((ae =3D archive_entry_new()) !=3D NULL)) {
+		archive_match_free(m);
+		return;
+	}
+	if (!assert((a =3D archive_read_disk_new()) !=3D NULL)) {
+		archive_match_free(m);
+		archive_entry_free(ae);
+		return;
+	}
+
+	/*
+	 * Test: newer ctime than a file specified in WCS file name.
+	 */
+	assertEqualIntA(m, 0, archive_match_include_file_time_w(m,
+	    ARCHIVE_MATCH_CTIME | ARCHIVE_MATCH_NEWER, L"mid_ctime"));
+
+	/* Verify 'old_ctime' file. */
+	archive_entry_clear(ae);
+	archive_entry_copy_pathname(ae, "old_ctime");
+	assertEqualIntA(a, ARCHIVE_OK,
+	    archive_read_disk_entry_from_file(a, ae, -1, NULL));
+	failure("old_ctime should be excluded");
+	assertEqualInt(1, archive_match_time_excluded(m, ae));
+	assertEqualInt(1, archive_match_excluded(m, ae));
+
+	/* Verify 'mid_ctime' file. */
+	archive_entry_clear(ae);
+	archive_entry_copy_pathname(ae, "mid_ctime");
+	assertEqualIntA(a, ARCHIVE_OK,
+	    archive_read_disk_entry_from_file(a, ae, -1, NULL));
+	failure("mid_ctime should be excluded");
+	assertEqualInt(1, archive_match_time_excluded(m, ae));
+	assertEqualInt(1, archive_match_excluded(m, ae));
+
+	/* Verify 'new_ctime' file. */
+	archive_entry_clear(ae);
+	archive_entry_copy_pathname(ae, "new_ctime");
+	assertEqualIntA(a, ARCHIVE_OK,
+	    archive_read_disk_entry_from_file(a, ae, -1, NULL));
+	failure("new_ctime should not be excluded");
+	assertEqualInt(0, archive_match_time_excluded(m, ae));
+	assertEqualInt(0, archive_match_excluded(m, ae));
+
+	/* Clean up. */
+	archive_read_free(a);
+	archive_entry_free(ae);
+	archive_match_free(m);
+}
+
+static void
+test_older_time(void)
+{
+	struct archive_entry *ae;
+	struct archive *m;
+
+	if (!assert((m =3D archive_match_new()) !=3D NULL))
+		return;
+	if (!assert((ae =3D archive_entry_new()) !=3D NULL)) {
+		archive_match_free(m);
+		return;
+	}
+
+	assertEqualIntA(m, 0, archive_match_include_time(m,
+	    ARCHIVE_MATCH_MTIME | ARCHIVE_MATCH_CTIME |
+	    ARCHIVE_MATCH_OLDER, 7880, 0));
+
+	archive_entry_copy_pathname(ae, "file1");
+	archive_entry_set_mtime(ae, 7880, 0);
+	archive_entry_set_ctime(ae, 7880, 0);
+	failure("Both Its mtime and ctime should be excluded");
+	assertEqualInt(1, archive_match_time_excluded(m, ae));
+	assertEqualInt(1, archive_match_excluded(m, ae));
+	archive_entry_set_mtime(ae, 7879, 999);
+	archive_entry_set_ctime(ae, 7879, 999);
+	failure("Both Its mtime and ctime should not be excluded");
+	assertEqualInt(0, archive_match_time_excluded(m, ae));
+	assertEqualInt(0, archive_match_excluded(m, ae));
+
+	archive_entry_set_mtime(ae, 7881, 0);
+	archive_entry_set_ctime(ae, 7881, 0);
+	failure("Both Its mtime and ctime should be excluded");
+	assertEqualInt(1, archive_match_time_excluded(m, ae));
+	assertEqualInt(1, archive_match_excluded(m, ae));
+
+	archive_entry_set_mtime(ae, 7880, 1);
+	archive_entry_set_ctime(ae, 7879, 0);
+	failure("Its mtime should be excluded");
+	assertEqualInt(1, archive_match_time_excluded(m, ae));
+	assertEqualInt(1, archive_match_excluded(m, ae));
+
+	archive_entry_set_mtime(ae, 7879, 0);
+	archive_entry_set_ctime(ae, 7880, 1);
+	failure("Its ctime should be excluded");
+	assertEqualInt(1, archive_match_time_excluded(m, ae));
+	assertEqualInt(1, archive_match_excluded(m, ae));
+
+	/* Clean up. */
+	archive_entry_free(ae);
+	archive_match_free(m);
+}
+
+static void
+test_older_time_str(void)
+{
+	struct archive_entry *ae;
+	struct archive *m;
+	time_t now, t;
+
+	if (!assert((m =3D archive_match_new()) !=3D NULL))
+		return;
+	if (!assert((ae =3D archive_entry_new()) !=3D NULL)) {
+		archive_match_free(m);
+		return;
+	}
+
+	time(&now);
+
+	/* Test1: Allow newer time. */
+	assertEqualIntA(m, 0, archive_match_include_date(m,
+	    ARCHIVE_MATCH_MTIME | ARCHIVE_MATCH_CTIME |
+	    ARCHIVE_MATCH_OLDER, "1980/2/1 0:0:0 UTC"));
+
+	archive_entry_copy_pathname(ae, "file1");
+	t =3D __archive_get_date(now, "1980/2/1 0:0:0 UTC");
+	archive_entry_set_mtime(ae, t, 0);
+	archive_entry_set_ctime(ae, t, 0);
+	failure("Both Its mtime and ctime should be excluded");
+	assertEqualInt(1, archive_match_time_excluded(m, ae));
+	assertEqualInt(1, archive_match_excluded(m, ae));
+	t =3D __archive_get_date(now, "1980/1/1 0:0:0 UTC");
+	archive_entry_set_mtime(ae, t, 0);
+	archive_entry_set_ctime(ae, t, 0);
+	failure("Both Its mtime and ctime should not be excluded");
+	assertEqualInt(0, archive_match_time_excluded(m, ae));
+	assertEqualInt(0, archive_match_excluded(m, ae));
+
+	t =3D __archive_get_date(now, "1980/3/1 0:0:0 UTC");
+	archive_entry_set_mtime(ae, t, 0);
+	archive_entry_set_ctime(ae, t, 0);
+	failure("Both Its mtime and ctime should be excluded");
+	assertEqualInt(1, archive_match_time_excluded(m, ae));
+	assertEqualInt(1, archive_match_excluded(m, ae));
+
+	t =3D __archive_get_date(now, "1980/3/1 0:0:0 UTC");
+	archive_entry_set_mtime(ae, t, 0);
+	t =3D __archive_get_date(now, "1980/1/1 0:0:0 UTC");
+	archive_entry_set_ctime(ae, t, 0);
+	failure("Its mtime should be excluded");
+	assertEqualInt(1, archive_match_time_excluded(m, ae));
+	assertEqualInt(1, archive_match_excluded(m, ae));
+
+	t =3D __archive_get_date(now, "1980/1/1 0:0:0 UTC");
+	archive_entry_set_mtime(ae, t, 0);
+	t =3D __archive_get_date(now, "1980/3/1 0:0:0 UTC");
+	archive_entry_set_ctime(ae, t, 0);
+	failure("Its ctime should be excluded");
+	assertEqualInt(1, archive_match_time_excluded(m, ae));
+	assertEqualInt(1, archive_match_excluded(m, ae));
+
+	/* Test2: Allow equal or newer time. */
+	assertEqualIntA(m, 0, archive_match_include_date(m,
+	    ARCHIVE_MATCH_MTIME | ARCHIVE_MATCH_CTIME |
+	    ARCHIVE_MATCH_OLDER | ARCHIVE_MATCH_EQUAL,
+	    "1980/2/1 0:0:0 UTC"));
+
+	archive_entry_copy_pathname(ae, "file1");
+	t =3D __archive_get_date(now, "1980/2/1 0:0:0 UTC");
+	archive_entry_set_mtime(ae, t, 0);
+	archive_entry_set_ctime(ae, t, 0);
+	failure("Both Its mtime and ctime should not be excluded");
+	assertEqualInt(0, archive_match_time_excluded(m, ae));
+	assertEqualInt(0, archive_match_excluded(m, ae));
+	t =3D __archive_get_date(now, "1980/1/1 0:0:0 UTC");
+	archive_entry_set_mtime(ae, t, 0);
+	archive_entry_set_ctime(ae, t, 0);
+	failure("Both Its mtime and ctime should not be excluded");
+	assertEqualInt(0, archive_match_time_excluded(m, ae));
+	assertEqualInt(0, archive_match_excluded(m, ae));
+
+	t =3D __archive_get_date(now, "1980/3/1 0:0:0 UTC");
+	archive_entry_set_mtime(ae, t, 0);
+	archive_entry_set_ctime(ae, t, 0);
+	failure("Both Its mtime and ctime should be excluded");
+	assertEqualInt(1, archive_match_time_excluded(m, ae));
+	assertEqualInt(1, archive_match_excluded(m, ae));
+
+	/* Clean up. */
+	archive_entry_free(ae);
+	archive_match_free(m);
+}
+
+static void
+test_older_time_str_w(void)
+{
+	struct archive_entry *ae;
+	struct archive *m;
+	time_t now, t;
+
+	if (!assert((m =3D archive_match_new()) !=3D NULL))
+		return;
+	if (!assert((ae =3D archive_entry_new()) !=3D NULL)) {
+		archive_match_free(m);
+		return;
+	}
+
+	time(&now);
+
+	/* Test1: Allow newer time. */
+	assertEqualIntA(m, 0, archive_match_include_date_w(m,
+	    ARCHIVE_MATCH_MTIME | ARCHIVE_MATCH_CTIME |
+	    ARCHIVE_MATCH_OLDER, L"1980/2/1 0:0:0 UTC"));
+
+	archive_entry_copy_pathname(ae, "file1");
+	t =3D __archive_get_date(now, "1980/2/1 0:0:0 UTC");
+	archive_entry_set_mtime(ae, t, 0);
+	archive_entry_set_ctime(ae, t, 0);
+	failure("Both Its mtime and ctime should be excluded");
+	assertEqualInt(1, archive_match_time_excluded(m, ae));
+	assertEqualInt(1, archive_match_excluded(m, ae));
+	t =3D __archive_get_date(now, "1980/1/1 0:0:0 UTC");
+	archive_entry_set_mtime(ae, t, 0);
+	archive_entry_set_ctime(ae, t, 0);
+	failure("Both Its mtime and ctime should not be excluded");
+	assertEqualInt(0, archive_match_time_excluded(m, ae));
+	assertEqualInt(0, archive_match_excluded(m, ae));
+
+	t =3D __archive_get_date(now, "1980/3/1 0:0:0 UTC");
+	archive_entry_set_mtime(ae, t, 0);
+	archive_entry_set_ctime(ae, t, 0);
+	failure("Both Its mtime and ctime should be excluded");
+	assertEqualInt(1, archive_match_time_excluded(m, ae));
+	assertEqualInt(1, archive_match_excluded(m, ae));
+
+	t =3D __archive_get_date(now, "1980/3/1 0:0:0 UTC");
+	archive_entry_set_mtime(ae, t, 0);
+	t =3D __archive_get_date(now, "1980/1/1 0:0:0 UTC");
+	archive_entry_set_ctime(ae, t, 0);
+	failure("Its mtime should be excluded");
+	assertEqualInt(1, archive_match_time_excluded(m, ae));
+	assertEqualInt(1, archive_match_excluded(m, ae));
+
+	t =3D __archive_get_date(now, "1980/1/1 0:0:0 UTC");
+	archive_entry_set_mtime(ae, t, 0);
+	t =3D __archive_get_date(now, "1980/3/1 0:0:0 UTC");
+	archive_entry_set_ctime(ae, t, 0);
+	failure("Its ctime should be excluded");
+	assertEqualInt(1, archive_match_time_excluded(m, ae));
+	assertEqualInt(1, archive_match_excluded(m, ae));
+
+	/* Test2: Allow equal or newer time. */
+	assertEqualIntA(m, 0, archive_match_include_date_w(m,
+	    ARCHIVE_MATCH_MTIME | ARCHIVE_MATCH_CTIME |
+	    ARCHIVE_MATCH_OLDER | ARCHIVE_MATCH_EQUAL,
+	    L"1980/2/1 0:0:0 UTC"));
+
+	archive_entry_copy_pathname(ae, "file1");
+	t =3D __archive_get_date(now, "1980/2/1 0:0:0 UTC");
+	archive_entry_set_mtime(ae, t, 0);
+	archive_entry_set_ctime(ae, t, 0);
+	failure("Both Its mtime and ctime should not be excluded");
+	assertEqualInt(0, archive_match_time_excluded(m, ae));
+	assertEqualInt(0, archive_match_excluded(m, ae));
+	t =3D __archive_get_date(now, "1980/1/1 0:0:0 UTC");
+	archive_entry_set_mtime(ae, t, 0);
+	archive_entry_set_ctime(ae, t, 0);
+	failure("Both Its mtime and ctime should not be excluded");
+	assertEqualInt(0, archive_match_time_excluded(m, ae));
+	assertEqualInt(0, archive_match_excluded(m, ae));
+
+	t =3D __archive_get_date(now, "1980/3/1 0:0:0 UTC");
+	archive_entry_set_mtime(ae, t, 0);
+	archive_entry_set_ctime(ae, t, 0);
+	failure("Both Its mtime and ctime should be excluded");
+	assertEqualInt(1, archive_match_time_excluded(m, ae));
+	assertEqualInt(1, archive_match_excluded(m, ae));
+
+	/* Clean up. */
+	archive_entry_free(ae);
+	archive_match_free(m);
+}
+
+static void
+test_older_mtime_than_file_mbs(void)
+{
+	struct archive *a;
+	struct archive_entry *ae;
+	struct archive *m;
+
+	if (!assert((m =3D archive_match_new()) !=3D NULL))
+		return;
+	if (!assert((ae =3D archive_entry_new()) !=3D NULL)) {
+		archive_match_free(m);
+		return;
+	}
+	if (!assert((a =3D archive_read_disk_new()) !=3D NULL)) {
+		archive_match_free(m);
+		archive_entry_free(ae);
+		return;
+	}
+
+	/*
+	 * Test: older mtime than a file specified in MBS file name.
+	 */
+	assertEqualIntA(m, 0, archive_match_include_file_time(m,
+	    ARCHIVE_MATCH_MTIME | ARCHIVE_MATCH_OLDER, "mid_mtime"));
+
+	/* Verify 'old_mtime' file. */
+	archive_entry_copy_pathname(ae, "old_mtime");
+	assertEqualIntA(a, ARCHIVE_OK,
+	    archive_read_disk_entry_from_file(a, ae, -1, NULL));
+	failure("old_mtime should not be excluded");
+	assertEqualInt(0, archive_match_time_excluded(m, ae));
+	assertEqualInt(0, archive_match_excluded(m, ae));
+
+	/* Verify 'mid_mtime' file. */
+	archive_entry_clear(ae);
+	archive_entry_copy_pathname(ae, "mid_mtime");
+	assertEqualIntA(a, ARCHIVE_OK,
+	    archive_read_disk_entry_from_file(a, ae, -1, NULL));
+	failure("mid_mtime should be excluded");
+	assertEqualInt(1, archive_match_time_excluded(m, ae));
+	assertEqualInt(1, archive_match_excluded(m, ae));
+
+	/* Verify 'new_mtime' file. */
+	archive_entry_clear(ae);
+	archive_entry_copy_pathname(ae, "new_mtime");
+	assertEqualIntA(a, ARCHIVE_OK,
+	    archive_read_disk_entry_from_file(a, ae, -1, NULL));
+	failure("new_mtime should be excluded");
+	assertEqualInt(1, archive_match_time_excluded(m, ae));
+	assertEqualInt(1, archive_match_excluded(m, ae));
+
+	/* Clean up. */
+	archive_read_free(a);
+	archive_entry_free(ae);
+	archive_match_free(m);
+}
+
+static void
+test_older_ctime_than_file_mbs(void)
+{
+	struct archive *a;
+	struct archive_entry *ae;
+	struct archive *m;
+
+	if (!assert((m =3D archive_match_new()) !=3D NULL))
+		return;
+	if (!assert((ae =3D archive_entry_new()) !=3D NULL)) {
+		archive_match_free(m);
+		return;
+	}
+	if (!assert((a =3D archive_read_disk_new()) !=3D NULL)) {
+		archive_match_free(m);
+		archive_entry_free(ae);
+		return;
+	}
+
+	/*
+	 * Test: older ctime than a file specified in MBS file name.
+	 */
+	assertEqualIntA(m, 0, archive_match_include_file_time(m,
+	    ARCHIVE_MATCH_CTIME | ARCHIVE_MATCH_OLDER, "mid_ctime"));
+
+	/* Verify 'old_ctime' file. */
+	archive_entry_clear(ae);
+	archive_entry_copy_pathname(ae, "old_ctime");
+	assertEqualIntA(a, ARCHIVE_OK,
+	    archive_read_disk_entry_from_file(a, ae, -1, NULL));
+	failure("old_ctime should not be excluded");
+	assertEqualInt(0, archive_match_time_excluded(m, ae));
+	assertEqualInt(0, archive_match_excluded(m, ae));
+
+	/* Verify 'mid_ctime' file. */
+	archive_entry_clear(ae);
+	archive_entry_copy_pathname(ae, "mid_ctime");
+	assertEqualIntA(a, ARCHIVE_OK,
+	    archive_read_disk_entry_from_file(a, ae, -1, NULL));
+	failure("mid_ctime should be excluded");
+	assertEqualInt(1, archive_match_time_excluded(m, ae));
+	assertEqualInt(1, archive_match_excluded(m, ae));
+
+	/* Verify 'new_ctime' file. */
+	archive_entry_clear(ae);
+	archive_entry_copy_pathname(ae, "new_ctime");
+	assertEqualIntA(a, ARCHIVE_OK,
+	    archive_read_disk_entry_from_file(a, ae, -1, NULL));
+	failure("new_ctime should be excluded");
+	assertEqualInt(1, archive_match_time_excluded(m, ae));
+	assertEqualInt(1, archive_match_excluded(m, ae));
+
+	/* Clean up. */
+	archive_read_free(a);
+	archive_entry_free(ae);
+	archive_match_free(m);
+}
+
+static void
+test_older_mtime_than_file_wcs(void)
+{
+	struct archive *a;
+	struct archive_entry *ae;
+	struct archive *m;
+
+	if (!assert((m =3D archive_match_new()) !=3D NULL))
+		return;
+	if (!assert((ae =3D archive_entry_new()) !=3D NULL)) {
+		archive_match_free(m);
+		return;
+	}
+	if (!assert((a =3D archive_read_disk_new()) !=3D NULL)) {
+		archive_match_free(m);
+		archive_entry_free(ae);
+		return;
+	}
+
+	/*
+	 * Test: older mtime than a file specified in WCS file name.
+	 */
+	assertEqualIntA(m, 0, archive_match_include_file_time_w(m,
+	    ARCHIVE_MATCH_MTIME | ARCHIVE_MATCH_OLDER, L"mid_mtime"));
+
+	/* Verify 'old_mtime' file. */
+	archive_entry_copy_pathname(ae, "old_mtime");
+	assertEqualIntA(a, ARCHIVE_OK,
+	    archive_read_disk_entry_from_file(a, ae, -1, NULL));
+	failure("old_mtime should not be excluded");
+	assertEqualInt(0, archive_match_time_excluded(m, ae));
+	assertEqualInt(0, archive_match_excluded(m, ae));
+
+	/* Verify 'mid_mtime' file. */
+	archive_entry_clear(ae);
+	archive_entry_copy_pathname(ae, "mid_mtime");
+	assertEqualIntA(a, ARCHIVE_OK,
+	    archive_read_disk_entry_from_file(a, ae, -1, NULL));
+	failure("mid_mtime should be excluded");
+	assertEqualInt(1, archive_match_time_excluded(m, ae));
+	assertEqualInt(1, archive_match_excluded(m, ae));
+
+	/* Verify 'new_mtime' file. */
+	archive_entry_clear(ae);
+	archive_entry_copy_pathname(ae, "new_mtime");
+	assertEqualIntA(a, ARCHIVE_OK,
+	    archive_read_disk_entry_from_file(a, ae, -1, NULL));
+	failure("new_mtime should be excluded");
+	assertEqualInt(1, archive_match_time_excluded(m, ae));
+	assertEqualInt(1, archive_match_excluded(m, ae));
+
+	/* Clean up. */
+	archive_read_free(a);
+	archive_entry_free(ae);
+	archive_match_free(m);
+}
+
+static void
+test_older_ctime_than_file_wcs(void)
+{
+	struct archive *a;
+	struct archive_entry *ae;
+	struct archive *m;
+
+	if (!assert((m =3D archive_match_new()) !=3D NULL))
+		return;
+	if (!assert((ae =3D archive_entry_new()) !=3D NULL)) {
+		archive_match_free(m);
+		return;
+	}
+	if (!assert((a =3D archive_read_disk_new()) !=3D NULL)) {
+		archive_match_free(m);
+		archive_entry_free(ae);
+		return;
+	}
+
+	/*
+	 * Test: older ctime than a file specified in WCS file name.
+	 */
+	assertEqualIntA(m, 0, archive_match_include_file_time_w(m,
+	    ARCHIVE_MATCH_CTIME | ARCHIVE_MATCH_OLDER, L"mid_ctime"));
+
+	/* Verify 'old_ctime' file. */
+	archive_entry_clear(ae);
+	archive_entry_copy_pathname(ae, "old_ctime");
+	assertEqualIntA(a, ARCHIVE_OK,
+	    archive_read_disk_entry_from_file(a, ae, -1, NULL));
+	failure("old_ctime should not be excluded");
+	assertEqualInt(0, archive_match_time_excluded(m, ae));
+	assertEqualInt(0, archive_match_excluded(m, ae));
+
+	/* Verify 'mid_ctime' file. */
+	archive_entry_clear(ae);
+	archive_entry_copy_pathname(ae, "mid_ctime");
+	assertEqualIntA(a, ARCHIVE_OK,
+	    archive_read_disk_entry_from_file(a, ae, -1, NULL));
+	failure("mid_ctime should be excluded");
+	assertEqualInt(1, archive_match_time_excluded(m, ae));
+	assertEqualInt(1, archive_match_excluded(m, ae));
+
+	/* Verify 'new_ctime' file. */
+	archive_entry_clear(ae);
+	archive_entry_copy_pathname(ae, "new_ctime");
+	assertEqualIntA(a, ARCHIVE_OK,
+	    archive_read_disk_entry_from_file(a, ae, -1, NULL));
+	failure("new_ctime should be excluded");
+	assertEqualInt(1, archive_match_time_excluded(m, ae));
+	assertEqualInt(1, archive_match_excluded(m, ae));
+
+	/* Clean up. */
+	archive_read_free(a);
+	archive_entry_free(ae);
+	archive_match_free(m);
+}
+
+static void
+test_mtime_between_files_mbs(void)
+{
+	struct archive *a;
+	struct archive_entry *ae;
+	struct archive *m;
+
+	if (!assert((m =3D archive_match_new()) !=3D NULL))
+		return;
+	if (!assert((ae =3D archive_entry_new()) !=3D NULL)) {
+		archive_match_free(m);
+		return;
+	}
+	if (!assert((a =3D archive_read_disk_new()) !=3D NULL)) {
+		archive_match_free(m);
+		archive_entry_free(ae);
+		return;
+	}
+
+	/*
+	 * Test: mtime between  file specified in MBS file name.
+	 */
+	assertEqualIntA(m, 0, archive_match_include_file_time(m,
+	    ARCHIVE_MATCH_MTIME | ARCHIVE_MATCH_NEWER, "old_mtime"));
+	assertEqualIntA(m, 0, archive_match_include_file_time(m,
+	    ARCHIVE_MATCH_MTIME | ARCHIVE_MATCH_OLDER, "new_mtime"));
+
+	/* Verify 'old_mtime' file. */
+	archive_entry_copy_pathname(ae, "old_mtime");
+	assertEqualIntA(a, ARCHIVE_OK,
+	    archive_read_disk_entry_from_file(a, ae, -1, NULL));
+	failure("old_mtime should be excluded");
+	assertEqualInt(1, archive_match_time_excluded(m, ae));
+	assertEqualInt(1, archive_match_excluded(m, ae));
+
+	/* Verify 'mid_mtime' file. */
+	archive_entry_clear(ae);
+	archive_entry_copy_pathname(ae, "mid_mtime");
+	assertEqualIntA(a, ARCHIVE_OK,
+	    archive_read_disk_entry_from_file(a, ae, -1, NULL));
+	failure("mid_mtime should not be excluded");
+	assertEqualInt(0, archive_match_time_excluded(m, ae));
+	assertEqualInt(0, archive_match_excluded(m, ae));
+
+	/* Verify 'new_mtime' file. */
+	archive_entry_clear(ae);
+	archive_entry_copy_pathname(ae, "new_mtime");
+	assertEqualIntA(a, ARCHIVE_OK,
+	    archive_read_disk_entry_from_file(a, ae, -1, NULL));
+	failure("new_mtime should be excluded");
+	assertEqualInt(1, archive_match_time_excluded(m, ae));
+	assertEqualInt(1, archive_match_excluded(m, ae));
+
+	/* Clean up. */
+	archive_read_free(a);
+	archive_entry_free(ae);
+	archive_match_free(m);
+}
+
+static void
+test_mtime_between_files_wcs(void)
+{
+	struct archive *a;
+	struct archive_entry *ae;
+	struct archive *m;
+
+	if (!assert((m =3D archive_match_new()) !=3D NULL))
+		return;
+	if (!assert((ae =3D archive_entry_new()) !=3D NULL)) {
+		archive_match_free(m);
+		return;
+	}
+	if (!assert((a =3D archive_read_disk_new()) !=3D NULL)) {
+		archive_match_free(m);
+		archive_entry_free(ae);
+		return;
+	}
+
+	/*
+	 * Test: mtime between  file specified in WCS file name.
+	 */
+	assertEqualIntA(m, 0, archive_match_include_file_time_w(m,
+	    ARCHIVE_MATCH_MTIME | ARCHIVE_MATCH_NEWER, L"old_mtime"));
+	assertEqualIntA(m, 0, archive_match_include_file_time_w(m,
+	    ARCHIVE_MATCH_MTIME | ARCHIVE_MATCH_OLDER, L"new_mtime"));
+
+	/* Verify 'old_mtime' file. */
+	archive_entry_copy_pathname(ae, "old_mtime");
+	assertEqualIntA(a, ARCHIVE_OK,
+	    archive_read_disk_entry_from_file(a, ae, -1, NULL));
+	failure("old_mtime should be excluded");
+	assertEqualInt(1, archive_match_time_excluded(m, ae));
+	assertEqualInt(1, archive_match_excluded(m, ae));
+
+	/* Verify 'mid_mtime' file. */
+	archive_entry_clear(ae);
+	archive_entry_copy_pathname(ae, "mid_mtime");
+	assertEqualIntA(a, ARCHIVE_OK,
+	    archive_read_disk_entry_from_file(a, ae, -1, NULL));
+	failure("mid_mtime should not be excluded");
+	assertEqualInt(0, archive_match_time_excluded(m, ae));
+	assertEqualInt(0, archive_match_excluded(m, ae));
+
+	/* Verify 'new_mtime' file. */
+	archive_entry_clear(ae);
+	archive_entry_copy_pathname(ae, "new_mtime");
+	assertEqualIntA(a, ARCHIVE_OK,
+	    archive_read_disk_entry_from_file(a, ae, -1, NULL));
+	failure("new_mtime should be excluded");
+	assertEqualInt(1, archive_match_time_excluded(m, ae));
+	assertEqualInt(1, archive_match_excluded(m, ae));
+
+	/* Clean up. */
+	archive_read_free(a);
+	archive_entry_free(ae);
+	archive_match_free(m);
+}
+
+static void
+test_ctime_between_files_mbs(void)
+{
+	struct archive *a;
+	struct archive_entry *ae;
+	struct archive *m;
+
+	if (!assert((m =3D archive_match_new()) !=3D NULL))
+		return;
+	if (!assert((ae =3D archive_entry_new()) !=3D NULL)) {
+		archive_match_free(m);
+		return;
+	}
+	if (!assert((a =3D archive_read_disk_new()) !=3D NULL)) {
+		archive_match_free(m);
+		archive_entry_free(ae);
+		return;
+	}
+
+	/*
+	 * Test: ctime between files specified in MBS file name.
+	 */
+	assertEqualIntA(m, 0, archive_match_include_file_time(m,
+	    ARCHIVE_MATCH_CTIME | ARCHIVE_MATCH_NEWER, "old_ctime"));
+	assertEqualIntA(m, 0, archive_match_include_file_time(m,
+	    ARCHIVE_MATCH_CTIME | ARCHIVE_MATCH_OLDER, "new_ctime"));
+
+	/* Verify 'old_ctime' file. */
+	archive_entry_copy_pathname(ae, "old_ctime");
+	assertEqualIntA(a, ARCHIVE_OK,
+	    archive_read_disk_entry_from_file(a, ae, -1, NULL));
+	failure("old_ctime should be excluded");
+	assertEqualInt(1, archive_match_time_excluded(m, ae));
+	assertEqualInt(1, archive_match_excluded(m, ae));
+
+	/* Verify 'mid_ctime' file. */
+	archive_entry_clear(ae);
+	archive_entry_copy_pathname(ae, "mid_ctime");
+	assertEqualIntA(a, ARCHIVE_OK,
+	    archive_read_disk_entry_from_file(a, ae, -1, NULL));
+	failure("mid_ctime should not be excluded");
+	assertEqualInt(0, archive_match_time_excluded(m, ae));
+	assertEqualInt(0, archive_match_excluded(m, ae));
+
+	/* Verify 'new_ctime' file. */
+	archive_entry_clear(ae);
+	archive_entry_copy_pathname(ae, "new_ctime");
+	assertEqualIntA(a, ARCHIVE_OK,
+	    archive_read_disk_entry_from_file(a, ae, -1, NULL));
+	failure("new_ctime should be excluded");
+	assertEqualInt(1, archive_match_time_excluded(m, ae));
+	assertEqualInt(1, archive_match_excluded(m, ae));
+
+	/* Clean up. */
+	archive_read_free(a);
+	archive_entry_free(ae);
+	archive_match_free(m);
+}
+
+static void
+test_ctime_between_files_wcs(void)
+{
+	struct archive *a;
+	struct archive_entry *ae;
+	struct archive *m;
+
+	if (!assert((m =3D archive_match_new()) !=3D NULL))
+		return;
+	if (!assert((ae =3D archive_entry_new()) !=3D NULL)) {
+		archive_match_free(m);
+		return;
+	}
+	if (!assert((a =3D archive_read_disk_new()) !=3D NULL)) {
+		archive_match_free(m);
+		archive_entry_free(ae);
+		return;
+	}
+
+	/*
+	 * Test: ctime between files specified in WCS file name.
+	 */
+	assertEqualIntA(m, 0, archive_match_include_file_time_w(m,
+	    ARCHIVE_MATCH_CTIME | ARCHIVE_MATCH_NEWER, L"old_ctime"));
+	assertEqualIntA(m, 0, archive_match_include_file_time_w(m,
+	    ARCHIVE_MATCH_CTIME | ARCHIVE_MATCH_OLDER, L"new_ctime"));
+
+	/* Verify 'old_ctime' file. */
+	archive_entry_copy_pathname(ae, "old_ctime");
+	assertEqualIntA(a, ARCHIVE_OK,
+	    archive_read_disk_entry_from_file(a, ae, -1, NULL));
+	failure("old_ctime should be excluded");
+	assertEqualInt(1, archive_match_time_excluded(m, ae));
+	assertEqualInt(1, archive_match_excluded(m, ae));
+
+	/* Verify 'mid_ctime' file. */
+	archive_entry_clear(ae);
+	archive_entry_copy_pathname(ae, "mid_ctime");
+	assertEqualIntA(a, ARCHIVE_OK,
+	    archive_read_disk_entry_from_file(a, ae, -1, NULL));
+	failure("mid_ctime should not be excluded");
+	assertEqualInt(0, archive_match_time_excluded(m, ae));
+	assertEqualInt(0, archive_match_excluded(m, ae));
+
+	/* Verify 'new_ctime' file. */
+	archive_entry_clear(ae);
+	archive_entry_copy_pathname(ae, "new_ctime");
+	assertEqualIntA(a, ARCHIVE_OK,
+	    archive_read_disk_entry_from_file(a, ae, -1, NULL));
+	failure("new_ctime should be excluded");
+	assertEqualInt(1, archive_match_time_excluded(m, ae));
+	assertEqualInt(1, archive_match_excluded(m, ae));
+
+	/* Clean up. */
+	archive_read_free(a);
+	archive_entry_free(ae);
+	archive_match_free(m);
+}
+
+static void
+excluded(struct archive *m)
+{
+	struct archive_entry *ae;
+
+	if (!assert((ae =3D archive_entry_new()) !=3D NULL))
+		return;
+
+	archive_entry_copy_pathname(ae, "file1");
+	archive_entry_set_mtime(ae, 7879, 999);
+	failure("It should be excluded");
+	assertEqualInt(1, archive_match_time_excluded(m, ae));
+	assertEqualInt(1, archive_match_excluded(m, ae));
+	archive_entry_set_mtime(ae, 7880, 0);
+	failure("It should be excluded");
+	assertEqualInt(1, archive_match_time_excluded(m, ae));
+	assertEqualInt(1, archive_match_excluded(m, ae));
+	archive_entry_set_mtime(ae, 7880, 1);
+	failure("It should not be excluded");
+	assertEqualInt(0, archive_match_time_excluded(m, ae));
+	assertEqualInt(0, archive_match_excluded(m, ae));
+
+	archive_entry_copy_pathname(ae, "file2");
+	archive_entry_set_mtime(ae, 7879, 999);
+	failure("It should not be excluded");
+	assertEqualInt(0, archive_match_time_excluded(m, ae));
+	assertEqualInt(0, archive_match_excluded(m, ae));
+	archive_entry_set_mtime(ae, 7880, 0);
+	failure("It should not be excluded");
+	assertEqualInt(0, archive_match_time_excluded(m, ae));
+	assertEqualInt(0, archive_match_excluded(m, ae));
+	archive_entry_set_mtime(ae, 7880, 1);
+	failure("It should not be excluded");
+	assertEqualInt(0, archive_match_time_excluded(m, ae));
+	assertEqualInt(0, archive_match_excluded(m, ae));
+
+	archive_entry_copy_pathname(ae, "file3");
+	archive_entry_set_mtime(ae, 7879, 999);
+	failure("It should be excluded");
+	assertEqualInt(1, archive_match_time_excluded(m, ae));
+	assertEqualInt(1, archive_match_excluded(m, ae));
+	archive_entry_set_mtime(ae, 7880, 0);
+	failure("It should be excluded");
+	assertEqualInt(1, archive_match_time_excluded(m, ae));
+	assertEqualInt(1, archive_match_excluded(m, ae));
+	archive_entry_set_mtime(ae, 7880, 1);
+	failure("It should be excluded");
+	assertEqualInt(1, archive_match_time_excluded(m, ae));
+	assertEqualInt(1, archive_match_excluded(m, ae));
+
+	/*
+	 * "file4" is not registered, that sort of a file should not be
+	 * excluded with any mtime.
+	 */
+	archive_entry_copy_pathname(ae, "file4");
+	archive_entry_set_mtime(ae, 7879, 999);
+	failure("It should not be excluded");
+	assertEqualInt(0, archive_match_time_excluded(m, ae));
+	assertEqualInt(0, archive_match_excluded(m, ae));
+	archive_entry_set_mtime(ae, 7880, 0);
+	failure("It should not be excluded");
+	assertEqualInt(0, archive_match_time_excluded(m, ae));
+	assertEqualInt(0, archive_match_excluded(m, ae));
+	archive_entry_set_mtime(ae, 7880, 1);
+	failure("It should not be excluded");
+	assertEqualInt(0, archive_match_time_excluded(m, ae));
+	assertEqualInt(0, archive_match_excluded(m, ae));
+
+
+	/* Clean up. */
+	archive_entry_free(ae);
+}
+
+static void
+test_pathname_newer_mtime(void)
+{
+	struct archive_entry *ae;
+	struct archive *m;
+
+	if (!assert((m =3D archive_match_new()) !=3D NULL))
+		return;
+	if (!assert((ae =3D archive_entry_new()) !=3D NULL)) {
+		archive_match_free(m);
+		return;
+	}
+
+	archive_entry_copy_pathname(ae, "file1");
+	archive_entry_set_mtime(ae, 7880, 0);
+	assertEqualIntA(m, 0, archive_match_exclude_entry(m,
+	    ARCHIVE_MATCH_MTIME | ARCHIVE_MATCH_OLDER |
+	    ARCHIVE_MATCH_EQUAL, ae));
+	archive_entry_copy_pathname(ae, "file2");
+	archive_entry_set_mtime(ae, 1, 0);
+	assertEqualIntA(m, 0, archive_match_exclude_entry(m,
+	    ARCHIVE_MATCH_MTIME | ARCHIVE_MATCH_OLDER |
+	    ARCHIVE_MATCH_EQUAL, ae));
+	archive_entry_copy_pathname(ae, "file3");
+	archive_entry_set_mtime(ae, 99999, 0);
+	assertEqualIntA(m, 0, archive_match_exclude_entry(m,
+	    ARCHIVE_MATCH_MTIME | ARCHIVE_MATCH_OLDER |
+	    ARCHIVE_MATCH_EQUAL, ae));
+
+	excluded(m);
+
+	/* Clean up. */
+	archive_entry_free(ae);
+	archive_match_free(m);
+}
+
+DEFINE_TEST(test_archive_match_time)
+{
+	struct stat st;
+
+	/* Test: matching newer times. */
+	test_newer_time();
+	test_newer_time_str();
+	test_newer_time_str_w();
+	/* Test: matching older times. */
+	test_older_time();
+	test_older_time_str();
+	test_older_time_str_w();
+
+	/*
+	 * Create sample files for tests matching mtime.
+	 * ctimes of those files may be all the same or the ctime of
+	 * new_mtime may be older than old_mtime.
+	 */
+	assertMakeFile("new_mtime", 0666, "new");
+	assertUtimes("new_mtime", 10002, 0, 10002, 0);
+	assertMakeFile("mid_mtime", 0666, "mid");
+	assertUtimes("mid_mtime", 10001, 0, 10001, 0);
+	assertMakeFile("old_mtime", 0666, "old");
+	assertUtimes("old_mtime", 10000, 0, 10000, 0);
+
+	/*
+	 * Create sample files for tests matching ctime.
+	 * the mtime of mid_ctime is older than old_ctime and also the mtime
+	 * of new_ctime is older than both mid_ctime and old_ctime.
+	 */
+	assertMakeFile("old_ctime", 0666, "old");
+	assertUtimes("old_ctime", 10002, 0, 10002, 0);
+	assertEqualInt(0, stat("old_ctime", &st));
+	sleepUntilAfter(st.st_ctime);
+	assertMakeFile("mid_ctime", 0666, "mid");
+	assertUtimes("mid_ctime", 10001, 0, 10001, 0);
+	assertEqualInt(0, stat("mid_ctime", &st));
+	sleepUntilAfter(st.st_ctime);
+	assertMakeFile("new_ctime", 0666, "new");
+	assertUtimes("new_ctime", 10000, 0, 10000, 0);
+
+	/*
+	 * Test: matching mtime which indicated by files on the disk.
+	 */
+	test_newer_mtime_than_file_mbs();
+	test_newer_mtime_than_file_wcs();
+	test_older_mtime_than_file_mbs();
+	test_older_mtime_than_file_wcs();
+	test_mtime_between_files_mbs();
+	test_mtime_between_files_wcs();
+
+	/*
+	 * Test: matching ctime which indicated by files on the disk.
+	 */
+	test_newer_ctime_than_file_mbs();
+	test_newer_ctime_than_file_wcs();
+	test_older_ctime_than_file_mbs();
+	test_older_ctime_than_file_wcs();
+	test_ctime_between_files_mbs();
+	test_ctime_between_files_wcs();
+
+	/* Test: matching both pathname and mtime. */
+	test_pathname_newer_mtime();
+}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/tes=
t/test_archive_pathmatch.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/head/contrib/libarchive/libarchive/test/test_archive_pathmatch.c	Fri =
Aug 10 14:19:25 2012 +0300
@@ -0,0 +1,244 @@
+/*-
+ * 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 WARRANTI=
ES
+ * 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 US=
E,
+ * 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 __LIBARCHIVE_TEST
+#include "archive_pathmatch.h"
+
+/*
+ * Verify that the pattern matcher implements the wildcard logic specified
+ * in SUSv2 for the cpio command.  This is essentially the
+ * shell glob syntax:
+ *   * - matches any sequence of chars, including '/'
+ *   ? - matches any single char, including '/'
+ *   [...] - matches any of a set of chars, '-' specifies a range,
+ *        initial '!' is undefined
+ *
+ * The specification in SUSv2 is a bit incomplete, I assume the following:
+ *   Trailing '-' in [...] is not special.
+ *
+ * TODO: Figure out if there's a good way to extend this to handle
+ * Windows paths that use '\' as a path separator.  <sigh>
+ */
+
+DEFINE_TEST(test_archive_pathmatch)
+{
+	assertEqualInt(1, archive_pathmatch("a/b/c", "a/b/c", 0));
+	assertEqualInt(0, archive_pathmatch("a/b/", "a/b/c", 0));
+	assertEqualInt(0, archive_pathmatch("a/b", "a/b/c", 0));
+	assertEqualInt(0, archive_pathmatch("a/b/c", "a/b/", 0));
+	assertEqualInt(0, archive_pathmatch("a/b/c", "a/b", 0));
+
+	/* Empty pattern only matches empty string. */
+	assertEqualInt(1, archive_pathmatch("","", 0));
+	assertEqualInt(0, archive_pathmatch("","a", 0));
+	assertEqualInt(1, archive_pathmatch("*","", 0));
+	assertEqualInt(1, archive_pathmatch("*","a", 0));
+	assertEqualInt(1, archive_pathmatch("*","abcd", 0));
+	/* SUSv2: * matches / */
+	assertEqualInt(1, archive_pathmatch("*","abcd/efgh/ijkl", 0));
+	assertEqualInt(1, archive_pathmatch("abcd*efgh/ijkl","abcd/efgh/ijkl", 0)=
);
+	assertEqualInt(1, archive_pathmatch("abcd***efgh/ijkl","abcd/efgh/ijkl", =
0));
+	assertEqualInt(1, archive_pathmatch("abcd***/efgh/ijkl","abcd/efgh/ijkl",=
 0));
+	assertEqualInt(0, archive_pathmatch("?", "", 0));
+	assertEqualInt(0, archive_pathmatch("?", "\0", 0));
+	assertEqualInt(1, archive_pathmatch("?", "a", 0));
+	assertEqualInt(0, archive_pathmatch("?", "ab", 0));
+	assertEqualInt(1, archive_pathmatch("?", ".", 0));
+	assertEqualInt(1, archive_pathmatch("?", "?", 0));
+	assertEqualInt(1, archive_pathmatch("a", "a", 0));
+	assertEqualInt(0, archive_pathmatch("a", "ab", 0));
+	assertEqualInt(0, archive_pathmatch("a", "ab", 0));
+	assertEqualInt(1, archive_pathmatch("a?c", "abc", 0));
+	/* SUSv2: ? matches / */
+	assertEqualInt(1, archive_pathmatch("a?c", "a/c", 0));
+	assertEqualInt(1, archive_pathmatch("a?*c*", "a/c", 0));
+	assertEqualInt(1, archive_pathmatch("*a*", "a/c", 0));
+	assertEqualInt(1, archive_pathmatch("*a*", "/a/c", 0));
+	assertEqualInt(1, archive_pathmatch("*a*", "defaaaaaaa", 0));
+	assertEqualInt(0, archive_pathmatch("a*", "defghi", 0));
+	assertEqualInt(0, archive_pathmatch("*a*", "defghi", 0));
+
+	/* Character classes */
+	assertEqualInt(1, archive_pathmatch("abc[def", "abc[def", 0));
+	assertEqualInt(0, archive_pathmatch("abc[def]", "abc[def", 0));
+	assertEqualInt(0, archive_pathmatch("abc[def", "abcd", 0));
+	assertEqualInt(1, archive_pathmatch("abc[def]", "abcd", 0));
+	assertEqualInt(1, archive_pathmatch("abc[def]", "abce", 0));
+	assertEqualInt(1, archive_pathmatch("abc[def]", "abcf", 0));
+	assertEqualInt(0, archive_pathmatch("abc[def]", "abcg", 0));
+	assertEqualInt(1, archive_pathmatch("abc[d*f]", "abcd", 0));
+	assertEqualInt(1, archive_pathmatch("abc[d*f]", "abc*", 0));
+	assertEqualInt(0, archive_pathmatch("abc[d*f]", "abcdefghi", 0));
+	assertEqualInt(0, archive_pathmatch("abc[d*", "abcdefghi", 0));
+	assertEqualInt(1, archive_pathmatch("abc[d*", "abc[defghi", 0));
+	assertEqualInt(1, archive_pathmatch("abc[d-f]", "abcd", 0));
+	assertEqualInt(1, archive_pathmatch("abc[d-f]", "abce", 0));
+	assertEqualInt(1, archive_pathmatch("abc[d-f]", "abcf", 0));
+	assertEqualInt(0, archive_pathmatch("abc[d-f]", "abcg", 0));
+	assertEqualInt(0, archive_pathmatch("abc[d-fh-k]", "abca", 0));
+	assertEqualInt(1, archive_pathmatch("abc[d-fh-k]", "abcd", 0));
+	assertEqualInt(1, archive_pathmatch("abc[d-fh-k]", "abce", 0));
+	assertEqualInt(1, archive_pathmatch("abc[d-fh-k]", "abcf", 0));
+	assertEqualInt(0, archive_pathmatch("abc[d-fh-k]", "abcg", 0));
+	assertEqualInt(1, archive_pathmatch("abc[d-fh-k]", "abch", 0));
+	assertEqualInt(1, archive_pathmatch("abc[d-fh-k]", "abci", 0));
+	assertEqualInt(1, archive_pathmatch("abc[d-fh-k]", "abcj", 0));
+	assertEqualInt(1, archive_pathmatch("abc[d-fh-k]", "abck", 0));
+	assertEqualInt(0, archive_pathmatch("abc[d-fh-k]", "abcl", 0));
+	assertEqualInt(0, archive_pathmatch("abc[d-fh-k]", "abc-", 0));
+
+	/* [] matches nothing, [!] is the same as ? */
+	assertEqualInt(0, archive_pathmatch("abc[]efg", "abcdefg", 0));
+	assertEqualInt(0, archive_pathmatch("abc[]efg", "abcqefg", 0));
+	assertEqualInt(0, archive_pathmatch("abc[]efg", "abcefg", 0));
+	assertEqualInt(1, archive_pathmatch("abc[!]efg", "abcdefg", 0));
+	assertEqualInt(1, archive_pathmatch("abc[!]efg", "abcqefg", 0));
+	assertEqualInt(0, archive_pathmatch("abc[!]efg", "abcefg", 0));
+
+	/* I assume: Trailing '-' is non-special. */
+	assertEqualInt(0, archive_pathmatch("abc[d-fh-]", "abcl", 0));
+	assertEqualInt(1, archive_pathmatch("abc[d-fh-]", "abch", 0));
+	assertEqualInt(1, archive_pathmatch("abc[d-fh-]", "abc-", 0));
+	assertEqualInt(1, archive_pathmatch("abc[d-fh-]", "abc-", 0));
+
+	/* ']' can be backslash-quoted within a character class. */
+	assertEqualInt(1, archive_pathmatch("abc[\\]]", "abc]", 0));
+	assertEqualInt(1, archive_pathmatch("abc[\\]d]", "abc]", 0));
+	assertEqualInt(1, archive_pathmatch("abc[\\]d]", "abcd", 0));
+	assertEqualInt(1, archive_pathmatch("abc[d\\]]", "abc]", 0));
+	assertEqualInt(1, archive_pathmatch("abc[d\\]]", "abcd", 0));
+	assertEqualInt(1, archive_pathmatch("abc[d]e]", "abcde]", 0));
+	assertEqualInt(1, archive_pathmatch("abc[d\\]e]", "abc]", 0));
+	assertEqualInt(0, archive_pathmatch("abc[d\\]e]", "abcd]e", 0));
+	assertEqualInt(0, archive_pathmatch("abc[d]e]", "abc]", 0));
+
+	/* backslash-quoted chars can appear as either end of a range. */
+	assertEqualInt(1, archive_pathmatch("abc[\\d-f]gh", "abcegh", 0));
+	assertEqualInt(0, archive_pathmatch("abc[\\d-f]gh", "abcggh", 0));
+	assertEqualInt(0, archive_pathmatch("abc[\\d-f]gh", "abc\\gh", 0));
+	assertEqualInt(1, archive_pathmatch("abc[d-\\f]gh", "abcegh", 0));
+	assertEqualInt(1, archive_pathmatch("abc[\\d-\\f]gh", "abcegh", 0));
+	assertEqualInt(1, archive_pathmatch("abc[\\d-\\f]gh", "abcegh", 0));
+	/* backslash-quoted '-' isn't special. */
+	assertEqualInt(0, archive_pathmatch("abc[d\\-f]gh", "abcegh", 0));
+	assertEqualInt(1, archive_pathmatch("abc[d\\-f]gh", "abc-gh", 0));
+
+	/* Leading '!' negates a character class. */
+	assertEqualInt(0, archive_pathmatch("abc[!d]", "abcd", 0));
+	assertEqualInt(1, archive_pathmatch("abc[!d]", "abce", 0));
+	assertEqualInt(1, archive_pathmatch("abc[!d]", "abcc", 0));
+	assertEqualInt(0, archive_pathmatch("abc[!d-z]", "abcq", 0));
+	assertEqualInt(1, archive_pathmatch("abc[!d-gi-z]", "abch", 0));
+	assertEqualInt(1, archive_pathmatch("abc[!fgijkl]", "abch", 0));
+	assertEqualInt(0, archive_pathmatch("abc[!fghijkl]", "abch", 0));
+
+	/* Backslash quotes next character. */
+	assertEqualInt(0, archive_pathmatch("abc\\[def]", "abc\\d", 0));
+	assertEqualInt(1, archive_pathmatch("abc\\[def]", "abc[def]", 0));
+	assertEqualInt(0, archive_pathmatch("abc\\\\[def]", "abc[def]", 0));
+	assertEqualInt(0, archive_pathmatch("abc\\\\[def]", "abc\\[def]", 0));
+	assertEqualInt(1, archive_pathmatch("abc\\\\[def]", "abc\\d", 0));
+	assertEqualInt(1, archive_pathmatch("abcd\\", "abcd\\", 0));
+	assertEqualInt(0, archive_pathmatch("abcd\\", "abcd\\[", 0));
+	assertEqualInt(0, archive_pathmatch("abcd\\", "abcde", 0));
+	assertEqualInt(0, archive_pathmatch("abcd\\[", "abcd\\", 0));
+
+	/*
+	 * Because '.' and '/' have special meanings, we can
+	 * identify many equivalent paths even if they're expressed
+	 * differently.  (But quoting a character with '\\' suppresses
+	 * special meanings!)
+	 */
+	assertEqualInt(0, archive_pathmatch("a/b/", "a/bc", 0));
+	assertEqualInt(1, archive_pathmatch("a/./b", "a/b", 0));
+	assertEqualInt(0, archive_pathmatch("a\\/./b", "a/b", 0));
+	assertEqualInt(0, archive_pathmatch("a/\\./b", "a/b", 0));
+	assertEqualInt(0, archive_pathmatch("a/.\\/b", "a/b", 0));
+	assertEqualInt(0, archive_pathmatch("a\\/\\.\\/b", "a/b", 0));
+	assertEqualInt(1, archive_pathmatch("./abc/./def/", "abc/def/", 0));
+	assertEqualInt(1, archive_pathmatch("abc/def", "./././abc/./def", 0));
+	assertEqualInt(1, archive_pathmatch("abc/def/././//", "./././abc/./def/",=
 0));
+	assertEqualInt(1, archive_pathmatch(".////abc/.//def", "./././abc/./def",=
 0));
+	assertEqualInt(1, archive_pathmatch("./abc?def/", "abc/def/", 0));
+	failure("\"?./\" is not the same as \"/./\"");
+	assertEqualInt(0, archive_pathmatch("./abc?./def/", "abc/def/", 0));
+	failure("Trailing '/' should match no trailing '/'");
+	assertEqualInt(1, archive_pathmatch("./abc/./def/", "abc/def", 0));
+	failure("Trailing '/./' is still the same directory.");
+	assertEqualInt(1, archive_pathmatch("./abc/./def/./", "abc/def", 0));
+	failure("Trailing '/.' is still the same directory.");
+	assertEqualInt(1, archive_pathmatch("./abc/./def/.", "abc/def", 0));
+	assertEqualInt(1, archive_pathmatch("./abc/./def", "abc/def/", 0));
+	failure("Trailing '/./' is still the same directory.");
+	assertEqualInt(1, archive_pathmatch("./abc/./def", "abc/def/./", 0));
+	failure("Trailing '/.' is still the same directory.");
+	assertEqualInt(1, archive_pathmatch("./abc*/./def", "abc/def/.", 0));
+
+	/* Matches not anchored at beginning. */
+	assertEqualInt(0,
+	    archive_pathmatch("bcd", "abcd", PATHMATCH_NO_ANCHOR_START));
+	assertEqualInt(1,
+	    archive_pathmatch("abcd", "abcd", PATHMATCH_NO_ANCHOR_START));
+	assertEqualInt(0,
+	    archive_pathmatch("^bcd", "abcd", PATHMATCH_NO_ANCHOR_START));
+	assertEqualInt(1,
+	    archive_pathmatch("b/c/d", "a/b/c/d", PATHMATCH_NO_ANCHOR_START));
+	assertEqualInt(0,
+	    archive_pathmatch("b/c", "a/b/c/d", PATHMATCH_NO_ANCHOR_START));
+	assertEqualInt(0,
+	    archive_pathmatch("^b/c", "a/b/c/d", PATHMATCH_NO_ANCHOR_START));
+
+	/* Matches not anchored at end. */
+	assertEqualInt(0,
+	    archive_pathmatch("bcd", "abcd", PATHMATCH_NO_ANCHOR_END));
+	assertEqualInt(1,
+	    archive_pathmatch("abcd", "abcd", PATHMATCH_NO_ANCHOR_END));
+	assertEqualInt(1,
+	    archive_pathmatch("abcd", "abcd/", PATHMATCH_NO_ANCHOR_END));
+	assertEqualInt(1,
+	    archive_pathmatch("abcd", "abcd/.", PATHMATCH_NO_ANCHOR_END));
+	assertEqualInt(0,
+	    archive_pathmatch("abc", "abcd", PATHMATCH_NO_ANCHOR_END));
+	assertEqualInt(1,
+	    archive_pathmatch("a/b/c", "a/b/c/d", PATHMATCH_NO_ANCHOR_END));
+	assertEqualInt(0,
+	    archive_pathmatch("a/b/c$", "a/b/c/d", PATHMATCH_NO_ANCHOR_END));
+	assertEqualInt(1,
+	    archive_pathmatch("a/b/c$", "a/b/c", PATHMATCH_NO_ANCHOR_END));
+	assertEqualInt(1,
+	    archive_pathmatch("a/b/c$", "a/b/c/", PATHMATCH_NO_ANCHOR_END));
+	assertEqualInt(1,
+	    archive_pathmatch("a/b/c/", "a/b/c/d", PATHMATCH_NO_ANCHOR_END));
+	assertEqualInt(0,
+	    archive_pathmatch("a/b/c/$", "a/b/c/d", PATHMATCH_NO_ANCHOR_END));
+	assertEqualInt(1,
+	    archive_pathmatch("a/b/c/$", "a/b/c/", PATHMATCH_NO_ANCHOR_END));
+	assertEqualInt(1,
+	    archive_pathmatch("a/b/c/$", "a/b/c", PATHMATCH_NO_ANCHOR_END));
+	assertEqualInt(0,
+	    archive_pathmatch("b/c", "a/b/c/d", PATHMATCH_NO_ANCHOR_END));
+}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/tes=
t/test_archive_string_conversion.c
--- a/head/contrib/libarchive/libarchive/test/test_archive_string_conversio=
n.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/test/test_archive_string_conversio=
n.c	Fri Aug 10 14:19:25 2012 +0300
@@ -1,5 +1,5 @@
 /*-
- * Copyright (c) 2011 Michihiro NAKAJIMA
+ * Copyright (c) 2011-2012 Michihiro NAKAJIMA
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -34,7 +34,7 @@
 Execute the following to rebuild the data for this program:
    tail -n +36 test_archive_string_conversion.c | /bin/sh
 #
-# This requires http://unicode.org/Public/UNIDATA/NormalizationTest.txt
+# This requires http://unicode.org/Public/6.0.0/ucd/NormalizationTest.txt
 #
 if=3D"NormalizationTest.txt"
 if [ ! -f ${if} ]; then
@@ -158,7 +158,7 @@
  */
 static int
 scan_unicode_pattern(char *out, wchar_t *wout, char *u16be, char *u16le,
-    const char *pattern, int exclude_mac_nfd)
+    const char *pattern, int mac_nfd)
 {
 	unsigned uc =3D 0;
 	const char *p =3D pattern;
@@ -166,6 +166,7 @@
 	wchar_t *owp =3D wout;
 	char *op16be =3D u16be;
 	char *op16le =3D u16le;
+	int ret =3D 0;
=20
 	for (;;) {
 		if (*p >=3D '0' && *p <=3D '9')
@@ -173,14 +174,31 @@
 		else if (*p >=3D 'A' && *p <=3D 'F')
 			uc =3D (uc << 4) + (*p - 'A' + 0x0a);
 		else {
-			if (exclude_mac_nfd) {
+			if (mac_nfd && op =3D=3D out) {
 				/*
 				 * These are not converted to NFD on Mac OS.
+ 				 * U+2000 - U+2FFF
+				 * U+F900 - U+FAFF
+				 * U+2F800 - U+2FAFF
 				 */
-				if ((uc >=3D 0x2000 && uc <=3D 0x2FFF) ||
-				    (uc >=3D 0xF900 && uc <=3D 0xFAFF) ||
-				    (uc >=3D 0x2F800 && uc <=3D 0x2FAFF))
-					return (-1);
+				switch (uc) {
+				case 0x2194: case 0x219A: case 0x219B:
+				case 0x21AE: case 0x21CD: case 0x21CE:
+				case 0x21CF: case 0x2204: case 0x2209:
+				case 0x220C: case 0x2224: case 0x2226:
+				case 0x2241: case 0x2244: case 0x2247:
+				case 0x2249: case 0x2260: case 0x2262:
+				case 0x226D: case 0x226E: case 0x226F:
+				case 0x2270: case 0x2271: case 0x2274:
+				case 0x2275: case 0x2276: case 0x2278:
+				case 0x2279: case 0x227A: case 0x227B:
+				case 0x2280: case 0x2281: case 0x2284:
+				case 0x2285: case 0x2288: case 0x2289:
+				case 0x22AC: case 0x22AD: case 0x22AE:
+				case 0x22AF: case 0x22E0: case 0x22E1:
+				case 0x22E2: case 0x22E3: case 0x22EA:
+				case 0x22EB: case 0x22EC: case 0x22ED:
+			=09
 				/*
 				 * Those code points are not converted to
 				 * NFD on Mac OS. I do not know the reason
@@ -190,9 +208,10 @@
 				 *   1109C  =3D=3D> 1109B 110BA
 				 *   110AB  =3D=3D> 110A5 110BA
 				 */
-				if (uc =3D=3D 0x1109A || uc =3D=3D 0x1109C ||
-				    uc =3D=3D 0x110AB)
-					return (-1);
+				case 0x1109A: case 0x1109C: case 0x110AB:
+					ret =3D 1;
+					break;
+				}
 			}
 			op16be +=3D unicode_to_utf16be(op16be, uc);
 			op16le +=3D unicode_to_utf16le(op16le, uc);
@@ -211,7 +230,7 @@
 		}
 		p++;
 	}
-	return (0);
+	return (ret);
 }
=20
 static int
@@ -230,27 +249,26 @@
  * On other platforms, the characters to be Form C.
  */
 static void
-test_archive_string_normalization(void)
+test_archive_string_normalization_nfc(const char *testdata)
 {
 	struct archive *a, *a2;
-	struct archive_entry *ae;
 	struct archive_string utf8;
 	struct archive_mstring mstr;
 	struct archive_string_conv *f_sconv8, *t_sconv8;
 	struct archive_string_conv *f_sconv16be, *f_sconv16le;
 	FILE *fp;
 	char buff[512];
-	static const char reffile[] =3D "test_archive_string_conversion.txt.Z";
-	ssize_t size;
 	int line =3D 0;
 	int locale_is_utf8, wc_is_unicode;
+	int sconv_opt =3D SCONV_SET_OPT_NORMALIZATION_C;
=20
 	locale_is_utf8 =3D (NULL !=3D setlocale(LC_ALL, "en_US.UTF-8"));
 	wc_is_unicode =3D is_wc_unicode();
 	/* If it doesn't exist, just warn and return. */
 	if (!locale_is_utf8 && !wc_is_unicode) {
-		skipping("invalid encoding tests require a suitable locale;"
-		    " en_US.UTF-8 not available on this system");
+		skipping("A test of string normalization for NFC requires "
+		    "a suitable locale; en_US.UTF-8 not available on this "
+		    "system");
 		return;
 	}
=20
@@ -258,27 +276,9 @@
 	memset(&mstr, 0, sizeof(mstr));
=20
 	/*
-	 * Extract a test pattern file.
-	 */
-	extract_reference_file(reffile);
-	assert((a =3D archive_read_new()) !=3D NULL);
-	assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a));
-	assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_raw(a));
-        assertEqualIntA(a, ARCHIVE_OK,
-            archive_read_open_filename(a, reffile, 512));
-
-	assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
-	assert((fp =3D fopen("testdata.txt", "w")) !=3D NULL);
-	while ((size =3D archive_read_data(a, buff, 512)) > 0)
-		fwrite(buff, 1, size, fp);
-	fclose(fp);
-
-	/* Open a test pattern file. */
-	assert((fp =3D fopen("testdata.txt", "r")) !=3D NULL);
-
-	/*
 	 * Create string conversion objects.
 	 */
+	assert((a =3D archive_read_new()) !=3D NULL);
 	assertA(NULL !=3D (f_sconv8 =3D
 	    archive_string_conversion_from_charset(a, "UTF-8", 0)));
 	assertA(NULL !=3D (f_sconv16be =3D
@@ -289,13 +289,18 @@
 	assertA(NULL !=3D (t_sconv8 =3D
 	    archive_string_conversion_to_charset(a2, "UTF-8", 0)));
 	if (f_sconv8 =3D=3D NULL || f_sconv16be =3D=3D NULL || f_sconv16le =3D=3D=
 NULL ||
-	    t_sconv8 =3D=3D NULL || fp =3D=3D NULL) {
+	    t_sconv8 =3D=3D NULL) {
 		/* We cannot continue this test. */
-		if (fp !=3D NULL)
-			fclose(fp);
 		assertEqualInt(ARCHIVE_OK, archive_read_free(a));
 		return;
 	}
+	archive_string_conversion_set_opt(f_sconv8, sconv_opt);
+	archive_string_conversion_set_opt(f_sconv16be, sconv_opt);
+	archive_string_conversion_set_opt(f_sconv16le, sconv_opt);
+	archive_string_conversion_set_opt(t_sconv8, sconv_opt);
+
+	/* Open a test pattern file. */
+	assert((fp =3D fopen(testdata, "r")) !=3D NULL);
=20
 	/*
 	 * Read test data.
@@ -311,6 +316,9 @@
 		char utf16le_nfc[80], utf16le_nfd[80];
 		wchar_t wc_nfc[40], wc_nfd[40];
 		char *e, *p;
+		const wchar_t *wp;
+		const char *mp;
+		size_t mplen;
=20
 		line++;
 		if (buff[0] =3D=3D '#')
@@ -332,74 +340,22 @@
 		nfd[sizeof(nfd)-1] =3D '\0';
=20
 		/*
-		 * Convert an NFC pattern to UTF-8 bytes.
+		 * Get an NFC patterns.
 		 */
-#if defined(__APPLE__)
-		if (scan_unicode_pattern(utf8_nfc, wc_nfc, utf16be_nfc, utf16le_nfc,
-		    nfc, 1) !=3D 0)
-			continue;
-#else
 		scan_unicode_pattern(utf8_nfc, wc_nfc, utf16be_nfc, utf16le_nfc,
 		    nfc, 0);
-#endif
=20
 		/*
-		 * Convert an NFD pattern to UTF-8 bytes.
+		 * Get an NFD patterns.
 		 */
 		scan_unicode_pattern(utf8_nfd, wc_nfd, utf16be_nfd, utf16le_nfd,
 		    nfd, 0);
=20
 		if (locale_is_utf8) {
-#if defined(__APPLE__)
-			/*
-			 * Normalize an NFC string for import.
-			 */
-			assertEqualInt(0, archive_strcpy_in_locale(
-			    &utf8, utf8_nfc, f_sconv8));
-			failure("NFC(%s) should be converted to NFD(%s):%d",
-			    nfc, nfd, line);
-			assertEqualUTF8String(utf8_nfd, utf8.s);
-
 			/*
 			 * Normalize an NFD string for import.
 			 */
-			assertEqualInt(0, archive_strcpy_in_locale(
-			    &utf8, utf8_nfd, f_sconv8));
-			failure("NFD(%s) should not be any changed:%d",
-			    nfd, line);
-			assertEqualUTF8String(utf8_nfd, utf8.s);
-
-			/*
-			 * Copy an NFD string for export.
-			 */
-			assertEqualInt(0, archive_strcpy_in_locale(
-			    &utf8, utf8_nfd, t_sconv8));
-			failure("NFD(%s) should not be any changed:%d",
-			    nfd, line);
-			assertEqualUTF8String(utf8_nfd, utf8.s);
-
-			/*
-			 * Normalize an NFC string in UTF-16BE for import.
-			 */
-			assertEqualInt(0, archive_strncpy_in_locale(
-			    &utf8, utf16be_nfc, 100000, f_sconv16be));
-			failure("NFC(%s) should be converted to NFD(%s):%d",
-			    nfc, nfd, line);
-			assertEqualUTF8String(utf8_nfd, utf8.s);
-
-			/*
-			 * Normalize an NFC string in UTF-16LE for import.
-			 */
-			assertEqualInt(0, archive_strncpy_in_locale(
-			    &utf8, utf16le_nfc, 100000, f_sconv16le));
-			failure("NFC(%s) should be converted to NFD(%s):%d",
-			    nfc, nfd, line);
-			assertEqualUTF8String(utf8_nfd, utf8.s);
-#else
-			/*
-			 * Normalize an NFD string for import.
-			 */
-			assertEqualInt(0, archive_strcpy_in_locale(
+			assertEqualInt(0, archive_strcpy_l(
 			    &utf8, utf8_nfd, f_sconv8));
 			failure("NFD(%s) should be converted to NFC(%s):%d",
 			    nfd, nfc, line);
@@ -408,7 +364,7 @@
 			/*
 			 * Normalize an NFC string for import.
 			 */
-			assertEqualInt(0, archive_strcpy_in_locale(
+			assertEqualInt(0, archive_strcpy_l(
 			    &utf8, utf8_nfc, f_sconv8));
 			failure("NFC(%s) should not be any changed:%d",
 			    nfc, line);
@@ -417,7 +373,7 @@
 			/*
 			 * Copy an NFC string for export.
 			 */
-			assertEqualInt(0, archive_strcpy_in_locale(
+			assertEqualInt(0, archive_strcpy_l(
 			    &utf8, utf8_nfc, t_sconv8));
 			failure("NFC(%s) should not be any changed:%d",
 			    nfc, line);
@@ -426,7 +382,7 @@
 			/*
 			 * Normalize an NFD string in UTF-16BE for import.
 			 */
-			assertEqualInt(0, archive_strncpy_in_locale(
+			assertEqualInt(0, archive_strncpy_l(
 			    &utf8, utf16be_nfd, 100000, f_sconv16be));
 			failure("NFD(%s) should be converted to NFC(%s):%d",
 			    nfd, nfc, line);
@@ -435,12 +391,11 @@
 			/*
 			 * Normalize an NFD string in UTF-16LE for import.
 			 */
-			assertEqualInt(0, archive_strncpy_in_locale(
+			assertEqualInt(0, archive_strncpy_l(
 			    &utf8, utf16le_nfd, 100000, f_sconv16le));
 			failure("NFD(%s) should be converted to NFC(%s):%d",
 			    nfd, nfc, line);
 			assertEqualUTF8String(utf8_nfc, utf8.s);
-#endif
 		}
=20
 		/*
@@ -451,55 +406,6 @@
 		 * locale UTF-8.
 		 */
 		if (locale_is_utf8 || wc_is_unicode) {
-			const wchar_t *wp;
-			const char *mp;
-			size_t mplen;
-
-#if defined(__APPLE__)
-			/*
-			 * Normalize an NFD string in UTF-8 for import.
-			 */
-			assertEqualInt(0, archive_mstring_copy_mbs_len_l(
-			    &mstr, utf8_nfc, 100000, f_sconv8));
-			assertEqualInt(0,
-			    archive_mstring_get_wcs(a, &mstr, &wp));
-			failure("UTF-8 NFC(%s) should be converted "
-			    "to WCS NFD(%s):%d", nfc, nfd, line);
-			assertEqualWString(wc_nfd, wp);
-
-			/*
-			 * Normalize an NFD string in UTF-16BE for import.
-			 */
-			assertEqualInt(0, archive_mstring_copy_mbs_len_l(
-			    &mstr, utf16be_nfc, 100000, f_sconv16be));
-			assertEqualInt(0,
-			    archive_mstring_get_wcs(a, &mstr, &wp));
-			failure("UTF-16BE NFC(%s) should be converted "
-			    "to WCS NFD(%s):%d", nfc, nfd, line);
-			assertEqualWString(wc_nfd, wp);
-
-			/*
-			 * Normalize an NFD string in UTF-16LE for import.
-			 */
-			assertEqualInt(0, archive_mstring_copy_mbs_len_l(
-			    &mstr, utf16le_nfc, 100000, f_sconv16le));
-			assertEqualInt(0,
-			    archive_mstring_get_wcs(a, &mstr, &wp));
-			failure("UTF-16LE NFC(%s) should be converted "
-			    "to WCS NFD(%s):%d", nfc, nfd, line);
-			assertEqualWString(wc_nfd, wp);
-
-			/*
-			 * Copy an NFD wide-string for export.
-			 */
-			assertEqualInt(0, archive_mstring_copy_wcs(
-			    &mstr, wc_nfd));
-			assertEqualInt(0, archive_mstring_get_mbs_l(
-			    &mstr, &mp, &mplen, t_sconv8));
-			failure("WCS NFD(%s) should be UTF-8 NFD:%d"
-			    ,nfd, line);
-			assertEqualUTF8String(utf8_nfd, mp);
-#else
 			/*
 			 * Normalize an NFD string in UTF-8 for import.
 			 */
@@ -536,14 +442,263 @@
 			/*
 			 * Copy an NFC wide-string for export.
 			 */
-			assertEqualInt(0, archive_mstring_copy_wcs(
-			    &mstr, wc_nfc));
+			assertEqualInt(0,
+			    archive_mstring_copy_wcs(&mstr, wc_nfc));
 			assertEqualInt(0, archive_mstring_get_mbs_l(
 			    &mstr, &mp, &mplen, t_sconv8));
 			failure("WCS NFC(%s) should be UTF-8 NFC:%d"
 			    ,nfc, line);
 			assertEqualUTF8String(utf8_nfc, mp);
-#endif
+		}
+	}
+
+	archive_string_free(&utf8);
+	archive_mstring_clean(&mstr);
+	fclose(fp);
+	assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+	assertEqualInt(ARCHIVE_OK, archive_write_free(a2));
+}
+
+static void
+test_archive_string_normalization_mac_nfd(const char *testdata)
+{
+	struct archive *a, *a2;
+	struct archive_string utf8;
+	struct archive_mstring mstr;
+	struct archive_string_conv *f_sconv8, *t_sconv8;
+	struct archive_string_conv *f_sconv16be, *f_sconv16le;
+	FILE *fp;
+	char buff[512];
+	int line =3D 0;
+	int locale_is_utf8, wc_is_unicode;
+	int sconv_opt =3D SCONV_SET_OPT_NORMALIZATION_D;
+
+	locale_is_utf8 =3D (NULL !=3D setlocale(LC_ALL, "en_US.UTF-8"));
+	wc_is_unicode =3D is_wc_unicode();
+	/* If it doesn't exist, just warn and return. */
+	if (!locale_is_utf8 && !wc_is_unicode) {
+		skipping("A test of string normalization for NFD requires "
+		    "a suitable locale; en_US.UTF-8 not available on this "
+		    "system");
+		return;
+	}
+
+	archive_string_init(&utf8);
+	memset(&mstr, 0, sizeof(mstr));
+
+	/*
+	 * Create string conversion objects.
+	 */
+	assert((a =3D archive_read_new()) !=3D NULL);
+	assertA(NULL !=3D (f_sconv8 =3D
+	    archive_string_conversion_from_charset(a, "UTF-8", 0)));
+	assertA(NULL !=3D (f_sconv16be =3D
+	    archive_string_conversion_from_charset(a, "UTF-16BE", 0)));
+	assertA(NULL !=3D (f_sconv16le =3D
+	    archive_string_conversion_from_charset(a, "UTF-16LE", 0)));
+	assert((a2 =3D archive_write_new()) !=3D NULL);
+	assertA(NULL !=3D (t_sconv8 =3D
+	    archive_string_conversion_to_charset(a2, "UTF-8", 0)));
+	if (f_sconv8 =3D=3D NULL || f_sconv16be =3D=3D NULL || f_sconv16le =3D=3D=
 NULL ||
+	    t_sconv8 =3D=3D NULL) {
+		/* We cannot continue this test. */
+		assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+		return;
+	}
+	archive_string_conversion_set_opt(f_sconv8, sconv_opt);
+	archive_string_conversion_set_opt(f_sconv16be, sconv_opt);
+	archive_string_conversion_set_opt(f_sconv16le, sconv_opt);
+	archive_string_conversion_set_opt(t_sconv8, sconv_opt);
+
+	/* Open a test pattern file. */
+	assert((fp =3D fopen(testdata, "r")) !=3D NULL);
+
+	/*
+	 * Read test data.
+	 *  Test data format:
+	 *     <NFC Unicode pattern> ';' <NFD Unicode pattern> '\n'
+	 *  Unicode pattern format:
+	 *     [0-9A-F]{4,5}([ ][0-9A-F]{4,5}){0,}
+	 */
+	while (fgets(buff, sizeof(buff), fp) !=3D NULL) {
+		char nfc[80], nfd[80];
+		char utf8_nfc[80], utf8_nfd[80];
+		char utf16be_nfc[80], utf16be_nfd[80];
+		char utf16le_nfc[80], utf16le_nfd[80];
+		wchar_t wc_nfc[40], wc_nfd[40];
+		char *e, *p;
+		const wchar_t *wp;
+		const char *mp;
+		size_t mplen;
+		int should_be_nfc;
+
+		line++;
+		if (buff[0] =3D=3D '#')
+			continue;
+		p =3D strchr(buff, ';');
+		if (p =3D=3D NULL)
+			continue;
+		*p++ =3D '\0';
+		/* Copy an NFC pattern */
+		strncpy(nfc, buff, sizeof(nfc)-1);
+		nfc[sizeof(nfc)-1] =3D '\0';
+		e =3D p;
+		p =3D strchr(p, '\n');
+		if (p =3D=3D NULL)
+			continue;
+		*p =3D '\0';
+		/* Copy an NFD pattern */
+		strncpy(nfd, e, sizeof(nfd)-1);
+		nfd[sizeof(nfd)-1] =3D '\0';
+
+		/*
+		 * Get an NFC patterns.
+		 */
+		should_be_nfc =3D scan_unicode_pattern(utf8_nfc, wc_nfc,
+			utf16be_nfc, utf16le_nfc, nfc, 1);
+
+		/*
+		 * Get an NFD patterns.
+		 */
+		scan_unicode_pattern(utf8_nfd, wc_nfd, utf16be_nfd, utf16le_nfd,
+		    nfd, 0);
+
+		if (locale_is_utf8) {
+			/*
+			 * Normalize an NFC string for import.
+			 */
+			assertEqualInt(0, archive_strcpy_l(
+			    &utf8, utf8_nfc, f_sconv8));
+			if (should_be_nfc) {
+				failure("NFC(%s) should not be converted to"
+				    " NFD(%s):%d", nfc, nfd, line);
+				assertEqualUTF8String(utf8_nfc, utf8.s);
+			} else {
+				failure("NFC(%s) should be converted to"
+				    " NFD(%s):%d", nfc, nfd, line);
+				assertEqualUTF8String(utf8_nfd, utf8.s);
+			}
+
+			/*
+			 * Normalize an NFD string for import.
+			 */
+			assertEqualInt(0, archive_strcpy_l(
+			    &utf8, utf8_nfd, f_sconv8));
+			failure("NFD(%s) should not be any changed:%d",
+			    nfd, line);
+			assertEqualUTF8String(utf8_nfd, utf8.s);
+
+			/*
+			 * Copy an NFD string for export.
+			 */
+			assertEqualInt(0, archive_strcpy_l(
+			    &utf8, utf8_nfd, t_sconv8));
+			failure("NFD(%s) should not be any changed:%d",
+			    nfd, line);
+			assertEqualUTF8String(utf8_nfd, utf8.s);
+
+			/*
+			 * Normalize an NFC string in UTF-16BE for import.
+			 */
+			assertEqualInt(0, archive_strncpy_l(
+			    &utf8, utf16be_nfc, 100000, f_sconv16be));
+			if (should_be_nfc) {
+				failure("NFC(%s) should not be converted to"
+				    " NFD(%s):%d", nfc, nfd, line);
+				assertEqualUTF8String(utf8_nfc, utf8.s);
+			} else {
+				failure("NFC(%s) should be converted to"
+				    " NFD(%s):%d", nfc, nfd, line);
+				assertEqualUTF8String(utf8_nfd, utf8.s);
+			}
+
+			/*
+			 * Normalize an NFC string in UTF-16LE for import.
+			 */
+			assertEqualInt(0, archive_strncpy_l(
+			    &utf8, utf16le_nfc, 100000, f_sconv16le));
+			if (should_be_nfc) {
+				failure("NFC(%s) should not be converted to"
+				    " NFD(%s):%d", nfc, nfd, line);
+				assertEqualUTF8String(utf8_nfc, utf8.s);
+			} else {
+				failure("NFC(%s) should be converted to"
+				    " NFD(%s):%d", nfc, nfd, line);
+				assertEqualUTF8String(utf8_nfd, utf8.s);
+			}
+		}
+
+		/*
+		 * Test for archive_mstring interface.
+		 * In specific, Windows platform UTF-16BE is directly
+		 * converted to/from wide-character to avoid the effect of
+		 * current locale since windows platform cannot make
+		 * locale UTF-8.
+		 */
+		if (locale_is_utf8 || wc_is_unicode) {
+			/*
+			 * Normalize an NFD string in UTF-8 for import.
+			 */
+			assertEqualInt(0, archive_mstring_copy_mbs_len_l(
+			    &mstr, utf8_nfc, 100000, f_sconv8));
+			assertEqualInt(0,
+			    archive_mstring_get_wcs(a, &mstr, &wp));
+			if (should_be_nfc) {
+				failure("UTF-8 NFC(%s) should not be converted "
+				    "to WCS NFD(%s):%d", nfc, nfd, line);
+				assertEqualWString(wc_nfc, wp);
+			} else {
+				failure("UTF-8 NFC(%s) should be converted "
+				    "to WCS NFD(%s):%d", nfc, nfd, line);
+				assertEqualWString(wc_nfd, wp);
+			}
+
+			/*
+			 * Normalize an NFD string in UTF-16BE for import.
+			 */
+			assertEqualInt(0, archive_mstring_copy_mbs_len_l(
+			    &mstr, utf16be_nfc, 100000, f_sconv16be));
+			assertEqualInt(0,
+			    archive_mstring_get_wcs(a, &mstr, &wp));
+			if (should_be_nfc) {
+				failure("UTF-16BE NFC(%s) should not be "
+				    "converted to WCS NFD(%s):%d",
+				    nfc, nfd, line);
+				assertEqualWString(wc_nfc, wp);
+			} else {
+				failure("UTF-16BE NFC(%s) should be converted "
+				    "to WCS NFD(%s):%d", nfc, nfd, line);
+				assertEqualWString(wc_nfd, wp);
+			}
+
+			/*
+			 * Normalize an NFD string in UTF-16LE for import.
+			 */
+			assertEqualInt(0, archive_mstring_copy_mbs_len_l(
+			    &mstr, utf16le_nfc, 100000, f_sconv16le));
+			assertEqualInt(0,
+			    archive_mstring_get_wcs(a, &mstr, &wp));
+			if (should_be_nfc) {
+				failure("UTF-16LE NFC(%s) should not be "
+				    "converted to WCS NFD(%s):%d",
+				    nfc, nfd, line);
+				assertEqualWString(wc_nfc, wp);
+			} else {
+				failure("UTF-16LE NFC(%s) should be converted "
+				    "to WCS NFD(%s):%d", nfc, nfd, line);
+				assertEqualWString(wc_nfd, wp);
+			}
+
+			/*
+			 * Copy an NFD wide-string for export.
+			 */
+			assertEqualInt(0, archive_mstring_copy_wcs(
+			    &mstr, wc_nfd));
+			assertEqualInt(0, archive_mstring_get_mbs_l(
+			    &mstr, &mp, &mplen, t_sconv8));
+			failure("WCS NFD(%s) should be UTF-8 NFD:%d"
+			    ,nfd, line);
+			assertEqualUTF8String(utf8_nfd, mp);
 		}
 	}
=20
@@ -624,6 +779,32 @@
=20
 DEFINE_TEST(test_archive_string_conversion)
 {
-	test_archive_string_normalization();
+	static const char reffile[] =3D "test_archive_string_conversion.txt.Z";
+	static const char testdata[] =3D "testdata.txt";
+	struct archive *a;
+	struct archive_entry *ae;
+	char buff[512];
+	ssize_t size;
+	FILE *fp;
+
+	/*
+	 * Extract a test pattern file.
+	 */
+	extract_reference_file(reffile);
+	assert((a =3D archive_read_new()) !=3D NULL);
+	assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a));
+	assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_raw(a));
+        assertEqualIntA(a, ARCHIVE_OK,
+            archive_read_open_filename(a, reffile, 512));
+
+	assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
+	assert((fp =3D fopen(testdata, "w")) !=3D NULL);
+	while ((size =3D archive_read_data(a, buff, 512)) > 0)
+		fwrite(buff, 1, size, fp);
+	fclose(fp);
+	assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+
+	test_archive_string_normalization_nfc(testdata);
+	test_archive_string_normalization_mac_nfd(testdata);
 	test_archive_string_canonicalization();
 }
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/tes=
t/test_compat_zip.c
--- a/head/contrib/libarchive/libarchive/test/test_compat_zip.c	Mon Jul 30 =
11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/test/test_compat_zip.c	Fri Aug 10 =
14:19:25 2012 +0300
@@ -23,7 +23,7 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 #include "test.h"
-__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/test/test_compat_zi=
p.c 232153 2012-02-25 10:58:02Z mm $");
+__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/test/test_compat_zi=
p.c 238856 2012-07-28 06:38:44Z mm $");
=20
 #ifdef HAVE_LIBZ
 static const int libz_enabled =3D 1;
@@ -238,19 +238,19 @@
 	assertEqualString("Metadata/Job_PT.xml", archive_entry_pathname(ae));
 	assertEqualInt(3559, archive_entry_size(ae));
 	assertEqualInt(AE_IFREG, archive_entry_filetype(ae));
-	assertEqualInt(0777, archive_entry_perm(ae));
+	assertEqualInt(0666, archive_entry_perm(ae));
=20
 	assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
 	assertEqualString("Metadata/MXDC_Empty_PT.xml", archive_entry_pathname(ae=
));
 	assertEqualInt(456, archive_entry_size(ae));
 	assertEqualInt(AE_IFREG, archive_entry_filetype(ae));
-	assertEqualInt(0777, archive_entry_perm(ae));
+	assertEqualInt(0666, archive_entry_perm(ae));
=20
 	assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
 	assertEqualString("Documents/1/Metadata/Page1_Thumbnail.JPG", archive_ent=
ry_pathname(ae));
 	assertEqualInt(1495, archive_entry_size(ae));
 	assertEqualInt(AE_IFREG, archive_entry_filetype(ae));
-	assertEqualInt(0777, archive_entry_perm(ae));
+	assertEqualInt(0666, archive_entry_perm(ae));
 	/* TODO: Read some of the file data and verify it.
 	   The code to read uncompressed Zip entries with "file at end" semantics
 	   is tricky and should be verified more carefully. */
@@ -298,21 +298,21 @@
 	assertEqualInt(0, archive_entry_size(ae));
 	assert(!archive_entry_size_is_set(ae));
 	assertEqualInt(AE_IFREG, archive_entry_filetype(ae));
-	assertEqualInt(0777, archive_entry_perm(ae));
+	assertEqualInt(0666, archive_entry_perm(ae));
=20
 	assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
 	assertEqualString("Metadata/MXDC_Empty_PT.xml", archive_entry_pathname(ae=
));
 	assertEqualInt(0, archive_entry_size(ae));
 	assert(!archive_entry_size_is_set(ae));
 	assertEqualInt(AE_IFREG, archive_entry_filetype(ae));
-	assertEqualInt(0777, archive_entry_perm(ae));
+	assertEqualInt(0666, archive_entry_perm(ae));
=20
 	assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
 	assertEqualString("Documents/1/Metadata/Page1_Thumbnail.JPG", archive_ent=
ry_pathname(ae));
 	assertEqualInt(0, archive_entry_size(ae));
 	assert(!archive_entry_size_is_set(ae));
 	assertEqualInt(AE_IFREG, archive_entry_filetype(ae));
-	assertEqualInt(0777, archive_entry_perm(ae));
+	assertEqualInt(0666, archive_entry_perm(ae));
=20
 	assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
 	assertEqualString("Documents/1/Pages/_rels/1.fpage.rels", archive_entry_p=
athname(ae));
@@ -420,7 +420,7 @@
 	for (i =3D 1; i < 1000; ++i) {
 		assert((a =3D archive_read_new()) !=3D NULL);
 		assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_zip(a));
-		assertEqualIntA(a, ARCHIVE_OK, read_open_memory2(a, p, s, i));
+		assertEqualIntA(a, ARCHIVE_OK, read_open_memory_minimal(a, p, s, i));
=20
 		assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
 		assertEqualIntA(a, ARCHIVE_OK, archive_read_data_skip(a));
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/tes=
t/test_read_disk_directory_traversals.c
--- a/head/contrib/libarchive/libarchive/test/test_read_disk_directory_trav=
ersals.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/test/test_read_disk_directory_trav=
ersals.c	Fri Aug 10 14:19:25 2012 +0300
@@ -1,5 +1,5 @@
 /*-
- * Copyright (c) 2010 Michihiro NAKAJIMA
+ * Copyright (c) 2010-2012 Michihiro NAKAJIMA
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -66,6 +66,9 @@
 	size_t size;
 	int64_t offset;
 	int file_count;
+#if defined(_WIN32) && !defined(__CYGWIN__)
+	wchar_t *wcwd, *wp, *fullpath;
+#endif
=20
 	assertMakeDir("dir1", 0755);
 	assertMakeFile("dir1/file1", 0644, "0123456789");
@@ -89,6 +92,7 @@
 		assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header2(a, ae));
 		if (strcmp(archive_entry_pathname(ae), "dir1") =3D=3D 0) {
 			assertEqualInt(archive_entry_filetype(ae), AE_IFDIR);
+			assertEqualInt(1, archive_read_disk_can_descend(a));
 		} else if (strcmp(archive_entry_pathname(ae),
 		    "dir1/file1") =3D=3D 0) {
 			assertEqualInt(archive_entry_filetype(ae), AE_IFREG);
@@ -102,6 +106,7 @@
 			    archive_read_data_block(a, &p, &size, &offset));
 			assertEqualInt((int)size, 0);
 			assertEqualInt((int)offset, 10);
+			assertEqualInt(0, archive_read_disk_can_descend(a));
 		} else if (strcmp(archive_entry_pathname(ae),
 		    "dir1/file2") =3D=3D 0) {
 			assertEqualInt(archive_entry_filetype(ae), AE_IFREG);
@@ -115,9 +120,11 @@
 			    archive_read_data_block(a, &p, &size, &offset));
 			assertEqualInt((int)size, 0);
 			assertEqualInt((int)offset, 11);
+			assertEqualInt(0, archive_read_disk_can_descend(a));
 		} else if (strcmp(archive_entry_pathname(ae),
 		    "dir1/sub1") =3D=3D 0) {
 			assertEqualInt(archive_entry_filetype(ae), AE_IFDIR);
+			assertEqualInt(1, archive_read_disk_can_descend(a));
 		} else if (strcmp(archive_entry_pathname(ae),
 		    "dir1/sub1/file1") =3D=3D 0) {
 			assertEqualInt(archive_entry_filetype(ae), AE_IFREG);
@@ -131,9 +138,11 @@
 			    archive_read_data_block(a, &p, &size, &offset));
 			assertEqualInt((int)size, 0);
 			assertEqualInt((int)offset, 10);
+			assertEqualInt(0, archive_read_disk_can_descend(a));
 		} else if (strcmp(archive_entry_pathname(ae),
 		    "dir1/sub2") =3D=3D 0) {
 			assertEqualInt(archive_entry_filetype(ae), AE_IFDIR);
+			assertEqualInt(1, archive_read_disk_can_descend(a));
 		} else if (strcmp(archive_entry_pathname(ae),
 		    "dir1/sub2/file1") =3D=3D 0) {
 			assertEqualInt(archive_entry_filetype(ae), AE_IFREG);
@@ -147,6 +156,7 @@
 			    archive_read_data_block(a, &p, &size, &offset));
 			assertEqualInt((int)size, 0);
 			assertEqualInt((int)offset, 10);
+			assertEqualInt(0, archive_read_disk_can_descend(a));
 		} else if (strcmp(archive_entry_pathname(ae),
 		    "dir1/sub2/file2") =3D=3D 0) {
 			assertEqualInt(archive_entry_filetype(ae), AE_IFREG);
@@ -160,15 +170,19 @@
 			    archive_read_data_block(a, &p, &size, &offset));
 			assertEqualInt((int)size, 0);
 			assertEqualInt((int)offset, 10);
+			assertEqualInt(0, archive_read_disk_can_descend(a));
 		} else if (strcmp(archive_entry_pathname(ae),
 		    "dir1/sub2/sub1") =3D=3D 0) {
 			assertEqualInt(archive_entry_filetype(ae), AE_IFDIR);
+			assertEqualInt(1, archive_read_disk_can_descend(a));
 		} else if (strcmp(archive_entry_pathname(ae),
 		    "dir1/sub2/sub2") =3D=3D 0) {
 			assertEqualInt(archive_entry_filetype(ae), AE_IFDIR);
+			assertEqualInt(1, archive_read_disk_can_descend(a));
 		} else if (strcmp(archive_entry_pathname(ae),
 		    "dir1/sub2/sub3") =3D=3D 0) {
 			assertEqualInt(archive_entry_filetype(ae), AE_IFDIR);
+			assertEqualInt(1, archive_read_disk_can_descend(a));
 		} else if (strcmp(archive_entry_pathname(ae),
 		    "dir1/sub2/sub3/file") =3D=3D 0) {
 			assertEqualInt(archive_entry_filetype(ae), AE_IFREG);
@@ -182,6 +196,7 @@
 			    archive_read_data_block(a, &p, &size, &offset));
 			assertEqualInt((int)size, 0);
 			assertEqualInt((int)offset, 3);
+			assertEqualInt(0, archive_read_disk_can_descend(a));
 		}
 		if (archive_entry_filetype(ae) =3D=3D AE_IFDIR) {
 			/* Descend into the current object */
@@ -205,6 +220,7 @@
 		assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header2(a, ae));
 		if (wcscmp(archive_entry_pathname_w(ae), L"dir1") =3D=3D 0) {
 			assertEqualInt(archive_entry_filetype(ae), AE_IFDIR);
+			assertEqualInt(1, archive_read_disk_can_descend(a));
 		} else if (wcscmp(archive_entry_pathname_w(ae),
 		    L"dir1/file1") =3D=3D 0) {
 			assertEqualInt(archive_entry_filetype(ae), AE_IFREG);
@@ -218,6 +234,7 @@
 			    archive_read_data_block(a, &p, &size, &offset));
 			assertEqualInt((int)size, 0);
 			assertEqualInt((int)offset, 10);
+			assertEqualInt(0, archive_read_disk_can_descend(a));
 		} else if (wcscmp(archive_entry_pathname_w(ae),
 		    L"dir1/file2") =3D=3D 0) {
 			assertEqualInt(archive_entry_filetype(ae), AE_IFREG);
@@ -231,9 +248,11 @@
 			    archive_read_data_block(a, &p, &size, &offset));
 			assertEqualInt((int)size, 0);
 			assertEqualInt((int)offset, 11);
+			assertEqualInt(0, archive_read_disk_can_descend(a));
 		} else if (wcscmp(archive_entry_pathname_w(ae),
 		    L"dir1/sub1") =3D=3D 0) {
 			assertEqualInt(archive_entry_filetype(ae), AE_IFDIR);
+			assertEqualInt(1, archive_read_disk_can_descend(a));
 		} else if (wcscmp(archive_entry_pathname_w(ae),
 		    L"dir1/sub1/file1") =3D=3D 0) {
 			assertEqualInt(archive_entry_filetype(ae), AE_IFREG);
@@ -247,9 +266,11 @@
 			    archive_read_data_block(a, &p, &size, &offset));
 			assertEqualInt((int)size, 0);
 			assertEqualInt((int)offset, 10);
+			assertEqualInt(0, archive_read_disk_can_descend(a));
 		} else if (wcscmp(archive_entry_pathname_w(ae),
 		    L"dir1/sub2") =3D=3D 0) {
 			assertEqualInt(archive_entry_filetype(ae), AE_IFDIR);
+			assertEqualInt(1, archive_read_disk_can_descend(a));
 		} else if (wcscmp(archive_entry_pathname_w(ae),
 		    L"dir1/sub2/file1") =3D=3D 0) {
 			assertEqualInt(archive_entry_filetype(ae), AE_IFREG);
@@ -263,6 +284,7 @@
 			    archive_read_data_block(a, &p, &size, &offset));
 			assertEqualInt((int)size, 0);
 			assertEqualInt((int)offset, 10);
+			assertEqualInt(0, archive_read_disk_can_descend(a));
 		} else if (wcscmp(archive_entry_pathname_w(ae),
 		    L"dir1/sub2/file2") =3D=3D 0) {
 			assertEqualInt(archive_entry_filetype(ae), AE_IFREG);
@@ -276,15 +298,19 @@
 			    archive_read_data_block(a, &p, &size, &offset));
 			assertEqualInt((int)size, 0);
 			assertEqualInt((int)offset, 10);
+			assertEqualInt(0, archive_read_disk_can_descend(a));
 		} else if (wcscmp(archive_entry_pathname_w(ae),
 		    L"dir1/sub2/sub1") =3D=3D 0) {
 			assertEqualInt(archive_entry_filetype(ae), AE_IFDIR);
+			assertEqualInt(1, archive_read_disk_can_descend(a));
 		} else if (wcscmp(archive_entry_pathname_w(ae),
 		    L"dir1/sub2/sub2") =3D=3D 0) {
 			assertEqualInt(archive_entry_filetype(ae), AE_IFDIR);
+			assertEqualInt(1, archive_read_disk_can_descend(a));
 		} else if (wcscmp(archive_entry_pathname_w(ae),
 		    L"dir1/sub2/sub3") =3D=3D 0) {
 			assertEqualInt(archive_entry_filetype(ae), AE_IFDIR);
+			assertEqualInt(1, archive_read_disk_can_descend(a));
 		} else if (wcscmp(archive_entry_pathname_w(ae),
 		    L"dir1/sub2/sub3/file") =3D=3D 0) {
 			assertEqualInt(archive_entry_filetype(ae), AE_IFREG);
@@ -298,6 +324,7 @@
 			    archive_read_data_block(a, &p, &size, &offset));
 			assertEqualInt((int)size, 0);
 			assertEqualInt((int)offset, 3);
+			assertEqualInt(0, archive_read_disk_can_descend(a));
 		}
 		if (archive_entry_filetype(ae) =3D=3D AE_IFDIR) {
 			/* Descend into the current object */
@@ -318,6 +345,7 @@
=20
 	/* dir1/file1 */
 	assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header2(a, ae));
+	assertEqualInt(0, archive_read_disk_can_descend(a));
 	assertEqualString(archive_entry_pathname(ae), "dir1/file1");
 	assertEqualInt(archive_entry_filetype(ae), AE_IFREG);
 	assertEqualInt(archive_entry_size(ae), 10);
@@ -342,6 +370,7 @@
=20
 	/* dir1/file1 */
 	assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header2(a, ae));
+	assertEqualInt(0, archive_read_disk_can_descend(a));
 	assertEqualString(archive_entry_pathname(ae), "dir1/file1");
 	assertEqualInt(archive_entry_filetype(ae), AE_IFREG);
 	assertEqualInt(archive_entry_size(ae), 10);
@@ -353,6 +382,7 @@
=20
 	/* dir1/sub1 */
 	assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header2(a, ae));
+	assertEqualInt(1, archive_read_disk_can_descend(a));
 	assertEqualString(archive_entry_pathname(ae), "dir1/sub1");
 	assertEqualInt(archive_entry_filetype(ae), AE_IFDIR);
=20
@@ -361,6 +391,7 @@
=20
 	/* dir1/sub1/file1 */
 	assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header2(a, ae));
+	assertEqualInt(0, archive_read_disk_can_descend(a));
 	assertEqualString(archive_entry_pathname(ae), "dir1/sub1/file1");
 	assertEqualInt(archive_entry_filetype(ae), AE_IFREG);
 	assertEqualInt(archive_entry_size(ae), 10);
@@ -375,6 +406,96 @@
=20
 	/* Close the disk object. */
 	assertEqualInt(ARCHIVE_OK, archive_read_close(a));
+
+	/*
+	 * Test for a full-path beginning with "//?/"
+	 */
+	wcwd =3D _wgetcwd(NULL, 0);
+	fullpath =3D malloc(sizeof(wchar_t) * (wcslen(wcwd) + 32));
+	wcscpy(fullpath, L"//?/");
+	wcscat(fullpath, wcwd);
+	wcscat(fullpath, L"/dir1/file1");
+	free(wcwd);
+	assertEqualIntA(a, ARCHIVE_OK, archive_read_disk_open_w(a, fullpath));
+	while ((wcwd =3D wcschr(fullpath, L'\\')) !=3D NULL)
+		*wcwd =3D L'/';
+
+	/* dir1/file1 */
+	assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header2(a, ae));
+	assertEqualInt(0, archive_read_disk_can_descend(a));
+	assertEqualWString(archive_entry_pathname_w(ae), fullpath);
+	assertEqualInt(archive_entry_filetype(ae), AE_IFREG);
+	assertEqualInt(archive_entry_size(ae), 10);
+	assertEqualIntA(a, ARCHIVE_OK,
+	    archive_read_data_block(a, &p, &size, &offset));
+	assertEqualInt((int)size, 10);
+	assertEqualInt((int)offset, 0);
+	assertEqualMem(p, "0123456789", 10);
+
+	/* There is no entry. */
+	assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header2(a, ae));
+
+	/* Close the disk object. */
+	assertEqualInt(ARCHIVE_OK, archive_read_close(a));
+	free(fullpath);
+
+	/*
+	 * Test for wild card '*' or '?' with "//?/" prefix.
+	 */
+	wcwd =3D _wgetcwd(NULL, 0);
+	fullpath =3D malloc(sizeof(wchar_t) * (wcslen(wcwd) + 32));
+	wcscpy(fullpath, L"//?/");
+	wcscat(fullpath, wcwd);
+	wcscat(fullpath, L"/dir1/*1");
+	free(wcwd);
+	assertEqualIntA(a, ARCHIVE_OK, archive_read_disk_open_w(a, fullpath));
+	while ((wcwd =3D wcschr(fullpath, L'\\')) !=3D NULL)
+		*wcwd =3D L'/';
+
+	/* dir1/file1 */
+	wp =3D wcsrchr(fullpath, L'/');
+	wcscpy(wp+1, L"file1");
+	assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header2(a, ae));
+	assertEqualInt(0, archive_read_disk_can_descend(a));
+	assertEqualWString(archive_entry_pathname_w(ae), fullpath);
+	assertEqualInt(archive_entry_filetype(ae), AE_IFREG);
+	assertEqualInt(archive_entry_size(ae), 10);
+	assertEqualIntA(a, ARCHIVE_OK,
+	    archive_read_data_block(a, &p, &size, &offset));
+	assertEqualInt((int)size, 10);
+	assertEqualInt((int)offset, 0);
+	assertEqualMem(p, "0123456789", 10);
+
+	/* dir1/sub1 */
+	wcscpy(wp+1, L"sub1");
+	assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header2(a, ae));
+	assertEqualInt(1, archive_read_disk_can_descend(a));
+	assertEqualWString(archive_entry_pathname_w(ae), fullpath);
+	assertEqualInt(archive_entry_filetype(ae), AE_IFDIR);
+
+	/* Descend into the current object */
+	assertEqualIntA(a, ARCHIVE_OK, archive_read_disk_descend(a));
+
+	/* dir1/sub1/file1 */
+	wcscpy(wp+1, L"sub1/file1");
+	assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header2(a, ae));
+	assertEqualInt(0, archive_read_disk_can_descend(a));
+	assertEqualWString(archive_entry_pathname_w(ae), fullpath);
+	assertEqualInt(archive_entry_filetype(ae), AE_IFREG);
+	assertEqualInt(archive_entry_size(ae), 10);
+	assertEqualIntA(a, ARCHIVE_OK,
+	    archive_read_data_block(a, &p, &size, &offset));
+	assertEqualInt((int)size, 10);
+	assertEqualInt((int)offset, 0);
+	assertEqualMem(p, "0123456789", 10);
+
+	/* There is no entry. */
+	assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header2(a, ae));
+
+	/* Close the disk object. */
+	assertEqualInt(ARCHIVE_OK, archive_read_close(a));
+	free(fullpath);
+
 #endif
=20
 	/*
@@ -969,11 +1090,13 @@
 	failure("There must be no entry");
 	assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header2(a, ae));
=20
-	failure("Atime must not be restored");
+	failure("Atime should be restored");
 	assertFileAtimeRecent("at");
+	failure("Atime should be restored");
 	assertFileAtimeRecent("at/f1");
+	failure("Atime should be restored");
 	assertFileAtimeRecent("at/f2");
-	failure("The atime of a empty file must not be changed");
+	failure("The atime of a empty file should not be changed");
 	assertFileAtime("at/fe", 886611, 0);
=20
 	/* Close the disk object. */
@@ -1033,13 +1156,403 @@
 	failure("There must be no entry");
 	assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header2(a, ae));
=20
-	failure("Atime must be restored");
+	failure("Atime should be restored");
 	assertFileAtime("at", 886622, 0);
+	failure("Atime should be restored");
 	assertFileAtime("at/f1", 886600, 0);
+	failure("Atime should be restored");
 	assertFileAtime("at/f2", 886611, 0);
-	failure("The atime of a empty file must not be changed");
+	failure("The atime of a empty file should not be changed");
 	assertFileAtime("at/fe", 886611, 0);
=20
+	/* Close the disk object. */
+	assertEqualInt(ARCHIVE_OK, archive_read_close(a));
+
+	/*
+	 * Test3: Traversals with archive_read_disk_set_atime_restored() but
+	 * no data read as a listing.
+	 */
+	assertUtimes("at/f1", 886600, 0, 886600, 0);
+	assertUtimes("at/f2", 886611, 0, 886611, 0);
+	assertUtimes("at/fe", 886611, 0, 886611, 0);
+	assertUtimes("at", 886622, 0, 886622, 0);
+	file_count =3D 4;
+	assertEqualIntA(a, ARCHIVE_OK, archive_read_disk_set_atime_restored(a));
+	assertEqualIntA(a, ARCHIVE_OK, archive_read_disk_open(a, "at"));
+
+	failure("Directory traversals should work as well");
+	while (file_count--) {
+		assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header2(a, ae));
+		if (strcmp(archive_entry_pathname(ae), "at") =3D=3D 0) {
+			assertEqualInt(archive_entry_filetype(ae), AE_IFDIR);
+		} else if (strcmp(archive_entry_pathname(ae), "at/f1") =3D=3D 0) {
+			assertEqualInt(archive_entry_filetype(ae), AE_IFREG);
+			assertEqualInt(archive_entry_size(ae), 10);
+		} else if (strcmp(archive_entry_pathname(ae), "at/f2") =3D=3D 0) {
+			assertEqualInt(archive_entry_filetype(ae), AE_IFREG);
+			assertEqualInt(archive_entry_size(ae), 11);
+		} else if (strcmp(archive_entry_pathname(ae), "at/fe") =3D=3D 0) {
+			assertEqualInt(archive_entry_filetype(ae), AE_IFREG);
+			assertEqualInt(archive_entry_size(ae), 0);
+		}
+		if (archive_entry_filetype(ae) =3D=3D AE_IFDIR) {
+			/* Descend into the current object */
+			assertEqualIntA(a, ARCHIVE_OK,
+			    archive_read_disk_descend(a));
+		}
+	}
+	/* There is no entry. */
+	failure("There must be no entry");
+	assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header2(a, ae));
+
+	failure("Atime should be restored");
+	assertFileAtime("at", 886622, 0);
+	failure("Atime should be restored");
+	assertFileAtime("at/f1", 886600, 0);
+	failure("Atime should be restored");
+	assertFileAtime("at/f2", 886611, 0);
+	failure("The atime of a empty file should not be changed");
+	assertFileAtime("at/fe", 886611, 0);
+
+	if (!canNodump()) {
+		/* Destroy the disk object. */
+		assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+		archive_entry_free(ae);
+		skipping("Can't test atime with nodump on this filesystem");
+		return;
+	}
+
+	/* Close the disk object. */
+	assertEqualInt(ARCHIVE_OK, archive_read_close(a));
+
+	/*
+	 * Test4: Traversals with archive_read_disk_set_atime_restored() and
+	 * archive_read_disk_honor_nodump().
+	 */
+	assertNodump("at/f1");
+	assertNodump("at/f2");
+	assertUtimes("at/f1", 886600, 0, 886600, 0);
+	assertUtimes("at/f2", 886611, 0, 886611, 0);
+	assertUtimes("at/fe", 886611, 0, 886611, 0);
+	assertUtimes("at", 886622, 0, 886622, 0);
+	file_count =3D 2;
+	assertEqualIntA(a, ARCHIVE_OK, archive_read_disk_set_behavior(a,
+		ARCHIVE_READDISK_RESTORE_ATIME | ARCHIVE_READDISK_HONOR_NODUMP));
+	assertEqualIntA(a, ARCHIVE_OK, archive_read_disk_open(a, "at"));
+
+	failure("Directory traversals should work as well");
+	while (file_count--) {
+		assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header2(a, ae));
+		if (strcmp(archive_entry_pathname(ae), "at") =3D=3D 0) {
+			assertEqualInt(archive_entry_filetype(ae), AE_IFDIR);
+		} else if (strcmp(archive_entry_pathname(ae), "at/fe") =3D=3D 0) {
+			assertEqualInt(archive_entry_filetype(ae), AE_IFREG);
+			assertEqualInt(archive_entry_size(ae), 0);
+		}
+		if (archive_entry_filetype(ae) =3D=3D AE_IFDIR) {
+			/* Descend into the current object */
+			assertEqualIntA(a, ARCHIVE_OK,
+			    archive_read_disk_descend(a));
+		}
+	}
+	/* There is no entry. */
+	failure("There must be no entry");
+	assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header2(a, ae));
+
+	failure("Atime should be restored");
+	assertFileAtime("at", 886622, 0);
+	failure("Atime should be restored");
+	assertFileAtime("at/f1", 886600, 0);
+	failure("Atime should be restored");
+	assertFileAtime("at/f2", 886611, 0);
+	failure("The atime of a empty file should not be changed");
+	assertFileAtime("at/fe", 886611, 0);
+
+	/* Destroy the disk object. */
+	assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+	archive_entry_free(ae);
+}
+
+static int
+metadata_filter(struct archive *a, void *data, struct archive_entry *ae)
+{
+	(void)data; /* UNUSED */
+
+	failure("CTime should be set");
+	assertEqualInt(8, archive_entry_ctime_is_set(ae));
+	failure("MTime should be set");
+	assertEqualInt(16, archive_entry_mtime_is_set(ae));
+
+	if (archive_entry_mtime(ae) < 886611)
+		return (0);
+	if (archive_read_disk_can_descend(a)) {
+		/* Descend into the current object */
+		failure("archive_read_disk_can_descend should work"
+			" in metadata filter");
+		assertEqualIntA(a, 1, archive_read_disk_can_descend(a));
+		failure("archive_read_disk_descend should work"
+			" in metadata filter");
+		assertEqualIntA(a, ARCHIVE_OK, archive_read_disk_descend(a));
+	}
+	return (1);
+}
+
+static void
+test_callbacks(void)
+{
+	struct archive *a;
+	struct archive *m;
+	struct archive_entry *ae;
+	const void *p;
+	size_t size;
+	int64_t offset;
+	int file_count;
+
+	assertMakeDir("cb", 0755);
+	assertMakeFile("cb/f1", 0644, "0123456789");
+	assertMakeFile("cb/f2", 0644, "hello world");
+	assertMakeFile("cb/fe", 0644, NULL);
+	assertUtimes("cb/f1", 886600, 0, 886600, 0);
+	assertUtimes("cb/f2", 886611, 0, 886611, 0);
+	assertUtimes("cb/fe", 886611, 0, 886611, 0);
+	assertUtimes("cb", 886622, 0, 886622, 0);
+
+	assert((ae =3D archive_entry_new()) !=3D NULL);
+	if (assert((a =3D archive_read_disk_new()) !=3D NULL)) {
+		archive_entry_free(ae);
+		return;
+	}
+	if (assert((m =3D archive_match_new()) !=3D NULL)) {
+		archive_entry_free(ae);
+		archive_read_free(a);
+		return;
+	}
+
+	/*
+	 * Test1: Traversals with a name filter.
+	 */
+	file_count =3D 3;
+	assertEqualIntA(m, ARCHIVE_OK,
+	    archive_match_exclude_pattern(m, "cb/f2"));
+	assertEqualIntA(a, ARCHIVE_OK,
+	    archive_read_disk_set_matching(a, m, NULL, NULL));
+	failure("Directory traversals should work as well");
+	assertEqualIntA(a, ARCHIVE_OK, archive_read_disk_open(a, "cb"));
+	while (file_count--) {
+		archive_entry_clear(ae);
+		assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header2(a, ae));
+		failure("File 'cb/f2' should be exclueded");
+		assert(strcmp(archive_entry_pathname(ae), "cb/f2") !=3D 0);
+		if (strcmp(archive_entry_pathname(ae), "cb") =3D=3D 0) {
+			assertEqualInt(archive_entry_filetype(ae), AE_IFDIR);
+		} else if (strcmp(archive_entry_pathname(ae), "cb/f1") =3D=3D 0) {
+			assertEqualInt(archive_entry_filetype(ae), AE_IFREG);
+			assertEqualInt(archive_entry_size(ae), 10);
+			assertEqualIntA(a, ARCHIVE_OK,
+			    archive_read_data_block(a, &p, &size, &offset));
+			assertEqualInt((int)size, 10);
+			assertEqualInt((int)offset, 0);
+			assertEqualMem(p, "0123456789", 10);
+			assertEqualInt(ARCHIVE_EOF,
+			    archive_read_data_block(a, &p, &size, &offset));
+			assertEqualInt((int)size, 0);
+			assertEqualInt((int)offset, 10);
+		} else if (strcmp(archive_entry_pathname(ae), "cb/fe") =3D=3D 0) {
+			assertEqualInt(archive_entry_filetype(ae), AE_IFREG);
+			assertEqualInt(archive_entry_size(ae), 0);
+		}
+		if (archive_read_disk_can_descend(a)) {
+			/* Descend into the current object */
+			assertEqualIntA(a, ARCHIVE_OK,
+			    archive_read_disk_descend(a));
+		}
+	}
+	/* There is no entry. */
+	failure("There should be no entry");
+	assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header2(a, ae));
+
+	/* Close the disk object. */
+	assertEqualInt(ARCHIVE_OK, archive_read_close(a));
+
+	/*
+	 * Test2: Traversals with a metadata filter.
+	 */
+	assertUtimes("cb/f1", 886600, 0, 886600, 0);
+	assertUtimes("cb/f2", 886611, 0, 886611, 0);
+	assertUtimes("cb/fe", 886611, 0, 886611, 0);
+	assertUtimes("cb", 886622, 0, 886622, 0);
+	file_count =3D 3;
+	assertEqualIntA(a, ARCHIVE_OK,
+	    archive_read_disk_set_metadata_filter_callback(a, metadata_filter,
+		    NULL));
+	failure("Directory traversals should work as well");
+	assertEqualIntA(a, ARCHIVE_OK, archive_read_disk_open(a, "cb"));
+
+	while (file_count--) {
+		archive_entry_clear(ae);
+		assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header2(a, ae));
+		failure("File 'cb/f1' should be exclueded");
+		assert(strcmp(archive_entry_pathname(ae), "cb/f1") !=3D 0);
+		if (strcmp(archive_entry_pathname(ae), "cb") =3D=3D 0) {
+			assertEqualInt(archive_entry_filetype(ae), AE_IFDIR);
+		} else if (strcmp(archive_entry_pathname(ae), "cb/f2") =3D=3D 0) {
+			assertEqualInt(archive_entry_filetype(ae), AE_IFREG);
+			assertEqualInt(archive_entry_size(ae), 11);
+			assertEqualIntA(a, ARCHIVE_OK,
+			    archive_read_data_block(a, &p, &size, &offset));
+			assertEqualInt((int)size, 11);
+			assertEqualInt((int)offset, 0);
+			assertEqualMem(p, "hello world", 11);
+			assertEqualInt(ARCHIVE_EOF,
+			    archive_read_data_block(a, &p, &size, &offset));
+			assertEqualInt((int)size, 0);
+			assertEqualInt((int)offset, 11);
+		} else if (strcmp(archive_entry_pathname(ae), "cb/fe") =3D=3D 0) {
+			assertEqualInt(archive_entry_filetype(ae), AE_IFREG);
+			assertEqualInt(archive_entry_size(ae), 0);
+		}
+	}
+	/* There is no entry. */
+	failure("There should be no entry");
+	assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header2(a, ae));
+
+	/* Destroy the disk object. */
+	assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+	assertEqualInt(ARCHIVE_OK, archive_match_free(m));
+	archive_entry_free(ae);
+}
+
+static void
+test_nodump(void)
+{
+	struct archive *a;
+	struct archive_entry *ae;
+	const void *p;
+	size_t size;
+	int64_t offset;
+	int file_count;
+
+	if (!canNodump()) {
+		skipping("Can't test nodump on this filesystem");
+		return;
+	}
+
+	assertMakeDir("nd", 0755);
+	assertMakeFile("nd/f1", 0644, "0123456789");
+	assertMakeFile("nd/f2", 0644, "hello world");
+	assertMakeFile("nd/fe", 0644, NULL);
+	assertNodump("nd/f2");
+	assertUtimes("nd/f1", 886600, 0, 886600, 0);
+	assertUtimes("nd/f2", 886611, 0, 886611, 0);
+	assertUtimes("nd/fe", 886611, 0, 886611, 0);
+	assertUtimes("nd", 886622, 0, 886622, 0);
+
+	assert((ae =3D archive_entry_new()) !=3D NULL);
+	assert((a =3D archive_read_disk_new()) !=3D NULL);
+
+	/*
+	 * Test1: Traversals without archive_read_disk_honor_nodump().
+	 */
+	failure("Directory traversals should work as well");
+	assertEqualIntA(a, ARCHIVE_OK, archive_read_disk_open(a, "nd"));
+
+	file_count =3D 4;
+	while (file_count--) {
+		archive_entry_clear(ae);
+		assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header2(a, ae));
+		if (strcmp(archive_entry_pathname(ae), "nd") =3D=3D 0) {
+			assertEqualInt(archive_entry_filetype(ae), AE_IFDIR);
+		} else if (strcmp(archive_entry_pathname(ae), "nd/f1") =3D=3D 0) {
+			assertEqualInt(archive_entry_filetype(ae), AE_IFREG);
+			assertEqualInt(archive_entry_size(ae), 10);
+			assertEqualIntA(a, ARCHIVE_OK,
+			    archive_read_data_block(a, &p, &size, &offset));
+			assertEqualInt((int)size, 10);
+			assertEqualInt((int)offset, 0);
+			assertEqualMem(p, "0123456789", 10);
+			assertEqualInt(ARCHIVE_EOF,
+			    archive_read_data_block(a, &p, &size, &offset));
+			assertEqualInt((int)size, 0);
+			assertEqualInt((int)offset, 10);
+		} else if (strcmp(archive_entry_pathname(ae), "nd/f2") =3D=3D 0) {
+			assertEqualInt(archive_entry_filetype(ae), AE_IFREG);
+			assertEqualInt(archive_entry_size(ae), 11);
+			assertEqualIntA(a, ARCHIVE_OK,
+			    archive_read_data_block(a, &p, &size, &offset));
+			assertEqualInt((int)size, 11);
+			assertEqualInt((int)offset, 0);
+			assertEqualMem(p, "hello world", 11);
+			assertEqualInt(ARCHIVE_EOF,
+			    archive_read_data_block(a, &p, &size, &offset));
+			assertEqualInt((int)size, 0);
+			assertEqualInt((int)offset, 11);
+		} else if (strcmp(archive_entry_pathname(ae), "nd/fe") =3D=3D 0) {
+			assertEqualInt(archive_entry_filetype(ae), AE_IFREG);
+			assertEqualInt(archive_entry_size(ae), 0);
+		}
+		if (archive_read_disk_can_descend(a)) {
+			/* Descend into the current object */
+			assertEqualIntA(a, ARCHIVE_OK,
+			    archive_read_disk_descend(a));
+		}
+	}
+	/* There is no entry. */
+	failure("There should be no entry");
+	assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header2(a, ae));
+
+	/* Close the disk object. */
+	assertEqualInt(ARCHIVE_OK, archive_read_close(a));
+
+	/*
+	 * Test2: Traversals with archive_read_disk_honor_nodump().
+	 */
+	assertUtimes("nd/f1", 886600, 0, 886600, 0);
+	assertUtimes("nd/f2", 886611, 0, 886611, 0);
+	assertUtimes("nd/fe", 886611, 0, 886611, 0);
+	assertUtimes("nd", 886622, 0, 886622, 0);
+
+	assertEqualIntA(a, ARCHIVE_OK, archive_read_disk_set_behavior(a,
+		ARCHIVE_READDISK_RESTORE_ATIME | ARCHIVE_READDISK_HONOR_NODUMP));
+	failure("Directory traversals should work as well");
+	assertEqualIntA(a, ARCHIVE_OK, archive_read_disk_open(a, "nd"));
+
+	file_count =3D 3;
+	while (file_count--) {
+		archive_entry_clear(ae);
+		assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header2(a, ae));
+		failure("File 'nd/f2' should be exclueded");
+		assert(strcmp(archive_entry_pathname(ae), "nd/f2") !=3D 0);
+		if (strcmp(archive_entry_pathname(ae), "nd") =3D=3D 0) {
+			assertEqualInt(archive_entry_filetype(ae), AE_IFDIR);
+		} else if (strcmp(archive_entry_pathname(ae), "nd/f1") =3D=3D 0) {
+			assertEqualInt(archive_entry_filetype(ae), AE_IFREG);
+			assertEqualInt(archive_entry_size(ae), 10);
+			assertEqualIntA(a, ARCHIVE_OK,
+			    archive_read_data_block(a, &p, &size, &offset));
+			assertEqualInt((int)size, 10);
+			assertEqualInt((int)offset, 0);
+			assertEqualMem(p, "0123456789", 10);
+			assertEqualInt(ARCHIVE_EOF,
+			    archive_read_data_block(a, &p, &size, &offset));
+			assertEqualInt((int)size, 0);
+			assertEqualInt((int)offset, 10);
+		} else if (strcmp(archive_entry_pathname(ae), "nd/fe") =3D=3D 0) {
+			assertEqualInt(archive_entry_filetype(ae), AE_IFREG);
+			assertEqualInt(archive_entry_size(ae), 0);
+		}
+		if (archive_read_disk_can_descend(a)) {
+			/* Descend into the current object */
+			assertEqualIntA(a, ARCHIVE_OK,
+			    archive_read_disk_descend(a));
+		}
+	}
+	/* There is no entry. */
+	failure("There should be no entry");
+	assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header2(a, ae));
+
+	failure("Atime should be restored");
+	assertFileAtime("nd/f2", 886611, 0);
+
 	/* Destroy the disk object. */
 	assertEqualInt(ARCHIVE_OK, archive_read_free(a));
 	archive_entry_free(ae);
@@ -1057,4 +1570,8 @@
 	test_symlink_logical_loop();
 	/* Test to restore atime. */
 	test_restore_atime();
+	/* Test callbacks. */
+	test_callbacks();
+	/* Test nodump. */
+	test_nodump();
 }
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/tes=
t/test_read_format_7zip.c
--- a/head/contrib/libarchive/libarchive/test/test_read_format_7zip.c	Mon J=
ul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/test/test_read_format_7zip.c	Fri A=
ug 10 14:19:25 2012 +0300
@@ -26,8 +26,8 @@
 __FBSDID("$FreeBSD");
=20
 /*
- * Extract a non-encorded file.
- * The header of the 7z archive files is not encdoed.
+ * Extract a non-encoded file.
+ * The header of the 7z archive files is not encoded.
  */
 static void
 test_copy()
@@ -46,7 +46,7 @@
=20
 	/* Verify regular file1. */
 	assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
-	assertEqualInt((AE_IFREG | 0777), archive_entry_mode(ae));
+	assertEqualInt((AE_IFREG | 0666), archive_entry_mode(ae));
 	assertEqualString("file1", archive_entry_pathname(ae));
 	assertEqualInt(86401, archive_entry_mtime(ae));
 	assertEqualInt(60, archive_entry_size(ae));
@@ -139,7 +139,7 @@
=20
 /*
  * Extract an encoded file.
- * The header of the 7z archive files is not encdoed.
+ * The header of the 7z archive files is not encoded.
  */
 static void
 test_plain_header(const char *refname)
@@ -180,7 +180,7 @@
=20
 /*
  * Extract multi files.
- * The header of the 7z archive files is encdoed with LZMA.
+ * The header of the 7z archive files is encoded with LZMA.
  */
 static void
 test_extract_all_files(const char *refname)
@@ -255,7 +255,7 @@
=20
 /*
  * Extract last file.
- * The header of the 7z archive files is encdoed with LZMA.
+ * The header of the 7z archive files is encoded with LZMA.
  */
 static void
 test_extract_last_file(const char *refname)
@@ -323,7 +323,7 @@
 }
=20
 /*
- * Extract a mixed archive file which has both  LZMA and LZMA2 encoded fil=
es.
+ * Extract a mixed archive file which has both LZMA and LZMA2 encoded file=
s.
  *  LZMA: file1, file2, file3, file4
  *  LZMA2: zfile1, zfile2, zfile3, zfile4
  */
@@ -510,7 +510,7 @@
=20
 	/* Verify regular x86exe. */
 	assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
-	assertEqualInt((AE_IFREG | 0555), archive_entry_mode(ae));
+	assertEqualInt((AE_IFREG | 0444), archive_entry_mode(ae) & ~0111);
 	assertEqualString("x86exe", archive_entry_pathname(ae));
 	assertEqualInt(172802, archive_entry_mtime(ae));
 	assertEqualInt(27328, archive_entry_size(ae));
@@ -565,7 +565,7 @@
=20
 	/* Verify regular file1. */
 	assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
-	assertEqualInt((AE_IFREG | 0777), archive_entry_mode(ae));
+	assertEqualInt((AE_IFREG | 0666), archive_entry_mode(ae));
 	assertEqualString("ppmd_test.txt", archive_entry_pathname(ae));
 	assertEqualInt(1322464589, archive_entry_mtime(ae));
 	assertEqualInt(102400, archive_entry_size(ae));
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/tes=
t/test_read_format_cab.c
--- a/head/contrib/libarchive/libarchive/test/test_read_format_cab.c	Mon Ju=
l 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/test/test_read_format_cab.c	Fri Au=
g 10 14:19:25 2012 +0300
@@ -199,7 +199,7 @@
=20
 	/* Verify regular empty. */
 	assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
-	assertEqualInt((AE_IFREG | 0777), archive_entry_mode(ae));
+	assertEqualInt((AE_IFREG | 0666), archive_entry_mode(ae));
 	assertEqualString("empty", archive_entry_pathname(ae));
 	assertEqualInt(0, archive_entry_uid(ae));
 	assertEqualInt(0, archive_entry_gid(ae));
@@ -211,7 +211,7 @@
 		 * file to check if we properly handle multiple CFDATA.
 		 */
 		assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
-		assertEqualInt((AE_IFREG | 0777), archive_entry_mode(ae));
+		assertEqualInt((AE_IFREG | 0666), archive_entry_mode(ae));
 		assertEqualString("zero", archive_entry_pathname(ae));
 		assertEqualInt(0, archive_entry_uid(ae));
 		assertEqualInt(0, archive_entry_gid(ae));
@@ -232,7 +232,7 @@
=20
 	/* Verify regular file1. */
 	assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
-	assertEqualInt((AE_IFREG | 0777), archive_entry_mode(ae));
+	assertEqualInt((AE_IFREG | 0666), archive_entry_mode(ae));
 	assertEqualString("dir1/file1", archive_entry_pathname(ae));
 	assertEqualInt(0, archive_entry_uid(ae));
 	assertEqualInt(0, archive_entry_gid(ae));
@@ -242,7 +242,7 @@
=20
 	/* Verify regular file2. */
 	assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
-	assertEqualInt((AE_IFREG | 0777), archive_entry_mode(ae));
+	assertEqualInt((AE_IFREG | 0666), archive_entry_mode(ae));
 	assertEqualString("dir2/file2", archive_entry_pathname(ae));
 	assertEqualInt(0, archive_entry_uid(ae));
 	assertEqualInt(0, archive_entry_gid(ae));
@@ -269,13 +269,121 @@
 	assertEqualInt(ARCHIVE_OK, archive_read_free(a));
 }
=20
+/*
+ * Skip beginning files and Read the last file.
+ */
+static void
+verify2(const char *refname, enum comp_type comp)
+{
+	struct archive_entry *ae;
+	struct archive *a;
+	char buff[128];
+	char zero[128];
+
+	memset(zero, 0, sizeof(zero));
+	extract_reference_file(refname);
+	assert((a =3D archive_read_new()) !=3D NULL);
+	assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a));
+	assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a));
+	assertEqualIntA(a, ARCHIVE_OK,
+	    archive_read_open_filename(a, refname, 10240));
+
+	/* Verify regular empty. */
+	assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
+	if (comp !=3D STORE) {
+		assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
+	}
+	/* Verify regular file1. */
+	assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
+
+	/* Verify regular file2. */
+	assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
+	assertEqualInt((AE_IFREG | 0666), archive_entry_mode(ae));
+	assertEqualString("dir2/file2", archive_entry_pathname(ae));
+	assertEqualInt(0, archive_entry_uid(ae));
+	assertEqualInt(0, archive_entry_gid(ae));
+	assertEqualInt(file2_size, archive_entry_size(ae));
+	assertEqualInt(file2_size, archive_read_data(a, buff, file2_size));
+	assertEqualMem(buff, file2, file2_size);
+
+	/* End of archive. */
+	assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae));
+
+	if (comp !=3D STORE) {
+		assertEqualInt(4, archive_file_count(a));
+	} else {
+		assertEqualInt(3, archive_file_count(a));
+	}
+
+	/* Verify archive format. */
+	assertEqualIntA(a, ARCHIVE_COMPRESSION_NONE, archive_compression(a));
+	assertEqualIntA(a, ARCHIVE_FORMAT_CAB, archive_format(a));
+
+	/* Close the archive. */
+	assertEqualInt(ARCHIVE_OK, archive_read_close(a));
+	assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+}
+
+/*
+ * Skip all file like 'bsdtar tvf foo.cab'.
+ */
+static void
+verify3(const char *refname, enum comp_type comp)
+{
+	struct archive_entry *ae;
+	struct archive *a;
+	char zero[128];
+
+	memset(zero, 0, sizeof(zero));
+	extract_reference_file(refname);
+	assert((a =3D archive_read_new()) !=3D NULL);
+	assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a));
+	assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a));
+	assertEqualIntA(a, ARCHIVE_OK,
+	    archive_read_open_filename(a, refname, 10240));
+
+	/* Verify regular empty. */
+	assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
+	if (comp !=3D STORE) {
+		assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
+	}
+	/* Verify regular file1. */
+	assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
+
+	/* Verify regular file2. */
+	assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae));
+
+	/* End of archive. */
+	assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae));
+
+	if (comp !=3D STORE) {
+		assertEqualInt(4, archive_file_count(a));
+	} else {
+		assertEqualInt(3, archive_file_count(a));
+	}
+
+	/* Verify archive format. */
+	assertEqualIntA(a, ARCHIVE_COMPRESSION_NONE, archive_compression(a));
+	assertEqualIntA(a, ARCHIVE_FORMAT_CAB, archive_format(a));
+
+	/* Close the archive. */
+	assertEqualInt(ARCHIVE_OK, archive_read_close(a));
+	assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+}
+
 DEFINE_TEST(test_read_format_cab)
 {
 	/* Verify Cabinet file in no compression. */
 	verify("test_read_format_cab_1.cab", STORE);
+	verify2("test_read_format_cab_1.cab", STORE);
+	verify3("test_read_format_cab_1.cab", STORE);
 	/* Verify Cabinet file in MSZIP. */
 	verify("test_read_format_cab_2.cab", MSZIP);
+	verify2("test_read_format_cab_2.cab", MSZIP);
+	verify3("test_read_format_cab_2.cab", MSZIP);
 	/* Verify Cabinet file in LZX. */
 	verify("test_read_format_cab_3.cab", LZX);
+	verify2("test_read_format_cab_3.cab", LZX);
+	verify3("test_read_format_cab_3.cab", LZX);
 }
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/tes=
t/test_read_format_cpio_svr4_bzip2_rpm.c
--- a/head/contrib/libarchive/libarchive/test/test_read_format_cpio_svr4_bz=
ip2_rpm.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/test/test_read_format_cpio_svr4_bz=
ip2_rpm.c	Fri Aug 10 14:19:25 2012 +0300
@@ -51,7 +51,7 @@
 Version: 1.0.0
 Release: 1
 License: BSD
-URL: http://code.google.com/p/libarchive
+URL: http://libarchive.github.com/
 BuildArch: noarch
 BuildRoot: %{_tmppath}/%{name}-%{version}-root
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/tes=
t/test_read_format_cpio_svr4_gzip_rpm.c
--- a/head/contrib/libarchive/libarchive/test/test_read_format_cpio_svr4_gz=
ip_rpm.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/test/test_read_format_cpio_svr4_gz=
ip_rpm.c	Fri Aug 10 14:19:25 2012 +0300
@@ -51,7 +51,7 @@
 Version: 1.0.0
 Release: 1
 License: BSD
-URL: http://code.google.com/p/libarchive
+URL: http://libarchive.github.com/
 BuildArch: noarch
 BuildRoot: %{_tmppath}/%{name}-%{version}-root
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/tes=
t/test_read_format_rar.c
--- a/head/contrib/libarchive/libarchive/test/test_read_format_rar.c	Mon Ju=
l 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/test/test_read_format_rar.c	Fri Au=
g 10 14:19:25 2012 +0300
@@ -1,6 +1,7 @@
 /*-
  * Copyright (c) 2003-2007 Tim Kientzle
  * Copyright (c) 2011 Andres Mejia
+ * Copyright (c) 2011-2012 Michihiro NAKAJIMA
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -278,9 +279,19 @@
   assertEqualInt(41453, archive_entry_mode(ae));
   assertEqualIntA(a, 0, archive_read_data(a, buff, sizeof(buff)));
=20
+  /* Sixth header */
+  assertA(0 =3D=3D archive_read_next_header(a, &ae));
+  assertEqualUTF8String(
+    "abcdefghijklmnopqrs\xE3\x83\x86\xE3\x82\xB9\xE3\x83\x88.txt",
+    archive_entry_pathname(ae));
+  assertA((int)archive_entry_mtime(ae));
+  assertEqualInt(16, archive_entry_size(ae));
+  assertEqualInt(33204, archive_entry_mode(ae));
+  assertEqualIntA(a, 16, archive_read_data(a, buff, sizeof(buff)));
+
   /* Test EOF */
   assertA(1 =3D=3D archive_read_next_header(a, &ae));
-  assertEqualInt(5, archive_file_count(a));
+  assertEqualInt(6, archive_file_count(a));
   assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a));
   assertEqualInt(ARCHIVE_OK, archive_read_free(a));
 }
@@ -364,9 +375,19 @@
   assertEqualInt(41453, archive_entry_mode(ae));
   assertEqualIntA(a, 0, archive_read_data(a, buff, sizeof(buff)));
=20
+  /* Sixth header */
+  assertA(0 =3D=3D archive_read_next_header(a, &ae));
+  assertEqualUTF8String(
+    "abcdefghijklmnopqrs\x83\x65\x83\x58\x83\x67.txt",
+    archive_entry_pathname(ae));
+  assertA((int)archive_entry_mtime(ae));
+  assertEqualInt(16, archive_entry_size(ae));
+  assertEqualInt(33204, archive_entry_mode(ae));
+  assertEqualIntA(a, 16, archive_read_data(a, buff, sizeof(buff)));
+
   /* Test EOF */
   assertA(1 =3D=3D archive_read_next_header(a, &ae));
-  assertEqualInt(5, archive_file_count(a));
+  assertEqualInt(6, archive_file_count(a));
   assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a));
   assertEqualInt(ARCHIVE_OK, archive_read_free(a));
 }
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/tes=
t/test_read_format_rar_unicode.rar.uu
--- a/head/contrib/libarchive/libarchive/test/test_read_format_rar_unicode.=
rar.uu	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/test/test_read_format_rar_unicode.=
rar.uu	Fri Aug 10 14:19:25 2012 +0300
@@ -11,7 +11,8 @@
 M=3D."2,P````````````(`````#VGA/A0P#@`0````E5R"OH+F`(AH:&`PB#``
 M\.H)?ED.=3D"""2``V````-@````,E at OM=3D6%0+/Q0P*`#MH0``Z*&HXX&@XX*(
 M7..#E>."H>."I..#JP"(:&A@,(@P7*K5,*$PI##K,.:\HN6ME^F5M^.!A..#
-ME>."H>."I..#J^60C6QO;F<M9FEL96YA;64M:6XMYKRBY:V7+G1X=3D,0]>P!`
-"!P``
+ME>."H>."I..#J^60C6QO;F<M9FEL96YA;64M:6XMYKRBY:V7+G1X=3D)MJ=3D""`
+M0``/````$`````,%T+85W81G0!TS(`"T at 0``86)C9&5F9VAI:FML;6YO<'%R
+D<^.#AN."N>.#B"YT>'0`D/\0?^2Y_">#,#TN'-+$/7L`0`<`
 `
 end
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/tes=
t/test_read_format_tar_filename.c
--- a/head/contrib/libarchive/libarchive/test/test_read_format_tar_filename=
.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/test/test_read_format_tar_filename=
.c	Fri Aug 10 14:19:25 2012 +0300
@@ -34,7 +34,7 @@
  * - the filename of second file is stored in UTF-8.
  *
  * Whenever hdrcharset option is specified, we will correctly read the
- * filename of sencod file, which is stored in UTF-8 by default.
+ * filename of second file, which is stored in UTF-8 by default.
  */
=20
 static void
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/tes=
t/test_read_pax_truncated.c
--- a/head/contrib/libarchive/libarchive/test/test_read_pax_truncated.c	Mon=
 Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/test/test_read_pax_truncated.c	Fri=
 Aug 10 14:19:25 2012 +0300
@@ -23,7 +23,7 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 #include "test.h"
-__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/test/test_read_pax_=
truncated.c 232153 2012-02-25 10:58:02Z mm $");
+__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/test/test_read_pax_=
truncated.c 238856 2012-07-28 06:38:44Z mm $");
=20
 DEFINE_TEST(test_read_pax_truncated)
 {
@@ -71,10 +71,10 @@
 		assertEqualIntA(a, ARCHIVE_OK, archive_read_support_filter_all(a));
 		/* If it's truncated very early, the file type detection should fail. */
 		if (i < 512) {
-			assertEqualIntA(a, ARCHIVE_FATAL, read_open_memory2(a, buff, i, 13));
+			assertEqualIntA(a, ARCHIVE_FATAL, read_open_memory_minimal(a, buff, i, =
13));
 			goto wrap_up;
 		} else {
-			assertEqualIntA(a, ARCHIVE_OK, read_open_memory2(a, buff, i, 13));
+			assertEqualIntA(a, ARCHIVE_OK, read_open_memory_minimal(a, buff, i, 13)=
);
 		}
=20
 		/* If it's truncated in a header, the header read should fail. */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/tes=
t/test_read_position.c
--- a/head/contrib/libarchive/libarchive/test/test_read_position.c	Mon Jul =
30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/test/test_read_position.c	Fri Aug =
10 14:19:25 2012 +0300
@@ -23,7 +23,7 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 #include "test.h"
-__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/test/test_read_posi=
tion.c 232153 2012-02-25 10:58:02Z mm $");
+__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/test/test_read_posi=
tion.c 238856 2012-07-28 06:38:44Z mm $");
=20
 static unsigned char nulls[1000];
 static unsigned char tmp[1000];
@@ -105,7 +105,7 @@
 	/* Read the archive back without a skip function. */
 	assert(NULL !=3D (a =3D archive_read_new()));
 	assertA(0 =3D=3D archive_read_support_format_tar(a));
-	assertA(0 =3D=3D read_open_memory2(a, buff, sizeof(buff), 512));
+	assertA(0 =3D=3D read_open_memory_minimal(a, buff, sizeof(buff), 512));
 	verify_read_positions(a);
 	archive_read_free(a);
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/tes=
t/test_sparse_basic.c
--- a/head/contrib/libarchive/libarchive/test/test_sparse_basic.c	Mon Jul 3=
0 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/test/test_sparse_basic.c	Fri Aug 1=
0 14:19:25 2012 +0300
@@ -1,5 +1,5 @@
 /*-
- * Copyright (c) 2010 Michihiro NAKAJIMA
+ * Copyright (c) 2010-2012 Michihiro NAKAJIMA
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -31,9 +31,6 @@
 #ifdef HAVE_SYS_PARAM_H
 #include <sys/param.h>
 #endif
-#ifdef HAVE_SYS_UTSNAME_H
-#include <sys/utsname.h>
-#endif
 #ifdef HAVE_FCNTL_H
 #include <fcntl.h>
 #endif
@@ -169,31 +166,12 @@
 		{ HOLE,	 1024 }, { DATA, 10240 },
 		{ END,	0 }
 	};
-	struct utsname ut;
-	char *p, *e;
-	long d;
 	int fd, r;
 	struct fiemap *fm;
 	char buff[1024];
 	const char *testfile =3D "can_sparse";
=20
 	(void)path; /* UNUSED */
-	memset(&ut, 0, sizeof(ut));
-	assertEqualInt(uname(&ut), 0);
-	p =3D ut.release;
-	d =3D strtol(p, &e, 10);
-	if (d < 2 || *e !=3D '.')
-		return (0);
-	if (d =3D=3D 2) {
-		p =3D e + 1;
-		d =3D strtol(p, &e, 10);
-		if (d < 6 || *e !=3D '.')
-			return (0);
-		p =3D e + 1;
-		d =3D strtol(p, NULL, 10);
-		if (d < 28)
-			return (0);
-	}
 	create_sparse_file(testfile, sparse_file);
 	fd =3D open(testfile,  O_RDWR);
 	if (fd < 0)
@@ -205,11 +183,9 @@
 	fm->fm_extent_count =3D (sizeof(buff) - sizeof(*fm))/
 		sizeof(struct fiemap_extent);
 	r =3D ioctl(fd, FS_IOC_FIEMAP, fm);
-	if (r < 0 && (errno =3D=3D ENOTTY || errno =3D=3D EOPNOTSUPP))
-		return (0);/* Not supported. */
 	close(fd);
 	unlink(testfile);
-	return (1);
+	return (r >=3D 0);
 }
=20
 #else
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive/tes=
t/test_write_format_zip.c
--- a/head/contrib/libarchive/libarchive/test/test_write_format_zip.c	Mon J=
ul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/libarchive/test/test_write_format_zip.c	Fri A=
ug 10 14:19:25 2012 +0300
@@ -29,7 +29,7 @@
  */
=20
 #include "test.h"
-__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/test/test_write_for=
mat_zip.c 232153 2012-02-25 10:58:02Z mm $");
+__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive/test/test_write_for=
mat_zip.c 238856 2012-07-28 06:38:44Z mm $");
=20
 static void
 verify_contents(struct archive *a, int expect_details)
@@ -91,7 +91,7 @@
 		assertEqualInt(0, archive_entry_size(ae));
 		assertEqualString("file1", archive_entry_symlink(ae));
 	} else {
-		assertEqualInt(AE_IFREG | 0777, archive_entry_mode(ae));
+		assertEqualInt(AE_IFREG | 0666, archive_entry_mode(ae));
 		assertEqualInt(0, archive_entry_size(ae));
 	}
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive_fe/=
err.c
--- a/head/contrib/libarchive/libarchive_fe/err.c	Mon Jul 30 11:44:18 2012 =
+0300
+++ b/head/contrib/libarchive/libarchive_fe/err.c	Fri Aug 10 14:19:25 2012 =
+0300
@@ -25,7 +25,7 @@
  */
=20
 #include "lafe_platform.h"
-__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive_fe/err.c 228763 201=
1-12-21 11:13:29Z mm $");
+__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive_fe/err.c 238856 201=
2-07-28 06:38:44Z mm $");
=20
 #ifdef HAVE_STDARG_H
 #include <stdarg.h>
@@ -40,6 +40,8 @@
=20
 #include "err.h"
=20
+static void lafe_vwarnc(int, const char *, va_list) __LA_PRINTFLIKE(2, 0);
+
 const char *lafe_progname;
=20
 static void
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive_fe/=
err.h
--- a/head/contrib/libarchive/libarchive_fe/err.h	Mon Jul 30 11:44:18 2012 =
+0300
+++ b/head/contrib/libarchive/libarchive_fe/err.h	Fri Aug 10 14:19:25 2012 =
+0300
@@ -22,7 +22,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.
  *
- * $FreeBSD: head/contrib/libarchive/libarchive_fe/err.h 228774 2011-12-21=
 15:20:17Z mm $
+ * $FreeBSD: head/contrib/libarchive/libarchive_fe/err.h 238856 2012-07-28=
 06:38:44Z mm $
  */
=20
 #ifndef LAFE_ERR_H
@@ -35,9 +35,17 @@
 #define __LA_DEAD
 #endif
=20
+#if defined(__GNUC__) && (__GNUC__ > 2 || \
+			  (__GNUC__ =3D=3D 2 && __GNUC_MINOR__ >=3D 7))
+#define	__LA_PRINTFLIKE(f,a)	__attribute__((__format__(__printf__, f, a)))
+#else
+#define	__LA_PRINTFLIKE(f,a)
+#endif
+
 extern const char *lafe_progname;
=20
-void	lafe_warnc(int code, const char *fmt, ...);
-void	lafe_errc(int eval, int code, const char *fmt, ...) __LA_DEAD;
+void	lafe_warnc(int code, const char *fmt, ...) __LA_PRINTFLIKE(2, 3);
+void	lafe_errc(int eval, int code, const char *fmt, ...) __LA_DEAD
+		  __LA_PRINTFLIKE(3, 4);
=20
 #endif
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive_fe/=
matching.c
--- a/head/contrib/libarchive/libarchive_fe/matching.c	Mon Jul 30 11:44:18 =
2012 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,281 +0,0 @@
-/*-
- * 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 WARRANTI=
ES
- * 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 US=
E,
- * 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 "lafe_platform.h"
-__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive_fe/matching.c 23215=
3 2012-02-25 10:58:02Z mm $");
-
-#ifdef HAVE_ERRNO_H
-#include <errno.h>
-#endif
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#ifdef HAVE_STRING_H
-#include <string.h>
-#endif
-
-#include "err.h"
-#include "line_reader.h"
-#include "matching.h"
-#include "pathmatch.h"
-
-struct match {
-	struct match	 *next;
-	int		  matches;
-	char		  pattern[1];
-};
-
-struct lafe_matching {
-	struct match	 *exclusions;
-	int		  exclusions_count;
-	struct match	 *inclusions;
-	int		  inclusions_count;
-	int		  inclusions_unmatched_count;
-};
-
-static void	add_pattern(struct match **list, const char *pattern);
-static void	initialize_matching(struct lafe_matching **);
-static int	match_exclusion(struct match *, const char *pathname);
-static int	match_inclusion(struct match *, const char *pathname);
-
-/*
- * The matching logic here needs to be re-thought.  I started out to
- * try to mimic gtar's matching logic, but it's not entirely
- * consistent.  In particular 'tar -t' and 'tar -x' interpret patterns
- * on the command line as anchored, but --exclude doesn't.
- */
-
-/*
- * Utility functions to manage exclusion/inclusion patterns
- */
-
-int
-lafe_exclude(struct lafe_matching **matching, const char *pattern)
-{
-
-	if (*matching =3D=3D NULL)
-		initialize_matching(matching);
-	add_pattern(&((*matching)->exclusions), pattern);
-	(*matching)->exclusions_count++;
-	return (0);
-}
-
-int
-lafe_exclude_from_file(struct lafe_matching **matching, const char *pathna=
me)
-{
-	struct lafe_line_reader *lr;
-	const char *p;
-	int ret =3D 0;
-
-	lr =3D lafe_line_reader(pathname, 0);
-	while ((p =3D lafe_line_reader_next(lr)) !=3D NULL) {
-		if (lafe_exclude(matching, p) !=3D 0)
-			ret =3D -1;
-	}
-	lafe_line_reader_free(lr);
-	return (ret);
-}
-
-int
-lafe_include(struct lafe_matching **matching, const char *pattern)
-{
-
-	if (*matching =3D=3D NULL)
-		initialize_matching(matching);
-	add_pattern(&((*matching)->inclusions), pattern);
-	(*matching)->inclusions_count++;
-	(*matching)->inclusions_unmatched_count++;
-	return (0);
-}
-
-int
-lafe_include_from_file(struct lafe_matching **matching, const char *pathna=
me,
-    int nullSeparator)
-{
-	struct lafe_line_reader *lr;
-	const char *p;
-	int ret =3D 0;
-
-	lr =3D lafe_line_reader(pathname, nullSeparator);
-	while ((p =3D lafe_line_reader_next(lr)) !=3D NULL) {
-		if (lafe_include(matching, p) !=3D 0)
-			ret =3D -1;
-	}
-	lafe_line_reader_free(lr);
-	return (ret);
-}
-
-static void
-add_pattern(struct match **list, const char *pattern)
-{
-	struct match *match;
-	size_t len;
-
-	len =3D strlen(pattern);
-	match =3D malloc(sizeof(*match) + len + 1);
-	if (match =3D=3D NULL)
-		lafe_errc(1, errno, "Out of memory");
-	strcpy(match->pattern, pattern);
-	/* Both "foo/" and "foo" should match "foo/bar". */
-	if (len && match->pattern[len - 1] =3D=3D '/')
-		match->pattern[len - 1] =3D '\0';
-	match->next =3D *list;
-	*list =3D match;
-	match->matches =3D 0;
-}
-
-
-int
-lafe_excluded(struct lafe_matching *matching, const char *pathname)
-{
-	struct match *match;
-	struct match *matched;
-
-	if (matching =3D=3D NULL)
-		return (0);
-
-	/* Mark off any unmatched inclusions. */
-	/* In particular, if a filename does appear in the archive and
-	 * is explicitly included and excluded, then we don't report
-	 * it as missing even though we don't extract it.
-	 */
-	matched =3D NULL;
-	for (match =3D matching->inclusions; match !=3D NULL; match =3D match->ne=
xt){
-		if (match->matches =3D=3D 0
-		    && match_inclusion(match, pathname)) {
-			matching->inclusions_unmatched_count--;
-			match->matches++;
-			matched =3D match;
-		}
-	}
-
-	/* Exclusions take priority */
-	for (match =3D matching->exclusions; match !=3D NULL; match =3D match->ne=
xt){
-		if (match_exclusion(match, pathname))
-			return (1);
-	}
-
-	/* It's not excluded and we found an inclusion above, so it's included. */
-	if (matched !=3D NULL)
-		return (0);
-
-
-	/* We didn't find an unmatched inclusion, check the remaining ones. */
-	for (match =3D matching->inclusions; match !=3D NULL; match =3D match->ne=
xt){
-		/* We looked at previously-unmatched inclusions already. */
-		if (match->matches > 0
-		    && match_inclusion(match, pathname)) {
-			match->matches++;
-			return (0);
-		}
-	}
-
-	/* If there were inclusions, default is to exclude. */
-	if (matching->inclusions !=3D NULL)
-	    return (1);
-
-	/* No explicit inclusions, default is to match. */
-	return (0);
-}
-
-/*
- * This is a little odd, but it matches the default behavior of
- * gtar.  In particular, 'a*b' will match 'foo/a1111/222b/bar'
- *
- */
-static int
-match_exclusion(struct match *match, const char *pathname)
-{
-	return (lafe_pathmatch(match->pattern,
-		    pathname,
-		    PATHMATCH_NO_ANCHOR_START | PATHMATCH_NO_ANCHOR_END));
-}
-
-/*
- * Again, mimic gtar:  inclusions are always anchored (have to match
- * the beginning of the path) even though exclusions are not anchored.
- */
-static int
-match_inclusion(struct match *match, const char *pathname)
-{
-	return (lafe_pathmatch(match->pattern, pathname, PATHMATCH_NO_ANCHOR_END)=
);
-}
-
-void
-lafe_cleanup_exclusions(struct lafe_matching **matching)
-{
-	struct match *p, *q;
-
-	if (*matching =3D=3D NULL)
-		return;
-
-	for (p =3D (*matching)->inclusions; p !=3D NULL; ) {
-		q =3D p;
-		p =3D p->next;
-		free(q);
-	}
-
-	for (p =3D (*matching)->exclusions; p !=3D NULL; ) {
-		q =3D p;
-		p =3D p->next;
-		free(q);
-	}
-
-	free(*matching);
-	*matching =3D NULL;
-}
-
-static void
-initialize_matching(struct lafe_matching **matching)
-{
-	*matching =3D calloc(sizeof(**matching), 1);
-	if (*matching =3D=3D NULL)
-		lafe_errc(1, errno, "No memory");
-}
-
-int
-lafe_unmatched_inclusions(struct lafe_matching *matching)
-{
-
-	if (matching =3D=3D NULL)
-		return (0);
-	return (matching->inclusions_unmatched_count);
-}
-
-int
-lafe_unmatched_inclusions_warn(struct lafe_matching *matching, const char =
*msg)
-{
-	struct match *p;
-
-	if (matching =3D=3D NULL)
-		return (0);
-
-	for (p =3D matching->inclusions; p !=3D NULL; p =3D p->next) {
-		if (p->matches =3D=3D 0)
-			lafe_warnc(0, "%s: %s", p->pattern, msg);
-	}
-
-	return (matching->inclusions_unmatched_count);
-}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive_fe/=
matching.h
--- a/head/contrib/libarchive/libarchive_fe/matching.h	Mon Jul 30 11:44:18 =
2012 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,46 +0,0 @@
-/*-
- * 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
- *    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(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTI=
ES
- * 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 US=
E,
- * 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: head/contrib/libarchive/libarchive_fe/matching.h 228763 2011-=
12-21 11:13:29Z mm $
- */
-
-#ifndef MATCHING_H
-#define MATCHING_H
-
-struct lafe_matching;
-
-int	lafe_exclude(struct lafe_matching **matching, const char *pattern);
-int	lafe_exclude_from_file(struct lafe_matching **matching,
-			       const char *pathname);
-int	lafe_include(struct lafe_matching **matching, const char *pattern);
-int	lafe_include_from_file(struct lafe_matching **matching,
-			       const char *pathname, int nullSeparator);
-
-int	lafe_excluded(struct lafe_matching *, const char *pathname);
-void	lafe_cleanup_exclusions(struct lafe_matching **);
-int	lafe_unmatched_inclusions(struct lafe_matching *);
-int	lafe_unmatched_inclusions_warn(struct lafe_matching *, const char *msg=
);
-
-#endif
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive_fe/=
pathmatch.c
--- a/head/contrib/libarchive/libarchive_fe/pathmatch.c	Mon Jul 30 11:44:18=
 2012 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,255 +0,0 @@
-/*-
- * 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
- *    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(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTI=
ES
- * 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 US=
E,
- * 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 "lafe_platform.h"
-__FBSDID("$FreeBSD: head/contrib/libarchive/libarchive_fe/pathmatch.c 2321=
53 2012-02-25 10:58:02Z mm $");
-
-#ifdef HAVE_STRING_H
-#include <string.h>
-#endif
-
-#include "pathmatch.h"
-
-/*
- * Check whether a character 'c' is matched by a list specification [...]:
- *    * Leading '!' or '^' negates the class.
- *    * <char>-<char> is a range of characters
- *    * \<char> removes any special meaning for <char>
- *
- * Some interesting boundary cases:
- *   a-d-e is one range (a-d) followed by two single characters - and e.
- *   \a-\d is same as a-d
- *   a\-d is three single characters: a, d, -
- *   Trailing - is not special (so [a-] is two characters a and -).
- *   Initial - is not special ([a-] is same as [-a] is same as [\\-a])
- *   This function never sees a trailing \.
- *   [] always fails
- *   [!] always succeeds
- */
-static int
-pm_list(const char *start, const char *end, const char c, int flags)
-{
-	const char *p =3D start;
-	char rangeStart =3D '\0', nextRangeStart;
-	int match =3D 1, nomatch =3D 0;
-
-	/* This will be used soon... */
-	(void)flags; /* UNUSED */
-
-	/* If this is a negated class, return success for nomatch. */
-	if ((*p =3D=3D '!' || *p =3D=3D '^') && p < end) {
-		match =3D 0;
-		nomatch =3D 1;
-		++p;
-	}
-
-	while (p < end) {
-		nextRangeStart =3D '\0';
-		switch (*p) {
-		case '-':
-			/* Trailing or initial '-' is not special. */
-			if ((rangeStart =3D=3D '\0') || (p =3D=3D end - 1)) {
-				if (*p =3D=3D c)
-					return (match);
-			} else {
-				char rangeEnd =3D *++p;
-				if (rangeEnd =3D=3D '\\')
-					rangeEnd =3D *++p;
-				if ((rangeStart <=3D c) && (c <=3D rangeEnd))
-					return (match);
-			}
-			break;
-		case '\\':
-			++p;
-			/* Fall through */
-		default:
-			if (*p =3D=3D c)
-				return (match);
-			nextRangeStart =3D *p; /* Possible start of range. */
-		}
-		rangeStart =3D nextRangeStart;
-		++p;
-	}
-	return (nomatch);
-}
-
-/*
- * If s is pointing to "./", ".//", "./././" or the like, skip it.
- */
-static const char *
-pm_slashskip(const char *s) {
-	while ((*s =3D=3D '/')
-	    || (s[0] =3D=3D '.' && s[1] =3D=3D '/')
-	    || (s[0] =3D=3D '.' && s[1] =3D=3D '\0'))
-		++s;
-	return (s);
-}
-
-static int
-pm(const char *p, const char *s, int flags)
-{
-	const char *end;
-
-	/*
-	 * Ignore leading './', './/', '././', etc.
-	 */
-	if (s[0] =3D=3D '.' && s[1] =3D=3D '/')
-		s =3D pm_slashskip(s + 1);
-	if (p[0] =3D=3D '.' && p[1] =3D=3D '/')
-		p =3D pm_slashskip(p + 1);
-
-	for (;;) {
-		switch (*p) {
-		case '\0':
-			if (s[0] =3D=3D '/') {
-				if (flags & PATHMATCH_NO_ANCHOR_END)
-					return (1);
-				/* "dir" =3D=3D "dir/" =3D=3D "dir/." */
-				s =3D pm_slashskip(s);
-			}
-			return (*s =3D=3D '\0');
-		case '?':
-			/* ? always succeeds, unless we hit end of 's' */
-			if (*s =3D=3D '\0')
-				return (0);
-			break;
-		case '*':
-			/* "*" =3D=3D "**" =3D=3D "***" ... */
-			while (*p =3D=3D '*')
-				++p;
-			/* Trailing '*' always succeeds. */
-			if (*p =3D=3D '\0')
-				return (1);
-			while (*s) {
-				if (lafe_pathmatch(p, s, flags))
-					return (1);
-				++s;
-			}
-			return (0);
-		case '[':
-			/*
-			 * Find the end of the [...] character class,
-			 * ignoring \] that might occur within the class.
-			 */
-			end =3D p + 1;
-			while (*end !=3D '\0' && *end !=3D ']') {
-				if (*end =3D=3D '\\' && end[1] !=3D '\0')
-					++end;
-				++end;
-			}
-			if (*end =3D=3D ']') {
-				/* We found [...], try to match it. */
-				if (!pm_list(p + 1, end, *s, flags))
-					return (0);
-				p =3D end; /* Jump to trailing ']' char. */
-				break;
-			} else
-				/* No final ']', so just match '['. */
-				if (*p !=3D *s)
-					return (0);
-			break;
-		case '\\':
-			/* Trailing '\\' matches itself. */
-			if (p[1] =3D=3D '\0') {
-				if (*s !=3D '\\')
-					return (0);
-			} else {
-				++p;
-				if (*p !=3D *s)
-					return (0);
-			}
-			break;
-		case '/':
-			if (*s !=3D '/' && *s !=3D '\0')
-				return (0);
-			/* Note: pattern "/\./" won't match "/";
-			 * pm_slashskip() correctly stops at backslash. */
-			p =3D pm_slashskip(p);
-			s =3D pm_slashskip(s);
-			if (*p =3D=3D '\0' && (flags & PATHMATCH_NO_ANCHOR_END))
-				return (1);
-			--p; /* Counteract the increment below. */
-			--s;
-			break;
-		case '$':
-			/* '$' is special only at end of pattern and only
-			 * if PATHMATCH_NO_ANCHOR_END is specified. */
-			if (p[1] =3D=3D '\0' && (flags & PATHMATCH_NO_ANCHOR_END)){
-				/* "dir" =3D=3D "dir/" =3D=3D "dir/." */
-				return (*pm_slashskip(s) =3D=3D '\0');
-			}
-			/* Otherwise, '$' is not special. */
-			/* FALL THROUGH */
-		default:
-			if (*p !=3D *s)
-				return (0);
-			break;
-		}
-		++p;
-		++s;
-	}
-}
-
-/* Main entry point. */
-int
-lafe_pathmatch(const char *p, const char *s, int flags)
-{
-	/* Empty pattern only matches the empty string. */
-	if (p =3D=3D NULL || *p =3D=3D '\0')
-		return (s =3D=3D NULL || *s =3D=3D '\0');
-
-	/* Leading '^' anchors the start of the pattern. */
-	if (*p =3D=3D '^') {
-		++p;
-		flags &=3D ~PATHMATCH_NO_ANCHOR_START;
-	}
-
-	if (*p =3D=3D '/' && *s !=3D '/')
-		return (0);
-
-	/* Certain patterns and file names anchor implicitly. */
-	if (*p =3D=3D '*' || *p =3D=3D '/' || *p =3D=3D '/') {
-		while (*p =3D=3D '/')
-			++p;
-		while (*s =3D=3D '/')
-			++s;
-		return (pm(p, s, flags));
-	}
-
-	/* If start is unanchored, try to match start of each path element. */
-	if (flags & PATHMATCH_NO_ANCHOR_START) {
-		for ( ; s !=3D NULL; s =3D strchr(s, '/')) {
-			if (*s =3D=3D '/')
-				s++;
-			if (pm(p, s, flags))
-				return (1);
-		}
-		return (0);
-	}
-
-	/* Default: Match from beginning. */
-	return (pm(p, s, flags));
-}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/libarchive_fe/=
pathmatch.h
--- a/head/contrib/libarchive/libarchive_fe/pathmatch.h	Mon Jul 30 11:44:18=
 2012 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,42 +0,0 @@
-/*-
- * 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
- *    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(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTI=
ES
- * 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 US=
E,
- * 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: head/contrib/libarchive/libarchive_fe/pathmatch.h 228763 2011=
-12-21 11:13:29Z mm $
- */
-
-#ifndef LAFE_PATHMATCH_H
-#define LAFE_PATHMATCH_H
-
-/* Don't anchor at beginning unless the pattern starts with "^" */
-#define PATHMATCH_NO_ANCHOR_START	1
-/* Don't anchor at end unless the pattern ends with "$" */
-#define PATHMATCH_NO_ANCHOR_END 	2
-
-/* Note that "^" and "$" are not special unless you set the corresponding
- * flag above. */
-
-int lafe_pathmatch(const char *p, const char *s, int flags);
-
-#endif
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/tar/bsdtar.1
--- a/head/contrib/libarchive/tar/bsdtar.1	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/tar/bsdtar.1	Fri Aug 10 14:19:25 2012 +0300
@@ -22,9 +22,9 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\" $FreeBSD: head/contrib/libarchive/tar/bsdtar.1 232153 2012-02-25 10:58=
:02Z mm $
+.\" $FreeBSD: head/contrib/libarchive/tar/bsdtar.1 238856 2012-07-28 06:38=
:44Z mm $
 .\"
-.Dd Oct 12, 2009
+.Dd December 24, 2011
 .Dt TAR 1
 .Os
 .Sh NAME
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/tar/bsdtar.c
--- a/head/contrib/libarchive/tar/bsdtar.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/tar/bsdtar.c	Fri Aug 10 14:19:25 2012 +0300
@@ -24,7 +24,7 @@
  */
=20
 #include "bsdtar_platform.h"
-__FBSDID("$FreeBSD: head/contrib/libarchive/tar/bsdtar.c 232153 2012-02-25=
 10:58:02Z mm $");
+__FBSDID("$FreeBSD: head/contrib/libarchive/tar/bsdtar.c 238856 2012-07-28=
 06:38:44Z mm $");
=20
 #ifdef HAVE_SYS_PARAM_H
 #include <sys/param.h>
@@ -118,9 +118,6 @@
 }
 #endif
=20
-/* External function to parse a date/time string */
-time_t get_date(time_t, const char *);
-
 static void		 long_help(void);
 static void		 only_mode(struct bsdtar *, const char *opt,
 			     const char *valid);
@@ -140,7 +137,6 @@
 	char			 option_o;
 	char			 possible_help_request;
 	char			 buff[16];
-	time_t			 now;
=20
 	/*
 	 * Use a pointer for consistency, but stack-allocated storage
@@ -192,8 +188,6 @@
 			lafe_progname =3D *argv;
 	}
=20
-	time(&now);
-
 #if HAVE_SETLOCALE
 	if (setlocale(LC_ALL, "") =3D=3D NULL)
 		lafe_warnc(0, "Failed to set default locale");
@@ -241,11 +235,14 @@
 	 * Enable Mac OS "copyfile()" extension by default.
 	 * This has no effect on other platforms.
 	 */
-	bsdtar->enable_copyfile =3D 1;
+	bsdtar->readdisk_flags |=3D ARCHIVE_READDISK_MAC_COPYFILE;
 #ifdef COPYFILE_DISABLE_VAR
 	if (getenv(COPYFILE_DISABLE_VAR))
-		bsdtar->enable_copyfile =3D 0;
+		bsdtar->readdisk_flags &=3D ~ARCHIVE_READDISK_MAC_COPYFILE;
 #endif
+	bsdtar->matching =3D archive_match_new();
+	if (bsdtar->matching =3D=3D NULL)
+		lafe_errc(1, errno, "Out of memory");
=20
 	bsdtar->argv =3D argv;
 	bsdtar->argc =3D argc;
@@ -287,10 +284,11 @@
 			bsdtar->option_chroot =3D 1;
 			break;
 		case OPTION_DISABLE_COPYFILE: /* Mac OS X */
-			bsdtar->enable_copyfile =3D 0;
+			bsdtar->readdisk_flags &=3D ~ARCHIVE_READDISK_MAC_COPYFILE;
 			break;
 		case OPTION_EXCLUDE: /* GNU tar */
-			if (lafe_exclude(&bsdtar->matching, bsdtar->argument))
+			if (archive_match_exclude_pattern(
+			    bsdtar->matching, bsdtar->argument) !=3D ARCHIVE_OK)
 				lafe_errc(1, 0,
 				    "Couldn't exclude %s\n", bsdtar->argument);
 			break;
@@ -341,7 +339,8 @@
 			 * no one else needs this to filter entries
 			 * when transforming archives.
 			 */
-			if (lafe_include(&bsdtar->matching, bsdtar->argument))
+			if (archive_match_include_pattern(bsdtar->matching,
+			    bsdtar->argument) !=3D ARCHIVE_OK)
 				lafe_errc(1, 0,
 				    "Failed to add %s to inclusion list",
 				    bsdtar->argument);
@@ -395,39 +394,35 @@
 		 * TODO: Add corresponding "older" options to reverse these.
 		 */
 		case OPTION_NEWER_CTIME: /* GNU tar */
-			bsdtar->newer_ctime_filter =3D 1;
-			bsdtar->newer_ctime_sec =3D get_date(now, bsdtar->argument);
+			if (archive_match_include_date(bsdtar->matching,
+			    ARCHIVE_MATCH_CTIME | ARCHIVE_MATCH_NEWER,
+			    bsdtar->argument) !=3D ARCHIVE_OK)
+				lafe_errc(1, 0, "Error : %s",
+				    archive_error_string(bsdtar->matching));
 			break;
 		case OPTION_NEWER_CTIME_THAN:
-			{
-				struct stat st;
-				if (stat(bsdtar->argument, &st) !=3D 0)
-					lafe_errc(1, 0,
-					    "Can't open file %s", bsdtar->argument);
-				bsdtar->newer_ctime_filter =3D 1;
-				bsdtar->newer_ctime_sec =3D st.st_ctime;
-				bsdtar->newer_ctime_nsec =3D
-				    ARCHIVE_STAT_CTIME_NANOS(&st);
-			}
+			if (archive_match_include_file_time(bsdtar->matching,
+			    ARCHIVE_MATCH_CTIME | ARCHIVE_MATCH_NEWER,
+			    bsdtar->argument) !=3D ARCHIVE_OK)
+				lafe_errc(1, 0, "Error : %s",
+				    archive_error_string(bsdtar->matching));
 			break;
 		case OPTION_NEWER_MTIME: /* GNU tar */
-			bsdtar->newer_mtime_filter =3D 1;
-			bsdtar->newer_mtime_sec =3D get_date(now, bsdtar->argument);
+			if (archive_match_include_date(bsdtar->matching,
+			    ARCHIVE_MATCH_MTIME | ARCHIVE_MATCH_NEWER,
+			    bsdtar->argument) !=3D ARCHIVE_OK)
+				lafe_errc(1, 0, "Error : %s",
+				    archive_error_string(bsdtar->matching));
 			break;
 		case OPTION_NEWER_MTIME_THAN:
-			{
-				struct stat st;
-				if (stat(bsdtar->argument, &st) !=3D 0)
-					lafe_errc(1, 0,
-					    "Can't open file %s", bsdtar->argument);
-				bsdtar->newer_mtime_filter =3D 1;
-				bsdtar->newer_mtime_sec =3D st.st_mtime;
-				bsdtar->newer_mtime_nsec =3D
-				    ARCHIVE_STAT_MTIME_NANOS(&st);
-			}
+			if (archive_match_include_file_time(bsdtar->matching,
+			    ARCHIVE_MATCH_MTIME | ARCHIVE_MATCH_NEWER,
+			    bsdtar->argument) !=3D ARCHIVE_OK)
+				lafe_errc(1, 0, "Error : %s",
+				    archive_error_string(bsdtar->matching));
 			break;
 		case OPTION_NODUMP: /* star */
-			bsdtar->option_honor_nodump =3D 1;
+			bsdtar->readdisk_flags |=3D ARCHIVE_READDISK_HONOR_NODUMP;
 			break;
 		case OPTION_NO_SAME_OWNER: /* GNU tar */
 			bsdtar->extract_flags &=3D ~ARCHIVE_EXTRACT_OWNER;
@@ -454,7 +449,8 @@
 			option_o =3D 1; /* Record it and resolve it later. */
 			break;
 		case OPTION_ONE_FILE_SYSTEM: /* GNU tar */
-			bsdtar->option_dont_traverse_mounts =3D 1;
+			bsdtar->readdisk_flags |=3D
+			    ARCHIVE_READDISK_NO_TRAVERSE_MOUNTS;
 			break;
 		case OPTION_OPTIONS:
 			bsdtar->option_options =3D bsdtar->argument;
@@ -559,10 +555,11 @@
 			bsdtar->option_interactive =3D 1;
 			break;
 		case 'X': /* GNU tar */
-			if (lafe_exclude_from_file(&bsdtar->matching, bsdtar->argument))
-				lafe_errc(1, 0,
-				    "failed to process exclusions from file %s",
-				    bsdtar->argument);
+			if (archive_match_exclude_pattern_from_file(
+			    bsdtar->matching, bsdtar->argument, 0)
+			    !=3D ARCHIVE_OK)
+				lafe_errc(1, 0, "Error : %s",
+				    archive_error_string(bsdtar->matching));
 			break;
 		case 'x': /* SUSv2 */
 			set_mode(bsdtar, opt);
@@ -612,11 +609,11 @@
 		    "Must specify one of -c, -r, -t, -u, -x");
=20
 	/* Check boolean options only permitted in certain modes. */
-	if (bsdtar->option_dont_traverse_mounts)
+	if (bsdtar->readdisk_flags & ARCHIVE_READDISK_NO_TRAVERSE_MOUNTS)
 		only_mode(bsdtar, "--one-file-system", "cru");
 	if (bsdtar->option_fast_read)
 		only_mode(bsdtar, "--fast-read", "xt");
-	if (bsdtar->option_honor_nodump)
+	if (bsdtar->readdisk_flags & ARCHIVE_READDISK_HONOR_NODUMP)
 		only_mode(bsdtar, "--nodump", "cru");
 	if (option_o > 0) {
 		switch (bsdtar->mode) {
@@ -684,7 +681,7 @@
 		break;
 	}
=20
-	lafe_cleanup_exclusions(&bsdtar->matching);
+	archive_match_free(bsdtar->matching);
 #if HAVE_REGEX_H
 	cleanup_substitution(bsdtar);
 #endif
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/tar/bsdtar.h
--- a/head/contrib/libarchive/tar/bsdtar.h	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/tar/bsdtar.h	Fri Aug 10 14:19:25 2012 +0300
@@ -22,14 +22,12 @@
  * (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: head/contrib/libarchive/tar/bsdtar.h 232153 2012-02-25 10:58:=
02Z mm $
+ * $FreeBSD: head/contrib/libarchive/tar/bsdtar.h 238856 2012-07-28 06:38:=
44Z mm $
  */
=20
 #include "bsdtar_platform.h"
 #include <stdio.h>
=20
-#include "matching.h"
-
 #define	DEFAULT_BYTES_PER_BLOCK	(20*512)
=20
 /*
@@ -46,16 +44,11 @@
 	const char	 *create_format; /* -F format */
 	char		 *pending_chdir; /* -C dir */
 	const char	 *names_from_file; /* -T file */
-	int		  newer_ctime_filter; /* --newer/--newer-than */
-	time_t		  newer_ctime_sec; /* --newer/--newer-than */
-	long		  newer_ctime_nsec; /* --newer/--newer-than */
-	int		  newer_mtime_filter; /* --newer-mtime/--newer-mtime-than */
-	time_t		  newer_mtime_sec; /* --newer-mtime */
-	long		  newer_mtime_nsec; /* --newer-mtime-than */
 	int		  bytes_per_block; /* -b block_size */
 	int		  bytes_in_last_block; /* See -b handling. */
 	int		  verbose;   /* -v */
 	int		  extract_flags; /* Flags for extract operation */
+	int		  readdisk_flags; /* Flags for read disk operation */
 	int		  strip_components; /* Remove this many leading dirs */
 	int		  gid;  /* --gid */
 	const char	 *gname; /* --gname */
@@ -67,10 +60,8 @@
 	const char	 *compress_program;
 	char		  option_absolute_paths; /* -P */
 	char		  option_chroot; /* --chroot */
-	char		  option_dont_traverse_mounts; /* --one-file-system */
 	char		  option_fast_read; /* --fast-read */
 	const char	 *option_options; /* --options */
-	char		  option_honor_nodump; /* --nodump */
 	char		  option_interactive; /* -w */
 	char		  option_no_owner; /* -o */
 	char		  option_no_subdirs; /* -n */
@@ -81,7 +72,6 @@
 	char		  option_unlink_first; /* -U */
 	char		  option_warn_links; /* --check-links */
 	char		  day_first; /* show day before month in -tv output */
-	char		  enable_copyfile; /* For Mac OS */
=20
 	/* Option parser state */
 	int		  getopt_state;
@@ -111,7 +101,8 @@
 	struct name_cache	*gname_cache;	/* for write.c */
 	char			*buff;		/* for write.c */
 	size_t			 buff_size;	/* for write.c */
-	struct lafe_matching	*matching;	/* for matching.c */
+	int			 first_fs;	/* for write.c */
+	struct archive		*matching;	/* for matching.c */
 	struct security		*security;	/* for read.c */
 	struct name_cache	*uname_cache;	/* for write.c */
 	struct siginfo_data	*siginfo;	/* for siginfo.c */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/tar/getdate.c
--- a/head/contrib/libarchive/tar/getdate.c	Mon Jul 30 11:44:18 2012 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1037 +0,0 @@
-/*
- * This code is in the public domain and has no copyright.
- *
- * This is a plain C recursive-descent translation of an old
- * public-domain YACC grammar that has been used for parsing dates in
- * very many open-source projects.
- *
- * Since the original authors were generous enough to donate their
- * work to the public domain, I feel compelled to match their
- * generosity.
- *
- * Tim Kientzle, February 2009.
- */
-
-/*
- * Header comment from original getdate.y:
- */
-
-/*
-**  Originally written by Steven M. Bellovin <smb at research.att.com> while
-**  at the University of North Carolina at Chapel Hill.  Later tweaked by
-**  a couple of people on Usenet.  Completely overhauled by Rich $alz
-**  <rsalz at bbn.com> and Jim Berets <jberets at bbn.com> in August, 1990;
-**
-**  This grammar has 10 shift/reduce conflicts.
-**
-**  This code is in the public domain and has no copyright.
-*/
-
-#ifdef __FreeBSD__
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/contrib/libarchive/tar/getdate.c 232153 2012-02-2=
5 10:58:02Z mm $");
-#endif
-
-#include <ctype.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <time.h>
-
-/* This file defines a single public function. */
-time_t get_date(time_t now, char *);
-
-/* Basic time units. */
-#define	EPOCH		1970
-#define	MINUTE		(60L)
-#define	HOUR		(60L * MINUTE)
-#define	DAY		(24L * HOUR)
-
-/* Daylight-savings mode:  on, off, or not yet known. */
-enum DSTMODE { DSTon, DSToff, DSTmaybe };
-/* Meridian:  am or pm. */
-enum { tAM, tPM };
-/* Token types returned by nexttoken() */
-enum { tAGO =3D 260, tDAY, tDAYZONE, tAMPM, tMONTH, tMONTH_UNIT, tSEC_UNIT,
-       tUNUMBER, tZONE, tDST };
-struct token { int token; time_t value; };
-
-/*
- * Parser state.
- */
-struct gdstate {
-	struct token *tokenp; /* Pointer to next token. */
-	/* HaveXxxx counts how many of this kind of phrase we've seen;
-	 * it's a fatal error to have more than one time, zone, day,
-	 * or date phrase. */
-	int	HaveYear;
-	int	HaveMonth;
-	int	HaveDay;
-	int	HaveWeekDay; /* Day of week */
-	int	HaveTime; /* Hour/minute/second */
-	int	HaveZone; /* timezone and/or DST info */
-	int	HaveRel; /* time offset; we can have more than one */
-	/* Absolute time values. */
-	time_t	Timezone;  /* Seconds offset from GMT */
-	time_t	Day;
-	time_t	Hour;
-	time_t	Minutes;
-	time_t	Month;
-	time_t	Seconds;
-	time_t	Year;
-	/* DST selection */
-	enum DSTMODE	DSTmode;
-	/* Day of week accounting, e.g., "3rd Tuesday" */
-	time_t	DayOrdinal; /* "3" in "3rd Tuesday" */
-	time_t	DayNumber; /* "Tuesday" in "3rd Tuesday" */
-	/* Relative time values: hour/day/week offsets are measured in
-	 * seconds, month/year are counted in months. */
-	time_t	RelMonth;
-	time_t	RelSeconds;
-};
-
-/*
- * A series of functions that recognize certain common time phrases.
- * Each function returns 1 if it managed to make sense of some of the
- * tokens, zero otherwise.
- */
-
-/*
- *  hour:minute or hour:minute:second with optional AM, PM, or numeric
- *  timezone offset
- */
-static int
-timephrase(struct gdstate *gds)
-{
-	if (gds->tokenp[0].token =3D=3D tUNUMBER
-	    && gds->tokenp[1].token =3D=3D ':'
-	    && gds->tokenp[2].token =3D=3D tUNUMBER
-	    && gds->tokenp[3].token =3D=3D ':'
-	    && gds->tokenp[4].token =3D=3D tUNUMBER) {
-		/* "12:14:18" or "22:08:07" */
-		++gds->HaveTime;
-		gds->Hour =3D gds->tokenp[0].value;
-		gds->Minutes =3D gds->tokenp[2].value;
-		gds->Seconds =3D gds->tokenp[4].value;
-		gds->tokenp +=3D 5;
-	}
-	else if (gds->tokenp[0].token =3D=3D tUNUMBER
-	    && gds->tokenp[1].token =3D=3D ':'
-	    && gds->tokenp[2].token =3D=3D tUNUMBER) {
-		/* "12:14" or "22:08" */
-		++gds->HaveTime;
-		gds->Hour =3D gds->tokenp[0].value;
-		gds->Minutes =3D gds->tokenp[2].value;
-		gds->Seconds =3D 0;
-		gds->tokenp +=3D 3;
-	}
-	else if (gds->tokenp[0].token =3D=3D tUNUMBER
-	    && gds->tokenp[1].token =3D=3D tAMPM) {
-		/* "7" is a time if it's followed by "am" or "pm" */
-		++gds->HaveTime;
-		gds->Hour =3D gds->tokenp[0].value;
-		gds->Minutes =3D gds->Seconds =3D 0;
-		/* We'll handle the AM/PM below. */
-		gds->tokenp +=3D 1;
-	} else {
-		/* We can't handle this. */
-		return 0;
-	}
-
-	if (gds->tokenp[0].token =3D=3D tAMPM) {
-		/* "7:12pm", "12:20:13am" */
-		if (gds->Hour =3D=3D 12)
-			gds->Hour =3D 0;
-		if (gds->tokenp[0].value =3D=3D tPM)
-			gds->Hour +=3D 12;
-		gds->tokenp +=3D 1;
-	}
-	if (gds->tokenp[0].token =3D=3D '+'
-	    && gds->tokenp[1].token =3D=3D tUNUMBER) {
-		/* "7:14+0700" */
-		gds->HaveZone++;
-		gds->DSTmode =3D DSToff;
-		gds->Timezone =3D - ((gds->tokenp[1].value / 100) * HOUR
-		    + (gds->tokenp[1].value % 100) * MINUTE);
-		gds->tokenp +=3D 2;
-	}
-	if (gds->tokenp[0].token =3D=3D '-'
-	    && gds->tokenp[1].token =3D=3D tUNUMBER) {
-		/* "19:14:12-0530" */
-		gds->HaveZone++;
-		gds->DSTmode =3D DSToff;
-		gds->Timezone =3D + ((gds->tokenp[1].value / 100) * HOUR
-		    + (gds->tokenp[1].value % 100) * MINUTE);
-		gds->tokenp +=3D 2;
-	}
-	return 1;
-}
-
-/*
- * Timezone name, possibly including DST.
- */
-static int
-zonephrase(struct gdstate *gds)
-{
-	if (gds->tokenp[0].token =3D=3D tZONE
-	    && gds->tokenp[1].token =3D=3D tDST) {
-		gds->HaveZone++;
-		gds->Timezone =3D gds->tokenp[0].value;
-		gds->DSTmode =3D DSTon;
-		gds->tokenp +=3D 1;
-		return 1;
-	}
-
-	if (gds->tokenp[0].token =3D=3D tZONE) {
-		gds->HaveZone++;
-		gds->Timezone =3D gds->tokenp[0].value;
-		gds->DSTmode =3D DSToff;
-		gds->tokenp +=3D 1;
-		return 1;
-	}
-
-	if (gds->tokenp[0].token =3D=3D tDAYZONE) {
-		gds->HaveZone++;
-		gds->Timezone =3D gds->tokenp[0].value;
-		gds->DSTmode =3D DSTon;
-		gds->tokenp +=3D 1;
-		return 1;
-	}
-	return 0;
-}
-
-/*
- * Year/month/day in various combinations.
- */
-static int
-datephrase(struct gdstate *gds)
-{
-	if (gds->tokenp[0].token =3D=3D tUNUMBER
-	    && gds->tokenp[1].token =3D=3D '/'
-	    && gds->tokenp[2].token =3D=3D tUNUMBER
-	    && gds->tokenp[3].token =3D=3D '/'
-	    && gds->tokenp[4].token =3D=3D tUNUMBER) {
-		gds->HaveYear++;
-		gds->HaveMonth++;
-		gds->HaveDay++;
-		if (gds->tokenp[0].value >=3D 13) {
-			/* First number is big:  2004/01/29, 99/02/17 */
-			gds->Year =3D gds->tokenp[0].value;
-			gds->Month =3D gds->tokenp[2].value;
-			gds->Day =3D gds->tokenp[4].value;
-		} else if ((gds->tokenp[4].value >=3D 13)
-		    || (gds->tokenp[2].value >=3D 13)) {
-			/* Last number is big:  01/07/98 */
-			/* Middle number is big:  01/29/04 */
-			gds->Month =3D gds->tokenp[0].value;
-			gds->Day =3D gds->tokenp[2].value;
-			gds->Year =3D gds->tokenp[4].value;
-		} else {
-			/* No significant clues: 02/03/04 */
-			gds->Month =3D gds->tokenp[0].value;
-			gds->Day =3D gds->tokenp[2].value;
-			gds->Year =3D gds->tokenp[4].value;
-		}
-		gds->tokenp +=3D 5;
-		return 1;
-	}
-
-	if (gds->tokenp[0].token =3D=3D tUNUMBER
-	    && gds->tokenp[1].token =3D=3D '/'
-	    && gds->tokenp[2].token =3D=3D tUNUMBER) {
-		/* "1/15" */
-		gds->HaveMonth++;
-		gds->HaveDay++;
-		gds->Month =3D gds->tokenp[0].value;
-		gds->Day =3D gds->tokenp[2].value;
-		gds->tokenp +=3D 3;
-		return 1;
-	}
-
-	if (gds->tokenp[0].token =3D=3D tUNUMBER
-	    && gds->tokenp[1].token =3D=3D '-'
-	    && gds->tokenp[2].token =3D=3D tUNUMBER
-	    && gds->tokenp[3].token =3D=3D '-'
-	    && gds->tokenp[4].token =3D=3D tUNUMBER) {
-		/* ISO 8601 format.  yyyy-mm-dd.  */
-		gds->HaveYear++;
-		gds->HaveMonth++;
-		gds->HaveDay++;
-		gds->Year =3D gds->tokenp[0].value;
-		gds->Month =3D gds->tokenp[2].value;
-		gds->Day =3D gds->tokenp[4].value;
-		gds->tokenp +=3D 5;
-		return 1;
-	}
-
-	if (gds->tokenp[0].token =3D=3D tUNUMBER
-	    && gds->tokenp[1].token =3D=3D '-'
-	    && gds->tokenp[2].token =3D=3D tMONTH
-	    && gds->tokenp[3].token =3D=3D '-'
-	    && gds->tokenp[4].token =3D=3D tUNUMBER) {
-		gds->HaveYear++;
-		gds->HaveMonth++;
-		gds->HaveDay++;
-		if (gds->tokenp[0].value > 31) {
-			/* e.g. 1992-Jun-17 */
-			gds->Year =3D gds->tokenp[0].value;
-			gds->Month =3D gds->tokenp[2].value;
-			gds->Day =3D gds->tokenp[4].value;
-		} else {
-			/* e.g. 17-JUN-1992.  */
-			gds->Day =3D gds->tokenp[0].value;
-			gds->Month =3D gds->tokenp[2].value;
-			gds->Year =3D gds->tokenp[4].value;
-		}
-		gds->tokenp +=3D 5;
-		return 1;
-	}
-
-	if (gds->tokenp[0].token =3D=3D tMONTH
-	    && gds->tokenp[1].token =3D=3D tUNUMBER
-	    && gds->tokenp[2].token =3D=3D ','
-	    && gds->tokenp[3].token =3D=3D tUNUMBER) {
-		/* "June 17, 2001" */
-		gds->HaveYear++;
-		gds->HaveMonth++;
-		gds->HaveDay++;
-		gds->Month =3D gds->tokenp[0].value;
-		gds->Day =3D gds->tokenp[1].value;
-		gds->Year =3D gds->tokenp[3].value;
-		gds->tokenp +=3D 4;
-		return 1;
-	}
-
-	if (gds->tokenp[0].token =3D=3D tMONTH
-	    && gds->tokenp[1].token =3D=3D tUNUMBER) {
-		/* "May 3" */
-		gds->HaveMonth++;
-		gds->HaveDay++;
-		gds->Month =3D gds->tokenp[0].value;
-		gds->Day =3D gds->tokenp[1].value;
-		gds->tokenp +=3D 2;
-		return 1;
-	}
-
-	if (gds->tokenp[0].token =3D=3D tUNUMBER
-	    && gds->tokenp[1].token =3D=3D tMONTH
-	    && gds->tokenp[2].token =3D=3D tUNUMBER) {
-		/* "12 Sept 1997" */
-		gds->HaveYear++;
-		gds->HaveMonth++;
-		gds->HaveDay++;
-		gds->Day =3D gds->tokenp[0].value;
-		gds->Month =3D gds->tokenp[1].value;
-		gds->Year =3D gds->tokenp[2].value;
-		gds->tokenp +=3D 3;
-		return 1;
-	}
-
-	if (gds->tokenp[0].token =3D=3D tUNUMBER
-	    && gds->tokenp[1].token =3D=3D tMONTH) {
-		/* "12 Sept" */
-		gds->HaveMonth++;
-		gds->HaveDay++;
-		gds->Day =3D gds->tokenp[0].value;
-		gds->Month =3D gds->tokenp[1].value;
-		gds->tokenp +=3D 2;
-		return 1;
-	}
-
-	return 0;
-}
-
-/*
- * Relative time phrase: "tomorrow", "yesterday", "+1 hour", etc.
- */
-static int
-relunitphrase(struct gdstate *gds)
-{
-	if (gds->tokenp[0].token =3D=3D '-'
-	    && gds->tokenp[1].token =3D=3D tUNUMBER
-	    && gds->tokenp[2].token =3D=3D tSEC_UNIT) {
-		/* "-3 hours" */
-		gds->HaveRel++;
-		gds->RelSeconds -=3D gds->tokenp[1].value * gds->tokenp[2].value;
-		gds->tokenp +=3D 3;
-		return 1;
-	}
-	if (gds->tokenp[0].token =3D=3D '+'
-	    && gds->tokenp[1].token =3D=3D tUNUMBER
-	    && gds->tokenp[2].token =3D=3D tSEC_UNIT) {
-		/* "+1 minute" */
-		gds->HaveRel++;
-		gds->RelSeconds +=3D gds->tokenp[1].value * gds->tokenp[2].value;
-		gds->tokenp +=3D 3;
-		return 1;
-	}
-	if (gds->tokenp[0].token =3D=3D tUNUMBER
-	    && gds->tokenp[1].token =3D=3D tSEC_UNIT) {
-		/* "1 day" */
-		gds->HaveRel++;
-		gds->RelSeconds +=3D gds->tokenp[1].value * gds->tokenp[2].value;
-		gds->tokenp +=3D 3;
-		return 1;
-	}
-	if (gds->tokenp[0].token =3D=3D '-'
-	    && gds->tokenp[1].token =3D=3D tUNUMBER
-	    && gds->tokenp[2].token =3D=3D tMONTH_UNIT) {
-		/* "-3 months" */
-		gds->HaveRel++;
-		gds->RelMonth -=3D gds->tokenp[1].value * gds->tokenp[2].value;
-		gds->tokenp +=3D 3;
-		return 1;
-	}
-	if (gds->tokenp[0].token =3D=3D '+'
-	    && gds->tokenp[1].token =3D=3D tUNUMBER
-	    && gds->tokenp[2].token =3D=3D tMONTH_UNIT) {
-		/* "+5 years" */
-		gds->HaveRel++;
-		gds->RelMonth +=3D gds->tokenp[1].value * gds->tokenp[2].value;
-		gds->tokenp +=3D 3;
-		return 1;
-	}
-	if (gds->tokenp[0].token =3D=3D tUNUMBER
-	    && gds->tokenp[1].token =3D=3D tMONTH_UNIT) {
-		/* "2 years" */
-		gds->HaveRel++;
-		gds->RelMonth +=3D gds->tokenp[0].value * gds->tokenp[1].value;
-		gds->tokenp +=3D 2;
-		return 1;
-	}
-	if (gds->tokenp[0].token =3D=3D tSEC_UNIT) {
-		/* "now", "tomorrow" */
-		gds->HaveRel++;
-		gds->RelSeconds +=3D gds->tokenp[0].value;
-		++gds->tokenp;
-		return 1;
-	}
-	if (gds->tokenp[0].token =3D=3D tMONTH_UNIT) {
-		/* "month" */
-		gds->HaveRel++;
-		gds->RelMonth +=3D gds->tokenp[0].value;
-		gds->tokenp +=3D 1;
-		return 1;
-	}
-	return 0;
-}
-
-/*
- * Day of the week specification.
- */
-static int
-dayphrase(struct gdstate *gds)
-{
-	if (gds->tokenp[0].token =3D=3D tDAY) {
-		/* "tues", "wednesday," */
-		gds->HaveWeekDay++;
-		gds->DayOrdinal =3D 1;
-		gds->DayNumber =3D gds->tokenp[0].value;
-		gds->tokenp +=3D 1;
-		if (gds->tokenp[0].token =3D=3D ',')
-			gds->tokenp +=3D 1;
-		return 1;
-	}
-	if (gds->tokenp[0].token =3D=3D tUNUMBER
-		&& gds->tokenp[1].token =3D=3D tDAY) {
-		/* "second tues" "3 wed" */
-		gds->HaveWeekDay++;
-		gds->DayOrdinal =3D gds->tokenp[0].value;
-		gds->DayNumber =3D gds->tokenp[1].value;
-		gds->tokenp +=3D 2;
-		return 1;
-	}
-	return 0;
-}
-
-/*
- * Try to match a phrase using one of the above functions.
- * This layer also deals with a couple of generic issues.
- */
-static int
-phrase(struct gdstate *gds)
-{
-	if (timephrase(gds))
-		return 1;
-	if (zonephrase(gds))
-		return 1;
-	if (datephrase(gds))
-		return 1;
-	if (dayphrase(gds))
-		return 1;
-	if (relunitphrase(gds)) {
-		if (gds->tokenp[0].token =3D=3D tAGO) {
-			gds->RelSeconds =3D -gds->RelSeconds;
-			gds->RelMonth =3D -gds->RelMonth;
-			gds->tokenp +=3D 1;
-		}
-		return 1;
-	}
-
-	/* Bare numbers sometimes have meaning. */
-	if (gds->tokenp[0].token =3D=3D tUNUMBER) {
-		if (gds->HaveTime && !gds->HaveYear && !gds->HaveRel) {
-			gds->HaveYear++;
-			gds->Year =3D gds->tokenp[0].value;
-			gds->tokenp +=3D 1;
-			return 1;
-		}
-
-		if(gds->tokenp[0].value > 10000) {
-			/* "20040301" */
-			gds->HaveYear++;
-			gds->HaveMonth++;
-			gds->HaveDay++;
-			gds->Day=3D (gds->tokenp[0].value)%100;
-			gds->Month=3D (gds->tokenp[0].value/100)%100;
-			gds->Year =3D gds->tokenp[0].value/10000;
-			gds->tokenp +=3D 1;
-			return 1;
-		}
-
-		if (gds->tokenp[0].value < 24) {
-			gds->HaveTime++;
-			gds->Hour =3D gds->tokenp[0].value;
-			gds->Minutes =3D 0;
-			gds->Seconds =3D 0;
-			gds->tokenp +=3D 1;
-			return 1;
-		}
-
-		if ((gds->tokenp[0].value / 100 < 24)
-		    && (gds->tokenp[0].value % 100 < 60)) {
-			/* "513" is same as "5:13" */
-			gds->Hour =3D gds->tokenp[0].value / 100;
-			gds->Minutes =3D gds->tokenp[0].value % 100;
-			gds->Seconds =3D 0;
-			gds->tokenp +=3D 1;
-			return 1;
-		}
-	}
-
-	return 0;
-}
-
-/*
- * A dictionary of time words.
- */
-static struct LEXICON {
-	size_t		abbrev;
-	const char	*name;
-	int		type;
-	time_t		value;
-} const TimeWords[] =3D {
-	/* am/pm */
-	{ 0, "am",		tAMPM,	tAM },
-	{ 0, "pm",		tAMPM,	tPM },
-
-	/* Month names. */
-	{ 3, "january",		tMONTH,  1 },
-	{ 3, "february",	tMONTH,  2 },
-	{ 3, "march",		tMONTH,  3 },
-	{ 3, "april",		tMONTH,  4 },
-	{ 3, "may",		tMONTH,  5 },
-	{ 3, "june",		tMONTH,  6 },
-	{ 3, "july",		tMONTH,  7 },
-	{ 3, "august",		tMONTH,  8 },
-	{ 3, "september",	tMONTH,  9 },
-	{ 3, "october",		tMONTH, 10 },
-	{ 3, "november",	tMONTH, 11 },
-	{ 3, "december",	tMONTH, 12 },
-
-	/* Days of the week. */
-	{ 2, "sunday",		tDAY, 0 },
-	{ 3, "monday",		tDAY, 1 },
-	{ 2, "tuesday",		tDAY, 2 },
-	{ 3, "wednesday",	tDAY, 3 },
-	{ 2, "thursday",	tDAY, 4 },
-	{ 2, "friday",		tDAY, 5 },
-	{ 2, "saturday",	tDAY, 6 },
-
-	/* Timezones: Offsets are in seconds. */
-	{ 0, "gmt",  tZONE,     0*HOUR }, /* Greenwich Mean */
-	{ 0, "ut",   tZONE,     0*HOUR }, /* Universal (Coordinated) */
-	{ 0, "utc",  tZONE,     0*HOUR },
-	{ 0, "wet",  tZONE,     0*HOUR }, /* Western European */
-	{ 0, "bst",  tDAYZONE,  0*HOUR }, /* British Summer */
-	{ 0, "wat",  tZONE,     1*HOUR }, /* West Africa */
-	{ 0, "at",   tZONE,     2*HOUR }, /* Azores */
-	/* { 0, "bst", tZONE, 3*HOUR }, */ /* Brazil Standard: Conflict */
-	/* { 0, "gst", tZONE, 3*HOUR }, */ /* Greenland Standard: Conflict*/
-	{ 0, "nft",  tZONE,     3*HOUR+30*MINUTE }, /* Newfoundland */
-	{ 0, "nst",  tZONE,     3*HOUR+30*MINUTE }, /* Newfoundland Standard */
-	{ 0, "ndt",  tDAYZONE,  3*HOUR+30*MINUTE }, /* Newfoundland Daylight */
-	{ 0, "ast",  tZONE,     4*HOUR }, /* Atlantic Standard */
-	{ 0, "adt",  tDAYZONE,  4*HOUR }, /* Atlantic Daylight */
-	{ 0, "est",  tZONE,     5*HOUR }, /* Eastern Standard */
-	{ 0, "edt",  tDAYZONE,  5*HOUR }, /* Eastern Daylight */
-	{ 0, "cst",  tZONE,     6*HOUR }, /* Central Standard */
-	{ 0, "cdt",  tDAYZONE,  6*HOUR }, /* Central Daylight */
-	{ 0, "mst",  tZONE,     7*HOUR }, /* Mountain Standard */
-	{ 0, "mdt",  tDAYZONE,  7*HOUR }, /* Mountain Daylight */
-	{ 0, "pst",  tZONE,     8*HOUR }, /* Pacific Standard */
-	{ 0, "pdt",  tDAYZONE,  8*HOUR }, /* Pacific Daylight */
-	{ 0, "yst",  tZONE,     9*HOUR }, /* Yukon Standard */
-	{ 0, "ydt",  tDAYZONE,  9*HOUR }, /* Yukon Daylight */
-	{ 0, "hst",  tZONE,     10*HOUR }, /* Hawaii Standard */
-	{ 0, "hdt",  tDAYZONE,  10*HOUR }, /* Hawaii Daylight */
-	{ 0, "cat",  tZONE,     10*HOUR }, /* Central Alaska */
-	{ 0, "ahst", tZONE,     10*HOUR }, /* Alaska-Hawaii Standard */
-	{ 0, "nt",   tZONE,     11*HOUR }, /* Nome */
-	{ 0, "idlw", tZONE,     12*HOUR }, /* Intl Date Line West */
-	{ 0, "cet",  tZONE,     -1*HOUR }, /* Central European */
-	{ 0, "met",  tZONE,     -1*HOUR }, /* Middle European */
-	{ 0, "mewt", tZONE,     -1*HOUR }, /* Middle European Winter */
-	{ 0, "mest", tDAYZONE,  -1*HOUR }, /* Middle European Summer */
-	{ 0, "swt",  tZONE,     -1*HOUR }, /* Swedish Winter */
-	{ 0, "sst",  tDAYZONE,  -1*HOUR }, /* Swedish Summer */
-	{ 0, "fwt",  tZONE,     -1*HOUR }, /* French Winter */
-	{ 0, "fst",  tDAYZONE,  -1*HOUR }, /* French Summer */
-	{ 0, "eet",  tZONE,     -2*HOUR }, /* Eastern Eur, USSR Zone 1 */
-	{ 0, "bt",   tZONE,     -3*HOUR }, /* Baghdad, USSR Zone 2 */
-	{ 0, "it",   tZONE,     -3*HOUR-30*MINUTE },/* Iran */
-	{ 0, "zp4",  tZONE,     -4*HOUR }, /* USSR Zone 3 */
-	{ 0, "zp5",  tZONE,     -5*HOUR }, /* USSR Zone 4 */
-	{ 0, "ist",  tZONE,     -5*HOUR-30*MINUTE },/* Indian Standard */
-	{ 0, "zp6",  tZONE,     -6*HOUR }, /* USSR Zone 5 */
-	/* { 0, "nst",  tZONE, -6.5*HOUR }, */ /* North Sumatra: Conflict */
-	/* { 0, "sst", tZONE, -7*HOUR }, */ /* So Sumatra, USSR 6: Conflict */
-	{ 0, "wast", tZONE,     -7*HOUR }, /* West Australian Standard */
-	{ 0, "wadt", tDAYZONE,  -7*HOUR }, /* West Australian Daylight */
-	{ 0, "jt",   tZONE,     -7*HOUR-30*MINUTE },/* Java (3pm in Cronusland!)*/
-	{ 0, "cct",  tZONE,     -8*HOUR }, /* China Coast, USSR Zone 7 */
-	{ 0, "jst",  tZONE,     -9*HOUR }, /* Japan Std, USSR Zone 8 */
-	{ 0, "cast", tZONE,     -9*HOUR-30*MINUTE },/* Ctrl Australian Std */
-	{ 0, "cadt", tDAYZONE,  -9*HOUR-30*MINUTE },/* Ctrl Australian Daylt */
-	{ 0, "east", tZONE,     -10*HOUR }, /* Eastern Australian Std */
-	{ 0, "eadt", tDAYZONE,  -10*HOUR }, /* Eastern Australian Daylt */
-	{ 0, "gst",  tZONE,     -10*HOUR }, /* Guam Std, USSR Zone 9 */
-	{ 0, "nzt",  tZONE,     -12*HOUR }, /* New Zealand */
-	{ 0, "nzst", tZONE,     -12*HOUR }, /* New Zealand Standard */
-	{ 0, "nzdt", tDAYZONE,  -12*HOUR }, /* New Zealand Daylight */
-	{ 0, "idle", tZONE,     -12*HOUR }, /* Intl Date Line East */
-
-	{ 0, "dst",  tDST,		0 },
-
-	/* Time units. */
-	{ 4, "years",		tMONTH_UNIT,	12 },
-	{ 5, "months",		tMONTH_UNIT,	1 },
-	{ 9, "fortnights",	tSEC_UNIT,	14 * DAY },
-	{ 4, "weeks",		tSEC_UNIT,	7 * DAY },
-	{ 3, "days",		tSEC_UNIT,	DAY },
-	{ 4, "hours",		tSEC_UNIT,	HOUR },
-	{ 3, "minutes",		tSEC_UNIT,	MINUTE },
-	{ 3, "seconds",		tSEC_UNIT,	1 },
-
-	/* Relative-time words. */
-	{ 0, "tomorrow",	tSEC_UNIT,	DAY },
-	{ 0, "yesterday",	tSEC_UNIT,	-DAY },
-	{ 0, "today",		tSEC_UNIT,	0 },
-	{ 0, "now",		tSEC_UNIT,	0 },
-	{ 0, "last",		tUNUMBER,	-1 },
-	{ 0, "this",		tSEC_UNIT,	0 },
-	{ 0, "next",		tUNUMBER,	2 },
-	{ 0, "first",		tUNUMBER,	1 },
-	{ 0, "1st",		tUNUMBER,	1 },
-/*	{ 0, "second",		tUNUMBER,	2 }, */
-	{ 0, "2nd",		tUNUMBER,	2 },
-	{ 0, "third",		tUNUMBER,	3 },
-	{ 0, "3rd",		tUNUMBER,	3 },
-	{ 0, "fourth",		tUNUMBER,	4 },
-	{ 0, "4th",		tUNUMBER,	4 },
-	{ 0, "fifth",		tUNUMBER,	5 },
-	{ 0, "5th",		tUNUMBER,	5 },
-	{ 0, "sixth",		tUNUMBER,	6 },
-	{ 0, "seventh",		tUNUMBER,	7 },
-	{ 0, "eighth",		tUNUMBER,	8 },
-	{ 0, "ninth",		tUNUMBER,	9 },
-	{ 0, "tenth",		tUNUMBER,	10 },
-	{ 0, "eleventh",	tUNUMBER,	11 },
-	{ 0, "twelfth",		tUNUMBER,	12 },
-	{ 0, "ago",		tAGO,		1 },
-
-	/* Military timezones. */
-	{ 0, "a",	tZONE,	1*HOUR },
-	{ 0, "b",	tZONE,	2*HOUR },
-	{ 0, "c",	tZONE,	3*HOUR },
-	{ 0, "d",	tZONE,	4*HOUR },
-	{ 0, "e",	tZONE,	5*HOUR },
-	{ 0, "f",	tZONE,	6*HOUR },
-	{ 0, "g",	tZONE,	7*HOUR },
-	{ 0, "h",	tZONE,	8*HOUR },
-	{ 0, "i",	tZONE,	9*HOUR },
-	{ 0, "k",	tZONE,	10*HOUR },
-	{ 0, "l",	tZONE,	11*HOUR },
-	{ 0, "m",	tZONE,	12*HOUR },
-	{ 0, "n",	tZONE,	-1*HOUR },
-	{ 0, "o",	tZONE,	-2*HOUR },
-	{ 0, "p",	tZONE,	-3*HOUR },
-	{ 0, "q",	tZONE,	-4*HOUR },
-	{ 0, "r",	tZONE,	-5*HOUR },
-	{ 0, "s",	tZONE,	-6*HOUR },
-	{ 0, "t",	tZONE,	-7*HOUR },
-	{ 0, "u",	tZONE,	-8*HOUR },
-	{ 0, "v",	tZONE,	-9*HOUR },
-	{ 0, "w",	tZONE,	-10*HOUR },
-	{ 0, "x",	tZONE,	-11*HOUR },
-	{ 0, "y",	tZONE,	-12*HOUR },
-	{ 0, "z",	tZONE,	0*HOUR },
-
-	/* End of table. */
-	{ 0, NULL,	0,	0 }
-};
-
-/*
- * Year is either:
- *  =3D A number from 0 to 99, which means a year from 1970 to 2069, or
- *  =3D The actual year (>=3D100).
- */
-static time_t
-Convert(time_t Month, time_t Day, time_t Year,
-	time_t Hours, time_t Minutes, time_t Seconds,
-	time_t Timezone, enum DSTMODE DSTmode)
-{
-	static int DaysInMonth[12] =3D {
-		31, 0, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
-	};
-	time_t	Julian;
-	int	i;
-
-	if (Year < 69)
-		Year +=3D 2000;
-	else if (Year < 100)
-		Year +=3D 1900;
-	DaysInMonth[1] =3D Year % 4 =3D=3D 0 && (Year % 100 !=3D 0 || Year % 400 =
=3D=3D 0)
-	    ? 29 : 28;
-	/* Checking for 2038 bogusly assumes that time_t is 32 bits.  But
-	   I'm too lazy to try to check for time_t overflow in another way.  */
-	if (Year < EPOCH || Year > 2038
-	    || Month < 1 || Month > 12
-	    /* Lint fluff:  "conversion from long may lose accuracy" */
-	    || Day < 1 || Day > DaysInMonth[(int)--Month]
-	    || Hours < 0 || Hours > 23
-	    || Minutes < 0 || Minutes > 59
-	    || Seconds < 0 || Seconds > 59)
-		return -1;
-
-	Julian =3D Day - 1;
-	for (i =3D 0; i < Month; i++)
-		Julian +=3D DaysInMonth[i];
-	for (i =3D EPOCH; i < Year; i++)
-		Julian +=3D 365 + (i % 4 =3D=3D 0);
-	Julian *=3D DAY;
-	Julian +=3D Timezone;
-	Julian +=3D Hours * HOUR + Minutes * MINUTE + Seconds;
-	if (DSTmode =3D=3D DSTon
-	    || (DSTmode =3D=3D DSTmaybe && localtime(&Julian)->tm_isdst))
-		Julian -=3D HOUR;
-	return Julian;
-}
-
-
-static time_t
-DSTcorrect(time_t Start, time_t Future)
-{
-	time_t	StartDay;
-	time_t	FutureDay;
-
-	StartDay =3D (localtime(&Start)->tm_hour + 1) % 24;
-	FutureDay =3D (localtime(&Future)->tm_hour + 1) % 24;
-	return (Future - Start) + (StartDay - FutureDay) * HOUR;
-}
-
-
-static time_t
-RelativeDate(time_t Start, time_t zone, int dstmode,
-    time_t DayOrdinal, time_t DayNumber)
-{
-	struct tm	*tm;
-	time_t	t, now;
-
-	t =3D Start - zone;
-	tm =3D gmtime(&t);
-	now =3D Start;
-	now +=3D DAY * ((DayNumber - tm->tm_wday + 7) % 7);
-	now +=3D 7 * DAY * (DayOrdinal <=3D 0 ? DayOrdinal : DayOrdinal - 1);
-	if (dstmode =3D=3D DSTmaybe)
-		return DSTcorrect(Start, now);
-	return now - Start;
-}
-
-
-static time_t
-RelativeMonth(time_t Start, time_t Timezone, time_t RelMonth)
-{
-	struct tm	*tm;
-	time_t	Month;
-	time_t	Year;
-
-	if (RelMonth =3D=3D 0)
-		return 0;
-	tm =3D localtime(&Start);
-	Month =3D 12 * (tm->tm_year + 1900) + tm->tm_mon + RelMonth;
-	Year =3D Month / 12;
-	Month =3D Month % 12 + 1;
-	return DSTcorrect(Start,
-	    Convert(Month, (time_t)tm->tm_mday, Year,
-		(time_t)tm->tm_hour, (time_t)tm->tm_min, (time_t)tm->tm_sec,
-		Timezone, DSTmaybe));
-}
-
-/*
- * Tokenizer.
- */
-static int
-nexttoken(char **in, time_t *value)
-{
-	char	c;
-	char	buff[64];
-
-	for ( ; ; ) {
-		while (isspace((unsigned char)**in))
-			++*in;
-
-		/* Skip parenthesized comments. */
-		if (**in =3D=3D '(') {
-			int Count =3D 0;
-			do {
-				c =3D *(*in)++;
-				if (c =3D=3D '\0')
-					return c;
-				if (c =3D=3D '(')
-					Count++;
-				else if (c =3D=3D ')')
-					Count--;
-			} while (Count > 0);
-			continue;
-		}
-
-		/* Try the next token in the word table first. */
-		/* This allows us to match "2nd", for example. */
-		{
-			char *src =3D *in;
-			const struct LEXICON *tp;
-			unsigned i =3D 0;
-
-			/* Force to lowercase and strip '.' characters. */
-			while (*src !=3D '\0'
-			    && (isalnum((unsigned char)*src) || *src =3D=3D '.')
-			    && i < sizeof(buff)-1) {
-				if (*src !=3D '.') {
-					if (isupper((unsigned char)*src))
-						buff[i++] =3D tolower((unsigned char)*src);
-					else
-						buff[i++] =3D *src;
-				}
-				src++;
-			}
-			buff[i] =3D '\0';
-
-			/*
-			 * Find the first match.  If the word can be
-			 * abbreviated, make sure we match at least
-			 * the minimum abbreviation.
-			 */
-			for (tp =3D TimeWords; tp->name; tp++) {
-				size_t abbrev =3D tp->abbrev;
-				if (abbrev =3D=3D 0)
-					abbrev =3D strlen(tp->name);
-				if (strlen(buff) >=3D abbrev
-				    && strncmp(tp->name, buff, strlen(buff))
-				    	=3D=3D 0) {
-					/* Skip over token. */
-					*in =3D src;
-					/* Return the match. */
-					*value =3D tp->value;
-					return tp->type;
-				}
-			}
-		}
-
-		/*
-		 * Not in the word table, maybe it's a number.  Note:
-		 * Because '-' and '+' have other special meanings, I
-		 * don't deal with signed numbers here.
-		 */
-		if (isdigit((unsigned char)(c =3D **in))) {
-			for (*value =3D 0; isdigit((unsigned char)(c =3D *(*in)++)); )
-				*value =3D 10 * *value + c - '0';
-			(*in)--;
-			return (tUNUMBER);
-		}
-
-		return *(*in)++;
-	}
-}
-
-#define	TM_YEAR_ORIGIN 1900
-
-/* Yield A - B, measured in seconds.  */
-static long
-difftm (struct tm *a, struct tm *b)
-{
-	int ay =3D a->tm_year + (TM_YEAR_ORIGIN - 1);
-	int by =3D b->tm_year + (TM_YEAR_ORIGIN - 1);
-	int days =3D (
-		/* difference in day of year */
-		a->tm_yday - b->tm_yday
-		/* + intervening leap days */
-		+  ((ay >> 2) - (by >> 2))
-		-  (ay/100 - by/100)
-		+  ((ay/100 >> 2) - (by/100 >> 2))
-		/* + difference in years * 365 */
-		+  (long)(ay-by) * 365
-		);
-	return (days * DAY + (a->tm_hour - b->tm_hour) * HOUR
-	    + (a->tm_min - b->tm_min) * MINUTE
-	    + (a->tm_sec - b->tm_sec));
-}
-
-/*
- *
- * The public function.
- *
- * TODO: tokens[] array should be dynamically sized.
- */
-time_t
-get_date(time_t now, char *p)
-{
-	struct token	tokens[256];
-	struct gdstate	_gds;
-	struct token	*lasttoken;
-	struct gdstate	*gds;
-	struct tm	local, *tm;
-	struct tm	gmt, *gmt_ptr;
-	time_t		Start;
-	time_t		tod;
-	long		tzone;
-
-	/* Clear out the parsed token array. */
-	memset(tokens, 0, sizeof(tokens));
-	/* Initialize the parser state. */
-	memset(&_gds, 0, sizeof(_gds));
-	gds =3D &_gds;
-
-	/* Look up the current time. */
-	memset(&local, 0, sizeof(local));
-	tm =3D localtime (&now);
-	if (tm =3D=3D NULL)
-		return -1;
-	local =3D *tm;
-
-	/* Look up UTC if we can and use that to determine the current
-	 * timezone offset. */
-	memset(&gmt, 0, sizeof(gmt));
-	gmt_ptr =3D gmtime (&now);
-	if (gmt_ptr !=3D NULL) {
-		/* Copy, in case localtime and gmtime use the same buffer. */
-		gmt =3D *gmt_ptr;
-	}
-	if (gmt_ptr !=3D NULL)
-		tzone =3D difftm (&gmt, &local);
-	else
-		/* This system doesn't understand timezones; fake it. */
-		tzone =3D 0;
-	if(local.tm_isdst)
-		tzone +=3D HOUR;
-
-	/* Tokenize the input string. */
-	lasttoken =3D tokens;
-	while ((lasttoken->token =3D nexttoken(&p, &lasttoken->value)) !=3D 0) {
-		++lasttoken;
-		if (lasttoken > tokens + 255)
-			return -1;
-	}
-	gds->tokenp =3D tokens;
-
-	/* Match phrases until we run out of input tokens. */
-	while (gds->tokenp < lasttoken) {
-		if (!phrase(gds))
-			return -1;
-	}
-
-	/* Use current local timezone if none was specified. */
-	if (!gds->HaveZone) {
-		gds->Timezone =3D tzone;
-		gds->DSTmode =3D DSTmaybe;
-	}
-
-	/* If a timezone was specified, use that for generating the default
-	 * time components instead of the local timezone. */
-	if (gds->HaveZone && gmt_ptr !=3D NULL) {
-		now -=3D gds->Timezone;
-		gmt_ptr =3D gmtime (&now);
-		if (gmt_ptr !=3D NULL)
-			local =3D *gmt_ptr;
-		now +=3D gds->Timezone;
-	}
-
-	if (!gds->HaveYear)
-		gds->Year =3D local.tm_year + 1900;
-	if (!gds->HaveMonth)
-		gds->Month =3D local.tm_mon + 1;
-	if (!gds->HaveDay)
-		gds->Day =3D local.tm_mday;
-	/* Note: No default for hour/min/sec; a specifier that just
-	 * gives date always refers to 00:00 on that date. */
-
-	/* If we saw more than one time, timezone, weekday, year, month,
-	 * or day, then give up. */
-	if (gds->HaveTime > 1 || gds->HaveZone > 1 || gds->HaveWeekDay > 1
-	    || gds->HaveYear > 1 || gds->HaveMonth > 1 || gds->HaveDay > 1)
-		return -1;
-
-	/* Compute an absolute time based on whatever absolute information
-	 * we collected. */
-	if (gds->HaveYear || gds->HaveMonth || gds->HaveDay
-	    || gds->HaveTime || gds->HaveWeekDay) {
-		Start =3D Convert(gds->Month, gds->Day, gds->Year,
-		    gds->Hour, gds->Minutes, gds->Seconds,
-		    gds->Timezone, gds->DSTmode);
-		if (Start < 0)
-			return -1;
-	} else {
-		Start =3D now;
-		if (!gds->HaveRel)
-			Start -=3D local.tm_hour * HOUR + local.tm_min * MINUTE
-			    + local.tm_sec;
-	}
-
-	/* Add the relative offset. */
-	Start +=3D gds->RelSeconds;
-	Start +=3D RelativeMonth(Start, gds->Timezone, gds->RelMonth);
-
-	/* Adjust for day-of-week offsets. */
-	if (gds->HaveWeekDay
-	    && !(gds->HaveYear || gds->HaveMonth || gds->HaveDay)) {
-		tod =3D RelativeDate(Start, gds->Timezone,
-		    gds->DSTmode, gds->DayOrdinal, gds->DayNumber);
-		Start +=3D tod;
-	}
-
-	/* -1 is an error indicator, so return 0 instead of -1 if
-	 * that's the actual time. */
-	return Start =3D=3D -1 ? 0 : Start;
-}
-
-
-#if	defined(TEST)
-
-/* ARGSUSED */
-int
-main(int argc, char **argv)
-{
-    time_t	d;
-
-    while (*++argv !=3D NULL) {
-	    (void)printf("Input: %s\n", *argv);
-	    d =3D get_date(*argv);
-	    if (d =3D=3D -1)
-		    (void)printf("Bad format - couldn't convert.\n");
-	    else
-		    (void)printf("Output: %s\n", ctime(&d));
-    }
-    exit(0);
-    /* NOTREACHED */
-}
-#endif	/* defined(TEST) */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/tar/read.c
--- a/head/contrib/libarchive/tar/read.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/tar/read.c	Fri Aug 10 14:19:25 2012 +0300
@@ -24,7 +24,7 @@
  */
=20
 #include "bsdtar_platform.h"
-__FBSDID("$FreeBSD: head/contrib/libarchive/tar/read.c 232153 2012-02-25 1=
0:58:02Z mm $");
+__FBSDID("$FreeBSD: head/contrib/libarchive/tar/read.c 238856 2012-07-28 0=
6:38:44Z mm $");
=20
 #ifdef HAVE_SYS_TYPES_H
 #include <sys/types.h>
@@ -77,12 +77,15 @@
 static void	list_item_verbose(struct bsdtar *, FILE *,
 		    struct archive_entry *);
 static void	read_archive(struct bsdtar *bsdtar, char mode, struct archive =
*);
+static int unmatched_inclusions_warn(struct archive *matching, const char =
*);
+
=20
 void
 tar_mode_t(struct bsdtar *bsdtar)
 {
 	read_archive(bsdtar, 't', NULL);
-	if (lafe_unmatched_inclusions_warn(bsdtar->matching, "Not found in archiv=
e") !=3D 0)
+	if (unmatched_inclusions_warn(bsdtar->matching,
+	    "Not found in archive") !=3D 0)
 		bsdtar->return_value =3D 1;
 }
=20
@@ -100,7 +103,8 @@
=20
 	read_archive(bsdtar, 'x', writer);
=20
-	if (lafe_unmatched_inclusions_warn(bsdtar->matching, "Not found in archiv=
e") !=3D 0)
+	if (unmatched_inclusions_warn(bsdtar->matching,
+	    "Not found in archive") !=3D 0)
 		bsdtar->return_value =3D 1;
 	archive_write_free(writer);
 }
@@ -152,17 +156,21 @@
 	struct archive		 *a;
 	struct archive_entry	 *entry;
 	int			  r;
-	time_t			  sec;
-	long			  nsec;
=20
 	while (*bsdtar->argv) {
-		lafe_include(&bsdtar->matching, *bsdtar->argv);
+		if (archive_match_include_pattern(bsdtar->matching,
+		    *bsdtar->argv) !=3D ARCHIVE_OK)
+			lafe_errc(1, 0, "Error inclusion pattern: %s",
+			    archive_error_string(bsdtar->matching));
 		bsdtar->argv++;
 	}
=20
 	if (bsdtar->names_from_file !=3D NULL)
-		lafe_include_from_file(&bsdtar->matching,
-		    bsdtar->names_from_file, bsdtar->option_null);
+		if (archive_match_include_pattern_from_file(
+		    bsdtar->matching, bsdtar->names_from_file,
+		    bsdtar->option_null) !=3D ARCHIVE_OK)
+			lafe_errc(1, 0, "Error inclusion pattern: %s",
+			    archive_error_string(bsdtar->matching));
=20
 	a =3D archive_read_new();
 	if (bsdtar->compress_program !=3D NULL)
@@ -199,7 +207,7 @@
 	for (;;) {
 		/* Support --fast-read option */
 		if (bsdtar->option_fast_read &&
-		    lafe_unmatched_inclusions(bsdtar->matching) =3D=3D 0)
+		    archive_match_path_unmatched_inclusions(bsdtar->matching) =3D=3D 0)
 			break;
=20
 		r =3D archive_read_next_header(a, &entry);
@@ -232,42 +240,6 @@
 			archive_entry_set_gname(entry, bsdtar->gname);
=20
 		/*
-		 * Exclude entries that are too old.
-		 */
-		if (bsdtar->newer_ctime_filter) {
-			/* Use ctime if format provides, else mtime. */
-			if (archive_entry_ctime_is_set(entry)) {
-				sec =3D archive_entry_ctime(entry);
-				nsec =3D archive_entry_ctime_nsec(entry);
-			} else if (archive_entry_mtime_is_set(entry)) {
-				sec =3D archive_entry_mtime(entry);
-				nsec =3D archive_entry_mtime_nsec(entry);
-			} else {
-				sec =3D 0;
-				nsec =3D 0;
-			}
-			if (sec < bsdtar->newer_ctime_sec)
-				continue; /* Too old, skip it. */
-			if (sec =3D=3D bsdtar->newer_ctime_sec
-			    && nsec <=3D bsdtar->newer_ctime_nsec)
-				continue; /* Too old, skip it. */
-		}
-		if (bsdtar->newer_mtime_filter) {
-			if (archive_entry_mtime_is_set(entry)) {
-				sec =3D archive_entry_mtime(entry);
-				nsec =3D archive_entry_mtime_nsec(entry);
-			} else {
-				sec =3D 0;
-				nsec =3D 0;
-			}
-			if (sec < bsdtar->newer_mtime_sec)
-				continue; /* Too old, skip it. */
-			if (sec =3D=3D bsdtar->newer_mtime_sec
-			    && nsec <=3D bsdtar->newer_mtime_nsec)
-				continue; /* Too old, skip it. */
-		}
-
-		/*
 		 * Note that pattern exclusions are checked before
 		 * pathname rewrites are handled.  This gives more
 		 * control over exclusions, since rewrites always lose
@@ -276,7 +248,7 @@
 		 * rewrite, there would be no way to exclude foo1/bar
 		 * while allowing foo2/bar.)
 		 */
-		if (lafe_excluded(bsdtar->matching, archive_entry_pathname(entry)))
+		if (archive_match_excluded(bsdtar->matching, entry))
 			continue; /* Excluded by a pattern test. */
=20
 		if (mode =3D=3D 't') {
@@ -471,3 +443,21 @@
 	else if (archive_entry_symlink(entry)) /* Symbolic link */
 		safe_fprintf(out, " -> %s", archive_entry_symlink(entry));
 }
+
+static int
+unmatched_inclusions_warn(struct archive *matching, const char *msg)
+{
+	const char *p;
+	int r;
+
+	if (matching =3D=3D NULL)
+		return (0);
+
+	while ((r =3D archive_match_path_unmatched_inclusions_next(
+	    matching, &p)) =3D=3D ARCHIVE_OK)
+		lafe_warnc(0, "%s: %s", p, msg);
+	if (r =3D=3D ARCHIVE_FATAL)
+		lafe_errc(1, errno, "Out of memory");
+
+	return (archive_match_path_unmatched_inclusions(matching));
+}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/tar/test/main.c
--- a/head/contrib/libarchive/tar/test/main.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/tar/test/main.c	Fri Aug 10 14:19:25 2012 +0300
@@ -24,6 +24,9 @@
  */
=20
 #include "test.h"
+#ifdef HAVE_SYS_IOCTL_H
+#include <sys/ioctl.h>
+#endif
 #ifdef HAVE_SYS_TIME_H
 #include <sys/time.h>
 #endif
@@ -31,6 +34,16 @@
 #ifdef HAVE_ICONV_H
 #include <iconv.h>
 #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 <linux/ext2_fs.h>      /* for Linux file flags */
+#endif
+#if defined(HAVE_EXT2FS_EXT2_FS_H) && !defined(__CYGWIN__)
+#include <ext2fs/ext2_fs.h>     /* Linux file flags, broken on Cygwin */
+#endif
 #include <limits.h>
 #include <locale.h>
 #ifdef HAVE_SIGNAL_H
@@ -46,7 +59,7 @@
  * TODO: Move this into a separate configuration header, have all test
  * suites share one copy of this file.
  */
-__FBSDID("$FreeBSD: head/contrib/libarchive/tar/test/main.c 232153 2012-02=
-25 10:58:02Z mm $");
+__FBSDID("$FreeBSD: head/contrib/libarchive/tar/test/main.c 238856 2012-07=
-28 06:38:44Z mm $");
 #define KNOWNREF	"test_patterns_2.tar.uu"
 #define ENVBASE "BSDTAR"  /* Prefix for environment variables. */
 #define	PROGRAM "bsdtar"  /* Name of program being tested. */
@@ -116,7 +129,14 @@
 #endif
=20
 #if defined(_WIN32) && !defined(__CYGWIN__)
-void *GetFunctionKernel32(const char *name)
+static void	*GetFunctionKernel32(const char *);
+static int	 my_CreateSymbolicLinkA(const char *, const char *, int);
+static int	 my_CreateHardLinkA(const char *, const char *);
+static int	 my_GetFileInformationByName(const char *,
+		     BY_HANDLE_FILE_INFORMATION *);
+
+static void *
+GetFunctionKernel32(const char *name)
 {
 	static HINSTANCE lib;
 	static int set;
@@ -155,7 +175,7 @@
 	return f =3D=3D NULL ? 0 : (*f)(linkname, target, NULL);
 }
=20
-int
+static int
 my_GetFileInformationByName(const char *path, BY_HANDLE_FILE_INFORMATION *=
bhfi)
 {
 	HANDLE h;
@@ -1507,7 +1527,7 @@
 /* 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)
+    const char *path, int mode, int csize, const void *contents)
 {
 #if defined(_WIN32) && !defined(__CYGWIN__)
 	/* TODO: Rework this to set file mode as well. */
@@ -1521,8 +1541,13 @@
 		return (0);
 	}
 	if (contents !=3D NULL) {
-		if (strlen(contents)
-		    !=3D fwrite(contents, 1, strlen(contents), f)) {
+		size_t wsize;
+
+		if (csize < 0)
+			wsize =3D strlen(contents);
+		else
+			wsize =3D (size_t)csize;
+		if (wsize !=3D fwrite(contents, 1, wsize, f)) {
 			fclose(f);
 			failure_start(file, line,
 			    "Could not write file %s", path);
@@ -1542,10 +1567,16 @@
 		return (0);
 	}
 	if (contents !=3D NULL) {
-		if ((ssize_t)strlen(contents)
-		    !=3D write(fd, contents, strlen(contents))) {
+		ssize_t wsize;
+
+		if (csize < 0)
+			wsize =3D (ssize_t)strlen(contents);
+		else
+			wsize =3D (ssize_t)csize;
+		if (wsize !=3D write(fd, contents, wsize)) {
 			close(fd);
-			failure_start(file, line, "Could not write to %s", path);
+			failure_start(file, line,
+			    "Could not write to %s", path);
 			failure_finish(NULL);
 			return (0);
 		}
@@ -1716,6 +1747,52 @@
 #endif /* defined(_WIN32) && !defined(__CYGWIN__) */
 }
=20
+/* Set nodump, report failures. */
+int
+assertion_nodump(const char *file, int line, const char *pathname)
+{
+#if defined(HAVE_STRUCT_STAT_ST_FLAGS) && defined(UF_NODUMP)
+	int r;
+
+	assertion_count(file, line);
+	r =3D chflags(pathname, UF_NODUMP);
+	if (r < 0) {
+		failure_start(file, line, "Can't set nodump %s\n", pathname);
+		failure_finish(NULL);
+		return (0);
+	}
+#elif defined(EXT2_IOC_GETFLAGS) && defined(HAVE_WORKING_EXT2_IOC_GETFLAGS=
)\
+	 && defined(EXT2_NODUMP_FL)
+	int fd, r, flags;
+
+	assertion_count(file, line);
+	fd =3D open(pathname, O_RDONLY | O_NONBLOCK);
+	if (fd < 0) {
+		failure_start(file, line, "Can't open %s\n", pathname);
+		failure_finish(NULL);
+		return (0);
+	}
+	r =3D ioctl(fd, EXT2_IOC_GETFLAGS, &flags);
+	if (r < 0) {
+		failure_start(file, line, "Can't get flags %s\n", pathname);
+		failure_finish(NULL);
+		return (0);
+	}
+	flags |=3D EXT2_NODUMP_FL;
+	r =3D ioctl(fd, EXT2_IOC_SETFLAGS, &flags);
+	if (r < 0) {
+		failure_start(file, line, "Can't set nodump %s\n", pathname);
+		failure_finish(NULL);
+		return (0);
+	}
+	close(fd);
+#else
+	(void)pathname; /* UNUSED */
+	assertion_count(file, line);
+#endif
+	return (1);
+}
+
 /*
  *
  *  UTILITIES for use by tests.
@@ -1744,7 +1821,7 @@
 		return (value);
=20
 	++tested;
-	assertion_make_file(__FILE__, __LINE__, "canSymlink.0", 0644, "a");
+	assertion_make_file(__FILE__, __LINE__, "canSymlink.0", 0644, 1, "a");
 	/* Note: Cygwin has its own symlink() emulation that does not
 	 * use the Win32 CreateSymbolicLink() function. */
 #if defined(_WIN32) && !defined(__CYGWIN__)
@@ -1794,6 +1871,70 @@
 }
=20
 /*
+ * Can this filesystem handle nodump flags.
+ */
+#if defined(HAVE_STRUCT_STAT_ST_FLAGS) && defined(UF_NODUMP)
+
+int
+canNodump(void)
+{
+	const char *path =3D "cannodumptest";
+	struct stat sb;
+
+	assertion_make_file(__FILE__, __LINE__, path, 0644, 0, NULL);
+	if (chflags(path, UF_NODUMP) < 0)
+		return (0);
+	if (stat(path, &sb) < 0)
+		return (0);
+	if (sb.st_flags & UF_NODUMP)
+		return (1);
+	return (0);
+}
+
+#elif defined(EXT2_IOC_GETFLAGS) && defined(HAVE_WORKING_EXT2_IOC_GETFLAGS=
)\
+	 && defined(EXT2_NODUMP_FL)
+
+int
+canNodump(void)
+{
+	const char *path =3D "cannodumptest";
+	int fd, r, flags;
+
+	assertion_make_file(__FILE__, __LINE__, path, 0644, 0, NULL);
+	fd =3D open(path, O_RDONLY | O_NONBLOCK);
+	if (fd < 0)
+		return (0);
+	r =3D ioctl(fd, EXT2_IOC_GETFLAGS, &flags);
+	if (r < 0)
+		return (0);
+	flags |=3D EXT2_NODUMP_FL;
+	r =3D ioctl(fd, EXT2_IOC_SETFLAGS, &flags);
+	if (r < 0)
+		return (0);
+	close(fd);
+	fd =3D open(path, O_RDONLY | O_NONBLOCK);
+	if (fd < 0)
+		return (0);
+	r =3D ioctl(fd, EXT2_IOC_GETFLAGS, &flags);
+	if (r < 0)
+		return (0);
+	close(fd);
+	if (flags & EXT2_NODUMP_FL)
+		return (1);
+	return (0);
+}
+
+#else
+
+int
+canNodump()
+{
+	return (0);
+}
+
+#endif
+
+/*
  * 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.
@@ -2236,17 +2377,77 @@
 	return strdup(buff);
 }
=20
+static int
+get_test_set(int *test_set, int limit, const char *test)
+{
+	int start, end;
+	int idx =3D 0;
+
+	if (test =3D=3D NULL) {
+		/* Default: Run all tests. */
+		for (;idx < limit; idx++)
+			test_set[idx] =3D idx;
+		return (limit);
+	}
+	if (*test >=3D '0' && *test <=3D '9') {
+		const char *vp =3D test;
+		start =3D 0;
+		while (*vp >=3D '0' && *vp <=3D '9') {
+			start *=3D 10;
+			start +=3D *vp - '0';
+			++vp;
+		}
+		if (*vp =3D=3D '\0') {
+			end =3D start;
+		} else if (*vp =3D=3D '-') {
+			++vp;
+			if (*vp =3D=3D '\0') {
+				end =3D limit - 1;
+			} else {
+				end =3D 0;
+				while (*vp >=3D '0' && *vp <=3D '9') {
+					end *=3D 10;
+					end +=3D *vp - '0';
+					++vp;
+				}
+			}
+		} else
+			return (-1);
+		if (start < 0 || end >=3D limit || start > end)
+			return (-1);
+		while (start <=3D end)
+			test_set[idx++] =3D start++;
+	} else {
+		size_t len =3D strlen(test);
+		for (start =3D 0; start < limit; ++start) {
+			const char *name =3D tests[start].name;
+			const char *p;
+
+			while ((p =3D strchr(name, test[0])) !=3D NULL) {
+				if (strncmp(p, test, len) =3D=3D 0) {
+					test_set[idx++] =3D start;
+					break;
+				} else
+					name =3D p + 1;
+			}
+
+		}
+	}
+	return ((idx =3D=3D 0)?-1:idx);
+}
+
 int
 main(int argc, char **argv)
 {
 	static const int limit =3D sizeof(tests) / sizeof(tests[0]);
-	int i =3D 0, j =3D 0, start, end, tests_run =3D 0, tests_failed =3D 0, op=
tion;
+	int test_set[sizeof(tests) / sizeof(tests[0])];
+	int i =3D 0, j =3D 0, tests_run =3D 0, tests_failed =3D 0, option;
 	time_t now;
 	char *refdir_alloc =3D NULL;
 	const char *progname;
 	char **saved_argv;
 	const char *tmp, *option_arg, *p;
-	char tmpdir[256], *pwd, *testprogdir, *tmp2 =3D NULL;
+	char tmpdir[256], *pwd, *testprogdir, *tmp2 =3D NULL, *vlevel =3D NULL;
 	char tmpdir_timestamp[256];
=20
 	(void)argc; /* UNUSED */
@@ -2332,6 +2533,19 @@
 	if (getenv(ENVBASE "_DEBUG") !=3D NULL)
 		dump_on_failure =3D 1;
=20
+	/* Allow -v to be controlled through the environment. */
+	if (getenv("_VERBOSITY_LEVEL") !=3D NULL)
+	{
+		vlevel =3D getenv("_VERBOSITY_LEVEL");
+		verbosity =3D atoi(vlevel);
+		if (verbosity < VERBOSITY_SUMMARY_ONLY || verbosity > VERBOSITY_FULL)
+		{
+			/* Unsupported verbosity levels are silently ignored */
+			vlevel =3D NULL;
+			verbosity =3D VERBOSITY_PASSFAIL;
+		}
+	}
+
 	/* Get the directory holding test files from environment. */
 	refdir =3D getenv(ENVBASE "_TEST_FILES");
=20
@@ -2379,7 +2593,8 @@
 #endif
 				break;
 			case 'q':
-				verbosity--;
+				if (!vlevel)
+					verbosity--;
 				break;
 			case 'r':
 				refdir =3D option_arg;
@@ -2388,7 +2603,8 @@
 				until_failure++;
 				break;
 			case 'v':
-				verbosity++;
+				if (!vlevel)
+					verbosity++;
 				break;
 			default:
 				fprintf(stderr, "Unrecognized option '%c'\n",
@@ -2501,78 +2717,27 @@
 	saved_argv =3D argv;
 	do {
 		argv =3D saved_argv;
-		if (*argv =3D=3D NULL) {
-			/* Default: Run all tests. */
-			for (i =3D 0; i < limit; i++) {
+		do {
+			int test_num;
+
+			test_num =3D get_test_set(test_set, limit, *argv);
+			if (test_num < 0) {
+				printf("*** INVALID Test %s\n", *argv);
+				free(refdir_alloc);
+				usage(progname);
+				return (1);
+			}
+			for (i =3D 0; i < test_num; i++) {
 				tests_run++;
-				if (test_run(i, tmpdir)) {
+				if (test_run(test_set[i], tmpdir)) {
 					tests_failed++;
 					if (until_failure)
 						goto finish;
 				}
 			}
-		} else {
-			while (*(argv) !=3D NULL) {
-				if (**argv >=3D '0' && **argv <=3D '9') {
-					char *vp =3D *argv;
-					start =3D 0;
-					while (*vp >=3D '0' && *vp <=3D '9') {
-						start *=3D 10;
-						start +=3D *vp - '0';
-						++vp;
-					}
-					if (*vp =3D=3D '\0') {
-						end =3D start;
-					} else if (*vp =3D=3D '-') {
-						++vp;
-						if (*vp =3D=3D '\0') {
-							end =3D limit - 1;
-						} else {
-							end =3D 0;
-							while (*vp >=3D '0' && *vp <=3D '9') {
-								end *=3D 10;
-								end +=3D *vp - '0';
-								++vp;
-							}
-						}
-					} else {
-						printf("*** INVALID Test %s\n", *argv);
-						free(refdir_alloc);
-						usage(progname);
-						return (1);
-					}
-					if (start < 0 || end >=3D limit || start > end) {
-						printf("*** INVALID Test %s\n", *argv);
-						free(refdir_alloc);
-						usage(progname);
-						return (1);
-					}
-				} else {
-					for (start =3D 0; start < limit; ++start) {
-						if (strcmp(*argv, tests[start].name) =3D=3D 0)
-							break;
-					}
-					end =3D start;
-					if (start >=3D limit) {
-						printf("*** INVALID Test ``%s''\n",
-						    *argv);
-						free(refdir_alloc);
-						usage(progname);
-						/* usage() never returns */
-					}
-				}
-				while (start <=3D end) {
-					tests_run++;
-					if (test_run(start, tmpdir)) {
-						tests_failed++;
-						if (until_failure)
-							goto finish;
-					}
-					++start;
-				}
+			if (*argv !=3D NULL)
 				argv++;
-			}
-		}
+		} while (*argv !=3D NULL);
 	} while (until_failure);
=20
 finish:
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/tar/test/test.h
--- a/head/contrib/libarchive/tar/test/test.h	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/tar/test/test.h	Fri Aug 10 14:19:25 2012 +0300
@@ -22,7 +22,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.
  *
- * $FreeBSD: head/contrib/libarchive/tar/test/test.h 232153 2012-02-25 10:=
58:02Z mm $
+ * $FreeBSD: head/contrib/libarchive/tar/test/test.h 238856 2012-07-28 06:=
38:44Z mm $
  */
=20
 /* Every test program should #include "test.h" as the first thing. */
@@ -196,11 +196,15 @@
 #define assertMakeDir(dirname, mode)	\
   assertion_make_dir(__FILE__, __LINE__, dirname, mode)
 #define assertMakeFile(path, mode, contents) \
-  assertion_make_file(__FILE__, __LINE__, path, mode, contents)
+  assertion_make_file(__FILE__, __LINE__, path, mode, -1, contents)
+#define assertMakeBinFile(path, mode, csize, contents) \
+  assertion_make_file(__FILE__, __LINE__, path, mode, csize, contents)
 #define assertMakeHardlink(newfile, oldfile)	\
   assertion_make_hardlink(__FILE__, __LINE__, newfile, oldfile)
 #define assertMakeSymlink(newfile, linkto)	\
   assertion_make_symlink(__FILE__, __LINE__, newfile, linkto)
+#define assertNodump(path)      \
+  assertion_nodump(__FILE__, __LINE__, path)
 #define assertUmask(mask)	\
   assertion_umask(__FILE__, __LINE__, mask)
 #define assertUtimes(pathname, atime, atime_nsec, mtime, mtime_nsec)	\
@@ -243,9 +247,10 @@
 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_file(const char *, int, const char *, int, int, const v=
oid *);
 int assertion_make_hardlink(const char *, int, const char *newpath, const =
char *);
 int assertion_make_symlink(const char *, int, const char *newpath, const c=
har *);
+int assertion_nodump(const char *, int, const char *);
 int assertion_non_empty_file(const char *, int, const char *);
 int assertion_text_file_contents(const char *, int, const char *buff, cons=
t char *f);
 int assertion_umask(const char *, int, int);
@@ -269,6 +274,9 @@
 /* Return true if this platform can run the "gunzip" program. */
 int canGunzip(void);
=20
+/* Return true if this filesystem can handle nodump flags. */
+int canNodump(void);
+
 /* Return true if the file has large i-node number(>0xffffffff). */
 int is_LargeInode(const char *);
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/tar/test/test_=
basic.c
--- a/head/contrib/libarchive/tar/test/test_basic.c	Mon Jul 30 11:44:18 201=
2 +0300
+++ b/head/contrib/libarchive/tar/test/test_basic.c	Fri Aug 10 14:19:25 201=
2 +0300
@@ -23,7 +23,7 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 #include "test.h"
-__FBSDID("$FreeBSD: head/contrib/libarchive/tar/test/test_basic.c 232153 2=
012-02-25 10:58:02Z mm $");
+__FBSDID("$FreeBSD: head/contrib/libarchive/tar/test/test_basic.c 238909 2=
012-07-30 14:47:35Z mm $");
=20
 static const char *
 make_files(void)
@@ -58,14 +58,19 @@
 	assertChdir(target);
=20
 	/* Regular file with 2 links. */
+	failure("%s", target);
 	assertIsReg("file", -1);
+	failure("%s", target);
 	assertFileSize("file", 10);
+	failure("%s", target);
 	assertFileContents("123456789", 10, "file");
 	failure("%s", target);
 	assertFileNLinks("file", 2);
=20
 	/* Another name for the same file. */
+	failure("%s", target);
 	assertIsReg("linkfile", -1);
+	failure("%s", target);
 	assertFileSize("linkfile", 10);
 	assertFileContents("123456789", 10, "linkfile");
 	assertFileNLinks("linkfile", 2);
@@ -76,6 +81,7 @@
 		assertIsSymlink("symlink", "file");
=20
 	/* dir */
+	failure("%s", target);
 	assertIsDir("dir", 0775);
 	assertChdir("..");
 }
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/tar/test/test_=
format_newc.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/head/contrib/libarchive/tar/test/test_format_newc.c	Fri Aug 10 14:19:=
25 2012 +0300
@@ -0,0 +1,64 @@
+/*-
+ * Copyright (c) 2012 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 WARRANTI=
ES
+ * 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 US=
E,
+ * 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_format_newc)
+{
+
+	assertMakeFile("file1", 0644, "file1");
+	assertMakeFile("file2", 0644, "file2");
+	assertMakeHardlink("file3", "file1");
+
+	/* Test 1: Create an archive file with a newc format. */
+	assertEqualInt(0,
+	    systemf("%s -cf test1.cpio --format newc file1 file2 file3",
+	    testprog));
+	assertMakeDir("test1", 0755);
+	assertChdir("test1");
+	assertEqualInt(0,
+	    systemf("%s -xf ../test1.cpio >test.out 2>test.err", testprog));
+	assertFileContents("file1", 5, "file1");
+	assertFileContents("file2", 5, "file2");
+	assertFileContents("file1", 5, "file3");
+	assertEmptyFile("test.out");
+	assertEmptyFile("test.err");
+	assertChdir("..");
+
+	/* Test 2: Exclude one of hardlinked files. */
+	assertEqualInt(0,
+	    systemf("%s -cf test2.cpio --format newc file1 file2",
+	    testprog));
+	assertMakeDir("test2", 0755);
+	assertChdir("test2");
+	assertEqualInt(0,
+	    systemf("%s -xf ../test2.cpio >test.out 2>test.err", testprog));
+	assertFileContents("file1", 5, "file1");
+	assertFileContents("file2", 5, "file2");
+	assertFileNotExists("file3");
+	assertEmptyFile("test.out");
+	assertEmptyFile("test.err");
+	assertChdir("..");
+}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/tar/test/test_=
getdate.c
--- a/head/contrib/libarchive/tar/test/test_getdate.c	Mon Jul 30 11:44:18 2=
012 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,80 +0,0 @@
-/*-
- * 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 WARRANTI=
ES
- * 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 US=
E,
- * 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: head/contrib/libarchive/tar/test/test_getdate.c 228763=
 2011-12-21 11:13:29Z mm $");
-
-#include <time.h>
-
-/*
- * Verify that the getdate() function works.
- */
-
-time_t get_date(time_t, const char *);
-
-DEFINE_TEST(test_getdate)
-{
-	time_t now =3D time(NULL);
-
-	assertEqualInt(get_date(now, "Jan 1, 1970 UTC"), 0);
-	assertEqualInt(get_date(now, "7:12:18-0530 4 May 1983"), 420900138);
-	assertEqualInt(get_date(now, "2004/01/29 513 mest"), 1075345980);
-	assertEqualInt(get_date(now, "99/02/17 7pm utc"), 919278000);
-	assertEqualInt(get_date(now, "02/17/99 7:11am est"), 919253460);
-	/* It's important that we handle ctime() format. */
-	assertEqualInt(get_date(now, "Sun Feb 22 17:38:26 PST 2009"),
-	    1235353106);
-	/* Basic relative offsets. */
-	/* If we use the actual current time as the reference, then
-	 * these tests break around DST changes, so it's actually
-	 * important to use a specific reference time here. */
-	assertEqualInt(get_date(0, "tomorrow"), 24 * 60 * 60);
-	assertEqualInt(get_date(0, "yesterday"), - 24 * 60 * 60);
-	assertEqualInt(get_date(0, "now + 1 hour"), 60 * 60);
-	assertEqualInt(get_date(0, "now + 1 hour + 1 minute"), 60 * 60 + 60);
-	/* Repeat the above for a different start time. */
-	now =3D 1231113600; /* Jan 5, 2009 00:00 UTC */
-	assertEqualInt(get_date(0, "Jan 5, 2009 00:00 UTC"), now);
-	assertEqualInt(get_date(now, "tomorrow"), now + 24 * 60 * 60);
-	assertEqualInt(get_date(now, "yesterday"), now - 24 * 60 * 60);
-	assertEqualInt(get_date(now, "now + 1 hour"), now + 60 * 60);
-	assertEqualInt(get_date(now, "now + 1 hour + 1 minute"),
-	    now + 60 * 60 + 60);
-	assertEqualInt(get_date(now, "tomorrow 5:16am UTC"),
-	    now + 24 * 60 * 60 + 5 * 60 * 60 + 16 * 60);
-	assertEqualInt(get_date(now, "UTC 5:16am tomorrow"),
-	    now + 24 * 60 * 60 + 5 * 60 * 60 + 16 * 60);
-
-	/* Jan 5, 2009 was a Monday. */
-	assertEqualInt(get_date(now, "monday UTC"), now);
-	assertEqualInt(get_date(now, "sunday UTC"), now + 6 * 24 * 60 * 60);
-	assertEqualInt(get_date(now, "tuesday UTC"), now + 24 * 60 * 60);
-	/* "next tuesday" is one week after "tuesday" */
-	assertEqualInt(get_date(now, "UTC next tuesday"),
-	    now + 8 * 24 * 60 * 60);
-	/* "last tuesday" is one week before "tuesday" */
-	assertEqualInt(get_date(now, "last tuesday UTC"),
-	    now - 6 * 24 * 60 * 60);
-	/* TODO: Lots more tests here. */
-}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/tar/test/test_=
option_nodump.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/head/contrib/libarchive/tar/test/test_option_nodump.c	Fri Aug 10 14:1=
9:25 2012 +0300
@@ -0,0 +1,68 @@
+/*-
+ * Copyright (c) 2012 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 WARRANTI=
ES
+ * 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 US=
E,
+ * 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_option_nodump)
+{
+
+	if (!canNodump()) {
+		skipping("Can't test nodump on this filesystem");
+		return;
+	}
+
+	assertMakeFile("file1", 0644, "file1");
+	assertMakeFile("file2", 0644, "file2");
+	assertMakeFile("file3", 0644, "file3");
+	assertNodump("file2");
+
+	/* Test 1: Without --nodump */
+	assertEqualInt(0, systemf("%s -cf test1.tar file1 file2 file3",
+	    testprog));
+	assertMakeDir("test1", 0755);
+	assertChdir("test1");
+	assertEqualInt(0,
+	    systemf("%s -xf ../test1.tar >test.out 2>test.err", testprog));
+	assertFileContents("file1", 5, "file1");
+	assertFileContents("file2", 5, "file2");
+	assertFileContents("file3", 5, "file3");
+	assertEmptyFile("test.out");
+	assertEmptyFile("test.err");
+	assertChdir("..");
+
+	/* Test 2: With --nodump */
+	assertEqualInt(0, systemf("%s -cf test2.tar --nodump file1 file2 file3",
+	    testprog));
+	assertMakeDir("test2", 0755);
+	assertChdir("test2");
+	assertEqualInt(0,
+	    systemf("%s -xf ../test2.tar >test.out 2>test.err", testprog));
+	assertFileContents("file1", 5, "file1");
+	assertFileNotExists("file2");
+	assertFileContents("file3", 5, "file3");
+	assertEmptyFile("test.out");
+	assertEmptyFile("test.err");
+	assertChdir("..");
+}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/tar/tree.c
--- a/head/contrib/libarchive/tar/tree.c	Mon Jul 30 11:44:18 2012 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,848 +0,0 @@
-/*-
- * 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 WARRANTI=
ES
- * 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 US=
E,
- * 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 new directory-walking system that addresses a number
- * of problems I've had with fts(3).  In particular, it has no
- * pathname-length limits (other than the size of 'int'), handles
- * deep logical traversals, uses considerably less memory, and has
- * an opaque interface (easier to modify in the future).
- *
- * Internally, it keeps a single list of "tree_entry" items that
- * represent filesystem objects that require further attention.
- * Non-directories are not kept in memory: they are pulled from
- * readdir(), returned to the client, then freed as soon as possible.
- * Any directory entry to be traversed gets pushed onto the stack.
- *
- * There is surprisingly little information that needs to be kept for
- * each item on the stack.  Just the name, depth (represented here as the
- * string length of the parent directory's pathname), and some markers
- * indicating how to get back to the parent (via chdir("..") for a
- * regular dir or via fchdir(2) for a symlink).
- */
-#include "bsdtar_platform.h"
-__FBSDID("$FreeBSD: head/contrib/libarchive/tar/tree.c 232153 2012-02-25 1=
0:58:02Z mm $");
-
-#ifdef HAVE_SYS_STAT_H
-#include <sys/stat.h>
-#endif
-#ifdef HAVE_DIRECT_H
-#include <direct.h>
-#endif
-#ifdef HAVE_DIRENT_H
-#include <dirent.h>
-#endif
-#ifdef HAVE_ERRNO_H
-#include <errno.h>
-#endif
-#ifdef HAVE_FCNTL_H
-#include <fcntl.h>
-#endif
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#ifdef HAVE_STRING_H
-#include <string.h>
-#endif
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#if defined(HAVE_WINDOWS_H) && !defined(__CYGWIN__)
-#include <windows.h>
-#endif
-
-#include "tree.h"
-
-/*
- * TODO:
- *    1) Loop checking.
- *    3) Arbitrary logical traversals by closing/reopening intermediate fd=
s.
- */
-
-struct tree_entry {
-	int depth;
-	struct tree_entry *next;
-	struct tree_entry *parent;
-	char *name;
-	size_t dirname_length;
-	dev_t dev;
-	ino_t ino;
-	int flags;
-	/* How to return back to the parent of a symlink. */
-#ifdef HAVE_FCHDIR
-	int symlink_parent_fd;
-#elif defined(_WIN32) && !defined(__CYGWIN__)
-	char *symlink_parent_path;
-#else
-#error fchdir function required.
-#endif
-};
-
-/* Definitions for tree_entry.flags bitmap. */
-#define	isDir 1 /* This entry is a regular directory. */
-#define	isDirLink 2 /* This entry is a symbolic link to a directory. */
-#define	needsFirstVisit 4 /* This is an initial entry. */
-#define	needsDescent 8 /* This entry needs to be previsited. */
-#define	needsOpen 16 /* This is a directory that needs to be opened. */
-#define	needsAscent 32 /* This entry needs to be postvisited. */
-
-/*
- * On Windows, "first visit" is handled as a pattern to be handed to
- * _findfirst().  This is consistent with Windows conventions that
- * file patterns are handled within the application.  On Posix,
- * "first visit" is just returned to the client.
- */
-
-/*
- * Local data for this package.
- */
-struct tree {
-	struct tree_entry	*stack;
-	struct tree_entry	*current;
-#if defined(_WIN32) && !defined(__CYGWIN__)
-	HANDLE d;
-	BY_HANDLE_FILE_INFORMATION fileInfo;
-#define	INVALID_DIR_HANDLE INVALID_HANDLE_VALUE
-	WIN32_FIND_DATA _findData;
-	WIN32_FIND_DATA *findData;
-#else
-	DIR	*d;
-#define	INVALID_DIR_HANDLE NULL
-	struct dirent *de;
-#endif
-	int	 flags;
-	int	 visit_type;
-	int	 tree_errno; /* Error code from last failed operation. */
-
-	/* Dynamically-sized buffer for holding path */
-	char	*buff;
-	size_t	 buff_length;
-
-	const char *basename; /* Last path element */
-	size_t	 dirname_length; /* Leading dir length */
-	size_t	 path_length; /* Total path length */
-
-	int	 depth;
-	int	 openCount;
-	int	 maxOpenCount;
-
-	struct stat	lst;
-	struct stat	st;
-};
-
-/* Definitions for tree.flags bitmap. */
-#define	hasStat 16  /* The st entry is valid. */
-#define	hasLstat 32 /* The lst entry is valid. */
-#define	hasFileInfo 64 /* The Windows fileInfo entry is valid. */
-
-#if defined(_WIN32) && !defined(__CYGWIN__)
-static int
-tree_dir_next_windows(struct tree *t, const char *pattern);
-#else
-static int
-tree_dir_next_posix(struct tree *t);
-#endif
-
-#ifdef HAVE_DIRENT_D_NAMLEN
-/* BSD extension; avoids need for a strlen() call. */
-#define	D_NAMELEN(dp)	(dp)->d_namlen
-#else
-#define	D_NAMELEN(dp)	(strlen((dp)->d_name))
-#endif
-
-#include <stdio.h>
-void
-tree_dump(struct tree *t, FILE *out)
-{
-	char buff[300];
-	struct tree_entry *te;
-
-	fprintf(out, "\tdepth: %d\n", t->depth);
-	fprintf(out, "\tbuff: %s\n", t->buff);
-	fprintf(out, "\tpwd: %s\n", getcwd(buff, sizeof(buff)));
-	fprintf(out, "\tbasename: %s\n", t->basename);
-	fprintf(out, "\tstack:\n");
-	for (te =3D t->stack; te !=3D NULL; te =3D te->next) {
-		fprintf(out, "\t\t%s%d:\"%s\" %s%s%s%s%s%s\n",
-		    t->current =3D=3D te ? "*" : " ",
-		    te->depth,
-		    te->name,
-		    te->flags & needsFirstVisit ? "V" : "",
-		    te->flags & needsDescent ? "D" : "",
-		    te->flags & needsOpen ? "O" : "",
-		    te->flags & needsAscent ? "A" : "",
-		    te->flags & isDirLink ? "L" : "",
-		    (t->current =3D=3D te && t->d) ? "+" : ""
-		);
-	}
-}
-
-/*
- * Add a directory path to the current stack.
- */
-static void
-tree_push(struct tree *t, const char *path)
-{
-	struct tree_entry *te;
-
-	te =3D malloc(sizeof(*te));
-	memset(te, 0, sizeof(*te));
-	te->next =3D t->stack;
-	te->parent =3D t->current;
-	if (te->parent)
-		te->depth =3D te->parent->depth + 1;
-	t->stack =3D te;
-#ifdef HAVE_FCHDIR
-	te->symlink_parent_fd =3D -1;
-	te->name =3D strdup(path);
-#elif defined(_WIN32) && !defined(__CYGWIN__)
-	te->symlink_parent_path =3D NULL;
-	te->name =3D strdup(path);
-#endif
-	te->flags =3D needsDescent | needsOpen | needsAscent;
-	te->dirname_length =3D t->dirname_length;
-}
-
-/*
- * Append a name to the current dir path.
- */
-static void
-tree_append(struct tree *t, const char *name, size_t name_length)
-{
-	char *p;
-	size_t size_needed;
-
-	if (t->buff !=3D NULL)
-		t->buff[t->dirname_length] =3D '\0';
-	/* Strip trailing '/' from name, unless entire name is "/". */
-	while (name_length > 1 && name[name_length - 1] =3D=3D '/')
-		name_length--;
-
-	/* Resize pathname buffer as needed. */
-	size_needed =3D name_length + 1 + t->dirname_length;
-	if (t->buff_length < size_needed) {
-		if (t->buff_length < 1024)
-			t->buff_length =3D 1024;
-		while (t->buff_length < size_needed)
-			t->buff_length *=3D 2;
-		t->buff =3D realloc(t->buff, t->buff_length);
-	}
-	if (t->buff =3D=3D NULL)
-		abort();
-	p =3D t->buff + t->dirname_length;
-	t->path_length =3D t->dirname_length + name_length;
-	/* Add a separating '/' if it's needed. */
-	if (t->dirname_length > 0 && p[-1] !=3D '/') {
-		*p++ =3D '/';
-		t->path_length ++;
-	}
-#if HAVE_STRNCPY_S
-	strncpy_s(p, t->buff_length - (p - t->buff), name, name_length);
-#else
-	strncpy(p, name, name_length);
-#endif
-	p[name_length] =3D '\0';
-	t->basename =3D p;
-}
-
-/*
- * Open a directory tree for traversal.
- */
-struct tree *
-tree_open(const char *path)
-{
-#ifdef HAVE_FCHDIR
-	struct tree *t;
-
-	t =3D malloc(sizeof(*t));
-	memset(t, 0, sizeof(*t));
-	/* First item is set up a lot like a symlink traversal. */
-	tree_push(t, path);
-	t->stack->flags =3D needsFirstVisit | isDirLink | needsAscent;
-	t->stack->symlink_parent_fd =3D open(".", O_RDONLY);
-	t->openCount++;
-	t->d =3D INVALID_DIR_HANDLE;
-	return (t);
-#elif defined(_WIN32) && !defined(__CYGWIN__)
-	struct tree *t;
-	char *cwd =3D _getcwd(NULL, 0);
-	char *pathname, *p, *base;
-	wchar_t *wcs, *wp;
-	size_t l, wlen;
-
-	/* Take care of '\' character in multi-byte character-set.
-	 * Some multi-byte character-set have been using '\' character
-	 * for a part of its character code. */
-	l =3D MultiByteToWideChar(CP_OEMCP, 0, path, strlen(path), NULL, 0);
-	if (l =3D=3D 0)
-		abort();
-	wcs =3D malloc(sizeof(*wcs) * (l+1));
-	if (wcs =3D=3D NULL)
-		abort();
-	l =3D MultiByteToWideChar(CP_OEMCP, 0, path, strlen(path), wcs, l);
-	wcs[l] =3D L'\0';
-	wlen =3D l;
-	for (wp =3D wcs; *wp !=3D L'\0'; ++wp) {
-		if (*wp =3D=3D L'\\')
-			*wp =3D L'/';
-	}
-	l =3D WideCharToMultiByte(CP_OEMCP, 0, wcs, wlen, NULL, 0, NULL, NULL);
-	if (l =3D=3D 0)
-		abort();
-	pathname =3D malloc(l+1);
-	if (pathname =3D=3D NULL)
-		abort();
-	l =3D WideCharToMultiByte(CP_OEMCP, 0, wcs, wlen, pathname, l, NULL, NULL=
);
-	pathname[l] =3D '\0';
-	free(wcs);
-	base =3D pathname;
-#if defined(_WIN32) && !defined(__CYGWIN__)
-	/* ASCII version APIs do not accept the path which begin with
-	 * "//?/" prefix. */
-	if (strncmp(base, "//?/", 4) =3D=3D 0)
-		base +=3D 4;
-#endif
-
-	t =3D malloc(sizeof(*t));
-	memset(t, 0, sizeof(*t));
-	/* First item is set up a lot like a symlink traversal. */
-	/* printf("Looking for wildcard in %s\n", path); */
-	/* TODO: wildcard detection here screws up on \\?\c:\ UNC names */
-	if (strchr(base, '*') || strchr(base, '?')) {
-		/* It has a wildcard in it... */
-		/* Separate the last element. */
-		p =3D strrchr(base, '/');
-		if (p !=3D NULL) {
-			*p =3D '\0';
-			chdir(base);
-			tree_append(t, base, p - base);
-			t->dirname_length =3D t->path_length;
-			base =3D p + 1;
-		}
-	}
-	tree_push(t, base);
-	free(pathname);
-	t->stack->flags =3D needsFirstVisit | isDirLink | needsAscent;
-	t->stack->symlink_parent_path =3D cwd;
-	t->d =3D INVALID_DIR_HANDLE;
-	return (t);
-#endif
-}
-
-/*
- * We've finished a directory; ascend back to the parent.
- */
-static int
-tree_ascend(struct tree *t)
-{
-	struct tree_entry *te;
-	int r =3D 0;
-
-	te =3D t->stack;
-	t->depth--;
-	if (te->flags & isDirLink) {
-#ifdef HAVE_FCHDIR
-		if (fchdir(te->symlink_parent_fd) !=3D 0) {
-			t->tree_errno =3D errno;
-			r =3D TREE_ERROR_FATAL;
-		}
-		close(te->symlink_parent_fd);
-#elif defined(_WIN32) && !defined(__CYGWIN__)
-		if (SetCurrentDirectory(te->symlink_parent_path) =3D=3D 0) {
-			t->tree_errno =3D errno;
-			r =3D TREE_ERROR_FATAL;
-		}
-		free(te->symlink_parent_path);
-		te->symlink_parent_path =3D NULL;
-#endif
-		t->openCount--;
-	} else {
-#if defined(_WIN32) && !defined(__CYGWIN__)
-		if (SetCurrentDirectory("..") =3D=3D 0) {
-#else
-		if (chdir("..") !=3D 0) {
-#endif
-			t->tree_errno =3D errno;
-			r =3D TREE_ERROR_FATAL;
-		}
-	}
-	return (r);
-}
-
-/*
- * Pop the working stack.
- */
-static void
-tree_pop(struct tree *t)
-{
-	struct tree_entry *te;
-
-	if (t->buff)
-		t->buff[t->dirname_length] =3D '\0';
-	if (t->stack =3D=3D t->current && t->current !=3D NULL)
-		t->current =3D t->current->parent;
-	te =3D t->stack;
-	t->stack =3D te->next;
-	t->dirname_length =3D te->dirname_length;
-	if (t->buff) {
-		t->basename =3D t->buff + t->dirname_length;
-		while (t->basename[0] =3D=3D '/')
-			t->basename++;
-	}
-	free(te->name);
-	free(te);
-}
-
-/*
- * Get the next item in the tree traversal.
- */
-int
-tree_next(struct tree *t)
-{
-	int r;
-
-	/* If we're called again after a fatal error, that's an API
-	 * violation.  Just crash now. */
-	if (t->visit_type =3D=3D TREE_ERROR_FATAL) {
-		fprintf(stderr, "Unable to continue traversing"
-		    " directory hierarchy after a fatal error.");
-		abort();
-	}
-
-	while (t->stack !=3D NULL) {
-		/* If there's an open dir, get the next entry from there. */
-		if (t->d !=3D INVALID_DIR_HANDLE) {
-#if defined(_WIN32) && !defined(__CYGWIN__)
-			r =3D tree_dir_next_windows(t, NULL);
-#else
-			r =3D tree_dir_next_posix(t);
-#endif
-			if (r =3D=3D 0)
-				continue;
-			return (r);
-		}
-
-		if (t->stack->flags & needsFirstVisit) {
-#if defined(_WIN32) && !defined(__CYGWIN__)
-			char *d =3D t->stack->name;
-			t->stack->flags &=3D ~needsFirstVisit;
-			if (strchr(d, '*') || strchr(d, '?')) {
-				r =3D tree_dir_next_windows(t, d);
-				if (r =3D=3D 0)
-					continue;
-				return (r);
-			}
-			/* Not a pattern, handle it as-is... */
-#endif
-			/* Top stack item needs a regular visit. */
-			t->current =3D t->stack;
-			tree_append(t, t->stack->name, strlen(t->stack->name));
-			/* t->dirname_length =3D t->path_length; */
-			/* tree_pop(t); */
-			t->stack->flags &=3D ~needsFirstVisit;
-			return (t->visit_type =3D TREE_REGULAR);
-		} else if (t->stack->flags & needsDescent) {
-			/* Top stack item is dir to descend into. */
-			t->current =3D t->stack;
-			tree_append(t, t->stack->name, strlen(t->stack->name));
-			t->stack->flags &=3D ~needsDescent;
-			/* If it is a link, set up fd for the ascent. */
-			if (t->stack->flags & isDirLink) {
-#ifdef HAVE_FCHDIR
-				t->stack->symlink_parent_fd =3D open(".", O_RDONLY);
-				t->openCount++;
-				if (t->openCount > t->maxOpenCount)
-					t->maxOpenCount =3D t->openCount;
-#elif defined(_WIN32) && !defined(__CYGWIN__)
-				t->stack->symlink_parent_path =3D _getcwd(NULL, 0);
-#endif
-			}
-			t->dirname_length =3D t->path_length;
-#if defined(_WIN32) && !defined(__CYGWIN__)
-			if (t->path_length =3D=3D 259 || !SetCurrentDirectory(t->stack->name) !=
=3D 0)
-#else
-			if (chdir(t->stack->name) !=3D 0)
-#endif
-			{
-				/* chdir() failed; return error */
-				tree_pop(t);
-				t->tree_errno =3D errno;
-				return (t->visit_type =3D TREE_ERROR_DIR);
-			}
-			t->depth++;
-			return (t->visit_type =3D TREE_POSTDESCENT);
-		} else if (t->stack->flags & needsOpen) {
-			t->stack->flags &=3D ~needsOpen;
-#if defined(_WIN32) && !defined(__CYGWIN__)
-			r =3D tree_dir_next_windows(t, "*");
-#else
-			r =3D tree_dir_next_posix(t);
-#endif
-			if (r =3D=3D 0)
-				continue;
-			return (r);
-		} else if (t->stack->flags & needsAscent) {
-		        /* Top stack item is dir and we're done with it. */
-			r =3D tree_ascend(t);
-			tree_pop(t);
-			t->visit_type =3D r !=3D 0 ? r : TREE_POSTASCENT;
-			return (t->visit_type);
-		} else {
-			/* Top item on stack is dead. */
-			tree_pop(t);
-			t->flags &=3D ~hasLstat;
-			t->flags &=3D ~hasStat;
-		}
-	}
-	return (t->visit_type =3D 0);
-}
-
-#if defined(_WIN32) && !defined(__CYGWIN__)
-static int
-tree_dir_next_windows(struct tree *t, const char *pattern)
-{
-	const char *name;
-	size_t namelen;
-	int r;
-
-	for (;;) {
-		if (pattern !=3D NULL) {
-			t->d =3D FindFirstFile(pattern, &t->_findData);
-			if (t->d =3D=3D INVALID_DIR_HANDLE) {
-				r =3D tree_ascend(t); /* Undo "chdir" */
-				tree_pop(t);
-				t->tree_errno =3D errno;
-				t->visit_type =3D r !=3D 0 ? r : TREE_ERROR_DIR;
-				return (t->visit_type);
-			}
-			t->findData =3D &t->_findData;
-			pattern =3D NULL;
-		} else if (!FindNextFile(t->d, &t->_findData)) {
-			FindClose(t->d);
-			t->d =3D INVALID_DIR_HANDLE;
-			t->findData =3D NULL;
-			return (0);
-		}
-		name =3D t->findData->cFileName;
-		namelen =3D strlen(name);
-		t->flags &=3D ~hasLstat;
-		t->flags &=3D ~hasStat;
-		if (name[0] =3D=3D '.' && name[1] =3D=3D '\0')
-			continue;
-		if (name[0] =3D=3D '.' && name[1] =3D=3D '.' && name[2] =3D=3D '\0')
-			continue;
-		tree_append(t, name, namelen);
-		return (t->visit_type =3D TREE_REGULAR);
-	}
-}
-#else
-static int
-tree_dir_next_posix(struct tree *t)
-{
-	int r;
-	const char *name;
-	size_t namelen;
-
-	if (t->d =3D=3D NULL) {
-		if ((t->d =3D opendir(".")) =3D=3D NULL) {
-			r =3D tree_ascend(t); /* Undo "chdir" */
-			tree_pop(t);
-			t->tree_errno =3D errno;
-			t->visit_type =3D r !=3D 0 ? r : TREE_ERROR_DIR;
-			return (t->visit_type);
-		}
-	}
-	for (;;) {
-		t->de =3D readdir(t->d);
-		if (t->de =3D=3D NULL) {
-			closedir(t->d);
-			t->d =3D INVALID_DIR_HANDLE;
-			return (0);
-		}
-		name =3D t->de->d_name;
-		namelen =3D D_NAMELEN(t->de);
-		t->flags &=3D ~hasLstat;
-		t->flags &=3D ~hasStat;
-		if (name[0] =3D=3D '.' && name[1] =3D=3D '\0')
-			continue;
-		if (name[0] =3D=3D '.' && name[1] =3D=3D '.' && name[2] =3D=3D '\0')
-			continue;
-		tree_append(t, name, namelen);
-		return (t->visit_type =3D TREE_REGULAR);
-	}
-}
-#endif
-
-/*
- * Return error code.
- */
-int
-tree_errno(struct tree *t)
-{
-	return (t->tree_errno);
-}
-
-/*
- * Called by the client to mark the directory just returned from
- * tree_next() as needing to be visited.
- */
-void
-tree_descend(struct tree *t)
-{
-	if (t->visit_type !=3D TREE_REGULAR)
-		return;
-
-	if (tree_current_is_physical_dir(t)) {
-		tree_push(t, t->basename);
-		t->stack->flags |=3D isDir;
-	} else if (tree_current_is_dir(t)) {
-		tree_push(t, t->basename);
-		t->stack->flags |=3D isDirLink;
-	}
-}
-
-/*
- * Get the stat() data for the entry just returned from tree_next().
- */
-const struct stat *
-tree_current_stat(struct tree *t)
-{
-	if (!(t->flags & hasStat)) {
-		if (stat(tree_current_access_path(t), &t->st) !=3D 0)
-			return NULL;
-		t->flags |=3D hasStat;
-	}
-	return (&t->st);
-}
-
-#if defined(_WIN32) && !defined(__CYGWIN__)
-const BY_HANDLE_FILE_INFORMATION *
-tree_current_file_information(struct tree *t)
-{
-	if (!(t->flags & hasFileInfo)) {
-		HANDLE h =3D CreateFile(tree_current_access_path(t),
-			0, 0, NULL,
-			OPEN_EXISTING,
-			FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_OPEN_REPARSE_POINT,
-			NULL);
-		if (h =3D=3D INVALID_HANDLE_VALUE)
-			return NULL;
-		if (!GetFileInformationByHandle(h, &t->fileInfo)) {
-			CloseHandle(h);
-			return NULL;
-		}
-		CloseHandle(h);
-		t->flags |=3D hasFileInfo;
-	}
-	return (&t->fileInfo);
-}
-#endif
-/*
- * Get the lstat() data for the entry just returned from tree_next().
- */
-const struct stat *
-tree_current_lstat(struct tree *t)
-{
-#if defined(_WIN32) && !defined(__CYGWIN__)
-	return (tree_current_stat(t));
-#else
-	if (!(t->flags & hasLstat)) {
-		if (lstat(tree_current_access_path(t), &t->lst) !=3D 0)
-			return NULL;
-		t->flags |=3D hasLstat;
-	}
-	return (&t->lst);
-#endif
-}
-
-/*
- * Test whether current entry is a dir or link to a dir.
- */
-int
-tree_current_is_dir(struct tree *t)
-{
-#if defined(_WIN32) && !defined(__CYGWIN__)
-	if (t->findData)
-		return (t->findData->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY);
-	if (tree_current_file_information(t))
-		return (t->fileInfo.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY);
-	return (0);
-#else
-	const struct stat *st;
-	/*
-	 * If we already have lstat() info, then try some
-	 * cheap tests to determine if this is a dir.
-	 */
-	if (t->flags & hasLstat) {
-		/* If lstat() says it's a dir, it must be a dir. */
-		if (S_ISDIR(tree_current_lstat(t)->st_mode))
-			return 1;
-		/* Not a dir; might be a link to a dir. */
-		/* If it's not a link, then it's not a link to a dir. */
-		if (!S_ISLNK(tree_current_lstat(t)->st_mode))
-			return 0;
-		/*
-		 * It's a link, but we don't know what it's a link to,
-		 * so we'll have to use stat().
-		 */
-	}
-
-	st =3D tree_current_stat(t);
-	/* If we can't stat it, it's not a dir. */
-	if (st =3D=3D NULL)
-		return 0;
-	/* Use the definitive test.  Hopefully this is cached. */
-	return (S_ISDIR(st->st_mode));
-#endif
-}
-
-/*
- * Test whether current entry is a physical directory.  Usually, we
- * already have at least one of stat() or lstat() in memory, so we
- * use tricks to try to avoid an extra trip to the disk.
- */
-int
-tree_current_is_physical_dir(struct tree *t)
-{
-#if defined(_WIN32) && !defined(__CYGWIN__)
-	if (tree_current_is_physical_link(t))
-		return (0);
-	return (tree_current_is_dir(t));
-#else
-	const struct stat *st;
-
-	/*
-	 * If stat() says it isn't a dir, then it's not a dir.
-	 * If stat() data is cached, this check is free, so do it first.
-	 */
-	if ((t->flags & hasStat)
-	    && (!S_ISDIR(tree_current_stat(t)->st_mode)))
-		return 0;
-
-	/*
-	 * Either stat() said it was a dir (in which case, we have
-	 * to determine whether it's really a link to a dir) or
-	 * stat() info wasn't available.  So we use lstat(), which
-	 * hopefully is already cached.
-	 */
-
-	st =3D tree_current_lstat(t);
-	/* If we can't stat it, it's not a dir. */
-	if (st =3D=3D NULL)
-		return 0;
-	/* Use the definitive test.  Hopefully this is cached. */
-	return (S_ISDIR(st->st_mode));
-#endif
-}
-
-/*
- * Test whether current entry is a symbolic link.
- */
-int
-tree_current_is_physical_link(struct tree *t)
-{
-#if defined(_WIN32) && !defined(__CYGWIN__)
-#ifndef IO_REPARSE_TAG_SYMLINK
-/* Old SDKs do not provide IO_REPARSE_TAG_SYMLINK */
-#define	IO_REPARSE_TAG_SYMLINK 0xA000000CL
-#endif
-	if (t->findData)
-		return ((t->findData->dwFileAttributes & FILE_ATTRIBUTE_REPARSE_POINT)
-				&& (t->findData->dwReserved0 =3D=3D IO_REPARSE_TAG_SYMLINK));
-	return (0);
-#else
-	const struct stat *st =3D tree_current_lstat(t);
-	if (st =3D=3D NULL)
-		return 0;
-	return (S_ISLNK(st->st_mode));
-#endif
-}
-
-/*
- * Return the access path for the entry just returned from tree_next().
- */
-const char *
-tree_current_access_path(struct tree *t)
-{
-	return (t->basename);
-}
-
-/*
- * Return the full path for the entry just returned from tree_next().
- */
-const char *
-tree_current_path(struct tree *t)
-{
-	return (t->buff);
-}
-
-/*
- * Return the length of the path for the entry just returned from tree_nex=
t().
- */
-size_t
-tree_current_pathlen(struct tree *t)
-{
-	return (t->path_length);
-}
-
-/*
- * Return the nesting depth of the entry just returned from tree_next().
- */
-int
-tree_current_depth(struct tree *t)
-{
-	return (t->depth);
-}
-
-/*
- * Terminate the traversal and release any resources.
- */
-void
-tree_close(struct tree *t)
-{
-	/* Release anything remaining in the stack. */
-	while (t->stack !=3D NULL)
-		tree_pop(t);
-	free(t->buff);
-	/* TODO: Ensure that premature close() resets cwd */
-#if 0
-#ifdef HAVE_FCHDIR
-	if (t->initialDirFd >=3D 0) {
-		int s =3D fchdir(t->initialDirFd);
-		(void)s; /* UNUSED */
-		close(t->initialDirFd);
-		t->initialDirFd =3D -1;
-	}
-#elif defined(_WIN32) && !defined(__CYGWIN__)
-	if (t->initialDir !=3D NULL) {
-		SetCurrentDir(t->initialDir);
-		free(t->initialDir);
-		t->initialDir =3D NULL;
-	}
-#endif
-#endif
-	free(t);
-}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/tar/tree.h
--- a/head/contrib/libarchive/tar/tree.h	Mon Jul 30 11:44:18 2012 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,141 +0,0 @@
-/*-
- * 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 WARRANTI=
ES
- * 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 US=
E,
- * 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: head/contrib/libarchive/tar/tree.h 228763 2011-12-21 11:13:29=
Z mm $
- */
-
-/*-
- * A set of routines for traversing directory trees.
- * Similar in concept to the fts library, but with a few
- * important differences:
- *    * Uses less memory.  In particular, fts stores an entire directory
- *      in memory at a time.  This package only keeps enough subdirectory
- *      information in memory to track the traversal.  Information
- *      about non-directories is discarded as soon as possible.
- *    * Supports very deep logical traversals.  The fts package
- *      uses "non-chdir" approach for logical traversals.  This
- *      package does use a chdir approach for logical traversals
- *      and can therefore handle pathnames much longer than PATH_MAX.
- *    * Supports deep physical traversals "out of the box."
- *      Due to the memory optimizations above, there's no need to
- *      limit dir names to 32k.
- */
-
-#include <sys/stat.h>
-#include <stdio.h>
-
-struct tree;
-
-/* Initiate/terminate a tree traversal. */
-struct tree *tree_open(const char * /* pathname */);
-void tree_close(struct tree *);
-
-/*
- * tree_next() returns Zero if there is no next entry, non-zero if
- * there is.  Note that directories are visited three times.
- * Directories are always visited first as part of enumerating their
- * parent; that is a "regular" visit.  If tree_descend() is invoked at
- * that time, the directory is added to a work list and will
- * subsequently be visited two more times: once just after descending
- * into the directory ("postdescent") and again just after ascending
- * back to the parent ("postascent").
- *
- * TREE_ERROR_DIR is returned if the descent failed (because the
- * directory couldn't be opened, for instance).  This is returned
- * instead of TREE_POSTDESCENT/TREE_POSTASCENT.  TREE_ERROR_DIR is not a
- * fatal error, but it does imply that the relevant subtree won't be
- * visited.  TREE_ERROR_FATAL is returned for an error that left the
- * traversal completely hosed.  Right now, this is only returned for
- * chdir() failures during ascent.
- */
-#define	TREE_REGULAR	1
-#define	TREE_POSTDESCENT	2
-#define	TREE_POSTASCENT	3
-#define	TREE_ERROR_DIR	-1
-#define	TREE_ERROR_FATAL -2
-
-int tree_next(struct tree *);
-
-/* Errno value associated with the last traversal error. */
-int tree_errno(struct tree *);
-
-/*
- * Request that current entry be visited.  If you invoke it on every
- * directory, you'll get a physical traversal.  This is ignored if the
- * current entry isn't a directory or a link to a directory.  So, if
- * you invoke this on every returned path, you'll get a full logical
- * traversal.
- */
-void tree_descend(struct tree *);
-
-/*
- * Return information about the current entry.
- */
-
-/* Current depth in the traversal. */
-int tree_current_depth(struct tree *);
-
-/*
- * The current full pathname, length of the full pathname, and a name
- * that can be used to access the file.  Because tree does use chdir
- * extensively, the access path is almost never the same as the full
- * current path.
- *
- * TODO: Flesh out this interface to provide other information.  In
- * particular, Windows can provide file size, mode, and some permission
- * information without invoking stat() at all.
- *
- * TODO: On platforms that support it, use openat()-style operations
- * to eliminate the chdir() operations entirely while still supporting
- * arbitrarily deep traversals.  This makes access_path troublesome to
- * support, of course, which means we'll need a rich enough interface
- * that clients can function without it.  (In particular, we'll need
- * tree_current_open() that returns an open file descriptor.)
- *
- * TODO: Provide tree_current_archive_entry().
- */
-const char *tree_current_path(struct tree *);
-size_t tree_current_pathlen(struct tree *);
-const char *tree_current_access_path(struct tree *);
-
-/*
- * Request the lstat() or stat() data for the current path.  Since the
- * tree package needs to do some of this anyway, and caches the
- * results, you should take advantage of it here if you need it rather
- * than make a redundant stat() or lstat() call of your own.
- */
-const struct stat *tree_current_stat(struct tree *);
-const struct stat *tree_current_lstat(struct tree *);
-
-/* The following functions use tricks to avoid a certain number of
- * stat()/lstat() calls. */
-/* "is_physical_dir" is equivalent to S_ISDIR(tree_current_lstat()->st_mod=
e) */
-int tree_current_is_physical_dir(struct tree *);
-/* "is_physical_link" is equivalent to S_ISLNK(tree_current_lstat()->st_mo=
de) */
-int tree_current_is_physical_link(struct tree *);
-/* "is_dir" is equivalent to S_ISDIR(tree_current_stat()->st_mode) */
-int tree_current_is_dir(struct tree *);
-
-/* For testing/debugging: Dump the internal status to the given filehandle=
. */
-void tree_dump(struct tree *, FILE *);
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/libarchive/tar/write.c
--- a/head/contrib/libarchive/tar/write.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/libarchive/tar/write.c	Fri Aug 10 14:19:25 2012 +0300
@@ -1,5 +1,6 @@
 /*-
  * Copyright (c) 2003-2007 Tim Kientzle
+ * Copyright (c) 2012 Michihiro NAKAJIMA
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -24,14 +25,11 @@
  */
=20
 #include "bsdtar_platform.h"
-__FBSDID("$FreeBSD: head/contrib/libarchive/tar/write.c 232153 2012-02-25 =
10:58:02Z mm $");
+__FBSDID("$FreeBSD: head/contrib/libarchive/tar/write.c 238856 2012-07-28 =
06:38:44Z mm $");
=20
 #ifdef HAVE_SYS_TYPES_H
 #include <sys/types.h>
 #endif
-#ifdef HAVE_SYS_IOCTL_H
-#include <sys/ioctl.h>
-#endif
 #ifdef HAVE_SYS_STAT_H
 #include <sys/stat.h>
 #endif
@@ -56,20 +54,6 @@
 #ifdef HAVE_LIMITS_H
 #include <limits.h>
 #endif
-#ifdef HAVE_LINUX_FS_H
-#include <linux/fs.h>	/* 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 <linux/ext2_fs.h>	/* for Linux file flags */
-#endif
-#if defined(HAVE_EXT2FS_EXT2_FS_H) && !defined(__CYGWIN__)
-/* This header exists but is broken on Cygwin. */
-#include <ext2fs/ext2_fs.h>
-#endif
 #ifdef HAVE_PATHS_H
 #include <paths.h>
 #endif
@@ -93,7 +77,6 @@
 #include "bsdtar.h"
 #include "err.h"
 #include "line_reader.h"
-#include "tree.h"
=20
 #ifndef O_BINARY
 #define	O_BINARY 0
@@ -110,28 +93,27 @@
 	struct archive_dir_entry *head, *tail;
 };
=20
-static void		 add_dir_list(struct bsdtar *bsdtar, const char *path,
-			     time_t mtime_sec, int mtime_nsec);
 static int		 append_archive(struct bsdtar *, struct archive *,
 			     struct archive *ina);
 static int		 append_archive_filename(struct bsdtar *,
 			     struct archive *, const char *fname);
 static void		 archive_names_from_file(struct bsdtar *bsdtar,
 			     struct archive *a);
-static int		 copy_file_data(struct bsdtar *, struct archive *a,
-			     struct archive *ina, struct archive_entry *);
-static int		 new_enough(struct bsdtar *, const char *path,
-			     const struct stat *);
+static int		 copy_file_data_block(struct bsdtar *,
+			     struct archive *a, struct archive *,
+			     struct archive_entry *);
+static void		 excluded_callback(struct archive *, void *,
+			     struct archive_entry *);
 static void		 report_write(struct bsdtar *, struct archive *,
 			     struct archive_entry *, int64_t progress);
 static void		 test_for_append(struct bsdtar *);
+static int		 metadata_filter(struct archive *, void *,
+			     struct archive_entry *);
 static void		 write_archive(struct archive *, struct bsdtar *);
 static void		 write_entry(struct bsdtar *, struct archive *,
 			     struct archive_entry *);
 static void		 write_file(struct bsdtar *, struct archive *,
 			     struct archive_entry *);
-static int		 write_file_data(struct bsdtar *, struct archive *,
-			     struct archive_entry *, int fd, size_t align);
 static void		 write_hierarchy(struct bsdtar *, struct archive *,
 			     const char *);
=20
@@ -360,9 +342,11 @@
 			lafe_errc(1, 0,
 			    "Cannot append to compressed archive.");
 		}
-		add_dir_list(bsdtar, archive_entry_pathname(entry),
-		    archive_entry_mtime(entry),
-		    archive_entry_mtime_nsec(entry));
+		if (archive_match_exclude_entry(bsdtar->matching,
+		    ARCHIVE_MATCH_MTIME | ARCHIVE_MATCH_OLDER |
+		    ARCHIVE_MATCH_EQUAL, entry) !=3D ARCHIVE_OK)
+			lafe_errc(1, 0, "Error : %s",
+			    archive_error_string(bsdtar->matching));
 		/* Record the last format determination we see */
 		format =3D archive_format(a);
 		/* Keep going until we hit end-of-archive */
@@ -426,8 +410,30 @@
 		lafe_errc(1, 0, "cannot create link resolver");
 	archive_entry_linkresolver_set_strategy(bsdtar->resolver,
 	    archive_format(a));
+
+	/* Create a read_disk object. */
 	if ((bsdtar->diskreader =3D archive_read_disk_new()) =3D=3D NULL)
 		lafe_errc(1, 0, "Cannot create read_disk object");
+	/* Tell the read_disk how handle symlink. */
+	switch (bsdtar->symlink_mode) {
+	case 'H':
+		archive_read_disk_set_symlink_hybrid(bsdtar->diskreader);
+		break;
+	case 'L':
+		archive_read_disk_set_symlink_logical(bsdtar->diskreader);
+		break;
+	default:
+		archive_read_disk_set_symlink_physical(bsdtar->diskreader);
+		break;
+	}
+	/* Register entry filters. */
+	archive_read_disk_set_matching(bsdtar->diskreader,
+	    bsdtar->matching, excluded_callback, bsdtar);
+	archive_read_disk_set_metadata_filter_callback(
+	    bsdtar->diskreader, metadata_filter, bsdtar);
+	/* Set the behavior of archive_read_disk. */
+	archive_read_disk_set_behavior(bsdtar->diskreader,
+	    bsdtar->readdisk_flags);
 	archive_read_disk_set_standard_lookup(bsdtar->diskreader);
=20
 	if (bsdtar->names_from_file !=3D NULL)
@@ -467,11 +473,57 @@
 		bsdtar->argv++;
 	}
=20
+	archive_read_disk_set_matching(bsdtar->diskreader, NULL, NULL, NULL);
+	archive_read_disk_set_metadata_filter_callback(
+	    bsdtar->diskreader, NULL, NULL);
 	entry =3D NULL;
 	archive_entry_linkify(bsdtar->resolver, &entry, &sparse_entry);
 	while (entry !=3D NULL) {
+		int r;
+		struct archive_entry *entry2;
+		struct archive *disk =3D bsdtar->diskreader;
+
+		/*
+		 * This tricky code here is to correctly read the cotents
+		 * of the entry because the disk reader bsdtar->diskreader
+		 * is pointing at does not have any information about the
+		 * entry by this time and using archive_read_data_block()
+		 * with the disk reader consequently must fail. And we
+		 * have to re-open the entry to read the contents.
+		 */
+		/* TODO: Work with -C option as well. */
+		r =3D archive_read_disk_open(disk,
+			archive_entry_sourcepath(entry));
+		if (r !=3D ARCHIVE_OK) {
+			lafe_warnc(archive_errno(disk),
+			    "%s", archive_error_string(disk));
+			bsdtar->return_value =3D 1;
+			archive_entry_free(entry);
+			continue;
+		}
+
+		/*
+		 * Invoke archive_read_next_header2() to work
+		 * archive_read_data_block(), which is called via write_file(),
+		 * without failure.
+		 */
+		entry2 =3D archive_entry_new();
+		r =3D archive_read_next_header2(disk, entry2);
+		archive_entry_free(entry2);
+		if (r !=3D ARCHIVE_OK) {
+			lafe_warnc(archive_errno(disk),
+			    "%s", archive_error_string(disk));
+			if (r =3D=3D ARCHIVE_FATAL)
+				bsdtar->return_value =3D 1;
+			else
+				archive_read_close(disk);
+			archive_entry_free(entry);
+			continue;
+		}
+
 		write_file(bsdtar, a, entry);
 		archive_entry_free(entry);
+		archive_read_close(disk);
 		entry =3D NULL;
 		archive_entry_linkify(bsdtar->resolver, &entry, &sparse_entry);
 	}
@@ -584,10 +636,7 @@
 	int e;
=20
 	while (ARCHIVE_OK =3D=3D (e =3D archive_read_next_header(ina, &in_entry))=
) {
-		if (!new_enough(bsdtar, archive_entry_pathname(in_entry),
-			archive_entry_stat(in_entry)))
-			continue;
-		if (lafe_excluded(bsdtar->matching, archive_entry_pathname(in_entry)))
+		if (archive_match_excluded(bsdtar->matching, in_entry))
 			continue;
 		if (bsdtar->option_interactive &&
 		    !yes("copy '%s'", archive_entry_pathname(in_entry)))
@@ -613,7 +662,7 @@
 		if (e >=3D ARCHIVE_WARN) {
 			if (archive_entry_size(in_entry) =3D=3D 0)
 				archive_read_data_skip(ina);
-			else if (copy_file_data(bsdtar, a, ina, in_entry))
+			else if (copy_file_data_block(bsdtar, a, ina, in_entry))
 				exit(1);
 		}
=20
@@ -624,31 +673,131 @@
 	return (e =3D=3D ARCHIVE_EOF ? ARCHIVE_OK : e);
 }
=20
-/* Helper function to copy data between archives. */
+/* Helper function to copy file to archive. */
 static int
-copy_file_data(struct bsdtar *bsdtar, struct archive *a,
-    struct archive *ina, struct archive_entry *entry)
+copy_file_data_block(struct bsdtar *bsdtar, struct archive *a,
+    struct archive *in_a, struct archive_entry *entry)
 {
-	ssize_t	bytes_read;
+	size_t	bytes_read;
 	ssize_t	bytes_written;
-	int64_t	progress =3D 0;
+	int64_t	offset, progress =3D 0;
+	char *null_buff =3D NULL;
+	const void *buff;
+	int r;
=20
-	bytes_read =3D archive_read_data(ina, bsdtar->buff, bsdtar->buff_size);
-	while (bytes_read > 0) {
+	while ((r =3D archive_read_data_block(in_a, &buff,
+	    &bytes_read, &offset)) =3D=3D ARCHIVE_OK) {
 		if (need_report())
 			report_write(bsdtar, a, entry, progress);
=20
-		bytes_written =3D archive_write_data(a, bsdtar->buff,
-		    bytes_read);
-		if (bytes_written < bytes_read) {
+		if (offset > progress) {
+			int64_t sparse =3D offset - progress;
+			size_t ns;
+
+			if (null_buff =3D=3D NULL) {
+				null_buff =3D bsdtar->buff;
+				memset(null_buff, 0, bsdtar->buff_size);
+			}
+
+			while (sparse > 0) {
+				if (sparse > (int64_t)bsdtar->buff_size)
+					ns =3D bsdtar->buff_size;
+				else
+					ns =3D (size_t)sparse;
+				bytes_written =3D
+				    archive_write_data(a, null_buff, ns);
+				if (bytes_written < 0) {
+					/* Write failed; this is bad */
+					lafe_warnc(0, "%s",
+					     archive_error_string(a));
+					return (-1);
+				}
+				if ((size_t)bytes_written < ns) {
+					/* Write was truncated; warn but
+					 * continue. */
+					lafe_warnc(0,
+					    "%s: Truncated write; file may "
+					    "have grown while being archived.",
+					    archive_entry_pathname(entry));
+					return (0);
+				}
+				progress +=3D bytes_written;
+				sparse -=3D bytes_written;
+			}
+		}
+
+		bytes_written =3D archive_write_data(a, buff, bytes_read);
+		if (bytes_written < 0) {
+			/* Write failed; this is bad */
 			lafe_warnc(0, "%s", archive_error_string(a));
 			return (-1);
 		}
+		if ((size_t)bytes_written < bytes_read) {
+			/* Write was truncated; warn but continue. */
+			lafe_warnc(0,
+			    "%s: Truncated write; file may have grown "
+			    "while being archived.",
+			    archive_entry_pathname(entry));
+			return (0);
+		}
 		progress +=3D bytes_written;
-		bytes_read =3D archive_read_data(ina, bsdtar->buff, bsdtar->buff_size);
 	}
+	if (r < ARCHIVE_WARN) {
+		lafe_warnc(archive_errno(a), "%s", archive_error_string(a));
+		return (-1);
+	}
+	return (0);
+}
=20
-	return (0);
+static void
+excluded_callback(struct archive *a, void *_data, struct archive_entry *en=
try)
+{
+	struct bsdtar *bsdtar =3D (struct bsdtar *)_data;
+
+	if (bsdtar->option_no_subdirs)
+		return;
+	if (!archive_read_disk_can_descend(a))
+		return;
+	if (bsdtar->option_interactive &&
+	    !yes("add '%s'", archive_entry_pathname(entry)))
+		return;
+	archive_read_disk_descend(a);
+}
+
+static int
+metadata_filter(struct archive *a, void *_data, struct archive_entry *entr=
y)
+{
+	struct bsdtar *bsdtar =3D (struct bsdtar *)_data;
+
+	/* XXX TODO: check whether this filesystem is
+	 * synthetic and/or local.  Add a new
+	 * --local-only option to skip non-local
+	 * filesystems.  Skip synthetic filesystems
+	 * regardless.
+	 *
+	 * The results should be cached, since
+	 * tree.c doesn't usually visit a directory
+	 * and the directory contents together.  A simple
+	 * move-to-front list should perform quite well.
+	 *
+	 * Use archive_read_disk_current_filesystem_is_remote().
+	 */
+
+	/*
+	 * If the user vetoes this file/directory, skip it.
+	 * We want this to be fairly late; if some other
+	 * check would veto this file, we shouldn't bother
+	 * the user with it.
+	 */
+	if (bsdtar->option_interactive &&
+	    !yes("add '%s'", archive_entry_pathname(entry)))
+		return (0);
+
+	/* Note: if user vetoes, we won't descend. */
+	if (!bsdtar->option_no_subdirs && archive_read_disk_can_descend(a))
+		archive_read_disk_descend(a);
+
+	return (1);
 }
=20
 /*
@@ -657,171 +806,35 @@
 static void
 write_hierarchy(struct bsdtar *bsdtar, struct archive *a, const char *path)
 {
+	struct archive *disk =3D bsdtar->diskreader;
 	struct archive_entry *entry =3D NULL, *spare_entry =3D NULL;
-	struct tree *tree;
-	char symlink_mode =3D bsdtar->symlink_mode;
-	dev_t first_dev =3D 0;
-	int dev_recorded =3D 0;
-	int tree_ret;
+	int r;
=20
-	tree =3D tree_open(path);
-
-	if (!tree) {
-		lafe_warnc(errno, "%s: Cannot open", path);
+	r =3D archive_read_disk_open(disk, path);
+	if (r !=3D ARCHIVE_OK) {
+		lafe_warnc(archive_errno(disk),
+		    "%s", archive_error_string(disk));
 		bsdtar->return_value =3D 1;
 		return;
 	}
+	bsdtar->first_fs =3D -1;
=20
-	while ((tree_ret =3D tree_next(tree)) !=3D 0) {
-		int r;
-		const char *name =3D tree_current_path(tree);
-		const struct stat *st =3D NULL; /* info to use for this entry */
-		const struct stat *lst =3D NULL; /* lstat() information */
-		int descend;
-
-		if (tree_ret =3D=3D TREE_ERROR_FATAL)
-			lafe_errc(1, tree_errno(tree),
-			    "%s: Unable to continue traversing directory tree",
-			    name);
-		if (tree_ret =3D=3D TREE_ERROR_DIR) {
-			lafe_warnc(errno,
-			    "%s: Couldn't visit directory", name);
-			bsdtar->return_value =3D 1;
-		}
-		if (tree_ret !=3D TREE_REGULAR)
-			continue;
-
-		/*
-		 * If this file/dir is excluded by a filename
-		 * pattern, skip it.
-		 */
-		if (lafe_excluded(bsdtar->matching, name))
-			continue;
-
-		/*
-		 * Get lstat() info from the tree library.
-		 */
-		lst =3D tree_current_lstat(tree);
-		if (lst =3D=3D NULL) {
-			/* Couldn't lstat(); must not exist. */
-			lafe_warnc(errno, "%s: Cannot stat", name);
-			/* Return error if files disappear during traverse. */
-			bsdtar->return_value =3D 1;
-			continue;
+	for (;;) {
+		archive_entry_free(entry);
+		entry =3D archive_entry_new();
+		r =3D archive_read_next_header2(disk, entry);
+		if (r =3D=3D ARCHIVE_EOF)
+			break;
+		else if (r !=3D ARCHIVE_OK) {
+			lafe_warnc(archive_errno(disk),
+			    "%s", archive_error_string(disk));
+			if (r =3D=3D ARCHIVE_FATAL) {
+				bsdtar->return_value =3D 1;
+				return;
+			} else if (r < ARCHIVE_WARN)
+				continue;
 		}
=20
-		/*
-		 * Distinguish 'L'/'P'/'H' symlink following.
-		 */
-		switch(symlink_mode) {
-		case 'H':
-			/* 'H': After the first item, rest like 'P'. */
-			symlink_mode =3D 'P';
-			/* 'H': First item (from command line) like 'L'. */
-			/* FALLTHROUGH */
-		case 'L':
-			/* 'L': Do descend through a symlink to dir. */
-			descend =3D tree_current_is_dir(tree);
-			/* 'L': Follow symlinks to files. */
-			archive_read_disk_set_symlink_logical(bsdtar->diskreader);
-			/* 'L': Archive symlinks as targets, if we can. */
-			st =3D tree_current_stat(tree);
-			if (st !=3D NULL)
-				break;
-			/* If stat fails, we have a broken symlink;
-			 * in that case, don't follow the link. */
-			/* FALLTHROUGH */
-		default:
-			/* 'P': Don't descend through a symlink to dir. */
-			descend =3D tree_current_is_physical_dir(tree);
-			/* 'P': Don't follow symlinks to files. */
-			archive_read_disk_set_symlink_physical(bsdtar->diskreader);
-			/* 'P': Archive symlinks as symlinks. */
-			st =3D lst;
-			break;
-		}
-
-		if (bsdtar->option_no_subdirs)
-			descend =3D 0;
-
-		/*
-		 * Are we about to cross to a new filesystem?
-		 */
-		if (!dev_recorded) {
-			/* This is the initial file system. */
-			first_dev =3D lst->st_dev;
-			dev_recorded =3D 1;
-		} else if (lst->st_dev =3D=3D first_dev) {
-			/* The starting file system is always acceptable. */
-		} else if (descend =3D=3D 0) {
-			/* We're not descending, so no need to check. */
-		} else if (bsdtar->option_dont_traverse_mounts) {
-			descend =3D 0;
-		} else {
-			/* We're prepared to cross a mount point. */
-
-			/* XXX TODO: check whether this filesystem is
-			 * synthetic and/or local.  Add a new
-			 * --local-only option to skip non-local
-			 * filesystems.  Skip synthetic filesystems
-			 * regardless.
-			 *
-			 * The results should be cached, since
-			 * tree.c doesn't usually visit a directory
-			 * and the directory contents together.  A simple
-			 * move-to-front list should perform quite well.
-			 *
-			 * This is going to be heavily OS dependent:
-			 * FreeBSD's statfs() in conjunction with getvfsbyname()
-			 * provides all of this; NetBSD's statvfs() does
-			 * most of it; other systems will vary.
-			 */
-		}
-
-		/*
-		 * In -u mode, check that the file is newer than what's
-		 * already in the archive; in all modes, obey --newerXXX flags.
-		 */
-		if (!new_enough(bsdtar, name, st)) {
-			if (!descend)
-				continue;
-			if (bsdtar->option_interactive &&
-			    !yes("add '%s'", name))
-				continue;
-			tree_descend(tree);
-			continue;
-		}
-
-		archive_entry_free(entry);
-		entry =3D archive_entry_new();
-
-		archive_entry_set_pathname(entry, name);
-		archive_entry_copy_sourcepath(entry,
-		    tree_current_access_path(tree));
-
-		/* Populate the archive_entry with metadata from the disk. */
-		/* XXX TODO: Arrange to open a regular file before
-		 * calling this so we can pass in an fd and shorten
-		 * the race to query metadata.  The linkify dance
-		 * makes this more complex than it might sound. */
-#if defined(_WIN32) && !defined(__CYGWIN__)
-		/* TODO: tree.c uses stat(), which is badly broken
-		 * on Windows.  To fix this, we should
-		 * deprecate tree_current_stat() and provide a new
-		 * call tree_populate_entry(t, entry).  This call
-		 * would use stat() internally on POSIX and
-		 * GetInfoByFileHandle() internally on Windows.
-		 * This would be another step towards a tree-walker
-		 * that can be integrated deep into libarchive.
-		 * For now, just set st to NULL on Windows;
-		 * archive_read_disk_entry_from_file() should
-		 * be smart enough to use platform-appropriate
-		 * ways to probe file information.
-		 */
-		st =3D NULL;
-#endif
-		r =3D archive_read_disk_entry_from_file(bsdtar->diskreader,
-		    entry, -1, st);
 		if (bsdtar->uid >=3D 0) {
 			archive_entry_set_uid(entry, bsdtar->uid);
 			if (!bsdtar->uname)
@@ -840,68 +853,6 @@
 			archive_entry_set_uname(entry, bsdtar->uname);
 		if (bsdtar->gname)
 			archive_entry_set_gname(entry, bsdtar->gname);
-		if (r !=3D ARCHIVE_OK)
-			lafe_warnc(archive_errno(bsdtar->diskreader),
-			    "%s", archive_error_string(bsdtar->diskreader));
-		if (r < ARCHIVE_WARN)
-			continue;
-
-		/* XXX TODO: Just use flag data from entry; avoid the
-		 * duplicate check here. */
-
-		/*
-		 * If this file/dir is flagged "nodump" and we're
-		 * honoring such flags, skip this file/dir.
-		 */
-#if defined(HAVE_STRUCT_STAT_ST_FLAGS) && defined(UF_NODUMP)
-		/* BSD systems store flags in struct stat */
-		if (bsdtar->option_honor_nodump &&
-		    (lst->st_flags & UF_NODUMP))
-			continue;
-#endif
-
-#if defined(EXT2_IOC_GETFLAGS) && defined(EXT2_NODUMP_FL) && defined(HAVE_=
WORKING_EXT2_IOC_GETFLAGS)
-		/* Linux uses ioctl to read flags. */
-		if (bsdtar->option_honor_nodump) {
-			int fd =3D open(name, O_RDONLY | O_NONBLOCK | O_BINARY);
-			if (fd >=3D 0) {
-				unsigned long fflags;
-				int r =3D ioctl(fd, EXT2_IOC_GETFLAGS, &fflags);
-				close(fd);
-				if (r >=3D 0 && (fflags & EXT2_NODUMP_FL))
-					continue;
-			}
-		}
-#endif
-
-#ifdef __APPLE__
-		if (bsdtar->enable_copyfile) {
-			/* If we're using copyfile(), ignore "._XXX" files. */
-			const char *bname =3D strrchr(name, '/');
-			if (bname =3D=3D NULL)
-				bname =3D name;
-			else
-				++bname;
-			if (bname[0] =3D=3D '.' && bname[1] =3D=3D '_')
-				continue;
-		} else {
-			/* If not, drop the copyfile() data. */
-			archive_entry_copy_mac_metadata(entry, NULL, 0);
-		}
-#endif
-
-		/*
-		 * If the user vetoes this file/directory, skip it.
-		 * We want this to be fairly late; if some other
-		 * check would veto this file, we shouldn't bother
-		 * the user with it.
-		 */
-		if (bsdtar->option_interactive &&
-		    !yes("add '%s'", name))
-			continue;
-
-		if (descend)
-			tree_descend(tree);
=20
 		/*
 		 * Rewrite the pathname to be archived.  If rewrite
@@ -933,7 +884,7 @@
 			fprintf(stderr, "\n");
 	}
 	archive_entry_free(entry);
-	tree_close(tree);
+	archive_read_close(disk);
 }
=20
 /*
@@ -954,29 +905,7 @@
 write_entry(struct bsdtar *bsdtar, struct archive *a,
     struct archive_entry *entry)
 {
-	int fd =3D -1;
 	int e;
-	size_t align =3D 4096;
-
-	if (archive_entry_size(entry) > 0) {
-		const char *pathname =3D archive_entry_sourcepath(entry);
-		/* TODO: Use O_DIRECT here and set 'align' to the
-		 * actual filesystem block size.  As of July 2010, new
-		 * directory-traversal code is going in that will make
-		 * it much easier to track filesystem properties like
-		 * this during the traversal. */
-		fd =3D open(pathname, O_RDONLY | O_BINARY);
-		align =3D 4096;
-		if (fd =3D=3D -1) {
-			bsdtar->return_value =3D 1;
-			if (!bsdtar->verbose)
-				lafe_warnc(errno,
-				    "%s: could not open file", pathname);
-			else
-				fprintf(stderr, ": %s", strerror(errno));
-			return;
-		}
-	}
=20
 	e =3D archive_write_header(a, entry);
 	if (e !=3D ARCHIVE_OK) {
@@ -997,17 +926,10 @@
 	 * to inform us that the archive body won't get stored.  In
 	 * that case, just skip the write.
 	 */
-	if (e >=3D ARCHIVE_WARN && fd >=3D 0 && archive_entry_size(entry) > 0) {
-		if (write_file_data(bsdtar, a, entry, fd, align))
+	if (e >=3D ARCHIVE_WARN && archive_entry_size(entry) > 0) {
+		if (copy_file_data_block(bsdtar, a, bsdtar->diskreader, entry))
 			exit(1);
 	}
-
-	/*
-	 * If we opened a file, close it now even if there was an error
-	 * which made us decide not to write the archive body.
-	 */
-	if (fd >=3D 0)
-		close(fd);
 }
=20
 static void
@@ -1038,144 +960,6 @@
 	    tar_i64toa(archive_entry_size(entry)));
 }
=20
-
-/* Helper function to copy file to archive. */
-static int
-write_file_data(struct bsdtar *bsdtar, struct archive *a,
-    struct archive_entry *entry, int fd, size_t align)
-{
-	ssize_t	bytes_read;
-	ssize_t	bytes_written;
-	int64_t	progress =3D 0;
-	size_t  buff_size;
-	char   *buff =3D bsdtar->buff;
-
-	/* Round 'buff' up to the next multiple of 'align' and reduce
-	 * 'buff_size' accordingly. */
-	buff =3D (char *)((((uintptr_t)buff + align - 1) / align) * align);
-	buff_size =3D bsdtar->buff + bsdtar->buff_size - buff;
-	buff_size =3D (buff_size / align) * align;
-=09
-	bytes_read =3D read(fd, buff, buff_size);
-	while (bytes_read > 0) {
-		if (need_report())
-			report_write(bsdtar, a, entry, progress);
-
-		bytes_written =3D archive_write_data(a, buff, bytes_read);
-		if (bytes_written < 0) {
-			/* Write failed; this is bad */
-			lafe_warnc(0, "%s", archive_error_string(a));
-			return (-1);
-		}
-		if (bytes_written < bytes_read) {
-			/* Write was truncated; warn but continue. */
-			lafe_warnc(0,
-			    "%s: Truncated write; file may have grown while being archived.",
-			    archive_entry_pathname(entry));
-			return (0);
-		}
-		progress +=3D bytes_written;
-		bytes_read =3D read(fd, buff, buff_size);
-	}
-	if (bytes_read < 0) {
-		lafe_warnc(errno,
-			     "%s: Read error",
-			     archive_entry_pathname(entry));
-		bsdtar->return_value =3D 1;
-	}
-	return 0;
-}
-
-/*
- * Test if the specified file is new enough to include in the archive.
- */
-static int
-new_enough(struct bsdtar *bsdtar, const char *path, const struct stat *st)
-{
-	struct archive_dir_entry *p;
-
-	/*
-	 * If this file/dir is excluded by a time comparison, skip it.
-	 */
-	if (bsdtar->newer_ctime_filter) {
-		if (st->st_ctime < bsdtar->newer_ctime_sec)
-			return (0); /* Too old, skip it. */
-		if (st->st_ctime =3D=3D bsdtar->newer_ctime_sec
-		    && ARCHIVE_STAT_CTIME_NANOS(st)
-		    <=3D bsdtar->newer_ctime_nsec)
-			return (0); /* Too old, skip it. */
-	}
-	if (bsdtar->newer_mtime_filter) {
-		if (st->st_mtime < bsdtar->newer_mtime_sec)
-			return (0); /* Too old, skip it. */
-		if (st->st_mtime =3D=3D bsdtar->newer_mtime_sec
-		    && ARCHIVE_STAT_MTIME_NANOS(st)
-		    <=3D bsdtar->newer_mtime_nsec)
-			return (0); /* Too old, skip it. */
-	}
-
-	/*
-	 * In -u mode, we only write an entry if it's newer than
-	 * what was already in the archive.
-	 */
-	if (bsdtar->archive_dir !=3D NULL &&
-	    bsdtar->archive_dir->head !=3D NULL) {
-		for (p =3D bsdtar->archive_dir->head; p !=3D NULL; p =3D p->next) {
-			if (pathcmp(path, p->name)=3D=3D0)
-				return (p->mtime_sec < st->st_mtime ||
-				    (p->mtime_sec =3D=3D st->st_mtime &&
-					p->mtime_nsec
-					< ARCHIVE_STAT_MTIME_NANOS(st)));
-		}
-	}
-
-	/* If the file wasn't rejected, include it. */
-	return (1);
-}
-
-/*
- * Add an entry to the dir list for 'u' mode.
- *
- * XXX TODO: Make this fast.
- */
-static void
-add_dir_list(struct bsdtar *bsdtar, const char *path,
-    time_t mtime_sec, int mtime_nsec)
-{
-	struct archive_dir_entry	*p;
-
-	/*
-	 * Search entire list to see if this file has appeared before.
-	 * If it has, override the timestamp data.
-	 */
-	p =3D bsdtar->archive_dir->head;
-	while (p !=3D NULL) {
-		if (strcmp(path, p->name)=3D=3D0) {
-			p->mtime_sec =3D mtime_sec;
-			p->mtime_nsec =3D mtime_nsec;
-			return;
-		}
-		p =3D p->next;
-	}
-
-	p =3D malloc(sizeof(*p));
-	if (p =3D=3D NULL)
-		lafe_errc(1, ENOMEM, "Can't read archive directory");
-
-	p->name =3D strdup(path);
-	if (p->name =3D=3D NULL)
-		lafe_errc(1, ENOMEM, "Can't read archive directory");
-	p->mtime_sec =3D mtime_sec;
-	p->mtime_nsec =3D mtime_nsec;
-	p->next =3D NULL;
-	if (bsdtar->archive_dir->tail =3D=3D NULL) {
-		bsdtar->archive_dir->head =3D bsdtar->archive_dir->tail =3D p;
-	} else {
-		bsdtar->archive_dir->tail->next =3D p;
-		bsdtar->archive_dir->tail =3D p;
-	}
-}
-
 static void
 test_for_append(struct bsdtar *bsdtar)
 {
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/llvm/tools/clang/lib/Driv=
er/Tools.cpp
--- a/head/contrib/llvm/tools/clang/lib/Driver/Tools.cpp	Mon Jul 30 11:44:1=
8 2012 +0300
+++ b/head/contrib/llvm/tools/clang/lib/Driver/Tools.cpp	Fri Aug 10 14:19:2=
5 2012 +0300
@@ -4745,6 +4745,14 @@
   const Driver &D =3D getToolChain().getDriver();
   ArgStringList CmdArgs;
=20
+  // Silence warning for "clang -g foo.o -o foo"
+  Args.ClaimAllArgs(options::OPT_g_Group);
+  // and "clang -emit-llvm foo.o -o foo"
+  Args.ClaimAllArgs(options::OPT_emit_llvm);
+  // and for "clang -w foo.o -o foo". Other warning options are already
+  // handled somewhere else.
+  Args.ClaimAllArgs(options::OPT_w);
+
   if (!D.SysRoot.empty())
     CmdArgs.push_back(Args.MakeArgString("--sysroot=3D" + D.SysRoot));
=20
@@ -4761,8 +4769,10 @@
       CmdArgs.push_back("/libexec/ld-elf.so.1");
     }
     llvm::Triple::ArchType Arch =3D getToolChain().getArch();
-    if (Arch =3D=3D llvm::Triple::x86 || Arch =3D=3D llvm::Triple::x86_64)
+    if (Arch =3D=3D llvm::Triple::arm || Arch =3D=3D llvm::Triple::sparc ||
+        Arch =3D=3D llvm::Triple::x86 || Arch =3D=3D llvm::Triple::x86_64)
       CmdArgs.push_back("--hash-style=3Dboth");
+    CmdArgs.push_back("--enable-new-dtags");
   }
=20
   // When building 32-bit code on FreeBSD/amd64, we have to explicitly
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/opie/libopie/hash.c
--- a/head/contrib/opie/libopie/hash.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/opie/libopie/hash.c	Fri Aug 10 14:19:25 2012 +0300
@@ -14,9 +14,11 @@
               they killed thread-safety.
         Created by cmetz for OPIE 2.3 using the old hash.c as a guide.
=20
-$FreeBSD$
+$FreeBSD: head/contrib/opie/libopie/hash.c 239169 2012-08-10 04:48:58Z del=
phij $
 */
=20
+#include <sys/endian.h>
+
 #include "opie_cfg.h"
 #include "opie.h"
=20
@@ -39,6 +41,13 @@
       SHA1_Final((unsigned char *)digest, &sha);
       results[0] =3D digest[0] ^ digest[2] ^ digest[4];
       results[1] =3D digest[1] ^ digest[3];
+
+      /*
+       * RFC2289 mandates that we convert SHA1 digest from big-endian to l=
ittle
+       * see Appendix A.
+       */
+      results[0] =3D bswap32(results[0]);
+      results[1] =3D bswap32(results[1]);
       };
       break;
     case 4:
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/contrib/opie/libopie/hashlen.c
--- a/head/contrib/opie/libopie/hashlen.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/contrib/opie/libopie/hashlen.c	Fri Aug 10 14:19:25 2012 +0300
@@ -11,9 +11,11 @@
 	Modified by cmetz for OPIE 2.4. Use struct opie_otpkey, isolate variables.
 	Created by cmetz for OPIE 2.3.
=20
-$FreeBSD$
+$FreeBSD: head/contrib/opie/libopie/hashlen.c 239169 2012-08-10 04:48:58Z =
delphij $
 */
=20
+#include <sys/endian.h>
+
 #include "opie_cfg.h"
 #include "opie.h"
=20
@@ -36,6 +38,13 @@
       SHA1_Final((unsigned char *)digest, &sha);
       results[0] =3D digest[0] ^ digest[2] ^ digest[4];
       results[1] =3D digest[1] ^ digest[3];
+
+      /*
+       * RFC2289 mandates that we convert SHA1 digest from big-endian to l=
ittle
+       * see Appendix A.
+       */
+      results[0] =3D bswap32(results[0]);
+      results[1] =3D bswap32(results[1]);
       break;
     }
     case 4: {
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/etc/devd/usb.conf
--- a/head/etc/devd/usb.conf	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/etc/devd/usb.conf	Fri Aug 10 14:19:25 2012 +0300
@@ -1,5 +1,5 @@
 #
-# $FreeBSD: head/etc/devd/usb.conf 235725 2012-05-21 15:01:35Z hselasky $
+# $FreeBSD: head/etc/devd/usb.conf 239056 2012-08-05 11:53:16Z hselasky $
 #
 # This file was automatically generated by "tools/bus_autoconf.sh".
 # Please do not edit!
@@ -157,7 +157,7 @@
 	match "bus" "uhub[0-9]+";
 	match "mode" "host";
 	match "vendor" "0x0403";
-	match "product" "(0x6001|0x6004|0x6010|0x6011|0x8372|0x9e90|0xcc48|0xcc49=
|0xcc4a|0xd678|0xe6c8|0xe888|0xe889|0xe88a|0xe88b|0xe88c|0xee18|0xf608|0xf6=
0b|0xf850|0xfa00|0xfa01|0xfa02|0xfa03|0xfa04|0xfc08|0xfc09|0xfc0b|0xfc0c|0x=
fc0d|0xfc82)";
+	match "product" "(0x6001|0x6004|0x6006|0x6010|0x6011|0x6014|0x8372|0x9378=
|0x9379|0x937a|0x937c|0x9868|0x9e90|0x9f80|0xa6d0|0xabb8|0xb810|0xb811|0xb8=
12|0xbaf8|0xbca0|0xbca1|0xbca2|0xbca4|0xbcd8|0xbcd9|0xbdc8|0xbfd8|0xbfd9|0x=
bfda|0xbfdb|0xbfdc|0xc7d0|0xc850|0xc991|0xcaa0|0xcc48|0xcc49|0xcc4a|0xd010|=
0xd011|0xd012|0xd013|0xd014|0xd015|0xd016|0xd017|0xd070|0xd071|0xd388|0xd38=
9|0xd38a|0xd38b|0xd38c|0xd38d|0xd38e|0xd38f|0xd578|0xd678|0xd738|0xd780|0xd=
af8|0xdaf9|0xdafa|0xdafb|0xdafc|0xdafd|0xdafe|0xdaff|0xdc00|0xdc01|0xdd20|0=
xdf28|0xdf30|0xdf31|0xdf32|0xdf33|0xdf35|0xe000|0xe001|0xe002|0xe004|0xe006=
|0xe008|0xe009|0xe00a|0xe050|0xe0e8|0xe0e9|0xe0ea|0xe0eb|0xe0ec|0xe0ed|0xe0=
ee|0xe0ef|0xe0f0|0xe0f1|0xe0f2|0xe0f3|0xe0f4|0xe0f5|0xe0f6|0xe0f7|0xe40b|0x=
e520|0xe548|0xe6c8|0xe700|0xe729|0xe808|0xe809|0xe80a|0xe80b|0xe80c|0xe80d|=
0xe80e|0xe80f|0xe888|0xe889|0xe88a|0xe88b|0xe88c|0xe88d|0xe88e|0xe88f|0xea9=
0|0xebe0|0xec88|0xec89|0xed22|0xed71|0xed72|0xed73|0xed74|0xee18|0xeee8|0xe=
ee9|0xeeea|0xeeeb|0xeeec|0xeeed|0xeeee|0xeeef|0xef50|0xef51|0xf068|0xf069|0=
xf06a|0xf06b|0xf06c|0xf06d|0xf06e|0xf06f|0xf070|0xf0c0|0xf0c8|0xf208|0xf2d0=
|0xf3c0|0xf3c1|0xf3c2|0xf448|0xf449|0xf44a|0xf44b|0xf44c|0xf460|0xf608|0xf6=
0b|0xf680|0xf850|0xf857|0xf9d0|0xf9d1|0xf9d2|0xf9d3|0xf9d4|0xf9d5|0xfa00|0x=
fa01|0xfa02|0xfa03|0xfa04|0xfa05|0xfa06|0xfa10|0xfa33|0xfa88|0xfad0|0xfaf0|=
0xfb58|0xfb59|0xfb5a|0xfb5b|0xfb5c|0xfb5d|0xfb5e|0xfb5f|0xfb80|0xfb99|0xfbf=
a|0xfc08|0xfc09|0xfc0a|0xfc0b|0xfc0c|0xfc0d|0xfc0e|0xfc0f|0xfc60|0xfc70|0xf=
c71|0xfc72|0xfc73|0xfc82|0xfd60|0xfe38|0xff00|0xff18|0xff1c|0xff1d|0xff20|0=
xff38|0xff39|0xff3a|0xff3b|0xff3c|0xff3d|0xff3e|0xff3f|0xffa8)";
 	action "kldload -n uftdi";
 };
=20
@@ -293,7 +293,7 @@
 	match "bus" "uhub[0-9]+";
 	match "mode" "host";
 	match "vendor" "0x0411";
-	match "product" "(0x0148|0x0150|0x015d|0x016f|0x01a2)";
+	match "product" "(0x0148|0x0150|0x015d|0x016f|0x01a2|0x01ee)";
 	action "kldload -n if_run";
 };
=20
@@ -324,6 +324,14 @@
 nomatch 32 {
 	match "bus" "uhub[0-9]+";
 	match "mode" "host";
+	match "vendor" "0x0456";
+	match "product" "(0xf000|0xf001)";
+	action "kldload -n uftdi";
+};
+
+nomatch 32 {
+	match "bus" "uhub[0-9]+";
+	match "mode" "host";
 	match "vendor" "0x045a";
 	match "product" "(0x5001|0x5002)";
 	action "kldload -n urio";
@@ -1021,7 +1029,7 @@
 	match "bus" "uhub[0-9]+";
 	match "mode" "host";
 	match "vendor" "0x05c6";
-	match "product" "(0x1000|0x6000|0x6613|0x9000)";
+	match "product" "(0x1000|0x6000|0x6613|0x9000|0x9204|0x9205)";
 	action "kldload -n u3g";
 };
=20
@@ -1068,6 +1076,14 @@
 nomatch 32 {
 	match "bus" "uhub[0-9]+";
 	match "mode" "host";
+	match "vendor" "0x0647";
+	match "product" "0x0100";
+	action "kldload -n uftdi";
+};
+
+nomatch 32 {
+	match "bus" "uhub[0-9]+";
+	match "mode" "host";
 	match "vendor" "0x066b";
 	match "product" "(0x200c|0x2202)";
 	action "kldload -n if_aue";
@@ -1109,7 +1125,7 @@
 	match "bus" "uhub[0-9]+";
 	match "mode" "host";
 	match "vendor" "0x067b";
-	match "product" "(0x04bb|0x0609|0x0611|0x0612|0x1234|0x206a|0x2303)";
+	match "product" "(0x0307|0x04bb|0x0609|0x0611|0x0612|0x1234|0x206a|0x2303=
)";
 	action "kldload -n uplcom";
 };
=20
@@ -1156,6 +1172,14 @@
 nomatch 32 {
 	match "bus" "uhub[0-9]+";
 	match "mode" "host";
+	match "vendor" "0x06ce";
+	match "product" "0x8311";
+	action "kldload -n uftdi";
+};
+
+nomatch 32 {
+	match "bus" "uhub[0-9]+";
+	match "mode" "host";
 	match "vendor" "0x06e1";
 	match "product" "(0x0008|0x0009)";
 	action "kldload -n if_kue";
@@ -1301,7 +1325,7 @@
 	match "bus" "uhub[0-9]+";
 	match "mode" "host";
 	match "vendor" "0x0789";
-	match "product" "(0x0162|0x0163|0x0164|0x0166)";
+	match "product" "(0x0162|0x0163|0x0164|0x0166|0x0168)";
 	action "kldload -n if_run";
 };
=20
@@ -1653,7 +1677,7 @@
 	match "bus" "uhub[0-9]+";
 	match "mode" "host";
 	match "vendor" "0x0856";
-	match "product" "0xac01";
+	match "product" "(0xac01|0xac02|0xac03|0xac11|0xac12|0xac16|0xac17|0xac18=
|0xac19|0xac25|0xac26|0xac27|0xac33|0xac34|0xac49|0xac50|0xba02)";
 	action "kldload -n uftdi";
 };
=20
@@ -1876,6 +1900,14 @@
 nomatch 32 {
 	match "bus" "uhub[0-9]+";
 	match "mode" "host";
+	match "vendor" "0x0acd";
+	match "product" "0x0300";
+	action "kldload -n uftdi";
+};
+
+nomatch 32 {
+	match "bus" "uhub[0-9]+";
+	match "mode" "host";
 	match "vendor" "0x0ace";
 	match "product" "(0x1211|0x1215)";
 	action "kldload -n if_zyd";
@@ -2045,6 +2077,14 @@
 	match "bus" "uhub[0-9]+";
 	match "mode" "host";
 	match "vendor" "0x0b39";
+	match "product" "0x0103";
+	action "kldload -n uftdi";
+};
+
+nomatch 32 {
+	match "bus" "uhub[0-9]+";
+	match "mode" "host";
+	match "vendor" "0x0b39";
 	match "product" "0x0109";
 	action "kldload -n if_aue";
 };
@@ -2172,6 +2212,22 @@
 nomatch 32 {
 	match "bus" "uhub[0-9]+";
 	match "mode" "host";
+	match "vendor" "0x0c26";
+	match "product" "(0x0004|0x0009|0x000a|0x000b|0x000c|0x000d|0x0010|0x0011=
|0x0012|0x0013|0x0018)";
+	action "kldload -n uftdi";
+};
+
+nomatch 32 {
+	match "bus" "uhub[0-9]+";
+	match "mode" "host";
+	match "vendor" "0x0c33";
+	match "product" "0x0010";
+	action "kldload -n uftdi";
+};
+
+nomatch 32 {
+	match "bus" "uhub[0-9]+";
+	match "mode" "host";
 	match "vendor" "0x0c44";
 	match "product" "0x03a2";
 	action "kldload -n uipaq";
@@ -2180,6 +2236,30 @@
 nomatch 32 {
 	match "bus" "uhub[0-9]+";
 	match "mode" "host";
+	match "vendor" "0x0c52";
+	match "product" "(0x2101|0x2102|0x2103|0x2104|0x2211|0x2212|0x2213|0x2221=
|0x2222|0x2223|0x2411|0x2412|0x2413|0x2421|0x2422|0x2423|0x2431|0x2432|0x24=
33|0x2441|0x2442|0x2443|0x2811|0x2812|0x2813|0x2821|0x2822|0x2823|0x2831|0x=
2832|0x2833|0x2841|0x2842|0x2843|0x2851|0x2852|0x2853|0x2861|0x2862|0x2863|=
0x2871|0x2872|0x2873|0x2881|0x2882|0x2883|0x9020)";
+	action "kldload -n uftdi";
+};
+
+nomatch 32 {
+	match "bus" "uhub[0-9]+";
+	match "mode" "host";
+	match "vendor" "0x0c6c";
+	match "product" "0x04b2";
+	action "kldload -n uftdi";
+};
+
+nomatch 32 {
+	match "bus" "uhub[0-9]+";
+	match "mode" "host";
+	match "vendor" "0x0c7d";
+	match "product" "0x0005";
+	action "kldload -n uftdi";
+};
+
+nomatch 32 {
+	match "bus" "uhub[0-9]+";
+	match "mode" "host";
 	match "vendor" "0x0c88";
 	match "product" "0x17da";
 	action "kldload -n u3g";
@@ -2276,6 +2356,22 @@
 nomatch 32 {
 	match "bus" "uhub[0-9]+";
 	match "mode" "host";
+	match "vendor" "0x0d3a";
+	match "product" "0x0300";
+	action "kldload -n uftdi";
+};
+
+nomatch 32 {
+	match "bus" "uhub[0-9]+";
+	match "mode" "host";
+	match "vendor" "0x0d46";
+	match "product" "(0x2020|0x2021)";
+	action "kldload -n uftdi";
+};
+
+nomatch 32 {
+	match "bus" "uhub[0-9]+";
+	match "mode" "host";
 	match "vendor" "0x0d8e";
 	match "product" "0x3762";
 	action "kldload -n if_upgt";
@@ -2340,6 +2436,14 @@
 nomatch 32 {
 	match "bus" "uhub[0-9]+";
 	match "mode" "host";
+	match "vendor" "0x0dcd";
+	match "product" "0x0001";
+	action "kldload -n uftdi";
+};
+
+nomatch 32 {
+	match "bus" "uhub[0-9]+";
+	match "mode" "host";
 	match "vendor" "0x0df6";
 	match "product" "0x000d";
 	action "kldload -n if_urtw";
@@ -2557,7 +2661,7 @@
 	match "bus" "uhub[0-9]+";
 	match "mode" "host";
 	match "vendor" "0x0f94";
-	match "product" "0x0001";
+	match "product" "(0x0001|0x0005)";
 	action "kldload -n uftdi";
 };
=20
@@ -2588,6 +2692,14 @@
 nomatch 32 {
 	match "bus" "uhub[0-9]+";
 	match "mode" "host";
+	match "vendor" "0x0fd8";
+	match "product" "0x0001";
+	action "kldload -n uftdi";
+};
+
+nomatch 32 {
+	match "bus" "uhub[0-9]+";
+	match "mode" "host";
 	match "vendor" "0x0fe6";
 	match "product" "(0x8101|0x9700)";
 	action "kldload -n if_udav";
@@ -2612,6 +2724,14 @@
 nomatch 32 {
 	match "bus" "uhub[0-9]+";
 	match "mode" "host";
+	match "vendor" "0x103e";
+	match "product" "0x03e8";
+	action "kldload -n uftdi";
+};
+
+nomatch 32 {
+	match "bus" "uhub[0-9]+";
+	match "mode" "host";
 	match "vendor" "0x1044";
 	match "product" "0x8001";
 	action "kldload -n if_ural";
@@ -2725,7 +2845,7 @@
 	match "bus" "uhub[0-9]+";
 	match "mode" "host";
 	match "vendor" "0x10c4";
-	match "product" "(0x8066|0x806f|0x807a|0x80ca|0x80dd|0x80ed|0x80f6|0x8115=
|0x813d|0x813f|0x814a|0x814a|0x814b|0x8156|0x815e|0x818b|0x819f|0x81a6|0x81=
ac|0x81ad|0x81c8|0x81e2|0x81e7|0x81e8|0x81f2|0x8218|0x822b|0x826b|0x8293|0x=
82f9|0x8341|0x8382|0x83a8|0x8411|0x846e|0x8477|0xea60|0xea61|0xea71|0xf001|=
0xf002|0xf003|0xf004)";
+	match "product" "(0x8066|0x806f|0x807a|0x80c4|0x80ca|0x80dd|0x80ed|0x80f6=
|0x8115|0x813d|0x813f|0x814a|0x814a|0x814b|0x8156|0x815e|0x815f|0x818b|0x81=
9f|0x81a6|0x81a9|0x81ac|0x81ad|0x81c8|0x81e2|0x81e7|0x81e8|0x81f2|0x8218|0x=
822b|0x826b|0x8293|0x82f9|0x8341|0x8382|0x83a8|0x83d8|0x8411|0x8418|0x846e|=
0x8477|0x85ea|0x85eb|0x8664|0x8665|0xea60|0xea61|0xea70|0xea71|0xea80|0xf00=
1|0xf002|0xf003|0xf004)";
 	action "kldload -n uslcom";
 };
=20
@@ -2900,6 +3020,14 @@
 nomatch 32 {
 	match "bus" "uhub[0-9]+";
 	match "mode" "host";
+	match "vendor" "0x1209";
+	match "product" "(0x1002|0x1006)";
+	action "kldload -n uftdi";
+};
+
+nomatch 32 {
+	match "bus" "uhub[0-9]+";
+	match "mode" "host";
 	match "vendor" "0x1231";
 	match "product" "(0xce01|0xce02)";
 	action "kldload -n uipaq";
@@ -2916,6 +3044,14 @@
 nomatch 32 {
 	match "bus" "uhub[0-9]+";
 	match "mode" "host";
+	match "vendor" "0x128d";
+	match "product" "0x0001";
+	action "kldload -n uftdi";
+};
+
+nomatch 32 {
+	match "bus" "uhub[0-9]+";
+	match "mode" "host";
 	match "vendor" "0x129b";
 	match "product" "0x1666";
 	action "kldload -n if_zyd";
@@ -2933,7 +3069,7 @@
 	match "bus" "uhub[0-9]+";
 	match "mode" "host";
 	match "vendor" "0x12d1";
-	match "product" "(0x1001|0x1003|0x1004|0x1401|0x1402|0x1403|0x1404|0x1405=
|0x1406|0x1407|0x1408|0x1409|0x140a|0x140b|0x140c|0x140d|0x140e|0x140f|0x14=
10|0x1411|0x1412|0x1413|0x1414|0x1415|0x1416|0x1417|0x1418|0x1419|0x141a|0x=
141b|0x141c|0x141d|0x141e|0x141f|0x1420|0x1421|0x1422|0x1423|0x1424|0x1425|=
0x1426|0x1427|0x1428|0x1429|0x142a|0x142b|0x142c|0x142d|0x142e|0x142f|0x143=
0|0x1431|0x1432|0x1433|0x1434|0x1435|0x1436|0x1437|0x1438|0x1439|0x143a|0x1=
43b|0x143c|0x143d|0x143e|0x143f|0x1446|0x1465|0x14ac|0x1520|0x1c05|0x1c0b)";
+	match "product" "(0x1001|0x1003|0x1004|0x1401|0x1402|0x1403|0x1404|0x1405=
|0x1406|0x1407|0x1408|0x1409|0x140a|0x140b|0x140c|0x140d|0x140e|0x140f|0x14=
10|0x1411|0x1412|0x1413|0x1414|0x1415|0x1416|0x1417|0x1418|0x1419|0x141a|0x=
141b|0x141c|0x141d|0x141e|0x141f|0x1420|0x1421|0x1422|0x1423|0x1424|0x1425|=
0x1426|0x1427|0x1428|0x1429|0x142a|0x142b|0x142c|0x142d|0x142e|0x142f|0x143=
0|0x1431|0x1432|0x1433|0x1434|0x1435|0x1436|0x1437|0x1438|0x1439|0x143a|0x1=
43b|0x143c|0x143d|0x143e|0x143f|0x1446|0x1465|0x14ac|0x14fe|0x1505|0x1506|0=
x1520|0x1803|0x1c05|0x1c0b)";
 	action "kldload -n u3g";
 };
=20
@@ -2949,6 +3085,14 @@
 	match "bus" "uhub[0-9]+";
 	match "mode" "host";
 	match "vendor" "0x1342";
+	match "product" "0x0202";
+	action "kldload -n uftdi";
+};
+
+nomatch 32 {
+	match "bus" "uhub[0-9]+";
+	match "mode" "host";
+	match "vendor" "0x1342";
 	match "product" "0x0204";
 	action "kldload -n if_kue";
 };
@@ -3108,6 +3252,14 @@
 nomatch 32 {
 	match "bus" "uhub[0-9]+";
 	match "mode" "host";
+	match "vendor" "0x1457";
+	match "product" "(0x5118|0x5118)";
+	action "kldload -n uftdi";
+};
+
+nomatch 32 {
+	match "bus" "uhub[0-9]+";
+	match "mode" "host";
 	match "vendor" "0x1472";
 	match "product" "0x0009";
 	action "kldload -n if_rum";
@@ -3332,6 +3484,14 @@
 nomatch 32 {
 	match "bus" "uhub[0-9]+";
 	match "mode" "host";
+	match "vendor" "0x15ba";
+	match "product" "(0x0003|0x002b)";
+	action "kldload -n uftdi";
+};
+
+nomatch 32 {
+	match "bus" "uhub[0-9]+";
+	match "mode" "host";
 	match "vendor" "0x15c5";
 	match "product" "0x0008";
 	action "kldload -n if_run";
@@ -3381,7 +3541,7 @@
 	match "bus" "uhub[0-9]+";
 	match "mode" "host";
 	match "vendor" "0x166a";
-	match "product" "0x0303";
+	match "product" "(0x0101|0x0201|0x0301|0x0303|0x0304|0x0305|0x0401)";
 	action "kldload -n uslcom";
 };
=20
@@ -3477,7 +3637,7 @@
 	match "bus" "uhub[0-9]+";
 	match "mode" "host";
 	match "vendor" "0x16d6";
-	match "product" "(0x0001|0x0001)";
+	match "product" "0x0001";
 	action "kldload -n uslcom";
 };
=20
@@ -3596,6 +3756,22 @@
 nomatch 32 {
 	match "bus" "uhub[0-9]+";
 	match "mode" "host";
+	match "vendor" "0x1781";
+	match "product" "0x0c30";
+	action "kldload -n uftdi";
+};
+
+nomatch 32 {
+	match "bus" "uhub[0-9]+";
+	match "mode" "host";
+	match "vendor" "0x17a8";
+	match "product" "(0x0001|0x0005)";
+	action "kldload -n uslcom";
+};
+
+nomatch 32 {
+	match "bus" "uhub[0-9]+";
+	match "mode" "host";
 	match "vendor" "0x17f4";
 	match "product" "0xaaaa";
 	action "kldload -n uslcom";
@@ -3676,6 +3852,14 @@
 nomatch 32 {
 	match "bus" "uhub[0-9]+";
 	match "mode" "host";
+	match "vendor" "0x1a79";
+	match "product" "0x6001";
+	action "kldload -n uftdi";
+};
+
+nomatch 32 {
+	match "bus" "uhub[0-9]+";
+	match "mode" "host";
 	match "vendor" "0x1a86";
 	match "product" "0x7523";
 	action "kldload -n uchcom";
@@ -3693,7 +3877,7 @@
 	match "bus" "uhub[0-9]+";
 	match "mode" "host";
 	match "vendor" "0x1b3d";
-	match "product" "0x0153";
+	match "product" "(0x0100|0x0101|0x0102|0x0103|0x0104|0x0105|0x0106|0x0107=
|0x0108|0x0109|0x010a|0x010b|0x010c|0x010d|0x010e|0x010f|0x0110|0x0111|0x01=
12|0x0113|0x0114|0x0115|0x0116|0x0117|0x0118|0x0119|0x011a|0x011b|0x011c|0x=
011d|0x011e|0x011f|0x0120|0x0121|0x0122|0x0123|0x0124|0x0125|0x0126|0x0128|=
0x0129|0x012a|0x012b|0x012d|0x012e|0x012f|0x0130|0x0131|0x0132|0x0133|0x013=
4|0x0135|0x0136|0x0137|0x0138|0x0139|0x013a|0x013b|0x013c|0x013d|0x013e|0x0=
13f|0x0140|0x0141|0x0142|0x0143|0x0144|0x0145|0x0146|0x0147|0x0148|0x0149|0=
x014a|0x014b|0x014c|0x014d|0x014e|0x014f|0x0150|0x0151|0x0152|0x0153|0x0159=
|0x015a|0x015b|0x015c|0x015d|0x015e|0x015f|0x0160|0x0161|0x0162|0x0163|0x01=
64|0x0165|0x0166|0x0167|0x0168|0x0169|0x016a|0x016b|0x016c|0x016d|0x016e|0x=
016f|0x0170|0x0171|0x0172|0x0173|0x0174|0x0175|0x0176|0x0177|0x0178|0x0179|=
0x017a|0x017b|0x017c|0x017d|0x017e|0x017f|0x0180|0x0181|0x0182|0x0183|0x018=
4|0x0185|0x0186|0x0187|0x0188|0x0189|0x018a|0x018b|0x018c|0x018d|0x018e|0x0=
18f|0x0190|0x0191|0x0192|0x0193|0x0194|0x0195|0x0196|0x0197|0x0198|0x0199|0=
x019a|0x019b|0x019c|0x019d|0x019e|0x019f|0x01a0|0x01a1|0x01a2|0x01a3|0x01a4=
|0x01a5|0x01a6|0x01a7|0x01a8|0x01a9|0x01aa|0x01ab|0x01ac|0x01ad|0x01ae|0x01=
af|0x01b0|0x01b1|0x01b2|0x01b3|0x01b4|0x01b5|0x01b6|0x01b7|0x01b8|0x01b9|0x=
01ba|0x01bb|0x01bc|0x01bd|0x01be|0x01bf|0x01c0|0x01c1|0x01c2|0x01c3|0x01c4|=
0x01c5|0x01c6|0x01c7|0x01c8|0x01c9|0x01ca|0x01cb|0x01cc|0x01cd|0x01ce|0x01c=
f|0x01d0|0x01d1|0x01d2|0x01d3|0x01d4|0x01d5|0x01d6|0x01d7|0x01d8|0x01d9|0x0=
1da|0x01db|0x01dc|0x01dd|0x01de|0x01df|0x01e0|0x01e1|0x01e2|0x01e3|0x01e4|0=
x01e5|0x01e6|0x01e7|0x01e8|0x01e9|0x01ea|0x01eb|0x01ec|0x01ed|0x01ee|0x01ef=
|0x01f0|0x01f1|0x01f2|0x01f3|0x01f4|0x01f5|0x01f6|0x01f7|0x01f8|0x01f9|0x01=
fa|0x01fb|0x01fc|0x01fd|0x01fe|0x01ff)";
 	action "kldload -n uftdi";
 };
=20
@@ -3716,6 +3900,14 @@
 nomatch 32 {
 	match "bus" "uhub[0-9]+";
 	match "mode" "host";
+	match "vendor" "0x1b91";
+	match "product" "0x0064";
+	action "kldload -n uftdi";
+};
+
+nomatch 32 {
+	match "bus" "uhub[0-9]+";
+	match "mode" "host";
 	match "vendor" "0x1bbb";
 	match "product" "(0x0000|0xf000)";
 	action "kldload -n u3g";
@@ -3732,6 +3924,14 @@
 nomatch 32 {
 	match "bus" "uhub[0-9]+";
 	match "mode" "host";
+	match "vendor" "0x1bc9";
+	match "product" "0x6001";
+	action "kldload -n uftdi";
+};
+
+nomatch 32 {
+	match "bus" "uhub[0-9]+";
+	match "mode" "host";
 	match "vendor" "0x1be3";
 	match "product" "0x07a6";
 	action "kldload -n uslcom";
@@ -3740,6 +3940,14 @@
 nomatch 32 {
 	match "bus" "uhub[0-9]+";
 	match "mode" "host";
+	match "vendor" "0x1c0c";
+	match "product" "0x0102";
+	action "kldload -n uftdi";
+};
+
+nomatch 32 {
+	match "bus" "uhub[0-9]+";
+	match "mode" "host";
 	match "vendor" "0x1c9e";
 	match "product" "(0x6061|0x9603|0x9605|0xf000)";
 	action "kldload -n u3g";
@@ -3788,6 +3996,14 @@
 nomatch 32 {
 	match "bus" "uhub[0-9]+";
 	match "mode" "host";
+	match "vendor" "0x1e29";
+	match "product" "(0x0102|0x0501)";
+	action "kldload -n uslcom";
+};
+
+nomatch 32 {
+	match "bus" "uhub[0-9]+";
+	match "mode" "host";
 	match "vendor" "0x1eda";
 	match "product" "0x2310";
 	action "kldload -n if_run";
@@ -3924,6 +4140,14 @@
 nomatch 32 {
 	match "bus" "uhub[0-9]+";
 	match "mode" "host";
+	match "vendor" "0x20b7";
+	match "product" "0x0713";
+	action "kldload -n uftdi";
+};
+
+nomatch 32 {
+	match "bus" "uhub[0-9]+";
+	match "mode" "host";
 	match "vendor" "0x20b8";
 	match "product" "0x8888";
 	action "kldload -n if_run";
@@ -3940,6 +4164,14 @@
 nomatch 32 {
 	match "bus" "uhub[0-9]+";
 	match "mode" "host";
+	match "vendor" "0x2100";
+	match "product" "(0x9e52|0x9e54)";
+	action "kldload -n uftdi";
+};
+
+nomatch 32 {
+	match "bus" "uhub[0-9]+";
+	match "mode" "host";
 	match "vendor" "0x22b8";
 	match "product" "(0x4204|0x4214|0x4224|0x4234|0x4244)";
 	action "kldload -n uipaq";
@@ -3964,6 +4196,14 @@
 nomatch 32 {
 	match "bus" "uhub[0-9]+";
 	match "mode" "host";
+	match "vendor" "0x3195";
+	match "product" "(0xf190|0xf280|0xf281)";
+	action "kldload -n uslcom";
+};
+
+nomatch 32 {
+	match "bus" "uhub[0-9]+";
+	match "mode" "host";
 	match "vendor" "0x3334";
 	match "product" "0x1701";
 	action "kldload -n if_aue";
@@ -4052,6 +4292,14 @@
 nomatch 32 {
 	match "bus" "uhub[0-9]+";
 	match "mode" "host";
+	match "vendor" "0x5050";
+	match "product" "(0x0100|0x0101|0x0102|0x0103|0x0104|0x0105|0x0106|0x0107=
|0x0300|0x0301|0x0400|0x0500|0x0700|0x0800|0x0900|0x0a00|0x0b00|0x0c00|0x0d=
00|0x0e00|0x0f00|0x1000|0x8000|0x8001|0x8002|0x8003|0x8004|0x8005)";
+	action "kldload -n uftdi";
+};
+
+nomatch 32 {
+	match "bus" "uhub[0-9]+";
+	match "mode" "host";
 	match "vendor" "0x5173";
 	match "product" "0x1809";
 	action "kldload -n if_zyd";
@@ -4204,6 +4452,14 @@
 nomatch 32 {
 	match "bus" "uhub[0-9]+";
 	match "mode" "host";
+	match "vendor" "0xdeee";
+	match "product" "(0x0300|0x0302|0x0303)";
+	action "kldload -n uftdi";
+};
+
+nomatch 32 {
+	match "bus" "uhub[0-9]+";
+	match "mode" "host";
 	match "intclass" "0x02";
 	match "intsubclass" "0x02";
 	match "intprotocol" "0x01";
@@ -4344,5 +4600,5 @@
 	action "kldload -n umass";
 };
=20
-# 1654 USB entries processed
-
+# 2271 USB entries processed
+
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/games/fortune/datfiles/fortunes
--- a/head/games/fortune/datfiles/fortunes	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/games/fortune/datfiles/fortunes	Fri Aug 10 14:19:25 2012 +0300
@@ -1,5 +1,5 @@
 This fortune brought to you by:
-$FreeBSD: head/games/fortune/datfiles/fortunes 228938 2011-12-28 22:18:53Z=
 dougb $
+$FreeBSD: head/games/fortune/datfiles/fortunes 238879 2012-07-29 01:01:35Z=
 dougb $
 %
 =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
 ||								     ||
@@ -22100,6 +22100,11 @@
 world that they like, but catnip is crack from home.
 		-- Bill Cole
 %
+I am only one, but I am one.  I cannot do everything, but I can do
+something.  And I will not let what I cannot do interfere with what
+I can do.
+		-- Edward Everett Hale, (1822 - 1909)
+%
 I am professionally trained in computer science, which is to say
 (in all seriousness) that I am extremely poorly educated.
 		-- Joseph Weizenbaum, "Computer Power and Human Reason"
@@ -31413,6 +31418,10 @@
 %
 Look out!  Behind you!=07=07=07
 %
+Look up and not down, look forward and not back, look out and not in,
+and lend a hand.
+		-- Edward Everett Hale, "Lowell Institute Lectures" (1869)
+%
 Look, we play the Star Spangled Banner before every game.  You want us
 to pay income taxes, too?
 		-- Bill Veeck, Chicago White Sox
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/gnu/usr.bin/groff/tmac/mdoc.local
--- a/head/gnu/usr.bin/groff/tmac/mdoc.local	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/gnu/usr.bin/groff/tmac/mdoc.local	Fri Aug 10 14:19:25 2012 +0300
@@ -22,7 +22,7 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\" $FreeBSD: head/gnu/usr.bin/groff/tmac/mdoc.local 228351 2011-12-08 13:=
54:06Z ru $
+.\" $FreeBSD: head/gnu/usr.bin/groff/tmac/mdoc.local 238799 2012-07-26 11:=
10:25Z ru $
 .\"
 .\"     %beginstrip%
 .
@@ -42,6 +42,7 @@
 .ds doc-str-Lb-libproc     Processor Monitoring and Analysis Library (libp=
roc, \-lproc)
 .ds doc-str-Lb-libprocstat Process and Files Information Retrieval (libpro=
cstat, \-lprocstat)
 .ds doc-str-Lb-librtld_db  Run-time Linker Debugging Library (librtld_db, =
\-lrtld_db)
+.ds doc-str-Lb-libstdthreads C11 Threads Library (libstdthreads, \-lstdthr=
eads)
 .
 .\" Default .Os value
 .ds doc-default-operating-system FreeBSD\~10.0
@@ -49,6 +50,7 @@
 .\" FreeBSD releases not found in doc-common
 .ds doc-operating-system-FreeBSD-7.4    7.4
 .ds doc-operating-system-FreeBSD-8.3    8.3
+.ds doc-operating-system-FreeBSD-9.1    9.1
 .ds doc-operating-system-FreeBSD-10.0   10.0
 .
 .\" Definitions not (yet) in doc-syms
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/include/gssapi/gssapi.h
--- a/head/include/gssapi/gssapi.h	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/include/gssapi/gssapi.h	Fri Aug 10 14:19:25 2012 +0300
@@ -25,21 +25,19 @@
  * HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF
  * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
  *
- * $FreeBSD: head/include/gssapi/gssapi.h 229781 2012-01-07 16:10:15Z uqs $
+ * $FreeBSD: head/include/gssapi/gssapi.h 239061 2012-08-05 13:38:15Z dfr $
  */
=20
 #ifndef _GSSAPI_GSSAPI_H_
 #define _GSSAPI_GSSAPI_H_
=20
-/*
- * First, include stddef.h to get size_t defined.
- */
-#include <stddef.h>
+#include <sys/cdefs.h>
+#include <sys/_types.h>
=20
-/*
- * Include stdint.h to get explicitly sized data types.
- */
-#include <stdint.h>
+#ifndef _SIZE_T_DECLARED
+typedef	__size_t	size_t;
+#define	_SIZE_T_DECLARED
+#endif
=20
 #ifndef _SSIZE_T_DECLARED
 typedef	__ssize_t	ssize_t;
@@ -67,7 +65,7 @@
  * unsigned integer supported by the platform that has at least
  * 32 bits of precision.
  */
-typedef uint32_t gss_uint32;
+typedef __uint32_t gss_uint32;
=20
=20
 #ifdef OM_STRING
@@ -89,7 +87,7 @@
  */
=20
 typedef gss_uint32 OM_uint32;
-typedef uint64_t OM_uint64;
+typedef __uint64_t OM_uint64;
=20
 typedef struct gss_OID_desc_struct {
   OM_uint32 length;
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/lib/libarchive/Makefile
--- a/head/lib/libarchive/Makefile	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/lib/libarchive/Makefile	Fri Aug 10 14:19:25 2012 +0300
@@ -1,4 +1,4 @@
-# $FreeBSD: head/lib/libarchive/Makefile 233352 2012-03-23 11:18:07Z dim $
+# $FreeBSD: head/lib/libarchive/Makefile 238909 2012-07-30 14:47:35Z mm $
 .include <bsd.own.mk>
=20
 LIBARCHIVEDIR=3D	${.CURDIR}/../../contrib/libarchive
@@ -63,7 +63,10 @@
 	archive_entry_stat.c				\
 	archive_entry_strmode.c				\
 	archive_entry_xattr.c				\
+	archive_getdate.c				\
+	archive_match.c					\
 	archive_options.c				\
+	archive_pathmatch.c				\
 	archive_ppmd7.c					\
 	archive_rb.c					\
 	archive_read.c					\
@@ -106,6 +109,8 @@
 	archive_util.c					\
 	archive_virtual.c				\
 	archive_write.c					\
+	archive_write_add_filter.c			\
+	archive_write_disk_acl.c			\
 	archive_write_disk_set_standard_lookup.c	\
 	archive_write_disk_posix.c			\
 	archive_write_open_fd.c				\
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/lib/libarchive/config_freebsd.h
--- a/head/lib/libarchive/config_freebsd.h	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/lib/libarchive/config_freebsd.h	Fri Aug 10 14:19:25 2012 +0300
@@ -22,7 +22,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.
  *
- * $FreeBSD: head/lib/libarchive/config_freebsd.h 232153 2012-02-25 10:58:=
02Z mm $
+ * $FreeBSD: head/lib/libarchive/config_freebsd.h 238909 2012-07-30 14:47:=
35Z mm $
  */
=20
 /* FreeBSD 5.0 and later have ACL and extattr support. */
@@ -31,10 +31,12 @@
 #define HAVE_ACL_GET_LINK_NP 1
 #define HAVE_ACL_GET_PERM_NP 1
 #define HAVE_ACL_INIT 1
+#define HAVE_ACL_IS_TRIVIAL_NP 1
 #define HAVE_ACL_PERMSET_T 1
 #define HAVE_ACL_SET_FD 1
 #define HAVE_ACL_SET_FD_NP 1
 #define HAVE_ACL_SET_FILE 1
+#define HAVE_ACL_SET_LINK_NP 1
 #define HAVE_ACL_USER 1
 #define HAVE_EXTATTR_GET_FILE 1
 #define HAVE_EXTATTR_LIST_FILE 1
@@ -129,7 +131,6 @@
 #define HAVE_LSTAT 1
 #define HAVE_LUTIMES 1
 #define HAVE_MBRTOWC 1
-#define HAVE_MBSNRTOWCS 1
 #define HAVE_MEMMOVE 1
 #define HAVE_MEMORY_H 1
 #define HAVE_MEMSET 1
@@ -206,7 +207,6 @@
 #define HAVE_WCSCMP 1
 #define HAVE_WCSCPY 1
 #define HAVE_WCSLEN 1
-#define HAVE_WCSNRTOMBS 1
 #define HAVE_WCTOMB 1
 #define HAVE_WCTYPE_H 1
 #define HAVE_WMEMCMP 1
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/lib/libarchive/test/Makefile
--- a/head/lib/libarchive/test/Makefile	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/lib/libarchive/test/Makefile	Fri Aug 10 14:19:25 2012 +0300
@@ -1,4 +1,4 @@
-# $FreeBSD: head/lib/libarchive/test/Makefile 232153 2012-02-25 10:58:02Z =
mm $
+# $FreeBSD: head/lib/libarchive/test/Makefile 238909 2012-07-30 14:47:35Z =
mm $
=20
 LIBARCHIVEDIR=3D	${.CURDIR}/../../../contrib/libarchive
=20
@@ -19,13 +19,19 @@
=20
 .PATH:  ${LIBARCHIVEDIR}/libarchive/test
 TESTS=3D \
-	test_acl_freebsd.c			\
+	test_acl_freebsd_nfs4.c			\
+	test_acl_freebsd_posix1e.c		\
 	test_acl_nfs4.c				\
 	test_acl_pax.c				\
 	test_acl_posix1e.c			\
 	test_archive_api_feature.c		\
 	test_archive_clear_error.c		\
 	test_archive_crypto.c			\
+	test_archive_getdate.c			\
+	test_archive_match_time.c		\
+	test_archive_match_owner.c		\
+	test_archive_match_path.c		\
+	test_archive_pathmatch.c		\
 	test_archive_read_close_twice.c		\
 	test_archive_read_close_twice_open_fd.c	\
 	test_archive_read_close_twice_open_filename.c	\
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/lib/libc/gen/fts.c
--- a/head/lib/libc/gen/fts.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/lib/libc/gen/fts.c	Fri Aug 10 14:19:25 2012 +0300
@@ -36,7 +36,7 @@
 #endif
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/lib/libc/gen/fts.c 235647 2012-05-19 12:44:27Z gl=
eb $");
+__FBSDID("$FreeBSD: head/lib/libc/gen/fts.c 238963 2012-08-01 00:21:55Z de=
lphij $");
=20
 #include "namespace.h"
 #include <sys/param.h>
@@ -134,9 +134,8 @@
 	}
=20
 	/* Allocate/initialize the stream. */
-	if ((priv =3D malloc(sizeof(*priv))) =3D=3D NULL)
+	if ((priv =3D calloc(1, sizeof(*priv))) =3D=3D NULL)
 		return (NULL);
-	memset(priv, 0, sizeof(*priv));
 	sp =3D &priv->ftsp_fts;
 	sp->fts_compar =3D compar;
 	sp->fts_options =3D options;
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/lib/libc/gen/ftw.c
--- a/head/lib/libc/gen/ftw.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/lib/libc/gen/ftw.c	Fri Aug 10 14:19:25 2012 +0300
@@ -21,14 +21,13 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/lib/libc/gen/ftw.c 223215 2011-06-18 00:29:10Z de=
lphij $");
+__FBSDID("$FreeBSD: head/lib/libc/gen/ftw.c 239151 2012-08-09 15:11:38Z ji=
lles $");
=20
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <errno.h>
 #include <fts.h>
 #include <ftw.h>
-#include <limits.h>
=20
 int
 ftw(const char *path, int (*fn)(const char *, const struct stat *, int),
@@ -40,7 +39,7 @@
 	int error =3D 0, fnflag, sverrno;
=20
 	/* XXX - nfds is currently unused */
-	if (nfds < 1 || nfds > OPEN_MAX) {
+	if (nfds < 1) {
 		errno =3D EINVAL;
 		return (-1);
 	}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/lib/libc/gen/nftw.c
--- a/head/lib/libc/gen/nftw.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/lib/libc/gen/nftw.c	Fri Aug 10 14:19:25 2012 +0300
@@ -1,4 +1,4 @@
-/*	$OpenBSD: nftw.c,v 1.4 2004/07/07 16:05:23 millert Exp $	*/
+/*	$OpenBSD: nftw.c,v 1.7 2006/03/31 19:41:44 millert Exp $	*/
=20
 /*
  * Copyright (c) 2003, 2004 Todd C. Miller <Todd.Miller at courtesan.com>
@@ -20,21 +20,14 @@
  * Materiel Command, USAF, under agreement number F39502-99-1-0512.
  */
=20
-#if 0
-#if defined(LIBC_SCCS) && !defined(lint)
-static const char rcsid[] =3D "$OpenBSD: nftw.c,v 1.4 2004/07/07 16:05:23 =
millert Exp $";
-#endif /* LIBC_SCCS and not lint */
-#endif
-
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
+__FBSDID("$FreeBSD: head/lib/libc/gen/nftw.c 239160 2012-08-09 22:05:40Z j=
illes $");
=20
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <errno.h>
 #include <fts.h>
 #include <ftw.h>
-#include <limits.h>
=20
 int
 nftw(const char *path, int (*fn)(const char *, const struct stat *, int,
@@ -47,7 +40,7 @@
 	int error =3D 0, ftsflags, fnflag, postorder, sverrno;
=20
 	/* XXX - nfds is currently unused */
-	if (nfds < 1 || nfds > OPEN_MAX) {
+	if (nfds < 1) {
 		errno =3D EINVAL;
 		return (-1);
 	}
@@ -72,6 +65,8 @@
 				continue;
 			fnflag =3D FTW_D;
 			break;
+		case FTS_DC:
+			continue;
 		case FTS_DNR:
 			fnflag =3D FTW_DNR;
 			break;
@@ -94,9 +89,6 @@
 		case FTS_SLNONE:
 			fnflag =3D FTW_SLN;
 			break;
-		case FTS_DC:
-			errno =3D ELOOP;
-			/* FALLTHROUGH */
 		default:
 			error =3D -1;
 			goto done;
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/lib/libc/locale/Makefile.inc
--- a/head/lib/libc/locale/Makefile.inc	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/lib/libc/locale/Makefile.inc	Fri Aug 10 14:19:25 2012 +0300
@@ -1,5 +1,5 @@
 #	from @(#)Makefile.inc	8.1 (Berkeley) 6/4/93
-# $FreeBSD: head/lib/libc/locale/Makefile.inc 238781 2012-07-25 22:17:44Z =
issyl0 $
+# $FreeBSD: head/lib/libc/locale/Makefile.inc 238919 2012-07-30 20:56:19Z =
issyl0 $
=20
 # locale sources
 .PATH: ${.CURDIR}/${LIBC_ARCH}/locale ${.CURDIR}/locale
@@ -47,6 +47,11 @@
=20
 MLINKS+=3Dbtowc.3 wctob.3
 MLINKS+=3Disdigit.3 isnumber.3
+MLINKS+=3Disgraph.3 isgraph_l.3
+MLINKS+=3Dislower.3 islower_l.3
+MLINKS+=3Dispunct.3 ispunct_l.3
+MLINKS+=3Disspace.3 isspace_l.3
+MLINKS+=3Dnl_langinfo.3 nl_langinfo_l.3
 MLINKS+=3Diswalnum.3 iswalpha.3 iswalnum.3 iswascii.3 iswalnum.3 iswblank.=
3 \
 	iswalnum.3 iswcntrl.3 iswalnum.3 iswdigit.3 iswalnum.3 iswgraph.3 \
 	iswalnum.3 iswhexnumber.3 \
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/lib/libc/locale/isgraph.3
--- a/head/lib/libc/locale/isgraph.3	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/lib/libc/locale/isgraph.3	Fri Aug 10 14:19:25 2012 +0300
@@ -30,9 +30,9 @@
 .\" SUCH DAMAGE.
 .\"
 .\"     @(#)isgraph.3	8.2 (Berkeley) 12/11/93
-.\" $FreeBSD: head/lib/libc/locale/isgraph.3 233992 2012-04-07 09:05:30Z j=
oel $
+.\" $FreeBSD: head/lib/libc/locale/isgraph.3 238919 2012-07-30 20:56:19Z i=
ssyl0 $
 .\"
-.Dd July 17, 2005
+.Dd July 30, 2012
 .Dt ISGRAPH 3
 .Os
 .Sh NAME
@@ -44,6 +44,8 @@
 .In ctype.h
 .Ft int
 .Fn isgraph "int c"
+.Ft int
+.Fn isgraph_l "int c" "locale_t loc"
 .Sh DESCRIPTION
 The
 .Fn isgraph
@@ -79,11 +81,19 @@
 .It "\&166\ ``v''" Ta "167\ ``w''" Ta "170\ ``x''" Ta "171\ ``y''" Ta "172=
\ ``z''"
 .It "\&173\ ``{''" Ta "174\ ``|''" Ta "175\ ``}''" Ta "176\ ``~''" Ta \&
 .El
+.Pp
+The
+.Fn isgraph_l
+function takes an explicit locale argument, whereas the
+.Fn isgraph
+function uses the current global or per-thread locale.
 .Sh RETURN VALUES
 The
 .Fn isgraph
-function returns zero if the character tests false and
-returns non-zero if the character tests true.
+and
+.Fn isgraph_l
+functions return zero if the character tests false and
+return non-zero if the character tests true.
 .Sh COMPATIBILITY
 The
 .Bx 4.4
@@ -103,3 +113,7 @@
 .Fn isgraph
 function conforms to
 .St -isoC .
+The
+.Fn isgraph_l
+function conforms to
+.St -p1003.1-2008 .
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/lib/libc/locale/islower.3
--- a/head/lib/libc/locale/islower.3	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/lib/libc/locale/islower.3	Fri Aug 10 14:19:25 2012 +0300
@@ -30,9 +30,9 @@
 .\" SUCH DAMAGE.
 .\"
 .\"     @(#)islower.3	8.1 (Berkeley) 6/4/93
-.\" $FreeBSD: head/lib/libc/locale/islower.3 233992 2012-04-07 09:05:30Z j=
oel $
+.\" $FreeBSD: head/lib/libc/locale/islower.3 238920 2012-07-30 21:02:44Z j=
oel $
 .\"
-.Dd July 17, 2005
+.Dd July 30, 2012
 .Dt ISLOWER 3
 .Os
 .Sh NAME
@@ -44,6 +44,8 @@
 .In ctype.h
 .Ft int
 .Fn islower "int c"
+.Ft int
+.Fn islower_l "int c" "locale_t loc"
 .Sh DESCRIPTION
 The
 .Fn islower
@@ -63,11 +65,18 @@
 .It "\&165\ ``u''" Ta "166\ ``v''" Ta "167\ ``w''" Ta "170\ ``x''" Ta "171=
\ ``y''"
 .It "\&172\ ``z''" Ta \& Ta \& Ta \& Ta \&
 .El
+The
+.Fn islower_l
+function takes an explicit locale argument, whereas the
+.Fn islower
+function uses the current global or per-thread locale.
 .Sh RETURN VALUES
 The
 .Fn islower
-function returns zero if the character tests false and
-returns non-zero if the character tests true.
+and
+.Fn islower_l
+functions return zero if the character tests false and
+return non-zero if the character tests true.
 .Sh COMPATIBILITY
 The
 .Bx 4.4
@@ -88,3 +97,7 @@
 .Fn islower
 function conforms to
 .St -isoC .
+The
+.Fn islower_l
+function conforms to
+.St -p1003.1-2008 .
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/lib/libc/locale/ispunct.3
--- a/head/lib/libc/locale/ispunct.3	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/lib/libc/locale/ispunct.3	Fri Aug 10 14:19:25 2012 +0300
@@ -30,9 +30,9 @@
 .\" SUCH DAMAGE.
 .\"
 .\"	@(#)ispunct.3	8.1 (Berkeley) 6/4/93
-.\" $FreeBSD: head/lib/libc/locale/ispunct.3 233992 2012-04-07 09:05:30Z j=
oel $
+.\" $FreeBSD: head/lib/libc/locale/ispunct.3 238919 2012-07-30 20:56:19Z i=
ssyl0 $
 .\"
-.Dd July 17, 2005
+.Dd July 30, 2012
 .Dt ISPUNCT 3
 .Os
 .Sh NAME
@@ -44,6 +44,8 @@
 .In ctype.h
 .Ft int
 .Fn ispunct "int c"
+.Ft int
+.Fn ispunct_l "int c" "locale_t loc"
 .Sh DESCRIPTION
 The
 .Fn ispunct
@@ -69,11 +71,19 @@
 .It "\&136\ ``^''" Ta "137\ ``_''" Ta "140\ ```''" Ta "173\ ``{''" Ta "174=
\ ``|''"
 .It "\&175\ ``}''" Ta "176\ ``~''" Ta \& Ta \& Ta \&
 .El
+.Pp
+The
+.Fn ispunct_l
+function takes an explicit locale argument, whereas the
+.Fn ispunct
+function uses the current global or per-thread locale.
 .Sh RETURN VALUES
 The
 .Fn ispunct
-function returns zero if the character tests false and
-returns non-zero if the character tests true.
+and
+.Fn ispunct_l
+functions return zero if the character tests false and
+return non-zero if the character tests true.
 .Sh COMPATIBILITY
 The
 .Bx 4.4
@@ -93,3 +103,7 @@
 .Fn ispunct
 function conforms to
 .St -isoC .
+The
+.Fn ispunct_l
+function conforms to
+.St -p1003.1-2008 .
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/lib/libc/locale/isspace.3
--- a/head/lib/libc/locale/isspace.3	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/lib/libc/locale/isspace.3	Fri Aug 10 14:19:25 2012 +0300
@@ -30,9 +30,9 @@
 .\" SUCH DAMAGE.
 .\"
 .\"     @(#)isspace.3	8.1 (Berkeley) 6/4/93
-.\" $FreeBSD: head/lib/libc/locale/isspace.3 233992 2012-04-07 09:05:30Z j=
oel $
+.\" $FreeBSD: head/lib/libc/locale/isspace.3 238919 2012-07-30 20:56:19Z i=
ssyl0 $
 .\"
-.Dd July 17, 2005
+.Dd July 30, 2012
 .Dt ISSPACE 3
 .Os
 .Sh NAME
@@ -44,6 +44,8 @@
 .In ctype.h
 .Ft int
 .Fn isspace "int c"
+.Ft int
+.Fn isspace_l "int c" "locale_t loc"
 .Sh DESCRIPTION
 The
 .Fn isspace
@@ -60,11 +62,19 @@
 .Vt "unsigned char"
 or the value of
 .Dv EOF .
+.Pp
+The
+.Fn isspace_l
+function takes an explicit locale argument, whereas the
+.Fn isspace
+function uses the current global or per-thread locale.
 .Sh RETURN VALUES
 The
 .Fn isspace
-function returns zero if the character tests false and
-returns non-zero if the character tests true.
+and
+.Fn isspace_l
+functions return zero if the character tests false and
+return non-zero if the character tests true.
 .Sh COMPATIBILITY
 The
 .Bx 4.4
@@ -85,3 +95,7 @@
 .Fn isspace
 function conforms to
 .St -isoC .
+The
+.Fn isspace_l
+function conforms to
+.St -p1003.1-2008 .
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/lib/libc/locale/nl_langinfo.3
--- a/head/lib/libc/locale/nl_langinfo.3	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/lib/libc/locale/nl_langinfo.3	Fri Aug 10 14:19:25 2012 +0300
@@ -22,9 +22,9 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\" $FreeBSD$
+.\" $FreeBSD: head/lib/libc/locale/nl_langinfo.3 238919 2012-07-30 20:56:1=
9Z issyl0 $
 .\"
-.Dd May 3, 2001
+.Dd July 30, 2012
 .Dt NL_LANGINFO 3
 .Os
 .Sh NAME
@@ -36,11 +36,16 @@
 .In langinfo.h
 .Ft char *
 .Fn nl_langinfo "nl_item item"
+.Ft char *
+.Fn nl_langinfo_l "nl_item item" "locale_t loc"
 .Sh DESCRIPTION
 The
 .Fn nl_langinfo
 function returns a pointer to a string containing information relevant to
-the particular language or cultural area defined in the program's locale.
+the particular language or cultural area defined in the program or thread's
+locale, or in the case of
+.Fn nl_langinfo_l ,
+the locale passed as the second argument.
 The manifest constant names and values of
 .Fa item
 are defined in
@@ -60,6 +65,9 @@
 returns a pointer to the corresponding string in the
 .Tn POSIX
 locale.
+.Fn nl_langinfo_l
+returns the same values as
+.Fn nl_langinfo .
 In all locales,
 .Fn nl_langinfo
 returns a pointer to an empty string if
@@ -83,6 +91,10 @@
 .Fn nl_langinfo
 function conforms to
 .St -susv2 .
+The
+.Fn nl_langinfo_l
+function conforms to
+.St -p1003.1-2008 .
 .Sh HISTORY
 The
 .Fn nl_langinfo
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/lib/libedit/el.c
--- a/head/lib/libedit/el.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/lib/libedit/el.c	Fri Aug 10 14:19:25 2012 +0300
@@ -36,7 +36,7 @@
 static char sccsid[] =3D "@(#)el.c	8.2 (Berkeley) 1/3/94";
 #endif /* not lint && not SCCSID */
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/lib/libedit/el.c 237448 2012-06-22 18:01:22Z pfg =
$");
+__FBSDID("$FreeBSD: head/lib/libedit/el.c 238810 2012-07-26 15:48:07Z pfg =
$");
=20
 /*
  * el.c: EditLine interface functions
@@ -473,30 +473,6 @@
 	return (rv);
 }
=20
-/* el_data_get():
- *	Set user private data.
- */
-public void
-el_data_set (el, data)
-    EditLine *el;
-    void *data;
-{
-    el->el_data =3D data;
-
-    return;
-}
-
-/* el_data_get():
- *	Return user private data.
- */
-public void *
-el_data_get (el)
-    EditLine *el;
-{
-    if (el->el_data)
-	return (el->el_data);
-    return (NULL);
-}
=20
 /* el_line():
  *	Return editing info
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/lib/libedit/histedit.h
--- a/head/lib/libedit/histedit.h	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/lib/libedit/histedit.h	Fri Aug 10 14:19:25 2012 +0300
@@ -31,7 +31,7 @@
  *
  *	@(#)histedit.h	8.2 (Berkeley) 1/3/94
  *	$NetBSD: histedit.h,v 1.32 2007/06/10 20:20:28 christos Exp $
- * $FreeBSD: head/lib/libedit/histedit.h 237448 2012-06-22 18:01:22Z pfg $
+ * $FreeBSD: head/lib/libedit/histedit.h 238810 2012-07-26 15:48:07Z pfg $
  */
=20
 /*
@@ -154,13 +154,6 @@
  */
 void		 el_resize(EditLine *);
=20
-
-/*
- * Set user private data.
- */
-void            el_data_set(EditLine *, void *);
-void *          el_data_get(EditLine *);
-
 /*
  * User-defined function interface.
  */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/lib/libedit/term.c
--- a/head/lib/libedit/term.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/lib/libedit/term.c	Fri Aug 10 14:19:25 2012 +0300
@@ -36,7 +36,7 @@
 static char sccsid[] =3D "@(#)term.c	8.2 (Berkeley) 4/30/95";
 #endif /* not lint && not SCCSID */
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/lib/libedit/term.c 237448 2012-06-22 18:01:22Z pf=
g $");
+__FBSDID("$FreeBSD: head/lib/libedit/term.c 238810 2012-07-26 15:48:07Z pf=
g $");
=20
 /*
  * term.c: Editor/termcap-curses interface
@@ -340,8 +340,8 @@
 	if (el->el_term.t_val =3D=3D NULL)
 		return (-1);
 	(void) memset(el->el_term.t_val, 0, T_val * sizeof(int));
+	(void) term_set(el, NULL);
 	term_init_arrow(el);
-	(void) term_set(el, NULL);
 	return (0);
 }
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/lib/libpam/modules/pam_krb5/pam_k=
rb5.c
--- a/head/lib/libpam/modules/pam_krb5/pam_krb5.c	Mon Jul 30 11:44:18 2012 =
+0300
+++ b/head/lib/libpam/modules/pam_krb5/pam_krb5.c	Fri Aug 10 14:19:25 2012 =
+0300
@@ -48,7 +48,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/lib/libpam/modules/pam_krb5/pam_krb5.c 233406 201=
2-03-24 01:02:03Z stas $");
+__FBSDID("$FreeBSD: head/lib/libpam/modules/pam_krb5/pam_krb5.c 239099 201=
2-08-06 18:40:14Z dim $");
=20
 #include <sys/types.h>
 #include <sys/stat.h>
@@ -91,6 +91,7 @@
 #define PAM_OPT_NO_CCACHE	"no_ccache"
 #define PAM_OPT_NO_USER_CHECK	"no_user_check"
 #define PAM_OPT_REUSE_CCACHE	"reuse_ccache"
+#define PAM_OPT_NO_USER_CHECK	"no_user_check"
=20
 #define	PAM_LOG_KRB5_ERR(ctx, rv, fmt, ...)				\
 	do {								\
@@ -218,10 +219,12 @@
 			PAM_LOG("PAM_USER Redone");
 		}
=20
-		pwd =3D getpwnam(user);
-		if (pwd =3D=3D NULL) {
-			retval =3D PAM_USER_UNKNOWN;
-			goto cleanup2;
+		if (!openpam_get_option(pamh, PAM_OPT_NO_USER_CHECK)) {
+			pwd =3D getpwnam(user);
+			if (pwd =3D=3D NULL) {
+				retval =3D PAM_USER_UNKNOWN;
+				goto cleanup2;
+			}
 		}
=20
 		PAM_LOG("Done getpwnam()");
@@ -335,11 +338,11 @@
 	PAM_LOG("Done cleanup");
 cleanup2:
 	krb5_free_principal(pam_context, princ);
-	PAM_LOG("Done cleanup2");
-cleanup3:
 	if (princ_name)
 		free(princ_name);
+	PAM_LOG("Done cleanup2");
=20
+cleanup3:
 	krb5_free_context(pam_context);
=20
 	PAM_LOG("Done cleanup3");
@@ -802,11 +805,11 @@
 	PAM_LOG("Done cleanup");
 cleanup2:
 	krb5_free_principal(pam_context, princ);
-	PAM_LOG("Done cleanup2");
-cleanup3:
 	if (princ_name)
 		free(princ_name);
+	PAM_LOG("Done cleanup2");
=20
+cleanup3:
 	krb5_free_context(pam_context);
=20
 	PAM_LOG("Done cleanup3");
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/lib/libpam/modules/pam_unix/pam_u=
nix.c
--- a/head/lib/libpam/modules/pam_unix/pam_unix.c	Mon Jul 30 11:44:18 2012 =
+0300
+++ b/head/lib/libpam/modules/pam_unix/pam_unix.c	Fri Aug 10 14:19:25 2012 =
+0300
@@ -35,7 +35,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/lib/libpam/modules/pam_unix/pam_unix.c 227105 201=
1-11-05 10:00:29Z ed $");
+__FBSDID("$FreeBSD: head/lib/libpam/modules/pam_unix/pam_unix.c 239100 201=
2-08-06 18:44:59Z dim $");
=20
 #include <sys/param.h>
 #include <sys/socket.h>
@@ -94,13 +94,13 @@
 	const char *pass, *user, *realpw, *prompt;
=20
 	if (openpam_get_option(pamh, PAM_OPT_AUTH_AS_SELF)) {
-		pwd =3D getpwnam(getlogin());
+		user =3D getlogin();
 	} else {
 		retval =3D pam_get_user(pamh, &user, NULL);
 		if (retval !=3D PAM_SUCCESS)
 			return (retval);
-		pwd =3D getpwnam(user);
 	}
+	pwd =3D getpwnam(user);
=20
 	PAM_LOG("Got user: %s", user);
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/lib/msun/ld128/s_expl.c
--- a/head/lib/msun/ld128/s_expl.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/lib/msun/ld128/s_expl.c	Fri Aug 10 14:19:25 2012 +0300
@@ -25,17 +25,17 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/lib/msun/ld128/s_expl.c 238722 2012-07-23 19:13:5=
5Z kargl $");
+__FBSDID("$FreeBSD: head/lib/msun/ld128/s_expl.c 238923 2012-07-30 21:55:4=
9Z kargl $");
=20
 #include <float.h>
=20
+#include "fpmath.h"
 #include "math.h"
 #include "math_private.h"
-#include "fpmath.h"
=20
 #define	BIAS	(LDBL_MAX_EXP - 1)
-#define	EXPMASK	(BIAS + LDBL_MAX_EXP)
=20
+/* XXX Prevent gcc from erroneously constant folding this: */
 static volatile const long double twom10000 =3D 0x1p-10000L, tiny =3D 0x1p=
-10000L;
=20
 static const long double
@@ -58,12 +58,12 @@
 P10 =3D 2.75573236172670046201884000197885520e-7L,
 P11 =3D 2.50517544183909126492878226167697856e-8L;
=20
-#define	NUM		128
+#define	INTERVALS	128
=20
 static const struct {
 	long double	hi;
 	long double	lo;
-} s[NUM] =3D {
+} s[INTERVALS] =3D {
 	0x1p0L, 0x0p0L,
 	0x1.0163da9fb33356d84a66aep0L, 0x3.36dcdfa4003ec04c360be2404078p-92L,
 	0x1.02c9a3e778060ee6f7cacap0L, 0x4.f7a29bde93d70a2cabc5cb89ba10p-92L,
@@ -205,7 +205,7 @@
 	/* Filter out exceptional cases. */
 	u.e =3D x;
 	hx =3D u.xbits.expsign;
-	ix =3D hx & EXPMASK;
+	ix =3D hx & 0x7fff;
 	if (ix >=3D BIAS + 13) {		/* |x| >=3D 8192 or x is NaN */
 		if (ix =3D=3D BIAS + LDBL_MAX_EXP) {
 			if (u.xbits.manh !=3D 0
@@ -227,8 +227,8 @@
=20
 	fn =3D x * INV_L + 0x1.8p112 - 0x1.8p112;
 	n  =3D (int)fn;
-	n2 =3D (unsigned)n % NUM;		/* Tang's j. */
-	k =3D (n - n2) / NUM;
+	n2 =3D (unsigned)n % INTERVALS;		/* Tang's j. */
+	k =3D (n - n2) / INTERVALS;
 	r1 =3D x - fn * L1;
 	r2 =3D -fn * L2;
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/lib/msun/ld80/s_expl.c
--- a/head/lib/msun/ld80/s_expl.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/lib/msun/ld80/s_expl.c	Fri Aug 10 14:19:25 2012 +0300
@@ -27,7 +27,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/lib/msun/ld80/s_expl.c 238722 2012-07-23 19:13:55=
Z kargl $");
+__FBSDID("$FreeBSD: head/lib/msun/ld80/s_expl.c 238923 2012-07-30 21:55:49=
Z kargl $");
=20
 /*
  * Compute the exponential of x for Intel 80-bit format.  This is based on:
@@ -36,7 +36,7 @@
  *   in IEEE floating-point arithmetic," ACM Trans. Math. Soft., 15,
  *   144-157 (1989).
  *
- * where the 32 table entries have been expanded to NUM (see below).
+ * where the 32 table entries have been expanded to INTERVALS (see below).
  */
=20
 #include <float.h>
@@ -45,13 +45,9 @@
 #include <ieeefp.h>
 #endif
=20
+#include "fpmath.h"
 #include "math.h"
-#define	FPSETPREC
-#ifdef NO_FPSETPREC
-#undef FPSETPREC
-#endif
 #include "math_private.h"
-#include "fpmath.h"
=20
 #define	BIAS	(LDBL_MAX_EXP - 1)
=20
@@ -69,9 +65,9 @@
=20
 static const double __aligned(64)
 /*
- * ln2/NUM =3D L1+L2 (hi+lo decomposition for multiplication).  L1 must ha=
ve
- * at least 22 (=3D log2(|LDBL_MIN_EXP-extras|) + log2(NUM)) lowest bits z=
ero
- * so that multiplication of it by n is exact.
+ * ln2/INTERVALS =3D L1+L2 (hi+lo decomposition for multiplication).  L1 m=
ust
+ * have at least 22 (=3D log2(|LDBL_MIN_EXP-extras|) + log2(INTERVALS)) lo=
west
+ * bits zero so that multiplication of it by n is exact.
  */
 L1 =3D  5.4152123484527692e-3,		/*  0x162e42ff000000.0p-60 */
 L2 =3D -3.2819649005320973e-13,		/* -0x1718432a1b0e26.0p-94 */
@@ -79,7 +75,7 @@
 /*
  * Domain [-0.002708, 0.002708], range ~[-5.7136e-24, 5.7110e-24]:
  * |exp(x) - p(x)| < 2**-77.2
- * (0.002708 is ln2/(2*NUM) rounded up a little).
+ * (0.002708 is ln2/(2*INTERVALS) rounded up a little).
  */
 P2 =3D  0.5,
 P3 =3D  1.6666666666666119e-1,		/*  0x15555555555490.0p-55 */
@@ -88,16 +84,16 @@
 P6 =3D  1.3888891738560272e-3;		/*  0x16c16c651633ae.0p-62 */
=20
 /*
- * 2^(i/NUM) for i in [0,NUM] is represented by two values where the
- * first 47 (?!) bits of the significand is stored in hi and the next 53
+ * 2^(i/INTERVALS) for i in [0,INTERVALS] is represented by two values whe=
re
+ * the first 47 (?!) bits of the significand is stored in hi and the next =
53
  * bits are in lo.
  */
-#define	NUM		128
+#define	INTERVALS	128
=20
 static const struct {
 	double	hi;
 	double	lo;
-} s[NUM] __aligned(16) =3D {
+} s[INTERVALS] __aligned(16) =3D {
 	0x1p+0, 0x0p+0,
 	0x1.0163da9fb330p+0, 0x1.ab6c25335719bp-47,
 	0x1.02c9a3e77804p+0, 0x1.07737be56527cp-47,
@@ -269,8 +265,8 @@
 #else
 	n  =3D (int)fn;
 #endif
-	n2 =3D (unsigned)n % NUM;		/* Tang's j. */
-	k =3D (n - n2) / NUM;
+	n2 =3D (unsigned)n % INTERVALS;		/* Tang's j. */
+	k =3D (n - n2) / INTERVALS;
 	r1 =3D x - fn * L1;
 	r2 =3D -fn * L2;
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/lib/msun/src/s_cbrtl.c
--- a/head/lib/msun/src/s_cbrtl.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/lib/msun/src/s_cbrtl.c	Fri Aug 10 14:19:25 2012 +0300
@@ -15,10 +15,12 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
+__FBSDID("$FreeBSD: head/lib/msun/src/s_cbrtl.c 238924 2012-07-30 21:58:28=
Z kargl $");
=20
 #include <float.h>
+#ifdef __i386__
 #include <ieeefp.h>
+#endif
=20
 #include "fpmath.h"   =20
 #include "math.h"
@@ -51,23 +53,11 @@
 	if (k =3D=3D BIAS + LDBL_MAX_EXP)
 		return (x + x);
=20
-#ifdef __i386__
-	fp_prec_t oprec;
-
-	oprec =3D fpgetprec();
-	if (oprec !=3D FP_PE)
-		fpsetprec(FP_PE);
-#endif
-
+	ENTERI();
 	if (k =3D=3D 0) {
 		/* If x =3D +-0, then cbrt(x) =3D +-0. */
-		if ((u.bits.manh | u.bits.manl) =3D=3D 0) {
-#ifdef __i386__
-			if (oprec !=3D FP_PE)
-				fpsetprec(oprec);
-#endif
-			return (x);
-	    	}
+		if ((u.bits.manh | u.bits.manl) =3D=3D 0)
+			RETURNI(x);
 		/* Adjust subnormal numbers. */
 		u.e *=3D 0x1.0p514;
 		k =3D u.bits.exp;
@@ -149,9 +139,5 @@
 	t=3Dt+t*r;			/* error <=3D 0.5 + 0.5/3 + epsilon */
=20
 	t *=3D v.e;
-#ifdef __i386__
-	if (oprec !=3D FP_PE)
-		fpsetprec(oprec);
-#endif
-	return (t);
+	RETURNI(t);
 }
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/libexec/rtld-elf/arm/rtld_start.S
--- a/head/libexec/rtld-elf/arm/rtld_start.S	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/libexec/rtld-elf/arm/rtld_start.S	Fri Aug 10 14:19:25 2012 +0300
@@ -30,13 +30,15 @@
  */
=20
 #include <machine/asm.h>
-__FBSDID("$FreeBSD$");
+__FBSDID("$FreeBSD: head/libexec/rtld-elf/arm/rtld_start.S 239031 2012-08-=
04 05:30:20Z andrew $");
=20
 	.text
 	.align	0
 	.globl	.rtld_start
 	.type	.rtld_start,%function
 .rtld_start:
+	mov	r6, sp			/* save the stack pointer */
+	bic	sp, sp, #7		/* align the stack pointer */
 	sub	sp, sp, #8		/* make room for obj_main & exit proc */
 	mov	r4, r0			/* save ps_strings */
 	ldr	sl, .L2
@@ -52,13 +54,13 @@
 	bl	_rtld_relocate_nonplt_self
 	mov	r1, sp
 	add	r2, sp, #4
-	add	r0, sp, #8
+	mov	r0, r6			/* load the sp the kernel gave us */
 	bl	_rtld			/* call the shared loader */
 	mov	r3, r0			/* save entry point */
=20
 	ldr	r2, [sp, #0]		/* r2 =3D cleanup */
 	ldr	r1, [sp, #4]		/* r1 =3D obj_main */
-	add	sp, sp, #8		/* restore stack */
+	mov	sp, r6			/* restore stack */
 	mov	r0, r4			/* restore ps_strings */
 	mov	pc, r3			/* jump to the entry point */
 .L2:
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/libexec/rtld-elf/map_object.c
--- a/head/libexec/rtld-elf/map_object.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/libexec/rtld-elf/map_object.c	Fri Aug 10 14:19:25 2012 +0300
@@ -22,7 +22,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.
  *
- * $FreeBSD: head/libexec/rtld-elf/map_object.c 237058 2012-06-14 11:20:22=
Z kib $
+ * $FreeBSD: head/libexec/rtld-elf/map_object.c 239019 2012-08-03 17:04:41=
Z kan $
  */
=20
 #include <sys/param.h>
@@ -153,7 +153,6 @@
 		break;
 	    note_start =3D (Elf_Addr)(char *)hdr + phdr->p_offset;
 	    note_end =3D note_start + phdr->p_filesz;
-	    digest_notes(obj, note_start, note_end);
 	    break;
 	}
=20
@@ -291,7 +290,8 @@
     obj->stack_flags =3D stack_flags;
     obj->relro_page =3D obj->relocbase + trunc_page(relro_page);
     obj->relro_size =3D round_page(relro_size);
-
+    if (note_start < note_end)
+	digest_notes(obj, note_start, note_end);
     munmap(hdr, PAGE_SIZE);
     return (obj);
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/rescue/rescue/Makefile
--- a/head/rescue/rescue/Makefile	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/rescue/rescue/Makefile	Fri Aug 10 14:19:25 2012 +0300
@@ -1,4 +1,4 @@
-#$FreeBSD: head/rescue/rescue/Makefile 231642 2012-02-14 07:14:42Z rmh $
+#$FreeBSD: head/rescue/rescue/Makefile 238926 2012-07-30 23:14:24Z mm $
 #	@(#)Makefile	8.1 (Berkeley) 6/2/93
=20
 NO_MAN=3D
@@ -123,7 +123,7 @@
 CRUNCH_LIBS+=3D -lipx
 .endif
 .if ${MK_ZFS} !=3D "no"
-CRUNCH_LIBS+=3D -lavl -lnvpair -lzfs -lpthread -luutil -lumem
+CRUNCH_LIBS+=3D -lavl -lzfs -lnvpair -lpthread -luutil -lumem
 .endif
 CRUNCH_LIBS+=3D -lgeom -lbsdxml -lkiconv -lmd -lsbuf -lufs -lz
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sbin/camcontrol/camcontrol.c
--- a/head/sbin/camcontrol/camcontrol.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sbin/camcontrol/camcontrol.c	Fri Aug 10 14:19:25 2012 +0300
@@ -27,7 +27,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sbin/camcontrol/camcontrol.c 237452 2012-06-22 18=
:57:06Z ken $");
+__FBSDID("$FreeBSD: head/sbin/camcontrol/camcontrol.c 239059 2012-08-05 12=
:16:11Z dim $");
=20
 #include <sys/ioctl.h>
 #include <sys/stdint.h>
@@ -4464,7 +4464,7 @@
 smpcmd(struct cam_device *device, int argc, char **argv, char *combinedopt,
        int retry_count, int timeout)
 {
-	int c, error;
+	int c, error =3D 0;
 	union ccb *ccb;
 	uint8_t *smp_request =3D NULL, *smp_response =3D NULL;
 	int request_size =3D 0, response_size =3D 0;
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sbin/fsck_ffs/suj.c
--- a/head/sbin/fsck_ffs/suj.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sbin/fsck_ffs/suj.c	Fri Aug 10 14:19:25 2012 +0300
@@ -25,7 +25,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sbin/fsck_ffs/suj.c 236976 2012-06-12 21:37:27Z k=
ib $");
+__FBSDID("$FreeBSD: head/sbin/fsck_ffs/suj.c 238984 2012-08-02 10:39:54Z k=
ib $");
=20
 #include <sys/param.h>
 #include <sys/disk.h>
@@ -2383,7 +2383,7 @@
 		return (-1);
 	}
=20
-	if (DIP(ip, di_size) < SUJ_MIN || DIP(ip, di_size) > SUJ_MAX) {
+	if (DIP(ip, di_size) < SUJ_MIN) {
 		printf("Invalid size %jd for journal inode %d\n",
 		    DIP(ip, di_size), sujino);
 		return (-1);
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sbin/geom/class/multipath/geom_mu=
ltipath.c
--- a/head/sbin/geom/class/multipath/geom_multipath.c	Mon Jul 30 11:44:18 2=
012 +0300
+++ b/head/sbin/geom/class/multipath/geom_multipath.c	Fri Aug 10 14:19:25 2=
012 +0300
@@ -25,7 +25,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sbin/geom/class/multipath/geom_multipath.c 234415=
 2012-04-18 09:42:14Z mav $");
+__FBSDID("$FreeBSD: head/sbin/geom/class/multipath/geom_multipath.c 239012=
 2012-08-03 14:55:35Z thomas $");
 #include <sys/param.h>
 #include <errno.h>
 #include <paths.h>
@@ -49,6 +49,7 @@
 static void mp_main(struct gctl_req *, unsigned int);
 static void mp_label(struct gctl_req *);
 static void mp_clear(struct gctl_req *);
+static void mp_prefer(struct gctl_req *);
=20
 struct g_command class_commands[] =3D {
 	{
@@ -87,6 +88,10 @@
 		"[-v] name prov"
 	},
 	{
+		"prefer", G_FLAG_VERBOSE, mp_main, G_NULL_OPTS,
+		"[-v] prov ..."
+	},
+	{
 		"fail", G_FLAG_VERBOSE, NULL, G_NULL_OPTS,
 		"[-v] name prov"
 	},
@@ -131,6 +136,8 @@
 		mp_label(req);
 	} else if (strcmp(name, "clear") =3D=3D 0) {
 		mp_clear(req);
+	} else if (strcmp(name, "prefer") =3D=3D 0) {
+		mp_prefer(req);
 	} else {
 		gctl_error(req, "Unknown command: %s.", name);
 	}
@@ -294,3 +301,22 @@
 	}
 }
=20
+static void
+mp_prefer(struct gctl_req *req)
+{
+	const char *name, *comp, *errstr;
+	int nargs;
+
+	nargs =3D gctl_get_int(req, "nargs");
+	if (nargs !=3D 2) {
+		gctl_error(req, "Usage: prefer GEOM PROVIDER");
+		return;
+	}
+	name =3D gctl_get_ascii(req, "arg0");
+	comp =3D gctl_get_ascii(req, "arg1");
+	errstr =3D gctl_issue (req);
+	if (errstr !=3D NULL) {
+		fprintf(stderr, "Can't set %s preferred provider to %s: %s.\n",
+		    name, comp, errstr);
+	}
+}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sbin/geom/class/multipath/gmultip=
ath.8
--- a/head/sbin/geom/class/multipath/gmultipath.8	Mon Jul 30 11:44:18 2012 =
+0300
+++ b/head/sbin/geom/class/multipath/gmultipath.8	Fri Aug 10 14:19:25 2012 =
+0300
@@ -22,7 +22,7 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\" $FreeBSD: head/sbin/geom/class/multipath/gmultipath.8 234415 2012-04-1=
8 09:42:14Z mav $
+.\" $FreeBSD: head/sbin/geom/class/multipath/gmultipath.8 239012 2012-08-0=
3 14:55:35Z thomas $
 .\"
 .Dd April 18, 2012
 .Dt GMULTIPATH 8
@@ -66,6 +66,11 @@
 .Op Fl v
 .Ar name
 .Nm
+.Cm prefer
+.Op Fl v
+.Ar name
+.Ar prov
+.Nm
 .Cm getactive
 .Op Fl v
 .Ar name
@@ -171,7 +176,9 @@
 Mark specified provider as a path of the specified multipath device as
 operational, allowing it to handle requests.
 .It Cm rotate
-Change the active provider/path in Active/Passive mode.
+Change the active provider/path to the next available provider in Active/P=
assive mode.
+.It Cm prefer
+Change the active provider/path to the specified provider in Active/Passiv=
e mode.
 .It Cm getactive
 Get the currently active provider(s)/path(s).
 .It Cm destroy
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sbin/geom/class/sched/gsched.8
--- a/head/sbin/geom/class/sched/gsched.8	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sbin/geom/class/sched/gsched.8	Fri Aug 10 14:19:25 2012 +0300
@@ -23,9 +23,9 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\" $FreeBSD: head/sbin/geom/class/sched/gsched.8 233458 2012-03-25 09:21:=
09Z joel $
+.\" $FreeBSD: head/sbin/geom/class/sched/gsched.8 238899 2012-07-30 10:14:=
37Z joel $
 .\"
-.Dd August 29, 2010
+.Dd July 26, 2012
 .Dt GSCHED 8
 .Os
 .Sh NAME
@@ -135,19 +135,19 @@
 Exit status is 0 on success, and 1 if the command fails.
 .Sh EXAMPLES
 The following example shows how to create a scheduling provider for disk
-.Pa /dev/ad0 ,
+.Pa /dev/ada0 ,
 and how to destroy it.
 .Bd -literal -offset indent
 # Load the geom_sched module:
 kldload geom_sched
 # Load some scheduler classes used by geom_sched:
 kldload gsched_rr
-# Configure device ad0 to use scheduler "rr":
-geom sched insert -a rr ad0
-# Now provider ad0 uses the "rr" algorithm;
-# the new geom is ad0.sched.
+# Configure device ada0 to use scheduler "rr":
+geom sched insert -a rr ada0
+# Now provider ada0 uses the "rr" algorithm;
+# the new geom is ada0.sched.
 # Remove the scheduler on the device:
-geom sched destroy -v ad0.sched.
+geom sched destroy -v ada0.sched.
 .Ed
 .Sh SEE ALSO
 .Xr geom 4 ,
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sbin/geom/class/virstor/gvirstor.8
--- a/head/sbin/geom/class/virstor/gvirstor.8	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sbin/geom/class/virstor/gvirstor.8	Fri Aug 10 14:19:25 2012 +0300
@@ -22,9 +22,9 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\" $FreeBSD: head/sbin/geom/class/virstor/gvirstor.8 235873 2012-05-24 02=
:24:03Z wblock $
+.\" $FreeBSD: head/sbin/geom/class/virstor/gvirstor.8 239022 2012-08-03 20=
:30:40Z jimharris $
 .\"
-.Dd January 24, 2011
+.Dd August 3, 2012
 .Dt GVIRSTOR 8
 .Os
 .Sh NAME
@@ -43,6 +43,10 @@
 .Op Fl fv
 .Ar name ...
 .Nm
+.Cm destroy
+.Op Fl fv
+.Ar name ...
+.Nm
 .Cm add
 .Op Fl vh
 .Ar name prov ...
@@ -107,6 +111,9 @@
 .Ar name .
 This command does not touch on-disk metadata.
 As with other GEOM classes, stopped geoms cannot be started manually.
+.It Cm destroy
+Same as
+.Cm stop.
 .It Cm add
 Adds new components to existing virtual device with the given
 .Ar name .
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sbin/ggate/shared/ggate.h
--- a/head/sbin/ggate/shared/ggate.h	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sbin/ggate/shared/ggate.h	Fri Aug 10 14:19:25 2012 +0300
@@ -23,7 +23,7 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD$
+ * $FreeBSD: head/sbin/ggate/shared/ggate.h 239106 2012-08-06 21:02:40Z di=
m $
  */
=20
 #ifndef _GGATE_H_
@@ -95,8 +95,8 @@
=20
 void	g_gate_vlog(int priority, const char *message, va_list ap);
 void	g_gate_log(int priority, const char *message, ...);
-void	g_gate_xvlog(const char *message, va_list ap);
-void	g_gate_xlog(const char *message, ...);
+void	g_gate_xvlog(const char *message, va_list ap) __dead2;
+void	g_gate_xlog(const char *message, ...) __dead2;
 off_t	g_gate_mediasize(int fd);
 unsigned g_gate_sectorsize(int fd);
 void	g_gate_open_device(void);
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sbin/ipfw/dummynet.c
--- a/head/sbin/ipfw/dummynet.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sbin/ipfw/dummynet.c	Fri Aug 10 14:19:25 2012 +0300
@@ -10,7 +10,7 @@
  *
  * This software is provided ``AS IS'' without any warranties of any kind.
  *
- * $FreeBSD: head/sbin/ipfw/dummynet.c 232347 2012-03-01 17:35:16Z luigi $
+ * $FreeBSD: head/sbin/ipfw/dummynet.c 238900 2012-07-30 10:55:23Z luigi $
  *
  * dummynet support
  */
@@ -759,7 +759,8 @@
 void
 ipfw_config_pipe(int ac, char **av)
 {
-	int i, j;
+	int i;
+	u_int j;
 	char *end;
 	struct dn_id *buf, *base;
 	struct dn_sch *sch =3D NULL;
@@ -1282,8 +1283,8 @@
 			av--;
 		}
 		if (v[1] < v[0] ||
-			v[1] < 0 || v[1] >=3D DN_MAX_ID-1 ||
-			v[0] < 0 || v[1] >=3D DN_MAX_ID-1) {
+			v[1] >=3D DN_MAX_ID-1 ||
+			v[1] >=3D DN_MAX_ID-1) {
 			continue; /* invalid entry */
 		}
 		n++;
@@ -1310,11 +1311,12 @@
 dummynet_list(int ac, char *av[], int show_counters)
 {
 	struct dn_id *oid, *x =3D NULL;
-	int ret, i, l;
+	int ret, i;
 	int n; 		/* # of ranges */
-	int buflen;
-	int max_size;	/* largest obj passed up */
+	u_int buflen, l;
+	u_int max_size;	/* largest obj passed up */
=20
+	(void)show_counters;	// XXX unused, but we should use it.
 	ac--;
 	av++; 		/* skip 'list' | 'show' word */
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sbin/ipfw/ipfw2.c
--- a/head/sbin/ipfw/ipfw2.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sbin/ipfw/ipfw2.c	Fri Aug 10 14:19:25 2012 +0300
@@ -17,7 +17,7 @@
  *
  * NEW command line interface for IP firewall facility
  *
- * $FreeBSD: head/sbin/ipfw/ipfw2.c 233478 2012-03-25 20:37:59Z melifaro $
+ * $FreeBSD: head/sbin/ipfw/ipfw2.c 238903 2012-07-30 11:02:22Z luigi $
  */
=20
 #include <sys/types.h>
@@ -412,7 +412,7 @@
  * and calls setsockopt().
  * Function returns 0 on success or -1 otherwise.
  */
-int
+static int
 do_setcmd3(int optname, void *optval, socklen_t optlen)
 {
 	socklen_t len;
@@ -976,8 +976,9 @@
 #define	HAVE_OPTIONS	0x8000
=20
 static void
-show_prerequisites(int *flags, int want, int cmd __unused)
+show_prerequisites(int *flags, int want, int cmd)
 {
+	(void)cmd;	/* UNUSED */
 	if (co.comment_only)
 		return;
 	if ( (*flags & HAVE_IP) =3D=3D HAVE_IP)
@@ -3930,6 +3931,7 @@
 	uint32_t a, type, mask, addrlen;
 	uint32_t tables_max;
=20
+	mask =3D 0;	// XXX uninitialized ?
 	len =3D sizeof(tables_max);
 	if (sysctlbyname("net.inet.ip.fw.tables_max", &tables_max, &len,
 		NULL, 0) =3D=3D -1)
@@ -4135,7 +4137,7 @@
 		if (sz < xent->len)
 			break;
 		sz -=3D xent->len;
-		xent =3D (void *)xent + xent->len;
+		xent =3D (ipfw_table_xentry *)((char *)xent + xent->len);
 	}
=20
 	free(tbl);
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sbin/ipfw/nat.c
--- a/head/sbin/ipfw/nat.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sbin/ipfw/nat.c	Fri Aug 10 14:19:25 2012 +0300
@@ -17,7 +17,7 @@
  *
  * NEW command line interface for IP firewall facility
  *
- * $FreeBSD: head/sbin/ipfw/nat.c 227901 2011-11-23 18:38:08Z glebius $
+ * $FreeBSD: head/sbin/ipfw/nat.c 238900 2012-07-30 10:55:23Z luigi $
  *
  * In-kernel nat support
  */
@@ -318,6 +318,7 @@
 	char *sep =3D **av;
 	u_int c =3D 0;
=20
+	(void)ac;	/* UNUSED */
 	while ((sep =3D strchr(sep, ',')) !=3D NULL) {
 		c++;
 		sep++;
@@ -379,6 +380,7 @@
 	char *sep =3D **av;
 	u_int c =3D 0;
=20
+	(void)ac;	/* UNUSED */
 	while ((sep =3D strchr(sep, ',')) !=3D NULL) {
 		c++;
 		sep++;
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sbin/md5/Makefile
--- a/head/sbin/md5/Makefile	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sbin/md5/Makefile	Fri Aug 10 14:19:25 2012 +0300
@@ -1,15 +1,17 @@
 #	@(#)Makefile	8.1 (Berkeley) 6/9/93
-# $FreeBSD$
+# $FreeBSD: head/sbin/md5/Makefile 238964 2012-08-01 00:36:12Z delphij $
=20
 PROG=3D	md5
=20
 LINKS=3D	${BINDIR}/md5 ${BINDIR}/rmd160 \
 	${BINDIR}/md5 ${BINDIR}/sha1 \
-	${BINDIR}/md5 ${BINDIR}/sha256
+	${BINDIR}/md5 ${BINDIR}/sha256 \
+	${BINDIR}/md5 ${BINDIR}/sha512
=20
 MLINKS=3D	md5.1 rmd160.1 \
 	md5.1 sha1.1 \
-	md5.1 sha256.1
+	md5.1 sha256.1 \
+	md5.1 sha512.1
=20
 WFORMAT?=3D	1
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sbin/md5/md5.1
--- a/head/sbin/md5/md5.1	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sbin/md5/md5.1	Fri Aug 10 14:19:25 2012 +0300
@@ -1,9 +1,9 @@
-.\" $FreeBSD: head/sbin/md5/md5.1 235211 2012-05-10 02:07:00Z gjb $
-.Dd September 7, 2008
+.\" $FreeBSD: head/sbin/md5/md5.1 238964 2012-08-01 00:36:12Z delphij $
+.Dd July 31, 2012
 .Dt MD5 1
 .Os
 .Sh NAME
-.Nm md5 , sha1 , sha256 , rmd160
+.Nm md5 , sha1 , sha256 , sha512, rmd160
 .Nd calculate a message-digest fingerprint (checksum) for a file
 .Sh SYNOPSIS
 .Nm md5
@@ -21,6 +21,11 @@
 .Op Fl c Ar string
 .Op Fl s Ar string
 .Op Ar
+.Nm sha512
+.Op Fl pqrtx
+.Op Fl c Ar string
+.Op Fl s Ar string
+.Op Ar
 .Nm rmd160
 .Op Fl pqrtx
 .Op Fl c Ar string
@@ -28,7 +33,7 @@
 .Op Ar
 .Sh DESCRIPTION
 The
-.Nm md5 , sha1 , sha256
+.Nm md5 , sha1 , sha256 , sha512
 and
 .Nm rmd160
 utilities take as input a message of arbitrary length and produce as
@@ -41,7 +46,7 @@
 produce two messages having the same message digest, or to produce any
 message having a given prespecified target message digest.
 The
-.Tn MD5 , SHA-1 , SHA-256
+.Tn MD5 , SHA-1 , SHA-256 , SHA-512
 and
 .Tn RIPEMD-160
 algorithms are intended for digital signature applications, where a
@@ -104,7 +109,7 @@
 .El
 .Sh EXIT STATUS
 The
-.Nm md5 , sha1 , sha256
+.Nm md5 , sha1 , sha256 , sha512
 and
 .Nm rmd160
 utilities exit 0 on success,
@@ -115,7 +120,8 @@
 .Xr md5 3 ,
 .Xr ripemd 3 ,
 .Xr sha 3 ,
-.Xr sha256 3
+.Xr sha256 3 ,
+.Xr sha512 3
 .Rs
 .%A R. Rivest
 .%T The MD5 Message-Digest Algorithm
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sbin/md5/md5.c
--- a/head/sbin/md5/md5.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sbin/md5/md5.c	Fri Aug 10 14:19:25 2012 +0300
@@ -18,7 +18,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sbin/md5/md5.c 235205 2012-05-09 17:32:10Z eadler=
 $");
+__FBSDID("$FreeBSD: head/sbin/md5/md5.c 238964 2012-08-01 00:36:12Z delphi=
j $");
=20
 #include <sys/types.h>
 #include <sys/time.h>
@@ -28,6 +28,7 @@
 #include <ripemd.h>
 #include <sha.h>
 #include <sha256.h>
+#include <sha512.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
@@ -54,6 +55,7 @@
 extern const char *MD5TestOutput[MDTESTCOUNT];
 extern const char *SHA1_TestOutput[MDTESTCOUNT];
 extern const char *SHA256_TestOutput[MDTESTCOUNT];
+extern const char *SHA512_TestOutput[MDTESTCOUNT];
 extern const char *RIPEMD160_TestOutput[MDTESTCOUNT];
=20
 typedef struct Algorithm_t {
@@ -78,12 +80,14 @@
 	MD5_CTX md5;
 	SHA1_CTX sha1;
 	SHA256_CTX sha256;
+	SHA512_CTX sha512;
 	RIPEMD160_CTX ripemd160;
 } DIGEST_CTX;
=20
 /* max(MD5_DIGEST_LENGTH, SHA_DIGEST_LENGTH,
-	SHA256_DIGEST_LENGTH, RIPEMD160_DIGEST_LENGTH)*2+1 */
-#define HEX_DIGEST_LENGTH 65
+	SHA256_DIGEST_LENGTH, SHA512_DIGEST_LENGTH,
+	RIPEMD160_DIGEST_LENGTH)*2+1 */
+#define HEX_DIGEST_LENGTH 129
=20
 /* algorithm function table */
=20
@@ -97,6 +101,9 @@
 	{ "sha256", "SHA256", &SHA256_TestOutput, (DIGEST_Init*)&SHA256_Init,
 		(DIGEST_Update*)&SHA256_Update, (DIGEST_End*)&SHA256_End,
 		&SHA256_Data, &SHA256_File },
+	{ "sha512", "SHA512", &SHA512_TestOutput, (DIGEST_Init*)&SHA512_Init,
+		(DIGEST_Update*)&SHA512_Update, (DIGEST_End*)&SHA512_End,
+		&SHA512_Data, &SHA512_File },
 	{ "rmd160", "RMD160", &RIPEMD160_TestOutput,
 		(DIGEST_Init*)&RIPEMD160_Init, (DIGEST_Update*)&RIPEMD160_Update,
 		(DIGEST_End*)&RIPEMD160_End, &RIPEMD160_Data, &RIPEMD160_File }
@@ -320,6 +327,17 @@
 	"e6eae09f10ad4122a0e2a4075761d185a272ebd9f5aa489e998ff2f09cbfdd9f"
 };
=20
+const char *SHA512_TestOutput[MDTESTCOUNT] =3D {
+	"cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c=
5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e",
+	"1f40fc92da241694750979ee6cf582f2d5d7d28e18335de05abc54d0560e0f5302860c65=
2bf08d560252aa5e74210546f369fbbbce8c12cfc7957b2652fe9a75",
+	"ddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a2192992a=
274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49f",
+	"107dbf389d9e9f71a3a95f6c055b9251bc5268c2be16d6c13492ea45b0199f3309e16455=
ab1e96118e8a905d5597b72038ddb372a89826046de66687bb420e7c",
+	"4dbff86cc2ca1bae1e16468a05cb9881c97f1753bce3619034898faa1aabe429955a1bf8=
ec483d7421fe3c1646613a59ed5441fb0f321389f77f48a879c7b1f1",
+	"1e07be23c26a86ea37ea810c8ec7809352515a970e9253c26f536cfc7a9996c45c837058=
3e0a78fa4a90041d71a4ceab7423f19c71b9d5a3e01249f0bebd5894",
+	"72ec1ef1124a45b047e8b7c75a932195135bb61de24ec0d1914042246e0aec3a2354e093=
d76f3048b456764346900cb130d2a4fd5dd16abb5e30bcb850dee843",
+	"e8a835195e039708b13d9131e025f4441dbdc521ce625f245a436dcd762f54bf5cb298d9=
6235e6c6a304e087ec8189b9512cbdf6427737ea82793460c367b9c3"
+};
+
 const char *RIPEMD160_TestOutput[MDTESTCOUNT] =3D {
 	"9c1185a5c5e9fc54612808977ee8f548b2258d31",
 	"0bdc9d2d256b3ee9daae347be6f4dc835a467ffe",
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sbin/shutdown/shutdown.c
--- a/head/sbin/shutdown/shutdown.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sbin/shutdown/shutdown.c	Fri Aug 10 14:19:25 2012 +0300
@@ -39,7 +39,7 @@
 #endif /* not lint */
 #endif
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sbin/shutdown/shutdown.c 235855 2012-05-23 19:25:=
46Z jilles $");
+__FBSDID("$FreeBSD: head/sbin/shutdown/shutdown.c 238968 2012-08-01 09:10:=
21Z des $");
=20
 #include <sys/param.h>
 #include <sys/time.h>
@@ -93,7 +93,7 @@
 static const char *nosync, *whom;
=20
 static void badtime(void);
-static void perform_shutdown(void);
+static void die_you_gravy_sucking_pig_dog(void);
 static void finish(int);
 static void getoffset(char *);
 static void loop(void);
@@ -282,7 +282,7 @@
 		if (!tp->timeleft)
 			break;
 	}
-	perform_shutdown();
+	die_you_gravy_sucking_pig_dog();
 }
=20
 static jmp_buf alarmbuf;
@@ -349,7 +349,7 @@
 }
=20
 static void
-perform_shutdown(void)
+die_you_gravy_sucking_pig_dog(void)
 {
 	char *empty_environ[] =3D { NULL };
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/share/examples/kld/dyn_sysctl/dyn=
_sysctl.c
--- a/head/share/examples/kld/dyn_sysctl/dyn_sysctl.c	Mon Jul 30 11:44:18 2=
012 +0300
+++ b/head/share/examples/kld/dyn_sysctl/dyn_sysctl.c	Fri Aug 10 14:19:25 2=
012 +0300
@@ -23,7 +23,7 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- *     $FreeBSD$
+ *     $FreeBSD: head/share/examples/kld/dyn_sysctl/dyn_sysctl.c 239130 20=
12-08-07 13:11:47Z emaste $
  */
=20
 #include <sys/types.h>
@@ -59,7 +59,7 @@
=20
 	error =3D 0;
 	switch (cmd) {
-	case MOD_LOAD :
+	case MOD_LOAD:
 		/* Initialize the contexts */
 		printf("Initializing contexts and creating subtrees.\n\n");
 		sysctl_ctx_init(&clist);
@@ -123,7 +123,7 @@
 		    OID_AUTO, "string_c", CTLFLAG_RD, c, 0, "shouldn't panic");
 		printf("3. (%p)	/kern/dyn_sysctl  bad		(WRONG!)\n", &clist2);
 		break;
-	case MOD_UNLOAD :
+	case MOD_UNLOAD:
 		printf("1. Try to free ctx1 (%p): ", &clist);
 		if (sysctl_ctx_free(&clist) !=3D 0)
 			printf("failed: expected. Need to remove ctx3 first.\n");
@@ -153,7 +153,7 @@
 		} else
 			printf("Ok\n");
 		break;
-	default :
+	default:
 		error =3D EOPNOTSUPP;
 		break;
 	}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/share/man/man4/Makefile
--- a/head/share/man/man4/Makefile	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/share/man/man4/Makefile	Fri Aug 10 14:19:25 2012 +0300
@@ -1,5 +1,5 @@
 #	@(#)Makefile	8.1 (Berkeley) 6/18/93
-# $FreeBSD: head/share/man/man4/Makefile 237981 2012-07-02 08:31:29Z mav $
+# $FreeBSD: head/share/man/man4/Makefile 238983 2012-08-02 08:46:08Z luigi=
 $
=20
 MAN=3D	aac.4 \
 	acpi.4 \
@@ -509,6 +509,7 @@
 	utopia.4 \
 	uvisor.4 \
 	uvscom.4 \
+	vale.4 \
 	vga.4 \
 	vge.4 \
 	viapm.4 \
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/share/man/man4/ahci.4
--- a/head/share/man/man4/ahci.4	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/share/man/man4/ahci.4	Fri Aug 10 14:19:25 2012 +0300
@@ -1,4 +1,4 @@
-.\" Copyright (c) 2009 Alexander Motin <mav at FreeBSD.org>
+.\" Copyright (c) 2009-2012 Alexander Motin <mav at FreeBSD.org>
 .\" All rights reserved.
 .\"
 .\" Redistribution and use in source and binary forms, with or without
@@ -22,9 +22,9 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\" $FreeBSD: head/share/man/man4/ahci.4 237234 2012-06-18 19:11:07Z mariu=
s $
+.\" $FreeBSD: head/share/man/man4/ahci.4 238805 2012-07-26 13:44:48Z mav $
 .\"
-.Dd June 18, 2012
+.Dd July 25, 2012
 .Dt AHCI 4
 .Os
 .Sh NAME
@@ -132,7 +132,9 @@
 When supported by hardware, it allows to control per-port activity, locate
 and fault LEDs via the
 .Xr led 4
-API for localization and status reporting purposes.
+API or emulated
+.Xr ses 4
+device for localization and status reporting purposes.
 Supporting AHCI controllers may transmit that information to the backplane
 controllers via SGPIO interface. Backplane controllers interpret received
 statuses in some way (IBPI standard) to report them using present indicato=
rs.
@@ -153,11 +155,11 @@
 such as JMicron JMB36x and Marvell 88SE61xx.
 .Sh FILES
 .Bl -tag -width /dev/led/ahcich*.locate
-.It Pa /dev/led/ahcich*.act
+.It Pa /dev/led/ahci*.*.act
 activity LED device nodes
-.It Pa /dev/led/ahcich*.fault
+.It Pa /dev/led/ahci*.*.fault
 fault LED device nodes
-.It Pa /dev/led/ahcich*.locate
+.It Pa /dev/led/ahci*.*.locate
 locate LED device nodes
 .El
 .Sh SEE ALSO
@@ -166,7 +168,8 @@
 .Xr cam 4 ,
 .Xr cd 4 ,
 .Xr da 4 ,
-.Xr sa 4
+.Xr sa 4 ,
+.Xr ses 4
 .Sh HISTORY
 The
 .Nm
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/share/man/man4/hptiop.4
--- a/head/share/man/man4/hptiop.4	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/share/man/man4/hptiop.4	Fri Aug 10 14:19:25 2012 +0300
@@ -22,9 +22,9 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\" $FreeBSD: head/share/man/man4/hptiop.4 233422 2012-03-24 13:37:57Z joe=
l $
+.\" $FreeBSD: head/share/man/man4/hptiop.4 239084 2012-08-06 05:27:26Z del=
phij $
 .\"
-.Dd August 1, 2011
+.Dd August 5, 2012
 .Dt HPTIOP 4
 .Os
 .Sh NAME
@@ -58,34 +58,46 @@
 .Pp
 .Bl -bullet -compact
 .It
-HighPoint RocketRAID 4320
+HighPoint RocketRAID 4322
 .It
 HighPoint RocketRAID 4321
 .It
-HighPoint RocketRAID 4322
+HighPoint RocketRAID 4320
+.It
+HighPoint RocketRAID 4311
+.It
+HighPoint RocketRAID 4310
+.It
+HighPoint RocketRAID 4211
+.It
+HighPoint RocketRAID 4210
+.It
+HighPoint RocketRAID 3560
+.It
+HighPoint RocketRAID 3540
+.It
+HighPoint RocketRAID 3530
+.It
+HighPoint RocketRAID 3522
+.It
+HighPoint RocketRAID 3521
+.It
+HighPoint RocketRAID 3520
+.It
+HighPoint RocketRAID 3511
+.It
+HighPoint RocketRAID 3510
+.It
+HighPoint RocketRAID 3410
+.It
+HighPoint RocketRAID 3320
 .It
 HighPoint RocketRAID 3220
 .It
-HighPoint RocketRAID 3320
-.It
-HighPoint RocketRAID 3410
-.It
-HighPoint RocketRAID 3520
-.It
-HighPoint RocketRAID 3510
-.It
-HighPoint RocketRAID 3511
-.It
-HighPoint RocketRAID 3521
-.It
-HighPoint RocketRAID 3522
-.It
-HighPoint RocketRAID 3540
+HighPoint RocketRAID 3122
 .It
 HighPoint RocketRAID 3120
 .It
-HighPoint RocketRAID 3122
-.It
 HighPoint RocketRAID 3020
 .El
 .Sh NOTES
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/share/man/man4/netmap.4
--- a/head/share/man/man4/netmap.4	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/share/man/man4/netmap.4	Fri Aug 10 14:19:25 2012 +0300
@@ -21,12 +21,12 @@
 .\" 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.
-.\"
+.\"=20
 .\" This document is derived in part from the enet man page (enet.4)
 .\" distributed with 4.3BSD Unix.
 .\"
-.\" $FreeBSD: head/share/man/man4/netmap.4 235317 2012-05-12 03:25:46Z gjb=
 $
-.\" $Id: netmap.4 9662 2011-11-16 13:18:06Z luigi $: stable/8/share/man/ma=
n4/bpf.4 181694 2008-08-13 17:45:06Z ed $
+.\" $FreeBSD: head/share/man/man4/netmap.4 238987 2012-08-02 12:17:52Z joe=
l $
+.\" $Id: netmap.4 11563 2012-08-02 08:59:12Z luigi $: stable/8/share/man/m=
an4/bpf.4 181694 2008-08-13 17:45:06Z ed $
 .\"
 .Dd February 27, 2012
 .Dt NETMAP 4
@@ -46,7 +46,7 @@
 which is in charge of validating information through
 .Pa ioctl()
 and
-.Pa select()/poll() .
+.Pa select()/poll().
 .Nm
 can exploit the parallelism in multiqueue devices and
 multicore systems.
@@ -159,7 +159,7 @@
 int i =3D txring->slot[txring->cur].buf_idx;
 char *buf =3D NETMAP_BUF(txring, i);
 .Ed
-.Ss IOCTLS
+.Sh IOCTLS
 .Nm
 supports some ioctl() to synchronize the state of the rings
 between the kernel and the user processes, plus some
@@ -172,7 +172,7 @@
 struct nmreq {
         char      nr_name[IFNAMSIZ];
         uint32_t  nr_version;     /* API version */
-#define NETMAP_API      2         /* current version */
+#define NETMAP_API      3         /* current version */
         uint32_t  nr_offset;      /* nifp offset in the shared region */
         uint32_t  nr_memsize;     /* size of the shared region */
         uint32_t  nr_tx_slots;    /* slots in tx rings */
@@ -184,6 +184,8 @@
 #define NETMAP_SW_RING  0x2000    /* we process the sw ring */
 #define NETMAP_NO_TX_POLL 0x1000  /* no gratuitous txsync on poll */
 #define NETMAP_RING_MASK 0xfff    /* the actual ring number */
+        uint16_t        spare1;
+        uint32_t        spare2[4];
 };
=20
 .Ed
@@ -250,7 +252,7 @@
 tells the hardware of consumed packets, and asks for newly available
 packets.
 .El
-.Ss SYSTEM CALLS
+.Sh SYSTEM CALLS
 .Nm
 uses
 .Nm select
@@ -279,7 +281,7 @@
 fds.events =3D POLLOUT;
 for (;;) {
     poll(list, 1, -1);
-    while (ring->avail-- > 0) {
+    for ( ; ring->avail > 0 ; ring->avail--) {
         i =3D ring->cur;
         buf =3D NETMAP_BUF(ring, ring->slot[i].buf_index);
         ... prepare packet in buf ...
@@ -292,13 +294,31 @@
 .Nm
 supports the following interfaces:
 .Xr em 4 ,
+.Xr igb 4 ,
 .Xr ixgbe 4 ,
-.Xr re 4 ,
+.Xr lem 4 ,
+.Xr re 4
+.Sh SEE ALSO
+.Xr vale 4
+.Pp
+http://info.iet.unipi.it/~luigi/netmap/
+.Pp
+Luigi Rizzo, Revisiting network I/O APIs: the netmap framework,
+Communications of the ACM, 55 (3), pp.45-51, March 2012
+.Pp
+Luigi Rizzo, netmap: a novel framework for fast packet I/O,
+Usenix ATC'12, June 2012, Boston
 .Sh AUTHORS
+.An -nosplit
 The
 .Nm
-framework has been designed and implemented by
-.An Luigi Rizzo
-and
-.An Matteo Landi
-in 2011 at the Universita` di Pisa.
+framework has been designed and implemented at the
+Universita` di Pisa in 2011 by
+.An Luigi Rizzo ,
+with help from
+.An Matteo Landi ,
+.An Gaetano Catalli ,
+.An Giuseppe Lettieri .
+.Pp
+.Nm
+has been funded by the European Commission within FP7 Project CHANGE (2574=
22).
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/share/man/man4/polling.4
--- a/head/share/man/man4/polling.4	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/share/man/man4/polling.4	Fri Aug 10 14:19:25 2012 +0300
@@ -22,7 +22,7 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\" $FreeBSD$
+.\" $FreeBSD: head/share/man/man4/polling.4 239109 2012-08-06 22:43:49Z jf=
v $
 .\"
 .Dd April 6, 2007
 .Dt POLLING 4
@@ -184,6 +184,7 @@
 .Xr fwe 4 ,
 .Xr fwip 4 ,
 .Xr fxp 4 ,
+.Xr igb 4 ,
 .Xr ixgb 4 ,
 .Xr nfe 4 ,
 .Xr nge 4 ,
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/share/man/man4/umodem.4
--- a/head/share/man/man4/umodem.4	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/share/man/man4/umodem.4	Fri Aug 10 14:19:25 2012 +0300
@@ -27,9 +27,9 @@
 .\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF=
 THE
 .\" POSSIBILITY OF SUCH DAMAGE.
 .\"
-.\" $FreeBSD: head/share/man/man4/umodem.4 227750 2011-11-20 12:18:21Z miw=
i $
+.\" $FreeBSD: head/share/man/man4/umodem.4 239090 2012-08-06 08:59:39Z gle=
bius $
 .\"
-.Dd November 20, 2011
+.Dd August 6, 2012
 .Dt UMODEM 4
 .Os
 .Sh NAME
@@ -92,6 +92,8 @@
 ELSA MicroLink 56k USB modem
 .It
 Sony Ericsson W810i phone
+.It
+Sonim XP5300 Force
 .El
 .Sh SEE ALSO
 .Xr tty 4 ,
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/share/man/man4/uplcom.4
--- a/head/share/man/man4/uplcom.4	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/share/man/man4/uplcom.4	Fri Aug 10 14:19:25 2012 +0300
@@ -27,9 +27,9 @@
 .\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF=
 THE
 .\" POSSIBILITY OF SUCH DAMAGE.
 .\"
-.\" $FreeBSD: head/share/man/man4/uplcom.4 227750 2011-11-20 12:18:21Z miw=
i $
+.\" $FreeBSD: head/share/man/man4/uplcom.4 238774 2012-07-25 17:25:44Z gav=
in $
 .\"
-.Dd November 20, 2011
+.Dd July 25, 2012
 .Dt UPLCOM 4
 .Os
 .Sh NAME
@@ -118,6 +118,8 @@
 .It
 Mobile Action MA-620 Infrared Adapter
 .It
+Motorola Cables
+.It
 Nokia CA-42 Cable
 .It
 OTI DKU-5 cable
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/share/man/man4/uslcom.4
--- a/head/share/man/man4/uslcom.4	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/share/man/man4/uslcom.4	Fri Aug 10 14:19:25 2012 +0300
@@ -14,14 +14,14 @@
 .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
 .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 .\"
-.\" $FreeBSD: head/share/man/man4/uslcom.4 235317 2012-05-12 03:25:46Z gjb=
 $
+.\" $FreeBSD: head/share/man/man4/uslcom.4 239037 2012-08-04 15:11:36Z gav=
in $
 .\"
-.Dd November 20, 2011
+.Dd August 4, 2012
 .Dt USLCOM 4
 .Os
 .Sh NAME
 .Nm uslcom
-.Nd Silicon Laboratories CP2101/CP2102 based USB serial adapter
+.Nd Silicon Laboratories CP2101/CP2102/CP2103/CP2104/CP2105 based USB seri=
al adapter
 .Sh SYNOPSIS
 To compile this driver into the kernel,
 place the following lines in your
@@ -41,7 +41,8 @@
 .Sh DESCRIPTION
 The
 .Nm
-driver supports Silicon Laboratories CP2101/CP2102 based USB serial adapte=
rs.
+driver supports Silicon Laboratories CP2101/CP2102/CP2103/CP2104/CP2105
+based USB serial adapters.
 .Sh HARDWARE
 The following devices should work with the
 .Nm
@@ -49,29 +50,147 @@
 .Pp
 .Bl -bullet -compact
 .It
+AC-Services CAN, CIS-IBUS, IBUS and OBD interfaces
+.It
+Aerocomm Radio
+.It
+AKTACOM ACE-1001 cable
+.It
+AMBER Wireless AMB2560
+.It
+Arkham DS-101 Adapter
+.It
 Argussoft ISP
 .It
+Arygon Technologies Mifare RFID Reader
+.It
+AVIT Research USB-TTL interface
+.It
+B&G H3000 Data Cable
+.It
+Balluff RFID reader
+.It
 Baltech card reader
 .It
+BEI USB VCP Sensor
+.It
 Burnside Telecom Desktop Mobile
 .It
 chip45.com Crumb128 module
 .It
+Clipsal 5000CT2, 5500PACA, 5500PCU, 560884, 5800PC, C5000CT2
+and L51xx C-Bus Home Automation products
+.It
+Commander 2 EDGE(GSM) Modem
+.It
+Cygnal Fasttrax GPS and Debug adapter
+.It
+DataApex MultiCOM USB to RS232 converter
+.It
+Degree Controls USB adapter
+.It
+DekTec DTA Plus VHF/UHF Booster
+.It
+Dell DW700 GPS Receiver
+.It
+Digianswer ZigBee/802.15.4 MAC
+.It
+Dynastream ANT Development kits
+.It
+Elan USBcount50, USBscope50, USBpulse100 and USBwave12
+.It
+ELV USB-I2C interface
+.It
+EMS C1007 HF RFID controller
+.It
+Festo CPX-USB and CMSP interfaces
+.It
+Gemalto Prox-PU/CU contactless card reader
+.It
+Helicomm IP-Link 1220-DVM
+.It
+IMS USB-RS422 adapter
+.It
+Infinity GPS-MIC-1 Radio Monophone
+.It
+INSYS Modem
+.It
+IRZ SG-10 and MC35pu GSM/GPRS Modems
+.It
 Jablotron PC-60B
 .It
-Lipowsky Baby-JTAG
+Kamstrup M-Bus Master MultiPort 250D
+and Optical Eye/3 wire utility meter interfaces
 .It
-Lipowsky Baby-LIN
+Kyocera GPS
 .It
-Lipowsky HARP-1
+Link Instruments MS-019 and MS-028
+Oscilloscope/Logic Analyzer/Pattern Generators
+.It
+Lipowsky Baby-JTAG, Baby-LIN and HARP-1
+.It
+MEI CashFlow SC and Series 2000 cash acceptors
+.It
+MJS USB-TOSLINK Adapter
+.It
+MobiData GPRS USB Modems
+.It
+MSD DashHawk
+.It
+Multiplex RC adapter
+.It
+Optris MSpro LT Thermometer
+.It
+Owen AC4 USB-RS485 converter
+.It
+Pirelli DP-L10 SIP phone
+.It
+PLX CA-42 Phone cable
 .It
 Pololu USB to Serial
 .It
-Silicon Laboratories CP2101
+Procyon AVS Mind Machine
 .It
-Silicon Laboratories CP2102
+Renesas RX-Stick for RX610
+.It
+Siemens MC60 Cable
+.It
+Silicon Laboratories generic CP2101/CP2102/CP2103/CP2104/CP2105 chips
+.It
+Software Bisque Paramount ME
+.It
+SPORTident BSM7-D USB
+.It
+Suunto Sports Instrument
+.It
+Syntech CipherLab USB Barcode Scanner
+.It
+T-Com TC 300 SIP phone
+.It
+Tams Master Easy Control
+.It
+Telegesis ETRX2USB
+.It
+Timewave HamLinkUSB
+.It
+Tracient RFID Reader
 .It
 Track Systems Traqmate
+.It
+Vaisala USB Instrument cable
+.It
+VStabi Controller
+.It
+WAGO 750-923 USB Service Cable
+.It
+WaveSense Jazz Blood Glucose Meter
+.It
+WIENER Plein & Baus CML Data Logger, RCM Remote,
+and PL512 and MPOD PSUs
+.It
+WMR RIGblaster Plug&Play and RIGtalk RT1
+.It
+Zephyr Bioharness
 .El
 .Sh SEE ALSO
 .Xr tty 4 ,
@@ -91,8 +210,3 @@
 .Nm
 driver was written by
 .An Jonathan Gray Aq jsg at openbsd.org .
-.Sh CAVEATS
-Setting hardware flow control is not currently supported.
-.Pp
-Silicon Laboratories do not release any programming information
-on their products.
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/share/man/man4/vale.4
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/head/share/man/man4/vale.4	Fri Aug 10 14:19:25 2012 +0300
@@ -0,0 +1,131 @@
+.\" Copyright (c) 2012 Luigi Rizzo, Universita` di Pisa
+.\" 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 PUR=
POSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUEN=
TIAL
+.\" 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, ST=
RICT
+.\" 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.
+.\"=20
+.\" This document is derived in part from the enet man page (enet.4)
+.\" distributed with 4.3BSD Unix.
+.\"
+.\" $FreeBSD: head/share/man/man4/vale.4 238986 2012-08-02 12:16:46Z joel $
+.\" $Id: $
+.\"
+.Dd July 27, 2012
+.Dt VALE 4
+.Os
+.Sh NAME
+.Nm vale
+.Nd a very fast Virtual Local Ethernet using the netmap API
+.Sh SYNOPSIS
+.Cd device netmap
+.Sh DESCRIPTION
+.Nm
+is a feature of the
+.Nm netmap
+module that implements multiple Virtual switches that can
+be used to interconnect netmap clients, including traffic
+sources and sinks, packet forwarders, userspace firewalls,
+and so on.
+.Pp
+.Nm
+is implemented completely in software, and is extremely fast.
+On a modern machine it can move almost 20 Million packets per
+second (Mpps) per core with small frames, and about 70 Gbit/s
+with 1500 byte frames.
+.Sh OPERATION
+.Nm
+dynamically creates switches and ports as client connect
+to it using the
+.Xr netmap 4
+API.
+.Pp
+.Nm
+ports are named
+.Pa vale[bdg:][port]
+where
+.Pa vale
+is the prefix indicating a VALE switch rather than a standard interface,
+.Pa bdg
+indicates a specific switch (the colon is a separator),
+and
+.Pa port
+indicates a port within the switch.
+Bridge and ports names are arbitrary strings, the only
+constraint being that the full name must fit within 16
+characters.
+.Pp
+See
+.Xr netmap 4
+for details on the API.
+.Ss LIMITS
+.Nm
+currently supports up to 4 switches, 16 ports per switch,
+1024 buffers per port. These hard limits will be
+changed to sysctl variables in future releases.
+.Sh SYSCTL VARIABLES
+.Nm
+uses the following sysctl variables to control operation:
+.Bl -tag -width 12
+.It dev.netmap.bridge
+The maximum number of packets processed internally
+in each iteration.
+Defaults to 1024, use lower values to trade latency
+with throughput.
+.Pp
+.It dev.netmap.verbose
+Set to non-zero values to enable in-kernel diagnostics.
+.El
+.Sh EXAMPLES
+Create one switch, with a traffic generator connected to one
+port, and a netmap-enabled tcpdump instance on another port:
+.Bd -literal -offset indent
+tcpdump -ni vale-a:1 &
+pkt-gen  -i vale-a:0 -f tx &
+.Ed
+.Pp
+Create two switches,
+each connected to two qemu machines on different ports.
+.Bd -literal -offset indent
+qemu -net nic -net netmap,ifname=3Dvale-1:a ... &
+qemu -net nic -net netmap,ifname=3Dvale-1:b ... &
+qemu -net nic -net netmap,ifname=3Dvale-2:c ... &
+qemu -net nic -net netmap,ifname=3Dvale-2:d ... &
+.Ed
+.Sh SEE ALSO
+.Xr netmap 4
+.Pp
+.Xr http://info.iet.unipi.it/~luigi/vale/
+.Pp
+Luigi Rizzo, Giuseppe Lettieri: VALE, a switched ethernet for virtual mach=
ines,
+June 2012, http://info.iet.unipi.it/~luigi/vale/
+.Sh AUTHORS
+.An -nosplit
+The
+.Nm
+switch  has been designed and implemented in 2012 by
+.An Luigi Rizzo
+and
+.An Giuseppe Lettieri
+at the Universita` di Pisa.
+.Pp
+.Nm
+has been funded by the European Commission within FP7 Projects
+CHANGE (257422) and OPENLAB (287581).
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/share/man/man5/rc.conf.5
--- a/head/share/man/man5/rc.conf.5	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/share/man/man5/rc.conf.5	Fri Aug 10 14:19:25 2012 +0300
@@ -22,7 +22,7 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\" $FreeBSD: head/share/man/man5/rc.conf.5 238707 2012-07-22 23:21:21Z gj=
b $
+.\" $FreeBSD: head/share/man/man5/rc.conf.5 239049 2012-08-05 08:19:52Z ea=
dler $
 .\"
 .Dd July 22, 2012
 .Dt RC.CONF 5
@@ -1201,7 +1201,7 @@
 with the vlan tag 101 and the optional the IPv4 address 192.0.2.1/24:
 .Bd -literal
 vlans_em0=3D"101"
-ifconfig_em0_101=3D"inet 192.0.2.1/24"
+ipv4_addrs_em0_101=3D"192.0.2.1/24"
 .Ed
 .Pp
 To create a vlan device named
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/share/misc/bsd-family-tree
--- a/head/share/misc/bsd-family-tree	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/share/misc/bsd-family-tree	Fri Aug 10 14:19:25 2012 +0300
@@ -254,7 +254,8 @@
  |    9.0      |      |      |                 |               DragonFly 3=
.0.1
  |     v    FreeBSD   |      |                 |                       |
  |            8.3     |      |             OpenBSD 5.1                 |
- |                    |      |                 |                       |
+ |                 Mac OS X  |                 |                       |
+ |                   10.8    |                 |                       |
 FreeBSD 10 -current   |  NetBSD -current  OpenBSD -current             |
  |                    |      |                 |                       |
  v                    v      v                 v                       v
@@ -547,6 +548,7 @@
 DragonFly 3.0.1		2012-02-21 [DFB]
 FreeBSD 8.3		2012-04-18 [FBD]
 OpenBSD 5.1		2012-05-01 [OBD]
+Mac OS X 10.8		2012-07-25 [APL]
=20
 Bibliography
 ------------------------
@@ -607,4 +609,4 @@
 Copyright (c) 1997-2012 Wolfram Schneider <wosch at FreeBSD.ORG>
 URL: http://cvsweb.freebsd.org/src/share/misc/bsd-family-tree
=20
-$FreeBSD: head/share/misc/bsd-family-tree 235199 2012-05-09 16:06:20Z pluk=
net $
+$FreeBSD: head/share/misc/bsd-family-tree 238801 2012-07-26 11:51:29Z pluk=
net $
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/share/misc/committers-ports.dot
--- a/head/share/misc/committers-ports.dot	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/share/misc/committers-ports.dot	Fri Aug 10 14:19:25 2012 +0300
@@ -1,4 +1,4 @@
-# $FreeBSD: head/share/misc/committers-ports.dot 238058 2012-07-03 07:28:5=
7Z zeising $
+# $FreeBSD: head/share/misc/committers-ports.dot 238976 2012-08-01 17:48:3=
8Z bdrewery $
=20
 # This file is meant to list all FreeBSD ports committers and describe the
 # mentor-mentee relationships between them.
@@ -57,6 +57,7 @@
 avl [label=3D"Alexander Logvinov\navl at FreeBSD.org\n2009/05/27"]
 az [label=3D"Andrej Zverev\naz at FreeBSD.org\n2005/10/03"]
 bapt [label=3D"Baptiste Daroussin\nbapt at FreeBSD.org\n2010/07/27"]
+bdrewery [label=3D"Bryan Drewery\nbdrewery at FreeBSD.org\n2012/07/31"]
 beat [label=3D"Beat Gaetzi\nbeat at FreeBSD.org\n2009/01/28"]
 beech [label=3D"Beech Rintoul\nbeech at FreeBSD.org\n2007/05/30"]
 bf [label=3D"Brendan Fabeny\nbf at FreeBSD.org\n2010/06/02"]
@@ -226,6 +227,7 @@
=20
 avilla -> rakuco
=20
+bapt -> bdrewery
 bapt -> eadler
 bapt -> jlaffaye
=20
@@ -263,6 +265,7 @@
 demon -> mat
=20
 eadler -> ak
+eadler -> bdrewery
 eadler -> gjb
 eadler -> tj
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/amd64/amd64/elf_machdep.c
--- a/head/sys/amd64/amd64/elf_machdep.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/amd64/amd64/elf_machdep.c	Fri Aug 10 14:19:25 2012 +0300
@@ -24,7 +24,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
+__FBSDID("$FreeBSD: head/sys/amd64/amd64/elf_machdep.c 239123 2012-08-07 0=
5:46:36Z pluknet $");
=20
 #include <sys/param.h>
 #include <sys/kernel.h>
@@ -36,7 +36,6 @@
 #include <sys/sysent.h>
 #include <sys/imgact_elf.h>
 #include <sys/syscall.h>
-#include <sys/sysent.h>
 #include <sys/signalvar.h>
 #include <sys/vnode.h>
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/amd64/amd64/fpu.c
--- a/head/sys/amd64/amd64/fpu.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/amd64/amd64/fpu.c	Fri Aug 10 14:19:25 2012 +0300
@@ -31,7 +31,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/amd64/amd64/fpu.c 238671 2012-07-21 13:53:00Z=
 kib $");
+__FBSDID("$FreeBSD: head/sys/amd64/amd64/fpu.c 238914 2012-07-30 19:26:02Z=
 kib $");
=20
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -106,7 +106,7 @@
 void	fxsave(caddr_t addr);
 void	fxrstor(caddr_t addr);
 void	ldmxcsr(u_int csr);
-void	stmxcsr(u_int csr);
+void	stmxcsr(u_int *csr);
 void	xrstor(char *addr, uint64_t mask);
 void	xsave(char *addr, uint64_t mask);
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/amd64/amd64/initcpu.c
--- a/head/sys/amd64/amd64/initcpu.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/amd64/amd64/initcpu.c	Fri Aug 10 14:19:25 2012 +0300
@@ -28,7 +28,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/amd64/amd64/initcpu.c 233702 2012-03-30 16:32=
:41Z jkim $");
+__FBSDID("$FreeBSD: head/sys/amd64/amd64/initcpu.c 239125 2012-08-07 08:36=
:10Z kib $");
=20
 #include "opt_cpu.h"
=20
@@ -91,11 +91,17 @@
 	 *
 	 * http://support.amd.com/us/Processor_TechDocs/41322_10h_Rev_Gd.pdf
 	 * http://support.amd.com/us/Processor_TechDocs/44739_12h_Rev_Gd.pdf
+	 *
+	 * Hypervisors do not provide access to the errata MSR,
+	 * causing #GP exception on attempt to apply the errata.  The
+	 * MSR write shall be done on host and persist globally
+	 * anyway, so do not try to do it when under virtualization.
 	 */
 	switch (CPUID_TO_FAMILY(cpu_id)) {
 	case 0x10:
 	case 0x12:
-		wrmsr(0xc0011029, rdmsr(0xc0011029) | 1);
+		if ((cpu_feature2 & CPUID2_HV) =3D=3D 0)
+			wrmsr(0xc0011029, rdmsr(0xc0011029) | 1);
 		break;
 	}
 }
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/amd64/amd64/pmap.c
--- a/head/sys/amd64/amd64/pmap.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/amd64/amd64/pmap.c	Fri Aug 10 14:19:25 2012 +0300
@@ -77,7 +77,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/amd64/amd64/pmap.c 238610 2012-07-19 05:34:19=
Z alc $");
+__FBSDID("$FreeBSD: head/sys/amd64/amd64/pmap.c 239137 2012-08-08 05:28:30=
Z alc $");
=20
 /*
  *	Manages physical address maps.
@@ -3439,7 +3439,6 @@
 	pv_entry_t pv;
 	vm_paddr_t opa, pa;
 	vm_page_t mpte, om;
-	boolean_t invlva;
=20
 	va =3D trunc_page(va);
 	KASSERT(va <=3D VM_MAX_KERNEL_ADDRESS, ("pmap_enter: toobig"));
@@ -3453,9 +3452,13 @@
 	    VM_OBJECT_LOCKED(m->object),
 	    ("pmap_enter: page %p is not busy", m));
 	pa =3D VM_PAGE_TO_PHYS(m);
-	newpte =3D (pt_entry_t)(pa | pmap_cache_bits(m->md.pat_mode, 0) | PG_V);
+	newpte =3D (pt_entry_t)(pa | PG_A | PG_V);
+	if ((access & VM_PROT_WRITE) !=3D 0)
+		newpte |=3D PG_M;
 	if ((prot & VM_PROT_WRITE) !=3D 0)
 		newpte |=3D PG_RW;
+	KASSERT((newpte & (PG_M | PG_RW)) !=3D PG_M,
+	    ("pmap_enter: access includes VM_PROT_WRITE but prot doesn't"));
 	if ((prot & VM_PROT_EXECUTE) =3D=3D 0)
 		newpte |=3D pg_nx;
 	if (wired)
@@ -3464,8 +3467,9 @@
 		newpte |=3D PG_U;
 	if (pmap =3D=3D kernel_pmap)
 		newpte |=3D PG_G;
-
-	mpte =3D om =3D NULL;
+	newpte |=3D pmap_cache_bits(m->md.pat_mode, 0);
+
+	mpte =3D NULL;
=20
 	lock =3D NULL;
 	rw_rlock(&pvh_global_lock);
@@ -3495,7 +3499,6 @@
 		panic("pmap_enter: invalid page directory va=3D%#lx", va);
=20
 	origpte =3D *pte;
-	opa =3D origpte & PG_FRAME;
=20
 	/*
 	 * Is the specified virtual address already mapped?
@@ -3507,9 +3510,9 @@
 		 * are valid mappings in them. Hence, if a user page is wired,
 		 * the PT page will be also.
 		 */
-		if (wired && (origpte & PG_W) =3D=3D 0)
+		if ((newpte & PG_W) !=3D 0 && (origpte & PG_W) =3D=3D 0)
 			pmap->pm_stats.wired_count++;
-		else if (!wired && (origpte & PG_W))
+		else if ((newpte & PG_W) =3D=3D 0 && (origpte & PG_W) !=3D 0)
 			pmap->pm_stats.wired_count--;
=20
 		/*
@@ -3523,31 +3526,27 @@
 		}
=20
 		/*
-		 * Has the mapping changed?
+		 * Has the physical page changed?
 		 */
+		opa =3D origpte & PG_FRAME;
 		if (opa =3D=3D pa) {
 			/*
 			 * No, might be a protection or wiring change.
 			 */
 			if ((origpte & PG_MANAGED) !=3D 0) {
 				newpte |=3D PG_MANAGED;
-				om =3D m;
+				if ((newpte & PG_RW) !=3D 0)
+					vm_page_aflag_set(m, PGA_WRITEABLE);
 			}
-			if ((origpte & ~(PG_M | PG_A)) =3D=3D newpte)
+			if (((origpte ^ newpte) & ~(PG_M | PG_A)) =3D=3D 0)
 				goto unchanged;
 			goto validate;
-		} else {
-			/*
-			 * Yes, fall through to validate the new mapping.
-			 */
-			if ((origpte & PG_MANAGED) !=3D 0)
-				om =3D PHYS_TO_VM_PAGE(opa);
 		}
 	} else {
 		/*
 		 * Increment the counters.
 		 */
-		if (wired)
+		if ((newpte & PG_W) !=3D 0)
 			pmap->pm_stats.wired_count++;
 		pmap_resident_count_inc(pmap, 1);
 	}
@@ -3561,42 +3560,50 @@
 		pv->pv_va =3D va;
 		CHANGE_PV_LIST_LOCK_TO_PHYS(&lock, pa);
 		TAILQ_INSERT_TAIL(&m->md.pv_list, pv, pv_list);
+		if ((newpte & PG_RW) !=3D 0)
+			vm_page_aflag_set(m, PGA_WRITEABLE);
 	}
=20
-validate:
-
 	/*
 	 * Update the PTE.
 	 */
-	newpte |=3D PG_A;
-	if ((access & VM_PROT_WRITE) !=3D 0)
-		newpte |=3D PG_M;
-	if ((newpte & (PG_MANAGED | PG_RW)) =3D=3D (PG_MANAGED | PG_RW))
-		vm_page_aflag_set(m, PGA_WRITEABLE);
 	if ((origpte & PG_V) !=3D 0) {
-		invlva =3D FALSE;
+validate:
 		origpte =3D pte_load_store(pte, newpte);
-		if ((origpte & PG_A) !=3D 0 && (opa !=3D pa ||
-		    ((origpte & PG_NX) =3D=3D 0 && (newpte & PG_NX) !=3D 0)))
-			invlva =3D TRUE;
-		if ((origpte & (PG_M | PG_RW)) =3D=3D (PG_M | PG_RW)) {
+		opa =3D origpte & PG_FRAME;
+		if (opa !=3D pa) {
+			if ((origpte & PG_MANAGED) !=3D 0) {
+				om =3D PHYS_TO_VM_PAGE(opa);
+				if ((origpte & (PG_M | PG_RW)) =3D=3D (PG_M |
+				    PG_RW))
+					vm_page_dirty(om);
+				if ((origpte & PG_A) !=3D 0)
+					vm_page_aflag_set(om, PGA_REFERENCED);
+				CHANGE_PV_LIST_LOCK_TO_PHYS(&lock, opa);
+				pmap_pvh_free(&om->md, pmap, va);
+				if ((om->aflags & PGA_WRITEABLE) !=3D 0 &&
+				    TAILQ_EMPTY(&om->md.pv_list) &&
+				    ((om->flags & PG_FICTITIOUS) !=3D 0 ||
+				    TAILQ_EMPTY(&pa_to_pvh(opa)->pv_list)))
+					vm_page_aflag_clear(om, PGA_WRITEABLE);
+			}
+		} else if ((newpte & PG_M) =3D=3D 0 && (origpte & (PG_M |
+		    PG_RW)) =3D=3D (PG_M | PG_RW)) {
 			if ((origpte & PG_MANAGED) !=3D 0)
-				vm_page_dirty(om);
-			if ((newpte & PG_RW) =3D=3D 0)
-				invlva =3D TRUE;
+				vm_page_dirty(m);
+
+			/*
+			 * Although the PTE may still have PG_RW set, TLB
+			 * invalidation may nonetheless be required because
+			 * the PTE no longer has PG_M set.
+			 */
+		} else if ((origpte & PG_NX) !=3D 0 || (newpte & PG_NX) =3D=3D 0) {
+			/*
+			 * This PTE change does not require TLB invalidation.
+			 */
+			goto unchanged;
 		}
-		if (opa !=3D pa && (origpte & PG_MANAGED) !=3D 0) {
-			if ((origpte & PG_A) !=3D 0)
-				vm_page_aflag_set(om, PGA_REFERENCED);
-			CHANGE_PV_LIST_LOCK_TO_PHYS(&lock, opa);
-			pmap_pvh_free(&om->md, pmap, va);
-			if ((om->aflags & PGA_WRITEABLE) !=3D 0 &&
-			    TAILQ_EMPTY(&om->md.pv_list) &&
-			    ((om->flags & PG_FICTITIOUS) !=3D 0 ||
-			    TAILQ_EMPTY(&pa_to_pvh(opa)->pv_list)))
-				vm_page_aflag_clear(om, PGA_WRITEABLE);
-		}
-		if (invlva)
+		if ((origpte & PG_A) !=3D 0)
 			pmap_invalidate_page(pmap, va);
 	} else
 		pte_store(pte, newpte);
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/amd64/include/cpufunc.h
--- a/head/sys/amd64/include/cpufunc.h	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/amd64/include/cpufunc.h	Fri Aug 10 14:19:25 2012 +0300
@@ -27,7 +27,7 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: head/sys/amd64/include/cpufunc.h 238311 2012-07-09 20:55:39Z =
jhb $
+ * $FreeBSD: head/sys/amd64/include/cpufunc.h 238972 2012-08-01 17:24:53Z =
kib $
  */
=20
 /*
@@ -290,6 +290,13 @@
 }
=20
 static __inline void
+lfence(void)
+{
+
+	__asm __volatile("lfence" : : : "memory");
+}
+
+static __inline void
 mfence(void)
 {
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/arm/arm/bcopyinout.S
--- a/head/sys/arm/arm/bcopyinout.S	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/arm/arm/bcopyinout.S	Fri Aug 10 14:19:25 2012 +0300
@@ -39,13 +39,14 @@
 #include "assym.s"
=20
 #include <machine/asm.h>
+#include <sys/errno.h>
=20
 .L_arm_memcpy:
 	.word	_C_LABEL(_arm_memcpy)
 .L_min_memcpy_size:
 	.word	_C_LABEL(_min_memcpy_size)
=20
-__FBSDID("$FreeBSD$");
+__FBSDID("$FreeBSD: head/sys/arm/arm/bcopyinout.S 239033 2012-08-04 05:38:=
25Z andrew $");
 #ifdef _ARM_ARCH_5E
 #include <arm/arm/bcopyinout_xscale.S>
 #else
@@ -310,7 +311,7 @@
 	RET
=20
 .Lcopyfault:
-	mov	r0, #14 /* EFAULT */
+	ldr	r0, =3DEFAULT
 	str	r5, [r4, #PCB_ONFAULT]
 	RESTORE_REGS
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/arm/arm/bcopyinout_xscale.S
--- a/head/sys/arm/arm/bcopyinout_xscale.S	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/arm/arm/bcopyinout_xscale.S	Fri Aug 10 14:19:25 2012 +0300
@@ -36,7 +36,7 @@
  */
=20
 #include <machine/asm.h>
-__FBSDID("$FreeBSD: head/sys/arm/arm/bcopyinout_xscale.S 236991 2012-06-13=
 04:59:55Z imp $");
+__FBSDID("$FreeBSD: head/sys/arm/arm/bcopyinout_xscale.S 239033 2012-08-04=
 05:38:25Z andrew $");
=20
 	.text
 	.align	0
@@ -108,6 +108,7 @@
 	ldmfd	sp!, {r10-r11, pc}
=20
 .Lcopyin_fault:
+	ldr	r0, =3DEFAULT
 	str	r11, [r10, #PCB_ONFAULT]
 	cmp	r3, #0x00
 	ldmgtfd	sp!, {r4-r7}		/* r3 > 0 Restore r4-r7 */
@@ -559,6 +560,7 @@
 	ldmfd	sp!, {r10-r11, pc}
=20
 .Lcopyout_fault:
+	ldr	r0, =3DEFAULT
 	str	r11, [r10, #PCB_ONFAULT]
 	cmp	r3, #0x00
 	ldmgtfd	sp!, {r4-r7}		/* r3 > 0 Restore r4-r7 */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/arm/arm/exception.S
--- a/head/sys/arm/arm/exception.S	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/arm/arm/exception.S	Fri Aug 10 14:19:25 2012 +0300
@@ -51,7 +51,7 @@
 #include <machine/asm.h>
 #include <machine/armreg.h>
 #include <machine/asmacros.h>
-__FBSDID("$FreeBSD: head/sys/arm/arm/exception.S 236991 2012-06-13 04:59:5=
5Z imp $");
+__FBSDID("$FreeBSD: head/sys/arm/arm/exception.S 239032 2012-08-04 05:31:2=
6Z andrew $");
=20
 	.text=09
 	.align	0
@@ -80,7 +80,10 @@
 	PUSHFRAME
=20
 	mov	r0, sp			/* Pass the frame to any function */
+	mov	r6, sp			/* Backup the stack pointer */
+	bic	sp, sp, #7		/* Align the stack pointer */
 	bl	_C_LABEL(swi_handler)	/* It's a SWI ! */
+	mov	sp, r6			/* Restore the stack */
=20
 	DO_AST
 	PULLFRAME
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/arm/arm/pmap.c
--- a/head/sys/arm/arm/pmap.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/arm/arm/pmap.c	Fri Aug 10 14:19:25 2012 +0300
@@ -140,7 +140,7 @@
 #include "opt_vm.h"
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/arm/arm/pmap.c 236991 2012-06-13 04:59:55Z im=
p $");
+__FBSDID("$FreeBSD: head/sys/arm/arm/pmap.c 239065 2012-08-05 14:11:42Z ki=
b $");
 #include <sys/param.h>
 #include <sys/systm.h>
 #include <sys/kernel.h>
@@ -154,6 +154,7 @@
 #include <sys/sched.h>
=20
 #include <vm/vm.h>
+#include <vm/vm_param.h>
 #include <vm/uma.h>
 #include <vm/pmap.h>
 #include <vm/vm_kern.h>
@@ -165,7 +166,6 @@
 #include <sys/lock.h>
 #include <sys/mutex.h>
 #include <machine/md_var.h>
-#include <machine/vmparam.h>
 #include <machine/cpu.h>
 #include <machine/cpufunc.h>
 #include <machine/pcb.h>
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/arm/at91/at91_machdep.c
--- a/head/sys/arm/at91/at91_machdep.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/arm/at91/at91_machdep.c	Fri Aug 10 14:19:25 2012 +0300
@@ -44,7 +44,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/arm/at91/at91_machdep.c 238403 2012-07-12 19:=
11:37Z imp $");
+__FBSDID("$FreeBSD: head/sys/arm/at91/at91_machdep.c 238788 2012-07-26 08:=
01:25Z andrew $");
=20
 #define _ARM32_BUS_DMA_PRIVATE
 #include <sys/param.h>
@@ -94,6 +94,7 @@
 #include <arm/at91/at91_usartreg.h>
 #include <arm/at91/at91rm92reg.h>
 #include <arm/at91/at91sam9g20reg.h>
+#include <arm/at91/at91sam9g45reg.h>
=20
 /* Page table for mapping proc0 zero page */
 #define KERNEL_PT_SYS		0
@@ -201,6 +202,17 @@
 		VM_PROT_READ|VM_PROT_WRITE,
 		PTE_NOCACHE,
 	},
+	/*
+	 * The next should be good for the 9G45.
+	 */
+	{
+		/* Internal Memory 1MB  */
+		AT91SAM9G45_OHCI_BASE,
+		AT91SAM9G45_OHCI_PA_BASE,
+		0x00100000,
+		VM_PROT_READ|VM_PROT_WRITE,
+		PTE_NOCACHE,
+	},
 	{ 0, 0, 0, 0, 0, }
 };
=20
@@ -213,7 +225,7 @@
 long
 at91_ramsize(void)
 {
-	uint32_t cr, mr, *SDRAMC;
+	uint32_t cr, mdr, mr, *SDRAMC;
 	int banks, rows, cols, bw;
 #ifdef LINUX_BOOT_ABI
 	/*
@@ -231,6 +243,24 @@
 		rows =3D ((cr & AT91RM92_SDRAMC_CR_NR_MASK) >> 2) + 11;
 		cols =3D (cr & AT91RM92_SDRAMC_CR_NC_MASK) + 8;
 		bw =3D (mr & AT91RM92_SDRAMC_MR_DBW_16) ? 1 : 2;
+	} else if (at91_cpu_is(AT91_T_SAM9G45)) {
+		SDRAMC =3D (uint32_t *)(AT91_BASE + AT91SAM9G45_DDRSDRC0_BASE);
+		cr =3D SDRAMC[AT91SAM9G45_DDRSDRC_CR / 4];
+		mdr =3D SDRAMC[AT91SAM9G45_DDRSDRC_MDR / 4];
+		banks =3D 0;
+		rows =3D ((cr & AT91SAM9G45_DDRSDRC_CR_NR_MASK) >> 2) + 11;
+		cols =3D (cr & AT91SAM9G45_DDRSDRC_CR_NC_MASK) + 8;
+		bw =3D (mdr & AT91SAM9G45_DDRSDRC_MDR_DBW_16) ? 1 : 2;
+
+		/* Fix the calculation for DDR memory */
+		mdr &=3D AT91SAM9G45_DDRSDRC_MDR_MASK;
+		if (mdr & AT91SAM9G45_DDRSDRC_MDR_LPDDR1 ||
+		    mdr & AT91SAM9G45_DDRSDRC_MDR_DDR2) {
+			/* The cols value is 1 higher for DDR */
+			cols +=3D 1;
+			/* DDR has 4 internal banks. */
+			banks =3D 2;
+		}
 	} else {
 		/*
 		 * This should be good for the 9260, 9261, 9G20, 9G35 and 9X25
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/arm/at91/at91_pio_sam9g45.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/head/sys/arm/at91/at91_pio_sam9g45.h	Fri Aug 10 14:19:25 2012 +0300
@@ -0,0 +1,272 @@
+/*-
+ *  ----------------------------------------------------------------------=
------
+ *          ATMEL Microcontroller Software Support  -  ROUSSET  -
+ *  ----------------------------------------------------------------------=
------
+ *  Copyright (c) 2009, Atmel Corporation
+ *=20
+ *  All rights reserved.
+ *=20
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are=
 met:
+ *=20
+ *  - Redistributions of source code must retain the above copyright notic=
e,
+ *  this list of conditions and the disclaimer below.
+ *=20
+ *  Atmel's name may not be used to endorse or promote products derived fr=
om
+ *  this software without specific prior written permission.=20
+ * =20
+ *  DISCLAIMER:  THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRES=
S OR
+ *  IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANT=
IES OF
+ *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT=
 ARE
+ *  DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
+ *  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, B=
UT 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 SOF=
TWARE,
+ *  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *  ----------------------------------------------------------------------=
------
+ *
+ * From AT91LIB version 1.9 boards/at91sam9g45-ek/at91sam9g45/AT91SAM9G45.h
+ */
+
+/* $FreeBSD: head/sys/arm/at91/at91_pio_sam9g45.h 238788 2012-07-26 08:01:=
25Z andrew $ */
+
+#ifndef  ARM_AT91_AT91_PIO_SAM9G45_H
+#define  ARM_AT91_AT91_PIO_SAM9G45_H
+
+#include <arm/at91/at91_pioreg.h>
+
+// ***********************************************************************=
******
+//               PIO DEFINITIONS FOR AT91SAM9G45
+// ***********************************************************************=
******
+#define AT91C_PA0_MCI0_CK  (AT91C_PIO_PA0) // =20
+#define AT91C_PA0_TCLK3    (AT91C_PIO_PA0) // =20
+#define AT91C_PA1_MCI0_CDA (AT91C_PIO_PA1) // =20
+#define AT91C_PA1_TIOA3    (AT91C_PIO_PA1) // =20
+#define AT91C_PA10_ETX0     (AT91C_PIO_PA10) //  Ethernet MAC Transmit Dat=
a 0
+#define AT91C_PA11_ETX1     (AT91C_PIO_PA11) //  Ethernet MAC Transmit Dat=
a 1
+#define AT91C_PA12_ERX0     (AT91C_PIO_PA12) //  Ethernet MAC Receive Data=
 0
+#define AT91C_PA13_ERX1     (AT91C_PIO_PA13) //  Ethernet MAC Receive Data=
 1
+#define AT91C_PA14_ETXEN    (AT91C_PIO_PA14) //  Ethernet MAC Transmit Ena=
ble
+#define AT91C_PA15_ERXDV    (AT91C_PIO_PA15) //  Ethernet MAC Receive Data=
 Valid
+#define AT91C_PA16_ERXER    (AT91C_PIO_PA16) //  Ethernet MAC Receive Error
+#define AT91C_PA17_ETXCK_EREFCK (AT91C_PIO_PA17) //  Ethernet MAC Transmit=
 Clock/Reference Clock
+#define AT91C_PA18_EMDC     (AT91C_PIO_PA18) //  Ethernet MAC Management D=
ata Clock
+#define AT91C_PA19_EMDIO    (AT91C_PIO_PA19) //  Ethernet MAC Management D=
ata Input/Output
+#define AT91C_PA2_MCI0_DA0 (AT91C_PIO_PA2) // =20
+#define AT91C_PA2_TIOB3    (AT91C_PIO_PA2) // =20
+#define AT91C_PA20_TWD0     (AT91C_PIO_PA20) //  TWI Two-wire Serial Data
+#define AT91C_PA21_TWCK0    (AT91C_PIO_PA21) //  TWI Two-wire Serial Clock
+#define AT91C_PA22_MCI1_CDA (AT91C_PIO_PA22) // =20
+#define AT91C_PA22_SCK3     (AT91C_PIO_PA22) // =20
+#define AT91C_PA23_MCI1_DA0 (AT91C_PIO_PA23) // =20
+#define AT91C_PA23_RTS3     (AT91C_PIO_PA23) // =20
+#define AT91C_PA24_MCI1_DA1 (AT91C_PIO_PA24) // =20
+#define AT91C_PA24_CTS3     (AT91C_PIO_PA24) // =20
+#define AT91C_PA25_MCI1_DA2 (AT91C_PIO_PA25) // =20
+#define AT91C_PA25_PWM3     (AT91C_PIO_PA25) // =20
+#define AT91C_PA26_MCI1_DA3 (AT91C_PIO_PA26) // =20
+#define AT91C_PA26_TIOB2    (AT91C_PIO_PA26) // =20
+#define AT91C_PA27_MCI1_DA4 (AT91C_PIO_PA27) // =20
+#define AT91C_PA27_ETXER    (AT91C_PIO_PA27) //  Ethernet MAC Transmikt Co=
ding Error
+#define AT91C_PA28_MCI1_DA5 (AT91C_PIO_PA28) // =20
+#define AT91C_PA28_ERXCK    (AT91C_PIO_PA28) //  Ethernet MAC Receive Clock
+#define AT91C_PA29_MCI1_DA6 (AT91C_PIO_PA29) // =20
+#define AT91C_PA29_ECRS     (AT91C_PIO_PA29) //  Ethernet MAC Carrier Sens=
e/Carrier Sense and Data Valid
+#define AT91C_PA3_MCI0_DA1 (AT91C_PIO_PA3) // =20
+#define AT91C_PA3_TCLK4    (AT91C_PIO_PA3) // =20
+#define AT91C_PA30_MCI1_DA7 (AT91C_PIO_PA30) // =20
+#define AT91C_PA30_ECOL     (AT91C_PIO_PA30) //  Ethernet MAC Collision De=
tected
+#define AT91C_PA31_MCI1_CK  (AT91C_PIO_PA31) // =20
+#define AT91C_PA31_PCK0     (AT91C_PIO_PA31) // =20
+#define AT91C_PA4_MCI0_DA2 (AT91C_PIO_PA4) // =20
+#define AT91C_PA4_TIOA4    (AT91C_PIO_PA4) // =20
+#define AT91C_PA5_MCI0_DA3 (AT91C_PIO_PA5) // =20
+#define AT91C_PA5_TIOB4    (AT91C_PIO_PA5) // =20
+#define AT91C_PA6_MCI0_DA4 (AT91C_PIO_PA6) // =20
+#define AT91C_PA6_ETX2     (AT91C_PIO_PA6) //  Ethernet MAC Transmit Data 2
+#define AT91C_PA7_MCI0_DA5 (AT91C_PIO_PA7) // =20
+#define AT91C_PA7_ETX3     (AT91C_PIO_PA7) //  Ethernet MAC Transmit Data 3
+#define AT91C_PA8_MCI0_DA6 (AT91C_PIO_PA8) // =20
+#define AT91C_PA8_ERX2     (AT91C_PIO_PA8) //  Ethernet MAC Receive Data 2
+#define AT91C_PA9_MCI0_DA7 (AT91C_PIO_PA9) // =20
+#define AT91C_PA9_ERX3     (AT91C_PIO_PA9) //  Ethernet MAC Receive Data 3
+#define AT91C_PB0_SPI0_MISO (AT91C_PIO_PB0) //  SPI 0 Master In Slave
+#define AT91C_PB1_SPI0_MOSI (AT91C_PIO_PB1) //  SPI 0 Master Out Slave
+#define AT91C_PB10_TWD1     (AT91C_PIO_PB10) // =20
+#define AT91C_PB10_ISI_D10  (AT91C_PIO_PB10) // =20
+#define AT91C_PB11_TWCK1    (AT91C_PIO_PB11) // =20
+#define AT91C_PB11_ISI_D11  (AT91C_PIO_PB11) // =20
+#define AT91C_PB12_DRXD     (AT91C_PIO_PB12) // =20
+#define AT91C_PB13_DTXD     (AT91C_PIO_PB13) // =20
+#define AT91C_PB14_SPI1_MISO (AT91C_PIO_PB14) // =20
+#define AT91C_PB15_SPI1_MOSI (AT91C_PIO_PB15) // =20
+#define AT91C_PB15_CTS0     (AT91C_PIO_PB15) // =20
+#define AT91C_PB16_SPI1_SPCK (AT91C_PIO_PB16) // =20
+#define AT91C_PB16_SCK0     (AT91C_PIO_PB16) // =20
+#define AT91C_PB17_SPI1_NPCS0 (AT91C_PIO_PB17) // =20
+#define AT91C_PB17_RTS0     (AT91C_PIO_PB17) // =20
+#define AT91C_PB18_RXD0     (AT91C_PIO_PB18) // =20
+#define AT91C_PB18_SPI0_NPCS1 (AT91C_PIO_PB18) // =20
+#define AT91C_PB19_TXD0     (AT91C_PIO_PB19) // =20
+#define AT91C_PB19_SPI0_NPCS2 (AT91C_PIO_PB19) // =20
+#define AT91C_PB2_SPI0_SPCK (AT91C_PIO_PB2) //  SPI 0 Serial Clock
+#define AT91C_PB20_ISI_D0   (AT91C_PIO_PB20) // =20
+#define AT91C_PB21_ISI_D1   (AT91C_PIO_PB21) // =20
+#define AT91C_PB22_ISI_D2   (AT91C_PIO_PB22) // =20
+#define AT91C_PB23_ISI_D3   (AT91C_PIO_PB23) // =20
+#define AT91C_PB24_ISI_D4   (AT91C_PIO_PB24) // =20
+#define AT91C_PB25_ISI_D5   (AT91C_PIO_PB25) // =20
+#define AT91C_PB26_ISI_D6   (AT91C_PIO_PB26) // =20
+#define AT91C_PB27_ISI_D7   (AT91C_PIO_PB27) // =20
+#define AT91C_PB28_ISI_PCK  (AT91C_PIO_PB28) // =20
+#define AT91C_PB29_ISI_VSYNC (AT91C_PIO_PB29) // =20
+#define AT91C_PB3_SPI0_NPCS0 (AT91C_PIO_PB3) //  SPI 0 Peripheral Chip Sel=
ect 0
+#define AT91C_PB30_ISI_HSYNC (AT91C_PIO_PB30) // =20
+#define AT91C_PB31_         (AT91C_PIO_PB31) // =20
+#define AT91C_PB31_PCK1     (AT91C_PIO_PB31) // =20
+#define AT91C_PB4_TXD1     (AT91C_PIO_PB4) //  USART 1 Transmit Data
+#define AT91C_PB5_RXD1     (AT91C_PIO_PB5) //  USART 1 Receive Data
+#define AT91C_PB6_TXD2     (AT91C_PIO_PB6) //  USART 2 Transmit Data
+#define AT91C_PB7_RXD2     (AT91C_PIO_PB7) //  USART 2 Receive Data
+#define AT91C_PB8_TXD3     (AT91C_PIO_PB8) //  USART 3 Transmit Data
+#define AT91C_PB8_ISI_D8   (AT91C_PIO_PB8) // =20
+#define AT91C_PB9_RXD3     (AT91C_PIO_PB9) //  USART 3 Receive Data
+#define AT91C_PB9_ISI_D9   (AT91C_PIO_PB9) // =20
+#define AT91C_PC0_DQM2     (AT91C_PIO_PC0) //  DQM2
+#define AT91C_PC1_DQM3     (AT91C_PIO_PC1) //  DQM3
+#define AT91C_PC10_NCS4_CFCS0 (AT91C_PIO_PC10) // =20
+#define AT91C_PC10_TCLK2    (AT91C_PIO_PC10) // =20
+#define AT91C_PC11_NCS5_CFCS1 (AT91C_PIO_PC11) // =20
+#define AT91C_PC11_CTS2     (AT91C_PIO_PC11) // =20
+#define AT91C_PC12_A25_CFRNW (AT91C_PIO_PC12) // =20
+#define AT91C_PC13_NCS2     (AT91C_PIO_PC13) // =20
+#define AT91C_PC14_NCS3_NANDCS (AT91C_PIO_PC14) // =20
+#define AT91C_PC15_NWAIT    (AT91C_PIO_PC15) // =20
+#define AT91C_PC16_D16      (AT91C_PIO_PC16) // =20
+#define AT91C_PC17_D17      (AT91C_PIO_PC17) // =20
+#define AT91C_PC18_D18      (AT91C_PIO_PC18) // =20
+#define AT91C_PC19_D19      (AT91C_PIO_PC19) // =20
+#define AT91C_PC2_A19      (AT91C_PIO_PC2) // =20
+#define AT91C_PC20_D20      (AT91C_PIO_PC20) // =20
+#define AT91C_PC21_D21      (AT91C_PIO_PC21) // =20
+#define AT91C_PC22_D22      (AT91C_PIO_PC22) // =20
+#define AT91C_PC23_D23      (AT91C_PIO_PC23) // =20
+#define AT91C_PC24_D24      (AT91C_PIO_PC24) // =20
+#define AT91C_PC25_D25      (AT91C_PIO_PC25) // =20
+#define AT91C_PC26_D26      (AT91C_PIO_PC26) // =20
+#define AT91C_PC27_D27      (AT91C_PIO_PC27) // =20
+#define AT91C_PC28_D28      (AT91C_PIO_PC28) // =20
+#define AT91C_PC29_D29      (AT91C_PIO_PC29) // =20
+#define AT91C_PC3_A20      (AT91C_PIO_PC3) // =20
+#define AT91C_PC30_D30      (AT91C_PIO_PC30) // =20
+#define AT91C_PC31_D31      (AT91C_PIO_PC31) // =20
+#define AT91C_PC4_A21_NANDALE (AT91C_PIO_PC4) // =20
+#define AT91C_PC5_A22_NANDCLE (AT91C_PIO_PC5) // =20
+#define AT91C_PC6_A23      (AT91C_PIO_PC6) // =20
+#define AT91C_PC7_A24      (AT91C_PIO_PC7) // =20
+#define AT91C_PC8_CFCE1    (AT91C_PIO_PC8) // =20
+#define AT91C_PC9_CFCE2    (AT91C_PIO_PC9) // =20
+#define AT91C_PC9_RTS2     (AT91C_PIO_PC9) // =20
+#define AT91C_PD0_TK0      (AT91C_PIO_PD0) // =20
+#define AT91C_PD0_PWM3     (AT91C_PIO_PD0) // =20
+#define AT91C_PD1_TF0      (AT91C_PIO_PD1) // =20
+#define AT91C_PD10_TD1      (AT91C_PIO_PD10) // =20
+#define AT91C_PD11_RD1      (AT91C_PIO_PD11) // =20
+#define AT91C_PD12_TK1      (AT91C_PIO_PD12) // =20
+#define AT91C_PD12_PCK0     (AT91C_PIO_PD12) // =20
+#define AT91C_PD13_RK1      (AT91C_PIO_PD13) // =20
+#define AT91C_PD14_TF1      (AT91C_PIO_PD14) // =20
+#define AT91C_PD15_RF1      (AT91C_PIO_PD15) // =20
+#define AT91C_PD16_RTS1     (AT91C_PIO_PD16) // =20
+#define AT91C_PD17_CTS1     (AT91C_PIO_PD17) // =20
+#define AT91C_PD18_SPI1_NPCS2 (AT91C_PIO_PD18) // =20
+#define AT91C_PD18_IRQ      (AT91C_PIO_PD18) // =20
+#define AT91C_PD19_SPI1_NPCS3 (AT91C_PIO_PD19) // =20
+#define AT91C_PD19_FIQ      (AT91C_PIO_PD19) // =20
+#define AT91C_PD2_TD0      (AT91C_PIO_PD2) // =20
+#define AT91C_PD20_TIOA0    (AT91C_PIO_PD20) // =20
+#define AT91C_PD21_TIOA1    (AT91C_PIO_PD21) // =20
+#define AT91C_PD22_TIOA2    (AT91C_PIO_PD22) // =20
+#define AT91C_PD23_TCLK0    (AT91C_PIO_PD23) // =20
+#define AT91C_PD24_SPI0_NPCS1 (AT91C_PIO_PD24) // =20
+#define AT91C_PD24_PWM0     (AT91C_PIO_PD24) // =20
+#define AT91C_PD25_SPI0_NPCS2 (AT91C_PIO_PD25) // =20
+#define AT91C_PD25_PWM1     (AT91C_PIO_PD25) // =20
+#define AT91C_PD26_PCK0     (AT91C_PIO_PD26) // =20
+#define AT91C_PD26_PWM2     (AT91C_PIO_PD26) // =20
+#define AT91C_PD27_PCK1     (AT91C_PIO_PD27) // =20
+#define AT91C_PD27_SPI0_NPCS3 (AT91C_PIO_PD27) // =20
+#define AT91C_PD28_TSADTRG  (AT91C_PIO_PD28) // =20
+#define AT91C_PD28_SPI1_NPCS1 (AT91C_PIO_PD28) // =20
+#define AT91C_PD29_TCLK1    (AT91C_PIO_PD29) // =20
+#define AT91C_PD29_SCK1     (AT91C_PIO_PD29) // =20
+#define AT91C_PD3_RD0      (AT91C_PIO_PD3) // =20
+#define AT91C_PD30_TIOB0    (AT91C_PIO_PD30) // =20
+#define AT91C_PD30_SCK2     (AT91C_PIO_PD30) // =20
+#define AT91C_PD31_TIOB1    (AT91C_PIO_PD31) // =20
+#define AT91C_PD31_PWM1     (AT91C_PIO_PD31) // =20
+#define AT91C_PD4_RK0      (AT91C_PIO_PD4) // =20
+#define AT91C_PD5_RF0      (AT91C_PIO_PD5) // =20
+#define AT91C_PD6_AC97RX   (AT91C_PIO_PD6) // =20
+#define AT91C_PD7_AC97TX   (AT91C_PIO_PD7) // =20
+#define AT91C_PD7_TIOA5    (AT91C_PIO_PD7) // =20
+#define AT91C_PD8_AC97FS   (AT91C_PIO_PD8) // =20
+#define AT91C_PD8_TIOB5    (AT91C_PIO_PD8) // =20
+#define AT91C_PD9_AC97CK   (AT91C_PIO_PD9) // =20
+#define AT91C_PD9_TCLK5    (AT91C_PIO_PD9) // =20
+#define AT91C_PE0_LCDPWR   (AT91C_PIO_PE0) // =20
+#define AT91C_PE0_PCK0     (AT91C_PIO_PE0) // =20
+#define AT91C_PE1_LCDMOD   (AT91C_PIO_PE1) // =20
+#define AT91C_PE10_LCDD3    (AT91C_PIO_PE10) // =20
+#define AT91C_PE10_LCDD5    (AT91C_PIO_PE10) // =20
+#define AT91C_PE11_LCDD4    (AT91C_PIO_PE11) // =20
+#define AT91C_PE11_LCDD6    (AT91C_PIO_PE11) // =20
+#define AT91C_PE12_LCDD5    (AT91C_PIO_PE12) // =20
+#define AT91C_PE12_LCDD7    (AT91C_PIO_PE12) // =20
+#define AT91C_PE13_LCDD6    (AT91C_PIO_PE13) // =20
+#define AT91C_PE13_LCDD10   (AT91C_PIO_PE13) // =20
+#define AT91C_PE14_LCDD7    (AT91C_PIO_PE14) // =20
+#define AT91C_PE14_LCDD11   (AT91C_PIO_PE14) // =20
+#define AT91C_PE15_LCDD8    (AT91C_PIO_PE15) // =20
+#define AT91C_PE15_LCDD12   (AT91C_PIO_PE15) // =20
+#define AT91C_PE16_LCDD9    (AT91C_PIO_PE16) // =20
+#define AT91C_PE16_LCDD13   (AT91C_PIO_PE16) // =20
+#define AT91C_PE17_LCDD10   (AT91C_PIO_PE17) // =20
+#define AT91C_PE17_LCDD14   (AT91C_PIO_PE17) // =20
+#define AT91C_PE18_LCDD11   (AT91C_PIO_PE18) // =20
+#define AT91C_PE18_LCDD15   (AT91C_PIO_PE18) // =20
+#define AT91C_PE19_LCDD12   (AT91C_PIO_PE19) // =20
+#define AT91C_PE19_LCDD18   (AT91C_PIO_PE19) // =20
+#define AT91C_PE2_LCDCC    (AT91C_PIO_PE2) // =20
+#define AT91C_PE20_LCDD13   (AT91C_PIO_PE20) // =20
+#define AT91C_PE20_LCDD19   (AT91C_PIO_PE20) // =20
+#define AT91C_PE21_LCDD14   (AT91C_PIO_PE21) // =20
+#define AT91C_PE21_LCDD20   (AT91C_PIO_PE21) // =20
+#define AT91C_PE22_LCDD15   (AT91C_PIO_PE22) // =20
+#define AT91C_PE22_LCDD21   (AT91C_PIO_PE22) // =20
+#define AT91C_PE23_LCDD16   (AT91C_PIO_PE23) // =20
+#define AT91C_PE23_LCDD22   (AT91C_PIO_PE23) // =20
+#define AT91C_PE24_LCDD17   (AT91C_PIO_PE24) // =20
+#define AT91C_PE24_LCDD23   (AT91C_PIO_PE24) // =20
+#define AT91C_PE25_LCDD18   (AT91C_PIO_PE25) // =20
+#define AT91C_PE26_LCDD19   (AT91C_PIO_PE26) // =20
+#define AT91C_PE27_LCDD20   (AT91C_PIO_PE27) // =20
+#define AT91C_PE28_LCDD21   (AT91C_PIO_PE28) // =20
+#define AT91C_PE29_LCDD22   (AT91C_PIO_PE29) // =20
+#define AT91C_PE3_LCDVSYNC (AT91C_PIO_PE3) // =20
+#define AT91C_PE30_LCDD23   (AT91C_PIO_PE30) // =20
+#define AT91C_PE31_PWM2     (AT91C_PIO_PE31) // =20
+#define AT91C_PE31_PCK1     (AT91C_PIO_PE31) // =20
+#define AT91C_PE4_LCDHSYNC (AT91C_PIO_PE4) // =20
+#define AT91C_PE5_LCDDOTCK (AT91C_PIO_PE5) // =20
+#define AT91C_PE6_LCDDEN   (AT91C_PIO_PE6) // =20
+#define AT91C_PE7_LCDD0    (AT91C_PIO_PE7) // =20
+#define AT91C_PE7_LCDD2    (AT91C_PIO_PE7) // =20
+#define AT91C_PE8_LCDD1    (AT91C_PIO_PE8) // =20
+#define AT91C_PE8_LCDD3    (AT91C_PIO_PE8) // =20
+#define AT91C_PE9_LCDD2    (AT91C_PIO_PE9) // =20
+#define AT91C_PE9_LCDD4    (AT91C_PIO_PE9) // =20
+
+#endif /* ARM_AT91_AT91_PIO_SAM9G45_H */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/arm/at91/at91_pmc.c
--- a/head/sys/arm/at91/at91_pmc.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/arm/at91/at91_pmc.c	Fri Aug 10 14:19:25 2012 +0300
@@ -25,7 +25,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/arm/at91/at91_pmc.c 236658 2012-06-06 06:19:5=
2Z imp $");
+__FBSDID("$FreeBSD: head/sys/arm/at91/at91_pmc.c 239168 2012-08-10 04:48:0=
6Z imp $");
=20
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -65,6 +65,7 @@
 #define AT91_PMC_BASE 0xffffc00
=20
 static void at91_pmc_set_pllb_mode(struct at91_pmc_clock *, int);
+static void at91_pmc_set_upll_mode(struct at91_pmc_clock *, int);
 static void at91_pmc_set_sys_mode(struct at91_pmc_clock *, int);
 static void at91_pmc_set_periph_mode(struct at91_pmc_clock *, int);
 static void at91_pmc_clock_alias(const char *name, const char *alias);
@@ -110,6 +111,18 @@
 	.set_mode =3D &at91_pmc_set_pllb_mode,
 };
=20
+/* Used by USB on at91sam9g45 */
+static struct at91_pmc_clock upll =3D {
+	.name =3D "upll",		// UTMI PLL, used for USB functions on 9G45
+	.parent =3D &main_ck,
+	.refcnt =3D 0,
+	.id =3D 0,
+	.primary =3D 1,
+	.pll =3D 1,
+	.pmc_mask =3D (1 << 6),
+	.set_mode =3D &at91_pmc_set_upll_mode,
+};
+
 static struct at91_pmc_clock udpck =3D {
 	.name =3D "udpck",
 	.parent =3D &pllb,
@@ -143,6 +156,7 @@
 	&main_ck,
 	&plla,
 	&pllb,
+	&upll,
 	&udpck,
 	&uhpck,
 	&mck,
@@ -199,6 +213,26 @@
 }
=20
 static void
+at91_pmc_set_upll_mode(struct at91_pmc_clock *clk, int on)
+{
+	struct at91_pmc_softc *sc =3D pmc_softc;
+	uint32_t value;
+
+	if (on) {
+		on =3D PMC_IER_LOCKU;
+		value =3D CKGR_UCKR_UPLLEN | CKGR_UCKR_BIASEN;
+	} else
+		value =3D 0;
+
+	WR4(sc, CKGR_UCKR, RD4(sc, CKGR_UCKR) | value);
+	while ((RD4(sc, PMC_SR) & PMC_IER_LOCKU) !=3D on)
+		continue;
+
+	WR4(sc, PMC_USB, PMC_USB_USBDIV(9) | PMC_USB_USBS);
+	WR4(sc, PMC_SCER, PMC_SCER_UHP_SAM9);
+}
+
+static void
 at91_pmc_set_sys_mode(struct at91_pmc_clock *clk, int on)
 {
 	struct at91_pmc_softc *sc =3D pmc_softc;
@@ -466,9 +500,19 @@
 		uhpck.pmc_mask =3D PMC_SCER_UHP_SAM9;
 		udpck.pmc_mask =3D PMC_SCER_UDP_SAM9;
 	}
+
+	/* There is no pllb on AT91SAM9G45 */
+	if (at91_cpu_is(AT91_T_SAM9G45)) {
+		uhpck.parent =3D &upll;
+		uhpck.pmc_mask =3D PMC_SCER_UHP_SAM9;
+	}
+
 	mckr =3D RD4(sc, PMC_MCKR);
 	main_ck.hz =3D main_clock;
=20
+	// Note: this means outa calc code for plla never used since
+	// we never change it.  If we did, we'd also have to mind
+	// ICPLLA to get the charge pump current right.
 	at91_pmc_pll_rate(&plla, RD4(sc, CKGR_PLLAR));
=20
 	if (at91_cpu_is(AT91_T_SAM9G45) && (mckr & PMC_MCKR_PLLADIV2))
@@ -476,16 +520,17 @@
=20
 	/*
 	 * Initialize the usb clock.  This sets up pllb, but disables the
-	 * actual clock.
+	 * actual clock. XXX except for the if 0 :(
 	 */
-	pllb_init =3D at91_pmc_pll_calc(&pllb, 48000000 * 2) | 0x10000000;
-	at91_pmc_pll_rate(&pllb, pllb_init);
-
+	if (!at91_cpu_is(AT91_T_SAM9G45)) {
+		pllb_init =3D at91_pmc_pll_calc(&pllb, 48000000 * 2) | 0x10000000;
+		at91_pmc_pll_rate(&pllb, pllb_init);
 #if 0
-	/* Turn off USB clocks */
-	at91_pmc_set_periph_mode(&ohci_clk, 0);
-	at91_pmc_set_periph_mode(&udc_clk, 0);
+		/* Turn off USB clocks */
+		at91_pmc_set_periph_mode(&ohci_clk, 0);
+		at91_pmc_set_periph_mode(&udc_clk, 0);
 #endif
+	}
=20
 	if (at91_is_rm92()) {
 		WR4(sc, PMC_SCDR, PMC_SCER_UHP | PMC_SCER_UDP);
@@ -506,8 +551,14 @@
=20
 	mdiv =3D (mckr & PMC_MCKR_MDIV_MASK) >> 8;
 	if (at91_is_sam9() || at91_is_sam9xe()) {
+		/*
+		 * On AT91SAM9G45 when mdiv =3D=3D 3 we need to divide
+		 * MCK by 3 but not, for example, on 9g20.
+		 */
+		if (!at91_cpu_is(AT91_T_SAM9G45) || mdiv <=3D 2)
+			mdiv *=3D 2;
 		if (mdiv > 0)
-			mck.hz /=3D mdiv * 2;
+			mck.hz /=3D mdiv;
 	} else
 		mck.hz /=3D (1 + mdiv);
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/arm/at91/at91_pmcreg.h
--- a/head/sys/arm/at91/at91_pmcreg.h	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/arm/at91/at91_pmcreg.h	Fri Aug 10 14:19:25 2012 +0300
@@ -23,7 +23,7 @@
  * SUCH DAMAGE.
  */
=20
-/* $FreeBSD$ */
+/* $FreeBSD: head/sys/arm/at91/at91_pmcreg.h 239167 2012-08-10 04:47:20Z i=
mp $ */
=20
 #ifndef ARM_AT91_AT91_PMCREG_H
 #define ARM_AT91_AT91_PMCREG_H
@@ -36,14 +36,14 @@
 #define	PMC_PCER	0x10		/* Peripheral Clock Enable Register */
 #define	PMC_PCDR	0x14		/* Peripheral Clock Disable Register */
 #define	PMC_PCSR	0x18		/* Peripheral Clock Status Register */
-		/*	0x1c		   reserved */
+#define	CKGR_UCKR	0x1c		/* UTMI Clock Configuration Register */
 #define CKGR_MOR	0x20		/* Main Oscillator Register */
 #define CKGR_MCFR	0x24		/* Main Clock Frequency Register */
 #define CKGR_PLLAR	0x28		/* PLL A Register */
 #define CKGR_PLLBR	0x2c		/* PLL B Register */
 #define PMC_MCKR	0x30		/* Master Clock Register */
 		/*	0x34		   reserved */
-		/*	0x38		   reserved */
+#define	PMC_USB		0x38		/* USB Clock Register */
 		/*	0x3c		   reserved */
 #define PMC_PCK0	0x40		/* Programmable Clock 0 Register */
 #define PMC_PCK1	0x44		/* Programmable Clock 1 Register */
@@ -57,6 +57,11 @@
 #define PMC_IDR		0x64		/* Interrupt Disable Register */
 #define PMC_SR		0x68		/* Status Register */
 #define PMC_IMR		0x6c		/* Interrupt Mask Register */
+		/*	0x70		   reserved */
+		/*	0x74		   reserved */
+		/*	0x78		   reserved */
+		/*	0x7c		   reserved */
+#define	PMC_PLLICPR	0x80		/* PLL Charge Pump Current Register */
=20
 /* PMC System Clock Enable Register */
 /* PMC System Clock Disable Register */
@@ -77,6 +82,10 @@
 /* PMC Peripheral Clock Status Register */
 /* Each bit here is 1 << peripheral number  to enable/disable/status */
=20
+/* PMC UTMI Clock Configuration Register */
+#define	CKGR_UCKR_BIASEN	(1UL << 24)
+#define	CKGR_UCKR_UPLLEN	(1UL << 16)
+
 /* PMC Clock Generator Main Oscillator Register */
 #define CKGR_MOR_MOSCEN	(1UL << 0)	/* MOSCEN: Main Oscillator Enable */
 #define CKGR_MOR_OSCBYPASS (1UL << 1)	/* Oscillator Bypass */
@@ -93,6 +102,10 @@
 #define PMC_MCKR_MDIV_MASK (3 << 8)	=09
 #define PMC_MCKR_PRES_MASK (7 << 2)	=09
=20
+/* PMC USB Clock Register */
+#define	PMC_USB_USBDIV(n) (((n) & 0x0F) << 8)
+#define	PMC_USB_USBS (1 << 0)
+
 /* PMC Interrupt Enable Register */
 /* PMC Interrupt Disable Register */
 /* PMC Status Register */
@@ -101,6 +114,7 @@
 #define PMC_IER_LOCKA	(1UL << 1)	/* PLL A Locked */
 #define PMC_IER_LOCKB	(1UL << 2)	/* PLL B Locked */
 #define PMC_IER_MCKRDY	(1UL << 3)	/* Master Clock Status */
+#define	PMC_IER_LOCKU	(1UL << 6)	/* UPLL Locked */
 #define PMC_IER_PCK0RDY	(1UL << 8)	/* Programmable Clock 0 Ready */
 #define PMC_IER_PCK1RDY	(1UL << 9)	/* Programmable Clock 1 Ready */
 #define PMC_IER_PCK2RDY	(1UL << 10)	/* Programmable Clock 2 Ready */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/arm/at91/at91_spi.c
--- a/head/sys/arm/at91/at91_spi.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/arm/at91/at91_spi.c	Fri Aug 10 14:19:25 2012 +0300
@@ -26,7 +26,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/arm/at91/at91_spi.c 237239 2012-06-18 20:14:4=
2Z marius $");
+__FBSDID("$FreeBSD: head/sys/arm/at91/at91_spi.c 238955 2012-07-31 19:14:2=
2Z imp $");
=20
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -42,6 +42,7 @@
=20
 #include <machine/bus.h>
=20
+#include <arm/at91/at91var.h>
 #include <arm/at91/at91_spireg.h>
 #include <arm/at91/at91_pdcreg.h>
=20
@@ -144,6 +145,7 @@
 	 * memory and APB bandwidth.
 	 * Also, currently we lack a way for lettting both the board and the
 	 * slave devices take their maximum supported SPI clocks into account.
+	 * Also, we hard-wire SPI mode to 3.
 	 */
 	csr =3D SPI_CSR_CPOL | (4 << 16) | (0xff << 8);
 	WR4(sc, SPI_CSR0, csr);
@@ -285,7 +287,10 @@
 	 */
 	WR4(sc, PDC_PTCR, PDC_PTCR_TXTDIS | PDC_PTCR_RXTDIS);
=20
-#ifdef SPI_CHIPSEL_SUPPORT
+	/*
+	 * PSCDEC =3D 0 has a range of 0..3 for chip select.  We
+	 * don't support PSCDEC =3D 1 which has a range of 0..15.
+	 */
 	if (cmd->cs < 0 || cmd->cs > 3) {
 		device_printf(dev,
 		    "Invalid chip select %d requested by %s\n", cmd->cs,
@@ -293,18 +298,23 @@
 		err =3D EINVAL;
 		goto out;
 	}
+
 #ifdef SPI_CHIP_SELECT_HIGH_SUPPORT
+	/*
+	 * The AT91RM9200 couldn't do CS high for CS 0.  Other chips can, but we
+	 * don't support that yet, or other spi modes.
+	 */
 	if (at91_is_rm92() && cmd->cs =3D=3D 0 &&
 	    (cmd->flags & SPI_CHIP_SELECT_HIGH) !=3D 0) {
 		device_printf(dev,
-		    "Invalid chip select high requested by %s\n",
+		    "Invalid chip select high requested by %s for cs 0.\n",
 		    device_get_nameunit(child));
 		err =3D EINVAL;
 		goto out;
 	}
 #endif
-	WR4(sc, SPI_MR, (RD4(sc, SPI_MR) & ~0x000f0000) | CS_TO_MR(cmd->cs));
-#endif
+	err =3D (RD4(sc, SPI_MR) & ~0x000f0000) | CS_TO_MR(cmd->cs);
+	WR4(sc, SPI_MR, err);
=20
 	/*
 	 * Set up the TX side of the transfer.
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/arm/at91/at91sam9g45.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/head/sys/arm/at91/at91sam9g45.c	Fri Aug 10 14:19:25 2012 +0300
@@ -0,0 +1,177 @@
+/*-
+ * Copyright (c) 2005 Olivier Houchard.  All rights reserved.
+ * Copyright (c) 2010 Greg Ansley.  All rights reserved.
+ * Copyright (c) 2012 Andrew Turner.  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 PURP=
OSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENT=
IAL
+ * 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, STR=
ICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY W=
AY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD: head/sys/arm/at91/at91sam9g45.c 238788 2012-07-26 08:0=
1:25Z andrew $");
+
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <sys/bus.h>
+#include <sys/kernel.h>
+#include <sys/malloc.h>
+#include <sys/module.h>
+
+#define	_ARM32_BUS_DMA_PRIVATE
+#include <machine/bus.h>
+
+#include <arm/at91/at91var.h>
+#include <arm/at91/at91reg.h>
+#include <arm/at91/at91soc.h>
+#include <arm/at91/at91_aicreg.h>
+#include <arm/at91/at91sam9g45reg.h>
+#include <arm/at91/at91_pitreg.h>
+#include <arm/at91/at91_pmcreg.h>
+#include <arm/at91/at91_pmcvar.h>
+#include <arm/at91/at91_rstreg.h>
+
+/*
+ * Standard priority levels for the system.  0 is lowest and 7 is highest.
+ * These values are the ones Atmel uses for its Linux port
+ */
+static const int at91_irq_prio[32] =3D
+{
+	7,	/* Advanced Interrupt Controller */
+	7,	/* System Peripherals */
+	1,	/* Parallel IO Controller A */
+	1,	/* Parallel IO Controller B */
+	1,	/* Parallel IO Controller C */
+	1,	/* Parallel IO Controller D and E */
+	0,
+	5,	/* USART 0 */
+	5,	/* USART 1 */
+	5,	/* USART 2 */
+	5,	/* USART 3 */
+	0,	/* Multimedia Card Interface 0 */
+	6,	/* Two-Wire Interface 0 */
+	6,	/* Two-Wire Interface 1 */
+	5,	/* Serial Peripheral Interface 0 */
+	5,	/* Serial Peripheral Interface 1 */
+	4,	/* Serial Synchronous Controller 0 */
+	4,	/* Serial Synchronous Controller 1 */
+	0,	/* Timer Counter 0, 1, 2, 3, 4 and 5 */
+	0,	/* Pulse Width Modulation Controller */
+	0,	/* Touch Screen Controller */
+	0,	/* DMA Controller */
+	2,	/* USB Host High Speed port */
+	3,	/* LCD Controller */
+	5,	/* AC97 Controller */
+	3,	/* Ethernet */
+	0,	/* Image Sensor Interface */
+	2,	/* USB Device High Speed port */
+	0,	/* (reserved) */
+	0,	/* Multimedia Card Interface 1 */
+	0,	/* (reserved) */
+	0,	/* Advanced Interrupt Controller IRQ0 */
+};
+
+#define DEVICE(_name, _id, _unit)		\
+	{					\
+		_name, _unit,			\
+		AT91SAM9G45_ ## _id ##_BASE,	\
+		AT91SAM9G45_ ## _id ## _SIZE,	\
+		AT91SAM9G45_IRQ_ ## _id		\
+	}
+
+static const struct cpu_devs at91_devs[] =3D
+{
+	DEVICE("at91_pmc", PMC,  0),
+	DEVICE("at91_wdt", WDT,  0),
+	DEVICE("at91_rst", RSTC, 0),
+	DEVICE("at91_pit", PIT,  0),
+	DEVICE("at91_pio", PIOA, 0),
+	DEVICE("at91_pio", PIOB, 1),
+	DEVICE("at91_pio", PIOC, 2),
+	DEVICE("at91_pio", PIOD, 3),
+	DEVICE("at91_pio", PIOE, 4),
+	DEVICE("at91_twi", TWI0, 0),
+	DEVICE("at91_twi", TWI1, 1),
+	DEVICE("at91_mci", HSMCI0, 0),
+	DEVICE("at91_mci", HSMCI1, 1),
+	DEVICE("uart", DBGU,   0),
+	DEVICE("uart", USART0, 1),
+	DEVICE("uart", USART1, 2),
+	DEVICE("uart", USART2, 3),
+	DEVICE("uart", USART3, 4),
+	DEVICE("spi",  SPI0,   0),
+	DEVICE("spi",  SPI1,   1),
+	DEVICE("ate",  EMAC,   0),
+	DEVICE("macb", EMAC,   0),
+	DEVICE("nand", NAND,   0),
+	DEVICE("ohci", OHCI,   0),
+	{ 0, 0, 0, 0, 0 }
+};
+
+static uint32_t
+at91_pll_outa(int freq)
+{
+
+	switch (freq / 10000000) {
+		case 747 ... 801: return ((1 << 29) | (0 << 14));
+		case 697 ... 746: return ((1 << 29) | (1 << 14));
+		case 647 ... 696: return ((1 << 29) | (2 << 14));
+		case 597 ... 646: return ((1 << 29) | (3 << 14));
+		case 547 ... 596: return ((1 << 29) | (4 << 14));
+		case 497 ... 546: return ((1 << 29) | (5 << 14));
+		case 447 ... 496: return ((1 << 29) | (6 << 14));
+		case 397 ... 446: return ((1 << 29) | (7 << 14));
+		default: return (1 << 29);
+	}
+}
+
+static void
+at91_clock_init(void)
+{
+	struct at91_pmc_clock *clk;
+
+	/* Update USB host port clock info */
+	clk =3D at91_pmc_clock_ref("uhpck");
+	clk->pmc_mask  =3D PMC_SCER_UHP_SAM9;
+	at91_pmc_clock_deref(clk);
+
+	/* Each SOC has different PLL contraints */
+	clk =3D at91_pmc_clock_ref("plla");
+	clk->pll_min_in    =3D SAM9G45_PLL_A_MIN_IN_FREQ;		/*   2 MHz */
+	clk->pll_max_in    =3D SAM9G45_PLL_A_MAX_IN_FREQ;		/*  32 MHz */
+	clk->pll_min_out   =3D SAM9G45_PLL_A_MIN_OUT_FREQ;	/* 400 MHz */
+	clk->pll_max_out   =3D SAM9G45_PLL_A_MAX_OUT_FREQ;	/* 800 MHz */
+	clk->pll_mul_shift =3D SAM9G45_PLL_A_MUL_SHIFT;
+	clk->pll_mul_mask  =3D SAM9G45_PLL_A_MUL_MASK;
+	clk->pll_div_shift =3D SAM9G45_PLL_A_DIV_SHIFT;
+	clk->pll_div_mask  =3D SAM9G45_PLL_A_DIV_MASK;
+	clk->set_outb      =3D at91_pll_outa;
+	at91_pmc_clock_deref(clk);
+}
+
+static struct at91_soc_data soc_data =3D {
+	.soc_delay =3D at91_pit_delay,
+	.soc_reset =3D at91_rst_cpu_reset,
+	.soc_clock_init =3D at91_clock_init,
+	.soc_irq_prio =3D at91_irq_prio,
+	.soc_children =3D at91_devs,
+};
+
+AT91_SOC(AT91_T_SAM9G45, &soc_data);
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/arm/at91/at91sam9g45reg.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/head/sys/arm/at91/at91sam9g45reg.h	Fri Aug 10 14:19:25 2012 +0300
@@ -0,0 +1,294 @@
+/*-
+ * Copyright (c) 2009 Sylvestre Gallon.  All rights reserved.
+ * Copyright (c) 2010 Greg Ansley.  All rights reserved.
+ * Copyright (c) 2012 Andrew Turner.  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 PURP=
OSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENT=
IAL
+ * 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, STR=
ICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY W=
AY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+/* $FreeBSD: head/sys/arm/at91/at91sam9g45reg.h 238788 2012-07-26 08:01:25=
Z andrew $ */
+
+#ifndef AT91SAM9G45REG_H_
+#define	AT91SAM9G45REG_H_
+
+/* Chip Specific limits */
+#define	SAM9G45_PLL_A_MIN_IN_FREQ	  2000000 /*   2 Mhz */
+#define	SAM9G45_PLL_A_MAX_IN_FREQ	 32000000 /*  32 Mhz */
+#define	SAM9G45_PLL_A_MIN_OUT_FREQ	400000000 /* 400 Mhz */
+#define	SAM9G45_PLL_A_MAX_OUT_FREQ	800000000 /* 800 Mhz */
+#define	SAM9G45_PLL_A_MUL_SHIFT 16
+#define	SAM9G45_PLL_A_MUL_MASK 0xFF
+#define	SAM9G45_PLL_A_DIV_SHIFT 0
+#define	SAM9G45_PLL_A_DIV_MASK 0xFF
+
+/*
+ * Memory map, from datasheet :
+ * 0x00000000 - 0x0ffffffff : Internal Memories
+ * 0x10000000 - 0x1ffffffff : Chip Select 0
+ * 0x20000000 - 0x2ffffffff : Chip Select 1
+ * 0x30000000 - 0x3ffffffff : Chip Select 2
+ * 0x40000000 - 0x4ffffffff : Chip Select 3
+ * 0x50000000 - 0x5ffffffff : Chip Select 4
+ * 0x60000000 - 0x6ffffffff : Chip Select 5
+ * 0x70000000 - 0x7ffffffff : DDR SDRC 0
+ * 0x80000000 - 0xeffffffff : Undefined (Abort)
+ * 0xf0000000 - 0xfffffffff : Peripherals
+ */
+
+#define	AT91_CHIPSELECT_0 0x10000000
+#define	AT91_CHIPSELECT_1 0x20000000
+#define	AT91_CHIPSELECT_2 0x30000000
+#define	AT91_CHIPSELECT_3 0x40000000
+#define	AT91_CHIPSELECT_4 0x50000000
+#define	AT91_CHIPSELECT_5 0x60000000
+
+
+#define	AT91SAM9G45_EMAC_BASE	0xffbc000
+#define	AT91SAM9G45_EMAC_SIZE	0x4000
+
+#define	AT91SAM9G45_RSTC_BASE	0xffffd00
+#define	AT91SAM9G45_RSTC_SIZE	0x10
+
+/* USART*/
+
+#define	AT91SAM9G45_USART_SIZE	0x4000
+#define	AT91SAM9G45_USART0_BASE	0xff8c000
+#define	AT91SAM9G45_USART0_SIZE	AT91SAM9G45_USART_SIZE
+#define	AT91SAM9G45_USART1_BASE	0xff90000
+#define	AT91SAM9G45_USART1_SIZE	AT91SAM9G45_USART_SIZE
+#define	AT91SAM9G45_USART2_BASE	0xff94000
+#define	AT91SAM9G45_USART2_SIZE	AT91SAM9G45_USART_SIZE
+#define	AT91SAM9G45_USART3_BASE	0xff98000
+#define	AT91SAM9G45_USART3_SIZE	AT91SAM9G45_USART_SIZE
+
+/*TC*/
+#define	AT91SAM9G45_TC0_BASE	0xff7c000
+#define	AT91SAM9G45_TC0_SIZE	0x4000
+#define	AT91SAM9G45_TC0C0_BASE	0xff7c000
+#define	AT91SAM9G45_TC0C1_BASE	0xff7c040
+#define	AT91SAM9G45_TC0C2_BASE	0xff7c080
+
+#define	AT91SAM9G45_TC1_BASE	0xffd4000
+#define	AT91SAM9G45_TC1_SIZE	0x4000
+#define	AT91SAM9G45_TC1C0_BASE	0xffd4000
+#define	AT91SAM9G45_TC1C1_BASE	0xffd4040
+#define	AT91SAM9G45_TC1C2_BASE	0xffd4080
+
+/*SPI*/
+
+#define	AT91SAM9G45_SPI0_BASE	0xffa48000
+#define	AT91SAM9G45_SPI0_SIZE	0x4000
+
+#define	AT91SAM9G45_SPI1_BASE	0xffa8000
+#define	AT91SAM9G45_SPI1_SIZE	0x4000
+
+/* System Registers */
+#define	AT91SAM9G45_SYS_BASE	0xffff000
+#define	AT91SAM9G45_SYS_SIZE	0x1000
+
+#define	AT91SAM9G45_MATRIX_BASE	0xfffea00
+#define	AT91SAM9G45_MATRIX_SIZE	0x200
+
+#define	AT91SAM9G45_DBGU_BASE	0xfffee00
+#define	AT91SAM9G45_DBGU_SIZE	0x200
+
+/*
+ * PIO
+ */
+#define	AT91SAM9G45_PIOA_BASE	0xffff200
+#define	AT91SAM9G45_PIOA_SIZE	0x200
+#define	AT91SAM9G45_PIOB_BASE	0xffff400
+#define	AT91SAM9G45_PIOB_SIZE	0x200
+#define	AT91SAM9G45_PIOC_BASE	0xffff600
+#define	AT91SAM9G45_PIOC_SIZE	0x200
+#define	AT91SAM9G45_PIOD_BASE	0xffff800
+#define	AT91SAM9G45_PIOD_SIZE	0x200
+#define	AT91SAM9G45_PIOE_BASE	0xffffa00
+#define	AT91SAM9G45_PIOE_SIZE	0x200
+
+#define	AT91SAM9G45_PMC_BASE	0xffffc00
+#define	AT91SAM9G45_PMC_SIZE	0x100
+
+/* IRQs : */
+/*
+ * 0: AIC
+ * 1: System peripheral (System timer, RTC, DBGU)
+ * 2: PIO Controller A
+ * 3: PIO Controller B
+ * 4: PIO Controller C
+ * 5: PIO Controller D/E
+ * 6: TRNG
+ * 7: USART 0
+ * 8: USART 1
+ * 9: USART 2
+ * 10: USART 3
+ * 11: Multimedia Card interface 0
+ * 12: Two-wirte interface 0
+ * 13: Two-wirte interface 1
+ * 14: SPI 0
+ * 15: SPI 1
+ * 16: SSC 0
+ * 17: SSC 0
+ * 18: Timer Counter 0, 2, 3, 4, 5
+ * 19: PWM
+ * 20: Touch Screen ADC
+ * 21: DMA
+ * 22: USB Host port
+ * 23: LCD
+ * 24: AC97
+ * 25: EMAC
+ * 26: Image Sensor Interface
+ * 27: USB Device High Speed
+ * 28: -
+ * 29: Multimedia Card interface 1
+ * 30: Reserved
+ * 31: AIC
+ */
+
+#define	AT91SAM9G45_IRQ_SYSTEM	1
+#define	AT91SAM9G45_IRQ_PIOA	2
+#define	AT91SAM9G45_IRQ_PIOB	3
+#define	AT91SAM9G45_IRQ_PIOC	4
+#define	AT91SAM9G45_IRQ_PIOD	5
+#define	AT91SAM9G45_IRQ_PIOE	6
+#define	AT91SAM9G45_IRQ_USART0	7
+#define	AT91SAM9G45_IRQ_USART1	8
+#define	AT91SAM9G45_IRQ_USART2	9
+#define	AT91SAM9G45_IRQ_USART3	10
+#define	AT91SAM9G45_IRQ_HSMCI0	11
+#define	AT91SAM9G45_IRQ_TWI0	12
+#define	AT91SAM9G45_IRQ_TWI1	13
+#define	AT91SAM9G45_IRQ_SPI0	14
+#define	AT91SAM9G45_IRQ_SPI1	15
+#define	AT91SAM9G45_IRQ_SSC0	16
+#define	AT91SAM9G45_IRQ_SSC1	17
+#define	AT91SAM9G45_IRQ_TC0_TC5	18
+#define	AT91SAM9G45_IRQ_PWM	19
+#define	AT91SAM9G45_IRQ_TSADCC	20
+#define	AT91SAM9G45_IRQ_DMA	21
+#define	AT91SAM9G45_IRQ_UHP	22
+#define	AT91SAM9G45_IRQ_LCDC	23
+#define	AT91SAM9G45_IRQ_AC97C	24
+#define	AT91SAM9G45_IRQ_EMAC	25
+#define	AT91SAM9G45_IRQ_ISI	26
+#define	AT91SAM9G45_IRQ_UDPHS	27
+/* Reserved 28 */
+#define	AT91SAM9G45_IRQ_HSMCI1	29
+/* Reserved 30 */
+#define	AT91SAM9G45_IRQ_AICBASE	31
+
+/* Alias */
+#define	AT91SAM9G45_IRQ_DBGU	AT91SAM9G45_IRQ_SYSTEM
+#define	AT91SAM9G45_IRQ_PMC	AT91SAM9G45_IRQ_SYSTEM
+#define	AT91SAM9G45_IRQ_WDT	AT91SAM9G45_IRQ_SYSTEM
+#define	AT91SAM9G45_IRQ_PIT	AT91SAM9G45_IRQ_SYSTEM
+#define	AT91SAM9G45_IRQ_RSTC	AT91SAM9G45_IRQ_SYSTEM
+#define	AT91SAM9G45_IRQ_OHCI	AT91SAM9G45_IRQ_UHP
+#define	AT91SAM9G45_IRQ_TC0	AT91SAM9G45_IRQ_TC0_TC5
+#define	AT91SAM9G45_IRQ_TC1	AT91SAM9G45_IRQ_TC0_TC5
+#define	AT91SAM9G45_IRQ_TC2	AT91SAM9G45_IRQ_TC0_TC5
+#define	AT91SAM9G45_IRQ_TC3	AT91SAM9G45_IRQ_TC0_TC5
+#define	AT91SAM9G45_IRQ_TC4	AT91SAM9G45_IRQ_TC0_TC5
+#define	AT91SAM9G45_IRQ_TC5	AT91SAM9G45_IRQ_TC0_TC5
+#define	AT91SAM9G45_IRQ_NAND 	(-1)
+
+#define	AT91SAM9G45_AIC_BASE	0xffff000
+#define	AT91SAM9G45_AIC_SIZE	0x200
+
+/* Timer */
+
+#define	AT91SAM9G45_WDT_BASE	0xffffd40
+#define	AT91SAM9G45_WDT_SIZE	0x10
+
+#define	AT91SAM9G45_PIT_BASE	0xffffd30
+#define	AT91SAM9G45_PIT_SIZE	0x10
+
+#define	AT91SAM9G45_SMC_BASE	0xfffe800
+#define	AT91SAM9G45_SMC_SIZE	0x200
+
+#define	AT91SAM9G45_PMC_BASE	0xffffc00
+#define	AT91SAM9G45_PMC_SIZE	0x100
+
+#define	AT91SAM9G45_HSMCI0_BASE	0xff80000
+#define	AT91SAM9G45_HSMCI0_SIZE	0x4000
+
+#define	AT91SAM9G45_HSMCI1_BASE	0xffd0000
+#define	AT91SAM9G45_HSMCI1_SIZE	0x4000
+
+#define	AT91SAM9G45_TWI0_BASE	0xff84000
+#define	AT91SAM9G45_TWI0_SIZE	0x4000
+#define	AT91SAM9G45_TWI1_BASE	0xff88000
+#define	AT91SAM9G45_TWI1_SIZE	0x4000
+
+/* XXX Needs to be carfully coordinated with
+ * other * soc's so phyical and vm address
+ * mapping are unique. XXX
+ */
+#define	AT91SAM9G45_OHCI_BASE	  0xdfb00000
+#define	AT91SAM9G45_OHCI_PA_BASE  0x00700000
+#define	AT91SAM9G45_OHCI_SIZE	  0x00100000
+
+#define	AT91SAM9G45_NAND_BASE     0xe0000000
+#define	AT91SAM9G45_NAND_PA_BASE  0x40000000
+#define	AT91SAM9G45_NAND_SIZE     0x10000000
+
+
+/* DDRSDRC */
+#define	AT91SAM9G45_DDRSDRC1_BASE	0xfffea00
+#define	AT91SAM9G45_DDRSDRC0_BASE	0xfffe600
+#define	AT91SAM9G45_DDRSDRC_MR		0x00
+#define	AT91SAM9G45_DDRSDRC_TR		0x04
+#define	AT91SAM9G45_DDRSDRC_CR		0x08
+#define	AT91SAM9G45_DDRSDRC_CR_NC_8	0x0
+#define	AT91SAM9G45_DDRSDRC_CR_NC_9	0x1
+#define	AT91SAM9G45_DDRSDRC_CR_NC_10	0x2
+#define	AT91SAM9G45_DDRSDRC_CR_NC_11	0x3
+#define	AT91SAM9G45_DDRSDRC_CR_NC_MASK	0x00000003
+#define	AT91SAM9G45_DDRSDRC_CR_NR_11	0x0
+#define	AT91SAM9G45_DDRSDRC_CR_NR_12	0x4
+#define	AT91SAM9G45_DDRSDRC_CR_NR_13	0x8
+#define	AT91SAM9G45_DDRSDRC_CR_NR_14	0xc
+#define	AT91SAM9G45_DDRSDRC_CR_NR_MASK	0x0000000c
+#define	AT91SAM9G45_DDRSDRC_TPR0	0x0c
+#define	AT91SAM9G45_DDRSDRC_TPR1	0x10
+#define	AT91SAM9G45_DDRSDRC_TPR2	0x14
+/* Reserved 0x18 */
+#define	AT91SAM9G45_DDRSDRC_LPR		0x1c
+#define	AT91SAM9G45_DDRSDRC_MDR		0x20
+#define	AT91SAM9G45_DDRSDRC_MDR_SDR	0x0
+#define	AT91SAM9G45_DDRSDRC_MDR_LPSDR	0x1
+#define	AT91SAM9G45_DDRSDRC_MDR_LPDDR1	0x3
+#define	AT91SAM9G45_DDRSDRC_MDR_DDR2	0x6
+#define	AT91SAM9G45_DDRSDRC_MDR_MASK	0x00000007
+#define	AT91SAM9G45_DDRSDRC_MDR_DBW_16	0x10
+#define	AT91SAM9G45_DDRSDRC_DLL		0x24
+#define	AT91SAM9G45_DDRSDRC_HSR		0x2c
+#define	AT91SAM9G45_DDRSDRC_DELAY1R	0x40
+#define	AT91SAM9G45_DDRSDRC_DELAY2R	0x44
+#define	AT91SAM9G45_DDRSDRC_DELAY3R	0x48
+#define	AT91SAM9G45_DDRSDRC_DELAY4R	0x4c
+/* Reserved 0x50 - 0xe0 */
+#define	AT91SAM9G45_DDRSDRC_WPMR	0xe4
+#define	AT91SAM9G45_DDRSDRC_WPSR	0xe8
+
+#endif /* AT91SAM9G45REG_H_*/
+
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/arm/at91/at91sam9x25.c
--- a/head/sys/arm/at91/at91sam9x25.c	Mon Jul 30 11:44:18 2012 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,201 +0,0 @@
-/*-
- * Copyright (c) 2005 Olivier Houchard.  All rights reserved.
- * Copyright (c) 2010 Greg Ansley.  All rights reserved.
- * Copyright (c) 2012 M. Warner Losh..  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 PURP=
OSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENT=
IAL
- * 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, STR=
ICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY W=
AY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/arm/at91/at91sam9x25.c 238397 2012-07-12 13:4=
5:58Z imp $");
-
-#include <sys/param.h>
-#include <sys/systm.h>
-#include <sys/bus.h>
-#include <sys/kernel.h>
-#include <sys/malloc.h>
-#include <sys/module.h>
-
-#include <machine/bus.h>
-
-#include <arm/at91/at91var.h>
-#include <arm/at91/at91reg.h>
-#include <arm/at91/at91soc.h>
-#include <arm/at91/at91_aicreg.h>
-#include <arm/at91/at91sam9x25reg.h>
-#include <arm/at91/at91_pitreg.h>
-#include <arm/at91/at91_pmcreg.h>
-#include <arm/at91/at91_pmcvar.h>
-#include <arm/at91/at91_rstreg.h>
-
-/*
- * Standard priority levels for the system.  0 is lowest and 7 is highest.
- * These values are the ones Atmel uses for its Linux port
- */
-static const int at91_irq_prio[32] =3D
-{
-	7,	/* Advanced Interrupt Controller (FIQ) */
-	7,	/* System Peripherals */
-	1,	/* Parallel IO Controller A and B */
-	1,	/* Parallel IO Controller C and D */
-	4,	/* Soft Modem */
-	5,	/* USART 0 */
-	5,	/* USART 1 */
-	5,	/* USART 2 */
-	5,	/* USART 3 */
-	6,	/* Two-Wire Interface 0 */
-	6,	/* Two-Wire Interface 1 */
-	6,	/* Two-Wire Interface 2 */
-	0,	/* Multimedia Card Interface 0 */
-	5,	/* Serial Peripheral Interface 0 */
-	5,	/* Serial Peripheral Interface 1 */
-	5,	/* UART 0 */
-	5,	/* UART 1 */
-	0,	/* Timer Counter 0, 1, 2, 3, 4 and 5 */
-	0,	/* Pulse Width Modulation Controller */
-	0,	/* ADC Controller */
-	0,	/* DMA Controller 0 */
-	0,	/* DMA Controller 1 */
-	2,	/* USB Host High Speed port */
-	2,	/* USB Device High speed port */
-	3,	/* Ethernet MAC 0 */
-	3,	/* LDC Controller or Image Sensor Interface */
-	0,	/* Multimedia Card Interface 1 */
-	3,	/* Ethernet MAC 1 */
-	4,	/* Synchronous Serial Interface */
-	4,	/* CAN Controller 0 */
-	4,	/* CAN Controller 1 */
-	0,	/* Advanced Interrupt Controller (IRQ0) */
-};
-
-#define DEVICE(_name, _id, _unit)		\
-	{					\
-		_name, _unit,			\
-		AT91SAM9X25_ ## _id ##_BASE,	\
-		AT91SAM9X25_ ## _id ## _SIZE,	\
-		AT91SAM9X25_IRQ_ ## _id		\
-	}
-
-static const struct cpu_devs at91_devs[] =3D
-{
-	DEVICE("at91_pmc", PMC,  0),
-	DEVICE("at91_wdt", WDT,  0),
-	DEVICE("at91_rst", RSTC, 0),
-	DEVICE("at91_pit", PIT,  0),
-	DEVICE("at91_pio", PIOA, 0),
-	DEVICE("at91_pio", PIOB, 1),
-	DEVICE("at91_pio", PIOC, 2),
-	DEVICE("at91_pio", PIOD, 3),
-	DEVICE("at91_twi", TWI0, 0),
-	DEVICE("at91_twi", TWI1, 1),
-	DEVICE("at91_twi", TWI2, 2),
-	DEVICE("at91_mci", HSMCI0, 0),
-	DEVICE("at91_mci", HSMCI1, 1),
-	DEVICE("uart", DBGU,   0),
-	DEVICE("uart", USART0, 1),
-	DEVICE("uart", USART1, 2),
-	DEVICE("uart", USART2, 3),
-	DEVICE("uart", USART3, 4),
-	DEVICE("spi",  SPI0,   0),
-	DEVICE("spi",  SPI1,   1),
-	DEVICE("macb", EMAC0,  0),
-	DEVICE("macb", EMAC1,  0),
-	DEVICE("nand", NAND,   0),
-	DEVICE("ohci", OHCI,   0),
-	DEVICE("ehci", EHCI,   0),
-	{ 0, 0, 0, 0, 0 }
-};
-
-static uint32_t
-at91_pll_outa(int freq)
-{
-
-	switch (freq / 10000000) {
-		case 747 ... 801: return ((1 << 29) | (0 << 14));
-		case 697 ... 746: return ((1 << 29) | (1 << 14));
-		case 647 ... 696: return ((1 << 29) | (2 << 14));
-		case 597 ... 646: return ((1 << 29) | (3 << 14));
-		case 547 ... 596: return ((1 << 29) | (1 << 14));
-		case 497 ... 546: return ((1 << 29) | (2 << 14));
-		case 447 ... 496: return ((1 << 29) | (3 << 14));
-		case 397 ... 446: return ((1 << 29) | (4 << 14));
-		default: return (1 << 29);
-	}
-}
-
-static uint32_t
-at91_pll_outb(int freq)
-{
-
-	return (0);
-}
-
-static void
-at91_clock_init(void)
-{
-	struct at91_pmc_clock *clk;
-
-	/* Update USB device port clock info */
-	clk =3D at91_pmc_clock_ref("udpck");
-	clk->pmc_mask  =3D PMC_SCER_UDP_SAM9;
-	at91_pmc_clock_deref(clk);
-
-	/* Update USB host port clock info */
-	clk =3D at91_pmc_clock_ref("uhpck");
-	clk->pmc_mask  =3D PMC_SCER_UHP_SAM9;
-	at91_pmc_clock_deref(clk);
-
-	/* Each SOC has different PLL contraints */
-	clk =3D at91_pmc_clock_ref("plla");
-	clk->pll_min_in    =3D SAM9X25_PLL_A_MIN_IN_FREQ;		/*   2 MHz */
-	clk->pll_max_in    =3D SAM9X25_PLL_A_MAX_IN_FREQ;		/*  32 MHz */
-	clk->pll_min_out   =3D SAM9X25_PLL_A_MIN_OUT_FREQ;	/* 400 MHz */
-	clk->pll_max_out   =3D SAM9X25_PLL_A_MAX_OUT_FREQ;	/* 800 MHz */
-	clk->pll_mul_shift =3D SAM9X25_PLL_A_MUL_SHIFT;
-	clk->pll_mul_mask  =3D SAM9X25_PLL_A_MUL_MASK;
-	clk->pll_div_shift =3D SAM9X25_PLL_A_DIV_SHIFT;
-	clk->pll_div_mask  =3D SAM9X25_PLL_A_DIV_MASK;
-	clk->set_outb      =3D at91_pll_outa;
-	at91_pmc_clock_deref(clk);
-
-	clk =3D at91_pmc_clock_ref("pllb");
-	clk->pll_min_in    =3D SAM9X25_PLL_B_MIN_IN_FREQ;		/*   2 MHz */
-	clk->pll_max_in    =3D SAM9X25_PLL_B_MAX_IN_FREQ;		/*  32 MHz */
-	clk->pll_min_out   =3D SAM9X25_PLL_B_MIN_OUT_FREQ;	/*  30 MHz */
-	clk->pll_max_out   =3D SAM9X25_PLL_B_MAX_OUT_FREQ;	/* 100 MHz */
-	clk->pll_mul_shift =3D SAM9X25_PLL_B_MUL_SHIFT;
-	clk->pll_mul_mask  =3D SAM9X25_PLL_B_MUL_MASK;
-	clk->pll_div_shift =3D SAM9X25_PLL_B_DIV_SHIFT;
-	clk->pll_div_mask  =3D SAM9X25_PLL_B_DIV_MASK;
-	clk->set_outb      =3D at91_pll_outb;
-	at91_pmc_clock_deref(clk);
-}
-
-static struct at91_soc_data soc_data =3D {
-	.soc_delay =3D at91_pit_delay,
-	.soc_reset =3D at91_rst_cpu_reset,
-	.soc_clock_init =3D at91_clock_init,
-	.soc_irq_prio =3D at91_irq_prio,
-	.soc_children =3D at91_devs,
-};
-
-AT91_SOC_SUB(AT91_T_SAM9X5, AT91_ST_SAM9X25, &soc_data);
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/arm/at91/at91sam9x25reg.h
--- a/head/sys/arm/at91/at91sam9x25reg.h	Mon Jul 30 11:44:18 2012 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,316 +0,0 @@
-/*-
- * Copyright (c) 2009 Sylvestre Gallon.  All rights reserved.
- * Copyright (c) 2010 Greg Ansley.  All rights reserved.
- * Copyright (c) 2012 M. Warener Losh.  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 PURP=
OSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENT=
IAL
- * 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, STR=
ICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY W=
AY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-/* $FreeBSD: head/sys/arm/at91/at91sam9x25reg.h 238330 2012-07-10 02:14:50=
Z imp $ */
-
-#ifndef AT91SAM9X25REG_H_
-#define AT91SAM9X25REG_H_
-
-#ifndef AT91SAM9X25_MASTER_CLOCK
-#define AT91SAM9X25_MASTER_CLOCK ((18432000 * 43)/6)
-#endif
-
-/* Chip Specific limits */
-#define SAM9X25_PLL_A_MIN_IN_FREQ	  2000000 /*   2 Mhz */
-#define SAM9X25_PLL_A_MAX_IN_FREQ	 32000000 /*  32 Mhz */
-#define SAM9X25_PLL_A_MIN_OUT_FREQ	400000000 /* 400 Mhz */
-#define SAM9X25_PLL_A_MAX_OUT_FREQ	800000000 /* 800 Mhz */
-#define SAM9X25_PLL_A_MUL_SHIFT 16
-#define SAM9X25_PLL_A_MUL_MASK 0xFF=20
-#define SAM9X25_PLL_A_DIV_SHIFT 0
-#define SAM9X25_PLL_A_DIV_MASK 0xFF=20
-
-#define SAM9X25_PLL_B_MIN_IN_FREQ	  2000000 /*   2 Mhz */
-#define SAM9X25_PLL_B_MAX_IN_FREQ	 32000000 /*  32 Mhz */
-#define SAM9X25_PLL_B_MIN_OUT_FREQ	 30000000 /*  30 Mhz */
-#define SAM9X25_PLL_B_MAX_OUT_FREQ	100000000 /* 100 Mhz */
-#define SAM9X25_PLL_B_MUL_SHIFT 16
-#define SAM9X25_PLL_B_MUL_MASK 0x3F=20
-#define SAM9X25_PLL_B_DIV_SHIFT 0
-#define SAM9X25_PLL_B_DIV_MASK 0xFF=20
-
-/*=20
- * Memory map, from datasheet :
- * 0x00000000 - 0x0ffffffff : Internal Memories
- * 0x10000000 - 0x1ffffffff : Chip Select 0
- * 0x20000000 - 0x2ffffffff : Chip Select 1 DDR2/LPDDR/SDR/LPSDR
- * 0x30000000 - 0x3ffffffff : Chip Select 2=20
- * 0x40000000 - 0x4ffffffff : Chip Select 3 NAND Flash
- * 0x50000000 - 0x5ffffffff : Chip Select 4
- * 0x60000000 - 0x6ffffffff : Chip Select 5
- * 0x70000000 - 0xeffffffff : Undefined (Abort)
- * 0xf0000000 - 0xfffffffff : Peripherals
- */
-
-#define AT91_CHIPSELECT_0 0x10000000
-#define AT91_CHIPSELECT_1 0x20000000
-#define AT91_CHIPSELECT_2 0x30000000
-#define AT91_CHIPSELECT_3 0x40000000
-#define AT91_CHIPSELECT_4 0x50000000
-#define AT91_CHIPSELECT_5 0x60000000
-
-#define AT91SAM9X25_EMAC_SIZE  0x4000
-#define AT91SAM9X25_EMAC0_BASE 0x802c000
-#define AT91SAM9X25_EMAC0_SIZE AT91SAM9X25_EMAC_SIZE
-#define AT91SAM9X25_EMAC1_BASE 0x8030000
-#define AT91SAM9X25_EMAC1_SIZE AT91SAM9X25_EMAC_SIZE
-
-#define AT91SAM9X25_RSTC_BASE	0xffffe00
-#define AT91SAM9X25_RSTC_SIZE	0x10
-
-/* USART*/
-
-#define AT91SAM9X25_USART_SIZE	0x4000
-#define AT91SAM9X25_USART0_BASE	0x801c000
-#define AT91SAM9X25_USART0_PDC	0x801c100
-#define AT91SAM9X25_USART0_SIZE	AT91SAM9X25_USART_SIZE
-#define AT91SAM9X25_USART1_BASE	0x8020000
-#define AT91SAM9X25_USART1_PDC	0x8020100
-#define AT91SAM9X25_USART1_SIZE	AT91SAM9X25_USART_SIZE
-#define AT91SAM9X25_USART2_BASE	0x8024000
-#define AT91SAM9X25_USART2_PDC	0x8024100
-#define AT91SAM9X25_USART2_SIZE	AT91SAM9X25_USART_SIZE
-#define AT91SAM9X25_USART3_BASE	0x8028000
-#define AT91SAM9X25_USART3_PDC	0x8028100
-#define AT91SAM9X25_USART3_SIZE	AT91SAM9X25_USART_SIZE
-
-/*TC*/
-#define AT91SAM9X25_TC0_BASE	0x8008000
-#define AT91SAM9X25_TC0_SIZE	0x4000
-#define AT91SAM9X25_TC0C0_BASE	0x8008000
-#define AT91SAM9X25_TC0C1_BASE	0x8008040
-#define AT91SAM9X25_TC0C2_BASE	0x8008080
-
-#define AT91SAM9X25_TC1_BASE	0x800c000
-#define AT91SAM9X25_TC1_SIZE	0x4000
-
-/*SPI*/
-
-#define AT91SAM9X25_SPI0_BASE	0x0000000
-
-#define AT91SAM9X25_SPI0_SIZE	0x4000
-
-#define AT91SAM9X25_SPI1_BASE	0x0004000
-#define AT91SAM9X25_SPI1_SIZE	0x4000
-
-/* System Registers */
-#define AT91SAM9X25_SYS_BASE	0xffff000
-#define AT91SAM9X25_SYS_SIZE	0x1000
-
-#define AT91SAM9X25_MATRIX_BASE	0xfffde00
-#define AT91SAM9X25_MATRIX_SIZE	0x200
-
-#define AT91SAM9X25_DBGU_BASE	0xffff200
-#define AT91SAM9X25_DBGU_SIZE	0x200
-
-/*
- * PIO
- */
-#define AT91SAM9X25_PIOA_BASE	0xffff400
-#define AT91SAM9X25_PIOA_SIZE	0x200
-#define AT91SAM9X25_PIOB_BASE	0xffff600
-#define AT91SAM9X25_PIOB_SIZE	0x200
-#define AT91SAM9X25_PIOC_BASE	0xffff800
-#define AT91SAM9X25_PIOC_SIZE	0x200
-#define AT91SAM9X25_PIOD_BASE	0xffffa00
-#define AT91SAM9X25_PIOD_SIZE	0x200
-
-#define AT91RM92_PMC_BASE	0xffffc00
-#define AT91RM92_PMC_SIZE	0x100
-/* IRQs :
- * 0: AIC=20
- * 1: System peripheral (System timer, RTC, DBGU)
- * 2: PIO Controller A,B
- * 3: PIO Controller C,D
- * 4: SMD Soft Modem
- * 5: USART 0
- * 6: USART 1
- * 7: USART 2
- * 8: USART 3
- * 9: Two-wirte interface
- * 10: Two-wirte interface
- * 11: Two-wirte interface
- * 12: HSMCI Interface
- * 13: SPI 0
- * 14: SPI 1
- * 15: UART0
- * 16: UART1
- * 17: Timer Counter 0,1
- * 18: PWM
- * 19: ADC
- * 20: DMAC 0
- * 21: DMAC 1
- * 22: UHPHS - USB Host controller
- * 23: UDPHS - USB Device Controller
- * 24: EMAC0
- * 25: LCD controller or Image Sensor Interface
- * 26: HSMCI1
- * 27: EMAC1
- * 28: SSC
- * 29: CAN0
- * 30: CAN1
- * 31: AIC IRQ0
- */
-
-#define AT91SAM9X25_IRQ_AIC	0
-#define AT91SAM9X25_IRQ_SYSTEM	1
-#define AT91SAM9X25_IRQ_PIOAB	2
-#define AT91SAM9X25_IRQ_PIOCD	3
-#define AT91SAM9X25_IRQ_SMD	4
-#define AT91SAM9X25_IRQ_USART0	5
-#define AT91SAM9X25_IRQ_USART1	6
-#define AT91SAM9X25_IRQ_USART2	7
-#define AT91SAM9X25_IRQ_USART3	8
-#define AT91SAM9X25_IRQ_TWI0	9
-#define AT91SAM9X25_IRQ_TWI1	10
-#define AT91SAM9X25_IRQ_TWI2	11
-#define AT91SAM9X25_IRQ_HSMCI0	12
-#define AT91SAM9X25_IRQ_SPI0	13
-#define AT91SAM9X25_IRQ_SPI1	14
-#define AT91SAM9X25_IRQ_UART0	15
-#define AT91SAM9X25_IRQ_UART1	16
-#define AT91SAM9X25_IRQ_TC01	17
-#define AT91SAM9X25_IRQ_PWM	18
-#define AT91SAM9X25_IRQ_ADC	19
-#define AT91SAM9X25_IRQ_DMAC0	20
-#define AT91SAM9X25_IRQ_DMAC1	21
-#define AT91SAM9X25_IRQ_UHPHS	22
-#define AT91SAM9X25_IRQ_UDPHS	23
-#define AT91SAM9X25_IRQ_EMAC0	24
-#define AT91SAM9X25_IRQ_HSMCI1	26
-#define AT91SAM9X25_IRQ_EMAC1	27
-#define AT91SAM9X25_IRQ_SSC	28
-#define AT91SAM9X25_IRQ_CAN0	29
-#define AT91SAM9X25_IRQ_CAN1	30
-#define AT91SAM9X25_IRQ_AICBASE	31
-
-/* Alias */
-#define AT91SAM9X25_IRQ_DBGU 	AT91SAM9X25_IRQ_SYSTEM
-#define AT91SAM9X25_IRQ_PMC 	AT91SAM9X25_IRQ_SYSTEM
-#define AT91SAM9X25_IRQ_WDT 	AT91SAM9X25_IRQ_SYSTEM
-#define AT91SAM9X25_IRQ_PIT 	AT91SAM9X25_IRQ_SYSTEM
-#define AT91SAM9X25_IRQ_RSTC 	AT91SAM9X25_IRQ_SYSTEM
-#define AT91SAM9X25_IRQ_OHCI 	AT91SAM9X25_IRQ_UHPHS
-#define AT91SAM9X25_IRQ_EHCI 	AT91SAM9X25_IRQ_UHPHS
-#define AT91SAM9X25_IRQ_PIOA    AT91SAM9X25_IRQ_PIOAB
-#define AT91SAM9X25_IRQ_PIOB    AT91SAM9X25_IRQ_PIOAB
-#define AT91SAM9X25_IRQ_PIOC    AT91SAM9X25_IRQ_PIOCD
-#define AT91SAM9X25_IRQ_PIOD    AT91SAM9X25_IRQ_PIOCD
-#define AT91SAM9X25_IRQ_NAND 	(-1)
-
-#define AT91SAM9X25_AIC_BASE	0xffff000
-#define AT91SAM9X25_AIC_SIZE	0x200
-
-/* Timer */
-
-#define AT91SAM9X25_WDT_BASE	0xffffd40
-#define AT91SAM9X25_WDT_SIZE	0x10
-
-#define AT91SAM9X25_PIT_BASE	0xffffd30
-#define AT91SAM9X25_PIT_SIZE	0x10
-
-#define AT91SAM9X25_SMC_BASE	0xfffea00
-#define AT91SAM9X25_SMC_SIZE	0x200
-
-#define AT91SAM9X25_PMC_BASE	0xffffc00
-#define AT91SAM9X25_PMC_SIZE	0x100
-
-#define AT91SAM9X25_UDPHS_BASE	0x803c000
-#define AT91SAM9X25_UDPHS_SIZE	0x4000
-
-#define AT91SAM9X25_HSMCI_SIZE	0x4000
-#define AT91SAM9X25_HSMCI0_BASE	0x0008000
-#define AT91SAM9X25_HSMCI0_SIZE AT91SAM9X25_HSMCI_SIZE
-#define AT91SAM9X25_HSMCI1_BASE	0x000c000
-#define AT91SAM9X25_HSMCI1_SIZE AT91SAM9X25_HSMCI_SIZE
-
-#define AT91SAM9X25_TWI_SIZE	0x4000
-#define AT91SAM9X25_TWI0_BASE	0xffaC000
-#define AT91SAM9X25_TWI0_SIZE	AT91SAM9X25_TWI_SIZE
-#define AT91SAM9X25_TWI1_BASE	0xffaC000
-#define AT91SAM9X25_TWI1_SIZE	AT91SAM9X25_TWI_SIZE
-#define AT91SAM9X25_TWI2_BASE	0xffaC000
-#define AT91SAM9X25_TWI2_SIZE	AT91SAM9X25_TWI_SIZE
-
-/* XXX Needs to be carfully coordinated with
- * other * soc's so phyical and vm address
- * mapping are unique. XXX
- */
-#define AT91SAM9X25_OHCI_BASE	  0xdfc00000 /* SAME as 9c40 */
-#define AT91SAM9X25_OHCI_PA_BASE  0x00600000
-#define AT91SAM9X25_OHCI_SIZE	  0x00100000
-
-#define AT91SAM9X25_EHCI_BASE	  0xdfd00000
-#define AT91SAM9X25_EHCI_PA_BASE  0x00700000
-#define AT91SAM9X25_EHCI_SIZE	  0x00100000
-
-#define AT91SAM9X25_NAND_BASE     0xe0000000
-#define AT91SAM9X25_NAND_PA_BASE  0x40000000
-#define AT91SAM9X25_NAND_SIZE     0x10000000
-
-
-/* SDRAMC */
-#define AT91SAM9X25_SDRAMC_BASE	0xfffea00               /* SAME as SMC? */
-#define AT91SAM9X25_SDRAMC_MR	0x00
-#define AT91SAM9X25_SDRAMC_MR_MODE_NORMAL	0
-#define AT91SAM9X25_SDRAMC_MR_MODE_NOP	1
-#define AT91SAM9X25_SDRAMC_MR_MODE_PRECHARGE 2
-#define AT91SAM9X25_SDRAMC_MR_MODE_LOAD_MODE_REGISTER 3
-#define AT91SAM9X25_SDRAMC_MR_MODE_REFRESH	4
-#define AT91SAM9X25_SDRAMC_TR	0x04
-#define AT91SAM9X25_SDRAMC_CR	0x08
-#define AT91SAM9X25_SDRAMC_CR_NC_8		0x0
-#define AT91SAM9X25_SDRAMC_CR_NC_9		0x1
-#define AT91SAM9X25_SDRAMC_CR_NC_10	0x2
-#define AT91SAM9X25_SDRAMC_CR_NC_11	0x3
-#define AT91SAM9X25_SDRAMC_CR_NC_MASK	0x00000003
-#define AT91SAM9X25_SDRAMC_CR_NR_11	0x0
-#define AT91SAM9X25_SDRAMC_CR_NR_12	0x4
-#define AT91SAM9X25_SDRAMC_CR_NR_13	0x8
-#define AT91SAM9X25_SDRAMC_CR_NR_RES	0xc
-#define AT91SAM9X25_SDRAMC_CR_NR_MASK	0x0000000c
-#define AT91SAM9X25_SDRAMC_CR_NB_2		0x00
-#define AT91SAM9X25_SDRAMC_CR_NB_4		0x10
-#define AT91SAM9X25_SDRAMC_CR_DBW_16		0x80
-#define AT91SAM9X25_SDRAMC_CR_NB_MASK	0x00000010
-#define AT91SAM9X25_SDRAMC_CR_NCAS_MASK	0x00000060
-#define AT91SAM9X25_SDRAMC_CR_TWR_MASK	0x00000780
-#define AT91SAM9X25_SDRAMC_CR_TRC_MASK	0x00007800
-#define AT91SAM9X25_SDRAMC_CR_TRP_MASK	0x00078000
-#define AT91SAM9X25_SDRAMC_CR_TRCD_MASK	0x00780000
-#define AT91SAM9X25_SDRAMC_CR_TRAS_MASK	0x07800000
-#define AT91SAM9X25_SDRAMC_CR_TXSR_MASK	0x78000000
-#define AT91SAM9X25_SDRAMC_HSR	0x0c
-#define AT91SAM9X25_SDRAMC_LPR	0x10
-#define AT91SAM9X25_SDRAMC_IER	0x14
-#define AT91SAM9X25_SDRAMC_IDR	0x18
-#define AT91SAM9X25_SDRAMC_IMR	0x1c
-#define AT91SAM9X25_SDRAMC_ISR	0x20
-#define AT91SAM9X25_SDRAMC_MDR	0x24
-
-#endif /* AT91SAM9X25REG_H_*/
-
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/arm/at91/at91sam9x5.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/head/sys/arm/at91/at91sam9x5.c	Fri Aug 10 14:19:25 2012 +0300
@@ -0,0 +1,201 @@
+/*-
+ * Copyright (c) 2005 Olivier Houchard.  All rights reserved.
+ * Copyright (c) 2010 Greg Ansley.  All rights reserved.
+ * Copyright (c) 2012 M. Warner Losh..  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 PURP=
OSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENT=
IAL
+ * 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, STR=
ICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY W=
AY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD: head/sys/arm/at91/at91sam9x5.c 238922 2012-07-30 21:30=
:43Z imp $");
+
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <sys/bus.h>
+#include <sys/kernel.h>
+#include <sys/malloc.h>
+#include <sys/module.h>
+
+#include <machine/bus.h>
+
+#include <arm/at91/at91var.h>
+#include <arm/at91/at91reg.h>
+#include <arm/at91/at91soc.h>
+#include <arm/at91/at91_aicreg.h>
+#include <arm/at91/at91sam9x5reg.h>
+#include <arm/at91/at91_pitreg.h>
+#include <arm/at91/at91_pmcreg.h>
+#include <arm/at91/at91_pmcvar.h>
+#include <arm/at91/at91_rstreg.h>
+
+/*
+ * Standard priority levels for the system.  0 is lowest and 7 is highest.
+ * These values are the ones Atmel uses for its Linux port
+ */
+static const int at91_irq_prio[32] =3D
+{
+	7,	/* Advanced Interrupt Controller (FIQ) */
+	7,	/* System Peripherals */
+	1,	/* Parallel IO Controller A and B */
+	1,	/* Parallel IO Controller C and D */
+	4,	/* Soft Modem */
+	5,	/* USART 0 */
+	5,	/* USART 1 */
+	5,	/* USART 2 */
+	5,	/* USART 3 */
+	6,	/* Two-Wire Interface 0 */
+	6,	/* Two-Wire Interface 1 */
+	6,	/* Two-Wire Interface 2 */
+	0,	/* Multimedia Card Interface 0 */
+	5,	/* Serial Peripheral Interface 0 */
+	5,	/* Serial Peripheral Interface 1 */
+	5,	/* UART 0 */
+	5,	/* UART 1 */
+	0,	/* Timer Counter 0, 1, 2, 3, 4 and 5 */
+	0,	/* Pulse Width Modulation Controller */
+	0,	/* ADC Controller */
+	0,	/* DMA Controller 0 */
+	0,	/* DMA Controller 1 */
+	2,	/* USB Host High Speed port */
+	2,	/* USB Device High speed port */
+	3,	/* Ethernet MAC 0 */
+	3,	/* LDC Controller or Image Sensor Interface */
+	0,	/* Multimedia Card Interface 1 */
+	3,	/* Ethernet MAC 1 */
+	4,	/* Synchronous Serial Interface */
+	4,	/* CAN Controller 0 */
+	4,	/* CAN Controller 1 */
+	0,	/* Advanced Interrupt Controller (IRQ0) */
+};
+
+#define DEVICE(_name, _id, _unit)		\
+	{					\
+		_name, _unit,			\
+		AT91SAM9X25_ ## _id ##_BASE,	\
+		AT91SAM9X25_ ## _id ## _SIZE,	\
+		AT91SAM9X25_IRQ_ ## _id		\
+	}
+
+static const struct cpu_devs at91_devs[] =3D
+{
+	DEVICE("at91_pmc", PMC,  0),
+	DEVICE("at91_wdt", WDT,  0),
+	DEVICE("at91_rst", RSTC, 0),
+	DEVICE("at91_pit", PIT,  0),
+	DEVICE("at91_pio", PIOA, 0),
+	DEVICE("at91_pio", PIOB, 1),
+	DEVICE("at91_pio", PIOC, 2),
+	DEVICE("at91_pio", PIOD, 3),
+	DEVICE("at91_twi", TWI0, 0),
+	DEVICE("at91_twi", TWI1, 1),
+	DEVICE("at91_twi", TWI2, 2),
+	DEVICE("at91_mci", HSMCI0, 0),
+	DEVICE("at91_mci", HSMCI1, 1),
+	DEVICE("uart", DBGU,   0),
+	DEVICE("uart", USART0, 1),
+	DEVICE("uart", USART1, 2),
+	DEVICE("uart", USART2, 3),
+	DEVICE("uart", USART3, 4),
+	DEVICE("spi",  SPI0,   0),
+	DEVICE("spi",  SPI1,   1),
+	DEVICE("macb", EMAC0,  0),
+	DEVICE("macb", EMAC1,  0),
+	DEVICE("nand", NAND,   0),
+	DEVICE("ohci", OHCI,   0),
+	DEVICE("ehci", EHCI,   0),
+	{ 0, 0, 0, 0, 0 }
+};
+
+static uint32_t
+at91_pll_outa(int freq)
+{
+
+	switch (freq / 10000000) {
+		case 747 ... 801: return ((1 << 29) | (0 << 14));
+		case 697 ... 746: return ((1 << 29) | (1 << 14));
+		case 647 ... 696: return ((1 << 29) | (2 << 14));
+		case 597 ... 646: return ((1 << 29) | (3 << 14));
+		case 547 ... 596: return ((1 << 29) | (1 << 14));
+		case 497 ... 546: return ((1 << 29) | (2 << 14));
+		case 447 ... 496: return ((1 << 29) | (3 << 14));
+		case 397 ... 446: return ((1 << 29) | (4 << 14));
+		default: return (1 << 29);
+	}
+}
+
+static uint32_t
+at91_pll_outb(int freq)
+{
+
+	return (0);
+}
+
+static void
+at91_clock_init(void)
+{
+	struct at91_pmc_clock *clk;
+
+	/* Update USB device port clock info */
+	clk =3D at91_pmc_clock_ref("udpck");
+	clk->pmc_mask  =3D PMC_SCER_UDP_SAM9;
+	at91_pmc_clock_deref(clk);
+
+	/* Update USB host port clock info */
+	clk =3D at91_pmc_clock_ref("uhpck");
+	clk->pmc_mask  =3D PMC_SCER_UHP_SAM9;
+	at91_pmc_clock_deref(clk);
+
+	/* Each SOC has different PLL contraints */
+	clk =3D at91_pmc_clock_ref("plla");
+	clk->pll_min_in    =3D SAM9X25_PLL_A_MIN_IN_FREQ;		/*   2 MHz */
+	clk->pll_max_in    =3D SAM9X25_PLL_A_MAX_IN_FREQ;		/*  32 MHz */
+	clk->pll_min_out   =3D SAM9X25_PLL_A_MIN_OUT_FREQ;	/* 400 MHz */
+	clk->pll_max_out   =3D SAM9X25_PLL_A_MAX_OUT_FREQ;	/* 800 MHz */
+	clk->pll_mul_shift =3D SAM9X25_PLL_A_MUL_SHIFT;
+	clk->pll_mul_mask  =3D SAM9X25_PLL_A_MUL_MASK;
+	clk->pll_div_shift =3D SAM9X25_PLL_A_DIV_SHIFT;
+	clk->pll_div_mask  =3D SAM9X25_PLL_A_DIV_MASK;
+	clk->set_outb      =3D at91_pll_outa;
+	at91_pmc_clock_deref(clk);
+
+	clk =3D at91_pmc_clock_ref("pllb");
+	clk->pll_min_in    =3D SAM9X25_PLL_B_MIN_IN_FREQ;		/*   2 MHz */
+	clk->pll_max_in    =3D SAM9X25_PLL_B_MAX_IN_FREQ;		/*  32 MHz */
+	clk->pll_min_out   =3D SAM9X25_PLL_B_MIN_OUT_FREQ;	/*  30 MHz */
+	clk->pll_max_out   =3D SAM9X25_PLL_B_MAX_OUT_FREQ;	/* 100 MHz */
+	clk->pll_mul_shift =3D SAM9X25_PLL_B_MUL_SHIFT;
+	clk->pll_mul_mask  =3D SAM9X25_PLL_B_MUL_MASK;
+	clk->pll_div_shift =3D SAM9X25_PLL_B_DIV_SHIFT;
+	clk->pll_div_mask  =3D SAM9X25_PLL_B_DIV_MASK;
+	clk->set_outb      =3D at91_pll_outb;
+	at91_pmc_clock_deref(clk);
+}
+
+static struct at91_soc_data soc_data =3D {
+	.soc_delay =3D at91_pit_delay,
+	.soc_reset =3D at91_rst_cpu_reset,
+	.soc_clock_init =3D at91_clock_init,
+	.soc_irq_prio =3D at91_irq_prio,
+	.soc_children =3D at91_devs,
+};
+
+AT91_SOC_SUB(AT91_T_SAM9X5, AT91_ST_SAM9X25, &soc_data);
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/arm/at91/at91sam9x5reg.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/head/sys/arm/at91/at91sam9x5reg.h	Fri Aug 10 14:19:25 2012 +0300
@@ -0,0 +1,315 @@
+/*-
+ * Copyright (c) 2009 Sylvestre Gallon.  All rights reserved.
+ * Copyright (c) 2010 Greg Ansley.  All rights reserved.
+ * Copyright (c) 2012 M. Warener Losh.  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 PURP=
OSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENT=
IAL
+ * 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, STR=
ICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY W=
AY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+/* $FreeBSD: head/sys/arm/at91/at91sam9x5reg.h 238922 2012-07-30 21:30:43Z=
 imp $ */
+
+#ifndef AT91SAM9X5REG_H_
+#define AT91SAM9X5REG_H_
+
+#ifndef AT91SAM9X25_MASTER_CLOCK
+#define AT91SAM9X25_MASTER_CLOCK ((18432000 * 43)/6)
+#endif
+
+/* Chip Specific limits */
+#define SAM9X25_PLL_A_MIN_IN_FREQ	  2000000 /*   2 Mhz */
+#define SAM9X25_PLL_A_MAX_IN_FREQ	 32000000 /*  32 Mhz */
+#define SAM9X25_PLL_A_MIN_OUT_FREQ	400000000 /* 400 Mhz */
+#define SAM9X25_PLL_A_MAX_OUT_FREQ	800000000 /* 800 Mhz */
+#define SAM9X25_PLL_A_MUL_SHIFT 16
+#define SAM9X25_PLL_A_MUL_MASK 0xFF=20
+#define SAM9X25_PLL_A_DIV_SHIFT 0
+#define SAM9X25_PLL_A_DIV_MASK 0xFF=20
+
+#define SAM9X25_PLL_B_MIN_IN_FREQ	  2000000 /*   2 Mhz */
+#define SAM9X25_PLL_B_MAX_IN_FREQ	 32000000 /*  32 Mhz */
+#define SAM9X25_PLL_B_MIN_OUT_FREQ	 30000000 /*  30 Mhz */
+#define SAM9X25_PLL_B_MAX_OUT_FREQ	100000000 /* 100 Mhz */
+#define SAM9X25_PLL_B_MUL_SHIFT 16
+#define SAM9X25_PLL_B_MUL_MASK 0x3F=20
+#define SAM9X25_PLL_B_DIV_SHIFT 0
+#define SAM9X25_PLL_B_DIV_MASK 0xFF=20
+
+/*=20
+ * Memory map, from datasheet :
+ * 0x00000000 - 0x0ffffffff : Internal Memories
+ * 0x10000000 - 0x1ffffffff : Chip Select 0
+ * 0x20000000 - 0x2ffffffff : Chip Select 1 DDR2/LPDDR/SDR/LPSDR
+ * 0x30000000 - 0x3ffffffff : Chip Select 2=20
+ * 0x40000000 - 0x4ffffffff : Chip Select 3 NAND Flash
+ * 0x50000000 - 0x5ffffffff : Chip Select 4
+ * 0x60000000 - 0x6ffffffff : Chip Select 5
+ * 0x70000000 - 0xeffffffff : Undefined (Abort)
+ * 0xf0000000 - 0xfffffffff : Peripherals
+ */
+
+#define AT91_CHIPSELECT_0 0x10000000
+#define AT91_CHIPSELECT_1 0x20000000
+#define AT91_CHIPSELECT_2 0x30000000
+#define AT91_CHIPSELECT_3 0x40000000
+#define AT91_CHIPSELECT_4 0x50000000
+#define AT91_CHIPSELECT_5 0x60000000
+
+#define AT91SAM9X25_EMAC_SIZE  0x4000
+#define AT91SAM9X25_EMAC0_BASE 0x802c000
+#define AT91SAM9X25_EMAC0_SIZE AT91SAM9X25_EMAC_SIZE
+#define AT91SAM9X25_EMAC1_BASE 0x8030000
+#define AT91SAM9X25_EMAC1_SIZE AT91SAM9X25_EMAC_SIZE
+
+#define AT91SAM9X25_RSTC_BASE	0xffffe00
+#define AT91SAM9X25_RSTC_SIZE	0x10
+
+/* USART*/
+
+#define AT91SAM9X25_USART_SIZE	0x4000
+#define AT91SAM9X25_USART0_BASE	0x801c000
+#define AT91SAM9X25_USART0_PDC	0x801c100
+#define AT91SAM9X25_USART0_SIZE	AT91SAM9X25_USART_SIZE
+#define AT91SAM9X25_USART1_BASE	0x8020000
+#define AT91SAM9X25_USART1_PDC	0x8020100
+#define AT91SAM9X25_USART1_SIZE	AT91SAM9X25_USART_SIZE
+#define AT91SAM9X25_USART2_BASE	0x8024000
+#define AT91SAM9X25_USART2_PDC	0x8024100
+#define AT91SAM9X25_USART2_SIZE	AT91SAM9X25_USART_SIZE
+#define AT91SAM9X25_USART3_BASE	0x8028000
+#define AT91SAM9X25_USART3_PDC	0x8028100
+#define AT91SAM9X25_USART3_SIZE	AT91SAM9X25_USART_SIZE
+
+/*TC*/
+#define AT91SAM9X25_TC0_BASE	0x8008000
+#define AT91SAM9X25_TC0_SIZE	0x4000
+#define AT91SAM9X25_TC0C0_BASE	0x8008000
+#define AT91SAM9X25_TC0C1_BASE	0x8008040
+#define AT91SAM9X25_TC0C2_BASE	0x8008080
+
+#define AT91SAM9X25_TC1_BASE	0x800c000
+#define AT91SAM9X25_TC1_SIZE	0x4000
+
+/*SPI*/
+
+#define AT91SAM9X25_SPI0_BASE	0x0000000
+
+#define AT91SAM9X25_SPI0_SIZE	0x4000
+
+#define AT91SAM9X25_SPI1_BASE	0x0004000
+#define AT91SAM9X25_SPI1_SIZE	0x4000
+
+/* System Registers */
+#define AT91SAM9X25_SYS_BASE	0xffff000
+#define AT91SAM9X25_SYS_SIZE	0x1000
+
+#define AT91SAM9X25_MATRIX_BASE	0xfffde00
+#define AT91SAM9X25_MATRIX_SIZE	0x200
+
+#define AT91SAM9X25_DBGU_BASE	0xffff200
+#define AT91SAM9X25_DBGU_SIZE	0x200
+
+/*
+ * PIO
+ */
+#define AT91SAM9X25_PIOA_BASE	0xffff400
+#define AT91SAM9X25_PIOA_SIZE	0x200
+#define AT91SAM9X25_PIOB_BASE	0xffff600
+#define AT91SAM9X25_PIOB_SIZE	0x200
+#define AT91SAM9X25_PIOC_BASE	0xffff800
+#define AT91SAM9X25_PIOC_SIZE	0x200
+#define AT91SAM9X25_PIOD_BASE	0xffffa00
+#define AT91SAM9X25_PIOD_SIZE	0x200
+
+#define AT91RM92_PMC_BASE	0xffffc00
+#define AT91RM92_PMC_SIZE	0x100
+/* IRQs :
+ * 0: AIC=20
+ * 1: System peripheral (System timer, RTC, DBGU)
+ * 2: PIO Controller A,B
+ * 3: PIO Controller C,D
+ * 4: SMD Soft Modem
+ * 5: USART 0
+ * 6: USART 1
+ * 7: USART 2
+ * 8: USART 3
+ * 9: Two-wirte interface
+ * 10: Two-wirte interface
+ * 11: Two-wirte interface
+ * 12: HSMCI Interface
+ * 13: SPI 0
+ * 14: SPI 1
+ * 15: UART0
+ * 16: UART1
+ * 17: Timer Counter 0,1
+ * 18: PWM
+ * 19: ADC
+ * 20: DMAC 0
+ * 21: DMAC 1
+ * 22: UHPHS - USB Host controller
+ * 23: UDPHS - USB Device Controller
+ * 24: EMAC0
+ * 25: LCD controller or Image Sensor Interface
+ * 26: HSMCI1
+ * 27: EMAC1
+ * 28: SSC
+ * 29: CAN0
+ * 30: CAN1
+ * 31: AIC IRQ0
+ */
+
+#define AT91SAM9X25_IRQ_AIC	0
+#define AT91SAM9X25_IRQ_SYSTEM	1
+#define AT91SAM9X25_IRQ_PIOAB	2
+#define AT91SAM9X25_IRQ_PIOCD	3
+#define AT91SAM9X25_IRQ_SMD	4
+#define AT91SAM9X25_IRQ_USART0	5
+#define AT91SAM9X25_IRQ_USART1	6
+#define AT91SAM9X25_IRQ_USART2	7
+#define AT91SAM9X25_IRQ_USART3	8
+#define AT91SAM9X25_IRQ_TWI0	9
+#define AT91SAM9X25_IRQ_TWI1	10
+#define AT91SAM9X25_IRQ_TWI2	11
+#define AT91SAM9X25_IRQ_HSMCI0	12
+#define AT91SAM9X25_IRQ_SPI0	13
+#define AT91SAM9X25_IRQ_SPI1	14
+#define AT91SAM9X25_IRQ_UART0	15
+#define AT91SAM9X25_IRQ_UART1	16
+#define AT91SAM9X25_IRQ_TC01	17
+#define AT91SAM9X25_IRQ_PWM	18
+#define AT91SAM9X25_IRQ_ADC	19
+#define AT91SAM9X25_IRQ_DMAC0	20
+#define AT91SAM9X25_IRQ_DMAC1	21
+#define AT91SAM9X25_IRQ_UHPHS	22
+#define AT91SAM9X25_IRQ_UDPHS	23
+#define AT91SAM9X25_IRQ_EMAC0	24
+#define AT91SAM9X25_IRQ_HSMCI1	26
+#define AT91SAM9X25_IRQ_EMAC1	27
+#define AT91SAM9X25_IRQ_SSC	28
+#define AT91SAM9X25_IRQ_CAN0	29
+#define AT91SAM9X25_IRQ_CAN1	30
+#define AT91SAM9X25_IRQ_AICBASE	31
+
+/* Alias */
+#define AT91SAM9X25_IRQ_DBGU 	AT91SAM9X25_IRQ_SYSTEM
+#define AT91SAM9X25_IRQ_PMC 	AT91SAM9X25_IRQ_SYSTEM
+#define AT91SAM9X25_IRQ_WDT 	AT91SAM9X25_IRQ_SYSTEM
+#define AT91SAM9X25_IRQ_PIT 	AT91SAM9X25_IRQ_SYSTEM
+#define AT91SAM9X25_IRQ_RSTC 	AT91SAM9X25_IRQ_SYSTEM
+#define AT91SAM9X25_IRQ_OHCI 	AT91SAM9X25_IRQ_UHPHS
+#define AT91SAM9X25_IRQ_EHCI 	AT91SAM9X25_IRQ_UHPHS
+#define AT91SAM9X25_IRQ_PIOA    AT91SAM9X25_IRQ_PIOAB
+#define AT91SAM9X25_IRQ_PIOB    AT91SAM9X25_IRQ_PIOAB
+#define AT91SAM9X25_IRQ_PIOC    AT91SAM9X25_IRQ_PIOCD
+#define AT91SAM9X25_IRQ_PIOD    AT91SAM9X25_IRQ_PIOCD
+#define AT91SAM9X25_IRQ_NAND 	(-1)
+
+#define AT91SAM9X25_AIC_BASE	0xffff000
+#define AT91SAM9X25_AIC_SIZE	0x200
+
+/* Timer */
+
+#define AT91SAM9X25_WDT_BASE	0xffffd40
+#define AT91SAM9X25_WDT_SIZE	0x10
+
+#define AT91SAM9X25_PIT_BASE	0xffffd30
+#define AT91SAM9X25_PIT_SIZE	0x10
+
+#define AT91SAM9X25_SMC_BASE	0xfffea00
+#define AT91SAM9X25_SMC_SIZE	0x200
+
+#define AT91SAM9X25_PMC_BASE	0xffffc00
+#define AT91SAM9X25_PMC_SIZE	0x100
+
+#define AT91SAM9X25_UDPHS_BASE	0x803c000
+#define AT91SAM9X25_UDPHS_SIZE	0x4000
+
+#define AT91SAM9X25_HSMCI_SIZE	0x4000
+#define AT91SAM9X25_HSMCI0_BASE	0x0008000
+#define AT91SAM9X25_HSMCI0_SIZE AT91SAM9X25_HSMCI_SIZE
+#define AT91SAM9X25_HSMCI1_BASE	0x000c000
+#define AT91SAM9X25_HSMCI1_SIZE AT91SAM9X25_HSMCI_SIZE
+
+#define AT91SAM9X25_TWI_SIZE	0x4000
+#define AT91SAM9X25_TWI0_BASE	0xffaC000
+#define AT91SAM9X25_TWI0_SIZE	AT91SAM9X25_TWI_SIZE
+#define AT91SAM9X25_TWI1_BASE	0xffaC000
+#define AT91SAM9X25_TWI1_SIZE	AT91SAM9X25_TWI_SIZE
+#define AT91SAM9X25_TWI2_BASE	0xffaC000
+#define AT91SAM9X25_TWI2_SIZE	AT91SAM9X25_TWI_SIZE
+
+/* XXX Needs to be carfully coordinated with
+ * other * soc's so phyical and vm address
+ * mapping are unique. XXX
+ */
+#define AT91SAM9X25_OHCI_BASE	  0xdfc00000 /* SAME as 9c40 */
+#define AT91SAM9X25_OHCI_PA_BASE  0x00600000
+#define AT91SAM9X25_OHCI_SIZE	  0x00100000
+
+#define AT91SAM9X25_EHCI_BASE	  0xdfd00000
+#define AT91SAM9X25_EHCI_PA_BASE  0x00700000
+#define AT91SAM9X25_EHCI_SIZE	  0x00100000
+
+#define AT91SAM9X25_NAND_BASE     0xe0000000
+#define AT91SAM9X25_NAND_PA_BASE  0x40000000
+#define AT91SAM9X25_NAND_SIZE     0x10000000
+
+
+/* SDRAMC */
+#define AT91SAM9X25_SDRAMC_BASE	0xfffea00               /* SAME as SMC? */
+#define AT91SAM9X25_SDRAMC_MR	0x00
+#define AT91SAM9X25_SDRAMC_MR_MODE_NORMAL	0
+#define AT91SAM9X25_SDRAMC_MR_MODE_NOP	1
+#define AT91SAM9X25_SDRAMC_MR_MODE_PRECHARGE 2
+#define AT91SAM9X25_SDRAMC_MR_MODE_LOAD_MODE_REGISTER 3
+#define AT91SAM9X25_SDRAMC_MR_MODE_REFRESH	4
+#define AT91SAM9X25_SDRAMC_TR	0x04
+#define AT91SAM9X25_SDRAMC_CR	0x08
+#define AT91SAM9X25_SDRAMC_CR_NC_8		0x0
+#define AT91SAM9X25_SDRAMC_CR_NC_9		0x1
+#define AT91SAM9X25_SDRAMC_CR_NC_10	0x2
+#define AT91SAM9X25_SDRAMC_CR_NC_11	0x3
+#define AT91SAM9X25_SDRAMC_CR_NC_MASK	0x00000003
+#define AT91SAM9X25_SDRAMC_CR_NR_11	0x0
+#define AT91SAM9X25_SDRAMC_CR_NR_12	0x4
+#define AT91SAM9X25_SDRAMC_CR_NR_13	0x8
+#define AT91SAM9X25_SDRAMC_CR_NR_RES	0xc
+#define AT91SAM9X25_SDRAMC_CR_NR_MASK	0x0000000c
+#define AT91SAM9X25_SDRAMC_CR_NB_2		0x00
+#define AT91SAM9X25_SDRAMC_CR_NB_4		0x10
+#define AT91SAM9X25_SDRAMC_CR_DBW_16		0x80
+#define AT91SAM9X25_SDRAMC_CR_NB_MASK	0x00000010
+#define AT91SAM9X25_SDRAMC_CR_NCAS_MASK	0x00000060
+#define AT91SAM9X25_SDRAMC_CR_TWR_MASK	0x00000780
+#define AT91SAM9X25_SDRAMC_CR_TRC_MASK	0x00007800
+#define AT91SAM9X25_SDRAMC_CR_TRP_MASK	0x00078000
+#define AT91SAM9X25_SDRAMC_CR_TRCD_MASK	0x00780000
+#define AT91SAM9X25_SDRAMC_CR_TRAS_MASK	0x07800000
+#define AT91SAM9X25_SDRAMC_CR_TXSR_MASK	0x78000000
+#define AT91SAM9X25_SDRAMC_HSR	0x0c
+#define AT91SAM9X25_SDRAMC_LPR	0x10
+#define AT91SAM9X25_SDRAMC_IER	0x14
+#define AT91SAM9X25_SDRAMC_IDR	0x18
+#define AT91SAM9X25_SDRAMC_IMR	0x1c
+#define AT91SAM9X25_SDRAMC_ISR	0x20
+#define AT91SAM9X25_SDRAMC_MDR	0x24
+
+#endif /* AT91SAM9X5REG_H_*/
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/arm/at91/board_sam9260ek.c
--- a/head/sys/arm/at91/board_sam9260ek.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/arm/at91/board_sam9260ek.c	Fri Aug 10 14:19:25 2012 +0300
@@ -29,7 +29,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/arm/at91/board_sam9260ek.c 238443 2012-07-14 =
06:13:23Z imp $");
+__FBSDID("$FreeBSD: head/sys/arm/at91/board_sam9260ek.c 238821 2012-07-27 =
05:33:55Z imp $");
=20
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -74,37 +74,55 @@
 	at91_pio_use_periph_a(AT91SAM9260_PIOA_BASE, AT91C_PIO_PA20, 0);
 	/* EMDIO */
 	at91_pio_use_periph_a(AT91SAM9260_PIOA_BASE, AT91C_PIO_PA21, 0);
+	/* Not RMII */
+	/* ETX2 */
+	at91_pio_use_periph_b(AT91SAM9260_PIOA_BASE, AT91C_PIO_PA10, 0);
+	/* ETX3 */
+	at91_pio_use_periph_b(AT91SAM9260_PIOA_BASE, AT91C_PIO_PA11, 0);
+	/* ETXER */
+	at91_pio_use_periph_b(AT91SAM9260_PIOA_BASE, AT91C_PIO_PA22, 0);
+	/* ERX2 */
+	at91_pio_use_periph_b(AT91SAM9260_PIOA_BASE, AT91C_PIO_PA25, 0);
+	/* ERX3 */
+	at91_pio_use_periph_b(AT91SAM9260_PIOA_BASE, AT91C_PIO_PA26, 0);
+	/* ERXCK */
+	at91_pio_use_periph_b(AT91SAM9260_PIOA_BASE, AT91C_PIO_PA27, 0);
+	/* ECRS */
+	at91_pio_use_periph_b(AT91SAM9260_PIOA_BASE, AT91C_PIO_PA28, 0);
+	/* ECOL */
+	at91_pio_use_periph_b(AT91SAM9260_PIOA_BASE, AT91C_PIO_PA29, 0);
+
=20
 	/*
-	 * MMC
+	 * MMC, wired to socket B.
 	 */
-	/* MCDA0 */
-	at91_pio_use_periph_a(AT91SAM9260_PIOA_BASE, AT91C_PIO_PA6, 1);
-	/* MCCDA */
-	at91_pio_use_periph_a(AT91SAM9260_PIOA_BASE, AT91C_PIO_PA7, 1);
+	/* MCDB0 */
+	at91_pio_use_periph_b(AT91SAM9260_PIOA_BASE, AT91C_PIO_PA0, 1);
+	/* MCCDB */
+	at91_pio_use_periph_b(AT91SAM9260_PIOA_BASE, AT91C_PIO_PA1, 1);
+	/* MCDB3 */
+	at91_pio_use_periph_b(AT91SAM9260_PIOA_BASE, AT91C_PIO_PA3, 1);
+	/* MCDB2 */
+	at91_pio_use_periph_b(AT91SAM9260_PIOA_BASE, AT91C_PIO_PA4, 1);
+	/* MCDB1 */
+	at91_pio_use_periph_b(AT91SAM9260_PIOA_BASE, AT91C_PIO_PA5, 1);
 	/* MCCK */
 	at91_pio_use_periph_a(AT91SAM9260_PIOA_BASE, AT91C_PIO_PA8, 1);
-	/* MCDA1 */
-	at91_pio_use_periph_a(AT91SAM9260_PIOA_BASE, AT91C_PIO_PA9, 1);
-	/* MCDA2 */
-	at91_pio_use_periph_a(AT91SAM9260_PIOA_BASE, AT91C_PIO_PA10, 1);
-	/* MCDA3 */
-	at91_pio_use_periph_a(AT91SAM9260_PIOA_BASE, AT91C_PIO_PA11, 1);
=20
 	/*
-	 * SPI0
+	 * SPI0 and MMC are wired together, since we don't support sharing
+	 * don't support the dataflash.  But if you did, you'd have to
+	 * use CS0 and CS1.
 	 */
-	/* MISO */
-	at91_pio_use_periph_a(AT91SAM9260_PIOA_BASE, AT91C_PIO_PA0, 0);
-	/* MOSI */
-	at91_pio_use_periph_a(AT91SAM9260_PIOA_BASE, AT91C_PIO_PA1, 0);
-	/* SPCK */
-	at91_pio_use_periph_a(AT91SAM9260_PIOA_BASE, AT91C_PIO_PA2, 0);
-	/* NPCS0 */
-	at91_pio_use_periph_a(AT91SAM9260_PIOA_BASE, AT91C_PIO_PA3, 0);
=20
 	/*
-	 * TWI
+	 * SPI1 is wired to a audio CODEC that we don't support, so
+	 * give it a pass.
+	 */
+
+	/*
+	 * TWI.  Only one child on the iic bus, which we take care of
+	 * via hints.
 	 */
 	/* TWD */
 	at91_pio_use_periph_a(AT91SAM9260_PIOA_BASE, AT91C_PIO_PA23, 1);
@@ -132,16 +150,18 @@
 	at91_pio_use_periph_a(AT91SAM9260_PIOB_BASE, AT91C_PIO_PB27, 0);
=20
 	/*
-	 * USART2
+	 * USART1
 	 */
-	/* RTS2 */
-	at91_pio_use_periph_a(AT91SAM9260_PIOA_BASE, AT91C_PIO_PA4, 1);
-	/* CTS2 */
-	at91_pio_use_periph_a(AT91SAM9260_PIOA_BASE, AT91C_PIO_PA5, 0);
-	/* TXD2 */
-	at91_pio_use_periph_a(AT91SAM9260_PIOB_BASE, AT91C_PIO_PB8, 1);
-	/* RXD2 */
-	at91_pio_use_periph_a(AT91SAM9260_PIOB_BASE, AT91C_PIO_PB9, 0);
+	/* RTS1 */
+	at91_pio_use_periph_a(AT91SAM9260_PIOB_BASE, AT91C_PIO_PB28, 1);
+	/* CTS1 */
+	at91_pio_use_periph_a(AT91SAM9260_PIOB_BASE, AT91C_PIO_PB29, 0);
+	/* TXD1 */
+	at91_pio_use_periph_a(AT91SAM9260_PIOB_BASE, AT91C_PIO_PB6, 1);
+	/* RXD1 */
+	at91_pio_use_periph_a(AT91SAM9260_PIOB_BASE, AT91C_PIO_PB7, 0);
+
+	/* USART2 - USART5 aren't wired up, except via PIO pins, ignore them. */
=20
 	return (at91_ramsize());
 }
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/arm/at91/board_sn9g45.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/head/sys/arm/at91/board_sn9g45.c	Fri Aug 10 14:19:25 2012 +0300
@@ -0,0 +1,55 @@
+/*-
+ * Copyright (c) 2009 Greg Ansley.  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 PURP=
OSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENT=
IAL
+ * 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, STR=
ICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY W=
AY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+/*
+ * DesignA Electronics Snapper9g45
+ * http://www.designa-electronics.com/
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD: head/sys/arm/at91/board_sn9g45.c 238846 2012-07-27 16:=
38:02Z imp $");
+#include <sys/param.h>
+#include <sys/systm.h>
+
+#include <machine/board.h>
+#include <arm/at91/at91board.h>
+#include <arm/at91/at91reg.h>
+#include <arm/at91/at91var.h>
+#include <arm/at91/at91sam9g45reg.h>
+#include <arm/at91/at91_piovar.h>
+#include <arm/at91/at91_pio_sam9g45.h>
+
+BOARD_INIT long
+board_init(void)
+{
+
+	/* PIOB's A periph: Turn the debug USART's TX/RX pins */
+	at91_pio_use_periph_a(AT91SAM9G45_PIOB_BASE, AT91C_PB12_DRXD, 0);
+	at91_pio_use_periph_a(AT91SAM9G45_PIOB_BASE, AT91C_PB13_DTXD, 1);
+
+	return (at91_ramsize());
+}
+
+ARM_BOARD(SNAPPER9G45, "DesignA Electronics Snapper9G45");
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/arm/at91/files.at91
--- a/head/sys/arm/at91/files.at91	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/arm/at91/files.at91	Fri Aug 10 14:19:25 2012 +0300
@@ -1,4 +1,4 @@
-# $FreeBSD: head/sys/arm/at91/files.at91 238443 2012-07-14 06:13:23Z imp $
+# $FreeBSD: head/sys/arm/at91/files.at91 238922 2012-07-30 21:30:43Z imp $
 arm/arm/cpufunc_asm_arm9.S	standard
 arm/arm/irq_dispatch.S		standard
 arm/at91/at91_machdep.c		standard
@@ -32,7 +32,8 @@
 arm/at91/at91rm9200_devices.c	optional	at91rm9200
 arm/at91/at91sam9260.c		optional	at91sam9260
 arm/at91/at91sam9g20.c		optional	at91sam9g20
-arm/at91/at91sam9x25.c		optional	at91sam9x25
+arm/at91/at91sam9g45.c		optional	at91sam9g45
+arm/at91/at91sam9x5.c		optional	at91sam9x5
 #
 # All the boards we support
 #
@@ -45,4 +46,12 @@
 arm/at91/board_sam9260ek.c	optional	at91_board_sam9260ek
 arm/at91/board_sam9g20ek.c	optional	at91_board_sam9g20ek
 arm/at91/board_sam9x25ek.c	optional	at91_board_sam9x25ek
+arm/at91/board_sn9g45.c 	optional	at91_board_sn9g45
 arm/at91/board_tsc4370.c	optional	at91_board_tsc4370
+#
+# usb
+#
+dev/usb/controller/at91dci.c		optional	at91_dci
+dev/usb/controller/at91dci_atmelarm.c	optional	at91_dci
+dev/usb/controller/ohci_atmelarm.c	optional	ohci
+dev/usb/controller/ehci_atmelarm.c	optional	ehci
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/arm/at91/if_ate.c
--- a/head/sys/arm/at91/if_ate.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/arm/at91/if_ate.c	Fri Aug 10 14:19:25 2012 +0300
@@ -31,7 +31,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/arm/at91/if_ate.c 234291 2012-04-14 17:09:38Z=
 marius $");
+__FBSDID("$FreeBSD: head/sys/arm/at91/if_ate.c 238895 2012-07-30 06:00:31Z=
 imp $");
=20
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -569,8 +569,6 @@
=20
 	/*
 	 * DMA tag and map for the TX descriptors.
-	 * XXX Old EMAC (not EMACB) doesn't really need DMA'able
-	 * memory. We could just malloc it. gja XXX
 	 */
 	if (bus_dma_tag_create(bus_get_dma_tag(dev), sizeof(eth_tx_desc_t),
 	    0, BUS_SPACE_MAXADDR_32BIT, BUS_SPACE_MAXADDR, NULL, NULL,
@@ -606,12 +604,11 @@
 	if (sc->is_emacb) {
 		/* Write the descriptor queue address. */
 		WR4(sc, ETHB_TBQP, sc->tx_desc_phys);
+
+		/* EMACB: Enable transceiver input clock */
+		WR4(sc, ETHB_UIO, RD4(sc, ETHB_UIO) | ETHB_UIO_CLKE);
 	}
=20
-	/* EMACB: Enable transceiver input clock */
-	if (sc->is_emacb)
-		WR4(sc, ETHB_UIO, RD4(sc, ETHB_UIO) | ETHB_UIO_CLKE);
-
 	return (0);
=20
 errout:
@@ -676,7 +673,7 @@
 	}
=20
 	if (sc->is_emacb)
-	    WR4(sc, ETHB_UIO, RD4(sc, ETHB_UIO) & ~ETHB_UIO_CLKE);
+		WR4(sc, ETHB_UIO, RD4(sc, ETHB_UIO) & ~ETHB_UIO_CLKE);
 }
=20
 /*
@@ -849,12 +846,11 @@
 		return;
=20
 	if (status & ETH_ISR_RCOM) {
-
-	    bus_dmamap_sync(sc->rx_desc_tag, sc->rx_desc_map,
+		bus_dmamap_sync(sc->rx_desc_tag, sc->rx_desc_map,
 		    BUS_DMASYNC_POSTREAD);
=20
-	    rxdhead =3D &sc->rx_descs[sc->rxhead];
-	    while (rxdhead->addr & ETH_CPU_OWNER) {
+		rxdhead =3D &sc->rx_descs[sc->rxhead];
+		while (rxdhead->addr & ETH_CPU_OWNER) {
 			if (!sc->is_emacb) {
 				/*
 				 * Simulate SAM9 FIRST/LAST bits for RM9200.
@@ -933,7 +929,8 @@
=20
 						/* XXX Performance robbing copy. Could
 						 * recieve directly to mbufs if not an
-						 * RM9200. XXX  */
+						 * RM9200. And even then we could likely
+						 * copy just the protocol headers. XXX  */
 						m_append(mb, count, sc->rx_buf[sc->rxhead]);
 						remain -=3D count;
 				}
@@ -1014,6 +1011,9 @@
 		BARRIER(sc, ETH_CTL, 4, BUS_SPACE_BARRIER_WRITE);
 		WR4(sc, ETH_CTL, reg | ETH_CTL_RE);
 	}
+
+	/* XXX need to work around SAM9260 errata 43.2.4.1:
+	 * disable the mac, reset tx buffer, enable mac on TUND */
 }
=20
 /*
@@ -1269,7 +1269,7 @@
=20
 	/* Turn off transeiver input clock */
 	if (sc->is_emacb)
-	    WR4(sc, ETHB_UIO, RD4(sc, ETHB_UIO) & ~ETHB_UIO_CLKE);
+		WR4(sc, ETHB_UIO, RD4(sc, ETHB_UIO) & ~ETHB_UIO_CLKE);
=20
 	/*
 	 * XXX we should power down the EMAC if it isn't in use, after
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/arm/at91/std.at91sam9g45
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/head/sys/arm/at91/std.at91sam9g45	Fri Aug 10 14:19:25 2012 +0300
@@ -0,0 +1,14 @@
+# $FreeBSD: head/sys/arm/at91/std.at91sam9g45 238921 2012-07-30 21:19:19Z =
imp $
+#
+# Unlike other Atmel SoCs, which have their SDRAM at CS1, the
+# at91sam9g45 family has it on CS6, so PHYSADDR must be adjusted
+# accordingly.  The at91sam9g45, at91sam9g46, at91sam9m10 and at91sam9m11
+# SoCs are members of this family.
+
+files		"../at91/files.at91"
+cpu		CPU_ARM9
+makeoptions	CONF_CFLAGS=3D-mcpu=3Darm9
+options 	PHYSADDR=3D0x70000000
+
+# bring in the sam specific timers and such
+device		at91sam9
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/arm/at91/std.atmel
--- a/head/sys/arm/at91/std.atmel	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/arm/at91/std.atmel	Fri Aug 10 14:19:25 2012 +0300
@@ -1,4 +1,4 @@
-# $FreeBSD: head/sys/arm/at91/std.atmel 237883 2012-07-01 06:56:41Z imp $
+# $FreeBSD: head/sys/arm/at91/std.atmel 238922 2012-07-30 21:30:43Z imp $
=20
 files		"../at91/files.at91"
 cpu		CPU_ARM9
@@ -9,7 +9,8 @@
 device		at91rm9200
 device		at91sam9260
 device		at91sam9g20
-device		at91sam9x25
+device		at91sam9g45
+device		at91sam9x5
=20
 # bring in the sam specific timers and such
 device		at91sam9
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/arm/at91/std.sam9x25ek
--- a/head/sys/arm/at91/std.sam9x25ek	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/arm/at91/std.sam9x25ek	Fri Aug 10 14:19:25 2012 +0300
@@ -1,4 +1,4 @@
-#$FreeBSD: head/sys/arm/at91/std.sam9x25ek 237881 2012-07-01 06:34:17Z imp=
 $
+#$FreeBSD: head/sys/arm/at91/std.sam9x25ek 238922 2012-07-30 21:30:43Z imp=
 $
 include "../at91/std.at91sam9"
=20
 options		STARTUP_PAGETABLE_ADDR=3D0x20800000
@@ -8,4 +8,4 @@
 options		KERNVIRTADDR=3D0xc0000000
=20
 device		at91_board_sam9x25ek
-device		at91sam9x25
+device		at91sam9x5
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/arm/at91/std.sn9g45
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/head/sys/arm/at91/std.sn9g45	Fri Aug 10 14:19:25 2012 +0300
@@ -0,0 +1,12 @@
+#$FreeBSD: head/sys/arm/at91/std.sn9g45 238789 2012-07-26 08:05:28Z andrew=
 $
+include "../at91/std.at91sam9g45"
+
+options		STARTUP_PAGETABLE_ADDR=3D0x70800000
+makeoptions	KERNPHYSADDR=3D0x70008000
+options		KERNPHYSADDR=3D0x70008000=09
+makeoptions	KERNVIRTADDR=3D0xc0008000
+options		KERNVIRTADDR=3D0xc0008000
+
+device		at91sam9g45
+device		at91_board_sn9g45
+
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/arm/at91/uart_bus_at91usart.c
--- a/head/sys/arm/at91/uart_bus_at91usart.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/arm/at91/uart_bus_at91usart.c	Fri Aug 10 14:19:25 2012 +0300
@@ -26,7 +26,7 @@
 #include "opt_uart.h"
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/arm/at91/uart_bus_at91usart.c 238325 2012-07-=
10 01:13:00Z imp $");
+__FBSDID("$FreeBSD: head/sys/arm/at91/uart_bus_at91usart.c 238787 2012-07-=
26 05:46:56Z imp $");
=20
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -95,6 +95,12 @@
 	case 4:
 		device_set_desc(dev, "USART3");
 		break;
+	case 5:
+		device_set_desc(dev, "USART4");
+		break;
+	case 6:
+		device_set_desc(dev, "USART5");
+		break;
 	}
 	sc->sc_class =3D &at91_usart_class;
 	if (sc->sc_class->uc_rclk =3D=3D 0)
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/arm/conf/ATMEL
--- a/head/sys/arm/conf/ATMEL	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/arm/conf/ATMEL	Fri Aug 10 14:19:25 2012 +0300
@@ -2,13 +2,14 @@
 # configuration.  This kernel will not (presently) boot.  Do not copy
 # it to create your own custom config file.
 #
-# $FreeBSD: head/sys/arm/conf/ATMEL 238443 2012-07-14 06:13:23Z imp $
+# $FreeBSD: head/sys/arm/conf/ATMEL 238956 2012-07-31 19:39:21Z imp $
=20
 ident		ATMEL
=20
 include "../at91/std.atmel"
=20
-# Arbitrary values for testing purposes.
+# Typical values for most SoCs and board configurations.  Will not work for
+# at91sam9g45 or on some boards with non u-boot boot loaders.
 options 	STARTUP_PAGETABLE_ADDR=3D0x20800000
 makeoptions	KERNPHYSADDR=3D0x20000000
 makeoptions	KERNVIRTADDR=3D0xc0000000
@@ -28,6 +29,7 @@
 device		at91_board_sam9260ek
 device		at91_board_sam9g20ek
 device		at91_board_sam9x25ek
+device		at91_board_sn9g45
 device		at91_board_tsc4370
=20
 #makeoptions	DEBUG=3D-g		# Build kernel with gdb(1) debug symbols
@@ -156,10 +158,16 @@
=20
 # USB support
 options 	USB_DEBUG	# enable debug msgs
-device		ohci		# OHCI PCI->USB interface
+device		ohci		# OHCI USB interface
 device		usb		# USB Bus (required)
 device		umass		# Disks/Mass storage - Requires scbus and da
=20
+# USB device (gadget) support
+device		at91_dci	# Atmel's usb device
+device		usfs		# emulate a flash
+device		cdce		# emulate an ethernet
+device		usb_template	# Control of the gadget
+
 # watchdog
 device		at91_wdt	# Atmel AT91 Watchdog Timer
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/arm/conf/ETHERNUT5
--- a/head/sys/arm/conf/ETHERNUT5	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/arm/conf/ETHERNUT5	Fri Aug 10 14:19:25 2012 +0300
@@ -15,7 +15,7 @@
 # If you are in doubt as to the purpose or necessity of a line, check first
 # in NOTES.
 #
-# $FreeBSD: head/sys/arm/conf/ETHERNUT5 236497 2012-06-03 01:07:55Z marius=
 $
+# $FreeBSD: head/sys/arm/conf/ETHERNUT5 238847 2012-07-27 17:07:54Z imp $
=20
 ident		ETHERNUT5
=20
@@ -103,7 +103,7 @@
=20
 # Ethernet
 device		mii		# Minimal MII support
-device		ate		# Atmel AT91 Ethernet friver
+device		ate		# Atmel AT91 Ethernet driver
=20
 # I2C
 device		at91_twi	# Atmel AT91 Two-wire Interface
@@ -150,7 +150,7 @@
=20
 # USB support
 #options 	USB_DEBUG	# enable debug msgs
-device		ohci		# OHCI PCI->USB interface
+device		ohci		# OHCI USB interface
 device		usb		# USB Bus (required)
 #device		umass		# Disks/Mass storage - Requires scbus and da
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/arm/conf/ETHERNUT5.hints
--- a/head/sys/arm/conf/ETHERNUT5.hints	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/arm/conf/ETHERNUT5.hints	Fri Aug 10 14:19:25 2012 +0300
@@ -1,8 +1,8 @@
-# $FreeBSD: head/sys/arm/conf/ETHERNUT5.hints 236191 2012-05-28 17:58:10Z =
marius $
+# $FreeBSD: head/sys/arm/conf/ETHERNUT5.hints 238786 2012-07-26 05:37:36Z =
imp $
=20
 # Atmel AT45DB21D
 hint.at45d.0.at=3D"spibus0"
-hint.at45d.0.addr=3D0x00
+hint.at45d.0.cs=3D0
 # user 132 kbytes
 hint.map.0.at=3D"flash/spi0"
 hint.map.0.start=3D0x00000000
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/arm/conf/HL201
--- a/head/sys/arm/conf/HL201	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/arm/conf/HL201	Fri Aug 10 14:19:25 2012 +0300
@@ -15,7 +15,7 @@
 # If you are in doubt as to the purpose or necessity of a line, check first
 # in NOTES.
 #
-# $FreeBSD: head/sys/arm/conf/HL201 236988 2012-06-13 04:40:29Z imp $
+# $FreeBSD: head/sys/arm/conf/HL201 238957 2012-07-31 19:41:12Z imp $
=20
 ident		HL201
=20
@@ -70,7 +70,7 @@
 device		loop
 device		ether
 device		uart
-device		macb
+device		ate
 device		mii
 #device		lxtphy
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/arm/conf/KB920X
--- a/head/sys/arm/conf/KB920X	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/arm/conf/KB920X	Fri Aug 10 14:19:25 2012 +0300
@@ -16,7 +16,7 @@
 # If you are in doubt as to the purpose or necessity of a line, check first
 # in NOTES.
 #
-# $FreeBSD: head/sys/arm/conf/KB920X 238335 2012-07-10 05:39:06Z imp $
+# $FreeBSD: head/sys/arm/conf/KB920X 238881 2012-07-29 04:28:29Z imp $
=20
 ident		KB920X
=20
@@ -138,6 +138,12 @@
 device		wlan_tkip	# 802.11 TKIP support
 device		wlan_amrr	# AMRR transmit rate control algorithm
=20
+# USB device (gadget) support
+device		at91_dci	# Atmel's usb device
+device		usfs		# emulate a flash
+device		cdce		# emulate an ethernet
+device		usb_template	# Control of the gadget
+
 options		IEEE80211_SUPPORT_MESH
=20
 options		AH_SUPPORT_AR5416
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/arm/conf/QILA9G20
--- a/head/sys/arm/conf/QILA9G20	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/arm/conf/QILA9G20	Fri Aug 10 14:19:25 2012 +0300
@@ -16,7 +16,7 @@
 # If you are in doubt as to the purpose or necessity of a line, check first
 # in NOTES.
 #
-# $FreeBSD: head/sys/arm/conf/QILA9G20 236988 2012-06-13 04:40:29Z imp $
+# $FreeBSD: head/sys/arm/conf/QILA9G20 238957 2012-07-31 19:41:12Z imp $
=20
 ident		QILA9G20
=20
@@ -86,7 +86,6 @@
=20
 # Ethernet
 device		ate		        # Ethernet Driver=09
-#device		macb			# Alternate Ethernet driver
 device		mii
 option 		AT91_ATE_USE_RMII
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/arm/conf/SAM9260EK
--- a/head/sys/arm/conf/SAM9260EK	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/arm/conf/SAM9260EK	Fri Aug 10 14:19:25 2012 +0300
@@ -15,14 +15,14 @@
 # If you are in doubt as to the purpose or necessity of a line, check first
 # in NOTES.
 #
-# $FreeBSD: head/sys/arm/conf/SAM9260EK 238443 2012-07-14 06:13:23Z imp $
+# $FreeBSD: head/sys/arm/conf/SAM9260EK 238823 2012-07-27 05:37:01Z imp $
=20
-ident		ETHERNUT5
+ident		SAM9260EK
=20
-include "../at91/std.ethernut5"
+include "../at91/std.sam9260ek"
=20
 # To statically compile in device wiring instead of /boot/device.hints
-hints		"ETHERNUT5.hints"
+hints		"SAM9260EK.hints"
=20
 #makeoptions	DEBUG=3D-g		# Build kernel with gdb(1) debug symbols
=20
@@ -66,14 +66,17 @@
 #options 	INCLUDE_CONFIG_FILE	# Include this file in kernel
=20
 # required for netbooting
-options 	BOOTP
-options 	BOOTP_COMPAT
-options 	BOOTP_NFSROOT
-options 	BOOTP_NFSV3
-options 	BOOTP_WIRED_TO=3Date0
+#options 	BOOTP
+#options 	BOOTP_COMPAT
+#options 	BOOTP_NFSROOT
+#options 	BOOTP_NFSV3
+#options 	BOOTP_WIRED_TO=3Date0
=20
 # alternatively, boot from a MMC/SD memory card
-#options 	ROOTDEVNAME=3D\"ufs:/dev/mmcsd0a\"
+#options 	ROOTDEVNAME=3D\"ufs:/dev/mmcsd0s1a\"
+
+# Alternatively, boot from a USB card.
+options 	ROOTDEVNAME=3D\"ufs:/dev/da0s1a\"
=20
 # kernel/memory size reduction
 options 	MUTEX_NOINLINE
@@ -103,25 +106,30 @@
=20
 # Ethernet
 device		mii		# Minimal MII support
-device		ate		# Atmel AT91 Ethernet friver
+device		ate		# Atmel AT91 Ethernet driver
=20
 # I2C
 device		at91_twi	# Atmel AT91 Two-wire Interface
 device		iic		# I2C generic I/O device driver
 device		iicbus		# I2C bus system
-device		pcf8563		# NXP PCF8563 clock/calendar
+device		icee		# I2C eeprom
=20
 # MMC/SD
+# See comment for DataFlash below
 device		at91_mci	# Atmel AT91 Multimedia Card Interface
-options 	AT91_MCI_HAS_4WIRE
+options 	AT91_MCI_HAS_4WIRE	# 4 wires
+options 	AT91_MCI_SLOT_B		# Wired to slot B
 device		mmc		# MMC/SD bus
 device		mmcsd		# MMC/SD memory card
=20
 # DataFlash
-device		at91_spi	# Atmel AT91 Serial Peripheral Interface
-device		spibus		# SPI bus
-device		at45d		# Atmel AT45D
-device		geom_map	# GEOM partition mapping
+# The DataFlash and MMC card are wired together, so we must pick one or the
+# other.  This is due to pin mux, and also due to the design of the
+# SAM9260EK board.  SLOT A wouldn't have this issue.
+#device		at91_spi	# Atmel AT91 Serial Peripheral Interface
+#device		spibus		# SPI bus
+#device		at45d		# Atmel AT45D
+#device		geom_map	# GEOM partition mapping
=20
 # Pseudo devices.
 device		loop		# Network loopback
@@ -135,13 +143,13 @@
 #device		firmware	# firmware assist module
=20
 # SCSI peripherals
-#device		scbus		# SCSI bus (required for ATA/SCSI)
+device		scbus		# SCSI bus (required for ATA/SCSI)
 #device		ch		# SCSI media changers
-#device		da		# Direct Access (disks)
+device		da		# Direct Access (disks)
 #device		sa		# Sequential Access (tape etc)
-#device		cd		# CD
-#device		pass		# Passthrough device (direct ATA/SCSI access)
-#device		ses		# Enclosure Services (SES and SAF-TE)
+device		cd		# CD/DVD
+device		pass		# Passthrough device (direct ATA/SCSI access)
+device		ses		# Enclosure Services (SES and SAF-TE)
 #device		ctl		# CAM Target Layer
=20
 # Serial (COM) ports
@@ -150,9 +158,9 @@
=20
 # USB support
 #options 	USB_DEBUG	# enable debug msgs
-device		ohci		# OHCI PCI->USB interface
+device		ohci		# OHCI USB interface
 device		usb		# USB Bus (required)
-#device		umass		# Disks/Mass storage - Requires scbus and da
+device		umass		# Disks/Mass storage - Requires scbus and da
=20
 # watchdog
 device		at91_wdt	# Atmel AT91 Watchdog Timer
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/arm/conf/SAM9260EK.hints
--- a/head/sys/arm/conf/SAM9260EK.hints	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/arm/conf/SAM9260EK.hints	Fri Aug 10 14:19:25 2012 +0300
@@ -1,51 +1,48 @@
-# $FreeBSD: head/sys/arm/conf/SAM9260EK.hints 238443 2012-07-14 06:13:23Z =
imp $
+# $FreeBSD: head/sys/arm/conf/SAM9260EK.hints 238811 2012-07-26 16:34:21Z =
imp $
=20
 # Atmel AT45DB21D
 hint.at45d.0.at=3D"spibus0"
-hint.at45d.0.addr=3D0x00
-# user 132 kbytes
+hint.at45d.0.cs=3D1
+# Area 0:	00000000 to 000041FF (RO) Bootstrap
+# Area 1:	00004200 to 000083FF      Environment
+# Area 2:	00008400 to 00041FFF (RO) U-Boot
+# Area 3:	00042000 to 00251FFF      Kernel
+# Area 4:	00252000 to 0083FFFF      FS
+# bootstrap
 hint.map.0.at=3D"flash/spi0"
 hint.map.0.start=3D0x00000000
-hint.map.0.end=3D0x00020fff
-hint.map.0.name=3D"user"
+hint.map.0.end=3D0x000041ff
+hint.map.0.name=3D"bootstrap"
 hint.map.0.readonly=3D1
-# setup 132 kbytes
+# uboot environment
 hint.map.1.at=3D"flash/spi0"
-hint.map.1.start=3D0x00021000
-hint.map.1.end=3D0x00041fff
-hint.map.1.name=3D"setup"
-hint.map.1.readonly=3D1
-# uboot 528 kbytes
+hint.map.1.start=3D0x00004200
+hint.map.1.end=3D0x00083ff
+hint.map.1.name=3D"uboot-env"
+#hint.map.1.readonly=3D1
+# uboot
 hint.map.2.at=3D"flash/spi0"
-hint.map.2.start=3D0x00042000
-hint.map.2.end=3D0x000c5fff
+hint.map.2.start=3D0x00008400
+hint.map.2.end=3D0x00041fff
 hint.map.2.name=3D"uboot"
 hint.map.2.readonly=3D1
-# kernel 2640 kbytes
+# kernel
 hint.map.3.at=3D"flash/spi0"
-hint.map.3.start=3D0x000c6000
-hint.map.3.end=3D0x00359fff
-hint.map.3.name=3D"kernel"
+hint.map.3.start=3D0x00042000
+hint.map.3.end=3D0x00251fff
+hint.map.3.name=3D"fs"
 #hint.map.3.readonly=3D1
-# nutos 528 kbytes
+# fs
 hint.map.4.at=3D"flash/spi0"
-hint.map.4.start=3D0x0035a000
-hint.map.4.end=3D0x003ddfff
-hint.map.4.name=3D"nutos"
-hint.map.4.readonly=3D1
-# env 132 kbytes
-hint.map.5.at=3D"flash/spi0"
-hint.map.5.start=3D0x003de000
-hint.map.5.end=3D0x003fefff
-hint.map.5.name=3D"env"
-hint.map.5.readonly=3D1
-# env 132 kbytes
-hint.map.6.at=3D"flash/spi0"
-hint.map.6.start=3D0x003ff000
-hint.map.6.end=3D0x0041ffff
-hint.map.6.name=3D"nutoscfg"
-hint.map.6.readonly=3D1
+hint.map.4.start=3D0x00252000
+hint.map.4.end=3D0x0083ffff
+hint.map.4.name=3D"fs"
+#hint.map.4.readonly=3D1
=20
-# NXP PCF8563 clock/calendar
-hint.pcf8563_rtc.0.at=3D"iicbus0"
-hint.pcf8563_rtc.0.addr=3D0xa2
+# EEPROM at24c512 - 512kbit 65,536x8 memory
+hint.icee.0.at=3D"iicbus0"
+hint.icee.0.addr=3D0xa0
+hint.icee.0.type=3D16
+hint.icee.0.size=3D65536
+hint.icee.0.rd_sz=3D128
+hint.icee.0.wr_sz=3D128
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/arm/conf/SAM9G20EK
--- a/head/sys/arm/conf/SAM9G20EK	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/arm/conf/SAM9G20EK	Fri Aug 10 14:19:25 2012 +0300
@@ -15,7 +15,7 @@
 # If you are in doubt as to the purpose or necessity of a line, check first
 # in NOTES.
 #
-# $FreeBSD: head/sys/arm/conf/SAM9G20EK 236988 2012-06-13 04:40:29Z imp $
+# $FreeBSD: head/sys/arm/conf/SAM9G20EK 238957 2012-07-31 19:41:12Z imp $
=20
 ident		SAM9G20EK
=20
@@ -85,7 +85,6 @@
=20
 # Ethernet
 device		ate		        # Ethernet Driver=09
-#device		macb			# Alternate Ethernet driver
 device		mii
 option 		AT91_ATE_USE_RMII
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/arm/conf/SAM9X25EK
--- a/head/sys/arm/conf/SAM9X25EK	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/arm/conf/SAM9X25EK	Fri Aug 10 14:19:25 2012 +0300
@@ -15,7 +15,7 @@
 # If you are in doubt as to the purpose or necessity of a line, check firs=
t=20
 # in NOTES.
 #
-# $FreeBSD: head/sys/arm/conf/SAM9X25EK 237742 2012-06-29 04:18:52Z imp $
+# $FreeBSD: head/sys/arm/conf/SAM9X25EK 238932 2012-07-31 04:09:27Z imp $
=20
 # NOUNIVERSE:	disable building in make universe
 ident		SAM9X25EK
@@ -86,8 +86,7 @@
 device		uart			# Serial Ports
=20
 # Ethernet
-#device		ate		        # Ethernet Driver=09
-device		macb			# Alternate Ethernet driver
+device		ate		        # Ethernet Driver=09
 device		mii
 option 		AT91_ATE_USE_RMII
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/arm/conf/SN9G45
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/head/sys/arm/conf/SN9G45	Fri Aug 10 14:19:25 2012 +0300
@@ -0,0 +1,129 @@
+# Kernel configuration for DesignA Electronics Snapper9G45 System on Module
+#
+# 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/kernelconfi=
g-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: head/sys/arm/conf/SN9G45 238957 2012-07-31 19:41:12Z imp $
+
+ident		SN9G45
+
+include "../at91/std.sn9g45"
+
+#To statically compile in device wiring instead of /boot/device.hints
+#hints		"SN9G45.hints"
+makeoptions	MODULES_OVERRIDE=3D""
+
+makeoptions	DEBUG=3D-g		#Build kernel with gdb(1) debug symbols
+options 	DDB
+options 	KDB
+
+options 	SCHED_4BSD		#4BSD scheduler
+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 	MD_ROOT			#MD is a potential root device
+#options 	MD_ROOT_SIZE=3D4096	# 3MB ram disk
+options 	NFSCL			#New Network Filesystem Client
+#options 	NFSD			#New Network Filesystem Server
+#options 	NFSLOCKD		#Network Lock Manager
+#options 	NFS_ROOT		#NFS usable as /, requires NFSCL
+#options 	BOOTP_NFSROOT
+#options 	BOOTP
+#options 	BOOTP_NFSV3
+#options 	BOOTP_WIRED_TO=3Date0
+#options 	BOOTP_COMPAT
+
+options 	ROOTDEVNAME=3D\"ufs:/dev/da0s1\"
+
+options		ALT_BREAK_TO_DEBUGGER
+
+#options 	MSDOSFS			#MSDOS Filesystem
+#options 	CD9660			#ISO 9660 Filesystem
+#options 	PROCFS			#Process filesystem (requires PSEUDOFS)
+#options 	PSEUDOFS		#Pseudo-filesystem framework
+options 	SCSI_DELAY=3D1000		#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 	SYSCTL_OMIT_DESCR
+options 	MUTEX_NOINLINE
+options 	RWLOCK_NOINLINE
+options 	NO_FFS_SNAPSHOT
+options 	NO_SWAPPING
+
+# Debugging for use in -current
+#options 	INVARIANTS		#Enable calls of extra sanity checking
+#options 	INVARIANT_SUPPORT	#Extra sanity checks of internal structures, r=
equired by INVARIANTS
+#options 	WITNESS			#Enable checks to detect deadlocks and cycles
+#options 	WITNESS_SKIPSPIN	#Don't run witness on spinlocks for speed
+#options 	DIAGNOSTIC
+
+device		random
+device		loop
+device		bpf
+device		ether
+device		md
+
+device		uart			# Serial Ports
+
+# Ethernet
+device		ate		        # Ethernet Driver=09
+device		mii
+option 		AT91_ATE_USE_RMII
+
+device		at91_wdt		# WDT: Watchdog timer
+
+# SCSI peripherals
+device		scbus		# SCSI bus (required for SCSI)
+device		da		# Direct Access (disks)
+device		cd		# CD
+device		pass		# Passthrough device (direct SCSI access)
+
+# USB support
+device		ohci		# OHCI localbus->USB interface
+device		usb		# USB Bus (required)
+device		umass		# Disks/Mass storage - Requires scbus and da
+device		uhid		# "Human Interface Devices"
+#device		ulpt		# Printer
+#device		udbp		# USB Double Bulk Pipe devices
+
+# USB Ethernet, requires miibus
+device		miibus
+#device		aue		# ADMtek USB Ethernet
+#device		axe		# ASIX Electronics USB Ethernet
+#device		cdce		# Generic USB over Ethernet
+#device		cue		# CATC USB Ethernet
+#device		kue		# Kawasaki LSI USB Ethernet
+#device		rue		# RealTek RTL8150 USB Ethernet
+device		udav		# Davicom DM9601E USB
+
+# USB Wireless
+#device		rum		# Ralink Technology RT2501USB wireless NICs
+#device		uath		# Atheros AR5523 wireless NICs
+#device		ural		# Ralink Technology RT2500USB wireless NICs
+#device		zyd		# ZyDAS zd1211/zd1211b wireless NICs
+
+# Wireless NIC cards
+#device		wlan		# 802.11 support
+#device		wlan_wep	# 802.11 WEP support
+#device		wlan_ccmp	# 802.11 CCMP support
+#device		wlan_tkip	# 802.11 TKIP support
+#device		wlan_amrr	# AMRR transmit rate control algorithm
+
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/arm/mv/common.c
--- a/head/sys/arm/mv/common.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/arm/mv/common.c	Fri Aug 10 14:19:25 2012 +0300
@@ -30,7 +30,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/arm/mv/common.c 233013 2012-03-15 21:48:27Z r=
aj $");
+__FBSDID("$FreeBSD: head/sys/arm/mv/common.c 238873 2012-07-28 21:56:24Z h=
rs $");
=20
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -251,7 +251,9 @@
 	uint32_t ef =3D 0;
=20
 	soc_id(&dev, &rev);
-	if (dev =3D=3D MV_DEV_88F6281 || dev =3D=3D MV_DEV_MV78100_Z0 ||
+	if (dev =3D=3D MV_DEV_88F6281 ||
+	    dev =3D=3D MV_DEV_88F6282 ||
+	    dev =3D=3D MV_DEV_MV78100_Z0 ||
 	    dev =3D=3D MV_DEV_MV78100)
 		__asm __volatile("mrc p15, 1, %0, c15, c1, 0" : "=3Dr" (ef));
 	else if (dev =3D=3D MV_DEV_88F5182 || dev =3D=3D MV_DEV_88F5281)
@@ -351,6 +353,13 @@
 		else if (r =3D=3D 3)
 			rev =3D "A1";
 		break;
+	case MV_DEV_88F6282:
+		dev =3D "Marvell 88F6282";
+		if (r =3D=3D 0)
+			rev =3D "A0";
+		else if (r =3D=3D 1)
+			rev =3D "A1";
+		break;
 	case MV_DEV_MV78100_Z0:
 		dev =3D "Marvell MV78100 Z0";
 		break;
@@ -536,6 +545,7 @@
 	if ((dev =3D=3D MV_DEV_88F5182 && i < 2) ||
 	    (dev =3D=3D MV_DEV_88F5281 && i < 4) ||
 	    (dev =3D=3D MV_DEV_88F6281 && i < 4) ||
+	    (dev =3D=3D MV_DEV_88F6282 && i < 4) ||
 	    (dev =3D=3D MV_DEV_MV78100 && i < 8) ||
 	    (dev =3D=3D MV_DEV_MV78100_Z0 && i < 8))
 		return (1);
@@ -1320,7 +1330,8 @@
 	uint32_t dev, rev;
=20
 	soc_id(&dev, &rev);
-	if (dev =3D=3D MV_DEV_88F6281)
+	if (dev =3D=3D MV_DEV_88F6281 ||
+	    dev =3D=3D MV_DEV_88F6282)
 		return (2);
 	else if ((dev =3D=3D MV_DEV_MV78100) || (dev =3D=3D MV_DEV_MV78100_Z0))
 		return (1);
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/arm/mv/gpio.c
--- a/head/sys/arm/mv/gpio.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/arm/mv/gpio.c	Fri Aug 10 14:19:25 2012 +0300
@@ -29,7 +29,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/arm/mv/gpio.c 224051 2011-07-15 02:29:10Z mar=
cel $");
+__FBSDID("$FreeBSD: head/sys/arm/mv/gpio.c 238873 2012-07-28 21:56:24Z hrs=
 $");
=20
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -155,7 +155,8 @@
 		sc->pin_num =3D 32;
 		sc->irq_num =3D 4;
=20
-	} else if (dev_id =3D=3D MV_DEV_88F6281) {
+	} else if (dev_id =3D=3D MV_DEV_88F6281 ||
+	    dev_id =3D=3D MV_DEV_88F6282) {
 		sc->pin_num =3D 50;
 		sc->irq_num =3D 7;
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/arm/mv/ic.c
--- a/head/sys/arm/mv/ic.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/arm/mv/ic.c	Fri Aug 10 14:19:25 2012 +0300
@@ -29,7 +29,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
+__FBSDID("$FreeBSD: head/sys/arm/mv/ic.c 238873 2012-07-28 21:56:24Z hrs $=
");
=20
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -105,7 +105,9 @@
 	sc->ic_high_regs =3D 0;
 	sc->ic_error_regs =3D 0;
=20
-	if (dev_id =3D=3D MV_DEV_88F6281 || dev_id =3D=3D MV_DEV_MV78100 ||
+	if (dev_id =3D=3D MV_DEV_88F6281 ||
+	    dev_id =3D=3D MV_DEV_88F6282 ||
+	    dev_id =3D=3D MV_DEV_MV78100 ||
 	    dev_id =3D=3D MV_DEV_MV78100_Z0)
 		sc->ic_high_regs =3D 1;
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/arm/mv/kirkwood/kirkwood.c
--- a/head/sys/arm/mv/kirkwood/kirkwood.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/arm/mv/kirkwood/kirkwood.c	Fri Aug 10 14:19:25 2012 +0300
@@ -30,7 +30,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
+__FBSDID("$FreeBSD: head/sys/arm/mv/kirkwood/kirkwood.c 238873 2012-07-28 =
21:56:24Z hrs $");
=20
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -74,6 +74,8 @@
 	soc_id(&dev, &rev);
 	if (dev =3D=3D MV_DEV_88F6281 && (rev =3D=3D 2 || rev =3D=3D 3))
 		return (TCLK_200MHZ);
+	if (dev =3D=3D MV_DEV_88F6282)
+		return (TCLK_200MHZ);
=20
 	return (TCLK_166MHZ);
 }
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/arm/mv/mv_sata.c
--- a/head/sys/arm/mv/mv_sata.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/arm/mv/mv_sata.c	Fri Aug 10 14:19:25 2012 +0300
@@ -28,7 +28,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
+__FBSDID("$FreeBSD: head/sys/arm/mv/mv_sata.c 238873 2012-07-28 21:56:24Z =
hrs $");
=20
 #include <sys/param.h>
 #include <sys/bus.h>
@@ -197,6 +197,7 @@
 		sc->sc_edma_qlen =3D 128;
 		break;
 	case MV_DEV_88F6281:
+	case MV_DEV_88F6282:
 	case MV_DEV_MV78100:
 	case MV_DEV_MV78100_Z0:
 		sc->sc_version =3D 2;
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/arm/mv/mvreg.h
--- a/head/sys/arm/mv/mvreg.h	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/arm/mv/mvreg.h	Fri Aug 10 14:19:25 2012 +0300
@@ -28,7 +28,7 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: head/sys/arm/mv/mvreg.h 232512 2012-03-04 18:13:45Z raj $
+ * $FreeBSD: head/sys/arm/mv/mvreg.h 238873 2012-07-28 21:56:24Z hrs $
  */
=20
 #ifndef _MVREG_H_
@@ -326,6 +326,7 @@
 #define MV_DEV_88F5182		0x5182
 #define MV_DEV_88F5281		0x5281
 #define MV_DEV_88F6281		0x6281
+#define MV_DEV_88F6282		0x6282
 #define MV_DEV_MV78100_Z0	0x6381
 #define MV_DEV_MV78100		0x7810
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/boot/common/Makefile.inc
--- a/head/sys/boot/common/Makefile.inc	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/boot/common/Makefile.inc	Fri Aug 10 14:19:25 2012 +0300
@@ -1,6 +1,6 @@
-# $FreeBSD: head/sys/boot/common/Makefile.inc 223695 2011-06-30 16:08:56Z =
dfr $
+# $FreeBSD: head/sys/boot/common/Makefile.inc 239058 2012-08-05 12:15:15Z =
ae $
=20
-SRCS+=3D	boot.c commands.c console.c devopen.c disk.c interp.c=20
+SRCS+=3D	boot.c commands.c console.c devopen.c interp.c=20
 SRCS+=3D	interp_backslash.c interp_parse.c ls.c misc.c=20
 SRCS+=3D	module.c panic.c
=20
@@ -24,6 +24,18 @@
 SRCS+=3D	dev_net.c
 .endif
=20
+.if !defined(LOADER_NO_DISK_SUPPORT)
+SRCS+=3D	disk.c part.c
+CFLAGS+=3D -DLOADER_DISK_SUPPORT
+.if !defined(LOADER_NO_GPT_SUPPORT)
+SRCS+=3D	crc32.c
+CFLAGS+=3D -DLOADER_GPT_SUPPORT
+.endif
+.if !defined(LOADER_NO_MBR_SUPPORT)
+CFLAGS+=3D -DLOADER_MBR_SUPPORT
+.endif
+.endif
+
 .if defined(HAVE_BCACHE)
 SRCS+=3D  bcache.c
 .endif
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/boot/common/disk.c
--- a/head/sys/boot/common/disk.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/boot/common/disk.c	Fri Aug 10 14:19:25 2012 +0300
@@ -1,5 +1,6 @@
 /*-
  * Copyright (c) 1998 Michael Smith <msmith at freebsd.org>
+ * Copyright (c) 2012 Andrey V. Elsukov <ae at FreeBSD.org>
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -25,28 +26,13 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/boot/common/disk.c 226569 2011-10-20 15:46:54=
Z pjd $");
+__FBSDID("$FreeBSD: head/sys/boot/common/disk.c 239058 2012-08-05 12:15:15=
Z ae $");
=20
-/*
- * MBR/GPT partitioned disk device handling.
- *
- * Ideas and algorithms from:
- *
- * - NetBSD libi386/biosdisk.c
- * - FreeBSD biosboot/disk.c
- *
- */
-
+#include <sys/disk.h>
 #include <stand.h>
-
-#include <sys/diskmbr.h>
-#include <sys/disklabel.h>
-#include <sys/gpt.h>
-
 #include <stdarg.h>
-#include <uuid.h>
-
 #include <bootstrap.h>
+#include <part.h>
=20
 #include "disk.h"
=20
@@ -56,53 +42,26 @@
 # define DEBUG(fmt, args...)
 #endif
=20
-/*
- * Search for a slice with the following preferences:
- *
- * 1: Active FreeBSD slice
- * 2: Non-active FreeBSD slice
- * 3: Active Linux slice
- * 4: non-active Linux slice
- * 5: Active FAT/FAT32 slice
- * 6: non-active FAT/FAT32 slice
- */
-#define PREF_RAWDISK	0
-#define PREF_FBSD_ACT	1
-#define PREF_FBSD	2
-#define PREF_LINUX_ACT	3
-#define PREF_LINUX	4
-#define PREF_DOS_ACT	5
-#define PREF_DOS	6
-#define PREF_NONE	7
-
-#ifdef LOADER_GPT_SUPPORT
-
-struct gpt_part {
-	int		gp_index;
-	uuid_t		gp_type;
-	uint64_t	gp_start;
-	uint64_t	gp_end;
+struct open_disk {
+	struct ptable		*table;
+	off_t			mediasize;
+	u_int			sectorsize;
 };
=20
-static uuid_t efi =3D GPT_ENT_TYPE_EFI;
-static uuid_t freebsd_boot =3D GPT_ENT_TYPE_FREEBSD_BOOT;
-static uuid_t freebsd_ufs =3D GPT_ENT_TYPE_FREEBSD_UFS;
-static uuid_t freebsd_swap =3D GPT_ENT_TYPE_FREEBSD_SWAP;
-static uuid_t freebsd_zfs =3D GPT_ENT_TYPE_FREEBSD_ZFS;
-static uuid_t ms_basic_data =3D GPT_ENT_TYPE_MS_BASIC_DATA;
+struct print_args {
+	struct disk_devdesc	*dev;
+	const char		*prefix;
+	int			verbose;
+};
=20
-#endif
-
-#if defined(LOADER_GPT_SUPPORT) || defined(LOADER_MBR_SUPPORT)
-
-/* Given a size in 512 byte sectors, convert it to a human-readable number=
. */
+/* Convert size to a human-readable number. */
 static char *
-display_size(uint64_t size)
+display_size(uint64_t size, u_int sectorsize)
 {
 	static char buf[80];
 	char unit;
=20
-	size /=3D 2;
+	size =3D size * sectorsize / 1024;
 	unit =3D 'K';
 	if (size >=3D 10485760000LL) {
 		size /=3D 1073741824;
@@ -114,687 +73,230 @@
 		size /=3D 1024;
 		unit =3D 'M';
 	}
-	sprintf(buf, "%.6ld%cB", (long)size, unit);
+	sprintf(buf, "%ld%cB", (long)size, unit);
 	return (buf);
 }
=20
-#endif
+static int
+ptblread(void *d, void *buf, size_t blocks, off_t offset)
+{
+	struct disk_devdesc *dev;
+	struct open_disk *od;
=20
-#ifdef LOADER_MBR_SUPPORT
-
-static void
-disk_checkextended(struct disk_devdesc *dev,
-    struct dos_partition *slicetab, int slicenum, int *nslicesp)
-{
-	uint8_t			buf[DISK_SECSIZE];
-	struct dos_partition	*dp;
-	uint32_t		base;
-	int			rc, i, start, end;
-
-	dp =3D &slicetab[slicenum];
-	start =3D *nslicesp;
-
-	if (dp->dp_size =3D=3D 0)
-		goto done;
-	if (dp->dp_typ !=3D DOSPTYP_EXT)
-		goto done;
-	rc =3D dev->d_dev->dv_strategy(dev, F_READ, dp->dp_start, DISK_SECSIZE,
-		(char *) buf, NULL);
-	if (rc)
-		goto done;
-	if (buf[0x1fe] !=3D 0x55 || buf[0x1ff] !=3D 0xaa) {
-		DEBUG("no magic in extended table");
-		goto done;
-	}
-	base =3D dp->dp_start;
-	dp =3D (struct dos_partition *) &buf[DOSPARTOFF];
-	for (i =3D 0; i < NDOSPART; i++, dp++) {
-		if (dp->dp_size =3D=3D 0)
-			continue;
-		if (*nslicesp =3D=3D NEXTDOSPART)
-			goto done;
-		dp->dp_start +=3D base;
-		bcopy(dp, &slicetab[*nslicesp], sizeof(*dp));
-		(*nslicesp)++;
-	}
-	end =3D *nslicesp;
-
-	/*
-	 * now, recursively check the slices we just added
-	 */
-	for (i =3D start; i < end; i++)
-		disk_checkextended(dev, slicetab, i, nslicesp);
-done:
-	return;
+	dev =3D (struct disk_devdesc *)d;
+	od =3D (struct open_disk *)dev->d_opendata;
+	return (dev->d_dev->dv_strategy(dev, F_READ, offset,
+	    blocks * od->sectorsize, (char *)buf, NULL));
 }
=20
-static int
-disk_readslicetab(struct disk_devdesc *dev,
-    struct dos_partition **slicetabp, int *nslicesp)
+#define	PWIDTH	35
+static void
+ptable_print(void *arg, const char *pname, const struct ptable_entry *part)
 {
-	struct dos_partition	*slicetab =3D NULL;
-	int			nslices, i;
-	int			rc;
-	uint8_t			buf[DISK_SECSIZE];
+	struct print_args *pa, bsd;
+	struct open_disk *od;
+	struct ptable *table;
+	char line[80];
=20
-	/*
-	 * Find the slice in the DOS slice table.
-	 */
-	rc =3D dev->d_dev->dv_strategy(dev, F_READ, 0, DISK_SECSIZE,
-		(char *) buf, NULL);
-	if (rc) {
-		DEBUG("error reading MBR");
-		return (rc);
+	pa =3D (struct print_args *)arg;
+	od =3D (struct open_disk *)pa->dev->d_opendata;
+	sprintf(line, "  %s%s: %s", pa->prefix, pname,
+	    parttype2str(part->type));
+	if (pa->verbose)
+		sprintf(line, "%-*s%s", PWIDTH, line,
+		    display_size(part->end - part->start + 1,
+		    od->sectorsize));
+	strcat(line, "\n");
+	pager_output(line);
+	if (part->type =3D=3D PART_FREEBSD) {
+		/* Open slice with BSD label */
+		pa->dev->d_offset =3D part->start;
+		table =3D ptable_open(pa->dev, part->end - part->start + 1,
+		    od->sectorsize, ptblread);
+		if (table =3D=3D NULL)
+			return;
+		sprintf(line, "  %s%s", pa->prefix, pname);
+		bsd.dev =3D pa->dev;
+		bsd.prefix =3D line;
+		bsd.verbose =3D pa->verbose;
+		ptable_iterate(table, &bsd, ptable_print);
+		ptable_close(table);
 	}
+}
+#undef PWIDTH
=20
-	/*
-	 * Check the slice table magic.
-	 */
-	if (buf[0x1fe] !=3D 0x55 || buf[0x1ff] !=3D 0xaa) {
-		DEBUG("no slice table/MBR (no magic)");
-		return (rc);
-	}
+void
+disk_print(struct disk_devdesc *dev, char *prefix, int verbose)
+{
+	struct open_disk *od;
+	struct print_args pa;
=20
-	/*
-	 * copy the partition table, then pick up any extended partitions.
-	 */
-	slicetab =3D malloc(NEXTDOSPART * sizeof(struct dos_partition));
-	bcopy(buf + DOSPARTOFF, slicetab,
-		sizeof(struct dos_partition) * NDOSPART);
-	nslices =3D NDOSPART;		/* extended slices start here */
-	for (i =3D 0; i < NDOSPART; i++)
-		disk_checkextended(dev, slicetab, i, &nslices);
-
-	*slicetabp =3D slicetab;
-	*nslicesp =3D nslices;
-	return (0);
+	/* Disk should be opened */
+	od =3D (struct open_disk *)dev->d_opendata;
+	pa.dev =3D dev;
+	pa.prefix =3D prefix;
+	pa.verbose =3D verbose;
+	ptable_iterate(od->table, &pa, ptable_print);
 }
=20
-/*
- * Search for the best MBR slice (typically the first FreeBSD slice).
- */
-static int
-disk_bestslice(struct dos_partition *slicetab, int nslices)
+int
+disk_open(struct disk_devdesc *dev, off_t mediasize, u_int sectorsize)
 {
-	struct dos_partition *dp;
-	int pref, preflevel;
-	int i, prefslice;
-
-	prefslice =3D 0;
-	preflevel =3D PREF_NONE;
-
-	dp =3D &slicetab[0];
-	for (i =3D 0; i < nslices; i++, dp++) {
-		switch (dp->dp_typ) {
-		case DOSPTYP_386BSD:		/* FreeBSD */
-			pref =3D dp->dp_flag & 0x80 ? PREF_FBSD_ACT : PREF_FBSD;
-			break;
-
-		case DOSPTYP_LINUX:
-			pref =3D dp->dp_flag & 0x80 ? PREF_LINUX_ACT : PREF_LINUX;
-			break;
-
-		case 0x01:		/* DOS/Windows */
-		case 0x04:
-		case 0x06:
-		case 0x0b:
-		case 0x0c:
-		case 0x0e:
-			pref =3D dp->dp_flag & 0x80 ? PREF_DOS_ACT : PREF_DOS;
-			break;
-
-		default:
-		        pref =3D PREF_NONE;
-		}
-		if (pref < preflevel) {
-			preflevel =3D pref;
-			prefslice =3D i + 1;
-		}
-	}
-	return (prefslice);
-}
-
-static int
-disk_openmbr(struct disk_devdesc *dev)
-{
-	struct dos_partition	*slicetab =3D NULL, *dptr;
-	int			nslices, sector, slice;
-	int			rc;
-	uint8_t			buf[DISK_SECSIZE];
-	struct disklabel	*lp;
-
-	/*
-	 * Following calculations attempt to determine the correct value
-	 * for dev->d_offset by looking for the slice and partition specified,
-	 * or searching for reasonable defaults.
-	 */
-	rc =3D disk_readslicetab(dev, &slicetab, &nslices);
-	if (rc)
-		return (rc);
-
-	/*
-	 * if a slice number was supplied but not found, this is an error.
-	 */
-	if (dev->d_slice > 0) {
-		slice =3D dev->d_slice - 1;
-		if (slice >=3D nslices) {
-			DEBUG("slice %d not found", slice);
-			rc =3D EPART;
-			goto out;
-		}
-	}
-
-	/*
-	 * Check for the historically bogus MBR found on true dedicated disks
-	 */
-	if (slicetab[3].dp_typ =3D=3D DOSPTYP_386BSD &&
-	    slicetab[3].dp_start =3D=3D 0 && slicetab[3].dp_size =3D=3D 50000) {
-		sector =3D 0;
-		goto unsliced;
-	}
-
-	/*
-	 * Try to auto-detect the best slice; this should always give
-	 * a slice number
-	 */
-	if (dev->d_slice =3D=3D 0) {
-		slice =3D disk_bestslice(slicetab, nslices);
-		if (slice =3D=3D -1) {
-			rc =3D ENOENT;
-			goto out;
-		}
-		dev->d_slice =3D slice;
-	}
-
-	/*
-	 * Accept the supplied slice number unequivocally (we may be looking
-	 * at a DOS partition).
-	 * Note: we number 1-4, offsets are 0-3
-	 */
-	dptr =3D &slicetab[dev->d_slice - 1];
-	sector =3D dptr->dp_start;
-	DEBUG("slice entry %d at %d, %d sectors",
-		dev->d_slice - 1, sector, dptr->dp_size);
-
-unsliced:
-	/*
-	 * Now we have the slice offset, look for the partition in the
-	 * disklabel if we have a partition to start with.
-	 *
-	 * XXX we might want to check the label checksum.
-	 */
-	if (dev->d_partition < 0) {
-		/* no partition, must be after the slice */
-		DEBUG("opening raw slice");
-		dev->d_offset =3D sector;
-		rc =3D 0;
-		goto out;
-	}
-
-	rc =3D dev->d_dev->dv_strategy(dev, F_READ, sector + LABELSECTOR,
-            DISK_SECSIZE, (char *) buf, NULL);
-	if (rc) {
-		DEBUG("error reading disklabel");
-		goto out;
-	}
-
-	lp =3D (struct disklabel *) buf;
-
-	if (lp->d_magic !=3D DISKMAGIC) {
-		DEBUG("no disklabel");
-		rc =3D ENOENT;
-		goto out;
-	}
-	if (dev->d_partition >=3D lp->d_npartitions) {
-		DEBUG("partition '%c' exceeds partitions in table (a-'%c')",
-		  'a' + dev->d_partition,
-		  'a' + lp->d_npartitions);
-		rc =3D EPART;
-		goto out;
-	}
-
-	dev->d_offset =3D
-		lp->d_partitions[dev->d_partition].p_offset -
-		lp->d_partitions[RAW_PART].p_offset +
-		sector;
-	rc =3D 0;
-
-out:
-	if (slicetab)
-		free(slicetab);
-	return (rc);
-}
-
-/*
- * Print out each valid partition in the disklabel of a FreeBSD slice.
- * For size calculations, we assume a 512 byte sector size.
- */
-static void
-disk_printbsdslice(struct disk_devdesc *dev, daddr_t offset,
-    char *prefix, int verbose)
-{
-	char			line[80];
-	char			buf[DISK_SECSIZE];
-	struct disklabel	*lp;
-	int			i, rc, fstype;
-
-	/* read disklabel */
-	rc =3D dev->d_dev->dv_strategy(dev, F_READ, offset + LABELSECTOR,
-		DISK_SECSIZE, (char *) buf, NULL);
-	if (rc)
-		return;
-	lp =3D(struct disklabel *)(&buf[0]);
-	if (lp->d_magic !=3D DISKMAGIC) {
-		sprintf(line, "%s: FFS  bad disklabel\n", prefix);
-		pager_output(line);
-		return;
-	}
-
-	/* Print partitions */
-	for (i =3D 0; i < lp->d_npartitions; i++) {
-		/*
-		 * For each partition, make sure we know what type of fs it
-		 * is.  If not, then skip it.
-		 */
-		fstype =3D lp->d_partitions[i].p_fstype;
-		if (fstype !=3D FS_BSDFFS &&
-		    fstype !=3D FS_SWAP &&
-		    fstype !=3D FS_VINUM)
-			continue;
-
-		/* Only print out statistics in verbose mode */
-		if (verbose)
-			sprintf(line, "  %s%c: %s %s (%d - %d)\n",
-				prefix, 'a' + i,
-			    (fstype =3D=3D FS_SWAP) ? "swap " :
-			    (fstype =3D=3D FS_VINUM) ? "vinum" :
-			    "FFS  ",
-			    display_size(lp->d_partitions[i].p_size),
-			    lp->d_partitions[i].p_offset,
-			    (lp->d_partitions[i].p_offset
-			     + lp->d_partitions[i].p_size));
-		else
-			sprintf(line, "  %s%c: %s\n", prefix, 'a' + i,
-			    (fstype =3D=3D FS_SWAP) ? "swap" :
-			    (fstype =3D=3D FS_VINUM) ? "vinum" :
-			    "FFS");
-		pager_output(line);
-	}
-}
-
-static void
-disk_printslice(struct disk_devdesc *dev, int slice,
-    struct dos_partition *dp, char *prefix, int verbose)
-{
-	char stats[80];
-	char line[80];
-
-	if (verbose)
-		sprintf(stats, " %s (%d - %d)", display_size(dp->dp_size),
-		    dp->dp_start, dp->dp_start + dp->dp_size);
-	else
-		stats[0] =3D '\0';
-
-	switch (dp->dp_typ) {
-	case DOSPTYP_386BSD:
-		disk_printbsdslice(dev, (daddr_t)dp->dp_start,
-		     prefix, verbose);
-		return;
-	case DOSPTYP_LINSWP:
-		sprintf(line, "%s: Linux swap%s\n", prefix, stats);
-		break;
-	case DOSPTYP_LINUX:
-		/*
-		 * XXX
-		 * read the superblock to confirm this is an ext2fs partition?
-		 */
-		sprintf(line, "%s: ext2fs%s\n", prefix, stats);
-		break;
-	case 0x00:				/* unused partition */
-	case DOSPTYP_EXT:
-		return;
-	case 0x01:
-		sprintf(line, "%s: FAT-12%s\n", prefix, stats);
-		break;
-	case 0x04:
-	case 0x06:
-	case 0x0e:
-		sprintf(line, "%s: FAT-16%s\n", prefix, stats);
-		break;
-	case 0x07:
-		sprintf(line, "%s: NTFS/HPFS%s\n", prefix, stats);
-		break;
-	case 0x0b:
-	case 0x0c:
-		sprintf(line, "%s: FAT-32%s\n", prefix, stats);
-		break;
-	default:
-		sprintf(line, "%s: Unknown fs: 0x%x %s\n", prefix, dp->dp_typ,
-		    stats);
-	}
-	pager_output(line);
-}
-
-static int
-disk_printmbr(struct disk_devdesc *dev, char *prefix, int verbose)
-{
-	struct dos_partition	*slicetab;
-	int			nslices, i;
-	int			rc;
-	char			line[80];
-
-	rc =3D disk_readslicetab(dev, &slicetab, &nslices);
-	if (rc)
-		return (rc);
-	for (i =3D 0; i < nslices; i++) {
-		sprintf(line, "%ss%d", prefix, i + 1);
-		disk_printslice(dev, i, &slicetab[i], line, verbose);
-	}
-	free(slicetab);
-	return (0);
-}
-
-#endif
-
-#ifdef LOADER_GPT_SUPPORT
-
-static int
-disk_readgpt(struct disk_devdesc *dev, struct gpt_part **gptp, int *ngptp)
-{
-	struct dos_partition	*dp;
-	struct gpt_hdr		*hdr;
-	struct gpt_ent		*ent;
-	struct gpt_part		*gptab =3D NULL;
-	int			entries_per_sec, rc, i, part;
-	daddr_t			lba, elba;
-	uint8_t			gpt[DISK_SECSIZE], tbl[DISK_SECSIZE];
-
-	/*
-	 * Following calculations attempt to determine the correct value
-	 * for dev->d_offset by looking for the slice and partition specified,
-	 * or searching for reasonable defaults.
-	 */
-	rc =3D 0;
-
-	/* First, read the MBR and see if we have a PMBR. */
-	rc =3D dev->d_dev->dv_strategy(dev, F_READ, 0, DISK_SECSIZE,
-		(char *) tbl, NULL);
-	if (rc) {
-		DEBUG("error reading MBR");
-		return (EIO);
-	}
-
-	/* Check the slice table magic. */
-	if (tbl[0x1fe] !=3D 0x55 || tbl[0x1ff] !=3D 0xaa)
-		return (ENXIO);
-
-	/* Check for GPT slice. */
-	part =3D 0;
-	dp =3D (struct dos_partition *)(tbl + DOSPARTOFF);
-	for (i =3D 0; i < NDOSPART; i++) {
-		if (dp[i].dp_typ =3D=3D 0xee)
-			part++;
-		else if ((part !=3D 1) && (dp[i].dp_typ !=3D 0x00))
-			return (EINVAL);
-	}
-	if (part !=3D 1)
-		return (EINVAL);
-
-	/* Read primary GPT table header. */
-	rc =3D dev->d_dev->dv_strategy(dev, F_READ, 1, DISK_SECSIZE,
-		(char *) gpt, NULL);
-	if (rc) {
-		DEBUG("error reading GPT header");
-		return (EIO);
-	}
-	hdr =3D (struct gpt_hdr *)gpt;
-	if (bcmp(hdr->hdr_sig, GPT_HDR_SIG, sizeof(hdr->hdr_sig)) !=3D 0 ||
-	    hdr->hdr_lba_self !=3D 1 || hdr->hdr_revision < 0x00010000 ||
-	    hdr->hdr_entsz < sizeof(*ent) ||
-	    DISK_SECSIZE % hdr->hdr_entsz !=3D 0) {
-		DEBUG("Invalid GPT header\n");
-		return (EINVAL);
-	}
-
-	/* Walk the partition table to count valid partitions. */
-	part =3D 0;
-	entries_per_sec =3D DISK_SECSIZE / hdr->hdr_entsz;
-	elba =3D hdr->hdr_lba_table + hdr->hdr_entries / entries_per_sec;
-	for (lba =3D hdr->hdr_lba_table; lba < elba; lba++) {
-		rc =3D dev->d_dev->dv_strategy(dev, F_READ, lba, DISK_SECSIZE,
-			(char *) tbl, NULL);
-		if (rc) {
-			DEBUG("error reading GPT table");
-			return (EIO);
-		}
-		for (i =3D 0; i < entries_per_sec; i++) {
-			ent =3D (struct gpt_ent *)(tbl + i * hdr->hdr_entsz);
-			if (uuid_is_nil(&ent->ent_type, NULL) ||
-			    ent->ent_lba_start =3D=3D 0 ||
-			    ent->ent_lba_end < ent->ent_lba_start)
-				continue;
-			part++;
-		}
-	}
-
-	/* Save the important information about all the valid partitions. */
-	if (part !=3D 0) {
-		gptab =3D malloc(part * sizeof(struct gpt_part));
-		part =3D 0;
-		for (lba =3D hdr->hdr_lba_table; lba < elba; lba++) {
-			rc =3D dev->d_dev->dv_strategy(dev, F_READ, lba, DISK_SECSIZE,
-				(char *) tbl, NULL);
-			if (rc) {
-				DEBUG("error reading GPT table");
-				free(gptab);
-				return (EIO);
-			}
-			for (i =3D 0; i < entries_per_sec; i++) {
-				ent =3D (struct gpt_ent *)(tbl + i * hdr->hdr_entsz);
-				if (uuid_is_nil(&ent->ent_type, NULL) ||
-				    ent->ent_lba_start =3D=3D 0 ||
-				    ent->ent_lba_end < ent->ent_lba_start)
-					continue;
-				gptab[part].gp_index =3D (lba - hdr->hdr_lba_table) *
-					entries_per_sec + i + 1;
-				gptab[part].gp_type =3D ent->ent_type;
-				gptab[part].gp_start =3D ent->ent_lba_start;
-				gptab[part].gp_end =3D ent->ent_lba_end;
-				part++;
-			}
-		}
-	}
-
-	*gptp =3D gptab;
-	*ngptp =3D part;
-	return (0);
-}
-
-static struct gpt_part *
-disk_bestgpt(struct gpt_part *gpt, int ngpt)
-{
-	struct gpt_part *gp, *prefpart;
-	int i, pref, preflevel;
-
-	prefpart =3D NULL;
-	preflevel =3D PREF_NONE;
-
-	gp =3D gpt;
-	for (i =3D 0; i < ngpt; i++, gp++) {
-		/* Windows. XXX: Also Linux. */
-		if (uuid_equal(&gp->gp_type, &ms_basic_data, NULL))
-			pref =3D PREF_DOS;
-		/* FreeBSD */
-		else if (uuid_equal(&gp->gp_type, &freebsd_ufs, NULL) ||
-		         uuid_equal(&gp->gp_type, &freebsd_zfs, NULL))
-			pref =3D PREF_FBSD;
-		else
-			pref =3D PREF_NONE;
-		if (pref < preflevel) {
-			preflevel =3D pref;
-			prefpart =3D gp;
-		}
-	}
-	return (prefpart);
-}
-
-static int
-disk_opengpt(struct disk_devdesc *dev)
-{
-	struct gpt_part		*gpt =3D NULL, *gp;
-	int			rc, ngpt, i;
-
-	rc =3D disk_readgpt(dev, &gpt, &ngpt);
-	if (rc)
-		return (rc);
-
-	/* Is this a request for the whole disk? */
-	if (dev->d_slice < 0) {
-		dev->d_offset =3D 0;
-		rc =3D 0;
-		goto out;
-	}
-
-	/*
-	 * If a partition number was supplied, then the user is trying to use
-	 * an MBR address rather than a GPT address, so fail.
-	 */
-	if (dev->d_partition !=3D 0xff) {
-		rc =3D ENOENT;
-		goto out;
-	}
-
-	/* If a slice number was supplied but not found, this is an error. */
-	gp =3D NULL;
-	if (dev->d_slice > 0) {
-		for (i =3D 0; i < ngpt; i++) {
-			if (gpt[i].gp_index =3D=3D dev->d_slice) {
-				gp =3D &gpt[i];
-				break;
-			}
-		}
-		if (gp =3D=3D NULL) {
-			DEBUG("partition %d not found", dev->d_slice);
-			rc =3D ENOENT;
-			goto out;
-		}
-	}
-
-	/* Try to auto-detect the best partition. */
-	if (dev->d_slice =3D=3D 0) {
-		gp =3D disk_bestgpt(gpt, ngpt);
-		if (gp =3D=3D NULL) {
-			rc =3D ENOENT;
-			goto out;
-		}
-		dev->d_slice =3D gp->gp_index;
-	}
-
-	dev->d_offset =3D gp->gp_start;
-	rc =3D 0;
-
-out:
-	if (gpt)
-		free(gpt);
-	return (rc);
-}
-
-static void
-disk_printgptpart(struct disk_devdesc *dev, struct gpt_part *gp,
-    char *prefix, int verbose)
-{
-	char stats[80];
-	char line[96];
-
-	if (verbose)
-		sprintf(stats, " %s",
-			display_size(gp->gp_end + 1 - gp->gp_start));
-	else
-		stats[0] =3D '\0';
-
-	if (uuid_equal(&gp->gp_type, &efi, NULL))
-		sprintf(line, "%s: EFI         %s\n", prefix, stats);
-	else if (uuid_equal(&gp->gp_type, &ms_basic_data, NULL))
-		sprintf(line, "%s: FAT/NTFS    %s\n", prefix, stats);
-	else if (uuid_equal(&gp->gp_type, &freebsd_boot, NULL))
-		sprintf(line, "%s: FreeBSD boot%s\n", prefix, stats);
-	else if (uuid_equal(&gp->gp_type, &freebsd_ufs, NULL))
-		sprintf(line, "%s: FreeBSD UFS %s\n", prefix, stats);
-	else if (uuid_equal(&gp->gp_type, &freebsd_zfs, NULL))
-		sprintf(line, "%s: FreeBSD ZFS %s\n", prefix, stats);
-	else if (uuid_equal(&gp->gp_type, &freebsd_swap, NULL))
-		sprintf(line, "%s: FreeBSD swap%s\n", prefix, stats);
-	else
-		sprintf(line,
-		    "%s: %08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x%s\n",
-		    prefix,
-		    gp->gp_type.time_low, gp->gp_type.time_mid,
-		    gp->gp_type.time_hi_and_version,
-		    gp->gp_type.clock_seq_hi_and_reserved,
-		    gp->gp_type.clock_seq_low,
-		    gp->gp_type.node[0],
-		    gp->gp_type.node[1],
-		    gp->gp_type.node[2],
-		    gp->gp_type.node[3],
-		    gp->gp_type.node[4],
-		    gp->gp_type.node[5],
-		    stats);
-	pager_output(line);
-}
-
-static int
-disk_printgpt(struct disk_devdesc *dev, char *prefix, int verbose)
-{
-	struct gpt_part		*gpt =3D NULL;
-	int			rc, ngpt, i;
-	char			line[80];
-
-	rc =3D disk_readgpt(dev, &gpt, &ngpt);
-	if (rc)
-		return (rc);
-	for (i =3D 0; i < ngpt; i++) {
-		sprintf(line, "%sp%d", prefix, i + 1);
-		disk_printgptpart(dev, &gpt[i], line, verbose);
-	}
-	free(gpt);
-	return (0);
-}
-
-#endif
-
-int
-disk_open(struct disk_devdesc *dev)
-{
+	struct open_disk *od;
+	struct ptable *table;
+	struct ptable_entry part;
 	int rc;
=20
-	rc =3D 0;
+	od =3D (struct open_disk *)malloc(sizeof(struct open_disk));
+	if (od =3D=3D NULL) {
+		DEBUG("no memory");
+		return (ENOMEM);
+	}
 	/*
 	 * While we are reading disk metadata, make sure we do it relative
 	 * to the start of the disk
 	 */
+	rc =3D 0;
+	table =3D NULL;
 	dev->d_offset =3D 0;
+	dev->d_opendata =3D od;
+	od->mediasize =3D mediasize;
+	od->sectorsize =3D sectorsize;
+	DEBUG("open '%s', unit %d slice %d partition %d",
+	    disk_fmtdev(dev), dev->d_unit, dev->d_slice, dev->d_partition);
=20
-#ifdef LOADER_GPT_SUPPORT
-	rc =3D disk_opengpt(dev);
-	if (rc =3D=3D 0)
-		return (0);
-#endif
-#ifdef LOADER_MBR_SUPPORT
-	rc =3D disk_openmbr(dev);
-#endif
+	/* Determine disk layout. */
+	od->table =3D ptable_open(dev, mediasize / sectorsize, sectorsize,
+	    ptblread);
+	if (od->table =3D=3D NULL) {
+		DEBUG("Can't read partition table");
+		rc =3D ENXIO;
+		goto out;
+	}
+	if (dev->d_slice > 0) {
+		/* Try to get information about partition */
+		rc =3D ptable_getpart(od->table, &part, dev->d_slice);
+		if (rc !=3D 0) /* Partition doesn't exist */
+			goto out;
+		dev->d_offset =3D part.start;
+		if (dev->d_partition =3D=3D -1 ||
+		    dev->d_partition =3D=3D 255)
+			goto out; /* Nothing more to do */
=20
+		/* Try to read BSD label */
+		table =3D ptable_open(dev, part.end - part.start + 1,
+		    od->sectorsize, ptblread);
+		if (table =3D=3D NULL) {
+			DEBUG("Can't read BSD label");
+			rc =3D ENXIO;
+			goto out;
+		}
+		rc =3D ptable_getpart(table, &part, dev->d_partition);
+		if (rc !=3D 0)
+			goto out;
+		dev->d_offset +=3D part.start;
+	} else if (dev->d_slice =3D=3D 0) {
+		rc =3D ptable_getbestpart(od->table, &part);
+		if (rc !=3D 0)
+			goto out;
+		/* Save the slice number of best partition to dev */
+		dev->d_slice =3D part.index;
+		dev->d_offset =3D part.start;
+	}
+out:
+	if (table !=3D NULL)
+		ptable_close(table);
+	if (rc !=3D 0) {
+		if (od->table !=3D NULL)
+			ptable_close(od->table);
+		free(od);
+	}
 	return (rc);
 }
=20
-void
-disk_print(struct disk_devdesc *dev, char *prefix, int verbose)
+int
+disk_close(struct disk_devdesc *dev)
 {
+	struct open_disk *od;
=20
+	od =3D (struct open_disk *)dev->d_opendata;
+	ptable_close(od->table);
+	free(od);
+	return (0);
+}
+
+char*
+disk_fmtdev(struct disk_devdesc *dev)
+{
+	static char buf[128];
+	char *cp;
+
+	cp =3D buf + sprintf(buf, "%s%d", dev->d_dev->dv_name, dev->d_unit);
+	if (dev->d_slice > 0) {
 #ifdef LOADER_GPT_SUPPORT
-	if (disk_printgpt(dev, prefix, verbose) =3D=3D 0)
-		return;
+		if (dev->d_partition =3D=3D 255) {
+			sprintf(cp, "p%d:", dev->d_slice);
+			return (buf);
+		} else
 #endif
 #ifdef LOADER_MBR_SUPPORT
-	disk_printmbr(dev, prefix, verbose);
+			cp +=3D sprintf(cp, "s%d", dev->d_slice);
 #endif
+		if (dev->d_partition >=3D 0)
+			cp +=3D sprintf(cp, "%c", dev->d_partition + 'a');
+	}
+	strcat(cp, ":");
+	return (buf);
 }
+
+int
+disk_parsedev(struct disk_devdesc *dev, const char *devspec, const char **=
path)
+{
+	int unit, slice, partition;
+	const char *np;
+	char *cp;
+
+	np =3D devspec;
+	unit =3D slice =3D partition =3D -1;
+	if (*np !=3D '\0' && *np !=3D ':') {
+		unit =3D strtol(np, &cp, 10);
+		if (cp =3D=3D np)
+			return (EUNIT);
+#ifdef LOADER_GPT_SUPPORT
+		if (*cp =3D=3D 'p') {
+			np =3D cp + 1;
+			slice =3D strtol(np, &cp, 10);
+			if (np =3D=3D cp)
+				return (ESLICE);
+			/* we don't support nested partitions on GPT */
+			if (*cp !=3D '\0' && *cp !=3D ':')
+				return (EINVAL);
+			partition =3D 255;
+		} else
+#endif
+#ifdef LOADER_MBR_SUPPORT
+		if (*cp =3D=3D 's') {
+			np =3D cp + 1;
+			slice =3D strtol(np, &cp, 10);
+			if (np =3D=3D cp)
+				return (ESLICE);
+		}
+#endif
+		if (*cp !=3D '\0' && *cp !=3D ':') {
+			partition =3D *cp - 'a';
+			if (partition < 0)
+				return (EPART);
+			cp++;
+		}
+	} else
+		return (EINVAL);
+
+	if (*cp !=3D '\0' && *cp !=3D ':')
+		return (EINVAL);
+	dev->d_unit =3D unit;
+	dev->d_slice =3D slice;
+	dev->d_partition =3D partition;
+	if (path !=3D NULL)
+		*path =3D (*cp =3D=3D '\0') ? cp: cp + 1;
+	return (0);
+}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/boot/common/disk.h
--- a/head/sys/boot/common/disk.h	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/boot/common/disk.h	Fri Aug 10 14:19:25 2012 +0300
@@ -23,12 +23,11 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: head/sys/boot/common/disk.h 223695 2011-06-30 16:08:56Z dfr $
+ * $FreeBSD: head/sys/boot/common/disk.h 239058 2012-08-05 12:15:15Z ae $
  */
=20
 /*
- * Device descriptor for partitioned disks. We assume that all disk addres=
ses
- * are 512 byte block offsets from the start of the disk. To use, set the
+ * Device descriptor for partitioned disks. To use, set the
  * d_slice and d_partition variables as follows:
  *
  * Whole disk access:
@@ -74,8 +73,6 @@
  * the device's strategy method.
  */
=20
-#define DISK_SECSIZE	512
-
 struct disk_devdesc
 {
 	struct devsw	*d_dev;
@@ -84,16 +81,21 @@
 	void		*d_opendata;
 	int		d_slice;
 	int		d_partition;
-	int		d_offset;
+	off_t		d_offset;
 };
=20
 /*
  * Parse disk metadata and initialise dev->d_offset.
  */
-extern int disk_open(struct disk_devdesc * dev);
+extern int disk_open(struct disk_devdesc *dev, off_t mediasize,
+    u_int sectorsize);
+extern int disk_close(struct disk_devdesc *dev);
=20
 /*
- * Print information about slices on a disk.  For the size calculations we
- * assume a 512 byte sector.
+ * Print information about slices on a disk.
  */
 extern void disk_print(struct disk_devdesc *dev, char *prefix, int verbose=
);
+extern char* disk_fmtdev(struct disk_devdesc *dev);
+extern int disk_parsedev(struct disk_devdesc *dev, const char *devspec,
+    const char **path);
+
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/boot/common/part.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/head/sys/boot/common/part.c	Fri Aug 10 14:19:25 2012 +0300
@@ -0,0 +1,839 @@
+/*-
+ * Copyright (c) 2012 Andrey V. Elsukov <ae at FreeBSD.org>
+ * 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 AUTHORS 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 PURP=
OSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENT=
IAL
+ * 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, STR=
ICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY W=
AY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD: head/sys/boot/common/part.c 239127 2012-08-07 09:22:46=
Z ae $");
+
+#include <stand.h>
+#include <sys/param.h>
+#include <sys/diskmbr.h>
+#include <sys/disklabel.h>
+#include <sys/endian.h>
+#include <sys/gpt.h>
+#include <sys/stddef.h>
+#include <sys/queue.h>
+#include <sys/vtoc.h>
+
+#include <crc32.h>
+#include <part.h>
+#include <uuid.h>
+
+#ifdef PART_DEBUG
+#define	DEBUG(fmt, args...) printf("%s: " fmt "\n" , __func__ , ## args)
+#else
+#define	DEBUG(fmt, args...)
+#endif
+
+#ifdef LOADER_GPT_SUPPORT
+#define	MAXTBLSZ	64
+static const uuid_t gpt_uuid_unused =3D GPT_ENT_TYPE_UNUSED;
+static const uuid_t gpt_uuid_ms_basic_data =3D GPT_ENT_TYPE_MS_BASIC_DATA;
+static const uuid_t gpt_uuid_freebsd_ufs =3D GPT_ENT_TYPE_FREEBSD_UFS;
+static const uuid_t gpt_uuid_efi =3D GPT_ENT_TYPE_EFI;
+static const uuid_t gpt_uuid_freebsd_boot =3D GPT_ENT_TYPE_FREEBSD_BOOT;
+static const uuid_t gpt_uuid_freebsd_nandfs =3D GPT_ENT_TYPE_FREEBSD_NANDF=
S;
+static const uuid_t gpt_uuid_freebsd_swap =3D GPT_ENT_TYPE_FREEBSD_SWAP;
+static const uuid_t gpt_uuid_freebsd_zfs =3D GPT_ENT_TYPE_FREEBSD_ZFS;
+static const uuid_t gpt_uuid_freebsd_vinum =3D GPT_ENT_TYPE_FREEBSD_VINUM;
+#endif
+
+struct pentry {
+	struct ptable_entry	part;
+	uint64_t		flags;
+	union {
+		uint8_t bsd;
+		uint8_t	mbr;
+		uuid_t	gpt;
+		uint16_t vtoc8;
+	} type;
+	STAILQ_ENTRY(pentry)	entry;
+};
+
+struct ptable {
+	enum ptable_type	type;
+	uint16_t		sectorsize;
+	uint64_t		sectors;
+
+	STAILQ_HEAD(, pentry)	entries;
+};
+
+static struct parttypes {
+	enum partition_type	type;
+	const char		*desc;
+} ptypes[] =3D {
+	{ PART_UNKNOWN,		"Unknown" },
+	{ PART_EFI,		"EFI" },
+	{ PART_FREEBSD,		"FreeBSD" },
+	{ PART_FREEBSD_BOOT,	"FreeBSD boot" },
+	{ PART_FREEBSD_NANDFS,	"FreeBSD nandfs" },
+	{ PART_FREEBSD_UFS,	"FreeBSD UFS" },
+	{ PART_FREEBSD_ZFS,	"FreeBSD ZFS" },
+	{ PART_FREEBSD_SWAP,	"FreeBSD swap" },
+	{ PART_FREEBSD_VINUM,	"FreeBSD vinum" },
+	{ PART_LINUX,		"Linux" },
+	{ PART_LINUX_SWAP,	"Linux swap" },
+	{ PART_DOS,		"DOS/Windows" },
+};
+
+const char *
+parttype2str(enum partition_type type)
+{
+	int i;
+
+	for (i =3D 0; i < sizeof(ptypes) / sizeof(ptypes[0]); i++)
+		if (ptypes[i].type =3D=3D type)
+			return (ptypes[i].desc);
+	return (ptypes[0].desc);
+}
+
+#ifdef LOADER_GPT_SUPPORT
+static void
+uuid_letoh(uuid_t *uuid)
+{
+
+	uuid->time_low =3D le32toh(uuid->time_low);
+	uuid->time_mid =3D le16toh(uuid->time_mid);
+	uuid->time_hi_and_version =3D le16toh(uuid->time_hi_and_version);
+}
+
+static enum partition_type
+gpt_parttype(uuid_t type)
+{
+
+	if (uuid_equal(&type, &gpt_uuid_efi, NULL))
+		return (PART_EFI);
+	else if (uuid_equal(&type, &gpt_uuid_ms_basic_data, NULL))
+		return (PART_DOS);
+	else if (uuid_equal(&type, &gpt_uuid_freebsd_boot, NULL))
+		return (PART_FREEBSD_BOOT);
+	else if (uuid_equal(&type, &gpt_uuid_freebsd_ufs, NULL))
+		return (PART_FREEBSD_UFS);
+	else if (uuid_equal(&type, &gpt_uuid_freebsd_zfs, NULL))
+		return (PART_FREEBSD_ZFS);
+	else if (uuid_equal(&type, &gpt_uuid_freebsd_swap, NULL))
+		return (PART_FREEBSD_SWAP);
+	else if (uuid_equal(&type, &gpt_uuid_freebsd_vinum, NULL))
+		return (PART_FREEBSD_VINUM);
+	else if (uuid_equal(&type, &gpt_uuid_freebsd_nandfs, NULL))
+		return (PART_FREEBSD_NANDFS);
+	return (PART_UNKNOWN);
+}
+
+static struct gpt_hdr*
+gpt_checkhdr(struct gpt_hdr *hdr, uint64_t lba_self, uint64_t lba_last,
+    uint16_t sectorsize)
+{
+	uint32_t sz, crc;
+
+	if (memcmp(hdr->hdr_sig, GPT_HDR_SIG, sizeof(hdr->hdr_sig)) !=3D 0) {
+		DEBUG("no GPT signature");
+		return (NULL);
+	}
+	sz =3D le32toh(hdr->hdr_size);
+	if (sz < 92 || sz > sectorsize) {
+		DEBUG("invalid GPT header size: %d", sz);
+		return (NULL);
+	}
+	crc =3D le32toh(hdr->hdr_crc_self);
+	hdr->hdr_crc_self =3D 0;
+	if (crc32(hdr, sz) !=3D crc) {
+		DEBUG("GPT header's CRC doesn't match");
+		return (NULL);
+	}
+	hdr->hdr_crc_self =3D crc;
+	hdr->hdr_revision =3D le32toh(hdr->hdr_revision);
+	if (hdr->hdr_revision < GPT_HDR_REVISION) {
+		DEBUG("unsupported GPT revision %d", hdr->hdr_revision);
+		return (NULL);
+	}
+	hdr->hdr_lba_self =3D le64toh(hdr->hdr_lba_self);
+	if (hdr->hdr_lba_self !=3D lba_self) {
+		DEBUG("self LBA doesn't match");
+		return (NULL);
+	}
+	hdr->hdr_lba_alt =3D le64toh(hdr->hdr_lba_alt);
+	if (hdr->hdr_lba_alt =3D=3D hdr->hdr_lba_self) {
+		DEBUG("invalid alternate LBA");
+		return (NULL);
+	}
+	hdr->hdr_entries =3D le32toh(hdr->hdr_entries);
+	hdr->hdr_entsz =3D le32toh(hdr->hdr_entsz);
+	if (hdr->hdr_entries < 128 ||
+	    hdr->hdr_entsz < sizeof(struct gpt_ent) ||
+	    sectorsize % hdr->hdr_entsz !=3D 0) {
+		DEBUG("invalid entry size or number of entries");
+		return (NULL);
+	}
+	hdr->hdr_lba_start =3D le64toh(hdr->hdr_lba_start);
+	hdr->hdr_lba_end =3D le64toh(hdr->hdr_lba_end);
+	hdr->hdr_lba_table =3D le64toh(hdr->hdr_lba_table);
+	hdr->hdr_crc_table =3D le32toh(hdr->hdr_crc_table);
+	uuid_letoh(&hdr->hdr_uuid);
+	return (hdr);
+}
+
+static int
+gpt_checktbl(const struct gpt_hdr *hdr, u_char *tbl, size_t size,
+    uint64_t lba_last)
+{
+	struct gpt_ent *ent;
+	int i, cnt;
+
+	cnt =3D size / hdr->hdr_entsz;
+	/* Check CRC only when buffer size is enough for table. */
+	if (hdr->hdr_entries <=3D cnt &&
+	    crc32(tbl, size) !=3D hdr->hdr_crc_table) {
+		DEBUG("GPT table's CRC doesn't match");
+		return (-1);
+	}
+	ent =3D (struct gpt_ent *)tbl;
+	for (i =3D 0; i < cnt; i++, ent++) {
+		uuid_letoh(&ent->ent_type);
+		if (uuid_equal(&ent->ent_type, &gpt_uuid_unused, NULL))
+			continue;
+		ent->ent_lba_start =3D le64toh(ent->ent_lba_start);
+		ent->ent_lba_end =3D le64toh(ent->ent_lba_end);
+	}
+	return (0);
+}
+
+static struct ptable*
+ptable_gptread(struct ptable *table, void *dev, diskread_t dread)
+{
+	struct pentry *entry;
+	struct gpt_hdr *phdr, hdr;
+	struct gpt_ent *ent;
+	u_char *buf, *tbl;
+	uint64_t offset;
+	int pri, sec, i;
+	size_t size;
+
+	buf =3D malloc(table->sectorsize);
+	if (buf =3D=3D NULL)
+		return (NULL);
+	tbl =3D malloc(table->sectorsize * MAXTBLSZ);
+	if (tbl =3D=3D NULL) {
+		free(buf);
+		return (NULL);
+	}
+	/* Read the primary GPT header. */
+	if (dread(dev, buf, 1, 1) !=3D 0) {
+		ptable_close(table);
+		table =3D NULL;
+		goto out;
+	}
+	pri =3D sec =3D 0;
+	/* Check the primary GPT header. */
+	phdr =3D gpt_checkhdr((struct gpt_hdr *)buf, 1, table->sectors - 1,
+	    table->sectorsize);
+	if (phdr !=3D NULL) {
+		/* Read the primary GPT table. */
+		size =3D MIN(MAXTBLSZ,
+		    phdr->hdr_entries * phdr->hdr_entsz / table->sectorsize);
+		if (dread(dev, tbl, size, phdr->hdr_lba_table) =3D=3D 0 &&
+		    gpt_checktbl(phdr, tbl, size * table->sectorsize,
+		    table->sectors - 1) =3D=3D 0) {
+			memcpy(&hdr, phdr, sizeof(hdr));
+			pri =3D 1;
+		}
+	}
+	offset =3D pri ? hdr.hdr_lba_alt: table->sectors - 1;
+	/* Read the backup GPT header. */
+	if (dread(dev, buf, 1, offset) !=3D 0)
+		phdr =3D NULL;
+	else
+		phdr =3D gpt_checkhdr((struct gpt_hdr *)buf, offset,
+		    table->sectors - 1, table->sectorsize);
+	if (phdr !=3D NULL) {
+		/*
+		 * Compare primary and backup headers.
+		 * If they are equal, then we do not need to read backup
+		 * table. If they are different, then prefer backup header
+		 * and try to read backup table.
+		 */
+		if (pri =3D=3D 0 ||
+		    uuid_equal(&hdr.hdr_uuid, &phdr->hdr_uuid, NULL) =3D=3D 0 ||
+		    hdr.hdr_revision !=3D phdr->hdr_revision ||
+		    hdr.hdr_size !=3D phdr->hdr_size ||
+		    hdr.hdr_lba_start !=3D phdr->hdr_lba_start ||
+		    hdr.hdr_lba_end !=3D phdr->hdr_lba_end ||
+		    hdr.hdr_entries !=3D phdr->hdr_entries ||
+		    hdr.hdr_entsz !=3D phdr->hdr_entsz ||
+		    hdr.hdr_crc_table !=3D phdr->hdr_crc_table) {
+			/* Read the backup GPT table. */
+			size =3D MIN(MAXTBLSZ, phdr->hdr_entries *
+			    phdr->hdr_entsz / table->sectorsize);
+			if (dread(dev, tbl, size, phdr->hdr_lba_table) =3D=3D 0 &&
+			    gpt_checktbl(phdr, tbl, size * table->sectorsize,
+			    table->sectors - 1) =3D=3D 0) {
+				memcpy(&hdr, phdr, sizeof(hdr));
+				sec =3D 1;
+			}
+		}
+	}
+	if (pri =3D=3D 0 && sec =3D=3D 0) {
+		/* Both primary and backup tables are invalid. */
+		table->type =3D PTABLE_NONE;
+		goto out;
+	}
+	ent =3D (struct gpt_ent *)tbl;
+	size =3D MIN(hdr.hdr_entries * hdr.hdr_entsz,
+	    MAXTBLSZ * table->sectorsize);
+	for (i =3D 0; i < size / hdr.hdr_entsz; i++, ent++) {
+		if (uuid_equal(&ent->ent_type, &gpt_uuid_unused, NULL))
+			continue;
+		entry =3D malloc(sizeof(*entry));
+		if (entry =3D=3D NULL)
+			break;
+		entry->part.start =3D ent->ent_lba_start;
+		entry->part.end =3D ent->ent_lba_end;
+		entry->part.index =3D i + 1;
+		entry->part.type =3D gpt_parttype(ent->ent_type);
+		entry->flags =3D le64toh(ent->ent_attr);
+		memcpy(&entry->type.gpt, &ent->ent_type, sizeof(uuid_t));
+		STAILQ_INSERT_TAIL(&table->entries, entry, entry);
+		DEBUG("new GPT partition added");
+	}
+out:
+	free(buf);
+	free(tbl);
+	return (table);
+}
+#endif /* LOADER_GPT_SUPPORT */
+
+#ifdef LOADER_MBR_SUPPORT
+/* We do not need to support too many EBR partitions in the loader */
+#define	MAXEBRENTRIES		8
+static enum partition_type
+mbr_parttype(uint8_t type)
+{
+
+	switch (type) {
+	case DOSPTYP_386BSD:
+		return (PART_FREEBSD);
+	case DOSPTYP_LINSWP:
+		return (PART_LINUX_SWAP);
+	case DOSPTYP_LINUX:
+		return (PART_LINUX);
+	case 0x01:
+	case 0x04:
+	case 0x06:
+	case 0x07:
+	case 0x0b:
+	case 0x0c:
+	case 0x0e:
+		return (PART_DOS);
+	}
+	return (PART_UNKNOWN);
+}
+
+struct ptable*
+ptable_ebrread(struct ptable *table, void *dev, diskread_t dread)
+{
+	struct dos_partition *dp;
+	struct pentry *e1, *entry;
+	uint32_t start, end, offset;
+	u_char *buf;
+	int i, index;
+
+	STAILQ_FOREACH(e1, &table->entries, entry) {
+		if (e1->type.mbr =3D=3D DOSPTYP_EXT ||
+		    e1->type.mbr =3D=3D DOSPTYP_EXTLBA)
+			break;
+	}
+	if (e1 =3D=3D NULL)
+		return (table);
+	index =3D 5;
+	offset =3D e1->part.start;
+	buf =3D malloc(table->sectorsize);
+	if (buf =3D=3D NULL)
+		return (table);
+	for (i =3D 0; i < MAXEBRENTRIES; i++) {
+		if (offset >=3D table->sectors)
+			break;
+		if (dread(dev, buf, 1, offset) !=3D 0)
+			break;
+		dp =3D (struct dos_partition *)(buf + DOSPARTOFF);
+		if (dp[0].dp_typ =3D=3D 0)
+			break;
+		start =3D le32toh(dp[0].dp_start);
+		if (dp[0].dp_typ =3D=3D DOSPTYP_EXT &&
+		    dp[1].dp_typ =3D=3D 0) {
+			offset =3D e1->part.start + start;
+			continue;
+		}
+		end =3D le32toh(dp[0].dp_size);
+		entry =3D malloc(sizeof(*entry));
+		if (entry =3D=3D NULL)
+			break;
+		entry->part.start =3D offset + start;
+		entry->part.end =3D entry->part.start + end - 1;
+		entry->part.index =3D index++;
+		entry->part.type =3D mbr_parttype(dp[0].dp_typ);
+		entry->flags =3D dp[0].dp_flag;
+		entry->type.mbr =3D dp[0].dp_typ;
+		STAILQ_INSERT_TAIL(&table->entries, entry, entry);
+		DEBUG("new EBR partition added");
+		if (dp[1].dp_typ =3D=3D 0)
+			break;
+		offset =3D e1->part.start + le32toh(dp[1].dp_start);
+	}
+	free(buf);
+	return (table);
+}
+#endif /* LOADER_MBR_SUPPORT */
+
+static enum partition_type
+bsd_parttype(uint8_t type)
+{
+
+	switch (type) {
+	case FS_NANDFS:
+		return (PART_FREEBSD_NANDFS);
+	case FS_SWAP:
+		return (PART_FREEBSD_SWAP);
+	case FS_BSDFFS:
+		return (PART_FREEBSD_UFS);
+	case FS_VINUM:
+		return (PART_FREEBSD_VINUM);
+	case FS_ZFS:
+		return (PART_FREEBSD_ZFS);
+	}
+	return (PART_UNKNOWN);
+}
+
+struct ptable*
+ptable_bsdread(struct ptable *table, void *dev, diskread_t dread)
+{
+	struct disklabel *dl;
+	struct partition *part;
+	struct pentry *entry;
+	u_char *buf;
+	uint32_t raw_offset;
+	int i;
+
+	if (table->sectorsize < sizeof(struct disklabel)) {
+		DEBUG("Too small sectorsize");
+		return (table);
+	}
+	buf =3D malloc(table->sectorsize);
+	if (buf =3D=3D NULL)
+		return (table);
+	if (dread(dev, buf, 1, 1) !=3D 0) {
+		DEBUG("read failed");
+		ptable_close(table);
+		table =3D NULL;
+		goto out;
+	}
+	dl =3D (struct disklabel *)buf;
+	if (le32toh(dl->d_magic) !=3D DISKMAGIC &&
+	    le32toh(dl->d_magic2) !=3D DISKMAGIC)
+		goto out;
+	if (le32toh(dl->d_secsize) !=3D table->sectorsize) {
+		DEBUG("unsupported sector size");
+		goto out;
+	}
+	dl->d_npartitions =3D le16toh(dl->d_npartitions);
+	if (dl->d_npartitions > 20 || dl->d_npartitions < 8) {
+		DEBUG("invalid number of partitions");
+		goto out;
+	}
+	part =3D &dl->d_partitions[0];
+	raw_offset =3D le32toh(part[RAW_PART].p_offset);
+	for (i =3D 0; i < dl->d_npartitions; i++, part++) {
+		if (i =3D=3D RAW_PART)
+			continue;
+		if (part->p_size =3D=3D 0)
+			continue;
+		entry =3D malloc(sizeof(*entry));
+		if (entry =3D=3D NULL)
+			break;
+		entry->part.start =3D le32toh(part->p_offset) - raw_offset;
+		entry->part.end =3D entry->part.start +
+		    le32toh(part->p_size) + 1;
+		entry->part.type =3D bsd_parttype(part->p_fstype);
+		entry->part.index =3D i; /* starts from zero */
+		entry->type.bsd =3D part->p_fstype;
+		STAILQ_INSERT_TAIL(&table->entries, entry, entry);
+		DEBUG("new BSD partition added");
+	}
+	table->type =3D PTABLE_BSD;
+out:
+	free(buf);
+	return (table);
+}
+
+#ifdef LOADER_VTOC8_SUPPORT
+static enum partition_type
+vtoc8_parttype(uint16_t type)
+{
+
+	switch (type) {
+	case VTOC_TAG_FREEBSD_NANDFS:
+		return (PART_FREEBSD_NANDFS);
+	case VTOC_TAG_FREEBSD_SWAP:
+		return (PART_FREEBSD_SWAP);
+	case VTOC_TAG_FREEBSD_UFS:
+		return (PART_FREEBSD_UFS);
+	case VTOC_TAG_FREEBSD_VINUM:
+		return (PART_FREEBSD_VINUM);
+	case VTOC_TAG_FREEBSD_ZFS:
+		return (PART_FREEBSD_ZFS);
+	};
+	return (PART_UNKNOWN);
+}
+
+static struct ptable*
+ptable_vtoc8read(struct ptable *table, void *dev, diskread_t dread)
+{
+	struct pentry *entry;
+	struct vtoc8 *dl;
+	u_char *buf;
+	uint16_t sum, heads, sectors;
+	int i;
+
+	if (table->sectorsize !=3D sizeof(struct vtoc8))
+		return (table);
+	buf =3D malloc(table->sectorsize);
+	if (buf =3D=3D NULL)
+		return (table);
+	if (dread(dev, buf, 1, 0) !=3D 0) {
+		DEBUG("read failed");
+		ptable_close(table);
+		table =3D NULL;
+		goto out;
+	}
+	dl =3D (struct vtoc8 *)buf;
+	/* Check the sum */
+	for (i =3D sum =3D 0; i < sizeof(struct vtoc8); i +=3D sizeof(sum))
+		sum ^=3D be16dec(buf + i);
+	if (sum !=3D 0) {
+		DEBUG("incorrect checksum");
+		goto out;
+	}
+	if (be16toh(dl->nparts) !=3D VTOC8_NPARTS) {
+		DEBUG("invalid number of entries");
+		goto out;
+	}
+	sectors =3D be16toh(dl->nsecs);
+	heads =3D be16toh(dl->nheads);
+	if (sectors * heads =3D=3D 0) {
+		DEBUG("invalid geometry");
+		goto out;
+	}
+	for (i =3D 0; i < VTOC8_NPARTS; i++) {
+		dl->part[i].tag =3D be16toh(dl->part[i].tag);
+		if (i =3D=3D VTOC_RAW_PART ||
+		    dl->part[i].tag =3D=3D VTOC_TAG_UNASSIGNED)
+			continue;
+		entry =3D malloc(sizeof(*entry));
+		if (entry =3D=3D NULL)
+			break;
+		entry->part.start =3D be32toh(dl->map[i].cyl) * heads * sectors;
+		entry->part.end =3D be32toh(dl->map[i].nblks) +
+		    entry->part.start - 1;
+		entry->part.type =3D vtoc8_parttype(dl->part[i].tag);
+		entry->part.index =3D i; /* starts from zero */
+		entry->type.vtoc8 =3D dl->part[i].tag;
+		STAILQ_INSERT_TAIL(&table->entries, entry, entry);
+		DEBUG("new VTOC8 partition added");
+	}
+	table->type =3D PTABLE_VTOC8;
+out:
+	free(buf);
+	return (table);
+
+}
+#endif /* LOADER_VTOC8_SUPPORT */
+
+struct ptable*
+ptable_open(void *dev, off_t sectors, uint16_t sectorsize,
+    diskread_t *dread)
+{
+	struct dos_partition *dp;
+	struct ptable *table;
+	u_char *buf;
+	int i, count;
+#ifdef LOADER_MBR_SUPPORT
+	struct pentry *entry;
+	uint32_t start, end;
+	int has_ext;
+#endif
+	table =3D NULL;
+	buf =3D malloc(sectorsize);
+	if (buf =3D=3D NULL)
+		return (NULL);
+	/* First, read the MBR. */
+	if (dread(dev, buf, 1, DOSBBSECTOR) !=3D 0) {
+		DEBUG("read failed");
+		goto out;
+	}
+
+	table =3D malloc(sizeof(*table));
+	if (table =3D=3D NULL)
+		goto out;
+	table->sectors =3D sectors;
+	table->sectorsize =3D sectorsize;
+	table->type =3D PTABLE_NONE;
+	STAILQ_INIT(&table->entries);
+
+#ifdef LOADER_VTOC8_SUPPORT
+	if (be16dec(buf + offsetof(struct vtoc8, magic)) =3D=3D VTOC_MAGIC) {
+		if (ptable_vtoc8read(table, dev, dread) =3D=3D NULL) {
+			/* Read error. */
+			table =3D NULL;
+			goto out;
+		} else if (table->type =3D=3D PTABLE_VTOC8)
+			goto out;
+	}
+#endif
+	/* Check the BSD label. */
+	if (ptable_bsdread(table, dev, dread) =3D=3D NULL) { /* Read error. */
+		table =3D NULL;
+		goto out;
+	} else if (table->type =3D=3D PTABLE_BSD)
+		goto out;
+
+#if defined(LOADER_GPT_SUPPORT) || defined(LOADER_MBR_SUPPORT)
+	/* Check the MBR magic. */
+	if (buf[DOSMAGICOFFSET] !=3D 0x55 ||
+	    buf[DOSMAGICOFFSET + 1] !=3D 0xaa) {
+		DEBUG("magic sequence not found");
+		goto out;
+	}
+	/* Check that we have PMBR. Also do some validation. */
+	dp =3D (struct dos_partition *)(buf + DOSPARTOFF);
+	for (i =3D 0, count =3D 0; i < NDOSPART; i++) {
+		if (dp[i].dp_flag !=3D 0 && dp[i].dp_flag !=3D 0x80) {
+			DEBUG("invalid partition flag %x", dp[i].dp_flag);
+			break;
+		}
+#ifdef LOADER_GPT_SUPPORT
+		if (dp[i].dp_typ =3D=3D DOSPTYP_PMBR) {
+			table->type =3D PTABLE_GPT;
+			DEBUG("PMBR detected");
+		}
+#endif
+		if (dp[i].dp_typ !=3D 0)
+			count++;
+	}
+	/* Do we have some invalid values? */
+	if (i !=3D NDOSPART ||
+	    (table->type =3D=3D PTABLE_GPT && count > 1)) {
+		table->type =3D PTABLE_NONE;
+		DEBUG("invalid values detected, ignore partition table");
+		goto out;
+	}
+#ifdef LOADER_GPT_SUPPORT
+	if (table->type =3D=3D PTABLE_GPT) {
+		table =3D ptable_gptread(table, dev, dread);
+		goto out;
+	}
+#endif
+#ifdef LOADER_MBR_SUPPORT
+	/* Read MBR. */
+	table->type =3D PTABLE_MBR;
+	for (i =3D has_ext =3D 0; i < NDOSPART; i++) {
+		if (dp[i].dp_typ =3D=3D 0)
+			continue;
+		start =3D le32toh(dp[i].dp_start);
+		end =3D le32toh(dp[i].dp_size);
+		if (start =3D=3D 0 || end =3D=3D 0)
+			continue;
+		if (start + end - 1 >=3D sectors)
+			continue;	/* XXX: ignore */
+		if (dp[i].dp_typ =3D=3D DOSPTYP_EXT ||
+		    dp[i].dp_typ =3D=3D DOSPTYP_EXTLBA)
+			has_ext =3D 1;
+		entry =3D malloc(sizeof(*entry));
+		if (entry =3D=3D NULL)
+			break;
+		entry->part.start =3D start;
+		entry->part.end =3D start + end - 1;
+		entry->part.index =3D i + 1;
+		entry->part.type =3D mbr_parttype(dp[i].dp_typ);
+		entry->flags =3D dp[i].dp_flag;
+		entry->type.mbr =3D dp[i].dp_typ;
+		STAILQ_INSERT_TAIL(&table->entries, entry, entry);
+		DEBUG("new MBR partition added");
+	}
+	if (has_ext) {
+		table =3D ptable_ebrread(table, dev, dread);
+		/* FALLTHROUGH */
+	}
+#endif /* LOADER_MBR_SUPPORT */
+#endif /* LOADER_MBR_SUPPORT || LOADER_GPT_SUPPORT */
+out:
+	free(buf);
+	return (table);
+}
+
+void
+ptable_close(struct ptable *table)
+{
+	struct pentry *entry;
+
+	while (!STAILQ_EMPTY(&table->entries)) {
+		entry =3D STAILQ_FIRST(&table->entries);
+		STAILQ_REMOVE_HEAD(&table->entries, entry);
+		free(entry);
+	}
+	free(table);
+}
+
+enum ptable_type
+ptable_gettype(const struct ptable *table)
+{
+
+	return (table->type);
+}
+
+int
+ptable_getpart(const struct ptable *table, struct ptable_entry *part, int =
index)
+{
+	struct pentry *entry;
+
+	if (part =3D=3D NULL || table =3D=3D NULL)
+		return (EINVAL);
+
+	STAILQ_FOREACH(entry, &table->entries, entry) {
+		if (entry->part.index !=3D index)
+			continue;
+		memcpy(part, &entry->part, sizeof(*part));
+		return (0);
+	}
+	return (ENOENT);
+}
+
+/*
+ * Search for a slice with the following preferences:
+ *
+ * 1: Active FreeBSD slice
+ * 2: Non-active FreeBSD slice
+ * 3: Active Linux slice
+ * 4: non-active Linux slice
+ * 5: Active FAT/FAT32 slice
+ * 6: non-active FAT/FAT32 slice
+ */
+#define PREF_RAWDISK	0
+#define PREF_FBSD_ACT	1
+#define PREF_FBSD	2
+#define PREF_LINUX_ACT	3
+#define PREF_LINUX	4
+#define PREF_DOS_ACT	5
+#define PREF_DOS	6
+#define PREF_NONE	7
+int
+ptable_getbestpart(const struct ptable *table, struct ptable_entry *part)
+{
+	struct pentry *entry, *best;
+	int pref, preflevel;
+
+	if (part =3D=3D NULL || table =3D=3D NULL)
+		return (EINVAL);
+
+	best =3D NULL;
+	preflevel =3D pref =3D PREF_NONE;
+	STAILQ_FOREACH(entry, &table->entries, entry) {
+#ifdef LOADER_MBR_SUPPORT
+		if (table->type =3D=3D PTABLE_MBR) {
+			switch (entry->type.mbr) {
+			case DOSPTYP_386BSD:
+				pref =3D entry->flags & 0x80 ? PREF_FBSD_ACT:
+				    PREF_FBSD;
+				break;
+			case DOSPTYP_LINUX:
+				pref =3D entry->flags & 0x80 ? PREF_LINUX_ACT:
+				    PREF_LINUX;
+				break;
+			case 0x01:		/* DOS/Windows */
+			case 0x04:
+			case 0x06:
+			case 0x0c:
+			case 0x0e:
+			case DOSPTYP_FAT32:
+				pref =3D entry->flags & 0x80 ? PREF_DOS_ACT:
+				    PREF_DOS;
+				break;
+			default:
+				pref =3D PREF_NONE;
+			}
+		}
+#endif /* LOADER_MBR_SUPPORT */
+#ifdef LOADER_GPT_SUPPORT
+		if (table->type =3D=3D PTABLE_GPT) {
+			if (entry->part.type =3D=3D PART_DOS)
+				pref =3D PREF_DOS;
+			else if (entry->part.type =3D=3D PART_FREEBSD_UFS ||
+			    entry->part.type =3D=3D PART_FREEBSD_ZFS)
+				pref =3D PREF_FBSD;
+			else
+				pref =3D PREF_NONE;
+		}
+#endif /* LOADER_GPT_SUPPORT */
+		if (pref < preflevel) {
+			preflevel =3D pref;
+			best =3D entry;
+		}
+	}
+	if (best !=3D NULL) {
+		memcpy(part, &best->part, sizeof(*part));
+		return (0);
+	}
+	return (ENOENT);
+}
+
+void
+ptable_iterate(const struct ptable *table, void *arg, ptable_iterate_t *it=
er)
+{
+	struct pentry *entry;
+	char name[32];
+
+	name[0] =3D '\0';
+	STAILQ_FOREACH(entry, &table->entries, entry) {
+#ifdef LOADER_MBR_SUPPORT
+		if (table->type =3D=3D PTABLE_MBR)
+			sprintf(name, "s%d", entry->part.index);
+		else
+#endif
+#ifdef LOADER_GPT_SUPPORT
+		if (table->type =3D=3D PTABLE_GPT)
+			sprintf(name, "p%d", entry->part.index);
+		else
+#endif
+#ifdef LOADER_VTOC8_SUPPORT
+		if (table->type =3D=3D PTABLE_VTOC8)
+			sprintf(name, "%c", (u_char) 'a' +
+			    entry->part.index);
+		else
+#endif
+		if (table->type =3D=3D PTABLE_BSD)
+			sprintf(name, "%c", (u_char) 'a' +
+			    entry->part.index);
+		iter(arg, name, &entry->part);
+	}
+}
+
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/boot/common/part.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/head/sys/boot/common/part.h	Fri Aug 10 14:19:25 2012 +0300
@@ -0,0 +1,82 @@
+/*-
+ * Copyright (c) 2012 Andrey V. Elsukov <ae at FreeBSD.org>
+ * 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 AUTHORS 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 PURP=
OSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENT=
IAL
+ * 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, STR=
ICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY W=
AY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * $FreeBSD: head/sys/boot/common/part.h 239054 2012-08-05 11:29:44Z ae $
+ */
+
+#ifndef _PART_H_
+#define	_PART_H_
+
+struct ptable;
+
+enum ptable_type {
+	PTABLE_NONE,
+	PTABLE_BSD,
+	PTABLE_MBR,
+	PTABLE_GPT,
+	PTABLE_VTOC8
+};
+
+enum partition_type {
+	PART_UNKNOWN,
+	PART_EFI,
+	PART_FREEBSD,
+	PART_FREEBSD_BOOT,
+	PART_FREEBSD_NANDFS,
+	PART_FREEBSD_UFS,
+	PART_FREEBSD_ZFS,
+	PART_FREEBSD_SWAP,
+	PART_FREEBSD_VINUM,
+	PART_LINUX,
+	PART_LINUX_SWAP,
+	PART_DOS,
+};
+
+struct ptable_entry {
+	uint64_t		start;
+	uint64_t		end;
+	int			index;
+	enum partition_type	type;
+};
+
+/* The offset and size are in sectors */
+typedef int (diskread_t)(void *arg, void *buf, size_t blocks, off_t offset=
);
+typedef void (ptable_iterate_t)(void *arg, const char *partname,
+    const struct ptable_entry *part);
+
+struct ptable *ptable_open(void *dev, off_t sectors, uint16_t sectorsize,
+    diskread_t *dread);
+void ptable_close(struct ptable *table);
+enum ptable_type ptable_gettype(const struct ptable *table);
+
+int ptable_getpart(const struct ptable *table, struct ptable_entry *part,
+    int index);
+int ptable_getbestpart(const struct ptable *table, struct ptable_entry *pa=
rt);
+
+void ptable_iterate(const struct ptable *table, void *arg,
+    ptable_iterate_t *iter);
+const char *parttype2str(enum partition_type type);
+
+#endif	/* !_PART_H_ */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/boot/ficl/Makefile
--- a/head/sys/boot/ficl/Makefile	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/boot/ficl/Makefile	Fri Aug 10 14:19:25 2012 +0300
@@ -1,4 +1,4 @@
-# $FreeBSD$
+# $FreeBSD: head/sys/boot/ficl/Makefile 238795 2012-07-26 10:10:54Z ache $
 #
 .PATH: ${.CURDIR}/${MACHINE_CPUARCH:S/amd64/i386/}
 BASE_SRCS=3D	dict.c ficl.c fileaccess.c float.c loader.c math64.c \
@@ -54,9 +54,11 @@
 	    | awk -f softcore.awk -v datestamp=3D"`LC_ALL=3DC date`") > ${.TARGET}
=20
 .if ${MACHINE_CPUARCH} =3D=3D "amd64"
+.if !exists(machine)
 ${SRCS:M*.c:R:S/$/.o/g}: machine
=20
 beforedepend ${OBJS}: machine
+.endif
=20
 machine:
 	ln -sf ${.CURDIR}/../../i386/include machine
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/boot/i386/libi386/Makefile
--- a/head/sys/boot/i386/libi386/Makefile	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/boot/i386/libi386/Makefile	Fri Aug 10 14:19:25 2012 +0300
@@ -1,4 +1,4 @@
-# $FreeBSD: head/sys/boot/i386/libi386/Makefile 235329 2012-05-12 09:03:30=
Z avg $
+# $FreeBSD: head/sys/boot/i386/libi386/Makefile 239066 2012-08-05 14:37:48=
Z ae $
 #
 LIB=3D			i386
 INTERNALLIB=3D
@@ -39,10 +39,6 @@
 .endif
 .endif
=20
-.if !defined(LOADER_NO_GPT_SUPPORT)
-CFLAGS+=3D	-DLOADER_GPT_SUPPORT
-.endif
-
 # Include simple terminal emulation (cons25-compatible)
 CFLAGS+=3D -DTERM_EMU
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/boot/i386/libi386/biosdisk.c
--- a/head/sys/boot/i386/libi386/biosdisk.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/boot/i386/libi386/biosdisk.c	Fri Aug 10 14:19:25 2012 +0300
@@ -1,5 +1,6 @@
 /*-
  * Copyright (c) 1998 Michael Smith <msmith at freebsd.org>
+ * Copyright (c) 2012 Andrey V. Elsukov <ae at FreeBSD.org>
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -25,7 +26,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/boot/i386/libi386/biosdisk.c 235155 2012-05-0=
9 08:05:50Z avg $");
+__FBSDID("$FreeBSD: head/sys/boot/i386/libi386/biosdisk.c 239066 2012-08-0=
5 14:37:48Z ae $");
=20
 /*
  * BIOS disk device handling.
@@ -37,21 +38,19 @@
  *
  */
=20
+#include <sys/disk.h>
 #include <stand.h>
-
-#include <sys/disklabel.h>
-#include <sys/diskmbr.h>
-#include <sys/gpt.h>
 #include <machine/bootinfo.h>
-
 #include <stdarg.h>
-#include <uuid.h>
=20
 #include <bootstrap.h>
 #include <btxv86.h>
 #include <edd.h>
+#include "disk.h"
 #include "libi386.h"
=20
+CTASSERT(sizeof(struct i386_devdesc) >=3D sizeof(struct disk_devdesc));
+
 #define BIOS_NUMDRIVES		0x475
 #define BIOSDISK_SECSIZE	512
 #define BUFSIZE			(1 * BIOSDISK_SECSIZE)
@@ -68,174 +67,118 @@
 # define DEBUG(fmt, args...)
 #endif
=20
-#ifdef LOADER_GPT_SUPPORT
-struct gpt_part {
-    int		gp_index;
-    uuid_t	gp_type;
-    uint64_t	gp_start;
-    uint64_t	gp_end;
-};
-#endif
-
-struct open_disk {
-    int			od_dkunit;		/* disk unit number */
-    int			od_unit;		/* BIOS unit number */
-    int			od_cyl;			/* BIOS geometry */
-    int			od_hds;
-    int			od_sec;
-    daddr_t			od_boff;		/* block offset from beginning of BIOS disk */
-    int			od_flags;
-#define BD_MODEINT13		0x0000
-#define BD_MODEEDD1		0x0001
-#define BD_MODEEDD3		0x0002
-#define BD_MODEMASK		0x0003
-#define BD_FLOPPY		0x0004
-#define BD_LABELOK		0x0008
-#define BD_PARTTABOK		0x0010
-#ifdef LOADER_GPT_SUPPORT
-#define	BD_GPTOK		0x0020
-#endif
-    union {
-	struct {
-	    struct disklabel		mbr_disklabel;
-	    int				mbr_nslices;	/* slice count */
-	    struct dos_partition	mbr_slicetab[NEXTDOSPART];
-	} _mbr;
-#ifdef LOADER_GPT_SUPPORT
-	struct {
-	    int				gpt_nparts;	=09
-	    struct gpt_part		*gpt_partitions;
-	} _gpt;
-#endif
-    } _data;
-};
-
-#define	od_disklabel		_data._mbr.mbr_disklabel
-#define	od_nslices		_data._mbr.mbr_nslices
-#define	od_slicetab		_data._mbr.mbr_slicetab
-#ifdef LOADER_GPT_SUPPORT
-#define	od_nparts		_data._gpt.gpt_nparts
-#define	od_partitions		_data._gpt.gpt_partitions
-#endif
-
 /*
  * List of BIOS devices, translation from disk unit number to
  * BIOS unit number.
  */
 static struct bdinfo
 {
-    int		bd_unit;		/* BIOS unit number */
-    int		bd_flags;
-    int		bd_type;		/* BIOS 'drive type' (floppy only) */
+	int		bd_unit;	/* BIOS unit number */
+	int		bd_cyl;		/* BIOS geometry */
+	int		bd_hds;
+	int		bd_sec;
+	int		bd_flags;
+#define	BD_MODEINT13	0x0000
+#define	BD_MODEEDD1	0x0001
+#define	BD_MODEEDD3	0x0002
+#define	BD_MODEMASK	0x0003
+#define	BD_FLOPPY	0x0004
+	int		bd_type;	/* BIOS 'drive type' (floppy only) */
+	uint16_t	bd_sectorsize;	/* Sector size */
+	uint64_t	bd_sectors;	/* Disk size */
 } bdinfo [MAXBDDEV];
 static int nbdinfo =3D 0;
=20
-static int	bd_getgeom(struct open_disk *od);
-static int	bd_read(struct open_disk *od, daddr_t dblk, int blks,
-		    caddr_t dest);
-static int	bd_write(struct open_disk *od, daddr_t dblk, int blks,
-		    caddr_t dest);
+#define	BD(dev)		(bdinfo[(dev)->d_unit])
=20
-static int	bd_int13probe(struct bdinfo *bd);
+static int bd_read(struct disk_devdesc *dev, daddr_t dblk, int blks,
+    caddr_t dest);
+static int bd_write(struct disk_devdesc *dev, daddr_t dblk, int blks,
+    caddr_t dest);
+static int bd_int13probe(struct bdinfo *bd);
=20
-#ifdef LOADER_GPT_SUPPORT
-static void	bd_printgptpart(struct open_disk *od, struct gpt_part *gp,
-		    char *prefix, int verbose);
-#endif
-static void	bd_printslice(struct open_disk *od, struct dos_partition *dp,
-		    char *prefix, int verbose);
-static void	bd_printbsdslice(struct open_disk *od, daddr_t offset,
-		    char *prefix, int verbose);
-
-static int	bd_init(void);
-static int	bd_strategy(void *devdata, int flag, daddr_t dblk,
-		    size_t size, char *buf, size_t *rsize);
-static int	bd_realstrategy(void *devdata, int flag, daddr_t dblk,
-		    size_t size, char *buf, size_t *rsize);
-static int	bd_open(struct open_file *f, ...);
-static int	bd_close(struct open_file *f);
-static void	bd_print(int verbose);
+static int bd_init(void);
+static int bd_strategy(void *devdata, int flag, daddr_t dblk, size_t size,
+    char *buf, size_t *rsize);
+static int bd_realstrategy(void *devdata, int flag, daddr_t dblk,
+    size_t size, char *buf, size_t *rsize);
+static int bd_open(struct open_file *f, ...);
+static int bd_close(struct open_file *f);
+static int bd_ioctl(struct open_file *f, u_long cmd, void *data);
+static void bd_print(int verbose);
=20
 struct devsw biosdisk =3D {
-    "disk",=20
-    DEVT_DISK,=20
-    bd_init,
-    bd_strategy,=20
-    bd_open,=20
-    bd_close,=20
-    noioctl,
-    bd_print,
-    NULL
+	"disk",
+	DEVT_DISK,
+	bd_init,
+	bd_strategy,
+	bd_open,
+	bd_close,
+	bd_ioctl,
+	bd_print,
+	NULL
 };
=20
-static int	bd_opendisk(struct open_disk **odp, struct i386_devdesc *dev);
-static void	bd_closedisk(struct open_disk *od);
-static int	bd_open_mbr(struct open_disk *od, struct i386_devdesc *dev);
-static int	bd_bestslice(struct open_disk *od);
-static void	bd_checkextended(struct open_disk *od, int slicenum);
-#ifdef LOADER_GPT_SUPPORT
-static int	bd_open_gpt(struct open_disk *od, struct i386_devdesc *dev);
-static struct gpt_part *bd_best_gptpart(struct open_disk *od);
-#endif
-
 /*
  * Translate between BIOS device numbers and our private unit numbers.
  */
 int
 bd_bios2unit(int biosdev)
 {
-    int		i;
-   =20
-    DEBUG("looking for bios device 0x%x", biosdev);
-    for (i =3D 0; i < nbdinfo; i++) {
-	DEBUG("bd unit %d is BIOS device 0x%x", i, bdinfo[i].bd_unit);
-	if (bdinfo[i].bd_unit =3D=3D biosdev)
-	    return(i);
-    }
-    return(-1);
+	int i;
+
+	DEBUG("looking for bios device 0x%x", biosdev);
+	for (i =3D 0; i < nbdinfo; i++) {
+		DEBUG("bd unit %d is BIOS device 0x%x", i, bdinfo[i].bd_unit);
+		if (bdinfo[i].bd_unit =3D=3D biosdev)
+			return (i);
+	}
+	return (-1);
 }
=20
 int
 bd_unit2bios(int unit)
 {
-    if ((unit >=3D 0) && (unit < nbdinfo))
-	return(bdinfo[unit].bd_unit);
-    return(-1);
+
+	if ((unit >=3D 0) && (unit < nbdinfo))
+		return (bdinfo[unit].bd_unit);
+	return (-1);
 }
=20
-/*   =20
+/*
  * Quiz the BIOS for disk devices, save a little info about them.
  */
 static int
-bd_init(void)=20
+bd_init(void)
 {
-    int		base, unit, nfd =3D 0;
+	int base, unit, nfd =3D 0;
=20
-    /* sequence 0, 0x80 */
-    for (base =3D 0; base <=3D 0x80; base +=3D 0x80) {
-	for (unit =3D base; (nbdinfo < MAXBDDEV); unit++) {
+	/* sequence 0, 0x80 */
+	for (base =3D 0; base <=3D 0x80; base +=3D 0x80) {
+		for (unit =3D base; (nbdinfo < MAXBDDEV); unit++) {
 #ifndef VIRTUALBOX
-	    /* check the BIOS equipment list for number of fixed disks */
-	    if((base =3D=3D 0x80) &&
-	       (nfd >=3D *(unsigned char *)PTOV(BIOS_NUMDRIVES)))
-		break;
+			/*
+			 * Check the BIOS equipment list for number
+			 * of fixed disks.
+			 */
+			if(base =3D=3D 0x80 &&
+			    (nfd >=3D *(unsigned char *)PTOV(BIOS_NUMDRIVES)))
+				break;
 #endif
+			bdinfo[nbdinfo].bd_unit =3D unit;
+			bdinfo[nbdinfo].bd_flags =3D unit < 0x80 ? BD_FLOPPY: 0;
+			if (!bd_int13probe(&bdinfo[nbdinfo]))
+				break;
=20
-	    bdinfo[nbdinfo].bd_unit =3D unit;
-	    bdinfo[nbdinfo].bd_flags =3D (unit < 0x80) ? BD_FLOPPY : 0;
-
-	    if (!bd_int13probe(&bdinfo[nbdinfo]))
-		break;
-
-	    /* XXX we need "disk aliases" to make this simpler */
-	    printf("BIOS drive %c: is disk%d\n",=20
-		   (unit < 0x80) ? ('A' + unit) : ('C' + unit - 0x80), nbdinfo);
-	    nbdinfo++;
-	    if (base =3D=3D 0x80)
-	        nfd++;
+			/* XXX we need "disk aliases" to make this simpler */
+			printf("BIOS drive %c: is disk%d\n", (unit < 0x80) ?
+			    ('A' + unit): ('C' + unit - 0x80), nbdinfo);
+			nbdinfo++;
+			if (base =3D=3D 0x80)
+				nfd++;
+		}
 	}
-    }
-    return(0);
+	return(0);
 }
=20
 /*
@@ -244,36 +187,60 @@
 static int
 bd_int13probe(struct bdinfo *bd)
 {
-    v86.ctl =3D V86_FLAGS;
-    v86.addr =3D 0x13;
-    v86.eax =3D 0x800;
-    v86.edx =3D bd->bd_unit;
-    v86int();
-   =20
-    if (!(V86_CY(v86.efl)) &&				/* carry clear */
-	((v86.edx & 0xff) > ((unsigned)bd->bd_unit & 0x7f))) {	/* unit # OK */
-	if ((v86.ecx & 0x3f) =3D=3D 0) {			/* absurd sector size */
-		DEBUG("Invalid geometry for unit %d", bd->bd_unit);
-		return(0);				/* skip device */
-	}
+	struct edd_params params;
+
+	v86.ctl =3D V86_FLAGS;
+	v86.addr =3D 0x13;
+	v86.eax =3D 0x800;
+	v86.edx =3D bd->bd_unit;
+	v86int();
+
+	if (V86_CY(v86.efl) ||	/* carry set */
+	    (v86.ecx & 0x3f) =3D=3D 0 || /* absurd sector number */
+	    (v86.edx & 0xff) <=3D (unsigned)(bd->bd_unit & 0x7f))	/* unit # bad */
+		return (0);	/* skip device */
+
+	/* Convert max cyl # -> # of cylinders */
+	bd->bd_cyl =3D ((v86.ecx & 0xc0) << 2) + ((v86.ecx & 0xff00) >> 8) + 1;
+	/* Convert max head # -> # of heads */
+	bd->bd_hds =3D ((v86.edx & 0xff00) >> 8) + 1;
+	bd->bd_sec =3D v86.ecx & 0x3f;
+	bd->bd_type =3D v86.ebx & 0xff;
 	bd->bd_flags |=3D BD_MODEINT13;
-	bd->bd_type =3D v86.ebx & 0xff;
+
+	/* Calculate sectors count from the geometry */
+	bd->bd_sectors =3D bd->bd_cyl * bd->bd_hds * bd->bd_sec;
+	bd->bd_sectorsize =3D BIOSDISK_SECSIZE;
+	DEBUG("unit 0x%x geometry %d/%d/%d", bd->bd_unit, bd->bd_cyl,
+	    bd->bd_hds, bd->bd_sec);
=20
 	/* Determine if we can use EDD with this device. */
 	v86.eax =3D 0x4100;
 	v86.edx =3D bd->bd_unit;
 	v86.ebx =3D 0x55aa;
 	v86int();
-	if (!(V86_CY(v86.efl)) &&			/* carry clear */
-	    ((v86.ebx & 0xffff) =3D=3D 0xaa55) &&		/* signature */
-	    (v86.ecx & EDD_INTERFACE_FIXED_DISK)) {	/* packets mode ok */
-	    bd->bd_flags |=3D BD_MODEEDD1;
-	    if ((v86.eax & 0xff00) >=3D 0x3000)
-	        bd->bd_flags |=3D BD_MODEEDD3;
+	if (V86_CY(v86.efl) ||	/* carry set */
+	    (v86.ebx & 0xffff) !=3D 0xaa55 || /* signature */
+	    (v86.ecx & EDD_INTERFACE_FIXED_DISK) =3D=3D 0)
+		return (1);
+	/* EDD supported */
+	bd->bd_flags |=3D BD_MODEEDD1;
+	if ((v86.eax & 0xff00) >=3D 0x3000)
+		bd->bd_flags |=3D BD_MODEEDD3;
+	/* Get disk params */
+	params.len =3D sizeof(struct edd_params);
+	v86.ctl =3D V86_FLAGS;
+	v86.addr =3D 0x13;
+	v86.eax =3D 0x4800;
+	v86.edx =3D bd->bd_unit;
+	v86.ds =3D VTOPSEG(&params);
+	v86.esi =3D VTOPOFF(&params);
+	v86int();
+	if (!V86_CY(v86.efl)) {
+		bd->bd_sectors =3D params.sectors;
+		bd->bd_sectorsize =3D params.sector_size;
 	}
-	return(1);
-    }
-    return(0);
+	return (1);
 }
=20
 /*
@@ -282,237 +249,29 @@
 static void
 bd_print(int verbose)
 {
-    int				i, j;
-    char			line[80];
-    struct i386_devdesc		dev;
-    struct open_disk		*od;
-    struct dos_partition	*dptr;
-   =20
-    for (i =3D 0; i < nbdinfo; i++) {
-	sprintf(line, "    disk%d:   BIOS drive %c:\n", i,=20
-		(bdinfo[i].bd_unit < 0x80) ? ('A' + bdinfo[i].bd_unit) : ('C' + bdinfo[i=
].bd_unit - 0x80));
-	pager_output(line);
+	static char line[80];
+	struct disk_devdesc dev;
+	int i;
=20
-	/* try to open the whole disk */
-	dev.d_unit =3D i;
-	dev.d_kind.biosdisk.slice =3D -1;
-	dev.d_kind.biosdisk.partition =3D -1;
-=09
-	if (!bd_opendisk(&od, &dev)) {
-
-#ifdef LOADER_GPT_SUPPORT
-	    /* Do we have a GPT table? */
-	    if (od->od_flags & BD_GPTOK) {
-		for (j =3D 0; j < od->od_nparts; j++) {
-		    sprintf(line, "      disk%dp%d", i,
-			od->od_partitions[j].gp_index);
-		    bd_printgptpart(od, &od->od_partitions[j], line, verbose);
+	for (i =3D 0; i < nbdinfo; i++) {
+		sprintf(line, "    disk%d:   BIOS drive %c:\n", i,
+		    (bdinfo[i].bd_unit < 0x80) ? ('A' + bdinfo[i].bd_unit):
+		    ('C' + bdinfo[i].bd_unit - 0x80));
+		pager_output(line);
+		dev.d_dev =3D &biosdisk;
+		dev.d_unit =3D i;
+		dev.d_slice =3D -1;
+		dev.d_partition =3D -1;
+		if (disk_open(&dev,
+		    bdinfo[i].bd_sectorsize * bdinfo[i].bd_sectors,
+		    bdinfo[i].bd_sectorsize) =3D=3D 0) {
+			sprintf(line, "    disk%d", i);
+			disk_print(&dev, line, verbose);
+			disk_close(&dev);
 		}
-	    } else
-#endif
-	    /* Do we have a partition table? */
-	    if (od->od_flags & BD_PARTTABOK) {
-		dptr =3D &od->od_slicetab[0];
-
-		/* Check for a "dedicated" disk */
-		if ((dptr[3].dp_typ =3D=3D DOSPTYP_386BSD) &&
-		    (dptr[3].dp_start =3D=3D 0) &&
-		    (dptr[3].dp_size =3D=3D 50000)) {
-		    sprintf(line, "      disk%d", i);
-		    bd_printbsdslice(od, 0, line, verbose);
-		} else {
-		    for (j =3D 0; j < od->od_nslices; j++) {
-		        sprintf(line, "      disk%ds%d", i, j + 1);
-			bd_printslice(od, &dptr[j], line, verbose);
-                    }
-                }
-	    }
-	    bd_closedisk(od);
 	}
-    }
 }
=20
-/* Given a size in 512 byte sectors, convert it to a human-readable number=
. */
-static char *
-display_size(uint64_t size)
-{
-    static char buf[80];
-    char unit;
-
-    size /=3D 2;
-    unit =3D 'K';
-    if (size >=3D 10485760000LL) {
-	size /=3D 1073741824;
-	unit =3D 'T';
-    } else if (size >=3D 10240000) {
-	size /=3D 1048576;
-	unit =3D 'G';
-    } else if (size >=3D 10000) {
-	size /=3D 1024;
-	unit =3D 'M';
-    }
-    sprintf(buf, "%.6ld%cB", (long)size, unit);
-    return (buf);
-}
-
-#ifdef LOADER_GPT_SUPPORT
-static uuid_t efi =3D GPT_ENT_TYPE_EFI;
-static uuid_t freebsd_boot =3D GPT_ENT_TYPE_FREEBSD_BOOT;
-static uuid_t freebsd_ufs =3D GPT_ENT_TYPE_FREEBSD_UFS;
-static uuid_t freebsd_swap =3D GPT_ENT_TYPE_FREEBSD_SWAP;
-static uuid_t freebsd_zfs =3D GPT_ENT_TYPE_FREEBSD_ZFS;
-static uuid_t ms_basic_data =3D GPT_ENT_TYPE_MS_BASIC_DATA;
-
-static void
-bd_printgptpart(struct open_disk *od, struct gpt_part *gp, char *prefix,
-    int verbose)
-{
-    char stats[80];
-    char line[96];
-
-    if (verbose)
-	sprintf(stats, " %s", display_size(gp->gp_end + 1 - gp->gp_start));
-    else
-	stats[0] =3D '\0';
-
-    if (uuid_equal(&gp->gp_type, &efi, NULL))
-	sprintf(line, "%s: EFI         %s\n", prefix, stats);
-    else if (uuid_equal(&gp->gp_type, &ms_basic_data, NULL))
-	sprintf(line, "%s: FAT/NTFS    %s\n", prefix, stats);
-    else if (uuid_equal(&gp->gp_type, &freebsd_boot, NULL))
-	sprintf(line, "%s: FreeBSD boot%s\n", prefix, stats);
-    else if (uuid_equal(&gp->gp_type, &freebsd_ufs, NULL))
-	sprintf(line, "%s: FreeBSD UFS %s\n", prefix, stats);
-    else if (uuid_equal(&gp->gp_type, &freebsd_zfs, NULL))
-	sprintf(line, "%s: FreeBSD ZFS %s\n", prefix, stats);
-    else if (uuid_equal(&gp->gp_type, &freebsd_swap, NULL))
-	sprintf(line, "%s: FreeBSD swap%s\n", prefix, stats);
-    else
-	sprintf(line, "%s: %08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x%s\n",
-	    prefix,
-	    gp->gp_type.time_low, gp->gp_type.time_mid,
-	    gp->gp_type.time_hi_and_version,
-	    gp->gp_type.clock_seq_hi_and_reserved, gp->gp_type.clock_seq_low,
-	    gp->gp_type.node[0], gp->gp_type.node[1], gp->gp_type.node[2],
-	    gp->gp_type.node[3], gp->gp_type.node[4], gp->gp_type.node[5],
-	    stats);
-    pager_output(line);
-}
-#endif
-
-/*
- * Print information about slices on a disk.  For the size calculations we
- * assume a 512 byte sector.
- */
-static void
-bd_printslice(struct open_disk *od, struct dos_partition *dp, char *prefix,
-	int verbose)
-{
-	char stats[80];
-	char line[80];
-
-	if (verbose)
-		sprintf(stats, " %s (%d - %d)", display_size(dp->dp_size),
-		    dp->dp_start, dp->dp_start + dp->dp_size);
-	else
-		stats[0] =3D '\0';
-
-	switch (dp->dp_typ) {
-	case DOSPTYP_386BSD:
-		bd_printbsdslice(od, (daddr_t)dp->dp_start, prefix, verbose);
-		return;
-	case DOSPTYP_LINSWP:
-		sprintf(line, "%s: Linux swap%s\n", prefix, stats);
-		break;
-	case DOSPTYP_LINUX:
-		/*
-		 * XXX
-		 * read the superblock to confirm this is an ext2fs partition?
-		 */
-		sprintf(line, "%s: ext2fs%s\n", prefix, stats);
-		break;
-	case 0x00:				/* unused partition */
-	case DOSPTYP_EXT:
-		return;
-	case 0x01:
-		sprintf(line, "%s: FAT-12%s\n", prefix, stats);
-		break;
-	case 0x04:
-	case 0x06:
-	case 0x0e:
-		sprintf(line, "%s: FAT-16%s\n", prefix, stats);
-		break;
-	case 0x07:
-		sprintf(line, "%s: NTFS/HPFS%s\n", prefix, stats);
-		break;
-	case 0x0b:
-	case 0x0c:
-		sprintf(line, "%s: FAT-32%s\n", prefix, stats);
-		break;
-	default:
-		sprintf(line, "%s: Unknown fs: 0x%x %s\n", prefix, dp->dp_typ,
-		    stats);
-	}
-	pager_output(line);
-}
-
-/*
- * Print out each valid partition in the disklabel of a FreeBSD slice.
- * For size calculations, we assume a 512 byte sector size.
- */
-static void
-bd_printbsdslice(struct open_disk *od, daddr_t offset, char *prefix,
-    int verbose)
-{
-    char		line[80];
-    char		buf[BIOSDISK_SECSIZE];
-    struct disklabel	*lp;
-    int			i;
-
-    /* read disklabel */
-    if (bd_read(od, offset + LABELSECTOR, 1, buf))
-	return;
-    lp =3D(struct disklabel *)(&buf[0]);
-    if (lp->d_magic !=3D DISKMAGIC) {
-	sprintf(line, "%s: FFS  bad disklabel\n", prefix);
-	pager_output(line);
-	return;
-    }
-   =20
-    /* Print partitions */
-    for (i =3D 0; i < lp->d_npartitions; i++) {
-	/*
-	 * For each partition, make sure we know what type of fs it is.  If
-	 * not, then skip it.  However, since floppies often have bogus
-	 * fstypes, print the 'a' partition on a floppy even if it is marked
-	 * unused.
-	 */
-	if ((lp->d_partitions[i].p_fstype =3D=3D FS_BSDFFS) ||
-            (lp->d_partitions[i].p_fstype =3D=3D FS_SWAP) ||
-            (lp->d_partitions[i].p_fstype =3D=3D FS_VINUM) ||
-	    ((lp->d_partitions[i].p_fstype =3D=3D FS_UNUSED) &&=20
-	     (od->od_flags & BD_FLOPPY) && (i =3D=3D 0))) {
-
-	    /* Only print out statistics in verbose mode */
-	    if (verbose)
-	        sprintf(line, "  %s%c: %s %s (%d - %d)\n", prefix, 'a' + i,
-		    (lp->d_partitions[i].p_fstype =3D=3D FS_SWAP) ? "swap " :=20
-		    (lp->d_partitions[i].p_fstype =3D=3D FS_VINUM) ? "vinum" :
-		    "FFS  ",
-		    display_size(lp->d_partitions[i].p_size),
-		    lp->d_partitions[i].p_offset,
-		    lp->d_partitions[i].p_offset + lp->d_partitions[i].p_size);
-	    else
-	        sprintf(line, "  %s%c: %s\n", prefix, 'a' + i,
-		    (lp->d_partitions[i].p_fstype =3D=3D FS_SWAP) ? "swap" :=20
-		    (lp->d_partitions[i].p_fstype =3D=3D FS_VINUM) ? "vinum" :
-		    "FFS");
-	    pager_output(line);
-	}
-    }
-}
-
-
 /*
  * Attempt to open the disk described by (dev) for use by (f).
  *
@@ -523,564 +282,83 @@
  *  sliced - are they after the first BSD slice, or the DOS
  *  slice before it?)
  */
-static int=20
+static int
 bd_open(struct open_file *f, ...)
 {
-    va_list			ap;
-    struct i386_devdesc		*dev;
-    struct open_disk		*od;
-    int				error;
+	struct disk_devdesc *dev;
+	va_list ap;
=20
-    va_start(ap, f);
-    dev =3D va_arg(ap, struct i386_devdesc *);
-    va_end(ap);
-    if ((error =3D bd_opendisk(&od, dev)))
-	return(error);
-   =20
-    /*
-     * Save our context
-     */
-    ((struct i386_devdesc *)(f->f_devdata))->d_kind.biosdisk.data =3D od;
-    DEBUG("open_disk %p, partition at 0x%x", od, od->od_boff);
-    return(0);
+	va_start(ap, f);
+	dev =3D va_arg(ap, struct disk_devdesc *);
+	va_end(ap);
+
+	if (dev->d_unit < 0 || dev->d_unit >=3D nbdinfo)
+		return (EIO);
+
+	return (disk_open(dev, BD(dev).bd_sectors * BD(dev).bd_sectorsize,
+	    BD(dev).bd_sectorsize));
 }
=20
 static int
-bd_opendisk(struct open_disk **odp, struct i386_devdesc *dev)
+bd_close(struct open_file *f)
 {
-    struct open_disk		*od;
-    int				error;
+	struct disk_devdesc *dev;
=20
-    if (dev->d_unit >=3D nbdinfo) {
-	DEBUG("attempt to open nonexistent disk");
-	return(ENXIO);
-    }
-   =20
-    od =3D (struct open_disk *)malloc(sizeof(struct open_disk));
-    if (!od) {
-	DEBUG("no memory");
-	return (ENOMEM);
-    }
-
-    /* Look up BIOS unit number, initalise open_disk structure */
-    od->od_dkunit =3D dev->d_unit;
-    od->od_unit =3D bdinfo[od->od_dkunit].bd_unit;
-    od->od_flags =3D bdinfo[od->od_dkunit].bd_flags;
-    od->od_boff =3D 0;
-    error =3D 0;
-    DEBUG("open '%s', unit 0x%x slice %d partition %d",
-	     i386_fmtdev(dev), dev->d_unit,=20
-	     dev->d_kind.biosdisk.slice, dev->d_kind.biosdisk.partition);
-
-    /* Get geometry for this open (removable device may have changed) */
-    if (bd_getgeom(od)) {
-	DEBUG("can't get geometry");
-	error =3D ENXIO;
-	goto out;
-    }
-
-    /* Determine disk layout. */
-#ifdef LOADER_GPT_SUPPORT
-    error =3D bd_open_gpt(od, dev);
-    if (error)
-#endif
-	error =3D bd_open_mbr(od, dev);
-   =20
- out:
-    if (error) {
-	free(od);
-    } else {
-	*odp =3D od;	/* return the open disk */
-    }
-    return(error);
+	dev =3D (struct disk_devdesc *)f->f_devdata;
+	return (disk_close(dev));
 }
=20
 static int
-bd_open_mbr(struct open_disk *od, struct i386_devdesc *dev)
+bd_ioctl(struct open_file *f, u_long cmd, void *data)
 {
-    struct dos_partition	*dptr;
-    struct disklabel		*lp;
-    int				sector, slice, i;
-    int				error;
-    char			buf[BUFSIZE];
+	struct disk_devdesc *dev;
=20
-    /*
-     * Following calculations attempt to determine the correct value
-     * for d->od_boff by looking for the slice and partition specified,
-     * or searching for reasonable defaults.
-     */
-
-    /*
-     * Find the slice in the DOS slice table.
-     */
-    od->od_nslices =3D 0;
-    if (bd_read(od, 0, 1, buf)) {
-	DEBUG("error reading MBR");
-	return (EIO);
-    }
-
-    /*=20
-     * Check the slice table magic.
-     */
-    if (((u_char)buf[0x1fe] !=3D 0x55) || ((u_char)buf[0x1ff] !=3D 0xaa)) {
-	/* If a slice number was explicitly supplied, this is an error */
-	if (dev->d_kind.biosdisk.slice > 0) {
-	    DEBUG("no slice table/MBR (no magic)");
-	    return (ENOENT);
+	dev =3D (struct disk_devdesc *)f->f_devdata;
+	switch (cmd) {
+	case DIOCGSECTORSIZE:
+		*(u_int *)data =3D BD(dev).bd_sectorsize;
+		break;
+	case DIOCGMEDIASIZE:
+		*(off_t *)data =3D BD(dev).bd_sectors * BD(dev).bd_sectorsize;
+		break;
+	default:
+		return (ENOTTY);
 	}
-	sector =3D 0;
-	goto unsliced;		/* may be a floppy */
-    }
-
-    /*
-     * copy the partition table, then pick up any extended partitions.
-     */
-    bcopy(buf + DOSPARTOFF, &od->od_slicetab,
-      sizeof(struct dos_partition) * NDOSPART);
-    od->od_nslices =3D 4;			/* extended slices start here */
-    for (i =3D 0; i < NDOSPART; i++)
-        bd_checkextended(od, i);
-    od->od_flags |=3D BD_PARTTABOK;
-    dptr =3D &od->od_slicetab[0];
-
-    /* Is this a request for the whole disk? */
-    if (dev->d_kind.biosdisk.slice =3D=3D -1) {
-	sector =3D 0;
-	goto unsliced;
-    }
-
-    /*
-     * if a slice number was supplied but not found, this is an error.
-     */
-    if (dev->d_kind.biosdisk.slice > 0) {
-        slice =3D dev->d_kind.biosdisk.slice - 1;
-        if (slice >=3D od->od_nslices) {
-            DEBUG("slice %d not found", slice);
-	    return (ENOENT);
-        }
-    }
-
-    /*
-     * Check for the historically bogus MBR found on true dedicated disks
-     */
-    if ((dptr[3].dp_typ =3D=3D DOSPTYP_386BSD) &&
-      (dptr[3].dp_start =3D=3D 0) &&
-      (dptr[3].dp_size =3D=3D 50000)) {
-        sector =3D 0;
-        goto unsliced;
-    }
-
-    /* Try to auto-detect the best slice; this should always give a slice =
number */
-    if (dev->d_kind.biosdisk.slice =3D=3D 0) {
-	slice =3D bd_bestslice(od);
-        if (slice =3D=3D -1) {
-	    return (ENOENT);
-        }
-        dev->d_kind.biosdisk.slice =3D slice;
-    }
-
-    dptr =3D &od->od_slicetab[0];
-    /*
-     * Accept the supplied slice number unequivocally (we may be looking
-     * at a DOS partition).
-     */
-    dptr +=3D (dev->d_kind.biosdisk.slice - 1);	/* we number 1-4, offsets =
are 0-3 */
-    sector =3D dptr->dp_start;
-    DEBUG("slice entry %d at %d, %d sectors", dev->d_kind.biosdisk.slice -=
 1, sector, dptr->dp_size);
-
-    /*
-     * If we are looking at a BSD slice, and the partition is < 0, assume =
the 'a' partition
-     */
-    if ((dptr->dp_typ =3D=3D DOSPTYP_386BSD) && (dev->d_kind.biosdisk.part=
ition < 0))
-	dev->d_kind.biosdisk.partition =3D 0;
-
- unsliced:
-    /*=20
-     * Now we have the slice offset, look for the partition in the disklab=
el if we have
-     * a partition to start with.
-     *
-     * XXX we might want to check the label checksum.
-     */
-    if (dev->d_kind.biosdisk.partition < 0) {
-	od->od_boff =3D sector;		/* no partition, must be after the slice */
-	DEBUG("opening raw slice");
-    } else {
-=09
-	if (bd_read(od, sector + LABELSECTOR, 1, buf)) {
-	    DEBUG("error reading disklabel");
-	    return (EIO);
-	}
-	DEBUG("copy %d bytes of label from %p to %p", sizeof(struct disklabel), b=
uf + LABELOFFSET, &od->od_disklabel);
-	bcopy(buf + LABELOFFSET, &od->od_disklabel, sizeof(struct disklabel));
-	lp =3D &od->od_disklabel;
-	od->od_flags |=3D BD_LABELOK;
-
-	if (lp->d_magic !=3D DISKMAGIC) {
-	    DEBUG("no disklabel");
-	    return (ENOENT);
-	}
-	if (dev->d_kind.biosdisk.partition >=3D lp->d_npartitions) {
-	    DEBUG("partition '%c' exceeds partitions in table (a-'%c')",
-		  'a' + dev->d_kind.biosdisk.partition, 'a' + lp->d_npartitions);
-	    return (EPART);
-	}
-
-#ifdef DISK_DEBUG
-	/* Complain if the partition is unused unless this is a floppy. */
-	if ((lp->d_partitions[dev->d_kind.biosdisk.partition].p_fstype =3D=3D FS_=
UNUSED) &&
-	    !(od->od_flags & BD_FLOPPY))
-	    DEBUG("warning, partition marked as unused");
-#endif
-=09
-	od->od_boff =3D=20
-		lp->d_partitions[dev->d_kind.biosdisk.partition].p_offset -
-		lp->d_partitions[RAW_PART].p_offset +
-		sector;
-    }
-    return (0);
+	return (0);
 }
=20
-static void
-bd_checkextended(struct open_disk *od, int slicenum)
+static int
+bd_strategy(void *devdata, int rw, daddr_t dblk, size_t size, char *buf,
+    size_t *rsize)
 {
-	char	buf[BIOSDISK_SECSIZE];
-	struct dos_partition *dp;
-	u_int base;
-	int i, start, end;
+	struct bcache_devdata bcd;
+	struct disk_devdesc *dev;
=20
-	dp =3D &od->od_slicetab[slicenum];
-	start =3D od->od_nslices;
-
-	if (dp->dp_size =3D=3D 0)
-		goto done;
-	if (dp->dp_typ !=3D DOSPTYP_EXT)
-		goto done;
-	if (bd_read(od, (daddr_t)dp->dp_start, 1, buf))
-		goto done;
-	if (((u_char)buf[0x1fe] !=3D 0x55) || ((u_char)buf[0x1ff] !=3D 0xaa)) {
-		DEBUG("no magic in extended table");
-		goto done;
-	}
-	base =3D dp->dp_start;
-	dp =3D (struct dos_partition *)(&buf[DOSPARTOFF]);
-	for (i =3D 0; i < NDOSPART; i++, dp++) {
-		if (dp->dp_size =3D=3D 0)
-			continue;
-		if (od->od_nslices =3D=3D NEXTDOSPART)
-			goto done;
-		dp->dp_start +=3D base;
-		bcopy(dp, &od->od_slicetab[od->od_nslices], sizeof(*dp));
-		od->od_nslices++;
-	}
-	end =3D od->od_nslices;
-
-	/*
-	 * now, recursively check the slices we just added
-	 */
-	for (i =3D start; i < end; i++)
-		bd_checkextended(od, i);
-done:
-	return;
+	dev =3D (struct disk_devdesc *)devdata;
+	bcd.dv_strategy =3D bd_realstrategy;
+	bcd.dv_devdata =3D devdata;
+	return (bcache_strategy(&bcd, BD(dev).bd_unit, rw, dblk + dev->d_offset,
+	    size, buf, rsize));
 }
=20
-/*
- * Search for a slice with the following preferences:
- *
- * 1: Active FreeBSD slice
- * 2: Non-active FreeBSD slice
- * 3: Active Linux slice
- * 4: non-active Linux slice
- * 5: Active FAT/FAT32 slice
- * 6: non-active FAT/FAT32 slice
- */
-#define PREF_RAWDISK	0
-#define PREF_FBSD_ACT	1
-#define PREF_FBSD	2
-#define PREF_LINUX_ACT	3
-#define PREF_LINUX	4
-#define PREF_DOS_ACT	5
-#define PREF_DOS	6
-#define PREF_NONE	7
-
-/*
- * slicelimit is in the range 0 .. NDOSPART
- */
 static int
-bd_bestslice(struct open_disk *od)
+bd_realstrategy(void *devdata, int rw, daddr_t dblk, size_t size, char *bu=
f,
+    size_t *rsize)
 {
-	struct dos_partition *dp;
-	int pref, preflevel;
-	int i, prefslice;
-=09
-	prefslice =3D 0;
-	preflevel =3D PREF_NONE;
-
-	dp =3D &od->od_slicetab[0];
-	for (i =3D 0; i < od->od_nslices; i++, dp++) {
-
-		switch (dp->dp_typ) {
-		case DOSPTYP_386BSD:		/* FreeBSD */
-			pref =3D dp->dp_flag & 0x80 ? PREF_FBSD_ACT : PREF_FBSD;
-			break;
-
-		case DOSPTYP_LINUX:
-			pref =3D dp->dp_flag & 0x80 ? PREF_LINUX_ACT : PREF_LINUX;
-			break;
-   =20
-		case 0x01:		/* DOS/Windows */
-		case 0x04:
-		case 0x06:
-		case 0x0b:
-		case 0x0c:
-		case 0x0e:
-			pref =3D dp->dp_flag & 0x80 ? PREF_DOS_ACT : PREF_DOS;
-			break;
-
-		default:
-		        pref =3D PREF_NONE;
-		}
-		if (pref < preflevel) {
-			preflevel =3D pref;
-			prefslice =3D i + 1;
-		}
-	}
-	return (prefslice);
-}
-
-#ifdef LOADER_GPT_SUPPORT
-static int
-bd_open_gpt(struct open_disk *od, struct i386_devdesc *dev)
-{
-    struct dos_partition *dp;
-    struct gpt_hdr *hdr;
-    struct gpt_ent *ent;
-    struct gpt_part *gp;
-    int	entries_per_sec, error, i, part;
-    daddr_t lba, elba;
-    char gpt[BIOSDISK_SECSIZE], tbl[BIOSDISK_SECSIZE];
-
-    /*
-     * Following calculations attempt to determine the correct value
-     * for d->od_boff by looking for the slice and partition specified,
-     * or searching for reasonable defaults.
-     */
-    error =3D 0;
-
-    /* First, read the MBR and see if we have a PMBR. */
-    if (bd_read(od, 0, 1, tbl)) {
-	DEBUG("error reading MBR");
-	return (EIO);
-    }
-
-    /* Check the slice table magic. */
-    if (((u_char)tbl[0x1fe] !=3D 0x55) || ((u_char)tbl[0x1ff] !=3D 0xaa))
-	return (ENXIO);
-
-    /* Check for GPT slice. */
-    part =3D 0;
-    dp =3D (struct dos_partition *)(tbl + DOSPARTOFF);
-    for (i =3D 0; i < NDOSPART; i++) {
-	if (dp[i].dp_typ =3D=3D 0xee)
-	    part++;
-	else if ((part !=3D 1) && (dp[i].dp_typ !=3D 0x00))
-	    return (EINVAL);
-    }
-    if (part !=3D 1)
-	return (EINVAL);
-
-    /* Read primary GPT table header. */
-    if (bd_read(od, 1, 1, gpt)) {
-	DEBUG("error reading GPT header");
-	return (EIO);
-    }
-    hdr =3D (struct gpt_hdr *)gpt;
-    if (bcmp(hdr->hdr_sig, GPT_HDR_SIG, sizeof(hdr->hdr_sig)) !=3D 0 ||
-	hdr->hdr_lba_self !=3D 1 || hdr->hdr_revision < 0x00010000 ||
-	hdr->hdr_entsz < sizeof(*ent) ||
-	BIOSDISK_SECSIZE % hdr->hdr_entsz !=3D 0) {
-	DEBUG("Invalid GPT header\n");
-	return (EINVAL);
-    }
-
-    /* Now walk the partition table to count the number of valid partition=
s. */
-    part =3D 0;
-    entries_per_sec =3D BIOSDISK_SECSIZE / hdr->hdr_entsz;
-    elba =3D hdr->hdr_lba_table + hdr->hdr_entries / entries_per_sec;
-    for (lba =3D hdr->hdr_lba_table; lba < elba; lba++) {
-	if (bd_read(od, lba, 1, tbl)) {
-	    DEBUG("error reading GPT table");
-	    return (EIO);
-	}
-	for (i =3D 0; i < entries_per_sec; i++) {
-	    ent =3D (struct gpt_ent *)(tbl + i * hdr->hdr_entsz);
-	    if (uuid_is_nil(&ent->ent_type, NULL) || ent->ent_lba_start =3D=3D 0 =
||
-		ent->ent_lba_end < ent->ent_lba_start)
-		continue;
-	    part++;
-	}
-    }
-
-    /* Save the important information about all the valid partitions. */
-    od->od_nparts =3D part;
-    if (part !=3D 0) {
-	od->od_partitions =3D malloc(part * sizeof(struct gpt_part));
-	part =3D 0;=09
-	for (lba =3D hdr->hdr_lba_table; lba < elba; lba++) {
-	    if (bd_read(od, lba, 1, tbl)) {
-		DEBUG("error reading GPT table");
-		error =3D EIO;
-		goto out;
-	    }
-	    for (i =3D 0; i < entries_per_sec; i++) {
-		ent =3D (struct gpt_ent *)(tbl + i * hdr->hdr_entsz);
-		if (uuid_is_nil(&ent->ent_type, NULL) ||
-		    ent->ent_lba_start =3D=3D 0 ||
-		    ent->ent_lba_end < ent->ent_lba_start)
-		    continue;
-		od->od_partitions[part].gp_index =3D (lba - hdr->hdr_lba_table) *
-		    entries_per_sec + i + 1;
-		od->od_partitions[part].gp_type =3D ent->ent_type;
-		od->od_partitions[part].gp_start =3D ent->ent_lba_start;
-		od->od_partitions[part].gp_end =3D ent->ent_lba_end;
-		part++;
-	    }
-	}
-    }
-    od->od_flags |=3D BD_GPTOK;
-
-    /* Is this a request for the whole disk? */
-    if (dev->d_kind.biosdisk.slice < 0) {
-	od->od_boff =3D 0;
-	return (0);
-    }
-
-    /*
-     * If a partition number was supplied, then the user is trying to use
-     * an MBR address rather than a GPT address, so fail.
-     */
-    if (dev->d_kind.biosdisk.partition !=3D 0xff) {
-	error =3D ENOENT;
-	goto out;
-    }
-
-    /* If a slice number was supplied but not found, this is an error. */
-    gp =3D NULL;
-    if (dev->d_kind.biosdisk.slice > 0) {
-	for (i =3D 0; i < od->od_nparts; i++) {
-	    if (od->od_partitions[i].gp_index =3D=3D dev->d_kind.biosdisk.slice) {
-		gp =3D &od->od_partitions[i];
-		break;
-	    }
-	}
-	if (gp =3D=3D NULL) {
-            DEBUG("partition %d not found", dev->d_kind.biosdisk.slice);
-	    error =3D ENOENT;
-	    goto out;
-        }
-    }
-
-    /* Try to auto-detect the best partition. */
-    if (dev->d_kind.biosdisk.slice =3D=3D 0) {
-	gp =3D bd_best_gptpart(od);
-	if (gp =3D=3D NULL) {
-	    error =3D ENOENT;
-	    goto out;
-	}
-	dev->d_kind.biosdisk.slice =3D gp->gp_index;
-    }
-    od->od_boff =3D gp->gp_start;
-
-out:
-    if (error) {
-	if (od->od_nparts > 0)
-	    free(od->od_partitions);
-	od->od_flags &=3D ~BD_GPTOK;
-    }
-    return (error);
-}
-
-static struct gpt_part *
-bd_best_gptpart(struct open_disk *od)
-{
-    struct gpt_part *gp, *prefpart;
-    int i, pref, preflevel;
-=09
-    prefpart =3D NULL;
-    preflevel =3D PREF_NONE;
-
-    gp =3D od->od_partitions;
-    for (i =3D 0; i < od->od_nparts; i++, gp++) {
-	/* Windows. XXX: Also Linux. */
-	if (uuid_equal(&gp->gp_type, &ms_basic_data, NULL))
-	    pref =3D PREF_DOS;
-	/* FreeBSD */
-	else if (uuid_equal(&gp->gp_type, &freebsd_ufs, NULL) ||
-	    uuid_equal(&gp->gp_type, &freebsd_zfs, NULL))
-	    pref =3D PREF_FBSD;
-	else
-	    pref =3D PREF_NONE;
-	if (pref < preflevel) {
-	    preflevel =3D pref;
-	    prefpart =3D gp;
-	}
-    }
-    return (prefpart);
-}
-#endif
-
-static int=20
-bd_close(struct open_file *f)
-{
-    struct open_disk	*od =3D (struct open_disk *)(((struct i386_devdesc *)=
(f->f_devdata))->d_kind.biosdisk.data);
-
-    bd_closedisk(od);
-    return(0);
-}
-
-static void
-bd_closedisk(struct open_disk *od)
-{
-    DEBUG("open_disk %p", od);
-#if 0
-    /* XXX is this required? (especially if disk already open...) */
-    if (od->od_flags & BD_FLOPPY)
-	delay(3000000);
-#endif
-#ifdef LOADER_GPT_SUPPORT
-    if (od->od_flags & BD_GPTOK && od->od_nparts > 0)
-	free(od->od_partitions);
-#endif
-    free(od);
-}
-
-static int=20
-bd_strategy(void *devdata, int rw, daddr_t dblk, size_t size, char *buf, s=
ize_t *rsize)
-{
-    struct bcache_devdata	bcd;
-    struct open_disk	*od =3D (struct open_disk *)(((struct i386_devdesc *)=
devdata)->d_kind.biosdisk.data);
-
-    bcd.dv_strategy =3D bd_realstrategy;
-    bcd.dv_devdata =3D devdata;
-    return(bcache_strategy(&bcd, od->od_unit, rw, dblk+od->od_boff, size, =
buf, rsize));
-}
-
-static int=20
-bd_realstrategy(void *devdata, int rw, daddr_t dblk, size_t size, char *bu=
f, size_t *rsize)
-{
-    struct open_disk	*od =3D (struct open_disk *)(((struct i386_devdesc *)=
devdata)->d_kind.biosdisk.data);
+    struct disk_devdesc *dev =3D (struct disk_devdesc *)devdata;
     int			blks;
-#ifdef BD_SUPPORT_FRAGS
+#ifdef BD_SUPPORT_FRAGS /* XXX: sector size */
     char		fragbuf[BIOSDISK_SECSIZE];
     size_t		fragsize;
=20
     fragsize =3D size % BIOSDISK_SECSIZE;
 #else
-    if (size % BIOSDISK_SECSIZE)
+    if (size % BD(dev).bd_sectorsize)
 	panic("bd_strategy: %d bytes I/O not multiple of block size", size);
 #endif
=20
-    DEBUG("open_disk %p", od);
-    blks =3D size / BIOSDISK_SECSIZE;
+    DEBUG("open_disk %p", dev);
+    blks =3D size / BD(dev).bd_sectorsize;
     if (rsize)
 	*rsize =3D 0;
=20
@@ -1088,11 +366,11 @@
     case F_READ:
 	DEBUG("read %d from %lld to %p", blks, dblk, buf);
=20
-	if (blks && bd_read(od, dblk, blks, buf)) {
+	if (blks && bd_read(dev, dblk, blks, buf)) {
 	    DEBUG("read error");
 	    return (EIO);
 	}
-#ifdef BD_SUPPORT_FRAGS
+#ifdef BD_SUPPORT_FRAGS /* XXX: sector size */
 	DEBUG("bd_strategy: frag read %d from %d+%d to %p",
 	    fragsize, dblk, blks, buf + (blks * BIOSDISK_SECSIZE));
 	if (fragsize && bd_read(od, dblk + blks, 1, fragsize)) {
@@ -1105,7 +383,7 @@
     case F_WRITE :
 	DEBUG("write %d from %d to %p", blks, dblk, buf);
=20
-	if (blks && bd_write(od, dblk, blks, buf)) {
+	if (blks && bd_write(dev, dblk, blks, buf)) {
 	    DEBUG("write error");
 	    return (EIO);
 	}
@@ -1130,7 +408,8 @@
 #define FLOPPY_BOUNCEBUF	18
=20
 static int
-bd_edd_io(struct open_disk *od, daddr_t dblk, int blks, caddr_t dest, int =
write)
+bd_edd_io(struct disk_devdesc *dev, daddr_t dblk, int blks, caddr_t dest,
+    int write)
 {
     static struct edd_packet packet;
=20
@@ -1146,7 +425,7 @@
 	v86.eax =3D 0x4300;
     else
 	v86.eax =3D 0x4200;
-    v86.edx =3D od->od_unit;
+    v86.edx =3D BD(dev).bd_unit;
     v86.ds =3D VTOPSEG(&packet);
     v86.esi =3D VTOPOFF(&packet);
     v86int();
@@ -1154,16 +433,17 @@
 }
=20
 static int
-bd_chs_io(struct open_disk *od, daddr_t dblk, int blks, caddr_t dest, int =
write)
+bd_chs_io(struct disk_devdesc *dev, daddr_t dblk, int blks, caddr_t dest,
+    int write)
 {
     u_int	x, bpc, cyl, hd, sec;
=20
-    bpc =3D (od->od_sec * od->od_hds);	/* blocks per cylinder */
+    bpc =3D BD(dev).bd_sec * BD(dev).bd_hds;	/* blocks per cylinder */
     x =3D dblk;
     cyl =3D x / bpc;			/* block # / blocks per cylinder */
     x %=3D bpc;				/* block offset into cylinder */
-    hd =3D x / od->od_sec;		/* offset / blocks per track */
-    sec =3D x % od->od_sec;		/* offset into track */
+    hd =3D x / BD(dev).bd_sec;		/* offset / blocks per track */
+    sec =3D x % BD(dev).bd_sec;		/* offset into track */
=20
     /* correct sector number for 1-based BIOS numbering */
     sec++;
@@ -1179,7 +459,7 @@
     else
 	v86.eax =3D 0x200 | blks;
     v86.ecx =3D ((cyl & 0xff) << 8) | ((cyl & 0x300) >> 2) | sec;
-    v86.edx =3D (hd << 8) | od->od_unit;
+    v86.edx =3D (hd << 8) | BD(dev).bd_unit;
     v86.es =3D VTOPSEG(dest);
     v86.ebx =3D VTOPOFF(dest);
     v86int();
@@ -1187,7 +467,7 @@
 }
=20
 static int
-bd_io(struct open_disk *od, daddr_t dblk, int blks, caddr_t dest, int writ=
e)
+bd_io(struct disk_devdesc *dev, daddr_t dblk, int blks, caddr_t dest, int =
write)
 {
     u_int	x, sec, result, resid, retry, maxfer;
     caddr_t	p, xp, bbuf, breg;
@@ -1200,8 +480,9 @@
     p =3D dest;
=20
     /* Decide whether we have to bounce */
-    if (VTOP(dest) >> 20 !=3D 0 || ((od->od_unit < 0x80) &&=20
-	((VTOP(dest) >> 16) !=3D (VTOP(dest + blks * BIOSDISK_SECSIZE) >> 16)))) {
+    if (VTOP(dest) >> 20 !=3D 0 || (BD(dev).bd_unit < 0x80 &&
+	(VTOP(dest) >> 16) !=3D (VTOP(dest +
+	blks * BD(dev).bd_sectorsize) >> 16))) {
=20
 	/*=20
 	 * There is a 64k physical boundary somewhere in the
@@ -1212,12 +493,12 @@
 	 * there, in which case we use the top half.
 	 */
 	x =3D min(FLOPPY_BOUNCEBUF, (unsigned)blks);
-	bbuf =3D alloca(x * 2 * BIOSDISK_SECSIZE);
+	bbuf =3D alloca(x * 2 * BD(dev).bd_sectorsize);
 	if (((u_int32_t)VTOP(bbuf) & 0xffff0000) =3D=3D
-	    ((u_int32_t)VTOP(bbuf + x * BIOSDISK_SECSIZE) & 0xffff0000)) {
+	    ((u_int32_t)VTOP(bbuf + x * BD(dev).bd_sectorsize) & 0xffff0000)) {
 	    breg =3D bbuf;
 	} else {
-	    breg =3D bbuf + x * BIOSDISK_SECSIZE;
+	    breg =3D bbuf + x * BD(dev).bd_sectorsize;
 	}
 	maxfer =3D x;		/* limit transfers to bounce region size */
     } else {
@@ -1230,8 +511,8 @@
 	 * Play it safe and don't cross track boundaries.
 	 * (XXX this is probably unnecessary)
 	 */
-	sec =3D dblk % od->od_sec;	/* offset into track */
-	x =3D min(od->od_sec - sec, resid);
+	sec =3D dblk % BD(dev).bd_sec;	/* offset into track */
+	x =3D min(BD(dev).bd_sec - sec, resid);
 	if (maxfer > 0)
 	    x =3D min(x, maxfer);		/* fit bounce buffer */
=20
@@ -1243,7 +524,7 @@
 	 * Put your Data In, and shake it all about=20
 	 */
 	if (write && bbuf !=3D NULL)
-	    bcopy(p, breg, x * BIOSDISK_SECSIZE);
+	    bcopy(p, breg, x * BD(dev).bd_sectorsize);
=20
 	/*
 	 * Loop retrying the operation a couple of times.  The BIOS
@@ -1255,14 +536,14 @@
 		v86.ctl =3D V86_FLAGS;
 		v86.addr =3D 0x13;
 		v86.eax =3D 0;
-		v86.edx =3D od->od_unit;
+		v86.edx =3D BD(dev).bd_unit;
 		v86int();
 	    }
=20
-	    if (od->od_flags & BD_MODEEDD1)
-		result =3D bd_edd_io(od, dblk, x, xp, write);
+	    if (BD(dev).bd_flags & BD_MODEEDD1)
+		result =3D bd_edd_io(dev, dblk, x, xp, write);
 	    else
-		result =3D bd_chs_io(od, dblk, x, xp, write);
+		result =3D bd_chs_io(dev, dblk, x, xp, write);
 	    if (result =3D=3D 0)
 		break;
 	}
@@ -1277,52 +558,28 @@
 	    return(-1);
 	}
 	if (!write && bbuf !=3D NULL)
-	    bcopy(breg, p, x * BIOSDISK_SECSIZE);
-	p +=3D (x * BIOSDISK_SECSIZE);
+	    bcopy(breg, p, x * BD(dev).bd_sectorsize);
+	p +=3D (x * BD(dev).bd_sectorsize);
 	dblk +=3D x;
 	resid -=3D x;
     }
=20
-/*    hexdump(dest, (blks * BIOSDISK_SECSIZE)); */
+/*    hexdump(dest, (blks * BD(dev).bd_sectorsize)); */
     return(0);
 }
=20
 static int
-bd_read(struct open_disk *od, daddr_t dblk, int blks, caddr_t dest)
+bd_read(struct disk_devdesc *dev, daddr_t dblk, int blks, caddr_t dest)
 {
=20
-    return (bd_io(od, dblk, blks, dest, 0));
+	return (bd_io(dev, dblk, blks, dest, 0));
 }
=20
 static int
-bd_write(struct open_disk *od, daddr_t dblk, int blks, caddr_t dest)
+bd_write(struct disk_devdesc *dev, daddr_t dblk, int blks, caddr_t dest)
 {
=20
-    return (bd_io(od, dblk, blks, dest, 1));
-}
-
-static int
-bd_getgeom(struct open_disk *od)
-{
-
-    v86.ctl =3D V86_FLAGS;
-    v86.addr =3D 0x13;
-    v86.eax =3D 0x800;
-    v86.edx =3D od->od_unit;
-    v86int();
-
-    if ((V86_CY(v86.efl)) ||				/* carry set */
-	((v86.edx & 0xff) <=3D (unsigned)(od->od_unit & 0x7f)))	/* unit # bad */
-	return(1);
-   =20
-    /* convert max cyl # -> # of cylinders */
-    od->od_cyl =3D ((v86.ecx & 0xc0) << 2) + ((v86.ecx & 0xff00) >> 8) + 1;
-    /* convert max head # -> # of heads */
-    od->od_hds =3D ((v86.edx & 0xff00) >> 8) + 1;
-    od->od_sec =3D v86.ecx & 0x3f;
-
-    DEBUG("unit 0x%x geometry %d/%d/%d", od->od_unit, od->od_cyl, od->od_h=
ds, od->od_sec);
-    return(0);
+	return (bd_io(dev, dblk, blks, dest, 1));
 }
=20
 /*
@@ -1361,21 +618,25 @@
  * IDE disks to be specified in $num_ide_disks.  There should be a Better =
Way.
  */
 int
-bd_getdev(struct i386_devdesc *dev)
+bd_getdev(struct i386_devdesc *d)
 {
-    struct open_disk		*od;
+    struct disk_devdesc		*dev;
     int				biosdev;
     int 			major;
     int				rootdev;
     char			*nip, *cp;
-    int				unitofs =3D 0, i, unit;
+    int				i, unit;
=20
+    dev =3D (struct disk_devdesc *)d;
     biosdev =3D bd_unit2bios(dev->d_unit);
     DEBUG("unit %d BIOS device %d", dev->d_unit, biosdev);
     if (biosdev =3D=3D -1)				/* not a BIOS device */
 	return(-1);
-    if (bd_opendisk(&od, dev) !=3D 0)		/* oops, not a viable device */
-	return(-1);
+    if (disk_open(dev, BD(dev).bd_sectors * BD(dev).bd_sectorsize,
+	BD(dev).bd_sectorsize) !=3D 0)		/* oops, not a viable device */
+	    return (-1);
+    else
+	disk_close(dev);
=20
     if (biosdev < 0x80) {
 	/* floppy (or emulated floppy) or ATAPI device */
@@ -1387,24 +648,11 @@
 	    major =3D FDMAJOR;
 	}
     } else {
-	/* harddisk */
-	if ((od->od_flags & BD_LABELOK) && (od->od_disklabel.d_type =3D=3D DTYPE_=
SCSI)) {
-	    /* label OK, disk labelled as SCSI */
-	    major =3D DAMAJOR;
-	    /* check for unit number correction hint, now deprecated */
-	    if ((nip =3D getenv("num_ide_disks")) !=3D NULL) {
-		i =3D strtol(nip, &cp, 0);
-		/* check for parse error */
-		if ((cp !=3D nip) && (*cp =3D=3D 0))
-		    unitofs =3D i;
-	    }
-	} else {
 	    /* assume an IDE disk */
 	    major =3D WDMAJOR;
-	}
     }
     /* default root disk unit number */
-    unit =3D (biosdev & 0x7f) - unitofs;
+    unit =3D biosdev & 0x7f;
=20
     /* XXX a better kludge to set the root disk unit number */
     if ((nip =3D getenv("root_disk_unit")) !=3D NULL) {
@@ -1414,8 +662,7 @@
 	    unit =3D i;
     }
=20
-    rootdev =3D MAKEBOOTDEV(major, dev->d_kind.biosdisk.slice + 1, unit,
-	dev->d_kind.biosdisk.partition);
+    rootdev =3D MAKEBOOTDEV(major, dev->d_slice + 1, unit, dev->d_partitio=
n);
     DEBUG("dev is 0x%x\n", rootdev);
     return(rootdev);
 }
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/boot/i386/libi386/devicename.c
--- a/head/sys/boot/i386/libi386/devicename.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/boot/i386/libi386/devicename.c	Fri Aug 10 14:19:25 2012 +0300
@@ -25,12 +25,12 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/boot/i386/libi386/devicename.c 235329 2012-05=
-12 09:03:30Z avg $");
+__FBSDID("$FreeBSD: head/sys/boot/i386/libi386/devicename.c 239066 2012-08=
-05 14:37:48Z ae $");
=20
 #include <stand.h>
 #include <string.h>
-#include <sys/disklabel.h>
 #include "bootstrap.h"
+#include "disk.h"
 #include "libi386.h"
 #include "../zfs/libzfs.h"
=20
@@ -86,7 +86,7 @@
 {
     struct i386_devdesc *idev;
     struct devsw	*dv;
-    int			i, unit, slice, partition, err;
+    int			i, unit, err;
     char		*cp;
     const char		*np;
=20
@@ -112,62 +112,9 @@
 	break;
=20
     case DEVT_DISK:
-	unit =3D -1;
-	slice =3D -1;
-	partition =3D -1;
-	if (*np && (*np !=3D ':')) {
-	    unit =3D strtol(np, &cp, 10);	/* next comes the unit number */
-	    if (cp =3D=3D np) {
-		err =3D EUNIT;
-		goto fail;
-	    }
-#ifdef LOADER_GPT_SUPPORT
-	    if (*cp =3D=3D 'p') {		/* got a GPT partition */
-		np =3D cp + 1;
-		slice =3D strtol(np, &cp, 10);
-		if (cp =3D=3D np) {
-		    err =3D ESLICE;
-		    goto fail;
-		}
-		if (*cp && (*cp !=3D ':')) {
-		    err =3D EINVAL;
-		    goto fail;
-		}
-		partition =3D 0xff;
-	    } else {
-#endif
-		if (*cp =3D=3D 's') {		/* got a slice number */
-		    np =3D cp + 1;
-		    slice =3D strtol(np, &cp, 10);
-		    if (cp =3D=3D np) {
-			err =3D ESLICE;
-			goto fail;
-		    }
-		}
-		if (*cp && (*cp !=3D ':')) {
-		    partition =3D *cp - 'a';	/* got a partition number */
-		    if ((partition < 0) || (partition >=3D MAXPARTITIONS)) {
-			err =3D EPART;
-			goto fail;
-		    }
-		    cp++;
-		}
-#ifdef LOADER_GPT_SUPPORT
-	    }
-#endif
-	} else {
-		cp =3D np;
-	}
-	if (*cp && (*cp !=3D ':')) {
-	    err =3D EINVAL;
+	err =3D disk_parsedev((struct disk_devdesc *)idev, np, path);
+	if (err !=3D 0)
 	    goto fail;
-	}
-
-	idev->d_unit =3D unit;
-	idev->d_kind.biosdisk.slice =3D slice;
-	idev->d_kind.biosdisk.partition =3D partition;
-	if (path !=3D NULL)
-	    *path =3D (*cp =3D=3D 0) ? cp : cp + 1;
 	break;
=20
     case DEVT_CD:
@@ -221,38 +168,20 @@
 {
     struct i386_devdesc	*dev =3D (struct i386_devdesc *)vdev;
     static char		buf[128];	/* XXX device length constant? */
-    char		*cp;
-   =20
+
     switch(dev->d_type) {
     case DEVT_NONE:
 	strcpy(buf, "(no device)");
 	break;
=20
     case DEVT_CD:
+    case DEVT_NET:
 	sprintf(buf, "%s%d:", dev->d_dev->dv_name, dev->d_unit);
 	break;
=20
     case DEVT_DISK:
-	cp =3D buf;
-	cp +=3D sprintf(cp, "%s%d", dev->d_dev->dv_name, dev->d_unit);
-#ifdef LOADER_GPT_SUPPORT
-	if (dev->d_kind.biosdisk.partition =3D=3D 0xff) {
-	    cp +=3D sprintf(cp, "p%d", dev->d_kind.biosdisk.slice);
-	} else {
-#endif
-	    if (dev->d_kind.biosdisk.slice > 0)
-		cp +=3D sprintf(cp, "s%d", dev->d_kind.biosdisk.slice);
-	    if (dev->d_kind.biosdisk.partition >=3D 0)
-		cp +=3D sprintf(cp, "%c", dev->d_kind.biosdisk.partition + 'a');
-#ifdef LOADER_GPT_SUPPORT
-	}
-#endif
-	strcat(cp, ":");
-	break;
+	return (disk_fmtdev(vdev));
=20
-    case DEVT_NET:
-	sprintf(buf, "%s%d:", dev->d_dev->dv_name, dev->d_unit);
-	break;
     case DEVT_ZFS:
 	return(zfs_fmtdev(vdev));
     }
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/boot/i386/libi386/libi386.h
--- a/head/sys/boot/i386/libi386/libi386.h	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/boot/i386/libi386/libi386.h	Fri Aug 10 14:19:25 2012 +0300
@@ -23,7 +23,7 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: head/sys/boot/i386/libi386/libi386.h 235329 2012-05-12 09:03:=
30Z avg $
+ * $FreeBSD: head/sys/boot/i386/libi386/libi386.h 239066 2012-08-05 14:37:=
48Z ae $
  */
=20
=20
@@ -45,6 +45,7 @@
 	    void	*data;
 	    int		slice;
 	    int		partition;
+	    off_t	offset;
 	} biosdisk;
 	struct
 	{
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/boot/i386/loader/Makefile
--- a/head/sys/boot/i386/loader/Makefile	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/boot/i386/loader/Makefile	Fri Aug 10 14:19:25 2012 +0300
@@ -1,4 +1,4 @@
-# $FreeBSD: head/sys/boot/i386/loader/Makefile 235537 2012-05-17 10:11:18Z=
 gber $
+# $FreeBSD: head/sys/boot/i386/loader/Makefile 239067 2012-08-05 14:38:53Z=
 ae $
=20
 .include <bsd.own.mk>
 MK_SSP=3D		no
@@ -50,9 +50,6 @@
 .if !defined(LOADER_NO_GZIP_SUPPORT)
 CFLAGS+=3D	-DLOADER_GZIP_SUPPORT
 .endif
-.if !defined(LOADER_NO_GPT_SUPPORT)
-CFLAGS+=3D	-DLOADER_GPT_SUPPORT
-.endif
 .if defined(LOADER_NANDFS_SUPPORT)
 CFLAGS+=3D	-DLOADER_NANDFS_SUPPORT
 .endif
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/boot/i386/loader/main.c
--- a/head/sys/boot/i386/loader/main.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/boot/i386/loader/main.c	Fri Aug 10 14:19:25 2012 +0300
@@ -25,7 +25,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/boot/i386/loader/main.c 235329 2012-05-12 09:=
03:30Z avg $");
+__FBSDID("$FreeBSD: head/sys/boot/i386/loader/main.c 239068 2012-08-05 14:=
48:28Z ae $");
=20
 /*
  * MD bootstrap main() and assorted miscellaneous
@@ -356,25 +356,17 @@
 i386_zfs_probe(void)
 {
     char devname[32];
-    int unit, slice;
+    int unit;
=20
     /*
      * Open all the disks we can find and see if we can reconstruct
-     * ZFS pools from them. Bogusly assumes that the disks are named
-     * diskN, diskNpM or diskNsM.
+     * ZFS pools from them.
      */
     for (unit =3D 0; unit < MAXBDDEV; unit++) {
+	if (bd_unit2bios(unit) =3D=3D -1)
+	    break;
 	sprintf(devname, "disk%d:", unit);
-	if (zfs_probe_dev(devname, NULL) =3D=3D ENXIO)
-	    continue;
-	for (slice =3D 1; slice <=3D 128; slice++) {
-	    sprintf(devname, "disk%dp%d:", unit, slice);
-	    zfs_probe_dev(devname, NULL);
-	}
-	for (slice =3D 1; slice <=3D 4; slice++) {
-	    sprintf(devname, "disk%ds%d:", unit, slice);
-	    zfs_probe_dev(devname, NULL);
-	}
+	zfs_probe_dev(devname, NULL);
     }
 }
 #endif
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/boot/i386/pmbr/pmbr.s
--- a/head/sys/boot/i386/pmbr/pmbr.s	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/boot/i386/pmbr/pmbr.s	Fri Aug 10 14:19:25 2012 +0300
@@ -27,7 +27,7 @@
 # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 # SUCH DAMAGE.
 #
-# $FreeBSD$
+# $FreeBSD: head/sys/boot/i386/pmbr/pmbr.s 239060 2012-08-05 12:57:38Z ae $
 #
 # Partly from: src/sys/boot/i386/mbr/mbr.s 1.7
=20
@@ -42,8 +42,8 @@
 		.set STACK,EXEC+SECSIZE*4	# Stack address
 		.set GPT_ADDR,STACK		# GPT header address
 		.set GPT_SIG,0
-		.set GPT_SIG_0,0x20494645
-		.set GPT_SIG_1,0x54524150
+		.set GPT_SIG_0,0x20494645	# "EFI "
+		.set GPT_SIG_1,0x54524150	# "PART"
 		.set GPT_MYLBA,24
 		.set GPT_PART_LBA,72
 		.set GPT_NPART,80
@@ -52,6 +52,8 @@
 		.set PART_TYPE,0
 		.set PART_START_LBA,32
 		.set PART_END_LBA,40
+		.set DPBUF,PART_ADDR+SECSIZE
+		.set DPBUF_SEC,0x10		# Number of sectors
=20
 		.set NHRDRV,0x475		# Number of hard drives
=20
@@ -91,15 +93,32 @@
 		jb main.2			# Yes
 main.1: 	movb $0x80,%dl			# Assume drive 0x80
 #
-# Load the primary GPT header from LBA 1 and verify signature.
+# Load the GPT header and verify signature.  Try LBA 1 for the primary one=
 and
+# the last LBA for the backup if it is broken.
 #
-main.2:		movw $GPT_ADDR,%bx
+main.2:		call getdrvparams		# Read drive parameters
+		movb $1,%dh			# %dh :=3D 1 (reading primary)
+main.2a:	movw $GPT_ADDR,%bx
 		movw $lba,%si
-		call read
+		call read			# Read header and check GPT sig
 		cmpl $GPT_SIG_0,GPT_ADDR+GPT_SIG
-		jnz err_pt
+		jnz main.2b
 		cmpl $GPT_SIG_1,GPT_ADDR+GPT_SIG+4
-		jnz err_pt
+		jnz main.2b
+		jmp load_part
+main.2b:	cmpb $1,%dh			# Reading primary?
+		jne err_pt			# If no - invalid table found
+#
+# Try alternative LBAs from the last sector for the GPT header.
+#
+main.3:		movb $0,%dh			# %dh :=3D 0 (reading backup)
+		movw $DPBUF+DPBUF_SEC,%si	# %si =3D last sector + 1
+		movw $lba,%di			# %di =3D $lba
+main.3a:	decl (%si)			# 0x0(%si) =3D last sec (0-31)
+		movw $2,%cx
+		rep
+		movsw				# $lastsec--, copy it to $lba
+		jmp main.2a			# Read the next sector
 #
 # Load a partition table sector from disk and look for a FreeBSD boot
 # partition.
@@ -172,6 +191,16 @@
 		jc err_rd			# If error
 		ret
 #
+# Check the number of LBAs on the drive index %dx.  Trashes %ax and %si.
+#
+getdrvparams:
+		movw $DPBUF,%si			# Set the address of result buf
+		movw $0x001e,(%si)		# len
+		movw $0x4800,%ax		# BIOS: Read Drive Parameters
+		int $0x13			# Call the BIOS
+		jc err_rd			# "I/O error" if error
+		ret
+#
 # Various error message entry points.
 #
 err_big: 	movw $msg_big,%si		# "Boot loader too
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/boot/pc98/boot2/boot2.c
--- a/head/sys/boot/pc98/boot2/boot2.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/boot/pc98/boot2/boot2.c	Fri Aug 10 14:19:25 2012 +0300
@@ -15,7 +15,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/boot/pc98/boot2/boot2.c 235988 2012-05-25 09:=
36:39Z gleb $");
+__FBSDID("$FreeBSD: head/sys/boot/pc98/boot2/boot2.c 239063 2012-08-05 14:=
05:11Z nyan $");
=20
 #include <sys/param.h>
 #include <sys/disklabel.h>
@@ -126,13 +126,13 @@
     unsigned unit;
     unsigned head;
     unsigned sec;
-    unsigned slice;
-    unsigned part;
+    uint8_t slice;
+    uint8_t part;
     unsigned start;
 } dsk;
 static char cmd[512], cmddup[512], knamebuf[1024];
-static const char *kname =3D NULL;
-static uint32_t opts =3D 0;
+static const char *kname;
+static uint32_t opts;
 static int comspeed =3D SIOSPD;
 static struct bootinfo bootinfo;
 static uint8_t ioctrl =3D IO_KEYBOARD;
@@ -615,7 +615,8 @@
     struct pc98_partition *dp;
     struct disklabel *d;
     char *sec;
-    unsigned sl, i;
+    unsigned i;
+    uint8_t sl;
     u_char *p;
=20
     if (!dsk_meta) {
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/boot/pc98/btx/btxldr/btxldr.S
--- a/head/sys/boot/pc98/btx/btxldr/btxldr.S	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/boot/pc98/btx/btxldr/btxldr.S	Fri Aug 10 14:19:25 2012 +0300
@@ -12,16 +12,16 @@
  * warranties of merchantability and fitness for a particular
  * purpose.
  *
- * $FreeBSD: head/sys/boot/pc98/btx/btxldr/btxldr.S 235264 2012-05-11 09:4=
6:17Z avg $
+ * $FreeBSD: head/sys/boot/pc98/btx/btxldr/btxldr.S 239064 2012-08-05 14:1=
1:07Z nyan $
  */
=20
+#include <bootargs.h>
+
 /*
  * Prototype BTX loader program, written in a couple of hours.  The
  * real thing should probably be more flexible, and in C.
  */
=20
-#include <bootargs.h>
-
 /*
  * Memory locations.
  */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/boot/pc98/btx/lib/btxcsu.S
--- a/head/sys/boot/pc98/btx/lib/btxcsu.S	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/boot/pc98/btx/lib/btxcsu.S	Fri Aug 10 14:19:25 2012 +0300
@@ -13,14 +13,14 @@
 # purpose.
 #
=20
-# $FreeBSD: head/sys/boot/pc98/btx/lib/btxcsu.S 235264 2012-05-11 09:46:17=
Z avg $
+# $FreeBSD: head/sys/boot/pc98/btx/lib/btxcsu.S 239064 2012-08-05 14:11:07=
Z nyan $
+
+#include <bootargs.h>
=20
 #
 # BTX C startup code (ELF).
 #
=20
-#include <bootargs.h>
-
 #
 # Globals.
 #
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/boot/pc98/cdboot/cdboot.S
--- a/head/sys/boot/pc98/cdboot/cdboot.S	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/boot/pc98/cdboot/cdboot.S	Fri Aug 10 14:19:25 2012 +0300
@@ -28,9 +28,7 @@
 # SUCH DAMAGE.
 #
=20
-# $FreeBSD: head/sys/boot/pc98/cdboot/cdboot.S 235264 2012-05-11 09:46:17Z=
 avg $
-
-#include <bootargs.h>
+# $FreeBSD: head/sys/boot/pc98/cdboot/cdboot.S 239069 2012-08-05 14:48:55Z=
 nyan $
=20
 #
 # Basically, we first create a set of boot arguments to pass to the loaded
@@ -38,6 +36,8 @@
 # off of.=20
 #
=20
+#include <bootargs.h>
+
 #
 # Memory locations.
 #
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/boot/pc98/libpc98/Makefile
--- a/head/sys/boot/pc98/libpc98/Makefile	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/boot/pc98/libpc98/Makefile	Fri Aug 10 14:19:25 2012 +0300
@@ -1,4 +1,4 @@
-# $FreeBSD: head/sys/boot/pc98/libpc98/Makefile 235395 2012-05-13 11:34:05=
Z avg $
+# $FreeBSD: head/sys/boot/pc98/libpc98/Makefile 239069 2012-08-05 14:48:55=
Z nyan $
 #
 LIB=3D			pc98
 INTERNALLIB=3D
@@ -37,7 +37,8 @@
 # XXX: make alloca() useable
 CFLAGS+=3D -Dalloca=3D__builtin_alloca
=20
-CFLAGS+=3D	-I${.CURDIR}/../../common -I${.CURDIR}/../btx/lib \
+CFLAGS+=3D	-I${.CURDIR}/../../common \
+		-I${.CURDIR}/../btx/lib \
 		-I${.CURDIR}/../../i386/libi386 \
 		-I${.CURDIR}/../../.. -I.
 # the location of libstand
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/boot/sparc64/loader/main.c
--- a/head/sys/boot/sparc64/loader/main.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/boot/sparc64/loader/main.c	Fri Aug 10 14:19:25 2012 +0300
@@ -7,7 +7,7 @@
  * unchanged, you can do what ever you want with this file.
  */
 /*-
- * Copyright (c) 2008 Marius Strobl <marius at FreeBSD.org>
+ * Copyright (c) 2008 - 2012 Marius Strobl <marius at FreeBSD.org>
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -33,7 +33,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/boot/sparc64/loader/main.c 236581 2012-06-04 =
20:56:40Z marius $");
+__FBSDID("$FreeBSD: head/sys/boot/sparc64/loader/main.c 238851 2012-07-27 =
18:23:11Z marius $");
=20
 /*
  * FreeBSD/sparc64 kernel loader - machine dependent part
@@ -75,8 +75,6 @@
 #include "libofw.h"
 #include "dev_net.h"
=20
-#define	MAXDEV	31
-
 extern char bootprog_name[], bootprog_rev[], bootprog_date[], bootprog_mak=
er[];
=20
 enum {
@@ -735,18 +733,52 @@
 {
 	struct vtoc8 vtoc;
 	struct zfs_devdesc zfs_currdev;
-	char devname[32];
+	char alias[64], devname[sizeof(alias) + sizeof(":x") - 1];
+	char type[sizeof("device_type")];
+	char *bdev, *dev, *odev;
 	uint64_t guid;
-	int fd, part, unit;
+	int fd, len, part;
+	phandle_t aliases, options;
=20
 	/* Get the GUID of the ZFS pool on the boot device. */
 	guid =3D 0;
 	zfs_probe_dev(bootpath, &guid);
=20
-	for (unit =3D 0; unit < MAXDEV; unit++) {
+	/*
+	 * Get the GUIDs of the ZFS pools on any additional disks listed in
+	 * the boot-device environment variable.
+	 */
+	if ((aliases =3D OF_finddevice("/aliases")) =3D=3D -1)
+		goto out;
+	options =3D OF_finddevice("/options");
+	len =3D OF_getproplen(options, "boot-device");
+	if (len <=3D 0)
+		goto out;
+	bdev =3D odev =3D malloc(len + 1);
+	if (bdev =3D=3D NULL)
+		goto out;
+	if (OF_getprop(options, "boot-device", bdev, len) <=3D 0)
+		goto out;
+	bdev[len] =3D '\0';
+	while ((dev =3D strsep(&bdev, " ")) !=3D NULL) {
+		if (*dev =3D=3D '\0')
+			continue;
+		strcpy(alias, dev);
+		(void)OF_getprop(aliases, dev, alias, sizeof(alias));
+		/*
+		 * Don't probe the boot disk twice.  Note that bootpath
+		 * includes the partition specifier.
+		 */
+		if (strncmp(alias, bootpath, strlen(alias)) =3D=3D 0)
+			continue;
+		if (OF_getprop(OF_finddevice(alias), "device_type", type,
+		    sizeof(type)) =3D=3D -1)
+			continue;
+		if (strcmp(type, "block") !=3D 0)
+			continue;
+
 		/* Find freebsd-zfs slices in the VTOC. */
-		sprintf(devname, "disk%d:", unit);
-		fd =3D open(devname, O_RDONLY);
+		fd =3D open(alias, O_RDONLY);
 		if (fd =3D=3D -1)
 			continue;
 		lseek(fd, 0, SEEK_SET);
@@ -760,12 +792,14 @@
 			if (part =3D=3D 2 || vtoc.part[part].tag !=3D
 			    VTOC_TAG_FREEBSD_ZFS)
 				continue;
-			sprintf(devname, "disk%d:%c", unit, part + 'a');
+			(void)sprintf(devname, "%s:%c", alias, part + 'a');
 			if (zfs_probe_dev(devname, NULL) =3D=3D ENXIO)
 				break;
 		}
 	}
+	free(odev);
=20
+ out:
 	if (guid !=3D 0) {
 		zfs_currdev.pool_guid =3D guid;
 		zfs_currdev.root_guid =3D 0;
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/boot/userboot/test/test.c
--- a/head/sys/boot/userboot/test/test.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/boot/userboot/test/test.c	Fri Aug 10 14:19:25 2012 +0300
@@ -23,9 +23,11 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: head/sys/boot/userboot/test/test.c 223695 2011-06-30 16:08:56=
Z dfr $
+ * $FreeBSD: head/sys/boot/userboot/test/test.c 239073 2012-08-05 17:04:58=
Z ae $
  */
=20
+#include <sys/types.h>
+#include <sys/disk.h>
 #include <sys/ioctl.h>
 #include <sys/stat.h>
 #include <dirent.h>
@@ -251,6 +253,29 @@
 	return (0);
 }
=20
+int
+test_diskioctl(void *arg, int unit, u_long cmd, void *data)
+{
+	struct stat sb;
+
+	if (unit !=3D 0 || disk_fd =3D=3D -1)
+		return (EBADF);
+	switch (cmd) {
+	case DIOCGSECTORSIZE:
+		*(u_int *)data =3D 512;
+		break;
+	case DIOCGMEDIASIZE:
+		if (fstat(disk_fd, &sb) =3D=3D 0)
+			*(off_t *)data =3D sb.st_size;
+		else
+			return (ENOTTY);
+		break;
+	default:
+		return (ENOTTY);
+	};
+	return (0);
+}
+
 /*
  * Guest virtual machine i/o
  *
@@ -353,6 +378,7 @@
 	.stat =3D test_stat,
=20
 	.diskread =3D test_diskread,
+	.diskioctl =3D test_diskioctl,
=20
 	.copyin =3D test_copyin,
 	.copyout =3D test_copyout,
@@ -424,5 +450,5 @@
 	term.c_lflag &=3D ~(ICANON|ECHO);
 	tcsetattr(0, TCSAFLUSH, &term);
=20
-	func(&cb, NULL, USERBOOT_VERSION_1, disk_fd >=3D 0);
+	func(&cb, NULL, USERBOOT_VERSION_2, disk_fd >=3D 0);
 }
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/boot/userboot/userboot.h
--- a/head/sys/boot/userboot/userboot.h	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/boot/userboot/userboot.h	Fri Aug 10 14:19:25 2012 +0300
@@ -23,13 +23,14 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: head/sys/boot/userboot/userboot.h 223695 2011-06-30 16:08:56Z=
 dfr $
+ * $FreeBSD: head/sys/boot/userboot/userboot.h 239073 2012-08-05 17:04:58Z=
 ae $
  */
=20
 /*
  * USERBOOT interface versions
  */
 #define	USERBOOT_VERSION_1      1
+#define	USERBOOT_VERSION_2      2
=20
 /*
  * Exit codes from the loader
@@ -175,4 +176,9 @@
          */
 	void		(*getmem)(void *arg, uint64_t *lowmem,
             uint64_t *highmem);
+	/*
+	 * ioctl interface to the disk device
+	 */
+	int		(*diskioctl)(void *arg, int unit, u_long cmd,
+	    void *data);
 };
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/boot/userboot/userboot/Makefi=
le
--- a/head/sys/boot/userboot/userboot/Makefile	Mon Jul 30 11:44:18 2012 +03=
00
+++ b/head/sys/boot/userboot/userboot/Makefile	Fri Aug 10 14:19:25 2012 +03=
00
@@ -1,4 +1,4 @@
-# $FreeBSD: head/sys/boot/userboot/userboot/Makefile 223712 2011-07-01 18:=
31:59Z marius $
+# $FreeBSD: head/sys/boot/userboot/userboot/Makefile 239058 2012-08-05 12:=
15:15Z ae $
=20
 NO_MAN=3D
 WITHOUT_SSP=3D
@@ -32,7 +32,6 @@
 CFLAGS+=3D	-I${.CURDIR}/../../..
 CFLAGS+=3D	-I${.CURDIR}/../../../../lib/libstand
 CFLAGS+=3D	-ffreestanding -I.
-CFLAGS+=3D	-DLOADER_GPT_SUPPORT -DLOADER_MBR_SUPPORT
=20
 LDFLAGS+=3D	-nostdlib -Wl,-Bsymbolic
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/boot/userboot/userboot/bootin=
fo32.c
--- a/head/sys/boot/userboot/userboot/bootinfo32.c	Mon Jul 30 11:44:18 2012=
 +0300
+++ b/head/sys/boot/userboot/userboot/bootinfo32.c	Fri Aug 10 14:19:25 2012=
 +0300
@@ -25,7 +25,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/boot/userboot/userboot/bootinfo32.c 223695 20=
11-06-30 16:08:56Z dfr $");
+__FBSDID("$FreeBSD: head/sys/boot/userboot/userboot/bootinfo32.c 239057 20=
12-08-05 11:59:46Z ae $");
=20
 #include <stand.h>
 #include <sys/param.h>
@@ -143,7 +143,7 @@
     vm_offset_t			size;
     vm_offset_t			ssym, esym;
     char			*rootdevname;
-    int				bootdevnr, i, howto;
+    int				bootdevnr, howto;
     char			*kernelname;
     const char			*kernelpath;
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/boot/userboot/userboot/copy.c
--- a/head/sys/boot/userboot/userboot/copy.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/boot/userboot/userboot/copy.c	Fri Aug 10 14:19:25 2012 +0300
@@ -25,7 +25,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/boot/userboot/userboot/copy.c 223695 2011-06-=
30 16:08:56Z dfr $");
+__FBSDID("$FreeBSD: head/sys/boot/userboot/userboot/copy.c 239057 2012-08-=
05 11:59:46Z ae $");
=20
 #include <stand.h>
=20
@@ -50,7 +50,6 @@
 ssize_t
 userboot_readin(int fd, vm_offset_t va, size_t len)
 {
-	void *pa;
 	ssize_t res, s;
 	size_t sz;
 	char buf[4096];
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/boot/userboot/userboot/device=
name.c
--- a/head/sys/boot/userboot/userboot/devicename.c	Mon Jul 30 11:44:18 2012=
 +0300
+++ b/head/sys/boot/userboot/userboot/devicename.c	Fri Aug 10 14:19:25 2012=
 +0300
@@ -25,11 +25,10 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/boot/userboot/userboot/devicename.c 223695 20=
11-06-30 16:08:56Z dfr $");
+__FBSDID("$FreeBSD: head/sys/boot/userboot/userboot/devicename.c 239058 20=
12-08-05 12:15:15Z ae $");
=20
 #include <stand.h>
 #include <string.h>
-#include <sys/disklabel.h>
=20
 #include "bootstrap.h"
 #include "disk.h"
@@ -87,7 +86,7 @@
 {
     struct disk_devdesc *idev;
     struct devsw	*dv;
-    int			i, unit, slice, partition, err;
+    int			i, unit, err;
     char		*cp;
     const char		*np;
=20
@@ -113,62 +112,9 @@
 	break;
=20
     case DEVT_DISK:
-	unit =3D -1;
-	slice =3D -1;
-	partition =3D -1;
-	if (*np && (*np !=3D ':')) {
-	    unit =3D strtol(np, &cp, 10);	/* next comes the unit number */
-	    if (cp =3D=3D np) {
-		err =3D EUNIT;
-		goto fail;
-	    }
-#ifdef LOADER_GPT_SUPPORT
-	    if (*cp =3D=3D 'p') {		/* got a GPT partition */
-		np =3D cp + 1;
-		slice =3D strtol(np, &cp, 10);
-		if (cp =3D=3D np) {
-		    err =3D ESLICE;
-		    goto fail;
-		}
-		if (*cp && (*cp !=3D ':')) {
-		    err =3D EINVAL;
-		    goto fail;
-		}
-		partition =3D 0xff;
-	    } else {
-#endif
-		if (*cp =3D=3D 's') {		/* got a slice number */
-		    np =3D cp + 1;
-		    slice =3D strtol(np, &cp, 10);
-		    if (cp =3D=3D np) {
-			err =3D ESLICE;
-			goto fail;
-		    }
-		}
-		if (*cp && (*cp !=3D ':')) {
-		    partition =3D *cp - 'a';	/* got a partition number */
-		    if ((partition < 0) || (partition >=3D MAXPARTITIONS)) {
-			err =3D EPART;
-			goto fail;
-		    }
-		    cp++;
-		}
-#ifdef LOADER_GPT_SUPPORT
-	    }
-#endif
-	} else {
-		cp =3D np;
-	}
-	if (*cp && (*cp !=3D ':')) {
-	    err =3D EINVAL;
+	err =3D disk_parsedev(idev, np, path);
+	if (err !=3D 0)
 	    goto fail;
-	}
-
-	idev->d_unit =3D unit;
-	idev->d_slice =3D slice;
-	idev->d_partition =3D partition;
-	if (path !=3D NULL)
-	    *path =3D (*cp =3D=3D 0) ? cp : cp + 1;
 	break;
=20
     case DEVT_CD:
@@ -219,8 +165,7 @@
 {
     struct disk_devdesc	*dev =3D (struct disk_devdesc *)vdev;
     static char		buf[128];	/* XXX device length constant? */
-    char		*cp;
-   =20
+
     switch(dev->d_type) {
     case DEVT_NONE:
 	strcpy(buf, "(no device)");
@@ -231,22 +176,7 @@
 	break;
=20
     case DEVT_DISK:
-	cp =3D buf;
-	cp +=3D sprintf(cp, "%s%d", dev->d_dev->dv_name, dev->d_unit);
-#ifdef LOADER_GPT_SUPPORT
-	if (dev->d_partition =3D=3D 0xff) {
-	    cp +=3D sprintf(cp, "p%d", dev->d_slice);
-	} else {
-#endif
-	    if (dev->d_slice > 0)
-		cp +=3D sprintf(cp, "s%d", dev->d_slice);
-	    if (dev->d_partition >=3D 0)
-		cp +=3D sprintf(cp, "%c", dev->d_partition + 'a');
-#ifdef LOADER_GPT_SUPPORT
-	}
-#endif
-	strcat(cp, ":");
-	break;
+	return (disk_fmtdev(vdev));
=20
     case DEVT_NET:
     case DEVT_ZFS:
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/boot/userboot/userboot/main.c
--- a/head/sys/boot/userboot/userboot/main.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/boot/userboot/userboot/main.c	Fri Aug 10 14:19:25 2012 +0300
@@ -26,7 +26,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/boot/userboot/userboot/main.c 223695 2011-06-=
30 16:08:56Z dfr $");
+__FBSDID("$FreeBSD: head/sys/boot/userboot/userboot/main.c 239073 2012-08-=
05 17:04:58Z ae $");
=20
 #include <stand.h>
 #include <string.h>
@@ -36,6 +36,8 @@
 #include "disk.h"
 #include "libuserboot.h"
=20
+#define	USERBOOT_VERSION	USERBOOT_VERSION_2
+
 struct loader_callbacks_v1 *callbacks;
 void *callbacks_arg;
=20
@@ -70,7 +72,7 @@
 	static char malloc[512*1024];
 	int i;
=20
-        if (version !=3D USERBOOT_VERSION_1)
+        if (version !=3D USERBOOT_VERSION)
                 abort();
=20
 	callbacks =3D cb;
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/boot/userboot/userboot/userbo=
ot_disk.c
--- a/head/sys/boot/userboot/userboot/userboot_disk.c	Mon Jul 30 11:44:18 2=
012 +0300
+++ b/head/sys/boot/userboot/userboot/userboot_disk.c	Fri Aug 10 14:19:25 2=
012 +0300
@@ -25,29 +25,37 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/boot/userboot/userboot/userboot_disk.c 223695=
 2011-06-30 16:08:56Z dfr $");
+__FBSDID("$FreeBSD: head/sys/boot/userboot/userboot/userboot_disk.c 239058=
 2012-08-05 12:15:15Z ae $");
=20
 /*
  * Userboot disk image handling.
  */
=20
+#include <sys/disk.h>
 #include <stand.h>
-
 #include <stdarg.h>
-#include <uuid.h>
-
 #include <bootstrap.h>
=20
 #include "disk.h"
 #include "libuserboot.h"
=20
+struct userdisk_info {
+	uint64_t	mediasize;
+	uint16_t	sectorsize;
+};
+
 int userboot_disk_maxunit =3D 0;
=20
+static int userdisk_maxunit =3D 0;
+static struct userdisk_info	*ud_info;
+
 static int	userdisk_init(void);
+static void	userdisk_cleanup(void);
 static int	userdisk_strategy(void *devdata, int flag, daddr_t dblk,
 		    size_t size, char *buf, size_t *rsize);
 static int	userdisk_open(struct open_file *f, ...);
 static int	userdisk_close(struct open_file *f);
+static int	userdisk_ioctl(struct open_file *f, u_long cmd, void *data);
 static void	userdisk_print(int verbose);
=20
 struct devsw userboot_disk =3D {
@@ -57,41 +65,70 @@
 	userdisk_strategy,
 	userdisk_open,
 	userdisk_close,
-	noioctl,
+	userdisk_ioctl,
 	userdisk_print,
-	NULL
+	userdisk_cleanup
 };
=20
 /*
- * Nothing to do here.
+ * Initialize userdisk_info structure for each disk.
  */
 static int
 userdisk_init(void)
 {
+	off_t mediasize;
+	u_int sectorsize;
+	int i;
+
+	userdisk_maxunit =3D userboot_disk_maxunit;
+	if (userdisk_maxunit > 0) {
+		ud_info =3D malloc(sizeof(*ud_info) * userdisk_maxunit);
+		if (ud_info =3D=3D NULL)
+			return (ENOMEM);
+		for (i =3D 0; i < userdisk_maxunit; i++) {
+			if (CALLBACK(diskioctl, i, DIOCGSECTORSIZE,
+			    &sectorsize) !=3D 0 || CALLBACK(diskioctl, i,
+			    DIOCGMEDIASIZE, &mediasize) !=3D 0)
+				return (ENXIO);
+			ud_info[i].mediasize =3D mediasize;
+			ud_info[i].sectorsize =3D sectorsize;
+		}
+	}
=20
 	return(0);
 }
=20
+static void
+userdisk_cleanup(void)
+{
+
+	if (userdisk_maxunit > 0)
+		free(ud_info);
+}
+
 /*
  * Print information about disks
  */
 static void
 userdisk_print(int verbose)
 {
-	int			i;
-	char			line[80];
-	struct disk_devdesc	dev;
+	struct disk_devdesc dev;
+	char line[80];
+	int i;
=20
-	for (i =3D 0; i < userboot_disk_maxunit; i++) {
+	for (i =3D 0; i < userdisk_maxunit; i++) {
 		sprintf(line, "    disk%d:   Guest drive image\n", i);
 		pager_output(line);
 		dev.d_dev =3D &userboot_disk;
 		dev.d_unit =3D i;
 		dev.d_slice =3D -1;
 		dev.d_partition =3D -1;
-		dev.d_offset =3D 0;
-		sprintf(line, "    disk%d", i);
-		disk_print(&dev, line, verbose);
+		if (disk_open(&dev, ud_info[i].mediasize,
+		    ud_info[i].sectorsize) =3D=3D 0) {
+			sprintf(line, "    disk%d", i);
+			disk_print(&dev, line, verbose);
+			disk_close(&dev);
+		}
 	}
 }
=20
@@ -108,17 +145,20 @@
 	dev =3D va_arg(ap, struct disk_devdesc *);
 	va_end(ap);
=20
-	if (dev->d_unit < 0 || dev->d_unit >=3D userboot_disk_maxunit)
+	if (dev->d_unit < 0 || dev->d_unit >=3D userdisk_maxunit)
 		return (EIO);
=20
-	return (disk_open(dev));
+	return (disk_open(dev, ud_info[dev->d_unit].mediasize,
+	    ud_info[dev->d_unit].sectorsize));
 }
=20
 static int
 userdisk_close(struct open_file *f)
 {
+	struct disk_devdesc *dev;
=20
-	return(0);
+	dev =3D (struct disk_devdesc *)f->f_devdata;
+	return (disk_close(dev));
 }
=20
 static int
@@ -136,7 +176,7 @@
 		return (EINVAL);
 	if (rsize)
 		*rsize =3D 0;
-	off =3D (dblk + dev->d_offset) * DISK_SECSIZE;
+	off =3D (dblk + dev->d_offset) * ud_info[dev->d_unit].sectorsize;
 	rc =3D CALLBACK(diskread, dev->d_unit, off, buf, size, &resid);
 	if (rc)
 		return (rc);
@@ -144,3 +184,12 @@
 		*rsize =3D size - resid;
 	return (0);
 }
+
+static int
+userdisk_ioctl(struct open_file *f, u_long cmd, void *data)
+{
+	struct disk_devdesc *dev;
+
+	dev =3D (struct disk_devdesc *)f->f_devdata;
+	return (CALLBACK(diskioctl, dev->d_unit, cmd, data));
+}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/boot/zfs/Makefile
--- a/head/sys/boot/zfs/Makefile	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/boot/zfs/Makefile	Fri Aug 10 14:19:25 2012 +0300
@@ -1,4 +1,4 @@
-# $FreeBSD$
+# $FreeBSD: head/sys/boot/zfs/Makefile 238795 2012-07-26 10:10:54Z ache $
=20
 LIB=3D		zfsboot
 INTERNALLIB=3D
@@ -33,5 +33,7 @@
 .include <bsd.lib.mk>
=20
 .if ${MACHINE_CPUARCH} =3D=3D "amd64"
+.if !exists(machine)
 beforedepend ${OBJS}: machine
 .endif
+.endif
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/boot/zfs/zfs.c
--- a/head/sys/boot/zfs/zfs.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/boot/zfs/zfs.c	Fri Aug 10 14:19:25 2012 +0300
@@ -23,20 +23,21 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- *	$FreeBSD: head/sys/boot/zfs/zfs.c 235394 2012-05-13 10:54:43Z avg $
+ *	$FreeBSD: head/sys/boot/zfs/zfs.c 239068 2012-08-05 14:48:28Z ae $
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/boot/zfs/zfs.c 235394 2012-05-13 10:54:43Z av=
g $");
+__FBSDID("$FreeBSD: head/sys/boot/zfs/zfs.c 239068 2012-08-05 14:48:28Z ae=
 $");
=20
 /*
  *	Stand-alone file reading package.
  */
=20
+#include <sys/disk.h>
 #include <sys/param.h>
-#include <sys/disklabel.h>
 #include <sys/time.h>
 #include <sys/queue.h>
+#include <part.h>
 #include <stddef.h>
 #include <stdarg.h>
 #include <string.h>
@@ -376,21 +377,103 @@
 	return (0);
 }
=20
+struct zfs_probe_args {
+	int		fd;
+	const char	*devname;
+	uint64_t	*pool_guid;
+	uint16_t	secsz;
+};
+
+static int
+zfs_diskread(void *arg, void *buf, size_t blocks, off_t offset)
+{
+	struct zfs_probe_args *ppa;
+
+	ppa =3D (struct zfs_probe_args *)arg;
+	return (vdev_read(NULL, (void *)(uintptr_t)ppa->fd,
+	    offset * ppa->secsz, buf, blocks * ppa->secsz));
+}
+
+static int
+zfs_probe(int fd, uint64_t *pool_guid)
+{
+	spa_t *spa;
+	int ret;
+
+	ret =3D vdev_probe(vdev_read, (void *)(uintptr_t)fd, &spa);
+	if (ret =3D=3D 0 && pool_guid !=3D NULL)
+		*pool_guid =3D spa->spa_guid;
+	return (ret);
+}
+
+static void
+zfs_probe_partition(void *arg, const char *partname,
+    const struct ptable_entry *part)
+{
+	struct zfs_probe_args *ppa, pa;
+	struct ptable *table;
+	char devname[32];
+	int ret;
+
+	/* Probe only freebsd-zfs and freebsd partitions */
+	if (part->type !=3D PART_FREEBSD &&
+	    part->type !=3D PART_FREEBSD_ZFS)
+		return;
+
+	ppa =3D (struct zfs_probe_args *)arg;
+	strncpy(devname, ppa->devname, strlen(ppa->devname) - 1);
+	sprintf(devname, "%s%s:", devname, partname);
+	pa.fd =3D open(devname, O_RDONLY);
+	if (pa.fd =3D=3D -1)
+		return;
+	ret =3D zfs_probe(pa.fd, ppa->pool_guid);
+	if (ret =3D=3D 0)
+		return;
+	/* Do we have BSD label here? */
+	if (part->type =3D=3D PART_FREEBSD) {
+		pa.devname =3D devname;
+		pa.pool_guid =3D ppa->pool_guid;
+		pa.secsz =3D ppa->secsz;
+		table =3D ptable_open(&pa, part->end - part->start + 1,
+		    ppa->secsz, zfs_diskread);
+		if (table !=3D NULL) {
+			ptable_iterate(table, &pa, zfs_probe_partition);
+			ptable_close(table);
+		}
+	}
+	close(pa.fd);
+}
+
 int
 zfs_probe_dev(const char *devname, uint64_t *pool_guid)
 {
-	spa_t *spa;
-	int fd;
+	struct ptable *table;
+	struct zfs_probe_args pa;
+	off_t mediasz;
 	int ret;
=20
-	fd =3D open(devname, O_RDONLY);
-	if (fd =3D=3D -1)
+	pa.fd =3D open(devname, O_RDONLY);
+	if (pa.fd =3D=3D -1)
 		return (ENXIO);
-	ret =3D vdev_probe(vdev_read, (void *)(uintptr_t)fd, &spa);
-	if (ret !=3D 0)
-		close(fd);
-	else if (pool_guid !=3D NULL)
-		*pool_guid =3D spa->spa_guid;
+	/* Probe the whole disk */
+	ret =3D zfs_probe(pa.fd, pool_guid);
+	if (ret =3D=3D 0)
+		return (0);
+	/* Probe each partition */
+	ret =3D ioctl(pa.fd, DIOCGMEDIASIZE, &mediasz);
+	if (ret =3D=3D 0)
+		ret =3D ioctl(pa.fd, DIOCGSECTORSIZE, &pa.secsz);
+	if (ret =3D=3D 0) {
+		pa.devname =3D devname;
+		pa.pool_guid =3D pool_guid;
+		table =3D ptable_open(&pa, mediasz / pa.secsz, pa.secsz,
+		    zfs_diskread);
+		if (table !=3D NULL) {
+			ptable_iterate(table, &pa, zfs_probe_partition);
+			ptable_close(table);
+		}
+	}
+	close(pa.fd);
 	return (0);
 }
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/cam/ata/ata_all.h
--- a/head/sys/cam/ata/ata_all.h	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/cam/ata/ata_all.h	Fri Aug 10 14:19:25 2012 +0300
@@ -23,7 +23,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.
  *
- * $FreeBSD: head/sys/cam/ata/ata_all.h 235897 2012-05-24 11:07:39Z mav $
+ * $FreeBSD: head/sys/cam/ata/ata_all.h 238886 2012-07-29 11:51:48Z mav $
  */
=20
 #ifndef	CAM_ATA_ALL_H
@@ -35,6 +35,7 @@
 struct cam_periph;
 union  ccb;
=20
+#define	SID_AEN		0x04	/* Abuse inq_flags bit to track enabled AEN. */
 #define	SID_DMA		0x10	/* Abuse inq_flags bit to track enabled DMA. */
=20
 struct ata_cmd {
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/cam/ata/ata_xpt.c
--- a/head/sys/cam/ata/ata_xpt.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/cam/ata/ata_xpt.c	Fri Aug 10 14:19:25 2012 +0300
@@ -25,7 +25,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/cam/ata/ata_xpt.c 236814 2012-06-09 13:07:44Z=
 mav $");
+__FBSDID("$FreeBSD: head/sys/cam/ata/ata_xpt.c 238886 2012-07-29 11:51:48Z=
 mav $");
=20
 #include <sys/param.h>
 #include <sys/bus.h>
@@ -468,6 +468,12 @@
 		    0, 0x02);
 		break;
 	case PROBE_SETAN:
+		/* Remember what transport thinks about AEN. */
+		if (softc->caps & CTS_SATA_CAPS_H_AN)
+			path->device->inq_flags |=3D SID_AEN;
+		else
+			path->device->inq_flags &=3D ~SID_AEN;
+		xpt_async(AC_GETDEV_CHANGED, path, NULL);
 		cam_fill_ataio(ataio,
 		    1,
 		    probedone,
@@ -1154,6 +1160,12 @@
 		cts.xport_specific.sata.valid =3D CTS_SATA_VALID_CAPS;
 		xpt_action((union ccb *)&cts);
 		softc->caps =3D caps;
+		/* Remember what transport thinks about AEN. */
+		if (softc->caps & CTS_SATA_CAPS_H_AN)
+			path->device->inq_flags |=3D SID_AEN;
+		else
+			path->device->inq_flags &=3D ~SID_AEN;
+		xpt_async(AC_GETDEV_CHANGED, path, NULL);
 		if (periph->path->device->flags & CAM_DEV_UNCONFIGURED) {
 			path->device->flags &=3D ~CAM_DEV_UNCONFIGURED;
 			xpt_acquire_device(path->device);
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/cam/cam_ccb.h
--- a/head/sys/cam/cam_ccb.h	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/cam/cam_ccb.h	Fri Aug 10 14:19:25 2012 +0300
@@ -25,7 +25,7 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: head/sys/cam/cam_ccb.h 236437 2012-06-02 08:29:07Z mav $
+ * $FreeBSD: head/sys/cam/cam_ccb.h 238886 2012-07-29 11:51:48Z mav $
  */
=20
 #ifndef _CAM_CAM_CCB_H
@@ -755,6 +755,7 @@
  * Definitions for the asynchronous callback CCB fields.
  */
 typedef enum {
+	AC_UNIT_ATTENTION	=3D 0x4000,/* Device reported UNIT ATTENTION */
 	AC_ADVINFO_CHANGED	=3D 0x2000,/* Advance info might have changes */
 	AC_CONTRACT		=3D 0x1000,/* A contractual callback */
 	AC_GETDEV_CHANGED	=3D 0x800,/* Getdev info might have changed */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/cam/cam_periph.c
--- a/head/sys/cam/cam_periph.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/cam/cam_periph.c	Fri Aug 10 14:19:25 2012 +0300
@@ -28,7 +28,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/cam/cam_periph.c 237682 2012-06-28 03:36:13Z =
ken $");
+__FBSDID("$FreeBSD: head/sys/cam/cam_periph.c 238886 2012-07-29 11:51:48Z =
mav $");
=20
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -1593,6 +1593,7 @@
 	const char *action_string;
 	cam_status  status;
 	int	    frozen, error, openings, print, lost_device;
+	int	    error_code, sense_key, asc, ascq;
 	u_int32_t   relsim_flags, timeout;
=20
 	print =3D 1;
@@ -1759,6 +1760,12 @@
 			xpt_async(AC_LOST_DEVICE, newpath, NULL);
 			xpt_free_path(newpath);
 		}
+
+	/* Broadcast UNIT ATTENTIONs to all periphs. */
+	} else if (scsi_extract_sense_ccb(ccb,
+	    &error_code, &sense_key, &asc, &ascq) &&
+	    sense_key =3D=3D SSD_KEY_UNIT_ATTENTION) {
+		xpt_async(AC_UNIT_ATTENTION, orig_ccb->ccb_h.path, orig_ccb);
 	}
=20
 	/* Attempt a retry */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/cam/cam_xpt.c
--- a/head/sys/cam/cam_xpt.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/cam/cam_xpt.c	Fri Aug 10 14:19:25 2012 +0300
@@ -28,7 +28,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/cam/cam_xpt.c 237398 2012-06-21 14:35:46Z mav=
 $");
+__FBSDID("$FreeBSD: head/sys/cam/cam_xpt.c 238886 2012-07-29 11:51:48Z mav=
 $");
=20
 #include <sys/param.h>
 #include <sys/bus.h>
@@ -4055,6 +4055,7 @@
 	case AC_GETDEV_CHANGED: return ("AC_GETDEV_CHANGED");
 	case AC_CONTRACT: return ("AC_CONTRACT");
 	case AC_ADVINFO_CHANGED: return ("AC_ADVINFO_CHANGED");
+	case AC_UNIT_ATTENTION: return ("AC_UNIT_ATTENTION");
 	}
 	return ("AC_UNKNOWN");
 }
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/cam/ctl/scsi_ctl.c
--- a/head/sys/cam/ctl/scsi_ctl.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/cam/ctl/scsi_ctl.c	Fri Aug 10 14:19:25 2012 +0300
@@ -36,7 +36,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/cam/ctl/scsi_ctl.c 237726 2012-06-28 19:39:30=
Z ken $");
+__FBSDID("$FreeBSD: head/sys/cam/ctl/scsi_ctl.c 238870 2012-07-28 20:08:14=
Z mjacob $");
=20
 #include <sys/param.h>
 #include <sys/queue.h>
@@ -1081,11 +1081,81 @@
 	}
 }
=20
+static int
+ctlfe_adjust_cdb(struct ccb_accept_tio *atio, uint32_t offset)
+{
+	uint64_t lba;
+	uint32_t num_blocks, nbc;
+	uint8_t *cmdbyt =3D (atio->ccb_h.flags & CAM_CDB_POINTER)?
+	    atio->cdb_io.cdb_ptr : atio->cdb_io.cdb_bytes;
+
+	nbc =3D offset >> 9;	/* ASSUMING 512 BYTE BLOCKS */
+
+	switch (cmdbyt[0]) {
+	case READ_6:
+	case WRITE_6:
+	{
+		struct scsi_rw_6 *cdb =3D (struct scsi_rw_6 *)cmdbyt;
+		lba =3D scsi_3btoul(cdb->addr);
+		lba &=3D 0x1fffff;
+		num_blocks =3D cdb->length;
+		if (num_blocks =3D=3D 0)
+			num_blocks =3D 256;
+		lba +=3D nbc;
+		num_blocks -=3D nbc;
+		scsi_ulto3b(lba, cdb->addr);
+		cdb->length =3D num_blocks;
+		break;
+	}
+	case READ_10:
+	case WRITE_10:
+	{
+		struct scsi_rw_10 *cdb =3D (struct scsi_rw_10 *)cmdbyt;
+		lba =3D scsi_4btoul(cdb->addr);
+		num_blocks =3D scsi_2btoul(cdb->length);
+		lba +=3D nbc;
+		num_blocks -=3D nbc;
+		scsi_ulto4b(lba, cdb->addr);
+		scsi_ulto2b(num_blocks, cdb->length);
+		break;
+	}
+	case READ_12:
+	case WRITE_12:
+	{
+		struct scsi_rw_12 *cdb =3D (struct scsi_rw_12 *)cmdbyt;
+		lba =3D scsi_4btoul(cdb->addr);
+		num_blocks =3D scsi_4btoul(cdb->length);
+		lba +=3D nbc;
+		num_blocks -=3D nbc;
+		scsi_ulto4b(lba, cdb->addr);
+		scsi_ulto4b(num_blocks, cdb->length);
+		break;
+	}
+	case READ_16:
+	case WRITE_16:
+	{
+		struct scsi_rw_16 *cdb =3D (struct scsi_rw_16 *)cmdbyt;
+		lba =3D scsi_8btou64(cdb->addr);
+		num_blocks =3D scsi_4btoul(cdb->length);
+		lba +=3D nbc;
+		num_blocks -=3D nbc;
+		scsi_u64to8b(lba, cdb->addr);
+		scsi_ulto4b(num_blocks, cdb->length);
+		break;
+	}
+	default:
+		return -1;
+	}
+	return (0);
+}
+
 static void
 ctlfedone(struct cam_periph *periph, union ccb *done_ccb)
 {
 	struct ctlfe_lun_softc *softc;
 	struct ctlfe_softc *bus_softc;
+	struct ccb_accept_tio *atio =3D NULL;
+	union ctl_io *io =3D NULL;
=20
 #ifdef CTLFE_DEBUG
 	printf("%s: entered, func_code =3D %#x, type =3D %#lx\n", __func__,
@@ -1123,13 +1193,12 @@
 	}
 	switch (done_ccb->ccb_h.func_code) {
 	case XPT_ACCEPT_TARGET_IO: {
-		union ctl_io *io;
-		struct ccb_accept_tio *atio;
=20
 		atio =3D &done_ccb->atio;
=20
 		softc->atios_returned++;
=20
+ resubmit:
 		/*
 		 * Allocate a ctl_io, pass it to CTL, and wait for the
 		 * datamove or done.
@@ -1213,8 +1282,8 @@
 		break;
 	}
 	case XPT_CONT_TARGET_IO: {
-		struct ccb_accept_tio *atio;
-		union ctl_io *io;
+		int srr =3D 0;
+		uint32_t srr_off =3D 0;
=20
 		atio =3D (struct ccb_accept_tio *)done_ccb->ccb_h.ccb_atio;
 		io =3D (union ctl_io *)atio->ccb_h.io_ptr;
@@ -1225,6 +1294,57 @@
 		       __func__, atio->tag_id, done_ccb->ccb_h.flags);
 #endif
 		/*
+		 * Handle SRR case were the data pointer is pushed back hack
+		 */
+		if ((done_ccb->ccb_h.status & CAM_STATUS_MASK) =3D=3D CAM_MESSAGE_RECV
+		    && done_ccb->csio.msg_ptr !=3D NULL
+		    && done_ccb->csio.msg_ptr[0] =3D=3D MSG_EXTENDED
+		    && done_ccb->csio.msg_ptr[1] =3D=3D 5
+       		    && done_ccb->csio.msg_ptr[2] =3D=3D 0) {
+			srr =3D 1;
+			srr_off =3D
+			    (done_ccb->csio.msg_ptr[3] << 24)
+			    | (done_ccb->csio.msg_ptr[4] << 16)
+			    | (done_ccb->csio.msg_ptr[5] << 8)
+			    | (done_ccb->csio.msg_ptr[6]);
+		}
+
+		if (srr && (done_ccb->ccb_h.flags & CAM_SEND_STATUS)) {
+			/*
+			 * If status was being sent, the back end data is now
+			 * history. Hack it up and resubmit a new command with
+			 * the CDB adjusted. If the SIM does the right thing,
+			 * all of the resid math should work.
+			 */
+			softc->ccbs_freed++;
+			xpt_release_ccb(done_ccb);
+			ctl_free_io(io);
+			if (ctlfe_adjust_cdb(atio, srr_off) =3D=3D 0) {
+				done_ccb =3D (union ccb *)atio;
+				goto resubmit;
+			}
+			/*
+			 * Fall through to doom....
+			 */
+		} else if (srr) {
+			/*
+			 * If we have an srr and we're still sending data, we
+			 * should be able to adjust offsets and cycle again.
+			 */
+			io->scsiio.kern_rel_offset =3D
+			    io->scsiio.ext_data_filled =3D srr_off;
+			io->scsiio.ext_data_len =3D io->scsiio.kern_total_len -
+			    io->scsiio.kern_rel_offset;
+			softc->ccbs_freed++;
+			io->scsiio.io_hdr.status =3D CTL_STATUS_NONE;
+			xpt_release_ccb(done_ccb);
+			TAILQ_INSERT_HEAD(&softc->work_queue, &atio->ccb_h,
+					  periph_links.tqe);
+			xpt_schedule(periph, /*priority*/ 1);
+			return;
+		}
+
+		/*
 		 * If we were sending status back to the initiator, free up
 		 * resources.  If we were doing a datamove, call the
 		 * datamove done routine.
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/cam/scsi/scsi_cd.c
--- a/head/sys/cam/scsi/scsi_cd.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/cam/scsi/scsi_cd.c	Fri Aug 10 14:19:25 2012 +0300
@@ -46,7 +46,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/cam/scsi/scsi_cd.c 237689 2012-06-28 07:01:48=
Z imp $");
+__FBSDID("$FreeBSD: head/sys/cam/scsi/scsi_cd.c 238886 2012-07-29 11:51:48=
Z mav $");
=20
 #include "opt_cd.h"
=20
@@ -97,6 +97,7 @@
 	CD_FLAG_NEW_DISC	=3D 0x0002,
 	CD_FLAG_DISC_LOCKED	=3D 0x0004,
 	CD_FLAG_DISC_REMOVABLE	=3D 0x0008,
+	CD_FLAG_SAW_MEDIA	=3D 0x0010,
 	CD_FLAG_CHANGER		=3D 0x0040,
 	CD_FLAG_ACTIVE		=3D 0x0080,
 	CD_FLAG_SCHED_ON_COMP	=3D 0x0100,
@@ -110,6 +111,7 @@
 	CD_CCB_PROBE		=3D 0x01,
 	CD_CCB_BUFFER_IO	=3D 0x02,
 	CD_CCB_WAITING		=3D 0x03,
+	CD_CCB_TUR		=3D 0x04,
 	CD_CCB_TYPE_MASK	=3D 0x0F,
 	CD_CCB_RETRY_UA		=3D 0x10
 } cd_ccb_state;
@@ -154,12 +156,14 @@
 	struct cam_periph	*periph;
 	int			minimum_command_size;
 	int			outstanding_cmds;
+	int			tur;
 	struct task		sysctl_task;
 	struct sysctl_ctx_list	sysctl_ctx;
 	struct sysctl_oid	*sysctl_tree;
 	STAILQ_HEAD(, cd_mode_params)	mode_queue;
 	struct cd_tocdata	toc;
 	struct disk		*disk;
+	struct callout		mediapoll_c;
 };
=20
 struct cd_page_sizes {
@@ -281,6 +285,7 @@
 				  struct dvd_authinfo *authinfo);
 static	int		cdreaddvdstructure(struct cam_periph *periph,
 					   struct dvd_struct *dvdstruct);
+static timeout_t	cdmediapoll;
=20
 static struct periph_driver cddriver =3D
 {
@@ -290,6 +295,9 @@
=20
 PERIPHDRIVER_DECLARE(cd, cddriver);
=20
+#ifndef	CD_DEFAULT_POLL_PERIOD
+#define	CD_DEFAULT_POLL_PERIOD	3
+#endif
 #ifndef	CD_DEFAULT_RETRY
 #define	CD_DEFAULT_RETRY	4
 #endif
@@ -303,6 +311,7 @@
 #define CHANGER_MAX_BUSY_SECONDS	15
 #endif
=20
+static int cd_poll_period =3D CD_DEFAULT_POLL_PERIOD;
 static int cd_retry_count =3D CD_DEFAULT_RETRY;
 static int cd_timeout =3D CD_DEFAULT_TIMEOUT;
 static int changer_min_busy_seconds =3D CHANGER_MIN_BUSY_SECONDS;
@@ -311,6 +320,9 @@
 static SYSCTL_NODE(_kern_cam, OID_AUTO, cd, CTLFLAG_RD, 0, "CAM CDROM driv=
er");
 static SYSCTL_NODE(_kern_cam_cd, OID_AUTO, changer, CTLFLAG_RD, 0,
     "CD Changer");
+SYSCTL_INT(_kern_cam_cd, OID_AUTO, poll_period, CTLFLAG_RW,
+           &cd_poll_period, 0, "Media polling period in seconds");
+TUNABLE_INT("kern.cam.cd.poll_period", &cd_poll_period);
 SYSCTL_INT(_kern_cam_cd, OID_AUTO, retry_count, CTLFLAG_RW,
            &cd_retry_count, 0, "Normal I/O retry count");
 TUNABLE_INT("kern.cam.cd.retry_count", &cd_retry_count);
@@ -494,6 +506,7 @@
 		xpt_print(periph->path, "can't remove sysctl context\n");
 	}
=20
+	callout_drain(&softc->mediapoll_c);
 	disk_destroy(softc->disk);
 	free(softc, M_DEVBUF);
 	cam_periph_lock(periph);
@@ -504,6 +517,7 @@
 	struct cam_path *path, void *arg)
 {
 	struct cam_periph *periph;
+	struct cd_softc *softc;
=20
 	periph =3D (struct cam_periph *)callback_arg;
 	switch (code) {
@@ -541,10 +555,39 @@
=20
 		break;
 	}
+	case AC_UNIT_ATTENTION:
+	{
+		union ccb *ccb;
+		int error_code, sense_key, asc, ascq;
+
+		softc =3D (struct cd_softc *)periph->softc;
+		ccb =3D (union ccb *)arg;
+
+		/*
+		 * Handle all media change UNIT ATTENTIONs except
+		 * our own, as they will be handled by cderror().
+		 */
+		if (xpt_path_periph(ccb->ccb_h.path) !=3D periph &&
+		    scsi_extract_sense_ccb(ccb,
+		     &error_code, &sense_key, &asc, &ascq)) {
+			if (asc =3D=3D 0x28 && ascq =3D=3D 0x00)
+				disk_media_changed(softc->disk, M_NOWAIT);
+		}
+		cam_periph_async(periph, code, path, arg);
+		break;
+	}
+	case AC_SCSI_AEN:
+		softc =3D (struct cd_softc *)periph->softc;
+		if (softc->state =3D=3D CD_STATE_NORMAL && !softc->tur) {
+			if (cam_periph_acquire(periph) =3D=3D CAM_REQ_CMP) {
+				softc->tur =3D 1;
+				xpt_schedule(periph, CAM_PRIORITY_DEV);
+			}
+		}
+		/* FALLTHROUGH */
 	case AC_SENT_BDR:
 	case AC_BUS_RESET:
 	{
-		struct cd_softc *softc;
 		struct ccb_hdr *ccbh;
=20
 		softc =3D (struct cd_softc *)periph->softc;
@@ -788,8 +831,8 @@
 	 * Add an async callback so that we get
 	 * notified if this device goes away.
 	 */
-	xpt_register_async(AC_SENT_BDR | AC_BUS_RESET | AC_LOST_DEVICE,
-			   cdasync, periph, periph->path);
+	xpt_register_async(AC_SENT_BDR | AC_BUS_RESET | AC_LOST_DEVICE |
+	    AC_SCSI_AEN | AC_UNIT_ATTENTION, cdasync, periph, periph->path);
=20
 	/*
 	 * If the target lun is greater than 0, we most likely have a CD
@@ -1005,6 +1048,17 @@
 		}
 	}
=20
+	/*
+	 * Schedule a periodic media polling events.
+	 */
+	callout_init_mtx(&softc->mediapoll_c, periph->sim->mtx, 0);
+	if ((softc->flags & CD_FLAG_DISC_REMOVABLE) &&
+	    (softc->flags & CD_FLAG_CHANGER) =3D=3D 0 &&
+	    (cgd->inq_flags & SID_AEN) =3D=3D 0 &&
+	    cd_poll_period !=3D 0)
+		callout_reset(&softc->mediapoll_c, cd_poll_period * hz,
+		    cdmediapoll, periph);
+
 cdregisterexit:
=20
 	if ((softc->flags & CD_FLAG_CHANGER) =3D=3D 0)
@@ -1500,8 +1554,25 @@
 			periph->immediate_priority =3D CAM_PRIORITY_NONE;
 			wakeup(&periph->ccb_list);
 		} else if (bp =3D=3D NULL) {
-			xpt_release_ccb(start_ccb);
+			if (softc->tur) {
+				softc->tur =3D 0;
+				csio =3D &start_ccb->csio;
+				scsi_test_unit_ready(csio,
+				     /*retries*/ cd_retry_count,
+				     cddone,
+				     MSG_SIMPLE_Q_TAG,
+				     SSD_FULL_SIZE,
+				     cd_timeout);
+				start_ccb->ccb_h.ccb_bp =3D NULL;
+				start_ccb->ccb_h.ccb_state =3D CD_CCB_TUR;
+				xpt_action(start_ccb);
+			} else
+				xpt_release_ccb(start_ccb);
 		} else {
+			if (softc->tur) {
+				softc->tur =3D 0;
+				cam_periph_release_locked(periph);
+			}
 			bioq_remove(&softc->bio_queue, bp);
=20
 			scsi_read_write(&start_ccb->csio,
@@ -1545,7 +1616,7 @@
=20
 			xpt_action(start_ccb);
 		}
-		if (bp !=3D NULL) {
+		if (bp !=3D NULL || softc->tur) {
 			/* Have more work to do, so ensure we stay scheduled */
 			xpt_schedule(periph, CAM_PRIORITY_NORMAL);
 		}
@@ -1840,6 +1911,25 @@
 		wakeup(&done_ccb->ccb_h.cbfcnp);
 		return;
 	}
+	case CD_CCB_TUR:
+	{
+		if ((done_ccb->ccb_h.status & CAM_STATUS_MASK) !=3D CAM_REQ_CMP) {
+
+			if (cderror(done_ccb, CAM_RETRY_SELTO,
+			    SF_RETRY_UA | SF_NO_RECOVERY | SF_NO_PRINT) =3D=3D
+			    ERESTART)
+				return;
+			if ((done_ccb->ccb_h.status & CAM_DEV_QFRZN) !=3D 0)
+				cam_release_devq(done_ccb->ccb_h.path,
+						 /*relsim_flags*/0,
+						 /*reduction*/0,
+						 /*timeout*/0,
+						 /*getcount_only*/0);
+		}
+		xpt_release_ccb(done_ccb);
+		cam_periph_release_locked(periph);
+		return;
+	}
 	default:
 		break;
 	}
@@ -2830,7 +2920,7 @@
 		cdprevent(periph, PR_ALLOW);
 		return (error);
 	} else {
-		softc->flags |=3D CD_FLAG_VALID_MEDIA;
+		softc->flags |=3D CD_FLAG_SAW_MEDIA | CD_FLAG_VALID_MEDIA;
 		softc->disk->d_sectorsize =3D softc->params.blksize;
 		softc->disk->d_mediasize =3D
 		    (off_t)softc->params.blksize * softc->params.disksize;
@@ -3175,6 +3265,14 @@
 	    &error_code, &sense_key, &asc, &ascq)) {
 		if (sense_key =3D=3D SSD_KEY_ILLEGAL_REQUEST)
 			error =3D cd6byteworkaround(ccb);
+		else if (sense_key =3D=3D SSD_KEY_UNIT_ATTENTION &&
+		    asc =3D=3D 0x28 && ascq =3D=3D 0x00)
+			disk_media_changed(softc->disk, M_NOWAIT);
+		else if (sense_key =3D=3D SSD_KEY_NOT_READY &&
+		    asc =3D=3D 0x3a && (softc->flags & CD_FLAG_SAW_MEDIA)) {
+			softc->flags &=3D ~CD_FLAG_SAW_MEDIA;
+			disk_media_gone(softc->disk, M_NOWAIT);
+		}
 	}
=20
 	if (error =3D=3D ERESTART)
@@ -3190,6 +3288,26 @@
 				 &softc->saved_ccb));
 }
=20
+static void
+cdmediapoll(void *arg)
+{
+	struct cam_periph *periph =3D arg;
+	struct cd_softc *softc =3D periph->softc;
+
+	if (softc->flags & CD_FLAG_CHANGER)
+		return;
+
+	if (softc->state =3D=3D CD_STATE_NORMAL && !softc->tur) {
+		if (cam_periph_acquire(periph) =3D=3D CAM_REQ_CMP) {
+			softc->tur =3D 1;
+			xpt_schedule(periph, CAM_PRIORITY_DEV);
+		}
+	}
+	/* Queue us up again */
+	if (cd_poll_period !=3D 0)
+		callout_schedule(&softc->mediapoll_c, cd_poll_period * hz);
+}
+
 /*
  * Read table of contents
  */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/cam/scsi/scsi_da.c
--- a/head/sys/cam/scsi/scsi_da.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/cam/scsi/scsi_da.c	Fri Aug 10 14:19:25 2012 +0300
@@ -27,7 +27,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/cam/scsi/scsi_da.c 238437 2012-07-14 02:59:11=
Z mjacob $");
+__FBSDID("$FreeBSD: head/sys/cam/scsi/scsi_da.c 238886 2012-07-29 11:51:48=
Z mav $");
=20
 #include <sys/param.h>
=20
@@ -77,6 +77,7 @@
 	DA_FLAG_NEW_PACK	=3D 0x002,
 	DA_FLAG_PACK_LOCKED	=3D 0x004,
 	DA_FLAG_PACK_REMOVABLE	=3D 0x008,
+	DA_FLAG_SAW_MEDIA	=3D 0x010,
 	DA_FLAG_NEED_OTAG	=3D 0x020,
 	DA_FLAG_WENT_IDLE	=3D 0x040,
 	DA_FLAG_RETRY_UA	=3D 0x080,
@@ -101,6 +102,7 @@
 	DA_CCB_WAITING		=3D 0x04,
 	DA_CCB_DUMP		=3D 0x05,
 	DA_CCB_DELETE		=3D 0x06,
+	DA_CCB_TUR		=3D 0x07,
 	DA_CCB_TYPE_MASK	=3D 0x0F,
 	DA_CCB_RETRY_UA		=3D 0x10
 } da_ccb_state;
@@ -150,6 +152,7 @@
 	int	 unmap_max_ranges;
 	int	 unmap_max_lba;
 	int	 delete_running;
+	int	 tur;
 	da_delete_methods	 delete_method;
 	struct	 disk_params params;
 	struct	 disk *disk;
@@ -161,6 +164,7 @@
 	uint64_t wwpn;
 	uint8_t	 unmap_buf[UNMAP_MAX_RANGES * 16 + 8];
 	struct scsi_read_capacity_data_long rcaplong;
+	struct callout		mediapoll_c;
 };
=20
 struct da_quirk_entry {
@@ -857,6 +861,11 @@
 				  size_t rcap_size);
 static timeout_t	dasendorderedtag;
 static void		dashutdown(void *arg, int howto);
+static timeout_t	damediapoll;
+
+#ifndef	DA_DEFAULT_POLL_PERIOD
+#define	DA_DEFAULT_POLL_PERIOD	3
+#endif
=20
 #ifndef DA_DEFAULT_TIMEOUT
 #define DA_DEFAULT_TIMEOUT 60	/* Timeout in seconds */
@@ -871,12 +880,16 @@
 #endif
=20
=20
+static int da_poll_period =3D DA_DEFAULT_POLL_PERIOD;
 static int da_retry_count =3D DA_DEFAULT_RETRY;
 static int da_default_timeout =3D DA_DEFAULT_TIMEOUT;
 static int da_send_ordered =3D DA_DEFAULT_SEND_ORDERED;
=20
 static SYSCTL_NODE(_kern_cam, OID_AUTO, da, CTLFLAG_RD, 0,
             "CAM Direct Access Disk driver");
+SYSCTL_INT(_kern_cam_da, OID_AUTO, poll_period, CTLFLAG_RW,
+           &da_poll_period, 0, "Media polling period in seconds");
+TUNABLE_INT("kern.cam.da.poll_period", &da_poll_period);
 SYSCTL_INT(_kern_cam_da, OID_AUTO, retry_count, CTLFLAG_RW,
            &da_retry_count, 0, "Normal I/O retry count");
 TUNABLE_INT("kern.cam.da.retry_count", &da_retry_count);
@@ -966,6 +979,9 @@
 	    (softc->quirks & DA_Q_NO_PREVENT) =3D=3D 0)
 		daprevent(periph, PR_PREVENT);
=20
+	if (error =3D=3D 0)
+		softc->flags |=3D DA_FLAG_SAW_MEDIA;
+
 	cam_periph_unhold(periph);
 	cam_periph_unlock(periph);
=20
@@ -1050,7 +1066,8 @@
=20
 	/* Check if we have more work to do. */
 	if (bioq_first(&softc->bio_queue) ||
-	    (!softc->delete_running && bioq_first(&softc->delete_queue))) {
+	    (!softc->delete_running && bioq_first(&softc->delete_queue)) ||
+	    softc->tur) {
 		prio =3D CAM_PRIORITY_NORMAL;
 	}
=20
@@ -1297,6 +1314,7 @@
 		xpt_print(periph->path, "can't remove sysctl context\n");
 	}
=20
+	callout_drain(&softc->mediapoll_c);
 	disk_destroy(softc->disk);
 	callout_drain(&softc->sendordered_c);
 	free(softc, M_DEVBUF);
@@ -1308,6 +1326,7 @@
 	struct cam_path *path, void *arg)
 {
 	struct cam_periph *periph;
+	struct da_softc *softc;
=20
 	periph =3D (struct cam_periph *)callback_arg;
 	switch (code) {
@@ -1359,10 +1378,43 @@
 		}
 		break;
 	}
+	case AC_UNIT_ATTENTION:
+	{
+		union ccb *ccb;
+		int error_code, sense_key, asc, ascq;
+
+		softc =3D (struct da_softc *)periph->softc;
+		ccb =3D (union ccb *)arg;
+
+		/*
+		 * Handle all UNIT ATTENTIONs except our own,
+		 * as they will be handled by daerror().
+		 */
+		if (xpt_path_periph(ccb->ccb_h.path) !=3D periph &&
+		    scsi_extract_sense_ccb(ccb,
+		     &error_code, &sense_key, &asc, &ascq)) {
+			if (asc =3D=3D 0x2A && ascq =3D=3D 0x09) {
+				xpt_print(ccb->ccb_h.path,
+				    "capacity data has changed\n");
+				dareprobe(periph);
+			} else if (asc =3D=3D 0x28 && ascq =3D=3D 0x00)
+				disk_media_changed(softc->disk, M_NOWAIT);
+		}
+		cam_periph_async(periph, code, path, arg);
+		break;
+	}
+	case AC_SCSI_AEN:
+		softc =3D (struct da_softc *)periph->softc;
+		if (softc->state =3D=3D DA_STATE_NORMAL && !softc->tur) {
+			if (cam_periph_acquire(periph) =3D=3D CAM_REQ_CMP) {
+				softc->tur =3D 1;
+				xpt_schedule(periph, CAM_PRIORITY_DEV);
+			}
+		}
+		/* FALLTHROUGH */
 	case AC_SENT_BDR:
 	case AC_BUS_RESET:
 	{
-		struct da_softc *softc;
 		struct ccb_hdr *ccbh;
=20
 		softc =3D (struct da_softc *)periph->softc;
@@ -1698,9 +1750,9 @@
 	 * fine without them and the only alternative
 	 * would be to not attach the device on failure.
 	 */
-	xpt_register_async(AC_SENT_BDR | AC_BUS_RESET
-			 | AC_LOST_DEVICE | AC_ADVINFO_CHANGED,
-			   daasync, periph, periph->path);
+	xpt_register_async(AC_SENT_BDR | AC_BUS_RESET | AC_LOST_DEVICE |
+	    AC_ADVINFO_CHANGED | AC_SCSI_AEN | AC_UNIT_ATTENTION,
+	    daasync, periph, periph->path);
=20
 	/*
 	 * Emit an attribute changed notification just in case=20
@@ -1710,6 +1762,16 @@
 	 */
 	disk_attr_changed(softc->disk, "GEOM::physpath", M_NOWAIT);
=20
+	/*
+	 * Schedule a periodic media polling events.
+	 */
+	callout_init_mtx(&softc->mediapoll_c, periph->sim->mtx, 0);
+	if ((softc->flags & DA_FLAG_PACK_REMOVABLE) &&
+	    (cgd->inq_flags & SID_AEN) =3D=3D 0 &&
+	    da_poll_period !=3D 0)
+		callout_reset(&softc->mediapoll_c, da_poll_period * hz,
+		    damediapoll, periph);
+
 	xpt_schedule(periph, CAM_PRIORITY_DEV);
=20
 	return(CAM_REQ_CMP);
@@ -1847,9 +1909,25 @@
 		/* Run regular command. */
 		bp =3D bioq_takefirst(&softc->bio_queue);
 		if (bp =3D=3D NULL) {
-			xpt_release_ccb(start_ccb);
+			if (softc->tur) {
+				softc->tur =3D 0;
+				scsi_test_unit_ready(&start_ccb->csio,
+				     /*retries*/ da_retry_count,
+				     dadone,
+				     MSG_SIMPLE_Q_TAG,
+				     SSD_FULL_SIZE,
+				     da_default_timeout * 1000);
+				start_ccb->ccb_h.ccb_bp =3D NULL;
+				start_ccb->ccb_h.ccb_state =3D DA_CCB_TUR;
+				xpt_action(start_ccb);
+			} else
+				xpt_release_ccb(start_ccb);
 			break;
 		}
+		if (softc->tur) {
+			softc->tur =3D 0;
+			cam_periph_release_locked(periph);
+		}
=20
 		if ((bp->bio_flags & BIO_ORDERED) !=3D 0 ||
 		    (softc->flags & DA_FLAG_NEED_OTAG) !=3D 0) {
@@ -2417,6 +2495,25 @@
 	case DA_CCB_DUMP:
 		/* No-op.  We're polling */
 		return;
+	case DA_CCB_TUR:
+	{
+		if ((done_ccb->ccb_h.status & CAM_STATUS_MASK) !=3D CAM_REQ_CMP) {
+
+			if (daerror(done_ccb, CAM_RETRY_SELTO,
+			    SF_RETRY_UA | SF_NO_RECOVERY | SF_NO_PRINT) =3D=3D
+			    ERESTART)
+				return;
+			if ((done_ccb->ccb_h.status & CAM_DEV_QFRZN) !=3D 0)
+				cam_release_devq(done_ccb->ccb_h.path,
+						 /*relsim_flags*/0,
+						 /*reduction*/0,
+						 /*timeout*/0,
+						 /*getcount_only*/0);
+		}
+		xpt_release_ccb(done_ccb);
+		cam_periph_release_locked(periph);
+		return;
+	}
 	default:
 		break;
 	}
@@ -2477,6 +2574,13 @@
 			xpt_print(periph->path, "capacity data has changed\n");
 			dareprobe(periph);
 			sense_flags |=3D SF_NO_PRINT;
+		} else if (sense_key =3D=3D SSD_KEY_UNIT_ATTENTION &&
+		    asc =3D=3D 0x28 && ascq =3D=3D 0x00)
+			disk_media_changed(softc->disk, M_NOWAIT);
+		else if (sense_key =3D=3D SSD_KEY_NOT_READY &&
+		    asc =3D=3D 0x3a && (softc->flags & DA_FLAG_SAW_MEDIA)) {
+			softc->flags &=3D ~DA_FLAG_SAW_MEDIA;
+			disk_media_gone(softc->disk, M_NOWAIT);
 		}
 	}
 	if (error =3D=3D ERESTART)
@@ -2493,6 +2597,23 @@
 }
=20
 static void
+damediapoll(void *arg)
+{
+	struct cam_periph *periph =3D arg;
+	struct da_softc *softc =3D periph->softc;
+
+	if (softc->state =3D=3D DA_STATE_NORMAL && !softc->tur) {
+		if (cam_periph_acquire(periph) =3D=3D CAM_REQ_CMP) {
+			softc->tur =3D 1;
+			daschedule(periph);
+		}
+	}
+	/* Queue us up again */
+	if (da_poll_period !=3D 0)
+		callout_schedule(&softc->mediapoll_c, da_poll_period * hz);
+}
+
+static void
 daprevent(struct cam_periph *periph, int action)
 {
 	struct	da_softc *softc;
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/cam/scsi/scsi_enc.c
--- a/head/sys/cam/scsi/scsi_enc.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/cam/scsi/scsi_enc.c	Fri Aug 10 14:19:25 2012 +0300
@@ -25,7 +25,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/cam/scsi/scsi_enc.c 237328 2012-06-20 17:08:0=
0Z ken $");
+__FBSDID("$FreeBSD: head/sys/cam/scsi/scsi_enc.c 238894 2012-07-30 03:00:5=
8Z bz $");
=20
 #include <sys/param.h>
=20
@@ -56,8 +56,6 @@
 #include <cam/scsi/scsi_enc.h>
 #include <cam/scsi/scsi_enc_internal.h>
=20
-#include <opt_enc.h>
-
 MALLOC_DEFINE(M_SCSIENC, "SCSI ENC", "SCSI ENC buffers");
=20
 /* Enclosure type independent driver */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/cam/scsi/scsi_enc_safte.c
--- a/head/sys/cam/scsi/scsi_enc_safte.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/cam/scsi/scsi_enc_safte.c	Fri Aug 10 14:19:25 2012 +0300
@@ -25,7 +25,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/cam/scsi/scsi_enc_safte.c 235911 2012-05-24 1=
4:07:44Z mav $");
+__FBSDID("$FreeBSD: head/sys/cam/scsi/scsi_enc_safte.c 238894 2012-07-30 0=
3:00:58Z bz $");
=20
 #include <sys/param.h>
=20
@@ -48,8 +48,6 @@
 #include <cam/scsi/scsi_enc_internal.h>
 #include <cam/scsi/scsi_message.h>
=20
-#include <opt_enc.h>
-
 /*
  * SAF-TE Type Device Emulation
  */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/cam/scsi/scsi_enc_ses.c
--- a/head/sys/cam/scsi/scsi_enc_ses.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/cam/scsi/scsi_enc_ses.c	Fri Aug 10 14:19:25 2012 +0300
@@ -32,7 +32,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/cam/scsi/scsi_enc_ses.c 238739 2012-07-24 13:=
08:43Z mav $");
+__FBSDID("$FreeBSD: head/sys/cam/scsi/scsi_enc_ses.c 238894 2012-07-30 03:=
00:58Z bz $");
=20
 #include <sys/param.h>
=20
@@ -56,8 +56,6 @@
 #include <cam/scsi/scsi_enc.h>
 #include <cam/scsi/scsi_enc_internal.h>
=20
-#include <opt_enc.h>
-
 /* SES Native Type Device Support */
=20
 /* SES Diagnostic Page Codes */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/cddl/contrib/opensolaris/uts/=
common/fs/zfs/spa.c
--- a/head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa.c	Mon Jul 30 =
11:44:18 2012 +0300
+++ b/head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa.c	Fri Aug 10 =
14:19:25 2012 +0300
@@ -2172,7 +2172,7 @@
=20
 	if (spa_version(spa) >=3D SPA_VERSION_FEATURES) {
 		boolean_t missing_feat_read =3D B_FALSE;
-		nvlist_t *unsup_feat;
+		nvlist_t *unsup_feat, *enabled_feat;
=20
 		if (spa_dir_prop(spa, DMU_POOL_FEATURES_FOR_READ,
 		    &spa->spa_feat_for_read_obj) !=3D 0) {
@@ -2189,27 +2189,32 @@
 			return (spa_vdev_err(rvd, VDEV_AUX_CORRUPT_DATA, EIO));
 		}
=20
-		VERIFY(nvlist_alloc(&unsup_feat, NV_UNIQUE_NAME, KM_SLEEP) =3D=3D
-		    0);
+		enabled_feat =3D fnvlist_alloc();
+		unsup_feat =3D fnvlist_alloc();
=20
 		if (!feature_is_supported(spa->spa_meta_objset,
 		    spa->spa_feat_for_read_obj, spa->spa_feat_desc_obj,
-		    unsup_feat))
+		    unsup_feat, enabled_feat))
 			missing_feat_read =3D B_TRUE;
=20
 		if (spa_writeable(spa) || state =3D=3D SPA_LOAD_TRYIMPORT) {
 			if (!feature_is_supported(spa->spa_meta_objset,
 			    spa->spa_feat_for_write_obj, spa->spa_feat_desc_obj,
-			    unsup_feat))
+			    unsup_feat, enabled_feat)) {
 				missing_feat_write =3D B_TRUE;
+			}
 		}
=20
+		fnvlist_add_nvlist(spa->spa_load_info,
+		    ZPOOL_CONFIG_ENABLED_FEAT, enabled_feat);
+
 		if (!nvlist_empty(unsup_feat)) {
-			VERIFY(nvlist_add_nvlist(spa->spa_load_info,
-			    ZPOOL_CONFIG_UNSUP_FEAT, unsup_feat) =3D=3D 0);
+			fnvlist_add_nvlist(spa->spa_load_info,
+			    ZPOOL_CONFIG_UNSUP_FEAT, unsup_feat);
 		}
=20
-		nvlist_free(unsup_feat);
+		fnvlist_free(enabled_feat);
+		fnvlist_free(unsup_feat);
=20
 		if (!missing_feat_read) {
 			fnvlist_add_boolean(spa->spa_load_info,
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/cddl/contrib/opensolaris/uts/=
common/fs/zfs/sys/zfeature.h
--- a/head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfeature.h	Mo=
n Jul 30 11:44:18 2012 +0300
+++ b/head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfeature.h	Fr=
i Aug 10 14:19:25 2012 +0300
@@ -35,7 +35,7 @@
 #endif
=20
 extern boolean_t feature_is_supported(objset_t *os, uint64_t obj,
-    uint64_t desc_obj, nvlist_t *unsup_feat);
+    uint64_t desc_obj, nvlist_t *unsup_feat, nvlist_t *enabled_feat);
=20
 struct spa;
 extern void spa_feature_create_zap_objects(struct spa *, dmu_tx_t *);
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/cddl/contrib/opensolaris/uts/=
common/fs/zfs/zfeature.c
--- a/head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfeature.c	Mon Ju=
l 30 11:44:18 2012 +0300
+++ b/head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfeature.c	Fri Au=
g 10 14:19:25 2012 +0300
@@ -173,7 +173,7 @@
  */
 boolean_t
 feature_is_supported(objset_t *os, uint64_t obj, uint64_t desc_obj,
-    nvlist_t *unsup_feat)
+    nvlist_t *unsup_feat, nvlist_t *enabled_feat)
 {
 	boolean_t supported;
 	zap_cursor_t zc;
@@ -186,11 +186,16 @@
 		ASSERT(za.za_integer_length =3D=3D sizeof (uint64_t) &&
 		    za.za_num_integers =3D=3D 1);
=20
+		if (NULL !=3D enabled_feat) {
+			fnvlist_add_uint64(enabled_feat, za.za_name,
+			    za.za_first_integer);
+		}
+
 		if (za.za_first_integer !=3D 0 &&
 		    !zfeature_is_supported(za.za_name)) {
 			supported =3D B_FALSE;
=20
-			if (unsup_feat !=3D NULL) {
+			if (NULL !=3D unsup_feat) {
 				char *desc =3D "";
 				char buf[MAXPATHLEN];
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/cddl/contrib/opensolaris/uts/=
common/fs/zfs/zfs_vnops.c
--- a/head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c	Mon J=
ul 30 11:44:18 2012 +0300
+++ b/head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c	Fri A=
ug 10 14:19:25 2012 +0300
@@ -71,6 +71,7 @@
 #include <sys/sf_buf.h>
 #include <sys/sched.h>
 #include <sys/acl.h>
+#include <vm/vm_param.h>
 #include <vm/vm_pageout.h>
=20
 /*
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/cddl/contrib/opensolaris/uts/=
common/sys/fs/zfs.h
--- a/head/sys/cddl/contrib/opensolaris/uts/common/sys/fs/zfs.h	Mon Jul 30 =
11:44:18 2012 +0300
+++ b/head/sys/cddl/contrib/opensolaris/uts/common/sys/fs/zfs.h	Fri Aug 10 =
14:19:25 2012 +0300
@@ -520,6 +520,7 @@
 #define	ZPOOL_CONFIG_LOAD_INFO		"load_info"	/* not stored on disk */
 #define	ZPOOL_CONFIG_REWIND_INFO	"rewind_info"	/* not stored on disk */
 #define	ZPOOL_CONFIG_UNSUP_FEAT		"unsup_feat"	/* not stored on disk */
+#define	ZPOOL_CONFIG_ENABLED_FEAT	"enabled_feat"	/* not stored on disk */
 #define	ZPOOL_CONFIG_CAN_RDONLY		"can_rdonly"	/* not stored on disk */
 #define	ZPOOL_CONFIG_FEATURES_FOR_READ	"features_for_read"
 #define	ZPOOL_CONFIG_FEATURE_STATS	"feature_stats"	/* not stored on disk */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/conf/NOTES
--- a/head/sys/conf/NOTES	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/conf/NOTES	Fri Aug 10 14:19:25 2012 +0300
@@ -1,4 +1,4 @@
-# $FreeBSD: head/sys/conf/NOTES 237263 2012-06-19 07:34:13Z np $
+# $FreeBSD: head/sys/conf/NOTES 238925 2012-07-30 22:46:42Z davide $
 #
 # NOTES -- Lines that can be cut/pasted into kernel and hints configs.
 #
@@ -435,7 +435,7 @@
 #
 # KTR is a kernel tracing facility imported from BSD/OS.  It is
 # enabled with the KTR option.  KTR_ENTRIES defines the number of
-# entries in the circular trace buffer; it must be a power of two.
+# entries in the circular trace buffer; it may be an arbitrary number.
 # KTR_COMPILE defines the mask of events to compile into the kernel as
 # defined by the KTR_* constants in <sys/ktr.h>.  KTR_MASK defines the
 # initial value of the ktr_mask variable which determines at runtime
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/conf/files
--- a/head/sys/conf/files	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/conf/files	Fri Aug 10 14:19:25 2012 +0300
@@ -1,4 +1,4 @@
-# $FreeBSD: head/sys/conf/files 238710 2012-07-23 03:52:18Z adrian $
+# $FreeBSD: head/sys/conf/files 239009 2012-08-03 14:00:26Z luigi $
 #
 # The long compile-with and dependency lines are required because of
 # limitations in config: backslash-newline doesn't work in strings, and
@@ -639,6 +639,7 @@
 dev/aha/aha_mca.c		optional aha mca
 dev/ahb/ahb.c			optional ahb eisa
 dev/ahci/ahci.c			optional ahci pci
+dev/ahci/ahciem.c		optional ahci pci
 dev/aic/aic.c			optional aic
 dev/aic/aic_pccard.c		optional aic pccard
 dev/aic7xxx/ahc_eisa.c		optional ahc eisa
@@ -2226,6 +2227,16 @@
 dev/utopia/suni.c		optional utopia
 dev/utopia/utopia.c		optional utopia
 dev/vge/if_vge.c		optional vge
+#
+# virtio support
+#
+dev/virtio/pci/virtio_pci.c    optional vtnet
+dev/virtio/virtio.c            optional vtnet
+dev/virtio/virtqueue.c         optional vtnet
+dev/virtio/network/if_vtnet.c  optional vtnet
+dev/virtio/virtio_bus_if.m     optional vtnet
+dev/virtio/virtio_if.m         optional vtnet
+
 dev/vkbd/vkbd.c			optional vkbd
 dev/vr/if_vr.c			optional vr pci
 dev/vte/if_vte.c		optional vte pci
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/conf/files.powerpc
--- a/head/sys/conf/files.powerpc	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/conf/files.powerpc	Fri Aug 10 14:19:25 2012 +0300
@@ -1,7 +1,7 @@
 # This file tells config what files go into building a kernel,
 # files marked standard are always included.
 #
-# $FreeBSD: head/sys/conf/files.powerpc 238046 2012-07-03 01:00:29Z marcel=
 $
+# $FreeBSD: head/sys/conf/files.powerpc 239027 2012-08-04 03:05:01Z jhibbi=
ts $
 #
 # The long compile-with and dependency lines are required because of
 # limitations in config: backslash-newline doesn't work in strings, and
@@ -160,6 +160,7 @@
 powerpc/powermac/kiic.c		optional	powermac kiic
 powerpc/powermac/macgpio.c	optional	powermac pci=20
 powerpc/powermac/macio.c	optional	powermac pci
+powerpc/powermac/nvbl.c		optional	powermac nvbl
 powerpc/powermac/openpic_macio.c optional	powermac pci
 powerpc/powermac/platform_powermac.c optional	powermac
 powerpc/powermac/powermac_thermal.c optional	powermac
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/conf/kern.post.mk
--- a/head/sys/conf/kern.post.mk	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/conf/kern.post.mk	Fri Aug 10 14:19:25 2012 +0300
@@ -1,4 +1,4 @@
-# $FreeBSD: head/sys/conf/kern.post.mk 238050 2012-07-03 05:01:00Z obrien $
+# $FreeBSD: head/sys/conf/kern.post.mk 239107 2012-08-06 21:24:43Z brooks $
=20
 # Part of a unified Makefile for building kernels.  This part includes all
 # the definitions that need to be after all the % directives except %RULES
@@ -121,7 +121,7 @@
 .endif
 .endif
=20
-${FULLKERNEL}: ${SYSTEM_DEP} vers.o
+${FULLKERNEL}: ${SYSTEM_DEP} vers.o ${MFS_IMAGE}
 	@rm -f ${.TARGET}
 	@echo linking ${.TARGET}
 	${SYSTEM_LD}
@@ -133,7 +133,7 @@
 .endif
 	${SYSTEM_LD_TAIL}
 .if defined(MFS_IMAGE)
-	@sh ${S}/tools/embed_mfs.sh ${FULLKERNEL} ${MFS_IMAGE}
+	sh ${S}/tools/embed_mfs.sh ${FULLKERNEL} ${MFS_IMAGE}
 .endif
=20
 .if !exists(${.OBJDIR}/.depend)
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/acpica/acpi_cpu.c
--- a/head/sys/dev/acpica/acpi_cpu.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/acpica/acpi_cpu.c	Fri Aug 10 14:19:25 2012 +0300
@@ -26,7 +26,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/dev/acpica/acpi_cpu.c 238418 2012-07-13 08:11=
:55Z avg $");
+__FBSDID("$FreeBSD: head/sys/dev/acpica/acpi_cpu.c 238943 2012-07-31 10:58=
:50Z mav $");
=20
 #include "opt_acpi.h"
 #include <sys/param.h>
@@ -876,7 +876,8 @@
     sbuf_new(&sb, sc->cpu_cx_supported, sizeof(sc->cpu_cx_supported),
 	SBUF_FIXEDLEN);
     for (i =3D 0; i < sc->cpu_cx_count; i++)
-	sbuf_printf(&sb, "C%d/%d ", i + 1, sc->cpu_cx_states[i].trans_lat);
+	sbuf_printf(&sb, "C%d/%d/%d ", i + 1, sc->cpu_cx_states[i].type,
+	    sc->cpu_cx_states[i].trans_lat);
     sbuf_trim(&sb);
     sbuf_finish(&sb);
 }=09
@@ -921,6 +922,7 @@
 {
     struct	acpi_cpu_softc *sc;
     struct	acpi_cx *cx_next;
+    uint64_t	cputicks;
     uint32_t	start_time, end_time;
     int		bm_active, cx_next_idx, i;
=20
@@ -960,11 +962,12 @@
      * driver polling for new devices keeps this bit set all the
      * time if USB is loaded.
      */
-    if ((cpu_quirks & CPU_QUIRK_NO_BM_CTRL) =3D=3D 0) {
+    if ((cpu_quirks & CPU_QUIRK_NO_BM_CTRL) =3D=3D 0 &&
+	cx_next_idx > sc->cpu_non_c3) {
 	AcpiReadBitRegister(ACPI_BITREG_BUS_MASTER_STATUS, &bm_active);
 	if (bm_active !=3D 0) {
 	    AcpiWriteBitRegister(ACPI_BITREG_BUS_MASTER_STATUS, 1);
-	    cx_next_idx =3D min(cx_next_idx, sc->cpu_non_c3);
+	    cx_next_idx =3D sc->cpu_non_c3;
 	}
     }
=20
@@ -980,11 +983,10 @@
      * we are called inside critical section, delaying context switch.
      */
     if (cx_next->type =3D=3D ACPI_STATE_C1) {
-	AcpiHwRead(&start_time, &AcpiGbl_FADT.XPmTimerBlock);
+	cputicks =3D cpu_ticks();
 	acpi_cpu_c1();
-	AcpiHwRead(&end_time, &AcpiGbl_FADT.XPmTimerBlock);
-        end_time =3D PM_USEC(acpi_TimerDelta(end_time, start_time));
-        if (curthread->td_critnest =3D=3D 0)
+	end_time =3D ((cpu_ticks() - cputicks) << 20) / cpu_tickrate();
+	if (curthread->td_critnest =3D=3D 0)
 		end_time =3D min(end_time, 500000 / hz);
 	sc->cpu_prev_sleep =3D (sc->cpu_prev_sleep * 3 + end_time) / 4;
 	return;
@@ -1008,7 +1010,13 @@
      * get the time very close to the CPU start/stop clock logic, this
      * is the only reliable time source.
      */
-    AcpiHwRead(&start_time, &AcpiGbl_FADT.XPmTimerBlock);
+    if (cx_next->type =3D=3D ACPI_STATE_C3) {
+	AcpiHwRead(&start_time, &AcpiGbl_FADT.XPmTimerBlock);
+	cputicks =3D 0;
+    } else {
+	start_time =3D 0;
+	cputicks =3D cpu_ticks();
+    }
     CPU_GET_REG(cx_next->p_lvlx, 1);
=20
     /*
@@ -1018,7 +1026,11 @@
      * margin that we are certain to have a correct value.
      */
     AcpiHwRead(&end_time, &AcpiGbl_FADT.XPmTimerBlock);
-    AcpiHwRead(&end_time, &AcpiGbl_FADT.XPmTimerBlock);
+    if (cx_next->type =3D=3D ACPI_STATE_C3) {
+	AcpiHwRead(&end_time, &AcpiGbl_FADT.XPmTimerBlock);
+	end_time =3D acpi_TimerDelta(end_time, start_time);
+    } else
+	end_time =3D ((cpu_ticks() - cputicks) << 20) / cpu_tickrate();
=20
     /* Enable bus master arbitration and disable bus master wakeup. */
     if (cx_next->type =3D=3D ACPI_STATE_C3 &&
@@ -1028,8 +1040,6 @@
     }
     ACPI_ENABLE_IRQS();
=20
-    /* Find the actual time asleep in microseconds. */
-    end_time =3D acpi_TimerDelta(end_time, start_time);
     sc->cpu_prev_sleep =3D (sc->cpu_prev_sleep * 3 + PM_USEC(end_time)) / =
4;
 }
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/agp/agp.c
--- a/head/sys/dev/agp/agp.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/agp/agp.c	Fri Aug 10 14:19:25 2012 +0300
@@ -25,7 +25,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/dev/agp/agp.c 238172 2012-07-06 15:57:03Z mar=
cel $");
+__FBSDID("$FreeBSD: head/sys/dev/agp/agp.c 239065 2012-08-05 14:11:42Z kib=
 $");
=20
 #include "opt_agp.h"
 #include "opt_bus.h"
@@ -50,6 +50,7 @@
 #include <dev/pci/pcireg.h>
=20
 #include <vm/vm.h>
+#include <vm/vm_param.h>
 #include <vm/vm_object.h>
 #include <vm/vm_page.h>
 #include <vm/vm_pageout.h>
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/agp/agp_i810.c
--- a/head/sys/dev/agp/agp_i810.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/agp/agp_i810.c	Fri Aug 10 14:19:25 2012 +0300
@@ -38,7 +38,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/dev/agp/agp_i810.c 238301 2012-07-09 16:23:59=
Z marcel $");
+__FBSDID("$FreeBSD: head/sys/dev/agp/agp_i810.c 239065 2012-08-05 14:11:42=
Z kib $");
=20
 #include "opt_bus.h"
=20
@@ -67,6 +67,7 @@
 #include <dev/pci/pci_private.h>
=20
 #include <vm/vm.h>
+#include <vm/vm_param.h>
 #include <vm/vm_object.h>
 #include <vm/vm_page.h>
 #include <vm/vm_pageout.h>
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/ahci/ahci.c
--- a/head/sys/dev/ahci/ahci.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/ahci/ahci.c	Fri Aug 10 14:19:25 2012 +0300
@@ -1,5 +1,5 @@
 /*-
- * Copyright (c) 2009 Alexander Motin <mav at FreeBSD.org>
+ * Copyright (c) 2009-2012 Alexander Motin <mav at FreeBSD.org>
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -25,27 +25,22 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/dev/ahci/ahci.c 236847 2012-06-10 11:17:14Z m=
av $");
+__FBSDID("$FreeBSD: head/sys/dev/ahci/ahci.c 238805 2012-07-26 13:44:48Z m=
av $");
=20
 #include <sys/param.h>
 #include <sys/module.h>
 #include <sys/systm.h>
 #include <sys/kernel.h>
-#include <sys/ata.h>
 #include <sys/bus.h>
 #include <sys/conf.h>
 #include <sys/endian.h>
 #include <sys/malloc.h>
 #include <sys/lock.h>
 #include <sys/mutex.h>
-#include <sys/sema.h>
-#include <sys/taskqueue.h>
-#include <vm/uma.h>
 #include <machine/stdarg.h>
 #include <machine/resource.h>
 #include <machine/bus.h>
 #include <sys/rman.h>
-#include <dev/led/led.h>
 #include <dev/pci/pcivar.h>
 #include <dev/pci/pcireg.h>
 #include "ahci.h"
@@ -69,7 +64,6 @@
 static void ahci_ch_pm(void *arg);
 static void ahci_ch_intr_locked(void *data);
 static void ahci_ch_intr(void *data);
-static void ahci_ch_led(void *priv, int onoff);
 static int ahci_ctlr_reset(device_t dev);
 static int ahci_ctlr_setup(device_t dev);
 static void ahci_begin_transaction(device_t dev, union ccb *ccb);
@@ -444,7 +438,6 @@
 		ctlr->caps &=3D ~AHCI_CAP_SNCQ;
 	if ((ctlr->caps & AHCI_CAP_CCCS) =3D=3D 0)
 		ctlr->ccc =3D 0;
-	mtx_init(&ctlr->em_mtx, "AHCI EM lock", NULL, MTX_DEF);
 	ctlr->emloc =3D ATA_INL(ctlr->r_mem, AHCI_EM_LOC);
 	ahci_ctlr_setup(dev);
 	/* Setup interrupts. */
@@ -497,17 +490,6 @@
 		    (ctlr->caps2 & AHCI_CAP2_NVMP) ? " NVMP":"",
 		    (ctlr->caps2 & AHCI_CAP2_BOH) ? " BOH":"");
 	}
-	if (bootverbose && (ctlr->caps & AHCI_CAP_EMS)) {
-		device_printf(dev, "EM Caps:%s%s%s%s%s%s%s%s\n",
-		    (ctlr->capsem & AHCI_EM_PM) ? " PM":"",
-		    (ctlr->capsem & AHCI_EM_ALHD) ? " ALHD":"",
-		    (ctlr->capsem & AHCI_EM_XMT) ? " XMT":"",
-		    (ctlr->capsem & AHCI_EM_SMB) ? " SMB":"",
-		    (ctlr->capsem & AHCI_EM_SGPIO) ? " SGPIO":"",
-		    (ctlr->capsem & AHCI_EM_SES2) ? " SES-2":"",
-		    (ctlr->capsem & AHCI_EM_SAFTE) ? " SAF-TE":"",
-		    (ctlr->capsem & AHCI_EM_LED) ? " LED":"");
-	}
 	/* Attach all channels on this controller */
 	for (unit =3D 0; unit < ctlr->channels; unit++) {
 		child =3D device_add_child(dev, "ahcich", -1);
@@ -519,6 +501,13 @@
 		if ((ctlr->ichannels & (1 << unit)) =3D=3D 0)
 			device_disable(child);
 	}
+	if (ctlr->caps & AHCI_CAP_EMS) {
+		child =3D device_add_child(dev, "ahciem", -1);
+		if (child =3D=3D NULL)
+			device_printf(dev, "failed to add enclosure device\n");
+		else
+			device_set_ivars(child, (void *)(intptr_t)-1);
+	}
 	bus_generic_attach(dev);
 	return 0;
 }
@@ -546,7 +535,6 @@
 	rman_fini(&ctlr->sc_iomem);
 	if (ctlr->r_mem)
 		bus_release_resource(dev, SYS_RES_MEMORY, ctlr->r_rid, ctlr->r_mem);
-	mtx_destroy(&ctlr->em_mtx);
 	return (0);
 }
=20
@@ -759,16 +747,34 @@
 		       u_long start, u_long end, u_long count, u_int flags)
 {
 	struct ahci_controller *ctlr =3D device_get_softc(dev);
-	int unit =3D ((struct ahci_channel *)device_get_softc(child))->unit;
-	struct resource *res =3D NULL;
-	int offset =3D AHCI_OFFSET + (unit << 7);
+	struct resource *res;
 	long st;
+	int offset, size, unit;
=20
+	unit =3D (intptr_t)device_get_ivars(child);
+	res =3D NULL;
 	switch (type) {
 	case SYS_RES_MEMORY:
+		if (unit >=3D 0) {
+			offset =3D AHCI_OFFSET + (unit << 7);
+			size =3D 128;
+		} else if (*rid =3D=3D 0) {
+			offset =3D AHCI_EM_CTL;
+			size =3D 4;
+		} else {
+			offset =3D (ctlr->emloc & 0xffff0000) >> 14;
+			size =3D (ctlr->emloc & 0x0000ffff) << 2;
+			if (*rid !=3D 1) {
+				if (*rid =3D=3D 2 && (ctlr->capsem &
+				    (AHCI_EM_XMT | AHCI_EM_SMB)) =3D=3D 0)
+					offset +=3D size;
+				else
+					break;
+			}
+		}
 		st =3D rman_get_start(ctlr->r_mem);
 		res =3D rman_reserve_resource(&ctlr->sc_iomem, st + offset,
-		    st + offset + 127, 128, RF_ACTIVE, child);
+		    st + offset + size - 1, size, RF_ACTIVE, child);
 		if (res) {
 			bus_space_handle_t bsh;
 			bus_space_tag_t bst;
@@ -836,13 +842,13 @@
 static int
 ahci_print_child(device_t dev, device_t child)
 {
-	int retval;
+	int retval, channel;
=20
 	retval =3D bus_print_child_header(dev, child);
-	retval +=3D printf(" at channel %d",
-	    (int)(intptr_t)device_get_ivars(child));
+	channel =3D (int)(intptr_t)device_get_ivars(child);
+	if (channel >=3D 0)
+		retval +=3D printf(" at channel %d", channel);
 	retval +=3D bus_print_child_footer(dev, child);
-
 	return (retval);
 }
=20
@@ -850,9 +856,11 @@
 ahci_child_location_str(device_t dev, device_t child, char *buf,
     size_t buflen)
 {
+	int channel;
=20
-	snprintf(buf, buflen, "channel=3D%d",
-	    (int)(intptr_t)device_get_ivars(child));
+	channel =3D (int)(intptr_t)device_get_ivars(child);
+	if (channel >=3D 0)
+		snprintf(buf, buflen, "channel=3D%d", channel);
 	return (0);
 }
=20
@@ -916,7 +924,6 @@
 	struct cam_devq *devq;
 	int rid, error, i, sata_rev =3D 0;
 	u_int32_t version;
-	char buf[32];
=20
 	ch->dev =3D dev;
 	ch->unit =3D (intptr_t)device_get_ivars(dev);
@@ -956,7 +963,7 @@
 		ch->user[i].caps |=3D CTS_SATA_CAPS_H_DMAAA |
 		    CTS_SATA_CAPS_H_AN;
 	}
-	rid =3D ch->unit;
+	rid =3D 0;
 	if (!(ch->r_mem =3D bus_alloc_resource_any(dev, SYS_RES_MEMORY,
 	    &rid, RF_ACTIVE)))
 		return (ENXIO);
@@ -1025,25 +1032,6 @@
 		    ahci_ch_pm, dev);
 	}
 	mtx_unlock(&ch->mtx);
-	if ((ch->caps & AHCI_CAP_EMS) &&
-	    (ctlr->capsem & AHCI_EM_LED)) {
-		for (i =3D 0; i < AHCI_NUM_LEDS; i++) {
-			ch->leds[i].dev =3D dev;
-			ch->leds[i].num =3D i;
-		}
-		if ((ctlr->capsem & AHCI_EM_ALHD) =3D=3D 0) {
-			snprintf(buf, sizeof(buf), "%s.act",
-			    device_get_nameunit(dev));
-			ch->leds[0].led =3D led_create(ahci_ch_led,
-			    &ch->leds[0], buf);
-		}
-		snprintf(buf, sizeof(buf), "%s.locate",
-		    device_get_nameunit(dev));
-		ch->leds[1].led =3D led_create(ahci_ch_led, &ch->leds[1], buf);
-		snprintf(buf, sizeof(buf), "%s.fault",
-		    device_get_nameunit(dev));
-		ch->leds[2].led =3D led_create(ahci_ch_led, &ch->leds[2], buf);
-	}
 	return (0);
=20
 err3:
@@ -1063,12 +1051,7 @@
 ahci_ch_detach(device_t dev)
 {
 	struct ahci_channel *ch =3D device_get_softc(dev);
-	int i;
=20
-	for (i =3D 0; i < AHCI_NUM_LEDS; i++) {
-		if (ch->leds[i].led)
-			led_destroy(ch->leds[i].led);
-	}
 	mtx_lock(&ch->mtx);
 	xpt_async(AC_LOST_DEVICE, ch->path, NULL);
 	/* Forget about reset. */
@@ -1191,47 +1174,6 @@
 };
 DRIVER_MODULE(ahcich, ahci, ahcich_driver, ahcich_devclass, 0, 0);
=20
-static void
-ahci_ch_setleds(device_t dev)
-{
-	struct ahci_channel *ch;
-	struct ahci_controller *ctlr;
-	size_t buf;
-	int i, timeout;
-	int16_t val;
-
-	ctlr =3D device_get_softc(device_get_parent(dev));
-	ch =3D device_get_softc(dev);
-
-	val =3D 0;
-	for (i =3D 0; i < AHCI_NUM_LEDS; i++)
-		val |=3D ch->leds[i].state << (i * 3);
-
-	buf =3D (ctlr->emloc & 0xffff0000) >> 14;
-	mtx_lock(&ctlr->em_mtx);
-	timeout =3D 1000;
-	while (ATA_INL(ctlr->r_mem, AHCI_EM_CTL) & (AHCI_EM_TM | AHCI_EM_RST) &&
-	    --timeout > 0)
-		DELAY(1000);
-	if (timeout =3D=3D 0)
-		device_printf(dev, "EM timeout\n");
-	ATA_OUTL(ctlr->r_mem, buf, (1 << 8) | (0 << 16) | (0 << 24));
-	ATA_OUTL(ctlr->r_mem, buf + 4, ch->unit | (val << 16));
-	ATA_OUTL(ctlr->r_mem, AHCI_EM_CTL, AHCI_EM_TM);
-	mtx_unlock(&ctlr->em_mtx);
-}
-
-static void
-ahci_ch_led(void *priv, int onoff)
-{
-	struct ahci_led *led;
-
-	led =3D (struct ahci_led *)priv;
-
-	led->state =3D onoff;
-	ahci_ch_setleds(led->dev);
-}
-
 struct ahci_dc_cb_args {
 	bus_addr_t maddr;
 	int error;
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/ahci/ahci.h
--- a/head/sys/dev/ahci/ahci.h	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/ahci/ahci.h	Fri Aug 10 14:19:25 2012 +0300
@@ -1,6 +1,6 @@
 /*-
  * Copyright (c) 1998 - 2008 S=C3=B8ren Schmidt <sos at FreeBSD.org>
- * Copyright (c) 2009 Alexander Motin <mav at FreeBSD.org>
+ * Copyright (c) 2009-2012 Alexander Motin <mav at FreeBSD.org>
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -24,7 +24,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.
  *
- * $FreeBSD: head/sys/dev/ahci/ahci.h 230132 2012-01-15 13:23:18Z uqs $
+ * $FreeBSD: head/sys/dev/ahci/ahci.h 238805 2012-07-26 13:44:48Z mav $
  */
=20
 /* ATA register defines */
@@ -395,7 +395,6 @@
 	struct ata_dma		dma;            /* DMA data */
 	struct cam_sim		*sim;
 	struct cam_path		*path;
-	struct ahci_led		leds[3];
 	uint32_t		caps;		/* Controller capabilities */
 	uint32_t		caps2;		/* Controller capabilities */
 	uint32_t		chcaps;		/* Channel capabilities */
@@ -435,6 +434,22 @@
 	struct ahci_device	curr[16];	/* Current settings */
 };
=20
+struct ahci_enclosure {
+	device_t		dev;            /* Device handle */
+	struct resource		*r_memc;	/* Control register */
+	struct resource		*r_memt;	/* Transmit buffer */
+	struct resource		*r_memr;	/* Recieve buffer */
+	struct cam_sim		*sim;
+	struct cam_path		*path;
+	struct mtx		mtx;		/* state lock */
+	struct ahci_led		leds[AHCI_MAX_PORTS * 3];
+	uint32_t		capsem;		/* Controller capabilities */
+	uint8_t			status[AHCI_MAX_PORTS][4]; /* ArrayDev statuses */
+	int			quirks;
+	int			channels;
+	int			ichannels;
+};
+
 /* structure describing a AHCI controller */
 struct ahci_controller {
 	device_t		dev;
@@ -465,7 +480,6 @@
 		void			(*function)(void *);
 		void			*argument;
 	} interrupt[AHCI_MAX_PORTS];
-	struct mtx		em_mtx;		/* EM access lock */
 };
=20
 enum ahci_err_type {
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/ahci/ahciem.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/head/sys/dev/ahci/ahciem.c	Fri Aug 10 14:19:25 2012 +0300
@@ -0,0 +1,600 @@
+/*-
+ * Copyright (c) 2012 Alexander Motin <mav at FreeBSD.org>
+ * 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 WARRANTI=
ES
+ * 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 US=
E,
+ * 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 <sys/cdefs.h>
+__FBSDID("$FreeBSD: head/sys/dev/ahci/ahciem.c 238805 2012-07-26 13:44:48Z=
 mav $");
+
+#include <sys/param.h>
+#include <sys/module.h>
+#include <sys/systm.h>
+#include <sys/kernel.h>
+#include <sys/bus.h>
+#include <sys/conf.h>
+#include <sys/endian.h>
+#include <sys/malloc.h>
+#include <sys/lock.h>
+#include <sys/mutex.h>
+#include <machine/stdarg.h>
+#include <machine/resource.h>
+#include <machine/bus.h>
+#include <sys/rman.h>
+#include <dev/led/led.h>
+#include <dev/pci/pcivar.h>
+#include <dev/pci/pcireg.h>
+#include "ahci.h"
+
+#include <cam/cam.h>
+#include <cam/cam_ccb.h>
+#include <cam/cam_sim.h>
+#include <cam/cam_xpt_sim.h>
+#include <cam/cam_debug.h>
+#include <cam/scsi/scsi_ses.h>
+
+/* local prototypes */
+static void ahciemaction(struct cam_sim *sim, union ccb *ccb);
+static void ahciempoll(struct cam_sim *sim);
+static int ahci_em_reset(device_t dev);
+static void ahci_em_led(void *priv, int onoff);
+static void ahci_em_setleds(device_t dev, int c);
+
+static int
+ahci_em_probe(device_t dev)
+{
+
+	device_set_desc_copy(dev, "AHCI enclosure management bridge");
+	return (0);
+}
+
+static int
+ahci_em_attach(device_t dev)
+{
+	device_t parent =3D device_get_parent(dev);
+	struct ahci_controller *ctlr =3D device_get_softc(parent);
+	struct ahci_enclosure *enc =3D device_get_softc(dev);
+	struct cam_devq *devq;
+	int i, c, rid, error;
+	char buf[32];
+
+	enc->dev =3D dev;
+	enc->quirks =3D ctlr->quirks;
+	enc->channels =3D ctlr->channels;
+	enc->ichannels =3D ctlr->ichannels;
+	mtx_init(&enc->mtx, "AHCI enclosure lock", NULL, MTX_DEF);
+	rid =3D 0;
+	if (!(enc->r_memc =3D bus_alloc_resource_any(dev, SYS_RES_MEMORY,
+	    &rid, RF_ACTIVE)))
+		return (ENXIO);
+	enc->capsem =3D ATA_INL(enc->r_memc, 0);;
+	rid =3D 1;
+	if (!(enc->r_memt =3D bus_alloc_resource_any(dev, SYS_RES_MEMORY,
+	    &rid, RF_ACTIVE))) {
+		error =3D ENXIO;
+		goto err0;
+	}
+	if ((enc->capsem & (AHCI_EM_XMT | AHCI_EM_SMB)) =3D=3D 0) {
+		rid =3D 2;
+		if (!(enc->r_memr =3D bus_alloc_resource_any(dev, SYS_RES_MEMORY,
+		    &rid, RF_ACTIVE))) {
+			error =3D ENXIO;
+			goto err0;
+		}
+	} else
+		enc->r_memr =3D NULL;
+	mtx_lock(&enc->mtx);
+	ahci_em_reset(dev);
+	rid =3D ATA_IRQ_RID;
+	/* Create the device queue for our SIM. */
+	devq =3D cam_simq_alloc(1);
+	if (devq =3D=3D NULL) {
+		device_printf(dev, "Unable to allocate SIM queue\n");
+		error =3D ENOMEM;
+		goto err1;
+	}
+	/* Construct SIM entry */
+	enc->sim =3D cam_sim_alloc(ahciemaction, ahciempoll, "ahciem", enc,
+	    device_get_unit(dev), &enc->mtx,
+	    1, 0, devq);
+	if (enc->sim =3D=3D NULL) {
+		cam_simq_free(devq);
+		device_printf(dev, "Unable to allocate SIM\n");
+		error =3D ENOMEM;
+		goto err1;
+	}
+	if (xpt_bus_register(enc->sim, dev, 0) !=3D CAM_SUCCESS) {
+		device_printf(dev, "unable to register xpt bus\n");
+		error =3D ENXIO;
+		goto err2;
+	}
+	if (xpt_create_path(&enc->path, /*periph*/NULL, cam_sim_path(enc->sim),
+	    CAM_TARGET_WILDCARD, CAM_LUN_WILDCARD) !=3D CAM_REQ_CMP) {
+		device_printf(dev, "Unable to create path\n");
+		error =3D ENXIO;
+		goto err3;
+	}
+	mtx_unlock(&enc->mtx);
+	if (bootverbose) {
+		device_printf(dev, "Caps:%s%s%s%s%s%s%s%s\n",
+		    (enc->capsem & AHCI_EM_PM) ? " PM":"",
+		    (enc->capsem & AHCI_EM_ALHD) ? " ALHD":"",
+		    (enc->capsem & AHCI_EM_XMT) ? " XMT":"",
+		    (enc->capsem & AHCI_EM_SMB) ? " SMB":"",
+		    (enc->capsem & AHCI_EM_SGPIO) ? " SGPIO":"",
+		    (enc->capsem & AHCI_EM_SES2) ? " SES-2":"",
+		    (enc->capsem & AHCI_EM_SAFTE) ? " SAF-TE":"",
+		    (enc->capsem & AHCI_EM_LED) ? " LED":"");
+	}
+	if ((enc->capsem & AHCI_EM_LED)) {
+		for (c =3D 0; c < enc->channels; c++) {
+			if ((enc->ichannels & (1 << c)) =3D=3D 0)
+				continue;
+			for (i =3D 0; i < AHCI_NUM_LEDS; i++) {
+				enc->leds[c * AHCI_NUM_LEDS + i].dev =3D dev;
+				enc->leds[c * AHCI_NUM_LEDS + i].num =3D
+				    c * AHCI_NUM_LEDS + i;
+			}
+			if ((enc->capsem & AHCI_EM_ALHD) =3D=3D 0) {
+				snprintf(buf, sizeof(buf), "%s.%d.act",
+				    device_get_nameunit(parent), c);
+				enc->leds[c * AHCI_NUM_LEDS + 0].led =3D
+				    led_create(ahci_em_led,
+				    &enc->leds[c * AHCI_NUM_LEDS + 0], buf);
+			}
+			snprintf(buf, sizeof(buf), "%s.%d.locate",
+			    device_get_nameunit(parent), c);
+			enc->leds[c * AHCI_NUM_LEDS + 1].led =3D
+			    led_create(ahci_em_led,
+			    &enc->leds[c * AHCI_NUM_LEDS + 1], buf);
+			snprintf(buf, sizeof(buf), "%s.%d.fault",
+			    device_get_nameunit(parent), c);
+			enc->leds[c * AHCI_NUM_LEDS + 2].led =3D
+			    led_create(ahci_em_led,
+			    &enc->leds[c * AHCI_NUM_LEDS + 2], buf);
+		}
+	}
+	return (0);
+
+err3:
+	xpt_bus_deregister(cam_sim_path(enc->sim));
+err2:
+	cam_sim_free(enc->sim, /*free_devq*/TRUE);
+err1:
+	mtx_unlock(&enc->mtx);
+	if (enc->r_memr)
+		bus_release_resource(dev, SYS_RES_MEMORY, 2, enc->r_memr);
+err0:
+	if (enc->r_memt)
+		bus_release_resource(dev, SYS_RES_MEMORY, 1, enc->r_memt);
+	bus_release_resource(dev, SYS_RES_MEMORY, 0, enc->r_memc);
+	mtx_destroy(&enc->mtx);
+	return (error);
+}
+
+static int
+ahci_em_detach(device_t dev)
+{
+	struct ahci_enclosure *enc =3D device_get_softc(dev);
+	int i;
+
+	for (i =3D 0; i < enc->channels * AHCI_NUM_LEDS; i++) {
+		if (enc->leds[i].led)
+			led_destroy(enc->leds[i].led);
+	}
+	mtx_lock(&enc->mtx);
+	xpt_async(AC_LOST_DEVICE, enc->path, NULL);
+	xpt_free_path(enc->path);
+	xpt_bus_deregister(cam_sim_path(enc->sim));
+	cam_sim_free(enc->sim, /*free_devq*/TRUE);
+	mtx_unlock(&enc->mtx);
+
+	bus_release_resource(dev, SYS_RES_MEMORY, 0, enc->r_memc);
+	bus_release_resource(dev, SYS_RES_MEMORY, 1, enc->r_memt);
+	if (enc->r_memr)
+		bus_release_resource(dev, SYS_RES_MEMORY, 2, enc->r_memr);
+	mtx_destroy(&enc->mtx);
+	return (0);
+}
+
+static int
+ahci_em_reset(device_t dev)
+{
+	struct ahci_enclosure *enc;
+	int i, timeout;
+
+	enc =3D device_get_softc(dev);
+	ATA_OUTL(enc->r_memc, 0, AHCI_EM_RST);
+	timeout =3D 1000;
+	while ((ATA_INL(enc->r_memc, 0) & AHCI_EM_RST) &&
+	    --timeout > 0)
+		DELAY(1000);
+	if (timeout =3D=3D 0) {
+		device_printf(dev, "EM timeout\n");
+		return (1);
+	}
+	for (i =3D 0; i < enc->channels; i++)
+		ahci_em_setleds(dev, i);
+	return (0);
+}
+
+static int
+ahci_em_suspend(device_t dev)
+{
+	struct ahci_enclosure *enc =3D device_get_softc(dev);
+
+	mtx_lock(&enc->mtx);
+	xpt_freeze_simq(enc->sim, 1);
+	mtx_unlock(&enc->mtx);
+	return (0);
+}
+
+static int
+ahci_em_resume(device_t dev)
+{
+	struct ahci_enclosure *enc =3D device_get_softc(dev);
+
+	mtx_lock(&enc->mtx);
+	ahci_em_reset(dev);
+	xpt_release_simq(enc->sim, TRUE);
+	mtx_unlock(&enc->mtx);
+	return (0);
+}
+
+devclass_t ahciem_devclass;
+static device_method_t ahciem_methods[] =3D {
+	DEVMETHOD(device_probe,     ahci_em_probe),
+	DEVMETHOD(device_attach,    ahci_em_attach),
+	DEVMETHOD(device_detach,    ahci_em_detach),
+	DEVMETHOD(device_suspend,   ahci_em_suspend),
+	DEVMETHOD(device_resume,    ahci_em_resume),
+	{ 0, 0 }
+};
+static driver_t ahciem_driver =3D {
+        "ahciem",
+        ahciem_methods,
+        sizeof(struct ahci_enclosure)
+};
+DRIVER_MODULE(ahciem, ahci, ahciem_driver, ahciem_devclass, 0, 0);
+
+static void
+ahci_em_setleds(device_t dev, int c)
+{
+	struct ahci_enclosure *enc;
+	int timeout;
+	int16_t val;
+
+	enc =3D device_get_softc(dev);
+
+	val =3D 0;
+	if (enc->status[c][2] & 0x80)		/* Activity */
+		val |=3D (1 << 0);
+	if (enc->status[c][2] & SESCTL_RQSID)	/* Identification */
+		val |=3D (1 << 3);
+	else if (enc->status[c][3] & SESCTL_RQSFLT)	/* Fault */
+		val |=3D (1 << 6);
+	else if (enc->status[c][1] & 0x02)		/* Rebuild */
+		val |=3D (1 << 6) | (1 << 3);
+
+	timeout =3D 10000;
+	while (ATA_INL(enc->r_memc, 0) & (AHCI_EM_TM | AHCI_EM_RST) &&
+	    --timeout > 0)
+		DELAY(100);
+	if (timeout =3D=3D 0)
+		device_printf(dev, "Transmit timeout\n");
+	ATA_OUTL(enc->r_memt, 0, (1 << 8) | (0 << 16) | (0 << 24));
+	ATA_OUTL(enc->r_memt, 4, c | (0 << 8) | (val << 16));
+	ATA_OUTL(enc->r_memc, 0, AHCI_EM_TM);
+}
+
+static void
+ahci_em_led(void *priv, int onoff)
+{
+	struct ahci_led *led;
+	struct ahci_enclosure *enc;
+	int c, l;
+
+	led =3D (struct ahci_led *)priv;
+	enc =3D device_get_softc(led->dev);
+	c =3D led->num / AHCI_NUM_LEDS;
+	l =3D led->num % AHCI_NUM_LEDS;
+
+	if (l =3D=3D 0) {
+		if (onoff)
+			enc->status[c][2] |=3D 0x80;
+		else
+			enc->status[c][2] &=3D ~0x80;
+	} else if (l =3D=3D 1) {
+		if (onoff)
+			enc->status[c][2] |=3D SESCTL_RQSID;
+		else
+			enc->status[c][2] &=3D ~SESCTL_RQSID;
+	} else if (l =3D=3D 2) {
+		if (onoff)
+			enc->status[c][3] |=3D SESCTL_RQSFLT;
+		else
+			enc->status[c][3] &=3D SESCTL_RQSFLT;
+	}
+	ahci_em_setleds(led->dev, c);
+}
+
+static int
+ahci_check_ids(device_t dev, union ccb *ccb)
+{
+
+	if (ccb->ccb_h.target_id !=3D 0) {
+		ccb->ccb_h.status =3D CAM_TID_INVALID;
+		xpt_done(ccb);
+		return (-1);
+	}
+	if (ccb->ccb_h.target_lun !=3D 0) {
+		ccb->ccb_h.status =3D CAM_LUN_INVALID;
+		xpt_done(ccb);
+		return (-1);
+	}
+	return (0);
+}
+
+static void
+ahci_em_emulate_ses_on_led(device_t dev, union ccb *ccb)
+{
+	struct ahci_enclosure *enc;
+	struct ses_status_page *page;
+	struct ses_status_array_dev_slot *ads, *ads0;
+	struct ses_elm_desc_hdr *elmd;
+	uint8_t *buf;
+	int i;
+
+	enc =3D device_get_softc(dev);
+	buf =3D ccb->ataio.data_ptr;
+
+	/* General request validation. */
+	if (ccb->ataio.cmd.command !=3D ATA_SEP_ATTN ||
+	    ccb->ataio.dxfer_len < ccb->ataio.cmd.sector_count * 4) {
+		ccb->ccb_h.status =3D CAM_REQ_INVALID;
+		goto out;
+	}
+
+	/* SEMB IDENTIFY */
+	if (ccb->ataio.cmd.features =3D=3D 0xEC &&
+	    ccb->ataio.cmd.sector_count >=3D 16) {
+		bzero(buf, ccb->ataio.dxfer_len);
+		buf[0] =3D 64;		/* Valid bytes. */
+		strncpy(&buf[10], "AHCI    ", SID_VENDOR_SIZE);
+		strncpy(&buf[18], "SGPIO Enclosure ", SID_PRODUCT_SIZE);
+		strncpy(&buf[34], "1.00", SID_REVISION_SIZE);
+		strncpy(&buf[39], "0001", 4);
+		strncpy(&buf[43], "S-E-S ", 6);
+		strncpy(&buf[49], "2.00", 4);
+		ccb->ccb_h.status =3D CAM_REQ_CMP;
+		goto out;
+	}
+
+	/* SEMB RECEIVE DIAGNOSTIC RESULT (0) */
+	page =3D (struct ses_status_page *)buf;
+	if (ccb->ataio.cmd.lba_low =3D=3D 0x02 &&
+	    ccb->ataio.cmd.features =3D=3D 0x00 &&
+	    ccb->ataio.cmd.sector_count >=3D 2) {
+		bzero(buf, ccb->ataio.dxfer_len);
+		page->hdr.page_code =3D 0;
+		scsi_ulto2b(3, page->hdr.length);
+		buf[4] =3D 0;
+		buf[5] =3D 1;
+		buf[6] =3D 2;
+		ccb->ccb_h.status =3D CAM_REQ_CMP;
+		goto out;
+	}
+
+	/* SEMB RECEIVE DIAGNOSTIC RESULT (1) */
+	if (ccb->ataio.cmd.lba_low =3D=3D 0x02 &&
+	    ccb->ataio.cmd.features =3D=3D 0x01 &&
+	    ccb->ataio.cmd.sector_count >=3D 13) {
+		struct ses_enc_desc *ed;
+		struct ses_elm_type_desc *td;
+
+		bzero(buf, ccb->ataio.dxfer_len);
+		page->hdr.page_code =3D 0x01;
+		scsi_ulto2b(4 + 4 + 36 + 4, page->hdr.length);
+		ed =3D (struct ses_enc_desc *)&buf[8];
+		ed->byte0 =3D 0x11;
+		ed->subenc_id =3D 0;
+		ed->num_types =3D 1;
+		ed->length =3D 36;
+		strncpy(ed->vendor_id, "AHCI    ", SID_VENDOR_SIZE);
+		strncpy(ed->product_id, "SGPIO Enclosure ", SID_PRODUCT_SIZE);
+		strncpy(ed->product_rev, "    ", SID_REVISION_SIZE);
+		td =3D (struct ses_elm_type_desc *)ses_enc_desc_next(ed);
+		td->etype_elm_type =3D 0x17;
+		td->etype_maxelt =3D enc->channels;
+		td->etype_subenc =3D 0;
+		td->etype_txt_len =3D 0;
+		ccb->ccb_h.status =3D CAM_REQ_CMP;
+		goto out;
+	}
+
+	/* SEMB RECEIVE DIAGNOSTIC RESULT (2) */
+	if (ccb->ataio.cmd.lba_low =3D=3D 0x02 &&
+	    ccb->ataio.cmd.features =3D=3D 0x02 &&
+	    ccb->ataio.cmd.sector_count >=3D (3 + enc->channels)) {
+		bzero(buf, ccb->ataio.dxfer_len);
+		page->hdr.page_code =3D 0x02;
+		scsi_ulto2b(4 + 4 * (1 + enc->channels),
+		    page->hdr.length);
+		for (i =3D 0; i < enc->channels; i++) {
+			ads =3D &page->elements[i + 1].array_dev_slot;
+			memcpy(ads, enc->status[i], 4);
+			ads->common.bytes[0] |=3D
+			    (enc->ichannels & (1 << i)) ?
+			     SES_OBJSTAT_UNKNOWN :
+			     SES_OBJSTAT_NOTINSTALLED;
+		}
+		ccb->ccb_h.status =3D CAM_REQ_CMP;
+		goto out;
+	}
+
+	/* SEMB SEND DIAGNOSTIC (2) */
+	if (ccb->ataio.cmd.lba_low =3D=3D 0x82 &&
+	    ccb->ataio.cmd.features =3D=3D 0x02 &&
+	    ccb->ataio.cmd.sector_count >=3D (3 + enc->channels)) {
+		ads0 =3D &page->elements[0].array_dev_slot;
+		for (i =3D 0; i < enc->channels; i++) {
+			ads =3D &page->elements[i + 1].array_dev_slot;
+			if (ads->common.bytes[0] & SESCTL_CSEL) {
+				enc->status[i][0] =3D 0;
+				enc->status[i][1] =3D=20
+				    ads->bytes[0] & 0x02;
+				enc->status[i][2] =3D
+				    ads->bytes[1] & (0x80 | SESCTL_RQSID);
+				enc->status[i][3] =3D
+				    ads->bytes[2] & SESCTL_RQSFLT;
+				ahci_em_setleds(dev, i);
+			} else if (ads0->common.bytes[0] & SESCTL_CSEL) {
+				enc->status[i][0] =3D 0;
+				enc->status[i][1] =3D=20
+				    ads0->bytes[0] & 0x02;
+				enc->status[i][2] =3D
+				    ads0->bytes[1] & (0x80 | SESCTL_RQSID);
+				enc->status[i][3] =3D
+				    ads0->bytes[2] & SESCTL_RQSFLT;
+				ahci_em_setleds(dev, i);
+			}
+		}
+		ccb->ccb_h.status =3D CAM_REQ_CMP;
+		goto out;
+	}
+
+	/* SEMB RECEIVE DIAGNOSTIC RESULT (7) */
+	if (ccb->ataio.cmd.lba_low =3D=3D 0x02 &&
+	    ccb->ataio.cmd.features =3D=3D 0x07 &&
+	    ccb->ataio.cmd.sector_count >=3D (3 + 3 * enc->channels)) {
+		bzero(buf, ccb->ataio.dxfer_len);
+		page->hdr.page_code =3D 0x07;
+		scsi_ulto2b(4 + 4 + 12 * enc->channels,
+		    page->hdr.length);
+		for (i =3D 0; i < enc->channels; i++) {
+			elmd =3D (struct ses_elm_desc_hdr *)&buf[8 + 4 + 12 * i];
+			scsi_ulto2b(8, elmd->length);
+			snprintf((char *)(elmd + 1), 9, "SLOT %03d", i);
+		}
+		ccb->ccb_h.status =3D CAM_REQ_CMP;
+		goto out;
+	}
+
+	ccb->ccb_h.status =3D CAM_REQ_INVALID;
+out:
+	xpt_done(ccb);
+}
+
+static void
+ahci_em_begin_transaction(device_t dev, union ccb *ccb)
+{
+	struct ahci_enclosure *enc;
+	struct ata_res *res;
+
+	enc =3D device_get_softc(dev);
+	res =3D &ccb->ataio.res;
+	bzero(res, sizeof(*res));
+	if ((ccb->ataio.cmd.flags & CAM_ATAIO_CONTROL) &&
+	    (ccb->ataio.cmd.control & ATA_A_RESET)) {
+		res->lba_high =3D 0xc3;
+		res->lba_mid =3D 0x3c;
+		ccb->ccb_h.status =3D CAM_REQ_CMP;
+		xpt_done(ccb);
+		return;
+	}
+
+	if (enc->capsem & AHCI_EM_LED) {
+		ahci_em_emulate_ses_on_led(dev, ccb);
+		return;
+	} else
+		device_printf(dev, "Unsupported enclosure interface\n");
+
+	ccb->ccb_h.status =3D CAM_REQ_INVALID;
+	xpt_done(ccb);
+}
+
+static void
+ahciemaction(struct cam_sim *sim, union ccb *ccb)
+{
+	device_t dev, parent;
+	struct ahci_enclosure *enc;
+
+	CAM_DEBUG(ccb->ccb_h.path, CAM_DEBUG_TRACE,
+	    ("ahciemaction func_code=3D%x\n", ccb->ccb_h.func_code));
+
+	enc =3D cam_sim_softc(sim);
+	dev =3D enc->dev;
+	switch (ccb->ccb_h.func_code) {
+	case XPT_ATA_IO:	/* Execute the requested I/O operation */
+		if (ahci_check_ids(dev, ccb))
+			return;
+		ahci_em_begin_transaction(dev, ccb);
+		return;
+	case XPT_RESET_BUS:		/* Reset the specified bus */
+	case XPT_RESET_DEV:	/* Bus Device Reset the specified device */
+		ahci_em_reset(dev);
+		ccb->ccb_h.status =3D CAM_REQ_CMP;
+		break;
+	case XPT_PATH_INQ:		/* Path routing inquiry */
+	{
+		struct ccb_pathinq *cpi =3D &ccb->cpi;
+
+		parent =3D device_get_parent(dev);
+		cpi->version_num =3D 1; /* XXX??? */
+		cpi->hba_inquiry =3D PI_SDTR_ABLE;
+		cpi->target_sprt =3D 0;
+		cpi->hba_misc =3D PIM_SEQSCAN;
+		cpi->hba_eng_cnt =3D 0;
+		cpi->max_target =3D 0;
+		cpi->max_lun =3D 0;
+		cpi->initiator_id =3D 0;
+		cpi->bus_id =3D cam_sim_bus(sim);
+		cpi->base_transfer_speed =3D 150000;
+		strncpy(cpi->sim_vid, "FreeBSD", SIM_IDLEN);
+		strncpy(cpi->hba_vid, "AHCI", HBA_IDLEN);
+		strncpy(cpi->dev_name, cam_sim_name(sim), DEV_IDLEN);
+		cpi->unit_number =3D cam_sim_unit(sim);
+		cpi->transport =3D XPORT_SATA;
+		cpi->transport_version =3D XPORT_VERSION_UNSPECIFIED;
+		cpi->protocol =3D PROTO_ATA;
+		cpi->protocol_version =3D PROTO_VERSION_UNSPECIFIED;
+		cpi->maxio =3D MAXPHYS;
+		cpi->hba_vendor =3D pci_get_vendor(parent);
+		cpi->hba_device =3D pci_get_device(parent);
+		cpi->hba_subvendor =3D pci_get_subvendor(parent);
+		cpi->hba_subdevice =3D pci_get_subdevice(parent);
+		cpi->ccb_h.status =3D CAM_REQ_CMP;
+		break;
+	}
+	default:
+		ccb->ccb_h.status =3D CAM_REQ_INVALID;
+		break;
+	}
+	xpt_done(ccb);
+}
+
+static void
+ahciempoll(struct cam_sim *sim)
+{
+
+}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/aic7xxx/aic79xx_osm.c
--- a/head/sys/dev/aic7xxx/aic79xx_osm.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/aic7xxx/aic79xx_osm.c	Fri Aug 10 14:19:25 2012 +0300
@@ -33,7 +33,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/dev/aic7xxx/aic79xx_osm.c 237601 2012-06-26 1=
4:51:35Z ken $");
+__FBSDID("$FreeBSD: head/sys/dev/aic7xxx/aic79xx_osm.c 239104 2012-08-06 2=
0:01:32Z dim $");
=20
 #include <dev/aic7xxx/aic79xx_osm.h>
 #include <dev/aic7xxx/aic79xx_inline.h>
@@ -222,6 +222,7 @@
 	count =3D 0;
 	devq =3D NULL;
 	sim =3D NULL;
+	path =3D NULL;
=20
 	/*
 	 * Create a thread to perform all recovery.
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/aic7xxx/aic_osm_lib.c
--- a/head/sys/dev/aic7xxx/aic_osm_lib.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/aic7xxx/aic_osm_lib.c	Fri Aug 10 14:19:25 2012 +0300
@@ -33,7 +33,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
+__FBSDID("$FreeBSD: head/sys/dev/aic7xxx/aic_osm_lib.c 239047 2012-08-05 0=
8:08:34Z eadler $");
=20
 static void	aic_recovery_thread(void *arg);
=20
@@ -54,9 +54,6 @@
 		 * them after we've successfully fixed this problem.
 		 */
 		LIST_FOREACH(list_scb, &aic->pending_scbs, pending_links) {
-			union ccb *ccb;
-
-			ccb =3D list_scb->io_ctx;
 			callout_stop(&scb->io_timer);
 		}
 	}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/ath/ah_osdep.h
--- a/head/sys/dev/ath/ah_osdep.h	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/ath/ah_osdep.h	Fri Aug 10 14:19:25 2012 +0300
@@ -26,7 +26,7 @@
  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
  * THE POSSIBILITY OF SUCH DAMAGES.
  *
- * $FreeBSD: head/sys/dev/ath/ah_osdep.h 237865 2012-07-01 02:37:04Z adria=
n $
+ * $FreeBSD: head/sys/dev/ath/ah_osdep.h 239051 2012-08-05 10:12:27Z adria=
n $
  */
 #ifndef _ATH_AH_OSDEP_H_
 #define _ATH_AH_OSDEP_H_
@@ -49,6 +49,12 @@
 typedef bus_space_handle_t HAL_BUS_HANDLE;
=20
 /*
+ * Although the underlying hardware may support 64 bit DMA, the
+ * current Atheros hardware only supports 32 bit addressing.
+ */
+typedef uint32_t HAL_DMA_ADDR;
+
+/*
  * Linker set writearounds for chip and RF backend registration.
  */
 #define	OS_DATA_SET(set, item)	DATA_SET(set, item)
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/ath/ath_hal/ah.c
--- a/head/sys/dev/ath/ath_hal/ah.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/ath/ath_hal/ah.c	Fri Aug 10 14:19:25 2012 +0300
@@ -14,7 +14,7 @@
  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  *
- * $FreeBSD: head/sys/dev/ath/ath_hal/ah.c 238333 2012-07-10 03:48:07Z adr=
ian $
+ * $FreeBSD: head/sys/dev/ath/ath_hal/ah.c 238858 2012-07-28 07:28:08Z adr=
ian $
  */
 #include "opt_ah.h"
=20
@@ -657,7 +657,8 @@
 	}
 	case HAL_CAP_RXBUFSIZE:
 	case HAL_CAP_NUM_MR_RETRIES:
-		return HAL_EINVAL;      /* XXX not yet */
+		*result =3D pCap->halNumMRRetries;
+		return HAL_OK;
 	case HAL_CAP_BT_COEX:
 		return pCap->halBtCoexSupport ? HAL_OK : HAL_ENOTSUPP;
 	case HAL_CAP_HT20_SGI:
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/ath/ath_hal/ah.h
--- a/head/sys/dev/ath/ath_hal/ah.h	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/ath/ath_hal/ah.h	Fri Aug 10 14:19:25 2012 +0300
@@ -14,7 +14,7 @@
  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  *
- * $FreeBSD: head/sys/dev/ath/ath_hal/ah.h 238731 2012-07-24 01:18:19Z adr=
ian $
+ * $FreeBSD: head/sys/dev/ath/ath_hal/ah.h 239053 2012-08-05 11:24:21Z adr=
ian $
  */
=20
 #ifndef _ATH_AH_H_
@@ -220,6 +220,8 @@
=20
 #define	HAL_NUM_RX_QUEUES	2		/* max possible # of queues */
=20
+#define	HAL_TXFIFO_DEPTH	8		/* transmit fifo depth */
+
 /*
  * Transmit queue subtype.  These map directly to
  * WME Access Categories (except for UPSD).  Refer
@@ -580,13 +582,16 @@
=20
 typedef struct {
 	u_int	Tries;
-	u_int	Rate;
+	u_int	Rate;		/* hardware rate code */
+	u_int	RateIndex;	/* rate series table index */
 	u_int	PktDuration;
 	u_int	ChSel;
 	u_int	RateFlags;
 #define	HAL_RATESERIES_RTS_CTS		0x0001	/* use rts/cts w/this series */
 #define	HAL_RATESERIES_2040		0x0002	/* use ext channel for series */
 #define	HAL_RATESERIES_HALFGI		0x0004	/* use half-gi for series */
+#define	HAL_RATESERIES_STBC		0x0008	/* use STBC for series */
+	u_int	tx_power_cap;
 } HAL_11N_RATE_SERIES;
=20
 typedef enum {
@@ -1076,7 +1081,8 @@
 				u_int txRate2, u_int txTries2,
 				u_int txRate3, u_int txTries3);
 	HAL_BOOL  __ahdecl(*ah_fillTxDesc)(struct ath_hal *, struct ath_desc *,
-				u_int segLen, HAL_BOOL firstSeg,
+				HAL_DMA_ADDR *bufAddrList, uint32_t *segLenList,
+				u_int descId, u_int qcuId, HAL_BOOL firstSeg,
 				HAL_BOOL lastSeg, const struct ath_desc *);
 	HAL_STATUS __ahdecl(*ah_procTxDesc)(struct ath_hal *,
 				struct ath_desc *, struct ath_tx_status *);
@@ -1221,8 +1227,11 @@
=20
 	/* 802.11n Functions */
 	HAL_BOOL  __ahdecl(*ah_chainTxDesc)(struct ath_hal *,
-				struct ath_desc *, u_int, u_int, HAL_PKT_TYPE,
-				u_int, HAL_CIPHER, uint8_t, u_int, HAL_BOOL,
+				struct ath_desc *,
+				HAL_DMA_ADDR *bufAddrList,
+				uint32_t *segLenList,
+				u_int, u_int, HAL_PKT_TYPE,
+				u_int, HAL_CIPHER, uint8_t, HAL_BOOL,
 				HAL_BOOL, HAL_BOOL);
 	HAL_BOOL  __ahdecl(*ah_setupFirstTxDesc)(struct ath_hal *,
 				struct ath_desc *, u_int, u_int, u_int,
@@ -1233,7 +1242,7 @@
 	    			struct ath_desc *, u_int, u_int,
 				HAL_11N_RATE_SERIES [], u_int, u_int);
 	void	  __ahdecl(*ah_set11nAggrFirst)(struct ath_hal *,
-				struct ath_desc *, u_int, u_int);
+				struct ath_desc *, u_int);
 	void	  __ahdecl(*ah_set11nAggrMiddle)(struct ath_hal *,
 	    			struct ath_desc *, u_int);
 	void	  __ahdecl(*ah_set11nAggrLast)(struct ath_hal *,
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/ath/ath_hal/ah_desc.h
--- a/head/sys/dev/ath/ath_hal/ah_desc.h	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/ath/ath_hal/ah_desc.h	Fri Aug 10 14:19:25 2012 +0300
@@ -14,7 +14,7 @@
  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  *
- * $FreeBSD: head/sys/dev/ath/ath_hal/ah_desc.h 238314 2012-07-09 23:58:22=
Z adrian $
+ * $FreeBSD: head/sys/dev/ath/ath_hal/ah_desc.h 238843 2012-07-27 12:08:49=
Z adrian $
  */
=20
 #ifndef _DEV_ATH_DESC_H
@@ -57,16 +57,19 @@
 	uint8_t		ts_finaltsi;	/* final transmit series index */
 #ifdef AH_SUPPORT_AR5416
 					/* 802.11n status */
-	uint8_t    	ts_flags;   	/* misc flags */
-	int8_t      	ts_rssi_ctl[3];	/* tx ack RSSI [ctl, chain 0-2] */
-	int8_t      	ts_rssi_ext[3];	/* tx ack RSSI [ext, chain 0-2] */
+	uint8_t		ts_flags;	/* misc flags */
+	uint8_t		ts_queue_id;	/* AR9300: TX queue id */
+	uint8_t		ts_desc_id;	/* AR9300: TX descriptor id */
+	uint8_t		ts_tid;		/* TID */
 /* #define ts_rssi ts_rssi_combined */
-	uint32_t   	ts_ba_low;	/* blockack bitmap low */
-	uint32_t   	ts_ba_high;	/* blockack bitmap high */
-	uint8_t		ts_tid;		/* TID */
-	uint32_t  	ts_evm0;	/* evm bytes */
-	uint32_t   	ts_evm1;
-	uint32_t   	ts_evm2;
+	uint32_t	ts_ba_low;	/* blockack bitmap low */
+	uint32_t	ts_ba_high;	/* blockack bitmap high */
+	uint32_t	ts_evm0;	/* evm bytes */
+	uint32_t	ts_evm1;
+	uint32_t	ts_evm2;
+	int8_t		ts_rssi_ctl[3];	/* tx ack RSSI [ctl, chain 0-2] */
+	int8_t		ts_rssi_ext[3];	/* tx ack RSSI [ext, chain 0-2] */
+	uint8_t		ts_pad[2];
 #endif /* AH_SUPPORT_AR5416 */
 };
=20
@@ -243,6 +246,8 @@
 #define	HAL_TXDESC_EXT_ONLY	0x0080	/* send on ext channel only (11n) */
 #define	HAL_TXDESC_EXT_AND_CTL	0x0100	/* send on ext + ctl channels (11n) =
*/
 #define	HAL_TXDESC_VMF		0x0200	/* virtual more frag */
+#define	HAL_TXDESC_LOWRXCHAIN	0x0400	/* switch to low RX chain */
+#define	HAL_TXDESC_LDPC		0x1000
=20
 /* flags passed to rx descriptor setup methods */
 #define	HAL_RXDESC_INTREQ	0x0020	/* enable per-descriptor interrupt */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/ath/ath_hal/ah_devid.h
--- a/head/sys/dev/ath/ath_hal/ah_devid.h	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/ath/ath_hal/ah_devid.h	Fri Aug 10 14:19:25 2012 +0300
@@ -14,7 +14,7 @@
  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  *
- * $FreeBSD: head/sys/dev/ath/ath_hal/ah_devid.h 227434 2011-11-11 00:48:4=
1Z adrian $
+ * $FreeBSD: head/sys/dev/ath/ath_hal/ah_devid.h 239134 2012-08-07 23:45:4=
3Z adrian $
  */
=20
 #ifndef _DEV_ATH_DEVID_H_
@@ -83,6 +83,15 @@
 #define	AR9287_DEVID_PCI	0x002d		/* AR9227 PCI Kiwi */
 #define	AR9287_DEVID_PCIE	0x002e		/* AR9287 PCI-E Kiwi */
=20
+/* AR9300 */
+#define	AR9300_DEVID_AR9380_PCIE	0x0030
+#define	AR9300_DEVID_AR9340		0x0031
+#define	AR9300_DEVID_AR9485_PCIE	0x0032
+#define	AR9300_DEVID_AR9580_PCIE	0x0033
+#define	AR9300_DEVID_AR946X_PCIE	0x0034
+#define	AR9300_DEVID_AR9330		0x0035
+#define	AR9300_DEVID_QCA955X		0x0039
+
 #define	AR_SUBVENDOR_ID_NOG	0x0e11		/* No 11G subvendor ID */
 #define AR_SUBVENDOR_ID_NEW_A	0x7065		/* Update device to new RD */
 #endif /* _DEV_ATH_DEVID_H */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/ath/ath_hal/ah_internal.h
--- a/head/sys/dev/ath/ath_hal/ah_internal.h	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/ath/ath_hal/ah_internal.h	Fri Aug 10 14:19:25 2012 +0300
@@ -14,7 +14,7 @@
  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  *
- * $FreeBSD: head/sys/dev/ath/ath_hal/ah_internal.h 237868 2012-07-01 03:1=
5:18Z adrian $
+ * $FreeBSD: head/sys/dev/ath/ath_hal/ah_internal.h 238858 2012-07-28 07:2=
8:08Z adrian $
  */
 #ifndef _ATH_AH_INTERAL_H_
 #define _ATH_AH_INTERAL_H_
@@ -252,6 +252,7 @@
 	int		halRxStatusLen;
 	int		halRxHpFifoDepth;
 	int		halRxLpFifoDepth;
+	int		halNumMRRetries;
 } HAL_CAPABILITIES;
=20
 struct regDomain;
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/ath/ath_hal/ar5210/ar5210=
.h
--- a/head/sys/dev/ath/ath_hal/ar5210/ar5210.h	Mon Jul 30 11:44:18 2012 +03=
00
+++ b/head/sys/dev/ath/ath_hal/ar5210/ar5210.h	Fri Aug 10 14:19:25 2012 +03=
00
@@ -14,7 +14,7 @@
  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  *
- * $FreeBSD: head/sys/dev/ath/ath_hal/ar5210/ar5210.h 238607 2012-07-19 02=
:25:14Z adrian $
+ * $FreeBSD: head/sys/dev/ath/ath_hal/ar5210/ar5210.h 239051 2012-08-05 10=
:12:27Z adrian $
  */
 #ifndef _ATH_AR5210_H_
 #define _ATH_AR5210_H_
@@ -171,7 +171,8 @@
 		u_int txRate2, u_int txRetries2,
 		u_int txRate3, u_int txRetries3);
 extern	HAL_BOOL ar5210FillTxDesc(struct ath_hal *, struct ath_desc *,
-		u_int segLen, HAL_BOOL firstSeg, HAL_BOOL lastSeg,
+		HAL_DMA_ADDR *bufAddrList, uint32_t *segLenList,
+		u_int descId, u_int qcuId, HAL_BOOL firstSeg, HAL_BOOL lastSeg,
 		const struct ath_desc *ds0);
 extern	HAL_STATUS ar5210ProcTxDesc(struct ath_hal *,
 		struct ath_desc *, struct ath_tx_status *);
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/ath/ath_hal/ar5210/ar5210=
_attach.c
--- a/head/sys/dev/ath/ath_hal/ar5210/ar5210_attach.c	Mon Jul 30 11:44:18 2=
012 +0300
+++ b/head/sys/dev/ath/ath_hal/ar5210/ar5210_attach.c	Fri Aug 10 14:19:25 2=
012 +0300
@@ -14,7 +14,7 @@
  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  *
- * $FreeBSD: head/sys/dev/ath/ath_hal/ar5210/ar5210_attach.c 238607 2012-0=
7-19 02:25:14Z adrian $
+ * $FreeBSD: head/sys/dev/ath/ath_hal/ar5210/ar5210_attach.c 238858 2012-0=
7-28 07:28:08Z adrian $
  */
 #include "opt_ah.h"
=20
@@ -361,6 +361,7 @@
=20
 	pCap->halSleepAfterBeaconBroken =3D AH_TRUE;
 	pCap->halPSPollBroken =3D AH_FALSE;
+	pCap->halNumMRRetries =3D 1;		/* No hardware MRR support */
=20
 	pCap->halTotalQueues =3D HAL_NUM_TX_QUEUES;
 	pCap->halKeyCacheSize =3D 64;
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/ath/ath_hal/ar5210/ar5210=
_xmit.c
--- a/head/sys/dev/ath/ath_hal/ar5210/ar5210_xmit.c	Mon Jul 30 11:44:18 201=
2 +0300
+++ b/head/sys/dev/ath/ath_hal/ar5210/ar5210_xmit.c	Fri Aug 10 14:19:25 201=
2 +0300
@@ -14,7 +14,7 @@
  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  *
- * $FreeBSD: head/sys/dev/ath/ath_hal/ar5210/ar5210_xmit.c 238607 2012-07-=
19 02:25:14Z adrian $
+ * $FreeBSD: head/sys/dev/ath/ath_hal/ar5210/ar5210_xmit.c 239051 2012-08-=
05 10:12:27Z adrian $
  */
 #include "opt_ah.h"
=20
@@ -546,13 +546,17 @@
=20
 HAL_BOOL
 ar5210FillTxDesc(struct ath_hal *ah, struct ath_desc *ds,
-	u_int segLen, HAL_BOOL firstSeg, HAL_BOOL lastSeg,
+	HAL_DMA_ADDR *bufAddrList, uint32_t *segLenList, u_int descId,
+	u_int qcuId, HAL_BOOL firstSeg, HAL_BOOL lastSeg,
 	const struct ath_desc *ds0)
 {
 	struct ar5210_desc *ads =3D AR5210DESC(ds);
+	uint32_t segLen =3D segLenList[0];
=20
 	HALASSERT((segLen &~ AR_BufLen) =3D=3D 0);
=20
+	ds->ds_data =3D bufAddrList[0];
+
 	if (firstSeg) {
 		/*
 		 * First descriptor, don't clobber xmit control data
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/ath/ath_hal/ar5211/ar5211=
.h
--- a/head/sys/dev/ath/ath_hal/ar5211/ar5211.h	Mon Jul 30 11:44:18 2012 +03=
00
+++ b/head/sys/dev/ath/ath_hal/ar5211/ar5211.h	Fri Aug 10 14:19:25 2012 +03=
00
@@ -14,7 +14,7 @@
  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  *
- * $FreeBSD: head/sys/dev/ath/ath_hal/ar5211/ar5211.h 238607 2012-07-19 02=
:25:14Z adrian $
+ * $FreeBSD: head/sys/dev/ath/ath_hal/ar5211/ar5211.h 239051 2012-08-05 10=
:12:27Z adrian $
  */
 #ifndef _ATH_AR5211_H_
 #define _ATH_AR5211_H_
@@ -196,7 +196,8 @@
 		u_int txRate2, u_int txRetries2,
 		u_int txRate3, u_int txRetries3);
 extern	HAL_BOOL ar5211FillTxDesc(struct ath_hal *, struct ath_desc *,
-		u_int segLen, HAL_BOOL firstSeg, HAL_BOOL lastSeg,
+		HAL_DMA_ADDR *bufAddrList, uint32_t *segLenList,
+		u_int descId, u_int qcuId, HAL_BOOL firstSeg, HAL_BOOL lastSeg,
 		const struct ath_desc *ds0);
 extern	HAL_STATUS ar5211ProcTxDesc(struct ath_hal *,
 		struct ath_desc *, struct ath_tx_status *);
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/ath/ath_hal/ar5211/ar5211=
_attach.c
--- a/head/sys/dev/ath/ath_hal/ar5211/ar5211_attach.c	Mon Jul 30 11:44:18 2=
012 +0300
+++ b/head/sys/dev/ath/ath_hal/ar5211/ar5211_attach.c	Fri Aug 10 14:19:25 2=
012 +0300
@@ -14,7 +14,7 @@
  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  *
- * $FreeBSD: head/sys/dev/ath/ath_hal/ar5211/ar5211_attach.c 238607 2012-0=
7-19 02:25:14Z adrian $
+ * $FreeBSD: head/sys/dev/ath/ath_hal/ar5211/ar5211_attach.c 238858 2012-0=
7-28 07:28:08Z adrian $
  */
 #include "opt_ah.h"
=20
@@ -496,6 +496,7 @@
 	pCap->halSleepAfterBeaconBroken =3D AH_TRUE;
 	pCap->halPSPollBroken =3D AH_TRUE;
 	pCap->halVEOLSupport =3D AH_TRUE;
+	pCap->halNumMRRetries =3D 1;	/* No hardware MRR support */
=20
 	pCap->halTotalQueues =3D HAL_NUM_TX_QUEUES;
 	pCap->halKeyCacheSize =3D 128;
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/ath/ath_hal/ar5211/ar5211=
_xmit.c
--- a/head/sys/dev/ath/ath_hal/ar5211/ar5211_xmit.c	Mon Jul 30 11:44:18 201=
2 +0300
+++ b/head/sys/dev/ath/ath_hal/ar5211/ar5211_xmit.c	Fri Aug 10 14:19:25 201=
2 +0300
@@ -14,7 +14,7 @@
  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  *
- * $FreeBSD: head/sys/dev/ath/ath_hal/ar5211/ar5211_xmit.c 238607 2012-07-=
19 02:25:14Z adrian $
+ * $FreeBSD: head/sys/dev/ath/ath_hal/ar5211/ar5211_xmit.c 239051 2012-08-=
05 10:12:27Z adrian $
  */
 #include "opt_ah.h"
=20
@@ -577,10 +577,14 @@
=20
 HAL_BOOL
 ar5211FillTxDesc(struct ath_hal *ah, struct ath_desc *ds,
-	u_int segLen, HAL_BOOL firstSeg, HAL_BOOL lastSeg,
+	HAL_DMA_ADDR *bufAddrList, uint32_t *segLenList, u_int qcuId,
+	u_int descId, HAL_BOOL firstSeg, HAL_BOOL lastSeg,
 	const struct ath_desc *ds0)
 {
 	struct ar5211_desc *ads =3D AR5211DESC(ds);
+	uint32_t segLen =3D segLenList[0];
+
+	ds->ds_data =3D bufAddrList[0];
=20
 	HALASSERT((segLen &~ AR_BufLen) =3D=3D 0);
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/ath/ath_hal/ar5212/ar5212=
.h
--- a/head/sys/dev/ath/ath_hal/ar5212/ar5212.h	Mon Jul 30 11:44:18 2012 +03=
00
+++ b/head/sys/dev/ath/ath_hal/ar5212/ar5212.h	Fri Aug 10 14:19:25 2012 +03=
00
@@ -14,7 +14,7 @@
  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  *
- * $FreeBSD: head/sys/dev/ath/ath_hal/ar5212/ar5212.h 238607 2012-07-19 02=
:25:14Z adrian $
+ * $FreeBSD: head/sys/dev/ath/ath_hal/ar5212/ar5212.h 239051 2012-08-05 10=
:12:27Z adrian $
  */
 #ifndef _ATH_AR5212_H_
 #define _ATH_AR5212_H_
@@ -594,7 +594,8 @@
 		u_int txRate2, u_int txRetries2,
 		u_int txRate3, u_int txRetries3);
 extern	HAL_BOOL ar5212FillTxDesc(struct ath_hal *ah, struct ath_desc *ds,
-		u_int segLen, HAL_BOOL firstSeg, HAL_BOOL lastSeg,
+		HAL_DMA_ADDR *bufAddrList, uint32_t *segLenList,
+		u_int descId, u_int qcuId, HAL_BOOL firstSeg, HAL_BOOL lastSeg,
 		const struct ath_desc *ds0);
 extern	HAL_STATUS ar5212ProcTxDesc(struct ath_hal *ah,
 		struct ath_desc *, struct ath_tx_status *);
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/ath/ath_hal/ar5212/ar5212=
_attach.c
--- a/head/sys/dev/ath/ath_hal/ar5212/ar5212_attach.c	Mon Jul 30 11:44:18 2=
012 +0300
+++ b/head/sys/dev/ath/ath_hal/ar5212/ar5212_attach.c	Fri Aug 10 14:19:25 2=
012 +0300
@@ -14,7 +14,7 @@
  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  *
- * $FreeBSD: head/sys/dev/ath/ath_hal/ar5212/ar5212_attach.c 238607 2012-0=
7-19 02:25:14Z adrian $
+ * $FreeBSD: head/sys/dev/ath/ath_hal/ar5212/ar5212_attach.c 238858 2012-0=
7-28 07:28:08Z adrian $
  */
 #include "opt_ah.h"
=20
@@ -824,6 +824,7 @@
 	pCap->halTurboGSupport =3D pCap->halWirelessModes & HAL_MODE_108G;
=20
 	pCap->halPSPollBroken =3D AH_TRUE;	/* XXX fixed in later revs? */
+	pCap->halNumMRRetries =3D 4;		/* Hardware supports 4 MRR */
 	pCap->halVEOLSupport =3D AH_TRUE;
 	pCap->halBssIdMaskSupport =3D AH_TRUE;
 	pCap->halMcastKeySrchSupport =3D AH_TRUE;
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/ath/ath_hal/ar5212/ar5212=
_xmit.c
--- a/head/sys/dev/ath/ath_hal/ar5212/ar5212_xmit.c	Mon Jul 30 11:44:18 201=
2 +0300
+++ b/head/sys/dev/ath/ath_hal/ar5212/ar5212_xmit.c	Fri Aug 10 14:19:25 201=
2 +0300
@@ -14,7 +14,7 @@
  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  *
- * $FreeBSD: head/sys/dev/ath/ath_hal/ar5212/ar5212_xmit.c 238607 2012-07-=
19 02:25:14Z adrian $
+ * $FreeBSD: head/sys/dev/ath/ath_hal/ar5212/ar5212_xmit.c 239051 2012-08-=
05 10:12:27Z adrian $
  */
 #include "opt_ah.h"
=20
@@ -802,13 +802,17 @@
=20
 HAL_BOOL
 ar5212FillTxDesc(struct ath_hal *ah, struct ath_desc *ds,
-	u_int segLen, HAL_BOOL firstSeg, HAL_BOOL lastSeg,
+	HAL_DMA_ADDR *bufAddrList, uint32_t *segLenList, u_int qcuId,
+	u_int descId, HAL_BOOL firstSeg, HAL_BOOL lastSeg,
 	const struct ath_desc *ds0)
 {
 	struct ar5212_desc *ads =3D AR5212DESC(ds);
+	uint32_t segLen =3D segLenList[0];
=20
 	HALASSERT((segLen &~ AR_BufLen) =3D=3D 0);
=20
+	ds->ds_data =3D bufAddrList[0];
+
 	if (firstSeg) {
 		/*
 		 * First descriptor, don't clobber xmit control data
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/ath/ath_hal/ar5416/ar5416=
.h
--- a/head/sys/dev/ath/ath_hal/ar5416/ar5416.h	Mon Jul 30 11:44:18 2012 +03=
00
+++ b/head/sys/dev/ath/ath_hal/ar5416/ar5416.h	Fri Aug 10 14:19:25 2012 +03=
00
@@ -14,7 +14,7 @@
  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  *
- * $FreeBSD: head/sys/dev/ath/ath_hal/ar5416/ar5416.h 237611 2012-06-26 22=
:16:53Z adrian $
+ * $FreeBSD: head/sys/dev/ath/ath_hal/ar5416/ar5416.h 239053 2012-08-05 11=
:24:21Z adrian $
  */
 #ifndef _ATH_AR5416_H_
 #define _ATH_AR5416_H_
@@ -360,7 +360,8 @@
 		u_int txRate2, u_int txRetries2,
 		u_int txRate3, u_int txRetries3);
 extern	HAL_BOOL ar5416FillTxDesc(struct ath_hal *ah, struct ath_desc *ds,
-		u_int segLen, HAL_BOOL firstSeg, HAL_BOOL lastSeg,
+		HAL_DMA_ADDR *bufAddrList, uint32_t *segLenList,
+		u_int descId, u_int qcuId, HAL_BOOL firstSeg, HAL_BOOL lastSeg,
 		const struct ath_desc *ds0);
 extern	HAL_STATUS ar5416ProcTxDesc(struct ath_hal *ah,
 		struct ath_desc *, struct ath_tx_status *);
@@ -372,8 +373,9 @@
 	        const HAL_TXQ_INFO *qInfo);
=20
 extern	HAL_BOOL ar5416ChainTxDesc(struct ath_hal *ah, struct ath_desc *ds,
+		HAL_DMA_ADDR *bufAddrList, uint32_t *segLenList,
 		u_int pktLen, u_int hdrLen, HAL_PKT_TYPE type, u_int keyIx,
-		HAL_CIPHER cipher, uint8_t delims, u_int segLen,
+		HAL_CIPHER cipher, uint8_t delims,
 		HAL_BOOL firstSeg, HAL_BOOL lastSeg, HAL_BOOL lastAggr);
 extern	HAL_BOOL ar5416SetupFirstTxDesc(struct ath_hal *ah, struct ath_desc=
 *ds,
 		u_int aggrLen, u_int flags, u_int txPower, u_int txRate0, u_int txTries0,
@@ -387,7 +389,7 @@
 		u_int nseries, u_int flags);
=20
 extern void ar5416Set11nAggrFirst(struct ath_hal *ah, struct ath_desc *ds,
-		u_int aggrLen, u_int numDelims);
+		u_int aggrLen);
 extern	void ar5416Set11nAggrMiddle(struct ath_hal *ah, struct ath_desc *ds=
, u_int numDelims);
 extern void ar5416Set11nAggrLast(struct ath_hal *ah, struct ath_desc *ds);
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/ath/ath_hal/ar5416/ar5416=
_attach.c
--- a/head/sys/dev/ath/ath_hal/ar5416/ar5416_attach.c	Mon Jul 30 11:44:18 2=
012 +0300
+++ b/head/sys/dev/ath/ath_hal/ar5416/ar5416_attach.c	Fri Aug 10 14:19:25 2=
012 +0300
@@ -14,7 +14,7 @@
  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  *
- * $FreeBSD: head/sys/dev/ath/ath_hal/ar5416/ar5416_attach.c 236017 2012-0=
5-25 17:53:57Z adrian $
+ * $FreeBSD: head/sys/dev/ath/ath_hal/ar5416/ar5416_attach.c 238858 2012-0=
7-28 07:28:08Z adrian $
  */
 #include "opt_ah.h"
=20
@@ -892,6 +892,7 @@
 	pCap->halTurboGSupport =3D pCap->halWirelessModes & HAL_MODE_108G;
=20
 	pCap->halPSPollBroken =3D AH_TRUE;	/* XXX fixed in later revs? */
+	pCap->halNumMRRetries =3D 4;		/* Hardware supports 4 MRR */
 	pCap->halVEOLSupport =3D AH_TRUE;
 	pCap->halBssIdMaskSupport =3D AH_TRUE;
 	pCap->halMcastKeySrchSupport =3D AH_TRUE;	/* Works on AR5416 and later */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/ath/ath_hal/ar5416/ar5416=
_xmit.c
--- a/head/sys/dev/ath/ath_hal/ar5416/ar5416_xmit.c	Mon Jul 30 11:44:18 201=
2 +0300
+++ b/head/sys/dev/ath/ath_hal/ar5416/ar5416_xmit.c	Fri Aug 10 14:19:25 201=
2 +0300
@@ -14,7 +14,7 @@
  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  *
- * $FreeBSD: head/sys/dev/ath/ath_hal/ar5416/ar5416_xmit.c 233895 2012-04-=
04 21:49:49Z adrian $
+ * $FreeBSD: head/sys/dev/ath/ath_hal/ar5416/ar5416_xmit.c 239053 2012-08-=
05 11:24:21Z adrian $
  */
 #include "opt_ah.h"
=20
@@ -135,6 +135,7 @@
 #define set11nRateFlags(_series, _index) \
         ((_series)[_index].RateFlags & HAL_RATESERIES_2040 ? AR_2040_##_in=
dex : 0) \
         |((_series)[_index].RateFlags & HAL_RATESERIES_HALFGI ? AR_GI##_in=
dex : 0) \
+        |((_series)[_index].RateFlags & HAL_RATESERIES_STBC ? AR_STBC##_in=
dex : 0) \
         |SM((_series)[_index].ChSel, AR_ChainSel##_index)
=20
 /*
@@ -276,13 +277,17 @@
=20
 HAL_BOOL
 ar5416FillTxDesc(struct ath_hal *ah, struct ath_desc *ds,
-	u_int segLen, HAL_BOOL firstSeg, HAL_BOOL lastSeg,
+	HAL_DMA_ADDR *bufAddrList, uint32_t *segLenList, u_int descId,
+	u_int qcuId, HAL_BOOL firstSeg, HAL_BOOL lastSeg,
 	const struct ath_desc *ds0)
 {
 	struct ar5416_desc *ads =3D AR5416DESC(ds);
+	uint32_t segLen =3D segLenList[0];
=20
 	HALASSERT((segLen &~ AR_BufLen) =3D=3D 0);
=20
+	ds->ds_data =3D bufAddrList[0];
+
 	if (firstSeg) {
 		/*
 		 * First descriptor, don't clobber xmit control data
@@ -330,13 +335,14 @@
  */
 HAL_BOOL
 ar5416ChainTxDesc(struct ath_hal *ah, struct ath_desc *ds,
+	HAL_DMA_ADDR *bufAddrList,
+	uint32_t *segLenList,
 	u_int pktLen,
 	u_int hdrLen,
 	HAL_PKT_TYPE type,
 	u_int keyIx,
 	HAL_CIPHER cipher,
 	uint8_t delims,
-	u_int segLen,
 	HAL_BOOL firstSeg,
 	HAL_BOOL lastSeg,
 	HAL_BOOL lastAggr)
@@ -344,6 +350,7 @@
 	struct ar5416_desc *ads =3D AR5416DESC(ds);
 	uint32_t *ds_txstatus =3D AR5416_DS_TXSTATUS(ah,ads);
 	struct ath_hal_5416 *ahp =3D AH5416(ah);
+	u_int segLen =3D segLenList[0];
=20
 	int isaggr =3D 0;
 	uint32_t last_aggr =3D 0;
@@ -352,6 +359,7 @@
 	(void) ah;
=20
 	HALASSERT((segLen &~ AR_BufLen) =3D=3D 0);
+	ds->ds_data =3D bufAddrList[0];
=20
 	HALASSERT(isValidPktType(type));
 	if (type =3D=3D HAL_PKT_TYPE_AMPDU) {
@@ -727,16 +735,14 @@
 }
=20
 void
-ar5416Set11nAggrFirst(struct ath_hal *ah, struct ath_desc *ds,
-    u_int aggrLen, u_int numDelims)
+ar5416Set11nAggrFirst(struct ath_hal *ah, struct ath_desc *ds, u_int aggrL=
en)
 {
 	struct ar5416_desc *ads =3D AR5416DESC(ds);
=20
 	ads->ds_ctl1 |=3D (AR_IsAggr | AR_MoreAggr);
=20
 	ads->ds_ctl6 &=3D ~(AR_AggrLen | AR_PadDelim);
-	ads->ds_ctl6 |=3D SM(aggrLen, AR_AggrLen) |
-	    SM(numDelims, AR_PadDelim);
+	ads->ds_ctl6 |=3D SM(aggrLen, AR_AggrLen);
 }
=20
 void
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/ath/ath_rate/sample/sampl=
e.c
--- a/head/sys/dev/ath/ath_rate/sample/sample.c	Mon Jul 30 11:44:18 2012 +0=
300
+++ b/head/sys/dev/ath/ath_rate/sample/sample.c	Fri Aug 10 14:19:25 2012 +0=
300
@@ -36,7 +36,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/dev/ath/ath_rate/sample/sample.c 238638 2012-=
07-20 02:17:48Z adrian $");
+__FBSDID("$FreeBSD: head/sys/dev/ath/ath_rate/sample/sample.c 238962 2012-=
08-01 00:18:02Z adrian $");
=20
 /*
  * John Bicket's SampleRate control algorithm.
@@ -502,8 +502,10 @@
 		goto done;
 	}
=20
-	/* XXX TODO: this doesn't know about 11gn vs 11g protection; teach it */
-	mrr =3D sc->sc_mrretry && !(ic->ic_flags & IEEE80211_F_USEPROT);
+	mrr =3D sc->sc_mrretry;
+	/* XXX check HT protmode too */
+	if (mrr && (ic->ic_flags & IEEE80211_F_USEPROT && !sc->sc_mrrprot))
+		mrr =3D 0;
=20
 	best_rix =3D pick_best_rate(an, rt, size_bin, !mrr);
 	if (best_rix >=3D 0) {
@@ -910,7 +912,11 @@
 		    short_tries, long_tries);
 		return;
 	}
-	mrr =3D sc->sc_mrretry && !(ic->ic_flags & IEEE80211_F_USEPROT);
+	mrr =3D sc->sc_mrretry;
+	/* XXX check HT protmode too */
+	if (mrr && (ic->ic_flags & IEEE80211_F_USEPROT && !sc->sc_mrrprot))
+		mrr =3D 0;
+
 	if (!mrr || ts->ts_finaltsi =3D=3D 0) {
 		if (!IS_RATE_DEFINED(sn, final_rix)) {
 			badrate(ifp, 0, ts->ts_rate, long_tries, status);
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/ath/if_ath.c
--- a/head/sys/dev/ath/if_ath.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/ath/if_ath.c	Fri Aug 10 14:19:25 2012 +0300
@@ -28,7 +28,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/dev/ath/if_ath.c 238729 2012-07-23 23:40:13Z =
adrian $");
+__FBSDID("$FreeBSD: head/sys/dev/ath/if_ath.c 238961 2012-07-31 23:54:15Z =
adrian $");
=20
 /*
  * Driver for the Atheros Wireless LAN controller.
@@ -254,6 +254,28 @@
=20
 MALLOC_DEFINE(M_ATHDEV, "athdev", "ath driver dma buffers");
=20
+void
+ath_legacy_attach_comp_func(struct ath_softc *sc)
+{
+
+	/*
+	 * Special case certain configurations.  Note the
+	 * CAB queue is handled by these specially so don't
+	 * include them when checking the txq setup mask.
+	 */
+	switch (sc->sc_txqsetup &~ (1<<sc->sc_cabq->axq_qnum)) {
+	case 0x01:
+		TASK_INIT(&sc->sc_txtask, 0, ath_tx_proc_q0, sc);
+		break;
+	case 0x0f:
+		TASK_INIT(&sc->sc_txtask, 0, ath_tx_proc_q0123, sc);
+		break;
+	default:
+		TASK_INIT(&sc->sc_txtask, 0, ath_tx_proc, sc);
+		break;
+	}
+}
+
 #define	HAL_MODE_HT20 (HAL_MODE_11NG_HT20 | HAL_MODE_11NA_HT20)
 #define	HAL_MODE_HT40 \
 	(HAL_MODE_11NG_HT40PLUS | HAL_MODE_11NG_HT40MINUS | \
@@ -460,21 +482,12 @@
 	}
=20
 	/*
-	 * Special case certain configurations.  Note the
-	 * CAB queue is handled by these specially so don't
-	 * include them when checking the txq setup mask.
+	 * Attach the TX completion function.
+	 *
+	 * The non-EDMA chips may have some special case optimisations;
+	 * this method gives everyone a chance to attach cleanly.
 	 */
-	switch (sc->sc_txqsetup &~ (1<<sc->sc_cabq->axq_qnum)) {
-	case 0x01:
-		TASK_INIT(&sc->sc_txtask, 0, ath_tx_proc_q0, sc);
-		break;
-	case 0x0f:
-		TASK_INIT(&sc->sc_txtask, 0, ath_tx_proc_q0123, sc);
-		break;
-	default:
-		TASK_INIT(&sc->sc_txtask, 0, ath_tx_proc, sc);
-		break;
-	}
+	sc->sc_tx.xmit_attach_comp_func(sc);
=20
 	/*
 	 * Setup rate control.  Some rate control modules
@@ -692,6 +705,12 @@
 		(void) ath_hal_settxchainmask(sc->sc_ah, tx_chainmask);
 	}
=20
+	/*
+	 * Disable MRR with protected frames by default.
+	 * Only 802.11n series NICs can handle this.
+	 */
+	sc->sc_mrrprot =3D 0;	/* XXX should be a capability */
+
 #ifdef	ATH_ENABLE_11N
 	/*
 	 * Query HT capabilities
@@ -701,6 +720,9 @@
 		int rxs, txs;
=20
 		device_printf(sc->sc_dev, "[HT] enabling HT modes\n");
+
+		sc->sc_mrrprot =3D 1;	/* XXX should be a capability */
+
 		ic->ic_htcaps =3D IEEE80211_HTC_HT	/* HT operation */
 			    | IEEE80211_HTC_AMPDU	/* A-MPDU tx/rx */
 			    | IEEE80211_HTC_AMSDU	/* A-MSDU tx/rx */
@@ -916,6 +938,7 @@
=20
 	ath_dfs_detach(sc);
 	ath_desc_free(sc);
+	ath_txdma_teardown(sc);
 	ath_rxdma_teardown(sc);
 	ath_tx_cleanup(sc);
 	ath_hal_detach(sc->sc_ah);	/* NB: sets chip in full sleep */
@@ -2764,28 +2787,32 @@
 	*paddr =3D segs->ds_addr;
 }
=20
+/*
+ * Allocate the descriptors and appropriate DMA tag/setup.
+ *
+ * For some situations (eg EDMA TX completion), there isn't a requirement
+ * for the ath_buf entries to be allocated.
+ */
 int
-ath_descdma_setup(struct ath_softc *sc,
+ath_descdma_alloc_desc(struct ath_softc *sc,
 	struct ath_descdma *dd, ath_bufhead *head,
-	const char *name, int ds_size, int nbuf, int ndesc)
+	const char *name, int ds_size, int ndesc)
 {
 #define	DS2PHYS(_dd, _ds) \
 	((_dd)->dd_desc_paddr + ((caddr_t)(_ds) - (caddr_t)(_dd)->dd_desc))
 #define	ATH_DESC_4KB_BOUND_CHECK(_daddr, _len) \
 	((((u_int32_t)(_daddr) & 0xFFF) > (0x1000 - (_len))) ? 1 : 0)
 	struct ifnet *ifp =3D sc->sc_ifp;
-	uint8_t *ds;
-	struct ath_buf *bf;
-	int i, bsize, error;
+	int error;
=20
 	dd->dd_descsize =3D ds_size;
=20
 	DPRINTF(sc, ATH_DEBUG_RESET,
-	    "%s: %s DMA: %u buffers %u desc/buf, %d bytes per descriptor\n",
-	    __func__, name, nbuf, ndesc, dd->dd_descsize);
+	    "%s: %s DMA: %u desc, %d bytes per descriptor\n",
+	    __func__, name, ndesc, dd->dd_descsize);
=20
 	dd->dd_name =3D name;
-	dd->dd_desc_len =3D dd->dd_descsize * nbuf * ndesc;
+	dd->dd_desc_len =3D dd->dd_descsize * ndesc;
=20
 	/*
 	 * Merlin work-around:
@@ -2793,8 +2820,8 @@
 	 * Assume one skipped descriptor per 4KB page.
 	 */
 	if (! ath_hal_split4ktrans(sc->sc_ah)) {
-		int numdescpage =3D 4096 / (dd->dd_descsize * ndesc);
-		dd->dd_desc_len =3D (nbuf / numdescpage + 1) * 4096;
+		int numpages =3D dd->dd_desc_len / 4096;
+		dd->dd_desc_len +=3D ds_size * numpages;
 	}
=20
 	/*
@@ -2830,7 +2857,7 @@
 				 &dd->dd_dmamap);
 	if (error !=3D 0) {
 		if_printf(ifp, "unable to alloc memory for %u %s descriptors, "
-			"error %u\n", nbuf * ndesc, dd->dd_name, error);
+			"error %u\n", ndesc, dd->dd_name, error);
 		goto fail1;
 	}
=20
@@ -2844,10 +2871,49 @@
 		goto fail2;
 	}
=20
+	DPRINTF(sc, ATH_DEBUG_RESET, "%s: %s DMA map: %p (%lu) -> %p (%lu)\n",
+	    __func__, dd->dd_name, (uint8_t *) dd->dd_desc,
+	    (u_long) dd->dd_desc_len, (caddr_t) dd->dd_desc_paddr,
+	    /*XXX*/ (u_long) dd->dd_desc_len);
+
+	return (0);
+
+fail2:
+	bus_dmamem_free(dd->dd_dmat, dd->dd_desc, dd->dd_dmamap);
+fail1:
+	bus_dmamap_destroy(dd->dd_dmat, dd->dd_dmamap);
+fail0:
+	bus_dma_tag_destroy(dd->dd_dmat);
+	memset(dd, 0, sizeof(*dd));
+	return error;
+#undef DS2PHYS
+#undef ATH_DESC_4KB_BOUND_CHECK
+}
+
+int
+ath_descdma_setup(struct ath_softc *sc,
+	struct ath_descdma *dd, ath_bufhead *head,
+	const char *name, int ds_size, int nbuf, int ndesc)
+{
+#define	DS2PHYS(_dd, _ds) \
+	((_dd)->dd_desc_paddr + ((caddr_t)(_ds) - (caddr_t)(_dd)->dd_desc))
+#define	ATH_DESC_4KB_BOUND_CHECK(_daddr, _len) \
+	((((u_int32_t)(_daddr) & 0xFFF) > (0x1000 - (_len))) ? 1 : 0)
+	struct ifnet *ifp =3D sc->sc_ifp;
+	uint8_t *ds;
+	struct ath_buf *bf;
+	int i, bsize, error;
+
+	/* Allocate descriptors */
+	error =3D ath_descdma_alloc_desc(sc, dd, head, name, ds_size,
+	    nbuf * ndesc);
+
+	/* Assume any errors during allocation were dealt with */
+	if (error !=3D 0) {
+		return (error);
+	}
+
 	ds =3D (uint8_t *) dd->dd_desc;
-	DPRINTF(sc, ATH_DEBUG_RESET, "%s: %s DMA map: %p (%lu) -> %p (%lu)\n",
-	    __func__, dd->dd_name, ds, (u_long) dd->dd_desc_len,
-	    (caddr_t) dd->dd_desc_paddr, /*XXX*/ (u_long) dd->dd_desc_len);
=20
 	/* allocate rx buffers */
 	bsize =3D sizeof(struct ath_buf) * nbuf;
@@ -2870,7 +2936,7 @@
 			 * in the descriptor.
 			 */
 			 if (ATH_DESC_4KB_BOUND_CHECK(bf->bf_daddr,
-			     dd->dd_descsize * ndesc)) {
+			     dd->dd_descsize)) {
 				/* Start at the next page */
 				ds +=3D 0x1000 - (bf->bf_daddr & 0xFFF);
 				bf->bf_desc =3D (struct ath_desc *) ds;
@@ -2888,14 +2954,18 @@
 		bf->bf_lastds =3D bf->bf_desc;	/* Just an initial value */
 		TAILQ_INSERT_TAIL(head, bf, bf_list);
 	}
+
+	/*
+	 * XXX TODO: ensure that ds doesn't overflow the descriptor
+	 * allocation otherwise weird stuff will occur and crash your
+	 * machine.
+	 */
 	return 0;
+	/* XXX this should likely just call ath_descdma_cleanup() */
 fail3:
 	bus_dmamap_unload(dd->dd_dmat, dd->dd_dmamap);
-fail2:
 	bus_dmamem_free(dd->dd_dmat, dd->dd_desc, dd->dd_dmamap);
-fail1:
 	bus_dmamap_destroy(dd->dd_dmat, dd->dd_dmamap);
-fail0:
 	bus_dma_tag_destroy(dd->dd_dmat);
 	memset(dd, 0, sizeof(*dd));
 	return error;
@@ -2980,27 +3050,32 @@
 		bus_dma_tag_destroy(dd->dd_dmat);
 	}
=20
-	TAILQ_FOREACH(bf, head, bf_list) {
-		if (bf->bf_m) {
-			m_freem(bf->bf_m);
-			bf->bf_m =3D NULL;
-		}
-		if (bf->bf_dmamap !=3D NULL) {
-			bus_dmamap_destroy(sc->sc_dmat, bf->bf_dmamap);
-			bf->bf_dmamap =3D NULL;
-		}
-		ni =3D bf->bf_node;
-		bf->bf_node =3D NULL;
-		if (ni !=3D NULL) {
-			/*
-			 * Reclaim node reference.
-			 */
-			ieee80211_free_node(ni);
+	if (head !=3D NULL) {
+		TAILQ_FOREACH(bf, head, bf_list) {
+			if (bf->bf_m) {
+				m_freem(bf->bf_m);
+				bf->bf_m =3D NULL;
+			}
+			if (bf->bf_dmamap !=3D NULL) {
+				bus_dmamap_destroy(sc->sc_dmat, bf->bf_dmamap);
+				bf->bf_dmamap =3D NULL;
+			}
+			ni =3D bf->bf_node;
+			bf->bf_node =3D NULL;
+			if (ni !=3D NULL) {
+				/*
+				 * Reclaim node reference.
+				 */
+				ieee80211_free_node(ni);
+			}
 		}
 	}
=20
-	TAILQ_INIT(head);
-	free(dd->dd_bufptr, M_ATHDEV);
+	if (head !=3D NULL)
+		TAILQ_INIT(head);
+
+	if (dd->dd_bufptr !=3D NULL)
+		free(dd->dd_bufptr, M_ATHDEV);
 	memset(dd, 0, sizeof(*dd));
 }
=20
@@ -3510,8 +3585,8 @@
  * Kick the packet scheduler if needed. This can occur from this
  * particular task.
  */
-static int
-ath_tx_processq(struct ath_softc *sc, struct ath_txq *txq, int dosched)
+int
+ath_legacy_tx_processq(struct ath_softc *sc, struct ath_txq *txq, int dosc=
hed)
 {
 	struct ath_hal *ah =3D sc->sc_ah;
 	struct ath_buf *bf;
@@ -3911,7 +3986,7 @@
 }
=20
 void
-ath_tx_draintxq(struct ath_softc *sc, struct ath_txq *txq)
+ath_legacy_tx_draintxq(struct ath_softc *sc, struct ath_txq *txq)
 {
 #ifdef ATH_DEBUG
 	struct ath_hal *ah =3D sc->sc_ah;
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/ath/if_ath_beacon.c
--- a/head/sys/dev/ath/if_ath_beacon.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/ath/if_ath_beacon.c	Fri Aug 10 14:19:25 2012 +0300
@@ -28,7 +28,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/dev/ath/if_ath_beacon.c 238609 2012-07-19 03:=
51:16Z adrian $");
+__FBSDID("$FreeBSD: head/sys/dev/ath/if_ath_beacon.c 239051 2012-08-05 10:=
12:27Z adrian $");
=20
 /*
  * Driver for the Atheros Wireless LAN controller.
@@ -266,6 +266,8 @@
 	int flags, antenna;
 	const HAL_RATE_TABLE *rt;
 	u_int8_t rix, rate;
+	HAL_DMA_ADDR bufAddrList[4];
+	uint32_t segLenList[4];
=20
 	DPRINTF(sc, ATH_DEBUG_BEACON_PROC, "%s: m %p len %u\n",
 		__func__, m, m->m_len);
@@ -300,7 +302,7 @@
=20
 	KASSERT(bf->bf_nseg =3D=3D 1,
 		("multi-segment beacon frame; nseg %u", bf->bf_nseg));
-	ds->ds_data =3D bf->bf_segs[0].ds_addr;
+
 	/*
 	 * Calculate rate code.
 	 * XXX everything at min xmit rate
@@ -323,8 +325,15 @@
 		, 0				/* rts/cts duration */
 	);
 	/* NB: beacon's BufLen must be a multiple of 4 bytes */
+	segLenList[0] =3D roundup(m->m_len, 4);
+	segLenList[1] =3D segLenList[2] =3D segLenList[3] =3D 0;
+	bufAddrList[0] =3D bf->bf_segs[0].ds_addr;
+	bufAddrList[1] =3D bufAddrList[2] =3D bufAddrList[3] =3D 0;
 	ath_hal_filltxdesc(ah, ds
-		, roundup(m->m_len, 4)		/* buffer length */
+		, bufAddrList
+		, segLenList
+		, 0				/* XXX desc id */
+		, sc->sc_bhalq			/* hardware TXQ */
 		, AH_TRUE			/* first segment */
 		, AH_TRUE			/* last segment */
 		, ds				/* first descriptor */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/ath/if_ath_misc.h
--- a/head/sys/dev/ath/if_ath_misc.h	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/ath/if_ath_misc.h	Fri Aug 10 14:19:25 2012 +0300
@@ -26,7 +26,7 @@
  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
  * THE POSSIBILITY OF SUCH DAMAGES.
  *
- * $FreeBSD: head/sys/dev/ath/if_ath_misc.h 238729 2012-07-23 23:40:13Z ad=
rian $
+ * $FreeBSD: head/sys/dev/ath/if_ath_misc.h 238931 2012-07-31 03:09:48Z ad=
rian $
  */
 #ifndef	__IF_ATH_MISC_H__
 #define	__IF_ATH_MISC_H__
@@ -66,7 +66,6 @@
 extern void ath_returnbuf_tail(struct ath_softc *sc, struct ath_buf *bf);
=20
 extern int ath_reset(struct ifnet *, ATH_RESET_TYPE);
-extern void ath_tx_draintxq(struct ath_softc *sc, struct ath_txq *txq);
 extern void ath_tx_default_comp(struct ath_softc *sc, struct ath_buf *bf,
 	    int fail);
 extern void ath_tx_update_ratectrl(struct ath_softc *sc,
@@ -84,6 +83,9 @@
=20
 extern void ath_setslottime(struct ath_softc *sc);
=20
+extern	int ath_descdma_alloc_desc(struct ath_softc *sc,
+	    struct ath_descdma *dd, ath_bufhead *head, const char *name,
+	    int ds_size, int ndesc);
 extern	int ath_descdma_setup(struct ath_softc *sc, struct ath_descdma *dd,
 	    ath_bufhead *head, const char *name, int ds_size, int nbuf,
 	    int ndesc);
@@ -93,6 +95,11 @@
 extern	void ath_descdma_cleanup(struct ath_softc *sc,
 	    struct ath_descdma *dd, ath_bufhead *head);
=20
+extern	void ath_legacy_attach_comp_func(struct ath_softc *sc);
+extern	void ath_legacy_tx_draintxq(struct ath_softc *sc, struct ath_txq *t=
xq);
+extern	int ath_legacy_tx_processq(struct ath_softc *sc, struct ath_txq *tx=
q,
+	    int dosched);
+
 /*
  * This is only here so that the RX proc function can call it.
  * It's very likely that the "start TX after RX" call should be
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/ath/if_ath_rx.c
--- a/head/sys/dev/ath/if_ath_rx.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/ath/if_ath_rx.c	Fri Aug 10 14:19:25 2012 +0300
@@ -28,7 +28,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/dev/ath/if_ath_rx.c 238729 2012-07-23 23:40:1=
3Z adrian $");
+__FBSDID("$FreeBSD: head/sys/dev/ath/if_ath_rx.c 239111 2012-08-06 22:54:1=
0Z adrian $");
=20
 /*
  * Driver for the Atheros Wireless LAN controller.
@@ -1072,8 +1072,6 @@
 {
 	int error;
=20
-	device_printf(sc->sc_dev, "%s: called\n", __func__);
-
 	error =3D ath_descdma_setup(sc, &sc->sc_rxdma, &sc->sc_rxbuf,
 	    "rx", sizeof(struct ath_desc), ath_rxbuf, 1);
 	if (error !=3D 0)
@@ -1086,8 +1084,6 @@
 ath_legacy_dma_rxteardown(struct ath_softc *sc)
 {
=20
-	device_printf(sc->sc_dev, "%s: called\n", __func__);
-=09
 	if (sc->sc_rxdma.dd_desc_len !=3D 0)
 		ath_descdma_cleanup(sc, &sc->sc_rxdma, &sc->sc_rxbuf);
 	return (0);
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/ath/if_ath_rx_edma.c
--- a/head/sys/dev/ath/if_ath_rx_edma.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/ath/if_ath_rx_edma.c	Fri Aug 10 14:19:25 2012 +0300
@@ -28,7 +28,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/dev/ath/if_ath_rx_edma.c 238710 2012-07-23 03=
:52:18Z adrian $");
+__FBSDID("$FreeBSD: head/sys/dev/ath/if_ath_rx_edma.c 239111 2012-08-06 22=
:54:10Z adrian $");
=20
 /*
  * Driver for the Atheros Wireless LAN controller.
@@ -507,8 +507,6 @@
=20
 	ATH_RX_LOCK_ASSERT(sc);
=20
-//	device_printf(sc->sc_dev, "%s: called; bf=3D%p\n", __func__, bf);
-
 	m =3D m_getm(NULL, sc->sc_edma_bufsize, M_DONTWAIT, MT_DATA);
 	if (! m)
 		return (ENOBUFS);		/* XXX ?*/
@@ -799,8 +797,6 @@
 ath_edma_dma_rxteardown(struct ath_softc *sc)
 {
=20
-	device_printf(sc->sc_dev, "%s: called\n", __func__);
-
 	ATH_RX_LOCK(sc);
 	ath_edma_rxfifo_flush(sc, HAL_RX_QUEUE_HP);
 	ath_edma_rxfifo_free(sc, HAL_RX_QUEUE_HP);
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/ath/if_ath_tx.c
--- a/head/sys/dev/ath/if_ath_tx.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/ath/if_ath_tx.c	Fri Aug 10 14:19:25 2012 +0300
@@ -28,7 +28,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/dev/ath/if_ath_tx.c 238729 2012-07-23 23:40:1=
3Z adrian $");
+__FBSDID("$FreeBSD: head/sys/dev/ath/if_ath_tx.c 239120 2012-08-07 00:42:4=
6Z adrian $");
=20
 /*
  * Driver for the Atheros Wireless LAN controller.
@@ -302,6 +302,9 @@
 	struct ath_hal *ah =3D sc->sc_ah;
 	struct ath_desc *ds, *ds0;
 	int i;
+	HAL_DMA_ADDR bufAddrList[4];
+	uint32_t segLenList[4];
+
 	/*
 	 * XXX There's txdma and txdma_mgmt; the descriptor
 	 * sizes must match.
@@ -313,14 +316,30 @@
 	 */
 	ds0 =3D ds =3D bf->bf_desc;
 	for (i =3D 0; i < bf->bf_nseg; i++, ds++) {
-		ds->ds_data =3D bf->bf_segs[i].ds_addr;
+		bufAddrList[0] =3D bf->bf_segs[i].ds_addr;
+		segLenList[0] =3D bf->bf_segs[i].ds_len;
+
+		/* Blank this out until multi-buf support is added for AR9300 */
+		bufAddrList[1] =3D bufAddrList[2] =3D bufAddrList[3] =3D 0;
+		segLenList[1] =3D segLenList[2] =3D segLenList[3] =3D 0;
+
 		if (i =3D=3D bf->bf_nseg - 1)
 			ath_hal_settxdesclink(ah, ds, 0);
 		else
 			ath_hal_settxdesclink(ah, ds,
 			    bf->bf_daddr + dd->dd_descsize * (i + 1));
+
+		/*
+		 * XXX this assumes that bfs_txq is the actual destination
+		 * hardware queue at this point.  It may not have been assigned,
+		 * it may actually be pointing to the multicast software
+		 * TXQ id.  These must be fixed!
+		 */
 		ath_hal_filltxdesc(ah, ds
-			, bf->bf_segs[i].ds_len	/* segment length */
+			, bufAddrList
+			, segLenList
+			, 0			/* XXX desc id */
+			, bf->bf_state.bfs_txq->axq_qnum	/* XXX multicast? */
 			, i =3D=3D 0		/* first segment */
 			, i =3D=3D bf->bf_nseg - 1	/* last segment */
 			, ds0			/* first descriptor */
@@ -346,6 +365,9 @@
 	struct ath_hal *ah =3D sc->sc_ah;
 	struct ath_desc *ds, *ds0;
 	int i;
+	HAL_DMA_ADDR bufAddrList[4];
+	uint32_t segLenList[4];
+
 	/*
 	 * XXX There's txdma and txdma_mgmt; the descriptor
 	 * sizes must match.
@@ -359,25 +381,30 @@
 	 * That's only going to occur for the first frame in an aggregate.
 	 */
 	for (i =3D 0; i < bf->bf_nseg; i++, ds++) {
-		ds->ds_data =3D bf->bf_segs[i].ds_addr;
+		bzero(bufAddrList, sizeof(bufAddrList));
+		bzero(segLenList, sizeof(segLenList));
 		if (i =3D=3D bf->bf_nseg - 1)
 			ath_hal_settxdesclink(ah, ds, 0);
 		else
 			ath_hal_settxdesclink(ah, ds,
 			    bf->bf_daddr + dd->dd_descsize * (i + 1));
=20
+		bufAddrList[0] =3D bf->bf_segs[i].ds_addr;
+		segLenList[0] =3D bf->bf_segs[i].ds_len;
+
 		/*
 		 * This performs the setup for an aggregate frame.
 		 * This includes enabling the aggregate flags if needed.
 		 */
 		ath_hal_chaintxdesc(ah, ds,
+		    bufAddrList,
+		    segLenList,
 		    bf->bf_state.bfs_pktlen,
 		    bf->bf_state.bfs_hdrlen,
 		    HAL_PKT_TYPE_AMPDU,	/* forces aggregate bits to be set */
 		    bf->bf_state.bfs_keyix,
 		    0,			/* cipher, calculated from keyix */
 		    bf->bf_state.bfs_ndelim,
-		    bf->bf_segs[i].ds_len,	/* segment length */
 		    i =3D=3D 0,		/* first segment */
 		    i =3D=3D bf->bf_nseg - 1,	/* last segment */
 		    bf->bf_next =3D=3D NULL		/* last sub-frame in aggr */
@@ -394,6 +421,50 @@
 }
=20
 /*
+ * Set the rate control fields in the given descriptor based on
+ * the bf_state fields and node state.
+ *
+ * The bfs fields should already be set with the relevant rate
+ * control information, including whether MRR is to be enabled.
+ *
+ * Since the FreeBSD HAL currently sets up the first TX rate
+ * in ath_hal_setuptxdesc(), this will setup the MRR
+ * conditionally for the pre-11n chips, and call ath_buf_set_rate
+ * unconditionally for 11n chips. These require the 11n rate
+ * scenario to be set if MCS rates are enabled, so it's easier
+ * to just always call it. The caller can then only set rates 2, 3
+ * and 4 if multi-rate retry is needed.
+ */
+static void
+ath_tx_set_ratectrl(struct ath_softc *sc, struct ieee80211_node *ni,
+    struct ath_buf *bf)
+{
+	struct ath_rc_series *rc =3D bf->bf_state.bfs_rc;
+
+	/* If mrr is disabled, blank tries 1, 2, 3 */
+	if (! bf->bf_state.bfs_ismrr)
+		rc[1].tries =3D rc[2].tries =3D rc[3].tries =3D 0;
+
+	/*
+	 * Always call - that way a retried descriptor will
+	 * have the MRR fields overwritten.
+	 *
+	 * XXX TODO: see if this is really needed - setting up
+	 * the first descriptor should set the MRR fields to 0
+	 * for us anyway.
+	 */
+	if (ath_tx_is_11n(sc)) {
+		ath_buf_set_rate(sc, ni, bf);
+	} else {
+		ath_hal_setupxtxdesc(sc->sc_ah, bf->bf_desc
+			, rc[1].ratecode, rc[1].tries
+			, rc[2].ratecode, rc[2].tries
+			, rc[3].ratecode, rc[3].tries
+		);
+	}
+}
+
+/*
  * Setup segments+descriptors for an 11n aggregate.
  * bf_first is the first buffer in the aggregate.
  * The descriptor list must already been linked together using
@@ -452,13 +523,6 @@
 	    bf_first->bf_state.bfs_ctsduration);
=20
 	/*
-	 * Setup the last descriptor in the list.
-	 * bf_prev points to the last; bf is NULL here.
-	 */
-	ath_hal_setuplasttxdesc(sc->sc_ah, bf_prev->bf_desc,
-	    bf_first->bf_desc);
-
-	/*
 	 * Set the first descriptor bf_lastds field to point to
 	 * the last descriptor in the last subframe, that's where
 	 * the status update will occur.
@@ -471,9 +535,38 @@
 	 */
 	bf_first->bf_last =3D bf_prev;
=20
+	/*
+	 * setup first desc with rate and aggr info
+	 */
+	ath_tx_set_ratectrl(sc, bf_first->bf_node, bf_first);
+
+	/*
+	 * Setup the last descriptor in the list.
+	 *
+	 * bf_first->bf_lastds already points to it; the rate
+	 * control information needs to be squirreled away here
+	 * as well ans clearing the moreaggr/paddelim fields.
+	 */
+	ath_hal_setuplasttxdesc(sc->sc_ah, bf_first->bf_lastds,
+	    bf_first->bf_desc);
+
 	DPRINTF(sc, ATH_DEBUG_SW_TX_AGGR, "%s: end\n", __func__);
 }
=20
+/*
+ * Hand-off a frame to the multicast TX queue.
+ *
+ * This is a software TXQ which will be appended to the CAB queue
+ * during the beacon setup code.
+ *
+ * XXX TODO: since the AR9300 EDMA TX queue support wants the QCU ID
+ * as part of the TX descriptor, bf_state.bfs_txq must be updated
+ * with the actual hardware txq, or all of this will fall apart.
+ *
+ * XXX It may not be a bad idea to just stuff the QCU ID into bf_state
+ * and retire bfs_txq; then make sure the CABQ QCU ID is populated
+ * correctly.
+ */
 static void
 ath_tx_handoff_mcast(struct ath_softc *sc, struct ath_txq *txq,
     struct ath_buf *bf)
@@ -639,8 +732,8 @@
  *
  * This must be called whether the queue is empty or not.
  */
-void
-ath_txq_restart_dma(struct ath_softc *sc, struct ath_txq *txq)
+static void
+ath_legacy_tx_dma_restart(struct ath_softc *sc, struct ath_txq *txq)
 {
 	struct ath_hal *ah =3D sc->sc_ah;
 	struct ath_buf *bf, *bf_last;
@@ -658,7 +751,7 @@
 		return;
=20
 	ath_hal_puttxbuf(ah, txq->axq_qnum, bf->bf_daddr);
-	ath_hal_gettxdesclinkptr(ah, bf->bf_lastds, &txq->axq_link);
+	ath_hal_gettxdesclinkptr(ah, bf_last->bf_lastds, &txq->axq_link);
 	ath_hal_txstart(ah, txq->axq_qnum);
 }
=20
@@ -668,7 +761,8 @@
  * The relevant hardware txq should be locked.
  */
 static void
-ath_tx_handoff(struct ath_softc *sc, struct ath_txq *txq, struct ath_buf *=
bf)
+ath_legacy_xmit_handoff(struct ath_softc *sc, struct ath_txq *txq,
+    struct ath_buf *bf)
 {
 	ATH_TXQ_LOCK_ASSERT(txq);
=20
@@ -1001,16 +1095,22 @@
 =09
 	/*
 	 * Must disable multi-rate retry when using RTS/CTS.
-	 * XXX TODO: only for pre-11n NICs.
 	 */
-	bf->bf_state.bfs_ismrr =3D 0;
-	bf->bf_state.bfs_try0 =3D
-	    bf->bf_state.bfs_rc[0].tries =3D ATH_TXMGTTRY;	/* XXX ew */
+	if (!sc->sc_mrrprot) {
+		bf->bf_state.bfs_ismrr =3D 0;
+		bf->bf_state.bfs_try0 =3D
+		    bf->bf_state.bfs_rc[0].tries =3D ATH_TXMGTTRY; /* XXX ew */
+	}
 }
=20
 /*
  * Setup the descriptor chain for a normal or fast-frame
  * frame.
+ *
+ * XXX TODO: extend to include the destination hardware QCU ID.
+ * Make sure that is correct.  Make sure that when being added
+ * to the mcastq, the CABQ QCUID is set or things will get a bit
+ * odd.
  */
 static void
 ath_tx_setds(struct ath_softc *sc, struct ath_buf *bf)
@@ -1038,7 +1138,9 @@
 	bf->bf_lastds =3D ds;
 	bf->bf_last =3D bf;
=20
-	/* XXX TODO: Setup descriptor chain */
+	/* Set rate control and descriptor chain for this frame */
+	ath_tx_set_ratectrl(sc, bf->bf_node, bf);
+	ath_tx_chaindesclist(sc, bf);
 }
=20
 /*
@@ -1087,50 +1189,6 @@
 }
=20
 /*
- * Set the rate control fields in the given descriptor based on
- * the bf_state fields and node state.
- *
- * The bfs fields should already be set with the relevant rate
- * control information, including whether MRR is to be enabled.
- *
- * Since the FreeBSD HAL currently sets up the first TX rate
- * in ath_hal_setuptxdesc(), this will setup the MRR
- * conditionally for the pre-11n chips, and call ath_buf_set_rate
- * unconditionally for 11n chips. These require the 11n rate
- * scenario to be set if MCS rates are enabled, so it's easier
- * to just always call it. The caller can then only set rates 2, 3
- * and 4 if multi-rate retry is needed.
- */
-static void
-ath_tx_set_ratectrl(struct ath_softc *sc, struct ieee80211_node *ni,
-    struct ath_buf *bf)
-{
-	struct ath_rc_series *rc =3D bf->bf_state.bfs_rc;
-
-	/* If mrr is disabled, blank tries 1, 2, 3 */
-	if (! bf->bf_state.bfs_ismrr)
-		rc[1].tries =3D rc[2].tries =3D rc[3].tries =3D 0;
-
-	/*
-	 * Always call - that way a retried descriptor will
-	 * have the MRR fields overwritten.
-	 *
-	 * XXX TODO: see if this is really needed - setting up
-	 * the first descriptor should set the MRR fields to 0
-	 * for us anyway.
-	 */
-	if (ath_tx_is_11n(sc)) {
-		ath_buf_set_rate(sc, ni, bf);
-	} else {
-		ath_hal_setupxtxdesc(sc->sc_ah, bf->bf_desc
-			, rc[1].ratecode, rc[1].tries
-			, rc[2].ratecode, rc[2].tries
-			, rc[3].ratecode, rc[3].tries
-		);
-	}
-}
-
-/*
  * Transmit the given frame to the hardware.
  *
  * The frame must already be setup; rate control must already have
@@ -1155,8 +1213,6 @@
 	ath_tx_set_rtscts(sc, bf);
 	ath_tx_rate_fill_rcflags(sc, bf);
 	ath_tx_setds(sc, bf);
-	ath_tx_set_ratectrl(sc, bf->bf_node, bf);
-	ath_tx_chaindesclist(sc, bf);
=20
 	/* Hand off to hardware */
 	ath_tx_handoff(sc, txq, bf);
@@ -1536,6 +1592,11 @@
 	DPRINTF(sc, ATH_DEBUG_SW_TX, "%s: tid=3D%d, ac=3D%d, is_ampdu=3D%d\n",
 	    __func__, tid, pri, is_ampdu);
=20
+	/* Set local packet state, used to queue packets to hardware */
+	bf->bf_state.bfs_tid =3D tid;
+	bf->bf_state.bfs_txq =3D txq;
+	bf->bf_state.bfs_pri =3D pri;
+
 	/*
 	 * When servicing one or more stations in power-save mode
 	 * (or) if there is some mcast data waiting on the mcast
@@ -1544,8 +1605,15 @@
 	 *
 	 * TODO: we should lock the mcastq before we check the length.
 	 */
-	if (ismcast && (vap->iv_ps_sta || avp->av_mcastq.axq_depth))
+	if (ismcast && (vap->iv_ps_sta || avp->av_mcastq.axq_depth)) {
 		txq =3D &avp->av_mcastq;
+		/*
+		 * Mark the frame as eventually belonging on the CAB
+		 * queue, so the descriptor setup functions will
+		 * correctly initialise the descriptor 'qcuId' field.
+		 */
+		bf->bf_state.bfs_txq =3D sc->sc_cabq;
+	}
=20
 	/* Do the generic frame setup */
 	/* XXX should just bzero the bf_state? */
@@ -1554,6 +1622,10 @@
 	/*
 	 * Acquire the TXQ lock early, so both the encap and seqno
 	 * are allocated together.
+	 *
+	 * XXX should TXQ for CABQ traffic be the multicast queue,
+	 * or the TXQ the given PRI would allocate from? (eg for
+	 * sequence number allocation locking.)
 	 */
 	ATH_TXQ_LOCK(txq);
=20
@@ -1799,6 +1871,11 @@
 	bf->bf_state.bfs_shpream =3D
 	    !! (params->ibp_flags & IEEE80211_BPF_SHORTPRE);
=20
+	/* Set local packet state, used to queue packets to hardware */
+	bf->bf_state.bfs_tid =3D WME_AC_TO_TID(pri);
+	bf->bf_state.bfs_txq =3D sc->sc_ac2q[pri];
+	bf->bf_state.bfs_pri =3D pri;
+
 	/* XXX this should be done in ath_tx_setrate() */
 	bf->bf_state.bfs_ctsrate =3D 0;
 	bf->bf_state.bfs_ctsduration =3D 0;
@@ -2370,12 +2447,20 @@
  * Otherwise, schedule it as a single frame.
  */
 static void
-ath_tx_xmit_aggr(struct ath_softc *sc, struct ath_node *an, struct ath_buf=
 *bf)
+ath_tx_xmit_aggr(struct ath_softc *sc, struct ath_node *an,
+    struct ath_txq *txq, struct ath_buf *bf)
 {
 	struct ath_tid *tid =3D &an->an_tid[bf->bf_state.bfs_tid];
-	struct ath_txq *txq =3D bf->bf_state.bfs_txq;
+//	struct ath_txq *txq =3D bf->bf_state.bfs_txq;
 	struct ieee80211_tx_ampdu *tap;
=20
+	if (txq !=3D bf->bf_state.bfs_txq) {
+		device_printf(sc->sc_dev, "%s: txq %d !=3D bfs_txq %d!\n",
+		    __func__,
+		    txq->axq_qnum,
+		    bf->bf_state.bfs_txq->axq_qnum);
+	}
+
 	ATH_TXQ_LOCK_ASSERT(txq);
 	ATH_TID_LOCK_ASSERT(sc, tid);
=20
@@ -2404,8 +2489,6 @@
 	ath_tx_set_rtscts(sc, bf);
 	ath_tx_rate_fill_rcflags(sc, bf);
 	ath_tx_setds(sc, bf);
-	ath_tx_set_ratectrl(sc, bf->bf_node, bf);
-	ath_tx_chaindesclist(sc, bf);
=20
 	/* Statistics */
 	sc->sc_aggr_stats.aggr_low_hwq_single_pkt++;
@@ -2456,6 +2539,8 @@
 	    __func__, bf, pri, tid, IEEE80211_QOS_HAS_SEQ(wh));
=20
 	/* Set local packet state, used to queue packets to hardware */
+	/* XXX potentially duplicate info, re-check */
+	/* XXX remember, txq must be the hardware queue, not the av_mcastq */
 	bf->bf_state.bfs_tid =3D tid;
 	bf->bf_state.bfs_txq =3D txq;
 	bf->bf_state.bfs_pri =3D pri;
@@ -2493,7 +2578,7 @@
 		if (txq->axq_depth < sc->sc_hwq_limit) {
 			bf =3D TAILQ_FIRST(&atid->axq_q);
 			ATH_TXQ_REMOVE(atid, bf, bf_list);
-			ath_tx_xmit_aggr(sc, an, bf);
+			ath_tx_xmit_aggr(sc, an, txq, bf);
 			DPRINTF(sc, ATH_DEBUG_SW_TX,
 			    "%s: xmit_aggr\n",
 			    __func__);
@@ -3847,7 +3932,6 @@
 	struct ath_buf *bf;
 	struct ath_txq *txq =3D sc->sc_ac2q[tid->ac];
 	struct ieee80211_tx_ampdu *tap;
-	struct ieee80211_node *ni =3D &an->an_node;
 	ATH_AGGR_STATUS status;
 	ath_bufhead bf_q;
=20
@@ -3895,9 +3979,7 @@
 			ath_tx_set_rtscts(sc, bf);
 			ath_tx_rate_fill_rcflags(sc, bf);
 			ath_tx_setds(sc, bf);
-			ath_tx_chaindesclist(sc, bf);
 			ath_hal_clr11n_aggr(sc->sc_ah, bf->bf_desc);
-			ath_tx_set_ratectrl(sc, ni, bf);
=20
 			sc->sc_aggr_stats.aggr_nonbaw_pkt++;
=20
@@ -3955,9 +4037,7 @@
 			    "%s: single-frame aggregate\n", __func__);
 			bf->bf_state.bfs_aggr =3D 0;
 			ath_tx_setds(sc, bf);
-			ath_tx_chaindesclist(sc, bf);
 			ath_hal_clr11n_aggr(sc->sc_ah, bf->bf_desc);
-			ath_tx_set_ratectrl(sc, ni, bf);
 			if (status =3D=3D ATH_AGGR_BAW_CLOSED)
 				sc->sc_aggr_stats.aggr_baw_closed_single_pkt++;
 			else
@@ -3992,10 +4072,6 @@
 			 */
 			ath_tx_setds_11n(sc, bf);
=20
-			/*
-			 * setup first desc with rate and aggr info
-			 */
-			ath_tx_set_ratectrl(sc, ni, bf);
 		}
 	queuepkt:
 		//txq =3D bf->bf_state.bfs_txq;
@@ -4035,7 +4111,6 @@
 {
 	struct ath_buf *bf;
 	struct ath_txq *txq =3D sc->sc_ac2q[tid->ac];
-	struct ieee80211_node *ni =3D &an->an_node;
=20
 	DPRINTF(sc, ATH_DEBUG_SW_TX, "%s: node %p: TID %d: called\n",
 	    __func__, an, tid->tid);
@@ -4084,8 +4159,6 @@
 		ath_tx_set_rtscts(sc, bf);
 		ath_tx_rate_fill_rcflags(sc, bf);
 		ath_tx_setds(sc, bf);
-		ath_tx_chaindesclist(sc, bf);
-		ath_tx_set_ratectrl(sc, ni, bf);
=20
 		/* Track outstanding buffer count to hardware */
 		/* aggregates are "one" buffer */
@@ -4493,4 +4566,10 @@
=20
 	sc->sc_tx.xmit_setup =3D ath_legacy_dma_txsetup;
 	sc->sc_tx.xmit_teardown =3D ath_legacy_dma_txteardown;
+	sc->sc_tx.xmit_attach_comp_func =3D ath_legacy_attach_comp_func;
+
+	sc->sc_tx.xmit_dma_restart =3D ath_legacy_tx_dma_restart;
+	sc->sc_tx.xmit_handoff =3D ath_legacy_xmit_handoff;
+	sc->sc_tx.xmit_processq =3D ath_legacy_tx_processq;
+	sc->sc_tx.xmit_drainq =3D ath_legacy_tx_draintxq;
 }
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/ath/if_ath_tx.h
--- a/head/sys/dev/ath/if_ath_tx.h	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/ath/if_ath_tx.h	Fri Aug 10 14:19:25 2012 +0300
@@ -26,7 +26,7 @@
  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
  * THE POSSIBILITY OF SUCH DAMAGES.
  *
- * $FreeBSD: head/sys/dev/ath/if_ath_tx.h 238710 2012-07-23 03:52:18Z adri=
an $
+ * $FreeBSD: head/sys/dev/ath/if_ath_tx.h 238931 2012-07-31 03:09:48Z adri=
an $
  */
 #ifndef	__IF_ATH_TX_H__
 #define	__IF_ATH_TX_H__
@@ -79,7 +79,6 @@
 #define	BAW_WITHIN(_start, _bawsz, _seqno)	\
 	    ((((_seqno) - (_start)) & 4095) < (_bawsz))
=20
-extern void ath_txq_restart_dma(struct ath_softc *sc, struct ath_txq *txq);
 extern void ath_freetx(struct mbuf *m);
 extern void ath_tx_node_flush(struct ath_softc *sc, struct ath_node *an);
 extern void ath_tx_txq_drain(struct ath_softc *sc, struct ath_txq *txq);
@@ -131,6 +130,15 @@
 	(_sc)->sc_tx.xmit_setup(_sc)
 #define	ath_txdma_teardown(_sc)			\
 	(_sc)->sc_tx.xmit_teardown(_sc)
+#define	ath_txq_restart_dma(_sc, _txq)		\
+	(_sc)->sc_tx.xmit_dma_restart((_sc), (_txq))
+#define	ath_tx_handoff(_sc, _txq, _bf)		\
+	(_sc)->sc_tx.xmit_handoff((_sc), (_txq), (_bf))
+#define	ath_tx_draintxq(_sc, _txq)		\
+	(_sc)->sc_tx.xmit_drainq((_sc), (_txq))
+#define	ath_tx_processq(_sc, _txq, _dosched)	\
+	(_sc)->sc_tx.xmit_processq((_sc), (_txq), (_dosched))
+
 extern	void ath_xmit_setup_legacy(struct ath_softc *sc);
=20
 #endif
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/ath/if_ath_tx_edma.c
--- a/head/sys/dev/ath/if_ath_tx_edma.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/ath/if_ath_tx_edma.c	Fri Aug 10 14:19:25 2012 +0300
@@ -28,7 +28,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/dev/ath/if_ath_tx_edma.c 238710 2012-07-23 03=
:52:18Z adrian $");
+__FBSDID("$FreeBSD: head/sys/dev/ath/if_ath_tx_edma.c 238931 2012-07-31 03=
:09:48Z adrian $");
=20
 /*
  * Driver for the Atheros Wireless LAN controller.
@@ -119,28 +119,171 @@
=20
 /*
  * some general macros
-  */
+ */
 #define	INCR(_l, _sz)		(_l) ++; (_l) &=3D ((_sz) - 1)
 #define	DECR(_l, _sz)		(_l) --; (_l) &=3D ((_sz) - 1)
=20
+/*
+ * XXX doesn't belong here, and should be tunable
+ */
+#define	ATH_TXSTATUS_RING_SIZE	512
+
 MALLOC_DECLARE(M_ATHDEV);
=20
+/*
+ * Re-initialise the DMA FIFO with the current contents of
+ * said FIFO.
+ *
+ * This should only be called as part of the chip reset path, as it
+ * assumes the FIFO is currently empty.
+ *
+ * TODO: verify that a cold/warm reset does clear the TX FIFO, so
+ * writing in a partially-filled FIFO will not cause double-entries
+ * to appear.
+ */
+static void
+ath_edma_dma_restart(struct ath_softc *sc, struct ath_txq *txq)
+{
+
+	device_printf(sc->sc_dev, "%s: called: txq=3D%p, qnum=3D%d\n",
+	    __func__,
+	    txq,
+	    txq->axq_qnum);
+}
+
+/*
+ * Handoff this frame to the hardware.
+ *
+ * For the multicast queue, this will treat it as a software queue
+ * and append it to the list, after updating the MORE_DATA flag
+ * in the previous frame.  The cabq processing code will ensure
+ * that the queue contents gets transferred over.
+ *
+ * For the hardware queues, this will queue a frame to the queue
+ * like before, then populate the FIFO from that.  Since the
+ * EDMA hardware has 8 FIFO slots per TXQ, this ensures that
+ * frames such as management frames don't get prematurely dropped.
+ *
+ * This does imply that a similar flush-hwq-to-fifoq method will
+ * need to be called from the processq function, before the
+ * per-node software scheduler is called.
+ */
+static void
+ath_edma_xmit_handoff(struct ath_softc *sc, struct ath_txq *txq,
+    struct ath_buf *bf)
+{
+
+	device_printf(sc->sc_dev, "%s: called; bf=3D%p, txq=3D%p, qnum=3D%d\n",
+	    __func__,
+	    bf,
+	    txq,
+	    txq->axq_qnum);
+
+	/*
+	 * XXX For now this is a placeholder; free the buffer
+	 * and inform the stack that the TX failed.
+	 */
+	ath_tx_default_comp(sc, bf, 1);
+}
+
+static int
+ath_edma_setup_txfifo(struct ath_softc *sc, int qnum)
+{
+	struct ath_tx_edma_fifo *te =3D &sc->sc_txedma[qnum];
+
+	te->m_fifo =3D malloc(sizeof(struct ath_buf *) * HAL_TXFIFO_DEPTH,
+	    M_ATHDEV,
+	    M_NOWAIT | M_ZERO);
+	if (te->m_fifo =3D=3D NULL) {
+		device_printf(sc->sc_dev, "%s: malloc failed\n",
+		    __func__);
+		return (-ENOMEM);
+	}
+
+	/*
+	 * Set initial "empty" state.
+	 */
+	te->m_fifo_head =3D te->m_fifo_tail =3D te->m_fifo_depth =3D 0;
+=09
+	return (0);
+}
+
+static int
+ath_edma_free_txfifo(struct ath_softc *sc, int qnum)
+{
+	struct ath_tx_edma_fifo *te =3D &sc->sc_txedma[qnum];
+
+	/* XXX TODO: actually deref the ath_buf entries? */
+	free(te->m_fifo, M_ATHDEV);
+	return (0);
+}
+
 static int
 ath_edma_dma_txsetup(struct ath_softc *sc)
 {
+	int error;
+	int i;
=20
-	/* XXX placeholder */
+	error =3D ath_descdma_alloc_desc(sc, &sc->sc_txsdma,
+	    NULL, "txcomp", sc->sc_tx_statuslen, ATH_TXSTATUS_RING_SIZE);
+	if (error !=3D 0)
+		return (error);
+
+	ath_hal_setuptxstatusring(sc->sc_ah,
+	    (void *) sc->sc_txsdma.dd_desc,
+	    sc->sc_txsdma.dd_desc_paddr,
+	    ATH_TXSTATUS_RING_SIZE);
+
+	for (i =3D 0; i < HAL_NUM_TX_QUEUES; i++) {
+		ath_edma_setup_txfifo(sc, i);
+	}
+
+
 	return (0);
 }
=20
 static int
 ath_edma_dma_txteardown(struct ath_softc *sc)
 {
+	int i;
=20
-	/* XXX placeholder */
+	for (i =3D 0; i < HAL_NUM_TX_QUEUES; i++) {
+		ath_edma_free_txfifo(sc, i);
+	}
+
+	ath_descdma_cleanup(sc, &sc->sc_txsdma, NULL);
 	return (0);
 }
=20
+static int
+ath_edma_tx_processq(struct ath_softc *sc, struct ath_txq *txq, int dosche=
d)
+{
+
+	return (0);
+}
+
+static void
+ath_edma_tx_draintxq(struct ath_softc *sc, struct ath_txq *txq)
+{
+
+}
+
+static void
+ath_edma_tx_proc(void *arg, int npending)
+{
+	struct ath_softc *sc =3D (struct ath_softc *) arg;
+
+	device_printf(sc->sc_dev, "%s: called, npending=3D%d\n",
+	    __func__, npending);
+}
+
+static void
+ath_edma_attach_comp_func(struct ath_softc *sc)
+{
+
+	TASK_INIT(&sc->sc_txtask, 0, ath_edma_tx_proc, sc);
+}
+
 void
 ath_xmit_setup_edma(struct ath_softc *sc)
 {
@@ -159,4 +302,10 @@
=20
 	sc->sc_tx.xmit_setup =3D ath_edma_dma_txsetup;
 	sc->sc_tx.xmit_teardown =3D ath_edma_dma_txteardown;
+	sc->sc_tx.xmit_attach_comp_func =3D ath_edma_attach_comp_func;
+
+	sc->sc_tx.xmit_dma_restart =3D ath_edma_dma_restart;
+	sc->sc_tx.xmit_handoff =3D ath_edma_xmit_handoff;
+	sc->sc_tx.xmit_processq =3D ath_edma_tx_processq;
+	sc->sc_tx.xmit_drainq =3D ath_edma_tx_draintxq;
 }
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/ath/if_ath_tx_ht.c
--- a/head/sys/dev/ath/if_ath_tx_ht.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/ath/if_ath_tx_ht.c	Fri Aug 10 14:19:25 2012 +0300
@@ -28,7 +28,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/dev/ath/if_ath_tx_ht.c 238711 2012-07-23 03:5=
5:19Z adrian $");
+__FBSDID("$FreeBSD: head/sys/dev/ath/if_ath_tx_ht.c 238949 2012-07-31 17:0=
8:29Z adrian $");
=20
 #include "opt_inet.h"
 #include "opt_ath.h"
@@ -511,6 +511,8 @@
 			series[i].RateFlags |=3D HAL_RATESERIES_HALFGI;
=20
 		series[i].Rate =3D rt->info[rc[i].rix].rateCode;
+		series[i].RateIndex =3D rc[i].rix;
+		series[i].tx_power_cap =3D 0x3f;	/* XXX for now */
=20
 		/*
 		 * PktDuration doesn't include slot, ACK, RTS, etc timing -
@@ -558,14 +560,12 @@
  * This isn't useful for sending beacon frames, which has different needs
  * wrt what's passed into the rate scenario function.
  */
-
 void
 ath_buf_set_rate(struct ath_softc *sc, struct ieee80211_node *ni,
     struct ath_buf *bf)
 {
 	HAL_11N_RATE_SERIES series[4];
 	struct ath_desc *ds =3D bf->bf_desc;
-	struct ath_desc *lastds =3D NULL;
 	struct ath_hal *ah =3D sc->sc_ah;
 	int is_pspoll =3D (bf->bf_state.bfs_atype =3D=3D HAL_PKT_TYPE_PSPOLL);
 	int ctsrate =3D bf->bf_state.bfs_ctsrate;
@@ -576,13 +576,6 @@
=20
 	ath_rateseries_setup(sc, ni, bf, series);
=20
-	/* Enforce AR5416 aggregate limit - can't do RTS w/ an agg frame > 8k */
-
-	/* Enforce RTS and CTS are mutually exclusive */
-
-	/* Get a pointer to the last tx descriptor in the list */
-	lastds =3D bf->bf_lastds;
-
 #if 0
 	printf("pktlen: %d; flags 0x%x\n", pktlen, flags);
 	ath_rateseries_print(sc, series);
@@ -600,21 +593,6 @@
 	    4,		/* number of series */
 	    flags);
=20
-	/* Setup the last descriptor in the chain */
-	/*
-	 * XXX Why is this done here, and not in the upper layer?
-	 * The rate control code stores a copy of the RC info in
-	 * the last descriptor as well as the first, then uses
-	 * the shadow copy in the last descriptor to see what the RC
-	 * decisions were.  I'm not sure why; perhaps earlier hardware
-	 * overwrote the first descriptor contents.
-	 *
-	 * In the 802.11n case, it also clears the moreaggr/delim
-	 * fields.  Again, this should be done by the caller of
-	 * ath_buf_set_rate().
-	 */
-	ath_hal_setuplasttxdesc(ah, lastds, ds);
-
 	/* Set burst duration */
 	/*
 	 * This is only required when doing 11n burst, not aggregation
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/ath/if_athioctl.h
--- a/head/sys/dev/ath/if_athioctl.h	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/ath/if_athioctl.h	Fri Aug 10 14:19:25 2012 +0300
@@ -26,7 +26,7 @@
  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
  * THE POSSIBILITY OF SUCH DAMAGES.
  *
- * $FreeBSD: head/sys/dev/ath/if_athioctl.h 238638 2012-07-20 02:17:48Z ad=
rian $
+ * $FreeBSD: head/sys/dev/ath/if_athioctl.h 238929 2012-07-31 02:18:10Z ad=
rian $
  */
=20
 /*
@@ -231,6 +231,7 @@
 	caddr_t			buf;
 };
 #define	SIOCGATHNODERATESTATS	_IOWR('i', 149, struct ath_rateioctl)
+#define	SIOCGATHRATESTATS	_IOWR('i', 150, struct ath_rateioctl)
=20
 /*
  * Radio capture format.
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/ath/if_athvar.h
--- a/head/sys/dev/ath/if_athvar.h	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/ath/if_athvar.h	Fri Aug 10 14:19:25 2012 +0300
@@ -26,7 +26,7 @@
  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
  * THE POSSIBILITY OF SUCH DAMAGES.
  *
- * $FreeBSD: head/sys/dev/ath/if_athvar.h 238731 2012-07-24 01:18:19Z adri=
an $
+ * $FreeBSD: head/sys/dev/ath/if_athvar.h 239053 2012-08-05 11:24:21Z adri=
an $
  */
=20
 /*
@@ -397,9 +397,28 @@
 	struct mbuf	*m_rxpending;
 };
=20
+struct ath_tx_edma_fifo {
+	struct ath_buf	**m_fifo;
+	int		m_fifolen;
+	int		m_fifo_head;
+	int		m_fifo_tail;
+	int		m_fifo_depth;
+};
+
 struct ath_tx_methods {
 	int		(*xmit_setup)(struct ath_softc *sc);
 	int		(*xmit_teardown)(struct ath_softc *sc);
+	void		(*xmit_attach_comp_func)(struct ath_softc *sc);
+
+	void		(*xmit_dma_restart)(struct ath_softc *sc,
+			    struct ath_txq *txq);
+	void		(*xmit_handoff)(struct ath_softc *sc,
+			    struct ath_txq *txq, struct ath_buf *bf);
+
+	void		(*xmit_drainq)(struct ath_softc *sc,
+			    struct ath_txq *txq);
+	int		(*xmit_processq)(struct ath_softc *sc,
+			    struct ath_txq *txq, int dosched);
 };
=20
 struct ath_softc {
@@ -418,6 +437,7 @@
 	struct ath_rx_methods	sc_rx;
 	struct ath_rx_edma	sc_rxedma[HAL_NUM_RX_QUEUES];	/* HP/LP queues */
 	struct ath_tx_methods	sc_tx;
+	struct ath_tx_edma_fifo	sc_txedma[HAL_NUM_TX_QUEUES];
=20
 	int			sc_rx_statuslen;
 	int			sc_tx_desclen;
@@ -443,6 +463,7 @@
 	void			(*sc_setdefantenna)(struct ath_softc *, u_int);
 	unsigned int		sc_invalid  : 1,/* disable hardware accesses */
 				sc_mrretry  : 1,/* multi-rate retry support */
+				sc_mrrprot  : 1,/* MRR + protection support */
 				sc_softled  : 1,/* enable LED gpio status */
 				sc_hardled  : 1,/* enable MAC LED status */
 				sc_splitmic : 1,/* split TKIP MIC keys */
@@ -557,6 +578,7 @@
 	int			sc_txbuf_cnt;	/* how many buffers avail */
 	struct ath_descdma	sc_txdma_mgmt;	/* mgmt TX descriptors */
 	ath_bufhead		sc_txbuf_mgmt;	/* mgmt transmit buffer */
+	struct ath_descdma	sc_txsdma;	/* EDMA TX status desc's */
 	struct mtx		sc_txbuflock;	/* txbuf lock */
 	char			sc_txname[12];	/* e.g. "ath0_buf" */
 	u_int			sc_txqsetup;	/* h/w queues setup */
@@ -1085,8 +1107,9 @@
 		_txr1, _txtr1, _txr2, _txtr2, _txr3, _txtr3) \
 	((*(_ah)->ah_setupXTxDesc)((_ah), (_ds), \
 		(_txr1), (_txtr1), (_txr2), (_txtr2), (_txr3), (_txtr3)))
-#define	ath_hal_filltxdesc(_ah, _ds, _l, _first, _last, _ds0) \
-	((*(_ah)->ah_fillTxDesc)((_ah), (_ds), (_l), (_first), (_last), (_ds0)))
+#define	ath_hal_filltxdesc(_ah, _ds, _b, _l, _did, _qid, _first, _last, _d=
s0) \
+	((*(_ah)->ah_fillTxDesc)((_ah), (_ds), (_b), (_l), (_did), (_qid), \
+		(_first), (_last), (_ds0)))
 #define	ath_hal_txprocdesc(_ah, _ds, _ts) \
 	((*(_ah)->ah_procTxDesc)((_ah), (_ds), (_ts)))
 #define	ath_hal_gettxintrtxqs(_ah, _txqs) \
@@ -1107,10 +1130,10 @@
 		_txr0, _txtr0, _antm, _rcr, _rcd) \
 	((*(_ah)->ah_setupFirstTxDesc)((_ah), (_ds), (_aggrlen), (_flags), \
 	(_txpower), (_txr0), (_txtr0), (_antm), (_rcr), (_rcd)))
-#define	ath_hal_chaintxdesc(_ah, _ds, _pktlen, _hdrlen, _type, _keyix, \
-	_cipher, _delims, _seglen, _first, _last, _lastaggr) \
-	((*(_ah)->ah_chainTxDesc)((_ah), (_ds), (_pktlen), (_hdrlen), \
-	(_type), (_keyix), (_cipher), (_delims), (_seglen), \
+#define	ath_hal_chaintxdesc(_ah, _ds, _bl, _sl, _pktlen, _hdrlen, _type, \
+	_keyix, _cipher, _delims, _first, _last, _lastaggr) \
+	((*(_ah)->ah_chainTxDesc)((_ah), (_ds), (_bl), (_sl), \
+	(_pktlen), (_hdrlen), (_type), (_keyix), (_cipher), (_delims), \
 	(_first), (_last), (_lastaggr)))
 #define	ath_hal_setuplasttxdesc(_ah, _ds, _ds0) \
 	((*(_ah)->ah_setupLastTxDesc)((_ah), (_ds), (_ds0)))
@@ -1120,7 +1143,7 @@
 	(_series), (_ns), (_flags)))
=20
 #define	ath_hal_set11n_aggr_first(_ah, _ds, _len, _num) \
-	((*(_ah)->ah_set11nAggrFirst)((_ah), (_ds), (_len), (_num)))
+	((*(_ah)->ah_set11nAggrFirst)((_ah), (_ds), (_len)))
 #define	ath_hal_set11naggrmiddle(_ah, _ds, _num) \
 	((*(_ah)->ah_set11nAggrMiddle)((_ah), (_ds), (_num)))
 #define	ath_hal_set11n_aggr_last(_ah, _ds) \
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/bce/if_bce.c
--- a/head/sys/dev/bce/if_bce.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/bce/if_bce.c	Fri Aug 10 14:19:25 2012 +0300
@@ -29,7 +29,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/dev/bce/if_bce.c 235816 2012-05-23 01:20:25Z =
yongari $");
+__FBSDID("$FreeBSD: head/sys/dev/bce/if_bce.c 239110 2012-08-06 22:53:24Z =
davide $");
=20
 /*
  * The following controllers are supported by this driver:
@@ -10513,7 +10513,7 @@
 	    (BCE_HC_STAT_GEN_SEL_0_GEN_SEL_0_CPQ_VALID_CNT  <<  8) |
 	    (BCE_HC_STAT_GEN_SEL_0_GEN_SEL_0_MGMQ_VALID_CNT);
=20
-	if ((BCE_CHIP_NUM(sc) =3D=3D BCE_CHIP_NUM_5709)
+	if (BCE_CHIP_NUM(sc) =3D=3D BCE_CHIP_NUM_5709)
 		val =3D val |
 		    (BCE_HC_STAT_GEN_SEL_0_GEN_SEL_0_RV2PCSQ_VALID_CNT_XI <<
 		     24);
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/cesa/cesa.c
--- a/head/sys/dev/cesa/cesa.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/cesa/cesa.c	Fri Aug 10 14:19:25 2012 +0300
@@ -39,7 +39,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/dev/cesa/cesa.c 232883 2012-03-12 19:29:35Z s=
cottl $");
+__FBSDID("$FreeBSD: head/sys/dev/cesa/cesa.c 238873 2012-07-28 21:56:24Z h=
rs $");
=20
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -1005,6 +1005,7 @@
=20
 	switch (d) {
 	case MV_DEV_88F6281:
+	case MV_DEV_88F6282:
 		sc->sc_tperr =3D 0;
 		break;
 	case MV_DEV_MV78100:
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/cxgb/ulp/iw_cxgb/iw_cxgb_=
provider.c
--- a/head/sys/dev/cxgb/ulp/iw_cxgb/iw_cxgb_provider.c	Mon Jul 30 11:44:18 =
2012 +0300
+++ b/head/sys/dev/cxgb/ulp/iw_cxgb/iw_cxgb_provider.c	Fri Aug 10 14:19:25 =
2012 +0300
@@ -27,7 +27,7 @@
=20
 **************************************************************************=
*/
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/dev/cxgb/ulp/iw_cxgb/iw_cxgb_provider.c 23726=
3 2012-06-19 07:34:13Z np $");
+__FBSDID("$FreeBSD: head/sys/dev/cxgb/ulp/iw_cxgb/iw_cxgb_provider.c 23910=
1 2012-08-06 18:51:14Z dim $");
=20
 #include "opt_inet.h"
=20
@@ -487,7 +487,7 @@
 	__be64 *page_list =3D NULL;
 	int shift =3D 0;
 	u64 total_size;
-	int npages;
+	int npages =3D 0;
 	int ret;
=20
 	CTR3(KTR_IW_CXGB, "%s ib_mr %p ib_pd %p", __FUNCTION__, mr, pd);
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/cxgbe/firmware/t4fw_inter=
face.h
--- a/head/sys/dev/cxgbe/firmware/t4fw_interface.h	Mon Jul 30 11:44:18 2012=
 +0300
+++ b/head/sys/dev/cxgbe/firmware/t4fw_interface.h	Fri Aug 10 14:19:25 2012=
 +0300
@@ -23,7 +23,7 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: head/sys/dev/cxgbe/firmware/t4fw_interface.h 237436 2012-06-2=
2 07:51:15Z np $
+ * $FreeBSD: head/sys/dev/cxgbe/firmware/t4fw_interface.h 239102 2012-08-0=
6 18:54:17Z dim $
  *
  */
=20
@@ -7413,7 +7413,7 @@
 #define G_FW_HDR_FW_VER_BUILD(x) \
     (((x) >> S_FW_HDR_FW_VER_BUILD) & M_FW_HDR_FW_VER_BUILD)
=20
-enum fw_hdr_intfver {
+enum {
 	FW_HDR_INTFVER_NIC	=3D 0x00,
 	FW_HDR_INTFVER_VNIC	=3D 0x00,
 	FW_HDR_INTFVER_OFLD	=3D 0x00,
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/e1000/if_igb.c
--- a/head/sys/dev/e1000/if_igb.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/e1000/if_igb.c	Fri Aug 10 14:19:25 2012 +0300
@@ -30,7 +30,7 @@
   POSSIBILITY OF SUCH DAMAGE.
=20
 **************************************************************************=
****/
-/*$FreeBSD: head/sys/dev/e1000/if_igb.c 238214 2012-07-07 20:21:05Z jfv $*/
+/*$FreeBSD: head/sys/dev/e1000/if_igb.c 239109 2012-08-06 22:43:49Z jfv $*/
=20
=20
 #ifdef HAVE_KERNEL_OPTION_HEADERS
@@ -100,7 +100,7 @@
 /*********************************************************************
  *  Driver version:
  *********************************************************************/
-char igb_driver_version[] =3D "version - 2.3.4";
+char igb_driver_version[] =3D "version - 2.3.5";
=20
=20
 /*********************************************************************
@@ -961,7 +961,15 @@
 	que =3D &adapter->queues[i];
 	if (((txr->queue_status & IGB_QUEUE_DEPLETED) =3D=3D 0) &&
 	    IGB_TX_TRYLOCK(txr)) {
-		err =3D igb_mq_start_locked(ifp, txr, m);
+		struct mbuf *pm =3D NULL;
+		/*
+		** Try to queue first to avoid
+		** out-of-order delivery, but=20
+		** settle for it if that fails
+		*/
+		if (m && drbr_enqueue(ifp, txr->br, m))
+			pm =3D m;
+		err =3D igb_mq_start_locked(ifp, txr, pm);
 		IGB_TX_UNLOCK(txr);
 	} else {
 		err =3D drbr_enqueue(ifp, txr->br, m);
@@ -981,7 +989,7 @@
 	IGB_TX_LOCK_ASSERT(txr);
=20
 	if (((ifp->if_drv_flags & IFF_DRV_RUNNING) =3D=3D 0) ||
-	    (txr->queue_status =3D=3D IGB_QUEUE_DEPLETED) ||
+	    (txr->queue_status & IGB_QUEUE_DEPLETED) ||
 	    adapter->link_active =3D=3D 0) {
 		if (m !=3D NULL)
 			err =3D drbr_enqueue(ifp, txr->br, m);
@@ -1494,12 +1502,6 @@
 }
=20
 #ifdef DEVICE_POLLING
-/*********************************************************************
- *
- *  Legacy polling routine : if using this code you MUST be sure that
- *  multiqueue is not defined, ie, set igb_num_queues to 1.
- *
- *********************************************************************/
 #if __FreeBSD_version >=3D 800000
 #define POLL_RETURN_COUNT(a) (a)
 static int
@@ -1510,8 +1512,8 @@
 igb_poll(struct ifnet *ifp, enum poll_cmd cmd, int count)
 {
 	struct adapter		*adapter =3D ifp->if_softc;
-	struct igb_queue	*que =3D adapter->queues;
-	struct tx_ring		*txr =3D adapter->tx_rings;
+	struct igb_queue	*que;
+	struct tx_ring		*txr;
 	u32			reg_icr, rx_done =3D 0;
 	u32			loop =3D IGB_MAX_LOOP;
 	bool			more;
@@ -1533,20 +1535,26 @@
 	}
 	IGB_CORE_UNLOCK(adapter);
=20
-	igb_rxeof(que, count, &rx_done);
-
-	IGB_TX_LOCK(txr);
-	do {
-		more =3D igb_txeof(txr);
-	} while (loop-- && more);
+	for (int i =3D 0; i < adapter->num_queues; i++) {
+		que =3D &adapter->queues[i];
+		txr =3D que->txr;
+
+		igb_rxeof(que, count, &rx_done);
+
+		IGB_TX_LOCK(txr);
+		do {
+			more =3D igb_txeof(txr);
+		} while (loop-- && more);
 #if __FreeBSD_version >=3D 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);
+	}
+
 	return POLL_RETURN_COUNT(rx_done);
 }
 #endif /* DEVICE_POLLING */
@@ -2522,7 +2530,6 @@
 				"Bound queue %d to cpu %d\n",
 				i,igb_last_bind_cpu);
 			igb_last_bind_cpu =3D CPU_NEXT(igb_last_bind_cpu);
-			igb_last_bind_cpu =3D igb_last_bind_cpu % mp_ncpus;
 		}
 #if __FreeBSD_version >=3D 800000
 		TASK_INIT(&que->txr->txq_task, 0, igb_deferred_mq_start,
@@ -4894,7 +4901,7 @@
 	}
=20
 	if (done !=3D NULL)
-		*done =3D rxdone;
+		*done +=3D rxdone;
=20
 	IGB_RX_UNLOCK(rxr);
 	return ((staterr & E1000_RXD_STAT_DD) ? TRUE : FALSE);
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/e1000/if_lem.c
--- a/head/sys/dev/e1000/if_lem.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/e1000/if_lem.c	Fri Aug 10 14:19:25 2012 +0300
@@ -1,6 +1,6 @@
 /*************************************************************************=
*****
=20
-  Copyright (c) 2001-2011, Intel Corporation=20
+  Copyright (c) 2001-2012, Intel Corporation=20
   All rights reserved.
  =20
   Redistribution and use in source and binary forms, with or without=20
@@ -30,7 +30,7 @@
   POSSIBILITY OF SUCH DAMAGE.
=20
 **************************************************************************=
****/
-/*$FreeBSD: head/sys/dev/e1000/if_lem.c 238770 2012-07-25 12:51:33Z luigi =
$*/
+/*$FreeBSD: head/sys/dev/e1000/if_lem.c 238953 2012-07-31 18:44:10Z jfv $*/
=20
 #ifdef HAVE_KERNEL_OPTION_HEADERS
 #include "opt_device_polling.h"
@@ -85,7 +85,7 @@
 /*********************************************************************
  *  Legacy Em Driver version:
  *********************************************************************/
-char lem_driver_version[] =3D "1.0.4";
+char lem_driver_version[] =3D "1.0.5";
=20
 /*********************************************************************
  *  PCI Device ID Table
@@ -239,16 +239,12 @@
 static int	lem_enable_phy_wakeup(struct adapter *);
 static void	lem_led_func(void *, int);
=20
-#define EM_LEGACY_IRQ	/* slightly faster, at least in qemu */
-#ifdef EM_LEGACY_IRQ
 static void	lem_intr(void *);
-#else /* FAST IRQ */
 static int	lem_irq_fast(void *);
 static void	lem_handle_rxtx(void *context, int pending);
 static void	lem_handle_link(void *context, int pending);
 static void	lem_add_rx_process_limit(struct adapter *, const char *,
 		    const char *, int *, int);
-#endif /* ~EM_LEGACY_IRQ */
=20
 #ifdef DEVICE_POLLING
 static poll_handler_t lem_poll;
@@ -305,11 +301,13 @@
 TUNABLE_INT("hw.em.smart_pwr_down", &lem_smart_pwr_down);
 TUNABLE_INT("hw.em.sbp", &lem_debug_sbp);
=20
-#ifndef EM_LEGACY_IRQ
+/* Interrupt style - default to fast */
+static int lem_use_legacy_irq =3D 0;
+TUNABLE_INT("hw.em.use_legacy_irq", &lem_use_legacy_irq);
+
 /* How many packets rxeof tries to clean at a time */
 static int lem_rx_process_limit =3D 100;
 TUNABLE_INT("hw.em.rx_process_limit", &lem_rx_process_limit);
-#endif
=20
 /* Flow control setting - default to FULL */
 static int lem_fc_setting =3D e1000_fc_full;
@@ -451,12 +449,10 @@
 		    lem_tx_abs_int_delay_dflt);
 	}
=20
-#ifndef EM_LEGACY_IRQ
 	/* Sysctls for limiting the amount of work done in the taskqueue */
 	lem_add_rx_process_limit(adapter, "rx_processing_limit",
 	    "max number of rx packets to process", &adapter->rx_process_limit,
 	    lem_rx_process_limit);
-#endif
=20
         /* Sysctl for setting the interface flow control */
 	lem_set_flow_cntrl(adapter, "flow_control",
@@ -1198,22 +1194,6 @@
 	callout_reset(&adapter->timer, hz, lem_local_timer, adapter);
 	e1000_clear_hw_cntrs_base_generic(&adapter->hw);
=20
-	/* MSI/X configuration for 82574 */
-	if (adapter->hw.mac.type =3D=3D e1000_82574) {
-		int tmp;
-		tmp =3D E1000_READ_REG(&adapter->hw, E1000_CTRL_EXT);
-		tmp |=3D E1000_CTRL_EXT_PBA_CLR;
-		E1000_WRITE_REG(&adapter->hw, E1000_CTRL_EXT, tmp);
-		/*
-		** Set the IVAR - interrupt vector routing.
-		** Each nibble represents a vector, high bit
-		** is enable, other 3 bits are the MSIX table
-		** entry, we map RXQ0 to 0, TXQ0 to 1, and
-		** Link (other) to 2, hence the magic number.
-		*/
-		E1000_WRITE_REG(&adapter->hw, E1000_IVAR, 0x800A0908);
-	}
-
 #ifdef DEVICE_POLLING
 	/*
 	 * Only enable interrupts if we are not polling, make sure
@@ -1282,7 +1262,6 @@
 }
 #endif /* DEVICE_POLLING */
=20
-#ifdef EM_LEGACY_IRQ=20
 /*********************************************************************
  *
  *  Legacy Interrupt Service routine =20
@@ -1296,7 +1275,8 @@
 	u32		reg_icr;
=20
=20
-	if (ifp->if_capenable & IFCAP_POLLING)
+	if ((ifp->if_capenable & IFCAP_POLLING) ||
+	    ((ifp->if_drv_flags & IFF_DRV_RUNNING) =3D=3D 0))
 		return;
=20
 	EM_CORE_LOCK(adapter);
@@ -1304,11 +1284,10 @@
 	if (reg_icr & E1000_ICR_RXO)
 		adapter->rx_overruns++;
=20
-	if ((reg_icr =3D=3D 0xffffffff) || (reg_icr =3D=3D 0))
-			goto out;
-
-	if ((ifp->if_drv_flags & IFF_DRV_RUNNING) =3D=3D 0)
-			goto out;
+	if ((reg_icr =3D=3D 0xffffffff) || (reg_icr =3D=3D 0)) {
+		EM_CORE_UNLOCK(adapter);
+		return;
+	}
=20
 	if (reg_icr & (E1000_ICR_RXSEQ | E1000_ICR_LSC)) {
 		callout_stop(&adapter->timer);
@@ -1318,23 +1297,22 @@
 		lem_tx_purge(adapter);
 		callout_reset(&adapter->timer, hz,
 		    lem_local_timer, adapter);
-		goto out;
+		EM_CORE_UNLOCK(adapter);
+		return;
 	}
=20
+	EM_CORE_UNLOCK(adapter);
+	lem_rxeof(adapter, -1, NULL);
+
 	EM_TX_LOCK(adapter);
-	lem_rxeof(adapter, -1, NULL);
 	lem_txeof(adapter);
 	if (ifp->if_drv_flags & IFF_DRV_RUNNING &&
 	    !IFQ_DRV_IS_EMPTY(&ifp->if_snd))
 		lem_start_locked(ifp);
 	EM_TX_UNLOCK(adapter);
-
-out:
-	EM_CORE_UNLOCK(adapter);
 	return;
 }
=20
-#else /* EM_FAST_IRQ, then fast interrupt routines only */
=20
 static void
 lem_handle_link(void *context, int pending)
@@ -1418,7 +1396,6 @@
 		adapter->rx_overruns++;
 	return FILTER_HANDLED;
 }
-#endif /* ~EM_LEGACY_IRQ */
=20
=20
 /*********************************************************************
@@ -2215,19 +2192,21 @@
 		return (ENXIO);
 	}
=20
-#ifdef EM_LEGACY_IRQ
-	/* We do Legacy setup */
-	if ((error =3D bus_setup_intr(dev, adapter->res[0],
-	    INTR_TYPE_NET | INTR_MPSAFE, NULL, lem_intr, adapter,
-	    &adapter->tag[0])) !=3D 0) {
-		device_printf(dev, "Failed to register interrupt handler");
-		return (error);
+	/* Do Legacy setup? */
+	if (lem_use_legacy_irq) {
+		if ((error =3D bus_setup_intr(dev, adapter->res[0],
+	    	    INTR_TYPE_NET | INTR_MPSAFE, NULL, lem_intr, adapter,
+	    	    &adapter->tag[0])) !=3D 0) {
+			device_printf(dev,
+			    "Failed to register interrupt handler");
+			return (error);
+		}
+		return (0);
 	}
=20
-#else /* FAST_IRQ */
 	/*
-	 * Try allocating a fast interrupt and the associated deferred
-	 * processing contexts.
+	 * Use a Fast interrupt and the associated
+	 * deferred processing contexts.
 	 */
 	TASK_INIT(&adapter->rxtx_task, 0, lem_handle_rxtx, adapter);
 	TASK_INIT(&adapter->link_task, 0, lem_handle_link, adapter);
@@ -2244,7 +2223,6 @@
 		adapter->tq =3D NULL;
 		return (error);
 	}
-#endif  /* EM_LEGACY_IRQ */
 =09
 	return (0);
 }
@@ -3302,20 +3280,6 @@
 		E1000_WRITE_REG(&adapter->hw, E1000_ITR, DEFAULT_ITR);
 	}
=20
-	/*
-	** When using MSIX interrupts we need to throttle
-	** using the EITR register (82574 only)
-	*/
-	if (adapter->msix)
-		for (int i =3D 0; i < 4; i++)
-			E1000_WRITE_REG(&adapter->hw,
-			    E1000_EITR_82574(i), DEFAULT_ITR);
-
-	/* Disable accelerated ackknowledge */
-	if (adapter->hw.mac.type =3D=3D e1000_82574)
-		E1000_WRITE_REG(&adapter->hw,
-		    E1000_RFCTL, E1000_RFCTL_ACK_DIS);
-
 	/* Setup the Base and Length of the Rx Descriptor Ring */
 	bus_addr =3D adapter->rxdma.dma_paddr;
 	E1000_WRITE_REG(&adapter->hw, E1000_RDLEN(0),
@@ -3835,10 +3799,6 @@
 	struct e1000_hw *hw =3D &adapter->hw;
 	u32 ims_mask =3D IMS_ENABLE_MASK;
=20
-	if (adapter->msix) {
-		E1000_WRITE_REG(hw, EM_EIAC, EM_MSIX_MASK);
-		ims_mask |=3D EM_MSIX_MASK;
-	}=20
 	E1000_WRITE_REG(hw, E1000_IMS, ims_mask);
 }
=20
@@ -3847,9 +3807,7 @@
 {
 	struct e1000_hw *hw =3D &adapter->hw;
=20
-	if (adapter->msix)
-		E1000_WRITE_REG(hw, EM_EIAC, 0);
-	E1000_WRITE_REG(&adapter->hw, E1000_IMC, 0xffffffff);
+	E1000_WRITE_REG(hw, E1000_IMC, 0xffffffff);
 }
=20
 /*
@@ -4683,7 +4641,6 @@
 	    OID_AUTO, name, CTLTYPE_INT|CTLFLAG_RW, limit, value, description);
 }
=20
-#ifndef EM_LEGACY_IRQ
 static void
 lem_add_rx_process_limit(struct adapter *adapter, const char *name,
 	const char *description, int *limit, int value)
@@ -4693,4 +4650,3 @@
 	    SYSCTL_CHILDREN(device_get_sysctl_tree(adapter->dev)),
 	    OID_AUTO, name, CTLTYPE_INT|CTLFLAG_RW, limit, value, description);
 }
-#endif
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/esp/ncr53c9x.c
--- a/head/sys/dev/esp/ncr53c9x.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/esp/ncr53c9x.c	Fri Aug 10 14:19:25 2012 +0300
@@ -26,7 +26,7 @@
  *
  */
=20
-/*	$NetBSD: ncr53c9x.c,v 1.143 2011/07/31 18:39:00 jakllsch Exp $	*/
+/*	$NetBSD: ncr53c9x.c,v 1.145 2012/06/18 21:23:56 martin Exp $	*/
=20
 /*-
  * Copyright (c) 1998, 2002 The NetBSD Foundation, Inc.
@@ -98,7 +98,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/dev/esp/ncr53c9x.c 235822 2012-05-23 06:49:50=
Z delphij $");
+__FBSDID("$FreeBSD: head/sys/dev/esp/ncr53c9x.c 239089 2012-08-06 08:58:54=
Z marius $");
=20
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -256,7 +256,7 @@
 		return (EINVAL);
 	}
=20
-	device_printf(sc->sc_dev, "%s, %dMHz, SCSI ID %d\n",
+	device_printf(sc->sc_dev, "%s, %d MHz, SCSI ID %d\n",
 	    ncr53c9x_variant_names[sc->sc_rev], sc->sc_freq, sc->sc_id);
=20
 	sc->sc_ntarg =3D (sc->sc_rev =3D=3D NCR_VARIANT_FAS366) ? 16 : 8;
@@ -890,11 +890,8 @@
 		sc->sc_cmdp =3D cmd;
 		error =3D NCRDMA_SETUP(sc, &sc->sc_cmdp, &sc->sc_cmdlen, 0,
 		    &dmasize);
-		if (error !=3D 0) {
-			sc->sc_cmdlen =3D 0;
-			sc->sc_cmdp =3D NULL;
+		if (error !=3D 0)
 			goto cmd;
-		}
=20
 		/* Program the SCSI counter. */
 		NCR_SET_COUNT(sc, dmasize);
@@ -920,6 +917,7 @@
 	 */
=20
 	/* Now get the command into the FIFO. */
+	sc->sc_cmdlen =3D 0;
 	ncr53c9x_wrfifo(sc, cmd, clen);
=20
 	/* And get the target's attention. */
@@ -1771,7 +1769,7 @@
 	struct ncr53c9x_linfo *li;
 	struct ncr53c9x_tinfo *ti;
 	uint8_t *pb;
-	int lun, plen;
+	int len, lun;
=20
 	NCR_LOCK_ASSERT(sc, MA_OWNED);
=20
@@ -1818,15 +1816,15 @@
 		 */
 		case NCR_RESELECTED:
 			pb =3D sc->sc_imess + 1;
-			plen =3D sc->sc_imlen - 1;
+			len =3D sc->sc_imlen - 1;
 			break;
=20
 		default:
 			pb =3D sc->sc_imess;
-			plen =3D sc->sc_imlen;
+			len =3D sc->sc_imlen;
 		}
=20
-		if (__verify_msg_format(pb, plen))
+		if (__verify_msg_format(pb, len))
 			goto gotit;
 	}
=20
@@ -1963,6 +1961,29 @@
 			sc->sc_dleft =3D ecb->dleft;
 			break;
=20
+		case MSG_IGN_WIDE_RESIDUE:
+			NCR_MSGS(("ignore wide residue (%d bytes)",
+			    sc->sc_imess[1]));
+			if (sc->sc_imess[1] !=3D 1) {
+				xpt_print_path(ecb->ccb->ccb_h.path);
+				printf("unexpected MESSAGE IGNORE WIDE "
+				    "RESIDUE (%d bytes); sending REJECT\n",
+				    sc->sc_imess[1]);
+				goto reject;
+			}
+			/*
+			 * If there was a last transfer of an even number of
+			 * bytes, wipe the "done" memory and adjust by one
+			 * byte (sc->sc_imess[1]).
+			 */
+			len =3D sc->sc_dleft - ecb->dleft;
+			if (len !=3D 0 && (len & 1) =3D=3D 0) {
+				ecb->flags &=3D ~ECB_TENTATIVE_DONE;
+				sc->sc_dp =3D (char *)sc->sc_dp - 1;
+				sc->sc_dleft--;
+			}
+			break;
+
 		case MSG_EXTENDED:
 			NCR_MSGS(("extended(%x) ", sc->sc_imess[2]));
 			switch (sc->sc_imess[2]) {
@@ -2272,6 +2293,7 @@
 	/*
 	 * XXX FIFO size
 	 */
+	sc->sc_cmdlen =3D 0;
 	ncr53c9x_flushfifo(sc);
 	ncr53c9x_wrfifo(sc, sc->sc_omp, sc->sc_omlen);
 	NCRCMD(sc, NCRCMD_TRANS);
@@ -2811,9 +2833,10 @@
 				 * (Timing problems?)
 				 */
 				if (sc->sc_features & NCR_F_DMASELECT) {
-					if (sc->sc_cmdlen =3D=3D 0)
+					if (sc->sc_cmdlen =3D=3D 0) {
 						/* Hope for the best... */
 						break;
+					}
 				} else if ((NCR_READ_REG(sc, NCR_FFLAG) &
 				    NCRFIFO_FF) =3D=3D 0) {
 					/* Hope for the best... */
@@ -2986,11 +3009,8 @@
 			sc->sc_cmdp =3D (void *)&ecb->cmd.cmd;
 			error =3D NCRDMA_SETUP(sc, &sc->sc_cmdp, &sc->sc_cmdlen,
 			    0, &size);
-			if (error !=3D 0) {
-				sc->sc_cmdlen =3D 0;
-				sc->sc_cmdp =3D NULL;
+			if (error !=3D 0)
 				goto cmd;
-			}
=20
 			/* Program the SCSI counter. */
 			NCR_SET_COUNT(sc, size);
@@ -3005,6 +3025,7 @@
 			break;
 		}
 cmd:
+		sc->sc_cmdlen =3D 0;
 		ncr53c9x_wrfifo(sc, (uint8_t *)&ecb->cmd.cmd, ecb->clen);
 		NCRCMD(sc, NCRCMD_TRANS);
 		sc->sc_prevphase =3D COMMAND_PHASE;
@@ -3046,7 +3067,7 @@
 			goto finish;
 		}
=20
-		/* Target returned to data phase: wipe "done" memory */
+		/* Target returned to data phase: wipe "done" memory. */
 		ecb->flags &=3D ~ECB_TENTATIVE_DONE;
=20
 		/* Program the SCSI counter. */
@@ -3105,8 +3126,8 @@
 	 * overhead to pay.  For example, selecting, sending a message
 	 * and command and then doing some work can be done in one "pass".
 	 *
-	 * The delay is a heuristic.  It is 2 when at 20MHz, 2 at 25MHz and 1
-	 * at 40MHz. This needs testing.
+	 * The delay is a heuristic.  It is 2 when at 20 MHz, 2 at 25 MHz and
+	 * 1 at 40 MHz.  This needs testing.
 	 */
 	microtime(&wait);
 	wait.tv_usec +=3D 50 / sc->sc_freq;
@@ -3191,8 +3212,7 @@
 		ncr53c9x_abort(sc, ecb);
=20
 		/* Disable sync mode if stuck in a data phase. */
-		if (ecb =3D=3D sc->sc_nexus &&
-		    ti->curr.offset !=3D 0 &&
+		if (ecb =3D=3D sc->sc_nexus && ti->curr.offset !=3D 0 &&
 		    (sc->sc_phase & (MSGI | CDI)) =3D=3D 0) {
 			/* XXX ASYNC CALLBACK! */
 			ti->goal.offset =3D 0;
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/hptiop/hptiop.c
--- a/head/sys/dev/hptiop/hptiop.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/hptiop/hptiop.c	Fri Aug 10 14:19:25 2012 +0300
@@ -25,7 +25,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/dev/hptiop/hptiop.c 236379 2012-06-01 04:34:4=
9Z eadler $");
+__FBSDID("$FreeBSD: head/sys/dev/hptiop/hptiop.c 239084 2012-08-06 05:27:2=
6Z delphij $");
=20
 #include <sys/param.h>
 #include <sys/types.h>
@@ -1284,9 +1284,13 @@
 	id =3D pci_get_device(dev);
=20
 	switch (id) {
-		case 0x4322:
+		case 0x4210:
+		case 0x4211:
+		case 0x4310:
+		case 0x4311:
+		case 0x4320:
 		case 0x4321:
-		case 0x4320:
+ 		case 0x4322:
 			sas =3D 1;
 		case 0x3220:
 		case 0x3320:
@@ -1296,12 +1300,14 @@
 		case 0x3511:
 		case 0x3521:
 		case 0x3522:
+		case 0x3530:
 		case 0x3540:
+		case 0x3560:
 			ops =3D &hptiop_itl_ops;
 			break;
+		case 0x3020:
 		case 0x3120:
 		case 0x3122:
-		case 0x3020:
 			ops =3D &hptiop_mv_ops;
 			break;
 		default:
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/ipmi/ipmi.c
--- a/head/sys/dev/ipmi/ipmi.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/ipmi/ipmi.c	Fri Aug 10 14:19:25 2012 +0300
@@ -25,7 +25,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/dev/ipmi/ipmi.c 227309 2011-11-07 15:43:11Z e=
d $");
+__FBSDID("$FreeBSD: head/sys/dev/ipmi/ipmi.c 239128 2012-08-07 12:40:31Z j=
hb $");
=20
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -653,11 +653,12 @@
 		if (timeout =3D=3D 0)
 			timeout =3D 1;
 		e =3D ipmi_set_watchdog(sc, timeout);
-		if (e =3D=3D 0)
+		if (e =3D=3D 0) {
 			*error =3D 0;
-		else
+			sc->ipmi_watchdog_active =3D 1;
+		} else
 			(void)ipmi_set_watchdog(sc, 0);
-	} else {
+	} else if (atomic_readandclear_int(&sc->ipmi_watchdog_active) !=3D 0) {
 		e =3D ipmi_set_watchdog(sc, 0);
 		if (e !=3D 0 && cmd =3D=3D 0)
 			*error =3D EOPNOTSUPP;
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/ipmi/ipmivars.h
--- a/head/sys/dev/ipmi/ipmivars.h	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/ipmi/ipmivars.h	Fri Aug 10 14:19:25 2012 +0300
@@ -23,7 +23,7 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD$
+ * $FreeBSD: head/sys/dev/ipmi/ipmivars.h 239128 2012-08-07 12:40:31Z jhb $
  */
=20
 #ifndef __IPMIVARS_H__
@@ -105,6 +105,7 @@
 	struct cdev		*ipmi_cdev;
 	TAILQ_HEAD(,ipmi_request) ipmi_pending_requests;
 	eventhandler_tag	ipmi_watchdog_tag;
+	int			ipmi_watchdog_active;
 	struct intr_config_hook	ipmi_ich;
 	struct mtx		ipmi_lock;
 	struct cv		ipmi_request_added;
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/isp/isp.c
--- a/head/sys/dev/isp/isp.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/isp/isp.c	Fri Aug 10 14:19:25 2012 +0300
@@ -47,7 +47,7 @@
 #endif
 #ifdef	__FreeBSD__
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/dev/isp/isp.c 238486 2012-07-15 14:40:49Z bru=
effer $");
+__FBSDID("$FreeBSD: head/sys/dev/isp/isp.c 238869 2012-07-28 20:06:29Z mja=
cob $");
 #include <dev/isp/isp_freebsd.h>
 #endif
 #ifdef	__OpenBSD__
@@ -65,7 +65,7 @@
  */
 #define	MBOX_DELAY_COUNT	1000000 / 100
 #define	ISP_MARK_PORTDB(a, b, c)				\
-    isp_prt(isp, ISP_LOGSANCFG, 				\
+    isp_prt(isp, ISP_LOG_SANCFG, 				\
 	"Chan %d ISP_MARK_PORTDB at LINE %d", b, __LINE__);	\
     isp_mark_portdb(a, b, c)
=20
@@ -670,8 +670,7 @@
 			ISP_DELAY(100);
 			if (--loops < 0) {
 				ISP_RESET0(isp);
-				isp_prt(isp, ISP_LOGERR,
-				    "MBOX_BUSY never cleared on reset");
+				isp_prt(isp, ISP_LOGERR, "MBOX_BUSY never cleared on reset");
 				return;
 			}
 		}
@@ -1715,6 +1714,25 @@
=20
 		icbp->icb_xfwoptions =3D fcp->isp_xfwoptions;
=20
+		if (ISP_CAP_FCTAPE(isp)) {
+			if (isp->isp_confopts & ISP_CFG_NOFCTAPE)
+				icbp->icb_xfwoptions &=3D ~ICBXOPT_FCTAPE;
+
+			if (isp->isp_confopts & ISP_CFG_FCTAPE)
+				icbp->icb_xfwoptions |=3D ICBXOPT_FCTAPE;
+
+			if (icbp->icb_xfwoptions & ICBXOPT_FCTAPE) {
+				icbp->icb_fwoptions &=3D ~ICBOPT_FULL_LOGIN;	/* per documents */
+				icbp->icb_xfwoptions |=3D ICBXOPT_FCTAPE_CCQ|ICBXOPT_FCTAPE_CONFIRM;
+				FCPARAM(isp, 0)->fctape_enabled =3D 1;
+			} else {
+				FCPARAM(isp, 0)->fctape_enabled =3D 0;
+			}
+		} else {
+			icbp->icb_xfwoptions &=3D ~ICBXOPT_FCTAPE;
+			FCPARAM(isp, 0)->fctape_enabled =3D 0;
+		}
+
 		/*
 		 * Prefer or force Point-To-Point instead Loop?
 		 */
@@ -1804,6 +1822,9 @@
 		if (ISP_FW_NEWER_THAN(isp, 3, 16, 0)) {
 			mbs.param[1] |=3D IFCOPT1_EQFQASYNC|IFCOPT1_CTIO_RETRY;
 			if (fcp->role & ISP_ROLE_TARGET) {
+				if (ISP_FW_NEWER_THAN(isp, 3, 25, 0)) {
+					mbs.param[1] |=3D IFCOPT1_ENAPURE;
+				}
 				mbs.param[3] =3D IFCOPT3_NOPRLI;
 			}
 		}
@@ -1813,8 +1834,15 @@
 		}
 	}
 	icbp->icb_logintime =3D ICB_LOGIN_TOV;
-	icbp->icb_lunetimeout =3D ICB_LUN_ENABLE_TOV;
-
+
+#ifdef	ISP_TARGET_MODE
+	if (ISP_FW_NEWER_THAN(isp, 3, 25, 0) && (icbp->icb_fwoptions & ICBOPT_TGT=
_ENABLE)) {
+		icbp->icb_lunenables =3D 0xffff;
+		icbp->icb_ccnt =3D DFLT_CMND_CNT;
+		icbp->icb_icnt =3D DFLT_INOT_CNT;
+		icbp->icb_lunetimeout =3D ICB_LUN_ENABLE_TOV;
+	}
+#endif
 	if (fcp->isp_wwnn && fcp->isp_wwpn && (fcp->isp_wwnn >> 60) !=3D 2) {
 		icbp->icb_fwoptions |=3D ICBOPT_BOTH_WWNS;
 		MAKE_NODE_NAME_FROM_WWN(icbp->icb_nodename, fcp->isp_wwnn);
@@ -1910,7 +1938,7 @@
 		}
 	}
 	if (chan =3D=3D isp->isp_nchan) {
-		isp_prt(isp, ISP_LOGDEBUG0, "all %d channels with role 'none'", chan);
+		isp_prt(isp, ISP_LOG_WARN1, "all %d channels with role 'none'", chan);
 		isp->isp_state =3D ISP_INITSTATE;
 		return;
 	}
@@ -1978,6 +2006,19 @@
 		icbp->icb_fwoptions1 |=3D ICB2400_OPT1_HARD_ADDRESS;
=20
 	icbp->icb_fwoptions2 =3D fcp->isp_xfwoptions;
+	if (isp->isp_confopts & ISP_CFG_NOFCTAPE) {
+		icbp->icb_fwoptions2 &=3D ~ICB2400_OPT2_FCTAPE;
+	}
+	if (isp->isp_confopts & ISP_CFG_FCTAPE) {
+		icbp->icb_fwoptions2 |=3D ICB2400_OPT2_FCTAPE;
+	}
+
+	if (icbp->icb_fwoptions2 & ICB2400_OPT2_FCTAPE) {
+		FCPARAM(isp, chan)->fctape_enabled =3D 1;
+	} else {
+		FCPARAM(isp, chan)->fctape_enabled =3D 0;
+	}
+
 	switch (isp->isp_confopts & ISP_CFG_PORT_PREF) {
 	case ISP_CFG_NPORT_ONLY:
 		icbp->icb_fwoptions2 &=3D ~ICB2400_OPT2_TOPO_MASK;
@@ -2336,13 +2377,13 @@
 		msg =3D buf;
 		break;
 	case PLOGX_IOCBERR_PORTUSED:
-		lev =3D ISP_LOGSANCFG|ISP_LOGDEBUG0;
+		lev =3D ISP_LOG_SANCFG|ISP_LOG_WARN1;
 		ISP_SNPRINTF(buf, sizeof (buf), "already logged in with N-Port handle 0x=
%x", parm1);
 		msg =3D buf;
 		rval =3D MBOX_PORT_ID_USED | (parm1 << 16);
 		break;
 	case PLOGX_IOCBERR_HNDLUSED:
-		lev =3D ISP_LOGSANCFG|ISP_LOGDEBUG0;
+		lev =3D ISP_LOG_SANCFG|ISP_LOG_WARN1;
 		ISP_SNPRINTF(buf, sizeof (buf), "handle already used for PortID 0x%06x",=
 parm1);
 		msg =3D buf;
 		rval =3D MBOX_LOOP_ID_USED;
@@ -2388,35 +2429,26 @@
=20
 	switch (mbs.param[0]) {
 	case MBOX_PORT_ID_USED:
-		isp_prt(isp, ISP_LOGDEBUG0,
-		    "isp_port_login: portid 0x%06x already logged in as %u",
-		    portid, mbs.param[1]);
+		isp_prt(isp, ISP_LOG_SANCFG|ISP_LOG_WARN1, "isp_port_login: portid 0x%06=
x already logged in as %u", portid, mbs.param[1]);
 		return (MBOX_PORT_ID_USED | (mbs.param[1] << 16));
=20
 	case MBOX_LOOP_ID_USED:
-		isp_prt(isp, ISP_LOGDEBUG0,
-		    "isp_port_login: handle 0x%04x in use for port id 0x%02xXXXX",
-		    handle, mbs.param[1] & 0xff);
+		isp_prt(isp, ISP_LOG_SANCFG|ISP_LOG_WARN1, "isp_port_login: handle 0x%04=
x in use for port id 0x%02xXXXX", handle, mbs.param[1] & 0xff);
 		return (MBOX_LOOP_ID_USED);
=20
 	case MBOX_COMMAND_COMPLETE:
 		return (0);
=20
 	case MBOX_COMMAND_ERROR:
-		isp_prt(isp, ISP_LOGINFO,
-		    "isp_port_login: error 0x%x in PLOGI to port 0x%06x",
-		    mbs.param[1], portid);
+		isp_prt(isp, ISP_LOG_SANCFG|ISP_LOG_WARN1, "isp_port_login: error 0x%x i=
n PLOGI to port 0x%06x", mbs.param[1], portid);
 		return (MBOX_COMMAND_ERROR);
=20
 	case MBOX_ALL_IDS_USED:
-		isp_prt(isp, ISP_LOGINFO,
-		    "isp_port_login: all IDs used for fabric login");
+		isp_prt(isp, ISP_LOG_SANCFG|ISP_LOG_WARN1, "isp_port_login: all IDs used=
 for fabric login");
 		return (MBOX_ALL_IDS_USED);
=20
 	default:
-		isp_prt(isp, ISP_LOGINFO,
-		    "isp_port_login: error 0x%x on port login of 0x%06x at 0x%0x",
-		    mbs.param[0], portid, handle);
+		isp_prt(isp, ISP_LOG_SANCFG, "isp_port_login: error 0x%x on port login o=
f 0x%06x at 0x%0x", mbs.param[0], portid, handle);
 		return (mbs.param[0]);
 	}
 }
@@ -2483,16 +2515,12 @@
 	if (IS_24XX(isp)) {
 		isp_get_pdb_24xx(isp, fcp->isp_scratch, &un.bill);
 		pdb->handle =3D un.bill.pdb_handle;
-		pdb->s3_role =3D un.bill.pdb_prli_svc3;
+		pdb->prli_word3 =3D un.bill.pdb_prli_svc3;
 		pdb->portid =3D BITS2WORD_24XX(un.bill.pdb_portid_bits);
 		ISP_MEMCPY(pdb->portname, un.bill.pdb_portname, 8);
 		ISP_MEMCPY(pdb->nodename, un.bill.pdb_nodename, 8);
-		isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0,
-		    "Chan %d Port 0x%06x flags 0x%x curstate %x",
-		    chan, pdb->portid, un.bill.pdb_flags,
-		    un.bill.pdb_curstate);
-		if (un.bill.pdb_curstate < PDB2400_STATE_PLOGI_DONE ||
-		    un.bill.pdb_curstate > PDB2400_STATE_LOGGED_IN) {
+		isp_prt(isp, ISP_LOG_SANCFG, "Chan %d Port 0x%06x flags 0x%x curstate %x=
", chan, pdb->portid, un.bill.pdb_flags, un.bill.pdb_curstate);
+		if (un.bill.pdb_curstate < PDB2400_STATE_PLOGI_DONE || un.bill.pdb_curst=
ate > PDB2400_STATE_LOGGED_IN) {
 			mbs.param[0] =3D MBOX_NOT_LOGGED_IN;
 			if (dolock) {
 				FC_SCRATCH_RELEASE(isp, chan);
@@ -2502,7 +2530,7 @@
 	} else {
 		isp_get_pdb_21xx(isp, fcp->isp_scratch, &un.fred);
 		pdb->handle =3D un.fred.pdb_loopid;
-		pdb->s3_role =3D un.fred.pdb_prli_svc3;
+		pdb->prli_word3 =3D un.fred.pdb_prli_svc3;
 		pdb->portid =3D BITS2WORD(un.fred.pdb_portid_bits);
 		ISP_MEMCPY(pdb->portname, un.fred.pdb_portname, 8);
 		ISP_MEMCPY(pdb->nodename, un.fred.pdb_nodename, 8);
@@ -2528,7 +2556,7 @@
 		if (isp_getpdb(isp, chan, loopid, &pdb, dolock)) {
 			continue;
 		}
-		isp_prt(isp, ISP_LOGSANCFG|ISP_LOGINFO, "Chan %d Loopid 0x%04x "
+		isp_prt(isp, ISP_LOG_SANCFG|ISP_LOGINFO, "Chan %d Loopid 0x%04x "
 		    "PortID 0x%06x WWPN 0x%02x%02x%02x%02x%02x%02x%02x%02x",
 		    chan, loopid, pdb.portid, pdb.portname[0], pdb.portname[1],
 		    pdb.portname[2], pdb.portname[3], pdb.portname[4],
@@ -2606,7 +2634,7 @@
=20
 	fcp =3D FCPARAM(isp, chan);
=20
-	isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, "Chan %d FC Link Test Entry", c=
han);
+	isp_prt(isp, ISP_LOG_SANCFG, "Chan %d FC Link Test Entry", chan);
 	ISP_MARK_PORTDB(isp, chan, 1);
=20
 	/*
@@ -2622,7 +2650,7 @@
 		GET_NANOTIME(&hra);
 		isp_fw_state(isp, chan);
 		if (lwfs !=3D fcp->isp_fwstate) {
-			isp_prt(isp, ISP_LOGCONFIG|ISP_LOGSANCFG, "Chan %d Firmware State <%s->=
%s>", chan, isp_fc_fw_statename((int)lwfs), isp_fc_fw_statename((int)fcp->i=
sp_fwstate));
+			isp_prt(isp, ISP_LOGCONFIG|ISP_LOG_SANCFG, "Chan %d Firmware State <%s-=
>%s>", chan, isp_fc_fw_statename((int)lwfs), isp_fc_fw_statename((int)fcp->=
isp_fwstate));
 			lwfs =3D fcp->isp_fwstate;
 		}
 		if (fcp->isp_fwstate =3D=3D FW_READY) {
@@ -2673,7 +2701,7 @@
 	 * If we haven't gone to 'ready' state, return.
 	 */
 	if (fcp->isp_fwstate !=3D FW_READY) {
-		isp_prt(isp, ISP_LOGSANCFG, "%s: chan %d not at FW_READY state", __func_=
_, chan);
+		isp_prt(isp, ISP_LOG_SANCFG, "%s: chan %d not at FW_READY state", __func=
__, chan);
 		return (-1);
 	}
=20
@@ -2738,7 +2766,9 @@
 				}
 			}
 			if (alpa_map[i] && fcp->isp_loopid !=3D i) {
-				isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, "Chan %d deriving loopid %d =
from AL_PA map  (AL_PA 0x%x) and ignoring returned value %d (AL_PA 0x%x)", =
chan, i, alpa_map[i], fcp->isp_loopid, alpa);
+				isp_prt(isp, ISP_LOG_SANCFG,
+				    "Chan %d deriving loopid %d from AL_PA map (AL_PA 0x%x) and ignori=
ng returned value %d (AL_PA 0x%x)",
+				    chan, i, alpa_map[i], fcp->isp_loopid, alpa);
 				fcp->isp_loopid =3D i;
 			}
 		}
@@ -2778,18 +2808,17 @@
 		lp->state =3D FC_PORTDB_STATE_PENDING_VALID;
 		MAKE_WWN_FROM_NODE_NAME(lp->node_wwn, pdb.nodename);
 		MAKE_WWN_FROM_NODE_NAME(lp->port_wwn, pdb.portname);
-		lp->roles =3D (pdb.s3_role & SVC3_ROLE_MASK) >> SVC3_ROLE_SHIFT;
+		lp->prli_word3 =3D pdb.prli_word3;
 		lp->portid =3D pdb.portid;
 		lp->handle =3D pdb.handle;
 		lp->new_portid =3D lp->portid;
-		lp->new_roles =3D lp->roles;
+		lp->new_prli_word3 =3D lp->prli_word3;
 		if (IS_24XX(isp)) {
 			if (check_for_fabric) {
 				/*
 				 * The mbs is still hanging out from the MBOX_GET_LOOP_ID above.
 				 */
 				fcp->isp_fabric_params =3D mbs.param[7];
-				isp_prt(isp, ISP_LOGCONFIG, "fabric params 0x%x", mbs.param[7]);
 			} else {
 				fcp->isp_fabric_params =3D 0;
 			}
@@ -2809,7 +2838,7 @@
 			r =3D isp_register_fc4_type(isp, chan);
 		}
 		if (r) {
-			isp_prt(isp, ISP_LOGWARN|ISP_LOGSANCFG, "%s: register fc4 type failed",=
 __func__);
+			isp_prt(isp, ISP_LOGWARN|ISP_LOG_SANCFG, "%s: register fc4 type failed"=
, __func__);
 			return (-1);
 		}
 	} else {
@@ -2843,8 +2872,8 @@
 	/*
 	 * Announce ourselves, too.
 	 */
-	isp_prt(isp, ISP_LOGSANCFG|ISP_LOGCONFIG, topology, chan, (uint32_t) (fcp=
->isp_wwpn >> 32), (uint32_t) fcp->isp_wwpn, fcp->isp_portid, fcp->isp_loop=
id, isp_fc_toponame(fcp));
-	isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, "Chan %d FC Link Test Complete"=
, chan);
+	isp_prt(isp, ISP_LOG_SANCFG|ISP_LOGCONFIG, topology, chan, (uint32_t) (fc=
p->isp_wwpn >> 32), (uint32_t) fcp->isp_wwpn, fcp->isp_portid, fcp->isp_loo=
pid, isp_fc_toponame(fcp));
+	isp_prt(isp, ISP_LOG_SANCFG, "Chan %d FC Link Test Complete", chan);
 	return (0);
 }
=20
@@ -2912,8 +2941,7 @@
 		}
 	}
=20
-	isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0,
-	    "Chan %d Synchronizing PDBs", chan);
+	isp_prt(isp, ISP_LOG_SANCFG, "Chan %d Synchronizing PDBs", chan);
=20
 	fcp->isp_loopstate =3D LOOP_SYNCING_PDB;
=20
@@ -2950,7 +2978,7 @@
 			} else {
 				lp->autologin =3D 0;
 			}
-			lp->new_roles =3D 0;
+			lp->new_prli_word3 =3D 0;
 			lp->new_portid =3D 0;
 			/*
 			 * Note that we might come out of this with our state
@@ -2963,13 +2991,12 @@
 			 * target id in isp_dev_map (if any).
 			 */
 			lp->portid =3D lp->new_portid;
-			lp->roles =3D lp->new_roles;
+			lp->prli_word3 =3D lp->new_prli_word3;
 			lp->state =3D FC_PORTDB_STATE_VALID;
 			isp_async(isp, ISPASYNC_DEV_ARRIVED, chan, lp);
-			lp->new_roles =3D 0;
+			lp->new_prli_word3 =3D 0;
 			lp->new_portid =3D 0;
-			lp->reserved =3D 0;
-			lp->new_reserved =3D 0;
+			lp->announced =3D 0;
 			break;
 		case FC_PORTDB_STATE_CHANGED:
 /*
@@ -2977,14 +3004,13 @@
  */
 			lp->state =3D FC_PORTDB_STATE_VALID;
 			isp_async(isp, ISPASYNC_DEV_CHANGED, chan, lp);
-			lp->new_roles =3D 0;
+			lp->new_prli_word3 =3D 0;
 			lp->new_portid =3D 0;
-			lp->reserved =3D 0;
-			lp->new_reserved =3D 0;
+			lp->announced =3D 0;
 			break;
 		case FC_PORTDB_STATE_PENDING_VALID:
 			lp->portid =3D lp->new_portid;
-			lp->roles =3D lp->new_roles;
+			lp->prli_word3 =3D lp->new_prli_word3;
 			if (lp->dev_map_idx) {
 				int t =3D lp->dev_map_idx - 1;
 				fcp->isp_dev_map[t] =3D dbidx + 1;
@@ -2992,11 +3018,10 @@
 			lp->state =3D FC_PORTDB_STATE_VALID;
 			isp_async(isp, ISPASYNC_DEV_STAYED, chan, lp);
 			if (dbidx !=3D FL_ID) {
-				lp->new_roles =3D 0;
+				lp->new_prli_word3 =3D 0;
 				lp->new_portid =3D 0;
 			}
-			lp->reserved =3D 0;
-			lp->new_reserved =3D 0;
+			lp->announced =3D 0;
 			break;
 		case FC_PORTDB_STATE_ZOMBIE:
 			break;
@@ -3054,8 +3079,7 @@
 		break;
 	case TOPO_FL_PORT:
 		if (IS_24XX(isp) && isp->isp_nchan > 1) {
-			isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0,
-			    "Chan %d Skipping Local Loop Scan", chan);
+			isp_prt(isp, ISP_LOG_SANCFG, "Chan %d Skipping Local Loop Scan", chan);
 			fcp->isp_loopstate =3D LOOP_LSCAN_DONE;
 			return (0);
 		}
@@ -3065,16 +3089,14 @@
 		lim =3D 2;
 		break;
 	default:
-		isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0,
-		    "Chan %d no loop topology to scan", chan);
+		isp_prt(isp, ISP_LOG_SANCFG, "Chan %d no loop topology to scan", chan);
 		fcp->isp_loopstate =3D LOOP_LSCAN_DONE;
 		return (0);
 	}
=20
 	fcp->isp_loopstate =3D LOOP_SCANNING_LOOP;
=20
-	isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0,
-	    "Chan %d FC scan loop 0..%d", chan, lim-1);
+	isp_prt(isp, ISP_LOG_SANCFG, "Chan %d FC scan loop 0..%d", chan, lim-1);
=20
=20
 	/*
@@ -3100,8 +3122,7 @@
 		if (IS_2100(isp) || IS_2200(isp)) {
 			uint64_t node_wwn =3D isp_get_wwn(isp, chan, handle, 1);
 			if (fcp->isp_loopstate < LOOP_SCANNING_LOOP) {
-				isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0,
-				    "Chan %d FC scan loop DONE (bad)", chan);
+				isp_prt(isp, ISP_LOG_SANCFG, "Chan %d FC scan loop DONE (bad)", chan);
 				return (-1);
 			}
 			if (node_wwn =3D=3D INI_NONE) {
@@ -3119,8 +3140,7 @@
 			    chan, handle, r);
 			if (fcp->isp_loopstate < LOOP_SCANNING_LOOP) {
 				ISP_MARK_PORTDB(isp, chan, 1);
-				isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0,
-				    "Chan %d FC scan loop DONE (bad)", chan);
+				isp_prt(isp, ISP_LOG_SANCFG, "Chan %d FC scan loop DONE (bad)", chan);
 				return (-1);
 			}
 			continue;
@@ -3128,8 +3148,7 @@
=20
 		if (fcp->isp_loopstate < LOOP_SCANNING_LOOP) {
 			ISP_MARK_PORTDB(isp, chan, 1);
-			isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0,
-			    "Chan %d FC scan loop DONE (bad)", chan);
+			isp_prt(isp, ISP_LOG_SANCFG, "Chan %d FC scan loop DONE (bad)", chan);
 			return (-1);
 		}
=20
@@ -3143,8 +3162,7 @@
 			isp_prt(isp, ISP_LOGWARN,
 			    "Chan %d cannot synchronize port database", chan);
 			ISP_MARK_PORTDB(isp, chan, 1);
-			isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0,
-			    "Chan %d FC scan loop DONE (bad)", chan);
+			isp_prt(isp, ISP_LOG_SANCFG, "Chan %d FC scan loop DONE (bad)", chan);
 			return (-1);
 		}
=20
@@ -3153,7 +3171,7 @@
 		 */
 		MAKE_WWN_FROM_NODE_NAME(tmp.node_wwn, pdb.nodename);
 		MAKE_WWN_FROM_NODE_NAME(tmp.port_wwn, pdb.portname);
-		tmp.roles =3D (pdb.s3_role & SVC3_ROLE_MASK) >> SVC3_ROLE_SHIFT;
+		tmp.prli_word3 =3D pdb.prli_word3;
 		tmp.portid =3D pdb.portid;
 		tmp.handle =3D pdb.handle;
=20
@@ -3192,8 +3210,7 @@
 		for (i =3D 0; i < MAX_FC_TARG; i++) {
 			lp =3D &fcp->portdb[i];
=20
-			if (lp->state =3D=3D FC_PORTDB_STATE_NIL ||
-			    lp->target_mode) {
+			if (lp->state =3D=3D FC_PORTDB_STATE_NIL || lp->target_mode) {
 				continue;
 			}
 			if (lp->node_wwn !=3D tmp.node_wwn) {
@@ -3214,8 +3231,7 @@
 				    chan, i, lp->state);
 				isp_dump_portdb(isp, chan);
 				ISP_MARK_PORTDB(isp, chan, 1);
-				isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0,
-				    "Chan %d FC scan loop DONE (bad)", chan);
+				isp_prt(isp, ISP_LOG_SANCFG, "Chan %d FC scan loop DONE (bad)", chan);
 				return (-1);
 			}
=20
@@ -3229,15 +3245,11 @@
 			 * Check to make see if really still the same
 			 * device. If it is, we mark it pending valid.
 			 */
-			if (lp->portid =3D=3D tmp.portid &&
-			    lp->handle =3D=3D tmp.handle &&
-			    lp->roles =3D=3D tmp.roles) {
+			if (lp->portid =3D=3D tmp.portid && lp->handle =3D=3D tmp.handle && lp-=
>prli_word3 =3D=3D tmp.prli_word3) {
 				lp->new_portid =3D tmp.portid;
-				lp->new_roles =3D tmp.roles;
+				lp->new_prli_word3 =3D tmp.prli_word3;
 				lp->state =3D FC_PORTDB_STATE_PENDING_VALID;
-				isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0,
-				    "Chan %d Loop Port 0x%06x at 0x%04x Pending "
-				    "Valid", chan, tmp.portid, tmp.handle);
+				isp_prt(isp, ISP_LOG_SANCFG, "Chan %d Loop Port 0x%06x at 0x%04x Pending =
Valid", chan, tmp.portid, tmp.handle);
 				break;
 			}
=20
@@ -3251,12 +3263,10 @@
 			 * Claim that this has changed and let somebody else
 			 * decide what to do.
 			 */
-			isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0,
-			    "Chan %d Loop Port 0x%06x at 0x%04x changed",
-			    chan, tmp.portid, tmp.handle);
+			isp_prt(isp, ISP_LOG_SANCFG, "Chan %d Loop Port 0x%06x at 0x%04x changed",=
 chan, tmp.portid, tmp.handle);
 			lp->state =3D FC_PORTDB_STATE_CHANGED;
 			lp->new_portid =3D tmp.portid;
-			lp->new_roles =3D tmp.roles;
+			lp->new_prli_word3 =3D tmp.prli_word3;
 			break;
 		}
=20
@@ -3290,17 +3300,14 @@
 		lp->autologin =3D 1;
 		lp->state =3D FC_PORTDB_STATE_NEW;
 		lp->new_portid =3D tmp.portid;
-		lp->new_roles =3D tmp.roles;
+		lp->new_prli_word3 =3D tmp.prli_word3;
 		lp->handle =3D tmp.handle;
 		lp->port_wwn =3D tmp.port_wwn;
 		lp->node_wwn =3D tmp.node_wwn;
-		isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0,
-		    "Chan %d Loop Port 0x%06x at 0x%04x is New Entry",
-		    chan, tmp.portid, tmp.handle);
+		isp_prt(isp, ISP_LOG_SANCFG, "Chan %d Loop Port 0x%06x at 0x%04x is New Ent=
ry", chan, tmp.portid, tmp.handle);
 	}
 	fcp->isp_loopstate =3D LOOP_LSCAN_DONE;
-	isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0,
-	    "Chan %d FC scan loop DONE", chan);
+	isp_prt(isp, ISP_LOG_SANCFG, "Chan %d FC scan loop DONE", chan);
 	return (0);
 }
=20
@@ -3343,8 +3350,7 @@
 	sns_gid_ft_req_t *rq =3D &un._x;
 	mbreg_t mbs;
=20
-	isp_prt(isp, ISP_LOGDEBUG0,
-	    "Chan %d scanning fabric (GID_FT) via SNS", chan);
+	isp_prt(isp, ISP_LOGDEBUG0, "Chan %d scanning fabric (GID_FT) via SNS", c=
han);
=20
 	ISP_MEMZERO(rq, SNS_GID_FT_REQ_SIZE);
 	rq->snscb_rblen =3D GIDLEN >> 1;
@@ -3393,8 +3399,7 @@
 	uint32_t *rp;
 	uint8_t *scp =3D fcp->isp_scratch;
=20
-	isp_prt(isp, ISP_LOGDEBUG0,
-	    "Chan %d scanning fabric (GID_FT) via CT", chan);
+	isp_prt(isp, ISP_LOGDEBUG0, "Chan %d scanning fabric (GID_FT) via CT", ch=
an);
=20
 	if (!IS_24XX(isp)) {
 		return (1);
@@ -3488,10 +3493,8 @@
 	int portidx, portlim, r;
 	sns_gid_ft_rsp_t *rs0, *rs1;
=20
-	isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0,
-	    "Chan %d FC Scan Fabric", chan);
-	if (fcp->isp_fwstate !=3D FW_READY ||
-	    fcp->isp_loopstate < LOOP_LSCAN_DONE) {
+	isp_prt(isp, ISP_LOG_SANCFG, "Chan %d FC Scan Fabric", chan);
+	if (fcp->isp_fwstate !=3D FW_READY || fcp->isp_loopstate < LOOP_LSCAN_DON=
E) {
 		return (-1);
 	}
 	if (fcp->isp_loopstate > LOOP_SCANNING_FABRIC) {
@@ -3499,8 +3502,7 @@
 	}
 	if (fcp->isp_topo !=3D TOPO_FL_PORT && fcp->isp_topo !=3D TOPO_F_PORT) {
 		fcp->isp_loopstate =3D LOOP_FSCAN_DONE;
-		isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0,
-		    "Chan %d FC Scan Fabric Done (no fabric)", chan);
+		isp_prt(isp, ISP_LOG_SANCFG, "Chan %d FC Scan Fabric Done (no fabric)", =
chan);
 		return (0);
 	}
=20
@@ -3568,9 +3570,8 @@
 	}
 	if (rs1->snscb_cthdr.ct_cmd_resp !=3D LS_ACC) {
 		int level;
-		if (rs1->snscb_cthdr.ct_reason =3D=3D 9 &&
-		    rs1->snscb_cthdr.ct_explanation =3D=3D 7) {
-			level =3D ISP_LOGSANCFG|ISP_LOGDEBUG0;
+		if (rs1->snscb_cthdr.ct_reason =3D=3D 9 && rs1->snscb_cthdr.ct_explanati=
on =3D=3D 7) {
+			level =3D ISP_LOG_SANCFG;
 		} else {
 			level =3D ISP_LOGWARN;
 		}
@@ -3614,7 +3615,7 @@
 		    "fabric too big for scratch area: increase ISP_FC_SCRLEN");
 	}
 	portlim =3D portidx + 1;
-	isp_prt(isp, ISP_LOGSANCFG,
+	isp_prt(isp, ISP_LOG_SANCFG,
 	    "Chan %d got %d ports back from name server", chan, portlim);
=20
 	for (portidx =3D 0; portidx < portlim; portidx++) {
@@ -3639,9 +3640,7 @@
 			rs1->snscb_ports[npidx].portid[0] =3D 0;
 			rs1->snscb_ports[npidx].portid[1] =3D 0;
 			rs1->snscb_ports[npidx].portid[2] =3D 0;
-			isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0,
-			    "Chan %d removing duplicate PortID 0x%06x"
-			    " entry from list", chan, portid);
+			isp_prt(isp, ISP_LOG_SANCFG, "Chan %d removing duplicate PortID 0x%06x =
entry from list", chan, portid);
 		}
 	}
=20
@@ -3671,7 +3670,7 @@
 		    ((rs1->snscb_ports[portidx].portid[2]));
=20
 		if (portid =3D=3D 0) {
-			isp_prt(isp, ISP_LOGSANCFG,
+			isp_prt(isp, ISP_LOG_SANCFG,
 			    "Chan %d skipping null PortID at idx %d",
 			    chan, portidx);
 			continue;
@@ -3687,19 +3686,19 @@
 		 */
 		if (ISP_CAP_MULTI_ID(isp)) {
 			if ((portid >> 8) =3D=3D (fcp->isp_portid >> 8)) {
-				isp_prt(isp, ISP_LOGSANCFG,
+				isp_prt(isp, ISP_LOG_SANCFG,
 				    "Chan %d skip PortID 0x%06x",
 				    chan, portid);
 				continue;
 			}
 		} else if (portid =3D=3D fcp->isp_portid) {
-			isp_prt(isp, ISP_LOGSANCFG,
+			isp_prt(isp, ISP_LOG_SANCFG,
 			    "Chan %d skip ourselves on @ PortID 0x%06x",
 			    chan, portid);
 			continue;
 		}
=20
-		isp_prt(isp, ISP_LOGSANCFG,
+		isp_prt(isp, ISP_LOG_SANCFG,
 		    "Chan %d Checking Fabric Port 0x%06x", chan, portid);
=20
 		/*
@@ -3711,8 +3710,7 @@
 		for (dbidx =3D 0; dbidx < MAX_FC_TARG; dbidx++) {
 			lp =3D &fcp->portdb[dbidx];
=20
-			if (lp->state !=3D FC_PORTDB_STATE_PROBATIONAL ||
-			    lp->target_mode) {
+			if (lp->state !=3D FC_PORTDB_STATE_PROBATIONAL || lp->target_mode) {
 				continue;
 			}
 			if (lp->portid =3D=3D portid) {
@@ -3754,9 +3752,7 @@
 			if (r !=3D 0) {
 				lp->new_portid =3D portid;
 				lp->state =3D FC_PORTDB_STATE_DEAD;
-				isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0,
-				    "Chan %d Fabric Port 0x%06x is dead",
-				    chan, portid);
+				isp_prt(isp, ISP_LOG_SANCFG, "Chan %d Fabric Port 0x%06x is dead", cha=
n, portid);
 				continue;
 			}
=20
@@ -3773,7 +3769,7 @@
 			    pdb.portid !=3D portid ||
 			    wwpn !=3D lp->port_wwn ||
 			    wwnn !=3D lp->node_wwn) {
-				isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0,
+				isp_prt(isp, ISP_LOG_SANCFG,
 				    fconf, chan, dbidx, pdb.handle, pdb.portid,
 				    (uint32_t) (wwnn >> 32), (uint32_t) wwnn,
 				    (uint32_t) (wwpn >> 32), (uint32_t) wwpn,
@@ -3824,7 +3820,7 @@
 				handle_changed++;
 			}
=20
-			nr =3D (pdb.s3_role & SVC3_ROLE_MASK) >> SVC3_ROLE_SHIFT;
+			nr =3D pdb.prli_word3;
=20
 			/*
 			 * Check to see whether the portid and roles have
@@ -3839,17 +3835,12 @@
 			 */
=20
 			lp->new_portid =3D portid;
-			lp->new_roles =3D nr;
-			if (pdb.portid !=3D lp->portid || nr !=3D lp->roles ||
-			    handle_changed) {
-				isp_prt(isp, ISP_LOGSANCFG,
-				    "Chan %d Fabric Port 0x%06x changed",
-				    chan, portid);
+			lp->new_prli_word3 =3D nr;
+			if (pdb.portid !=3D lp->portid || nr !=3D lp->prli_word3 || handle_chan=
ged) {
+				isp_prt(isp, ISP_LOG_SANCFG, "Chan %d Fabric Port 0x%06x changed", cha=
n, portid);
 				lp->state =3D FC_PORTDB_STATE_CHANGED;
 			} else {
-				isp_prt(isp, ISP_LOGSANCFG,
-				    "Chan %d Fabric Port 0x%06x "
-				    "Now Pending Valid", chan, portid);
+				isp_prt(isp, ISP_LOG_SANCFG, "Chan %d Fabric Port 0x%06x Now Pending V=
alid", chan, portid);
 				lp->state =3D FC_PORTDB_STATE_PENDING_VALID;
 			}
 			continue;
@@ -3935,7 +3926,7 @@
 		handle =3D pdb.handle;
 		MAKE_WWN_FROM_NODE_NAME(wwnn, pdb.nodename);
 		MAKE_WWN_FROM_NODE_NAME(wwpn, pdb.portname);
-		nr =3D (pdb.s3_role & SVC3_ROLE_MASK) >> SVC3_ROLE_SHIFT;
+		nr =3D pdb.prli_word3;
=20
 		/*
 		 * And go through the database *one* more time to make sure
@@ -3949,8 +3940,7 @@
 			if (fcp->portdb[dbidx].target_mode) {
 				continue;
 			}
-			if (fcp->portdb[dbidx].node_wwn =3D=3D wwnn &&
-			    fcp->portdb[dbidx].port_wwn =3D=3D wwpn) {
+			if (fcp->portdb[dbidx].node_wwn =3D=3D wwnn && fcp->portdb[dbidx].port_=
wwn =3D=3D wwpn) {
 				break;
 			}
 		}
@@ -3961,11 +3951,9 @@
 			lp->node_wwn =3D wwnn;
 			lp->port_wwn =3D wwpn;
 			lp->new_portid =3D portid;
-			lp->new_roles =3D nr;
+			lp->new_prli_word3 =3D nr;
 			lp->state =3D FC_PORTDB_STATE_NEW;
-			isp_prt(isp, ISP_LOGSANCFG,
-			    "Chan %d Fabric Port 0x%06x is a New Entry",
-			    chan, portid);
+			isp_prt(isp, ISP_LOG_SANCFG, "Chan %d Fabric Port 0x%06x is a New Entry=
", chan, portid);
 			continue;
 		}
=20
@@ -3991,16 +3979,12 @@
 		lp =3D &fcp->portdb[dbidx];
 		lp->handle =3D handle;
 		lp->new_portid =3D portid;
-		lp->new_roles =3D nr;
-		if (lp->portid !=3D portid || lp->roles !=3D nr) {
-			isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0,
-			    "Chan %d Zombie Fabric Port 0x%06x Now Changed",
-			    chan, portid);
+		lp->new_prli_word3 =3D nr;
+		if (lp->portid !=3D portid || lp->prli_word3 !=3D nr) {
+			isp_prt(isp, ISP_LOG_SANCFG, "Chan %d Zombie Fabric Port 0x%06x Now Cha=
nged", chan, portid);
 			lp->state =3D FC_PORTDB_STATE_CHANGED;
 		} else {
-			isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0,
-			    "Chan %d Zombie Fabric Port 0x%06x "
-			    "Now Pending Valid", chan, portid);
+			isp_prt(isp, ISP_LOG_SANCFG, "Chan %d Zombie Fabric Port 0x%06x Now Pen=
ding Valid", chan, portid);
 			lp->state =3D FC_PORTDB_STATE_PENDING_VALID;
 		}
 	}
@@ -4011,8 +3995,7 @@
 		return (-1);
 	}
 	fcp->isp_loopstate =3D LOOP_FSCAN_DONE;
-	isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0,
-	    "Chan %d FC Scan Fabric Done", chan);
+	isp_prt(isp, ISP_LOG_SANCFG, "Chan %d FC Scan Fabric Done", chan);
 	return (0);
 }
=20
@@ -4261,17 +4244,13 @@
 	FC_SCRATCH_RELEASE(isp, chan);
=20
 	if (ct->ct_cmd_resp =3D=3D LS_RJT) {
-		isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0,
-		    "Chan %d Register FC4 Type rejected", chan);
+		isp_prt(isp, ISP_LOG_SANCFG|ISP_LOG_WARN1, "Chan %d Register FC4 Type re=
jected", chan);
 		return (-1);
 	} else if (ct->ct_cmd_resp =3D=3D LS_ACC) {
-		isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0,
-		    "Chan %d Register FC4 Type accepted", chan);
+		isp_prt(isp, ISP_LOG_SANCFG, "Chan %d Register FC4 Type accepted", chan);
 		return (0);
 	} else {
-		isp_prt(isp, ISP_LOGWARN,
-		    "Chan %d Register FC4 Type: 0x%x",
-		    chan, ct->ct_cmd_resp);
+		isp_prt(isp, ISP_LOGWARN, "Chan %d Register FC4 Type: 0x%x", chan, ct->c=
t_cmd_resp);
 		return (-1);
 	}
 }
@@ -4369,6 +4348,7 @@
 		fcparam *fcp =3D FCPARAM(isp, XS_CHANNEL(xs));
=20
 		if ((fcp->role & ISP_ROLE_INITIATOR) =3D=3D 0) {
+			isp_prt(isp, ISP_LOG_WARN1, "%d.%d.%d I am not an initiator", XS_CHANNE=
L(xs), target, XS_LUN(xs));
 			XS_SETERR(xs, HBA_SELTIMEOUT);
 			return (CMD_COMPLETE);
 		}
@@ -4381,6 +4361,7 @@
 		}
=20
 		if (XS_TGT(xs) >=3D MAX_FC_TARG) {
+			isp_prt(isp, ISP_LOG_WARN1, "%d.%d.%d target too big", XS_CHANNEL(xs), =
target, XS_LUN(xs));
 			XS_SETERR(xs, HBA_SELTIMEOUT);
 			return (CMD_COMPLETE);
 		}
@@ -4392,9 +4373,11 @@
 			return (CMD_COMPLETE);
 		}
 		if (fcp->portdb[hdlidx].state =3D=3D FC_PORTDB_STATE_ZOMBIE) {
+			isp_prt(isp, ISP_LOGDEBUG1, "%d.%d.%d target zombie", XS_CHANNEL(xs), t=
arget, XS_LUN(xs));
 			return (CMD_RQLATER);
 		}
 		if (fcp->portdb[hdlidx].state !=3D FC_PORTDB_STATE_VALID) {
+			isp_prt(isp, ISP_LOGDEBUG1, "%d.%d.%d bad db port state 0x%x", XS_CHANN=
EL(xs), target, XS_LUN(xs), fcp->portdb[hdlidx].state);
 			XS_SETERR(xs, HBA_SELTIMEOUT);
 			return (CMD_COMPLETE);
 		}
@@ -4403,6 +4386,7 @@
 	} else {
 		sdparam *sdp =3D SDPARAM(isp, XS_CHANNEL(xs));
 		if ((sdp->role & ISP_ROLE_INITIATOR) =3D=3D 0) {
+			isp_prt(isp, ISP_LOGDEBUG1, "%d.%d.%d I am not an initiator", XS_CHANNE=
L(xs), target, XS_LUN(xs));
 			XS_SETERR(xs, HBA_SELTIMEOUT);
 			return (CMD_COMPLETE);
 		}
@@ -4415,7 +4399,7 @@
=20
 	qep =3D isp_getrqentry(isp);
 	if (qep =3D=3D NULL) {
-		isp_prt(isp, ISP_LOGDEBUG0, "Request Queue Overflow");
+		isp_prt(isp, ISP_LOG_WARN1, "Request Queue Overflow");
 		XS_SETERR(xs, HBA_BOTCH);
 		return (CMD_EAGAIN);
 	}
@@ -4449,6 +4433,14 @@
 	}
=20
 	reqp->req_header.rqs_entry_count =3D 1;
+
+	/*
+	 * Select and install Header Code.
+	 * Note that it might be overridden before going out
+	 * if we're on a 64 bit platform. The lower level
+	 * code (isp_send_cmd) will select the appropriate
+	 * 64 bit variant if it needs to.
+	 */
 	if (IS_24XX(isp)) {
 		reqp->req_header.rqs_entry_type =3D RQSTYPE_T7RQS;
 	} else if (IS_FC(isp)) {
@@ -4461,6 +4453,9 @@
 		}
 	}
=20
+	/*
+	 * Set task attributes
+	 */
 	if (IS_24XX(isp)) {
 		int ttype;
 		if (XS_TAG_P(xs)) {
@@ -4513,20 +4508,30 @@
 	tptr =3D &reqp->req_time;
=20
 	/*
-	 * NB: we do not support long CDBs
+	 * NB: we do not support long CDBs (yet)
 	 */
 	cdblen =3D XS_CDBLEN(xs);
=20
 	if (IS_SCSI(isp)) {
+		if (cdblen > sizeof (reqp->req_cdb)) {
+			isp_prt(isp, ISP_LOGERR, "Command Length %u too long for this chip", cd=
blen);
+			XS_SETERR(xs, HBA_BOTCH);
+			return (CMD_COMPLETE);
+		}
 		reqp->req_target =3D target | (XS_CHANNEL(xs) << 7);
 		reqp->req_lun_trn =3D XS_LUN(xs);
-		cdblen =3D ISP_MIN(cdblen, sizeof (reqp->req_cdb));
 		cdbp =3D reqp->req_cdb;
 		reqp->req_cdblen =3D cdblen;
 	} else if (IS_24XX(isp)) {
 		ispreqt7_t *t7 =3D (ispreqt7_t *)local;
 		fcportdb_t *lp;
=20
+		if (cdblen > sizeof (t7->req_cdb)) {
+			isp_prt(isp, ISP_LOGERR, "Command Length %u too long for this chip", cd=
blen);
+			XS_SETERR(xs, HBA_BOTCH);
+			return (CMD_COMPLETE);
+		}
+
 		lp =3D &FCPARAM(isp, XS_CHANNEL(xs))->portdb[hdlidx];
 		t7->req_nphdl =3D target;
 		t7->req_tidlo =3D lp->portid;
@@ -4537,28 +4542,47 @@
 			t7->req_lun[0] |=3D 0x40;
 		}
 		t7->req_lun[1] =3D XS_LUN(xs);
-		FCP_NEXT_CRN(isp, xs, t7->req_crn, XS_CHANNEL(xs), XS_TGT(xs), XS_LUN(xs=
));
+		if (FCPARAM(isp, XS_CHANNEL(xs))->fctape_enabled && (lp->prli_word3 & PR=
LI_WD3_RETRY)) {
+			if (FCP_NEXT_CRN(isp, &t7->req_crn, xs)) {
+				isp_prt(isp, ISP_LOG_WARN1, "%d.%d.%d cannot generate next CRN", XS_CH=
ANNEL(xs), target, XS_LUN(xs));
+				XS_SETERR(xs, HBA_BOTCH);
+				return (CMD_EAGAIN);
+			}
+		}
 		tptr =3D &t7->req_time;
 		cdbp =3D t7->req_cdb;
-		cdblen =3D ISP_MIN(cdblen, sizeof (t7->req_cdb));
-	} else if (ISP_CAP_2KLOGIN(isp)) {
-		ispreqt2e_t *t2e =3D (ispreqt2e_t *)local;
-		t2e->req_target =3D target;
-		t2e->req_scclun =3D XS_LUN(xs);
-		cdbp =3D t2e->req_cdb;
-		cdblen =3D ISP_MIN(cdblen, sizeof (t2e->req_cdb));
-	} else if (ISP_CAP_SCCFW(isp)) {
-		ispreqt2_t *t2 =3D (ispreqt2_t *)local;
-		t2->req_target =3D target;
-		t2->req_scclun =3D XS_LUN(xs);
-		cdbp =3D t2->req_cdb;
-		cdblen =3D ISP_MIN(cdblen, sizeof (t2->req_cdb));
 	} else {
 		ispreqt2_t *t2 =3D (ispreqt2_t *)local;
-		t2->req_target =3D target;
-		t2->req_lun_trn =3D XS_LUN(xs);
-		cdbp =3D t2->req_cdb;
-		cdblen =3D ISP_MIN(cdblen, sizeof (t2->req_cdb));
+		fcportdb_t *lp;
+
+		if (cdblen > sizeof t2->req_cdb) {
+			isp_prt(isp, ISP_LOGERR, "Command Length %u too long for this chip", cd=
blen);
+			XS_SETERR(xs, HBA_BOTCH);
+			return (CMD_COMPLETE);
+		}
+		lp =3D &FCPARAM(isp, XS_CHANNEL(xs))->portdb[hdlidx];
+		if (FCPARAM(isp, XS_CHANNEL(xs))->fctape_enabled && (lp->prli_word3 & PR=
LI_WD3_RETRY)) {
+			if (FCP_NEXT_CRN(isp, &t2->req_crn, xs)) {
+				isp_prt(isp, ISP_LOG_WARN1, "%d.%d.%d cannot generate next CRN", XS_CH=
ANNEL(xs), target, XS_LUN(xs));
+				XS_SETERR(xs, HBA_BOTCH);
+				return (CMD_EAGAIN);
+			}
+		}
+		if (ISP_CAP_2KLOGIN(isp)) {
+			ispreqt2e_t *t2e =3D (ispreqt2e_t *)local;
+			t2e->req_target =3D target;
+			t2e->req_scclun =3D XS_LUN(xs);
+			cdbp =3D t2e->req_cdb;
+		} else if (ISP_CAP_SCCFW(isp)) {
+			ispreqt2_t *t2 =3D (ispreqt2_t *)local;
+			t2->req_target =3D target;
+			t2->req_scclun =3D XS_LUN(xs);
+			cdbp =3D t2->req_cdb;
+		} else {
+			t2->req_target =3D target;
+			t2->req_lun_trn =3D XS_LUN(xs);
+			cdbp =3D t2->req_cdb;
+		}
 	}
 	ISP_MEMCPY(cdbp, XS_CDBP(xs), cdblen);
=20
@@ -4571,7 +4595,7 @@
 	}
=20
 	if (isp_allocate_xs(isp, xs, &handle)) {
-		isp_prt(isp, ISP_LOGDEBUG0, "out of xflist pointers");
+		isp_prt(isp, ISP_LOG_WARN1, "out of xflist pointers");
 		XS_SETERR(xs, HBA_BOTCH);
 		return (CMD_EAGAIN);
 	}
@@ -4618,7 +4642,7 @@
 		 * Issue a bus reset.
 		 */
 		if (IS_24XX(isp)) {
-			isp_prt(isp, ISP_LOGWARN, "RESET BUS NOT IMPLEMENTED");
+			isp_prt(isp, ISP_LOGERR, "BUS RESET NOT IMPLEMENTED");
 			break;
 		} else if (IS_FC(isp)) {
 			mbs.param[1] =3D 10;
@@ -4639,8 +4663,7 @@
 		if (mbs.param[0] !=3D MBOX_COMMAND_COMPLETE) {
 			break;
 		}
-		isp_prt(isp, ISP_LOGINFO,
-		    "driver initiated bus reset of bus %d", chan);
+		isp_prt(isp, ISP_LOGINFO, "driver initiated bus reset of bus %d", chan);
 		return (0);
=20
 	case ISPCTL_RESET_DEV:
@@ -4658,17 +4681,12 @@
=20
 			hdlidx =3D fcp->isp_dev_map[tgt] - 1;
 			if (hdlidx < 0 || hdlidx >=3D MAX_FC_TARG) {
-				isp_prt(isp, ISP_LOGWARN,
-				    "Chan %d bad handle %d trying to reset"
-				    "target %d", chan, hdlidx, tgt);
+				isp_prt(isp, ISP_LOGWARN, "Chan %d bad handle %d trying to reset targe=
t %d", chan, hdlidx, tgt);
 				break;
 			}
 			lp =3D &fcp->portdb[hdlidx];
 			if (lp->state !=3D FC_PORTDB_STATE_VALID) {
-				isp_prt(isp, ISP_LOGWARN,
-				    "Chan %d handle %d for abort of target %d "
-				    "no longer valid", chan,
-				    hdlidx, tgt);
+				isp_prt(isp, ISP_LOGWARN, "Chan %d handle %d for abort of target %d no=
 longer valid", chan, hdlidx, tgt);
 				break;
 			}
=20
@@ -4703,18 +4721,14 @@
 				FC_SCRATCH_RELEASE(isp, chan);
 				break;
 			}
-			MEMORYBARRIER(isp, SYNC_SFORCPU, QENTRY_LEN,
-			    QENTRY_LEN, chan);
+			MEMORYBARRIER(isp, SYNC_SFORCPU, QENTRY_LEN, QENTRY_LEN, chan);
 			sp =3D (isp24xx_statusreq_t *) local;
-			isp_get_24xx_response(isp,
-			    &((isp24xx_statusreq_t *)fcp->isp_scratch)[1], sp);
+			isp_get_24xx_response(isp, &((isp24xx_statusreq_t *)fcp->isp_scratch)[1=
], sp);
 			FC_SCRATCH_RELEASE(isp, chan);
 			if (sp->req_completion_status =3D=3D 0) {
 				return (0);
 			}
-			isp_prt(isp, ISP_LOGWARN,
-			    "Chan %d reset of target %d returned 0x%x",
-			    chan, tgt, sp->req_completion_status);
+			isp_prt(isp, ISP_LOGWARN, "Chan %d reset of target %d returned 0x%x", c=
han, tgt, sp->req_completion_status);
 			break;
 		} else if (IS_FC(isp)) {
 			if (ISP_CAP_2KLOGIN(isp)) {
@@ -4732,8 +4746,7 @@
 		if (mbs.param[0] !=3D MBOX_COMMAND_COMPLETE) {
 			break;
 		}
-		isp_prt(isp, ISP_LOGINFO,
-		    "Target %d on Bus %d Reset Succeeded", tgt, chan);
+		isp_prt(isp, ISP_LOGINFO, "Target %d on Bus %d Reset Succeeded", tgt, ch=
an);
 		ISP_SET_SENDMARKER(isp, chan, 1);
 		return (0);
=20
@@ -4747,8 +4760,7 @@
=20
 		handle =3D isp_find_handle(isp, xs);
 		if (handle =3D=3D 0) {
-			isp_prt(isp, ISP_LOGWARN,
-			    "cannot find handle for command to abort");
+			isp_prt(isp, ISP_LOGWARN, "cannot find handle for command to abort");
 			break;
 		}
 		if (IS_24XX(isp)) {
@@ -4760,21 +4772,15 @@
 			fcp =3D FCPARAM(isp, chan);
 			hdlidx =3D fcp->isp_dev_map[tgt] - 1;
 			if (hdlidx < 0 || hdlidx >=3D MAX_FC_TARG) {
-				isp_prt(isp, ISP_LOGWARN,
-				    "Chan %d bad handle %d trying to abort"
-				    "target %d", chan, hdlidx, tgt);
+				isp_prt(isp, ISP_LOGWARN, "Chan %d bad handle %d trying to abort targe=
t %d", chan, hdlidx, tgt);
 				break;
 			}
 			lp =3D &fcp->portdb[hdlidx];
 			if (lp->state !=3D FC_PORTDB_STATE_VALID) {
-				isp_prt(isp, ISP_LOGWARN,
-				    "Chan %d handle %d for abort of target %d "
-				    "no longer valid", chan, hdlidx, tgt);
+				isp_prt(isp, ISP_LOGWARN, "Chan %d handle %d for abort of target %d no=
 longer valid", chan, hdlidx, tgt);
 				break;
 			}
-			isp_prt(isp, ISP_LOGALL,
-			    "Chan %d Abort Cmd for N-Port 0x%04x @ Port "
-			    "0x%06x %p", chan, lp->handle, lp->portid, xs);
+			isp_prt(isp, ISP_LOGALL, "Chan %d Abort Cmd for N-Port 0x%04x @ Port 0x=
%06x", chan, lp->handle, lp->portid);
 			ISP_MEMZERO(ab, QENTRY_LEN);
 			ab->abrt_header.rqs_entry_type =3D RQSTYPE_ABORT_IO;
 			ab->abrt_header.rqs_entry_count =3D 1;
@@ -4797,8 +4803,7 @@
 				break;
 			}
 			isp_put_24xx_abrt(isp, ab, fcp->isp_scratch);
-			ab2 =3D (isp24xx_abrt_t *)
-			    &((uint8_t *)fcp->isp_scratch)[QENTRY_LEN];
+			ab2 =3D (isp24xx_abrt_t *) &((uint8_t *)fcp->isp_scratch)[QENTRY_LEN];
 			ab2->abrt_nphdl =3D 0xdeaf;
 			MEMORYBARRIER(isp, SYNC_SFORDEV, 0, 2 * QENTRY_LEN, chan);
 			isp_mboxcmd(isp, &mbs);
@@ -4806,16 +4811,13 @@
 				FC_SCRATCH_RELEASE(isp, chan);
 				break;
 			}
-			MEMORYBARRIER(isp, SYNC_SFORCPU, QENTRY_LEN,
-			    QENTRY_LEN, chan);
+			MEMORYBARRIER(isp, SYNC_SFORCPU, QENTRY_LEN, QENTRY_LEN, chan);
 			isp_get_24xx_abrt(isp, ab2, ab);
 			FC_SCRATCH_RELEASE(isp, chan);
 			if (ab->abrt_nphdl =3D=3D ISP24XX_ABRT_OKAY) {
 				return (0);
 			}
-			isp_prt(isp, ISP_LOGWARN,
-			    "Chan %d handle %d abort returned 0x%x", chan,
-			    hdlidx, ab->abrt_nphdl);
+			isp_prt(isp, ISP_LOGWARN, "Chan %d handle %d abort returned 0x%x", chan=
, hdlidx, ab->abrt_nphdl);
 			break;
 		} else if (IS_FC(isp)) {
 			if (ISP_CAP_SCCFW(isp)) {
@@ -5003,7 +5005,8 @@
 {
 	XS_T *complist[MAX_REQUESTQ_COMPLETIONS], *xs;
 	uint32_t iptr, optr, junk;
-	int i, nlooked =3D 0, ndone =3D 0;
+	int i, nlooked =3D 0, ndone =3D 0, continuations_expected =3D 0;
+	int etype, last_etype =3D 0;
=20
 again:
 	optr =3D isp->isp_residx;
@@ -5179,10 +5182,10 @@
 		uint8_t qe[QENTRY_LEN];
 		ispstatusreq_t *sp =3D (ispstatusreq_t *) qe;
 		isphdr_t *hp;
-		int buddaboom, etype, scsi_status, completion_status;
+		int buddaboom, scsi_status, completion_status;
 		int req_status_flags, req_state_flags;
 		uint8_t *snsp, *resp;
-		uint32_t rlen, slen;
+		uint32_t rlen, slen, totslen;
 		long resid;
 		uint16_t oop;
=20
@@ -5234,9 +5237,22 @@
 				isp->isp_fpcchiwater =3D rio->req_header.rqs_seqno;
 			}
 			ISP_MEMZERO(hp, QENTRY_LEN);	/* PERF */
+			last_etype =3D etype;
 			continue;
 		} else if (etype =3D=3D RQSTYPE_RIO2) {
-			isp_prt(isp, ISP_LOGERR, "dropping RIO2 response\n");
+			isp_prt(isp, ISP_LOGERR, "dropping RIO2 response");
+			ISP_MEMZERO(hp, QENTRY_LEN);	/* PERF */
+			last_etype =3D etype;
+			continue;
+		} else if (etype =3D=3D RQSTYPE_STATUS_CONT) {
+			isp_get_cont_response(isp, (ispstatus_cont_t *) hp, (ispstatus_cont_t *=
) sp);
+			if (last_etype =3D=3D RQSTYPE_RESPONSE && continuations_expected && ndo=
ne > 0 && (xs =3D complist[ndone-1]) !=3D NULL) {
+				ispstatus_cont_t *scp =3D (ispstatus_cont_t *) sp;
+				XS_SENSE_APPEND(xs, scp->req_sense_data, sizeof (scp->req_sense_data));
+				isp_prt(isp, ISP_LOGDEBUG0|ISP_LOG_CWARN, "%d more Status Continuation=
s expected", --continuations_expected);
+			} else {
+				isp_prt(isp, ISP_LOG_WARN1, "Ignored Continuation Response");
+			}
 			ISP_MEMZERO(hp, QENTRY_LEN);	/* PERF */
 			continue;
 		} else {
@@ -5256,12 +5272,12 @@
 			 * optr to be one more than the updated amount.
 			 */
 			while (tsto !=3D oop) {
-				optr =3D ISP_NXT_QENTRY(tsto,
-				    RESULT_QUEUE_LEN(isp));
+				optr =3D ISP_NXT_QENTRY(tsto, RESULT_QUEUE_LEN(isp));
 			}
 			if (r > 0) {
 				ISP_WRITE(isp, isp->isp_respoutrp, optr);
 				ISP_MEMZERO(hp, QENTRY_LEN);	/* PERF */
+				last_etype =3D etype;
 				continue;
 			}
=20
@@ -5277,11 +5293,10 @@
 			 * not, something bad has happened.
 			 */
 			if (etype !=3D RQSTYPE_REQUEST) {
-				isp_prt(isp, ISP_LOGERR, notresp,
-				    etype, oop, optr, nlooked);
-				isp_print_bytes(isp,
-				    "Request Queue Entry", QENTRY_LEN, sp);
+				isp_prt(isp, ISP_LOGERR, notresp, etype, oop, optr, nlooked);
+				isp_print_bytes(isp, "Request Queue Entry", QENTRY_LEN, sp);
 				ISP_MEMZERO(hp, QENTRY_LEN);	/* PERF */
+				last_etype =3D etype;
 				continue;
 			}
 			buddaboom =3D 1;
@@ -5296,10 +5311,11 @@
 			if (sp->req_header.rqs_flags & RQSFLAG_CONTINUATION) {
 				isp_print_bytes(isp, "unexpected continuation segment", QENTRY_LEN, sp=
);
 				ISP_WRITE(isp, isp->isp_respoutrp, optr);
+				last_etype =3D etype;
 				continue;
 			}
 			if (sp->req_header.rqs_flags & RQSFLAG_FULL) {
-				isp_prt(isp, ISP_LOGDEBUG0, "internal queues full");
+				isp_prt(isp, ISP_LOG_WARN1, "internal queues full");
 				/*
 				 * We'll synthesize a QUEUE FULL message below.
 				 */
@@ -5319,6 +5335,7 @@
 			if (sp->req_header.rqs_flags & RQSFLAG_BADORDER) {
 				isp_print_bytes(isp, "invalid IOCB ordering", QENTRY_LEN, sp);
 				ISP_WRITE(isp, isp->isp_respoutrp, optr);
+				last_etype =3D etype;
 				continue;
 			}
 		}
@@ -5327,6 +5344,7 @@
 			isp_prt(isp, ISP_LOGERR, "bad request handle 0x%x (iocb type 0x%x)", sp=
->req_handle, etype);
 			ISP_MEMZERO(hp, QENTRY_LEN);	/* PERF */
 			ISP_WRITE(isp, isp->isp_respoutrp, optr);
+			last_etype =3D etype;
 			continue;
 		}
 		xs =3D isp_find_xs(isp, sp->req_handle);
@@ -5343,20 +5361,23 @@
 			}
 			ISP_MEMZERO(hp, QENTRY_LEN);	/* PERF */
 			ISP_WRITE(isp, isp->isp_respoutrp, optr);
+			last_etype =3D etype;
 			continue;
 		}
 		if (req_status_flags & RQSTF_BUS_RESET) {
+			isp_prt(isp, ISP_LOG_WARN1, "%d.%d.%d bus was reset", XS_CHANNEL(xs), X=
S_TGT(xs), XS_LUN(xs));
 			XS_SETERR(xs, HBA_BUSRESET);
 			ISP_SET_SENDMARKER(isp, XS_CHANNEL(xs), 1);
 		}
 		if (buddaboom) {
+			isp_prt(isp, ISP_LOG_WARN1, "%d.%d.%d buddaboom", XS_CHANNEL(xs), XS_TG=
T(xs), XS_LUN(xs));
 			XS_SETERR(xs, HBA_BOTCH);
 		}
=20
 		resp =3D NULL;
 		rlen =3D 0;
 		snsp =3D NULL;
-		slen =3D 0;
+		totslen =3D slen =3D 0;
 		if (IS_24XX(isp) && (scsi_status & (RQCS_RV|RQCS_SV)) !=3D 0) {
 			resp =3D ((isp24xx_statusreq_t *)sp)->req_rsp_sense;
 			rlen =3D ((isp24xx_statusreq_t *)sp)->req_response_len;
@@ -5374,14 +5395,23 @@
 			if (IS_24XX(isp)) {
 				snsp =3D ((isp24xx_statusreq_t *)sp)->req_rsp_sense;
 				snsp +=3D rlen;
-				slen =3D ((isp24xx_statusreq_t *)sp)->req_sense_len;
+				totslen =3D ((isp24xx_statusreq_t *)sp)->req_sense_len;
+				slen =3D (sizeof (((isp24xx_statusreq_t *)sp)->req_rsp_sense)) - rlen;
+				if (totslen < slen)
+					slen =3D totslen;=20
 			} else {
 				snsp =3D sp->req_sense_data;
-				slen =3D sp->req_sense_len;
+				totslen =3D sp->req_sense_len;
+				slen =3D sizeof (sp->req_sense_data);
+				if (totslen < slen)
+					slen =3D totslen;
 			}
 		} else if (IS_SCSI(isp) && (req_state_flags & RQSF_GOT_SENSE)) {
 			snsp =3D sp->req_sense_data;
-			slen =3D sp->req_sense_len;
+			totslen =3D sp->req_sense_len;
+			slen =3D sizeof (sp->req_sense_data);
+			if (totslen < slen)
+				slen =3D totslen;
 		}
 		if (req_state_flags & RQSF_GOT_STATUS) {
 			*XS_STSP(xs) =3D scsi_status & 0xff;
@@ -5442,7 +5472,22 @@
 				}
 			}
 			if (snsp && slen) {
-				XS_SAVE_SENSE(xs, snsp, slen);
+				if (totslen > slen) {
+					continuations_expected +=3D ((totslen - slen + QENTRY_LEN - 5) / (QEN=
TRY_LEN - 4));
+					if (ndone > (MAX_REQUESTQ_COMPLETIONS - continuations_expected - 1)) {
+						/* we'll lose some stats, but that's a small price to pay */
+						for (i =3D 0; i < ndone; i++) {
+							if (complist[i]) {
+								isp->isp_rsltccmplt++;
+								isp_done(complist[i]);
+							}
+						}
+						ndone =3D 0;
+					}
+					isp_prt(isp, ISP_LOGDEBUG0|ISP_LOG_CWARN, "Expecting %d more Status C=
ontinuations for total sense length of %u",
+					    continuations_expected, totslen);
+				}
+				XS_SAVE_SENSE(xs, snsp, totslen, slen);
 			} else if ((req_status_flags & RQSF_GOT_STATUS) && (scsi_status & 0xff)=
 =3D=3D SCSI_CHECK && IS_FC(isp)) {
 				isp_prt(isp, ISP_LOGWARN, "CHECK CONDITION w/o sense data for CDB=3D0x=
%x", XS_CDBP(xs)[0] & 0xff);
 				isp_print_bytes(isp, "CC with no Sense", QENTRY_LEN, qe);
@@ -5461,6 +5506,7 @@
 				*XS_STSP(xs) =3D SCSI_QFULL;
 				XS_SETERR(xs, HBA_NOERROR);
 			} else if (XS_NOERR(xs)) {
+				isp_prt(isp, ISP_LOG_WARN1, "%d.%d.%d badness at %s:%u", XS_CHANNEL(xs=
), XS_TGT(xs), XS_LUN(xs), __func__, __LINE__);
 				XS_SETERR(xs, HBA_BOTCH);
 			}
 			XS_SET_RESID(xs, XS_XFRLEN(xs));
@@ -5482,15 +5528,12 @@
 		}
 		isp_destroy_handle(isp, sp->req_handle);
=20
-		if (((isp->isp_dblev & (ISP_LOGDEBUG1|ISP_LOGDEBUG2|ISP_LOGDEBUG3))) ||
-		    ((isp->isp_dblev & (ISP_LOGDEBUG0|ISP_LOG_CWARN) && ((!XS_NOERR(xs))=
 || (*XS_STSP(xs) !=3D SCSI_GOOD))))) {
-			isp_prt_endcmd(isp, xs);
-		}
 		if (isp->isp_nactive > 0) {
 		    isp->isp_nactive--;
 		}
 		complist[ndone++] =3D xs;	/* defer completion call until later */
 		ISP_MEMZERO(hp, QENTRY_LEN);	/* PERF */
+		last_etype =3D etype;
 		if (ndone =3D=3D MAX_REQUESTQ_COMPLETIONS) {
 			break;
 		}
@@ -5525,6 +5568,10 @@
 	for (i =3D 0; i < ndone; i++) {
 		xs =3D complist[i];
 		if (xs) {
+			if (((isp->isp_dblev & (ISP_LOGDEBUG1|ISP_LOGDEBUG2|ISP_LOGDEBUG3))) ||
+			    ((isp->isp_dblev & (ISP_LOGDEBUG0|ISP_LOG_CWARN) && ((!XS_NOERR(xs)=
) || (*XS_STSP(xs) !=3D SCSI_GOOD))))) {
+				isp_prt_endcmd(isp, xs);
+			}
 			isp->isp_rsltccmplt++;
 			isp_done(xs);
 		}
@@ -5547,8 +5594,8 @@
 		ISP_SNPRINTF(cdbstr, sizeof (cdbstr), "%s0x%02x ", cdbstr, XS_CDBP(xs)[i=
]);
 	}
 	if (XS_SENSE_VALID(xs)) {
-		isp_xs_prt(isp, xs, ISP_LOGALL, "FIN dl%d resid %ld CDB=3D%s KEY/ASC/ASC=
Q=3D0x%02x/0x%02x/0x%02x",
-		    XS_XFRLEN(xs), (long) XS_GET_RESID(xs), cdbstr, XS_SNSKEY(xs), XS_SN=
SASC(xs), XS_SNSASCQ(xs));
+		isp_xs_prt(isp, xs, ISP_LOGALL, "FIN dl%d resid %ld CDB=3D%s SenseLength=
=3D%u/%u KEY/ASC/ASCQ=3D0x%02x/0x%02x/0x%02x",
+		    XS_XFRLEN(xs), (long) XS_GET_RESID(xs), cdbstr, XS_CUR_SNSLEN(xs), X=
S_TOT_SNSLEN(xs), XS_SNSKEY(xs), XS_SNSASC(xs), XS_SNSASCQ(xs));
 	} else {
 		isp_xs_prt(isp, xs, ISP_LOGALL, "FIN dl%d resid %ld CDB=3D%s STS 0x%x XS=
_ERR=3D0x%x", XS_XFRLEN(xs), (long) XS_GET_RESID(xs), cdbstr, *XS_STSP(xs),=
 XS_ERR(xs));
 	}
@@ -5876,6 +5923,7 @@
 						continue;
 					}
 					j++;
+					isp_prt(isp, ISP_LOG_WARN1, "%d.%d.%d bus reset set at %s:%u", XS_CHA=
NNEL(xs), XS_TGT(xs), XS_LUN(xs), __func__, __LINE__);
 					XS_SETERR(xs, HBA_BUSRESET);
 				}
 				if (j) {
@@ -6102,10 +6150,10 @@
 {
 	switch (type) {
 	case RQSTYPE_STATUS_CONT:
-		isp_prt(isp, ISP_LOGDEBUG0, "Ignored Continuation Response");
+		isp_prt(isp, ISP_LOG_WARN1, "Ignored Continuation Response");
 		return (1);
 	case RQSTYPE_MARKER:
-		isp_prt(isp, ISP_LOGDEBUG0, "Marker Response");
+		isp_prt(isp, ISP_LOG_WARN1, "Marker Response");
 		return (1);
 	case RQSTYPE_ATIO:
 	case RQSTYPE_CTIO:
@@ -6170,7 +6218,7 @@
=20
 	case RQCS_INCOMPLETE:
 		if ((sp->req_state_flags & RQSF_GOT_TARGET) =3D=3D 0) {
-			isp_xs_prt(isp, xs, ISP_LOGDEBUG1, "Selection Timeout");
+			isp_xs_prt(isp, xs, ISP_LOG_WARN1, "Selection Timeout @ %s:%d", __func_=
_, __LINE__);
 			if (XS_NOERR(xs)) {
 				XS_SETERR(xs, HBA_SELTIMEOUT);
 				*rp =3D XS_XFRLEN(xs);
@@ -6366,7 +6414,7 @@
 		break;
=20
 	case RQCS_QUEUE_FULL:
-		isp_xs_prt(isp, xs, ISP_LOGDEBUG0, "internal queues full status 0x%x", *=
XS_STSP(xs));
+		isp_xs_prt(isp, xs, ISP_LOG_WARN1, "internal queues full status 0x%x", *=
XS_STSP(xs));
=20
 		/*
 		 * If QFULL or some other status byte is set, then this
@@ -6374,17 +6422,14 @@
 		 *
 		 * Unfortunately, some QLogic f/w writers have, in
 		 * some cases, ommitted to *set* status to QFULL.
-		 *
-
+		 */
+#if	0
 		if (*XS_STSP(xs) !=3D SCSI_GOOD && XS_NOERR(xs)) {
 			XS_SETERR(xs, HBA_NOERROR);
 			return;
 		}
=20
-		 *
-		 *
-		 */
-
+#endif
 		*XS_STSP(xs) =3D SCSI_QFULL;
 		XS_SETERR(xs, HBA_NOERROR);
 		return;
@@ -6446,8 +6491,7 @@
 			reason =3D "logout";
 		}
=20
-		isp_prt(isp, ISP_LOGINFO, "port %s for target %d",
-		    reason, XS_TGT(xs));
+		isp_prt(isp, ISP_LOGINFO, "port %s for target %d", reason, XS_TGT(xs));
=20
 		/*
 		 * If we're on a local loop, force a LIP (which is overkill)
@@ -6469,24 +6513,21 @@
 		return;
 	}
 	case RQCS_PORT_CHANGED:
-		isp_prt(isp, ISP_LOGWARN,
-		    "port changed for target %d", XS_TGT(xs));
+		isp_prt(isp, ISP_LOGWARN, "port changed for target %d", XS_TGT(xs));
 		if (XS_NOERR(xs)) {
 			XS_SETERR(xs, HBA_SELTIMEOUT);
 		}
 		return;
=20
 	case RQCS_PORT_BUSY:
-		isp_prt(isp, ISP_LOGWARN,
-		    "port busy for target %d", XS_TGT(xs));
+		isp_prt(isp, ISP_LOGWARN, "port busy for target %d", XS_TGT(xs));
 		if (XS_NOERR(xs)) {
 			XS_SETERR(xs, HBA_TGTBSY);
 		}
 		return;
=20
 	default:
-		isp_prt(isp, ISP_LOGERR, "Unknown Completion Status 0x%x",
-		    sp->req_completion_status);
+		isp_prt(isp, ISP_LOGERR, "Unknown Completion Status 0x%x", sp->req_compl=
etion_status);
 		break;
 	}
 	if (XS_NOERR(xs)) {
@@ -6547,9 +6588,7 @@
 		return;
=20
 	case RQCS_24XX_DRE:	/* data reassembly error */
-		isp_prt(isp, ISP_LOGERR,
-		    "Chan %d data reassembly error for target %d",
-		    chan, XS_TGT(xs));
+		isp_prt(isp, ISP_LOGERR, "Chan %d data reassembly error for target %d", =
chan, XS_TGT(xs));
 		if (XS_NOERR(xs)) {
 			XS_SETERR(xs, HBA_ABORTED);
 		}
@@ -6557,8 +6596,7 @@
 		return;
=20
 	case RQCS_24XX_TABORT:	/* aborted by target */
-		isp_prt(isp, ISP_LOGERR, "Chan %d target %d sent ABTS",
-		    chan, XS_TGT(xs));
+		isp_prt(isp, ISP_LOGERR, "Chan %d target %d sent ABTS", chan, XS_TGT(xs)=
);
 		if (XS_NOERR(xs)) {
 			XS_SETERR(xs, HBA_ABORTED);
 		}
@@ -6580,7 +6618,7 @@
 			return;
 		}
 		XS_SET_RESID(xs, sp->req_resid);
-		isp_xs_prt(isp, xs, ISP_LOGDEBUG0, "Data Underrun (%d) for command 0x%x"=
, sp->req_resid, XS_CDBP(xs)[0] & 0xff);
+		isp_xs_prt(isp, xs, ISP_LOG_WARN1, "Data Underrun (%d) for command 0x%x"=
, sp->req_resid, XS_CDBP(xs)[0] & 0xff);
 		if (XS_NOERR(xs)) {
 			XS_SETERR(xs, HBA_NOERROR);
 		}
@@ -6616,8 +6654,7 @@
 		return;
 	}
 	case RQCS_PORT_CHANGED:
-		isp_prt(isp, ISP_LOGWARN,
-		    "port changed for target %d chan %d", XS_TGT(xs), chan);
+		isp_prt(isp, ISP_LOGWARN, "port changed for target %d chan %d", XS_TGT(x=
s), chan);
 		if (XS_NOERR(xs)) {
 			XS_SETERR(xs, HBA_SELTIMEOUT);
 		}
@@ -6625,9 +6662,7 @@
=20
=20
 	case RQCS_24XX_ENOMEM:	/* f/w resource unavailable */
-		isp_prt(isp, ISP_LOGWARN,
-		    "f/w resource unavailable for target %d chan %d",
-		    XS_TGT(xs), chan);
+		isp_prt(isp, ISP_LOGWARN, "f/w resource unavailable for target %d chan %=
d", XS_TGT(xs), chan);
 		if (XS_NOERR(xs)) {
 			*XS_STSP(xs) =3D SCSI_BUSY;
 			XS_SETERR(xs, HBA_TGTBSY);
@@ -6635,9 +6670,7 @@
 		return;
=20
 	case RQCS_24XX_TMO:	/* task management overrun */
-		isp_prt(isp, ISP_LOGWARN,
-		    "command for target %d overlapped task management for "
-		    "chan %d", XS_TGT(xs), chan);
+		isp_prt(isp, ISP_LOGWARN, "command for target %d overlapped task managem=
ent for chan %d", XS_TGT(xs), chan);
 		if (XS_NOERR(xs)) {
 			*XS_STSP(xs) =3D SCSI_BUSY;
 			XS_SETERR(xs, HBA_TGTBSY);
@@ -6645,9 +6678,7 @@
 		return;
=20
 	default:
-		isp_prt(isp, ISP_LOGERR,
-		    "Unknown Completion Status 0x%x on chan %d",
-		    sp->req_completion_status, chan);
+		isp_prt(isp, ISP_LOGERR, "Unknown Completion Status 0x%x on chan %d", sp=
->req_completion_status, chan);
 		break;
 	}
 	if (XS_NOERR(xs)) {
@@ -6991,7 +7022,7 @@
 	ISP_FC_OPMAP(0x03, 0x07),	/* 0x05: MBOX_READ_RAM_WORD */
 	ISP_FC_OPMAP_FULL(0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff),	/* 0x0=
6: MBOX_MAILBOX_REG_TEST */
 	ISP_FC_OPMAP(0x07, 0x07),	/* 0x07: MBOX_VERIFY_CHECKSUM	*/
-	ISP_FC_OPMAP_FULL(0x0, 0x0, 0x0, 0x01, 0x0, 0x3, 0x80, 0x4f),	/* 0x08: MB=
OX_ABOUT_FIRMWARE */
+	ISP_FC_OPMAP_FULL(0x0, 0x0, 0x0, 0x01, 0x0, 0x3, 0x80, 0x7f),	/* 0x08: MB=
OX_ABOUT_FIRMWARE */
 	ISP_FC_OPMAP(0xdf, 0x01),	/* 0x09: MBOX_LOAD_RISC_RAM_2100 */
 	ISP_FC_OPMAP(0xdf, 0x01),	/* 0x0a: DUMP RAM */
 	ISP_FC_OPMAP_HALF(0x1, 0xff, 0x0, 0x01),	/* 0x0b: MBOX_LOAD_RISC_RAM */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/isp/isp_freebsd.c
--- a/head/sys/dev/isp/isp_freebsd.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/isp/isp_freebsd.c	Fri Aug 10 14:19:25 2012 +0300
@@ -28,7 +28,7 @@
  * Platform (FreeBSD) dependent common attachment code for Qlogic adapters.
  */
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/dev/isp/isp_freebsd.c 237537 2012-06-24 17:30=
:54Z mjacob $");
+__FBSDID("$FreeBSD: head/sys/dev/isp/isp_freebsd.c 239143 2012-08-08 18:24=
:33Z mjacob $");
 #include <dev/isp/isp_freebsd.h>
 #include <sys/unistd.h>
 #include <sys/kthread.h>
@@ -55,9 +55,6 @@
 int isp_quickboot_time =3D 7;	/* don't wait more than N secs for loop up */
 int isp_gone_device_time =3D 30;	/* grace time before reporting device los=
t */
 int isp_autoconfig =3D 1;		/* automatically attach/detach devices */
-static const char *roles[4] =3D {
-    "(none)", "Target", "Initiator", "Target/Initiator"
-};
 static const char prom3[] =3D "Chan %d PortID 0x%06x Departed from Target =
%u because of %s";
 static const char rqo[] =3D "%s: Request Queue Overflow\n";
=20
@@ -77,6 +74,7 @@
 static void isp_target_thread_pi(void *);
 static void isp_target_thread_fc(void *);
 #endif
+static int isp_timer_count;
 static void isp_timer(void *);
=20
 static struct cdevsw isp_cdevsw =3D {
@@ -120,7 +118,10 @@
 	csa.event_enable =3D AC_LOST_DEVICE;
 	csa.callback =3D isp_cam_async;
 	csa.callback_arg =3D sim;
+
+	ISP_LOCK(isp);
 	xpt_action((union ccb *)&csa);
+	ISP_UNLOCK(isp);
=20
 	if (IS_SCSI(isp)) {
 		struct isp_spi *spi =3D ISP_SPI_PC(isp, chan);
@@ -154,15 +155,14 @@
 		if (fcp->role & ISP_ROLE_INITIATOR) {
 			isp_freeze_loopdown(isp, chan, "isp_attach");
 			callout_reset(&fc->ldt, isp_quickboot_time * hz, isp_ldt, fc);
-			isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, "Starting Initial Loop Down T=
imer @ %lu", (unsigned long) time_uptime);
+			isp_prt(isp, ISP_LOG_SANCFG|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", de=
vice_get_nameunit(isp->isp_osinfo.dev), chan)) {
 			xpt_free_path(fc->path);
 			ISP_LOCK(isp);
-			if (callout_active(&fc->ldt)) {
+			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);
@@ -182,6 +182,9 @@
 			SYSCTL_ADD_QUAD(ctx, SYSCTL_CHILDREN(tree), OID_AUTO, "wwpn", CTLFLAG_R=
D, &FCPARAM(isp, 0)->isp_wwpn, "World Wide Port Name");
 			SYSCTL_ADD_UINT(ctx, SYSCTL_CHILDREN(tree), OID_AUTO, "loop_down_limit"=
, CTLFLAG_RW, &ISP_FC_PC(isp, 0)->loop_down_limit, 0, "Loop Down Limit");
 			SYSCTL_ADD_UINT(ctx, SYSCTL_CHILDREN(tree), OID_AUTO, "gone_device_time=
", CTLFLAG_RW, &ISP_FC_PC(isp, 0)->gone_device_time, 0, "Gone Device Time");
+#if defined(ISP_TARGET_MODE) && defined(DEBUG)
+			SYSCTL_ADD_UINT(ctx, SYSCTL_CHILDREN(tree), OID_AUTO, "inject_lost_data=
_frame", CTLFLAG_RW, &ISP_FC_PC(isp, 0)->inject_lost_data_frame, 0, "Cause =
a Lost Frame on a Read");
+#endif
 		}
 	}
 	return (0);
@@ -223,7 +226,8 @@
 	}
=20
 	callout_init_mtx(&isp->isp_osinfo.tmo, &isp->isp_osinfo.lock, 0);
-	callout_reset(&isp->isp_osinfo.tmo, hz, isp_timer, isp);
+	isp_timer_count =3D hz >> 2;
+	callout_reset(&isp->isp_osinfo.tmo, isp_timer_count, isp_timer, isp);
 	isp->isp_osinfo.timer_active =3D 1;
=20
 	isp->isp_osinfo.cdev =3D make_dev(&isp_cdevsw, du, UID_ROOT, GID_OPERATOR=
, 0600, "%s", nu);
@@ -301,7 +305,9 @@
 		csa.event_enable =3D 0;
 		csa.callback =3D isp_cam_async;
 		csa.callback_arg =3D sim;
+		ISP_LOCK(isp);
 		xpt_action((union ccb *)&csa);
+		ISP_UNLOCK(isp);
 		xpt_free_path(path);
 		xpt_bus_deregister(cam_sim_path(sim));
 		cam_sim_free(sim, FALSE);
@@ -346,7 +352,7 @@
 		int wasfrozen =3D fc->simqfrozen & SIMQFRZ_LOOPDOWN;
 		fc->simqfrozen &=3D ~SIMQFRZ_LOOPDOWN;
 		if (wasfrozen && fc->simqfrozen =3D=3D 0) {
-			isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, "%s: Chan %d releasing simq",=
 __func__, chan);
+			isp_prt(isp, ISP_LOG_SANCFG|ISP_LOGDEBUG0, "%s: Chan %d releasing simq"=
, __func__, chan);
 			xpt_release_simq(fc->sim, 1);
 		}
 	}
@@ -360,7 +366,7 @@
 	int nr, chan, retval =3D ENOTTY;
=20
 	isp =3D dev->si_drv1;
-=09
+
 	switch (c) {
 	case ISP_SDBLEV:
 	{
@@ -479,7 +485,7 @@
 		}
 		lp =3D &FCPARAM(isp, ifc->chan)->portdb[ifc->loopid];
 		if (lp->state =3D=3D FC_PORTDB_STATE_VALID || lp->target_mode) {
-			ifc->role =3D lp->roles;
+			ifc->role =3D (lp->prli_word3 & SVC3_ROLE_MASK) >> SVC3_ROLE_SHIFT;
 			ifc->loopid =3D lp->handle;
 			ifc->portid =3D lp->portid;
 			ifc->node_wwn =3D lp->node_wwn;
@@ -772,14 +778,17 @@
 static ISP_INLINE void
 isp_free_pcmd(ispsoftc_t *isp, union ccb *ccb)
 {
-	((struct isp_pcmd *)ISP_PCMD(ccb))->next =3D isp->isp_osinfo.pcmd_free;
-	isp->isp_osinfo.pcmd_free =3D ISP_PCMD(ccb);
-	ISP_PCMD(ccb) =3D NULL;
+	if (ISP_PCMD(ccb)) {
+		memset(ISP_PCMD(ccb), 0, sizeof (struct isp_pcmd));
+		((struct isp_pcmd *)ISP_PCMD(ccb))->next =3D isp->isp_osinfo.pcmd_free;
+		isp->isp_osinfo.pcmd_free =3D ISP_PCMD(ccb);
+		ISP_PCMD(ccb) =3D NULL;
+	}
 }
+
 /*
  * Put the target mode functions here, because some are inlines
  */
-
 #ifdef	ISP_TARGET_MODE
 static ISP_INLINE void isp_tmlock(ispsoftc_t *, const char *);
 static ISP_INLINE void isp_tmunlk(ispsoftc_t *);
@@ -804,9 +813,11 @@
 static int isp_disable_target_mode(ispsoftc_t *, int);
 static void isp_ledone(ispsoftc_t *, lun_entry_t *);
 static timeout_t isp_refire_putback_atio;
+static timeout_t isp_refire_notify_ack;
 static void isp_complete_ctio(union ccb *);
 static void isp_target_putback_atio(union ccb *);
-static void isp_target_start_ctio(ispsoftc_t *, union ccb *);
+enum Start_Ctio_How { FROM_CAM, FROM_TIMER, FROM_SRR, FROM_CTIO_DONE };
+static void isp_target_start_ctio(ispsoftc_t *, union ccb *, enum Start_Ct=
io_How);
 static void isp_handle_platform_atio(ispsoftc_t *, at_entry_t *);
 static void isp_handle_platform_atio2(ispsoftc_t *, at2_entry_t *);
 static void isp_handle_platform_atio7(ispsoftc_t *, at7_entry_t *);
@@ -967,7 +978,9 @@
 isp_tmcmd_restart(ispsoftc_t *isp)
 {
 	inot_private_data_t *ntp;
+	inot_private_data_t *restart_queue;
 	tstate_t *tptr;
+	union ccb *ccb;
 	struct tslist *lhp;
 	int bus, i;
=20
@@ -975,8 +988,8 @@
 		for (i =3D 0; i < LUN_HASH_SIZE; i++) {
 			ISP_GET_PC_ADDR(isp, bus, lun_hash[i], lhp);
 			SLIST_FOREACH(tptr, lhp, next) {
-				inot_private_data_t *restart_queue =3D tptr->restart_queue;
-				tptr->restart_queue =3D NULL;
+				if ((restart_queue =3D tptr->restart_queue) !=3D NULL)
+					tptr->restart_queue =3D NULL;
 				while (restart_queue) {
 					ntp =3D restart_queue;
 					restart_queue =3D ntp->rd.nt.nt_hba;
@@ -998,6 +1011,14 @@
 						break;
 					}
 				}
+				/*
+				 * We only need to do this once per tptr
+				 */
+				if (!TAILQ_EMPTY(&tptr->waitq)) {
+					ccb =3D (union ccb *)TAILQ_LAST(&tptr->waitq, isp_ccbq);
+					TAILQ_REMOVE(&tptr->waitq, &ccb->ccb_h, periph_links.tqe);
+					isp_target_start_ctio(isp, ccb, FROM_TIMER);
+				}
 			}
 		}
 	}
@@ -1026,8 +1047,10 @@
 static ISP_INLINE void
 isp_put_atpd(ispsoftc_t *isp, tstate_t *tptr, atio_private_data_t *atp)
 {
-	atp->tag =3D 0;
-	atp->dead =3D 0;
+	if (atp->ests) {
+		isp_put_ecmd(isp, atp->ests);
+	}
+	memset(atp, 0, sizeof (*atp));
 	atp->next =3D tptr->atfree;
 	tptr->atfree =3D atp;
 }
@@ -1042,8 +1065,8 @@
 		if (atp->tag =3D=3D 0) {
 			continue;
 		}
-		xpt_print(tptr->owner, "ATP: [0x%x] origdlen %u bytes_xfrd %u last_xfr %=
u lun %u nphdl 0x%04x s_id 0x%06x d_id 0x%06x oxid 0x%04x state %s\n",
-                    atp->tag, atp->orig_datalen, atp->bytes_xfered, atp->l=
ast_xframt, atp->lun, atp->nphdl, atp->sid, atp->portid, atp->oxid, states[=
atp->state & 0x7]);
+		xpt_print(tptr->owner, "ATP: [0x%x] origdlen %u bytes_xfrd %u lun %u nph=
dl 0x%04x s_id 0x%06x d_id 0x%06x oxid 0x%04x state %s\n",
+                    atp->tag, atp->orig_datalen, atp->bytes_xfered, atp->l=
un, atp->nphdl, atp->sid, atp->portid, atp->oxid, states[atp->state & 0x7]);
 	}
 }
=20
@@ -1108,6 +1131,7 @@
 	}
 	SLIST_INIT(&tptr->atios);
 	SLIST_INIT(&tptr->inots);
+	TAILQ_INIT(&tptr->waitq);
 	for (i =3D 0; i < ATPDPSIZE-1; i++) {
 		tptr->atpool[i].next =3D &tptr->atpool[i+1];
 		tptr->ntpool[i].next =3D &tptr->ntpool[i+1];
@@ -1248,7 +1272,7 @@
 		ISP_SET_PC(isp, bus, tm_enable_defer, 1);
 		ccb->ccb_h.status =3D CAM_REQ_CMP;
 		xpt_print(ccb->ccb_h.path, "Target Mode not enabled yet- lun enable defe=
rred\n");
-		goto done;
+		goto done1;
 	}
=20
 	/*
@@ -1265,6 +1289,7 @@
 	} else {
 		tptr->enabled =3D 1;
 	}
+done1:
 	if (tptr) {
 		rls_lun_statep(isp, tptr);
 	}
@@ -1283,6 +1308,7 @@
 	struct tslist *lhp;
 	int i, n;
=20
+
 	ISP_GET_PC(isp, bus, tm_enabled, i);
 	if (i =3D=3D 1) {
 		return (CAM_REQ_CMP);
@@ -1303,7 +1329,7 @@
 		SLIST_FOREACH(tptr, lhp, next) {
 			tptr->hold++;
 			if (tptr->enabled =3D=3D 0) {
-				if (isp_enable_deferred(isp, bus, xpt_path_lun_id(tptr->owner)) =3D=3D=
 0) {
+				if (isp_enable_deferred(isp, bus, xpt_path_lun_id(tptr->owner)) =3D=3D=
 CAM_REQ_CMP) {
 					tptr->enabled =3D 1;
 					n++;
 				}
@@ -1325,9 +1351,10 @@
 isp_enable_deferred(ispsoftc_t *isp, int bus, lun_id_t lun)
 {
 	cam_status status;
-	int luns_already_enabled =3D ISP_FC_PC(isp, bus)->tm_luns_enabled;
-
-	isp_prt(isp, ISP_LOGTINFO, "%s: bus %d lun %u", __func__, bus, lun);
+	int luns_already_enabled;
+
+	ISP_GET_PC(isp, bus, tm_luns_enabled, luns_already_enabled);
+	isp_prt(isp, ISP_LOGTINFO, "%s: bus %d lun %u luns_enabled %d", __func__,=
 bus, lun, luns_already_enabled);
 	if (IS_24XX(isp) || (IS_FC(isp) && luns_already_enabled)) {
 		status =3D CAM_REQ_CMP;
 	} else {
@@ -1342,7 +1369,7 @@
 		}
 		status =3D CAM_REQ_INPROG;
 		isp->isp_osinfo.rptr =3D &status;
-		if (isp_lun_cmd(isp, RQSTYPE_ENABLE_LUN, bus, lun, DFLT_CMND_CNT, DFLT_I=
NOT_CNT)) {
+		if (isp_lun_cmd(isp, RQSTYPE_ENABLE_LUN, bus, lun =3D=3D CAM_LUN_WILDCAR=
D? 0 : lun, cmd_cnt, not_cnt)) {
 			status =3D CAM_RESRC_UNAVAIL;
 		} else {
 			mtx_sleep(&status, &isp->isp_lock, PRIBIO, "isp_enable_deferred", 0);
@@ -1412,8 +1439,9 @@
 	/*
 	 * For SCC FW, we only deal with lun zero.
 	 */
-	if (IS_FC(isp)) {
-		lun =3D 0;
+	if (IS_FC(isp) && lun > 0) {
+		status =3D CAM_REQ_CMP;
+		goto done;
 	}
 	isp->isp_osinfo.rptr =3D &status;
 	if (isp_lun_cmd(isp, RQSTYPE_ENABLE_LUN, bus, lun, 0, 0)) {
@@ -1426,7 +1454,8 @@
 	if (status =3D=3D CAM_REQ_CMP) {
 		tptr->enabled =3D 0;
 		/*
-		 * If we have no more luns enabled for this bus, delete all tracked wwns=
 for it (if we are FC)
+		 * If we have no more luns enabled for this bus,
+		 * delete all tracked wwns for it (if we are FC),=20
 		 * and disable target mode.
 		 */
 		if (is_any_lun_enabled(isp, bus) =3D=3D 0) {
@@ -1492,7 +1521,7 @@
 		}
 	}
 	ISP_SET_PC(isp, bus, tm_enabled, 0);
-	isp_prt(isp, ISP_LOGINFO, "Target Role disabled onon  Bus %d", bus);
+	isp_prt(isp, ISP_LOGINFO, "Target Role disabled on Bus %d", bus);
 	return (0);
 }
=20
@@ -1517,313 +1546,546 @@
 }
=20
 static void
-isp_target_start_ctio(ispsoftc_t *isp, union ccb *ccb)
+isp_target_start_ctio(ispsoftc_t *isp, union ccb *ccb, enum Start_Ctio_How=
 how)
 {
-	void *qe;
+	int fctape, sendstatus, resid;
 	tstate_t *tptr;
+	fcparam *fcp;
 	atio_private_data_t *atp;
-	struct ccb_scsiio *cso =3D &ccb->csio;
-	uint32_t dmaresult, handle;
+	struct ccb_scsiio *cso;
+	uint32_t dmaresult, handle, xfrlen, sense_length, tmp;
 	uint8_t local[QENTRY_LEN];
=20
-	/*
-	 * Do some sanity checks.
-	 */
-	if (cso->dxfer_len =3D=3D 0) {
-		if ((ccb->ccb_h.flags & CAM_SEND_STATUS) =3D=3D 0) {
-			xpt_print(ccb->ccb_h.path, "a data transfer length of zero but no statu=
s to send is wrong\n");
-			ccb->ccb_h.status =3D CAM_REQ_INVALID;
-			xpt_done(ccb);
-			return;
-		}
-	}
-
 	tptr =3D get_lun_statep(isp, XS_CHANNEL(ccb), XS_LUN(ccb));
 	if (tptr =3D=3D NULL) {
 		tptr =3D get_lun_statep(isp, XS_CHANNEL(ccb), CAM_LUN_WILDCARD);
 		if (tptr =3D=3D NULL) {
-			xpt_print(ccb->ccb_h.path, "%s: [0x%x] cannot find tstate pointer in %s=
\n", __func__, cso->tag_id);
-			dump_tstates(isp, XS_CHANNEL(ccb));
+			isp_prt(isp, ISP_LOGERR, "%s: [0x%x] cannot find tstate pointer", __fun=
c__, ccb->csio.tag_id);
 			ccb->ccb_h.status =3D CAM_DEV_NOT_THERE;
 			xpt_done(ccb);
 			return;
 		}
 	}
-
-	atp =3D isp_get_atpd(isp, tptr, cso->tag_id);
-	if (atp =3D=3D NULL) {
-		xpt_print(ccb->ccb_h.path, "%s: [0x%x] cannot find private data adjunct\=
n", __func__, cso->tag_id);
-		isp_dump_atpd(isp, tptr);
-		ccb->ccb_h.status =3D CAM_REQ_CMP_ERR;
-		xpt_done(ccb);
-		return;
-	}
-	if (atp->dead) {
-		xpt_print(ccb->ccb_h.path, "%s: [0x%x] stopping sending a CTIO for a dea=
d command\n", __func__, cso->tag_id);
-		ccb->ccb_h.status =3D CAM_REQ_ABORTED;
-		xpt_done(ccb);
-		return;
-	}
-
-	/*
-	 * Check to make sure we're still in target mode.
-	 */
-	if ((FCPARAM(isp, XS_CHANNEL(ccb))->role & ISP_ROLE_TARGET) =3D=3D 0) {
-		xpt_print(ccb->ccb_h.path, "%s: [0x%x] stopping sending a CTIO because w=
e're no longer in target mode\n", __func__, cso->tag_id);
-		ccb->ccb_h.status =3D CAM_PROVIDE_FAIL;
-		xpt_done(ccb);
-		return;
-	}
-
-	/*
-	 * Get some resources
-	 */
-	if (isp_get_pcmd(isp, ccb)) {
-		rls_lun_statep(isp, tptr);
-		xpt_print(ccb->ccb_h.path, "out of PCMDs\n");
-		cam_freeze_devq(ccb->ccb_h.path);
-		cam_release_devq(ccb->ccb_h.path, RELSIM_RELEASE_AFTER_TIMEOUT, 0, 250, =
0);
-		ccb->ccb_h.status =3D CAM_REQUEUE_REQ;
-		xpt_done(ccb);
-		return;
-	}
-	qe =3D isp_getrqentry(isp);
-	if (qe =3D=3D NULL) {
-		xpt_print(ccb->ccb_h.path, rqo, __func__);
-		cam_freeze_devq(ccb->ccb_h.path);
-		cam_release_devq(ccb->ccb_h.path, RELSIM_RELEASE_AFTER_TIMEOUT, 0, 250, =
0);
-		ccb->ccb_h.status =3D CAM_REQUEUE_REQ;
-		goto out;
-	}
-	memset(local, 0, QENTRY_LEN);
-
-	/*
-	 * We're either moving data or completing a command here.
-	 */
-	if (IS_24XX(isp)) {
-		ct7_entry_t *cto =3D (ct7_entry_t *) local;
-
-		cto->ct_header.rqs_entry_type =3D RQSTYPE_CTIO7;
-		cto->ct_header.rqs_entry_count =3D 1;
-		cto->ct_header.rqs_seqno =3D 1;
-		cto->ct_nphdl =3D atp->nphdl;
-		cto->ct_rxid =3D atp->tag;
-		cto->ct_iid_lo =3D atp->portid;
-		cto->ct_iid_hi =3D atp->portid >> 16;
-		cto->ct_oxid =3D atp->oxid;
-		cto->ct_vpidx =3D ISP_GET_VPIDX(isp, XS_CHANNEL(ccb));
-		cto->ct_scsi_status =3D cso->scsi_status;
-		cto->ct_timeout =3D 120;
-		cto->ct_flags =3D atp->tattr << CT7_TASK_ATTR_SHIFT;
+	isp_prt(isp, ISP_LOGTDEBUG0, "%s: ENTRY[0x%x] how %u xfrlen %u sendstatus=
 %d sense_len %u", __func__, ccb->csio.tag_id, how, ccb->csio.dxfer_len,
+	    (ccb->ccb_h.flags & CAM_SEND_STATUS) !=3D 0, ((ccb->ccb_h.flags & CAM=
_SEND_SENSE)? ccb->csio.sense_len : 0));
+
+	switch (how) {
+	case FROM_TIMER:
+	case FROM_CAM:
+		/*
+		 * Insert at the tail of the list, if any, waiting CTIO CCBs
+		 */
+		TAILQ_INSERT_TAIL(&tptr->waitq, &ccb->ccb_h, periph_links.tqe);=20
+		break;
+	case FROM_SRR:
+	case FROM_CTIO_DONE:
+		TAILQ_INSERT_HEAD(&tptr->waitq, &ccb->ccb_h, periph_links.tqe);=20
+		break;
+	}
+
+	while (TAILQ_FIRST(&tptr->waitq) !=3D NULL) {
+		ccb =3D (union ccb *) TAILQ_FIRST(&tptr->waitq);
+		TAILQ_REMOVE(&tptr->waitq, &ccb->ccb_h, periph_links.tqe);
+
+		cso =3D &ccb->csio;
+		xfrlen =3D cso->dxfer_len;
+		if (xfrlen =3D=3D 0) {
+			if ((ccb->ccb_h.flags & CAM_SEND_STATUS) =3D=3D 0) {
+				ISP_PATH_PRT(isp, ISP_LOGERR, ccb->ccb_h.path, "a data transfer length=
 of zero but no status to send is wrong\n");
+				ccb->ccb_h.status =3D CAM_REQ_INVALID;
+				xpt_done(ccb);
+				continue;
+			}
+		}
+
+		atp =3D isp_get_atpd(isp, tptr, cso->tag_id);
+		if (atp =3D=3D NULL) {
+			isp_prt(isp, ISP_LOGERR, "%s: [0x%x] cannot find private data adjunct i=
n %s", __func__, cso->tag_id, __func__);
+			isp_dump_atpd(isp, tptr);
+			ccb->ccb_h.status =3D CAM_REQ_CMP_ERR;
+			xpt_done(ccb);
+			continue;
+		}
+
+		/*
+		 * Is this command a dead duck?
+		 */
+		if (atp->dead) {
+			isp_prt(isp, ISP_LOGERR, "%s: [0x%x] not sending a CTIO for a dead comm=
and", __func__, cso->tag_id);
+			ccb->ccb_h.status =3D CAM_REQ_ABORTED;
+			xpt_done(ccb);
+			continue;
+		}
+
+		/*
+		 * Check to make sure we're still in target mode.
+		 */
+		fcp =3D FCPARAM(isp, XS_CHANNEL(ccb));
+		if ((fcp->role & ISP_ROLE_TARGET) =3D=3D 0) {
+			isp_prt(isp, ISP_LOGERR, "%s: [0x%x] stopping sending a CTIO because we=
're no longer in target mode", __func__, cso->tag_id);
+			ccb->ccb_h.status =3D CAM_PROVIDE_FAIL;
+			xpt_done(ccb);
+			continue;
+		}
+
+		/*
+		 * We're only handling ATPD_CCB_OUTSTANDING outstanding CCB at a time (o=
ne of which
+		 * could be split into two CTIOs to split data and status).
+		 */
+		if (atp->ctcnt >=3D ATPD_CCB_OUTSTANDING) {
+			isp_prt(isp, ISP_LOGTINFO, "[0x%x] handling only %d CCBs at a time (fla=
gs for this ccb: 0x%x)", cso->tag_id, ATPD_CCB_OUTSTANDING, ccb->ccb_h.flag=
s);
+			TAILQ_INSERT_HEAD(&tptr->waitq, &ccb->ccb_h, periph_links.tqe);=20
+			break;
+		}
+
+		/*
+		 * Does the initiator expect FC-Tape style responses?
+		 */
+		if ((atp->word3 & PRLI_WD3_RETRY) && fcp->fctape_enabled) {
+			fctape =3D 1;
+		} else {
+			fctape =3D 0;
+		}
+
+		/*
+		 * If we already did the data xfer portion of a CTIO that sends data
+		 * and status, don't do it again and do the status portion now.
+		 */
+		if (atp->sendst) {
+			isp_prt(isp, ISP_LOGTINFO, "[0x%x] now sending synthesized status orig_=
dl=3D%u xfered=3D%u bit=3D%u",
+			    cso->tag_id, atp->orig_datalen, atp->bytes_xfered, atp->bytes_in_tr=
ansit);
+			xfrlen =3D 0;	/* we already did the data transfer */
+			atp->sendst =3D 0;
+		}
 		if (ccb->ccb_h.flags & CAM_SEND_STATUS) {
-			cto->ct_flags |=3D CT7_SENDSTATUS;
-		}
-		if (cso->dxfer_len =3D=3D 0) {
-			cto->ct_flags |=3D CT7_FLAG_MODE1 | CT7_NO_DATA;
-			if ((ccb->ccb_h.flags & CAM_SEND_SENSE) !=3D 0) {
-				int m =3D min(cso->sense_len, sizeof (struct scsi_sense_data));
-				cto->rsp.m1.ct_resplen =3D cto->ct_senselen =3D min(m, MAXRESPLEN_24XX=
);
-				memcpy(cto->rsp.m1.ct_resp, &cso->sense_data, cto->ct_senselen);
-				cto->ct_scsi_status |=3D (FCP_SNSLEN_VALID << 8);
+			sendstatus =3D 1;
+		} else {
+			sendstatus =3D 0;
+		}
+
+		if (ccb->ccb_h.flags & CAM_SEND_SENSE) {
+			KASSERT((sendstatus !=3D 0), ("how can you have CAM_SEND_SENSE w/o CAM_=
SEND_STATUS?"));
+			/*
+			 * Sense length is not the entire sense data structure size. Periph
+			 * drivers don't seem to be setting sense_len to reflect the actual
+			 * size. We'll peek inside to get the right amount.
+			 */
+			sense_length =3D cso->sense_len;
+
+			/*
+			 * This 'cannot' happen
+			 */
+			if (sense_length > (XCMD_SIZE - MIN_FCP_RESPONSE_SIZE)) {
+				sense_length =3D XCMD_SIZE - MIN_FCP_RESPONSE_SIZE;
 			}
 		} else {
-			cto->ct_flags |=3D CT7_FLAG_MODE0;
-			if ((cso->ccb_h.flags & CAM_DIR_MASK) =3D=3D CAM_DIR_IN) {
-				cto->ct_flags |=3D CT7_DATA_IN;
+			sense_length =3D 0;
+		}
+
+		memset(local, 0, QENTRY_LEN);
+
+		/*
+		 * Check for overflow
+		 */
+		tmp =3D atp->bytes_xfered + atp->bytes_in_transit + xfrlen;
+		if (tmp > atp->orig_datalen) {
+			isp_prt(isp, ISP_LOGERR, "%s: [0x%x] data overflow by %u bytes", __func=
__, cso->tag_id, tmp - atp->orig_datalen);
+			ccb->ccb_h.status =3D CAM_DATA_RUN_ERR;
+			xpt_done(ccb);
+			continue;
+		}
+
+		if (IS_24XX(isp)) {
+			ct7_entry_t *cto =3D (ct7_entry_t *) local;
+
+			cto->ct_header.rqs_entry_type =3D RQSTYPE_CTIO7;
+			cto->ct_header.rqs_entry_count =3D 1;
+			cto->ct_header.rqs_seqno |=3D ATPD_SEQ_NOTIFY_CAM;
+			ATPD_SET_SEQNO(cto, atp);
+			cto->ct_nphdl =3D atp->nphdl;
+			cto->ct_rxid =3D atp->tag;
+			cto->ct_iid_lo =3D atp->portid;
+			cto->ct_iid_hi =3D atp->portid >> 16;
+			cto->ct_oxid =3D atp->oxid;
+			cto->ct_vpidx =3D ISP_GET_VPIDX(isp, XS_CHANNEL(ccb));
+			cto->ct_timeout =3D 120;
+			cto->ct_flags =3D atp->tattr << CT7_TASK_ATTR_SHIFT;
+
+			/*
+			 * Mode 1, status, no data. Only possible when we are sending status, h=
ave
+			 * no data to transfer, and any sense length can fit in the ct7_entry.
+			 *
+			 * Mode 2, status, no data. We have to use this in the case sense data
+			 * won't fit into a ct7_entry_t.
+			 *
+			 */
+			if (sendstatus && xfrlen =3D=3D 0) {
+				cto->ct_flags |=3D CT7_SENDSTATUS | CT7_NO_DATA;
+				resid =3D atp->orig_datalen - atp->bytes_xfered - atp->bytes_in_transi=
t;
+				if (sense_length <=3D MAXRESPLEN_24XX) {
+					if (resid < 0) {
+						cto->ct_resid =3D -resid;
+					} else if (resid > 0) {
+						cto->ct_resid =3D resid;
+					}
+					cto->ct_flags |=3D CT7_FLAG_MODE1;
+					cto->ct_scsi_status =3D cso->scsi_status;
+					if (resid < 0) {
+						cto->ct_scsi_status |=3D (FCP_RESID_OVERFLOW << 8);
+					} else if (resid > 0) {
+						cto->ct_scsi_status |=3D (FCP_RESID_UNDERFLOW << 8);
+					}
+					if (fctape) {
+						cto->ct_flags |=3D CT7_CONFIRM|CT7_EXPLCT_CONF;
+					}
+					if (sense_length) {
+						cto->ct_scsi_status |=3D (FCP_SNSLEN_VALID << 8);
+						cto->rsp.m1.ct_resplen =3D cto->ct_senselen =3D sense_length;
+						memcpy(cto->rsp.m1.ct_resp, &cso->sense_data, sense_length);
+					}
+				} else {
+					bus_addr_t addr;
+					char buf[XCMD_SIZE];
+					fcp_rsp_iu_t *rp;
+
+					if (atp->ests =3D=3D NULL) {
+						atp->ests =3D isp_get_ecmd(isp);
+						if (atp->ests =3D=3D NULL) {
+							TAILQ_INSERT_HEAD(&tptr->waitq, &ccb->ccb_h, periph_links.tqe);=20
+							break;
+						}
+					}
+					memset(buf, 0, sizeof (buf));
+					rp =3D (fcp_rsp_iu_t *)buf;
+					if (fctape) {
+						cto->ct_flags |=3D CT7_CONFIRM|CT7_EXPLCT_CONF;
+						rp->fcp_rsp_bits |=3D FCP_CONF_REQ;
+					}
+					cto->ct_flags |=3D CT7_FLAG_MODE2;
+	        			rp->fcp_rsp_scsi_status =3D cso->scsi_status;
+					if (resid < 0) {
+						rp->fcp_rsp_resid =3D -resid;
+						rp->fcp_rsp_bits |=3D FCP_RESID_OVERFLOW;
+					} else if (resid > 0) {
+						rp->fcp_rsp_resid =3D resid;
+						rp->fcp_rsp_bits |=3D FCP_RESID_UNDERFLOW;
+					}
+					if (sense_length) {
+	        				rp->fcp_rsp_snslen =3D sense_length;
+						cto->ct_senselen =3D sense_length;
+						rp->fcp_rsp_bits |=3D FCP_SNSLEN_VALID;
+						isp_put_fcp_rsp_iu(isp, rp, atp->ests);
+						memcpy(((fcp_rsp_iu_t *)atp->ests)->fcp_rsp_extra, &cso->sense_data,=
 sense_length);
+					} else {
+						isp_put_fcp_rsp_iu(isp, rp, atp->ests);
+					}
+					if (isp->isp_dblev & ISP_LOGTDEBUG1) {
+						isp_print_bytes(isp, "FCP Response Frame After Swizzling", MIN_FCP_R=
ESPONSE_SIZE + sense_length, atp->ests);
+					}
+					addr =3D isp->isp_osinfo.ecmd_dma;
+					addr +=3D ((((isp_ecmd_t *)atp->ests) - isp->isp_osinfo.ecmd_base) * =
XCMD_SIZE);
+					isp_prt(isp, ISP_LOGTDEBUG0, "%s: ests base %p vaddr %p ecmd_dma %jx =
addr %jx len %u", __func__, isp->isp_osinfo.ecmd_base, atp->ests,
+					    (uintmax_t) isp->isp_osinfo.ecmd_dma, (uintmax_t)addr, MIN_FCP_RE=
SPONSE_SIZE + sense_length);
+					cto->rsp.m2.ct_datalen =3D MIN_FCP_RESPONSE_SIZE + sense_length;
+					cto->rsp.m2.ct_fcp_rsp_iudata.ds_base =3D DMA_LO32(addr);
+					cto->rsp.m2.ct_fcp_rsp_iudata.ds_basehi =3D DMA_HI32(addr);
+					cto->rsp.m2.ct_fcp_rsp_iudata.ds_count =3D MIN_FCP_RESPONSE_SIZE + se=
nse_length;
+				}
+				if (sense_length) {
+					isp_prt(isp, ISP_LOGTDEBUG0, "%s: CTIO7[0x%x] seq %u nc %d CDB0=3D%x =
sstatus=3D0x%x flags=3D0x%x resid=3D%d slen %u sense: %x %x/%x/%x", __func_=
_,
+					    cto->ct_rxid, ATPD_GET_SEQNO(cto), ATPD_GET_NCAM(cto), atp->cdb0,=
 cto->ct_scsi_status, cto->ct_flags, cto->ct_resid, sense_length,
+					    cso->sense_data.error_code, cso->sense_data.sense_buf[1], cso->se=
nse_data.sense_buf[11], cso->sense_data.sense_buf[12]);
+				} else {
+					isp_prt(isp, ISP_LOGDEBUG0, "%s: CTIO7[0x%x] seq %u nc %d CDB0=3D%x s=
status=3D0x%x flags=3D0x%x resid=3D%d", __func__,
+					    cto->ct_rxid, ATPD_GET_SEQNO(cto), ATPD_GET_NCAM(cto), atp->cdb0,=
 cto->ct_scsi_status, cto->ct_flags, cto->ct_resid);
+				}
+				atp->state =3D ATPD_STATE_LAST_CTIO;
+			}
+
+			/*
+			 * Mode 0 data transfers, *possibly* with status.
+			 */
+			if (xfrlen !=3D 0) {
+				cto->ct_flags |=3D CT7_FLAG_MODE0;
+				if ((cso->ccb_h.flags & CAM_DIR_MASK) =3D=3D CAM_DIR_IN) {
+					cto->ct_flags |=3D CT7_DATA_IN;
+				} else {
+					cto->ct_flags |=3D CT7_DATA_OUT;
+				}
+
+				cto->rsp.m0.reloff =3D atp->bytes_xfered + atp->bytes_in_transit;
+				cto->rsp.m0.ct_xfrlen =3D xfrlen;
+
+#ifdef	DEBUG
+				if (ISP_FC_PC(isp, XS_CHANNEL(ccb))->inject_lost_data_frame && xfrlen =
> ISP_FC_PC(isp, XS_CHANNEL(ccb))->inject_lost_data_frame) {
+					isp_prt(isp, ISP_LOGWARN, "%s: truncating data frame with xfrlen %d t=
o %d", __func__, xfrlen, xfrlen - (xfrlen >> 2));
+					ISP_FC_PC(isp, XS_CHANNEL(ccb))->inject_lost_data_frame =3D 0;
+					cto->rsp.m0.ct_xfrlen -=3D xfrlen >> 2;
+				}
+#endif
+				if (sendstatus) {
+					resid =3D atp->orig_datalen - atp->bytes_xfered - xfrlen;
+					if (cso->scsi_status =3D=3D SCSI_STATUS_OK && resid =3D=3D 0 /* && fc=
tape =3D=3D 0 */) {
+						cto->ct_flags |=3D CT7_SENDSTATUS;
+						atp->state =3D ATPD_STATE_LAST_CTIO;
+						if (fctape) {
+							cto->ct_flags |=3D CT7_CONFIRM|CT7_EXPLCT_CONF;
+						}
+					} else {
+						atp->sendst =3D 1;	/* send status later */
+						cto->ct_header.rqs_seqno &=3D ~ATPD_SEQ_NOTIFY_CAM;
+						atp->state =3D ATPD_STATE_CTIO;
+					}
+				} else {
+					atp->state =3D ATPD_STATE_CTIO;
+				}
+				isp_prt(isp, ISP_LOGTDEBUG0, "%s: CTIO7[0x%x] seq %u nc %d CDB0=3D%x s=
status=3D0x%x flags=3D0x%x xfrlen=3D%u off=3D%u", __func__,
+				    cto->ct_rxid, ATPD_GET_SEQNO(cto), ATPD_GET_NCAM(cto), atp->cdb0, =
cto->ct_scsi_status, cto->ct_flags, xfrlen, atp->bytes_xfered);
+			}
+		} else if (IS_FC(isp)) {
+			ct2_entry_t *cto =3D (ct2_entry_t *) local;
+
+			if (isp->isp_osinfo.sixtyfourbit)
+				cto->ct_header.rqs_entry_type =3D RQSTYPE_CTIO3;
+			else
+				cto->ct_header.rqs_entry_type =3D RQSTYPE_CTIO2;
+			cto->ct_header.rqs_entry_count =3D 1;
+			cto->ct_header.rqs_seqno |=3D ATPD_SEQ_NOTIFY_CAM;
+			ATPD_SET_SEQNO(cto, atp);
+			if (ISP_CAP_2KLOGIN(isp) =3D=3D 0) {
+				((ct2e_entry_t *)cto)->ct_iid =3D cso->init_id;
 			} else {
-				cto->ct_flags |=3D CT7_DATA_OUT;
+				cto->ct_iid =3D cso->init_id;
+				if (ISP_CAP_SCCFW(isp) =3D=3D 0) {
+					cto->ct_lun =3D ccb->ccb_h.target_lun;
+				}
 			}
-			cto->rsp.m0.reloff =3D atp->bytes_xfered;
+			cto->ct_timeout =3D 10;
+			cto->ct_rxid =3D cso->tag_id;
+
 			/*
-			 * Don't overrun the limits placed on us
+			 * Mode 1, status, no data. Only possible when we are sending status, h=
ave
+			 * no data to transfer, and the sense length can fit in the ct7_entry.
+			 *
+			 * Mode 2, status, no data. We have to use this in the case the the res=
ponse
+			 * length won't fit into a ct2_entry_t.
+			 *
+			 * We'll fill out this structure with information as if this were a
+			 * Mode 1. The hardware layer will create the Mode 2 FCP RSP IU as
+			 * needed based upon this.
 			 */
-			if (atp->bytes_xfered + cso->dxfer_len > atp->orig_datalen) {
-				cso->dxfer_len =3D atp->orig_datalen - atp->bytes_xfered;
+			if (sendstatus && xfrlen =3D=3D 0) {
+				cto->ct_flags |=3D CT2_SENDSTATUS | CT2_NO_DATA;
+				resid =3D atp->orig_datalen - atp->bytes_xfered - atp->bytes_in_transi=
t;
+				if (sense_length <=3D MAXRESPLEN) {
+					if (resid < 0) {
+						cto->ct_resid =3D -resid;
+					} else if (resid > 0) {
+						cto->ct_resid =3D resid;
+					}
+					cto->ct_flags |=3D CT2_FLAG_MODE1;
+					cto->rsp.m1.ct_scsi_status =3D cso->scsi_status;
+					if (resid < 0) {
+						cto->rsp.m1.ct_scsi_status |=3D CT2_DATA_OVER;
+					} else if (resid > 0) {
+						cto->rsp.m1.ct_scsi_status |=3D CT2_DATA_UNDER;
+					}
+					if (fctape) {
+						cto->ct_flags |=3D CT2_CONFIRM;
+					}
+					if (sense_length) {
+						cto->rsp.m1.ct_scsi_status |=3D CT2_SNSLEN_VALID;
+						cto->rsp.m1.ct_resplen =3D cto->rsp.m1.ct_senselen =3D sense_length;
+						memcpy(cto->rsp.m1.ct_resp, &cso->sense_data, sense_length);
+					}
+				} else {
+					bus_addr_t addr;
+					char buf[XCMD_SIZE];
+					fcp_rsp_iu_t *rp;
+
+					if (atp->ests =3D=3D NULL) {
+						atp->ests =3D isp_get_ecmd(isp);
+						if (atp->ests =3D=3D NULL) {
+							TAILQ_INSERT_HEAD(&tptr->waitq, &ccb->ccb_h, periph_links.tqe);=20
+							break;
+						}
+					}
+					memset(buf, 0, sizeof (buf));
+					rp =3D (fcp_rsp_iu_t *)buf;
+					if (fctape) {
+						cto->ct_flags |=3D CT2_CONFIRM;
+						rp->fcp_rsp_bits |=3D FCP_CONF_REQ;
+					}
+					cto->ct_flags |=3D CT2_FLAG_MODE2;
+	        			rp->fcp_rsp_scsi_status =3D cso->scsi_status;
+					if (resid < 0) {
+						rp->fcp_rsp_resid =3D -resid;
+						rp->fcp_rsp_bits |=3D FCP_RESID_OVERFLOW;
+					} else if (resid > 0) {
+						rp->fcp_rsp_resid =3D resid;
+						rp->fcp_rsp_bits |=3D FCP_RESID_UNDERFLOW;
+					}
+					if (sense_length) {
+	        				rp->fcp_rsp_snslen =3D sense_length;
+						rp->fcp_rsp_bits |=3D FCP_SNSLEN_VALID;
+						isp_put_fcp_rsp_iu(isp, rp, atp->ests);
+						memcpy(((fcp_rsp_iu_t *)atp->ests)->fcp_rsp_extra, &cso->sense_data,=
 sense_length);
+					} else {
+						isp_put_fcp_rsp_iu(isp, rp, atp->ests);
+					}
+					if (isp->isp_dblev & ISP_LOGTDEBUG1) {
+						isp_print_bytes(isp, "FCP Response Frame After Swizzling", MIN_FCP_R=
ESPONSE_SIZE + sense_length, atp->ests);
+					}
+					addr =3D isp->isp_osinfo.ecmd_dma;
+					addr +=3D ((((isp_ecmd_t *)atp->ests) - isp->isp_osinfo.ecmd_base) * =
XCMD_SIZE);
+					isp_prt(isp, ISP_LOGTDEBUG0, "%s: ests base %p vaddr %p ecmd_dma %jx =
addr %jx len %u", __func__, isp->isp_osinfo.ecmd_base, atp->ests,
+					    (uintmax_t) isp->isp_osinfo.ecmd_dma, (uintmax_t)addr, MIN_FCP_RE=
SPONSE_SIZE + sense_length);
+					cto->rsp.m2.ct_datalen =3D MIN_FCP_RESPONSE_SIZE + sense_length;
+					if (isp->isp_osinfo.sixtyfourbit) {
+						cto->rsp.m2.u.ct_fcp_rsp_iudata_64.ds_base =3D DMA_LO32(addr);
+						cto->rsp.m2.u.ct_fcp_rsp_iudata_64.ds_basehi =3D DMA_HI32(addr);
+						cto->rsp.m2.u.ct_fcp_rsp_iudata_64.ds_count =3D MIN_FCP_RESPONSE_SIZ=
E + sense_length;
+					} else {
+						cto->rsp.m2.u.ct_fcp_rsp_iudata_32.ds_base =3D DMA_LO32(addr);
+						cto->rsp.m2.u.ct_fcp_rsp_iudata_32.ds_count =3D MIN_FCP_RESPONSE_SIZ=
E + sense_length;
+					}
+				}
+				if (sense_length) {
+					isp_prt(isp, ISP_LOGTDEBUG0, "%s: CTIO2[0x%x] seq %u nc %d CDB0=3D%x =
sstatus=3D0x%x flags=3D0x%x resid=3D%d sense: %x %x/%x/%x", __func__,
+					    cto->ct_rxid, ATPD_GET_SEQNO(cto), ATPD_GET_NCAM(cto), atp->cdb0,=
 cso->scsi_status, cto->ct_flags, cto->ct_resid,
+					    cso->sense_data.error_code, cso->sense_data.sense_buf[1], cso->se=
nse_data.sense_buf[11], cso->sense_data.sense_buf[12]);
+				} else {
+					isp_prt(isp, ISP_LOGTDEBUG0, "%s: CTIO2[0x%x] seq %u nc %d CDB0=3D%x =
sstatus=3D0x%x flags=3D0x%x resid=3D%d", __func__, cto->ct_rxid,
+					    ATPD_GET_SEQNO(cto), ATPD_GET_NCAM(cto), atp->cdb0, cso->scsi_sta=
tus, cto->ct_flags, cto->ct_resid);
+				}
+				atp->state =3D ATPD_STATE_LAST_CTIO;
 			}
-			atp->last_xframt =3D cso->dxfer_len;
-			cto->rsp.m0.ct_xfrlen =3D cso->dxfer_len;
-		}
-		if (cto->ct_flags & CT7_SENDSTATUS) {
-			int lvl =3D (cso->scsi_status)? ISP_LOGTINFO : ISP_LOGTDEBUG0;
-			cto->ct_resid =3D atp->orig_datalen - (atp->bytes_xfered + cso->dxfer_l=
en);
-			if (cto->ct_resid < 0) {
-				cto->ct_scsi_status |=3D (FCP_RESID_OVERFLOW << 8);
-			} else if (cto->ct_resid > 0) {
-				cto->ct_scsi_status |=3D (FCP_RESID_UNDERFLOW << 8);
+
+			if (xfrlen !=3D 0) {
+				cto->ct_flags |=3D CT2_FLAG_MODE0;
+				if ((cso->ccb_h.flags & CAM_DIR_MASK) =3D=3D CAM_DIR_IN) {
+					cto->ct_flags |=3D CT2_DATA_IN;
+				} else {
+					cto->ct_flags |=3D CT2_DATA_OUT;
+				}
+
+				cto->ct_reloff =3D atp->bytes_xfered + atp->bytes_in_transit;
+				cto->rsp.m0.ct_xfrlen =3D xfrlen;
+
+				if (sendstatus) {
+					resid =3D atp->orig_datalen - atp->bytes_xfered - xfrlen;
+					if (cso->scsi_status =3D=3D SCSI_STATUS_OK && resid =3D=3D 0 /*&& fct=
ape =3D=3D 0*/) {
+						cto->ct_flags |=3D CT2_SENDSTATUS;
+						atp->state =3D ATPD_STATE_LAST_CTIO;
+						if (fctape) {
+							cto->ct_flags |=3D CT2_CONFIRM;
+						}
+					} else {
+						atp->sendst =3D 1;	/* send status later */
+						cto->ct_header.rqs_seqno &=3D ~ATPD_SEQ_NOTIFY_CAM;
+						atp->state =3D ATPD_STATE_CTIO;
+					}
+				} else {
+					atp->state =3D ATPD_STATE_CTIO;
+				}
 			}
-			atp->state =3D ATPD_STATE_LAST_CTIO;
-			ISP_PATH_PRT(isp, lvl, cso->ccb_h.path, "%s: CTIO7[%x] CDB0=3D%x scsi s=
tatus %x flags %x resid %d xfrlen %u offset %u\n", __func__, cto->ct_rxid,
-			    atp->cdb0, cto->ct_scsi_status, cto->ct_flags, cto->ct_resid, cso->=
dxfer_len, atp->bytes_xfered);
+			isp_prt(isp, ISP_LOGTDEBUG0, "%s: CTIO2[%x] seq %u nc %d CDB0=3D%x scsi=
 status %x flags %x resid %d xfrlen %u offset %u", __func__, cto->ct_rxid,
+			    ATPD_GET_SEQNO(cto), ATPD_GET_NCAM(cto), atp->cdb0, cso->scsi_statu=
s, cto->ct_flags, cto->ct_resid, cso->dxfer_len, atp->bytes_xfered);
 		} else {
-			cto->ct_resid =3D 0;
-			ISP_PATH_PRT(isp, ISP_LOGTDEBUG0, cso->ccb_h.path, "%s: CTIO7[%x] flags=
 %x xfrlen %u offset %u\n", __func__, cto->ct_rxid, cto->ct_flags,
-			    cso->dxfer_len, atp->bytes_xfered);
-			atp->state =3D ATPD_STATE_CTIO;
-		}
-	} else if (IS_FC(isp)) {
-		ct2_entry_t *cto =3D (ct2_entry_t *) local;
-
-		cto->ct_header.rqs_entry_type =3D RQSTYPE_CTIO2;
-		cto->ct_header.rqs_entry_count =3D 1;
-		cto->ct_header.rqs_seqno =3D 1;
-		if (ISP_CAP_2KLOGIN(isp) =3D=3D 0) {
-			((ct2e_entry_t *)cto)->ct_iid =3D cso->init_id;
+			ct_entry_t *cto =3D (ct_entry_t *) local;
+
+			cto->ct_header.rqs_entry_type =3D RQSTYPE_CTIO;
+			cto->ct_header.rqs_entry_count =3D 1;
+			cto->ct_header.rqs_seqno |=3D ATPD_SEQ_NOTIFY_CAM;
+			ATPD_SET_SEQNO(cto, atp);
+			cto->ct_iid =3D cso->init_id;
+			cto->ct_iid |=3D XS_CHANNEL(ccb) << 7;
+			cto->ct_tgt =3D ccb->ccb_h.target_id;
+			cto->ct_lun =3D ccb->ccb_h.target_lun;
+			cto->ct_fwhandle =3D cso->tag_id;
+			if (atp->rxid) {
+				cto->ct_tag_val =3D atp->rxid;
+				cto->ct_flags |=3D CT_TQAE;
+			}
+			if (ccb->ccb_h.flags & CAM_DIS_DISCONNECT) {
+				cto->ct_flags |=3D CT_NODISC;
+			}
+			if (cso->dxfer_len =3D=3D 0) {
+				cto->ct_flags |=3D CT_NO_DATA;
+			} else if ((cso->ccb_h.flags & CAM_DIR_MASK) =3D=3D CAM_DIR_IN) {
+				cto->ct_flags |=3D CT_DATA_IN;
+			} else {
+				cto->ct_flags |=3D CT_DATA_OUT;
+			}
+			if (ccb->ccb_h.flags & CAM_SEND_STATUS) {
+				cto->ct_flags |=3D CT_SENDSTATUS|CT_CCINCR;
+				cto->ct_scsi_status =3D cso->scsi_status;
+				cto->ct_resid =3D atp->orig_datalen - atp->bytes_xfered - atp->bytes_i=
n_transit - xfrlen;
+				isp_prt(isp, ISP_LOGTDEBUG0, "%s: CTIO[%x] seq %u nc %d scsi status %x=
 resid %d tag_id %x", __func__,
+				    cto->ct_fwhandle, ATPD_GET_SEQNO(cto), ATPD_GET_NCAM(cto), cso->sc=
si_status, cso->resid, cso->tag_id);
+			}
+			ccb->ccb_h.flags &=3D ~CAM_SEND_SENSE;
+			cto->ct_timeout =3D 10;
+		}
+
+		if (isp_get_pcmd(isp, ccb)) {
+			ISP_PATH_PRT(isp, ISP_LOGWARN, ccb->ccb_h.path, "out of PCMDs\n");
+			TAILQ_INSERT_HEAD(&tptr->waitq, &ccb->ccb_h, periph_links.tqe);=20
+			break;
+		}
+		if (isp_allocate_xs_tgt(isp, ccb, &handle)) {
+			ISP_PATH_PRT(isp, ISP_LOGWARN, ccb->ccb_h.path, "No XFLIST pointers for=
 %s\n", __func__);
+			TAILQ_INSERT_HEAD(&tptr->waitq, &ccb->ccb_h, periph_links.tqe);=20
+			isp_free_pcmd(isp, ccb);
+			break;
+		}
+		atp->bytes_in_transit +=3D xfrlen;
+		PISP_PCMD(ccb)->datalen =3D xfrlen;
+
+
+		/*
+		 * Call the dma setup routines for this entry (and any subsequent
+		 * CTIOs) if there's data to move, and then tell the f/w it's got
+		 * new things to play with. As with isp_start's usage of DMA setup,
+		 * any swizzling is done in the machine dependent layer. Because
+		 * of this, we put the request onto the queue area first in native
+		 * format.
+		 */
+
+		if (IS_24XX(isp)) {
+			ct7_entry_t *cto =3D (ct7_entry_t *) local;
+			cto->ct_syshandle =3D handle;
+		} else if (IS_FC(isp)) {
+			ct2_entry_t *cto =3D (ct2_entry_t *) local;
+			cto->ct_syshandle =3D handle;
 		} else {
-			cto->ct_iid =3D cso->init_id;
-			if (ISP_CAP_SCCFW(isp) =3D=3D 0) {
-				cto->ct_lun =3D ccb->ccb_h.target_lun;
+			ct_entry_t *cto =3D (ct_entry_t *) local;
+			cto->ct_syshandle =3D handle;
+		}
+
+		dmaresult =3D ISP_DMASETUP(isp, cso, (ispreq_t *) local);
+		if (dmaresult !=3D CMD_QUEUED) {
+			isp_destroy_tgt_handle(isp, handle);
+			isp_free_pcmd(isp, ccb);
+			if (dmaresult =3D=3D CMD_EAGAIN) {
+				TAILQ_INSERT_HEAD(&tptr->waitq, &ccb->ccb_h, periph_links.tqe);=20
+				break;
 			}
-		}
-
-
-		cto->ct_rxid =3D cso->tag_id;
-		if (cso->dxfer_len =3D=3D 0) {
-			cto->ct_flags |=3D CT2_FLAG_MODE1 | CT2_NO_DATA | CT2_SENDSTATUS;
-			cto->rsp.m1.ct_scsi_status =3D cso->scsi_status;
-			cto->ct_resid =3D atp->orig_datalen - atp->bytes_xfered;
-			if (cto->ct_resid < 0) {
-				cto->rsp.m1.ct_scsi_status |=3D CT2_DATA_OVER;
-			} else if (cto->ct_resid > 0) {
-				cto->rsp.m1.ct_scsi_status |=3D CT2_DATA_UNDER;
-			}
-			if ((ccb->ccb_h.flags & CAM_SEND_SENSE) !=3D 0) {
-				int m =3D min(cso->sense_len, MAXRESPLEN);
-				memcpy(cto->rsp.m1.ct_resp, &cso->sense_data, m);
-				cto->rsp.m1.ct_senselen =3D m;
-				cto->rsp.m1.ct_scsi_status |=3D CT2_SNSLEN_VALID;
-			} else if (cso->scsi_status =3D=3D SCSI_STATUS_CHECK_COND) {
-				/*
-				 * XXX: DEBUG
-				 */
-				xpt_print(ccb->ccb_h.path, "CHECK CONDITION being sent without associa=
ted SENSE DATA for CDB=3D0x%x\n", atp->cdb0);
-			}
+			ccb->ccb_h.status =3D CAM_REQ_CMP_ERR;
+			xpt_done(ccb);
+			continue;
+		}
+		isp->isp_nactive++;
+		ccb->ccb_h.status =3D CAM_REQ_INPROG | CAM_SIM_QUEUED;
+		if (xfrlen) {
+			ccb->ccb_h.spriv_field0 =3D atp->bytes_xfered;
 		} else {
-			cto->ct_flags |=3D CT2_FLAG_MODE0;
-			if ((cso->ccb_h.flags & CAM_DIR_MASK) =3D=3D CAM_DIR_IN) {
-				cto->ct_flags |=3D CT2_DATA_IN;
-			} else {
-				cto->ct_flags |=3D CT2_DATA_OUT;
-			}
-			cto->ct_reloff =3D atp->bytes_xfered;
-			cto->rsp.m0.ct_xfrlen =3D cso->dxfer_len;
-			/*
-			 * Don't overrun the limits placed on us
-			 */
-			if (atp->bytes_xfered + cso->dxfer_len > atp->orig_datalen) {
-				cso->dxfer_len =3D atp->orig_datalen - atp->bytes_xfered;
-			}
-			if ((ccb->ccb_h.flags & CAM_SEND_STATUS) !=3D 0) {
-				cto->ct_flags |=3D CT2_SENDSTATUS;
-				cto->rsp.m0.ct_scsi_status =3D cso->scsi_status;
-				cto->ct_resid =3D atp->orig_datalen - (atp->bytes_xfered + cso->dxfer_=
len);
-				if (cto->ct_resid < 0) {
-					cto->rsp.m0.ct_scsi_status |=3D CT2_DATA_OVER;
-				} else if (cto->ct_resid > 0) {
-					cto->rsp.m0.ct_scsi_status |=3D CT2_DATA_UNDER;
-				}
-			} else {
-				atp->last_xframt =3D cso->dxfer_len;
-			}
-			/*
-			 * If we're sending data and status back together,
-			 * we can't also send back sense data as well.
-			 */
-			ccb->ccb_h.flags &=3D ~CAM_SEND_SENSE;
-		}
-
-		if (cto->ct_flags & CT2_SENDSTATUS) {
-			int lvl =3D (cso->scsi_status)? ISP_LOGTINFO : ISP_LOGTDEBUG0;
-			cto->ct_flags |=3D CT2_CCINCR;
-			atp->state =3D ATPD_STATE_LAST_CTIO;
-			ISP_PATH_PRT(isp, lvl, cso->ccb_h.path, "%s: CTIO2[%x] CDB0=3D%x scsi s=
tatus %x flags %x resid %d xfrlen %u offset %u\n", __func__, cto->ct_rxid,
-			    atp->cdb0, cto->rsp.m0.ct_scsi_status, cto->ct_flags, cto->ct_resid=
, cso->dxfer_len, atp->bytes_xfered);
-		} else {
-			cto->ct_resid =3D 0;
-			atp->state =3D ATPD_STATE_CTIO;
-			ISP_PATH_PRT(isp, ISP_LOGTDEBUG0, ccb->ccb_h.path, "%s: CTIO2[%x] flags=
 %x xfrlen %u offset %u\n", __func__, cto->ct_rxid, cto->ct_flags,
-			    cso->dxfer_len, atp->bytes_xfered);
-		}
-		cto->ct_timeout =3D 10;
-	} else {
-		ct_entry_t *cto =3D (ct_entry_t *) local;
-
-		cto->ct_header.rqs_entry_type =3D RQSTYPE_CTIO;
-		cto->ct_header.rqs_entry_count =3D 1;
-		cto->ct_header.rqs_seqno =3D 1;
-		cto->ct_iid =3D cso->init_id;
-		cto->ct_iid |=3D XS_CHANNEL(ccb) << 7;
-		cto->ct_tgt =3D ccb->ccb_h.target_id;
-		cto->ct_lun =3D ccb->ccb_h.target_lun;
-		cto->ct_fwhandle =3D cso->tag_id >> 16;
-		if (AT_HAS_TAG(cso->tag_id)) {
-			cto->ct_tag_val =3D cso->tag_id;
-			cto->ct_flags |=3D CT_TQAE;
-		}
-		if (ccb->ccb_h.flags & CAM_DIS_DISCONNECT) {
-			cto->ct_flags |=3D CT_NODISC;
-		}
-		if (cso->dxfer_len =3D=3D 0) {
-			cto->ct_flags |=3D CT_NO_DATA;
-		} else if ((cso->ccb_h.flags & CAM_DIR_MASK) =3D=3D CAM_DIR_IN) {
-			cto->ct_flags |=3D CT_DATA_IN;
-		} else {
-			cto->ct_flags |=3D CT_DATA_OUT;
-		}
-		if (ccb->ccb_h.flags & CAM_SEND_STATUS) {
-			cto->ct_flags |=3D CT_SENDSTATUS|CT_CCINCR;
-			cto->ct_scsi_status =3D cso->scsi_status;
-			cto->ct_resid =3D cso->resid;
-			ISP_PATH_PRT(isp, ISP_LOGTDEBUG0, ccb->ccb_h.path, "%s: CTIO[%x] scsi s=
tatus %x resid %d tag_id %x\n", __func__,
-			    cto->ct_fwhandle, cso->scsi_status, cso->resid, cso->tag_id);
-		}
-		ccb->ccb_h.flags &=3D ~CAM_SEND_SENSE;
-		cto->ct_timeout =3D 10;
-	}
-
-	if (isp_allocate_xs_tgt(isp, ccb, &handle)) {
-		xpt_print(ccb->ccb_h.path, "No XFLIST pointers for %s\n", __func__);
-		ccb->ccb_h.status =3D CAM_REQUEUE_REQ;
-		goto out;
-	}
-
-
-	/*
-	 * Call the dma setup routines for this entry (and any subsequent
-	 * CTIOs) if there's data to move, and then tell the f/w it's got
-	 * new things to play with. As with isp_start's usage of DMA setup,
-	 * any swizzling is done in the machine dependent layer. Because
-	 * of this, we put the request onto the queue area first in native
-	 * format.
-	 */
-
-	if (IS_24XX(isp)) {
-		ct7_entry_t *cto =3D (ct7_entry_t *) local;
-		cto->ct_syshandle =3D handle;
-	} else if (IS_FC(isp)) {
-		ct2_entry_t *cto =3D (ct2_entry_t *) local;
-		cto->ct_syshandle =3D handle;
-	} else {
-		ct_entry_t *cto =3D (ct_entry_t *) local;
-		cto->ct_syshandle =3D handle;
-	}
-
-	dmaresult =3D ISP_DMASETUP(isp, cso, (ispreq_t *) local);
-	if (dmaresult =3D=3D CMD_QUEUED) {
-		isp->isp_nactive++;
-		ccb->ccb_h.status |=3D CAM_SIM_QUEUED;
-		rls_lun_statep(isp, tptr);
-		return;
-	}
-	if (dmaresult =3D=3D CMD_EAGAIN) {
-		ccb->ccb_h.status =3D CAM_REQUEUE_REQ;
-	} else {
-		ccb->ccb_h.status =3D CAM_REQ_CMP_ERR;
-	}
-	isp_destroy_tgt_handle(isp, handle);
-out:
+			ccb->ccb_h.spriv_field0 =3D ~0;
+		}
+		atp->ctcnt++;
+		atp->seqno++;
+	}
 	rls_lun_statep(isp, tptr);
-	isp_free_pcmd(isp, ccb);
-	xpt_done(ccb);
 }
=20
 static void
@@ -1837,6 +2099,21 @@
 }
=20
 static void
+isp_refire_notify_ack(void *arg)
+{
+	isp_tna_t *tp  =3D arg;
+	ispsoftc_t *isp =3D tp->isp;
+	ISP_LOCK(isp);
+	if (isp_notify_ack(isp, tp->not)) {
+		(void) timeout(isp_refire_notify_ack, tp, 5);
+	} else {
+		free(tp, M_DEVBUF);
+	}
+	ISP_UNLOCK(isp);
+}
+
+
+static void
 isp_target_putback_atio(union ccb *ccb)
 {
 	ispsoftc_t *isp;
@@ -1889,12 +2166,10 @@
 static void
 isp_complete_ctio(union ccb *ccb)
 {
-	if ((ccb->ccb_h.status & CAM_STATUS_MASK) =3D=3D CAM_REQ_INPROG) {
-		ccb->ccb_h.status |=3D CAM_REQ_CMP;
-	}
-	ccb->ccb_h.status &=3D ~CAM_SIM_QUEUED;
-	isp_free_pcmd(XS_ISP(ccb), ccb);
-	xpt_done(ccb);
+	if ((ccb->ccb_h.status & CAM_STATUS_MASK) !=3D CAM_REQ_INPROG) {
+		ccb->ccb_h.status &=3D ~CAM_SIM_QUEUED;
+		xpt_done(ccb);
+	}
 }
=20
 /*
@@ -1975,14 +2250,12 @@
 		rls_lun_statep(isp, tptr);
 		return;
 	}
-	atp->tag =3D aep->at_tag_val;
-	if (atp->tag =3D=3D 0) {
-		atp->tag =3D ~0;
-	}
+	atp->tag =3D aep->at_handle;
+	atp->rxid =3D aep->at_tag_val;
 	atp->state =3D ATPD_STATE_ATIO;
 	SLIST_REMOVE_HEAD(&tptr->atios, sim_links.sle);
 	tptr->atio_count--;
-	ISP_PATH_PRT(isp, ISP_LOGTDEBUG0, atiop->ccb_h.path, "Take FREE ATIO coun=
t now %d\n", tptr->atio_count);
+	ISP_PATH_PRT(isp, ISP_LOGTDEBUG2, atiop->ccb_h.path, "Take FREE ATIO coun=
t now %d\n", tptr->atio_count);
 	atiop->ccb_h.target_id =3D aep->at_tgt;
 	atiop->ccb_h.target_lun =3D aep->at_lun;
 	if (aep->at_flags & AT_NODISC) {
@@ -2014,7 +2287,6 @@
 	}
 	atp->orig_datalen =3D 0;
 	atp->bytes_xfered =3D 0;
-	atp->last_xframt =3D 0;
 	atp->lun =3D aep->at_lun;
 	atp->nphdl =3D aep->at_iid;
 	atp->portid =3D PORT_NONE;
@@ -2022,7 +2294,7 @@
 	atp->cdb0 =3D atiop->cdb_io.cdb_bytes[0];
 	atp->tattr =3D aep->at_tag_type;
 	atp->state =3D ATPD_STATE_CAM;
-	ISP_PATH_PRT(isp, ISP_LOGTDEBUG0, tptr->owner, "ATIO[%x] CDB=3D0x%x lun %=
d\n", aep->at_tag_val, atp->cdb0, atp->lun);
+	isp_prt(isp, ISP_LOGTDEBUG0, "ATIO[0x%x] CDB=3D0x%x lun %d", aep->at_tag_=
val, atp->cdb0, atp->lun);
 	rls_lun_statep(isp, tptr);
 }
=20
@@ -2063,8 +2335,12 @@
 	if (tptr =3D=3D NULL) {
 		tptr =3D get_lun_statep(isp, 0, CAM_LUN_WILDCARD);
 		if (tptr =3D=3D NULL) {
-			isp_prt(isp, ISP_LOGTDEBUG0, "[0x%x] no state pointer for lun %d", aep-=
>at_rxid, lun);
-			isp_endcmd(isp, aep, SCSI_STATUS_CHECK_COND | ECMD_SVALID | (0x5 << 12)=
 | (0x25 << 16), 0);
+			isp_prt(isp, ISP_LOGWARN, "%s: [0x%x] no state pointer for lun %d or wi=
ldcard", __func__, aep->at_rxid, lun);
+			if (lun =3D=3D 0) {
+				isp_endcmd(isp, aep, SCSI_STATUS_BUSY, 0);
+			} else {
+				isp_endcmd(isp, aep, SCSI_STATUS_CHECK_COND | ECMD_SVALID | (0x5 << 12=
) | (0x25 << 16), 0);
+			}
 			return;
 		}
 	}
@@ -2112,7 +2388,7 @@
 	atp->state =3D ATPD_STATE_ATIO;
 	SLIST_REMOVE_HEAD(&tptr->atios, sim_links.sle);
 	tptr->atio_count--;
-	ISP_PATH_PRT(isp, ISP_LOGTDEBUG0, atiop->ccb_h.path, "Take FREE ATIO coun=
t now %d\n", tptr->atio_count);
+	isp_prt(isp, ISP_LOGTDEBUG2, "Take FREE ATIO count now %d", tptr->atio_co=
unt);
 	atiop->ccb_h.target_id =3D FCPARAM(isp, 0)->isp_loopid;
 	atiop->ccb_h.target_lun =3D lun;
=20
@@ -2146,7 +2422,7 @@
 		if (isp_find_pdb_by_wwn(isp, 0, iid, &lp)) {
 			isp_del_wwn_entry(isp, 0, iid, lp->handle, lp->portid);
 		}
-		isp_add_wwn_entry(isp, 0, iid, atiop->init_id, PORT_ANY);
+		isp_add_wwn_entry(isp, 0, iid, atiop->init_id, PORT_ANY, 0);
 	}
 	atiop->cdb_len =3D ATIO2_CDBLEN;
 	ISP_MEMCPY(atiop->cdb_io.cdb_bytes, aep->at_cdb, ATIO2_CDBLEN);
@@ -2174,7 +2450,6 @@
=20
 	atp->orig_datalen =3D aep->at_datalen;
 	atp->bytes_xfered =3D 0;
-	atp->last_xframt =3D 0;
 	atp->lun =3D lun;
 	atp->nphdl =3D atiop->init_id;
 	atp->sid =3D PORT_ANY;
@@ -2183,7 +2458,7 @@
 	atp->tattr =3D aep->at_taskflags & ATIO2_TC_ATTR_MASK;
 	atp->state =3D ATPD_STATE_CAM;
 	xpt_done((union ccb *)atiop);
-	ISP_PATH_PRT(isp, ISP_LOGTDEBUG0, tptr->owner, "ATIO2[%x] CDB=3D0x%x lun =
%d datalen %u\n", aep->at_rxid, atp->cdb0, lun, atp->orig_datalen);
+	isp_prt(isp, ISP_LOGTDEBUG0, "ATIO2[0x%x] CDB=3D0x%x lun %d datalen %u", =
aep->at_rxid, atp->cdb0, lun, atp->orig_datalen);
 	rls_lun_statep(isp, tptr);
 	return;
 noresrc:
@@ -2281,8 +2556,12 @@
 	if (tptr =3D=3D NULL) {
 		tptr =3D get_lun_statep(isp, chan, CAM_LUN_WILDCARD);
 		if (tptr =3D=3D NULL) {
-			isp_prt(isp, ISP_LOGTDEBUG0, "[0x%x] no state pointer for lun %d or wil=
dcard", aep->at_rxid, lun);
-			isp_endcmd(isp, aep, nphdl, chan, SCSI_STATUS_CHECK_COND | ECMD_SVALID =
| (0x5 << 12) | (0x25 << 16), 0);
+			isp_prt(isp, ISP_LOGWARN, "%s: [0x%x] no state pointer for lun %d or wi=
ldcard", __func__, aep->at_rxid, lun);
+			if (lun =3D=3D 0) {
+				isp_endcmd(isp, aep, nphdl, SCSI_STATUS_BUSY, 0);
+			} else {
+				isp_endcmd(isp, aep, nphdl, chan, SCSI_STATUS_CHECK_COND | ECMD_SVALID=
 | (0x5 << 12) | (0x25 << 16), 0);
+			}
 			return;
 		}
 	}
@@ -2344,18 +2623,19 @@
 	}
 	oatp =3D isp_get_atpd(isp, tptr, aep->at_rxid);
 	if (oatp) {
-		isp_prt(isp, ISP_LOGTDEBUG0, "[0x%x] tag wraparound in isp_handle_platfo=
rms_atio7 (N-Port Handle 0x%04x S_ID 0x%04x OX_ID 0x%04x) oatp state %d\n",
+		isp_prt(isp, ISP_LOGTDEBUG0, "[0x%x] tag wraparound in isp_handle_platfo=
rms_atio7 (N-Port Handle 0x%04x S_ID 0x%04x OX_ID 0x%04x) oatp state %d",
 		    aep->at_rxid, nphdl, sid, aep->at_hdr.ox_id, oatp->state);
 		/*
 		 * It's not a "no resource" condition- but we can treat it like one
 		 */
 		goto noresrc;
 	}
+	atp->word3 =3D lp->prli_word3;
 	atp->tag =3D aep->at_rxid;
 	atp->state =3D ATPD_STATE_ATIO;
 	SLIST_REMOVE_HEAD(&tptr->atios, sim_links.sle);
 	tptr->atio_count--;
-	ISP_PATH_PRT(isp, ISP_LOGTDEBUG0, atiop->ccb_h.path, "Take FREE ATIO coun=
t now %d\n", tptr->atio_count);
+	ISP_PATH_PRT(isp, ISP_LOGTDEBUG2, atiop->ccb_h.path, "Take FREE ATIO coun=
t now %d\n", tptr->atio_count);
 	atiop->init_id =3D nphdl;
 	atiop->ccb_h.target_id =3D FCPARAM(isp, chan)->isp_loopid;
 	atiop->ccb_h.target_lun =3D lun;
@@ -2391,7 +2671,6 @@
 	}
 	atp->orig_datalen =3D aep->at_cmnd.cdb_dl.sf.fcp_cmnd_dl;
 	atp->bytes_xfered =3D 0;
-	atp->last_xframt =3D 0;
 	atp->lun =3D lun;
 	atp->nphdl =3D nphdl;
 	atp->portid =3D sid;
@@ -2400,7 +2679,7 @@
 	atp->cdb0 =3D atiop->cdb_io.cdb_bytes[0];
 	atp->tattr =3D aep->at_cmnd.fcp_cmnd_task_attribute & FCP_CMND_TASK_ATTR_=
MASK;
 	atp->state =3D ATPD_STATE_CAM;
-	ISP_PATH_PRT(isp, ISP_LOGTDEBUG0, tptr->owner, "ATIO7[%x] CDB=3D0x%x lun =
%d datalen %u\n", aep->at_rxid, atp->cdb0, lun, atp->orig_datalen);
+	isp_prt(isp, ISP_LOGTDEBUG0, "ATIO7[0x%x] CDB=3D0x%x lun %d datalen %u", =
aep->at_rxid, atp->cdb0, lun, atp->orig_datalen);
 	xpt_done((union ccb *)atiop);
 	rls_lun_statep(isp, tptr);
 	return;
@@ -2420,15 +2699,156 @@
 	rls_lun_statep(isp, tptr);
 }
=20
+
+/*
+ * Handle starting an SRR (sequence retransmit request)
+ * We get here when we've gotten the immediate notify
+ * and the return of all outstanding CTIOs for this
+ * transaction.
+ */
+static void
+isp_handle_srr_start(ispsoftc_t *isp, tstate_t *tptr, atio_private_data_t =
*atp)
+{
+	in_fcentry_24xx_t *inot;
+	uint32_t srr_off, ccb_off, ccb_len, ccb_end;
+	union ccb *ccb;
+
+	inot =3D (in_fcentry_24xx_t *)atp->srr;
+	srr_off =3D inot->in_srr_reloff_lo | (inot->in_srr_reloff_hi << 16);
+	ccb =3D atp->srr_ccb;
+	atp->srr_ccb =3D NULL;
+	atp->nsrr++;
+	if (ccb =3D=3D NULL) {
+		isp_prt(isp, ISP_LOGWARN, "SRR[0x%x] null ccb", atp->tag);
+		goto fail;
+	}
+
+	ccb_off =3D ccb->ccb_h.spriv_field0;
+	ccb_len =3D ccb->csio.dxfer_len;
+        ccb_end =3D (ccb_off =3D=3D ~0)? ~0 : ccb_off + ccb_len;
+
+	switch (inot->in_srr_iu) {
+	case R_CTL_INFO_SOLICITED_DATA:
+		/*
+		 * We have to restart a FCP_DATA data out transaction
+		 */
+		atp->sendst =3D 0;
+		atp->bytes_xfered =3D srr_off;
+		if (ccb_len =3D=3D 0) {
+			isp_prt(isp, ISP_LOGWARN, "SRR[0x%x] SRR offset 0x%x but current CCB do=
esn't transfer data", atp->tag, srr_off);
+			goto mdp;
+		}
+ 		if (srr_off < ccb_off || ccb_off > srr_off + ccb_len) {
+			isp_prt(isp, ISP_LOGWARN, "SRR[0x%x] SRR offset 0x%x not covered by cur=
rent CCB data range [0x%x..0x%x]", atp->tag, srr_off, ccb_off, ccb_end);
+			goto mdp;
+		}
+		isp_prt(isp, ISP_LOGWARN, "SRR[0x%x] SRR offset 0x%x covered by current =
CCB data range [0x%x..0x%x]", atp->tag, srr_off, ccb_off, ccb_end);
+		break;
+	case R_CTL_INFO_COMMAND_STATUS:
+		isp_prt(isp, ISP_LOGTINFO, "SRR[0x%x] Got an FCP RSP SRR- resending stat=
us", atp->tag);
+		atp->sendst =3D 1;
+		/*
+		 * We have to restart a FCP_RSP IU transaction
+		 */
+		break;
+	case R_CTL_INFO_DATA_DESCRIPTOR:
+		/*
+		 * We have to restart an FCP DATA in transaction
+		 */
+		isp_prt(isp, ISP_LOGWARN, "Got an FCP DATA IN SRR- dropping");
+		goto fail;
+	=09
+	default:
+		isp_prt(isp, ISP_LOGWARN, "Got an unknown information (%x) SRR- dropping=
", inot->in_srr_iu);
+		goto fail;
+	}
+
+	/*
+	 * We can't do anything until this is acked, so we might as well start it=
 now.
+	 * We aren't going to do the usual asynchronous ack issue because we need
+	 * to make sure this gets on the wire first.
+	 */
+	if (isp_notify_ack(isp, inot)) {
+		isp_prt(isp, ISP_LOGWARN, "could not push positive ack for SRR- you lose=
");
+		goto fail;
+	}
+	isp_target_start_ctio(isp, ccb, FROM_SRR);
+	return;
+fail:
+	inot->in_reserved =3D 1;
+	isp_async(isp, ISPASYNC_TARGET_NOTIFY_ACK, inot);
+	ccb->ccb_h.status &=3D ~CAM_STATUS_MASK;
+	ccb->ccb_h.status |=3D CAM_REQ_CMP_ERR;
+	isp_complete_ctio(ccb);
+	return;
+mdp:
+	if (isp_notify_ack(isp, inot)) {
+		isp_prt(isp, ISP_LOGWARN, "could not push positive ack for SRR- you lose=
");
+		goto fail;
+	}
+	ccb->ccb_h.status &=3D ~CAM_STATUS_MASK;
+	ccb->ccb_h.status =3D CAM_MESSAGE_RECV;
+	/*
+	 * This is not a strict interpretation of MDP, but it's close
+	 */
+	ccb->csio.msg_ptr =3D &ccb->csio.sense_data.sense_buf[SSD_FULL_SIZE - 16];
+	ccb->csio.msg_len =3D 7;
+	ccb->csio.msg_ptr[0] =3D MSG_EXTENDED;
+	ccb->csio.msg_ptr[1] =3D 5;
+	ccb->csio.msg_ptr[2] =3D 0;	/* modify data pointer */
+	ccb->csio.msg_ptr[3] =3D srr_off >> 24;
+	ccb->csio.msg_ptr[4] =3D srr_off >> 16;
+	ccb->csio.msg_ptr[5] =3D srr_off >> 8;
+	ccb->csio.msg_ptr[6] =3D srr_off;
+	isp_complete_ctio(ccb);
+}
+
+
+static void
+isp_handle_srr_notify(ispsoftc_t *isp, void *inot_raw)
+{
+	tstate_t *tptr;
+	in_fcentry_24xx_t *inot =3D inot_raw;
+	atio_private_data_t *atp;
+	uint32_t tag =3D inot->in_rxid;
+	uint32_t bus =3D inot->in_vpidx;
+
+	if (!IS_24XX(isp)) {
+		isp_async(isp, ISPASYNC_TARGET_NOTIFY_ACK, inot_raw);
+		return;
+	}
+
+	tptr =3D get_lun_statep_from_tag(isp, bus, tag);
+	if (tptr =3D=3D NULL) {
+		isp_prt(isp, ISP_LOGERR, "%s: cannot find tptr for tag %x in SRR Notify"=
, __func__, tag);
+		isp_async(isp, ISPASYNC_TARGET_NOTIFY_ACK, inot);
+		return;
+	}
+	atp =3D isp_get_atpd(isp, tptr, tag);
+	if (atp =3D=3D NULL) {
+		rls_lun_statep(isp, tptr);
+		isp_prt(isp, ISP_LOGERR, "%s: cannot find adjunct for %x in SRR Notify",=
 __func__, tag);
+		isp_async(isp, ISPASYNC_TARGET_NOTIFY_ACK, inot);
+		return;
+	}
+	atp->srr_notify_rcvd =3D 1;
+	memcpy(atp->srr, inot, sizeof (atp->srr));
+	isp_prt(isp, ISP_LOGTINFO /* ISP_LOGTDEBUG0 */, "SRR[0x%x] inot->in_rxid =
flags 0x%x srr_iu=3D%x reloff 0x%x", inot->in_rxid, inot->in_flags, inot->i=
n_srr_iu,
+	    inot->in_srr_reloff_lo | (inot->in_srr_reloff_hi << 16));
+	if (atp->srr_ccb)
+		isp_handle_srr_start(isp, tptr, atp);
+	rls_lun_statep(isp, tptr);
+}
+
 static void
 isp_handle_platform_ctio(ispsoftc_t *isp, void *arg)
 {
 	union ccb *ccb;
-	int sentstatus, ok, notify_cam, resid =3D 0;
+	int sentstatus =3D 0, ok =3D 0, notify_cam =3D 0, resid =3D 0, failure =
=3D 0;
 	tstate_t *tptr =3D NULL;
 	atio_private_data_t *atp =3D NULL;
 	int bus;
-	uint32_t tval, handle;
+	uint32_t handle, moved_data =3D 0, data_requested;
=20
 	/*
 	 * CTIO handles are 16 bits.
@@ -2446,147 +2866,157 @@
 		return;
 	}
 	isp_destroy_tgt_handle(isp, handle);
+	data_requested =3D PISP_PCMD(ccb)->datalen;
+	isp_free_pcmd(isp, ccb);
+	if (isp->isp_nactive) {
+		isp->isp_nactive--;
+	}
+
 	bus =3D XS_CHANNEL(ccb);
 	tptr =3D get_lun_statep(isp, bus, XS_LUN(ccb));
 	if (tptr =3D=3D NULL) {
 		tptr =3D get_lun_statep(isp, bus, CAM_LUN_WILDCARD);
 	}
-	KASSERT((tptr !=3D NULL), ("cannot get state pointer"));
-	if (isp->isp_nactive) {
-		isp->isp_nactive++;
-	}
+	if (tptr =3D=3D NULL) {
+		isp_prt(isp, ISP_LOGERR, "%s: cannot find tptr for tag %x after I/O", __=
func__, ccb->csio.tag_id);
+		return;
+	}
+
+	if (IS_24XX(isp)) {
+		atp =3D isp_get_atpd(isp, tptr, ((ct7_entry_t *)arg)->ct_rxid);
+	} else if (IS_FC(isp)) {
+		atp =3D isp_get_atpd(isp, tptr, ((ct2_entry_t *)arg)->ct_rxid);
+	} else {
+		atp =3D isp_get_atpd(isp, tptr, ((ct_entry_t *)arg)->ct_fwhandle);
+	}
+	if (atp =3D=3D NULL) {
+		rls_lun_statep(isp, tptr);
+		isp_prt(isp, ISP_LOGERR, "%s: cannot find adjunct for %x after I/O", __f=
unc__, ccb->csio.tag_id);
+		return;
+	}
+	KASSERT((atp->ctcnt > 0), ("ctio count not greater than zero"));
+	atp->bytes_in_transit -=3D data_requested;
+	atp->ctcnt -=3D 1;
+	ccb->ccb_h.status &=3D ~CAM_STATUS_MASK;
+
 	if (IS_24XX(isp)) {
 		ct7_entry_t *ct =3D arg;
=20
-		atp =3D isp_get_atpd(isp, tptr, ct->ct_rxid);
-		if (atp =3D=3D NULL) {
+		if (ct->ct_nphdl =3D=3D CT7_SRR) {
+			atp->srr_ccb =3D ccb;
+			if (atp->srr_notify_rcvd)
+				isp_handle_srr_start(isp, tptr, atp);
 			rls_lun_statep(isp, tptr);
-			isp_prt(isp, ISP_LOGERR, "%s: cannot find adjunct for %x after I/O", __=
func__, ct->ct_rxid);
 			return;
 		}
-
-		sentstatus =3D ct->ct_flags & CT7_SENDSTATUS;
-		ok =3D (ct->ct_nphdl =3D=3D CT7_OK);
-		if (ok && sentstatus && (ccb->ccb_h.flags & CAM_SEND_SENSE)) {
-			ccb->ccb_h.status |=3D CAM_SENT_SENSE;
-		}
-		notify_cam =3D ct->ct_header.rqs_seqno & 0x1;
-		if ((ct->ct_flags & CT7_DATAMASK) !=3D CT7_NO_DATA) {
-			resid =3D ct->ct_resid;
-			atp->bytes_xfered +=3D (atp->last_xframt - resid);
-			atp->last_xframt =3D 0;
-		}
 		if (ct->ct_nphdl =3D=3D CT_HBA_RESET) {
-			ok =3D 0;
-			notify_cam =3D 1;
-			sentstatus =3D 1;
-			ccb->ccb_h.status |=3D CAM_UNREC_HBA_ERROR;
-		} else if (!ok) {
-			ccb->ccb_h.status |=3D CAM_REQ_CMP_ERR;
-		}
-		tval =3D atp->tag;
-		isp_prt(isp, ok? ISP_LOGTDEBUG0 : ISP_LOGWARN, "%s: CTIO7[%x] sts 0x%x f=
lg 0x%x sns %d resid %d %s", __func__,
-		    ct->ct_rxid, ct->ct_nphdl, ct->ct_flags, (ccb->ccb_h.status & CAM_SE=
NT_SENSE) !=3D 0, resid, sentstatus? "FIN" : "MID");
-		atp->state =3D ATPD_STATE_PDON; /* XXX: should really come after isp_com=
plete_ctio */
+			failure =3D CAM_UNREC_HBA_ERROR;
+		} else {
+			sentstatus =3D ct->ct_flags & CT7_SENDSTATUS;
+			ok =3D (ct->ct_nphdl =3D=3D CT7_OK);
+			notify_cam =3D (ct->ct_header.rqs_seqno & ATPD_SEQ_NOTIFY_CAM) !=3D 0;
+			if ((ct->ct_flags & CT7_DATAMASK) !=3D CT7_NO_DATA) {
+				resid =3D ct->ct_resid;
+				moved_data =3D data_requested - resid;
+			}
+		}
+		isp_prt(isp, ok? ISP_LOGTDEBUG0 : ISP_LOGWARN, "%s: CTIO7[%x] seq %u nc =
%d sts 0x%x flg 0x%x sns %d resid %d %s", __func__, ct->ct_rxid, ATPD_GET_S=
EQNO(ct),
+		   notify_cam, ct->ct_nphdl, ct->ct_flags, (ccb->ccb_h.status & CAM_SENT=
_SENSE) !=3D 0, resid, sentstatus? "FIN" : "MID");
 	} else if (IS_FC(isp)) {
 		ct2_entry_t *ct =3D arg;
-
-		atp =3D isp_get_atpd(isp, tptr, ct->ct_rxid);
-		if (atp =3D=3D NULL) {
+		if (ct->ct_status =3D=3D CT_SRR) {
+			atp->srr_ccb =3D ccb;
+			if (atp->srr_notify_rcvd)
+				isp_handle_srr_start(isp, tptr, atp);
 			rls_lun_statep(isp, tptr);
-			isp_prt(isp, ISP_LOGERR, "%s: cannot find adjunct for %x after I/O", __=
func__, ct->ct_rxid);
+			isp_target_putback_atio(ccb);
 			return;
 		}
-		sentstatus =3D ct->ct_flags & CT2_SENDSTATUS;
-		ok =3D (ct->ct_status & ~QLTM_SVALID) =3D=3D CT_OK;
-		if (ok && sentstatus && (ccb->ccb_h.flags & CAM_SEND_SENSE)) {
-			ccb->ccb_h.status |=3D CAM_SENT_SENSE;
-		}
-		notify_cam =3D ct->ct_header.rqs_seqno & 0x1;
-		if ((ct->ct_flags & CT2_DATAMASK) !=3D CT2_NO_DATA) {
-			resid =3D ct->ct_resid;
-			atp->bytes_xfered +=3D (atp->last_xframt - resid);
-			atp->last_xframt =3D 0;
-		}
 		if (ct->ct_status =3D=3D CT_HBA_RESET) {
-			ok =3D 0;
-			notify_cam =3D 1;
-			sentstatus =3D 1;
-			ccb->ccb_h.status |=3D CAM_UNREC_HBA_ERROR;
-		} else if (!ok) {
-			ccb->ccb_h.status |=3D CAM_REQ_CMP_ERR;
-		}
-		isp_prt(isp, ok? ISP_LOGTDEBUG0 : ISP_LOGWARN, "%s: CTIO2[%x] sts 0x%x f=
lg 0x%x sns %d resid %d %s", __func__,
-		    ct->ct_rxid, ct->ct_status, ct->ct_flags, (ccb->ccb_h.status & CAM_S=
ENT_SENSE) !=3D 0, resid, sentstatus? "FIN" : "MID");
-		tval =3D atp->tag;
-		atp->state =3D ATPD_STATE_PDON; /* XXX: should really come after isp_com=
plete_ctio */
+			failure =3D CAM_UNREC_HBA_ERROR;
+		} else {
+			sentstatus =3D ct->ct_flags & CT2_SENDSTATUS;
+			ok =3D (ct->ct_status & ~QLTM_SVALID) =3D=3D CT_OK;
+			notify_cam =3D (ct->ct_header.rqs_seqno & ATPD_SEQ_NOTIFY_CAM) !=3D 0;
+			if ((ct->ct_flags & CT2_DATAMASK) !=3D CT2_NO_DATA) {
+				resid =3D ct->ct_resid;
+				moved_data =3D data_requested - resid;
+			}
+		}
+		isp_prt(isp, ok? ISP_LOGTDEBUG0 : ISP_LOGWARN, "%s: CTIO2[%x] seq %u nc =
%d sts 0x%x flg 0x%x sns %d resid %d %s", __func__, ct->ct_rxid, ATPD_GET_S=
EQNO(ct),
+		    notify_cam, ct->ct_status, ct->ct_flags, (ccb->ccb_h.status & CAM_SE=
NT_SENSE) !=3D 0, resid, sentstatus? "FIN" : "MID");
 	} else {
 		ct_entry_t *ct =3D arg;
-		sentstatus =3D ct->ct_flags & CT_SENDSTATUS;
-		ok =3D (ct->ct_status  & ~QLTM_SVALID) =3D=3D CT_OK;
-		/*
-		 * We *ought* to be able to get back to the original ATIO
-		 * here, but for some reason this gets lost. It's just as
-		 * well because it's squirrelled away as part of periph
-		 * private data.
-		 *
-		 * We can live without it as long as we continue to use
-		 * the auto-replenish feature for CTIOs.
-		 */
-		notify_cam =3D ct->ct_header.rqs_seqno & 0x1;
+
 		if (ct->ct_status =3D=3D (CT_HBA_RESET & 0xff)) {
-			ok =3D 0;
-			notify_cam =3D 1;
-			sentstatus =3D 1;
-			ccb->ccb_h.status |=3D CAM_UNREC_HBA_ERROR;
-		} else if (!ok) {
-			ccb->ccb_h.status |=3D CAM_REQ_CMP_ERR;
-		} else if (ct->ct_status & QLTM_SVALID) {
-			char *sp =3D (char *)ct;
-			sp +=3D CTIO_SENSE_OFFSET;
-			ccb->csio.sense_len =3D min(sizeof (ccb->csio.sense_data), QLTM_SENSELE=
N);
-			ISP_MEMCPY(&ccb->csio.sense_data, sp, ccb->csio.sense_len);
-			ccb->ccb_h.status |=3D CAM_AUTOSNS_VALID;
+			failure =3D CAM_UNREC_HBA_ERROR;
+		} else {
+			sentstatus =3D ct->ct_flags & CT_SENDSTATUS;
+			ok =3D (ct->ct_status  & ~QLTM_SVALID) =3D=3D CT_OK;
+			notify_cam =3D (ct->ct_header.rqs_seqno & ATPD_SEQ_NOTIFY_CAM) !=3D 0;
 		}
 		if ((ct->ct_flags & CT_DATAMASK) !=3D CT_NO_DATA) {
 			resid =3D ct->ct_resid;
-		}
-		isp_prt(isp, ISP_LOGTDEBUG0, "%s: CTIO[%x] tag %x S_ID 0x%x lun %d sts %=
x flg %x resid %d %s", __func__,
-		    ct->ct_fwhandle, ct->ct_tag_val, ct->ct_iid, ct->ct_lun, ct->ct_stat=
us, ct->ct_flags, resid, sentstatus? "FIN" : "MID");
-		tval =3D ct->ct_fwhandle;
-	}
-	ccb->csio.resid +=3D resid;
+			moved_data =3D data_requested - resid;
+		}
+		isp_prt(isp, ISP_LOGTDEBUG0, "%s: CTIO[%x] seq %u nc %d tag %x S_ID 0x%x=
 lun %d sts %x flg %x resid %d %s", __func__, ct->ct_fwhandle, ATPD_GET_SEQ=
NO(ct),
+		    notify_cam, ct->ct_tag_val, ct->ct_iid, ct->ct_lun, ct->ct_status, c=
t->ct_flags, resid, sentstatus? "FIN" : "MID");
+	}
+	if (ok) {
+		if (moved_data) {
+			atp->bytes_xfered +=3D moved_data;
+			ccb->csio.resid =3D atp->orig_datalen - atp->bytes_xfered - atp->bytes_=
in_transit;
+		}
+		if (sentstatus && (ccb->ccb_h.flags & CAM_SEND_SENSE)) {
+			ccb->ccb_h.status |=3D CAM_SENT_SENSE;
+		}
+		ccb->ccb_h.status |=3D CAM_REQ_CMP;
+	} else {
+		notify_cam =3D 1;
+		if (failure =3D=3D CAM_UNREC_HBA_ERROR)
+			ccb->ccb_h.status |=3D CAM_UNREC_HBA_ERROR;
+		else
+			ccb->ccb_h.status |=3D CAM_REQ_CMP_ERR;
+	}
+	atp->state =3D ATPD_STATE_PDON;
+	rls_lun_statep(isp, tptr);
=20
 	/*
-	 * We're here either because intermediate data transfers are done
-	 * and/or the final status CTIO (which may have joined with a
-	 * Data Transfer) is done.
+	 * We never *not* notify CAM when there has been any error (ok =3D=3D 0),
+	 * so we never need to do an ATIO putback if we're not notifying CAM.
+	 */
+	isp_prt(isp, ISP_LOGTDEBUG0, "%s CTIO[0x%x] done (ok=3D%d nc=3D%d nowsend=
status=3D%d ccb ss=3D%d)",
+	    (sentstatus)? "  FINAL " : "MIDTERM ", atp->tag, ok, notify_cam, atp-=
>sendst, (ccb->ccb_h.flags & CAM_SEND_STATUS) !=3D 0);
+	if (notify_cam =3D=3D 0) {
+		if (atp->sendst) {
+			isp_target_start_ctio(isp, ccb, FROM_CTIO_DONE);
+		}
+		return;
+	}
+
+	/*
+	 * We're telling CAM we're done with this CTIO transaction.
 	 *
-	 * In any case, for this platform, the upper layers figure out
-	 * what to do next, so all we do here is collect status and
-	 * pass information along. Any DMA handles have already been
-	 * freed.
+	 * 24XX cards never need an ATIO put back.
+	 *
+	 * Other cards need one put back only on error.
+	 * In the latter case, a timeout will re-fire
+	 * and try again in case we didn't have
+	 * queue resources to do so at first. In any case,
+	 * once the putback is done we do the completion
+	 * call.
 	 */
-	if (notify_cam =3D=3D 0) {
-		isp_prt(isp, ISP_LOGTDEBUG0, "  INTER CTIO[0x%x] done", tval);
-		return;
-	}
-	if (tptr) {
-		rls_lun_statep(isp, tptr);
-	}
-	isp_prt(isp, ISP_LOGTDEBUG0, "%s CTIO[0x%x] done", (sentstatus)? "  FINAL=
 " : "MIDTERM ", tval);
-
-	if (!ok && !IS_24XX(isp)) {
+	if (ok || IS_24XX(isp)) {
+		isp_complete_ctio(ccb);
+	} else {
 		isp_target_putback_atio(ccb);
-	} else {
-		isp_complete_ctio(ccb);
 	}
 }
=20
 static void
 isp_handle_platform_notify_scsi(ispsoftc_t *isp, in_entry_t *inot)
 {
-	(void) isp_notify_ack(isp, inot);
+	isp_async(isp, ISPASYNC_TARGET_NOTIFY_ACK, inot);
 }
=20
 static void
@@ -2649,9 +3079,9 @@
 			if (inot) {
 				tptr->inot_count--;
 				SLIST_REMOVE_HEAD(&tptr->inots, sim_links.sle);
-				ISP_PATH_PRT(isp, ISP_LOGTDEBUG0, inot->ccb_h.path, "%s: Take FREE INO=
T count now %d\n", __func__, tptr->inot_count);
+				ISP_PATH_PRT(isp, ISP_LOGTDEBUG2, inot->ccb_h.path, "%s: Take FREE INO=
T count now %d\n", __func__, tptr->inot_count);
 			} else {
-				ISP_PATH_PRT(isp, ISP_LOGTDEBUG0, tptr->owner, "out of INOT structures=
\n");
+				ISP_PATH_PRT(isp, ISP_LOGWARN, tptr->owner, "out of INOT structures\n"=
);
 			}
 		} else {
 			ISP_PATH_PRT(isp, ISP_LOGWARN, tptr->owner, "abort task RX_ID %x from w=
wn 0x%016llx, state unknown\n", inp->in_seqid, wwn);
@@ -2680,7 +3110,7 @@
 		break;
 	}
 	if (needack) {
-		(void) isp_notify_ack(isp, inp);
+		isp_async(isp, ISPASYNC_TARGET_NOTIFY_ACK, inp);
 	}
 }
=20
@@ -2688,6 +3118,7 @@
 isp_handle_platform_notify_24xx(ispsoftc_t *isp, in_fcentry_24xx_t *inot)
 {
 	uint16_t nphdl;
+	uint16_t prli_options =3D 0;
 	uint32_t portid;
 	fcportdb_t *lp;
 	uint8_t *ptr =3D NULL;
@@ -2737,10 +3168,12 @@
 			/*
 			 * Treat PRLI the same as PLOGI and make a database entry for it.
 			 */
-			if (inot->in_status_subcode =3D=3D PLOGI)
+			if (inot->in_status_subcode =3D=3D PLOGI) {
 				msg =3D "PLOGI";
-			else
+			} else {
+				prli_options =3D inot->in_prli_options;
 				msg =3D "PRLI";
+			}
 			if (ISP_FW_NEWER_THAN(isp, 4, 0, 25)) {
 				ptr =3D (uint8_t *)inot;  /* point to unswizzled entry! */
 				wwn =3D	(((uint64_t) ptr[IN24XX_PLOGI_WWPN_OFF])   << 56) |
@@ -2754,7 +3187,7 @@
 			} else {
 				wwn =3D INI_NONE;
 			}
-			isp_add_wwn_entry(isp, chan, wwn, nphdl, portid);
+			isp_add_wwn_entry(isp, chan, wwn, nphdl, portid, prli_options);
 			break;
 		case PDISC:
 			msg =3D "PDISC";
@@ -2773,7 +3206,7 @@
 		}
 		isp_prt(isp, ISP_LOGTDEBUG0, "%s Chan %d ELS N-port handle %x PortID 0x%=
06x RX_ID 0x%x OX_ID 0x%x", msg, chan, nphdl, portid,
 		    inot->in_rxid, inot->in_oxid);
-		(void) isp_notify_ack(isp, inot);
+		isp_async(isp, ISPASYNC_TARGET_NOTIFY_ACK, inot);
 		break;
 	}
=20
@@ -2800,14 +3233,30 @@
 		 * this initiator (known by N-port handle).
 		 */
 		/* XXX IMPLEMENT XXX */
-		(void) isp_notify_ack(isp, inot);
+		isp_async(isp, ISPASYNC_TARGET_NOTIFY_ACK, inot);
 		break;
=20
+	case IN24XX_SRR_RCVD:
+#ifdef	ISP_TARGET_MODE
+		isp_handle_srr_notify(isp, inot);
+		break;
+#else
+		if (ptr =3D=3D NULL) {
+			ptr =3D "SRR RCVD";
+		}
+		/* FALLTHROUGH */
+#endif
 	case IN24XX_LINK_RESET:
+		if (ptr =3D=3D NULL) {
+			ptr =3D "LINK RESET";
+		}
 	case IN24XX_LINK_FAILED:
-	case IN24XX_SRR_RCVD:
+		if (ptr =3D=3D NULL) {
+			ptr =3D "LINK FAILED";
+		}
 	default:
-		(void) isp_notify_ack(isp, inot);
+		isp_prt(isp, ISP_LOGWARN, "Chan %d %s", ISP_GET_VPIDX(isp, inot->in_vpid=
x), ptr);
+		isp_async(isp, ISPASYNC_TARGET_NOTIFY_ACK, inot);
 		break;
 	}
 }
@@ -2905,6 +3354,9 @@
 	 */
 	if (mp->nt_need_ack) {
 		isp_prt(isp, ISP_LOGTINFO, "Notify Code 0x%x (qevalid=3D%d) being acked"=
, mp->nt_ncode, mp->nt_lreserved !=3D NULL);
+		/*
+		 * Don't need to use the guaranteed send because the caller can retry
+		 */
 		return (isp_notify_ack(isp, mp->nt_lreserved));
 	}
 	return (0);
@@ -3003,7 +3455,7 @@
 	tptr->inot_count--;
 	SLIST_REMOVE_HEAD(&tptr->inots, sim_links.sle);
 	rls_lun_statep(isp, tptr);
-	ISP_PATH_PRT(isp, ISP_LOGTDEBUG0, inot->ccb_h.path, "%s: Take FREE INOT c=
ount now %d\n", __func__, tptr->inot_count);
+	ISP_PATH_PRT(isp, ISP_LOGTDEBUG2, inot->ccb_h.path, "%s: Take FREE INOT c=
ount now %d\n", __func__, tptr->inot_count);
 	inot->ccb_h.status =3D CAM_MESSAGE_RECV;
 	xpt_done((union ccb *)inot);
 	return;
@@ -3013,9 +3465,11 @@
 	}
 	if (notify->nt_need_ack && notify->nt_lreserved) {
 		if (((isphdr_t *)notify->nt_lreserved)->rqs_entry_type =3D=3D RQSTYPE_AB=
TS_RCVD) {
-			(void) isp_acknak_abts(isp, notify->nt_lreserved, ENOMEM);
+			if (isp_acknak_abts(isp, notify->nt_lreserved, ENOMEM)) {
+				isp_prt(isp, ISP_LOGWARN, "you lose- unable to send an ACKNAK");
+			}
 		} else {
-			(void) isp_notify_ack(isp, notify->nt_lreserved);
+			isp_async(isp, ISPASYNC_TARGET_NOTIFY_ACK, notify->nt_lreserved);
 		}
 	}
 }
@@ -3091,25 +3545,47 @@
=20
=20
 #ifdef	ISP_INTERNAL_TARGET
-// #define	ISP_FORCE_TIMEOUT		1
-// #define	ISP_TEST_WWNS			1
-// #define	ISP_TEST_SEPARATE_STATUS	1
-
-#define	ccb_data_offset		ppriv_field0
+//#define	ISP_SEPARATE_STATUS	1
+#define	ISP_MULTI_CCBS		1
+#if defined(ISP_MULTI_CCBS) && !defined(ISP_SEPARATE_STATUS)
+#define	ISP_SEPARATE_STATUS 1
+#endif
+
+typedef struct periph_private_data_t {
+	union ccb *ccb;			/* original ATIO or Immediate Notify */
+	unsigned long	offset;		/* current offset */
+	int		sequence;	/* current CTIO sequence */
+	int		ctio_cnt;	/* current # of ctio's outstanding */
+	int
+		status_sent	: 1,
+		on_queue	: 1;	/* on restart queue */
+} ppd_t;
+/*
+ * Each ATIO we allocate will have periph private data associated with it
+ * that maintains per-command state. This private to each ATIO.
+ */
+#define	ATIO_PPD(ccb)		((ppd_t *)(((struct ccb_hdr *)ccb)->ppriv_ptr0))
+/*
+ * Each CTIO we send downstream will get a pointer to the ATIO itself
+ * so that on completion we can retrieve that pointer.
+ */
 #define	ccb_atio		ppriv_ptr1
 #define	ccb_inot		ppriv_ptr1
=20
+/*
+ * Each CTIO we send downstream will contain a sequence number
+ */
+#define	CTIO_SEQ(ccb)		ccb->ccb_h.ppriv_field0
+
 #define	MAX_ISP_TARG_TRANSFER	(2 << 20)
-#define	NISP_TARG_CMDS		1024
-#define	NISP_TARG_NOTIFIES	1024
+#define	NISP_TARG_CMDS		64
+#define	NISP_TARG_NOTIFIES	64
 #define	DISK_SHIFT		9
 #define	JUNK_SIZE		256
-
-#ifndef	VERIFY_10
-#define	VERIFY_10	0x2f
-#endif
-
-TAILQ_HEAD(ccb_queue, ccb_hdr);
+#define	MULTI_CCB_DATA_LIM	8192
+//#define	MULTI_CCB_DATA_CNT	64
+#define	MULTI_CCB_DATA_CNT	8
+
 extern u_int vm_kmem_size;
 static int ca;
 static uint32_t disk_size;
@@ -3118,10 +3594,10 @@
 static MALLOC_DEFINE(M_ISPTARG, "ISPTARG", "ISP TARGET data");
 struct isptarg_softc {
 	/* CCBs (CTIOs, ATIOs, INOTs) pending on the controller */
-	struct ccb_queue	work_queue;
-	struct ccb_queue	rework_queue;
-	struct ccb_queue	running_queue;
-	struct ccb_queue	inot_queue;
+	struct isp_ccbq		work_queue;
+	struct isp_ccbq		rework_queue;
+	struct isp_ccbq		running_queue;
+	struct isp_ccbq		inot_queue;
 	struct cam_periph       *periph;
 	struct cam_path	 	*path;
 	ispsoftc_t		*isp;
@@ -3138,7 +3614,7 @@
=20
 static struct periph_driver isptargdriver =3D
 {
-	isptarginit, "isptarg", TAILQ_HEAD_INITIALIZER(isptargdriver.units), /* g=
eneration */ 0
+	isptarginit, "isptarg", TAILQ_HEAD_INITIALIZER(isptargdriver.units), 0
 };
=20
 static void
@@ -3182,7 +3658,8 @@
 		'O', 'R', 'Y', ' ', 'D', 'I', 'S', 'K',
 		'0', '0', '0', '1'
 	};
-	int i, more =3D 0, last;
+	int r, i, more =3D 0, last, is_data_cmd =3D 0, is_write;
+	char *queue;
 	struct isptarg_softc *softc =3D periph->softc;
 	struct ccb_scsiio *csio;
 	lun_id_t return_lun;
@@ -3193,7 +3670,7 @@
 	struct ccb_hdr *ccbh;
 	   =20
 	mtx_assert(periph->sim->mtx, MA_OWNED);
-	ISP_PATH_PRT(softc->isp, ISP_LOGTDEBUG0, iccb->ccb_h.path, "%s: function =
code 0x%x INOTQ=3D%c WORKQ=3D%c REWORKQ=3D%c\n", __func__, iccb->ccb_h.func=
_code,
+	ISP_PATH_PRT(softc->isp, ISP_LOGTDEBUG1, iccb->ccb_h.path, "%s: function =
code 0x%x INOTQ=3D%c WORKQ=3D%c REWORKQ=3D%c\n", __func__, iccb->ccb_h.func=
_code,
 	    TAILQ_FIRST(&softc->inot_queue)? 'y' : 'n', TAILQ_FIRST(&softc->work_=
queue)? 'y' : 'n', TAILQ_FIRST(&softc->rework_queue)? 'y' : 'n');
 	/*
 	 * Check for immediate notifies first
@@ -3216,41 +3693,42 @@
 		atio =3D (struct ccb_accept_tio *)ccbh;
 		TAILQ_REMOVE(&softc->rework_queue, ccbh, periph_links.tqe);
 		more =3D TAILQ_FIRST(&softc->work_queue) || TAILQ_FIRST(&softc->rework_q=
ueue);
+		queue =3D "rework";
 	} else {
 		ccbh =3D TAILQ_FIRST(&softc->work_queue);
 		if (ccbh =3D=3D NULL) {
-			ISP_PATH_PRT(softc->isp, ISP_LOGTDEBUG0, iccb->ccb_h.path, "%s: woken u=
p but no work?\n", __func__);
 			xpt_release_ccb(iccb);
 			return;
 		}
 		atio =3D (struct ccb_accept_tio *)ccbh;
 		TAILQ_REMOVE(&softc->work_queue, ccbh, periph_links.tqe);
 		more =3D TAILQ_FIRST(&softc->work_queue) !=3D NULL;
-		atio->ccb_h.ccb_data_offset =3D 0;
-	}
+		queue =3D "work";
+	}
+	ATIO_PPD(atio)->on_queue =3D 0;
=20
 	if (atio->tag_id =3D=3D 0xffffffff || atio->ccb_h.func_code !=3D XPT_ACCE=
PT_TARGET_IO) {
 		panic("BAD ATIO");
 	}
=20
+	data_len =3D is_write =3D 0;
 	data_ptr =3D NULL;
-	data_len =3D 0;
 	csio =3D &iccb->csio;
 	status =3D SCSI_STATUS_OK;
 	flags =3D CAM_SEND_STATUS;
 	memset(&atio->sense_data, 0, sizeof (atio->sense_data));
 	cdb =3D atio->cdb_io.cdb_bytes;
-	ISP_PATH_PRT(softc->isp, ISP_LOGTDEBUG0, ccbh->path, "%s: [0x%x] processi=
ng ATIO from 0x%x CDB=3D0x%x data_offset=3D%u\n", __func__, atio->tag_id, a=
tio->init_id,
-	    cdb[0], atio->ccb_h.ccb_data_offset);
+	ISP_PATH_PRT(softc->isp, ISP_LOGTDEBUG0, ccbh->path, "%s: [0x%x] processi=
ng ATIO from %s queue initiator 0x%x CDB=3D0x%x data_offset=3D%u\n", __func=
__, atio->tag_id,
+	    queue, atio->init_id, cdb[0], ATIO_PPD(atio)->offset);
=20
 	return_lun =3D XS_LUN(atio);
 	if (return_lun !=3D 0) {
 		xpt_print(atio->ccb_h.path, "[0x%x] Non-Zero Lun %d: cdb0=3D0x%x\n", ati=
o->tag_id, return_lun, cdb[0]);
 		if (cdb[0] !=3D INQUIRY && cdb[0] !=3D REPORT_LUNS && cdb[0] !=3D REQUES=
T_SENSE) {
 			status =3D SCSI_STATUS_CHECK_COND;
-			SDFIXED(atio->sense_data)->error_code =3D SSD_ERRCODE_VALID|SSD_CURRENT=
_ERROR|SSD_KEY_ILLEGAL_REQUEST;
-			SDFIXED(atio->sense_data)->add_sense_code =3D 0x25;
-			SDFIXED(atio->sense_data)->add_sense_code_qual =3D 0x0;
+			SDFIXED(atio->sense_data)->error_code =3D SSD_ERRCODE_VALID|SSD_CURRENT=
_ERROR;
+			SDFIXED(atio->sense_data)->flags =3D SSD_KEY_ILLEGAL_REQUEST;
+			SDFIXED(atio->sense_data)->add_sense_code =3D 0x25;	/* LOGICAL UNIT NOT=
 SUPPORTED */
 			atio->sense_len =3D SSD_MIN_SIZE;
 		}
 		return_lun =3D CAM_LUN_WILDCARD;
@@ -3269,30 +3747,30 @@
 			data_ptr =3D junk_data;
 		}
 		break;
+	case WRITE_6:
+	case WRITE_10:
+	case WRITE_12:
+	case WRITE_16:
+		is_write =3D 1;
+		/* FALLTHROUGH */
 	case READ_6:
 	case READ_10:
 	case READ_12:
 	case READ_16:
-		if (isptarg_rwparm(cdb, disk_data, disk_size, atio->ccb_h.ccb_data_offse=
t, &data_ptr, &data_len, &last)) {
+		is_data_cmd =3D 1;
+		r =3D isptarg_rwparm(cdb, disk_data, disk_size, ATIO_PPD(atio)->offset, =
&data_ptr, &data_len, &last);
+		if (r !=3D 0) {
 			status =3D SCSI_STATUS_CHECK_COND;
-			SDFIXED(atio->sense_data)->error_code =3D SSD_ERRCODE_VALID|SSD_CURRENT=
_ERROR|SSD_KEY_UNIT_ATTENTION;
-			SDFIXED(atio->sense_data)->add_sense_code =3D 0x5;
-			SDFIXED(atio->sense_data)->add_sense_code_qual =3D 0x24;
+			SDFIXED(atio->sense_data)->error_code =3D SSD_ERRCODE_VALID|SSD_CURRENT=
_ERROR;
+			SDFIXED(atio->sense_data)->flags =3D SSD_KEY_ILLEGAL_REQUEST;
+			if (r =3D=3D -1) {
+				SDFIXED(atio->sense_data)->add_sense_code =3D 0x21;	/* LOGICAL BLOCK A=
DDRESS OUT OF RANGE */
+			} else {
+				SDFIXED(atio->sense_data)->add_sense_code =3D 0x20;	/* INVALID COMMAND=
 OPERATION CODE */
+			}
 			atio->sense_len =3D SSD_MIN_SIZE;
 		} else {
-#ifdef	ISP_FORCE_TIMEOUT
-			{
-				static int foo;
-				if (foo++ =3D=3D 500) {
-					if (more) {
-						xpt_schedule(periph, 1);
-					}
-					foo =3D 0;
-					return;
-				}
-			}
-#endif
-#ifdef	ISP_TEST_SEPARATE_STATUS
+#ifdef	ISP_SEPARATE_STATUS
 			if (last && data_len) {
 				last =3D 0;
 			}
@@ -3301,47 +3779,11 @@
 				flags &=3D ~CAM_SEND_STATUS;
 			}
 			if (data_len) {
-				atio->ccb_h.ccb_data_offset +=3D data_len;
-				flags |=3D CAM_DIR_IN;
-			} else {
-				flags |=3D CAM_DIR_NONE;
-			}
-		}
-		break;
-	case WRITE_6:
-	case WRITE_10:
-	case WRITE_12:
-	case WRITE_16:
-		if (isptarg_rwparm(cdb, disk_data, disk_size, atio->ccb_h.ccb_data_offse=
t, &data_ptr, &data_len, &last)) {
-			status =3D SCSI_STATUS_CHECK_COND;
-			SDFIXED(atio->sense_data)->error_code =3D SSD_ERRCODE_VALID|SSD_CURRENT=
_ERROR|SSD_KEY_UNIT_ATTENTION;
-			SDFIXED(atio->sense_data)->add_sense_code =3D 0x5;
-			SDFIXED(atio->sense_data)->add_sense_code_qual =3D 0x24;
-			atio->sense_len =3D SSD_MIN_SIZE;
-		} else {
-#ifdef	ISP_FORCE_TIMEOUT
-			{
-				static int foo;
-				if (foo++ =3D=3D 500) {
-					if (more) {
-						xpt_schedule(periph, 1);
-					}
-					foo =3D 0;
-					return;
-				}
-			}
-#endif
-#ifdef	ISP_TEST_SEPARATE_STATUS
-			if (last && data_len) {
-				last =3D 0;
-			}
-#endif
-			if (last =3D=3D 0) {
-				flags &=3D ~CAM_SEND_STATUS;
-			}
-			if (data_len) {
-				atio->ccb_h.ccb_data_offset +=3D data_len;
-				flags |=3D CAM_DIR_OUT;
+				ATIO_PPD(atio)->offset +=3D data_len;
+				if (is_write)
+					flags |=3D CAM_DIR_OUT;
+				else
+					flags |=3D CAM_DIR_IN;
 			} else {
 				flags |=3D CAM_DIR_NONE;
 			}
@@ -3351,9 +3793,9 @@
 		flags |=3D CAM_DIR_IN;
 		if (cdb[1] || cdb[2] || cdb[3]) {
 			status =3D SCSI_STATUS_CHECK_COND;
-			SDFIXED(atio->sense_data)->error_code =3D SSD_ERRCODE_VALID|SSD_CURRENT=
_ERROR|SSD_KEY_UNIT_ATTENTION;
-			SDFIXED(atio->sense_data)->add_sense_code =3D 0x5;
-			SDFIXED(atio->sense_data)->add_sense_code_qual =3D 0x20;
+			SDFIXED(atio->sense_data)->error_code =3D SSD_ERRCODE_VALID|SSD_CURRENT=
_ERROR;
+			SDFIXED(atio->sense_data)->flags =3D SSD_KEY_UNIT_ATTENTION;
+			SDFIXED(atio->sense_data)->add_sense_code =3D 0x24;	/* INVALID FIELD IN=
 CDB */
 			atio->sense_len =3D SSD_MIN_SIZE;
 			break;
 		}
@@ -3375,9 +3817,9 @@
 		if (ca) {
 			ca =3D 0;
 			status =3D SCSI_STATUS_CHECK_COND;
-			SDFIXED(atio->sense_data)->error_code =3D SSD_ERRCODE_VALID|SSD_CURRENT=
_ERROR|SSD_KEY_UNIT_ATTENTION;
-			SDFIXED(atio->sense_data)->add_sense_code =3D 0x28;
-			SDFIXED(atio->sense_data)->add_sense_code_qual =3D 0x0;
+			SDFIXED(atio->sense_data)->error_code =3D SSD_ERRCODE_VALID|SSD_CURRENT=
_ERROR;
+			SDFIXED(atio->sense_data)->flags =3D SSD_KEY_UNIT_ATTENTION;
+			SDFIXED(atio->sense_data)->add_sense_code =3D 0x29;	/* POWER ON, RESET,=
 OR BUS DEVICE RESET OCCURRED */
 			atio->sense_len =3D SSD_MIN_SIZE;
 		}
 		break;
@@ -3393,9 +3835,9 @@
 		flags |=3D CAM_DIR_IN;
 		if (cdb[2] || cdb[3] || cdb[4] || cdb[5]) {
 			status =3D SCSI_STATUS_CHECK_COND;
-			SDFIXED(atio->sense_data)->error_code =3D SSD_ERRCODE_VALID|SSD_CURRENT=
_ERROR|SSD_KEY_UNIT_ATTENTION;
-			SDFIXED(atio->sense_data)->add_sense_code =3D 0x5;
-			SDFIXED(atio->sense_data)->add_sense_code_qual =3D 0x24;
+			SDFIXED(atio->sense_data)->error_code =3D SSD_ERRCODE_VALID|SSD_CURRENT=
_ERROR;
+			SDFIXED(atio->sense_data)->flags =3D SSD_KEY_ILLEGAL_REQUEST;
+			SDFIXED(atio->sense_data)->add_sense_code =3D  0x24;	/* INVALID FIELD I=
N CDB */
 			atio->sense_len =3D SSD_MIN_SIZE;
 			break;
 		}
@@ -3434,7 +3876,7 @@
 		junk_data[3] =3D (1 << 3);
 		ptr =3D NULL;
 		for (i =3D 0; i < 1; i++) {
-			ptr =3D &junk_data[8 + (1 << 3)];
+			ptr =3D &junk_data[8 + (i << 3)];
 			if (i >=3D 256) {
 				ptr[0] =3D 0x40 | ((i >> 8) & 0x3f);
 			}
@@ -3447,9 +3889,9 @@
 	default:
 		flags |=3D CAM_DIR_NONE;
 		status =3D SCSI_STATUS_CHECK_COND;
-		SDFIXED(atio->sense_data)->error_code =3D SSD_ERRCODE_VALID|SSD_CURRENT_=
ERROR|SSD_KEY_UNIT_ATTENTION;
-		SDFIXED(atio->sense_data)->add_sense_code =3D 0x5;
-		SDFIXED(atio->sense_data)->add_sense_code_qual =3D 0x20;
+		SDFIXED(atio->sense_data)->error_code =3D SSD_ERRCODE_VALID|SSD_CURRENT_=
ERROR;
+		SDFIXED(atio->sense_data)->flags =3D SSD_KEY_ILLEGAL_REQUEST;
+		SDFIXED(atio->sense_data)->add_sense_code =3D 0x20;	/* INVALID COMMAND O=
PERATION CODE */
 		atio->sense_len =3D SSD_MIN_SIZE;
 		break;
 	}
@@ -3468,16 +3910,31 @@
 		data_len =3D 0;
 		data_ptr =3D NULL;
 	}
-	cam_fill_ctio(csio, 0, isptarg_done, flags, MSG_SIMPLE_Q_TAG, atio->tag_i=
d, atio->init_id, status, data_ptr, data_len, 0);
+	cam_fill_ctio(csio, 0, isptarg_done, flags, MSG_SIMPLE_Q_TAG, atio->tag_i=
d, atio->init_id, status, data_ptr, data_len, 30 * hz);
 	iccb->ccb_h.target_id =3D atio->ccb_h.target_id;
 	iccb->ccb_h.target_lun =3D return_lun;
 	iccb->ccb_h.ccb_atio =3D atio;
+	CTIO_SEQ(iccb) =3D ATIO_PPD(atio)->sequence++;
+	ATIO_PPD(atio)->ctio_cnt++;
+	if (flags & CAM_SEND_STATUS) {
+		KASSERT((ATIO_PPD(atio)->status_sent =3D=3D 0), ("we have already sent s=
tatus for 0x%x in %s", atio->tag_id, __func__));
+		ATIO_PPD(atio)->status_sent =3D 1;
+	}
+	ISP_PATH_PRT(softc->isp, ISP_LOGTDEBUG0, atio->ccb_h.path, "%s: sending d=
ownstream for  0x%x sequence %u len %u flags %x\n", __func__, atio->tag_id,=
 CTIO_SEQ(iccb), data_len, flags);
 	xpt_action(iccb);
=20
 	if ((atio->ccb_h.status & CAM_DEV_QFRZN) !=3D 0) {
 		cam_release_devq(periph->path, 0, 0, 0, 0);=20
 		atio->ccb_h.status &=3D ~CAM_DEV_QFRZN;
 	}
+#ifdef	ISP_MULTI_CCBS
+	if (is_data_cmd && ATIO_PPD(atio)->status_sent =3D=3D 0 && ATIO_PPD(atio)=
->ctio_cnt < MULTI_CCB_DATA_CNT && ATIO_PPD(atio)->on_queue =3D=3D 0) {
+		ISP_PATH_PRT(softc->isp, ISP_LOGTDEBUG0, atio->ccb_h.path, "%s: more sti=
ll to do for 0x%x\n", __func__, atio->tag_id);
+		TAILQ_INSERT_TAIL(&softc->rework_queue, &atio->ccb_h, periph_links.tqe);=20
+		ATIO_PPD(atio)->on_queue =3D 1;
+		more =3D 1;
+	}
+#endif
 	if (more) {
 		xpt_schedule(periph, 1);
 	}
@@ -3492,7 +3949,7 @@
 	periph->softc =3D softc;
 	softc->periph =3D periph;
 	softc->path =3D periph->path;
-	ISP_PATH_PRT(softc->isp, ISP_LOGTDEBUG0, periph->path, "%s called\n", __f=
unc__);
+	ISP_PATH_PRT(softc->isp, ISP_LOGTDEBUG1, periph->path, "%s called\n", __f=
unc__);
 	return (CAM_REQ_CMP);
 }
=20
@@ -3501,7 +3958,7 @@
 {
 	struct isptarg_softc *softc;
 	softc =3D (struct isptarg_softc *)periph->softc;
-	ISP_PATH_PRT(softc->isp, ISP_LOGTDEBUG0, periph->path, "%s called\n", __f=
unc__);
+	ISP_PATH_PRT(softc->isp, ISP_LOGTDEBUG1, periph->path, "%s called\n", __f=
unc__);
 	softc->periph =3D NULL;
 	softc->path =3D NULL;
 	periph->softc =3D NULL;
@@ -3512,6 +3969,7 @@
 {
 	struct isptarg_softc *softc;
 	ispsoftc_t *isp;
+	uint32_t newoff;
 	struct ccb_accept_tio *atio;
 	struct ccb_immediate_notify *inot;
 	cam_status status;
@@ -3524,7 +3982,9 @@
 	case XPT_ACCEPT_TARGET_IO:
 		atio =3D (struct ccb_accept_tio *) ccb;
 		ISP_PATH_PRT(isp, ISP_LOGTDEBUG0, ccb->ccb_h.path, "[0x%x] ATIO seen in =
%s\n", atio->tag_id, __func__);
+		memset(ATIO_PPD(atio), 0, sizeof (ppd_t));
 		TAILQ_INSERT_TAIL(&softc->work_queue, &ccb->ccb_h, periph_links.tqe);=20
+		ATIO_PPD(atio)->on_queue =3D 1;
 		xpt_schedule(periph, 1);
 		break;
 	case XPT_IMMEDIATE_NOTIFY:
@@ -3534,22 +3994,43 @@
 		xpt_schedule(periph, 1);
 		break;
 	case XPT_CONT_TARGET_IO:
+		atio =3D ccb->ccb_h.ccb_atio;
+		KASSERT((ATIO_PPD(atio)->ctio_cnt !=3D 0), ("ctio zero when finishing a =
CTIO"));
+		ATIO_PPD(atio)->ctio_cnt--;
+		if ((ccb->ccb_h.status & CAM_STATUS_MASK) !=3D CAM_REQ_CMP) {
+			switch (ccb->ccb_h.status & CAM_STATUS_MASK) {
+			case CAM_MESSAGE_RECV:
+				newoff =3D (ccb->csio.msg_ptr[3] << 24) | (ccb->csio.msg_ptr[4] << 16)=
 | (ccb->csio.msg_ptr[5] << 8) | (ccb->csio.msg_ptr[6]);
+				ISP_PATH_PRT(isp, ISP_LOGWARN, ccb->ccb_h.path, "[0x%x] got message to=
 return to reset offset to 0x%x at sequence %u\n", atio->tag_id, newoff, CT=
IO_SEQ(ccb));
+				ATIO_PPD(atio)->offset =3D newoff;
+				ATIO_PPD(atio)->status_sent =3D 0;
+				if (ATIO_PPD(atio)->on_queue =3D=3D 0) {
+					TAILQ_INSERT_TAIL(&softc->rework_queue, &atio->ccb_h, periph_links.tq=
e);=20
+					ATIO_PPD(atio)->on_queue =3D 1;
+				}
+				xpt_schedule(periph, 1);
+				break;
+			default:
+				cam_error_print(ccb, CAM_ESF_ALL, CAM_EPF_ALL);
+				xpt_action((union ccb *)atio);
+				break;
+			}
+		} else if ((ccb->ccb_h.flags & CAM_SEND_STATUS) =3D=3D 0) {
+			ISP_PATH_PRT(isp, ISP_LOGTDEBUG0, ccb->ccb_h.path, "[0x%x] MID CTIO seq=
uence %u seen in %s\n", atio->tag_id, CTIO_SEQ(ccb), __func__);
+			if (ATIO_PPD(atio)->status_sent =3D=3D 0 && ATIO_PPD(atio)->on_queue =
=3D=3D 0) {
+				TAILQ_INSERT_TAIL(&softc->rework_queue, &atio->ccb_h, periph_links.tqe=
);=20
+				ATIO_PPD(atio)->on_queue =3D 1;
+			}
+			xpt_schedule(periph, 1);
+		} else {
+			KASSERT((ATIO_PPD(atio)->ctio_cnt =3D=3D 0), ("ctio count still %d when=
 we think we've sent the STATUS ctio", ATIO_PPD(atio)->ctio_cnt));
+			ISP_PATH_PRT(isp, ISP_LOGTDEBUG0, ccb->ccb_h.path, "[0x%x] FINAL CTIO s=
equence %u seen in %s\n", atio->tag_id, CTIO_SEQ(ccb), __func__);
+			xpt_action((union ccb *)atio);
+		}
 		if ((ccb->ccb_h.status & CAM_DEV_QFRZN) !=3D 0) {
 			cam_release_devq(ccb->ccb_h.path, 0, 0, 0, 0);=20
 			ccb->ccb_h.status &=3D ~CAM_DEV_QFRZN;
 		}
-		atio =3D ccb->ccb_h.ccb_atio;
-		if ((ccb->ccb_h.status & CAM_STATUS_MASK) !=3D CAM_REQ_CMP) {
-			cam_error_print(ccb, CAM_ESF_ALL, CAM_EPF_ALL);
-			xpt_action((union ccb *)atio);
-		} else if ((ccb->ccb_h.flags & CAM_SEND_STATUS) =3D=3D 0) {
-			ISP_PATH_PRT(isp, ISP_LOGTDEBUG0, ccb->ccb_h.path, "[0x%x] MID CTIO see=
n in %s\n", atio->tag_id, __func__);
-			TAILQ_INSERT_TAIL(&softc->rework_queue, &atio->ccb_h, periph_links.tqe)=
;=20
-			xpt_schedule(periph, 1);
-		} else {
-			ISP_PATH_PRT(isp, ISP_LOGTDEBUG0, ccb->ccb_h.path, "[0x%x] FINAL CTIO s=
een in %s\n", atio->tag_id, __func__);
-			xpt_action((union ccb *)atio);
-		}
 		xpt_release_ccb(ccb);
 		break;
 	case XPT_NOTIFY_ACKNOWLEDGE:
@@ -3558,7 +4039,7 @@
 			ccb->ccb_h.status &=3D ~CAM_DEV_QFRZN;
 		}
 		inot =3D ccb->ccb_h.ccb_inot;
-		ISP_PATH_PRT(isp, ISP_LOGTDEBUG0, inot->ccb_h.path, "[0x%x] recycle noti=
fy for tag 0x%x\n", inot->tag_id, inot->seq_id);
+		ISP_PATH_PRT(isp, ISP_LOGTDEBUG1, inot->ccb_h.path, "[0x%x] recycle noti=
fy for tag 0x%x\n", inot->tag_id, inot->seq_id);
 		xpt_release_ccb(ccb);
 		xpt_action((union ccb *)inot);
 		break;
@@ -3684,13 +4165,7 @@
 	xpt_setup_ccb(&ccb->ccb_h, periph->path, 10);
 	ccb->ccb_h.func_code =3D XPT_SET_SIM_KNOB;
 	ccb->knob.xport_specific.fc.role =3D KNOB_ROLE_NONE;
-#ifdef	ISP_TEST_WWNS
-	ccb->knob.xport_specific.fc.valid =3D KNOB_VALID_ROLE | KNOB_VALID_ADDRES=
S;
-	ccb->knob.xport_specific.fc.wwnn =3D 0x508004d000000000ULL | (device_get_=
unit(isp->isp_osinfo.dev) << 8) | (chan << 16);
-	ccb->knob.xport_specific.fc.wwpn =3D 0x508004d000000001ULL | (device_get_=
unit(isp->isp_osinfo.dev) << 8) | (chan << 16);
-#else
 	ccb->knob.xport_specific.fc.valid =3D KNOB_VALID_ROLE;
-#endif
=20
 	ISP_LOCK(isp);
 	xpt_action(ccb);
@@ -3733,6 +4208,7 @@
 		xpt_setup_ccb(&ccb->ccb_h, wperiph->path, 1);
 		ccb->ccb_h.func_code =3D XPT_ACCEPT_TARGET_IO;
 		ccb->ccb_h.cbfcnp =3D isptarg_done;
+		ccb->ccb_h.ppriv_ptr0 =3D malloc(sizeof (ppd_t), M_ISPTARG, M_WAITOK | M=
_ZERO);
 		ISP_LOCK(isp);
 		xpt_action(ccb);
 		ISP_UNLOCK(isp);
@@ -3742,6 +4218,7 @@
 		xpt_setup_ccb(&ccb->ccb_h, periph->path, 1);
 		ccb->ccb_h.func_code =3D XPT_ACCEPT_TARGET_IO;
 		ccb->ccb_h.cbfcnp =3D isptarg_done;
+		ccb->ccb_h.ppriv_ptr0 =3D malloc(sizeof (ppd_t), M_ISPTARG, M_WAITOK | M=
_ZERO);
 		ISP_LOCK(isp);
 		xpt_action(ccb);
 		ISP_UNLOCK(isp);
@@ -3890,9 +4367,8 @@
 	}
=20
 	if (lba + cnt > dl) {
-		return (-1);
-	}
-
+		return (-2);
+	}
=20
 	curcnt =3D MAX_ISP_TARG_TRANSFER;
 	if (offset + curcnt >=3D cnt) {
@@ -3901,6 +4377,10 @@
 	} else {
 		*lp =3D 0;
 	}
+#ifdef	ISP_MULTI_CCBS
+	if (curcnt > MULTI_CCB_DATA_LIM)
+		curcnt =3D MULTI_CCB_DATA_LIM;
+#endif
 	*tl =3D curcnt;
 	*kp =3D &dp[lba + offset];
 	return (0);
@@ -3976,14 +4456,6 @@
=20
 	handle =3D isp_find_handle(isp, xs);
=20
-	if (handle !=3D ISP_HANDLE_FREE && !XS_CMD_WPEND_P(xs)) {
-		isp_xs_prt(isp, xs, ISP_LOGWARN, "first watchdog (handle 0x%x) timed out=
- deferring for grace period", handle);
-		callout_reset(&PISP_PCMD(xs)->wdog, 2 * hz, isp_watchdog, xs);
-		XS_CMD_S_WPEND(xs);
-		return;
-	}
-	XS_C_TACTIVE(xs);
-
 	/*
 	 * Hand crank the interrupt code just to be sure the command isn't stuck =
somewhere.
 	 */
@@ -4031,7 +4503,8 @@
 		}=20
 		isp_destroy_handle(isp, handle);
 		isp_prt(isp, ISP_LOGERR, "%s: timeout for handle 0x%x", __func__, handle=
);
-		XS_SETERR(xs, CAM_CMD_TIMEOUT);
+		xs->ccb_h.status &=3D ~CAM_STATUS_MASK;
+		xs->ccb_h.status |=3D CAM_CMD_TIMEOUT;
 		isp_prt_endcmd(isp, xs);
 		isp_done(xs);
 	} else {
@@ -4122,7 +4595,7 @@
 			continue;
 		}
 		if (lp->gone_timer !=3D 0) {
-			isp_prt(isp, ISP_LOGSANCFG, "%s: Chan %d more to do for target %u (time=
r=3D%u)", __func__, chan, lp->dev_map_idx - 1, lp->gone_timer);
+			isp_prt(isp, ISP_LOG_SANCFG, "%s: Chan %d more to do for target %u (tim=
er=3D%u)", __func__, chan, lp->dev_map_idx - 1, lp->gone_timer);
 			lp->gone_timer -=3D 1;
 			more_to_do++;
 			continue;
@@ -4139,7 +4612,7 @@
 			callout_reset(&fc->gdt, hz, isp_gdt, fc);
 		} else {
 			callout_deactivate(&fc->gdt);
-			isp_prt(isp, ISP_LOGSANCFG, "Chan %d Stopping Gone Device Timer @ %lu",=
 chan, (unsigned long) time_uptime);
+			isp_prt(isp, ISP_LOG_SANCFG, "Chan %d Stopping Gone Device Timer @ %lu"=
, chan, (unsigned long) time_uptime);
 		}
 	}
 	ISP_UNLOCK(isp);
@@ -4171,7 +4644,7 @@
 	int dbidx, tgt, i;
=20
 	ISP_LOCK(isp);
-	isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, "Chan %d Loop Down Timer expire=
d @ %lu", chan, (unsigned long) time_uptime);
+	isp_prt(isp, ISP_LOG_SANCFG|ISP_LOGDEBUG0, "Chan %d Loop Down Timer expir=
ed @ %lu", chan, (unsigned long) time_uptime);
 	callout_deactivate(&fc->ldt);
=20
 	/*
@@ -4190,7 +4663,7 @@
 		/*
 		 * XXX: CLEAN UP AND COMPLETE ANY PENDING COMMANDS FIRST!
 		 */
-	=09
+
=20
 		for (i =3D 0; i < isp->isp_maxcmds; i++) {
 			struct ccb_scsiio *xs;
@@ -4204,14 +4677,14 @@
 			if (dbidx !=3D (FCPARAM(isp, chan)->isp_dev_map[XS_TGT(xs)] - 1)) {
 				continue;
 			}
-			isp_prt(isp, ISP_LOGWARN, "command handle 0x%08x for %d.%d.%d orphaned =
by loop down timeout",
+			isp_prt(isp, ISP_LOGWARN, "command handle 0x%x for %d.%d.%d orphaned by=
 loop down timeout",
 			    isp->isp_xflist[i].handle, chan, XS_TGT(xs), XS_LUN(xs));
 		}
=20
 		/*
 		 * Mark that we've announced that this device is gone....
 		 */
-		lp->reserved =3D 1;
+		lp->announced =3D 1;
=20
 		/*
 		 * but *don't* change the state of the entry. Just clear
@@ -4254,7 +4727,7 @@
 	for (;;) {
 		int lb, lim;
=20
-		isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, "%s: Chan %d checking FC state=
", __func__, chan);
+		isp_prt(isp, ISP_LOG_SANCFG|ISP_LOGDEBUG0, "%s: Chan %d checking FC stat=
e", __func__, chan);
 		lb =3D isp_fc_runstate(isp, chan, 250000);
=20
 		/*
@@ -4272,9 +4745,9 @@
 			fc->loop_down_time +=3D slp;
=20
 			if (lb < 0) {
-				isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, "%s: Chan %d FC loop not up =
(down count %d)", __func__, chan, fc->loop_down_time);
+				isp_prt(isp, ISP_LOG_SANCFG|ISP_LOGDEBUG0, "%s: Chan %d FC loop not up=
 (down count %d)", __func__, chan, fc->loop_down_time);
 			} else {
-				isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, "%s: Chan %d FC got to %d (d=
own count %d)", __func__, chan, lb, fc->loop_down_time);
+				isp_prt(isp, ISP_LOG_SANCFG|ISP_LOGDEBUG0, "%s: Chan %d FC got to %d (=
down count %d)", __func__, chan, lb, fc->loop_down_time);
 			}
=20
 			/*
@@ -4304,11 +4777,14 @@
 			}
=20
 		} else if (lb) {
-			isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, "%s: Chan %d FC Loop Down", _=
_func__, chan);
+			isp_prt(isp, ISP_LOG_SANCFG|ISP_LOGDEBUG0, "%s: Chan %d FC Loop Down", =
__func__, chan);
 			fc->loop_down_time +=3D slp;
-			slp =3D 60;
+			if (fc->loop_down_time > 300)
+				slp =3D 0;
+			else
+				slp =3D 60;
 		} else {
-			isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, "%s: Chan %d FC state OK", __=
func__, chan);
+			isp_prt(isp, ISP_LOG_SANCFG|ISP_LOGDEBUG0, "%s: Chan %d FC state OK", _=
_func__, chan);
 			fc->loop_down_time =3D 0;
 			slp =3D 0;
 		}
@@ -4326,7 +4802,7 @@
 			isp_unfreeze_loopdown(isp, chan);
 		}
=20
-		isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, "%s: Chan %d sleep time %d", _=
_func__, chan, slp);
+		isp_prt(isp, ISP_LOG_SANCFG|ISP_LOGDEBUG0, "%s: Chan %d sleep time %d", =
__func__, chan, slp);
=20
 		msleep(fc, &isp->isp_osinfo.lock, PRIBIO, "ispf", slp * hz);
=20
@@ -4338,7 +4814,7 @@
 		 * to settle.
 		 */
 		if (slp =3D=3D 0 && fc->hysteresis) {
-			isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, "%s: Chan %d sleep hysteresis=
 ticks %d", __func__, chan, fc->hysteresis * hz);
+			isp_prt(isp, ISP_LOG_SANCFG|ISP_LOGDEBUG0, "%s: Chan %d sleep hysteresi=
s ticks %d", __func__, chan, fc->hysteresis * hz);
 			mtx_unlock(&isp->isp_osinfo.lock);
 			pause("ispt", fc->hysteresis * hz);
 			mtx_lock(&isp->isp_osinfo.lock);
@@ -4355,7 +4831,7 @@
 	struct ccb_trans_settings *cts;
=20
 	CAM_DEBUG(ccb->ccb_h.path, CAM_DEBUG_TRACE, ("isp_action\n"));
-=09
+
 	isp =3D (ispsoftc_t *)cam_sim_softc(sim);
 	mtx_assert(&isp->isp_lock, MA_OWNED);
=20
@@ -4388,6 +4864,7 @@
 				break;
 			}
 		}
+		ccb->csio.req_map =3D NULL;
 #ifdef	DIAGNOSTIC
 		if (ccb->ccb_h.target_id > (ISP_MAX_TARGETS(isp) - 1)) {
 			xpt_print(ccb->ccb_h.path, "invalid target\n");
@@ -4412,7 +4889,6 @@
 		error =3D isp_start((XS_T *) ccb);
 		switch (error) {
 		case CMD_QUEUED:
-			XS_CMD_S_CLEAR(ccb);
 			ccb->ccb_h.status |=3D CAM_SIM_QUEUED;
 			if (ccb->ccb_h.timeout =3D=3D CAM_TIME_INFINITY) {
 				break;
@@ -4422,7 +4898,6 @@
 				ts =3D 60*1000;
 			}
 			ts =3D isp_mstohz(ts);
-			XS_S_TACTIVE(ccb);
 			callout_reset(&PISP_PCMD(ccb)->wdog, ts, isp_watchdog, ccb);
 			break;
 		case CMD_RQLATER:
@@ -4449,7 +4924,7 @@
 			isp_prt(isp, ISP_LOGDEBUG0, "%d.%d retry later", XS_TGT(ccb), XS_LUN(cc=
b));
 			cam_freeze_devq(ccb->ccb_h.path);
 			cam_release_devq(ccb->ccb_h.path, RELSIM_RELEASE_AFTER_TIMEOUT, 0, 1000=
, 0);
-			XS_SETERR(ccb, CAM_REQUEUE_REQ);
+			ccb->ccb_h.status =3D CAM_REQUEUE_REQ;
 			isp_free_pcmd(isp, ccb);
 			xpt_done(ccb);
 			break;
@@ -4457,7 +4932,7 @@
 			isp_free_pcmd(isp, ccb);
 			cam_freeze_devq(ccb->ccb_h.path);
 			cam_release_devq(ccb->ccb_h.path, RELSIM_RELEASE_AFTER_TIMEOUT, 0, 100,=
 0);
-			XS_SETERR(ccb, CAM_REQUEUE_REQ);
+			ccb->ccb_h.status =3D CAM_REQUEUE_REQ;
 			xpt_done(ccb);
 			break;
 		case CMD_COMPLETE:
@@ -4465,7 +4940,7 @@
 			break;
 		default:
 			isp_prt(isp, ISP_LOGERR, "What's this? 0x%x at %d in file %s", error, _=
_LINE__, __FILE__);
-			XS_SETERR(ccb, CAM_REQ_CMP_ERR);
+			ccb->ccb_h.status =3D CAM_REQUEUE_REQ;
 			isp_free_pcmd(isp, ccb);
 			xpt_done(ccb);
 		}
@@ -4503,8 +4978,8 @@
 			ccb->ccb_h.status =3D CAM_DEV_NOT_THERE;
 			break;
 		}
-		ccb->ccb_h.sim_priv.entries[0].field =3D 0;
-		ccb->ccb_h.sim_priv.entries[1].ptr =3D isp;
+		ccb->ccb_h.spriv_field0 =3D 0;
+		ccb->ccb_h.spriv_ptr1 =3D isp;
 		ccb->ccb_h.flags =3D 0;
=20
 		if (ccb->ccb_h.func_code =3D=3D XPT_ACCEPT_TARGET_IO) {
@@ -4516,8 +4991,9 @@
 			}
 			tptr->atio_count++;
 			SLIST_INSERT_HEAD(&tptr->atios, &ccb->ccb_h, sim_links.sle);
-			ISP_PATH_PRT(isp, ISP_LOGTDEBUG0, ccb->ccb_h.path, "Put FREE ATIO (tag =
id 0x%x), count now %d\n",
+			ISP_PATH_PRT(isp, ISP_LOGTDEBUG2, ccb->ccb_h.path, "Put FREE ATIO (tag =
id 0x%x), count now %d\n",
 			    ccb->atio.tag_id, tptr->atio_count);
+			ccb->atio.tag_id =3D 0;
 		} else if (ccb->ccb_h.func_code =3D=3D XPT_IMMEDIATE_NOTIFY) {
 			if (ccb->cin1.tag_id) {
 				inot_private_data_t *ntp =3D isp_find_ntpd(isp, tptr, ccb->cin1.tag_id=
, ccb->cin1.seq_id);
@@ -4527,13 +5003,15 @@
 			}
 			tptr->inot_count++;
 			SLIST_INSERT_HEAD(&tptr->inots, &ccb->ccb_h, sim_links.sle);
-			ISP_PATH_PRT(isp, ISP_LOGTDEBUG0, ccb->ccb_h.path, "Put FREE INOT, (seq=
 id 0x%x) count now %d\n",
+			ISP_PATH_PRT(isp, ISP_LOGTDEBUG2, ccb->ccb_h.path, "Put FREE INOT, (seq=
 id 0x%x) count now %d\n",
 			    ccb->cin1.seq_id, tptr->inot_count);
+			ccb->cin1.seq_id =3D 0;
 		} else if (ccb->ccb_h.func_code =3D=3D XPT_IMMED_NOTIFY) {
 			tptr->inot_count++;
 			SLIST_INSERT_HEAD(&tptr->inots, &ccb->ccb_h, sim_links.sle);
-			ISP_PATH_PRT(isp, ISP_LOGTDEBUG0, ccb->ccb_h.path, "Put FREE INOT, (seq=
 id 0x%x) count now %d\n",
+			ISP_PATH_PRT(isp, ISP_LOGTDEBUG2, ccb->ccb_h.path, "Put FREE INOT, (seq=
 id 0x%x) count now %d\n",
 			    ccb->cin1.seq_id, tptr->inot_count);
+			ccb->cin1.seq_id =3D 0;
 		}
 		rls_lun_statep(isp, tptr);
 		ccb->ccb_h.status =3D CAM_REQ_INPROG;
@@ -4567,7 +5045,8 @@
 			rls_lun_statep(isp, tptr);
 			cam_freeze_devq(ccb->ccb_h.path);
 			cam_release_devq(ccb->ccb_h.path, RELSIM_RELEASE_AFTER_TIMEOUT, 0, 1000=
, 0);
-			XS_SETERR(ccb, CAM_REQUEUE_REQ);
+			ccb->ccb_h.status &=3D ~CAM_STATUS_MASK;
+			ccb->ccb_h.status |=3D CAM_REQUEUE_REQ;
 			break;
 		}
 		isp_put_ntpd(isp, tptr, ntp);
@@ -4578,7 +5057,7 @@
 		break;
 	}
 	case XPT_CONT_TARGET_IO:
-		isp_target_start_ctio(isp, ccb);
+		isp_target_start_ctio(isp, ccb, FROM_CAM);
 		break;
 #endif
 	case XPT_RESET_DEV:		/* BDR the specified SCSI device */
@@ -4874,13 +5353,24 @@
 			}
 			if (rchange) {
 				ISP_PATH_PRT(isp, ISP_LOGCONFIG, ccb->ccb_h.path, "changing role on fr=
om %d to %d\n", fcp->role, newrole);
+#ifdef	ISP_TARGET_MODE
+				ISP_SET_PC(isp, bus, tm_enabled, 0);
+				ISP_SET_PC(isp, bus, tm_luns_enabled, 0);
+#endif
 				if (isp_fc_change_role(isp, bus, newrole) !=3D 0) {
 					ccb->ccb_h.status =3D CAM_REQ_CMP_ERR;
+					xpt_done(ccb);
+					break;
+				}
 #ifdef	ISP_TARGET_MODE
-				} else if (newrole =3D=3D ISP_ROLE_TARGET || newrole =3D=3D ISP_ROLE_B=
OTH) {
+				if (newrole =3D=3D ISP_ROLE_TARGET || newrole =3D=3D ISP_ROLE_BOTH) {
+					/*
+					 * Give the new role a chance to complain and settle
+					 */
+					msleep(isp, &isp->isp_lock, PRIBIO, "taking a breather", 2);
 					ccb->ccb_h.status =3D isp_enable_deferred_luns(isp, bus);
+				}
 #endif
-				}
 			}
 		}
 		xpt_done(ccb);
@@ -5026,10 +5516,8 @@
 		xpt_print(sccb->ccb_h.path, "cam completion status 0x%x\n", sccb->ccb_h.=
status);
 	}
=20
-	XS_CMD_S_DONE(sccb);
-	if (XS_TACTIVE_P(sccb))
+	if (callout_active(&PISP_PCMD(sccb)->wdog))
 		callout_stop(&PISP_PCMD(sccb)->wdog);
-	XS_CMD_S_CLEAR(sccb);
 	isp_free_pcmd(isp, (union ccb *) sccb);
 	xpt_done((union ccb *) sccb);
 }
@@ -5038,8 +5526,9 @@
 isp_async(ispsoftc_t *isp, ispasync_t cmd, ...)
 {
 	int bus;
-	static const char prom[] =3D "Chan %d PortID 0x%06x handle 0x%x role %s %=
s WWPN 0x%08x%08x";
-	static const char prom2[] =3D "Chan %d PortID 0x%06x handle 0x%x role %s =
%s tgt %u WWPN 0x%08x%08x";
+	static const char prom0[] =3D "Chan %d PortID 0x%06x handle 0x%x %s %s WW=
PN 0x%08x%08x";
+	static const char prom2[] =3D "Chan %d PortID 0x%06x handle 0x%x %s %s tg=
t %u WWPN 0x%08x%08x";
+	char buf[64];
 	char *msg =3D NULL;
 	target_id_t tgt;
 	fcportdb_t *lp;
@@ -5148,7 +5637,7 @@
 				}
 				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_LOG_SANCFG|ISP_LOGDEBUG0, "Starting Loop Down Timer =
@ %lu", (unsigned long) time_uptime);
 				}
 			}
 		}
@@ -5177,9 +5666,9 @@
 		lp =3D va_arg(ap, fcportdb_t *);
 		va_end(ap);
 		fc =3D ISP_FC_PC(isp, bus);
-		lp->reserved =3D 0;
+		lp->announced =3D 0;
 		lp->gone_timer =3D 0;
-		if ((FCPARAM(isp, bus)->role & ISP_ROLE_INITIATOR) && (lp->roles & (SVC3=
_TGT_ROLE >> SVC3_ROLE_SHIFT))) {
+		if ((FCPARAM(isp, bus)->role & ISP_ROLE_INITIATOR) && (lp->prli_word3 & =
PRLI_WD3_TARGET_FUNCTION)) {
 			int dbidx =3D lp - FCPARAM(isp, bus)->portdb;
 			int i;
=20
@@ -5199,12 +5688,13 @@
 				isp_dump_portdb(isp, bus);
 			}
 		}
+		isp_gen_role_str(buf, sizeof (buf), lp->prli_word3);
 		if (lp->dev_map_idx) {
 			tgt =3D lp->dev_map_idx - 1;
-			isp_prt(isp, ISP_LOGCONFIG, prom2, bus, lp->portid, lp->handle, roles[l=
p->roles], "arrived at", tgt, (uint32_t) (lp->port_wwn >> 32), (uint32_t) l=
p->port_wwn);
+			isp_prt(isp, ISP_LOGCONFIG, prom2, bus, lp->portid, lp->handle, buf, "a=
rrived at", tgt, (uint32_t) (lp->port_wwn >> 32), (uint32_t) lp->port_wwn);
 			isp_make_here(isp, bus, tgt);
 		} else {
-			isp_prt(isp, ISP_LOGCONFIG, prom, bus, lp->portid, lp->handle, roles[lp=
->roles], "arrived", (uint32_t) (lp->port_wwn >> 32), (uint32_t) lp->port_w=
wn);
+			isp_prt(isp, ISP_LOGCONFIG, prom0, bus, lp->portid, lp->handle, buf, "a=
rrived", (uint32_t) (lp->port_wwn >> 32), (uint32_t) lp->port_wwn);
 		}
 		break;
 	case ISPASYNC_DEV_CHANGED:
@@ -5213,7 +5703,7 @@
 		lp =3D va_arg(ap, fcportdb_t *);
 		va_end(ap);
 		fc =3D ISP_FC_PC(isp, bus);
-		lp->reserved =3D 0;
+		lp->announced =3D 0;
 		lp->gone_timer =3D 0;
 		if (isp_change_is_bad) {
 			lp->state =3D FC_PORTDB_STATE_NIL;
@@ -5224,20 +5714,22 @@
 				isp_prt(isp, ISP_LOGCONFIG, prom3, bus, lp->portid, tgt, "change is ba=
d");
 				isp_make_gone(isp, bus, tgt);
 			} else {
-				isp_prt(isp, ISP_LOGCONFIG, prom, bus, lp->portid, lp->handle, roles[l=
p->roles], "changed and departed",
+				isp_gen_role_str(buf, sizeof (buf), lp->prli_word3);
+				isp_prt(isp, ISP_LOGCONFIG, prom0, bus, lp->portid, lp->handle, buf, "=
changed and departed",
 				    (uint32_t) (lp->port_wwn >> 32), (uint32_t) lp->port_wwn);
 			}
 		} else {
 			lp->portid =3D lp->new_portid;
-			lp->roles =3D lp->new_roles;
+			lp->prli_word3 =3D lp->new_prli_word3;
+			isp_gen_role_str(buf, sizeof (buf), lp->prli_word3);
 			if (lp->dev_map_idx) {
 				int t =3D lp->dev_map_idx - 1;
 				FCPARAM(isp, bus)->isp_dev_map[t] =3D (lp - FCPARAM(isp, bus)->portdb)=
 + 1;
 				tgt =3D lp->dev_map_idx - 1;
-				isp_prt(isp, ISP_LOGCONFIG, prom2, bus, lp->portid, lp->handle, roles[=
lp->roles], "changed at", tgt,
+				isp_prt(isp, ISP_LOGCONFIG, prom2, bus, lp->portid, lp->handle, buf, "=
changed at", tgt,
 				    (uint32_t) (lp->port_wwn >> 32), (uint32_t) lp->port_wwn);
 			} else {
-				isp_prt(isp, ISP_LOGCONFIG, prom, bus, lp->portid, lp->handle, roles[l=
p->roles], "changed", (uint32_t) (lp->port_wwn >> 32), (uint32_t) lp->port_=
wwn);
+				isp_prt(isp, ISP_LOGCONFIG, prom0, bus, lp->portid, lp->handle, buf, "=
changed", (uint32_t) (lp->port_wwn >> 32), (uint32_t) lp->port_wwn);
 			}
 		}
 		break;
@@ -5246,12 +5738,13 @@
 		bus =3D va_arg(ap, int);
 		lp =3D va_arg(ap, fcportdb_t *);
 		va_end(ap);
+		isp_gen_role_str(buf, sizeof (buf), lp->prli_word3);
 		if (lp->dev_map_idx) {
 			tgt =3D lp->dev_map_idx - 1;
-			isp_prt(isp, ISP_LOGCONFIG, prom2, bus, lp->portid, lp->handle, roles[l=
p->roles], "stayed at", tgt,
+			isp_prt(isp, ISP_LOGCONFIG, prom2, bus, lp->portid, lp->handle, buf, "s=
tayed at", tgt,
 		    	    (uint32_t) (lp->port_wwn >> 32), (uint32_t) lp->port_wwn);
 		} else {
-			isp_prt(isp, ISP_LOGCONFIG, prom, bus, lp->portid, lp->handle, roles[lp=
->roles], "stayed",
+			isp_prt(isp, ISP_LOGCONFIG, prom0, bus, lp->portid, lp->handle, buf, "s=
tayed",
 		    	    (uint32_t) (lp->port_wwn >> 32), (uint32_t) lp->port_wwn);
 		}
 		break;
@@ -5270,18 +5763,19 @@
 		 * announce that it's gone.
 		 *
 		 */
-		if (lp->dev_map_idx && lp->reserved =3D=3D 0) {
-			lp->reserved =3D 1;
+		isp_gen_role_str(buf, sizeof (buf), lp->prli_word3);
+		if (lp->dev_map_idx && lp->announced =3D=3D 0) {
+			lp->announced =3D 1;
 			lp->state =3D FC_PORTDB_STATE_ZOMBIE;
 			lp->gone_timer =3D ISP_FC_PC(isp, bus)->gone_device_time;
 			if (fc->ready && !callout_active(&fc->gdt)) {
-				isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, "Chan %d Starting Gone Devic=
e Timer with %u seconds time now %lu", bus, lp->gone_timer, (unsigned long)=
time_uptime);
+				isp_prt(isp, ISP_LOG_SANCFG|ISP_LOGDEBUG0, "Chan %d Starting Gone Devi=
ce Timer with %u seconds time now %lu", bus, lp->gone_timer, (unsigned long=
)time_uptime);
 				callout_reset(&fc->gdt, hz, isp_gdt, fc);
 			}
 			tgt =3D lp->dev_map_idx - 1;
-			isp_prt(isp, ISP_LOGCONFIG, prom2, bus, lp->portid, lp->handle, roles[l=
p->roles], "gone zombie at", tgt, (uint32_t) (lp->port_wwn >> 32), (uint32_=
t) lp->port_wwn);
-		} else if (lp->reserved =3D=3D 0) {
-			isp_prt(isp, ISP_LOGCONFIG, prom, bus, lp->portid, lp->handle, roles[lp=
->roles], "departed", (uint32_t) (lp->port_wwn >> 32), (uint32_t) lp->port_=
wwn);
+			isp_prt(isp, ISP_LOGCONFIG, prom2, bus, lp->portid, lp->handle, buf, "g=
one zombie at", tgt, (uint32_t) (lp->port_wwn >> 32), (uint32_t) lp->port_w=
wn);
+		} else if (lp->announced =3D=3D 0) {
+			isp_prt(isp, ISP_LOGCONFIG, prom0, bus, lp->portid, lp->handle, buf, "d=
eparted", (uint32_t) (lp->port_wwn >> 32), (uint32_t) lp->port_wwn);
 		}
 		break;
 	case ISPASYNC_CHANGE_NOTIFY:
@@ -5315,7 +5809,7 @@
 		 * If the loop down timer is running, cancel it.
 		 */
 		if (fc->ready && callout_active(&fc->ldt)) {
-			isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, "Stopping Loop Down Timer @ %=
lu", (unsigned long) time_uptime);
+			isp_prt(isp, ISP_LOG_SANCFG|ISP_LOGDEBUG0, "Stopping Loop Down Timer @ =
%lu", (unsigned long) time_uptime);
 			callout_stop(&fc->ldt);
 		}
 		isp_prt(isp, ISP_LOGINFO, msg, bus);
@@ -5355,6 +5849,7 @@
 		case NT_HBA_RESET:
 			isp_del_all_wwn_entries(isp, ISP_NOCHAN);
 			break;
+		case NT_GLOBAL_LOGOUT:
 		case NT_LOGOUT:
 			/*
 			 * This is device arrival/departure notification
@@ -5396,6 +5891,29 @@
 		}
 		break;
 	}
+	case ISPASYNC_TARGET_NOTIFY_ACK:
+	{
+		void *inot;
+		va_start(ap, cmd);
+		inot =3D va_arg(ap, void *);
+		va_end(ap);
+		if (isp_notify_ack(isp, inot)) {
+			isp_tna_t *tp =3D malloc(sizeof (*tp), M_DEVBUF, M_NOWAIT);
+			if (tp) {
+				tp->isp =3D isp;
+				if (inot) {
+					memcpy(tp->data, inot, sizeof (tp->data));
+					tp->not =3D tp->data;
+				} else {
+					tp->not =3D NULL;
+				}
+				(void) timeout(isp_refire_notify_ack, tp, 5);
+			} else {
+				isp_prt(isp, ISP_LOGERR, "you lose- cannot allocate a notify refire");
+			}
+		}
+		break;
+	}
 	case ISPASYNC_TARGET_ACTION:
 	{
 		isphdr_t *hp;
@@ -5628,13 +6146,13 @@
 isp_prt(ispsoftc_t *isp, int level, const char *fmt, ...)
 {
 	int loc;
-	char lbuf[128];
+	char lbuf[200];
 	va_list ap;
=20
 	if (level !=3D ISP_LOGALL && (level & isp->isp_dblev) =3D=3D 0) {
 		return;
 	}
-	sprintf(lbuf, "%s: ", device_get_nameunit(isp->isp_dev));
+	snprintf(lbuf, sizeof (lbuf), "%s: ", device_get_nameunit(isp->isp_dev));
 	loc =3D strlen(lbuf);
 	va_start(ap, fmt);
 	vsnprintf(&lbuf[loc], sizeof (lbuf) - loc - 1, fmt, ap);=20
@@ -5805,6 +6323,50 @@
 	bus_dmamap_unload(isp->isp_osinfo.dmat, PISP_PCMD(csio)->dmap);
 }
=20
+int
+isp_fcp_next_crn(ispsoftc_t *isp, uint8_t *crnp, XS_T *cmd)
+{
+	uint32_t chan =3D XS_CHANNEL(cmd);
+	uint32_t tgt =3D XS_TGT(cmd);
+	uint32_t lun =3D XS_LUN(cmd);
+	struct isp_fc *fc =3D &isp->isp_osinfo.pc.fc[chan];
+	int idx =3D NEXUS_HASH(tgt, lun);
+	struct isp_nexus *nxp =3D fc->nexus_hash[idx];
+
+	while (nxp) {
+		if (nxp->tgt =3D=3D tgt && nxp->lun =3D=3D lun)
+			break;
+		nxp =3D nxp->next;
+	}
+	if (nxp =3D=3D NULL) {
+		nxp =3D fc->nexus_free_list;
+		if (nxp =3D=3D NULL) {
+			nxp =3D malloc(sizeof (struct isp_nexus), M_DEVBUF, M_ZERO|M_NOWAIT);
+			if (nxp =3D=3D NULL) {
+				return (-1);
+			}
+		} else {
+			fc->nexus_free_list =3D nxp->next;
+		}
+		nxp->tgt =3D tgt;
+		nxp->lun =3D lun;
+		nxp->next =3D fc->nexus_hash[idx];
+		fc->nexus_hash[idx] =3D nxp;
+	}
+	if (nxp) {
+		if (nxp->crnseed =3D=3D 0)
+			nxp->crnseed =3D 1;
+		if (cmd)
+			PISP_PCMD(cmd)->crn =3D nxp->crnseed;
+		*crnp =3D nxp->crnseed++;
+		return (0);
+	}
+	return (-1);
+}
+
+/*
+ * We enter with the lock held
+ */
 void
 isp_timer(void *arg)
 {
@@ -5812,5 +6374,22 @@
 #ifdef	ISP_TARGET_MODE
 	isp_tmcmd_restart(isp);
 #endif
-	callout_reset(&isp->isp_osinfo.tmo, hz, isp_timer, isp);
+	callout_reset(&isp->isp_osinfo.tmo, isp_timer_count, isp_timer, isp);
 }
+
+isp_ecmd_t *
+isp_get_ecmd(ispsoftc_t *isp)
+{
+	isp_ecmd_t *ecmd =3D isp->isp_osinfo.ecmd_free;
+	if (ecmd) {
+		isp->isp_osinfo.ecmd_free =3D ecmd->next;
+	}
+	return (ecmd);
+}
+
+void
+isp_put_ecmd(ispsoftc_t *isp, isp_ecmd_t *ecmd)
+{
+	ecmd->next =3D isp->isp_osinfo.ecmd_free;
+	isp->isp_osinfo.ecmd_free =3D ecmd;
+}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/isp/isp_freebsd.h
--- a/head/sys/dev/isp/isp_freebsd.h	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/isp/isp_freebsd.h	Fri Aug 10 14:19:25 2012 +0300
@@ -1,4 +1,4 @@
-/* $FreeBSD: head/sys/dev/isp/isp_freebsd.h 237537 2012-06-24 17:30:54Z mj=
acob $ */
+/* $FreeBSD: head/sys/dev/isp/isp_freebsd.h 239143 2012-08-08 18:24:33Z mj=
acob $ */
 /*-
  * Qlogic ISP SCSI Host Adapter FreeBSD Wrapper Definitions
  *
@@ -75,6 +75,16 @@
=20
 #define	ISP_IFLAGS	INTR_TYPE_CAM | INTR_ENTROPY | INTR_MPSAFE
=20
+#define	N_XCMDS		64
+#define	XCMD_SIZE	512
+struct ispsoftc;
+typedef union isp_ecmd {
+	union isp_ecmd *	next;
+	uint8_t			data[XCMD_SIZE];
+} isp_ecmd_t;
+isp_ecmd_t *	isp_get_ecmd(struct ispsoftc *);
+void		isp_put_ecmd(struct ispsoftc *, isp_ecmd_t *);
+
 #ifdef	ISP_TARGET_MODE
 /* Not quite right, but there was no bump for this change */
 #if __FreeBSD_version < 225469
@@ -92,7 +102,7 @@
 	void *		next;
 	uint32_t	orig_datalen;
 	uint32_t	bytes_xfered;
-	uint32_t	last_xframt;
+	uint32_t	bytes_in_transit;
 	uint32_t	tag;		/* typically f/w RX_ID */
 	uint32_t	lun;
 	uint32_t	nphdl;
@@ -100,12 +110,23 @@
 	uint32_t	portid;
 	uint16_t	rxid;	/* wire rxid */
 	uint16_t	oxid;	/* wire oxid */
+	uint16_t	word3;	/* PRLI word3 params */
+	uint16_t	ctcnt;	/* number of CTIOs currently active */
+	uint8_t		seqno;	/* CTIO sequence number */
 	uint32_t
-			cdb0	: 8,
-				: 1,
-			dead	: 1,
-			tattr	: 3,
-			state	: 3;
+			srr_notify_rcvd	: 1,
+			cdb0		: 8,
+			sendst		: 1,
+			dead		: 1,
+			tattr		: 3,
+			state		: 3;
+	void *		ests;
+	/*
+	 * The current SRR notify copy
+	 */
+	uint8_t		srr[64];	/*  sb QENTRY_LEN, but order of definitions is wrong */
+	void *		srr_ccb;
+	uint32_t	nsrr;
 } atio_private_data_t;
 #define	ATPD_STATE_FREE			0
 #define	ATPD_STATE_ATIO			1
@@ -114,6 +135,14 @@
 #define	ATPD_STATE_LAST_CTIO		4
 #define	ATPD_STATE_PDON			5
=20
+#define	ATPD_CCB_OUTSTANDING		16
+
+#define	ATPD_SEQ_MASK			0x7f
+#define	ATPD_SEQ_NOTIFY_CAM		0x80
+#define	ATPD_SET_SEQNO(hdrp, atp)	((isphdr_t *)hdrp)->rqs_seqno &=3D ~ATPD=
_SEQ_MASK, ((isphdr_t *)hdrp)->rqs_seqno |=3D (atp)->seqno
+#define	ATPD_GET_SEQNO(hdrp)		(((isphdr_t *)hdrp)->rqs_seqno & ATPD_SEQ_MA=
SK)
+#define	ATPD_GET_NCAM(hdrp)		((((isphdr_t *)hdrp)->rqs_seqno & ATPD_SEQ_NO=
TIFY_CAM) !=3D 0)
+
 typedef union inot_private_data inot_private_data_t;
 union inot_private_data {
 	inot_private_data_t *next;
@@ -123,10 +152,17 @@
 		uint32_t tag_id, seq_id;
 	} rd;
 };
+typedef struct isp_timed_notify_ack {
+	void *isp;
+	void *not;
+	uint8_t data[64];	 /* sb QENTRY_LEN, but order of definitions is wrong */
+} isp_tna_t;
=20
+TAILQ_HEAD(isp_ccbq, ccb_hdr);
 typedef struct tstate {
 	SLIST_ENTRY(tstate) next;
 	struct cam_path *owner;
+	struct isp_ccbq waitq;		/* waiting CCBs */
 	struct ccb_hdr_slist atios;
 	struct ccb_hdr_slist inots;
 	uint32_t hold;
@@ -151,15 +187,33 @@
  */
 struct isp_pcmd {
 	struct isp_pcmd *	next;
-	bus_dmamap_t 		dmap;	/* dma map for this command */
-	struct ispsoftc *	isp;	/* containing isp */
-	struct callout		wdog;	/* watchdog timer */
-	uint8_t 		crn;	/* command reference number */
+	bus_dmamap_t 		dmap;		/* dma map for this command */
+	struct ispsoftc *	isp;		/* containing isp */
+	struct callout		wdog;		/* watchdog timer */
+	uint32_t		datalen;	/* data length for this command (target mode only) */
+	uint8_t			totslen;	/* sense length on status response */
+	uint8_t			cumslen;	/* sense length on status response */
+	uint8_t 		crn;		/* command reference number */
 };
 #define	ISP_PCMD(ccb)		(ccb)->ccb_h.spriv_ptr1
 #define	PISP_PCMD(ccb)		((struct isp_pcmd *)ISP_PCMD(ccb))
=20
 /*
+ * Per nexus info.
+ */
+struct isp_nexus {
+	struct isp_nexus *	next;
+	uint32_t
+		crnseed	:	8;	/* next command reference number */
+	uint32_t
+		tgt	:	16,	/* TGT for target */
+		lun	:	16;	/* LUN for target */
+};
+#define	NEXUS_HASH_WIDTH	32
+#define	INITIAL_NEXUS_COUNT	MAX_FC_TARG
+#define	NEXUS_HASH(tgt, lun)	((tgt + lun) % NEXUS_HASH_WIDTH)
+
+/*
  * Per channel information
  */
 SLIST_HEAD(tslist, tstate);
@@ -176,6 +230,11 @@
 	uint32_t loop_down_time;
 	uint32_t loop_down_limit;
 	uint32_t gone_device_time;
+	/*
+	 * Per target/lun info- just to keep a per-ITL nexus crn count
+	 */
+	struct isp_nexus *nexus_hash[NEXUS_HASH_WIDTH];
+	struct isp_nexus *nexus_free_list;
 	uint32_t
 #ifdef	ISP_TARGET_MODE
 #ifdef	ISP_INTERNAL_TARGET
@@ -202,8 +261,10 @@
 #ifdef	ISP_INTERNAL_TARGET
 	struct proc *		target_proc;
 #endif
+#if defined(DEBUG)
+	unsigned int inject_lost_data_frame;
 #endif
-	uint8_t	crnseed;	/* next command reference number */
+#endif
 };
=20
 struct isp_spi {
@@ -266,6 +327,7 @@
 #else
 				: 2,
 #endif
+		sixtyfourbit	: 1,	/* sixtyfour bit platform */
 		timer_active	: 1,
 		autoconf	: 1,
 		ehook_active	: 1,
@@ -288,6 +350,10 @@
 	cam_status *		rptr;
 #endif
=20
+	bus_addr_t		ecmd_dma;
+	isp_ecmd_t *		ecmd_base;
+	isp_ecmd_t *		ecmd_free;
+
 	/*
 	 * Per-type private storage...
 	 */
@@ -318,16 +384,7 @@
 		ISP_FC_PC(isp, chan)-> tag =3D val;	\
 	}
=20
-#define	FCP_NEXT_CRN(isp, cmd, rslt, chan, tgt, lun)				\
-	if ((isp)->isp_osinfo.pc.fc[(chan)].crnseed =3D=3D 0) {			\
-		(isp)->isp_osinfo.pc.fc[(chan)].crnseed =3D 1;			\
-	}									\
-	if (cmd) {								\
-		PISP_PCMD(cmd)->crn =3D (isp)->isp_osinfo.pc.fc[(chan)].crnseed;	\
-	}									\
-	(rslt) =3D (isp)->isp_osinfo.pc.fc[(chan)].crnseed++
-=09
-
+#define	FCP_NEXT_CRN	isp_fcp_next_crn
 #define	isp_lock	isp_osinfo.lock
 #define	isp_bus_tag	isp_osinfo.bus_tag
 #define	isp_bus_handle	isp_osinfo.bus_handle
@@ -341,7 +398,6 @@
 /*
  * Required Macros/Defines
  */
-
 #define	ISP_FC_SCRLEN		0x1000
=20
 #define	ISP_MEMZERO(a, b)	memset(a, 0, b)
@@ -459,20 +515,17 @@
 #define	XS_STSP(ccb)		(&(ccb)->scsi_status)
 #define	XS_SNSP(ccb)		(&(ccb)->sense_data)
=20
-#define	XS_SNSLEN(ccb)		\
-	imin((sizeof((ccb)->sense_data)), ccb->sense_len - ccb->sense_resid)
+#define	XS_TOT_SNSLEN(ccb)	ccb->sense_len
+#define	XS_CUR_SNSLEN(ccb)	(ccb->sense_len - ccb->sense_resid)
=20
 #define	XS_SNSKEY(ccb)		(scsi_get_sense_key(&(ccb)->sense_data, \
-				 ccb->sense_len - ccb->sense_resid, 	\
-				 /*show_errors*/ 1))
+				 ccb->sense_len - ccb->sense_resid, 1))
=20
 #define	XS_SNSASC(ccb)		(scsi_get_asc(&(ccb)->sense_data,	\
-				 ccb->sense_len - ccb->sense_resid, 	\
-				 /*show_errors*/ 1))
+				 ccb->sense_len - ccb->sense_resid, 1))
=20
 #define	XS_SNSASCQ(ccb)		(scsi_get_ascq(&(ccb)->sense_data,	\
-				 ccb->sense_len - ccb->sense_resid, 	\
-				 /*show_errors*/ 1))
+				 ccb->sense_len - ccb->sense_resid, 1))
 #define	XS_TAG_P(ccb)	\
 	(((ccb)->ccb_h.flags & CAM_TAG_ACTION_VALID) && \
 	 (ccb)->tag_action !=3D CAM_TAG_ACTION_NONE)
@@ -483,8 +536,7 @@
 	=09
=20
 #define	XS_SETERR(ccb, v)	(ccb)->ccb_h.status &=3D ~CAM_STATUS_MASK, \
-				(ccb)->ccb_h.status |=3D v, \
-				(ccb)->ccb_h.spriv_field0 |=3D ISP_SPRIV_ERRSET
+				(ccb)->ccb_h.status |=3D v
=20
 #	define	HBA_NOERROR		CAM_REQ_INPROG
 #	define	HBA_BOTCH		CAM_UNREC_HBA_ERROR
@@ -499,21 +551,31 @@
=20
 #define	XS_ERR(ccb)		((ccb)->ccb_h.status & CAM_STATUS_MASK)
=20
-#define	XS_NOERR(ccb)		\
-	(((ccb)->ccb_h.spriv_field0 & ISP_SPRIV_ERRSET) =3D=3D 0 || \
-	 ((ccb)->ccb_h.status & CAM_STATUS_MASK) =3D=3D CAM_REQ_INPROG)
+#define	XS_NOERR(ccb)		(((ccb)->ccb_h.status & CAM_STATUS_MASK) =3D=3D CAM=
_REQ_INPROG)
=20
-#define	XS_INITERR(ccb)		\
-	XS_SETERR(ccb, CAM_REQ_INPROG), (ccb)->ccb_h.spriv_field0 =3D 0
+#define	XS_INITERR(ccb)		XS_SETERR(ccb, CAM_REQ_INPROG), ccb->sense_resid =
=3D ccb->sense_len
=20
-#define	XS_SAVE_SENSE(xs, sense_ptr, slen)	do {			\
-		(xs)->ccb_h.status |=3D CAM_AUTOSNS_VALID;		\
-		memset(&(xs)->sense_data, 0, sizeof((xs)->sense_data));	\
-		memcpy(&(xs)->sense_data, sense_ptr, imin(XS_SNSLEN(xs),\
-		       slen)); 						\
-		if (slen < (xs)->sense_len) 				\
-			(xs)->sense_resid =3D (xs)->sense_len - slen;	\
-	} while (0);
+#define	XS_SAVE_SENSE(xs, sense_ptr, totslen, slen)	do {			\
+		uint32_t tlen =3D slen;						\
+		if (tlen > (xs)->sense_len)					\
+			tlen =3D (xs)->sense_len;					\
+		PISP_PCMD(xs)->totslen =3D imin((xs)->sense_len, totslen);	\
+		PISP_PCMD(xs)->cumslen =3D tlen;					\
+		memcpy(&(xs)->sense_data, sense_ptr, tlen);			\
+		(xs)->sense_resid =3D (xs)->sense_len - tlen;			\
+		(xs)->ccb_h.status |=3D CAM_AUTOSNS_VALID;			\
+	} while (0)
+
+#define	XS_SENSE_APPEND(xs, xsnsp, xsnsl)	do {				\
+		uint32_t off =3D PISP_PCMD(xs)->cumslen;				\
+		uint8_t *ptr =3D &((uint8_t *)(&(xs)->sense_data))[off];		\
+		uint32_t amt =3D imin(xsnsl, PISP_PCMD(xs)->totslen - off);	\
+		if (amt) {							\
+			memcpy(ptr, xsnsp, amt);				\
+			(xs)->sense_resid -=3D amt;				\
+			PISP_PCMD(xs)->cumslen +=3D amt;				\
+		}								\
+	} while (0)
=20
 #define	XS_SENSE_VALID(xs)	(((xs)->ccb_h.status & CAM_AUTOSNS_VALID) !=3D =
0)
=20
@@ -634,24 +696,6 @@
 /*
  * Platform private flags
  */
-#define	ISP_SPRIV_ERRSET	0x1
-#define	ISP_SPRIV_TACTIVE	0x2
-#define	ISP_SPRIV_DONE		0x8
-#define	ISP_SPRIV_WPEND		0x10
-
-#define	XS_S_TACTIVE(sccb)	(sccb)->ccb_h.spriv_field0 |=3D ISP_SPRIV_TACTI=
VE
-#define	XS_C_TACTIVE(sccb)	(sccb)->ccb_h.spriv_field0 &=3D ~ISP_SPRIV_TACT=
IVE
-#define	XS_TACTIVE_P(sccb)	((sccb)->ccb_h.spriv_field0 & ISP_SPRIV_TACTIVE)
-
-#define	XS_CMD_S_DONE(sccb)	(sccb)->ccb_h.spriv_field0 |=3D ISP_SPRIV_DONE
-#define	XS_CMD_C_DONE(sccb)	(sccb)->ccb_h.spriv_field0 &=3D ~ISP_SPRIV_DONE
-#define	XS_CMD_DONE_P(sccb)	((sccb)->ccb_h.spriv_field0 & ISP_SPRIV_DONE)
-
-#define	XS_CMD_S_WPEND(sccb)	(sccb)->ccb_h.spriv_field0 |=3D ISP_SPRIV_WPE=
ND
-#define	XS_CMD_C_WPEND(sccb)	(sccb)->ccb_h.spriv_field0 &=3D ~ISP_SPRIV_WP=
END
-#define	XS_CMD_WPEND_P(sccb)	((sccb)->ccb_h.spriv_field0 & ISP_SPRIV_WPEND)
-
-#define	XS_CMD_S_CLEAR(sccb)	(sccb)->ccb_h.spriv_field0 =3D 0
=20
 /*
  * Platform Library Functions
@@ -667,6 +711,7 @@
 int isp_mstohz(int);
 void isp_platform_intr(void *);
 void isp_common_dmateardown(ispsoftc_t *, struct ccb_scsiio *, uint32_t);
+int isp_fcp_next_crn(ispsoftc_t *, uint8_t *, XS_T *);
=20
 /*
  * Platform Version specific defines
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/isp/isp_library.c
--- a/head/sys/dev/isp/isp_library.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/isp/isp_library.c	Fri Aug 10 14:19:25 2012 +0300
@@ -35,7 +35,7 @@
 #endif
 #ifdef	__FreeBSD__
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
+__FBSDID("$FreeBSD: head/sys/dev/isp/isp_library.c 238869 2012-07-28 20:06=
:29Z mjacob $");
 #include <dev/isp/isp_freebsd.h>
 #endif
 #ifdef	__OpenBSD__
@@ -58,7 +58,7 @@
  * Called with the first queue entry at least partially filled out.
  */
 int
-isp_send_cmd(ispsoftc_t *isp, void *fqe, void *segp, uint32_t nsegs, uint3=
2_t totalcnt, isp_ddir_t ddir)
+isp_send_cmd(ispsoftc_t *isp, void *fqe, void *segp, uint32_t nsegs, uint3=
2_t totalcnt, isp_ddir_t ddir, ispds64_t *ecmd)
 {
 	uint8_t storage[QENTRY_LEN];
 	uint8_t type, nqe;
@@ -396,11 +396,11 @@
 	}
 	if (fcp->isp_fwstate < FW_READY || fcp->isp_loopstate < LOOP_PDB_RCVD) {
 		if (isp_control(isp, ISPCTL_FCLINK_TEST, chan, tval) !=3D 0) {
-			isp_prt(isp, ISP_LOGSANCFG, "isp_fc_runstate: linktest failed for chann=
el %d", chan);
+			isp_prt(isp, ISP_LOG_SANCFG, "isp_fc_runstate: linktest failed for chan=
nel %d", chan);
 			return (-1);
 		}
 		if (fcp->isp_fwstate !=3D FW_READY || fcp->isp_loopstate < LOOP_PDB_RCVD=
) {
-			isp_prt(isp, ISP_LOGSANCFG, "isp_fc_runstate: f/w not ready for channel=
 %d", chan);
+			isp_prt(isp, ISP_LOG_SANCFG, "isp_fc_runstate: f/w not ready for channe=
l %d", chan);
 			return (-1);
 		}
 	}
@@ -410,19 +410,19 @@
 	}
=20
 	if (isp_control(isp, ISPCTL_SCAN_LOOP, chan) !=3D 0) {
-		isp_prt(isp, ISP_LOGSANCFG, "isp_fc_runstate: scan loop fails on channel=
 %d", chan);
+		isp_prt(isp, ISP_LOG_SANCFG, "isp_fc_runstate: scan loop fails on channe=
l %d", chan);
 		return (LOOP_PDB_RCVD);
 	}
 	if (isp_control(isp, ISPCTL_SCAN_FABRIC, chan) !=3D 0) {
-		isp_prt(isp, ISP_LOGSANCFG, "isp_fc_runstate: scan fabric fails on chann=
el %d", chan);
+		isp_prt(isp, ISP_LOG_SANCFG, "isp_fc_runstate: scan fabric fails on chan=
nel %d", chan);
 		return (LOOP_LSCAN_DONE);
 	}
 	if (isp_control(isp, ISPCTL_PDB_SYNC, chan) !=3D 0) {
-		isp_prt(isp, ISP_LOGSANCFG, "isp_fc_runstate: pdb_sync fails on channel =
%d", chan);
+		isp_prt(isp, ISP_LOG_SANCFG, "isp_fc_runstate: pdb_sync fails on channel=
 %d", chan);
 		return (LOOP_FSCAN_DONE);
 	}
 	if (fcp->isp_fwstate !=3D FW_READY || fcp->isp_loopstate !=3D LOOP_READY)=
 {
-		isp_prt(isp, ISP_LOGSANCFG, "isp_fc_runstate: f/w not ready again on cha=
nnel %d", chan);
+		isp_prt(isp, ISP_LOG_SANCFG, "isp_fc_runstate: f/w not ready again on ch=
annel %d", chan);
 		return (-1);
 	}
 	return (0);
@@ -438,7 +438,7 @@
 	int i;
=20
 	for (i =3D 0; i < MAX_FC_TARG; i++) {
-		char mb[4];
+		char mb[4], buf1[64], buf2[64];
 		const char *dbs[8] =3D {
 			"NIL ",
 			"PROB",
@@ -449,9 +449,6 @@
 			"ZOMB",
 			"VLD "
 		};
-		const char *roles[4] =3D {
-			" UNK", " TGT", " INI", "TINI"
-		};
 		fcportdb_t *lp =3D &fcp->portdb[i];
=20
 		if (lp->state =3D=3D FC_PORTDB_STATE_NIL && lp->target_mode =3D=3D 0) {
@@ -462,12 +459,81 @@
 		} else {
 			ISP_SNPRINTF(mb, sizeof (mb), "---");
 		}
+		isp_gen_role_str(buf1, sizeof (buf1), lp->prli_word3);
+		isp_gen_role_str(buf2, sizeof (buf2), lp->new_prli_word3);
 		isp_prt(isp, ISP_LOGALL, "Chan %d [%d]: hdl 0x%x %s al%d tgt %s %s 0x%06=
x =3D>%s 0x%06x; WWNN 0x%08x%08x WWPN 0x%08x%08x",
-		    chan, i, lp->handle, dbs[lp->state], lp->autologin, mb, roles[lp->ro=
les], lp->portid, roles[lp->new_roles], lp->new_portid,
+		    chan, i, lp->handle, dbs[lp->state], lp->autologin, mb, buf1, lp->po=
rtid, buf2, lp->new_portid,
 		    (uint32_t) (lp->node_wwn >> 32), (uint32_t) (lp->node_wwn), (uint32_=
t) (lp->port_wwn >> 32), (uint32_t) (lp->port_wwn));
 	}
 }
=20
+void
+isp_gen_role_str(char *buf, size_t len, uint16_t p3)
+{
+	int nd =3D 0;
+	buf[0] =3D '(';
+	buf[1] =3D 0;
+	if (p3 & PRLI_WD3_ENHANCED_DISCOVERY) {
+		nd++;
+		strlcat(buf, "EDisc", len);
+	}
+	if (p3 & PRLI_WD3_REC_SUPPORT) {
+		if (nd++) {
+			strlcat(buf, ",", len);
+		}
+		strlcat(buf, "REC", len);
+	}
+	if (p3 & PRLI_WD3_TASK_RETRY_IDENTIFICATION_REQUESTED) {
+		if (nd++) {
+			strlcat(buf, ",", len);
+		}
+		strlcat(buf, "RetryID", len);
+	}
+	if (p3 & PRLI_WD3_RETRY) {
+		if (nd++) {
+			strlcat(buf, ",", len);
+		}
+		strlcat(buf, "Retry", len);
+	}
+	if (p3 & PRLI_WD3_CONFIRMED_COMPLETION_ALLOWED) {
+		if (nd++) {
+			strlcat(buf, ",", len);
+		}
+		strlcat(buf, "CNFRM", len);
+	}
+	if (p3 & PRLI_WD3_DATA_OVERLAY_ALLOWED) {
+		if (nd++) {
+			strlcat(buf, ",", len);
+		}
+		strlcat(buf, "DOver", len);
+	}
+	if (p3 & PRLI_WD3_INITIATOR_FUNCTION) {
+		if (nd++) {
+			strlcat(buf, ",", len);
+		}
+		strlcat(buf, "INI", len);
+	}
+	if (p3 & PRLI_WD3_TARGET_FUNCTION) {
+		if (nd++) {
+			strlcat(buf, ",", len);
+		}
+		strlcat(buf, "TGT", len);
+	}
+	if (p3 & PRLI_WD3_READ_FCP_XFER_RDY_DISABLED) {
+		if (nd++) {
+			strlcat(buf, ",", len);
+		}
+		strlcat(buf, "RdXfrDis", len);
+	}
+	if (p3 & PRLI_WD3_WRITE_FCP_XFER_RDY_DISABLED) {
+		if (nd++) {
+			strlcat(buf, ",", len);
+		}
+		strlcat(buf, "XfrDis", len);
+	}
+	strlcat(buf, ")", len);
+}
+
 const char *
 isp_fc_fw_statename(int state)
 {
@@ -535,7 +601,6 @@
 		isp_del_all_wwn_entries(isp, chan);
 #endif
 		isp_clear_commands(isp);
-
 		isp_reset(isp, 0);
 		if (isp->isp_state !=3D ISP_RESETSTATE) {
 			isp_prt(isp, ISP_LOGERR, "%s: cannot reset card", __func__);
@@ -896,7 +961,8 @@
 	ISP_IOXPUT_8(isp, src->req_target, &dst->req_target);
 	ISP_IOXPUT_16(isp, src->req_scclun, &dst->req_scclun);
 	ISP_IOXPUT_16(isp, src->req_flags,  &dst->req_flags);
-	ISP_IOXPUT_16(isp, src->req_reserved, &dst->req_reserved);
+	ISP_IOXPUT_8(isp, src->req_crn, &dst->req_crn);
+	ISP_IOXPUT_8(isp, src->req_reserved, &dst->req_reserved);
 	ISP_IOXPUT_16(isp, src->req_time, &dst->req_time);
 	ISP_IOXPUT_16(isp, src->req_seg_count, &dst->req_seg_count);
 	for (i =3D 0; i < ASIZE(src->req_cdb); i++) {
@@ -919,7 +985,8 @@
 	ISP_IOXPUT_16(isp, src->req_target, &dst->req_target);
 	ISP_IOXPUT_16(isp, src->req_scclun, &dst->req_scclun);
 	ISP_IOXPUT_16(isp, src->req_flags,  &dst->req_flags);
-	ISP_IOXPUT_16(isp, src->req_reserved, &dst->req_reserved);
+	ISP_IOXPUT_8(isp, src->req_crn, &dst->req_crn);
+	ISP_IOXPUT_8(isp, src->req_reserved, &dst->req_reserved);
 	ISP_IOXPUT_16(isp, src->req_time, &dst->req_time);
 	ISP_IOXPUT_16(isp, src->req_seg_count, &dst->req_seg_count);
 	for (i =3D 0; i < ASIZE(src->req_cdb); i++) {
@@ -1077,15 +1144,34 @@
 	ISP_IOXGET_16(isp, &src->req_time, dst->req_time);
 	ISP_IOXGET_16(isp, &src->req_sense_len, dst->req_sense_len);
 	ISP_IOXGET_32(isp, &src->req_resid, dst->req_resid);
-	for (i =3D 0; i < 8; i++) {
+	for (i =3D 0; i < sizeof (src->req_response); i++) {
 		ISP_IOXGET_8(isp, &src->req_response[i], dst->req_response[i]);
 	}
-	for (i =3D 0; i < 32; i++) {
+	for (i =3D 0; i < sizeof (src->req_sense_data); i++) {
 		ISP_IOXGET_8(isp, &src->req_sense_data[i], dst->req_sense_data[i]);
 	}
 }
=20
 void
+isp_get_cont_response(ispsoftc_t *isp, ispstatus_cont_t *src, ispstatus_co=
nt_t *dst)
+{
+	int i;
+	isp_get_hdr(isp, &src->req_header, &dst->req_header);
+	if (IS_24XX(isp)) {
+		uint32_t *a, *b;
+		a =3D (uint32_t *) src->req_sense_data;
+		b =3D (uint32_t *) dst->req_sense_data;
+		for (i =3D 0; i < (sizeof (src->req_sense_data) / sizeof (uint32_t)); i+=
+) {
+			ISP_IOZGET_32(isp, a++, *b++);
+		}
+	} else {
+		for (i =3D 0; i < sizeof (src->req_sense_data); i++) {
+			ISP_IOXGET_8(isp, &src->req_sense_data[i], dst->req_sense_data[i]);
+		}
+	}
+}
+
+void
 isp_get_24xx_response(ispsoftc_t *isp, isp24xx_statusreq_t *src, isp24xx_s=
tatusreq_t *dst)
 {
 	int i;
@@ -1929,6 +2015,29 @@
 }
=20
 void
+isp_put_fc_hdr(ispsoftc_t *isp, fc_hdr_t *src, fc_hdr_t *dst)
+{
+        ISP_IOZPUT_8(isp, src->r_ctl, &dst->r_ctl);
+        ISP_IOZPUT_8(isp, src->d_id[0], &dst->d_id[0]);
+        ISP_IOZPUT_8(isp, src->d_id[1], &dst->d_id[1]);
+        ISP_IOZPUT_8(isp, src->d_id[2], &dst->d_id[2]);
+        ISP_IOZPUT_8(isp, src->cs_ctl, &dst->cs_ctl);
+        ISP_IOZPUT_8(isp, src->s_id[0], &dst->s_id[0]);
+        ISP_IOZPUT_8(isp, src->s_id[1], &dst->s_id[1]);
+        ISP_IOZPUT_8(isp, src->s_id[2], &dst->s_id[2]);
+        ISP_IOZPUT_8(isp, src->type, &dst->type);
+        ISP_IOZPUT_8(isp, src->f_ctl[0], &dst->f_ctl[0]);
+        ISP_IOZPUT_8(isp, src->f_ctl[1], &dst->f_ctl[1]);
+        ISP_IOZPUT_8(isp, src->f_ctl[2], &dst->f_ctl[2]);
+        ISP_IOZPUT_8(isp, src->seq_id, &dst->seq_id);
+        ISP_IOZPUT_8(isp, src->df_ctl, &dst->df_ctl);
+        ISP_IOZPUT_16(isp, src->seq_cnt, &dst->seq_cnt);
+        ISP_IOZPUT_16(isp, src->ox_id, &dst->ox_id);
+        ISP_IOZPUT_16(isp, src->rx_id, &dst->rx_id);
+        ISP_IOZPUT_32(isp, src->parameter, &dst->parameter);
+}
+
+void
 isp_get_fcp_cmnd_iu(ispsoftc_t *isp, fcp_cmnd_iu_t *src, fcp_cmnd_iu_t *ds=
t)
 {
 	int i;
@@ -1998,23 +2107,43 @@
 	ISP_IOZPUT_8(isp, src->ct_vunique, &dst->ct_vunique);
 }
=20
+void
+isp_put_fcp_rsp_iu(ispsoftc_t *isp, fcp_rsp_iu_t *src, fcp_rsp_iu_t *dst)
+{
+	int i;
+	for (i =3D 0; i < ((sizeof (src->fcp_rsp_reserved))/(sizeof (src->fcp_rsp=
_reserved[0]))); i++) {
+		ISP_IOZPUT_8(isp, src->fcp_rsp_reserved[i], &dst->fcp_rsp_reserved[i]);
+	}
+	ISP_IOZPUT_16(isp, src->fcp_rsp_status_qualifier, &dst->fcp_rsp_status_qu=
alifier);
+	ISP_IOZPUT_8(isp, src->fcp_rsp_bits, &dst->fcp_rsp_bits);
+	ISP_IOZPUT_8(isp, src->fcp_rsp_scsi_status, &dst->fcp_rsp_scsi_status);
+	ISP_IOZPUT_32(isp, src->fcp_rsp_resid, &dst->fcp_rsp_resid);
+	ISP_IOZPUT_32(isp, src->fcp_rsp_snslen, &dst->fcp_rsp_snslen);
+	ISP_IOZPUT_32(isp, src->fcp_rsp_rsplen, &dst->fcp_rsp_rsplen);
+}
+
 #ifdef	ISP_TARGET_MODE
=20
 /*
  * Command shipping- finish off first queue entry and do dma mapping and
  * additional segments as needed.
  *
- * Called with the first queue entry at least partially filled out.
+ * Called with the first queue entry mostly filled out.
+ * Our job here is to finish that and add additional data
+ * segments if needed.
+ *
+ * We used to do synthetic entries to split data and status
+ * at this level, but that started getting too tricky.
  */
 int
 isp_send_tgt_cmd(ispsoftc_t *isp, void *fqe, void *segp, uint32_t nsegs, u=
int32_t totalcnt, isp_ddir_t ddir, void *snsptr, uint32_t snslen)
 {
-	uint8_t storage[QENTRY_LEN], storage2[QENTRY_LEN];
+	uint8_t storage[QENTRY_LEN];
 	uint8_t type, nqe;
 	uint32_t seg, curseg, seglim, nxt, nxtnxt;
 	ispds_t *dsp =3D NULL;
 	ispds64_t *dsp64 =3D NULL;
-	void *qe0, *qe1, *sqe =3D NULL;
+	void *qe0, *qe1;
=20
 	qe0 =3D isp_getrqentry(isp);
 	if (qe0 =3D=3D NULL) {
@@ -2027,7 +2156,7 @@
 	seglim =3D 0;
=20
 	/*
-	 * If we have no data to transmit, just copy the first IOCB and start it =
up.
+	 * If we have data to transmit, figure out how many segments can fit into=
 the first entry.
 	 */
 	if (ddir !=3D ISP_NOXFR) {
 		/*
@@ -2039,100 +2168,25 @@
 			seglim =3D ISP_RQDSEG;
 			break;
 		case RQSTYPE_CTIO2:
+			dsp =3D ((ct2_entry_t *)fqe)->rsp.m0.u.ct_dataseg;
+			seglim =3D ISP_RQDSEG_T2;
+			break;
 		case RQSTYPE_CTIO3:
-		{
-			ct2_entry_t *ct =3D fqe, *ct2 =3D (ct2_entry_t *) storage2;
-			uint16_t swd =3D ct->rsp.m0.ct_scsi_status & 0xff;
-
-			if ((ct->ct_flags & CT2_SENDSTATUS) && (swd || ct->ct_resid)) {
-				memcpy(ct2, ct, QENTRY_LEN);
-				/*
-				 * Clear fields from first CTIO2 that now need to be cleared
-				 */
-				ct->ct_header.rqs_seqno =3D 0;
-				ct->ct_flags &=3D ~(CT2_SENDSTATUS|CT2_CCINCR|CT2_FASTPOST);
-				ct->ct_resid =3D 0;
-				ct->ct_syshandle =3D 0;
-				ct->rsp.m0.ct_scsi_status =3D 0;
-
-				/*
-				 * Reset fields in the second CTIO2 as appropriate.
-				 */
-				ct2->ct_flags &=3D ~(CT2_FLAG_MMASK|CT2_DATAMASK|CT2_FASTPOST);
-				ct2->ct_flags |=3D CT2_NO_DATA|CT2_FLAG_MODE1;
-				ct2->ct_seg_count =3D 0;
-				ct2->ct_reloff =3D 0;
-				memset(&ct2->rsp, 0, sizeof (ct2->rsp));
-				if (swd =3D=3D SCSI_CHECK && snsptr && snslen) {
-					ct2->rsp.m1.ct_senselen =3D min(snslen, MAXRESPLEN);
-					memcpy(ct2->rsp.m1.ct_resp, snsptr, ct2->rsp.m1.ct_senselen);
-					swd |=3D CT2_SNSLEN_VALID;
-				}
-				if (ct2->ct_resid > 0) {
-					swd |=3D CT2_DATA_UNDER;
-				} else if (ct2->ct_resid < 0) {
-					swd |=3D CT2_DATA_OVER;
-				}
-				ct2->rsp.m1.ct_scsi_status =3D swd;
-				sqe =3D storage2;
-			}
-			if (type =3D=3D RQSTYPE_CTIO2) {
-				dsp =3D ct->rsp.m0.u.ct_dataseg;
-				seglim =3D ISP_RQDSEG_T2;
-			} else {
-				dsp64 =3D ct->rsp.m0.u.ct_dataseg64;
-				seglim =3D ISP_RQDSEG_T3;
-			}
+			dsp64 =3D ((ct2_entry_t *)fqe)->rsp.m0.u.ct_dataseg64;
+			seglim =3D ISP_RQDSEG_T3;
 			break;
-		}
 		case RQSTYPE_CTIO7:
-		{
-			ct7_entry_t *ct =3D fqe, *ct2 =3D (ct7_entry_t *)storage2;
-			uint16_t swd =3D ct->ct_scsi_status & 0xff;
-
-			dsp64 =3D &ct->rsp.m0.ds;
+			dsp64 =3D &((ct7_entry_t *)fqe)->rsp.m0.ds;
 			seglim =3D 1;
-			if ((ct->ct_flags & CT7_SENDSTATUS) && (swd || ct->ct_resid)) {
-				memcpy(ct2, ct, sizeof (ct7_entry_t));
-
-				/*
-				 * Clear fields from first CTIO7 that now need to be cleared
-				 */
-				ct->ct_header.rqs_seqno =3D 0;
-				ct->ct_flags &=3D ~CT7_SENDSTATUS;
-				ct->ct_resid =3D 0;
-				ct->ct_syshandle =3D 0;
-				ct->ct_scsi_status =3D 0;
-
-				/*
-				 * Reset fields in the second CTIO7 as appropriate.
-				 */
-				ct2->ct_flags &=3D ~(CT7_FLAG_MMASK|CT7_DATAMASK);
-				ct2->ct_flags |=3D CT7_NO_DATA|CT7_NO_DATA|CT7_FLAG_MODE1;
-				ct2->ct_seg_count =3D 0;
-				memset(&ct2->rsp, 0, sizeof (ct2->rsp));
-				if (swd =3D=3D SCSI_CHECK && snsptr && snslen) {
-					ct2->rsp.m1.ct_resplen =3D min(snslen, MAXRESPLEN_24XX);
-					memcpy(ct2->rsp.m1.ct_resp, snsptr, ct2->rsp.m1.ct_resplen);
-					swd |=3D (FCP_SNSLEN_VALID << 8);
-				}
-				if (ct2->ct_resid < 0) {
-					swd |=3D (FCP_RESID_OVERFLOW << 8);
-				} else if (ct2->ct_resid > 0) {
-					swd |=3D (FCP_RESID_UNDERFLOW << 8);
-				}
-				ct2->ct_scsi_status =3D swd;
-				sqe =3D storage2;
-			}
 			break;
-		}
 		default:
 			return (CMD_COMPLETE);
 		}
 	}
=20
 	/*
-	 * Fill out the data transfer stuff in the first queue entry
+	 * First, fill out any of the data transfer stuff that fits
+	 * in the first queue entry.
 	 */
 	if (seglim > nsegs) {
 		seglim =3D nsegs;
@@ -2147,12 +2201,6 @@
 	}
=20
 	/*
-	 * First, if we are sending status with data and we have a non-zero
-	 * status or non-zero residual, we have to make a synthetic extra CTIO
-	 * that contains the status that we'll ship separately (FC cards only).
-	 */
-
-	/*
 	 * Second, start building additional continuation segments as needed.
 	 */
 	while (seg < nsegs) {
@@ -2198,25 +2246,10 @@
         }
=20
 	/*
-	 * If we have a synthetic queue entry to complete things, do it here.
+	 * Third, not patch up the first queue entry with the number of segments
+	 * we actually are going to be transmitting. At the same time, handle
+	 * any mode 2 requests.
 	 */
-	if (sqe) {
-		nxtnxt =3D ISP_NXT_QENTRY(nxt, RQUEST_QUEUE_LEN(isp));
-		if (nxtnxt =3D=3D isp->isp_reqodx) {
-			return (CMD_EAGAIN);
-		}
-		qe1 =3D ISP_QUEUE_ENTRY(isp->isp_rquest, nxt);
-		nxt =3D nxtnxt;
-		if (type =3D=3D RQSTYPE_CTIO7) {
-			isp_put_ctio7(isp, sqe, qe1);
-		} else {
-			isp_put_ctio2(isp, sqe, qe1);
-		}
-		if (isp->isp_dblev & ISP_LOGTDEBUG1) {
-			isp_print_bytes(isp, "synthetic final queue entry", QENTRY_LEN, storage=
2);
-		}
-	}
-
 	((isphdr_t *)fqe)->rqs_entry_count =3D nqe;
 	switch (type) {
 	case RQSTYPE_CTIO:
@@ -2225,7 +2258,11 @@
 		break;
 	case RQSTYPE_CTIO2:
 	case RQSTYPE_CTIO3:
-		((ct2_entry_t *)fqe)->ct_seg_count =3D nsegs;
+		if (((ct2_entry_t *)fqe)->ct_flags & CT2_FLAG_MODE2) {
+			((ct2_entry_t *)fqe)->ct_seg_count =3D 1;
+		} else {
+			((ct2_entry_t *)fqe)->ct_seg_count =3D nsegs;
+		}
 		if (ISP_CAP_2KLOGIN(isp)) {
 			isp_put_ctio2e(isp, fqe, qe0);
 		} else {
@@ -2233,7 +2270,11 @@
 		}
 		break;
 	case RQSTYPE_CTIO7:
-		((ct7_entry_t *)fqe)->ct_seg_count =3D nsegs;
+		if (((ct7_entry_t *)fqe)->ct_flags & CT7_FLAG_MODE2) {
+			((ct7_entry_t *)fqe)->ct_seg_count =3D 1;
+		} else {
+			((ct7_entry_t *)fqe)->ct_seg_count =3D nsegs;
+		}
 		isp_put_ctio7(isp, fqe, qe0);
 		break;
 	default:
@@ -2405,8 +2446,9 @@
  * Add an initiator device to the port database
  */
 void
-isp_add_wwn_entry(ispsoftc_t *isp, int chan, uint64_t ini, uint16_t nphdl,=
 uint32_t s_id)
+isp_add_wwn_entry(ispsoftc_t *isp, int chan, uint64_t ini, uint16_t nphdl,=
 uint32_t s_id, uint16_t prli_params)
 {
+	char buf[64];
 	fcparam *fcp;
 	fcportdb_t *lp;
 	isp_notify_t nt;
@@ -2415,8 +2457,8 @@
 	fcp =3D FCPARAM(isp, chan);
=20
 	if (nphdl >=3D MAX_NPORT_HANDLE) {
-		isp_prt(isp, ISP_LOGWARN, "%s: Chan %d IID 0x%016llx bad N-Port handle 0=
x%04x Port ID 0x%06x",
-		    __func__, chan, (unsigned long long) ini, nphdl, s_id);
+		isp_prt(isp, ISP_LOGWARN, "Chan %d IID 0x%016llx bad N-Port handle 0x%04=
x Port ID 0x%06x",
+		    chan, (unsigned long long) ini, nphdl, s_id);
 		return;
 	}
=20
@@ -2451,19 +2493,18 @@
 	if (lp) {
 		int something =3D 0;
 		if (lp->handle !=3D nphdl) {
-			isp_prt(isp, ISP_LOGWARN, "%s: Chan %d attempt to re-enter N-port handl=
e 0x%04x IID 0x%016llx Port ID 0x%06x finds IID 0x%016llx N-Port Handle 0x%=
04x Port ID 0x%06x",
-			    __func__, chan, nphdl, (unsigned long long)ini, s_id, (unsigned lon=
g long) lp->port_wwn, lp->handle, lp->portid);
+			isp_prt(isp, ISP_LOGWARN, "Chan %d attempt to re-enter N-port handle 0x=
%04x IID 0x%016llx Port ID 0x%06x finds IID 0x%016llx N-Port Handle 0x%04x =
Port ID 0x%06x",
+			    chan, nphdl, (unsigned long long)ini, s_id, (unsigned long long) lp=
->port_wwn, lp->handle, lp->portid);
 			isp_dump_portdb(isp, chan);
 			return;
 		}
 		if (s_id !=3D PORT_NONE) {
 			if (lp->portid =3D=3D PORT_NONE) {
 				lp->portid =3D s_id;
-				isp_prt(isp, ISP_LOGTINFO, "%s: Chan %d N-port handle 0x%04x gets Port=
 ID 0x%06x", __func__, chan, nphdl, s_id);
+				isp_prt(isp, ISP_LOGTINFO, "Chan %d N-port handle 0x%04x gets Port ID =
0x%06x", chan, nphdl, s_id);
 				something++;
 			} else if (lp->portid !=3D s_id) {
-				isp_prt(isp, ISP_LOGTINFO, "%s: Chan %d N-port handle 0x%04x tries to =
change Port ID 0x%06x to 0x%06x", __func__, chan, nphdl,
-				    lp->portid, s_id);
+				isp_prt(isp, ISP_LOGTINFO, "Chan %d N-port handle 0x%04x tries to chan=
ge Port ID 0x%06x to 0x%06x", chan, nphdl, lp->portid, s_id);
 				isp_dump_portdb(isp, chan);
 				return;
 			}
@@ -2471,18 +2512,24 @@
 		if (VALID_INI(ini)) {
 			if (!VALID_INI(lp->port_wwn)) {
 				lp->port_wwn =3D ini;
-				isp_prt(isp, ISP_LOGTINFO, "%s: Chan %d N-port handle 0x%04x gets WWN =
0x%016llxx", __func__, chan, nphdl, (unsigned long long) ini);
+				isp_prt(isp, ISP_LOGTINFO, "Chan %d N-port handle 0x%04x gets WWN 0x%0=
16llxx", chan, nphdl, (unsigned long long) ini);
 				something++;
 			} else if (lp->port_wwn !=3D ini) {
-				isp_prt(isp, ISP_LOGWARN, "%s: Chan %d N-port handle 0x%04x tries to c=
hange WWN 0x%016llx to 0x%016llx", __func__, chan, nphdl,
+				isp_prt(isp, ISP_LOGWARN, "Chan %d N-port handle 0x%04x tries to chang=
e WWN 0x%016llx to 0x%016llx", chan, nphdl,
 				    (unsigned long long) lp->port_wwn, (unsigned long long) ini);
 				isp_dump_portdb(isp, chan);
 				return;
 			}
 		}
-
+		if (prli_params !=3D lp->prli_word3) {
+			lp->prli_word3 =3D prli_params;
+			isp_gen_role_str(buf, sizeof (buf), lp->prli_word3);
+			isp_prt(isp, ISP_LOGTINFO|ISP_LOGCONFIG, "Chan %d IID 0x%016llx N-Port =
Handle 0x%04x Port ID 0x%06x new PRLI Word 3 params %s", chan,
+			    (unsigned long long) lp->port_wwn, lp->handle, lp->portid, buf);
+			something++;
+		}
 		if (!something) {
-			isp_prt(isp, ISP_LOGWARN, "%s: Chan %d IID 0x%016llx N-Port Handle 0x%0=
4x Port ID 0x%06x reentered", __func__, chan,
+			isp_prt(isp, ISP_LOGWARN, "Chan %d IID 0x%016llx N-Port Handle 0x%04x P=
ort ID 0x%06x reentered", chan,
 			    (unsigned long long) lp->port_wwn, lp->handle, lp->portid);
 		}
 		return;
@@ -2500,8 +2547,8 @@
 		}
 	}
 	if (i < 0) {
-		isp_prt(isp, ISP_LOGWARN, "%s: Chan %d IID 0x%016llx N-Port Handle 0x%04=
x Port ID 0x%06x- no room in port database",
-		    __func__, chan, (unsigned long long) ini, nphdl, s_id);
+		isp_prt(isp, ISP_LOGWARN, "Chan %d IID 0x%016llx N-Port Handle 0x%04x Po=
rt ID 0x%06x- no room in port database",
+		    chan, (unsigned long long) ini, nphdl, s_id);
 		return;
 	}
=20
@@ -2511,9 +2558,12 @@
 	lp->handle =3D nphdl;
 	lp->portid =3D s_id;
 	lp->port_wwn =3D ini;
+	lp->prli_word3 =3D prli_params;
+	isp_gen_role_str(buf, sizeof (buf), lp->prli_word3);
 	fcp->isp_tgt_map[nphdl] =3D i + 1;
=20
-	isp_prt(isp, ISP_LOGTINFO, "%s: Chan %d IID 0x%016llx N-Port Handle 0x%04=
x Port ID 0x%06x vtgt %d added", __func__, chan, (unsigned long long) ini, =
nphdl, s_id, fcp->isp_tgt_map[nphdl] - 1);
+	isp_prt(isp, ISP_LOGTINFO, "Chan %d IID 0x%016llx N-Port Handle 0x%04x Po=
rt ID 0x%06x vtgt %d %s added", chan,
+	    (unsigned long long) ini, nphdl, s_id, fcp->isp_tgt_map[nphdl] - 1, b=
uf);
=20
 	ISP_MEMZERO(&nt, sizeof (nt));
 	nt.nt_hba =3D isp;
@@ -2538,8 +2588,8 @@
 	fcportdb_t *lp;
=20
 	if (nphdl >=3D MAX_NPORT_HANDLE) {
-		isp_prt(isp, ISP_LOGWARN, "%s: Chan %d IID 0x%016llx bad N-Port handle 0=
x%04x Port ID 0x%06x",
-		    __func__, chan, (unsigned long long) ini, nphdl, s_id);
+		isp_prt(isp, ISP_LOGWARN, "Chan %d IID 0x%016llx bad N-Port handle 0x%04=
x Port ID 0x%06x",
+		    chan, (unsigned long long) ini, nphdl, s_id);
 		return;
 	}
=20
@@ -2553,13 +2603,13 @@
 		}
 	}
 	if (lp =3D=3D NULL) {
-		isp_prt(isp, ISP_LOGWARN, "%s: Chan %d IID 0x%016llx N-Port Handle 0x%04=
x Port ID 0x%06x cannot be found to be cleared",
-		    __func__, chan, (unsigned long long) ini, nphdl, s_id);
+		isp_prt(isp, ISP_LOGWARN, "Chan %d IID 0x%016llx N-Port Handle 0x%04x Po=
rt ID 0x%06x cannot be found to be cleared",
+		    chan, (unsigned long long) ini, nphdl, s_id);
 		isp_dump_portdb(isp, chan);
 		return;
 	}
-	isp_prt(isp, ISP_LOGTINFO, "%s: Chan %d IID 0x%016llx N-Port Handle 0x%04=
x Port ID 0x%06x vtgt %d cleared",
-	    __func__, chan, (unsigned long long) lp->port_wwn, nphdl, lp->portid,=
 fcp->isp_tgt_map[nphdl] - 1);
+	isp_prt(isp, ISP_LOGTINFO, "Chan %d IID 0x%016llx N-Port Handle 0x%04x Po=
rt ID 0x%06x vtgt %d cleared",
+	    chan, (unsigned long long) lp->port_wwn, nphdl, lp->portid, fcp->isp_=
tgt_map[nphdl] - 1);
 	fcp->isp_tgt_map[nphdl] =3D 0;
=20
 	ISP_MEMZERO(&nt, sizeof (nt));
@@ -2650,7 +2700,7 @@
 			return;
 		}
 	}
-	isp_prt(isp, ISP_LOGWARN, "%s: Chan %d unable to find entry to delete N-p=
ort handle 0x%04x initiator WWN 0x%016llx Port ID 0x%06x", __func__,
+	isp_prt(isp, ISP_LOGWARN, "Chan %d unable to find entry to delete N-port =
handle 0x%04x initiator WWN 0x%016llx Port ID 0x%06x",
 	    mp->nt_channel, mp->nt_nphdl, (unsigned long long) mp->nt_wwn, mp->nt=
_sid);
 }
=20
@@ -2973,8 +3023,14 @@
 		ISP_IOXPUT_16(isp, src->rsp.m2._reserved2, &dst->rsp.m2._reserved2);
 		ISP_IOXPUT_16(isp, src->rsp.m2._reserved3, &dst->rsp.m2._reserved3);
 		ISP_IOXPUT_32(isp, src->rsp.m2.ct_datalen, &dst->rsp.m2.ct_datalen);
-		ISP_IOXPUT_32(isp, src->rsp.m2.ct_fcp_rsp_iudata.ds_base, &dst->rsp.m2.c=
t_fcp_rsp_iudata.ds_base);
-		ISP_IOXPUT_32(isp, src->rsp.m2.ct_fcp_rsp_iudata.ds_count, &dst->rsp.m2.=
ct_fcp_rsp_iudata.ds_count);
+		if (src->ct_header.rqs_entry_type =3D=3D RQSTYPE_CTIO2) {
+			ISP_IOXPUT_32(isp, src->rsp.m2.u.ct_fcp_rsp_iudata_32.ds_base, &dst->rs=
p.m2.u.ct_fcp_rsp_iudata_32.ds_base);
+			ISP_IOXPUT_32(isp, src->rsp.m2.u.ct_fcp_rsp_iudata_32.ds_count, &dst->r=
sp.m2.u.ct_fcp_rsp_iudata_32.ds_count);
+		} else {
+			ISP_IOXPUT_32(isp, src->rsp.m2.u.ct_fcp_rsp_iudata_64.ds_base, &dst->rs=
p.m2.u.ct_fcp_rsp_iudata_64.ds_base);
+			ISP_IOXPUT_32(isp, src->rsp.m2.u.ct_fcp_rsp_iudata_64.ds_basehi, &dst->=
rsp.m2.u.ct_fcp_rsp_iudata_64.ds_basehi);
+			ISP_IOXPUT_32(isp, src->rsp.m2.u.ct_fcp_rsp_iudata_64.ds_count, &dst->r=
sp.m2.u.ct_fcp_rsp_iudata_64.ds_count);
+		}
 	}
 }
=20
@@ -3026,8 +3082,14 @@
 		ISP_IOXPUT_16(isp, src->rsp.m2._reserved2, &dst->rsp.m2._reserved2);
 		ISP_IOXPUT_16(isp, src->rsp.m2._reserved3, &dst->rsp.m2._reserved3);
 		ISP_IOXPUT_32(isp, src->rsp.m2.ct_datalen, &dst->rsp.m2.ct_datalen);
-		ISP_IOXPUT_32(isp, src->rsp.m2.ct_fcp_rsp_iudata.ds_base, &dst->rsp.m2.c=
t_fcp_rsp_iudata.ds_base);
-		ISP_IOXPUT_32(isp, src->rsp.m2.ct_fcp_rsp_iudata.ds_count, &dst->rsp.m2.=
ct_fcp_rsp_iudata.ds_count);
+		if (src->ct_header.rqs_entry_type =3D=3D RQSTYPE_CTIO2) {
+			ISP_IOXPUT_32(isp, src->rsp.m2.u.ct_fcp_rsp_iudata_32.ds_base, &dst->rs=
p.m2.u.ct_fcp_rsp_iudata_32.ds_base);
+			ISP_IOXPUT_32(isp, src->rsp.m2.u.ct_fcp_rsp_iudata_32.ds_count, &dst->r=
sp.m2.u.ct_fcp_rsp_iudata_32.ds_count);
+		} else {
+			ISP_IOXPUT_32(isp, src->rsp.m2.u.ct_fcp_rsp_iudata_64.ds_base, &dst->rs=
p.m2.u.ct_fcp_rsp_iudata_64.ds_base);
+			ISP_IOXPUT_32(isp, src->rsp.m2.u.ct_fcp_rsp_iudata_64.ds_basehi, &dst->=
rsp.m2.u.ct_fcp_rsp_iudata_64.ds_basehi);
+			ISP_IOXPUT_32(isp, src->rsp.m2.u.ct_fcp_rsp_iudata_64.ds_count, &dst->r=
sp.m2.u.ct_fcp_rsp_iudata_64.ds_count);
+		}
 	}
 }
=20
@@ -3072,8 +3134,9 @@
 		}
 	} else {
 		ISP_IOXPUT_32(isp, src->rsp.m2.reserved0, &dst->rsp.m2.reserved0);
+		ISP_IOXPUT_32(isp, src->rsp.m2.reserved1, &dst->rsp.m2.reserved1);
 		ISP_IOXPUT_32(isp, src->rsp.m2.ct_datalen, &dst->rsp.m2.ct_datalen);
-		ISP_IOXPUT_32(isp, src->rsp.m2.reserved1, &dst->rsp.m2.reserved1);
+		ISP_IOXPUT_32(isp, src->rsp.m2.reserved2, &dst->rsp.m2.reserved2);
 		ISP_IOXPUT_32(isp, src->rsp.m2.ct_fcp_rsp_iudata.ds_base, &dst->rsp.m2.c=
t_fcp_rsp_iudata.ds_base);
 		ISP_IOXPUT_32(isp, src->rsp.m2.ct_fcp_rsp_iudata.ds_basehi, &dst->rsp.m2=
.ct_fcp_rsp_iudata.ds_basehi);
 		ISP_IOXPUT_32(isp, src->rsp.m2.ct_fcp_rsp_iudata.ds_count, &dst->rsp.m2.=
ct_fcp_rsp_iudata.ds_count);
@@ -3132,8 +3195,14 @@
 		ISP_IOXGET_16(isp, &src->rsp.m2._reserved2, dst->rsp.m2._reserved2);
 		ISP_IOXGET_16(isp, &src->rsp.m2._reserved3, dst->rsp.m2._reserved3);
 		ISP_IOXGET_32(isp, &src->rsp.m2.ct_datalen, dst->rsp.m2.ct_datalen);
-		ISP_IOXGET_32(isp, &src->rsp.m2.ct_fcp_rsp_iudata.ds_base, dst->rsp.m2.c=
t_fcp_rsp_iudata.ds_base);
-		ISP_IOXGET_32(isp, &src->rsp.m2.ct_fcp_rsp_iudata.ds_count, dst->rsp.m2.=
ct_fcp_rsp_iudata.ds_count);
+		if (src->ct_header.rqs_entry_type =3D=3D RQSTYPE_CTIO2) {
+			ISP_IOXGET_32(isp, &src->rsp.m2.u.ct_fcp_rsp_iudata_32.ds_base, dst->rs=
p.m2.u.ct_fcp_rsp_iudata_32.ds_base);
+			ISP_IOXGET_32(isp, &src->rsp.m2.u.ct_fcp_rsp_iudata_32.ds_count, dst->r=
sp.m2.u.ct_fcp_rsp_iudata_32.ds_count);
+		} else {
+			ISP_IOXGET_32(isp, &src->rsp.m2.u.ct_fcp_rsp_iudata_64.ds_base, dst->rs=
p.m2.u.ct_fcp_rsp_iudata_64.ds_base);
+			ISP_IOXGET_32(isp, &src->rsp.m2.u.ct_fcp_rsp_iudata_64.ds_basehi, dst->=
rsp.m2.u.ct_fcp_rsp_iudata_64.ds_basehi);
+			ISP_IOXGET_32(isp, &src->rsp.m2.u.ct_fcp_rsp_iudata_64.ds_count, dst->r=
sp.m2.u.ct_fcp_rsp_iudata_64.ds_count);
+		}
 	}
 }
=20
@@ -3187,8 +3256,14 @@
 		ISP_IOXGET_16(isp, &src->rsp.m2._reserved2, dst->rsp.m2._reserved2);
 		ISP_IOXGET_16(isp, &src->rsp.m2._reserved3, dst->rsp.m2._reserved3);
 		ISP_IOXGET_32(isp, &src->rsp.m2.ct_datalen, dst->rsp.m2.ct_datalen);
-		ISP_IOXGET_32(isp, &src->rsp.m2.ct_fcp_rsp_iudata.ds_base, dst->rsp.m2.c=
t_fcp_rsp_iudata.ds_base);
-		ISP_IOXGET_32(isp, &src->rsp.m2.ct_fcp_rsp_iudata.ds_count, dst->rsp.m2.=
ct_fcp_rsp_iudata.ds_count);
+		if (src->ct_header.rqs_entry_type =3D=3D RQSTYPE_CTIO2) {
+			ISP_IOXGET_32(isp, &src->rsp.m2.u.ct_fcp_rsp_iudata_32.ds_base, dst->rs=
p.m2.u.ct_fcp_rsp_iudata_32.ds_base);
+			ISP_IOXGET_32(isp, &src->rsp.m2.u.ct_fcp_rsp_iudata_32.ds_count, dst->r=
sp.m2.u.ct_fcp_rsp_iudata_32.ds_count);
+		} else {
+			ISP_IOXGET_32(isp, &src->rsp.m2.u.ct_fcp_rsp_iudata_64.ds_base, dst->rs=
p.m2.u.ct_fcp_rsp_iudata_64.ds_base);
+			ISP_IOXGET_32(isp, &src->rsp.m2.u.ct_fcp_rsp_iudata_64.ds_basehi, dst->=
rsp.m2.u.ct_fcp_rsp_iudata_64.ds_basehi);
+			ISP_IOXGET_32(isp, &src->rsp.m2.u.ct_fcp_rsp_iudata_64.ds_count, dst->r=
sp.m2.u.ct_fcp_rsp_iudata_64.ds_count);
+		}
 	}
 }
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/isp/isp_library.h
--- a/head/sys/dev/isp/isp_library.h	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/isp/isp_library.h	Fri Aug 10 14:19:25 2012 +0300
@@ -1,4 +1,4 @@
-/* $FreeBSD$ */
+/* $FreeBSD: head/sys/dev/isp/isp_library.h 238869 2012-07-28 20:06:29Z mj=
acob $ */
 /*-
  *  Copyright (c) 1997-2009 by Matthew Jacob
  *  All rights reserved.
@@ -36,7 +36,7 @@
  * stuff figured out, you can make all the code in one spot.
  */
 typedef enum { ISP_TO_DEVICE, ISP_FROM_DEVICE, ISP_NOXFR} isp_ddir_t;
-int isp_send_cmd(ispsoftc_t *, void *, void *, uint32_t, uint32_t, isp_ddi=
r_t);
+int isp_send_cmd(ispsoftc_t *, void *, void *, uint32_t, uint32_t, isp_ddi=
r_t, ispds64_t *);
=20
 /*
  * Handle management functions.
@@ -66,6 +66,7 @@
 extern const char *isp_class3_roles[4];
 int isp_fc_runstate(ispsoftc_t *, int, int);
 void isp_dump_portdb(ispsoftc_t *, int);
+void isp_gen_role_str(char *, size_t, uint16_t);
=20
 const char *isp_fc_fw_statename(int);
 const char *isp_fc_loop_statename(int);
@@ -106,6 +107,7 @@
 void isp_put_cont_req(ispsoftc_t *, ispcontreq_t *, ispcontreq_t *);
 void isp_put_cont64_req(ispsoftc_t *, ispcontreq64_t *, ispcontreq64_t *);
 void isp_get_response(ispsoftc_t *, ispstatusreq_t *, ispstatusreq_t *);
+void isp_get_cont_response(ispsoftc_t *, ispstatus_cont_t *, ispstatus_con=
t_t *);
 void isp_get_24xx_response(ispsoftc_t *, isp24xx_statusreq_t *, isp24xx_st=
atusreq_t *);
 void isp_get_24xx_abrt(ispsoftc_t *, isp24xx_abrt_t *, isp24xx_abrt_t *);
 void isp_get_rio1(ispsoftc_t *, isp_rio1_t *, isp_rio1_t *);
@@ -139,10 +141,12 @@
 void isp_get_els(ispsoftc_t *, els_t *, els_t *);
 void isp_put_els(ispsoftc_t *, els_t *, els_t *);
 void isp_get_fc_hdr(ispsoftc_t *, fc_hdr_t *, fc_hdr_t *);
+void isp_put_fc_hdr(ispsoftc_t *, fc_hdr_t *, fc_hdr_t *);
 void isp_get_fcp_cmnd_iu(ispsoftc_t *, fcp_cmnd_iu_t *, fcp_cmnd_iu_t *);
 void isp_put_rft_id(ispsoftc_t *, rft_id_t *, rft_id_t *);
 void isp_get_ct_hdr(ispsoftc_t *isp, ct_hdr_t *, ct_hdr_t *);
 void isp_put_ct_hdr(ispsoftc_t *isp, ct_hdr_t *, ct_hdr_t *);
+void isp_put_fcp_rsp_iu(ispsoftc_t *isp, fcp_rsp_iu_t *, fcp_rsp_iu_t *);
=20
 #define ISP_HANDLE_MASK  0x7fff
=20
@@ -166,7 +170,7 @@
 int isp_find_pdb_by_loopid(ispsoftc_t *, int, uint32_t, fcportdb_t **);
 int isp_find_pdb_by_sid(ispsoftc_t *, int, uint32_t, fcportdb_t **);
 void isp_find_chan_by_did(ispsoftc_t *, uint32_t, uint16_t *);
-void isp_add_wwn_entry(ispsoftc_t *, int, uint64_t, uint16_t, uint32_t);
+void isp_add_wwn_entry(ispsoftc_t *, int, uint64_t, uint16_t, uint32_t, ui=
nt16_t);
 void isp_del_wwn_entry(ispsoftc_t *, int, uint64_t, uint16_t, uint32_t);
 void isp_del_all_wwn_entries(ispsoftc_t *, int);
 void isp_del_wwn_entries(ispsoftc_t *, isp_notify_t *);
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/isp/isp_pci.c
--- a/head/sys/dev/isp/isp_pci.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/isp/isp_pci.c	Fri Aug 10 14:19:25 2012 +0300
@@ -28,7 +28,7 @@
  * FreeBSD Version.
  */
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/dev/isp/isp_pci.c 237537 2012-06-24 17:30:54Z=
 mjacob $");
+__FBSDID("$FreeBSD: head/sys/dev/isp/isp_pci.c 239010 2012-08-03 14:25:35Z=
 mjacob $");
=20
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -588,6 +588,20 @@
 		}
 	}
=20
+	tval =3D 0;
+	(void) resource_int_value(device_get_name(dev), device_get_unit(dev), "no=
fctape", &tval);
+	if (tval) {
+		isp->isp_confopts |=3D ISP_CFG_NOFCTAPE;
+	}
+
+	tval =3D 0;
+	(void) resource_int_value(device_get_name(dev), device_get_unit(dev), "fc=
tape", &tval);
+	if (tval) {
+		isp->isp_confopts &=3D ~ISP_CFG_NOFCTAPE;
+		isp->isp_confopts |=3D ISP_CFG_FCTAPE;
+	}
+
+
 	/*
 	 * Because the resource_*_value functions can neither return
 	 * 64 bit integer values, nor can they be directly coerced
@@ -664,6 +678,8 @@
 	isp =3D &pcs->pci_isp;
 	isp->isp_dev =3D dev;
 	isp->isp_nchan =3D 1;
+	if (sizeof (bus_addr_t) > 4)
+		isp->isp_osinfo.sixtyfourbit =3D 1;
=20
 	/*
 	 * Get Generic Options
@@ -1028,6 +1044,9 @@
 		pci_release_msi(dev);
 	}
 	(void) bus_release_resource(dev, pcs->rtp, pcs->rgd, pcs->regs);
+	/*
+	 * XXX: THERE IS A LOT OF LEAKAGE HERE
+	 */
 	if (pcs->pci_isp.isp_param) {
 		free(pcs->pci_isp.isp_param, M_DEVBUF);
 		pcs->pci_isp.isp_param =3D NULL;
@@ -1441,6 +1460,7 @@
 imc(void *arg, bus_dma_segment_t *segs, int nseg, int error)
 {
 	struct imush *imushp =3D (struct imush *) arg;
+	isp_ecmd_t *ecmd;
=20
 	if (error) {
 		imushp->error =3D error;
@@ -1451,17 +1471,33 @@
 		return;
 	}
 	isp_prt(imushp->isp, ISP_LOGDEBUG0, "request/result area @ 0x%jx/0x%jx", =
(uintmax_t) segs->ds_addr, (uintmax_t) segs->ds_len);
+
 	imushp->isp->isp_rquest =3D imushp->vbase;
 	imushp->isp->isp_rquest_dma =3D segs->ds_addr;
 	segs->ds_addr +=3D ISP_QUEUE_SIZE(RQUEST_QUEUE_LEN(imushp->isp));
 	imushp->vbase +=3D ISP_QUEUE_SIZE(RQUEST_QUEUE_LEN(imushp->isp));
+
 	imushp->isp->isp_result_dma =3D segs->ds_addr;
 	imushp->isp->isp_result =3D imushp->vbase;
+	segs->ds_addr +=3D ISP_QUEUE_SIZE(RESULT_QUEUE_LEN(imushp->isp));
+	imushp->vbase +=3D ISP_QUEUE_SIZE(RESULT_QUEUE_LEN(imushp->isp));
=20
+	if (imushp->isp->isp_type >=3D ISP_HA_FC_2300) {
+        imushp->isp->isp_osinfo.ecmd_dma =3D segs->ds_addr;
+        imushp->isp->isp_osinfo.ecmd_free =3D (isp_ecmd_t *)imushp->vbase;
+        imushp->isp->isp_osinfo.ecmd_base =3D imushp->isp->isp_osinfo.ecmd=
_free;
+        for (ecmd =3D imushp->isp->isp_osinfo.ecmd_free; ecmd < &imushp->i=
sp->isp_osinfo.ecmd_free[N_XCMDS]; ecmd++) {
+            if (ecmd =3D=3D &imushp->isp->isp_osinfo.ecmd_free[N_XCMDS - 1=
]) {
+                ecmd->next =3D NULL;
+            } else {
+                ecmd->next =3D ecmd + 1;
+            }
+        }
+    }
 #ifdef	ISP_TARGET_MODE
+	segs->ds_addr +=3D (N_XCMDS * XCMD_SIZE);
+	imushp->vbase +=3D (N_XCMDS * XCMD_SIZE);
 	if (IS_24XX(imushp->isp)) {
-		segs->ds_addr +=3D ISP_QUEUE_SIZE(RESULT_QUEUE_LEN(imushp->isp));
-		imushp->vbase +=3D ISP_QUEUE_SIZE(RESULT_QUEUE_LEN(imushp->isp));
 		imushp->isp->isp_atioq_dma =3D segs->ds_addr;
 		imushp->isp->isp_atioq =3D imushp->vbase;
 	}
@@ -1531,11 +1567,11 @@
 		return (1);
 	}
=20
+#ifdef	ISP_TARGET_MODE
 	/*
 	 * XXX: We don't really support 64 bit target mode for parallel scsi yet
 	 */
-#ifdef	ISP_TARGET_MODE
-	if (IS_SCSI(isp) && sizeof (bus_addr_t) > 4) {
+	if (IS_SCSI(isp) && isp->isp_osinfo.sixtyfourbit) {
 		free(isp->isp_osinfo.pcmd_pool, M_DEVBUF);
 		isp_prt(isp, ISP_LOGERR, "we cannot do DAC for SPI cards yet");
 		ISP_LOCK(isp);
@@ -1580,7 +1616,9 @@
=20
 	/*
 	 * Allocate and map the request and result queues (and ATIO queue
-	 * if we're a 2400 supporting target mode).
+	 * if we're a 2400 supporting target mode), and a region for
+	 * external dma addressable command/status structures (23XX and
+	 * later).
 	 */
 	len =3D ISP_QUEUE_SIZE(RQUEST_QUEUE_LEN(isp));
 	len +=3D ISP_QUEUE_SIZE(RESULT_QUEUE_LEN(isp));
@@ -1589,7 +1627,9 @@
 		len +=3D ISP_QUEUE_SIZE(RESULT_QUEUE_LEN(isp));
 	}
 #endif
-
+	if (isp->isp_type >=3D ISP_HA_FC_2300) {
+		len +=3D (N_XCMDS * XCMD_SIZE);
+	}
 	ns =3D (len / PAGE_SIZE) + 1;
=20
 	/*
@@ -1650,6 +1690,19 @@
 				bus_dma_tag_destroy(fc->tdmat);
 				goto bad;
 			}
+			for (i =3D 0; i < INITIAL_NEXUS_COUNT; i++) {
+				struct isp_nexus *n =3D malloc(sizeof (struct isp_nexus), M_DEVBUF, M_=
NOWAIT | M_ZERO);
+				if (n =3D=3D NULL) {
+					while (fc->nexus_free_list) {
+						n =3D fc->nexus_free_list;
+						fc->nexus_free_list =3D n->next;
+						free(n, M_DEVBUF);
+					}
+					goto bad;
+				}
+				n->next =3D fc->nexus_free_list;
+				fc->nexus_free_list =3D n;
+			}
 		}
 	}
=20
@@ -1679,6 +1732,11 @@
 		struct isp_fc *fc =3D ISP_FC_PC(isp, cmap);
 		bus_dmamem_free(fc->tdmat, base, fc->tdmap);
 		bus_dma_tag_destroy(fc->tdmat);
+		while (fc->nexus_free_list) {
+			struct isp_nexus *n =3D fc->nexus_free_list;
+			fc->nexus_free_list =3D n->next;
+			free(n, M_DEVBUF);
+		}
 	}
 	bus_dmamem_free(isp->isp_osinfo.cdmat, base, isp->isp_osinfo.cdmap);
 	bus_dma_tag_destroy(isp->isp_osinfo.cdmat);
@@ -1733,7 +1791,7 @@
 	isp =3D mp->isp;
 	rq =3D mp->rq;
 	if (nseg) {
-		if (sizeof (bus_addr_t) > 4) {
+		if (isp->isp_osinfo.sixtyfourbit) {
 			if (nseg >=3D ISP_NSEG64_MAX) {
 				isp_prt(isp, ISP_LOGERR, "number of segments (%d) exceed maximum we ca=
n support (%d)", nseg, ISP_NSEG64_MAX);
 				mp->error =3D EFAULT;
@@ -1766,8 +1824,14 @@
 		ddir =3D ISP_NOXFR;
 	}
=20
-	if (isp_send_tgt_cmd(isp, rq, dm_segs, nseg, XS_XFRLEN(csio), ddir, &csio=
->sense_data, csio->sense_len) !=3D CMD_QUEUED) {
+	error =3D isp_send_tgt_cmd(isp, rq, dm_segs, nseg, XS_XFRLEN(csio), ddir,=
 &csio->sense_data, csio->sense_len);
+	switch (error) {
+	case CMD_EAGAIN:
 		mp->error =3D MUSHERR_NOQENTRIES;
+	case CMD_QUEUED:
+		break;
+	default:
+		mp->error =3D EIO;
 	}
 }
 #endif
@@ -1802,7 +1866,7 @@
 	isp =3D mp->isp;
 	rq =3D mp->rq;
 	if (nseg) {
-		if (sizeof (bus_addr_t) > 4) {
+		if (isp->isp_osinfo.sixtyfourbit) {
 			if (nseg >=3D ISP_NSEG64_MAX) {
 				isp_prt(isp, ISP_LOGERR, "number of segments (%d) exceed maximum we ca=
n support (%d)", nseg, ISP_NSEG64_MAX);
 				mp->error =3D EFAULT;
@@ -1835,8 +1899,16 @@
 		ddir =3D ISP_NOXFR;
 	}
=20
-	if (isp_send_cmd(isp, rq, dm_segs, nseg, XS_XFRLEN(csio), ddir) !=3D CMD_=
QUEUED) {
+	error =3D isp_send_cmd(isp, rq, dm_segs, nseg, XS_XFRLEN(csio), ddir, (is=
pds64_t *)csio->req_map);
+	switch (error) {
+	case CMD_EAGAIN:
 		mp->error =3D MUSHERR_NOQENTRIES;
+		break;
+	case CMD_QUEUED:
+		break;
+	default:
+		mp->error =3D EIO;
+		break;
 	}
 }
=20
@@ -1936,11 +2008,11 @@
 		if (mp->error =3D=3D MUSHERR_NOQENTRIES) {
 			retval =3D CMD_EAGAIN;
 		} else if (mp->error =3D=3D EFBIG) {
-			XS_SETERR(csio, CAM_REQ_TOO_BIG);
+			csio->ccb_h.status =3D CAM_REQ_TOO_BIG;
 		} else if (mp->error =3D=3D EINVAL) {
-			XS_SETERR(csio, CAM_REQ_INVALID);
+			csio->ccb_h.status =3D CAM_REQ_INVALID;
 		} else {
-			XS_SETERR(csio, CAM_UNREC_HBA_ERROR);
+			csio->ccb_h.status =3D CAM_UNREC_HBA_ERROR;
 		}
 		return (retval);
 	}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/isp/isp_sbus.c
--- a/head/sys/dev/isp/isp_sbus.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/isp/isp_sbus.c	Fri Aug 10 14:19:25 2012 +0300
@@ -29,7 +29,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/dev/isp/isp_sbus.c 236379 2012-06-01 04:34:49=
Z eadler $");
+__FBSDID("$FreeBSD: head/sys/dev/isp/isp_sbus.c 239023 2012-08-04 00:00:30=
Z mjacob $");
=20
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -78,19 +78,22 @@
=20
 static int isp_sbus_probe (device_t);
 static int isp_sbus_attach (device_t);
+static int isp_sbus_detach (device_t);
=20
=20
 #define	ISP_SBD(isp)	((struct isp_sbussoftc *)isp)->sbus_dev
 struct isp_sbussoftc {
 	ispsoftc_t			sbus_isp;
 	device_t			sbus_dev;
-	struct resource *		sbus_reg;
+	struct resource *		regs;
+	void *				irq;
+	int				iqd;
+	int				rgd;
 	void *				ih;
 	int16_t				sbus_poff[_NREG_BLKS];
 	sdparam				sbus_param;
 	struct isp_spi			sbus_spi;
 	struct ispmdvec			sbus_mdvec;
-	struct resource *		sbus_ires;
 };
=20
=20
@@ -98,6 +101,7 @@
 	/* Device interface */
 	DEVMETHOD(device_probe,		isp_sbus_probe),
 	DEVMETHOD(device_attach,	isp_sbus_attach),
+	DEVMETHOD(device_detach,	isp_sbus_detach),
 	{ 0, 0 }
 };
=20
@@ -136,13 +140,21 @@
 static int
 isp_sbus_attach(device_t dev)
 {
-	struct resource *regs;
-	int tval, iqd, isp_debug, role, rid, ispburst, default_id;
+	int tval, isp_debug, role, ispburst, default_id;
 	struct isp_sbussoftc *sbs;
 	ispsoftc_t *isp =3D NULL;
 	int locksetup =3D 0;
 	int ints_setup =3D 0;
=20
+	sbs =3D device_get_softc(dev);
+	if (sbs =3D=3D NULL) {
+		device_printf(dev, "cannot get softc\n");
+		return (ENOMEM);
+	}
+
+	sbs->sbus_dev =3D dev;
+	sbs->sbus_mdvec =3D mdvec;
+
 	/*
 	 * Figure out if we're supposed to skip this one.
 	 * If we are, we actually go to ISP_ROLE_NONE.
@@ -165,23 +177,15 @@
 		role =3D ISP_DEFAULT_ROLES;
 	}
=20
-	sbs =3D malloc(sizeof (*sbs), M_DEVBUF, M_NOWAIT | M_ZERO);
-	if (sbs =3D=3D NULL) {
-		device_printf(dev, "cannot allocate softc\n");
-		return (ENOMEM);
-	}
+	sbs->irq =3D sbs->regs =3D NULL;
+	sbs->rgd =3D sbs->iqd =3D 0;
=20
-	regs =3D NULL;
-	iqd =3D 0;
-	rid =3D 0;
-	regs =3D bus_alloc_resource_any(dev, SYS_RES_MEMORY, &rid, RF_ACTIVE);
-	if (regs =3D=3D 0) {
+	sbs->regs =3D bus_alloc_resource_any(dev, SYS_RES_MEMORY, &sbs->rgd,
+	    RF_ACTIVE);
+	if (sbs->regs =3D=3D NULL) {
 		device_printf(dev, "unable to map registers\n");
 		goto bad;
 	}
-	sbs->sbus_dev =3D dev;
-	sbs->sbus_reg =3D regs;
-	sbs->sbus_mdvec =3D mdvec;
=20
 	sbs->sbus_poff[BIU_BLOCK >> _BLK_REG_SHFT] =3D BIU_REGS_OFF;
 	sbs->sbus_poff[MBOX_BLOCK >> _BLK_REG_SHFT] =3D SBUS_MBOX_REGS_OFF;
@@ -189,8 +193,8 @@
 	sbs->sbus_poff[RISC_BLOCK >> _BLK_REG_SHFT] =3D SBUS_RISC_REGS_OFF;
 	sbs->sbus_poff[DMA_BLOCK >> _BLK_REG_SHFT] =3D DMA_REGS_OFF;
 	isp =3D &sbs->sbus_isp;
-	isp->isp_bus_tag =3D rman_get_bustag(regs);
-	isp->isp_bus_handle =3D rman_get_bushandle(regs);
+	isp->isp_bus_tag =3D rman_get_bustag(sbs->regs);
+	isp->isp_bus_handle =3D rman_get_bushandle(sbs->regs);
 	isp->isp_mdvec =3D &sbs->sbus_mdvec;
 	isp->isp_bustype =3D ISP_BT_SBUS;
 	isp->isp_type =3D ISP_HA_SCSI_UNKNOWN;
@@ -244,7 +248,6 @@
 		SDPARAM(isp, 0)->isp_ptisp =3D 1;
 	}
=20
-
 	isp->isp_osinfo.fw =3D firmware_get("isp_1000");
 	if (isp->isp_osinfo.fw) {
 		union {
@@ -280,16 +283,15 @@
 	mtx_init(&isp->isp_osinfo.lock, "isp", NULL, MTX_DEF);
 	locksetup++;
=20
-	iqd =3D 0;
-	sbs->sbus_ires =3D bus_alloc_resource_any(dev, SYS_RES_IRQ, &iqd,
+	sbs->irq =3D bus_alloc_resource_any(dev, SYS_RES_IRQ, &sbs->iqd,
 	    RF_ACTIVE | RF_SHAREABLE);
-	if (sbs->sbus_ires =3D=3D NULL) {
+	if (sbs->irq =3D=3D NULL) {
 		device_printf(dev, "could not allocate interrupt\n");
 		goto bad;
 	}
=20
-	if (isp_setup_intr(dev, sbs->sbus_ires, ISP_IFLAGS, NULL,
-	    isp_platform_intr, isp, &sbs->ih)) {
+	if (isp_setup_intr(dev, sbs->irq, ISP_IFLAGS, NULL, isp_platform_intr,
+	    isp, &sbs->ih)) {
 		device_printf(dev, "could not setup interrupt\n");
 		goto bad;
 	}
@@ -333,27 +335,51 @@
 bad:
=20
 	if (sbs && ints_setup) {
-		(void) bus_teardown_intr(dev, sbs->sbus_ires, sbs->ih);
+		(void) bus_teardown_intr(dev, sbs->irq, sbs->ih);
 	}
=20
-	if (sbs && sbs->sbus_ires) {
-		bus_release_resource(dev, SYS_RES_IRQ, iqd, sbs->sbus_ires);
+	if (sbs && sbs->irq) {
+		bus_release_resource(dev, SYS_RES_IRQ, sbs->iqd, sbs->irq);
 	}
=20
 	if (locksetup && isp) {
 		mtx_destroy(&isp->isp_osinfo.lock);
 	}
=20
-	if (regs) {
-		(void) bus_release_resource(dev, SYS_RES_MEMORY, 0, regs);
-	}
-
-	if (sbs) {
-		free(sbs, M_DEVBUF);
+	if (sbs->regs) {
+		(void) bus_release_resource(dev, SYS_RES_MEMORY, sbs->rgd,
+		    sbs->regs);
 	}
 	return (ENXIO);
 }
=20
+static int
+isp_sbus_detach(device_t dev)
+{
+	struct isp_sbussoftc *sbs;
+	ispsoftc_t *isp;
+	int status;
+
+	sbs =3D device_get_softc(dev);
+	if (sbs =3D=3D NULL) {
+		return (ENXIO);
+	}
+	isp =3D (ispsoftc_t *) sbs;
+	status =3D isp_detach(isp);
+	if (status)
+		return (status);
+	ISP_LOCK(isp);
+	isp_uninit(isp);
+	if (sbs->ih) {
+		(void) bus_teardown_intr(dev, sbs->irq, sbs->ih);
+	}
+	ISP_UNLOCK(isp);
+	mtx_destroy(&isp->isp_osinfo.lock);
+	(void) bus_release_resource(dev, SYS_RES_IRQ, sbs->iqd, sbs->irq);
+	(void) bus_release_resource(dev, SYS_RES_MEMORY, sbs->rgd, sbs->regs);
+	return (0);
+}
+
 #define	IspVirt2Off(a, x)	\
 	(((struct isp_sbussoftc *)a)->sbus_poff[((x) & _BLK_REG_MASK) >> \
 	_BLK_REG_SHFT] + ((x) & 0xff))
@@ -600,7 +626,7 @@
 		ddir =3D ISP_NOXFR;
 	}
=20
-	if (isp_send_cmd(isp, rq, dm_segs, nseg, XS_XFRLEN(csio), ddir) !=3D CMD_=
QUEUED) {
+	if (isp_send_cmd(isp, rq, dm_segs, nseg, XS_XFRLEN(csio), ddir, NULL) !=
=3D CMD_QUEUED) {
 		mp->error =3D MUSHERR_NOQENTRIES;
 	}
 }
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/isp/isp_stds.h
--- a/head/sys/dev/isp/isp_stds.h	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/isp/isp_stds.h	Fri Aug 10 14:19:25 2012 +0300
@@ -1,4 +1,4 @@
-/* $FreeBSD$ */
+/* $FreeBSD: head/sys/dev/isp/isp_stds.h 238869 2012-07-28 20:06:29Z mjaco=
b $ */
 /*-
  *  Copyright (c) 1997-2009 by Matthew Jacob
  *  All rights reserved.
@@ -137,9 +137,30 @@
 } rft_id_t;
=20
 /*
- * FCP Response IU Bits of interest
- * Source: NCITS T10, Project 1144D, Revision 08 (aka FCP2r08)
+ * FCP Response IU and bits of interest
+ * Source: NCITS T10, Project 1828D, Revision 02b (aka FCP4r02b)
  */
+typedef struct {
+	uint8_t		fcp_rsp_reserved[8];
+	uint16_t	fcp_rsp_status_qualifier;	/* SAM-5 Status Qualifier */
+	uint8_t		fcp_rsp_bits;
+	uint8_t		fcp_rsp_scsi_status;		/* SAM-5 SCSI Status Byte */
+	uint32_t	fcp_rsp_resid;
+	uint32_t	fcp_rsp_snslen;
+	uint32_t	fcp_rsp_rsplen;
+	/*
+	 * In the bytes that follow, it's going to be
+	 * FCP RESPONSE INFO (max 8 bytes, possibly 0)
+	 * FCP SENSE INFO (if any)
+	 * FCP BIDIRECTIONAL READ RESID (if any)
+	 */
+	uint8_t		fcp_rsp_extra[0];
+} fcp_rsp_iu_t;
+#define	MIN_FCP_RESPONSE_SIZE		24
+
+#define	FCP_BIDIR_RSP			0x80	/* Bi-Directional response */
+#define	FCP_BIDIR_RESID_UNDERFLOW	0x40
+#define	FCP_BIDIR_RESID_OVERFLOW	0x20
 #define	FCP_CONF_REQ			0x10
 #define	FCP_RESID_UNDERFLOW		0x08
 #define	FCP_RESID_OVERFLOW		0x04
@@ -162,17 +183,41 @@
 #define	FCP_RSPNS_TMF_SUCCEEDED		8
 #define	FCP_RSPNS_TMF_INCORRECT_LUN	9
=20
+/*
+ * R_CTL field definitions
+ *
+ * Bits 31-28 are ROUTING
+ * Bits 27-24 are INFORMATION
+ *
+ * These are nibble values, not bits
+ */
+#define	R_CTL_ROUTE_DATA	0x00
+#define	R_CTL_ROUTE_ELS		0x02
+#define	R_CTL_ROUTE_FC4_LINK	0x03
+#define	R_CTL_ROUTE_VDATA	0x04
+#define	R_CTL_ROUTE_EXENDED	0x05
+#define	R_CTL_ROUTE_BASIC	0x08
+#define	R_CTL_ROUTE_LINK	0x0c
+#define	R_CTL_ROUTE_EXT_ROUTING	0x0f
+
+#define	R_CTL_INFO_UNCATEGORIZED	0x00
+#define	R_CTL_INFO_SOLICITED_DATA	0x01
+#define	R_CTL_INFO_UNSOLICITED_CONTROL	0x02
+#define	R_CTL_INFO_SOLICITED_CONTROL	0x03
+#define	R_CTL_INFO_UNSOLICITED_DATA	0x04
+#define	R_CTL_INFO_DATA_DESCRIPTOR	0x05
+#define	R_CTL_INFO_UNSOLICITED_COMMAND	0x06
+#define	R_CTL_INFO_COMMAND_STATUS	0x07
+
+#define	MAKE_RCTL(a, b)	(((a) << 4) | (b))
=20
 /* unconverted miscellany */
 /*
  * Basic FC Link Service defines
  */
-/*
- * These are in the R_CTL field.
- */
-#define	ABTS			0x81
-#define	BA_ACC			0x84	/* of ABORT SEQUENCE */
-#define	BA_RJT			0x85	/* of ABORT SEQUENCE */
+/* #define	ABTS	MAKE_RCTL(R_CTL_ROUTE_BASIC, R_CTL_INFO_SOLICITED_DATA) */
+#define	BA_ACC	MAKE_RCTL(R_CTL_ROUTE_BASIC, R_CTL_INFO_UNSOLICITED_DATA)	/=
* of ABORT */
+#define	BA_RJT	MAKE_RCTL(R_CTL_ROUTE_BASIC, R_CTL_INFO_DATA_DESCRIPTOR)	/*=
 of ABORT */
=20
 /*
  * Link Service Accept/Reject
@@ -196,6 +241,23 @@
 #define	RNC			0x53
=20
 /*
+ * PRLI Word 3 definitions
+ * FPC4-r02b January, 2011
+ */
+#define	PRLI_WD3_ENHANCED_DISCOVERY			(1 << 11)
+#define	PRLI_WD3_REC_SUPPORT				(1 << 10)
+#define	PRLI_WD3_TASK_RETRY_IDENTIFICATION_REQUESTED	(1 << 9)
+#define	PRLI_WD3_RETRY					(1 << 8)
+#define	PRLI_WD3_CONFIRMED_COMPLETION_ALLOWED		(1 << 7)
+#define	PRLI_WD3_DATA_OVERLAY_ALLOWED			(1 << 6)
+#define	PRLI_WD3_INITIATOR_FUNCTION			(1 << 5)
+#define	PRLI_WD3_TARGET_FUNCTION			(1 << 4)
+#define	PRLI_WD3_READ_FCP_XFER_RDY_DISABLED		(1 << 1)	/* definitely suppos=
ed to be set */
+#define	PRLI_WD3_WRITE_FCP_XFER_RDY_DISABLED		(1 << 0)
+
+
+
+/*
  * FC4 defines
  */
 #define	FC4_IP		5	/* ISO/EEC 8802-2 LLC/SNAP */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/isp/isp_target.c
--- a/head/sys/dev/isp/isp_target.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/isp/isp_target.c	Fri Aug 10 14:19:25 2012 +0300
@@ -41,7 +41,7 @@
 #endif
 #ifdef	__FreeBSD__
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
+__FBSDID("$FreeBSD: head/sys/dev/isp/isp_target.c 238869 2012-07-28 20:06:=
29Z mjacob $");
 #include <dev/isp/isp_freebsd.h>
 #endif
 #ifdef	__OpenBSD__
@@ -291,7 +291,7 @@
 			break;
 		case IN_RSRC_UNAVAIL:
 			isp_prt(isp, ISP_LOGINFO, "Firmware out of ATIOs");
-			(void) isp_notify_ack(isp, local);
+			isp_async(isp, ISPASYNC_TARGET_NOTIFY_ACK, local);
 			break;
=20
 		case IN_RESET:
@@ -346,19 +346,29 @@
 			notify.nt_sid =3D PORT_ANY;
 			notify.nt_did =3D PORT_ANY;
 			notify.nt_ncode =3D NT_GLOBAL_LOGOUT;
+			notify.nt_need_ack =3D 1;
+			notify.nt_lreserved =3D local;
 			isp_async(isp, ISPASYNC_TARGET_NOTIFY, &notify);
-			(void) isp_notify_ack(isp, local);
 			break;
=20
 		case IN_PORT_CHANGED:
 			isp_prt(isp, ISP_LOGTINFO, "%s: port changed", __func__);
-			(void) isp_notify_ack(isp, local);
+			ISP_MEMZERO(&notify, sizeof (isp_notify_t));
+			notify.nt_hba =3D isp;
+			notify.nt_wwn =3D INI_ANY;
+			notify.nt_nphdl =3D NIL_HANDLE;
+			notify.nt_sid =3D PORT_ANY;
+			notify.nt_did =3D PORT_ANY;
+			notify.nt_ncode =3D NT_CHANGED;
+			notify.nt_need_ack =3D 1;
+			notify.nt_lreserved =3D local;
+			isp_async(isp, ISPASYNC_TARGET_NOTIFY, &notify);
 			break;
=20
 		default:
 			ISP_SNPRINTF(local, sizeof local, "%s: unknown status to RQSTYPE_NOTIFY=
 (0x%x)", __func__, status);
 			isp_print_bytes(isp, local, QENTRY_LEN, vptr);
-			(void) isp_notify_ack(isp, local);
+			isp_async(isp, ISPASYNC_TARGET_NOTIFY_ACK, local);
 			break;
 		}
 		break;
@@ -466,23 +476,30 @@
 	if (IS_DUALBUS(isp)) {
 		el.le_rsvd =3D (bus & 0x1) << 7;
 	}
-	el.le_cmd_count =3D cmd_cnt;
-	el.le_in_count =3D inot_cnt;
+	el.le_cmd_count =3D (cmd_cnt < 0)? -cmd_cnt : cmd_cnt;
+	el.le_in_count =3D (inot_cnt < 0)? -inot_cnt : inot_cnt;
 	if (cmd =3D=3D RQSTYPE_ENABLE_LUN) {
 		if (IS_SCSI(isp)) {
 			el.le_flags =3D LUN_TQAE|LUN_DISAD;
 			el.le_cdb6len =3D 12;
 			el.le_cdb7len =3D 12;
 		}
-	} else if (cmd =3D=3D -RQSTYPE_ENABLE_LUN) {
-		cmd =3D RQSTYPE_ENABLE_LUN;
-		el.le_cmd_count =3D 0;
-		el.le_in_count =3D 0;
-	} else if (cmd =3D=3D -RQSTYPE_MODIFY_LUN) {
-		cmd =3D RQSTYPE_MODIFY_LUN;
-		el.le_ops =3D LUN_CCDECR | LUN_INDECR;
+	} else if (cmd =3D=3D RQSTYPE_MODIFY_LUN) {
+		if (cmd_cnt =3D=3D 0 && inot_cnt =3D=3D 0) {
+			isp_prt(isp, ISP_LOGWARN, "makes no sense to modify a lun with both com=
mand and immediate notify counts as zero");
+			return (0);
+		}
+		if (cmd_cnt < 0)
+			el.le_ops |=3D LUN_CCDECR;
+		else
+			el.le_ops |=3D LUN_CCINCR;
+		if (inot_cnt < 0)
+			el.le_ops |=3D LUN_INDECR;
+		else
+			el.le_ops |=3D LUN_ININCR;
 	} else {
-		el.le_ops =3D LUN_CCINCR | LUN_ININCR;
+		isp_prt(isp, ISP_LOGWARN, "unknown cmd (0x%x) in %s", cmd, __func__);
+		return (-1);
 	}
 	el.le_header.rqs_entry_type =3D cmd;
 	el.le_header.rqs_entry_count =3D 1;
@@ -662,8 +679,8 @@
 			cto->rsp.m1.ct_resp[0] =3D 0xf0;
 			cto->rsp.m1.ct_resp[2] =3D (code >> 12) & 0xf;
 			cto->rsp.m1.ct_resp[7] =3D 8;
-			cto->rsp.m1.ct_resp[12] =3D (code >> 24) & 0xff;
-			cto->rsp.m1.ct_resp[13] =3D (code >> 16) & 0xff;
+			cto->rsp.m1.ct_resp[12] =3D (code >> 16) & 0xff;
+			cto->rsp.m1.ct_resp[13] =3D (code >> 24) & 0xff;
 		} else {
 			cto->ct_flags |=3D CT7_FLAG_MODE1 | CT7_SENDSTATUS;
 		}
@@ -837,7 +854,7 @@
 	default:
 		isp_prt(isp, ISP_LOGERR, "%s: unknown event 0x%x", __func__, event);
 		if (isp->isp_state =3D=3D ISP_RUNSTATE) {
-			(void) isp_notify_ack(isp, NULL);
+			isp_async(isp, ISPASYNC_TARGET_NOTIFY_ACK, NULL);
 		}
 		break;
 	}
@@ -897,13 +914,13 @@
 			break;
 		default:
 			isp_prt(isp, ISP_LOGERR, "%s: unhandled message 0x%x", __func__, inp->i=
n_msg[0]);
-			(void) isp_notify_ack(isp, inp);
+			isp_async(isp, ISPASYNC_TARGET_NOTIFY_ACK, inp);
 			return;
 		}
 		isp_async(isp, ISPASYNC_TARGET_NOTIFY, &notify);
 	} else {
 		isp_prt(isp, ISP_LOGERR, "%s: unknown immediate notify status 0x%x", __f=
unc__, inp->in_status);
-		(void) isp_notify_ack(isp, inp);
+		isp_async(isp, ISPASYNC_TARGET_NOTIFY_ACK, inp);
 	}
 }
=20
@@ -946,7 +963,7 @@
=20
 	if (inp->in_status !=3D IN_MSG_RECEIVED) {
 		isp_prt(isp, ISP_LOGINFO, f2, "immediate notify status", inp->in_status,=
 notify.nt_lun, loopid, inp->in_task_flags, inp->in_seqid);
-		(void) isp_notify_ack(isp, inp);
+		isp_async(isp, ISPASYNC_TARGET_NOTIFY_ACK, inp);
 		return;
 	}
=20
@@ -967,7 +984,7 @@
 		notify.nt_ncode =3D NT_CLEAR_ACA;
 	} else {
 		isp_prt(isp, ISP_LOGWARN, f2, "task flag", inp->in_status, notify.nt_lun=
, loopid, inp->in_task_flags,  inp->in_seqid);
-		(void) isp_notify_ack(isp, inp);
+		isp_async(isp, ISPASYNC_TARGET_NOTIFY_ACK, inp);
 		return;
 	}
 	isp_async(isp, ISPASYNC_TARGET_NOTIFY, &notify);
@@ -1054,10 +1071,12 @@
=20
 	if (IS_24XX(isp)) {
 		na_fcentry_24xx_t *na =3D (na_fcentry_24xx_t *) storage;
+		na->na_header.rqs_entry_type =3D RQSTYPE_NOTIFY_ACK;
+		na->na_header.rqs_entry_count =3D 1;
 		if (arg) {
 			in_fcentry_24xx_t *in =3D arg;
 			na->na_nphdl =3D in->in_nphdl;
-			na->na_flags =3D in->in_flags & IN24XX_FLAG_PUREX_IOCB;
+			na->na_flags =3D in->in_flags;
 			na->na_status =3D in->in_status;
 			na->na_status_subcode =3D in->in_status_subcode;
 			na->na_rxid =3D in->in_rxid;
@@ -1068,14 +1087,19 @@
 				na->na_srr_reloff_hi =3D in->in_srr_reloff_hi;
 				na->na_srr_reloff_lo =3D in->in_srr_reloff_lo;
 				na->na_srr_iu =3D in->in_srr_iu;
-				na->na_srr_flags =3D 1;
-				na->na_srr_reject_vunique =3D 0;
-				na->na_srr_reject_explanation =3D 1;
-				na->na_srr_reject_code =3D 1;
+				/*
+				 * Whether we're accepting the SRR or rejecting
+				 * it is determined by looking at the in_reserved
+				 * field in the original notify structure.
+				 */
+				if (in->in_reserved) {
+					na->na_srr_flags =3D 1;
+					na->na_srr_reject_vunique =3D 0;
+					na->na_srr_reject_code =3D 9;		/* unable to perform this command at t=
his time */
+					na->na_srr_reject_explanation =3D 0x2a;	/* unable to supply the reque=
sted data */
+				}
 			}
 		}
-		na->na_header.rqs_entry_type =3D RQSTYPE_NOTIFY_ACK;
-		na->na_header.rqs_entry_count =3D 1;
 		isp_put_notify_24xx_ack(isp, na, (na_fcentry_24xx_t *)outp);
 	} else if (IS_FC(isp)) {
 		na_fcentry_t *na =3D (na_fcentry_t *) storage;
@@ -1093,10 +1117,10 @@
 			}
 			na->na_task_flags =3D inp->in_task_flags & TASK_FLAGS_RESERVED_MASK;
 			na->na_seqid =3D inp->in_seqid;
+			na->na_status =3D inp->in_status;
 			na->na_flags =3D NAFC_RCOUNT;
-			na->na_status =3D inp->in_status;
 			if (inp->in_status =3D=3D IN_RESET) {
-				na->na_flags |=3D NAFC_RST_CLRD;
+				na->na_flags =3D NAFC_RST_CLRD;	/* We do not modify resource counts fo=
r LIP resets */
 			}
 			if (inp->in_status =3D=3D IN_MSG_RECEIVED) {
 				na->na_flags |=3D NAFC_TVALID;
@@ -1200,7 +1224,7 @@
 		ISP_MEMZERO(&rsp->abts_rsp_payload.ba_rjt, sizeof (rsp->abts_rsp_payload=
.ba_acc));
 		switch (errno) {
 		case ENOMEM:
-			rsp->abts_rsp_payload.ba_rjt.reason =3D 5;	/* Logical Busy */
+			rsp->abts_rsp_payload.ba_rjt.reason =3D 5;	/* Logical Unit Busy */
 			break;
 		default:
 			rsp->abts_rsp_payload.ba_rjt.reason =3D 9;	/* Unable to perform command=
 request */
@@ -1771,7 +1795,7 @@
 		break;
=20
 	case CT7_SRR:
-		isp_prt(isp, ISP_LOGWARN, "SRR received");
+		isp_prt(isp, ISP_LOGTDEBUG0, "SRR received");
 		break;
=20
 	default:
@@ -1789,7 +1813,7 @@
 		 */
 		if (ct->ct_syshandle =3D=3D 0) {
 			if (ct->ct_flags & CT7_TERMINATE) {
-				isp_prt(isp, ISP_LOGINFO, "termination of 0x%x complete", ct->ct_rxid);
+				isp_prt(isp, ISP_LOGINFO, "termination of [RX_ID 0x%x] complete", ct->=
ct_rxid);
 			} else if ((ct->ct_flags & CT7_SENDSTATUS) =3D=3D 0) {
 				isp_prt(isp, pl, "intermediate CTIO completed ok");
 			} else {
@@ -1844,7 +1868,7 @@
 			char buf[64];
 			ISP_SNPRINTF(buf, sizeof buf, "%s: bad channel %d for status 0x%x", __f=
unc__, chan, inot_24xx->in_status);
 			isp_print_bytes(isp, buf, QENTRY_LEN, inot_24xx);
-			(void) isp_notify_ack(isp, inot_24xx);
+			isp_async(isp, ISPASYNC_TARGET_NOTIFY_ACK, inot_24xx);
 			return;
 		}
 		lochan =3D chan;
@@ -1860,12 +1884,13 @@
 		case IN24XX_LINK_FAILED:
 		case IN24XX_SRR_RCVD:
 		case IN24XX_ELS_RCVD:
+			inot_24xx->in_reserved =3D 0;	/* clear this for later usage */
 			inot_24xx->in_vpidx =3D chan;
 			isp_async(isp, ISPASYNC_TARGET_ACTION, inot_24xx);
 			break;
 		default:
 			isp_prt(isp, ISP_LOGINFO, "%s: unhandled status (0x%x) for chan %d", __=
func__, inot_24xx->in_status, chan);
-			(void) isp_notify_ack(isp, inot_24xx);
+			isp_async(isp, ISPASYNC_TARGET_NOTIFY_ACK, inot_24xx);
 			break;
 		}
 	}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/isp/isp_target.h
--- a/head/sys/dev/isp/isp_target.h	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/isp/isp_target.h	Fri Aug 10 14:19:25 2012 +0300
@@ -1,4 +1,4 @@
-/* $FreeBSD$ */
+/* $FreeBSD: head/sys/dev/isp/isp_target.h 238869 2012-07-28 20:06:29Z mja=
cob $ */
 /*-
  *  Copyright (c) 1997-2009 by Matthew Jacob
  *  All rights reserved.
@@ -50,6 +50,7 @@
 	NT_LINK_DOWN,
 	NT_LOGOUT,
 	NT_GLOBAL_LOGOUT,
+	NT_CHANGED,
 	NT_ARRIVED,
 	NT_DEPARTED,
 	NT_HBA_RESET
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/isp/ispmbox.h
--- a/head/sys/dev/isp/ispmbox.h	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/isp/ispmbox.h	Fri Aug 10 14:19:25 2012 +0300
@@ -1,4 +1,4 @@
-/* $FreeBSD: head/sys/dev/isp/ispmbox.h 237537 2012-06-24 17:30:54Z mjacob=
 $ */
+/* $FreeBSD: head/sys/dev/isp/ispmbox.h 238869 2012-07-28 20:06:29Z mjacob=
 $ */
 /*-
  *  Copyright (c) 1997-2009 by Matthew Jacob
  *  All rights reserved.
@@ -428,7 +428,8 @@
 	uint8_t		req_target;
 	uint16_t	req_scclun;
 	uint16_t	req_flags;
-	uint16_t	req_reserved;
+	uint8_t		req_crn;
+	uint8_t		req_reserved;
 	uint16_t	req_time;
 	uint16_t	req_seg_count;
 	uint8_t		req_cdb[16];
@@ -458,7 +459,8 @@
 	uint8_t		req_target;
 	uint16_t	req_scclun;
 	uint16_t	req_flags;
-	uint16_t	req_reserved;
+	uint8_t		req_crn;
+	uint8_t		req_reserved;
 	uint16_t	req_time;
 	uint16_t	req_seg_count;
 	uint8_t		req_cdb[16];
@@ -473,7 +475,8 @@
 	uint16_t	req_target;
 	uint16_t	req_scclun;
 	uint16_t	req_flags;
-	uint16_t	req_reserved;
+	uint8_t		req_crn;
+	uint8_t		req_reserved;
 	uint16_t	req_time;
 	uint16_t	req_seg_count;
 	uint8_t		req_cdb[16];
@@ -515,40 +518,10 @@
 	uint8_t		req_cdb[44];
 } ispextreq_t;
=20
-/* 24XX only */
-typedef struct {
-	uint16_t	fcd_length;
-	uint16_t	fcd_a1500;
-	uint16_t	fcd_a3116;
-	uint16_t	fcd_a4732;
-	uint16_t	fcd_a6348;
-} fcp_cmnd_ds_t;
=20
-typedef struct {
-	isphdr_t	req_header;
-	uint32_t	req_handle;
-	uint16_t	req_nphdl;
-	uint16_t	req_time;
-	uint16_t	req_seg_count;
-	uint16_t	req_fc_rsp_dsd_length;
-	uint8_t		req_lun[8];
-	uint16_t	req_flags;
-	uint16_t	req_fc_cmnd_dsd_length;
-	uint16_t	req_fc_cmnd_dsd_a1500;
-	uint16_t	req_fc_cmnd_dsd_a3116;
-	uint16_t	req_fc_cmnd_dsd_a4732;
-	uint16_t	req_fc_cmnd_dsd_a6348;
-	uint16_t	req_fc_rsp_dsd_a1500;
-	uint16_t	req_fc_rsp_dsd_a3116;
-	uint16_t	req_fc_rsp_dsd_a4732;
-	uint16_t	req_fc_rsp_dsd_a6348;
-	uint32_t	req_totalcnt;
-	uint16_t	req_tidlo;
-	uint8_t		req_tidhi;
-	uint8_t		req_vpidx;
-	ispds64_t	req_dataseg;
-} ispreqt6_t;
-
+/*
+ * ISP24XX structures
+ */
 typedef struct {
 	isphdr_t	req_header;
 	uint32_t	req_handle;
@@ -945,7 +918,7 @@
 #define	ICBOPT_SRCHDOWN		0x0400
 #define	ICBOPT_NOLIP		0x0200
 #define	ICBOPT_PDBCHANGE_AE	0x0100
-#define	ICBOPT_INI_TGTTYPE	0x0080
+#define	ICBOPT_TGT_TYPE		0x0080
 #define	ICBOPT_INI_ADISC	0x0040
 #define	ICBOPT_INI_DISABLE	0x0020
 #define	ICBOPT_TGT_ENABLE	0x0010
@@ -1044,7 +1017,7 @@
 #define	ICB_DFLT_RCOUNT		3
=20
 #define	ICB_LOGIN_TOV		30
-#define	ICB_LUN_ENABLE_TOV	180
+#define	ICB_LUN_ENABLE_TOV	15
=20
=20
 /*
@@ -1272,10 +1245,8 @@
 #define	PDB_STATE_PLOGO		10
 #define	PDB_STATE_PLOG_ACK	11
=20
-#define		SVC3_TGT_ROLE		0x10
-#define 	SVC3_INI_ROLE		0x20
-#define			SVC3_ROLE_MASK	0x30
-#define			SVC3_ROLE_SHIFT	4
+#define	SVC3_ROLE_MASK		0x30
+#define	SVC3_ROLE_SHIFT		4
=20
 #define	BITS2WORD(x)		((x)[0] << 16 | (x)[3] << 8 | (x)[2])
 #define	BITS2WORD_24XX(x)	((x)[0] << 16 | (x)[1] << 8 | (x)[2])
@@ -1321,8 +1292,8 @@
  */
 typedef struct {
 	uint16_t	handle;
-	uint16_t	reserved;
-	uint32_t	s3_role	: 8,
+	uint16_t	prli_word3;
+	uint32_t		: 8,
 			portid	: 24;
 	uint8_t		portname[8];
 	uint8_t		nodename[8];
@@ -1781,6 +1752,7 @@
 #define	IN_PORT_CHANGED	0x2A	/* port changed */
 #define	IN_GLOBAL_LOGO	0x2E	/* all ports logged out */
 #define	IN_NO_NEXUS	0x3B	/* Nexus not established */
+#define	IN_SRR_RCVD	0x45	/* SRR received */
=20
 /*
  * Values for the in_task_flags field- should only get one at a time!
@@ -1811,24 +1783,17 @@
 	uint16_t	in_srr_iu;
 	uint16_t	in_srr_oxid;
 	/*
-	 * If bit 2 is set in in_flags, the following
-	 * two tags are valid. If the received ELS is
+	 * If bit 2 is set in in_flags, the N-Port and
+	 * handle tags are valid. If the received ELS is
 	 * a LOGO, then these tags contain the N Port ID
 	 * from the LOGO payload. If the received ELS
 	 * request is TPRLO, these tags contain the
 	 * Third Party Originator N Port ID.
 	 */
 	uint16_t	in_nport_id_hi;
+#define	in_prli_options in_nport_id_hi
 	uint8_t		in_nport_id_lo;
 	uint8_t		in_reserved3;
-	/*
-	 * If bit 2 is set in in_flags, the following
-	 * tag is valid. If the received ELS is a LOGO,
-	 * then this tag contains the n-port handle
-	 * from the LOGO payload. If the received ELS
-	 * request is TPRLO, this tag contain the
-	 * n-port handle for the Third Party Originator.
-	 */
 	uint16_t	in_np_handle;
 	uint8_t		in_reserved4[12];
 	uint8_t		in_reserved5;
@@ -2183,7 +2148,7 @@
 	uint8_t 	ct_tag_val;	/* tag value */
 	uint8_t 	ct_tag_type;	/* tag type */
 	uint32_t	ct_xfrlen;	/* transfer length */
-	int32_t		ct_resid;	/* residual length */
+	uint32_t	ct_resid;	/* residual length */
 	uint16_t	ct_timeout;
 	uint16_t	ct_seg_count;
 	ispds_t		ct_dataseg[ISP_RQDSEG];
@@ -2206,8 +2171,8 @@
  * ct_flags values
  */
 #define CT_TQAE		0x00000002	/* bit  1, Tagged Queue Action enable */
-#define CT_DATA_IN	0x00000040	/* bits 6&7, Data direction */
-#define CT_DATA_OUT	0x00000080	/* bits 6&7, Data direction */
+#define CT_DATA_IN	0x00000040	/* bits 6&7, Data direction - *to* initiator=
 */
+#define CT_DATA_OUT	0x00000080	/* bits 6&7, Data direction - *from* initia=
tor */
 #define CT_NO_DATA	0x000000C0	/* bits 6&7, Data direction */
 #define	CT_CCINCR	0x00000100	/* bit 8, autoincrement atio count */
 #define CT_DATAMASK	0x000000C0	/* bits 6&7, Data direction */
@@ -2278,7 +2243,7 @@
 	uint16_t	ct_timeout;
 	uint16_t	ct_seg_count;
 	uint32_t	ct_reloff;	/* relative offset */
-	int32_t		ct_resid;	/* residual length */
+	uint32_t	ct_resid;	/* residual length */
 	union {
 		/*
 		 * The three different modes that the target driver
@@ -2317,7 +2282,10 @@
 			uint16_t _reserved2;
 			uint16_t _reserved3;
 			uint32_t ct_datalen;
-			ispds_t ct_fcp_rsp_iudata;
+			union {
+				ispds_t	ct_fcp_rsp_iudata_32;
+				ispds64_t ct_fcp_rsp_iudata_64;
+			} u;
 		} m2;
 	} rsp;
 } ct2_entry_t;
@@ -2332,7 +2300,7 @@
 	uint16_t	ct_timeout;
 	uint16_t	ct_seg_count;
 	uint32_t	ct_reloff;	/* relative offset */
-	int32_t		ct_resid;	/* residual length */
+	uint32_t	ct_resid;	/* residual length */
 	union {
 		struct {
 			uint32_t _reserved;
@@ -2358,7 +2326,10 @@
 			uint16_t _reserved2;
 			uint16_t _reserved3;
 			uint32_t ct_datalen;
-			ispds_t ct_fcp_rsp_iudata;
+			union {
+				ispds_t	ct_fcp_rsp_iudata_32;
+				ispds64_t ct_fcp_rsp_iudata_64;
+			} u;
 		} m2;
 	} rsp;
 } ct2e_entry_t;
@@ -2370,8 +2341,8 @@
 #define	CT2_FLAG_MODE1	0x0001
 #define	CT2_FLAG_MODE2	0x0002
 #define		CT2_FLAG_MMASK	0x0003
-#define CT2_DATA_IN	0x0040
-#define CT2_DATA_OUT	0x0080
+#define CT2_DATA_IN	0x0040	/* *to* initiator */
+#define CT2_DATA_OUT	0x0080	/* *from* initiator */
 #define CT2_NO_DATA	0x00C0
 #define 	CT2_DATAMASK	0x00C0
 #define	CT2_CCINCR	0x0100
@@ -2412,7 +2383,7 @@
 	uint32_t	ct_rxid;
 	uint16_t	ct_senselen;	/* mode 1 only */
 	uint16_t	ct_flags;
-	int32_t		ct_resid;	/* residual length */
+	uint32_t	ct_resid;	/* residual length */
 	uint16_t	ct_oxid;
 	uint16_t	ct_scsi_status;	/* modes 0 && 1 only */
 	union {
@@ -2430,8 +2401,9 @@
 		} m1;
 		struct {
 			uint32_t reserved0;
+			uint32_t reserved1;
 			uint32_t ct_datalen;
-			uint32_t reserved1;
+			uint32_t reserved2;
 			ispds64_t ct_fcp_rsp_iudata;
 		} m2;
 	} rsp;
@@ -2440,10 +2412,10 @@
 /*
  * ct_flags values for CTIO7
  */
-#define CT7_DATA_IN	0x0002
-#define CT7_DATA_OUT	0x0001
 #define CT7_NO_DATA	0x0000
-#define 	CT7_DATAMASK	0x003
+#define CT7_DATA_OUT	0x0001	/* *from* initiator */
+#define CT7_DATA_IN	0x0002	/* *to* initiator */
+#define 	CT7_DATAMASK	0x3
 #define	CT7_DSD_ENABLE	0x0004
 #define	CT7_CONF_STSFD	0x0010
 #define	CT7_EXPLCT_CONF	0x0020
@@ -2451,9 +2423,9 @@
 #define	CT7_FLAG_MODE1	0x0040
 #define	CT7_FLAG_MODE2	0x0080
 #define		CT7_FLAG_MMASK	0x00C0
-#define	CT7_NOACK	0x0100
+#define	CT7_NOACK	    0x0100
 #define	CT7_TASK_ATTR_SHIFT	9
-#define	CT7_CONFIRM	0x2000
+#define	CT7_CONFIRM     0x2000
 #define	CT7_TERMINATE	0x4000
 #define CT7_SENDSTATUS	0x8000
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/isp/ispvar.h
--- a/head/sys/dev/isp/ispvar.h	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/isp/ispvar.h	Fri Aug 10 14:19:25 2012 +0300
@@ -1,4 +1,4 @@
-/* $FreeBSD: head/sys/dev/isp/ispvar.h 237537 2012-06-24 17:30:54Z mjacob =
$ */
+/* $FreeBSD: head/sys/dev/isp/ispvar.h 238869 2012-07-28 20:06:29Z mjacob =
$ */
 /*-
  *  Copyright (c) 1997-2009 by Matthew Jacob
  *  All rights reserved.
@@ -77,7 +77,7 @@
  */
 #define	MAX_TARGETS		16
 #ifndef	MAX_FC_TARG
-#define	MAX_FC_TARG		512
+#define	MAX_FC_TARG		256
 #endif
 #define	ISP_MAX_TARGETS(isp)	(IS_FC(isp)? MAX_FC_TARG : MAX_TARGETS)
 #define	ISP_MAX_LUNS(isp)	(isp)->isp_maxluns
@@ -400,10 +400,10 @@
 	 * A device is 'autologin' if the firmware automatically logs into
 	 * it (re-logins as needed). Basically, local private loop devices.
 	 *
+	 * PRLI word 3 parameters contains role as well as other things.
+	 *
 	 * The state is the current state of this entry.
 	 *
-	 * Role is Initiator, Target, Both
-	 *
 	 * Portid is obvious, as are node && port WWNs. The new_role and
 	 * new_portid is for when we are pending a change.
 	 *
@@ -412,17 +412,18 @@
 	 * You should also never see anything with an initiator role
 	 * with this set.
 	 */
+	uint16_t	prli_word3;		/* PRLI parameters */
+	uint16_t	new_prli_word3;		/* Incoming new PRLI parameters */
 	uint16_t	dev_map_idx	: 12,
 			autologin	: 1,	/* F/W does PLOGI/PLOGO */
 			state		: 3;
-	uint32_t	reserved	: 5,
+	uint32_t			: 7,
 			target_mode	: 1,
-			roles		: 2,
 			portid		: 24;
 	uint32_t
+					: 6,
+			announced	: 1,
 			dirty		: 1,	/* commands have been run */
-			new_reserved	: 5,
-			new_roles	: 2,
 			new_portid	: 24;
 	uint64_t	node_wwn;
 	uint64_t	port_wwn;
@@ -447,6 +448,7 @@
=20
 typedef struct {
 	uint32_t
+				fctape_enabled	: 1,
 				link_active	: 1,
 				sendmarker	: 1,
 				role		: 2,
@@ -680,21 +682,24 @@
 /*
  * ISP Runtime Configuration Options
  */
-#define	ISP_CFG_NORELOAD	0x80	/* don't download f/w */
-#define	ISP_CFG_NONVRAM		0x40	/* ignore NVRAM */
-#define	ISP_CFG_TWOGB		0x20	/* force 2GB connection (23XX only) */
-#define	ISP_CFG_ONEGB		0x10	/* force 1GB connection (23XX only) */
 #define	ISP_CFG_FULL_DUPLEX	0x01	/* Full Duplex (Fibre Channel only) */
-#define	ISP_CFG_PORT_PREF	0x0C	/* Mask for Port Prefs (2200 only) */
+#define	ISP_CFG_PORT_PREF	0x0c	/* Mask for Port Prefs (all FC except 2100)=
 */
 #define	ISP_CFG_LPORT		0x00	/* prefer {N/F}L-Port connection */
 #define	ISP_CFG_NPORT		0x04	/* prefer {N/F}-Port connection */
 #define	ISP_CFG_NPORT_ONLY	0x08	/* insist on {N/F}-Port connection */
-#define	ISP_CFG_LPORT_ONLY	0x0C	/* insist on {N/F}L-Port connection */
+#define	ISP_CFG_LPORT_ONLY	0x0c	/* insist on {N/F}L-Port connection */
+#define	ISP_CFG_ONEGB		0x10	/* force 1GB connection (23XX only) */
+#define	ISP_CFG_TWOGB		0x20	/* force 2GB connection (23XX only) */
+#define	ISP_CFG_NORELOAD	0x80	/* don't download f/w */
+#define	ISP_CFG_NONVRAM		0x40	/* ignore NVRAM */
+#define	ISP_CFG_NOFCTAPE	0x100	/* disable FC-Tape */
+#define	ISP_CFG_FCTAPE		0x200	/* enable FC-Tape */
 #define	ISP_CFG_OWNFSZ		0x400	/* override NVRAM frame size */
 #define	ISP_CFG_OWNLOOPID	0x800	/* override NVRAM loopid */
 #define	ISP_CFG_OWNEXCTHROTTLE	0x1000	/* override NVRAM execution throttle=
 */
 #define	ISP_CFG_FOURGB		0x2000	/* force 4GB connection (24XX only) */
 #define	ISP_CFG_EIGHTGB		0x4000	/* force 8GB connection (25XX only) */
+#define	ISP_CFG_SIXTEENGB	0x8000	/* force 16GB connection (82XX only) */
=20
 /*
  * For each channel, the outer layers should know what role that channel
@@ -951,6 +956,7 @@
 	ISPASYNC_DEV_STAYED,		/* FC Device Stayed */
 	ISPASYNC_DEV_GONE,		/* FC Device Departure */
 	ISPASYNC_TARGET_NOTIFY,		/* All target async notification */
+	ISPASYNC_TARGET_NOTIFY_ACK,	/* All target notify ack required */
 	ISPASYNC_TARGET_ACTION,		/* All target action requested */
 	ISPASYNC_FW_CRASH,		/* All Firmware has crashed */
 	ISPASYNC_FW_RESTARTED		/* All Firmware has been restarted */
@@ -987,8 +993,9 @@
 #define	ISP_LOGDEBUG1	0x20	/* log intermediate debug messages */
 #define	ISP_LOGDEBUG2	0x40	/* log most debug messages */
 #define	ISP_LOGDEBUG3	0x80	/* log high frequency debug messages */
-#define	ISP_LOGSANCFG	0x100	/* log SAN configuration */
+#define	ISP_LOG_SANCFG	0x100	/* log SAN configuration */
 #define	ISP_LOG_CWARN	0x200	/* log SCSI command "warnings" (e.g., check co=
nditions) */
+#define	ISP_LOG_WARN1	0x400	/* log WARNS we might be interested at some ti=
me */
 #define	ISP_LOGTINFO	0x1000	/* log informational messages (target mode) */
 #define	ISP_LOGTDEBUG0	0x2000	/* log simple debug messages (target mode) */
 #define	ISP_LOGTDEBUG1	0x4000	/* log intermediate debug messages (target) =
*/
@@ -1063,7 +1070,8 @@
  *	XS_GET_RESID(xs, resid)	sets the current residual count
  *	XS_STSP(xs)		gets a pointer to the SCSI status byte ""
  *	XS_SNSP(xs)		gets a pointer to the associate sense data
- *	XS_SNSLEN(xs)		gets the length of sense data storage
+ *	XS_TOT_SNSLEN(xs)	gets the total length of sense data storage
+ *	XS_CUR_SNSLEN(xs)	gets the currently used lenght of sense data storage
  *	XS_SNSKEY(xs)		dereferences XS_SNSP to get the current stored Sense Key
  *	XS_SNSASC(xs)		dereferences XS_SNSP to get the current stored Additiona=
l Sense Code
  *	XS_SNSASCQ(xs)		dereferences XS_SNSP to get the current stored Addition=
al Sense Code Qualifier
@@ -1085,7 +1093,9 @@
  *	XS_NOERR(xs)	there is no error currently set
  *	XS_INITERR(xs)	initialize error state
  *
- *	XS_SAVE_SENSE(xs, sp, len)	save sense data
+ *	XS_SAVE_SENSE(xs, sp, total_len, this_len)	save sense data (total and c=
urrent amount)
+ *
+ *	XS_APPEND_SENSE(xs, sp, len)	append more sense data
  *
  *	XS_SENSE_VALID(xs)		indicates whether sense is valid
  *
@@ -1154,8 +1164,8 @@
  * Enable/Disable/Modify a logical unit.
  * (softc, cmd, bus, tgt, lun, cmd_cnt, inotify_cnt)
  */
-#define	DFLT_CMND_CNT	0xfe	/* unmonitored */
-#define	DFLT_INOT_CNT	0xfe	/* unmonitored */
+#define	DFLT_CMND_CNT	0xff	/* unmonitored */
+#define	DFLT_INOT_CNT	0xff	/* unmonitored */
 int isp_lun_cmd(ispsoftc_t *, int, int, int, int, int);
=20
 /*
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/ispfw/asm_2300.h
--- a/head/sys/dev/ispfw/asm_2300.h	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/ispfw/asm_2300.h	Fri Aug 10 14:19:25 2012 +0300
@@ -1,4 +1,4 @@
-/* $FreeBSD$ */
+/* $FreeBSD: head/sys/dev/ispfw/asm_2300.h 238806 2012-07-26 13:58:43Z mja=
cob $ */
 /*-
  * Copyright (C) 2001, 2002, 2003, 2004, 2005 by Qlogic, Inc.
  * All rights reserved.
@@ -27,17 +27,17 @@
=20
 /************************************************************************
  *									*
- * 	       --- ISP2300 Initiator/Target Firmware ---		*
- *		with Fabric support (Public Loop), with expanded LUN 	*
- *			addressing and 2K port logins.			*
+ *               --- ISP2300 Initiator/Target Firmware ---              *
+ *             with Fabric (Public Loop), Point-point,               	*
+ *             expanded LUN addressing for FCTAPE, and 2K port logins	*
  *									*
  ************************************************************************/
 /*
- *	Firmware Version 3.03.26 (16:54 Aug 14, 2007)
+ *	Firmware Version 3.03.26 (16:58 Aug 14, 2007)
  */
 static const uint16_t isp_2300_risc_code[] =3D {
-	0x0470, 0x0000, 0x0000, 0xd048, 0x0000, 0x0003, 0x0003, 0x001a,
-	0x0107, 0x2043, 0x4f50, 0x5952, 0x4947, 0x4854, 0x2032, 0x3030,
+	0x0470, 0x0000, 0x0000, 0xddef, 0x0000, 0x0003, 0x0003, 0x001a,
+	0x0117, 0x2043, 0x4f50, 0x5952, 0x4947, 0x4854, 0x2032, 0x3030,
 	0x3120, 0x514c, 0x4f47, 0x4943, 0x2043, 0x4f52, 0x504f, 0x5241,
 	0x5449, 0x4f4e, 0x2049, 0x5350, 0x3233, 0x3030, 0x2046, 0x6972,
 	0x6d77, 0x6172, 0x6520, 0x2056, 0x6572, 0x7369, 0x6f6e, 0x2030,
@@ -50,487 +50,496 @@
 	0x2c00, 0x20a9, 0x000f, 0x2001, 0x0000, 0x400f, 0x2091, 0x2e00,
 	0x20a9, 0x000f, 0x2001, 0x0000, 0x400f, 0x2091, 0x2000, 0x2001,
 	0x0000, 0x20c1, 0x0004, 0x20c9, 0x1bff, 0x2059, 0x0000, 0x2b78,
-	0x7883, 0x0004, 0x2089, 0x2bf2, 0x2051, 0x1800, 0x2a70, 0x20e1,
-	0x0001, 0x20e9, 0x0001, 0x2009, 0x0000, 0x080c, 0x0e53, 0x2029,
-	0x3500, 0x2031, 0xffff, 0x2039, 0x34c8, 0x2021, 0x0200, 0x20e9,
+	0x7883, 0x0004, 0x2089, 0x2c69, 0x2051, 0x1800, 0x2a70, 0x20e1,
+	0x0001, 0x20e9, 0x0001, 0x2009, 0x0000, 0x080c, 0x0e51, 0x2029,
+	0x4d00, 0x2031, 0xffff, 0x2039, 0x4cd0, 0x2021, 0x0200, 0x20e9,
 	0x0001, 0x20a1, 0x0000, 0x20a9, 0x0800, 0x900e, 0x4104, 0x20e9,
 	0x0001, 0x20a1, 0x1000, 0x900e, 0x2001, 0x0cc0, 0x9084, 0x0fff,
 	0x20a8, 0x4104, 0x2001, 0x0000, 0x9086, 0x0000, 0x0120, 0x21a8,
 	0x4104, 0x8001, 0x1de0, 0x756a, 0x766e, 0x7766, 0x7472, 0x7476,
-	0x00e6, 0x2071, 0x1aa0, 0x2472, 0x00ee, 0x20a1, 0x1cc8, 0x716c,
+	0x00e6, 0x2071, 0x1aac, 0x2472, 0x00ee, 0x20a1, 0x1cd0, 0x716c,
 	0x810d, 0x810d, 0x810d, 0x810d, 0x918c, 0x000f, 0x2001, 0x0001,
 	0x9112, 0x900e, 0x21a8, 0x4104, 0x8211, 0x1de0, 0x716c, 0x3400,
 	0x8001, 0x9102, 0x0120, 0x0218, 0x20a8, 0x900e, 0x4104, 0x2009,
 	0x1800, 0x810d, 0x810d, 0x810d, 0x810d, 0x810d, 0x918c, 0x001f,
 	0x2001, 0x0001, 0x9112, 0x20e9, 0x0001, 0x20a1, 0x0800, 0x900e,
-	0x20a9, 0x0800, 0x4104, 0x8211, 0x1dd8, 0x080c, 0x0f19, 0x080c,
-	0x5f04, 0x080c, 0x9eae, 0x080c, 0x10d0, 0x080c, 0x12b8, 0x080c,
-	0x1a99, 0x080c, 0x0d58, 0x080c, 0x1055, 0x080c, 0x32cc, 0x080c,
-	0x75f0, 0x080c, 0x6836, 0x080c, 0x8273, 0x080c, 0x235c, 0x080c,
-	0x857b, 0x080c, 0x7c59, 0x080c, 0x2191, 0x080c, 0x22c5, 0x080c,
-	0x2351, 0x2091, 0x3009, 0x7883, 0x0000, 0x1004, 0x091d, 0x7880,
+	0x20a9, 0x0800, 0x4104, 0x8211, 0x1dd8, 0x080c, 0x0f25, 0x080c,
+	0x5fc1, 0x080c, 0xa333, 0x080c, 0x10dc, 0x080c, 0x12c4, 0x080c,
+	0x1ae1, 0x080c, 0x0d55, 0x080c, 0x1061, 0x080c, 0x3368, 0x080c,
+	0x7660, 0x080c, 0x695d, 0x080c, 0x83d5, 0x080c, 0x23a4, 0x080c,
+	0x874c, 0x080c, 0x7cf9, 0x080c, 0x21d9, 0x080c, 0x230d, 0x080c,
+	0x2399, 0x2091, 0x3009, 0x7883, 0x0000, 0x1004, 0x091d, 0x7880,
 	0x9086, 0x0002, 0x1190, 0x7883, 0x4000, 0x7837, 0x4000, 0x7833,
 	0x0010, 0x0e04, 0x0911, 0x2091, 0x5000, 0x2091, 0x4080, 0x2001,
-	0x0089, 0x2004, 0xd084, 0x190c, 0x119d, 0x2071, 0x1800, 0x7003,
+	0x0089, 0x2004, 0xd084, 0x190c, 0x11a9, 0x2071, 0x1800, 0x7003,
 	0x0000, 0x2071, 0x1800, 0x7000, 0x908e, 0x0003, 0x1168, 0x080c,
-	0x4b82, 0x080c, 0x32f3, 0x080c, 0x7661, 0x080c, 0x6d5c, 0x080c,
-	0x829f, 0x080c, 0x2b09, 0x0c68, 0x000b, 0x0c88, 0x0940, 0x0941,
-	0x0ade, 0x093e, 0x0b9e, 0x0d57, 0x0d57, 0x0d57, 0x080c, 0x0dc4,
+	0x4c32, 0x080c, 0x338f, 0x080c, 0x76d1, 0x080c, 0x6e62, 0x080c,
+	0x8401, 0x080c, 0x2b72, 0x0c68, 0x000b, 0x0c88, 0x0940, 0x0941,
+	0x0ade, 0x093e, 0x0b9e, 0x0d54, 0x0d54, 0x0d54, 0x080c, 0x0dc3,
 	0x0005, 0x0126, 0x00f6, 0x2091, 0x8000, 0x7000, 0x9086, 0x0001,
-	0x1904, 0x0ab1, 0x080c, 0x0ecd, 0x080c, 0x72e5, 0x0150, 0x080c,
-	0x7308, 0x15b0, 0x2079, 0x0100, 0x7828, 0x9085, 0x1800, 0x782a,
-	0x0478, 0x080c, 0x7212, 0x7000, 0x9086, 0x0001, 0x1904, 0x0ab1,
-	0x7094, 0x9086, 0x0029, 0x1904, 0x0ab1, 0x080c, 0x8253, 0x080c,
-	0x8245, 0x2079, 0x0100, 0x782f, 0x0008, 0x2001, 0x0161, 0x2003,
+	0x1904, 0x0ab1, 0x080c, 0x0e93, 0x080c, 0x7351, 0x0150, 0x080c,
+	0x7374, 0x15b0, 0x2079, 0x0100, 0x7828, 0x9085, 0x1800, 0x782a,
+	0x0478, 0x080c, 0x727e, 0x7000, 0x9086, 0x0001, 0x1904, 0x0ab1,
+	0x7094, 0x9086, 0x0029, 0x1904, 0x0ab1, 0x080c, 0x83b5, 0x080c,
+	0x83a7, 0x2079, 0x0100, 0x782f, 0x0008, 0x2001, 0x0161, 0x2003,
 	0x0001, 0x7827, 0xffff, 0x7a28, 0x9295, 0x5e2f, 0x7a2a, 0x2011,
-	0x7176, 0x080c, 0x835e, 0x2011, 0x7169, 0x080c, 0x8474, 0x2011,
-	0x5d5f, 0x080c, 0x835e, 0x2011, 0x8030, 0x901e, 0x7392, 0x04d0,
-	0x080c, 0x5607, 0x2079, 0x0100, 0x7844, 0x9005, 0x1904, 0x0ab1,
-	0x2011, 0x5d5f, 0x080c, 0x835e, 0x2011, 0x7176, 0x080c, 0x835e,
-	0x2011, 0x7169, 0x080c, 0x8474, 0x2001, 0x0265, 0x2001, 0x0205,
+	0x71cd, 0x080c, 0x84c2, 0x2011, 0x71c0, 0x080c, 0x85e0, 0x2011,
+	0x5e1c, 0x080c, 0x84c2, 0x2011, 0x8030, 0x901e, 0x7392, 0x04d0,
+	0x080c, 0x56c4, 0x2079, 0x0100, 0x7844, 0x9005, 0x1904, 0x0ab1,
+	0x2011, 0x5e1c, 0x080c, 0x84c2, 0x2011, 0x71cd, 0x080c, 0x84c2,
+	0x2011, 0x71c0, 0x080c, 0x85e0, 0x2001, 0x0265, 0x2001, 0x0205,
 	0x2003, 0x0000, 0x7840, 0x9084, 0xfffb, 0x7842, 0x2001, 0x1983,
-	0x2004, 0x9005, 0x1140, 0x00c6, 0x2061, 0x0100, 0x080c, 0x5eac,
-	0x00ce, 0x0804, 0x0ab1, 0x780f, 0x006b, 0x7a28, 0x080c, 0x72ed,
+	0x2004, 0x9005, 0x1140, 0x00c6, 0x2061, 0x0100, 0x080c, 0x5f69,
+	0x00ce, 0x0804, 0x0ab1, 0x780f, 0x006b, 0x7a28, 0x080c, 0x7359,
 	0x0118, 0x9295, 0x5e2f, 0x0010, 0x9295, 0x402f, 0x7a2a, 0x2011,
-	0x8010, 0x73d4, 0x2001, 0x1984, 0x2003, 0x0001, 0x080c, 0x29ae,
-	0x080c, 0x4abd, 0x7244, 0xc284, 0x7246, 0x2001, 0x180c, 0x200c,
-	0xc1ac, 0xc1cc, 0x2102, 0x080c, 0x98cb, 0x2011, 0x0004, 0x080c,
-	0xb965, 0x080c, 0x664c, 0x080c, 0x72e5, 0x1120, 0x080c, 0x29f2,
-	0x02e0, 0x0400, 0x080c, 0x5eb3, 0x0140, 0x7093, 0x0001, 0x70cf,
-	0x0000, 0x080c, 0x57d9, 0x0804, 0x0ab1, 0x080c, 0x55a7, 0xd094,
-	0x0188, 0x2011, 0x180c, 0x2204, 0xc0cd, 0x2012, 0x080c, 0x55ab,
-	0xd0d4, 0x1118, 0x080c, 0x29f2, 0x1270, 0x2011, 0x180c, 0x2204,
-	0xc0bc, 0x00a8, 0x080c, 0x55ab, 0xd0d4, 0x1db8, 0x2011, 0x180c,
+	0x8010, 0x73d4, 0x2001, 0x1984, 0x2003, 0x0001, 0x080c, 0x2a17,
+	0x080c, 0x4b6d, 0x7244, 0xc284, 0x7246, 0x2001, 0x180c, 0x200c,
+	0xc1ac, 0xc1cc, 0x2102, 0x080c, 0x9b9c, 0x2011, 0x0004, 0x080c,
+	0xc1dd, 0x080c, 0x6758, 0x080c, 0x7351, 0x1120, 0x080c, 0x2a5b,
+	0x02e0, 0x0400, 0x080c, 0x5f70, 0x0140, 0x7093, 0x0001, 0x70cf,
+	0x0000, 0x080c, 0x5896, 0x0804, 0x0ab1, 0x080c, 0x5664, 0xd094,
+	0x0188, 0x2011, 0x180c, 0x2204, 0xc0cd, 0x2012, 0x080c, 0x5668,
+	0xd0d4, 0x1118, 0x080c, 0x2a5b, 0x1270, 0x2011, 0x180c, 0x2204,
+	0xc0bc, 0x00a8, 0x080c, 0x5668, 0xd0d4, 0x1db8, 0x2011, 0x180c,
 	0x2204, 0xc0bd, 0x0060, 0x2011, 0x180c, 0x2204, 0xc0bd, 0x2012,
-	0x080c, 0x673e, 0x1128, 0xd0a4, 0x0118, 0x2204, 0xc0fd, 0x2012,
-	0x080c, 0x6704, 0x0120, 0x7a0c, 0xc2b4, 0x7a0e, 0x00a8, 0x707b,
-	0x0000, 0x080c, 0x72e5, 0x1130, 0x70ac, 0x9005, 0x1168, 0x080c,
-	0xbc7a, 0x0050, 0x080c, 0xbc7a, 0x70d8, 0xd09c, 0x1128, 0x70ac,
-	0x9005, 0x0110, 0x080c, 0x5e89, 0x70e3, 0x0000, 0x70df, 0x0000,
-	0x70a3, 0x0000, 0x080c, 0x29fa, 0x0228, 0x2011, 0x0101, 0x2204,
-	0xc0c4, 0x2012, 0x72d8, 0x080c, 0x72e5, 0x1178, 0x9016, 0x0016,
-	0x080c, 0x27b7, 0x2019, 0x194a, 0x211a, 0x001e, 0x705b, 0xffff,
-	0x705f, 0x00ef, 0x707f, 0x0000, 0x0020, 0x2019, 0x194a, 0x201b,
+	0x080c, 0x6865, 0x1128, 0xd0a4, 0x0118, 0x2204, 0xc0fd, 0x2012,
+	0x080c, 0x682b, 0x0120, 0x7a0c, 0xc2b4, 0x7a0e, 0x00a8, 0x707b,
+	0x0000, 0x080c, 0x7351, 0x1130, 0x70ac, 0x9005, 0x1168, 0x080c,
+	0xc617, 0x0050, 0x080c, 0xc617, 0x70d8, 0xd09c, 0x1128, 0x70ac,
+	0x9005, 0x0110, 0x080c, 0x5f46, 0x70e3, 0x0000, 0x70df, 0x0000,
+	0x70a3, 0x0000, 0x080c, 0x2a63, 0x0228, 0x2011, 0x0101, 0x2204,
+	0xc0c4, 0x2012, 0x72d8, 0x080c, 0x7351, 0x1178, 0x9016, 0x0016,
+	0x080c, 0x2820, 0x2019, 0x1949, 0x211a, 0x001e, 0x705b, 0xffff,
+	0x705f, 0x00ef, 0x707f, 0x0000, 0x0020, 0x2019, 0x1949, 0x201b,
 	0x0000, 0x2079, 0x185e, 0x7804, 0xd0ac, 0x0108, 0xc295, 0x72da,
-	0x080c, 0x72e5, 0x0118, 0x9296, 0x0004, 0x0548, 0x2011, 0x0001,
-	0x080c, 0xb965, 0x70a7, 0x0000, 0x70ab, 0xffff, 0x7003, 0x0002,
+	0x080c, 0x7351, 0x0118, 0x9296, 0x0004, 0x0548, 0x2011, 0x0001,
+	0x080c, 0xc1dd, 0x70a7, 0x0000, 0x70ab, 0xffff, 0x7003, 0x0002,
 	0x2079, 0x0100, 0x7827, 0x0003, 0x7828, 0x9085, 0x0003, 0x782a,
-	0x00fe, 0x080c, 0x2e5f, 0x2011, 0x0005, 0x080c, 0x99d6, 0x080c,
-	0x8c37, 0x080c, 0x72e5, 0x0148, 0x00c6, 0x2061, 0x0100, 0x0016,
-	0x080c, 0x27b7, 0x61e2, 0x001e, 0x00ce, 0x012e, 0x0420, 0x70a7,
+	0x00fe, 0x080c, 0x2ed6, 0x2011, 0x0005, 0x080c, 0x9ca7, 0x080c,
+	0x8e38, 0x080c, 0x7351, 0x0148, 0x00c6, 0x2061, 0x0100, 0x0016,
+	0x080c, 0x2820, 0x61e2, 0x001e, 0x00ce, 0x012e, 0x0420, 0x70a7,
 	0x0000, 0x70ab, 0xffff, 0x7003, 0x0002, 0x00f6, 0x2079, 0x0100,
 	0x7827, 0x0003, 0x7828, 0x9085, 0x0003, 0x782a, 0x00fe, 0x2011,
-	0x0005, 0x080c, 0x99d6, 0x080c, 0x8c37, 0x080c, 0x72e5, 0x0148,
-	0x00c6, 0x2061, 0x0100, 0x0016, 0x080c, 0x27b7, 0x61e2, 0x001e,
-	0x00ce, 0x00fe, 0x012e, 0x0005, 0x00c6, 0x00b6, 0x080c, 0x72e5,
-	0x1118, 0x20a9, 0x0800, 0x0010, 0x20a9, 0x0782, 0x080c, 0x72e5,
+	0x0005, 0x080c, 0x9ca7, 0x080c, 0x8e38, 0x080c, 0x7351, 0x0148,
+	0x00c6, 0x2061, 0x0100, 0x0016, 0x080c, 0x2820, 0x61e2, 0x001e,
+	0x00ce, 0x00fe, 0x012e, 0x0005, 0x00c6, 0x00b6, 0x080c, 0x7351,
+	0x1118, 0x20a9, 0x0800, 0x0010, 0x20a9, 0x0782, 0x080c, 0x7351,
 	0x1110, 0x900e, 0x0010, 0x2009, 0x007e, 0x86ff, 0x0138, 0x9180,
-	0x1000, 0x2004, 0x905d, 0x0110, 0xb800, 0xd0bc, 0x090c, 0x3162,
+	0x1000, 0x2004, 0x905d, 0x0110, 0xb800, 0xd0bc, 0x090c, 0x31fe,
 	0x8108, 0x1f04, 0x0ac5, 0x707b, 0x0000, 0x707c, 0x9084, 0x00ff,
 	0x707e, 0x70af, 0x0000, 0x00be, 0x00ce, 0x0005, 0x00b6, 0x0126,
 	0x2091, 0x8000, 0x7000, 0x9086, 0x0002, 0x1904, 0x0b9b, 0x70a8,
-	0x9086, 0xffff, 0x0130, 0x080c, 0x2e5f, 0x080c, 0x8c37, 0x0804,
+	0x9086, 0xffff, 0x0130, 0x080c, 0x2ed6, 0x080c, 0x8e38, 0x0804,
 	0x0b9b, 0x70d8, 0xd0ac, 0x1110, 0xd09c, 0x0558, 0xd084, 0x0548,
 	0x0006, 0x2001, 0x0103, 0x2003, 0x002b, 0x000e, 0xd08c, 0x0508,
-	0x080c, 0x31c5, 0x11d0, 0x70dc, 0x9086, 0xffff, 0x01b0, 0x080c,
-	0x2fd8, 0x080c, 0x8c37, 0x70d8, 0xd094, 0x1904, 0x0b9b, 0x2011,
-	0x0001, 0x080c, 0xbef8, 0x0110, 0x2011, 0x0003, 0x901e, 0x080c,
-	0x3012, 0x080c, 0x8c37, 0x0804, 0x0b9b, 0x70e0, 0x9005, 0x1904,
+	0x080c, 0x3261, 0x11d0, 0x70dc, 0x9086, 0xffff, 0x01b0, 0x080c,
+	0x306e, 0x080c, 0x8e38, 0x70d8, 0xd094, 0x1904, 0x0b9b, 0x2011,
+	0x0001, 0x080c, 0xc8ce, 0x0110, 0x2011, 0x0003, 0x901e, 0x080c,
+	0x30a8, 0x080c, 0x8e38, 0x0804, 0x0b9b, 0x70e0, 0x9005, 0x1904,
 	0x0b9b, 0x70a4, 0x9005, 0x1904, 0x0b9b, 0x70d8, 0xd0a4, 0x0118,
-	0xd0b4, 0x0904, 0x0b9b, 0x080c, 0x6704, 0x1904, 0x0b9b, 0x080c,
-	0x6757, 0x1904, 0x0b9b, 0x080c, 0x673e, 0x01c0, 0x0156, 0x00c6,
-	0x20a9, 0x007f, 0x900e, 0x0016, 0x080c, 0x6411, 0x1118, 0xb800,
+	0xd0b4, 0x0904, 0x0b9b, 0x080c, 0x682b, 0x1904, 0x0b9b, 0x080c,
+	0x687e, 0x1904, 0x0b9b, 0x080c, 0x6865, 0x01c0, 0x0156, 0x00c6,
+	0x20a9, 0x007f, 0x900e, 0x0016, 0x080c, 0x64fc, 0x1118, 0xb800,
 	0xd0ec, 0x1138, 0x001e, 0x8108, 0x1f04, 0x0b3b, 0x00ce, 0x015e,
 	0x0028, 0x001e, 0x00ce, 0x015e, 0x0804, 0x0b9b, 0x0006, 0x2001,
-	0x0103, 0x2003, 0x006b, 0x000e, 0x2011, 0x1990, 0x080c, 0x0f89,
-	0x2011, 0x19aa, 0x080c, 0x0f89, 0x7030, 0xc08c, 0x7032, 0x7003,
-	0x0003, 0x70ab, 0xffff, 0x080c, 0x0ecd, 0x9006, 0x080c, 0x264c,
-	0x080c, 0x31c5, 0x0118, 0x080c, 0x4c5a, 0x0050, 0x0036, 0x0046,
-	0x2019, 0xffff, 0x2021, 0x0006, 0x080c, 0x4c74, 0x004e, 0x003e,
-	0x00f6, 0x2079, 0x0100, 0x080c, 0x7308, 0x0150, 0x080c, 0x72e5,
+	0x0103, 0x2003, 0x006b, 0x000e, 0x2011, 0x1990, 0x080c, 0x0f95,
+	0x2011, 0x19aa, 0x080c, 0x0f95, 0x7030, 0xc08c, 0x7032, 0x7003,
+	0x0003, 0x70ab, 0xffff, 0x080c, 0x0e75, 0x9006, 0x080c, 0x26b1,
+	0x080c, 0x3261, 0x0118, 0x080c, 0x4d0a, 0x0050, 0x0036, 0x0046,
+	0x2019, 0xffff, 0x2021, 0x0006, 0x080c, 0x4d24, 0x004e, 0x003e,
+	0x00f6, 0x2079, 0x0100, 0x080c, 0x7374, 0x0150, 0x080c, 0x7351,
 	0x7828, 0x0118, 0x9084, 0xe1ff, 0x0010, 0x9084, 0xffdf, 0x782a,
 	0x00fe, 0x2001, 0x19c5, 0x2004, 0x9086, 0x0005, 0x1120, 0x2011,
-	0x0000, 0x080c, 0x99d6, 0x2011, 0x0000, 0x080c, 0x99e0, 0x080c,
-	0x8c37, 0x080c, 0x8d06, 0x012e, 0x00be, 0x0005, 0x0016, 0x0046,
+	0x0000, 0x080c, 0x9ca7, 0x2011, 0x0000, 0x080c, 0x9cb1, 0x080c,
+	0x8e38, 0x080c, 0x8f0e, 0x012e, 0x00be, 0x0005, 0x0016, 0x0046,
 	0x00f6, 0x0126, 0x2091, 0x8000, 0x2079, 0x0100, 0x7904, 0x918c,
-	0xfffd, 0x7906, 0x2009, 0x00f7, 0x080c, 0x5e72, 0x7940, 0x918c,
+	0xfffd, 0x7906, 0x2009, 0x00f7, 0x080c, 0x5f2f, 0x7940, 0x918c,
 	0x0010, 0x7942, 0x7924, 0xd1b4, 0x0110, 0x7827, 0x0040, 0xd19c,
 	0x0110, 0x7827, 0x0008, 0x0006, 0x0036, 0x0156, 0x7954, 0xd1ac,
 	0x1904, 0x0c2b, 0x2001, 0x1984, 0x2004, 0x9005, 0x1518, 0x080c,
-	0x2a75, 0x1148, 0x2001, 0x0001, 0x080c, 0x29dd, 0x2001, 0x0001,
-	0x080c, 0x29c0, 0x00b8, 0x080c, 0x2a7d, 0x1138, 0x9006, 0x080c,
-	0x29dd, 0x9006, 0x080c, 0x29c0, 0x0068, 0x080c, 0x2a85, 0x1d50,
-	0x2001, 0x1974, 0x2004, 0xd0fc, 0x0108, 0x0020, 0x080c, 0x27eb,
-	0x0804, 0x0d0a, 0x080c, 0x72f6, 0x0148, 0x080c, 0x7308, 0x1118,
-	0x080c, 0x75eb, 0x0050, 0x080c, 0x72ed, 0x0dd0, 0x080c, 0x75e6,
-	0x080c, 0x75dc, 0x080c, 0x7212, 0x0058, 0x080c, 0x72e5, 0x0140,
-	0x2009, 0x00f8, 0x080c, 0x5e72, 0x7843, 0x0090, 0x7843, 0x0010,
-	0x20a9, 0x09c4, 0x7820, 0xd09c, 0x1138, 0x080c, 0x72e5, 0x0138,
-	0x7824, 0xd0ac, 0x1904, 0x0d0f, 0x1f04, 0x0c0a, 0x0070, 0x7824,
-	0x080c, 0x72ff, 0x0118, 0xd0ac, 0x1904, 0x0d0f, 0x9084, 0x1800,
-	0x0d98, 0x7003, 0x0001, 0x0804, 0x0d0f, 0x2001, 0x0001, 0x080c,
-	0x264c, 0x0804, 0x0d22, 0x2001, 0x1984, 0x2004, 0x9005, 0x1518,
-	0x080c, 0x2a75, 0x1148, 0x2001, 0x0001, 0x080c, 0x29dd, 0x2001,
-	0x0001, 0x080c, 0x29c0, 0x00b8, 0x080c, 0x2a7d, 0x1138, 0x9006,
-	0x080c, 0x29dd, 0x9006, 0x080c, 0x29c0, 0x0068, 0x080c, 0x2a85,
+	0x2ade, 0x1148, 0x2001, 0x0001, 0x080c, 0x2a46, 0x2001, 0x0001,
+	0x080c, 0x2a29, 0x00b8, 0x080c, 0x2ae6, 0x1138, 0x9006, 0x080c,
+	0x2a46, 0x9006, 0x080c, 0x2a29, 0x0068, 0x080c, 0x2aee, 0x1d50,
+	0x2001, 0x1974, 0x2004, 0xd0fc, 0x0108, 0x0020, 0x080c, 0x2854,
+	0x0804, 0x0d0b, 0x080c, 0x7362, 0x0148, 0x080c, 0x7374, 0x1118,
+	0x080c, 0x765b, 0x0050, 0x080c, 0x7359, 0x0dd0, 0x080c, 0x7656,
+	0x080c, 0x764c, 0x080c, 0x727e, 0x0058, 0x080c, 0x7351, 0x0140,
+	0x2009, 0x00f8, 0x080c, 0x5f2f, 0x7843, 0x0090, 0x7843, 0x0010,
+	0x20a9, 0x09c4, 0x7820, 0xd09c, 0x1138, 0x080c, 0x7351, 0x0138,
+	0x7824, 0xd0ac, 0x1904, 0x0d10, 0x1f04, 0x0c0a, 0x0070, 0x7824,
+	0x080c, 0x736b, 0x0118, 0xd0ac, 0x1904, 0x0d10, 0x9084, 0x1800,
+	0x0d98, 0x7003, 0x0001, 0x0804, 0x0d10, 0x2001, 0x0001, 0x080c,
+	0x26b1, 0x0804, 0x0d23, 0x2001, 0x1984, 0x2004, 0x9005, 0x1518,
+	0x080c, 0x2ade, 0x1148, 0x2001, 0x0001, 0x080c, 0x2a46, 0x2001,
+	0x0001, 0x080c, 0x2a29, 0x00b8, 0x080c, 0x2ae6, 0x1138, 0x9006,
+	0x080c, 0x2a46, 0x9006, 0x080c, 0x2a29, 0x0068, 0x080c, 0x2aee,
 	0x1d50, 0x2001, 0x1974, 0x2004, 0xd0fc, 0x0108, 0x0020, 0x080c,
-	0x27eb, 0x0804, 0x0d0a, 0x7850, 0x9085, 0x0040, 0x7852, 0x7938,
-	0x7850, 0x9084, 0xfbcf, 0x7852, 0x080c, 0x2a8d, 0x9085, 0x2000,
-	0x7852, 0x793a, 0x20a9, 0x0046, 0x1d04, 0x0c64, 0x080c, 0x8454,
+	0x2854, 0x0804, 0x0d0b, 0x7850, 0x9085, 0x0040, 0x7852, 0x7938,
+	0x7850, 0x9084, 0xfbcf, 0x7852, 0x080c, 0x2af6, 0x9085, 0x2000,
+	0x7852, 0x793a, 0x20a9, 0x0046, 0x1d04, 0x0c64, 0x080c, 0x85c0,
 	0x1f04, 0x0c64, 0x7850, 0x9085, 0x0400, 0x9084, 0xdfbf, 0x7852,
-	0x793a, 0x080c, 0x72f6, 0x0148, 0x080c, 0x7308, 0x1118, 0x080c,
-	0x75eb, 0x0050, 0x080c, 0x72ed, 0x0dd0, 0x080c, 0x75e6, 0x080c,
-	0x75dc, 0x080c, 0x7212, 0x0020, 0x2009, 0x00f8, 0x080c, 0x5e72,
+	0x793a, 0x080c, 0x7362, 0x0148, 0x080c, 0x7374, 0x1118, 0x080c,
+	0x765b, 0x0050, 0x080c, 0x7359, 0x0dd0, 0x080c, 0x7656, 0x080c,
+	0x764c, 0x080c, 0x727e, 0x0020, 0x2009, 0x00f8, 0x080c, 0x5f2f,
 	0x20a9, 0x0028, 0xa001, 0x1f04, 0x0c8a, 0x7850, 0x9085, 0x1400,
-	0x7852, 0x080c, 0x72e5, 0x0120, 0x7843, 0x0090, 0x7843, 0x0010,
-	0x2021, 0xe678, 0x2019, 0xea60, 0x0d0c, 0x8454, 0x7820, 0xd09c,
-	0x1580, 0x080c, 0x72e5, 0x0904, 0x0cef, 0x7824, 0xd0ac, 0x1904,
-	0x0d0f, 0x080c, 0x7308, 0x1528, 0x0046, 0x2021, 0x0320, 0x8421,
-	0x1df0, 0x004e, 0x7827, 0x1800, 0x080c, 0x2a8d, 0x7824, 0x9084,
-	0x1800, 0x1160, 0x9484, 0x0fff, 0x1138, 0x2001, 0x1810, 0x2004,
-	0xd0fc, 0x0110, 0x080c, 0x0d34, 0x8421, 0x1158, 0x1d04, 0x0cca,
-	0x080c, 0x8454, 0x080c, 0x75e6, 0x080c, 0x75dc, 0x7003, 0x0001,
-	0x04f0, 0x8319, 0x1948, 0x1d04, 0x0cd7, 0x080c, 0x8454, 0x2009,
-	0x1977, 0x2104, 0x9005, 0x0118, 0x8001, 0x200a, 0x1178, 0x200b,
-	0x000a, 0x7827, 0x0048, 0x20a9, 0x0002, 0x080c, 0x2a6e, 0x7924,
-	0x080c, 0x2a8d, 0xd19c, 0x0110, 0x080c, 0x29ae, 0x00d8, 0x080c,
-	0x72f6, 0x1140, 0x94a2, 0x03e8, 0x1128, 0x080c, 0x72bd, 0x7003,
-	0x0001, 0x00a8, 0x7827, 0x1800, 0x080c, 0x2a8d, 0x7824, 0x080c,
-	0x72ff, 0x0110, 0xd0ac, 0x1158, 0x9084, 0x1800, 0x0950, 0x7003,
-	0x0001, 0x0028, 0x2001, 0x0001, 0x080c, 0x264c, 0x0078, 0x2009,
-	0x180c, 0x210c, 0xd19c, 0x1120, 0x7904, 0x918d, 0x0002, 0x7906,
-	0x7827, 0x0048, 0x7828, 0x9085, 0x0028, 0x782a, 0x7850, 0x9085,
-	0x0400, 0x7852, 0x2001, 0x1984, 0x2003, 0x0000, 0x9006, 0x78f2,
-	0x015e, 0x003e, 0x000e, 0x080c, 0x55b6, 0x090c, 0x0e64, 0x012e,
-	0x00fe, 0x004e, 0x001e, 0x0005, 0x0006, 0x0016, 0x0036, 0x0046,
-	0x00b6, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x0156, 0x0069, 0x0d0c,
-	0x8454, 0x015e, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, 0x004e,
-	0x003e, 0x001e, 0x000e, 0x0005, 0x00e6, 0x2071, 0x189f, 0x7004,
-	0x9086, 0x0001, 0x1110, 0x080c, 0x32f3, 0x00ee, 0x0005, 0x0005,
-	0x2a70, 0x2061, 0x1988, 0x2063, 0x0003, 0x6007, 0x0003, 0x600b,
-	0x001a, 0x600f, 0x0107, 0x2001, 0x1959, 0x900e, 0x2102, 0x7192,
-	0x2001, 0x0100, 0x2004, 0x9082, 0x0002, 0x0218, 0x705b, 0xffff,
-	0x0008, 0x715a, 0x7063, 0xffff, 0x717a, 0x717e, 0x080c, 0xbc7a,
-	0x2061, 0x1949, 0x6003, 0x0909, 0x6106, 0x600b, 0x8800, 0x600f,
-	0x0200, 0x6013, 0x00ff, 0x6017, 0x000f, 0x611a, 0x601f, 0x07d0,
-	0x2061, 0x1951, 0x6003, 0x8000, 0x6106, 0x610a, 0x600f, 0x0200,
-	0x6013, 0x00ff, 0x6116, 0x601b, 0x0001, 0x611e, 0x2061, 0x1965,
-	0x6003, 0x514c, 0x6007, 0x4f47, 0x600b, 0x4943, 0x600f, 0x2020,
-	0x2001, 0x182b, 0x2102, 0x0005, 0x9016, 0x080c, 0x6411, 0x1178,
-	0xb804, 0x90c4, 0x00ff, 0x98c6, 0x0006, 0x0128, 0x90c4, 0xff00,
-	0x98c6, 0x0600, 0x1120, 0x9186, 0x0080, 0x0108, 0x8210, 0x8108,
-	0x9186, 0x0800, 0x1d50, 0x2208, 0x0005, 0x2091, 0x8000, 0x2079,
-	0x0000, 0x000e, 0x00f6, 0x0010, 0x2091, 0x8000, 0x0e04, 0x0dc6,
-	0x0006, 0x0016, 0x2001, 0x8002, 0x0006, 0x2079, 0x0000, 0x000e,
-	0x7882, 0x7836, 0x001e, 0x798e, 0x000e, 0x788a, 0x000e, 0x7886,
-	0x3900, 0x789a, 0x00d6, 0x2069, 0x0300, 0x6818, 0x78ae, 0x681c,
-	0x78b2, 0x2001, 0x19e5, 0x2004, 0x78b6, 0x2001, 0x1a61, 0x2004,
-	0x78ba, 0x6808, 0x78be, 0x00de, 0x7833, 0x0012, 0x2091, 0x5000,
-	0x0156, 0x00d6, 0x0036, 0x0026, 0x2079, 0x0300, 0x2069, 0x1a84,
-	0x7a08, 0x226a, 0x2069, 0x1a85, 0x7a18, 0x226a, 0x8d68, 0x7a1c,
-	0x226a, 0x782c, 0x2019, 0x1a92, 0x201a, 0x2019, 0x1a95, 0x9016,
-	0x7808, 0xd09c, 0x0168, 0x7820, 0x201a, 0x8210, 0x8318, 0x9386,
-	0x1a9e, 0x0108, 0x0ca8, 0x7808, 0xd09c, 0x0110, 0x2011, 0xdead,
-	0x2019, 0x1a93, 0x782c, 0x201a, 0x8318, 0x221a, 0x7803, 0x0000,
-	0x2069, 0x1a64, 0x901e, 0x20a9, 0x0020, 0x7b26, 0x7a28, 0x226a,
-	0x8d68, 0x8318, 0x1f04, 0x0e25, 0x002e, 0x003e, 0x00de, 0x015e,
-	0x2079, 0x1800, 0x7803, 0x0005, 0x2091, 0x4080, 0x2001, 0x0089,
-	0x2004, 0xd084, 0x0188, 0x2001, 0x19f8, 0x2004, 0x9005, 0x0130,
-	0x2001, 0x008b, 0x2004, 0x9084, 0x8004, 0x0dd0, 0x2001, 0x008a,
-	0x2003, 0x0002, 0x2003, 0x1001, 0x080c, 0x55b6, 0x1110, 0x080c,
-	0x0e9b, 0x0cd0, 0x0005, 0x918c, 0x03ff, 0x2001, 0x0003, 0x2004,
-	0x9084, 0x0600, 0x1118, 0x918d, 0x2800, 0x0010, 0x918d, 0x2000,
-	0x2001, 0x017f, 0x2102, 0x0005, 0x00f6, 0x0006, 0x2079, 0x1826,
-	0x2f04, 0x8000, 0x207a, 0x080c, 0x2a85, 0x1150, 0x0006, 0x2001,
-	0x1974, 0x2004, 0xd0fc, 0x000e, 0x1118, 0x9082, 0x7530, 0x0010,
-	0x9082, 0x000f, 0x0258, 0x9006, 0x207a, 0x2079, 0x1829, 0x2f04,
-	0x9084, 0x0001, 0x9086, 0x0001, 0x207a, 0x0090, 0x2079, 0x1829,
-	0x2f7c, 0x8fff, 0x1138, 0x0026, 0x2011, 0x0080, 0x080c, 0x0ee1,
-	0x002e, 0x0030, 0x0026, 0x2011, 0x0000, 0x080c, 0x0ee1, 0x002e,
-	0x000e, 0x00fe, 0x0005, 0x0026, 0x0126, 0x2011, 0x0080, 0x080c,
-	0x0ee1, 0x20a9, 0x0fff, 0x080c, 0x0f02, 0x2011, 0x0040, 0x04c9,
-	0x20a9, 0x0fff, 0x080c, 0x0f02, 0x0c80, 0x2011, 0x0040, 0x0488,
-	0x2011, 0x0080, 0x0470, 0x0005, 0x0026, 0x70eb, 0x0000, 0x04b1,
-	0x1148, 0x080c, 0x2a85, 0x1118, 0x2011, 0x8484, 0x0058, 0x2011,
-	0x8282, 0x0040, 0x080c, 0x2a85, 0x1118, 0x2011, 0xcdc5, 0x0010,
-	0x2011, 0xcac2, 0x0441, 0x002e, 0x0005, 0x080c, 0x55b6, 0x1140,
-	0x0026, 0x2001, 0x1800, 0x2004, 0x9084, 0x0007, 0x0013, 0x002e,
-	0x0005, 0x0ecc, 0x0eb0, 0x0eb0, 0x0ead, 0x0e64, 0x0eb0, 0x0eb0,
-	0x0e64, 0x0016, 0x3b08, 0x3a00, 0x9104, 0x918d, 0x00c0, 0x21d8,
-	0x9084, 0xff3f, 0x9205, 0x20d0, 0x001e, 0x0005, 0x2001, 0x1839,
-	0x2004, 0xd0dc, 0x0005, 0x9e86, 0x1800, 0x190c, 0x0dc4, 0x70e4,
-	0xd0e4, 0x0108, 0xc2e5, 0x72e6, 0xd0e4, 0x1118, 0x9294, 0x00c0,
-	0x0c01, 0x0005, 0x1d04, 0x0f02, 0x2091, 0x6000, 0x1f04, 0x0f02,
-	0x0005, 0x890e, 0x810e, 0x810f, 0x9194, 0x003f, 0x918c, 0xffc0,
-	0x0005, 0x0006, 0x2200, 0x914d, 0x894f, 0x894d, 0x894d, 0x000e,
-	0x0005, 0x01d6, 0x0146, 0x0036, 0x0096, 0x2061, 0x188e, 0x600b,
-	0x0000, 0x600f, 0x0000, 0x6003, 0x0000, 0x6007, 0x0000, 0x2009,
-	0xffc0, 0x2105, 0x0006, 0x2001, 0xaaaa, 0x200f, 0x2019, 0x5555,
-	0x9016, 0x2049, 0x0bff, 0xab02, 0xa001, 0xa001, 0xa800, 0x9306,
-	0x1138, 0x2105, 0x9306, 0x0120, 0x8210, 0x99c8, 0x0400, 0x0c98,
-	0x000e, 0x200f, 0x2001, 0x189e, 0x928a, 0x000e, 0x1638, 0x928a,
-	0x0006, 0x2011, 0x0006, 0x1210, 0x2011, 0x0000, 0x2202, 0x9006,
-	0x2008, 0x82ff, 0x01b0, 0x8200, 0x600a, 0x600f, 0xffff, 0x6003,
-	0x0002, 0x6007, 0x0000, 0x0026, 0x2019, 0x0010, 0x9280, 0x0001,
-	0x20e8, 0x21a0, 0x21a8, 0x4104, 0x8319, 0x1de0, 0x8211, 0x1da0,
-	0x002e, 0x009e, 0x003e, 0x014e, 0x01de, 0x0005, 0x2011, 0x000e,
-	0x08e8, 0x0016, 0x0026, 0x0096, 0x3348, 0x080c, 0x0f09, 0x2100,
-	0x9300, 0x2098, 0x22e0, 0x009e, 0x002e, 0x001e, 0x0036, 0x3518,
-	0x20a9, 0x0001, 0x4002, 0x8007, 0x4004, 0x8319, 0x1dd8, 0x003e,
-	0x0005, 0x20e9, 0x0001, 0x71b4, 0x81ff, 0x11c0, 0x9006, 0x2009,
-	0x0200, 0x20a9, 0x0002, 0x9298, 0x0018, 0x23a0, 0x4001, 0x2009,
-	0x0700, 0x20a9, 0x0002, 0x9298, 0x0008, 0x23a0, 0x4001, 0x7078,
-	0x8007, 0x717c, 0x810f, 0x20a9, 0x0002, 0x4001, 0x9298, 0x000c,
-	0x23a0, 0x900e, 0x080c, 0x0da4, 0x2001, 0x0000, 0x810f, 0x20a9,
-	0x0002, 0x4001, 0x0005, 0x89ff, 0x0140, 0xa804, 0xa807, 0x0000,
-	0x0006, 0x080c, 0x1033, 0x009e, 0x0cb0, 0x0005, 0x00e6, 0x2071,
-	0x1800, 0x080c, 0x10ac, 0x090c, 0x0dc4, 0x00ee, 0x0005, 0x0086,
-	0x00e6, 0x0006, 0x0026, 0x0036, 0x0126, 0x2091, 0x8000, 0x00c9,
-	0x2071, 0x1800, 0x73bc, 0x702c, 0x9016, 0x9045, 0x0158, 0x8210,
-	0x9906, 0x090c, 0x0dc4, 0x2300, 0x9202, 0x0120, 0x1a0c, 0x0dc4,
-	0xa000, 0x0c98, 0x012e, 0x003e, 0x002e, 0x000e, 0x00ee, 0x008e,
-	0x0005, 0x0086, 0x00e6, 0x0006, 0x0126, 0x2091, 0x8000, 0x2071,
-	0x1911, 0x7010, 0x9005, 0x0140, 0x7018, 0x9045, 0x0128, 0x9906,
-	0x090c, 0x0dc4, 0xa000, 0x0cc8, 0x012e, 0x000e, 0x00ee, 0x008e,
-	0x0005, 0x00e6, 0x2071, 0x1800, 0x0126, 0x2091, 0x8000, 0x70bc,
-	0x8001, 0x0270, 0x70be, 0x702c, 0x2048, 0x9085, 0x0001, 0xa800,
-	0x702e, 0xa803, 0x0000, 0xa807, 0x0000, 0x012e, 0x00ee, 0x0005,
-	0x904e, 0x0cd8, 0x00e6, 0x0126, 0x2091, 0x8000, 0x2071, 0x1800,
-	0x70bc, 0x90ca, 0x0040, 0x0268, 0x8001, 0x70be, 0x702c, 0x2048,
-	0xa800, 0x702e, 0xa803, 0x0000, 0xa807, 0x0000, 0x012e, 0x00ee,
-	0x0005, 0x904e, 0x0cd8, 0x00e6, 0x0126, 0x2091, 0x8000, 0x0016,
-	0x890e, 0x810e, 0x810f, 0x9184, 0x003f, 0xa862, 0x9184, 0xffc0,
-	0xa85e, 0x001e, 0x0020, 0x00e6, 0x0126, 0x2091, 0x8000, 0x2071,
-	0x1800, 0x702c, 0xa802, 0x2900, 0x702e, 0x70bc, 0x8000, 0x70be,
-	0x080c, 0x8245, 0x012e, 0x00ee, 0x0005, 0x2071, 0x1800, 0x9026,
-	0x2009, 0x0000, 0x2049, 0x0400, 0x2900, 0x702e, 0x8940, 0x2800,
-	0xa802, 0xa95e, 0xa863, 0x0001, 0x8420, 0x9886, 0x0440, 0x0120,
-	0x2848, 0x9188, 0x0040, 0x0c90, 0x2071, 0x188e, 0x7000, 0x9005,
-	0x11a0, 0x2001, 0x04d4, 0xa802, 0x2048, 0x2009, 0x3500, 0x8940,
-	0x2800, 0xa802, 0xa95e, 0xa863, 0x0001, 0x8420, 0x9886, 0x0800,
-	0x0120, 0x2848, 0x9188, 0x0040, 0x0c90, 0x2071, 0x188e, 0x7104,
-	0x7200, 0x82ff, 0x01d0, 0x7308, 0x8318, 0x831f, 0x831b, 0x831b,
-	0x7312, 0x8319, 0x2001, 0x0800, 0xa802, 0x2048, 0x8900, 0xa802,
-	0x2040, 0xa95e, 0xaa62, 0x8420, 0x2300, 0x9906, 0x0130, 0x2848,
-	0x9188, 0x0040, 0x9291, 0x0000, 0x0c88, 0xa803, 0x0000, 0x2071,
-	0x1800, 0x74ba, 0x74be, 0x0005, 0x00e6, 0x0016, 0x9984, 0xfc00,
-	0x01e8, 0x908c, 0xf800, 0x1168, 0x9982, 0x0400, 0x02b8, 0x9982,
-	0x0440, 0x0278, 0x9982, 0x04d4, 0x0288, 0x9982, 0x0800, 0x1270,
-	0x0040, 0x9982, 0x0800, 0x0250, 0x2071, 0x188e, 0x7010, 0x9902,
-	0x1228, 0x9085, 0x0001, 0x001e, 0x00ee, 0x0005, 0x9006, 0x0cd8,
-	0x00e6, 0x2071, 0x19f7, 0x7007, 0x0000, 0x9006, 0x701e, 0x7022,
-	0x7002, 0x2071, 0x0000, 0x7010, 0x9085, 0x8044, 0x7012, 0x2071,
-	0x0080, 0x9006, 0x20a9, 0x0040, 0x7022, 0x1f04, 0x10e4, 0x702b,
-	0x0020, 0x00ee, 0x0005, 0x0126, 0x2091, 0x8000, 0x00e6, 0xa073,
-	0x0000, 0x2071, 0x19f7, 0x701c, 0x9088, 0x1a01, 0x280a, 0x8000,
-	0x9084, 0x003f, 0x701e, 0x7120, 0x9106, 0x090c, 0x0dc4, 0x7004,
-	0x9005, 0x1128, 0x00f6, 0x2079, 0x0080, 0x00a9, 0x00fe, 0x00ee,
-	0x012e, 0x0005, 0x0126, 0x2091, 0x8000, 0x00e6, 0x2071, 0x19f7,
-	0x7004, 0x9005, 0x1128, 0x00f6, 0x2079, 0x0080, 0x0021, 0x00fe,
-	0x00ee, 0x012e, 0x0005, 0x7004, 0x9086, 0x0000, 0x1110, 0x7007,
-	0x0006, 0x7000, 0x0002, 0x112d, 0x112b, 0x112b, 0x112b, 0x12a7,
-	0x12a7, 0x12a7, 0x12a7, 0x080c, 0x0dc4, 0x701c, 0x7120, 0x9106,
-	0x1148, 0x792c, 0x9184, 0x0001, 0x1120, 0xd1fc, 0x1110, 0x7007,
-	0x0000, 0x0005, 0x0096, 0x9180, 0x1a01, 0x2004, 0x700a, 0x2048,
-	0x8108, 0x918c, 0x003f, 0x7122, 0x782b, 0x0026, 0xa890, 0x7802,
-	0xa894, 0x7806, 0xa898, 0x780a, 0xa89c, 0x780e, 0xa87c, 0x700e,
-	0xa874, 0x7016, 0xa878, 0x701a, 0xa86c, 0x009e, 0xd084, 0x0120,
-	0x7007, 0x0001, 0x0029, 0x0005, 0x7007, 0x0002, 0x00b1, 0x0005,
-	0x0016, 0x0026, 0x710c, 0x2011, 0x0040, 0x9182, 0x0040, 0x1210,
-	0x2110, 0x9006, 0x700e, 0x7212, 0x8203, 0x7812, 0x782b, 0x0020,
-	0x782b, 0x0041, 0x002e, 0x001e, 0x0005, 0x0016, 0x0026, 0x0136,
-	0x0146, 0x0156, 0x7014, 0x20e0, 0x7018, 0x2098, 0x20e9, 0x0000,
-	0x20a1, 0x0088, 0x782b, 0x0026, 0x710c, 0x2011, 0x0040, 0x9182,
-	0x0040, 0x1210, 0x2110, 0x9006, 0x700e, 0x22a8, 0x4006, 0x8203,
-	0x7812, 0x782b, 0x0020, 0x3300, 0x701a, 0x782b, 0x0001, 0x015e,
-	0x014e, 0x013e, 0x002e, 0x001e, 0x0005, 0x0016, 0x2009, 0x19f7,
-	0x2104, 0xc095, 0x200a, 0x080c, 0x110a, 0x001e, 0x0005, 0x0016,
-	0x00e6, 0x2071, 0x19f7, 0x00f6, 0x2079, 0x0080, 0x792c, 0xd1bc,
-	0x190c, 0x0dbd, 0x782b, 0x0002, 0xd1fc, 0x0120, 0x918c, 0x0700,
-	0x7004, 0x0023, 0x00fe, 0x00ee, 0x001e, 0x0005, 0x111b, 0x11c5,
-	0x11f9, 0x0dc4, 0x0dc4, 0x12b3, 0x0dc4, 0x918c, 0x0700, 0x1550,
-	0x0136, 0x0146, 0x0156, 0x7014, 0x20e8, 0x7018, 0x20a0, 0x20e1,
-	0x0000, 0x2099, 0x0088, 0x782b, 0x0040, 0x7010, 0x20a8, 0x4005,
-	0x3400, 0x701a, 0x015e, 0x014e, 0x013e, 0x700c, 0x9005, 0x0578,
-	0x7800, 0x7802, 0x7804, 0x7806, 0x080c, 0x1160, 0x0005, 0x7008,
-	0x0096, 0x2048, 0xa873, 0x0100, 0x009e, 0x7007, 0x0000, 0x080c,
-	0x111b, 0x0005, 0x7008, 0x0096, 0x2048, 0xa873, 0x0200, 0x009e,
-	0x0ca0, 0x918c, 0x0700, 0x1150, 0x700c, 0x9005, 0x0180, 0x7800,
-	0x7802, 0x7804, 0x7806, 0x080c, 0x1175, 0x0005, 0x7008, 0x0096,
-	0x2048, 0xa873, 0x0200, 0x009e, 0x7007, 0x0000, 0x0080, 0x0096,
-	0x7008, 0x2048, 0x7800, 0xa892, 0x7804, 0xa896, 0x7808, 0xa89a,
-	0x780c, 0xa89e, 0xa873, 0x0100, 0x009e, 0x7007, 0x0000, 0x0096,
-	0x00d6, 0x7008, 0x2048, 0x2001, 0x18ba, 0x2004, 0x9906, 0x1128,
-	0xa8a0, 0x080f, 0x00de, 0x009e, 0x00a0, 0x00de, 0x009e, 0x0096,
-	0x00d6, 0x7008, 0x2048, 0x0081, 0x0150, 0xa8a0, 0x0086, 0x2940,
-	0x080f, 0x008e, 0x00de, 0x009e, 0x080c, 0x110a, 0x0005, 0x00de,
-	0x009e, 0x080c, 0x110a, 0x0005, 0xa8ac, 0xd08c, 0x0005, 0x0096,
-	0xa0a4, 0x904d, 0x090c, 0x0dc4, 0xa070, 0x908e, 0x0100, 0x0130,
-	0xa87f, 0x0030, 0xa887, 0x0000, 0xa89b, 0x4002, 0xa898, 0x908e,
-	0x006b, 0x090c, 0x469d, 0x080c, 0x6b11, 0xa0a3, 0x0000, 0xa0a7,
-	0x0000, 0x2848, 0x080c, 0x1033, 0x009e, 0x0005, 0x00a6, 0xa0a4,
-	0x904d, 0x090c, 0x0dc4, 0xa070, 0x908e, 0x0100, 0x0128, 0xa87f,
-	0x0001, 0xa887, 0x0000, 0x00c0, 0xa80c, 0x2050, 0xb004, 0x9005,
-	0x0198, 0xa80e, 0x2050, 0x8006, 0x8006, 0x8007, 0x908c, 0x003f,
-	0x9084, 0xffc0, 0x9080, 0x0002, 0xa07a, 0xa176, 0xb000, 0xa07e,
-	0x2810, 0x080c, 0x10eb, 0x00c8, 0xa980, 0xa898, 0x0016, 0x0006,
-	0x080c, 0x6b11, 0x000e, 0x001e, 0xd1a4, 0x0128, 0x00c6, 0x2060,
-	0x080c, 0x9f18, 0x00ce, 0x7008, 0x2048, 0xa8a3, 0x0000, 0xa8a7,
-	0x0000, 0x080c, 0x1033, 0x080c, 0x110a, 0x00ae, 0x0005, 0x0126,
-	0x2091, 0x8000, 0x782b, 0x1001, 0x7007, 0x0005, 0x7000, 0xc094,
-	0x7002, 0x012e, 0x0005, 0x7007, 0x0000, 0x080c, 0x111b, 0x0005,
-	0x0126, 0x2091, 0x2200, 0x2079, 0x0300, 0x2071, 0x1a41, 0x7003,
-	0x0000, 0x78bf, 0x00f6, 0x781b, 0x4800, 0x00c1, 0x7803, 0x0003,
-	0x780f, 0x0000, 0x20a9, 0x0259, 0x2061, 0xd387, 0x2c0d, 0x7912,
-	0xe104, 0x9ce0, 0x0002, 0x7916, 0x1f04, 0x12ce, 0x7807, 0x0007,
-	0x7803, 0x0000, 0x7803, 0x0001, 0x012e, 0x0005, 0x00c6, 0x7803,
-	0x0000, 0x7808, 0xd09c, 0x0110, 0x7820, 0x0cd8, 0x2001, 0x1a42,
-	0x2003, 0x0000, 0x78ab, 0x0004, 0x78ac, 0xd0ac, 0x1de8, 0x78ab,
-	0x0002, 0x7807, 0x0007, 0x7827, 0x0030, 0x782b, 0x0400, 0x7827,
-	0x0031, 0x782b, 0x1a64, 0x781f, 0xff00, 0x781b, 0xb700, 0x2001,
-	0x0200, 0x2004, 0xd0dc, 0x0110, 0x781f, 0x0303, 0x2061, 0x1a64,
-	0x602f, 0x1cc8, 0x2001, 0x1819, 0x2004, 0x9082, 0x1cc8, 0x6032,
-	0x603b, 0x1f70, 0x2001, 0x31cc, 0xd0fc, 0x190c, 0x0dc4, 0x2001,
-	0x1810, 0x2004, 0xd0c4, 0x1128, 0x2001, 0x0003, 0x2004, 0xd0d4,
-	0x1118, 0x783f, 0x31cc, 0x0020, 0x9084, 0xc000, 0x783f, 0xb1cc,
-	0x00ce, 0x0005, 0x0126, 0x2091, 0x2200, 0x7908, 0x9184, 0x0030,
-	0x190c, 0x0dbd, 0xd19c, 0x0158, 0x7820, 0x908c, 0xf000, 0x15f0,
-	0x908a, 0x0024, 0x1a0c, 0x0dc4, 0x0023, 0x012e, 0x0005, 0x012e,
-	0x0005, 0x1366, 0x1366, 0x137d, 0x1382, 0x1386, 0x138b, 0x13b3,
-	0x13b7, 0x13c5, 0x13c9, 0x1366, 0x1452, 0x1456, 0x14c6, 0x1366,
-	0x1366, 0x1366, 0x1366, 0x1366, 0x1366, 0x1366, 0x1366, 0x1366,
-	0x1366, 0x1366, 0x1366, 0x1366, 0x138d, 0x1366, 0x1366, 0x1366,
-	0x1366, 0x1366, 0x1366, 0x136a, 0x1368, 0x1366, 0x080c, 0x0dc4,
-	0x080c, 0x0dbd, 0x080c, 0x14cd, 0x2009, 0x1a59, 0x2104, 0x8000,
-	0x200a, 0x080c, 0x7d22, 0x080c, 0x199b, 0x0005, 0x2009, 0x0048,
-	0x2060, 0x080c, 0x9f88, 0x012e, 0x0005, 0x7004, 0xc085, 0xc0b5,
-	0x7006, 0x0005, 0x7004, 0xc085, 0x7006, 0x0005, 0x080c, 0x14cd,
-	0x080c, 0x1636, 0x0005, 0x080c, 0x0dc4, 0x080c, 0x14cd, 0x2060,
-	0x6014, 0x0096, 0x2048, 0xa83b, 0xffff, 0x009e, 0x2009, 0x0048,
-	0x080c, 0x9f88, 0x2001, 0x015d, 0x2003, 0x0000, 0x2009, 0x03e8,
-	0x8109, 0x0160, 0x2001, 0x0201, 0x2004, 0x9005, 0x0dc8, 0x2001,
-	0x0218, 0x2004, 0xd0ec, 0x1110, 0x080c, 0x14d2, 0x2001, 0x0307,
-	0x2003, 0x8000, 0x0005, 0x7004, 0xc095, 0x7006, 0x0005, 0x080c,
-	0x14cd, 0x2060, 0x6014, 0x0096, 0x2048, 0xa83b, 0xffff, 0x009e,
-	0x2009, 0x0048, 0x080c, 0x9f88, 0x0005, 0x080c, 0x14cd, 0x080c,
-	0x0dc4, 0x080c, 0x14cd, 0x080c, 0x143d, 0x7827, 0x0018, 0x79ac,
-	0xd1dc, 0x0540, 0x7827, 0x0015, 0x7828, 0x782b, 0x0000, 0x9065,
-	0x0138, 0x2001, 0x020d, 0x2003, 0x0050, 0x2003, 0x0020, 0x0400,
-	0x7004, 0x9005, 0x1180, 0x78ab, 0x0004, 0x7827, 0x0018, 0x782b,
-	0x0000, 0xd1bc, 0x090c, 0x0dc4, 0x2001, 0x020d, 0x2003, 0x0050,
-	0x2003, 0x0020, 0x0478, 0x78ab, 0x0004, 0x7803, 0x0001, 0x080c,
-	0x1456, 0x0005, 0x7828, 0x782b, 0x0000, 0x9065, 0x090c, 0x0dc4,
-	0x6014, 0x2048, 0x78ab, 0x0004, 0x918c, 0x0700, 0x01d8, 0x080c,
-	0x7d22, 0x080c, 0x199b, 0x080c, 0xb955, 0x0158, 0xa9b0, 0xa936,
-	0xa9b4, 0xa93a, 0xa83f, 0xffff, 0xa843, 0xffff, 0xa884, 0xc0bd,
-	0xa886, 0xa984, 0x9184, 0x0020, 0x1120, 0xc1ad, 0xa986, 0x080c,
-	0xb5c5, 0x0005, 0x2029, 0x00c8, 0x8529, 0x0128, 0x2001, 0x0201,
-	0x2004, 0x9005, 0x0dc8, 0x7dbc, 0x080c, 0xd314, 0xd5a4, 0x1118,
-	0x080c, 0x14d2, 0x0005, 0x080c, 0x7d22, 0x080c, 0x199b, 0x0005,
-	0x781f, 0x0300, 0x7803, 0x0001, 0x0005, 0x0016, 0x0066, 0x0076,
-	0x00f6, 0x2079, 0x0300, 0x7908, 0x918c, 0x0007, 0x9186, 0x0003,
-	0x0120, 0x2001, 0x0016, 0x080c, 0x1553, 0x00fe, 0x007e, 0x006e,
-	0x001e, 0x0005, 0x7004, 0xc09d, 0x7006, 0x0005, 0x7104, 0x9184,
-	0x0004, 0x190c, 0x0dc4, 0xd184, 0x11b1, 0xd19c, 0x0180, 0xc19c,
-	0x7106, 0x0016, 0x080c, 0x1619, 0x001e, 0x0148, 0x2001, 0x020d,
-	0x2003, 0x0050, 0x2003, 0x0020, 0x080c, 0x14d2, 0x0005, 0x81ff,
-	0x190c, 0x0dc4, 0x0005, 0x2100, 0xc184, 0xc1b4, 0x7106, 0xd0b4,
-	0x0016, 0x00e6, 0x1904, 0x14bb, 0x2071, 0x0200, 0x080c, 0x160d,
-	0x080c, 0x1619, 0x05a8, 0x6014, 0x9005, 0x05a8, 0x0096, 0x2048,
-	0xa868, 0x009e, 0x9084, 0x00ff, 0x908e, 0x0029, 0x0160, 0x908e,
-	0x0048, 0x1548, 0x601c, 0xd084, 0x11d8, 0x00f6, 0x2c78, 0x080c,
-	0x1679, 0x00fe, 0x00a8, 0x00f6, 0x2c78, 0x080c, 0x17bd, 0x00fe,
-	0x2009, 0x01f4, 0x8109, 0x0160, 0x2001, 0x0201, 0x2004, 0x9005,
-	0x0dc8, 0x2001, 0x0218, 0x2004, 0xd0ec, 0x1110, 0x0419, 0x0040,
-	0x2001, 0x020d, 0x2003, 0x0020, 0x080c, 0x12de, 0x7803, 0x0001,
-	0x00ee, 0x001e, 0x0005, 0x080c, 0x1619, 0x0dd0, 0x2001, 0x020d,
-	0x2003, 0x0050, 0x2003, 0x0020, 0x0069, 0x0c90, 0x0031, 0x2060,
-	0x2009, 0x0053, 0x080c, 0x9f88, 0x0005, 0x7808, 0xd09c, 0x0de8,
-	0x7820, 0x0005, 0x080c, 0x143d, 0x00d6, 0x2069, 0x0200, 0x2009,
-	0x01f4, 0x8109, 0x0520, 0x6804, 0x9005, 0x0dd8, 0x2001, 0x015d,
-	0x2003, 0x0000, 0x79bc, 0xd1a4, 0x1578, 0x79b8, 0x918c, 0x0fff,
-	0x0180, 0x9182, 0x0841, 0x1268, 0x9188, 0x0007, 0x918c, 0x0ff8,
-	0x810c, 0x810c, 0x810c, 0x080c, 0x153f, 0x6827, 0x0001, 0x8109,
-	0x1dd0, 0x080c, 0x153f, 0x6827, 0x0002, 0x080c, 0x153f, 0x6804,
-	0x9005, 0x1170, 0x682c, 0xd0e4, 0x1540, 0x691c, 0x9184, 0x0014,
-	0x0120, 0x6830, 0x9084, 0x9554, 0x15b9, 0x6804, 0x9005, 0x0da8,
-	0x79b8, 0xd1ec, 0x1130, 0x0870, 0x080c, 0x7d22, 0x080c, 0x199b,
-	0x0090, 0x7827, 0x0015, 0x782b, 0x0000, 0x7827, 0x0018, 0x782b,
-	0x0000, 0x2001, 0x020d, 0x2003, 0x0020, 0x2001, 0x0307, 0x2003,
-	0x0300, 0x7803, 0x0001, 0x00de, 0x0005, 0x682c, 0x9084, 0x5400,
-	0x9086, 0x5400, 0x0d30, 0x7827, 0x0015, 0x782b, 0x0000, 0x7803,
-	0x0001, 0x6800, 0x9085, 0x1800, 0x6802, 0x00de, 0x0005, 0x6824,
-	0x9084, 0x0003, 0x1de0, 0x0005, 0x2079, 0x0001, 0x000e, 0x00f6,
-	0x0804, 0x0dc6, 0x2001, 0x0030, 0x2c08, 0x621c, 0x0021, 0x7830,
-	0x9086, 0x0041, 0x0005, 0x00f6, 0x2079, 0x0300, 0x0006, 0x7808,
-	0xd09c, 0x0140, 0x0016, 0x0026, 0x00c6, 0x080c, 0x132a, 0x00ce,
-	0x002e, 0x001e, 0x000e, 0x0006, 0x7832, 0x7936, 0x7a3a, 0x781b,
-	0x8080, 0x0059, 0x1118, 0x000e, 0x00fe, 0x0005, 0x000e, 0x792c,
-	0x3900, 0x8000, 0x2004, 0x080c, 0x0dc4, 0x2009, 0x180c, 0x2104,
-	0xc0f4, 0x200a, 0x2009, 0xff00, 0x8109, 0x0904, 0x15d1, 0x7a18,
-	0x9284, 0x0030, 0x0904, 0x15cc, 0x9284, 0x0048, 0x9086, 0x0008,
-	0x1904, 0x15cc, 0x2001, 0x0109, 0x2004, 0xd08c, 0x01f0, 0x0006,
-	0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x0126, 0x2091, 0x2800,
-	0x00f6, 0x0026, 0x0016, 0x2009, 0x1a5c, 0x2104, 0x8000, 0x0208,
-	0x200a, 0x080c, 0x8689, 0x001e, 0x002e, 0x00fe, 0x012e, 0x015e,
-	0x014e, 0x013e, 0x01de, 0x01ce, 0x000e, 0x2001, 0x009b, 0x2004,
-	0xd0fc, 0x01d0, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,
-	0x0156, 0x00f6, 0x0016, 0x2009, 0x1a5d, 0x2104, 0x8000, 0x0208,
-	0x200a, 0x080c, 0x1d94, 0x001e, 0x00fe, 0x015e, 0x014e, 0x013e,
-	0x01de, 0x01ce, 0x012e, 0x000e, 0x7818, 0xd0bc, 0x1904, 0x157c,
-	0x0005, 0x2001, 0x180c, 0x2004, 0xd0f4, 0x1528, 0x7a18, 0x9284,
-	0x0030, 0x0508, 0x9284, 0x0048, 0x9086, 0x0008, 0x11e0, 0x2001,
-	0x19d3, 0x2004, 0x9005, 0x01b8, 0x2001, 0x1a44, 0x2004, 0x9086,
-	0x0000, 0x0188, 0x2009, 0x1a5b, 0x2104, 0x8000, 0x0208, 0x200a,
-	0x080c, 0x96a1, 0x2009, 0x180c, 0x2104, 0xc0f5, 0x200a, 0x2009,
-	0xff00, 0x0804, 0x157c, 0x9085, 0x0001, 0x0005, 0x7832, 0x7936,
-	0x7a3a, 0x781b, 0x8080, 0x080c, 0x1575, 0x1108, 0x0005, 0x792c,
-	0x3900, 0x8000, 0x2004, 0x080c, 0x0dc4, 0x7037, 0x0001, 0x7150,
-	0x7037, 0x0002, 0x7050, 0x2060, 0xd1bc, 0x1110, 0x7054, 0x2060,
-	0x0005, 0x0006, 0x0046, 0x00e6, 0x2071, 0x0200, 0x7037, 0x0002,
-	0x7058, 0x9084, 0xff00, 0x8007, 0x9086, 0x00bc, 0x1158, 0x2021,
-	0x1a5a, 0x2404, 0x8000, 0x0208, 0x2022, 0x080c, 0x7d22, 0x080c,
-	0x199b, 0x9006, 0x00ee, 0x004e, 0x000e, 0x0005, 0x0c11, 0x1108,
-	0x0005, 0x00e6, 0x0016, 0x2071, 0x0200, 0x0879, 0x6120, 0x9186,
-	0x0000, 0x0560, 0x9186, 0x0002, 0x0548, 0x7358, 0x745c, 0x6014,
-	0x905d, 0x0520, 0x2b48, 0xab42, 0xac3e, 0x2001, 0x1880, 0x2004,
-	0xd0b4, 0x1138, 0x601c, 0xd0e4, 0x1120, 0xa83b, 0x7fff, 0xa837,
-	0xffff, 0x080c, 0x1f90, 0x1190, 0x080c, 0x181a, 0x2a00, 0xa816,
+	0x7852, 0x080c, 0x7351, 0x0120, 0x7843, 0x0090, 0x7843, 0x0010,
+	0x2021, 0xe678, 0x2019, 0xea60, 0x0d0c, 0x85c0, 0x7820, 0xd09c,
+	0x1588, 0x080c, 0x7351, 0x0904, 0x0cf0, 0x7824, 0xd0ac, 0x1904,
+	0x0d10, 0x080c, 0x7374, 0x1530, 0x0046, 0x2021, 0x0320, 0x8421,
+	0x1df0, 0x004e, 0x7827, 0x1800, 0x080c, 0x2af6, 0x7824, 0x9084,
+	0x1800, 0x1168, 0x9484, 0x0fff, 0x1140, 0x2001, 0x1810, 0x2004,
+	0x9084, 0x9000, 0x0110, 0x080c, 0x0d31, 0x8421, 0x1158, 0x1d04,
+	0x0ccb, 0x080c, 0x85c0, 0x080c, 0x7656, 0x080c, 0x764c, 0x7003,
+	0x0001, 0x04f0, 0x8319, 0x1940, 0x1d04, 0x0cd8, 0x080c, 0x85c0,
+	0x2009, 0x1977, 0x2104, 0x9005, 0x0118, 0x8001, 0x200a, 0x1178,
+	0x200b, 0x000a, 0x7827, 0x0048, 0x20a9, 0x0002, 0x080c, 0x2ad7,
+	0x7924, 0x080c, 0x2af6, 0xd19c, 0x0110, 0x080c, 0x2a17, 0x00d8,
+	0x080c, 0x7362, 0x1140, 0x94a2, 0x03e8, 0x1128, 0x080c, 0x7329,
+	0x7003, 0x0001, 0x00a8, 0x7827, 0x1800, 0x080c, 0x2af6, 0x7824,
+	0x080c, 0x736b, 0x0110, 0xd0ac, 0x1158, 0x9084, 0x1800, 0x0950,
+	0x7003, 0x0001, 0x0028, 0x2001, 0x0001, 0x080c, 0x26b1, 0x0078,
+	0x2009, 0x180c, 0x210c, 0xd19c, 0x1120, 0x7904, 0x918d, 0x0002,
+	0x7906, 0x7827, 0x0048, 0x7828, 0x9085, 0x0028, 0x782a, 0x7850,
+	0x9085, 0x0400, 0x7852, 0x2001, 0x1984, 0x2003, 0x0000, 0x9006,
+	0x78f2, 0x015e, 0x003e, 0x000e, 0x012e, 0x00fe, 0x004e, 0x001e,
+	0x0005, 0x0006, 0x0016, 0x0036, 0x0046, 0x00b6, 0x00c6, 0x00d6,
+	0x00e6, 0x00f6, 0x0156, 0x0069, 0x0d0c, 0x85c0, 0x015e, 0x00fe,
+	0x00ee, 0x00de, 0x00ce, 0x00be, 0x004e, 0x003e, 0x001e, 0x000e,
+	0x0005, 0x00e6, 0x2071, 0x189f, 0x7004, 0x9086, 0x0001, 0x1110,
+	0x080c, 0x338f, 0x00ee, 0x0005, 0x0005, 0x2a70, 0x2061, 0x1988,
+	0x2063, 0x0003, 0x6007, 0x0003, 0x600b, 0x001a, 0x600f, 0x0117,
+	0x2001, 0x1958, 0x900e, 0x2102, 0x7192, 0x2001, 0x0100, 0x2004,
+	0x9082, 0x0002, 0x0218, 0x705b, 0xffff, 0x0008, 0x715a, 0x7063,
+	0xffff, 0x717a, 0x717e, 0x080c, 0xc617, 0x70e7, 0x00c0, 0x2061,
+	0x1948, 0x6003, 0x0909, 0x6106, 0x600b, 0x8800, 0x600f, 0x0200,
+	0x6013, 0x00ff, 0x6017, 0x000f, 0x611a, 0x601f, 0x07d0, 0x2061,
+	0x1950, 0x6003, 0x8000, 0x6106, 0x610a, 0x600f, 0x0200, 0x6013,
+	0x00ff, 0x6116, 0x601b, 0x0001, 0x611e, 0x2061, 0x1965, 0x6003,
+	0x514c, 0x6007, 0x4f47, 0x600b, 0x4943, 0x600f, 0x2020, 0x2001,
+	0x182b, 0x2102, 0x0005, 0x9016, 0x080c, 0x64fc, 0x1178, 0xb804,
+	0x90c4, 0x00ff, 0x98c6, 0x0006, 0x0128, 0x90c4, 0xff00, 0x98c6,
+	0x0600, 0x1120, 0x9186, 0x0080, 0x0108, 0x8210, 0x8108, 0x9186,
+	0x0800, 0x1d50, 0x2208, 0x0005, 0x2091, 0x8000, 0x2079, 0x0000,
+	0x000e, 0x00f6, 0x0010, 0x2091, 0x8000, 0x0e04, 0x0dc5, 0x0006,
+	0x0016, 0x2001, 0x8002, 0x0006, 0x2079, 0x0000, 0x000e, 0x7882,
+	0x7836, 0x001e, 0x798e, 0x000e, 0x788a, 0x000e, 0x7886, 0x3900,
+	0x789a, 0x00d6, 0x2069, 0x0300, 0x6818, 0x78ae, 0x681c, 0x78b2,
+	0x2001, 0x19e5, 0x2004, 0x78b6, 0x2001, 0x1a61, 0x2004, 0x78ba,
+	0x6808, 0x78be, 0x00de, 0x7833, 0x0012, 0x2091, 0x5000, 0x0156,
+	0x00d6, 0x0036, 0x0026, 0x2079, 0x0300, 0x2069, 0x1a84, 0x7a08,
+	0x226a, 0x2069, 0x1a85, 0x7a18, 0x226a, 0x8d68, 0x7a1c, 0x226a,
+	0x782c, 0x2019, 0x1a92, 0x201a, 0x2019, 0x1a95, 0x9016, 0x7808,
+	0xd09c, 0x0168, 0x7820, 0x201a, 0x8210, 0x8318, 0x9386, 0x1aaa,
+	0x0108, 0x0ca8, 0x7808, 0xd09c, 0x0110, 0x2011, 0xdead, 0x2019,
+	0x1a93, 0x782c, 0x201a, 0x8318, 0x221a, 0x7803, 0x0000, 0x2069,
+	0x1a64, 0x901e, 0x20a9, 0x0020, 0x7b26, 0x7a28, 0x226a, 0x8d68,
+	0x8318, 0x1f04, 0x0e24, 0x002e, 0x003e, 0x00de, 0x015e, 0x2079,
+	0x1800, 0x7803, 0x0005, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004,
+	0xd084, 0x0188, 0x2001, 0x19f8, 0x2004, 0x9005, 0x0130, 0x2001,
+	0x008b, 0x2004, 0x9084, 0x8004, 0x0dd0, 0x2001, 0x008a, 0x2003,
+	0x0002, 0x2003, 0x1001, 0x080c, 0x5673, 0x1108, 0x0099, 0x0cd8,
+	0x0005, 0x918c, 0x03ff, 0x2001, 0x0003, 0x2004, 0x9084, 0x0600,
+	0x1118, 0x918d, 0x2800, 0x0010, 0x918d, 0x2000, 0x2001, 0x017f,
+	0x2102, 0x0005, 0x0026, 0x0126, 0x2011, 0x0080, 0x080c, 0x0eed,
+	0x20a9, 0x0900, 0x080c, 0x0f0e, 0x2011, 0x0040, 0x080c, 0x0eed,
+	0x20a9, 0x0900, 0x080c, 0x0f0e, 0x0c78, 0x0026, 0x080c, 0x0efa,
+	0x1118, 0x2011, 0x0040, 0x0098, 0x2011, 0x010e, 0x2214, 0x9294,
+	0x0007, 0x9296, 0x0007, 0x0118, 0x2011, 0xa880, 0x0010, 0x2011,
+	0x6840, 0xd0e4, 0x70eb, 0x0000, 0x1120, 0x70eb, 0x0fa0, 0x080c,
+	0x0eff, 0x002e, 0x0005, 0x0026, 0x080c, 0x0efa, 0x0128, 0xd0a4,
+	0x1138, 0x2011, 0xcdd5, 0x0010, 0x2011, 0x0080, 0x080c, 0x0eff,
+	0x002e, 0x0005, 0x0026, 0x70eb, 0x0000, 0x080c, 0x0efa, 0x1148,
+	0x080c, 0x2aee, 0x1118, 0x2011, 0x8484, 0x0058, 0x2011, 0x8282,
+	0x0040, 0x080c, 0x2aee, 0x1118, 0x2011, 0xcdc5, 0x0010, 0x2011,
+	0xcac2, 0x080c, 0x0eff, 0x002e, 0x0005, 0x00e6, 0x0006, 0x2071,
+	0x1800, 0xd0b4, 0x70e4, 0x1110, 0xc0e4, 0x0048, 0x0006, 0x3b00,
+	0x9084, 0xff3f, 0x20d8, 0x000e, 0x70eb, 0x0000, 0xc0e5, 0x0079,
+	0x000e, 0x00ee, 0x0005, 0x00e6, 0x2071, 0x1800, 0xd0e4, 0x70e4,
+	0x1110, 0xc0dc, 0x0008, 0xc0dd, 0x0011, 0x00ee, 0x0005, 0x70e6,
+	0x7000, 0x9084, 0x0007, 0x000b, 0x0005, 0x0ebc, 0x0e93, 0x0e93,
+	0x0e75, 0x0ea2, 0x0e93, 0x0e93, 0x0ea2, 0x0016, 0x3b08, 0x3a00,
+	0x9104, 0x918d, 0x00c0, 0x21d8, 0x9084, 0xff3f, 0x9205, 0x20d0,
+	0x001e, 0x0005, 0x2001, 0x1839, 0x2004, 0xd0dc, 0x0005, 0x9e86,
+	0x1800, 0x190c, 0x0dc3, 0x70e4, 0xd0e4, 0x0108, 0xc2e5, 0x72e6,
+	0xd0e4, 0x1118, 0x9294, 0x00c0, 0x0c01, 0x0005, 0x1d04, 0x0f0e,
+	0x2091, 0x6000, 0x1f04, 0x0f0e, 0x0005, 0x890e, 0x810e, 0x810f,
+	0x9194, 0x003f, 0x918c, 0xffc0, 0x0005, 0x0006, 0x2200, 0x914d,
+	0x894f, 0x894d, 0x894d, 0x000e, 0x0005, 0x01d6, 0x0146, 0x0036,
+	0x0096, 0x2061, 0x188e, 0x600b, 0x0000, 0x600f, 0x0000, 0x6003,
+	0x0000, 0x6007, 0x0000, 0x2009, 0xffc0, 0x2105, 0x0006, 0x2001,
+	0xaaaa, 0x200f, 0x2019, 0x5555, 0x9016, 0x2049, 0x0bff, 0xab02,
+	0xa001, 0xa001, 0xa800, 0x9306, 0x1138, 0x2105, 0x9306, 0x0120,
+	0x8210, 0x99c8, 0x0400, 0x0c98, 0x000e, 0x200f, 0x2001, 0x189e,
+	0x928a, 0x000e, 0x1638, 0x928a, 0x0006, 0x2011, 0x0006, 0x1210,
+	0x2011, 0x0000, 0x2202, 0x9006, 0x2008, 0x82ff, 0x01b0, 0x8200,
+	0x600a, 0x600f, 0xffff, 0x6003, 0x0002, 0x6007, 0x0000, 0x0026,
+	0x2019, 0x0010, 0x9280, 0x0001, 0x20e8, 0x21a0, 0x21a8, 0x4104,
+	0x8319, 0x1de0, 0x8211, 0x1da0, 0x002e, 0x009e, 0x003e, 0x014e,
+	0x01de, 0x0005, 0x2011, 0x000e, 0x08e8, 0x0016, 0x0026, 0x0096,
+	0x3348, 0x080c, 0x0f15, 0x2100, 0x9300, 0x2098, 0x22e0, 0x009e,
+	0x002e, 0x001e, 0x0036, 0x3518, 0x20a9, 0x0001, 0x4002, 0x8007,
+	0x4004, 0x8319, 0x1dd8, 0x003e, 0x0005, 0x20e9, 0x0001, 0x71b4,
+	0x81ff, 0x11c0, 0x9006, 0x2009, 0x0200, 0x20a9, 0x0002, 0x9298,
+	0x0018, 0x23a0, 0x4001, 0x2009, 0x0700, 0x20a9, 0x0002, 0x9298,
+	0x0008, 0x23a0, 0x4001, 0x7078, 0x8007, 0x717c, 0x810f, 0x20a9,
+	0x0002, 0x4001, 0x9298, 0x000c, 0x23a0, 0x900e, 0x080c, 0x0da3,
+	0x2001, 0x0000, 0x810f, 0x20a9, 0x0002, 0x4001, 0x0005, 0x89ff,
+	0x0140, 0xa804, 0xa807, 0x0000, 0x0006, 0x080c, 0x103f, 0x009e,
+	0x0cb0, 0x0005, 0x00e6, 0x2071, 0x1800, 0x080c, 0x10b8, 0x090c,
+	0x0dc3, 0x00ee, 0x0005, 0x0086, 0x00e6, 0x0006, 0x0026, 0x0036,
+	0x0126, 0x2091, 0x8000, 0x00c9, 0x2071, 0x1800, 0x73bc, 0x702c,
+	0x9016, 0x9045, 0x0158, 0x8210, 0x9906, 0x090c, 0x0dc3, 0x2300,
+	0x9202, 0x0120, 0x1a0c, 0x0dc3, 0xa000, 0x0c98, 0x012e, 0x003e,
+	0x002e, 0x000e, 0x00ee, 0x008e, 0x0005, 0x0086, 0x00e6, 0x0006,
+	0x0126, 0x2091, 0x8000, 0x2071, 0x1911, 0x7010, 0x9005, 0x0140,
+	0x7018, 0x9045, 0x0128, 0x9906, 0x090c, 0x0dc3, 0xa000, 0x0cc8,
+	0x012e, 0x000e, 0x00ee, 0x008e, 0x0005, 0x00e6, 0x2071, 0x1800,
+	0x0126, 0x2091, 0x8000, 0x70bc, 0x8001, 0x0270, 0x70be, 0x702c,
+	0x2048, 0x9085, 0x0001, 0xa800, 0x702e, 0xa803, 0x0000, 0xa807,
+	0x0000, 0x012e, 0x00ee, 0x0005, 0x904e, 0x0cd8, 0x00e6, 0x0126,
+	0x2091, 0x8000, 0x2071, 0x1800, 0x70bc, 0x90ca, 0x0040, 0x0268,
+	0x8001, 0x70be, 0x702c, 0x2048, 0xa800, 0x702e, 0xa803, 0x0000,
+	0xa807, 0x0000, 0x012e, 0x00ee, 0x0005, 0x904e, 0x0cd8, 0x00e6,
+	0x0126, 0x2091, 0x8000, 0x0016, 0x890e, 0x810e, 0x810f, 0x9184,
+	0x003f, 0xa862, 0x9184, 0xffc0, 0xa85e, 0x001e, 0x0020, 0x00e6,
+	0x0126, 0x2091, 0x8000, 0x2071, 0x1800, 0x702c, 0xa802, 0x2900,
+	0x702e, 0x70bc, 0x8000, 0x70be, 0x080c, 0x83a7, 0x012e, 0x00ee,
+	0x0005, 0x2071, 0x1800, 0x9026, 0x2009, 0x0000, 0x2049, 0x0400,
+	0x2900, 0x702e, 0x8940, 0x2800, 0xa802, 0xa95e, 0xa863, 0x0001,
+	0x8420, 0x9886, 0x0440, 0x0120, 0x2848, 0x9188, 0x0040, 0x0c90,
+	0x2071, 0x188e, 0x7000, 0x9005, 0x11a0, 0x2001, 0x0534, 0xa802,
+	0x2048, 0x2009, 0x4d00, 0x8940, 0x2800, 0xa802, 0xa95e, 0xa863,
+	0x0001, 0x8420, 0x9886, 0x0800, 0x0120, 0x2848, 0x9188, 0x0040,
+	0x0c90, 0x2071, 0x188e, 0x7104, 0x7200, 0x82ff, 0x01d0, 0x7308,
+	0x8318, 0x831f, 0x831b, 0x831b, 0x7312, 0x8319, 0x2001, 0x0800,
+	0xa802, 0x2048, 0x8900, 0xa802, 0x2040, 0xa95e, 0xaa62, 0x8420,
+	0x2300, 0x9906, 0x0130, 0x2848, 0x9188, 0x0040, 0x9291, 0x0000,
+	0x0c88, 0xa803, 0x0000, 0x2071, 0x1800, 0x74ba, 0x74be, 0x0005,
+	0x00e6, 0x0016, 0x9984, 0xfc00, 0x01e8, 0x908c, 0xf800, 0x1168,
+	0x9982, 0x0400, 0x02b8, 0x9982, 0x0440, 0x0278, 0x9982, 0x0534,
+	0x0288, 0x9982, 0x0800, 0x1270, 0x0040, 0x9982, 0x0800, 0x0250,
+	0x2071, 0x188e, 0x7010, 0x9902, 0x1228, 0x9085, 0x0001, 0x001e,
+	0x00ee, 0x0005, 0x9006, 0x0cd8, 0x00e6, 0x2071, 0x19f7, 0x7007,
+	0x0000, 0x9006, 0x701e, 0x7022, 0x7002, 0x2071, 0x0000, 0x7010,
+	0x9085, 0x8044, 0x7012, 0x2071, 0x0080, 0x9006, 0x20a9, 0x0040,
+	0x7022, 0x1f04, 0x10f0, 0x702b, 0x0020, 0x00ee, 0x0005, 0x0126,
+	0x2091, 0x8000, 0x00e6, 0xa073, 0x0000, 0x2071, 0x19f7, 0x701c,
+	0x9088, 0x1a01, 0x280a, 0x8000, 0x9084, 0x003f, 0x701e, 0x7120,
+	0x9106, 0x090c, 0x0dc3, 0x7004, 0x9005, 0x1128, 0x00f6, 0x2079,
+	0x0080, 0x00a9, 0x00fe, 0x00ee, 0x012e, 0x0005, 0x0126, 0x2091,
+	0x8000, 0x00e6, 0x2071, 0x19f7, 0x7004, 0x9005, 0x1128, 0x00f6,
+	0x2079, 0x0080, 0x0021, 0x00fe, 0x00ee, 0x012e, 0x0005, 0x7004,
+	0x9086, 0x0000, 0x1110, 0x7007, 0x0006, 0x7000, 0x0002, 0x1139,
+	0x1137, 0x1137, 0x1137, 0x12b3, 0x12b3, 0x12b3, 0x12b3, 0x080c,
+	0x0dc3, 0x701c, 0x7120, 0x9106, 0x1148, 0x792c, 0x9184, 0x0001,
+	0x1120, 0xd1fc, 0x1110, 0x7007, 0x0000, 0x0005, 0x0096, 0x9180,
+	0x1a01, 0x2004, 0x700a, 0x2048, 0x8108, 0x918c, 0x003f, 0x7122,
+	0x782b, 0x0026, 0xa890, 0x7802, 0xa894, 0x7806, 0xa898, 0x780a,
+	0xa89c, 0x780e, 0xa87c, 0x700e, 0xa874, 0x7016, 0xa878, 0x701a,
+	0xa86c, 0x009e, 0xd084, 0x0120, 0x7007, 0x0001, 0x0029, 0x0005,
+	0x7007, 0x0002, 0x00b1, 0x0005, 0x0016, 0x0026, 0x710c, 0x2011,
+	0x0040, 0x9182, 0x0040, 0x1210, 0x2110, 0x9006, 0x700e, 0x7212,
+	0x8203, 0x7812, 0x782b, 0x0020, 0x782b, 0x0041, 0x002e, 0x001e,
+	0x0005, 0x0016, 0x0026, 0x0136, 0x0146, 0x0156, 0x7014, 0x20e0,
+	0x7018, 0x2098, 0x20e9, 0x0000, 0x20a1, 0x0088, 0x782b, 0x0026,
+	0x710c, 0x2011, 0x0040, 0x9182, 0x0040, 0x1210, 0x2110, 0x9006,
+	0x700e, 0x22a8, 0x4006, 0x8203, 0x7812, 0x782b, 0x0020, 0x3300,
+	0x701a, 0x782b, 0x0001, 0x015e, 0x014e, 0x013e, 0x002e, 0x001e,
+	0x0005, 0x0016, 0x2009, 0x19f7, 0x2104, 0xc095, 0x200a, 0x080c,
+	0x1116, 0x001e, 0x0005, 0x0016, 0x00e6, 0x2071, 0x19f7, 0x00f6,
+	0x2079, 0x0080, 0x792c, 0xd1bc, 0x190c, 0x0dbc, 0x782b, 0x0002,
+	0xd1fc, 0x0120, 0x918c, 0x0700, 0x7004, 0x0023, 0x00fe, 0x00ee,
+	0x001e, 0x0005, 0x1127, 0x11d1, 0x1205, 0x0dc3, 0x0dc3, 0x12bf,
+	0x0dc3, 0x918c, 0x0700, 0x1550, 0x0136, 0x0146, 0x0156, 0x7014,
+	0x20e8, 0x7018, 0x20a0, 0x20e1, 0x0000, 0x2099, 0x0088, 0x782b,
+	0x0040, 0x7010, 0x20a8, 0x4005, 0x3400, 0x701a, 0x015e, 0x014e,
+	0x013e, 0x700c, 0x9005, 0x0578, 0x7800, 0x7802, 0x7804, 0x7806,
+	0x080c, 0x116c, 0x0005, 0x7008, 0x0096, 0x2048, 0xa873, 0x0100,
+	0x009e, 0x7007, 0x0000, 0x080c, 0x1127, 0x0005, 0x7008, 0x0096,
+	0x2048, 0xa873, 0x0200, 0x009e, 0x0ca0, 0x918c, 0x0700, 0x1150,
+	0x700c, 0x9005, 0x0180, 0x7800, 0x7802, 0x7804, 0x7806, 0x080c,
+	0x1181, 0x0005, 0x7008, 0x0096, 0x2048, 0xa873, 0x0200, 0x009e,
+	0x7007, 0x0000, 0x0080, 0x0096, 0x7008, 0x2048, 0x7800, 0xa892,
+	0x7804, 0xa896, 0x7808, 0xa89a, 0x780c, 0xa89e, 0xa873, 0x0100,
+	0x009e, 0x7007, 0x0000, 0x0096, 0x00d6, 0x7008, 0x2048, 0x2001,
+	0x18ba, 0x2004, 0x9906, 0x1128, 0xa8a0, 0x080f, 0x00de, 0x009e,
+	0x00a0, 0x00de, 0x009e, 0x0096, 0x00d6, 0x7008, 0x2048, 0x0081,
+	0x0150, 0xa8a0, 0x0086, 0x2940, 0x080f, 0x008e, 0x00de, 0x009e,
+	0x080c, 0x1116, 0x0005, 0x00de, 0x009e, 0x080c, 0x1116, 0x0005,
+	0xa8ac, 0xd08c, 0x0005, 0x0096, 0xa0a4, 0x904d, 0x090c, 0x0dc3,
+	0xa070, 0x908e, 0x0100, 0x0130, 0xa87f, 0x0030, 0xa887, 0x0000,
+	0xa89b, 0x4002, 0xa898, 0x908e, 0x006b, 0x090c, 0x4740, 0x080c,
+	0x6bf5, 0xa0a3, 0x0000, 0xa0a7, 0x0000, 0x2848, 0x080c, 0x103f,
+	0x009e, 0x0005, 0x00a6, 0xa0a4, 0x904d, 0x090c, 0x0dc3, 0xa070,
+	0x908e, 0x0100, 0x0128, 0xa87f, 0x0001, 0xa887, 0x0000, 0x00c0,
+	0xa80c, 0x2050, 0xb004, 0x9005, 0x0198, 0xa80e, 0x2050, 0x8006,
+	0x8006, 0x8007, 0x908c, 0x003f, 0x9084, 0xffc0, 0x9080, 0x0002,
+	0xa07a, 0xa176, 0xb000, 0xa07e, 0x2810, 0x080c, 0x10f7, 0x00c8,
+	0xa980, 0xa898, 0x0016, 0x0006, 0x080c, 0x6bf5, 0x000e, 0x001e,
+	0xd1a4, 0x0128, 0x00c6, 0x2060, 0x080c, 0xa39d, 0x00ce, 0x7008,
+	0x2048, 0xa8a3, 0x0000, 0xa8a7, 0x0000, 0x080c, 0x103f, 0x080c,
+	0x1116, 0x00ae, 0x0005, 0x0126, 0x2091, 0x8000, 0x782b, 0x1001,
+	0x7007, 0x0005, 0x7000, 0xc094, 0x7002, 0x012e, 0x0005, 0x7007,
+	0x0000, 0x080c, 0x1127, 0x0005, 0x0126, 0x2091, 0x2200, 0x2079,
+	0x0300, 0x2071, 0x1a41, 0x7003, 0x0000, 0x78bf, 0x00f6, 0x781b,
+	0x4800, 0x00c1, 0x7803, 0x0003, 0x780f, 0x0000, 0x20a9, 0x0266,
+	0x2061, 0xe114, 0x2c0d, 0x7912, 0xe104, 0x9ce0, 0x0002, 0x7916,
+	0x1f04, 0x12da, 0x7807, 0x0007, 0x7803, 0x0000, 0x7803, 0x0001,
+	0x012e, 0x0005, 0x00c6, 0x7803, 0x0000, 0x7808, 0xd09c, 0x0110,
+	0x7820, 0x0cd8, 0x2001, 0x1a42, 0x2003, 0x0000, 0x78ab, 0x0004,
+	0x78ac, 0xd0ac, 0x1de8, 0x78ab, 0x0002, 0x7807, 0x0007, 0x7827,
+	0x0030, 0x782b, 0x0400, 0x7827, 0x0031, 0x782b, 0x1a64, 0x781f,
+	0xff00, 0x781b, 0xb700, 0x2001, 0x0200, 0x2004, 0xd0dc, 0x0110,
+	0x781f, 0x0303, 0x2061, 0x1a64, 0x602f, 0x1cd0, 0x2001, 0x1819,
+	0x2004, 0x9082, 0x1cd0, 0x6032, 0x603b, 0x1fb8, 0x2001, 0x3268,
+	0xd0fc, 0x190c, 0x0dc3, 0x2001, 0x1810, 0x2004, 0xd0c4, 0x1128,
+	0x2001, 0x0003, 0x2004, 0xd0d4, 0x1118, 0x783f, 0x3268, 0x0020,
+	0x9084, 0xc000, 0x783f, 0xb268, 0x00ce, 0x0005, 0x0126, 0x2091,
+	0x2200, 0x7908, 0x9184, 0x0030, 0x190c, 0x0dbc, 0xd19c, 0x0158,
+	0x7820, 0x908c, 0xf000, 0x15f0, 0x908a, 0x0024, 0x1a0c, 0x0dc3,
+	0x0023, 0x012e, 0x0005, 0x012e, 0x0005, 0x1372, 0x1372, 0x1389,
+	0x138e, 0x1392, 0x1397, 0x13bf, 0x13c3, 0x13d1, 0x13d5, 0x1372,
+	0x1467, 0x146b, 0x14db, 0x1372, 0x1372, 0x1372, 0x1372, 0x1372,
+	0x1372, 0x1372, 0x1372, 0x1372, 0x1372, 0x1372, 0x1372, 0x1372,
+	0x1399, 0x1372, 0x1372, 0x1372, 0x1372, 0x1372, 0x1372, 0x1376,
+	0x1374, 0x1372, 0x080c, 0x0dc3, 0x080c, 0x0dbc, 0x080c, 0x14e2,
+	0x2009, 0x1a59, 0x2104, 0x8000, 0x200a, 0x080c, 0x7dcd, 0x080c,
+	0x19e3, 0x0005, 0x2009, 0x0048, 0x2060, 0x080c, 0xa419, 0x012e,
+	0x0005, 0x7004, 0xc085, 0xc0b5, 0x7006, 0x0005, 0x7004, 0xc085,
+	0x7006, 0x0005, 0x080c, 0x14e2, 0x080c, 0x164b, 0x0005, 0x080c,
+	0x0dc3, 0x080c, 0x14e2, 0x2060, 0x6014, 0x0096, 0x2048, 0xa83b,
+	0xffff, 0x009e, 0x2009, 0x0048, 0x080c, 0xa419, 0x2001, 0x015d,
+	0x2003, 0x0000, 0x2009, 0x03e8, 0x8109, 0x0160, 0x2001, 0x0201,
+	0x2004, 0x9005, 0x0dc8, 0x2001, 0x0218, 0x2004, 0xd0ec, 0x1110,
+	0x080c, 0x14e7, 0x2001, 0x0307, 0x2003, 0x8000, 0x0005, 0x7004,
+	0xc095, 0x7006, 0x0005, 0x080c, 0x14e2, 0x2060, 0x6014, 0x0096,
+	0x2048, 0xa83b, 0xffff, 0x009e, 0x2009, 0x0048, 0x080c, 0xa419,
+	0x0005, 0x080c, 0x14e2, 0x080c, 0x0dc3, 0x080c, 0x14e2, 0x080c,
+	0x1452, 0x7827, 0x0018, 0x79ac, 0xd1dc, 0x0540, 0x7827, 0x0015,
+	0x7828, 0x782b, 0x0000, 0x9065, 0x0138, 0x2001, 0x020d, 0x2003,
+	0x0050, 0x2003, 0x0020, 0x0400, 0x7004, 0x9005, 0x1180, 0x78ab,
+	0x0004, 0x7827, 0x0018, 0x782b, 0x0000, 0xd1bc, 0x090c, 0x0dc3,
+	0x2001, 0x020d, 0x2003, 0x0050, 0x2003, 0x0020, 0x04c0, 0x78ab,
+	0x0004, 0x7803, 0x0001, 0x080c, 0x146b, 0x0005, 0x7828, 0x782b,
+	0x0000, 0x9065, 0x090c, 0x0dc3, 0x6014, 0x2048, 0x78ab, 0x0004,
+	0x918c, 0x0700, 0x01d8, 0x080c, 0x7dcd, 0x080c, 0x19e3, 0x080c,
+	0xc1cd, 0x0158, 0xa9b0, 0xa936, 0xa9b4, 0xa93a, 0xa83f, 0xffff,
+	0xa843, 0xffff, 0xa884, 0xc0bd, 0xa886, 0xa984, 0x9184, 0x0020,
+	0x1120, 0xc1ad, 0xa986, 0x080c, 0xbde5, 0x0005, 0x6010, 0x00b6,
+	0x2058, 0xb800, 0x00be, 0xd0bc, 0x6024, 0x190c, 0xc5b0, 0x2029,
+	0x00c8, 0x8529, 0x0128, 0x2001, 0x0201, 0x2004, 0x9005, 0x0dc8,
+	0x7dbc, 0x080c, 0xe0a1, 0xd5a4, 0x1118, 0x080c, 0x14e7, 0x0005,
+	0x080c, 0x7dcd, 0x080c, 0x19e3, 0x0005, 0x781f, 0x0300, 0x7803,
+	0x0001, 0x0005, 0x0016, 0x0066, 0x0076, 0x00f6, 0x2079, 0x0300,
+	0x7908, 0x918c, 0x0007, 0x9186, 0x0003, 0x0120, 0x2001, 0x0016,
+	0x080c, 0x1568, 0x00fe, 0x007e, 0x006e, 0x001e, 0x0005, 0x7004,
+	0xc09d, 0x7006, 0x0005, 0x7104, 0x9184, 0x0004, 0x190c, 0x0dc3,
+	0xd184, 0x11b1, 0xd19c, 0x0180, 0xc19c, 0x7106, 0x0016, 0x080c,
+	0x162e, 0x001e, 0x0148, 0x2001, 0x020d, 0x2003, 0x0050, 0x2003,
+	0x0020, 0x080c, 0x14e7, 0x0005, 0x81ff, 0x190c, 0x0dc3, 0x0005,
+	0x2100, 0xc184, 0xc1b4, 0x7106, 0xd0b4, 0x0016, 0x00e6, 0x1904,
+	0x14d0, 0x2071, 0x0200, 0x080c, 0x1622, 0x080c, 0x162e, 0x05a8,
+	0x6014, 0x9005, 0x05a8, 0x0096, 0x2048, 0xa868, 0x009e, 0x9084,
+	0x00ff, 0x908e, 0x0029, 0x0160, 0x908e, 0x0048, 0x1548, 0x601c,
+	0xd084, 0x11d8, 0x00f6, 0x2c78, 0x080c, 0x16c1, 0x00fe, 0x00a8,
+	0x00f6, 0x2c78, 0x080c, 0x1805, 0x00fe, 0x2009, 0x01f4, 0x8109,
+	0x0160, 0x2001, 0x0201, 0x2004, 0x9005, 0x0dc8, 0x2001, 0x0218,
+	0x2004, 0xd0ec, 0x1110, 0x0419, 0x0040, 0x2001, 0x020d, 0x2003,
+	0x0020, 0x080c, 0x12ea, 0x7803, 0x0001, 0x00ee, 0x001e, 0x0005,
+	0x080c, 0x162e, 0x0dd0, 0x2001, 0x020d, 0x2003, 0x0050, 0x2003,
+	0x0020, 0x0069, 0x0c90, 0x0031, 0x2060, 0x2009, 0x0053, 0x080c,
+	0xa419, 0x0005, 0x7808, 0xd09c, 0x0de8, 0x7820, 0x0005, 0x080c,
+	0x1452, 0x00d6, 0x2069, 0x0200, 0x2009, 0x01f4, 0x8109, 0x0520,
+	0x6804, 0x9005, 0x0dd8, 0x2001, 0x015d, 0x2003, 0x0000, 0x79bc,
+	0xd1a4, 0x1578, 0x79b8, 0x918c, 0x0fff, 0x0180, 0x9182, 0x0841,
+	0x1268, 0x9188, 0x0007, 0x918c, 0x0ff8, 0x810c, 0x810c, 0x810c,
+	0x080c, 0x1554, 0x6827, 0x0001, 0x8109, 0x1dd0, 0x080c, 0x1554,
+	0x6827, 0x0002, 0x080c, 0x1554, 0x6804, 0x9005, 0x1170, 0x682c,
+	0xd0e4, 0x1540, 0x691c, 0x9184, 0x0014, 0x0120, 0x6830, 0x9084,
+	0x9554, 0x15b9, 0x6804, 0x9005, 0x0da8, 0x79b8, 0xd1ec, 0x1130,
+	0x0870, 0x080c, 0x7dcd, 0x080c, 0x19e3, 0x0090, 0x7827, 0x0015,
+	0x782b, 0x0000, 0x7827, 0x0018, 0x782b, 0x0000, 0x2001, 0x020d,
+	0x2003, 0x0020, 0x2001, 0x0307, 0x2003, 0x0300, 0x7803, 0x0001,
+	0x00de, 0x0005, 0x682c, 0x9084, 0x5400, 0x9086, 0x5400, 0x0d30,
+	0x7827, 0x0015, 0x782b, 0x0000, 0x7803, 0x0001, 0x6800, 0x9085,
+	0x1800, 0x6802, 0x00de, 0x0005, 0x6824, 0x9084, 0x0003, 0x1de0,
+	0x0005, 0x2079, 0x0001, 0x000e, 0x00f6, 0x0804, 0x0dc5, 0x2001,
+	0x0030, 0x2c08, 0x621c, 0x0021, 0x7830, 0x9086, 0x0041, 0x0005,
+	0x00f6, 0x2079, 0x0300, 0x0006, 0x7808, 0xd09c, 0x0140, 0x0016,
+	0x0026, 0x00c6, 0x080c, 0x1336, 0x00ce, 0x002e, 0x001e, 0x000e,
+	0x0006, 0x7832, 0x7936, 0x7a3a, 0x781b, 0x8080, 0x0059, 0x1118,
+	0x000e, 0x00fe, 0x0005, 0x000e, 0x792c, 0x3900, 0x8000, 0x2004,
+	0x080c, 0x0dc3, 0x2009, 0x180c, 0x2104, 0xc0f4, 0x200a, 0x2009,
+	0xff00, 0x8109, 0x0904, 0x15e6, 0x7a18, 0x9284, 0x0030, 0x0904,
+	0x15e1, 0x9284, 0x0048, 0x9086, 0x0008, 0x1904, 0x15e1, 0x2001,
+	0x0109, 0x2004, 0xd08c, 0x01f0, 0x0006, 0x01c6, 0x01d6, 0x0136,
+	0x0146, 0x0156, 0x0126, 0x2091, 0x2800, 0x00f6, 0x0026, 0x0016,
+	0x2009, 0x1a5c, 0x2104, 0x8000, 0x0208, 0x200a, 0x080c, 0x885a,
+	0x001e, 0x002e, 0x00fe, 0x012e, 0x015e, 0x014e, 0x013e, 0x01de,
+	0x01ce, 0x000e, 0x2001, 0x009b, 0x2004, 0xd0fc, 0x01d0, 0x0006,
+	0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x00f6, 0x0016,
+	0x2009, 0x1a5d, 0x2104, 0x8000, 0x0208, 0x200a, 0x080c, 0x1ddc,
+	0x001e, 0x00fe, 0x015e, 0x014e, 0x013e, 0x01de, 0x01ce, 0x012e,
+	0x000e, 0x7818, 0xd0bc, 0x1904, 0x1591, 0x0005, 0x2001, 0x180c,
+	0x2004, 0xd0f4, 0x1528, 0x7a18, 0x9284, 0x0030, 0x0508, 0x9284,
+	0x0048, 0x9086, 0x0008, 0x11e0, 0x2001, 0x19d3, 0x2004, 0x9005,
+	0x01b8, 0x2001, 0x1a44, 0x2004, 0x9086, 0x0000, 0x0188, 0x2009,
+	0x1a5b, 0x2104, 0x8000, 0x0208, 0x200a, 0x080c, 0x994f, 0x2009,
+	0x180c, 0x2104, 0xc0f5, 0x200a, 0x2009, 0xff00, 0x0804, 0x1591,
+	0x9085, 0x0001, 0x0005, 0x7832, 0x7936, 0x7a3a, 0x781b, 0x8080,
+	0x080c, 0x158a, 0x1108, 0x0005, 0x792c, 0x3900, 0x8000, 0x2004,
+	0x080c, 0x0dc3, 0x7037, 0x0001, 0x7150, 0x7037, 0x0002, 0x7050,
+	0x2060, 0xd1bc, 0x1110, 0x7054, 0x2060, 0x0005, 0x0006, 0x0046,
+	0x00e6, 0x2071, 0x0200, 0x7037, 0x0002, 0x7058, 0x9084, 0xff00,
+	0x8007, 0x9086, 0x00bc, 0x1158, 0x2021, 0x1a5a, 0x2404, 0x8000,
+	0x0208, 0x2022, 0x080c, 0x7dcd, 0x080c, 0x19e3, 0x9006, 0x00ee,
+	0x004e, 0x000e, 0x0005, 0x0c11, 0x1108, 0x0005, 0x00e6, 0x0016,
+	0x2071, 0x0200, 0x0879, 0x6120, 0x9186, 0x0000, 0x0904, 0x16b6,
+	0x9186, 0x0002, 0x0904, 0x16b6, 0x6124, 0xd1dc, 0x01f8, 0x701c,
+	0xd08c, 0x0904, 0x16b6, 0x7017, 0x0000, 0x2001, 0x0264, 0x2004,
+	0xd0bc, 0x0904, 0x16b6, 0x2001, 0x0268, 0x00c6, 0x2064, 0x6104,
+	0x6038, 0x00ce, 0x918e, 0x0039, 0x1904, 0x16b6, 0x9c06, 0x15f0,
+	0x0126, 0x2091, 0x2600, 0x080c, 0x7d14, 0x012e, 0x7358, 0x745c,
+	0x6014, 0x905d, 0x0598, 0x2b48, 0x6010, 0x00b6, 0x2058, 0xb800,
+	0x00be, 0xd0bc, 0x190c, 0xc58b, 0xab42, 0xac3e, 0x2001, 0x1880,
+	0x2004, 0xd0b4, 0x1170, 0x601c, 0xd0e4, 0x1158, 0x6010, 0x00b6,
+	0x2058, 0xb800, 0x00be, 0xd0bc, 0x1120, 0xa83b, 0x7fff, 0xa837,
+	0xffff, 0x080c, 0x1fd8, 0x1190, 0x080c, 0x1862, 0x2a00, 0xa816,
 	0x0130, 0x2800, 0xa80e, 0x2c05, 0xa80a, 0x2c00, 0xa812, 0x7037,
 	0x0020, 0x781f, 0x0300, 0x001e, 0x00ee, 0x0005, 0x7037, 0x0050,
-	0x7037, 0x0020, 0x001e, 0x00ee, 0x080c, 0x14d2, 0x0005, 0x080c,
-	0x0dc4, 0x2001, 0x180d, 0x2004, 0xd08c, 0x190c, 0x6818, 0x2ff0,
+	0x7037, 0x0020, 0x001e, 0x00ee, 0x080c, 0x14e7, 0x0005, 0x080c,
+	0x0dc3, 0x2001, 0x180d, 0x2004, 0xd08c, 0x190c, 0x693f, 0x2ff0,
 	0x0126, 0x2091, 0x2200, 0x0016, 0x00c6, 0x3e60, 0x6014, 0x2048,
 	0x2940, 0x903e, 0x2730, 0xa868, 0x2068, 0xa81a, 0x9d84, 0x000f,
-	0x9088, 0x1f70, 0x2165, 0x0002, 0x16ab, 0x16f8, 0x16ab, 0x16ab,
-	0x16ab, 0x16da, 0x16ab, 0x16af, 0x16a4, 0x16ef, 0x16ab, 0x16ab,
-	0x16ab, 0x17b5, 0x16c3, 0x16b9, 0xa968, 0x918c, 0x00ff, 0x918e,
-	0x0048, 0x0904, 0x16ef, 0x9085, 0x0001, 0x0804, 0x17ab, 0xa880,
+	0x9088, 0x1fb8, 0x2165, 0x0002, 0x16f3, 0x1740, 0x16f3, 0x16f3,
+	0x16f3, 0x1722, 0x16f3, 0x16f7, 0x16ec, 0x1737, 0x16f3, 0x16f3,
+	0x16f3, 0x17fd, 0x170b, 0x1701, 0xa968, 0x918c, 0x00ff, 0x918e,
+	0x0048, 0x0904, 0x1737, 0x9085, 0x0001, 0x0804, 0x17f3, 0xa880,
 	0xd0bc, 0x0dc8, 0xa894, 0xa842, 0xa890, 0xa83e, 0xa88c, 0x0804,
-	0x16ff, 0xa880, 0xd0bc, 0x0d78, 0xa894, 0xa842, 0xa890, 0xa83e,
-	0xa88c, 0x0804, 0x174e, 0xa880, 0xd0bc, 0x0d28, 0xa894, 0xa842,
-	0xa890, 0xa83e, 0xa804, 0x9045, 0x090c, 0x0dc4, 0xa168, 0xa91a,
-	0x91ec, 0x000f, 0x9d80, 0x1f70, 0x2065, 0xa88c, 0xd19c, 0x1904,
-	0x174e, 0x0428, 0xa880, 0xd0ac, 0x0970, 0xa804, 0x9045, 0x090c,
-	0x0dc4, 0xa168, 0xa91a, 0x91ec, 0x000f, 0x9d80, 0x1f70, 0x2065,
-	0x9006, 0xa842, 0xa83e, 0xd19c, 0x1904, 0x174e, 0x0080, 0xa880,
-	0xd0ac, 0x0904, 0x16ab, 0x9006, 0xa842, 0xa83e, 0x0804, 0x174e,
-	0xa880, 0xd0ac, 0x0904, 0x16ab, 0x9006, 0xa842, 0xa83e, 0x2c05,
-	0x908a, 0x0037, 0x1a0c, 0x0dc4, 0x9082, 0x001c, 0x0002, 0x1722,
-	0x1722, 0x1724, 0x1722, 0x1722, 0x1722, 0x172a, 0x1722, 0x1722,
-	0x1722, 0x1730, 0x1722, 0x1722, 0x1722, 0x1736, 0x1722, 0x1722,
-	0x1722, 0x173c, 0x1722, 0x1722, 0x1722, 0x1742, 0x1722, 0x1722,
-	0x1722, 0x1748, 0x080c, 0x0dc4, 0xa578, 0xa47c, 0xa380, 0xa284,
-	0x0804, 0x1793, 0xa588, 0xa48c, 0xa390, 0xa294, 0x0804, 0x1793,
-	0xa598, 0xa49c, 0xa3a0, 0xa2a4, 0x0804, 0x1793, 0xa5a8, 0xa4ac,
-	0xa3b0, 0xa2b4, 0x0804, 0x1793, 0xa5b8, 0xa4bc, 0xa3c0, 0xa2c4,
-	0x0804, 0x1793, 0xa5c8, 0xa4cc, 0xa3d0, 0xa2d4, 0x0804, 0x1793,
-	0xa5d8, 0xa4dc, 0xa3e0, 0xa2e4, 0x0804, 0x1793, 0x2c05, 0x908a,
-	0x0035, 0x1a0c, 0x0dc4, 0x9082, 0x001c, 0x0002, 0x1771, 0x176f,
-	0x176f, 0x176f, 0x176f, 0x176f, 0x1778, 0x176f, 0x176f, 0x176f,
-	0x176f, 0x176f, 0x177f, 0x176f, 0x176f, 0x176f, 0x176f, 0x176f,
-	0x1786, 0x176f, 0x176f, 0x176f, 0x176f, 0x176f, 0x178d, 0x080c,
-	0x0dc4, 0xa570, 0xa474, 0xa778, 0xa67c, 0xa380, 0xa284, 0x00d8,
+	0x1747, 0xa880, 0xd0bc, 0x0d78, 0xa894, 0xa842, 0xa890, 0xa83e,
+	0xa88c, 0x0804, 0x1796, 0xa880, 0xd0bc, 0x0d28, 0xa894, 0xa842,
+	0xa890, 0xa83e, 0xa804, 0x9045, 0x090c, 0x0dc3, 0xa168, 0xa91a,
+	0x91ec, 0x000f, 0x9d80, 0x1fb8, 0x2065, 0xa88c, 0xd19c, 0x1904,
+	0x1796, 0x0428, 0xa880, 0xd0ac, 0x0970, 0xa804, 0x9045, 0x090c,
+	0x0dc3, 0xa168, 0xa91a, 0x91ec, 0x000f, 0x9d80, 0x1fb8, 0x2065,
+	0x9006, 0xa842, 0xa83e, 0xd19c, 0x1904, 0x1796, 0x0080, 0xa880,
+	0xd0ac, 0x0904, 0x16f3, 0x9006, 0xa842, 0xa83e, 0x0804, 0x1796,
+	0xa880, 0xd0ac, 0x0904, 0x16f3, 0x9006, 0xa842, 0xa83e, 0x2c05,
+	0x908a, 0x0037, 0x1a0c, 0x0dc3, 0x9082, 0x001c, 0x0002, 0x176a,
+	0x176a, 0x176c, 0x176a, 0x176a, 0x176a, 0x1772, 0x176a, 0x176a,
+	0x176a, 0x1778, 0x176a, 0x176a, 0x176a, 0x177e, 0x176a, 0x176a,
+	0x176a, 0x1784, 0x176a, 0x176a, 0x176a, 0x178a, 0x176a, 0x176a,
+	0x176a, 0x1790, 0x080c, 0x0dc3, 0xa578, 0xa47c, 0xa380, 0xa284,
+	0x0804, 0x17db, 0xa588, 0xa48c, 0xa390, 0xa294, 0x0804, 0x17db,
+	0xa598, 0xa49c, 0xa3a0, 0xa2a4, 0x0804, 0x17db, 0xa5a8, 0xa4ac,
+	0xa3b0, 0xa2b4, 0x0804, 0x17db, 0xa5b8, 0xa4bc, 0xa3c0, 0xa2c4,
+	0x0804, 0x17db, 0xa5c8, 0xa4cc, 0xa3d0, 0xa2d4, 0x0804, 0x17db,
+	0xa5d8, 0xa4dc, 0xa3e0, 0xa2e4, 0x0804, 0x17db, 0x2c05, 0x908a,
+	0x0035, 0x1a0c, 0x0dc3, 0x9082, 0x001c, 0x0002, 0x17b9, 0x17b7,
+	0x17b7, 0x17b7, 0x17b7, 0x17b7, 0x17c0, 0x17b7, 0x17b7, 0x17b7,
+	0x17b7, 0x17b7, 0x17c7, 0x17b7, 0x17b7, 0x17b7, 0x17b7, 0x17b7,
+	0x17ce, 0x17b7, 0x17b7, 0x17b7, 0x17b7, 0x17b7, 0x17d5, 0x080c,
+	0x0dc3, 0xa570, 0xa474, 0xa778, 0xa67c, 0xa380, 0xa284, 0x00d8,
 	0xa588, 0xa48c, 0xa790, 0xa694, 0xa398, 0xa29c, 0x00a0, 0xa5a0,
 	0xa4a4, 0xa7a8, 0xa6ac, 0xa3b0, 0xa2b4, 0x0068, 0xa5b8, 0xa4bc,
 	0xa7c0, 0xa6c4, 0xa3c8, 0xa2cc, 0x0030, 0xa5d0, 0xa4d4, 0xa7d8,
@@ -538,120 +547,120 @@
 	0xae2a, 0xa98c, 0x8c60, 0x2c1d, 0xa8b0, 0xaab4, 0xa836, 0xaa3a,
 	0x8109, 0xa916, 0x1160, 0x3e60, 0x601c, 0xc085, 0x601e, 0xa880,
 	0xc0dd, 0xa882, 0x9006, 0x00ce, 0x001e, 0x012e, 0x0005, 0x2800,
-	0xa80e, 0xab0a, 0x2c00, 0xa812, 0x0c70, 0x0804, 0x16ab, 0x2001,
-	0x180d, 0x2004, 0xd08c, 0x190c, 0x6818, 0x2ff0, 0x0126, 0x2091,
+	0xa80e, 0xab0a, 0x2c00, 0xa812, 0x0c70, 0x0804, 0x16f3, 0x2001,
+	0x180d, 0x2004, 0xd08c, 0x190c, 0x693f, 0x2ff0, 0x0126, 0x2091,
 	0x2200, 0x0016, 0x00c6, 0x3e60, 0x6014, 0x2048, 0x2940, 0xa80e,
-	0x2061, 0x1f6b, 0xa813, 0x1f6b, 0x2c05, 0xa80a, 0xa968, 0xa91a,
-	0xa880, 0xd0ac, 0x090c, 0x0dc4, 0x9006, 0xa842, 0xa83e, 0x2c05,
-	0x908a, 0x0035, 0x1a0c, 0x0dc4, 0xadd0, 0xacd4, 0xafd8, 0xaedc,
+	0x2061, 0x1fb3, 0xa813, 0x1fb3, 0x2c05, 0xa80a, 0xa968, 0xa91a,
+	0xa880, 0xd0ac, 0x090c, 0x0dc3, 0x9006, 0xa842, 0xa83e, 0x2c05,
+	0x908a, 0x0035, 0x1a0c, 0x0dc3, 0xadd0, 0xacd4, 0xafd8, 0xaedc,
 	0xabe0, 0xaae4, 0xab2e, 0xaa32, 0xad1e, 0xac22, 0xaf26, 0xae2a,
 	0xa8b0, 0xaab4, 0xa836, 0xaa3a, 0xa98c, 0xa868, 0x9084, 0x00ff,
 	0x9086, 0x0008, 0x1120, 0x8109, 0xa916, 0x0128, 0x0080, 0x918a,
 	0x0002, 0xa916, 0x1160, 0x3e60, 0x601c, 0xc085, 0x601e, 0xa880,
 	0xc0dd, 0xa882, 0x9006, 0x00ce, 0x001e, 0x012e, 0x0005, 0xa804,
-	0x9045, 0x090c, 0x0dc4, 0xa80e, 0xa068, 0xa81a, 0x9084, 0x000f,
-	0x9080, 0x1f70, 0x2015, 0x82ff, 0x090c, 0x0dc4, 0xaa12, 0x2205,
+	0x9045, 0x090c, 0x0dc3, 0xa80e, 0xa068, 0xa81a, 0x9084, 0x000f,
+	0x9080, 0x1fb8, 0x2015, 0x82ff, 0x090c, 0x0dc3, 0xaa12, 0x2205,
 	0xa80a, 0x0c08, 0x903e, 0x2730, 0xa884, 0xd0fc, 0x1190, 0x2d00,
-	0x0002, 0x190f, 0x1871, 0x1871, 0x190f, 0x190f, 0x1909, 0x190f,
-	0x1871, 0x18c0, 0x18c0, 0x18c0, 0x190f, 0x190f, 0x190f, 0x1906,
-	0x18c0, 0xc0fc, 0xa886, 0xab2c, 0xaa30, 0xad1c, 0xac20, 0xdd9c,
-	0x0904, 0x1911, 0x2c05, 0x908a, 0x0035, 0x1a0c, 0x0dc4, 0x9082,
-	0x001c, 0x0002, 0x185d, 0x185b, 0x185b, 0x185b, 0x185b, 0x185b,
-	0x1861, 0x185b, 0x185b, 0x185b, 0x185b, 0x185b, 0x1865, 0x185b,
-	0x185b, 0x185b, 0x185b, 0x185b, 0x1869, 0x185b, 0x185b, 0x185b,
-	0x185b, 0x185b, 0x186d, 0x080c, 0x0dc4, 0xa778, 0xa67c, 0x0804,
-	0x1911, 0xa790, 0xa694, 0x0804, 0x1911, 0xa7a8, 0xa6ac, 0x0804,
-	0x1911, 0xa7c0, 0xa6c4, 0x0804, 0x1911, 0xa7d8, 0xa6dc, 0x0804,
-	0x1911, 0x2c05, 0x908a, 0x0037, 0x1a0c, 0x0dc4, 0x9082, 0x001c,
-	0x0002, 0x1894, 0x1894, 0x1896, 0x1894, 0x1894, 0x1894, 0x189c,
-	0x1894, 0x1894, 0x1894, 0x18a2, 0x1894, 0x1894, 0x1894, 0x18a8,
-	0x1894, 0x1894, 0x1894, 0x18ae, 0x1894, 0x1894, 0x1894, 0x18b4,
-	0x1894, 0x1894, 0x1894, 0x18ba, 0x080c, 0x0dc4, 0xa578, 0xa47c,
-	0xa380, 0xa284, 0x0804, 0x1911, 0xa588, 0xa48c, 0xa390, 0xa294,
-	0x0804, 0x1911, 0xa598, 0xa49c, 0xa3a0, 0xa2a4, 0x0804, 0x1911,
-	0xa5a8, 0xa4ac, 0xa3b0, 0xa2b4, 0x0804, 0x1911, 0xa5b8, 0xa4bc,
-	0xa3c0, 0xa2c4, 0x0804, 0x1911, 0xa5c8, 0xa4cc, 0xa3d0, 0xa2d4,
-	0x0804, 0x1911, 0xa5d8, 0xa4dc, 0xa3e0, 0xa2e4, 0x0804, 0x1911,
-	0x2c05, 0x908a, 0x0035, 0x1a0c, 0x0dc4, 0x9082, 0x001c, 0x0002,
-	0x18e3, 0x18e1, 0x18e1, 0x18e1, 0x18e1, 0x18e1, 0x18ea, 0x18e1,
-	0x18e1, 0x18e1, 0x18e1, 0x18e1, 0x18f1, 0x18e1, 0x18e1, 0x18e1,
-	0x18e1, 0x18e1, 0x18f8, 0x18e1, 0x18e1, 0x18e1, 0x18e1, 0x18e1,
-	0x18ff, 0x080c, 0x0dc4, 0xa570, 0xa474, 0xa778, 0xa67c, 0xa380,
+	0x0002, 0x1957, 0x18b9, 0x18b9, 0x1957, 0x1957, 0x1951, 0x1957,
+	0x18b9, 0x1908, 0x1908, 0x1908, 0x1957, 0x1957, 0x1957, 0x194e,
+	0x1908, 0xc0fc, 0xa886, 0xab2c, 0xaa30, 0xad1c, 0xac20, 0xdd9c,
+	0x0904, 0x1959, 0x2c05, 0x908a, 0x0035, 0x1a0c, 0x0dc3, 0x9082,
+	0x001c, 0x0002, 0x18a5, 0x18a3, 0x18a3, 0x18a3, 0x18a3, 0x18a3,
+	0x18a9, 0x18a3, 0x18a3, 0x18a3, 0x18a3, 0x18a3, 0x18ad, 0x18a3,
+	0x18a3, 0x18a3, 0x18a3, 0x18a3, 0x18b1, 0x18a3, 0x18a3, 0x18a3,
+	0x18a3, 0x18a3, 0x18b5, 0x080c, 0x0dc3, 0xa778, 0xa67c, 0x0804,
+	0x1959, 0xa790, 0xa694, 0x0804, 0x1959, 0xa7a8, 0xa6ac, 0x0804,
+	0x1959, 0xa7c0, 0xa6c4, 0x0804, 0x1959, 0xa7d8, 0xa6dc, 0x0804,
+	0x1959, 0x2c05, 0x908a, 0x0037, 0x1a0c, 0x0dc3, 0x9082, 0x001c,
+	0x0002, 0x18dc, 0x18dc, 0x18de, 0x18dc, 0x18dc, 0x18dc, 0x18e4,
+	0x18dc, 0x18dc, 0x18dc, 0x18ea, 0x18dc, 0x18dc, 0x18dc, 0x18f0,
+	0x18dc, 0x18dc, 0x18dc, 0x18f6, 0x18dc, 0x18dc, 0x18dc, 0x18fc,
+	0x18dc, 0x18dc, 0x18dc, 0x1902, 0x080c, 0x0dc3, 0xa578, 0xa47c,
+	0xa380, 0xa284, 0x0804, 0x1959, 0xa588, 0xa48c, 0xa390, 0xa294,
+	0x0804, 0x1959, 0xa598, 0xa49c, 0xa3a0, 0xa2a4, 0x0804, 0x1959,
+	0xa5a8, 0xa4ac, 0xa3b0, 0xa2b4, 0x0804, 0x1959, 0xa5b8, 0xa4bc,
+	0xa3c0, 0xa2c4, 0x0804, 0x1959, 0xa5c8, 0xa4cc, 0xa3d0, 0xa2d4,
+	0x0804, 0x1959, 0xa5d8, 0xa4dc, 0xa3e0, 0xa2e4, 0x0804, 0x1959,
+	0x2c05, 0x908a, 0x0035, 0x1a0c, 0x0dc3, 0x9082, 0x001c, 0x0002,
+	0x192b, 0x1929, 0x1929, 0x1929, 0x1929, 0x1929, 0x1932, 0x1929,
+	0x1929, 0x1929, 0x1929, 0x1929, 0x1939, 0x1929, 0x1929, 0x1929,
+	0x1929, 0x1929, 0x1940, 0x1929, 0x1929, 0x1929, 0x1929, 0x1929,
+	0x1947, 0x080c, 0x0dc3, 0xa570, 0xa474, 0xa778, 0xa67c, 0xa380,
 	0xa284, 0x0438, 0xa588, 0xa48c, 0xa790, 0xa694, 0xa398, 0xa29c,
 	0x0400, 0xa5a0, 0xa4a4, 0xa7a8, 0xa6ac, 0xa3b0, 0xa2b4, 0x00c8,
 	0xa5b8, 0xa4bc, 0xa7c0, 0xa6c4, 0xa3c8, 0xa2cc, 0x0090, 0xa5d0,
 	0xa4d4, 0xa7d8, 0xa6dc, 0xa3e0, 0xa2e4, 0x0058, 0x9d86, 0x000e,
-	0x1130, 0x080c, 0x1f28, 0x1904, 0x181a, 0x900e, 0x0050, 0x080c,
-	0x0dc4, 0xab2e, 0xaa32, 0xad1e, 0xac22, 0xaf26, 0xae2a, 0x080c,
-	0x1f28, 0x0005, 0x6014, 0x2048, 0x6218, 0x82ff, 0x0158, 0x900e,
-	0x2001, 0x000a, 0x080c, 0x854b, 0x8204, 0x1110, 0x2011, 0x0002,
+	0x1130, 0x080c, 0x1f70, 0x1904, 0x1862, 0x900e, 0x0050, 0x080c,
+	0x0dc3, 0xab2e, 0xaa32, 0xad1e, 0xac22, 0xaf26, 0xae2a, 0x080c,
+	0x1f70, 0x0005, 0x6014, 0x2048, 0x6218, 0x82ff, 0x0158, 0x900e,
+	0x2001, 0x000a, 0x080c, 0x871c, 0x8204, 0x1110, 0x2011, 0x0002,
 	0x8211, 0xaa8a, 0x601b, 0x0002, 0xa878, 0x9084, 0x00ff, 0x9084,
 	0x0008, 0x0150, 0x00e9, 0x6000, 0x9086, 0x0004, 0x1120, 0x2009,
-	0x0048, 0x080c, 0x9f88, 0x0005, 0xa978, 0xd1dc, 0x1108, 0x0005,
+	0x0048, 0x080c, 0xa419, 0x0005, 0xa978, 0xd1dc, 0x1108, 0x0005,
 	0xa934, 0xa890, 0x9106, 0x1158, 0xa938, 0xa894, 0x9106, 0x1138,
-	0x601c, 0xc084, 0x601e, 0x2009, 0x0048, 0x0804, 0x9f88, 0x0005,
+	0x601c, 0xc084, 0x601e, 0x2009, 0x0048, 0x0804, 0xa419, 0x0005,
 	0x0126, 0x00c6, 0x2091, 0x2200, 0x00ce, 0x7908, 0x918c, 0x0007,
 	0x9186, 0x0000, 0x05b0, 0x9186, 0x0003, 0x0598, 0x6020, 0x6023,
 	0x0000, 0x0006, 0x2031, 0x0008, 0x00c6, 0x781f, 0x0808, 0x7808,
-	0xd09c, 0x0120, 0x080c, 0x132a, 0x8631, 0x1db8, 0x00ce, 0x781f,
-	0x0800, 0x2031, 0x0168, 0x00c6, 0x7808, 0xd09c, 0x190c, 0x132a,
-	0x00ce, 0x2001, 0x0038, 0x080c, 0x1a2b, 0x7930, 0x9186, 0x0040,
-	0x0160, 0x9186, 0x0042, 0x190c, 0x0dc4, 0x2001, 0x001e, 0x8001,
-	0x1df0, 0x8631, 0x1d40, 0x080c, 0x1a3a, 0x000e, 0x6022, 0x012e,
-	0x0005, 0x080c, 0x1a27, 0x7827, 0x0015, 0x7828, 0x9c06, 0x1db8,
+	0xd09c, 0x0120, 0x080c, 0x1336, 0x8631, 0x1db8, 0x00ce, 0x781f,
+	0x0800, 0x2031, 0x0168, 0x00c6, 0x7808, 0xd09c, 0x190c, 0x1336,
+	0x00ce, 0x2001, 0x0038, 0x080c, 0x1a73, 0x7930, 0x9186, 0x0040,
+	0x0160, 0x9186, 0x0042, 0x190c, 0x0dc3, 0x2001, 0x001e, 0x8001,
+	0x1df0, 0x8631, 0x1d40, 0x080c, 0x1a82, 0x000e, 0x6022, 0x012e,
+	0x0005, 0x080c, 0x1a6f, 0x7827, 0x0015, 0x7828, 0x9c06, 0x1db8,
 	0x782b, 0x0000, 0x0ca0, 0x00f6, 0x2079, 0x0300, 0x7803, 0x0000,
-	0x78ab, 0x0004, 0x2001, 0xf000, 0x8001, 0x090c, 0x0dc4, 0x7aac,
-	0xd2ac, 0x1dd0, 0x00fe, 0x080c, 0x72e5, 0x1188, 0x2001, 0x0138,
+	0x78ab, 0x0004, 0x2001, 0xf000, 0x8001, 0x090c, 0x0dc3, 0x7aac,
+	0xd2ac, 0x1dd0, 0x00fe, 0x080c, 0x7351, 0x1188, 0x2001, 0x0138,
 	0x2003, 0x0000, 0x2001, 0x0160, 0x2003, 0x0000, 0x2011, 0x012c,
-	0xa001, 0xa001, 0x8211, 0x1de0, 0x0059, 0x0804, 0x7393, 0x0479,
+	0xa001, 0xa001, 0x8211, 0x1de0, 0x0059, 0x0804, 0x73fe, 0x0479,
 	0x0039, 0x2001, 0x0160, 0x2502, 0x2001, 0x0138, 0x2202, 0x0005,
-	0x00e6, 0x2071, 0x0200, 0x080c, 0x2a99, 0x2009, 0x003c, 0x080c,
-	0x22b2, 0x2001, 0x015d, 0x2003, 0x0000, 0x7000, 0x9084, 0x003c,
-	0x1de0, 0x080c, 0x8245, 0x70a0, 0x70a2, 0x7098, 0x709a, 0x709c,
+	0x00e6, 0x2071, 0x0200, 0x080c, 0x2b02, 0x2009, 0x003c, 0x080c,
+	0x22fa, 0x2001, 0x015d, 0x2003, 0x0000, 0x7000, 0x9084, 0x003c,
+	0x1de0, 0x080c, 0x83a7, 0x70a0, 0x70a2, 0x7098, 0x709a, 0x709c,
 	0x709e, 0x2001, 0x020d, 0x2003, 0x0020, 0x00f6, 0x2079, 0x0300,
-	0x080c, 0x12de, 0x7803, 0x0001, 0x00fe, 0x00ee, 0x0005, 0x2001,
+	0x080c, 0x12ea, 0x7803, 0x0001, 0x00fe, 0x00ee, 0x0005, 0x2001,
 	0x0138, 0x2014, 0x2003, 0x0000, 0x2001, 0x0160, 0x202c, 0x2003,
-	0x0000, 0x080c, 0x72e5, 0x1108, 0x0005, 0x2021, 0x0260, 0x2001,
+	0x0000, 0x080c, 0x7351, 0x1108, 0x0005, 0x2021, 0x0260, 0x2001,
 	0x0141, 0x201c, 0xd3dc, 0x1168, 0x2001, 0x0109, 0x201c, 0x939c,
 	0x0048, 0x1160, 0x2001, 0x0111, 0x201c, 0x83ff, 0x1110, 0x8421,
 	0x1d70, 0x2001, 0x015d, 0x2003, 0x0000, 0x0005, 0x0046, 0x2021,
 	0x0019, 0x2003, 0x0048, 0xa001, 0xa001, 0x201c, 0x939c, 0x0048,
 	0x0120, 0x8421, 0x1db0, 0x004e, 0x0c60, 0x004e, 0x0c40, 0x601c,
-	0xc084, 0x601e, 0x0005, 0x2c08, 0x621c, 0x080c, 0x1553, 0x7930,
-	0x0005, 0x2c08, 0x621c, 0x080c, 0x15fe, 0x7930, 0x0005, 0x8001,
+	0xc084, 0x601e, 0x0005, 0x2c08, 0x621c, 0x080c, 0x1568, 0x7930,
+	0x0005, 0x2c08, 0x621c, 0x080c, 0x1613, 0x7930, 0x0005, 0x8001,
 	0x1df0, 0x0005, 0x2031, 0x0064, 0x781c, 0x9084, 0x0007, 0x0170,
-	0x2001, 0x0038, 0x0c41, 0x9186, 0x0040, 0x0904, 0x1a98, 0x2001,
-	0x001e, 0x0c69, 0x8631, 0x1d80, 0x080c, 0x0dc4, 0x781f, 0x0202,
+	0x2001, 0x0038, 0x0c41, 0x9186, 0x0040, 0x0904, 0x1ae0, 0x2001,
+	0x001e, 0x0c69, 0x8631, 0x1d80, 0x080c, 0x0dc3, 0x781f, 0x0202,
 	0x2001, 0x015d, 0x2003, 0x0000, 0x2001, 0x0dac, 0x0c01, 0x781c,
 	0xd084, 0x0110, 0x0861, 0x04e0, 0x2001, 0x0030, 0x0891, 0x9186,
 	0x0040, 0x0568, 0x781c, 0xd084, 0x1da8, 0x781f, 0x0101, 0x2001,
 	0x0014, 0x0869, 0x2001, 0x0037, 0x0821, 0x9186, 0x0040, 0x0140,
-	0x2001, 0x0030, 0x080c, 0x1a31, 0x9186, 0x0040, 0x190c, 0x0dc4,
+	0x2001, 0x0030, 0x080c, 0x1a79, 0x9186, 0x0040, 0x190c, 0x0dc3,
 	0x00d6, 0x2069, 0x0200, 0x692c, 0xd1f4, 0x1170, 0xd1c4, 0x0160,
 	0xd19c, 0x0130, 0x6800, 0x9085, 0x1800, 0x6802, 0x00de, 0x0080,
 	0x6908, 0x9184, 0x0007, 0x1db0, 0x00de, 0x781f, 0x0100, 0x791c,
-	0x9184, 0x0007, 0x090c, 0x0dc4, 0xa001, 0xa001, 0x781f, 0x0200,
+	0x9184, 0x0007, 0x090c, 0x0dc3, 0xa001, 0xa001, 0x781f, 0x0200,
 	0x0005, 0x0126, 0x2091, 0x2400, 0x2071, 0x1a44, 0x2079, 0x0090,
 	0x012e, 0x0005, 0x9280, 0x0005, 0x2004, 0x2048, 0xa980, 0xd1dc,
-	0x1904, 0x1b2d, 0xa968, 0x9184, 0x0007, 0x0002, 0x1ab6, 0x1b18,
-	0x1acd, 0x1acd, 0x1acd, 0x1b00, 0x1ae0, 0x1acf, 0x918c, 0x00ff,
-	0x9186, 0x0008, 0x1170, 0xa880, 0xd0b4, 0x0904, 0x1d4e, 0x9006,
-	0xa842, 0xa83e, 0xa98c, 0x2900, 0xa85a, 0xa813, 0x1f6b, 0x0804,
-	0x1b29, 0x9186, 0x0048, 0x0904, 0x1b18, 0x080c, 0x0dc4, 0xa880,
-	0xd0b4, 0x0904, 0x1d4e, 0xa894, 0xa842, 0xa83a, 0xa890, 0xa83e,
-	0xa836, 0xa8b0, 0xa846, 0xa8b4, 0xa84a, 0xa98c, 0x0804, 0x1b20,
+	0x1904, 0x1b75, 0xa968, 0x9184, 0x0007, 0x0002, 0x1afe, 0x1b60,
+	0x1b15, 0x1b15, 0x1b15, 0x1b48, 0x1b28, 0x1b17, 0x918c, 0x00ff,
+	0x9186, 0x0008, 0x1170, 0xa880, 0xd0b4, 0x0904, 0x1d96, 0x9006,
+	0xa842, 0xa83e, 0xa98c, 0x2900, 0xa85a, 0xa813, 0x1fb3, 0x0804,
+	0x1b71, 0x9186, 0x0048, 0x0904, 0x1b60, 0x080c, 0x0dc3, 0xa880,
+	0xd0b4, 0x0904, 0x1d96, 0xa894, 0xa842, 0xa83a, 0xa890, 0xa83e,
+	0xa836, 0xa8b0, 0xa846, 0xa8b4, 0xa84a, 0xa98c, 0x0804, 0x1b68,
 	0xa868, 0x9084, 0x00ff, 0x9086, 0x001e, 0x1d38, 0xa880, 0xd0b4,
-	0x0904, 0x1d4e, 0xa894, 0xa842, 0xa83a, 0xa890, 0xa83e, 0xa836,
+	0x0904, 0x1d96, 0xa894, 0xa842, 0xa83a, 0xa890, 0xa83e, 0xa836,
 	0xa8b0, 0xa846, 0xa8b4, 0xa84a, 0xa804, 0xa85a, 0x2040, 0xa068,
-	0x9084, 0x000f, 0x9080, 0x1f70, 0x2005, 0xa812, 0xa98c, 0x0448,
+	0x9084, 0x000f, 0x9080, 0x1fb8, 0x2005, 0xa812, 0xa98c, 0x0448,
 	0x918c, 0x00ff, 0x9186, 0x0015, 0x1540, 0xa880, 0xd0b4, 0x0904,
-	0x1d4e, 0xa804, 0xa85a, 0x2040, 0xa068, 0x9084, 0x000f, 0x9080,
-	0x1f70, 0x2005, 0xa812, 0xa98c, 0x9006, 0xa842, 0xa83e, 0x0088,
-	0xa880, 0xd0b4, 0x0904, 0x1d4e, 0xa98c, 0x9006, 0xa842, 0xa83e,
-	0x2900, 0xa85a, 0xa868, 0x9084, 0x000f, 0x9080, 0x1f70, 0x2005,
+	0x1d96, 0xa804, 0xa85a, 0x2040, 0xa068, 0x9084, 0x000f, 0x9080,
+	0x1fb8, 0x2005, 0xa812, 0xa98c, 0x9006, 0xa842, 0xa83e, 0x0088,
+	0xa880, 0xd0b4, 0x0904, 0x1d96, 0xa98c, 0x9006, 0xa842, 0xa83e,
+	0x2900, 0xa85a, 0xa868, 0x9084, 0x000f, 0x9080, 0x1fb8, 0x2005,
 	0xa812, 0xa916, 0xa880, 0xc0dd, 0xa882, 0x0005, 0x00f6, 0x2079,
-	0x0090, 0x782c, 0xd0fc, 0x190c, 0x1d94, 0x00e6, 0x2071, 0x1a44,
-	0x7000, 0x9005, 0x1904, 0x1b94, 0x7206, 0x9280, 0x0005, 0x204c,
+	0x0090, 0x782c, 0xd0fc, 0x190c, 0x1ddc, 0x00e6, 0x2071, 0x1a44,
+	0x7000, 0x9005, 0x1904, 0x1bdc, 0x7206, 0x9280, 0x0005, 0x204c,
 	0x9280, 0x0004, 0x2004, 0x782b, 0x0004, 0x00f6, 0x2079, 0x0200,
 	0x7803, 0x0040, 0x00fe, 0x00b6, 0x2058, 0xb86c, 0x7836, 0xb890,
 	0x00be, 0x00f6, 0x2079, 0x0200, 0x7803, 0x0040, 0xa001, 0xa001,
@@ -663,46 +672,46 @@
 	0x0118, 0x001e, 0x000e, 0x0098, 0x001e, 0x000e, 0x8aff, 0x01c8,
 	0x0126, 0x2091, 0x8000, 0x2009, 0x0306, 0x200b, 0x0808, 0x00d9,
 	0x0108, 0x00c9, 0x012e, 0x9006, 0x00ee, 0x00fe, 0x0005, 0x0036,
-	0x0046, 0xab38, 0xac34, 0x080c, 0x1f90, 0x004e, 0x003e, 0x0d30,
+	0x0046, 0xab38, 0xac34, 0x080c, 0x1fd8, 0x004e, 0x003e, 0x0d30,
 	0x0c98, 0x9085, 0x0001, 0x0c80, 0x2009, 0x0306, 0x200b, 0x4800,
 	0x7027, 0x0000, 0x0005, 0x0076, 0x0066, 0x0056, 0x0046, 0x0036,
-	0x0026, 0x8aff, 0x0904, 0x1d47, 0x700c, 0x7214, 0x923a, 0x7010,
-	0x7218, 0x9203, 0x0a04, 0x1d46, 0x9705, 0x0904, 0x1d46, 0x903e,
-	0x2730, 0xa884, 0xd0fc, 0x1190, 0x2d00, 0x0002, 0x1cd6, 0x1c16,
-	0x1c16, 0x1cd6, 0x1cd6, 0x1cb3, 0x1cd6, 0x1c16, 0x1cba, 0x1c65,
-	0x1c65, 0x1cd6, 0x1cd6, 0x1cd6, 0x1cad, 0x1c65, 0xc0fc, 0xa886,
-	0xab2c, 0xaa30, 0xad1c, 0xac20, 0xdd9c, 0x0904, 0x1cd8, 0x2c05,
-	0x908a, 0x0035, 0x1a0c, 0x0dc4, 0x9082, 0x001c, 0x0002, 0x1c02,
-	0x1c00, 0x1c00, 0x1c00, 0x1c00, 0x1c00, 0x1c06, 0x1c00, 0x1c00,
-	0x1c00, 0x1c00, 0x1c00, 0x1c0a, 0x1c00, 0x1c00, 0x1c00, 0x1c00,
-	0x1c00, 0x1c0e, 0x1c00, 0x1c00, 0x1c00, 0x1c00, 0x1c00, 0x1c12,
-	0x080c, 0x0dc4, 0xa778, 0xa67c, 0x0804, 0x1cd8, 0xa790, 0xa694,
-	0x0804, 0x1cd8, 0xa7a8, 0xa6ac, 0x0804, 0x1cd8, 0xa7c0, 0xa6c4,
-	0x0804, 0x1cd8, 0xa7d8, 0xa6dc, 0x0804, 0x1cd8, 0x2c05, 0x908a,
-	0x0037, 0x1a0c, 0x0dc4, 0x9082, 0x001c, 0x0002, 0x1c39, 0x1c39,
-	0x1c3b, 0x1c39, 0x1c39, 0x1c39, 0x1c41, 0x1c39, 0x1c39, 0x1c39,
-	0x1c47, 0x1c39, 0x1c39, 0x1c39, 0x1c4d, 0x1c39, 0x1c39, 0x1c39,
-	0x1c53, 0x1c39, 0x1c39, 0x1c39, 0x1c59, 0x1c39, 0x1c39, 0x1c39,
-	0x1c5f, 0x080c, 0x0dc4, 0xa578, 0xa47c, 0xa380, 0xa284, 0x0804,
-	0x1cd8, 0xa588, 0xa48c, 0xa390, 0xa294, 0x0804, 0x1cd8, 0xa598,
-	0xa49c, 0xa3a0, 0xa2a4, 0x0804, 0x1cd8, 0xa5a8, 0xa4ac, 0xa3b0,
-	0xa2b4, 0x0804, 0x1cd8, 0xa5b8, 0xa4bc, 0xa3c0, 0xa2c4, 0x0804,
-	0x1cd8, 0xa5c8, 0xa4cc, 0xa3d0, 0xa2d4, 0x0804, 0x1cd8, 0xa5d8,
-	0xa4dc, 0xa3e0, 0xa2e4, 0x0804, 0x1cd8, 0x2c05, 0x908a, 0x0035,
-	0x1a0c, 0x0dc4, 0x9082, 0x001c, 0x0002, 0x1c88, 0x1c86, 0x1c86,
-	0x1c86, 0x1c86, 0x1c86, 0x1c90, 0x1c86, 0x1c86, 0x1c86, 0x1c86,
-	0x1c86, 0x1c98, 0x1c86, 0x1c86, 0x1c86, 0x1c86, 0x1c86, 0x1c9f,
-	0x1c86, 0x1c86, 0x1c86, 0x1c86, 0x1c86, 0x1ca6, 0x080c, 0x0dc4,
-	0xa570, 0xa474, 0xa778, 0xa67c, 0xa380, 0xa284, 0x0804, 0x1cd8,
-	0xa588, 0xa48c, 0xa790, 0xa694, 0xa398, 0xa29c, 0x0804, 0x1cd8,
+	0x0026, 0x8aff, 0x0904, 0x1d8f, 0x700c, 0x7214, 0x923a, 0x7010,
+	0x7218, 0x9203, 0x0a04, 0x1d8e, 0x9705, 0x0904, 0x1d8e, 0x903e,
+	0x2730, 0xa884, 0xd0fc, 0x1190, 0x2d00, 0x0002, 0x1d1e, 0x1c5e,
+	0x1c5e, 0x1d1e, 0x1d1e, 0x1cfb, 0x1d1e, 0x1c5e, 0x1d02, 0x1cad,
+	0x1cad, 0x1d1e, 0x1d1e, 0x1d1e, 0x1cf5, 0x1cad, 0xc0fc, 0xa886,
+	0xab2c, 0xaa30, 0xad1c, 0xac20, 0xdd9c, 0x0904, 0x1d20, 0x2c05,
+	0x908a, 0x0035, 0x1a0c, 0x0dc3, 0x9082, 0x001c, 0x0002, 0x1c4a,
+	0x1c48, 0x1c48, 0x1c48, 0x1c48, 0x1c48, 0x1c4e, 0x1c48, 0x1c48,
+	0x1c48, 0x1c48, 0x1c48, 0x1c52, 0x1c48, 0x1c48, 0x1c48, 0x1c48,
+	0x1c48, 0x1c56, 0x1c48, 0x1c48, 0x1c48, 0x1c48, 0x1c48, 0x1c5a,
+	0x080c, 0x0dc3, 0xa778, 0xa67c, 0x0804, 0x1d20, 0xa790, 0xa694,
+	0x0804, 0x1d20, 0xa7a8, 0xa6ac, 0x0804, 0x1d20, 0xa7c0, 0xa6c4,
+	0x0804, 0x1d20, 0xa7d8, 0xa6dc, 0x0804, 0x1d20, 0x2c05, 0x908a,
+	0x0037, 0x1a0c, 0x0dc3, 0x9082, 0x001c, 0x0002, 0x1c81, 0x1c81,
+	0x1c83, 0x1c81, 0x1c81, 0x1c81, 0x1c89, 0x1c81, 0x1c81, 0x1c81,
+	0x1c8f, 0x1c81, 0x1c81, 0x1c81, 0x1c95, 0x1c81, 0x1c81, 0x1c81,
+	0x1c9b, 0x1c81, 0x1c81, 0x1c81, 0x1ca1, 0x1c81, 0x1c81, 0x1c81,
+	0x1ca7, 0x080c, 0x0dc3, 0xa578, 0xa47c, 0xa380, 0xa284, 0x0804,
+	0x1d20, 0xa588, 0xa48c, 0xa390, 0xa294, 0x0804, 0x1d20, 0xa598,
+	0xa49c, 0xa3a0, 0xa2a4, 0x0804, 0x1d20, 0xa5a8, 0xa4ac, 0xa3b0,
+	0xa2b4, 0x0804, 0x1d20, 0xa5b8, 0xa4bc, 0xa3c0, 0xa2c4, 0x0804,
+	0x1d20, 0xa5c8, 0xa4cc, 0xa3d0, 0xa2d4, 0x0804, 0x1d20, 0xa5d8,
+	0xa4dc, 0xa3e0, 0xa2e4, 0x0804, 0x1d20, 0x2c05, 0x908a, 0x0035,
+	0x1a0c, 0x0dc3, 0x9082, 0x001c, 0x0002, 0x1cd0, 0x1cce, 0x1cce,
+	0x1cce, 0x1cce, 0x1cce, 0x1cd8, 0x1cce, 0x1cce, 0x1cce, 0x1cce,
+	0x1cce, 0x1ce0, 0x1cce, 0x1cce, 0x1cce, 0x1cce, 0x1cce, 0x1ce7,
+	0x1cce, 0x1cce, 0x1cce, 0x1cce, 0x1cce, 0x1cee, 0x080c, 0x0dc3,
+	0xa570, 0xa474, 0xa778, 0xa67c, 0xa380, 0xa284, 0x0804, 0x1d20,
+	0xa588, 0xa48c, 0xa790, 0xa694, 0xa398, 0xa29c, 0x0804, 0x1d20,
 	0xa5a0, 0xa4a4, 0xa7a8, 0xa6ac, 0xa3b0, 0xa2b4, 0x04c8, 0xa5b8,
 	0xa4bc, 0xa7c0, 0xa6c4, 0xa3c8, 0xa2cc, 0x0490, 0xa5d0, 0xa4d4,
 	0xa7d8, 0xa6dc, 0xa3e0, 0xa2e4, 0x0458, 0xa868, 0x9084, 0x00ff,
-	0x9086, 0x001e, 0x1518, 0x080c, 0x1f28, 0x1904, 0x1bb1, 0x900e,
-	0x0804, 0x1d47, 0xab68, 0x939c, 0x00ff, 0x9386, 0x0048, 0x1180,
+	0x9086, 0x001e, 0x1518, 0x080c, 0x1f70, 0x1904, 0x1bf9, 0x900e,
+	0x0804, 0x1d8f, 0xab68, 0x939c, 0x00ff, 0x9386, 0x0048, 0x1180,
 	0x00c6, 0x7004, 0x2060, 0x6004, 0x9086, 0x0043, 0x00ce, 0x0904,
-	0x1c65, 0xaba0, 0x9016, 0xad90, 0xac94, 0xaf98, 0xae9c, 0x0040,
-	0x9386, 0x0008, 0x0904, 0x1c65, 0x080c, 0x0dc4, 0x080c, 0x0dc4,
+	0x1cad, 0xaba0, 0x9016, 0xad90, 0xac94, 0xaf98, 0xae9c, 0x0040,
+	0x9386, 0x0008, 0x0904, 0x1cad, 0x080c, 0x0dc3, 0x080c, 0x0dc3,
 	0x2009, 0x030f, 0x2104, 0xd0fc, 0x0538, 0x0066, 0x2009, 0x0306,
 	0x2134, 0x200b, 0x4000, 0x2104, 0x9084, 0x0030, 0x15b8, 0x2031,
 	0x1000, 0x2600, 0x9302, 0x928b, 0x0000, 0xa82e, 0xa932, 0x0278,
@@ -711,169 +720,169 @@
 	0x0000, 0xa833, 0x0000, 0x006e, 0x7b12, 0x7a16, 0x7d02, 0x7c06,
 	0x7f0a, 0x7e0e, 0x782b, 0x0001, 0x7000, 0x8000, 0x7002, 0xa83c,
 	0x9300, 0xa83e, 0xa840, 0x9201, 0xa842, 0x700c, 0x9300, 0x700e,
-	0x7010, 0x9201, 0x7012, 0x080c, 0x1f28, 0x0448, 0xd6b4, 0x0110,
+	0x7010, 0x9201, 0x7012, 0x080c, 0x1f70, 0x0448, 0xd6b4, 0x0110,
 	0x200b, 0x4040, 0x2031, 0x0080, 0x9584, 0x007f, 0x0108, 0x9632,
 	0x7124, 0x7000, 0x9086, 0x0000, 0x1198, 0xc185, 0x7126, 0x2009,
-	0x0306, 0x2104, 0xd0b4, 0x1904, 0x1ce9, 0x200b, 0x4040, 0x2009,
-	0x1a5e, 0x2104, 0x8000, 0x0a04, 0x1ce9, 0x200a, 0x0804, 0x1ce9,
-	0xc18d, 0x7126, 0xd184, 0x1d58, 0x0804, 0x1ce9, 0x9006, 0x002e,
-	0x003e, 0x004e, 0x005e, 0x006e, 0x007e, 0x0005, 0x080c, 0x0dc4,
+	0x0306, 0x2104, 0xd0b4, 0x1904, 0x1d31, 0x200b, 0x4040, 0x2009,
+	0x1a5e, 0x2104, 0x8000, 0x0a04, 0x1d31, 0x200a, 0x0804, 0x1d31,
+	0xc18d, 0x7126, 0xd184, 0x1d58, 0x0804, 0x1d31, 0x9006, 0x002e,
+	0x003e, 0x004e, 0x005e, 0x006e, 0x007e, 0x0005, 0x080c, 0x0dc3,
 	0x0026, 0x2001, 0x0105, 0x2003, 0x0010, 0x782b, 0x0004, 0x7003,
-	0x0000, 0x7004, 0x2060, 0x6014, 0x2048, 0x080c, 0xb955, 0x0118,
-	0xa884, 0xc0bd, 0xa886, 0x782c, 0xd0ac, 0x1de8, 0x080c, 0x1ba4,
+	0x0000, 0x7004, 0x2060, 0x6014, 0x2048, 0x080c, 0xc1cd, 0x0118,
+	0xa884, 0xc0bd, 0xa886, 0x782c, 0xd0ac, 0x1de8, 0x080c, 0x1bec,
 	0x6020, 0x9086, 0x0006, 0x1180, 0x2061, 0x0100, 0x62c8, 0x2001,
 	0x00fa, 0x8001, 0x1df0, 0x60c8, 0x9206, 0x1dc0, 0x60c4, 0xa89e,
-	0x60c8, 0xa89a, 0x7004, 0x2060, 0x00c6, 0x080c, 0xb5c5, 0x00ce,
+	0x60c8, 0xa89a, 0x7004, 0x2060, 0x00c6, 0x080c, 0xbde5, 0x00ce,
 	0x2001, 0x19d3, 0x2004, 0x9c06, 0x1160, 0x2009, 0x0040, 0x080c,
-	0x22b2, 0x080c, 0x9b40, 0x2011, 0x0000, 0x080c, 0x99e0, 0x080c,
-	0x8d06, 0x002e, 0x0804, 0x1ed8, 0x0126, 0x2091, 0x2400, 0xa858,
-	0x2040, 0x792c, 0x782b, 0x0002, 0x9184, 0x0700, 0x1904, 0x1d50,
-	0x7000, 0x0002, 0x1ed8, 0x1da6, 0x1e26, 0x1ed6, 0x8001, 0x7002,
-	0x7027, 0x0000, 0xd19c, 0x1158, 0x8aff, 0x0904, 0x1df3, 0x080c,
-	0x1bab, 0x0904, 0x1ed8, 0x080c, 0x1bab, 0x0804, 0x1ed8, 0x782b,
+	0x22fa, 0x080c, 0x9e13, 0x2011, 0x0000, 0x080c, 0x9cb1, 0x080c,
+	0x8f0e, 0x002e, 0x0804, 0x1f20, 0x0126, 0x2091, 0x2400, 0xa858,
+	0x2040, 0x792c, 0x782b, 0x0002, 0x9184, 0x0700, 0x1904, 0x1d98,
+	0x7000, 0x0002, 0x1f20, 0x1dee, 0x1e6e, 0x1f1e, 0x8001, 0x7002,
+	0x7027, 0x0000, 0xd19c, 0x1158, 0x8aff, 0x0904, 0x1e3b, 0x080c,
+	0x1bf3, 0x0904, 0x1f20, 0x080c, 0x1bf3, 0x0804, 0x1f20, 0x782b,
 	0x0004, 0xd194, 0x0148, 0xa884, 0xc0fc, 0xa886, 0x8aff, 0x1518,
 	0xa880, 0xc0f5, 0xa882, 0x00f8, 0x0026, 0x0036, 0xab3c, 0xaa40,
 	0x0016, 0x7910, 0xa82c, 0x9100, 0xa82e, 0x7914, 0xa830, 0x9101,
 	0xa832, 0x001e, 0x7810, 0x931a, 0x7814, 0x9213, 0x7800, 0xa81e,
-	0x7804, 0xa822, 0xab3e, 0xaa42, 0x003e, 0x002e, 0x080c, 0x1f43,
+	0x7804, 0xa822, 0xab3e, 0xaa42, 0x003e, 0x002e, 0x080c, 0x1f8b,
 	0xa884, 0xc0fd, 0xa886, 0x2a00, 0xa816, 0x2800, 0xa85a, 0x2c00,
 	0xa812, 0x7003, 0x0000, 0x2009, 0x0306, 0x200b, 0x4800, 0x7027,
-	0x0000, 0x0804, 0x1ed8, 0x00f6, 0x0026, 0x781c, 0x0006, 0x7818,
+	0x0000, 0x0804, 0x1f20, 0x00f6, 0x0026, 0x781c, 0x0006, 0x7818,
 	0x0006, 0x2079, 0x0100, 0x7a14, 0x9284, 0x1984, 0x9085, 0x0012,
-	0x7816, 0x0036, 0x2019, 0x1000, 0x8319, 0x090c, 0x0dc4, 0x7820,
+	0x7816, 0x0036, 0x2019, 0x1000, 0x8319, 0x090c, 0x0dc3, 0x7820,
 	0xd0bc, 0x1dd0, 0x003e, 0x79c8, 0x000e, 0x9102, 0x001e, 0x0006,
 	0x0016, 0x79c4, 0x000e, 0x9103, 0x78c6, 0x000e, 0x78ca, 0x9284,
 	0x1984, 0x9085, 0x0012, 0x7816, 0x002e, 0x00fe, 0x782b, 0x0008,
-	0x7003, 0x0000, 0x080c, 0x1ba4, 0x0804, 0x1ed8, 0x8001, 0x7002,
+	0x7003, 0x0000, 0x080c, 0x1bec, 0x0804, 0x1f20, 0x8001, 0x7002,
 	0x7024, 0x8004, 0x7026, 0xd194, 0x0170, 0x782c, 0xd0fc, 0x1904,
-	0x1d99, 0xd19c, 0x1904, 0x1ed4, 0x8aff, 0x0904, 0x1ed8, 0x080c,
-	0x1bab, 0x0804, 0x1ed8, 0x0026, 0x0036, 0xab3c, 0xaa40, 0x080c,
-	0x1f43, 0xdd9c, 0x1904, 0x1e93, 0x2c05, 0x908a, 0x0037, 0x1a0c,
-	0x0dc4, 0x9082, 0x001c, 0x0002, 0x1e67, 0x1e67, 0x1e69, 0x1e67,
-	0x1e67, 0x1e67, 0x1e6f, 0x1e67, 0x1e67, 0x1e67, 0x1e75, 0x1e67,
-	0x1e67, 0x1e67, 0x1e7b, 0x1e67, 0x1e67, 0x1e67, 0x1e81, 0x1e67,
-	0x1e67, 0x1e67, 0x1e87, 0x1e67, 0x1e67, 0x1e67, 0x1e8d, 0x080c,
-	0x0dc4, 0xa080, 0x931a, 0xa084, 0x9213, 0x0804, 0x1dc8, 0xa090,
-	0x931a, 0xa094, 0x9213, 0x0804, 0x1dc8, 0xa0a0, 0x931a, 0xa0a4,
-	0x9213, 0x0804, 0x1dc8, 0xa0b0, 0x931a, 0xa0b4, 0x9213, 0x0804,
-	0x1dc8, 0xa0c0, 0x931a, 0xa0c4, 0x9213, 0x0804, 0x1dc8, 0xa0d0,
-	0x931a, 0xa0d4, 0x9213, 0x0804, 0x1dc8, 0xa0e0, 0x931a, 0xa0e4,
-	0x9213, 0x0804, 0x1dc8, 0x2c05, 0x908a, 0x0035, 0x1a0c, 0x0dc4,
-	0x9082, 0x001c, 0x0002, 0x1eb6, 0x1eb4, 0x1eb4, 0x1eb4, 0x1eb4,
-	0x1eb4, 0x1ebc, 0x1eb4, 0x1eb4, 0x1eb4, 0x1eb4, 0x1eb4, 0x1ec2,
-	0x1eb4, 0x1eb4, 0x1eb4, 0x1eb4, 0x1eb4, 0x1ec8, 0x1eb4, 0x1eb4,
-	0x1eb4, 0x1eb4, 0x1eb4, 0x1ece, 0x080c, 0x0dc4, 0xa080, 0x931a,
-	0xa084, 0x9213, 0x0804, 0x1dc8, 0xa098, 0x931a, 0xa09c, 0x9213,
-	0x0804, 0x1dc8, 0xa0b0, 0x931a, 0xa0b4, 0x9213, 0x0804, 0x1dc8,
-	0xa0c8, 0x931a, 0xa0cc, 0x9213, 0x0804, 0x1dc8, 0xa0e0, 0x931a,
-	0xa0e4, 0x9213, 0x0804, 0x1dc8, 0x0804, 0x1dc4, 0x080c, 0x0dc4,
+	0x1de1, 0xd19c, 0x1904, 0x1f1c, 0x8aff, 0x0904, 0x1f20, 0x080c,
+	0x1bf3, 0x0804, 0x1f20, 0x0026, 0x0036, 0xab3c, 0xaa40, 0x080c,
+	0x1f8b, 0xdd9c, 0x1904, 0x1edb, 0x2c05, 0x908a, 0x0037, 0x1a0c,
+	0x0dc3, 0x9082, 0x001c, 0x0002, 0x1eaf, 0x1eaf, 0x1eb1, 0x1eaf,
+	0x1eaf, 0x1eaf, 0x1eb7, 0x1eaf, 0x1eaf, 0x1eaf, 0x1ebd, 0x1eaf,
+	0x1eaf, 0x1eaf, 0x1ec3, 0x1eaf, 0x1eaf, 0x1eaf, 0x1ec9, 0x1eaf,
+	0x1eaf, 0x1eaf, 0x1ecf, 0x1eaf, 0x1eaf, 0x1eaf, 0x1ed5, 0x080c,
+	0x0dc3, 0xa080, 0x931a, 0xa084, 0x9213, 0x0804, 0x1e10, 0xa090,
+	0x931a, 0xa094, 0x9213, 0x0804, 0x1e10, 0xa0a0, 0x931a, 0xa0a4,
+	0x9213, 0x0804, 0x1e10, 0xa0b0, 0x931a, 0xa0b4, 0x9213, 0x0804,
+	0x1e10, 0xa0c0, 0x931a, 0xa0c4, 0x9213, 0x0804, 0x1e10, 0xa0d0,
+	0x931a, 0xa0d4, 0x9213, 0x0804, 0x1e10, 0xa0e0, 0x931a, 0xa0e4,
+	0x9213, 0x0804, 0x1e10, 0x2c05, 0x908a, 0x0035, 0x1a0c, 0x0dc3,
+	0x9082, 0x001c, 0x0002, 0x1efe, 0x1efc, 0x1efc, 0x1efc, 0x1efc,
+	0x1efc, 0x1f04, 0x1efc, 0x1efc, 0x1efc, 0x1efc, 0x1efc, 0x1f0a,
+	0x1efc, 0x1efc, 0x1efc, 0x1efc, 0x1efc, 0x1f10, 0x1efc, 0x1efc,
+	0x1efc, 0x1efc, 0x1efc, 0x1f16, 0x080c, 0x0dc3, 0xa080, 0x931a,
+	0xa084, 0x9213, 0x0804, 0x1e10, 0xa098, 0x931a, 0xa09c, 0x9213,
+	0x0804, 0x1e10, 0xa0b0, 0x931a, 0xa0b4, 0x9213, 0x0804, 0x1e10,
+	0xa0c8, 0x931a, 0xa0cc, 0x9213, 0x0804, 0x1e10, 0xa0e0, 0x931a,
+	0xa0e4, 0x9213, 0x0804, 0x1e10, 0x0804, 0x1e0c, 0x080c, 0x0dc3,
 	0x012e, 0x0005, 0x00f6, 0x00e6, 0x2071, 0x1a44, 0x7000, 0x9086,
-	0x0000, 0x0904, 0x1f23, 0x2079, 0x0090, 0x2009, 0x0207, 0x210c,
+	0x0000, 0x0904, 0x1f6b, 0x2079, 0x0090, 0x2009, 0x0207, 0x210c,
 	0xd194, 0x01b8, 0x2009, 0x020c, 0x210c, 0x9184, 0x0003, 0x0188,
-	0x080c, 0xd379, 0x2001, 0x0133, 0x2004, 0x9005, 0x090c, 0x0dc4,
-	0x0016, 0x2009, 0x0040, 0x080c, 0x22b2, 0x001e, 0x2001, 0x020c,
+	0x080c, 0xe106, 0x2001, 0x0133, 0x2004, 0x9005, 0x090c, 0x0dc3,
+	0x0016, 0x2009, 0x0040, 0x080c, 0x22fa, 0x001e, 0x2001, 0x020c,
 	0x2102, 0x2009, 0x0206, 0x2104, 0x2009, 0x0203, 0x210c, 0x9106,
-	0x1120, 0x2009, 0x0040, 0x080c, 0x22b2, 0x782c, 0xd0fc, 0x09a8,
-	0x080c, 0x1d94, 0x7000, 0x9086, 0x0000, 0x1978, 0x782b, 0x0004,
-	0x782c, 0xd0ac, 0x1de8, 0x2009, 0x0040, 0x080c, 0x22b2, 0x782b,
-	0x0002, 0x7003, 0x0000, 0x080c, 0x1ba4, 0x00ee, 0x00fe, 0x0005,
+	0x1120, 0x2009, 0x0040, 0x080c, 0x22fa, 0x782c, 0xd0fc, 0x09a8,
+	0x080c, 0x1ddc, 0x7000, 0x9086, 0x0000, 0x1978, 0x782b, 0x0004,
+	0x782c, 0xd0ac, 0x1de8, 0x2009, 0x0040, 0x080c, 0x22fa, 0x782b,
+	0x0002, 0x7003, 0x0000, 0x080c, 0x1bec, 0x00ee, 0x00fe, 0x0005,
 	0xa884, 0xd0fc, 0x11a8, 0x8c60, 0x2c05, 0x9005, 0x0110, 0x8a51,
 	0x0005, 0xa004, 0x9005, 0x0168, 0xa85a, 0x2040, 0xa068, 0x9084,
-	0x000f, 0x9080, 0x1f70, 0x2065, 0x8cff, 0x090c, 0x0dc4, 0x8a51,
+	0x000f, 0x9080, 0x1fb8, 0x2065, 0x8cff, 0x090c, 0x0dc3, 0x8a51,
 	0x0005, 0x2050, 0x0005, 0xa884, 0xd0fc, 0x11b8, 0x8a50, 0x8c61,
 	0x2c05, 0x9005, 0x1190, 0x2800, 0x9906, 0x0120, 0xa000, 0x9005,
 	0x1108, 0x2900, 0x2040, 0xa85a, 0xa068, 0x9084, 0x000f, 0x9080,
-	0x1f80, 0x2065, 0x8cff, 0x090c, 0x0dc4, 0x0005, 0x0000, 0x001e,
+	0x1fc8, 0x2065, 0x8cff, 0x090c, 0x0dc3, 0x0005, 0x0000, 0x001e,
 	0x0022, 0x0026, 0x002a, 0x002e, 0x0032, 0x0036, 0x0000, 0x001c,
 	0x0022, 0x0028, 0x002e, 0x0034, 0x0000, 0x0000, 0x0024, 0x0000,
-	0x0000, 0x1f63, 0x1f5f, 0x0000, 0x0000, 0x1f6d, 0x0000, 0x1f63,
-	0x1f6a, 0x1f6a, 0x1f67, 0x0000, 0x0000, 0x0000, 0x1f6d, 0x1f6a,
-	0x0000, 0x1f65, 0x1f65, 0x0000, 0x0000, 0x1f6d, 0x0000, 0x1f65,
-	0x1f6b, 0x1f6b, 0x1f6b, 0x0000, 0x0000, 0x0000, 0x1f6d, 0x1f6b,
+	0x0000, 0x1fab, 0x1fa7, 0x0000, 0x0000, 0x1fb5, 0x0000, 0x1fab,
+	0x1fb2, 0x1fb2, 0x1faf, 0x0000, 0x0000, 0x0000, 0x1fb5, 0x1fb2,
+	0x0000, 0x1fad, 0x1fad, 0x0000, 0x0000, 0x1fb5, 0x0000, 0x1fad,
+	0x1fb3, 0x1fb3, 0x1fb3, 0x0000, 0x0000, 0x0000, 0x1fb5, 0x1fb3,
 	0x00c6, 0x00d6, 0x0086, 0xab42, 0xac3e, 0xa88c, 0x9055, 0x0904,
-	0x216f, 0x2940, 0xa068, 0x90ec, 0x000f, 0x9084, 0x00ff, 0x9086,
-	0x0008, 0x1118, 0x2061, 0x1f6b, 0x00d0, 0x9de0, 0x1f70, 0x9d86,
+	0x21b7, 0x2940, 0xa068, 0x90ec, 0x000f, 0x9084, 0x00ff, 0x9086,
+	0x0008, 0x1118, 0x2061, 0x1fb3, 0x00d0, 0x9de0, 0x1fb8, 0x9d86,
 	0x0007, 0x0130, 0x9d86, 0x000e, 0x0118, 0x9d86, 0x000f, 0x1120,
 	0xa090, 0x9422, 0xa094, 0x931b, 0x2c05, 0x9065, 0x1140, 0x0310,
-	0x0804, 0x216f, 0xa004, 0x9045, 0x0904, 0x216f, 0x08d8, 0x2c05,
-	0x9005, 0x0904, 0x2057, 0xdd9c, 0x1904, 0x2013, 0x908a, 0x0037,
-	0x1a0c, 0x0dc4, 0x9082, 0x001c, 0x0002, 0x1fe8, 0x1fe8, 0x1fea,
-	0x1fe8, 0x1fe8, 0x1fe8, 0x1ff0, 0x1fe8, 0x1fe8, 0x1fe8, 0x1ff6,
-	0x1fe8, 0x1fe8, 0x1fe8, 0x1ffc, 0x1fe8, 0x1fe8, 0x1fe8, 0x2002,
-	0x1fe8, 0x1fe8, 0x1fe8, 0x2008, 0x1fe8, 0x1fe8, 0x1fe8, 0x200e,
-	0x080c, 0x0dc4, 0xa080, 0x9422, 0xa084, 0x931b, 0x0804, 0x204d,
-	0xa090, 0x9422, 0xa094, 0x931b, 0x0804, 0x204d, 0xa0a0, 0x9422,
-	0xa0a4, 0x931b, 0x0804, 0x204d, 0xa0b0, 0x9422, 0xa0b4, 0x931b,
-	0x0804, 0x204d, 0xa0c0, 0x9422, 0xa0c4, 0x931b, 0x0804, 0x204d,
-	0xa0d0, 0x9422, 0xa0d4, 0x931b, 0x0804, 0x204d, 0xa0e0, 0x9422,
-	0xa0e4, 0x931b, 0x04d0, 0x908a, 0x0035, 0x1a0c, 0x0dc4, 0x9082,
-	0x001c, 0x0002, 0x2035, 0x2033, 0x2033, 0x2033, 0x2033, 0x2033,
-	0x203a, 0x2033, 0x2033, 0x2033, 0x2033, 0x2033, 0x203f, 0x2033,
-	0x2033, 0x2033, 0x2033, 0x2033, 0x2044, 0x2033, 0x2033, 0x2033,
-	0x2033, 0x2033, 0x2049, 0x080c, 0x0dc4, 0xa080, 0x9422, 0xa084,
+	0x0804, 0x21b7, 0xa004, 0x9045, 0x0904, 0x21b7, 0x08d8, 0x2c05,
+	0x9005, 0x0904, 0x209f, 0xdd9c, 0x1904, 0x205b, 0x908a, 0x0037,
+	0x1a0c, 0x0dc3, 0x9082, 0x001c, 0x0002, 0x2030, 0x2030, 0x2032,
+	0x2030, 0x2030, 0x2030, 0x2038, 0x2030, 0x2030, 0x2030, 0x203e,
+	0x2030, 0x2030, 0x2030, 0x2044, 0x2030, 0x2030, 0x2030, 0x204a,
+	0x2030, 0x2030, 0x2030, 0x2050, 0x2030, 0x2030, 0x2030, 0x2056,
+	0x080c, 0x0dc3, 0xa080, 0x9422, 0xa084, 0x931b, 0x0804, 0x2095,
+	0xa090, 0x9422, 0xa094, 0x931b, 0x0804, 0x2095, 0xa0a0, 0x9422,
+	0xa0a4, 0x931b, 0x0804, 0x2095, 0xa0b0, 0x9422, 0xa0b4, 0x931b,
+	0x0804, 0x2095, 0xa0c0, 0x9422, 0xa0c4, 0x931b, 0x0804, 0x2095,
+	0xa0d0, 0x9422, 0xa0d4, 0x931b, 0x0804, 0x2095, 0xa0e0, 0x9422,
+	0xa0e4, 0x931b, 0x04d0, 0x908a, 0x0035, 0x1a0c, 0x0dc3, 0x9082,
+	0x001c, 0x0002, 0x207d, 0x207b, 0x207b, 0x207b, 0x207b, 0x207b,
+	0x2082, 0x207b, 0x207b, 0x207b, 0x207b, 0x207b, 0x2087, 0x207b,
+	0x207b, 0x207b, 0x207b, 0x207b, 0x208c, 0x207b, 0x207b, 0x207b,
+	0x207b, 0x207b, 0x2091, 0x080c, 0x0dc3, 0xa080, 0x9422, 0xa084,
 	0x931b, 0x0098, 0xa098, 0x9422, 0xa09c, 0x931b, 0x0070, 0xa0b0,
 	0x9422, 0xa0b4, 0x931b, 0x0048, 0xa0c8, 0x9422, 0xa0cc, 0x931b,
 	0x0020, 0xa0e0, 0x9422, 0xa0e4, 0x931b, 0x0630, 0x2300, 0x9405,
-	0x0160, 0x8a51, 0x0904, 0x216f, 0x8c60, 0x0804, 0x1fbf, 0xa004,
-	0x9045, 0x0904, 0x216f, 0x0804, 0x1f9a, 0x8a51, 0x0904, 0x216f,
-	0x8c60, 0x2c05, 0x9005, 0x1158, 0xa004, 0x9045, 0x0904, 0x216f,
-	0xa068, 0x90ec, 0x000f, 0x9de0, 0x1f70, 0x2c05, 0x2060, 0xa884,
-	0xc0fc, 0xa886, 0x0804, 0x2164, 0x2c05, 0x8422, 0x8420, 0x831a,
-	0x9399, 0x0000, 0xac2e, 0xab32, 0xdd9c, 0x1904, 0x2101, 0x9082,
-	0x001c, 0x0002, 0x209d, 0x209d, 0x209f, 0x209d, 0x209d, 0x209d,
-	0x20ad, 0x209d, 0x209d, 0x209d, 0x20bb, 0x209d, 0x209d, 0x209d,
-	0x20c9, 0x209d, 0x209d, 0x209d, 0x20d7, 0x209d, 0x209d, 0x209d,
-	0x20e5, 0x209d, 0x209d, 0x209d, 0x20f3, 0x080c, 0x0dc4, 0xa180,
-	0x2400, 0x9122, 0xa184, 0x2300, 0x911b, 0x0a0c, 0x0dc4, 0xa078,
-	0x9420, 0xa07c, 0x9319, 0x0804, 0x215f, 0xa190, 0x2400, 0x9122,
-	0xa194, 0x2300, 0x911b, 0x0a0c, 0x0dc4, 0xa088, 0x9420, 0xa08c,
-	0x9319, 0x0804, 0x215f, 0xa1a0, 0x2400, 0x9122, 0xa1a4, 0x2300,
-	0x911b, 0x0a0c, 0x0dc4, 0xa098, 0x9420, 0xa09c, 0x9319, 0x0804,
-	0x215f, 0xa1b0, 0x2400, 0x9122, 0xa1b4, 0x2300, 0x911b, 0x0a0c,
-	0x0dc4, 0xa0a8, 0x9420, 0xa0ac, 0x9319, 0x0804, 0x215f, 0xa1c0,
-	0x2400, 0x9122, 0xa1c4, 0x2300, 0x911b, 0x0a0c, 0x0dc4, 0xa0b8,
-	0x9420, 0xa0bc, 0x9319, 0x0804, 0x215f, 0xa1d0, 0x2400, 0x9122,
-	0xa1d4, 0x2300, 0x911b, 0x0a0c, 0x0dc4, 0xa0c8, 0x9420, 0xa0cc,
-	0x9319, 0x0804, 0x215f, 0xa1e0, 0x2400, 0x9122, 0xa1e4, 0x2300,
-	0x911b, 0x0a0c, 0x0dc4, 0xa0d8, 0x9420, 0xa0dc, 0x9319, 0x0804,
-	0x215f, 0x9082, 0x001c, 0x0002, 0x211f, 0x211d, 0x211d, 0x211d,
-	0x211d, 0x211d, 0x212c, 0x211d, 0x211d, 0x211d, 0x211d, 0x211d,
-	0x2139, 0x211d, 0x211d, 0x211d, 0x211d, 0x211d, 0x2146, 0x211d,
-	0x211d, 0x211d, 0x211d, 0x211d, 0x2153, 0x080c, 0x0dc4, 0xa180,
-	0x2400, 0x9122, 0xa184, 0x2300, 0x911b, 0x0a0c, 0x0dc4, 0xa070,
+	0x0160, 0x8a51, 0x0904, 0x21b7, 0x8c60, 0x0804, 0x2007, 0xa004,
+	0x9045, 0x0904, 0x21b7, 0x0804, 0x1fe2, 0x8a51, 0x0904, 0x21b7,
+	0x8c60, 0x2c05, 0x9005, 0x1158, 0xa004, 0x9045, 0x0904, 0x21b7,
+	0xa068, 0x90ec, 0x000f, 0x9de0, 0x1fb8, 0x2c05, 0x2060, 0xa884,
+	0xc0fc, 0xa886, 0x0804, 0x21ac, 0x2c05, 0x8422, 0x8420, 0x831a,
+	0x9399, 0x0000, 0xac2e, 0xab32, 0xdd9c, 0x1904, 0x2149, 0x9082,
+	0x001c, 0x0002, 0x20e5, 0x20e5, 0x20e7, 0x20e5, 0x20e5, 0x20e5,
+	0x20f5, 0x20e5, 0x20e5, 0x20e5, 0x2103, 0x20e5, 0x20e5, 0x20e5,
+	0x2111, 0x20e5, 0x20e5, 0x20e5, 0x211f, 0x20e5, 0x20e5, 0x20e5,
+	0x212d, 0x20e5, 0x20e5, 0x20e5, 0x213b, 0x080c, 0x0dc3, 0xa180,
+	0x2400, 0x9122, 0xa184, 0x2300, 0x911b, 0x0a0c, 0x0dc3, 0xa078,
+	0x9420, 0xa07c, 0x9319, 0x0804, 0x21a7, 0xa190, 0x2400, 0x9122,
+	0xa194, 0x2300, 0x911b, 0x0a0c, 0x0dc3, 0xa088, 0x9420, 0xa08c,
+	0x9319, 0x0804, 0x21a7, 0xa1a0, 0x2400, 0x9122, 0xa1a4, 0x2300,
+	0x911b, 0x0a0c, 0x0dc3, 0xa098, 0x9420, 0xa09c, 0x9319, 0x0804,
+	0x21a7, 0xa1b0, 0x2400, 0x9122, 0xa1b4, 0x2300, 0x911b, 0x0a0c,
+	0x0dc3, 0xa0a8, 0x9420, 0xa0ac, 0x9319, 0x0804, 0x21a7, 0xa1c0,
+	0x2400, 0x9122, 0xa1c4, 0x2300, 0x911b, 0x0a0c, 0x0dc3, 0xa0b8,
+	0x9420, 0xa0bc, 0x9319, 0x0804, 0x21a7, 0xa1d0, 0x2400, 0x9122,
+	0xa1d4, 0x2300, 0x911b, 0x0a0c, 0x0dc3, 0xa0c8, 0x9420, 0xa0cc,
+	0x9319, 0x0804, 0x21a7, 0xa1e0, 0x2400, 0x9122, 0xa1e4, 0x2300,
+	0x911b, 0x0a0c, 0x0dc3, 0xa0d8, 0x9420, 0xa0dc, 0x9319, 0x0804,
+	0x21a7, 0x9082, 0x001c, 0x0002, 0x2167, 0x2165, 0x2165, 0x2165,
+	0x2165, 0x2165, 0x2174, 0x2165, 0x2165, 0x2165, 0x2165, 0x2165,
+	0x2181, 0x2165, 0x2165, 0x2165, 0x2165, 0x2165, 0x218e, 0x2165,
+	0x2165, 0x2165, 0x2165, 0x2165, 0x219b, 0x080c, 0x0dc3, 0xa180,
+	0x2400, 0x9122, 0xa184, 0x2300, 0x911b, 0x0a0c, 0x0dc3, 0xa070,
 	0x9420, 0xa074, 0x9319, 0x0498, 0xa198, 0x2400, 0x9122, 0xa19c,
-	0x2300, 0x911b, 0x0a0c, 0x0dc4, 0xa088, 0x9420, 0xa08c, 0x9319,
+	0x2300, 0x911b, 0x0a0c, 0x0dc3, 0xa088, 0x9420, 0xa08c, 0x9319,
 	0x0430, 0xa1b0, 0x2400, 0x9122, 0xa1b4, 0x2300, 0x911b, 0x0a0c,
-	0x0dc4, 0xa0a0, 0x9420, 0xa0a4, 0x9319, 0x00c8, 0xa1c8, 0x2400,
-	0x9122, 0xa1cc, 0x2300, 0x911b, 0x0a0c, 0x0dc4, 0xa0b8, 0x9420,
+	0x0dc3, 0xa0a0, 0x9420, 0xa0a4, 0x9319, 0x00c8, 0xa1c8, 0x2400,
+	0x9122, 0xa1cc, 0x2300, 0x911b, 0x0a0c, 0x0dc3, 0xa0b8, 0x9420,
 	0xa0bc, 0x9319, 0x0060, 0xa1e0, 0x2400, 0x9122, 0xa1e4, 0x2300,
-	0x911b, 0x0a0c, 0x0dc4, 0xa0d0, 0x9420, 0xa0d4, 0x9319, 0xac1e,
+	0x911b, 0x0a0c, 0x0dc3, 0xa0d0, 0x9420, 0xa0d4, 0x9319, 0xac1e,
 	0xab22, 0xa884, 0xc0fd, 0xa886, 0x2800, 0xa85a, 0x2c00, 0xa812,
 	0x2a00, 0xa816, 0x000e, 0x000e, 0x000e, 0x9006, 0x0028, 0x008e,
 	0x00de, 0x00ce, 0x9085, 0x0001, 0x0005, 0x2001, 0x0005, 0x2004,
-	0xd0bc, 0x190c, 0x0dbd, 0x9084, 0x0007, 0x0002, 0x2190, 0x1d94,
-	0x2190, 0x2186, 0x2189, 0x218c, 0x2189, 0x218c, 0x080c, 0x1d94,
-	0x0005, 0x080c, 0x11a7, 0x0005, 0x080c, 0x1d94, 0x080c, 0x11a7,
+	0xd0bc, 0x190c, 0x0dbc, 0x9084, 0x0007, 0x0002, 0x21d8, 0x1ddc,
+	0x21d8, 0x21ce, 0x21d1, 0x21d4, 0x21d1, 0x21d4, 0x080c, 0x1ddc,
+	0x0005, 0x080c, 0x11b3, 0x0005, 0x080c, 0x1ddc, 0x080c, 0x11b3,
 	0x0005, 0x0126, 0x2091, 0x2600, 0x2079, 0x0200, 0x2071, 0x0260,
 	0x2069, 0x1800, 0x7817, 0x0000, 0x789b, 0x0814, 0x78a3, 0x0406,
 	0x789f, 0x0410, 0x2009, 0x013b, 0x200b, 0x0400, 0x781b, 0x0002,
 	0x783b, 0x001f, 0x7837, 0x0020, 0x7803, 0x1600, 0x012e, 0x0005,
-	0x2091, 0x2600, 0x781c, 0xd0a4, 0x1904, 0x22af, 0x7900, 0xd1dc,
-	0x1118, 0x9084, 0x0006, 0x001a, 0x9084, 0x000e, 0x0002, 0x21d7,
-	0x21cf, 0x7c74, 0x21cf, 0x21d1, 0x21d1, 0x21d1, 0x21d1, 0x7c5a,
-	0x21cf, 0x21d3, 0x21cf, 0x21d1, 0x21cf, 0x21d1, 0x21cf, 0x080c,
-	0x0dc4, 0x0031, 0x0020, 0x080c, 0x7c5a, 0x080c, 0x7c74, 0x0005,
-	0x0006, 0x0016, 0x0026, 0x080c, 0xd379, 0x7930, 0x9184, 0x0003,
+	0x2091, 0x2600, 0x781c, 0xd0a4, 0x1904, 0x22f7, 0x7900, 0xd1dc,
+	0x1118, 0x9084, 0x0006, 0x001a, 0x9084, 0x000e, 0x0002, 0x221f,
+	0x2217, 0x7d14, 0x2217, 0x2219, 0x2219, 0x2219, 0x2219, 0x7cfa,
+	0x2217, 0x221b, 0x2217, 0x2219, 0x2217, 0x2219, 0x2217, 0x080c,
+	0x0dc3, 0x0031, 0x0020, 0x080c, 0x7cfa, 0x080c, 0x7d14, 0x0005,
+	0x0006, 0x0016, 0x0026, 0x080c, 0xe106, 0x7930, 0x9184, 0x0003,
 	0x01c0, 0x2001, 0x19d3, 0x2004, 0x9005, 0x0170, 0x2001, 0x0133,
-	0x2004, 0x9005, 0x090c, 0x0dc4, 0x00c6, 0x2001, 0x19d3, 0x2064,
-	0x080c, 0xb5c5, 0x00ce, 0x00f8, 0x2009, 0x0040, 0x080c, 0x22b2,
+	0x2004, 0x9005, 0x090c, 0x0dc3, 0x00c6, 0x2001, 0x19d3, 0x2064,
+	0x080c, 0xbde5, 0x00ce, 0x00f8, 0x2009, 0x0040, 0x080c, 0x22fa,
 	0x00d0, 0x9184, 0x0014, 0x01a0, 0x6a00, 0x9286, 0x0003, 0x0160,
-	0x080c, 0x72e5, 0x1138, 0x080c, 0x75dc, 0x080c, 0x5ef6, 0x080c,
-	0x7212, 0x0010, 0x080c, 0x5db5, 0x080c, 0x7d18, 0x0041, 0x0018,
+	0x080c, 0x7351, 0x1138, 0x080c, 0x764c, 0x080c, 0x5fb3, 0x080c,
+	0x727e, 0x0010, 0x080c, 0x5e72, 0x080c, 0x7dc3, 0x0041, 0x0018,
 	0x9184, 0x9540, 0x1dc8, 0x002e, 0x001e, 0x000e, 0x0005, 0x00e6,
-	0x0036, 0x0046, 0x0056, 0x2071, 0x1a41, 0x080c, 0x199b, 0x005e,
+	0x0036, 0x0046, 0x0056, 0x2071, 0x1a41, 0x080c, 0x19e3, 0x005e,
 	0x004e, 0x003e, 0x00ee, 0x0005, 0x0126, 0x2091, 0x2e00, 0x2071,
-	0x1800, 0x7128, 0x2001, 0x194c, 0x2102, 0x2001, 0x1954, 0x2102,
+	0x1800, 0x7128, 0x2001, 0x194b, 0x2102, 0x2001, 0x1953, 0x2102,
 	0x2001, 0x013b, 0x2102, 0x2079, 0x0200, 0x2001, 0x0201, 0x789e,
 	0x78a3, 0x0200, 0x9198, 0x0007, 0x831c, 0x831c, 0x831c, 0x9398,
 	0x0005, 0x2320, 0x9182, 0x0204, 0x1230, 0x2011, 0x0008, 0x8423,
@@ -890,1979 +899,1996 @@
 	0x2069, 0x0200, 0x9005, 0x6810, 0x0110, 0xc0a5, 0x0008, 0xc0a4,
 	0x6812, 0x00de, 0x0005, 0x0006, 0x00d6, 0x2069, 0x0200, 0x6810,
 	0x9084, 0xfff8, 0x910d, 0x6912, 0x00de, 0x000e, 0x0005, 0x7938,
-	0x080c, 0x0dbd, 0x00f6, 0x2079, 0x0200, 0x7902, 0xa001, 0xa001,
+	0x080c, 0x0dbc, 0x00f6, 0x2079, 0x0200, 0x7902, 0xa001, 0xa001,
 	0xa001, 0xa001, 0xa001, 0xa001, 0x7902, 0xa001, 0xa001, 0xa001,
 	0xa001, 0xa001, 0xa001, 0x00fe, 0x0005, 0x0126, 0x2091, 0x2800,
-	0x2061, 0x0100, 0x2071, 0x1800, 0x2009, 0x0000, 0x080c, 0x2a93,
-	0x080c, 0x29ae, 0x6054, 0x8004, 0x8004, 0x8004, 0x8004, 0x9084,
+	0x2061, 0x0100, 0x2071, 0x1800, 0x2009, 0x0000, 0x080c, 0x2afc,
+	0x080c, 0x2a17, 0x6054, 0x8004, 0x8004, 0x8004, 0x8004, 0x9084,
 	0x000c, 0x6150, 0x918c, 0xfff3, 0x9105, 0x6052, 0x6050, 0x9084,
 	0xb17f, 0x9085, 0x2000, 0x6052, 0x2009, 0x1979, 0x2011, 0x197a,
-	0x6358, 0x939c, 0x38f0, 0x2320, 0x080c, 0x29f2, 0x1238, 0x939d,
+	0x6358, 0x939c, 0x38f0, 0x2320, 0x080c, 0x2a5b, 0x1238, 0x939d,
 	0x4003, 0x94a5, 0x8603, 0x230a, 0x2412, 0x0030, 0x939d, 0x0203,
-	0x94a5, 0x8603, 0x230a, 0x2412, 0x9006, 0x080c, 0x29dd, 0x9006,
-	0x080c, 0x29c0, 0x20a9, 0x0012, 0x1d04, 0x2304, 0x2091, 0x6000,
-	0x1f04, 0x2304, 0x602f, 0x0100, 0x602f, 0x0000, 0x6050, 0x9085,
-	0x0400, 0x9084, 0xdfff, 0x6052, 0x6024, 0x6026, 0x080c, 0x26d8,
-	0x2009, 0x00ef, 0x6132, 0x6136, 0x080c, 0x26e8, 0x60e7, 0x0000,
+	0x94a5, 0x8603, 0x230a, 0x2412, 0x9006, 0x080c, 0x2a46, 0x9006,
+	0x080c, 0x2a29, 0x20a9, 0x0012, 0x1d04, 0x234c, 0x2091, 0x6000,
+	0x1f04, 0x234c, 0x602f, 0x0100, 0x602f, 0x0000, 0x6050, 0x9085,
+	0x0400, 0x9084, 0xdfff, 0x6052, 0x6024, 0x6026, 0x080c, 0x2741,
+	0x2009, 0x00ef, 0x6132, 0x6136, 0x080c, 0x2751, 0x60e7, 0x0000,
 	0x61ea, 0x2001, 0x180d, 0x2004, 0xd08c, 0x2001, 0x0002, 0x1110,
 	0x2001, 0x0008, 0x60e2, 0x604b, 0xf7f7, 0x6043, 0x0000, 0x602f,
 	0x0080, 0x602f, 0x0000, 0x6007, 0x149f, 0x60bb, 0x0000, 0x20a9,
-	0x0018, 0x60bf, 0x0000, 0x1f04, 0x2339, 0x60bb, 0x0000, 0x60bf,
+	0x0018, 0x60bf, 0x0000, 0x1f04, 0x2381, 0x60bb, 0x0000, 0x60bf,
 	0x0108, 0x60bf, 0x0012, 0x60bf, 0x0320, 0x60bf, 0x0018, 0x601b,
 	0x00f0, 0x601f, 0x001e, 0x600f, 0x006b, 0x602b, 0x402f, 0x012e,
 	0x0005, 0x00f6, 0x2079, 0x0140, 0x78c3, 0x0080, 0x78c3, 0x0083,
 	0x78c3, 0x0000, 0x00fe, 0x0005, 0x2001, 0x1834, 0x2003, 0x0000,
 	0x2001, 0x1833, 0x2003, 0x0001, 0x0005, 0x0126, 0x2091, 0x2800,
 	0x0006, 0x0016, 0x0026, 0x6124, 0x9184, 0x5e2c, 0x1118, 0x9184,
-	0x0007, 0x002a, 0x9195, 0x0004, 0x9284, 0x0007, 0x0002, 0x2399,
-	0x237f, 0x2382, 0x2385, 0x238a, 0x238c, 0x2390, 0x2394, 0x080c,
-	0x85b8, 0x00b8, 0x080c, 0x8689, 0x00a0, 0x080c, 0x8689, 0x080c,
-	0x85b8, 0x0078, 0x0099, 0x0068, 0x080c, 0x85b8, 0x0079, 0x0048,
-	0x080c, 0x8689, 0x0059, 0x0028, 0x080c, 0x8689, 0x080c, 0x85b8,
+	0x0007, 0x002a, 0x9195, 0x0004, 0x9284, 0x0007, 0x0002, 0x23e1,
+	0x23c7, 0x23ca, 0x23cd, 0x23d2, 0x23d4, 0x23d8, 0x23dc, 0x080c,
+	0x8789, 0x00b8, 0x080c, 0x885a, 0x00a0, 0x080c, 0x885a, 0x080c,
+	0x8789, 0x0078, 0x0099, 0x0068, 0x080c, 0x8789, 0x0079, 0x0048,
+	0x080c, 0x885a, 0x0059, 0x0028, 0x080c, 0x885a, 0x080c, 0x8789,
 	0x0029, 0x002e, 0x001e, 0x000e, 0x012e, 0x0005, 0x00a6, 0x6124,
-	0x6028, 0xd09c, 0x0118, 0xd19c, 0x1904, 0x25f3, 0xd1f4, 0x190c,
-	0x0dbd, 0x080c, 0x72e5, 0x0904, 0x23f6, 0x080c, 0xbef8, 0x1120,
+	0x6028, 0xd09c, 0x0118, 0xd19c, 0x1904, 0x2654, 0xd1f4, 0x190c,
+	0x0dbc, 0x080c, 0x7351, 0x0904, 0x243e, 0x080c, 0xc8ce, 0x1120,
 	0x7000, 0x9086, 0x0003, 0x0570, 0x6024, 0x9084, 0x1800, 0x0550,
-	0x080c, 0x7308, 0x0118, 0x080c, 0x72f6, 0x1520, 0x6027, 0x0020,
-	0x6043, 0x0000, 0x080c, 0xbef8, 0x0168, 0x080c, 0x7308, 0x1150,
-	0x2001, 0x1984, 0x2003, 0x0001, 0x6027, 0x1800, 0x080c, 0x7176,
-	0x0804, 0x25f6, 0x70a0, 0x9005, 0x1150, 0x70a3, 0x0001, 0x00d6,
-	0x2069, 0x0140, 0x080c, 0x733a, 0x00de, 0x1904, 0x25f6, 0x080c,
-	0x75e6, 0x0438, 0x080c, 0x7308, 0x1904, 0x242b, 0x6024, 0x9084,
-	0x1800, 0x1110, 0x0804, 0x242b, 0x080c, 0x75e6, 0x080c, 0x75dc,
-	0x080c, 0x5ef6, 0x080c, 0x7212, 0x0804, 0x25f3, 0xd1ac, 0x1598,
+	0x080c, 0x7374, 0x0118, 0x080c, 0x7362, 0x1520, 0x6027, 0x0020,
+	0x6043, 0x0000, 0x080c, 0xc8ce, 0x0168, 0x080c, 0x7374, 0x1150,
+	0x2001, 0x1984, 0x2003, 0x0001, 0x6027, 0x1800, 0x080c, 0x71cd,
+	0x0804, 0x2657, 0x70a0, 0x9005, 0x1150, 0x70a3, 0x0001, 0x00d6,
+	0x2069, 0x0140, 0x080c, 0x73a5, 0x00de, 0x1904, 0x2657, 0x080c,
+	0x7656, 0x0438, 0x080c, 0x7374, 0x1904, 0x2473, 0x6024, 0x9084,
+	0x1800, 0x1110, 0x0804, 0x2473, 0x080c, 0x7656, 0x080c, 0x764c,
+	0x080c, 0x5fb3, 0x080c, 0x727e, 0x0804, 0x2654, 0xd1ac, 0x1598,
 	0x6024, 0xd0dc, 0x1170, 0xd0e4, 0x11c0, 0xd0d4, 0x1520, 0xd0cc,
-	0x0130, 0x7094, 0x9086, 0x0029, 0x1110, 0x080c, 0x74c7, 0x0804,
-	0x25f3, 0x080c, 0xbef8, 0x0130, 0x0046, 0x2021, 0x0001, 0x080c,
-	0x2bbf, 0x004e, 0x080c, 0x75e1, 0x0090, 0x080c, 0xbef8, 0x0130,
-	0x0046, 0x2021, 0x0002, 0x080c, 0x2bbf, 0x004e, 0x2001, 0x195a,
-	0x2003, 0x0002, 0x0020, 0x080c, 0x7423, 0x0804, 0x25f3, 0x080c,
-	0x7569, 0x0804, 0x25f3, 0xd1ac, 0x0904, 0x2514, 0x080c, 0x72e5,
-	0x1510, 0x6027, 0x0020, 0x0006, 0x0026, 0x0036, 0x080c, 0xbef8,
-	0x0138, 0x0046, 0x634c, 0x2021, 0x0000, 0x080c, 0x2bbf, 0x004e,
-	0x080c, 0x72ff, 0x1158, 0x080c, 0x75dc, 0x080c, 0x5ef6, 0x080c,
-	0x7212, 0x003e, 0x002e, 0x000e, 0x00ae, 0x0005, 0x003e, 0x002e,
-	0x000e, 0x080c, 0x72bd, 0x0016, 0x0046, 0x00c6, 0x644c, 0x9486,
+	0x0130, 0x7094, 0x9086, 0x0029, 0x1110, 0x080c, 0x7532, 0x0804,
+	0x2654, 0x080c, 0xc8ce, 0x0130, 0x0046, 0x2021, 0x0001, 0x080c,
+	0x2c28, 0x004e, 0x080c, 0x7651, 0x0090, 0x080c, 0xc8ce, 0x0130,
+	0x0046, 0x2021, 0x0002, 0x080c, 0x2c28, 0x004e, 0x2001, 0x1959,
+	0x2003, 0x0002, 0x0020, 0x080c, 0x748e, 0x0804, 0x2654, 0x080c,
+	0x75d4, 0x0804, 0x2654, 0xd1ac, 0x0904, 0x2575, 0x080c, 0x7351,
+	0x1510, 0x6027, 0x0020, 0x0006, 0x0026, 0x0036, 0x080c, 0xc8ce,
+	0x0138, 0x0046, 0x634c, 0x2021, 0x0000, 0x080c, 0x2c28, 0x004e,
+	0x080c, 0x736b, 0x1158, 0x080c, 0x764c, 0x080c, 0x5fb3, 0x080c,
+	0x727e, 0x003e, 0x002e, 0x000e, 0x00ae, 0x0005, 0x003e, 0x002e,
+	0x000e, 0x080c, 0x7329, 0x0016, 0x0046, 0x00c6, 0x644c, 0x9486,
 	0xf0f0, 0x1138, 0x2061, 0x0100, 0x644a, 0x6043, 0x0090, 0x6043,
 	0x0010, 0x74d6, 0x948c, 0xff00, 0x7038, 0xd084, 0x0178, 0x080c,
-	0xbef8, 0x1118, 0x9186, 0xf800, 0x1148, 0x0036, 0x0046, 0x2418,
-	0x2021, 0x0000, 0x080c, 0x2bbf, 0x004e, 0x003e, 0x080c, 0xbef1,
-	0x1904, 0x24f1, 0x9196, 0xff00, 0x01e8, 0x705c, 0x9084, 0x00ff,
-	0x810f, 0x81ff, 0x0110, 0x9116, 0x01a8, 0x7130, 0xd18c, 0x1190,
-	0x080c, 0x31c0, 0x0118, 0xc18d, 0x7132, 0x0060, 0x6240, 0x9294,
-	0x0010, 0x0904, 0x24f1, 0x6248, 0x9294, 0xff00, 0x9296, 0xff00,
-	0x1904, 0x24f1, 0x7038, 0xd08c, 0x1140, 0x2001, 0x180c, 0x200c,
-	0xd1ac, 0x1904, 0x24f1, 0xc1ad, 0x2102, 0x0036, 0x73d4, 0x2011,
-	0x8013, 0x080c, 0x4abd, 0x003e, 0x7130, 0xc185, 0x7132, 0x2011,
+	0xc8ce, 0x1118, 0x9186, 0xf800, 0x1148, 0x0036, 0x0046, 0x2418,
+	0x2021, 0x0000, 0x080c, 0x2c28, 0x004e, 0x003e, 0x080c, 0xc8c7,
+	0x1904, 0x2552, 0x9196, 0xff00, 0x05a8, 0x705c, 0x9084, 0x00ff,
+	0x810f, 0x81ff, 0x0110, 0x9116, 0x0568, 0x7130, 0xd184, 0x1550,
+	0x080c, 0x325c, 0x0128, 0xc18d, 0x7132, 0x080c, 0x6865, 0x1510,
+	0x6240, 0x9294, 0x0010, 0x0130, 0x6248, 0x9294, 0xff00, 0x9296,
+	0xff00, 0x01c0, 0x7030, 0xd08c, 0x0904, 0x2552, 0x7038, 0xd08c,
+	0x1140, 0x2001, 0x180c, 0x200c, 0xd1ac, 0x1904, 0x2552, 0xc1ad,
+	0x2102, 0x0036, 0x73d4, 0x2011, 0x8013, 0x080c, 0x4b6d, 0x003e,
+	0x0804, 0x2552, 0x7038, 0xd08c, 0x1140, 0x2001, 0x180c, 0x200c,
+	0xd1ac, 0x1904, 0x2552, 0xc1ad, 0x2102, 0x0036, 0x73d4, 0x2011,
+	0x8013, 0x080c, 0x4b6d, 0x003e, 0x7130, 0xc185, 0x7132, 0x2011,
 	0x185f, 0x220c, 0xd1a4, 0x01f0, 0x0016, 0x2009, 0x0001, 0x2011,
-	0x0100, 0x080c, 0x8532, 0x2019, 0x000e, 0x00c6, 0x2061, 0x0000,
-	0x080c, 0xd0d7, 0x00ce, 0x9484, 0x00ff, 0x9080, 0x31cc, 0x200d,
+	0x0100, 0x080c, 0x8703, 0x2019, 0x000e, 0x00c6, 0x2061, 0x0000,
+	0x080c, 0xdc90, 0x00ce, 0x9484, 0x00ff, 0x9080, 0x3268, 0x200d,
 	0x918c, 0xff00, 0x810f, 0x2120, 0x9006, 0x2009, 0x000e, 0x080c,
-	0xd156, 0x001e, 0xd1ac, 0x1140, 0x0016, 0x900e, 0x2019, 0x0004,
-	0x080c, 0x3037, 0x001e, 0x00a8, 0x0156, 0x00b6, 0x20a9, 0x007f,
-	0x900e, 0x080c, 0x6411, 0x1140, 0x7030, 0xd084, 0x1118, 0xb800,
-	0xd0bc, 0x1110, 0x080c, 0x5f10, 0x8108, 0x1f04, 0x24e1, 0x00be,
-	0x015e, 0x00ce, 0x004e, 0x080c, 0x9e89, 0x60e3, 0x0000, 0x001e,
-	0x2001, 0x1800, 0x2014, 0x9296, 0x0004, 0x1170, 0xd19c, 0x11a0,
-	0x2011, 0x180c, 0x2214, 0xd29c, 0x1120, 0x6204, 0x9295, 0x0002,
-	0x6206, 0x6228, 0xc29d, 0x622a, 0x2003, 0x0001, 0x2001, 0x1825,
-	0x2003, 0x0000, 0x6027, 0x0020, 0xd194, 0x0904, 0x25f3, 0x0016,
-	0x6220, 0xd2b4, 0x0904, 0x259c, 0x080c, 0x8420, 0x080c, 0x9623,
-	0x6027, 0x0004, 0x00f6, 0x2019, 0x19cd, 0x2304, 0x907d, 0x0904,
-	0x256b, 0x7804, 0x9086, 0x0032, 0x15f0, 0x00d6, 0x00c6, 0x00e6,
-	0x0096, 0x2069, 0x0140, 0x782c, 0x685e, 0x7808, 0x685a, 0x6043,
-	0x0002, 0x2001, 0x0003, 0x8001, 0x1df0, 0x6043, 0x0000, 0x2001,
-	0x003c, 0x8001, 0x1df0, 0x080c, 0x2b75, 0x2001, 0x001e, 0x8001,
-	0x0240, 0x20a9, 0x0009, 0x080c, 0x2a6e, 0x6904, 0xd1dc, 0x1140,
-	0x0cb0, 0x2001, 0x0100, 0x080c, 0x2b65, 0x9006, 0x080c, 0x2b65,
-	0x080c, 0x8b2b, 0x080c, 0x8c37, 0x7814, 0x2048, 0xa86b, 0x0103,
-	0x2f60, 0x080c, 0x9f18, 0x009e, 0x00ee, 0x00ce, 0x00de, 0x00fe,
-	0x001e, 0x00ae, 0x0005, 0x00fe, 0x00d6, 0x2069, 0x0140, 0x6804,
-	0x9084, 0x4000, 0x0110, 0x080c, 0x2b75, 0x00de, 0x00c6, 0x2061,
-	0x19c4, 0x6028, 0x080c, 0xbef8, 0x0120, 0x909a, 0x0003, 0x1258,
-	0x0018, 0x909a, 0x00c8, 0x1238, 0x8000, 0x602a, 0x00ce, 0x080c,
-	0x95ff, 0x0804, 0x25f2, 0x2061, 0x0100, 0x62c0, 0x080c, 0x9d0f,
-	0x2019, 0x19cd, 0x2304, 0x9065, 0x0120, 0x2009, 0x0027, 0x080c,
-	0x9f88, 0x00ce, 0x0804, 0x25f2, 0xd2bc, 0x0904, 0x25df, 0x080c,
-	0x842d, 0x6014, 0x9084, 0x1984, 0x9085, 0x0010, 0x6016, 0x6027,
-	0x0004, 0x00d6, 0x2069, 0x0140, 0x6804, 0x9084, 0x4000, 0x0110,
-	0x080c, 0x2b75, 0x00de, 0x00c6, 0x2061, 0x19c4, 0x6044, 0x080c,
-	0xbef8, 0x0120, 0x909a, 0x0003, 0x1628, 0x0018, 0x909a, 0x00c8,
-	0x1608, 0x8000, 0x6046, 0x603c, 0x00ce, 0x9005, 0x0558, 0x2009,
-	0x07d0, 0x080c, 0x8425, 0x9080, 0x0008, 0x2004, 0x9086, 0x0006,
-	0x1138, 0x6114, 0x918c, 0x1984, 0x918d, 0x0012, 0x6116, 0x00d0,
-	0x6114, 0x918c, 0x1984, 0x918d, 0x0016, 0x6116, 0x0098, 0x6027,
-	0x0004, 0x0080, 0x0036, 0x2019, 0x0001, 0x080c, 0x9964, 0x003e,
-	0x2019, 0x19d3, 0x2304, 0x9065, 0x0120, 0x2009, 0x004f, 0x080c,
-	0x9f88, 0x00ce, 0x001e, 0xd19c, 0x0904, 0x2647, 0x7038, 0xd0ac,
-	0x1538, 0x0016, 0x0156, 0x6027, 0x0008, 0x080c, 0x2b9f, 0x20a9,
-	0x0028, 0xa001, 0x1f04, 0x2601, 0x6150, 0x9185, 0x1400, 0x6052,
-	0x20a9, 0x0366, 0x1d04, 0x260a, 0x080c, 0x8454, 0x6020, 0xd09c,
-	0x1130, 0x015e, 0x6152, 0x001e, 0x6027, 0x0008, 0x0480, 0x080c,
-	0x2a55, 0x1f04, 0x260a, 0x015e, 0x6152, 0x001e, 0x6027, 0x0008,
-	0x0016, 0x6028, 0xc09c, 0x602a, 0x080c, 0x9e89, 0x60e3, 0x0000,
-	0x080c, 0xd33c, 0x080c, 0xd373, 0x080c, 0x55ab, 0xd0fc, 0x1138,
-	0x080c, 0xbef1, 0x1120, 0x9085, 0x0001, 0x080c, 0x732a, 0x9006,
-	0x080c, 0x2b65, 0x2009, 0x0002, 0x080c, 0x2a93, 0x2001, 0x1800,
-	0x2003, 0x0004, 0x6027, 0x0008, 0x080c, 0x0b9e, 0x001e, 0x918c,
-	0xffd0, 0x6126, 0x00ae, 0x0005, 0x0006, 0x0016, 0x0026, 0x0036,
-	0x00e6, 0x00f6, 0x0126, 0x2091, 0x8000, 0x2071, 0x1800, 0x71cc,
-	0x70ce, 0x9116, 0x05e0, 0x81ff, 0x01a0, 0x2009, 0x0000, 0x080c,
-	0x2a93, 0x2011, 0x8011, 0x2019, 0x010e, 0x231c, 0x939e, 0x0007,
-	0x1118, 0x2019, 0x0001, 0x0010, 0x2019, 0x0000, 0x080c, 0x4abd,
-	0x0430, 0x2001, 0x1985, 0x200c, 0x81ff, 0x1140, 0x2001, 0x0109,
-	0x2004, 0xd0b4, 0x0118, 0x2019, 0x0003, 0x0008, 0x2118, 0x2011,
-	0x8012, 0x080c, 0x4abd, 0x080c, 0x55ab, 0xd0fc, 0x1180, 0x080c,
-	0xbef1, 0x1168, 0x00c6, 0x080c, 0x2733, 0x080c, 0x98cb, 0x2061,
-	0x0100, 0x2019, 0x0028, 0x900e, 0x080c, 0x3037, 0x00ce, 0x012e,
-	0x00fe, 0x00ee, 0x003e, 0x002e, 0x001e, 0x000e, 0x0005, 0x2028,
-	0x918c, 0x00ff, 0x2130, 0x9094, 0xff00, 0x11f0, 0x2011, 0x1836,
-	0x2214, 0xd2ac, 0x11c8, 0x81ff, 0x01e8, 0x2011, 0x181e, 0x2204,
-	0x9106, 0x1190, 0x2011, 0x181f, 0x2214, 0x9294, 0xff00, 0x9584,
-	0xff00, 0x9206, 0x1148, 0x2011, 0x181f, 0x2214, 0x9294, 0x00ff,
-	0x9584, 0x00ff, 0x9206, 0x1120, 0x2500, 0x080c, 0x7f2a, 0x0048,
-	0x9584, 0x00ff, 0x9080, 0x31cc, 0x200d, 0x918c, 0xff00, 0x810f,
-	0x9006, 0x0005, 0x9080, 0x31cc, 0x200d, 0x918c, 0x00ff, 0x0005,
-	0x00d6, 0x2069, 0x0140, 0x2001, 0x1817, 0x2003, 0x00ef, 0x20a9,
-	0x0010, 0x9006, 0x6852, 0x6856, 0x1f04, 0x26e3, 0x00de, 0x0005,
-	0x0006, 0x00d6, 0x0026, 0x2069, 0x0140, 0x2001, 0x1817, 0x2102,
-	0x8114, 0x8214, 0x8214, 0x8214, 0x20a9, 0x0010, 0x6853, 0x0000,
-	0x9006, 0x82ff, 0x1128, 0x9184, 0x000f, 0x9080, 0xd837, 0x2005,
-	0x6856, 0x8211, 0x1f04, 0x26f8, 0x002e, 0x00de, 0x000e, 0x0005,
-	0x00c6, 0x2061, 0x1800, 0x6030, 0x0110, 0xc09d, 0x0008, 0xc09c,
-	0x6032, 0x00ce, 0x0005, 0x0156, 0x00d6, 0x0026, 0x0016, 0x0006,
-	0x2069, 0x0140, 0x6980, 0x9116, 0x0180, 0x9112, 0x1230, 0x8212,
-	0x8210, 0x22a8, 0x2001, 0x0402, 0x0018, 0x22a8, 0x2001, 0x0404,
-	0x680e, 0x1f04, 0x2728, 0x680f, 0x0000, 0x000e, 0x001e, 0x002e,
-	0x00de, 0x015e, 0x0005, 0x080c, 0x55a7, 0xd0c4, 0x0150, 0xd0a4,
-	0x0140, 0x9006, 0x0046, 0x2020, 0x2009, 0x002e, 0x080c, 0xd156,
-	0x004e, 0x0005, 0x00f6, 0x0016, 0x0026, 0x2079, 0x0140, 0x78c4,
-	0xd0dc, 0x0904, 0x279f, 0x080c, 0x29f2, 0x0660, 0x9084, 0x0700,
-	0x908e, 0x0600, 0x1120, 0x2011, 0x4000, 0x900e, 0x0458, 0x908e,
-	0x0500, 0x1120, 0x2011, 0x8000, 0x900e, 0x0420, 0x908e, 0x0400,
-	0x1120, 0x9016, 0x2009, 0x0001, 0x00e8, 0x908e, 0x0300, 0x1120,
-	0x9016, 0x2009, 0x0002, 0x00b0, 0x908e, 0x0200, 0x1120, 0x9016,
-	0x2009, 0x0004, 0x0078, 0x908e, 0x0100, 0x1548, 0x9016, 0x2009,
-	0x0008, 0x0040, 0x9084, 0x0700, 0x908e, 0x0300, 0x1500, 0x2011,
-	0x0030, 0x0058, 0x2300, 0x9080, 0x0020, 0x2018, 0x080c, 0x854b,
-	0x928c, 0xff00, 0x0110, 0x2011, 0x00ff, 0x2200, 0x8007, 0x9085,
-	0x004c, 0x78c2, 0x2009, 0x0138, 0x220a, 0x080c, 0x72e5, 0x1118,
-	0x2009, 0x194a, 0x220a, 0x002e, 0x001e, 0x00fe, 0x0005, 0x78c3,
-	0x0000, 0x0cc8, 0x0126, 0x2091, 0x2800, 0x0006, 0x0016, 0x0026,
-	0x2001, 0x0170, 0x200c, 0x8000, 0x2014, 0x9184, 0x0003, 0x0110,
-	0x080c, 0x0dbd, 0x002e, 0x001e, 0x000e, 0x012e, 0x0005, 0x2001,
-	0x180d, 0x2004, 0xd08c, 0x0118, 0x2009, 0x0002, 0x0005, 0x2001,
-	0x0171, 0x2004, 0xd0dc, 0x0168, 0x2001, 0x0170, 0x200c, 0x918c,
-	0x00ff, 0x918e, 0x004c, 0x1128, 0x200c, 0x918c, 0xff00, 0x810f,
-	0x0005, 0x900e, 0x2001, 0x0227, 0x2004, 0x8007, 0x9084, 0x00ff,
-	0x8004, 0x9108, 0x2001, 0x0226, 0x2004, 0x8007, 0x9084, 0x00ff,
-	0x8004, 0x9108, 0x0005, 0x0018, 0x000c, 0x0018, 0x0020, 0x1000,
-	0x0800, 0x1000, 0x1800, 0x0156, 0x0006, 0x0016, 0x0026, 0x00e6,
-	0x2001, 0x196c, 0x2004, 0x908a, 0x0007, 0x1a0c, 0x0dc4, 0x0033,
-	0x00ee, 0x002e, 0x001e, 0x000e, 0x015e, 0x0005, 0x2805, 0x2823,
-	0x2847, 0x2849, 0x2872, 0x2874, 0x2876, 0x2001, 0x0001, 0x080c,
-	0x264c, 0x080c, 0x2a50, 0x2001, 0x196e, 0x2003, 0x0000, 0x7828,
-	0x9084, 0xe1d7, 0x782a, 0x9006, 0x20a9, 0x0009, 0x080c, 0x2a0e,
-	0x2001, 0x196c, 0x2003, 0x0006, 0x2009, 0x001e, 0x2011, 0x2877,
-	0x080c, 0x8432, 0x0005, 0x2009, 0x1971, 0x200b, 0x0000, 0x2001,
-	0x1976, 0x2003, 0x0036, 0x2001, 0x1975, 0x2003, 0x002a, 0x2001,
-	0x196e, 0x2003, 0x0001, 0x9006, 0x080c, 0x29c0, 0x2001, 0xffff,
-	0x20a9, 0x0009, 0x080c, 0x2a0e, 0x2001, 0x196c, 0x2003, 0x0006,
-	0x2009, 0x001e, 0x2011, 0x2877, 0x080c, 0x8432, 0x0005, 0x080c,
-	0x0dc4, 0x2001, 0x1976, 0x2003, 0x0036, 0x2001, 0x196e, 0x2003,
-	0x0003, 0x7a38, 0x9294, 0x0005, 0x9296, 0x0004, 0x0110, 0x9006,
-	0x0010, 0x2001, 0x0001, 0x080c, 0x29c0, 0x2001, 0x1972, 0x2003,
-	0x0000, 0x2001, 0xffff, 0x20a9, 0x0009, 0x080c, 0x2a0e, 0x2001,
-	0x196c, 0x2003, 0x0006, 0x2009, 0x001e, 0x2011, 0x2877, 0x080c,
-	0x8432, 0x0005, 0x080c, 0x0dc4, 0x080c, 0x0dc4, 0x0005, 0x0006,
-	0x0016, 0x0026, 0x00e6, 0x00f6, 0x0156, 0x0126, 0x2091, 0x8000,
-	0x2079, 0x0100, 0x2001, 0x196e, 0x2004, 0x908a, 0x0007, 0x1a0c,
-	0x0dc4, 0x0043, 0x012e, 0x015e, 0x00fe, 0x00ee, 0x002e, 0x001e,
-	0x000e, 0x0005, 0x2899, 0x28b5, 0x28f1, 0x291d, 0x293d, 0x2949,
-	0x294b, 0x080c, 0x2a02, 0x1190, 0x2009, 0x1974, 0x2104, 0x7a38,
-	0x9294, 0x0005, 0x9296, 0x0004, 0x0110, 0xc08d, 0x0008, 0xc085,
-	0x200a, 0x2001, 0x196c, 0x2003, 0x0001, 0x0030, 0x080c, 0x296f,
-	0x2001, 0xffff, 0x080c, 0x2814, 0x0005, 0x080c, 0x294d, 0x05c0,
-	0x2009, 0x1975, 0x2104, 0x8001, 0x200a, 0x080c, 0x2a02, 0x1158,
-	0x7a38, 0x9294, 0x0005, 0x9296, 0x0005, 0x0518, 0x2009, 0x1974,
-	0x2104, 0xc085, 0x200a, 0x2009, 0x1971, 0x2104, 0x8000, 0x200a,
-	0x9086, 0x0005, 0x0118, 0x080c, 0x2955, 0x00c0, 0x200b, 0x0000,
-	0x7a38, 0x9294, 0x0006, 0x9296, 0x0004, 0x0110, 0x9006, 0x0010,
-	0x2001, 0x0001, 0x080c, 0x29dd, 0x2001, 0x196e, 0x2003, 0x0002,
-	0x0028, 0x2001, 0x196c, 0x2003, 0x0003, 0x0010, 0x080c, 0x2836,
-	0x0005, 0x080c, 0x294d, 0x0540, 0x2009, 0x1975, 0x2104, 0x8001,
-	0x200a, 0x080c, 0x2a02, 0x1148, 0x2001, 0x196c, 0x2003, 0x0003,
-	0x2001, 0x196d, 0x2003, 0x0000, 0x00b8, 0x2009, 0x1975, 0x2104,
-	0x9005, 0x1118, 0x080c, 0x2992, 0x0010, 0x080c, 0x2962, 0x080c,
-	0x2955, 0x2009, 0x1971, 0x200b, 0x0000, 0x2001, 0x196e, 0x2003,
-	0x0001, 0x080c, 0x2836, 0x0000, 0x0005, 0x0479, 0x01e8, 0x080c,
-	0x2a02, 0x1198, 0x2009, 0x1972, 0x2104, 0x8000, 0x200a, 0x9086,
-	0x0007, 0x0108, 0x0078, 0x2001, 0x1977, 0x2003, 0x000a, 0x2009,
-	0x1974, 0x2104, 0xc0fd, 0x200a, 0x0038, 0x00f9, 0x2001, 0x196e,
-	0x2003, 0x0004, 0x080c, 0x2861, 0x0005, 0x0079, 0x0148, 0x080c,
-	0x2a02, 0x1118, 0x080c, 0x284d, 0x0018, 0x0079, 0x080c, 0x2861,
-	0x0005, 0x080c, 0x0dc4, 0x080c, 0x0dc4, 0x2009, 0x1976, 0x2104,
-	0x8001, 0x200a, 0x090c, 0x29ae, 0x0005, 0x7a38, 0x9294, 0x0005,
-	0x9296, 0x0005, 0x0110, 0x9006, 0x0010, 0x2001, 0x0001, 0x080c,
-	0x29dd, 0x0005, 0x7a38, 0x9294, 0x0006, 0x9296, 0x0006, 0x0110,
-	0x9006, 0x0010, 0x2001, 0x0001, 0x080c, 0x29c0, 0x0005, 0x2009,
-	0x1971, 0x2104, 0x8000, 0x200a, 0x9086, 0x0005, 0x0108, 0x0068,
-	0x200b, 0x0000, 0x7a38, 0x9294, 0x0006, 0x9296, 0x0006, 0x0110,
-	0x9006, 0x0010, 0x2001, 0x0001, 0x04d9, 0x7a38, 0x9294, 0x0005,
-	0x9296, 0x0005, 0x0110, 0x9006, 0x0010, 0x2001, 0x0001, 0x080c,
-	0x29dd, 0x0005, 0x0086, 0x2001, 0x1974, 0x2004, 0x9084, 0x7fff,
-	0x090c, 0x0dc4, 0x2009, 0x1973, 0x2144, 0x8846, 0x280a, 0x9844,
-	0x0dd8, 0xd08c, 0x1120, 0xd084, 0x1120, 0x080c, 0x0dc4, 0x9006,
-	0x0010, 0x2001, 0x0001, 0x00a1, 0x008e, 0x0005, 0x0006, 0x0156,
-	0x2001, 0x196c, 0x20a9, 0x0009, 0x2003, 0x0000, 0x8000, 0x1f04,
-	0x29b4, 0x2001, 0x1973, 0x2003, 0x8000, 0x015e, 0x000e, 0x0005,
-	0x00f6, 0x2079, 0x0100, 0x9085, 0x0000, 0x0158, 0x7838, 0x9084,
-	0xfff9, 0x9085, 0x0004, 0x783a, 0x2009, 0x1979, 0x210c, 0x795a,
-	0x0050, 0x7838, 0x9084, 0xfffb, 0x9085, 0x0006, 0x783a, 0x2009,
-	0x197a, 0x210c, 0x795a, 0x00fe, 0x0005, 0x00f6, 0x2079, 0x0100,
-	0x9085, 0x0000, 0x0138, 0x7838, 0x9084, 0xfffa, 0x9085, 0x0004,
-	0x783a, 0x0030, 0x7838, 0x9084, 0xfffb, 0x9085, 0x0005, 0x783a,
-	0x00fe, 0x0005, 0x0006, 0x2001, 0x0100, 0x2004, 0x9082, 0x0007,
-	0x000e, 0x0005, 0x0006, 0x2001, 0x0100, 0x2004, 0x9082, 0x0009,
-	0x000e, 0x0005, 0x0156, 0x20a9, 0x0064, 0x7820, 0x080c, 0x2a8d,
-	0xd09c, 0x1110, 0x1f04, 0x2a05, 0x015e, 0x0005, 0x0126, 0x0016,
-	0x0006, 0x2091, 0x8000, 0x7850, 0x9085, 0x0040, 0x7852, 0x7850,
-	0x9084, 0xfbcf, 0x7852, 0x080c, 0x2a8d, 0x9085, 0x2000, 0x7852,
-	0x000e, 0x2008, 0x9186, 0x0000, 0x1118, 0x783b, 0x0007, 0x0090,
-	0x9186, 0x0001, 0x1118, 0x783b, 0x0006, 0x0060, 0x9186, 0x0002,
-	0x1118, 0x783b, 0x0005, 0x0030, 0x9186, 0x0003, 0x1118, 0x783b,
-	0x0004, 0x0000, 0x0006, 0x1d04, 0x2a3b, 0x080c, 0x8454, 0x1f04,
-	0x2a3b, 0x7850, 0x9085, 0x0400, 0x9084, 0xdfbf, 0x7852, 0x080c,
-	0x2a8d, 0x9085, 0x1000, 0x7852, 0x000e, 0x001e, 0x012e, 0x0005,
-	0x7850, 0x9084, 0xffcf, 0x7852, 0x0005, 0x0006, 0x0156, 0x00f6,
-	0x2079, 0x0100, 0x20a9, 0x000a, 0x7854, 0xd0ac, 0x1130, 0x7820,
-	0xd0e4, 0x1140, 0x1f04, 0x2a5f, 0x0028, 0x7854, 0xd08c, 0x1110,
-	0x1f04, 0x2a65, 0x00fe, 0x015e, 0x000e, 0x0005, 0x1d04, 0x2a6e,
-	0x080c, 0x8454, 0x1f04, 0x2a6e, 0x0005, 0x0006, 0x2001, 0x1978,
-	0x2004, 0x9086, 0x0000, 0x000e, 0x0005, 0x0006, 0x2001, 0x1978,
-	0x2004, 0x9086, 0x0001, 0x000e, 0x0005, 0x0006, 0x2001, 0x1978,
-	0x2004, 0x9086, 0x0002, 0x000e, 0x0005, 0xa001, 0xa001, 0xa001,
-	0xa001, 0xa001, 0x0005, 0x0006, 0x2001, 0x1985, 0x2102, 0x000e,
-	0x0005, 0x2009, 0x0171, 0x2104, 0xd0dc, 0x0140, 0x2009, 0x0170,
-	0x2104, 0x200b, 0x0080, 0xa001, 0xa001, 0x200a, 0x0005, 0x0036,
-	0x0046, 0x2001, 0x0141, 0x200c, 0x918c, 0xff00, 0x9186, 0x2100,
-	0x0140, 0x9186, 0x2000, 0x0170, 0x9186, 0x0100, 0x1904, 0x2b06,
-	0x0048, 0x0016, 0x2009, 0x1a62, 0x2104, 0x8000, 0x0208, 0x200a,
-	0x001e, 0x04f0, 0x2009, 0x00a2, 0x080c, 0x0e53, 0x2019, 0x0160,
-	0x2324, 0x2011, 0x0003, 0x2009, 0x0169, 0x2104, 0x9084, 0x0007,
-	0x210c, 0x918c, 0x0007, 0x910e, 0x1db0, 0x9086, 0x0003, 0x1548,
-	0x2304, 0x0066, 0x0076, 0x2031, 0x0002, 0x233c, 0x973e, 0x0148,
-	0x8631, 0x1dd8, 0x2031, 0x1a63, 0x263c, 0x8738, 0x0208, 0x2732,
-	0x2304, 0x007e, 0x006e, 0x9402, 0x02a0, 0x19d0, 0x8211, 0x19d8,
-	0x84ff, 0x0170, 0x2001, 0x0141, 0x200c, 0x918c, 0xff00, 0x9186,
-	0x0100, 0x0130, 0x2009, 0x180c, 0x2104, 0xc0dd, 0x200a, 0x0008,
-	0x0421, 0x2001, 0x195e, 0x200c, 0x080c, 0x0e53, 0x004e, 0x003e,
-	0x0005, 0x2001, 0x180c, 0x2004, 0xd0dc, 0x01b0, 0x2001, 0x0160,
-	0x2004, 0x9005, 0x0140, 0x2001, 0x0141, 0x2004, 0x9084, 0xff00,
-	0x9086, 0x0100, 0x1148, 0x0126, 0x2091, 0x8000, 0x0016, 0x0026,
-	0x0021, 0x002e, 0x001e, 0x012e, 0x0005, 0x00c6, 0x2061, 0x0100,
-	0x6014, 0x0006, 0x2001, 0x0161, 0x2003, 0x0000, 0x6017, 0x0018,
-	0xa001, 0xa001, 0x602f, 0x0008, 0x6104, 0x918e, 0x0010, 0x6106,
-	0x918e, 0x0010, 0x6106, 0x6017, 0x0040, 0x04b9, 0x001e, 0x9184,
-	0x0003, 0x01e0, 0x0036, 0x0016, 0x2019, 0x0141, 0x6124, 0x918c,
-	0x0028, 0x1120, 0x2304, 0x9084, 0x2800, 0x0dc0, 0x001e, 0x919c,
-	0xffe4, 0x9184, 0x0001, 0x0118, 0x9385, 0x0009, 0x6016, 0x9184,
-	0x0002, 0x0118, 0x9385, 0x0012, 0x6016, 0x003e, 0x2001, 0x180c,
-	0x200c, 0xc1dc, 0x2102, 0x00ce, 0x0005, 0x0016, 0x0026, 0x080c,
-	0x72ff, 0x0108, 0xc0bc, 0x2009, 0x0140, 0x2114, 0x9294, 0x0001,
-	0x9215, 0x220a, 0x002e, 0x001e, 0x0005, 0x0016, 0x0026, 0x2009,
-	0x0140, 0x2114, 0x9294, 0x0001, 0x9285, 0x1000, 0x200a, 0x220a,
-	0x002e, 0x001e, 0x0005, 0x0016, 0x0026, 0x2009, 0x0140, 0x2114,
-	0x9294, 0x0001, 0x9215, 0x220a, 0x002e, 0x001e, 0x0005, 0x0006,
-	0x0016, 0x2009, 0x0140, 0x2104, 0x1128, 0x080c, 0x72ff, 0x0110,
-	0xc0bc, 0x0008, 0xc0bd, 0x200a, 0x001e, 0x000e, 0x0005, 0x0006,
-	0x0156, 0x6050, 0x9085, 0x0040, 0x6052, 0x6050, 0x9084, 0xfbcf,
-	0x6052, 0x080c, 0x2a8d, 0x9085, 0x2000, 0x6052, 0x20a9, 0x0012,
-	0x1d04, 0x2bb0, 0x080c, 0x8454, 0x1f04, 0x2bb0, 0x6050, 0x9085,
-	0x0400, 0x9084, 0xdfbf, 0x6052, 0x015e, 0x000e, 0x0005, 0x7044,
-	0xd084, 0x1130, 0xc085, 0x7046, 0x2011, 0x8016, 0x080c, 0x4abd,
-	0x0005, 0x0016, 0x0006, 0x6027, 0x4000, 0x080c, 0xd348, 0x2001,
-	0x19d3, 0x2004, 0x00c6, 0x9065, 0x090c, 0x0dc4, 0x0096, 0x6014,
-	0x2048, 0x080c, 0xb955, 0x0178, 0xa884, 0xc0dd, 0xa886, 0x6020,
-	0x9086, 0x0006, 0x1140, 0x2001, 0x0132, 0x200c, 0x2001, 0x0131,
-	0x2004, 0xa99a, 0xa89e, 0x009e, 0x080c, 0xb5c5, 0x00ce, 0x000e,
-	0x001e, 0x0005, 0x2e5e, 0x2e5e, 0x2c82, 0x2c82, 0x2c8e, 0x2c8e,
-	0x2c9a, 0x2c9a, 0x2ca8, 0x2ca8, 0x2cb4, 0x2cb4, 0x2cc2, 0x2cc2,
-	0x2cd0, 0x2cd0, 0x2ce2, 0x2ce2, 0x2cee, 0x2cee, 0x2cfc, 0x2cfc,
-	0x2d1a, 0x2d1a, 0x2d3a, 0x2d3a, 0x2d0a, 0x2d0a, 0x2d2a, 0x2d2a,
-	0x2d48, 0x2d48, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0,
-	0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0,
-	0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0,
-	0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0,
-	0x2ce0, 0x2ce0, 0x2d5a, 0x2d5a, 0x2d66, 0x2d66, 0x2d74, 0x2d74,
-	0x2d82, 0x2d82, 0x2d92, 0x2d92, 0x2da0, 0x2da0, 0x2db0, 0x2db0,
-	0x2dc0, 0x2dc0, 0x2dd2, 0x2dd2, 0x2de0, 0x2de0, 0x2df0, 0x2df0,
-	0x2e12, 0x2e12, 0x2e34, 0x2e34, 0x2e00, 0x2e00, 0x2e23, 0x2e23,
-	0x2e43, 0x2e43, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0,
-	0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0,
-	0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0,
-	0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0,
-	0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0,
-	0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0,
-	0x2ce0, 0x2ce0, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136,
-	0x0146, 0x0156, 0x080c, 0x2365, 0x0804, 0x2e56, 0x0106, 0x0006,
-	0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x2175,
-	0x0804, 0x2e56, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136,
-	0x0146, 0x0156, 0x080c, 0x2175, 0x080c, 0x2365, 0x0804, 0x2e56,
-	0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156,
-	0x080c, 0x21b0, 0x0804, 0x2e56, 0x0106, 0x0006, 0x0126, 0x01c6,
-	0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x2365, 0x080c, 0x21b0,
-	0x0804, 0x2e56, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136,
-	0x0146, 0x0156, 0x080c, 0x2175, 0x080c, 0x21b0, 0x0804, 0x2e56,
-	0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156,
-	0x080c, 0x2175, 0x080c, 0x2365, 0x080c, 0x21b0, 0x0804, 0x2e56,
-	0xa001, 0x0cf0, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136,
-	0x0146, 0x0156, 0x080c, 0x132a, 0x0804, 0x2e56, 0x0106, 0x0006,
-	0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x2365,
-	0x080c, 0x132a, 0x0804, 0x2e56, 0x0106, 0x0006, 0x0126, 0x01c6,
-	0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x2175, 0x080c, 0x132a,
-	0x0804, 0x2e56, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136,
-	0x0146, 0x0156, 0x080c, 0x2365, 0x080c, 0x132a, 0x080c, 0x21b0,
-	0x0804, 0x2e56, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136,
-	0x0146, 0x0156, 0x080c, 0x2175, 0x080c, 0x2365, 0x080c, 0x132a,
-	0x0804, 0x2e56, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136,
-	0x0146, 0x0156, 0x080c, 0x2175, 0x080c, 0x132a, 0x080c, 0x21b0,
-	0x0804, 0x2e56, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136,
-	0x0146, 0x0156, 0x080c, 0x132a, 0x080c, 0x21b0, 0x0804, 0x2e56,
-	0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156,
-	0x080c, 0x2175, 0x080c, 0x2365, 0x080c, 0x132a, 0x080c, 0x21b0,
-	0x0804, 0x2e56, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136,
-	0x0146, 0x0156, 0x080c, 0x27a2, 0x0804, 0x2e56, 0x0106, 0x0006,
-	0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x27a2,
-	0x080c, 0x2365, 0x0804, 0x2e56, 0x0106, 0x0006, 0x0126, 0x01c6,
-	0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x27a2, 0x080c, 0x2175,
-	0x0804, 0x2e56, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136,
-	0x0146, 0x0156, 0x080c, 0x27a2, 0x080c, 0x2175, 0x080c, 0x2365,
-	0x0804, 0x2e56, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136,
-	0x0146, 0x0156, 0x080c, 0x27a2, 0x080c, 0x21b0, 0x0804, 0x2e56,
-	0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156,
-	0x080c, 0x27a2, 0x080c, 0x2365, 0x080c, 0x21b0, 0x0804, 0x2e56,
-	0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156,
-	0x080c, 0x27a2, 0x080c, 0x2175, 0x080c, 0x21b0, 0x0804, 0x2e56,
-	0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156,
-	0x080c, 0x27a2, 0x080c, 0x2175, 0x080c, 0x2365, 0x080c, 0x21b0,
-	0x0804, 0x2e56, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136,
-	0x0146, 0x0156, 0x080c, 0x27a2, 0x080c, 0x132a, 0x0804, 0x2e56,
-	0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156,
-	0x080c, 0x27a2, 0x080c, 0x2365, 0x080c, 0x132a, 0x0804, 0x2e56,
-	0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156,
-	0x080c, 0x27a2, 0x080c, 0x2175, 0x080c, 0x132a, 0x0804, 0x2e56,
-	0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156,
-	0x080c, 0x27a2, 0x080c, 0x2365, 0x080c, 0x132a, 0x080c, 0x21b0,
-	0x0804, 0x2e56, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136,
-	0x0146, 0x0156, 0x080c, 0x27a2, 0x080c, 0x2175, 0x080c, 0x2365,
-	0x080c, 0x132a, 0x0498, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6,
-	0x0136, 0x0146, 0x0156, 0x080c, 0x27a2, 0x080c, 0x2175, 0x080c,
-	0x132a, 0x080c, 0x21b0, 0x0410, 0x0106, 0x0006, 0x0126, 0x01c6,
-	0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x27a2, 0x080c, 0x132a,
-	0x080c, 0x21b0, 0x0098, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6,
-	0x0136, 0x0146, 0x0156, 0x080c, 0x27a2, 0x080c, 0x2175, 0x080c,
-	0x2365, 0x080c, 0x132a, 0x080c, 0x21b0, 0x0000, 0x015e, 0x014e,
-	0x013e, 0x01de, 0x01ce, 0x012e, 0x000e, 0x010e, 0x000d, 0x00b6,
-	0x00c6, 0x0026, 0x0046, 0x9026, 0x080c, 0x6704, 0x1904, 0x2f62,
-	0x72d8, 0x2001, 0x1959, 0x2004, 0x9005, 0x1110, 0xd29c, 0x0148,
-	0xd284, 0x1138, 0xd2bc, 0x1904, 0x2f62, 0x080c, 0x2f67, 0x0804,
-	0x2f62, 0xd2cc, 0x1904, 0x2f62, 0x080c, 0x72e5, 0x1120, 0x70ab,
-	0xffff, 0x0804, 0x2f62, 0xd294, 0x0120, 0x70ab, 0xffff, 0x0804,
-	0x2f62, 0x080c, 0x31bb, 0x0160, 0x080c, 0xbef8, 0x0128, 0x2001,
-	0x1817, 0x203c, 0x0804, 0x2ef3, 0x70ab, 0xffff, 0x0804, 0x2f62,
-	0x2001, 0x1817, 0x203c, 0x7290, 0xd284, 0x0904, 0x2ef3, 0xd28c,
-	0x1904, 0x2ef3, 0x0036, 0x73a8, 0x938e, 0xffff, 0x1110, 0x2019,
-	0x0001, 0x8314, 0x92e0, 0x1c80, 0x2c04, 0x938c, 0x0001, 0x0120,
-	0x9084, 0xff00, 0x8007, 0x0010, 0x9084, 0x00ff, 0x970e, 0x0588,
-	0x908e, 0x0000, 0x0570, 0x908e, 0x00ff, 0x1150, 0x080c, 0x31c0,
-	0x1568, 0x7290, 0xc28d, 0x7292, 0x70ab, 0xffff, 0x003e, 0x0458,
-	0x2009, 0x180d, 0x210c, 0xd18c, 0x0150, 0x0026, 0x2011, 0x0010,
-	0x080c, 0x6781, 0x002e, 0x0118, 0x70ab, 0xffff, 0x00c8, 0x900e,
-	0x080c, 0x269f, 0x080c, 0x63c1, 0x1178, 0x080c, 0x6746, 0x1120,
-	0x080c, 0x2f80, 0x0148, 0x0028, 0x080c, 0x30ab, 0x080c, 0x2fac,
-	0x0118, 0x8318, 0x0804, 0x2ea9, 0x73aa, 0x0010, 0x70ab, 0xffff,
-	0x003e, 0x0804, 0x2f62, 0x9780, 0x31cc, 0x203d, 0x97bc, 0xff00,
+	0xdd18, 0x001e, 0xd1ac, 0x1148, 0x0016, 0x2009, 0x0002, 0x2019,
+	0x0004, 0x080c, 0x30cd, 0x001e, 0x00a8, 0x0156, 0x00b6, 0x20a9,
+	0x007f, 0x900e, 0x080c, 0x64fc, 0x1140, 0x7030, 0xd084, 0x1118,
+	0xb800, 0xd0bc, 0x1110, 0x080c, 0x5fcd, 0x8108, 0x1f04, 0x2542,
+	0x00be, 0x015e, 0x00ce, 0x004e, 0x080c, 0xa30e, 0x60e3, 0x0000,
+	0x001e, 0x2001, 0x1800, 0x2014, 0x9296, 0x0004, 0x1170, 0xd19c,
+	0x11a0, 0x2011, 0x180c, 0x2214, 0xd29c, 0x1120, 0x6204, 0x9295,
+	0x0002, 0x6206, 0x6228, 0xc29d, 0x622a, 0x2003, 0x0001, 0x2001,
+	0x1825, 0x2003, 0x0000, 0x6027, 0x0020, 0xd194, 0x0904, 0x2654,
+	0x0016, 0x6220, 0xd2b4, 0x0904, 0x25fd, 0x080c, 0x858c, 0x080c,
+	0x98d1, 0x6027, 0x0004, 0x00f6, 0x2019, 0x19cd, 0x2304, 0x907d,
+	0x0904, 0x25cc, 0x7804, 0x9086, 0x0032, 0x15f0, 0x00d6, 0x00c6,
+	0x00e6, 0x0096, 0x2069, 0x0140, 0x782c, 0x685e, 0x7808, 0x685a,
+	0x6043, 0x0002, 0x2001, 0x0003, 0x8001, 0x1df0, 0x6043, 0x0000,
+	0x2001, 0x003c, 0x8001, 0x1df0, 0x080c, 0x2bde, 0x2001, 0x001e,
+	0x8001, 0x0240, 0x20a9, 0x0009, 0x080c, 0x2ad7, 0x6904, 0xd1dc,
+	0x1140, 0x0cb0, 0x2001, 0x0100, 0x080c, 0x2bce, 0x9006, 0x080c,
+	0x2bce, 0x080c, 0x8d2c, 0x080c, 0x8e38, 0x7814, 0x2048, 0xa86b,
+	0x0103, 0x2f60, 0x080c, 0xa39d, 0x009e, 0x00ee, 0x00ce, 0x00de,
+	0x00fe, 0x001e, 0x00ae, 0x0005, 0x00fe, 0x00d6, 0x2069, 0x0140,
+	0x6804, 0x9084, 0x4000, 0x0110, 0x080c, 0x2bde, 0x00de, 0x00c6,
+	0x2061, 0x19c4, 0x6028, 0x080c, 0xc8ce, 0x0120, 0x909a, 0x0003,
+	0x1258, 0x0018, 0x909a, 0x00c8, 0x1238, 0x8000, 0x602a, 0x00ce,
+	0x080c, 0x98ad, 0x0804, 0x2653, 0x2061, 0x0100, 0x62c0, 0x080c,
+	0xa194, 0x2019, 0x19cd, 0x2304, 0x9065, 0x0120, 0x2009, 0x0027,
+	0x080c, 0xa419, 0x00ce, 0x0804, 0x2653, 0xd2bc, 0x0904, 0x2640,
+	0x080c, 0x8599, 0x6014, 0x9084, 0x1984, 0x9085, 0x0010, 0x6016,
+	0x6027, 0x0004, 0x00d6, 0x2069, 0x0140, 0x6804, 0x9084, 0x4000,
+	0x0110, 0x080c, 0x2bde, 0x00de, 0x00c6, 0x2061, 0x19c4, 0x6044,
+	0x080c, 0xc8ce, 0x0120, 0x909a, 0x0003, 0x1628, 0x0018, 0x909a,
+	0x00c8, 0x1608, 0x8000, 0x6046, 0x603c, 0x00ce, 0x9005, 0x0558,
+	0x2009, 0x07d0, 0x080c, 0x8591, 0x9080, 0x0008, 0x2004, 0x9086,
+	0x0006, 0x1138, 0x6114, 0x918c, 0x1984, 0x918d, 0x0012, 0x6116,
+	0x00d0, 0x6114, 0x918c, 0x1984, 0x918d, 0x0016, 0x6116, 0x0098,
+	0x6027, 0x0004, 0x0080, 0x0036, 0x2019, 0x0001, 0x080c, 0x9c35,
+	0x003e, 0x2019, 0x19d3, 0x2304, 0x9065, 0x0120, 0x2009, 0x004f,
+	0x080c, 0xa419, 0x00ce, 0x001e, 0xd19c, 0x0904, 0x26ac, 0x7038,
+	0xd0ac, 0x1538, 0x0016, 0x0156, 0x6027, 0x0008, 0x080c, 0x2c08,
+	0x20a9, 0x0028, 0xa001, 0x1f04, 0x2662, 0x6150, 0x9185, 0x1400,
+	0x6052, 0x20a9, 0x0366, 0x1d04, 0x266b, 0x080c, 0x85c0, 0x6020,
+	0xd09c, 0x1130, 0x015e, 0x6152, 0x001e, 0x6027, 0x0008, 0x04a0,
+	0x080c, 0x2abe, 0x1f04, 0x266b, 0x015e, 0x6152, 0x001e, 0x6027,
+	0x0008, 0x0016, 0x6028, 0xc09c, 0x602a, 0x080c, 0xa30e, 0x60e3,
+	0x0000, 0x080c, 0xe0c9, 0x080c, 0xe100, 0x080c, 0x5668, 0xd0fc,
+	0x1138, 0x080c, 0xc8c7, 0x1120, 0x9085, 0x0001, 0x080c, 0x7395,
+	0x9006, 0x080c, 0x2bce, 0x2009, 0x0002, 0x080c, 0x2afc, 0x00e6,
+	0x2071, 0x1800, 0x7003, 0x0004, 0x080c, 0x0ea2, 0x00ee, 0x6027,
+	0x0008, 0x080c, 0x0b9e, 0x001e, 0x918c, 0xffd0, 0x6126, 0x00ae,
+	0x0005, 0x0006, 0x0016, 0x0026, 0x0036, 0x00e6, 0x00f6, 0x0126,
+	0x2091, 0x8000, 0x2071, 0x1800, 0x71cc, 0x70ce, 0x9116, 0x0904,
+	0x2700, 0x81ff, 0x01a0, 0x2009, 0x0000, 0x080c, 0x2afc, 0x2011,
+	0x8011, 0x2019, 0x010e, 0x231c, 0x939e, 0x0007, 0x1118, 0x2019,
+	0x0001, 0x0010, 0x2019, 0x0000, 0x080c, 0x4b6d, 0x0448, 0x2001,
+	0x1985, 0x200c, 0x81ff, 0x1140, 0x2001, 0x0109, 0x2004, 0xd0b4,
+	0x0118, 0x2019, 0x0003, 0x0008, 0x2118, 0x2011, 0x8012, 0x080c,
+	0x4b6d, 0x080c, 0x0ea2, 0x080c, 0x5668, 0xd0fc, 0x1188, 0x080c,
+	0xc8c7, 0x1170, 0x00c6, 0x080c, 0x279c, 0x080c, 0x9b9c, 0x2061,
+	0x0100, 0x2019, 0x0028, 0x2009, 0x0002, 0x080c, 0x30cd, 0x00ce,
+	0x012e, 0x00fe, 0x00ee, 0x003e, 0x002e, 0x001e, 0x000e, 0x0005,
+	0x2028, 0x918c, 0x00ff, 0x2130, 0x9094, 0xff00, 0x11f0, 0x2011,
+	0x1836, 0x2214, 0xd2ac, 0x11c8, 0x81ff, 0x01e8, 0x2011, 0x181e,
+	0x2204, 0x9106, 0x1190, 0x2011, 0x181f, 0x2214, 0x9294, 0xff00,
+	0x9584, 0xff00, 0x9206, 0x1148, 0x2011, 0x181f, 0x2214, 0x9294,
+	0x00ff, 0x9584, 0x00ff, 0x9206, 0x1120, 0x2500, 0x080c, 0x8050,
+	0x0048, 0x9584, 0x00ff, 0x9080, 0x3268, 0x200d, 0x918c, 0xff00,
+	0x810f, 0x9006, 0x0005, 0x9080, 0x3268, 0x200d, 0x918c, 0x00ff,
+	0x0005, 0x00d6, 0x2069, 0x0140, 0x2001, 0x1817, 0x2003, 0x00ef,
+	0x20a9, 0x0010, 0x9006, 0x6852, 0x6856, 0x1f04, 0x274c, 0x00de,
+	0x0005, 0x0006, 0x00d6, 0x0026, 0x2069, 0x0140, 0x2001, 0x1817,
+	0x2102, 0x8114, 0x8214, 0x8214, 0x8214, 0x20a9, 0x0010, 0x6853,
+	0x0000, 0x9006, 0x82ff, 0x1128, 0x9184, 0x000f, 0x9080, 0xe5de,
+	0x2005, 0x6856, 0x8211, 0x1f04, 0x2761, 0x002e, 0x00de, 0x000e,
+	0x0005, 0x00c6, 0x2061, 0x1800, 0x6030, 0x0110, 0xc09d, 0x0008,
+	0xc09c, 0x6032, 0x00ce, 0x0005, 0x0156, 0x00d6, 0x0026, 0x0016,
+	0x0006, 0x2069, 0x0140, 0x6980, 0x9116, 0x0180, 0x9112, 0x1230,
+	0x8212, 0x8210, 0x22a8, 0x2001, 0x0402, 0x0018, 0x22a8, 0x2001,
+	0x0404, 0x680e, 0x1f04, 0x2791, 0x680f, 0x0000, 0x000e, 0x001e,
+	0x002e, 0x00de, 0x015e, 0x0005, 0x080c, 0x5664, 0xd0c4, 0x0150,
+	0xd0a4, 0x0140, 0x9006, 0x0046, 0x2020, 0x2009, 0x002e, 0x080c,
+	0xdd18, 0x004e, 0x0005, 0x00f6, 0x0016, 0x0026, 0x2079, 0x0140,
+	0x78c4, 0xd0dc, 0x0904, 0x2808, 0x080c, 0x2a5b, 0x0660, 0x9084,
+	0x0700, 0x908e, 0x0600, 0x1120, 0x2011, 0x4000, 0x900e, 0x0458,
+	0x908e, 0x0500, 0x1120, 0x2011, 0x8000, 0x900e, 0x0420, 0x908e,
+	0x0400, 0x1120, 0x9016, 0x2009, 0x0001, 0x00e8, 0x908e, 0x0300,
+	0x1120, 0x9016, 0x2009, 0x0002, 0x00b0, 0x908e, 0x0200, 0x1120,
+	0x9016, 0x2009, 0x0004, 0x0078, 0x908e, 0x0100, 0x1548, 0x9016,
+	0x2009, 0x0008, 0x0040, 0x9084, 0x0700, 0x908e, 0x0300, 0x1500,
+	0x2011, 0x0030, 0x0058, 0x2300, 0x9080, 0x0020, 0x2018, 0x080c,
+	0x871c, 0x928c, 0xff00, 0x0110, 0x2011, 0x00ff, 0x2200, 0x8007,
+	0x9085, 0x004c, 0x78c2, 0x2009, 0x0138, 0x220a, 0x080c, 0x7351,
+	0x1118, 0x2009, 0x1949, 0x220a, 0x002e, 0x001e, 0x00fe, 0x0005,
+	0x78c3, 0x0000, 0x0cc8, 0x0126, 0x2091, 0x2800, 0x0006, 0x0016,
+	0x0026, 0x2001, 0x0170, 0x200c, 0x8000, 0x2014, 0x9184, 0x0003,
+	0x0110, 0x080c, 0x0dbc, 0x002e, 0x001e, 0x000e, 0x012e, 0x0005,
+	0x2001, 0x180d, 0x2004, 0xd08c, 0x0118, 0x2009, 0x0002, 0x0005,
+	0x2001, 0x0171, 0x2004, 0xd0dc, 0x0168, 0x2001, 0x0170, 0x200c,
+	0x918c, 0x00ff, 0x918e, 0x004c, 0x1128, 0x200c, 0x918c, 0xff00,
+	0x810f, 0x0005, 0x900e, 0x2001, 0x0227, 0x2004, 0x8007, 0x9084,
+	0x00ff, 0x8004, 0x9108, 0x2001, 0x0226, 0x2004, 0x8007, 0x9084,
+	0x00ff, 0x8004, 0x9108, 0x0005, 0x0018, 0x000c, 0x0018, 0x0020,
+	0x1000, 0x0800, 0x1000, 0x1800, 0x0156, 0x0006, 0x0016, 0x0026,
+	0x00e6, 0x2001, 0x196c, 0x2004, 0x908a, 0x0007, 0x1a0c, 0x0dc3,
+	0x0033, 0x00ee, 0x002e, 0x001e, 0x000e, 0x015e, 0x0005, 0x286e,
+	0x288c, 0x28b0, 0x28b2, 0x28db, 0x28dd, 0x28df, 0x2001, 0x0001,
+	0x080c, 0x26b1, 0x080c, 0x2ab9, 0x2001, 0x196e, 0x2003, 0x0000,
+	0x7828, 0x9084, 0xe1d7, 0x782a, 0x9006, 0x20a9, 0x0009, 0x080c,
+	0x2a77, 0x2001, 0x196c, 0x2003, 0x0006, 0x2009, 0x001e, 0x2011,
+	0x28e0, 0x080c, 0x859e, 0x0005, 0x2009, 0x1971, 0x200b, 0x0000,
+	0x2001, 0x1976, 0x2003, 0x0036, 0x2001, 0x1975, 0x2003, 0x002a,
+	0x2001, 0x196e, 0x2003, 0x0001, 0x9006, 0x080c, 0x2a29, 0x2001,
+	0xffff, 0x20a9, 0x0009, 0x080c, 0x2a77, 0x2001, 0x196c, 0x2003,
+	0x0006, 0x2009, 0x001e, 0x2011, 0x28e0, 0x080c, 0x859e, 0x0005,
+	0x080c, 0x0dc3, 0x2001, 0x1976, 0x2003, 0x0036, 0x2001, 0x196e,
+	0x2003, 0x0003, 0x7a38, 0x9294, 0x0005, 0x9296, 0x0004, 0x0110,
+	0x9006, 0x0010, 0x2001, 0x0001, 0x080c, 0x2a29, 0x2001, 0x1972,
+	0x2003, 0x0000, 0x2001, 0xffff, 0x20a9, 0x0009, 0x080c, 0x2a77,
+	0x2001, 0x196c, 0x2003, 0x0006, 0x2009, 0x001e, 0x2011, 0x28e0,
+	0x080c, 0x859e, 0x0005, 0x080c, 0x0dc3, 0x080c, 0x0dc3, 0x0005,
+	0x0006, 0x0016, 0x0026, 0x00e6, 0x00f6, 0x0156, 0x0126, 0x2091,
+	0x8000, 0x2079, 0x0100, 0x2001, 0x196e, 0x2004, 0x908a, 0x0007,
+	0x1a0c, 0x0dc3, 0x0043, 0x012e, 0x015e, 0x00fe, 0x00ee, 0x002e,
+	0x001e, 0x000e, 0x0005, 0x2902, 0x291e, 0x295a, 0x2986, 0x29a6,
+	0x29b2, 0x29b4, 0x080c, 0x2a6b, 0x1190, 0x2009, 0x1974, 0x2104,
+	0x7a38, 0x9294, 0x0005, 0x9296, 0x0004, 0x0110, 0xc08d, 0x0008,
+	0xc085, 0x200a, 0x2001, 0x196c, 0x2003, 0x0001, 0x0030, 0x080c,
+	0x29d8, 0x2001, 0xffff, 0x080c, 0x287d, 0x0005, 0x080c, 0x29b6,
+	0x05c0, 0x2009, 0x1975, 0x2104, 0x8001, 0x200a, 0x080c, 0x2a6b,
+	0x1158, 0x7a38, 0x9294, 0x0005, 0x9296, 0x0005, 0x0518, 0x2009,
+	0x1974, 0x2104, 0xc085, 0x200a, 0x2009, 0x1971, 0x2104, 0x8000,
+	0x200a, 0x9086, 0x0005, 0x0118, 0x080c, 0x29be, 0x00c0, 0x200b,
+	0x0000, 0x7a38, 0x9294, 0x0006, 0x9296, 0x0004, 0x0110, 0x9006,
+	0x0010, 0x2001, 0x0001, 0x080c, 0x2a46, 0x2001, 0x196e, 0x2003,
+	0x0002, 0x0028, 0x2001, 0x196c, 0x2003, 0x0003, 0x0010, 0x080c,
+	0x289f, 0x0005, 0x080c, 0x29b6, 0x0540, 0x2009, 0x1975, 0x2104,
+	0x8001, 0x200a, 0x080c, 0x2a6b, 0x1148, 0x2001, 0x196c, 0x2003,
+	0x0003, 0x2001, 0x196d, 0x2003, 0x0000, 0x00b8, 0x2009, 0x1975,
+	0x2104, 0x9005, 0x1118, 0x080c, 0x29fb, 0x0010, 0x080c, 0x29cb,
+	0x080c, 0x29be, 0x2009, 0x1971, 0x200b, 0x0000, 0x2001, 0x196e,
+	0x2003, 0x0001, 0x080c, 0x289f, 0x0000, 0x0005, 0x0479, 0x01e8,
+	0x080c, 0x2a6b, 0x1198, 0x2009, 0x1972, 0x2104, 0x8000, 0x200a,
+	0x9086, 0x0007, 0x0108, 0x0078, 0x2001, 0x1977, 0x2003, 0x000a,
+	0x2009, 0x1974, 0x2104, 0xc0fd, 0x200a, 0x0038, 0x00f9, 0x2001,
+	0x196e, 0x2003, 0x0004, 0x080c, 0x28ca, 0x0005, 0x0079, 0x0148,
+	0x080c, 0x2a6b, 0x1118, 0x080c, 0x28b6, 0x0018, 0x0079, 0x080c,
+	0x28ca, 0x0005, 0x080c, 0x0dc3, 0x080c, 0x0dc3, 0x2009, 0x1976,
+	0x2104, 0x8001, 0x200a, 0x090c, 0x2a17, 0x0005, 0x7a38, 0x9294,
+	0x0005, 0x9296, 0x0005, 0x0110, 0x9006, 0x0010, 0x2001, 0x0001,
+	0x080c, 0x2a46, 0x0005, 0x7a38, 0x9294, 0x0006, 0x9296, 0x0006,
+	0x0110, 0x9006, 0x0010, 0x2001, 0x0001, 0x080c, 0x2a29, 0x0005,
+	0x2009, 0x1971, 0x2104, 0x8000, 0x200a, 0x9086, 0x0005, 0x0108,
+	0x0068, 0x200b, 0x0000, 0x7a38, 0x9294, 0x0006, 0x9296, 0x0006,
+	0x0110, 0x9006, 0x0010, 0x2001, 0x0001, 0x04d9, 0x7a38, 0x9294,
+	0x0005, 0x9296, 0x0005, 0x0110, 0x9006, 0x0010, 0x2001, 0x0001,
+	0x080c, 0x2a46, 0x0005, 0x0086, 0x2001, 0x1974, 0x2004, 0x9084,
+	0x7fff, 0x090c, 0x0dc3, 0x2009, 0x1973, 0x2144, 0x8846, 0x280a,
+	0x9844, 0x0dd8, 0xd08c, 0x1120, 0xd084, 0x1120, 0x080c, 0x0dc3,
+	0x9006, 0x0010, 0x2001, 0x0001, 0x00a1, 0x008e, 0x0005, 0x0006,
+	0x0156, 0x2001, 0x196c, 0x20a9, 0x0009, 0x2003, 0x0000, 0x8000,
+	0x1f04, 0x2a1d, 0x2001, 0x1973, 0x2003, 0x8000, 0x015e, 0x000e,
+	0x0005, 0x00f6, 0x2079, 0x0100, 0x9085, 0x0000, 0x0158, 0x7838,
+	0x9084, 0xfff9, 0x9085, 0x0004, 0x783a, 0x2009, 0x1979, 0x210c,
+	0x795a, 0x0050, 0x7838, 0x9084, 0xfffb, 0x9085, 0x0006, 0x783a,
+	0x2009, 0x197a, 0x210c, 0x795a, 0x00fe, 0x0005, 0x00f6, 0x2079,
+	0x0100, 0x9085, 0x0000, 0x0138, 0x7838, 0x9084, 0xfffa, 0x9085,
+	0x0004, 0x783a, 0x0030, 0x7838, 0x9084, 0xfffb, 0x9085, 0x0005,
+	0x783a, 0x00fe, 0x0005, 0x0006, 0x2001, 0x0100, 0x2004, 0x9082,
+	0x0007, 0x000e, 0x0005, 0x0006, 0x2001, 0x0100, 0x2004, 0x9082,
+	0x0009, 0x000e, 0x0005, 0x0156, 0x20a9, 0x0064, 0x7820, 0x080c,
+	0x2af6, 0xd09c, 0x1110, 0x1f04, 0x2a6e, 0x015e, 0x0005, 0x0126,
+	0x0016, 0x0006, 0x2091, 0x8000, 0x7850, 0x9085, 0x0040, 0x7852,
+	0x7850, 0x9084, 0xfbcf, 0x7852, 0x080c, 0x2af6, 0x9085, 0x2000,
+	0x7852, 0x000e, 0x2008, 0x9186, 0x0000, 0x1118, 0x783b, 0x0007,
+	0x0090, 0x9186, 0x0001, 0x1118, 0x783b, 0x0006, 0x0060, 0x9186,
+	0x0002, 0x1118, 0x783b, 0x0005, 0x0030, 0x9186, 0x0003, 0x1118,
+	0x783b, 0x0004, 0x0000, 0x0006, 0x1d04, 0x2aa4, 0x080c, 0x85c0,
+	0x1f04, 0x2aa4, 0x7850, 0x9085, 0x0400, 0x9084, 0xdfbf, 0x7852,
+	0x080c, 0x2af6, 0x9085, 0x1000, 0x7852, 0x000e, 0x001e, 0x012e,
+	0x0005, 0x7850, 0x9084, 0xffcf, 0x7852, 0x0005, 0x0006, 0x0156,
+	0x00f6, 0x2079, 0x0100, 0x20a9, 0x000a, 0x7854, 0xd0ac, 0x1130,
+	0x7820, 0xd0e4, 0x1140, 0x1f04, 0x2ac8, 0x0028, 0x7854, 0xd08c,
+	0x1110, 0x1f04, 0x2ace, 0x00fe, 0x015e, 0x000e, 0x0005, 0x1d04,
+	0x2ad7, 0x080c, 0x85c0, 0x1f04, 0x2ad7, 0x0005, 0x0006, 0x2001,
+	0x1978, 0x2004, 0x9086, 0x0000, 0x000e, 0x0005, 0x0006, 0x2001,
+	0x1978, 0x2004, 0x9086, 0x0001, 0x000e, 0x0005, 0x0006, 0x2001,
+	0x1978, 0x2004, 0x9086, 0x0002, 0x000e, 0x0005, 0xa001, 0xa001,
+	0xa001, 0xa001, 0xa001, 0x0005, 0x0006, 0x2001, 0x1985, 0x2102,
+	0x000e, 0x0005, 0x2009, 0x0171, 0x2104, 0xd0dc, 0x0140, 0x2009,
+	0x0170, 0x2104, 0x200b, 0x0080, 0xa001, 0xa001, 0x200a, 0x0005,
+	0x0036, 0x0046, 0x2001, 0x0141, 0x200c, 0x918c, 0xff00, 0x9186,
+	0x2100, 0x0140, 0x9186, 0x2000, 0x0170, 0x9186, 0x0100, 0x1904,
+	0x2b6f, 0x0048, 0x0016, 0x2009, 0x1a62, 0x2104, 0x8000, 0x0208,
+	0x200a, 0x001e, 0x04f0, 0x2009, 0x00a2, 0x080c, 0x0e51, 0x2019,
+	0x0160, 0x2324, 0x2011, 0x0003, 0x2009, 0x0169, 0x2104, 0x9084,
+	0x0007, 0x210c, 0x918c, 0x0007, 0x910e, 0x1db0, 0x9086, 0x0003,
+	0x1548, 0x2304, 0x0066, 0x0076, 0x2031, 0x0002, 0x233c, 0x973e,
+	0x0148, 0x8631, 0x1dd8, 0x2031, 0x1a63, 0x263c, 0x8738, 0x0208,
+	0x2732, 0x2304, 0x007e, 0x006e, 0x9402, 0x02a0, 0x19d0, 0x8211,
+	0x19d8, 0x84ff, 0x0170, 0x2001, 0x0141, 0x200c, 0x918c, 0xff00,
+	0x9186, 0x0100, 0x0130, 0x2009, 0x180c, 0x2104, 0xc0dd, 0x200a,
+	0x0008, 0x0421, 0x2001, 0x195d, 0x200c, 0x080c, 0x0e51, 0x004e,
+	0x003e, 0x0005, 0x2001, 0x180c, 0x2004, 0xd0dc, 0x01b0, 0x2001,
+	0x0160, 0x2004, 0x9005, 0x0140, 0x2001, 0x0141, 0x2004, 0x9084,
+	0xff00, 0x9086, 0x0100, 0x1148, 0x0126, 0x2091, 0x8000, 0x0016,
+	0x0026, 0x0021, 0x002e, 0x001e, 0x012e, 0x0005, 0x00c6, 0x2061,
+	0x0100, 0x6014, 0x0006, 0x2001, 0x0161, 0x2003, 0x0000, 0x6017,
+	0x0018, 0xa001, 0xa001, 0x602f, 0x0008, 0x6104, 0x918e, 0x0010,
+	0x6106, 0x918e, 0x0010, 0x6106, 0x6017, 0x0040, 0x04b9, 0x001e,
+	0x9184, 0x0003, 0x01e0, 0x0036, 0x0016, 0x2019, 0x0141, 0x6124,
+	0x918c, 0x0028, 0x1120, 0x2304, 0x9084, 0x2800, 0x0dc0, 0x001e,
+	0x919c, 0xffe4, 0x9184, 0x0001, 0x0118, 0x9385, 0x0009, 0x6016,
+	0x9184, 0x0002, 0x0118, 0x9385, 0x0012, 0x6016, 0x003e, 0x2001,
+	0x180c, 0x200c, 0xc1dc, 0x2102, 0x00ce, 0x0005, 0x0016, 0x0026,
+	0x080c, 0x736b, 0x0108, 0xc0bc, 0x2009, 0x0140, 0x2114, 0x9294,
+	0x0001, 0x9215, 0x220a, 0x002e, 0x001e, 0x0005, 0x0016, 0x0026,
+	0x2009, 0x0140, 0x2114, 0x9294, 0x0001, 0x9285, 0x1000, 0x200a,
+	0x220a, 0x002e, 0x001e, 0x0005, 0x0016, 0x0026, 0x2009, 0x0140,
+	0x2114, 0x9294, 0x0001, 0x9215, 0x220a, 0x002e, 0x001e, 0x0005,
+	0x0006, 0x0016, 0x2009, 0x0140, 0x2104, 0x1128, 0x080c, 0x736b,
+	0x0110, 0xc0bc, 0x0008, 0xc0bd, 0x200a, 0x001e, 0x000e, 0x0005,
+	0x0006, 0x0156, 0x6050, 0x9085, 0x0040, 0x6052, 0x6050, 0x9084,
+	0xfbcf, 0x6052, 0x080c, 0x2af6, 0x9085, 0x2000, 0x6052, 0x20a9,
+	0x0012, 0x1d04, 0x2c19, 0x080c, 0x85c0, 0x1f04, 0x2c19, 0x6050,
+	0x9085, 0x0400, 0x9084, 0xdfbf, 0x6052, 0x015e, 0x000e, 0x0005,
+	0x7044, 0xd084, 0x1130, 0xc085, 0x7046, 0x2011, 0x8016, 0x080c,
+	0x4b6d, 0x0005, 0x0016, 0x0006, 0x6027, 0x4000, 0x080c, 0xe0d5,
+	0x2001, 0x19d3, 0x2004, 0x00c6, 0x9065, 0x090c, 0x0dc3, 0x0096,
+	0x6014, 0x2048, 0x080c, 0xc1cd, 0x0178, 0xa884, 0xc0dd, 0xa886,
+	0x6020, 0x9086, 0x0006, 0x1140, 0x2001, 0x0132, 0x200c, 0x2001,
+	0x0131, 0x2004, 0xa99a, 0xa89e, 0x009e, 0x6020, 0x9086, 0x0003,
+	0x1150, 0x080c, 0x6823, 0x0138, 0x2031, 0x0001, 0x080c, 0xbe31,
+	0x080c, 0xc4fe, 0x0010, 0x080c, 0xbde5, 0x00ce, 0x000e, 0x001e,
+	0x0005, 0x2ed5, 0x2ed5, 0x2cf9, 0x2cf9, 0x2d05, 0x2d05, 0x2d11,
+	0x2d11, 0x2d1f, 0x2d1f, 0x2d2b, 0x2d2b, 0x2d39, 0x2d39, 0x2d47,
+	0x2d47, 0x2d59, 0x2d59, 0x2d65, 0x2d65, 0x2d73, 0x2d73, 0x2d91,
+	0x2d91, 0x2db1, 0x2db1, 0x2d81, 0x2d81, 0x2da1, 0x2da1, 0x2dbf,
+	0x2dbf, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57,
+	0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57,
+	0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57,
+	0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57,
+	0x2d57, 0x2dd1, 0x2dd1, 0x2ddd, 0x2ddd, 0x2deb, 0x2deb, 0x2df9,
+	0x2df9, 0x2e09, 0x2e09, 0x2e17, 0x2e17, 0x2e27, 0x2e27, 0x2e37,
+	0x2e37, 0x2e49, 0x2e49, 0x2e57, 0x2e57, 0x2e67, 0x2e67, 0x2e89,
+	0x2e89, 0x2eab, 0x2eab, 0x2e77, 0x2e77, 0x2e9a, 0x2e9a, 0x2eba,
+	0x2eba, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57,
+	0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57,
+	0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57,
+	0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57,
+	0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57,
+	0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57,
+	0x2d57, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,
+	0x0156, 0x080c, 0x23ad, 0x0804, 0x2ecd, 0x0106, 0x0006, 0x0126,
+	0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x21bd, 0x0804,
+	0x2ecd, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,
+	0x0156, 0x080c, 0x21bd, 0x080c, 0x23ad, 0x0804, 0x2ecd, 0x0106,
+	0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c,
+	0x21f8, 0x0804, 0x2ecd, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6,
+	0x0136, 0x0146, 0x0156, 0x080c, 0x23ad, 0x080c, 0x21f8, 0x0804,
+	0x2ecd, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,
+	0x0156, 0x080c, 0x21bd, 0x080c, 0x21f8, 0x0804, 0x2ecd, 0x0106,
+	0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c,
+	0x21bd, 0x080c, 0x23ad, 0x080c, 0x21f8, 0x0804, 0x2ecd, 0xa001,
+	0x0cf0, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,
+	0x0156, 0x080c, 0x1336, 0x0804, 0x2ecd, 0x0106, 0x0006, 0x0126,
+	0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x23ad, 0x080c,
+	0x1336, 0x0804, 0x2ecd, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6,
+	0x0136, 0x0146, 0x0156, 0x080c, 0x21bd, 0x080c, 0x1336, 0x0804,
+	0x2ecd, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,
+	0x0156, 0x080c, 0x23ad, 0x080c, 0x1336, 0x080c, 0x21f8, 0x0804,
+	0x2ecd, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,
+	0x0156, 0x080c, 0x21bd, 0x080c, 0x23ad, 0x080c, 0x1336, 0x0804,
+	0x2ecd, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,
+	0x0156, 0x080c, 0x21bd, 0x080c, 0x1336, 0x080c, 0x21f8, 0x0804,
+	0x2ecd, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,
+	0x0156, 0x080c, 0x1336, 0x080c, 0x21f8, 0x0804, 0x2ecd, 0x0106,
+	0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c,
+	0x21bd, 0x080c, 0x23ad, 0x080c, 0x1336, 0x080c, 0x21f8, 0x0804,
+	0x2ecd, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,
+	0x0156, 0x080c, 0x280b, 0x0804, 0x2ecd, 0x0106, 0x0006, 0x0126,
+	0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x280b, 0x080c,
+	0x23ad, 0x0804, 0x2ecd, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6,
+	0x0136, 0x0146, 0x0156, 0x080c, 0x280b, 0x080c, 0x21bd, 0x0804,
+	0x2ecd, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,
+	0x0156, 0x080c, 0x280b, 0x080c, 0x21bd, 0x080c, 0x23ad, 0x0804,
+	0x2ecd, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,
+	0x0156, 0x080c, 0x280b, 0x080c, 0x21f8, 0x0804, 0x2ecd, 0x0106,
+	0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c,
+	0x280b, 0x080c, 0x23ad, 0x080c, 0x21f8, 0x0804, 0x2ecd, 0x0106,
+	0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c,
+	0x280b, 0x080c, 0x21bd, 0x080c, 0x21f8, 0x0804, 0x2ecd, 0x0106,
+	0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c,
+	0x280b, 0x080c, 0x21bd, 0x080c, 0x23ad, 0x080c, 0x21f8, 0x0804,
+	0x2ecd, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,
+	0x0156, 0x080c, 0x280b, 0x080c, 0x1336, 0x0804, 0x2ecd, 0x0106,
+	0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c,
+	0x280b, 0x080c, 0x23ad, 0x080c, 0x1336, 0x0804, 0x2ecd, 0x0106,
+	0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c,
+	0x280b, 0x080c, 0x21bd, 0x080c, 0x1336, 0x0804, 0x2ecd, 0x0106,
+	0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c,
+	0x280b, 0x080c, 0x23ad, 0x080c, 0x1336, 0x080c, 0x21f8, 0x0804,
+	0x2ecd, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,
+	0x0156, 0x080c, 0x280b, 0x080c, 0x21bd, 0x080c, 0x23ad, 0x080c,
+	0x1336, 0x0498, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136,
+	0x0146, 0x0156, 0x080c, 0x280b, 0x080c, 0x21bd, 0x080c, 0x1336,
+	0x080c, 0x21f8, 0x0410, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6,
+	0x0136, 0x0146, 0x0156, 0x080c, 0x280b, 0x080c, 0x1336, 0x080c,
+	0x21f8, 0x0098, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136,
+	0x0146, 0x0156, 0x080c, 0x280b, 0x080c, 0x21bd, 0x080c, 0x23ad,
+	0x080c, 0x1336, 0x080c, 0x21f8, 0x0000, 0x015e, 0x014e, 0x013e,
+	0x01de, 0x01ce, 0x012e, 0x000e, 0x010e, 0x000d, 0x00b6, 0x00c6,
+	0x0026, 0x0046, 0x9026, 0x080c, 0x682b, 0x1904, 0x2fe9, 0x72d8,
+	0x2001, 0x1958, 0x2004, 0x9005, 0x1110, 0xd29c, 0x0148, 0xd284,
+	0x1138, 0xd2bc, 0x1904, 0x2fe9, 0x080c, 0x2fee, 0x0804, 0x2fe9,
+	0xd2cc, 0x1904, 0x2fe9, 0x080c, 0x7351, 0x1120, 0x70ab, 0xffff,
+	0x0804, 0x2fe9, 0xd294, 0x0120, 0x70ab, 0xffff, 0x0804, 0x2fe9,
+	0x080c, 0x3257, 0x0160, 0x080c, 0xc8ce, 0x0128, 0x2001, 0x1817,
+	0x203c, 0x0804, 0x2f73, 0x70ab, 0xffff, 0x0804, 0x2fe9, 0x2001,
+	0x1817, 0x203c, 0x7290, 0xd284, 0x0904, 0x2f73, 0xd28c, 0x1904,
+	0x2f73, 0x0036, 0x73a8, 0x938e, 0xffff, 0x1110, 0x2019, 0x0001,
+	0x8314, 0x92e0, 0x1c80, 0x2c04, 0x938c, 0x0001, 0x0120, 0x9084,
+	0xff00, 0x8007, 0x0010, 0x9084, 0x00ff, 0x970e, 0x05d0, 0x908e,
+	0x0000, 0x05b8, 0x908e, 0x00ff, 0x1150, 0x7230, 0xd284, 0x15b0,
+	0x7290, 0xc28d, 0x7292, 0x70ab, 0xffff, 0x003e, 0x04a0, 0x2009,
+	0x180d, 0x210c, 0xd18c, 0x0150, 0x0026, 0x2011, 0x0010, 0x080c,
+	0x68a8, 0x002e, 0x0118, 0x70ab, 0xffff, 0x0410, 0x900e, 0x080c,
+	0x2708, 0x080c, 0x6497, 0x11c0, 0x080c, 0x686d, 0x1168, 0x7030,
+	0xd08c, 0x0130, 0xb800, 0xd0bc, 0x0138, 0x080c, 0x6748, 0x0120,
+	0x080c, 0x3007, 0x0148, 0x0028, 0x080c, 0x3147, 0x080c, 0x3033,
+	0x0118, 0x8318, 0x0804, 0x2f20, 0x73aa, 0x0010, 0x70ab, 0xffff,
+	0x003e, 0x0804, 0x2fe9, 0x9780, 0x3268, 0x203d, 0x97bc, 0xff00,
 	0x873f, 0x2041, 0x007e, 0x70a8, 0x9096, 0xffff, 0x1118, 0x900e,
 	0x28a8, 0x0050, 0x9812, 0x0220, 0x2008, 0x9802, 0x20a8, 0x0020,
-	0x70ab, 0xffff, 0x0804, 0x2f62, 0x2700, 0x0156, 0x0016, 0x9106,
-	0x0904, 0x2f57, 0x2001, 0x180d, 0x2004, 0xd08c, 0x0150, 0x0026,
-	0x2011, 0x0010, 0x080c, 0x6781, 0x002e, 0x0118, 0x2009, 0xffff,
-	0x04f0, 0xc484, 0x080c, 0x6411, 0x0150, 0x080c, 0xbef8, 0x1578,
-	0x080c, 0x31bb, 0x1560, 0x080c, 0x63c1, 0x1588, 0x0008, 0xc485,
-	0x080c, 0x6746, 0x01e0, 0x7290, 0xd28c, 0x0180, 0x080c, 0x6746,
-	0x9082, 0x0006, 0x02e0, 0xd484, 0x1118, 0x080c, 0x63eb, 0x0028,
-	0x080c, 0x3137, 0x01a0, 0x080c, 0x3162, 0x0088, 0x080c, 0x30ab,
-	0x080c, 0xbef8, 0x1160, 0x080c, 0x2fac, 0x0188, 0x0040, 0x080c,
-	0xbef8, 0x1118, 0x080c, 0x3137, 0x0110, 0x0451, 0x0140, 0x001e,
-	0x8108, 0x015e, 0x1f04, 0x2f0c, 0x70ab, 0xffff, 0x0018, 0x001e,
-	0x015e, 0x71aa, 0x004e, 0x002e, 0x00ce, 0x00be, 0x0005, 0x00c6,
-	0x0016, 0x70ab, 0x0001, 0x2009, 0x007e, 0x080c, 0x63c1, 0x1168,
-	0xb813, 0x00ff, 0xb817, 0xfffe, 0x080c, 0x30ab, 0x04a9, 0x0128,
-	0x70d8, 0xc0bd, 0x70da, 0x080c, 0xbc7a, 0x001e, 0x00ce, 0x0005,
-	0x0016, 0x0076, 0x00d6, 0x00c6, 0x2001, 0x1863, 0x2004, 0x9084,
-	0x00ff, 0xb842, 0x080c, 0x9f5b, 0x01d0, 0x2b00, 0x6012, 0x080c,
-	0xbc97, 0x6023, 0x0001, 0x9006, 0x080c, 0x635e, 0x2001, 0x0000,
-	0x080c, 0x6372, 0x0126, 0x2091, 0x8000, 0x70a4, 0x8000, 0x70a6,
-	0x012e, 0x2009, 0x0004, 0x080c, 0x9f88, 0x9085, 0x0001, 0x00ce,
-	0x00de, 0x007e, 0x001e, 0x0005, 0x0016, 0x0076, 0x00d6, 0x00c6,
-	0x2001, 0x1863, 0x2004, 0x9084, 0x00ff, 0xb842, 0x080c, 0x9f5b,
-	0x01d0, 0x2b00, 0x6012, 0x080c, 0xbc97, 0x6023, 0x0001, 0x9006,
-	0x080c, 0x635e, 0x2001, 0x0002, 0x080c, 0x6372, 0x0126, 0x2091,
-	0x8000, 0x70a4, 0x8000, 0x70a6, 0x012e, 0x2009, 0x0002, 0x080c,
-	0x9f88, 0x9085, 0x0001, 0x00ce, 0x00de, 0x007e, 0x001e, 0x0005,
-	0x00b6, 0x00c6, 0x0026, 0x2009, 0x0080, 0x080c, 0x63c1, 0x1140,
-	0xb813, 0x00ff, 0xb817, 0xfffc, 0x0039, 0x0110, 0x70df, 0xffff,
-	0x002e, 0x00ce, 0x00be, 0x0005, 0x0016, 0x0076, 0x00d6, 0x00c6,
-	0x080c, 0x9ec2, 0x01d0, 0x2b00, 0x6012, 0x080c, 0xbc97, 0x6023,
-	0x0001, 0x9006, 0x080c, 0x635e, 0x2001, 0x0002, 0x080c, 0x6372,
-	0x0126, 0x2091, 0x8000, 0x70e0, 0x8000, 0x70e2, 0x012e, 0x2009,
-	0x0002, 0x080c, 0x9f88, 0x9085, 0x0001, 0x00ce, 0x00de, 0x007e,
-	0x001e, 0x0005, 0x00c6, 0x00d6, 0x0126, 0x2091, 0x8000, 0x2009,
-	0x007f, 0x080c, 0x63c1, 0x11b8, 0xb813, 0x00ff, 0xb817, 0xfffd,
-	0xb8bb, 0x0004, 0x080c, 0x9ec2, 0x0170, 0x2b00, 0x6012, 0x6316,
-	0x6023, 0x0001, 0x620a, 0x080c, 0xbc97, 0x2009, 0x0022, 0x080c,
-	0x9f88, 0x9085, 0x0001, 0x012e, 0x00de, 0x00ce, 0x0005, 0x00e6,
-	0x00c6, 0x0066, 0x0036, 0x0026, 0x00b6, 0x21f0, 0x080c, 0x884e,
-	0x080c, 0x87ef, 0x080c, 0x9d56, 0x080c, 0xacec, 0x3e08, 0x2130,
-	0x81ff, 0x0120, 0x20a9, 0x007e, 0x900e, 0x0018, 0x20a9, 0x007f,
-	0x900e, 0x0016, 0x080c, 0x6411, 0x1110, 0x080c, 0x5f10, 0x001e,
-	0x8108, 0x1f04, 0x3051, 0x9686, 0x0001, 0x190c, 0x318f, 0x00be,
-	0x002e, 0x003e, 0x006e, 0x00ce, 0x00ee, 0x0005, 0x00e6, 0x00c6,
-	0x0046, 0x0036, 0x0026, 0x0016, 0x00b6, 0x6210, 0x2258, 0xbaa0,
-	0x0026, 0x2019, 0x0029, 0x080c, 0x8843, 0x0076, 0x2039, 0x0000,
-	0x080c, 0x8748, 0x2c08, 0x080c, 0xce89, 0x007e, 0x001e, 0xba10,
-	0xbb14, 0xbcac, 0x080c, 0x5f10, 0xba12, 0xbb16, 0xbcae, 0x00be,
-	0x001e, 0x002e, 0x003e, 0x004e, 0x00ce, 0x00ee, 0x0005, 0x00e6,
-	0x0006, 0x00b6, 0x6010, 0x2058, 0xb8a0, 0x00be, 0x9086, 0x0080,
-	0x0150, 0x2071, 0x1800, 0x70a4, 0x9005, 0x0110, 0x8001, 0x70a6,
-	0x000e, 0x00ee, 0x0005, 0x2071, 0x1800, 0x70e0, 0x9005, 0x0dc0,
-	0x8001, 0x70e2, 0x0ca8, 0xb800, 0xc08c, 0xb802, 0x0005, 0x00f6,
-	0x00e6, 0x00c6, 0x00b6, 0x0046, 0x0036, 0x0026, 0x0016, 0x0156,
-	0x2178, 0x81ff, 0x1118, 0x20a9, 0x0001, 0x0078, 0x080c, 0x55a7,
-	0xd0c4, 0x0140, 0xd0a4, 0x0130, 0x9006, 0x2020, 0x2009, 0x002d,
-	0x080c, 0xd156, 0x20a9, 0x0800, 0x9016, 0x0026, 0x928e, 0x007e,
-	0x0904, 0x3116, 0x928e, 0x007f, 0x0904, 0x3116, 0x928e, 0x0080,
-	0x05e8, 0x9288, 0x1000, 0x210c, 0x81ff, 0x05c0, 0x8fff, 0x1148,
-	0x2001, 0x196a, 0x0006, 0x2003, 0x0001, 0x04f1, 0x000e, 0x2003,
-	0x0000, 0x00b6, 0x00c6, 0x2158, 0x2001, 0x0001, 0x080c, 0x6710,
-	0x00ce, 0x00be, 0x2019, 0x0029, 0x080c, 0x8843, 0x0076, 0x2039,
-	0x0000, 0x080c, 0x8748, 0x00b6, 0x00c6, 0x0026, 0x2158, 0xba04,
-	0x9294, 0x00ff, 0x9286, 0x0006, 0x1118, 0xb807, 0x0404, 0x0028,
-	0x2001, 0x0004, 0x8007, 0x9215, 0xba06, 0x002e, 0x00ce, 0x00be,
-	0x0016, 0x2c08, 0x080c, 0xce89, 0x001e, 0x007e, 0x002e, 0x8210,
-	0x1f04, 0x30cd, 0x015e, 0x001e, 0x002e, 0x003e, 0x004e, 0x00be,
-	0x00ce, 0x00ee, 0x00fe, 0x0005, 0x0046, 0x0026, 0x0016, 0x080c,
-	0x55a7, 0xd0c4, 0x0140, 0xd0a4, 0x0130, 0x9006, 0x2220, 0x2009,
-	0x0029, 0x080c, 0xd156, 0x001e, 0x002e, 0x004e, 0x0005, 0x0016,
-	0x0026, 0x0036, 0x00c6, 0x7290, 0x82ff, 0x01e8, 0x080c, 0x673e,
-	0x11d0, 0x2100, 0x080c, 0x26d2, 0x81ff, 0x01b8, 0x2019, 0x0001,
-	0x8314, 0x92e0, 0x1c80, 0x2c04, 0xd384, 0x0120, 0x9084, 0xff00,
-	0x8007, 0x0010, 0x9084, 0x00ff, 0x9116, 0x0138, 0x9096, 0x00ff,
-	0x0110, 0x8318, 0x0c68, 0x9085, 0x0001, 0x00ce, 0x003e, 0x002e,
-	0x001e, 0x0005, 0x0016, 0x00c6, 0x0126, 0x2091, 0x8000, 0x0036,
-	0x2019, 0x0029, 0x00a9, 0x003e, 0x9180, 0x1000, 0x2004, 0x9065,
-	0x0158, 0x0016, 0x00c6, 0x2061, 0x1a92, 0x001e, 0x6112, 0x080c,
-	0x3066, 0x001e, 0x080c, 0x63eb, 0x012e, 0x00ce, 0x001e, 0x0005,
-	0x0016, 0x0026, 0x2110, 0x080c, 0x9b81, 0x080c, 0xd251, 0x002e,
-	0x001e, 0x0005, 0x2001, 0x1836, 0x2004, 0xd0cc, 0x0005, 0x00c6,
-	0x00b6, 0x080c, 0x72e5, 0x1118, 0x20a9, 0x0800, 0x0010, 0x20a9,
-	0x0782, 0x080c, 0x72e5, 0x1110, 0x900e, 0x0010, 0x2009, 0x007e,
-	0x9180, 0x1000, 0x2004, 0x905d, 0x0130, 0x86ff, 0x0110, 0xb800,
-	0xd0bc, 0x090c, 0x63eb, 0x8108, 0x1f04, 0x31a0, 0x2061, 0x1800,
-	0x607b, 0x0000, 0x607c, 0x9084, 0x00ff, 0x607e, 0x60af, 0x0000,
-	0x00be, 0x00ce, 0x0005, 0x2001, 0x1880, 0x2004, 0xd0bc, 0x0005,
-	0x2011, 0x185f, 0x2214, 0xd2ec, 0x0005, 0x0026, 0x2011, 0x187e,
-	0x2214, 0xd2dc, 0x002e, 0x0005, 0x7eef, 0x7de8, 0x7ce4, 0x80e2,
-	0x7be1, 0x80e0, 0x80dc, 0x80da, 0x7ad9, 0x80d6, 0x80d5, 0x80d4,
-	0x80d3, 0x80d2, 0x80d1, 0x79ce, 0x78cd, 0x80cc, 0x80cb, 0x80ca,
-	0x80c9, 0x80c7, 0x80c6, 0x77c5, 0x76c3, 0x80bc, 0x80ba, 0x75b9,
-	0x80b6, 0x74b5, 0x73b4, 0x72b3, 0x80b2, 0x80b1, 0x80ae, 0x71ad,
-	0x80ac, 0x70ab, 0x6faa, 0x6ea9, 0x80a7, 0x6da6, 0x6ca5, 0x6ba3,
-	0x6a9f, 0x699e, 0x689d, 0x809b, 0x8098, 0x6797, 0x6690, 0x658f,
-	0x6488, 0x6384, 0x6282, 0x8081, 0x8080, 0x617c, 0x607a, 0x8079,
-	0x5f76, 0x8075, 0x8074, 0x8073, 0x8072, 0x8071, 0x806e, 0x5e6d,
-	0x806c, 0x5d6b, 0x5c6a, 0x5b69, 0x8067, 0x5a66, 0x5965, 0x5863,
-	0x575c, 0x565a, 0x5559, 0x8056, 0x8055, 0x5454, 0x5353, 0x5252,
-	0x5151, 0x504e, 0x4f4d, 0x804c, 0x804b, 0x4e4a, 0x4d49, 0x8047,
-	0x4c46, 0x8045, 0x8043, 0x803c, 0x803a, 0x8039, 0x8036, 0x4b35,
-	0x8034, 0x4a33, 0x4932, 0x4831, 0x802e, 0x472d, 0x462c, 0x452b,
-	0x442a, 0x4329, 0x4227, 0x8026, 0x8025, 0x4123, 0x401f, 0x3f1e,
-	0x3e1d, 0x3d1b, 0x3c18, 0x8017, 0x8010, 0x3b0f, 0x3a08, 0x8004,
-	0x3902, 0x8001, 0x8000, 0x8000, 0x3800, 0x3700, 0x3600, 0x8000,
-	0x3500, 0x8000, 0x8000, 0x8000, 0x3400, 0x8000, 0x8000, 0x8000,
-	0x8000, 0x8000, 0x8000, 0x3300, 0x3200, 0x8000, 0x8000, 0x8000,
-	0x8000, 0x8000, 0x8000, 0x3100, 0x3000, 0x8000, 0x8000, 0x2f00,
-	0x8000, 0x2e00, 0x2d00, 0x2c00, 0x8000, 0x8000, 0x8000, 0x2b00,
-	0x8000, 0x2a00, 0x2900, 0x2800, 0x8000, 0x2700, 0x2600, 0x2500,
-	0x2400, 0x2300, 0x2200, 0x8000, 0x8000, 0x2100, 0x2000, 0x1f00,
-	0x1e00, 0x1d00, 0x1c00, 0x8000, 0x8000, 0x1b00, 0x1a00, 0x8000,
-	0x1900, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x1800,
-	0x8000, 0x1700, 0x1600, 0x1500, 0x8000, 0x1400, 0x1300, 0x1200,
-	0x1100, 0x1000, 0x0f00, 0x8000, 0x8000, 0x0e00, 0x0d00, 0x0c00,
-	0x0b00, 0x0a00, 0x0900, 0x8000, 0x8000, 0x0800, 0x0700, 0x8000,
-	0x0600, 0x8000, 0x8000, 0x8000, 0x0500, 0x0400, 0x0300, 0x8000,
-	0x0200, 0x8000, 0x8000, 0x8000, 0x0100, 0x8000, 0x8000, 0x8000,
-	0x8000, 0x8000, 0x8000, 0x0000, 0x8000, 0x8000, 0x8000, 0x8000,
+	0x70ab, 0xffff, 0x0804, 0x2fe9, 0x2700, 0x0156, 0x0016, 0x9106,
+	0x0904, 0x2fde, 0x2001, 0x180d, 0x2004, 0xd08c, 0x0158, 0x0026,
+	0x2011, 0x0010, 0x080c, 0x68a8, 0x002e, 0x0120, 0x2009, 0xffff,
+	0x0804, 0x2fe6, 0xc484, 0x080c, 0x64fc, 0x0150, 0x080c, 0xc8ce,
+	0x15a8, 0x080c, 0x3257, 0x1590, 0x080c, 0x6497, 0x15b8, 0x0008,
+	0xc485, 0x080c, 0x686d, 0x1130, 0x7030, 0xd08c, 0x01f8, 0xb800,
+	0xd0bc, 0x11e0, 0x7290, 0xd28c, 0x0180, 0x080c, 0x686d, 0x9082,
+	0x0006, 0x02e0, 0xd484, 0x1118, 0x080c, 0x64c1, 0x0028, 0x080c,
+	0x31d3, 0x01a0, 0x080c, 0x31fe, 0x0088, 0x080c, 0x3147, 0x080c,
+	0xc8ce, 0x1160, 0x080c, 0x3033, 0x0188, 0x0040, 0x080c, 0xc8ce,
+	0x1118, 0x080c, 0x31d3, 0x0110, 0x0451, 0x0140, 0x001e, 0x8108,
+	0x015e, 0x1f04, 0x2f8c, 0x70ab, 0xffff, 0x0018, 0x001e, 0x015e,
+	0x71aa, 0x004e, 0x002e, 0x00ce, 0x00be, 0x0005, 0x00c6, 0x0016,
+	0x70ab, 0x0001, 0x2009, 0x007e, 0x080c, 0x6497, 0x1168, 0xb813,
+	0x00ff, 0xb817, 0xfffe, 0x080c, 0x3147, 0x04a9, 0x0128, 0x70d8,
+	0xc0bd, 0x70da, 0x080c, 0xc617, 0x001e, 0x00ce, 0x0005, 0x0016,
+	0x0076, 0x00d6, 0x00c6, 0x2001, 0x1863, 0x2004, 0x9084, 0x00ff,
+	0xb842, 0x080c, 0xa3ec, 0x01d0, 0x2b00, 0x6012, 0x080c, 0xc640,
+	0x6023, 0x0001, 0x9006, 0x080c, 0x6434, 0x2001, 0x0000, 0x080c,
+	0x6448, 0x0126, 0x2091, 0x8000, 0x70a4, 0x8000, 0x70a6, 0x012e,
+	0x2009, 0x0004, 0x080c, 0xa419, 0x9085, 0x0001, 0x00ce, 0x00de,
+	0x007e, 0x001e, 0x0005, 0x0016, 0x0076, 0x00d6, 0x00c6, 0x2001,
+	0x1863, 0x2004, 0x9084, 0x00ff, 0xb842, 0x080c, 0xa3ec, 0x0548,
+	0x2b00, 0x6012, 0xb800, 0xc0c4, 0xb802, 0xb8a0, 0x9086, 0x007e,
+	0x0140, 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006, 0x1110, 0x080c,
+	0x3102, 0x080c, 0xc640, 0x6023, 0x0001, 0x9006, 0x080c, 0x6434,
+	0x2001, 0x0002, 0x080c, 0x6448, 0x0126, 0x2091, 0x8000, 0x70a4,
+	0x8000, 0x70a6, 0x012e, 0x2009, 0x0002, 0x080c, 0xa419, 0x9085,
+	0x0001, 0x00ce, 0x00de, 0x007e, 0x001e, 0x0005, 0x00b6, 0x00c6,
+	0x0026, 0x2009, 0x0080, 0x080c, 0x6497, 0x1140, 0xb813, 0x00ff,
+	0xb817, 0xfffc, 0x0039, 0x0110, 0x70df, 0xffff, 0x002e, 0x00ce,
+	0x00be, 0x0005, 0x0016, 0x0076, 0x00d6, 0x00c6, 0x080c, 0xa347,
+	0x01d0, 0x2b00, 0x6012, 0x080c, 0xc640, 0x6023, 0x0001, 0x9006,
+	0x080c, 0x6434, 0x2001, 0x0002, 0x080c, 0x6448, 0x0126, 0x2091,
+	0x8000, 0x70e0, 0x8000, 0x70e2, 0x012e, 0x2009, 0x0002, 0x080c,
+	0xa419, 0x9085, 0x0001, 0x00ce, 0x00de, 0x007e, 0x001e, 0x0005,
+	0x00c6, 0x00d6, 0x0126, 0x2091, 0x8000, 0x2009, 0x007f, 0x080c,
+	0x6497, 0x11b8, 0xb813, 0x00ff, 0xb817, 0xfffd, 0xb8bf, 0x0004,
+	0x080c, 0xa347, 0x0170, 0x2b00, 0x6012, 0x6316, 0x6023, 0x0001,
+	0x620a, 0x080c, 0xc640, 0x2009, 0x0022, 0x080c, 0xa419, 0x9085,
+	0x0001, 0x012e, 0x00de, 0x00ce, 0x0005, 0x00e6, 0x00c6, 0x0066,
+	0x0036, 0x0026, 0x00b6, 0x21f0, 0x080c, 0x8a36, 0x080c, 0x89c0,
+	0x080c, 0xa1db, 0x080c, 0xb3a0, 0x3e08, 0x2130, 0x81ff, 0x0120,
+	0x20a9, 0x007e, 0x900e, 0x0018, 0x20a9, 0x007f, 0x900e, 0x0016,
+	0x080c, 0x64fc, 0x1140, 0x9686, 0x0002, 0x1118, 0xb800, 0xd0bc,
+	0x1110, 0x080c, 0x5fcd, 0x001e, 0x8108, 0x1f04, 0x30e7, 0x9686,
+	0x0001, 0x190c, 0x322b, 0x00be, 0x002e, 0x003e, 0x006e, 0x00ce,
+	0x00ee, 0x0005, 0x00e6, 0x00c6, 0x0046, 0x0036, 0x0026, 0x0016,
+	0x00b6, 0x6210, 0x2258, 0xbaa0, 0x0026, 0x2019, 0x0029, 0x080c,
+	0x8a2b, 0x0076, 0x2039, 0x0000, 0x080c, 0x8919, 0x2c08, 0x080c,
+	0xda37, 0x007e, 0x001e, 0xba10, 0xbb14, 0xbcb0, 0x080c, 0x5fcd,
+	0xba12, 0xbb16, 0xbcb2, 0x00be, 0x001e, 0x002e, 0x003e, 0x004e,
+	0x00ce, 0x00ee, 0x0005, 0x00e6, 0x0006, 0x00b6, 0x6010, 0x2058,
+	0xb8a0, 0x00be, 0x9086, 0x0080, 0x0150, 0x2071, 0x1800, 0x70a4,
+	0x9005, 0x0110, 0x8001, 0x70a6, 0x000e, 0x00ee, 0x0005, 0x2071,
+	0x1800, 0x70e0, 0x9005, 0x0dc0, 0x8001, 0x70e2, 0x0ca8, 0xb800,
+	0xc08c, 0xb802, 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x00b6, 0x0046,
+	0x0036, 0x0026, 0x0016, 0x0156, 0x2178, 0x81ff, 0x1118, 0x20a9,
+	0x0001, 0x0078, 0x080c, 0x5664, 0xd0c4, 0x0140, 0xd0a4, 0x0130,
+	0x9006, 0x2020, 0x2009, 0x002d, 0x080c, 0xdd18, 0x20a9, 0x0800,
+	0x9016, 0x0026, 0x928e, 0x007e, 0x0904, 0x31b2, 0x928e, 0x007f,
+	0x0904, 0x31b2, 0x928e, 0x0080, 0x05e8, 0x9288, 0x1000, 0x210c,
+	0x81ff, 0x05c0, 0x8fff, 0x1148, 0x2001, 0x196a, 0x0006, 0x2003,
+	0x0001, 0x04f1, 0x000e, 0x2003, 0x0000, 0x00b6, 0x00c6, 0x2158,
+	0x2001, 0x0001, 0x080c, 0x6837, 0x00ce, 0x00be, 0x2019, 0x0029,
+	0x080c, 0x8a2b, 0x0076, 0x2039, 0x0000, 0x080c, 0x8919, 0x00b6,
+	0x00c6, 0x0026, 0x2158, 0xba04, 0x9294, 0x00ff, 0x9286, 0x0006,
+	0x1118, 0xb807, 0x0404, 0x0028, 0x2001, 0x0004, 0x8007, 0x9215,
+	0xba06, 0x002e, 0x00ce, 0x00be, 0x0016, 0x2c08, 0x080c, 0xda37,
+	0x001e, 0x007e, 0x002e, 0x8210, 0x1f04, 0x3169, 0x015e, 0x001e,
+	0x002e, 0x003e, 0x004e, 0x00be, 0x00ce, 0x00ee, 0x00fe, 0x0005,
+	0x0046, 0x0026, 0x0016, 0x080c, 0x5664, 0xd0c4, 0x0140, 0xd0a4,
+	0x0130, 0x9006, 0x2220, 0x2009, 0x0029, 0x080c, 0xdd18, 0x001e,
+	0x002e, 0x004e, 0x0005, 0x0016, 0x0026, 0x0036, 0x00c6, 0x7290,
+	0x82ff, 0x01e8, 0x080c, 0x6865, 0x11d0, 0x2100, 0x080c, 0x273b,
+	0x81ff, 0x01b8, 0x2019, 0x0001, 0x8314, 0x92e0, 0x1c80, 0x2c04,
+	0xd384, 0x0120, 0x9084, 0xff00, 0x8007, 0x0010, 0x9084, 0x00ff,
+	0x9116, 0x0138, 0x9096, 0x00ff, 0x0110, 0x8318, 0x0c68, 0x9085,
+	0x0001, 0x00ce, 0x003e, 0x002e, 0x001e, 0x0005, 0x0016, 0x00c6,
+	0x0126, 0x2091, 0x8000, 0x0036, 0x2019, 0x0029, 0x00a9, 0x003e,
+	0x9180, 0x1000, 0x2004, 0x9065, 0x0158, 0x0016, 0x00c6, 0x2061,
+	0x1a92, 0x001e, 0x6112, 0x080c, 0x3102, 0x001e, 0x080c, 0x64c1,
+	0x012e, 0x00ce, 0x001e, 0x0005, 0x0016, 0x0026, 0x2110, 0x080c,
+	0x9e54, 0x080c, 0xdfde, 0x002e, 0x001e, 0x0005, 0x2001, 0x1836,
+	0x2004, 0xd0cc, 0x0005, 0x00c6, 0x00b6, 0x080c, 0x7351, 0x1118,
+	0x20a9, 0x0800, 0x0010, 0x20a9, 0x0782, 0x080c, 0x7351, 0x1110,
+	0x900e, 0x0010, 0x2009, 0x007e, 0x9180, 0x1000, 0x2004, 0x905d,
+	0x0130, 0x86ff, 0x0110, 0xb800, 0xd0bc, 0x090c, 0x64c1, 0x8108,
+	0x1f04, 0x323c, 0x2061, 0x1800, 0x607b, 0x0000, 0x607c, 0x9084,
+	0x00ff, 0x607e, 0x60af, 0x0000, 0x00be, 0x00ce, 0x0005, 0x2001,
+	0x1880, 0x2004, 0xd0bc, 0x0005, 0x2011, 0x185f, 0x2214, 0xd2ec,
+	0x0005, 0x0026, 0x2011, 0x187e, 0x2214, 0xd2dc, 0x002e, 0x0005,
+	0x7eef, 0x7de8, 0x7ce4, 0x80e2, 0x7be1, 0x80e0, 0x80dc, 0x80da,
+	0x7ad9, 0x80d6, 0x80d5, 0x80d4, 0x80d3, 0x80d2, 0x80d1, 0x79ce,
+	0x78cd, 0x80cc, 0x80cb, 0x80ca, 0x80c9, 0x80c7, 0x80c6, 0x77c5,
+	0x76c3, 0x80bc, 0x80ba, 0x75b9, 0x80b6, 0x74b5, 0x73b4, 0x72b3,
+	0x80b2, 0x80b1, 0x80ae, 0x71ad, 0x80ac, 0x70ab, 0x6faa, 0x6ea9,
+	0x80a7, 0x6da6, 0x6ca5, 0x6ba3, 0x6a9f, 0x699e, 0x689d, 0x809b,
+	0x8098, 0x6797, 0x6690, 0x658f, 0x6488, 0x6384, 0x6282, 0x8081,
+	0x8080, 0x617c, 0x607a, 0x8079, 0x5f76, 0x8075, 0x8074, 0x8073,
+	0x8072, 0x8071, 0x806e, 0x5e6d, 0x806c, 0x5d6b, 0x5c6a, 0x5b69,
+	0x8067, 0x5a66, 0x5965, 0x5863, 0x575c, 0x565a, 0x5559, 0x8056,
+	0x8055, 0x5454, 0x5353, 0x5252, 0x5151, 0x504e, 0x4f4d, 0x804c,
+	0x804b, 0x4e4a, 0x4d49, 0x8047, 0x4c46, 0x8045, 0x8043, 0x803c,
+	0x803a, 0x8039, 0x8036, 0x4b35, 0x8034, 0x4a33, 0x4932, 0x4831,
+	0x802e, 0x472d, 0x462c, 0x452b, 0x442a, 0x4329, 0x4227, 0x8026,
+	0x8025, 0x4123, 0x401f, 0x3f1e, 0x3e1d, 0x3d1b, 0x3c18, 0x8017,
+	0x8010, 0x3b0f, 0x3a08, 0x8004, 0x3902, 0x8001, 0x8000, 0x8000,
+	0x3800, 0x3700, 0x3600, 0x8000, 0x3500, 0x8000, 0x8000, 0x8000,
+	0x3400, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x3300,
+	0x3200, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x3100,
+	0x3000, 0x8000, 0x8000, 0x2f00, 0x8000, 0x2e00, 0x2d00, 0x2c00,
+	0x8000, 0x8000, 0x8000, 0x2b00, 0x8000, 0x2a00, 0x2900, 0x2800,
+	0x8000, 0x2700, 0x2600, 0x2500, 0x2400, 0x2300, 0x2200, 0x8000,
+	0x8000, 0x2100, 0x2000, 0x1f00, 0x1e00, 0x1d00, 0x1c00, 0x8000,
+	0x8000, 0x1b00, 0x1a00, 0x8000, 0x1900, 0x8000, 0x8000, 0x8000,
+	0x8000, 0x8000, 0x8000, 0x1800, 0x8000, 0x1700, 0x1600, 0x1500,
+	0x8000, 0x1400, 0x1300, 0x1200, 0x1100, 0x1000, 0x0f00, 0x8000,
+	0x8000, 0x0e00, 0x0d00, 0x0c00, 0x0b00, 0x0a00, 0x0900, 0x8000,
+	0x8000, 0x0800, 0x0700, 0x8000, 0x0600, 0x8000, 0x8000, 0x8000,
+	0x0500, 0x0400, 0x0300, 0x8000, 0x0200, 0x8000, 0x8000, 0x8000,
+	0x0100, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x0000,
 	0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000,
-	0x8000, 0x8000, 0x8000, 0x8000, 0x2071, 0x189f, 0x7003, 0x0002,
-	0x9006, 0x7016, 0x701a, 0x704a, 0x704e, 0x700e, 0x7042, 0x7046,
-	0x703b, 0x18bb, 0x703f, 0x18bb, 0x7007, 0x0001, 0x080c, 0x101a,
-	0x090c, 0x0dc4, 0x2900, 0x706a, 0xa86b, 0x0002, 0xa8af, 0xdcb0,
-	0x080c, 0x101a, 0x090c, 0x0dc4, 0x2900, 0x706e, 0xa86b, 0x0002,
-	0xa8af, 0xdcb0, 0x0005, 0x2071, 0x189f, 0x7004, 0x0002, 0x32fb,
-	0x32fc, 0x330f, 0x3323, 0x0005, 0x1004, 0x330c, 0x0e04, 0x330c,
-	0x2079, 0x0000, 0x0126, 0x2091, 0x8000, 0x700c, 0x9005, 0x1128,
-	0x700f, 0x0001, 0x012e, 0x0468, 0x0005, 0x012e, 0x0ce8, 0x2079,
-	0x0000, 0x2061, 0x18b9, 0x2c4c, 0xa870, 0x908e, 0x0100, 0x0128,
-	0x9086, 0x0200, 0x0904, 0x33f7, 0x0005, 0x7018, 0x2048, 0x2061,
-	0x1800, 0x701c, 0x0807, 0x7014, 0x2048, 0xa868, 0x9094, 0x00ff,
-	0x9296, 0x0029, 0x1120, 0xaa7c, 0xd2fc, 0x0128, 0x0005, 0x9086,
-	0x0103, 0x0108, 0x0005, 0x2079, 0x0000, 0x2061, 0x1800, 0x701c,
-	0x0807, 0x2061, 0x1800, 0x7880, 0x908a, 0x0040, 0x1210, 0x61cc,
-	0x0042, 0x2100, 0x908a, 0x003f, 0x1a04, 0x33f4, 0x61cc, 0x0804,
-	0x3389, 0x33cb, 0x3403, 0x33f4, 0x340f, 0x3419, 0x341f, 0x3423,
-	0x3433, 0x3437, 0x344d, 0x3453, 0x3459, 0x3464, 0x346f, 0x347e,
-	0x348d, 0x349b, 0x34b2, 0x34cd, 0x33f4, 0x3578, 0x35b6, 0x3658,
-	0x3669, 0x368c, 0x33f4, 0x33f4, 0x33f4, 0x36c4, 0x36e0, 0x36e9,
-	0x3717, 0x371d, 0x33f4, 0x3763, 0x33f4, 0x33f4, 0x33f4, 0x33f4,
-	0x33f4, 0x376e, 0x3777, 0x377f, 0x3781, 0x33f4, 0x33f4, 0x33f4,
-	0x33f4, 0x33f4, 0x33f4, 0x37ad, 0x33f4, 0x33f4, 0x33f4, 0x33f4,
-	0x33f4, 0x37ca, 0x384c, 0x33f4, 0x33f4, 0x33f4, 0x33f4, 0x33f4,
-	0x33f4, 0x0002, 0x3876, 0x3879, 0x38d8, 0x38f1, 0x3921, 0x3bc3,
-	0x33f4, 0x5165, 0x33f4, 0x33f4, 0x33f4, 0x33f4, 0x33f4, 0x33f4,
-	0x33f4, 0x33f4, 0x344d, 0x3453, 0x40f8, 0x55c1, 0x410e, 0x51f4,
-	0x5246, 0x5351, 0x33f4, 0x53b3, 0x53ef, 0x5420, 0x5529, 0x544d,
-	0x54a9, 0x33f4, 0x4112, 0x42da, 0x42f0, 0x4315, 0x437a, 0x43ee,
-	0x440e, 0x4485, 0x44e1, 0x453d, 0x4540, 0x4565, 0x46ec, 0x4751,
-	0x4759, 0x488e, 0x49eb, 0x4a1f, 0x4c7f, 0x33f4, 0x4c9c, 0x4d60,
-	0x4e3d, 0x33f4, 0x33f4, 0x33f4, 0x33f4, 0x4ea3, 0x4ebe, 0x4759,
-	0x5105, 0x714c, 0x0000, 0x2021, 0x4000, 0x080c, 0x4a99, 0x0126,
-	0x2091, 0x8000, 0x0e04, 0x33d5, 0x0010, 0x012e, 0x0cc0, 0x7c36,
-	0x9486, 0x4000, 0x0118, 0x7833, 0x0011, 0x0010, 0x7833, 0x0010,
-	0x7c82, 0x7986, 0x7a8a, 0x7b8e, 0x2091, 0x4080, 0x2001, 0x0089,
-	0x2004, 0xd084, 0x190c, 0x119d, 0x7007, 0x0001, 0x2091, 0x5000,
-	0x700f, 0x0000, 0x012e, 0x0005, 0x2021, 0x4001, 0x08b0, 0x2021,
-	0x4002, 0x0898, 0x2021, 0x4003, 0x0880, 0x2021, 0x4005, 0x0868,
-	0x2021, 0x4006, 0x0850, 0x2039, 0x0001, 0x902e, 0x2520, 0x7b88,
-	0x7a8c, 0x7884, 0x7990, 0x81ff, 0x0d98, 0x0804, 0x4aa6, 0x2039,
-	0x0001, 0x902e, 0x2520, 0x7b88, 0x7a8c, 0x7884, 0x7990, 0x0804,
-	0x4aa9, 0x7984, 0x7888, 0x2114, 0x200a, 0x0804, 0x33cb, 0x7984,
-	0x2114, 0x0804, 0x33cb, 0x20e1, 0x0000, 0x2099, 0x0021, 0x20e9,
-	0x0000, 0x20a1, 0x0021, 0x20a9, 0x001f, 0x4003, 0x7984, 0x7a88,
-	0x7b8c, 0x0804, 0x33cb, 0x7884, 0x2060, 0x0804, 0x3480, 0x2009,
-	0x0003, 0x2011, 0x0003, 0x2019, 0x001a, 0x789b, 0x0107, 0x7893,
-	0xffff, 0x2001, 0x1890, 0x2004, 0x9005, 0x0118, 0x7896, 0x0804,
-	0x33cb, 0x7897, 0x0001, 0x0804, 0x33cb, 0x2039, 0x0001, 0x7d98,
-	0x7c9c, 0x0804, 0x3407, 0x2039, 0x0001, 0x7d98, 0x7c9c, 0x0804,
-	0x3413, 0x79a0, 0x9182, 0x0040, 0x0210, 0x0804, 0x3400, 0x2138,
-	0x7d98, 0x7c9c, 0x0804, 0x3407, 0x79a0, 0x9182, 0x0040, 0x0210,
-	0x0804, 0x3400, 0x2138, 0x7d98, 0x7c9c, 0x0804, 0x3413, 0x79a0,
-	0x9182, 0x0040, 0x0210, 0x0804, 0x3400, 0x21e8, 0x7984, 0x7888,
-	0x20a9, 0x0001, 0x21a0, 0x4004, 0x0804, 0x33cb, 0x2061, 0x0800,
-	0xe10c, 0x9006, 0x2c15, 0x9200, 0x8c60, 0x8109, 0x1dd8, 0x2010,
-	0x9005, 0x0904, 0x33cb, 0x0804, 0x33fa, 0x79a0, 0x9182, 0x0040,
-	0x0210, 0x0804, 0x3400, 0x21e0, 0x20a9, 0x0001, 0x7984, 0x2198,
-	0x4012, 0x0804, 0x33cb, 0x2069, 0x185e, 0x7884, 0x7990, 0x911a,
-	0x1a04, 0x3400, 0x8019, 0x0904, 0x3400, 0x684a, 0x6942, 0x788c,
-	0x6852, 0x7888, 0x6856, 0x9006, 0x685a, 0x685e, 0x080c, 0x760d,
-	0x0804, 0x33cb, 0x2069, 0x185e, 0x7884, 0x7994, 0x911a, 0x1a04,
-	0x3400, 0x8019, 0x0904, 0x3400, 0x684e, 0x6946, 0x788c, 0x6862,
-	0x7888, 0x6866, 0x9006, 0x686a, 0x686e, 0x0126, 0x2091, 0x8000,
-	0x080c, 0x68f1, 0x012e, 0x0804, 0x33cb, 0x902e, 0x2520, 0x81ff,
-	0x0120, 0x2009, 0x0001, 0x0804, 0x33fd, 0x7984, 0x7b88, 0x7a8c,
-	0x20a9, 0x0005, 0x20e9, 0x0001, 0x20a1, 0x18a7, 0x4101, 0x080c,
-	0x4a61, 0x1120, 0x2009, 0x0002, 0x0804, 0x33fd, 0x2009, 0x0020,
-	0xa85c, 0x9080, 0x001a, 0xaf60, 0x080c, 0x4aa6, 0x701f, 0x34f1,
-	0x0005, 0xa868, 0x2008, 0x9084, 0x00ff, 0x9096, 0x0011, 0x0168,
-	0x9096, 0x0019, 0x0150, 0x9096, 0x0015, 0x0138, 0x9096, 0x0048,
-	0x0120, 0x9096, 0x0029, 0x1904, 0x33fd, 0x810f, 0x918c, 0x00ff,
-	0x0904, 0x33fd, 0x7112, 0x7010, 0x8001, 0x0560, 0x7012, 0x080c,
-	0x4a61, 0x1120, 0x2009, 0x0002, 0x0804, 0x33fd, 0x2009, 0x0020,
-	0x7068, 0x2040, 0xa290, 0xa394, 0xa498, 0xa59c, 0x9290, 0x0040,
-	0x9399, 0x0000, 0x94a1, 0x0000, 0x95a9, 0x0000, 0xa85c, 0x9080,
-	0x001a, 0xaf60, 0x080c, 0x4aa6, 0x701f, 0x352f, 0x0005, 0xa868,
-	0x9084, 0x00ff, 0x9096, 0x0002, 0x0120, 0x9096, 0x000a, 0x1904,
-	0x33fd, 0x0888, 0x0126, 0x2091, 0x8000, 0x7014, 0x2048, 0xa86c,
-	0xc0fd, 0xa86e, 0xa868, 0x9084, 0x00ff, 0x9096, 0x0029, 0x1148,
-	0xc2fd, 0xaa7e, 0x080c, 0x5ff5, 0x0138, 0xa87e, 0xa986, 0x012e,
-	0x0060, 0x080c, 0x6313, 0x1130, 0x7007, 0x0003, 0x701f, 0x355d,
-	0x012e, 0x0005, 0x080c, 0x6d45, 0x012e, 0x0126, 0x2091, 0x8000,
-	0x20a9, 0x0005, 0x20e1, 0x0001, 0x2099, 0x18a7, 0x400a, 0x2100,
-	0x9210, 0x9399, 0x0000, 0x94a1, 0x0000, 0x95a9, 0x0000, 0xa85c,
-	0x9080, 0x001a, 0x2009, 0x0020, 0x012e, 0xaf60, 0x0804, 0x4aa9,
-	0x2091, 0x8000, 0x7837, 0x4000, 0x7833, 0x0010, 0x7883, 0x4000,
-	0x7887, 0x4953, 0x788b, 0x5020, 0x788f, 0x2020, 0x2009, 0x017f,
-	0x2104, 0x7892, 0x3f00, 0x7896, 0x2061, 0x0100, 0x6200, 0x2061,
-	0x0200, 0x603c, 0x8007, 0x9205, 0x789a, 0x2009, 0x04fd, 0x2104,
-	0x789e, 0x2091, 0x5000, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004,
-	0xd084, 0x0180, 0x2001, 0x19f8, 0x2004, 0x9005, 0x0128, 0x2001,
-	0x008b, 0x2004, 0xd0fc, 0x0dd8, 0x2001, 0x008a, 0x2003, 0x0002,
-	0x2003, 0x1001, 0x2071, 0x0080, 0x0804, 0x0427, 0x81ff, 0x1904,
-	0x33fd, 0x7984, 0x080c, 0x6411, 0x1904, 0x3400, 0x7e98, 0x9682,
-	0x4000, 0x1a04, 0x3400, 0x7c88, 0x7d8c, 0x080c, 0x6579, 0x080c,
-	0x6548, 0x0000, 0x1518, 0x2061, 0x1cc8, 0x0126, 0x2091, 0x8000,
+	0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000,
+	0x2071, 0x189f, 0x7003, 0x0002, 0x9006, 0x7016, 0x701a, 0x704a,
+	0x704e, 0x700e, 0x7042, 0x7046, 0x703b, 0x18bb, 0x703f, 0x18bb,
+	0x7007, 0x0001, 0x080c, 0x1026, 0x090c, 0x0dc3, 0x2900, 0x706a,
+	0xa86b, 0x0002, 0xa8af, 0xdcb0, 0x080c, 0x1026, 0x090c, 0x0dc3,
+	0x2900, 0x706e, 0xa86b, 0x0002, 0xa8af, 0xdcb0, 0x0005, 0x2071,
+	0x189f, 0x7004, 0x0002, 0x3397, 0x3398, 0x33ab, 0x33bf, 0x0005,
+	0x1004, 0x33a8, 0x0e04, 0x33a8, 0x2079, 0x0000, 0x0126, 0x2091,
+	0x8000, 0x700c, 0x9005, 0x1128, 0x700f, 0x0001, 0x012e, 0x0468,
+	0x0005, 0x012e, 0x0ce8, 0x2079, 0x0000, 0x2061, 0x18b9, 0x2c4c,
+	0xa870, 0x908e, 0x0100, 0x0128, 0x9086, 0x0200, 0x0904, 0x3493,
+	0x0005, 0x7018, 0x2048, 0x2061, 0x1800, 0x701c, 0x0807, 0x7014,
+	0x2048, 0xa868, 0x9094, 0x00ff, 0x9296, 0x0029, 0x1120, 0xaa7c,
+	0xd2fc, 0x0128, 0x0005, 0x9086, 0x0103, 0x0108, 0x0005, 0x2079,
+	0x0000, 0x2061, 0x1800, 0x701c, 0x0807, 0x2061, 0x1800, 0x7880,
+	0x908a, 0x0040, 0x1210, 0x61cc, 0x0042, 0x2100, 0x908a, 0x003f,
+	0x1a04, 0x3490, 0x61cc, 0x0804, 0x3425, 0x3467, 0x349f, 0x3490,
+	0x34ab, 0x34b5, 0x34bb, 0x34bf, 0x34cf, 0x34d3, 0x34e9, 0x34ef,
+	0x34f5, 0x3500, 0x350b, 0x351a, 0x3529, 0x3537, 0x354e, 0x3569,
+	0x3490, 0x3614, 0x3652, 0x36f4, 0x3705, 0x3728, 0x3490, 0x3490,
+	0x3490, 0x3760, 0x377c, 0x3785, 0x37b3, 0x37b9, 0x3490, 0x37ff,
+	0x3490, 0x3490, 0x3490, 0x3490, 0x3490, 0x380a, 0x3813, 0x381b,
+	0x381d, 0x3490, 0x3490, 0x3490, 0x3490, 0x3490, 0x3490, 0x3849,
+	0x3490, 0x3490, 0x3490, 0x3490, 0x3490, 0x3866, 0x38ea, 0x3490,
+	0x3490, 0x3490, 0x3490, 0x3490, 0x3490, 0x0002, 0x3914, 0x3917,
+	0x3976, 0x398f, 0x39bf, 0x3c61, 0x3490, 0x5222, 0x3490, 0x3490,
+	0x3490, 0x3490, 0x3490, 0x3490, 0x3490, 0x3490, 0x34e9, 0x34ef,
+	0x4196, 0x567e, 0x41ac, 0x52b1, 0x5303, 0x540e, 0x3490, 0x5470,
+	0x54ac, 0x54dd, 0x55e6, 0x550a, 0x5566, 0x3490, 0x41b0, 0x437d,
+	0x4393, 0x43b8, 0x441d, 0x4491, 0x44b1, 0x4528, 0x4584, 0x45e0,
+	0x45e3, 0x4608, 0x478f, 0x47f4, 0x47fc, 0x4931, 0x4a9b, 0x4acf,
+	0x4d2f, 0x3490, 0x4d4d, 0x4e1d, 0x4efa, 0x3490, 0x3490, 0x3490,
+	0x3490, 0x4f60, 0x4f7b, 0x47fc, 0x51c2, 0x714c, 0x0000, 0x2021,
+	0x4000, 0x080c, 0x4b49, 0x0126, 0x2091, 0x8000, 0x0e04, 0x3471,
+	0x0010, 0x012e, 0x0cc0, 0x7c36, 0x9486, 0x4000, 0x0118, 0x7833,
+	0x0011, 0x0010, 0x7833, 0x0010, 0x7c82, 0x7986, 0x7a8a, 0x7b8e,
+	0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x11a9,
+	0x7007, 0x0001, 0x2091, 0x5000, 0x700f, 0x0000, 0x012e, 0x0005,
+	0x2021, 0x4001, 0x08b0, 0x2021, 0x4002, 0x0898, 0x2021, 0x4003,
+	0x0880, 0x2021, 0x4005, 0x0868, 0x2021, 0x4006, 0x0850, 0x2039,
+	0x0001, 0x902e, 0x2520, 0x7b88, 0x7a8c, 0x7884, 0x7990, 0x81ff,
+	0x0d98, 0x0804, 0x4b56, 0x2039, 0x0001, 0x902e, 0x2520, 0x7b88,
+	0x7a8c, 0x7884, 0x7990, 0x0804, 0x4b59, 0x7984, 0x7888, 0x2114,
+	0x200a, 0x0804, 0x3467, 0x7984, 0x2114, 0x0804, 0x3467, 0x20e1,
+	0x0000, 0x2099, 0x0021, 0x20e9, 0x0000, 0x20a1, 0x0021, 0x20a9,
+	0x001f, 0x4003, 0x7984, 0x7a88, 0x7b8c, 0x0804, 0x3467, 0x7884,
+	0x2060, 0x0804, 0x351c, 0x2009, 0x0003, 0x2011, 0x0003, 0x2019,
+	0x001a, 0x789b, 0x0117, 0x7893, 0xffff, 0x2001, 0x1890, 0x2004,
+	0x9005, 0x0118, 0x7896, 0x0804, 0x3467, 0x7897, 0x0001, 0x0804,
+	0x3467, 0x2039, 0x0001, 0x7d98, 0x7c9c, 0x0804, 0x34a3, 0x2039,
+	0x0001, 0x7d98, 0x7c9c, 0x0804, 0x34af, 0x79a0, 0x9182, 0x0040,
+	0x0210, 0x0804, 0x349c, 0x2138, 0x7d98, 0x7c9c, 0x0804, 0x34a3,
+	0x79a0, 0x9182, 0x0040, 0x0210, 0x0804, 0x349c, 0x2138, 0x7d98,
+	0x7c9c, 0x0804, 0x34af, 0x79a0, 0x9182, 0x0040, 0x0210, 0x0804,
+	0x349c, 0x21e8, 0x7984, 0x7888, 0x20a9, 0x0001, 0x21a0, 0x4004,
+	0x0804, 0x3467, 0x2061, 0x0800, 0xe10c, 0x9006, 0x2c15, 0x9200,
+	0x8c60, 0x8109, 0x1dd8, 0x2010, 0x9005, 0x0904, 0x3467, 0x0804,
+	0x3496, 0x79a0, 0x9182, 0x0040, 0x0210, 0x0804, 0x349c, 0x21e0,
+	0x20a9, 0x0001, 0x7984, 0x2198, 0x4012, 0x0804, 0x3467, 0x2069,
+	0x185e, 0x7884, 0x7990, 0x911a, 0x1a04, 0x349c, 0x8019, 0x0904,
+	0x349c, 0x684a, 0x6942, 0x788c, 0x6852, 0x7888, 0x6856, 0x9006,
+	0x685a, 0x685e, 0x080c, 0x767d, 0x0804, 0x3467, 0x2069, 0x185e,
+	0x7884, 0x7994, 0x911a, 0x1a04, 0x349c, 0x8019, 0x0904, 0x349c,
+	0x684e, 0x6946, 0x788c, 0x6862, 0x7888, 0x6866, 0x9006, 0x686a,
+	0x686e, 0x0126, 0x2091, 0x8000, 0x080c, 0x69d9, 0x012e, 0x0804,
+	0x3467, 0x902e, 0x2520, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804,
+	0x3499, 0x7984, 0x7b88, 0x7a8c, 0x20a9, 0x0005, 0x20e9, 0x0001,
+	0x20a1, 0x18a7, 0x4101, 0x080c, 0x4b11, 0x1120, 0x2009, 0x0002,
+	0x0804, 0x3499, 0x2009, 0x0020, 0xa85c, 0x9080, 0x001a, 0xaf60,
+	0x080c, 0x4b56, 0x701f, 0x358d, 0x0005, 0xa868, 0x2008, 0x9084,
+	0x00ff, 0x9096, 0x0011, 0x0168, 0x9096, 0x0019, 0x0150, 0x9096,
+	0x0015, 0x0138, 0x9096, 0x0048, 0x0120, 0x9096, 0x0029, 0x1904,
+	0x3499, 0x810f, 0x918c, 0x00ff, 0x0904, 0x3499, 0x7112, 0x7010,
+	0x8001, 0x0560, 0x7012, 0x080c, 0x4b11, 0x1120, 0x2009, 0x0002,
+	0x0804, 0x3499, 0x2009, 0x0020, 0x7068, 0x2040, 0xa290, 0xa394,
+	0xa498, 0xa59c, 0x9290, 0x0040, 0x9399, 0x0000, 0x94a1, 0x0000,
+	0x95a9, 0x0000, 0xa85c, 0x9080, 0x001a, 0xaf60, 0x080c, 0x4b56,
+	0x701f, 0x35cb, 0x0005, 0xa868, 0x9084, 0x00ff, 0x9096, 0x0002,
+	0x0120, 0x9096, 0x000a, 0x1904, 0x3499, 0x0888, 0x0126, 0x2091,
+	0x8000, 0x7014, 0x2048, 0xa86c, 0xc0fd, 0xa86e, 0xa868, 0x9084,
+	0x00ff, 0x9096, 0x0029, 0x1148, 0xc2fd, 0xaa7e, 0x080c, 0x60c5,
+	0x0138, 0xa87e, 0xa986, 0x012e, 0x0060, 0x080c, 0x63e9, 0x1130,
+	0x7007, 0x0003, 0x701f, 0x35f9, 0x012e, 0x0005, 0x080c, 0x6e4b,
+	0x012e, 0x0126, 0x2091, 0x8000, 0x20a9, 0x0005, 0x20e1, 0x0001,
+	0x2099, 0x18a7, 0x400a, 0x2100, 0x9210, 0x9399, 0x0000, 0x94a1,
+	0x0000, 0x95a9, 0x0000, 0xa85c, 0x9080, 0x001a, 0x2009, 0x0020,
+	0x012e, 0xaf60, 0x0804, 0x4b59, 0x2091, 0x8000, 0x7837, 0x4000,
+	0x7833, 0x0010, 0x7883, 0x4000, 0x7887, 0x4953, 0x788b, 0x5020,
+	0x788f, 0x2020, 0x2009, 0x017f, 0x2104, 0x7892, 0x3f00, 0x7896,
+	0x2061, 0x0100, 0x6200, 0x2061, 0x0200, 0x603c, 0x8007, 0x9205,
+	0x789a, 0x2009, 0x04fd, 0x2104, 0x789e, 0x2091, 0x5000, 0x2091,
+	0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x0180, 0x2001, 0x19f8,
+	0x2004, 0x9005, 0x0128, 0x2001, 0x008b, 0x2004, 0xd0fc, 0x0dd8,
+	0x2001, 0x008a, 0x2003, 0x0002, 0x2003, 0x1001, 0x2071, 0x0080,
+	0x0804, 0x0427, 0x81ff, 0x1904, 0x3499, 0x7984, 0x080c, 0x64fc,
+	0x1904, 0x349c, 0x7e98, 0x9682, 0x4000, 0x1a04, 0x349c, 0x7c88,
+	0x7d8c, 0x080c, 0x6681, 0x080c, 0x6650, 0x0000, 0x1518, 0x2061,
+	0x1cd0, 0x0126, 0x2091, 0x8000, 0x6000, 0x9086, 0x0000, 0x0148,
+	0x6014, 0x904d, 0x0130, 0xa870, 0x9406, 0x1118, 0xa874, 0x9506,
+	0x0150, 0x012e, 0x9ce0, 0x0018, 0x2001, 0x1819, 0x2004, 0x9c02,
+	0x1a04, 0x3499, 0x0c30, 0x080c, 0xbde5, 0x012e, 0x0904, 0x3499,
+	0x0804, 0x3467, 0x900e, 0x2001, 0x0005, 0x080c, 0x6e4b, 0x0126,
+	0x2091, 0x8000, 0x080c, 0xc4c0, 0x080c, 0x6c02, 0x012e, 0x0804,
+	0x3467, 0x00a6, 0x2950, 0xb19c, 0x080c, 0x64fc, 0x1904, 0x36e1,
+	0xb6a8, 0x9682, 0x4000, 0x16e8, 0xb4a0, 0xb5a4, 0x080c, 0x6681,
+	0x080c, 0x6650, 0x1520, 0x2061, 0x1cd0, 0x0126, 0x2091, 0x8000,
 	0x6000, 0x9086, 0x0000, 0x0148, 0x6014, 0x904d, 0x0130, 0xa870,
-	0x9406, 0x1118, 0xa874, 0x9506, 0x0150, 0x012e, 0x9ce0, 0x000c,
-	0x2001, 0x1819, 0x2004, 0x9c02, 0x1a04, 0x33fd, 0x0c30, 0x080c,
-	0xb5c5, 0x012e, 0x0904, 0x33fd, 0x0804, 0x33cb, 0x900e, 0x2001,
-	0x0005, 0x080c, 0x6d45, 0x0126, 0x2091, 0x8000, 0x080c, 0xbc45,
-	0x080c, 0x6b1d, 0x012e, 0x0804, 0x33cb, 0x00a6, 0x2950, 0xb19c,
-	0x080c, 0x6411, 0x1904, 0x3645, 0xb6a8, 0x9682, 0x4000, 0x16e8,
-	0xb4a0, 0xb5a4, 0x080c, 0x6579, 0x080c, 0x6548, 0x1520, 0x2061,
-	0x1cc8, 0x0126, 0x2091, 0x8000, 0x6000, 0x9086, 0x0000, 0x0148,
-	0x6014, 0x904d, 0x0130, 0xa870, 0x9406, 0x1118, 0xa874, 0x9506,
-	0x0158, 0x012e, 0x9ce0, 0x000c, 0x2001, 0x1819, 0x2004, 0x9c02,
-	0x2009, 0x000d, 0x12b0, 0x0c28, 0x080c, 0xb5c5, 0x012e, 0x2009,
-	0x0003, 0x0178, 0x00e0, 0x900e, 0x2001, 0x0005, 0x080c, 0x6d45,
-	0x0126, 0x2091, 0x8000, 0x080c, 0xbc45, 0x080c, 0x6b11, 0x012e,
-	0x0070, 0xb09b, 0x4005, 0xb19e, 0x0010, 0xb09b, 0x4006, 0x900e,
-	0x9085, 0x0001, 0x2001, 0x0030, 0x2a48, 0x00ae, 0x0005, 0xb09b,
-	0x4000, 0x9006, 0x918d, 0x0001, 0x2008, 0x2a48, 0x00ae, 0x0005,
-	0x81ff, 0x1904, 0x33fd, 0x080c, 0x4a78, 0x0904, 0x3400, 0x080c,
-	0x64bb, 0x0904, 0x33fd, 0x080c, 0x6583, 0x0904, 0x33fd, 0x0804,
-	0x4405, 0x81ff, 0x1904, 0x33fd, 0x080c, 0x4a90, 0x0904, 0x3400,
-	0x080c, 0x660e, 0x0904, 0x33fd, 0x2019, 0x0005, 0x79a8, 0x080c,
-	0x6592, 0x0904, 0x33fd, 0x7888, 0x908a, 0x1000, 0x1a04, 0x3400,
-	0x8003, 0x800b, 0x810b, 0x9108, 0x080c, 0x836c, 0x79a8, 0xd184,
-	0x1904, 0x33cb, 0x0804, 0x4405, 0x0126, 0x2091, 0x8000, 0x81ff,
-	0x0118, 0x2009, 0x0001, 0x0450, 0x2029, 0x07ff, 0x6458, 0x2400,
-	0x9506, 0x01f8, 0x2508, 0x080c, 0x6411, 0x11d8, 0x080c, 0x660e,
-	0x1128, 0x2009, 0x0002, 0x62bc, 0x2518, 0x00c0, 0x2019, 0x0004,
-	0x900e, 0x080c, 0x6592, 0x1118, 0x2009, 0x0006, 0x0078, 0x7884,
-	0x908a, 0x1000, 0x1270, 0x8003, 0x800b, 0x810b, 0x9108, 0x080c,
-	0x836c, 0x8529, 0x1ae0, 0x012e, 0x0804, 0x33cb, 0x012e, 0x0804,
-	0x33fd, 0x012e, 0x0804, 0x3400, 0x080c, 0x4a78, 0x0904, 0x3400,
-	0x080c, 0x64bb, 0x0904, 0x33fd, 0xbaa0, 0x2019, 0x0005, 0x00c6,
-	0x9066, 0x080c, 0x8843, 0x0076, 0x903e, 0x080c, 0x8748, 0x900e,
-	0x080c, 0xce89, 0x007e, 0x00ce, 0x080c, 0x6579, 0x0804, 0x33cb,
-	0x080c, 0x4a78, 0x0904, 0x3400, 0x080c, 0x6579, 0x2208, 0x0804,
-	0x33cb, 0x0156, 0x00d6, 0x00e6, 0x2069, 0x1911, 0x6810, 0x6914,
-	0x910a, 0x1208, 0x900e, 0x6816, 0x9016, 0x901e, 0x20a9, 0x007e,
-	0x2069, 0x1000, 0x2d04, 0x905d, 0x0118, 0xb84c, 0x0059, 0x9210,
-	0x8d68, 0x1f04, 0x36fa, 0x2300, 0x9218, 0x00ee, 0x00de, 0x015e,
-	0x0804, 0x33cb, 0x0086, 0x9045, 0x0140, 0x0016, 0x900e, 0x8108,
-	0xa000, 0x9045, 0x1de0, 0x2100, 0x001e, 0x008e, 0x0005, 0x2069,
-	0x1911, 0x6910, 0x62b8, 0x0804, 0x33cb, 0x81ff, 0x0120, 0x2009,
-	0x0001, 0x0804, 0x33fd, 0x0126, 0x2091, 0x8000, 0x080c, 0x55bb,
-	0x0128, 0x2009, 0x0007, 0x012e, 0x0804, 0x33fd, 0x012e, 0x6158,
-	0x9190, 0x31cc, 0x2215, 0x9294, 0x00ff, 0x6378, 0x83ff, 0x0108,
-	0x627c, 0x67d8, 0x97c4, 0x000a, 0x98c6, 0x000a, 0x1118, 0x2031,
-	0x0001, 0x00e8, 0x97c4, 0x0022, 0x98c6, 0x0022, 0x1118, 0x2031,
-	0x0003, 0x00a8, 0x97c4, 0x0012, 0x98c6, 0x0012, 0x1118, 0x2031,
-	0x0002, 0x0068, 0x080c, 0x72e5, 0x1118, 0x2031, 0x0004, 0x0038,
-	0xd79c, 0x0120, 0x2009, 0x0005, 0x0804, 0x33fd, 0x9036, 0x7e9a,
-	0x7f9e, 0x0804, 0x33cb, 0x6148, 0x624c, 0x2019, 0x1963, 0x231c,
-	0x2001, 0x1964, 0x2004, 0x789a, 0x0804, 0x33cb, 0x0126, 0x2091,
-	0x8000, 0x6138, 0x623c, 0x6340, 0x012e, 0x0804, 0x33cb, 0x080c,
-	0x4a90, 0x0904, 0x3400, 0xba44, 0xbb38, 0x0804, 0x33cb, 0x080c,
-	0x0dc4, 0x080c, 0x4a90, 0x2110, 0x0904, 0x3400, 0xb804, 0x908c,
-	0x00ff, 0x918e, 0x0006, 0x0140, 0x9084, 0xff00, 0x9086, 0x0600,
-	0x2009, 0x0009, 0x1904, 0x33fd, 0x0126, 0x2091, 0x8000, 0x2019,
-	0x0005, 0x00c6, 0x9066, 0x080c, 0x9b81, 0x080c, 0x8843, 0x0076,
-	0x903e, 0x080c, 0x8748, 0x900e, 0x080c, 0xce89, 0x007e, 0x00ce,
-	0xb807, 0x0407, 0x012e, 0x0804, 0x33cb, 0x6148, 0x624c, 0x7884,
-	0x604a, 0x7b88, 0x634e, 0x2069, 0x185e, 0x831f, 0x9305, 0x6816,
-	0x788c, 0x2069, 0x1963, 0x2d1c, 0x206a, 0x7e98, 0x9682, 0x0014,
-	0x1210, 0x2031, 0x07d0, 0x2069, 0x1964, 0x2d04, 0x266a, 0x789a,
-	0x0804, 0x33cb, 0x0126, 0x2091, 0x8000, 0x6138, 0x7884, 0x603a,
-	0x910e, 0xd1b4, 0x0118, 0x080c, 0x0ecd, 0x7884, 0xd094, 0x0148,
-	0x00e6, 0x2071, 0x19d7, 0x79b4, 0x9192, 0x07d0, 0x1208, 0x713e,
-	0x00ee, 0xd0c4, 0x01a8, 0x00d6, 0x78a8, 0x2009, 0x1979, 0x200a,
-	0x78ac, 0x2011, 0x197a, 0x2012, 0x2069, 0x0100, 0x6838, 0x9086,
-	0x0007, 0x1118, 0x2214, 0x6a5a, 0x0010, 0x210c, 0x695a, 0x00de,
-	0x7884, 0xd0b4, 0x0120, 0x3b00, 0x9084, 0xff3f, 0x20d8, 0x7888,
-	0x603e, 0x7888, 0xd0ec, 0x0178, 0x6034, 0xc08d, 0x6036, 0x2001,
-	0x0050, 0x6072, 0x6076, 0x6052, 0x6067, 0x2088, 0x00c6, 0x2061,
-	0x1aa0, 0x2062, 0x00ce, 0x2011, 0x0114, 0x220c, 0x7888, 0xd08c,
-	0x0118, 0x918d, 0x0080, 0x0010, 0x918c, 0xff7f, 0x2112, 0x788c,
-	0x6042, 0x6040, 0xd0c4, 0x0120, 0x2009, 0x030f, 0x200b, 0x31cc,
-	0xd0cc, 0x0120, 0x78b0, 0x2011, 0x0114, 0x2012, 0x012e, 0x0804,
-	0x33cb, 0x00f6, 0x2079, 0x1800, 0x7a38, 0xa89c, 0x9084, 0xfebf,
-	0x9215, 0xa8a0, 0x9084, 0xfebf, 0x8002, 0x9214, 0x7838, 0x9084,
-	0x0140, 0x9215, 0x7a3a, 0xa89b, 0x4000, 0x900e, 0x9085, 0x0001,
-	0x2001, 0x0000, 0x00fe, 0x0005, 0x7898, 0x9005, 0x01a8, 0x7888,
-	0x9025, 0x0904, 0x3400, 0x788c, 0x902d, 0x0904, 0x3400, 0x900e,
-	0x080c, 0x6411, 0x1120, 0xba44, 0xbb38, 0xbc46, 0xbd3a, 0x9186,
-	0x07ff, 0x0190, 0x8108, 0x0ca0, 0x080c, 0x4a90, 0x0904, 0x3400,
-	0x7888, 0x900d, 0x0904, 0x3400, 0x788c, 0x9005, 0x0904, 0x3400,
-	0xba44, 0xb946, 0xbb38, 0xb83a, 0x0804, 0x33cb, 0x2011, 0xbc09,
-	0x0010, 0x2011, 0xbc05, 0x080c, 0x55bb, 0x1904, 0x33fd, 0x00c6,
-	0x2061, 0x0100, 0x7984, 0x9186, 0x00ff, 0x1130, 0x2001, 0x1817,
-	0x2004, 0x9085, 0xff00, 0x0088, 0x9182, 0x007f, 0x16e0, 0x9188,
-	0x31cc, 0x210d, 0x918c, 0x00ff, 0x2001, 0x1817, 0x2004, 0x0026,
-	0x9116, 0x002e, 0x0580, 0x810f, 0x9105, 0x0126, 0x2091, 0x8000,
-	0x0006, 0x080c, 0x9ec2, 0x000e, 0x0510, 0x602e, 0x620a, 0x7984,
-	0x00b6, 0x080c, 0x63c7, 0x2b08, 0x00be, 0x1500, 0x6112, 0x6023,
-	0x0001, 0x080c, 0x4a61, 0x01d0, 0x9006, 0xa86a, 0x7007, 0x0003,
-	0xa832, 0xa86c, 0xc0fd, 0xa86e, 0x701f, 0x38d1, 0x2900, 0x6016,
-	0x2009, 0x0032, 0x080c, 0x9f88, 0x012e, 0x00ce, 0x0005, 0x012e,
-	0x00ce, 0x0804, 0x33fd, 0x00ce, 0x0804, 0x3400, 0x080c, 0x9f18,
-	0x0cb0, 0xa830, 0x9086, 0x0100, 0x0904, 0x33fd, 0x0804, 0x33cb,
-	0x2061, 0x1a4f, 0x0126, 0x2091, 0x8000, 0x6000, 0xd084, 0x0170,
-	0x6104, 0x6208, 0x2061, 0x1800, 0x6350, 0x6070, 0x789a, 0x60bc,
-	0x789e, 0x60b8, 0x78aa, 0x012e, 0x0804, 0x33cb, 0x900e, 0x2110,
-	0x0c88, 0x81ff, 0x1904, 0x33fd, 0x080c, 0x72e5, 0x0904, 0x33fd,
-	0x0126, 0x2091, 0x8000, 0x6250, 0x6070, 0x9202, 0x0248, 0x9085,
-	0x0001, 0x080c, 0x2708, 0x080c, 0x57d9, 0x012e, 0x0804, 0x33cb,
-	0x012e, 0x0804, 0x3400, 0x0006, 0x0016, 0x00c6, 0x00e6, 0x2001,
-	0x1986, 0x2070, 0x2061, 0x185e, 0x6008, 0x2072, 0x900e, 0x2011,
-	0x1400, 0x080c, 0x854b, 0x7206, 0x00ee, 0x00ce, 0x001e, 0x000e,
-	0x0005, 0x0126, 0x2091, 0x8000, 0x81ff, 0x0128, 0x012e, 0x2021,
-	0x400b, 0x0804, 0x33cd, 0x7884, 0xd0fc, 0x0158, 0x2001, 0x002a,
-	0x2004, 0x9005, 0x0180, 0x9082, 0x00e1, 0x0298, 0x012e, 0x0804,
-	0x3400, 0x2001, 0x002a, 0x2004, 0x9005, 0x0128, 0x2069, 0x185e,
-	0x6908, 0x9102, 0x1230, 0x012e, 0x0804, 0x3400, 0x012e, 0x0804,
-	0x33fd, 0x080c, 0x9e82, 0x0dd0, 0x7884, 0xd0fc, 0x0904, 0x39a0,
-	0x00c6, 0x080c, 0x4a61, 0x00ce, 0x0d88, 0xa86b, 0x0000, 0x7884,
-	0xa80a, 0x7898, 0xa80e, 0x789c, 0xa812, 0x2001, 0x002e, 0x2004,
-	0xa81a, 0x2001, 0x002f, 0x2004, 0xa81e, 0x2001, 0x0030, 0x2004,
-	0xa822, 0x2001, 0x0031, 0x2004, 0xa826, 0x2001, 0x0034, 0x2004,
-	0xa82a, 0x2001, 0x0035, 0x2004, 0xa82e, 0x2001, 0x002a, 0x2004,
-	0x9080, 0x0003, 0x9084, 0x00fc, 0x8004, 0xa816, 0x080c, 0x3b26,
-	0x0928, 0x7014, 0x2048, 0xad2c, 0xac28, 0xab1c, 0xaa18, 0xa930,
-	0xa808, 0xd0b4, 0x1120, 0x2029, 0x0000, 0x2021, 0x0000, 0x8906,
+	0x9406, 0x1118, 0xa874, 0x9506, 0x0158, 0x012e, 0x9ce0, 0x0018,
+	0x2001, 0x1819, 0x2004, 0x9c02, 0x2009, 0x000d, 0x12b0, 0x0c28,
+	0x080c, 0xbde5, 0x012e, 0x2009, 0x0003, 0x0178, 0x00e0, 0x900e,
+	0x2001, 0x0005, 0x080c, 0x6e4b, 0x0126, 0x2091, 0x8000, 0x080c,
+	0xc4c0, 0x080c, 0x6bf5, 0x012e, 0x0070, 0xb09b, 0x4005, 0xb19e,
+	0x0010, 0xb09b, 0x4006, 0x900e, 0x9085, 0x0001, 0x2001, 0x0030,
+	0x2a48, 0x00ae, 0x0005, 0xb09b, 0x4000, 0x9006, 0x918d, 0x0001,
+	0x2008, 0x2a48, 0x00ae, 0x0005, 0x81ff, 0x1904, 0x3499, 0x080c,
+	0x4b28, 0x0904, 0x349c, 0x080c, 0x65c3, 0x0904, 0x3499, 0x080c,
+	0x668b, 0x0904, 0x3499, 0x0804, 0x44a8, 0x81ff, 0x1904, 0x3499,
+	0x080c, 0x4b40, 0x0904, 0x349c, 0x080c, 0x6716, 0x0904, 0x3499,
+	0x2019, 0x0005, 0x79a8, 0x080c, 0x669a, 0x0904, 0x3499, 0x7888,
+	0x908a, 0x1000, 0x1a04, 0x349c, 0x8003, 0x800b, 0x810b, 0x9108,
+	0x080c, 0x84d0, 0x79a8, 0xd184, 0x1904, 0x3467, 0x0804, 0x44a8,
+	0x0126, 0x2091, 0x8000, 0x81ff, 0x0118, 0x2009, 0x0001, 0x0450,
+	0x2029, 0x07ff, 0x6458, 0x2400, 0x9506, 0x01f8, 0x2508, 0x080c,
+	0x64fc, 0x11d8, 0x080c, 0x6716, 0x1128, 0x2009, 0x0002, 0x62bc,
+	0x2518, 0x00c0, 0x2019, 0x0004, 0x900e, 0x080c, 0x669a, 0x1118,
+	0x2009, 0x0006, 0x0078, 0x7884, 0x908a, 0x1000, 0x1270, 0x8003,
+	0x800b, 0x810b, 0x9108, 0x080c, 0x84d0, 0x8529, 0x1ae0, 0x012e,
+	0x0804, 0x3467, 0x012e, 0x0804, 0x3499, 0x012e, 0x0804, 0x349c,
+	0x080c, 0x4b28, 0x0904, 0x349c, 0x080c, 0x65c3, 0x0904, 0x3499,
+	0xbaa0, 0x2019, 0x0005, 0x00c6, 0x9066, 0x080c, 0x8a2b, 0x0076,
+	0x903e, 0x080c, 0x8919, 0x900e, 0x080c, 0xda37, 0x007e, 0x00ce,
+	0x080c, 0x6681, 0x0804, 0x3467, 0x080c, 0x4b28, 0x0904, 0x349c,
+	0x080c, 0x6681, 0x2208, 0x0804, 0x3467, 0x0156, 0x00d6, 0x00e6,
+	0x2069, 0x1911, 0x6810, 0x6914, 0x910a, 0x1208, 0x900e, 0x6816,
+	0x9016, 0x901e, 0x20a9, 0x007e, 0x2069, 0x1000, 0x2d04, 0x905d,
+	0x0118, 0xb84c, 0x0059, 0x9210, 0x8d68, 0x1f04, 0x3796, 0x2300,
+	0x9218, 0x00ee, 0x00de, 0x015e, 0x0804, 0x3467, 0x0086, 0x9045,
+	0x0140, 0x0016, 0x900e, 0x8108, 0xa000, 0x9045, 0x1de0, 0x2100,
+	0x001e, 0x008e, 0x0005, 0x2069, 0x1911, 0x6910, 0x62b8, 0x0804,
+	0x3467, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x3499, 0x0126,
+	0x2091, 0x8000, 0x080c, 0x5678, 0x0128, 0x2009, 0x0007, 0x012e,
+	0x0804, 0x3499, 0x012e, 0x6158, 0x9190, 0x3268, 0x2215, 0x9294,
+	0x00ff, 0x6378, 0x83ff, 0x0108, 0x627c, 0x67d8, 0x97c4, 0x000a,
+	0x98c6, 0x000a, 0x1118, 0x2031, 0x0001, 0x00e8, 0x97c4, 0x0022,
+	0x98c6, 0x0022, 0x1118, 0x2031, 0x0003, 0x00a8, 0x97c4, 0x0012,
+	0x98c6, 0x0012, 0x1118, 0x2031, 0x0002, 0x0068, 0x080c, 0x7351,
+	0x1118, 0x2031, 0x0004, 0x0038, 0xd79c, 0x0120, 0x2009, 0x0005,
+	0x0804, 0x3499, 0x9036, 0x7e9a, 0x7f9e, 0x0804, 0x3467, 0x6148,
+	0x624c, 0x2019, 0x1962, 0x231c, 0x2001, 0x1963, 0x2004, 0x789a,
+	0x0804, 0x3467, 0x0126, 0x2091, 0x8000, 0x6138, 0x623c, 0x6340,
+	0x012e, 0x0804, 0x3467, 0x080c, 0x4b40, 0x0904, 0x349c, 0xba44,
+	0xbb38, 0x0804, 0x3467, 0x080c, 0x0dc3, 0x080c, 0x4b40, 0x2110,
+	0x0904, 0x349c, 0xb804, 0x908c, 0x00ff, 0x918e, 0x0006, 0x0140,
+	0x9084, 0xff00, 0x9086, 0x0600, 0x2009, 0x0009, 0x1904, 0x3499,
+	0x0126, 0x2091, 0x8000, 0x2019, 0x0005, 0x00c6, 0x9066, 0x080c,
+	0x9e54, 0x080c, 0x8a2b, 0x0076, 0x903e, 0x080c, 0x8919, 0x900e,
+	0x080c, 0xda37, 0x007e, 0x00ce, 0xb807, 0x0407, 0x012e, 0x0804,
+	0x3467, 0x6148, 0x624c, 0x7884, 0x604a, 0x7b88, 0x634e, 0x2069,
+	0x185e, 0x831f, 0x9305, 0x6816, 0x788c, 0x2069, 0x1962, 0x2d1c,
+	0x206a, 0x7e98, 0x9682, 0x0014, 0x1210, 0x2031, 0x07d0, 0x2069,
+	0x1963, 0x2d04, 0x266a, 0x789a, 0x0804, 0x3467, 0x0126, 0x2091,
+	0x8000, 0x6138, 0x7884, 0x603a, 0x910e, 0xd1b4, 0x190c, 0x0ebd,
+	0xd094, 0x0148, 0x00e6, 0x2071, 0x19d7, 0x79b4, 0x9192, 0x07d0,
+	0x1208, 0x713e, 0x00ee, 0xd0c4, 0x01a8, 0x00d6, 0x78a8, 0x2009,
+	0x1979, 0x200a, 0x78ac, 0x2011, 0x197a, 0x2012, 0x2069, 0x0100,
+	0x6838, 0x9086, 0x0007, 0x1118, 0x2214, 0x6a5a, 0x0010, 0x210c,
+	0x695a, 0x00de, 0x7888, 0xd0ec, 0x0178, 0x6034, 0xc08d, 0x6036,
+	0x2001, 0x0050, 0x6072, 0x6076, 0x6052, 0x6067, 0x2450, 0x00c6,
+	0x2061, 0x1aac, 0x2062, 0x00ce, 0x2011, 0x0114, 0x220c, 0x7888,
+	0xd08c, 0x0118, 0x918d, 0x0080, 0x0010, 0x918c, 0xff7f, 0x2112,
+	0x603c, 0x7988, 0x613e, 0x6140, 0x910d, 0x788c, 0x6042, 0x7a88,
+	0x9294, 0x1000, 0x9205, 0x910e, 0xd1e4, 0x190c, 0x0ed3, 0x6040,
+	0xd0c4, 0x0120, 0x2009, 0x030f, 0x200b, 0x3268, 0xd0cc, 0x0120,
+	0x78b0, 0x2011, 0x0114, 0x2012, 0x012e, 0x0804, 0x3467, 0x00f6,
+	0x2079, 0x1800, 0x7a38, 0xa89c, 0x9084, 0xfebf, 0x9215, 0xa8a0,
+	0x9084, 0xfebf, 0x8002, 0x9214, 0x7838, 0x9084, 0x0140, 0x9215,
+	0x7a3a, 0xa89b, 0x4000, 0x900e, 0x9085, 0x0001, 0x2001, 0x0000,
+	0x00fe, 0x0005, 0x7898, 0x9005, 0x01a8, 0x7888, 0x9025, 0x0904,
+	0x349c, 0x788c, 0x902d, 0x0904, 0x349c, 0x900e, 0x080c, 0x64fc,
+	0x1120, 0xba44, 0xbb38, 0xbc46, 0xbd3a, 0x9186, 0x07ff, 0x0190,
+	0x8108, 0x0ca0, 0x080c, 0x4b40, 0x0904, 0x349c, 0x7888, 0x900d,
+	0x0904, 0x349c, 0x788c, 0x9005, 0x0904, 0x349c, 0xba44, 0xb946,
+	0xbb38, 0xb83a, 0x0804, 0x3467, 0x2011, 0xbc09, 0x0010, 0x2011,
+	0xbc05, 0x080c, 0x5678, 0x1904, 0x3499, 0x00c6, 0x2061, 0x0100,
+	0x7984, 0x9186, 0x00ff, 0x1130, 0x2001, 0x1817, 0x2004, 0x9085,
+	0xff00, 0x0088, 0x9182, 0x007f, 0x16e0, 0x9188, 0x3268, 0x210d,
+	0x918c, 0x00ff, 0x2001, 0x1817, 0x2004, 0x0026, 0x9116, 0x002e,
+	0x0580, 0x810f, 0x9105, 0x0126, 0x2091, 0x8000, 0x0006, 0x080c,
+	0xa347, 0x000e, 0x0510, 0x602e, 0x620a, 0x7984, 0x00b6, 0x080c,
+	0x649d, 0x2b08, 0x00be, 0x1500, 0x6112, 0x6023, 0x0001, 0x080c,
+	0x4b11, 0x01d0, 0x9006, 0xa86a, 0x7007, 0x0003, 0xa832, 0xa86c,
+	0xc0fd, 0xa86e, 0x701f, 0x396f, 0x2900, 0x6016, 0x2009, 0x0032,
+	0x080c, 0xa419, 0x012e, 0x00ce, 0x0005, 0x012e, 0x00ce, 0x0804,
+	0x3499, 0x00ce, 0x0804, 0x349c, 0x080c, 0xa39d, 0x0cb0, 0xa830,
+	0x9086, 0x0100, 0x0904, 0x3499, 0x0804, 0x3467, 0x2061, 0x1a4f,
+	0x0126, 0x2091, 0x8000, 0x6000, 0xd084, 0x0170, 0x6104, 0x6208,
+	0x2061, 0x1800, 0x6350, 0x6070, 0x789a, 0x60bc, 0x789e, 0x60b8,
+	0x78aa, 0x012e, 0x0804, 0x3467, 0x900e, 0x2110, 0x0c88, 0x81ff,
+	0x1904, 0x3499, 0x080c, 0x7351, 0x0904, 0x3499, 0x0126, 0x2091,
+	0x8000, 0x6250, 0x6070, 0x9202, 0x0248, 0x9085, 0x0001, 0x080c,
+	0x2771, 0x080c, 0x5896, 0x012e, 0x0804, 0x3467, 0x012e, 0x0804,
+	0x349c, 0x0006, 0x0016, 0x00c6, 0x00e6, 0x2001, 0x1986, 0x2070,
+	0x2061, 0x185e, 0x6008, 0x2072, 0x900e, 0x2011, 0x1400, 0x080c,
+	0x871c, 0x7206, 0x00ee, 0x00ce, 0x001e, 0x000e, 0x0005, 0x0126,
+	0x2091, 0x8000, 0x81ff, 0x0128, 0x012e, 0x2021, 0x400b, 0x0804,
+	0x3469, 0x7884, 0xd0fc, 0x0158, 0x2001, 0x002a, 0x2004, 0x9005,
+	0x0180, 0x9082, 0x00e1, 0x0298, 0x012e, 0x0804, 0x349c, 0x2001,
+	0x002a, 0x2004, 0x9005, 0x0128, 0x2069, 0x185e, 0x6908, 0x9102,
+	0x1230, 0x012e, 0x0804, 0x349c, 0x012e, 0x0804, 0x3499, 0x080c,
+	0xa307, 0x0dd0, 0x7884, 0xd0fc, 0x0904, 0x3a3e, 0x00c6, 0x080c,
+	0x4b11, 0x00ce, 0x0d88, 0xa86b, 0x0000, 0x7884, 0xa80a, 0x7898,
+	0xa80e, 0x789c, 0xa812, 0x2001, 0x002e, 0x2004, 0xa81a, 0x2001,
+	0x002f, 0x2004, 0xa81e, 0x2001, 0x0030, 0x2004, 0xa822, 0x2001,
+	0x0031, 0x2004, 0xa826, 0x2001, 0x0034, 0x2004, 0xa82a, 0x2001,
+	0x0035, 0x2004, 0xa82e, 0x2001, 0x002a, 0x2004, 0x9080, 0x0003,
+	0x9084, 0x00fc, 0x8004, 0xa816, 0x080c, 0x3bc4, 0x0928, 0x7014,
+	0x2048, 0xad2c, 0xac28, 0xab1c, 0xaa18, 0xa930, 0xa808, 0xd0b4,
+	0x1120, 0x2029, 0x0000, 0x2021, 0x0000, 0x8906, 0x8006, 0x8007,
+	0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x001c, 0x080c, 0x4b56,
+	0x701f, 0x3b01, 0x7023, 0x0001, 0x012e, 0x0005, 0x0046, 0x0086,
+	0x0096, 0x00a6, 0x00b6, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x080c,
+	0x39a9, 0x2001, 0x197c, 0x2003, 0x0000, 0x2021, 0x000a, 0x2061,
+	0x0100, 0x6104, 0x0016, 0x60bb, 0x0000, 0x60bf, 0x32e1, 0x60bf,
+	0x0012, 0x080c, 0x3c33, 0x080c, 0x3bf2, 0x00f6, 0x00e6, 0x0086,
+	0x2940, 0x2071, 0x1a44, 0x2079, 0x0090, 0x00d6, 0x2069, 0x0000,
+	0x6884, 0xd0b4, 0x0140, 0x2001, 0x0035, 0x2004, 0x780e, 0x2001,
+	0x0034, 0x2004, 0x780a, 0x00de, 0x2011, 0x0001, 0x080c, 0x3fda,
+	0x008e, 0x00ee, 0x00fe, 0x080c, 0x3efc, 0x080c, 0x3e01, 0x05b8,
+	0x2001, 0x020b, 0x2004, 0x9084, 0x0140, 0x1db8, 0x080c, 0x404e,
+	0x00f6, 0x2079, 0x0300, 0x78bc, 0x00fe, 0x908c, 0x0070, 0x1560,
+	0x2071, 0x0200, 0x7037, 0x0000, 0x7050, 0x9084, 0xff00, 0x9086,
+	0x3200, 0x1510, 0x7037, 0x0001, 0x7050, 0x9084, 0xff00, 0x9086,
+	0xe100, 0x11d0, 0x7037, 0x0000, 0x7054, 0x7037, 0x0000, 0x715c,
+	0x9106, 0x1190, 0x2001, 0x181f, 0x2004, 0x9106, 0x1168, 0x00c6,
+	0x2061, 0x0100, 0x6024, 0x9084, 0x1e00, 0x00ce, 0x0138, 0x080c,
+	0x3e0b, 0x080c, 0x3bed, 0x0058, 0x080c, 0x3bed, 0x080c, 0x3f72,
+	0x080c, 0x3ef2, 0x2001, 0x020b, 0x2004, 0xd0e4, 0x0dd8, 0x2001,
+	0x032a, 0x2003, 0x0004, 0x2061, 0x0100, 0x6027, 0x0002, 0x001e,
+	0x6106, 0x2011, 0x020d, 0x2013, 0x0020, 0x60bb, 0x0000, 0x60bf,
+	0x0108, 0x60bf, 0x0012, 0x2001, 0x0004, 0x200c, 0x918c, 0xfffd,
+	0x2102, 0x080c, 0x12c4, 0x2009, 0x0028, 0x080c, 0x22fa, 0x2001,
+	0x0227, 0x200c, 0x2102, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be,
+	0x00ae, 0x009e, 0x008e, 0x004e, 0x2001, 0x197c, 0x2004, 0x9005,
+	0x1118, 0x012e, 0x0804, 0x3467, 0x012e, 0x2021, 0x400c, 0x0804,
+	0x3469, 0x0016, 0x0026, 0x0036, 0x0046, 0x0056, 0x0076, 0x0086,
+	0x0096, 0x00d6, 0x0156, 0x7014, 0x2048, 0x7020, 0x20a8, 0x8000,
+	0x7022, 0xa804, 0x9005, 0x0904, 0x3b5d, 0x2048, 0x1f04, 0x3b11,
+	0x7068, 0x2040, 0xa290, 0xa394, 0xa498, 0xa59c, 0xa930, 0xa808,
+	0xd0b4, 0x1120, 0x2029, 0x0000, 0x2021, 0x0000, 0x0096, 0x7014,
+	0x2048, 0xa868, 0x009e, 0x9086, 0x0103, 0x0170, 0x8906, 0x8006,
+	0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x001c, 0x080c,
+	0x4b56, 0x701f, 0x3b01, 0x00b0, 0x8906, 0x8006, 0x8007, 0x90bc,
+	0x003f, 0x9084, 0xffc0, 0x9080, 0x001c, 0x21a8, 0x27e0, 0x2098,
+	0x27e8, 0x20a0, 0x0006, 0x080c, 0x0f8a, 0x000e, 0x080c, 0x4b59,
+	0x701f, 0x3b01, 0x015e, 0x00de, 0x009e, 0x008e, 0x007e, 0x005e,
+	0x004e, 0x003e, 0x002e, 0x001e, 0x0005, 0x7014, 0x2048, 0xa868,
+	0x9086, 0x0103, 0x1118, 0x701f, 0x3bc2, 0x0450, 0x7014, 0x2048,
+	0xa86c, 0xc0fd, 0xa86e, 0x2009, 0x007f, 0x080c, 0x6497, 0x0110,
+	0x9006, 0x0030, 0xb813, 0x00ff, 0xb817, 0xfffd, 0x080c, 0xc693,
+	0x015e, 0x00de, 0x009e, 0x008e, 0x007e, 0x005e, 0x004e, 0x003e,
+	0x002e, 0x001e, 0x0904, 0x3499, 0x0016, 0x0026, 0x0036, 0x0046,
+	0x0056, 0x0076, 0x0086, 0x0096, 0x00d6, 0x0156, 0x701f, 0x3b94,
+	0x7007, 0x0003, 0x0804, 0x3b52, 0xa830, 0x9086, 0x0100, 0x2021,
+	0x400c, 0x0904, 0x3469, 0x0076, 0xad10, 0xac0c, 0xab24, 0xaa20,
+	0xa930, 0xa808, 0xd0b4, 0x1120, 0x2029, 0x0000, 0x2021, 0x0000,
+	0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080,
+	0x001c, 0x21a8, 0x27e0, 0x2098, 0x27e8, 0x20a0, 0x0006, 0x080c,
+	0x0f8a, 0x000e, 0x080c, 0x4b59, 0x007e, 0x701f, 0x3b01, 0x7023,
+	0x0001, 0x0005, 0x0804, 0x3467, 0x0156, 0x00c6, 0xa814, 0x908a,
+	0x001e, 0x0218, 0xa833, 0x001e, 0x0010, 0xa832, 0x0078, 0x81ff,
+	0x0168, 0x0016, 0x080c, 0x4b11, 0x001e, 0x0130, 0xa800, 0x2040,
+	0xa008, 0xa80a, 0x2100, 0x0c58, 0x9006, 0x0010, 0x9085, 0x0001,
+	0x00ce, 0x015e, 0x0005, 0x0006, 0x00f6, 0x2079, 0x0000, 0x7880,
+	0x9086, 0x0044, 0x00fe, 0x000e, 0x0005, 0x2001, 0x197c, 0x2003,
+	0x0001, 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x2061, 0x0200, 0x2001,
+	0x1987, 0x2004, 0x601a, 0x2061, 0x0100, 0x2001, 0x1986, 0x2004,
+	0x60ce, 0x6104, 0xc1ac, 0x6106, 0x080c, 0x4b11, 0xa813, 0x001a,
+	0xa817, 0x0001, 0x2900, 0xa85a, 0x2001, 0x002e, 0x2004, 0xa86a,
+	0x2001, 0x002f, 0x2004, 0xa86e, 0x2061, 0x0090, 0x2079, 0x0100,
+	0x2001, 0x1986, 0x2004, 0x6036, 0x2009, 0x0040, 0x080c, 0x22fa,
+	0x2001, 0x002a, 0x2004, 0x9084, 0xfff8, 0xa872, 0x601a, 0xa877,
+	0x0000, 0x601f, 0x0000, 0x78ca, 0x9006, 0x600a, 0x600e, 0x00ce,
+	0x00ee, 0x00fe, 0x0005, 0x00e6, 0x080c, 0x4b11, 0x2940, 0xa013,
+	0x001a, 0xa017, 0x0001, 0x2800, 0xa05a, 0x2001, 0x0030, 0x2004,
+	0xa86a, 0x2001, 0x0031, 0x2004, 0xa86e, 0x2001, 0x002a, 0x2004,
+	0x9084, 0xfff8, 0xa872, 0xa877, 0x0000, 0x2001, 0x032a, 0x2003,
+	0x0004, 0x2001, 0x0300, 0x2003, 0x0000, 0x2001, 0x020d, 0x2003,
+	0x0000, 0x2001, 0x0004, 0x200c, 0x918d, 0x0002, 0x2102, 0x00ee,
+	0x0005, 0x0126, 0x2091, 0x8000, 0x81ff, 0x0148, 0x080c, 0x2aee,
+	0x1130, 0x9006, 0x080c, 0x2a46, 0x9006, 0x080c, 0x2a29, 0x2001,
+	0x197b, 0x2003, 0x0000, 0x7884, 0x9084, 0x0007, 0x0002, 0x3c82,
+	0x3c8b, 0x3c94, 0x3c7f, 0x3c7f, 0x3c7f, 0x3c7f, 0x3c7f, 0x012e,
+	0x0804, 0x349c, 0x2009, 0x0114, 0x2104, 0x9085, 0x0800, 0x200a,
+	0x080c, 0x3e55, 0x00c0, 0x2009, 0x0114, 0x2104, 0x9085, 0x4000,
+	0x200a, 0x080c, 0x3e55, 0x0078, 0x080c, 0x7351, 0x1128, 0x012e,
+	0x2009, 0x0016, 0x0804, 0x3499, 0x81ff, 0x0128, 0x012e, 0x2021,
+	0x400b, 0x0804, 0x3469, 0x2001, 0x0141, 0x2004, 0xd0dc, 0x0db0,
+	0x0086, 0x0096, 0x00a6, 0x00b6, 0x00c6, 0x00d6, 0x00e6, 0x00f6,
+	0x080c, 0x39a9, 0x2009, 0x0101, 0x210c, 0x0016, 0x7ec8, 0x7dcc,
+	0x9006, 0x2068, 0x2060, 0x2058, 0x080c, 0x4129, 0x080c, 0x4079,
+	0x903e, 0x2720, 0x00f6, 0x00e6, 0x0086, 0x2940, 0x2071, 0x1a44,
+	0x2079, 0x0090, 0x00d6, 0x2069, 0x0000, 0x6884, 0xd0b4, 0x0120,
+	0x68d4, 0x780e, 0x68d0, 0x780a, 0x00de, 0x2011, 0x0001, 0x080c,
+	0x3fda, 0x080c, 0x2af6, 0x080c, 0x2af6, 0x080c, 0x2af6, 0x080c,
+	0x2af6, 0x080c, 0x3fda, 0x008e, 0x00ee, 0x00fe, 0x080c, 0x3efc,
+	0x2009, 0x9c40, 0x8109, 0x11b0, 0x080c, 0x3e0b, 0x2001, 0x0004,
+	0x200c, 0x918c, 0xfffd, 0x2102, 0x001e, 0x00fe, 0x00ee, 0x00de,
+	0x00ce, 0x00be, 0x00ae, 0x009e, 0x008e, 0x2009, 0x0017, 0x080c,
+	0x3499, 0x0cf8, 0x2001, 0x020b, 0x2004, 0x9084, 0x0140, 0x1d10,
+	0x00f6, 0x2079, 0x0000, 0x7884, 0x00fe, 0xd0bc, 0x0178, 0x2001,
+	0x0201, 0x200c, 0x81ff, 0x0150, 0x080c, 0x3eda, 0x2d00, 0x9c05,
+	0x9b05, 0x0120, 0x080c, 0x3e0b, 0x0804, 0x3db8, 0x080c, 0x404e,
+	0x080c, 0x3f72, 0x080c, 0x3ebd, 0x080c, 0x3ef2, 0x00f6, 0x2079,
+	0x0100, 0x7824, 0xd0ac, 0x0130, 0x8b58, 0x080c, 0x3e0b, 0x00fe,
+	0x0804, 0x3db8, 0x00fe, 0x080c, 0x3e01, 0x1150, 0x8d68, 0x2001,
+	0x0032, 0x2602, 0x2001, 0x0033, 0x2502, 0x080c, 0x3e0b, 0x0080,
+	0x87ff, 0x0138, 0x2001, 0x0201, 0x2004, 0x9005, 0x1908, 0x8739,
+	0x0038, 0x2001, 0x1a41, 0x2004, 0x9086, 0x0000, 0x1904, 0x3d08,
+	0x2001, 0x032f, 0x2003, 0x00f6, 0x8631, 0x1208, 0x8529, 0x2500,
+	0x9605, 0x0904, 0x3db8, 0x7884, 0xd0bc, 0x0128, 0x2d00, 0x9c05,
+	0x9b05, 0x1904, 0x3db8, 0xa013, 0x001a, 0x2001, 0x032a, 0x2003,
+	0x0004, 0x7884, 0xd0ac, 0x1148, 0x2001, 0x1a41, 0x2003, 0x0003,
+	0x2001, 0x032a, 0x2003, 0x0009, 0x0030, 0xa017, 0x0001, 0x78b4,
+	0x9005, 0x0108, 0xa016, 0x2800, 0xa05a, 0x2009, 0x0040, 0x080c,
+	0x22fa, 0x2900, 0xa85a, 0xa813, 0x001a, 0x7884, 0xd0a4, 0x1180,
+	0xa817, 0x0000, 0x00c6, 0x20a9, 0x0004, 0x2061, 0x0090, 0x602b,
+	0x0008, 0x2001, 0x0203, 0x2004, 0x1f04, 0x3d8f, 0x00ce, 0x0030,
+	0xa817, 0x0001, 0x78b0, 0x9005, 0x0108, 0xa816, 0x00f6, 0x00c6,
+	0x2079, 0x0100, 0x2061, 0x0090, 0x7827, 0x0002, 0x2001, 0x002a,
+	0x2004, 0x9084, 0xfff8, 0x601a, 0x0006, 0x2001, 0x002b, 0x2004,
+	0x601e, 0x78c6, 0x000e, 0x78ca, 0x00ce, 0x00fe, 0x0804, 0x3cc2,
+	0x001e, 0x00c6, 0x2001, 0x032a, 0x2003, 0x0004, 0x2061, 0x0100,
+	0x6027, 0x0002, 0x6106, 0x2011, 0x020d, 0x2013, 0x0020, 0x2001,
+	0x0004, 0x200c, 0x918c, 0xfffd, 0x2102, 0x080c, 0x12c4, 0x7884,
+	0x9084, 0x0003, 0x9086, 0x0002, 0x01a0, 0x2009, 0x0028, 0x080c,
+	0x22fa, 0x2001, 0x0227, 0x200c, 0x2102, 0x6050, 0x9084, 0xb7ef,
+	0x6052, 0x602f, 0x0000, 0x604b, 0xf7f7, 0x6043, 0x0090, 0x6043,
+	0x0010, 0x00ce, 0x2d08, 0x2c10, 0x2b18, 0x2b00, 0x9c05, 0x9d05,
+	0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, 0x00ae, 0x009e, 0x008e,
+	0x1118, 0x012e, 0x0804, 0x3467, 0x012e, 0x2021, 0x400c, 0x0804,
+	0x3469, 0x9085, 0x0001, 0x1d04, 0x3e0a, 0x2091, 0x6000, 0x8420,
+	0x9486, 0x0064, 0x0005, 0x2001, 0x0105, 0x2003, 0x0010, 0x2001,
+	0x032a, 0x2003, 0x0004, 0x2001, 0x1a41, 0x2003, 0x0000, 0x0071,
+	0x2009, 0x0048, 0x080c, 0x22fa, 0x2001, 0x0227, 0x2024, 0x2402,
+	0x2001, 0x0109, 0x2003, 0x4000, 0x9026, 0x0005, 0x00f6, 0x00e6,
+	0x2071, 0x1a44, 0x7000, 0x9086, 0x0000, 0x0520, 0x2079, 0x0090,
+	0x2009, 0x0206, 0x2104, 0x2009, 0x0203, 0x210c, 0x9106, 0x1120,
+	0x2009, 0x0040, 0x080c, 0x22fa, 0x782c, 0xd0fc, 0x0d88, 0x080c,
+	0x404e, 0x7000, 0x9086, 0x0000, 0x1d58, 0x782b, 0x0004, 0x782c,
+	0xd0ac, 0x1de8, 0x2009, 0x0040, 0x080c, 0x22fa, 0x782b, 0x0002,
+	0x7003, 0x0000, 0x00ee, 0x00fe, 0x0005, 0x00f6, 0x2079, 0x0100,
+	0x2001, 0x1817, 0x200c, 0x7932, 0x7936, 0x080c, 0x2751, 0x7850,
+	0x9084, 0xfbff, 0x9085, 0x0030, 0x7852, 0x2019, 0x01f4, 0x8319,
+	0x1df0, 0x9084, 0xffcf, 0x9085, 0x2000, 0x7852, 0x20a9, 0x0046,
+	0x1d04, 0x3e70, 0x2091, 0x6000, 0x1f04, 0x3e70, 0x7850, 0x9085,
+	0x0400, 0x9084, 0xdfff, 0x7852, 0x2001, 0x0021, 0x2004, 0x9084,
+	0x0003, 0x9086, 0x0001, 0x1120, 0x7850, 0x9084, 0xdfff, 0x7852,
+	0x784b, 0xf7f7, 0x7843, 0x0090, 0x7843, 0x0010, 0x20a9, 0x0028,
+	0xa001, 0x1f04, 0x3e90, 0x7850, 0x9085, 0x1400, 0x7852, 0x2019,
+	0x61a8, 0x7854, 0xa001, 0xa001, 0xd08c, 0x1110, 0x8319, 0x1dc8,
+	0x7827, 0x0048, 0x7850, 0x9085, 0x0400, 0x7852, 0x7843, 0x0040,
+	0x2019, 0x01f4, 0xa001, 0xa001, 0x8319, 0x1de0, 0x2001, 0x0100,
+	0x080c, 0x2bce, 0x7827, 0x0020, 0x7843, 0x0000, 0x9006, 0x080c,
+	0x2bce, 0x7827, 0x0048, 0x00fe, 0x0005, 0x7884, 0xd0ac, 0x11c8,
+	0x00f6, 0x00e6, 0x2071, 0x1a41, 0x2079, 0x0320, 0x2001, 0x0201,
+	0x2004, 0x9005, 0x0160, 0x7000, 0x9086, 0x0000, 0x1140, 0x0051,
+	0xd0bc, 0x0108, 0x8738, 0x7003, 0x0003, 0x782b, 0x0019, 0x00ee,
+	0x00fe, 0x0005, 0x00f6, 0x2079, 0x0300, 0x78bc, 0x00fe, 0x908c,
+	0x0070, 0x0178, 0x2009, 0x0032, 0x260a, 0x2009, 0x0033, 0x250a,
+	0xd0b4, 0x0108, 0x8c60, 0xd0ac, 0x0108, 0x8d68, 0xd0a4, 0x0108,
+	0x8b58, 0x0005, 0x00f6, 0x2079, 0x0200, 0x781c, 0xd084, 0x0110,
+	0x7837, 0x0050, 0x00fe, 0x0005, 0x00e6, 0x2071, 0x0100, 0x2001,
+	0x1987, 0x2004, 0x70e2, 0x080c, 0x3be3, 0x1188, 0x2001, 0x181f,
+	0x2004, 0x2009, 0x181e, 0x210c, 0x918c, 0x00ff, 0x706e, 0x716a,
+	0x7066, 0x918d, 0x3200, 0x7162, 0x7073, 0xe109, 0x0080, 0x702c,
+	0x9085, 0x0002, 0x702e, 0x2009, 0x1817, 0x210c, 0x716e, 0x7063,
+	0x0100, 0x7166, 0x719e, 0x706b, 0x0000, 0x7073, 0x0809, 0x7077,
+	0x0008, 0x7078, 0x9080, 0x0100, 0x707a, 0x7080, 0x8000, 0x7082,
+	0x7087, 0xaaaa, 0x9006, 0x708a, 0x708e, 0x707e, 0x70d6, 0x70ab,
+	0x0036, 0x70af, 0x95d5, 0x7014, 0x9084, 0x1984, 0x9085, 0x0092,
+	0x7016, 0x080c, 0x404e, 0x00f6, 0x2071, 0x1a41, 0x2079, 0x0320,
+	0x00d6, 0x2069, 0x0000, 0x6884, 0xd0b4, 0x0120, 0x689c, 0x780e,
+	0x6898, 0x780a, 0x00de, 0x080c, 0x3be3, 0x0140, 0x2001, 0x197b,
+	0x200c, 0x2003, 0x0001, 0x918e, 0x0001, 0x0120, 0x2009, 0x03e8,
+	0x8109, 0x1df0, 0x792c, 0xd1fc, 0x0110, 0x782b, 0x0004, 0x2011,
+	0x0011, 0x080c, 0x3fda, 0x2011, 0x0001, 0x080c, 0x3fda, 0x00fe,
+	0x00ee, 0x0005, 0x00f6, 0x00e6, 0x2071, 0x1a41, 0x2079, 0x0320,
+	0x792c, 0xd1fc, 0x0904, 0x3fd7, 0x782b, 0x0002, 0x9026, 0xd19c,
+	0x1904, 0x3fd3, 0x7000, 0x0002, 0x3fd7, 0x3f88, 0x3fb8, 0x3fd3,
+	0xd1bc, 0x1170, 0xd1dc, 0x1190, 0x8001, 0x7002, 0x2011, 0x0001,
+	0x080c, 0x3fda, 0x0904, 0x3fd7, 0x080c, 0x3fda, 0x0804, 0x3fd7,
+	0x00f6, 0x2079, 0x0300, 0x78bf, 0x0000, 0x00fe, 0x7810, 0x7914,
+	0x782b, 0x0004, 0x7812, 0x7916, 0x2001, 0x0201, 0x200c, 0x81ff,
+	0x0de8, 0x080c, 0x3eda, 0x2009, 0x0001, 0x00f6, 0x2079, 0x0300,
+	0x78b8, 0x00fe, 0xd0ec, 0x0110, 0x2009, 0x0011, 0x792a, 0x00f8,
+	0x8001, 0x7002, 0x9184, 0x0880, 0x1140, 0x782c, 0xd0fc, 0x1904,
+	0x3f7c, 0x2011, 0x0001, 0x00b1, 0x0090, 0xa010, 0x9092, 0x0004,
+	0x9086, 0x0016, 0x1120, 0xa000, 0xa05a, 0x2011, 0x0032, 0xa212,
+	0xd1dc, 0x1960, 0x0828, 0x782b, 0x0004, 0x7003, 0x0000, 0x00ee,
+	0x00fe, 0x0005, 0xa014, 0x9005, 0x0550, 0x8001, 0x0036, 0x0096,
+	0xa016, 0xa058, 0x2048, 0xa010, 0x2009, 0x0032, 0x911a, 0x831c,
+	0x831c, 0x938a, 0x0007, 0x1a0c, 0x0dc3, 0x9398, 0x4008, 0x231d,
+	0x083f, 0x9080, 0x0004, 0x7a2a, 0x7100, 0x8108, 0x7102, 0x009e,
+	0x003e, 0x908a, 0x0036, 0x1140, 0x0096, 0xa058, 0x2048, 0xa804,
+	0xa05a, 0x2001, 0x001a, 0x009e, 0xa012, 0x9085, 0x0001, 0x0005,
+	0x4045, 0x403c, 0x4033, 0x402a, 0x4021, 0x4018, 0x400f, 0xa968,
+	0x7902, 0xa96c, 0x7906, 0xa970, 0x7912, 0xa974, 0x7916, 0x0005,
+	0xa978, 0x7902, 0xa97c, 0x7906, 0xa980, 0x7912, 0xa984, 0x7916,
+	0x0005, 0xa988, 0x7902, 0xa98c, 0x7906, 0xa990, 0x7912, 0xa994,
+	0x7916, 0x0005, 0xa998, 0x7902, 0xa99c, 0x7906, 0xa9a0, 0x7912,
+	0xa9a4, 0x7916, 0x0005, 0xa9a8, 0x7902, 0xa9ac, 0x7906, 0xa9b0,
+	0x7912, 0xa9b4, 0x7916, 0x0005, 0xa9b8, 0x7902, 0xa9bc, 0x7906,
+	0xa9c0, 0x7912, 0xa9c4, 0x7916, 0x0005, 0xa9c8, 0x7902, 0xa9cc,
+	0x7906, 0xa9d0, 0x7912, 0xa9d4, 0x7916, 0x0005, 0x00f6, 0x00e6,
+	0x0086, 0x2071, 0x1a44, 0x2079, 0x0090, 0x792c, 0xd1fc, 0x01e8,
+	0x782b, 0x0002, 0x2940, 0x9026, 0x7000, 0x0002, 0x4075, 0x4061,
+	0x406c, 0x8001, 0x7002, 0xd19c, 0x1180, 0x2011, 0x0001, 0x080c,
+	0x3fda, 0x190c, 0x3fda, 0x0048, 0x8001, 0x7002, 0x782c, 0xd0fc,
+	0x1d38, 0x2011, 0x0001, 0x080c, 0x3fda, 0x008e, 0x00ee, 0x00fe,
+	0x0005, 0x00f6, 0x00e6, 0x00c6, 0x0086, 0x2061, 0x0200, 0x2001,
+	0x1987, 0x2004, 0x601a, 0x2061, 0x0100, 0x2001, 0x1986, 0x2004,
+	0x60ce, 0x6104, 0xc1ac, 0x6106, 0x2001, 0x002c, 0x2004, 0x9005,
+	0x0520, 0x2038, 0x2001, 0x002e, 0x2024, 0x2001, 0x002f, 0x201c,
+	0x080c, 0x4b11, 0xa813, 0x001a, 0xaf16, 0x2900, 0xa85a, 0x978a,
+	0x0007, 0x0220, 0x2138, 0x2009, 0x0007, 0x0010, 0x2708, 0x903e,
+	0x0096, 0xa858, 0x2048, 0xa85c, 0x9080, 0x001a, 0x009e, 0x080c,
+	0x40f1, 0x1d68, 0x2900, 0xa85a, 0x00d0, 0x080c, 0x4b11, 0xa813,
+	0x001a, 0xa817, 0x0001, 0x2900, 0xa85a, 0x2001, 0x002e, 0x2004,
+	0xa86a, 0x2001, 0x002f, 0x2004, 0xa86e, 0x2001, 0x002a, 0x2004,
+	0x9084, 0xfff8, 0xa872, 0x2001, 0x002b, 0x2004, 0xa876, 0x2061,
+	0x0090, 0x2079, 0x0100, 0x2001, 0x1986, 0x2004, 0x6036, 0x2009,
+	0x0040, 0x080c, 0x22fa, 0x2001, 0x002a, 0x2004, 0x9084, 0xfff8,
+	0x601a, 0x0006, 0x2001, 0x002b, 0x2004, 0x601e, 0x78c6, 0x000e,
+	0x78ca, 0x9006, 0x600a, 0x600e, 0x008e, 0x00ce, 0x00ee, 0x00fe,
+	0x0005, 0x00e6, 0x2071, 0x0080, 0xaa60, 0x22e8, 0x20a0, 0x20e1,
+	0x0000, 0x2099, 0x0088, 0x702b, 0x0026, 0x7402, 0x7306, 0x9006,
+	0x700a, 0x700e, 0x810b, 0x810b, 0x21a8, 0x810b, 0x7112, 0x702b,
+	0x0041, 0x702c, 0xd0fc, 0x0de8, 0x702b, 0x0002, 0x702b, 0x0040,
+	0x4005, 0x7400, 0x7304, 0x87ff, 0x0190, 0x0086, 0x0096, 0x2940,
+	0x0086, 0x080c, 0x4b11, 0x008e, 0xa058, 0x00a6, 0x2050, 0x2900,
+	0xb006, 0xa05a, 0x00ae, 0x009e, 0x008e, 0x9085, 0x0001, 0x00ee,
+	0x0005, 0x00e6, 0x2001, 0x002d, 0x2004, 0x9005, 0x0528, 0x2038,
+	0x2001, 0x0030, 0x2024, 0x2001, 0x0031, 0x201c, 0x080c, 0x4b11,
+	0x2940, 0xa813, 0x001a, 0xaf16, 0x2900, 0xa85a, 0x978a, 0x0007,
+	0x0220, 0x2138, 0x2009, 0x0007, 0x0010, 0x2708, 0x903e, 0x0096,
+	0xa858, 0x2048, 0xa85c, 0x9080, 0x001a, 0x009e, 0x080c, 0x40f1,
+	0x1d68, 0x2900, 0xa85a, 0x00d8, 0x080c, 0x4b11, 0x2940, 0xa013,
+	0x001a, 0xa017, 0x0001, 0x2800, 0xa05a, 0x2001, 0x0030, 0x2004,
+	0xa06a, 0x2001, 0x0031, 0x2004, 0xa06e, 0x2001, 0x002a, 0x2004,
+	0x9084, 0xfff8, 0xa072, 0x2001, 0x002b, 0x2004, 0xa076, 0x2001,
+	0x032a, 0x2003, 0x0004, 0x7884, 0xd0ac, 0x1180, 0x2001, 0x0101,
+	0x200c, 0x918d, 0x0200, 0x2102, 0xa017, 0x0000, 0x2001, 0x1a41,
+	0x2003, 0x0003, 0x2001, 0x032a, 0x2003, 0x0009, 0x2001, 0x0300,
+	0x2003, 0x0000, 0x2001, 0x020d, 0x2003, 0x0000, 0x2001, 0x0004,
+	0x200c, 0x918d, 0x0002, 0x2102, 0x00ee, 0x0005, 0x0126, 0x2091,
+	0x8000, 0x20a9, 0x001e, 0x20a1, 0x1840, 0x20e9, 0x0001, 0x9006,
+	0x4004, 0x2009, 0x013c, 0x200a, 0x012e, 0x7880, 0x9086, 0x0052,
+	0x0108, 0x0005, 0x0804, 0x3467, 0x7d98, 0x7c9c, 0x0804, 0x356b,
+	0x080c, 0x7351, 0x190c, 0x5f78, 0x2069, 0x185e, 0x2d00, 0x2009,
+	0x0030, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x2039, 0x0001, 0x080c,
+	0x4b56, 0x701f, 0x41c4, 0x0005, 0x080c, 0x5673, 0x1130, 0x3b00,
+	0x3a08, 0xc194, 0xc095, 0x20d8, 0x21d0, 0x2069, 0x185e, 0x6800,
+	0x9005, 0x0904, 0x349c, 0x2001, 0x180d, 0x2004, 0xd08c, 0x6804,
+	0x0118, 0xc0a4, 0xc0ac, 0x6806, 0xd0ac, 0x0118, 0xd0a4, 0x0904,
+	0x349c, 0xd094, 0x00c6, 0x2061, 0x0100, 0x6104, 0x0138, 0x6200,
+	0x9292, 0x0005, 0x0218, 0x918c, 0xffdf, 0x0010, 0x918d, 0x0020,
+	0x6106, 0x00ce, 0xd08c, 0x00c6, 0x2061, 0x0100, 0x6104, 0x0118,
+	0x918d, 0x0010, 0x0010, 0x918c, 0xffef, 0x6106, 0x00ce, 0xd084,
+	0x0158, 0x6a28, 0x928a, 0x007f, 0x1a04, 0x349c, 0x9288, 0x3268,
+	0x210d, 0x918c, 0x00ff, 0x6162, 0xd0dc, 0x0130, 0x6828, 0x908a,
+	0x007f, 0x1a04, 0x349c, 0x605a, 0x6888, 0x9084, 0x0030, 0x8004,
+	0x8004, 0x8004, 0x8004, 0x0006, 0x2009, 0x198e, 0x9080, 0x284c,
+	0x2005, 0x200a, 0x000e, 0x2009, 0x198f, 0x9080, 0x2850, 0x2005,
+	0x200a, 0x6808, 0x908a, 0x0100, 0x0a04, 0x349c, 0x908a, 0x0841,
+	0x1a04, 0x349c, 0x9084, 0x0007, 0x1904, 0x349c, 0x680c, 0x9005,
+	0x0904, 0x349c, 0x6810, 0x9005, 0x0904, 0x349c, 0x6848, 0x6940,
+	0x910a, 0x1a04, 0x349c, 0x8001, 0x0904, 0x349c, 0x684c, 0x6944,
+	0x910a, 0x1a04, 0x349c, 0x8001, 0x0904, 0x349c, 0x2009, 0x195d,
+	0x200b, 0x0000, 0x2001, 0x1880, 0x2004, 0xd0c4, 0x0140, 0x7884,
+	0x200a, 0x2008, 0x080c, 0x0e51, 0x3b00, 0xc085, 0x20d8, 0x6814,
+	0x908c, 0x00ff, 0x614a, 0x8007, 0x9084, 0x00ff, 0x604e, 0x080c,
+	0x767d, 0x080c, 0x696f, 0x080c, 0x69d9, 0x6808, 0x602a, 0x080c,
+	0x226c, 0x2009, 0x0170, 0x200b, 0x0080, 0xa001, 0xa001, 0x200b,
+	0x0000, 0x0036, 0x6b08, 0x080c, 0x27ab, 0x003e, 0x6000, 0x9086,
+	0x0000, 0x1904, 0x436d, 0x6818, 0x691c, 0x6a20, 0x6b24, 0x8007,
+	0x810f, 0x8217, 0x831f, 0x6016, 0x611a, 0x621e, 0x6322, 0x6c04,
+	0xd4f4, 0x0148, 0x6830, 0x6934, 0x6a38, 0x6b3c, 0x8007, 0x810f,
+	0x8217, 0x831f, 0x0010, 0x9084, 0xf0ff, 0x6006, 0x610a, 0x620e,
+	0x6312, 0x8007, 0x810f, 0x8217, 0x831f, 0x20a9, 0x0004, 0x20a1,
+	0x1990, 0x20e9, 0x0001, 0x4001, 0x20a9, 0x0004, 0x20a1, 0x19aa,
+	0x20e9, 0x0001, 0x4001, 0x080c, 0x8615, 0x00c6, 0x900e, 0x20a9,
+	0x0001, 0x6b70, 0xd384, 0x0510, 0x0068, 0x2009, 0x0100, 0x210c,
+	0x918e, 0x0008, 0x1110, 0x839d, 0x0010, 0x83f5, 0x3e18, 0x12b0,
+	0x3508, 0x8109, 0x080c, 0x7c58, 0x6878, 0x6016, 0x6874, 0x2008,
+	0x9084, 0xff00, 0x8007, 0x600a, 0x9184, 0x00ff, 0x6006, 0x8108,
+	0x1118, 0x6003, 0x0003, 0x0010, 0x6003, 0x0001, 0x1f04, 0x42bd,
+	0x00ce, 0x00c6, 0x2061, 0x1978, 0x2001, 0x180d, 0x2004, 0xd08c,
+	0x11a8, 0x6a88, 0x9284, 0xc000, 0x2010, 0x9286, 0x0000, 0x1158,
+	0x2063, 0x0000, 0x2001, 0x0001, 0x080c, 0x2a46, 0x2001, 0x0001,
+	0x080c, 0x2a29, 0x0088, 0x9286, 0x4000, 0x1148, 0x2063, 0x0001,
+	0x9006, 0x080c, 0x2a46, 0x9006, 0x080c, 0x2a29, 0x0028, 0x9286,
+	0x8000, 0x1d30, 0x2063, 0x0002, 0x00ce, 0x00e6, 0x2c70, 0x080c,
+	0x0ea2, 0x00ee, 0x6888, 0xd0ec, 0x0130, 0x2011, 0x0114, 0x2204,
+	0x9085, 0x0100, 0x2012, 0x6a80, 0x9284, 0x0030, 0x9086, 0x0030,
+	0x1128, 0x9294, 0xffcf, 0x9295, 0x0020, 0x6a82, 0x2001, 0x1958,
+	0x6a80, 0x9294, 0x0030, 0x928e, 0x0000, 0x0170, 0x928e, 0x0010,
+	0x0118, 0x928e, 0x0020, 0x0140, 0x2003, 0xaaaa, 0x080c, 0x2820,
+	0x2001, 0x1949, 0x2102, 0x0008, 0x2102, 0x00c6, 0x2061, 0x0100,
+	0x602f, 0x0040, 0x602f, 0x0000, 0x00ce, 0x080c, 0x7351, 0x0128,
+	0x080c, 0x4f54, 0x0110, 0x080c, 0x2771, 0x60d0, 0x9005, 0x01c0,
+	0x6003, 0x0001, 0x2009, 0x4355, 0x00d0, 0x080c, 0x7351, 0x1168,
+	0x2011, 0x71cd, 0x080c, 0x84c2, 0x2011, 0x71c0, 0x080c, 0x85e0,
+	0x080c, 0x7651, 0x080c, 0x727e, 0x0040, 0x080c, 0x5e72, 0x0028,
+	0x6003, 0x0004, 0x2009, 0x436d, 0x0010, 0x0804, 0x3467, 0x2001,
+	0x0170, 0x2004, 0x9084, 0x00ff, 0x9086, 0x004c, 0x1118, 0x2091,
+	0x30bd, 0x0817, 0x2091, 0x303d, 0x0817, 0x6000, 0x9086, 0x0000,
+	0x0904, 0x3499, 0x2069, 0x185e, 0x7890, 0x6842, 0x7894, 0x6846,
+	0x2d00, 0x2009, 0x0030, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x2039,
+	0x0001, 0x0804, 0x4b59, 0x9006, 0x080c, 0x2771, 0x81ff, 0x1904,
+	0x3499, 0x080c, 0x7351, 0x11b0, 0x080c, 0x764c, 0x080c, 0x5fb3,
+	0x080c, 0x325c, 0x0118, 0x6130, 0xc18d, 0x6132, 0x080c, 0xc8ce,
+	0x0130, 0x080c, 0x7374, 0x1118, 0x080c, 0x7329, 0x0038, 0x080c,
+	0x727e, 0x0020, 0x080c, 0x5f78, 0x080c, 0x5e72, 0x0804, 0x3467,
+	0x81ff, 0x1904, 0x3499, 0x080c, 0x7351, 0x1110, 0x0804, 0x3499,
+	0x0126, 0x2091, 0x8000, 0x6190, 0x81ff, 0x0190, 0x704f, 0x0000,
+	0x2001, 0x1c80, 0x2009, 0x0040, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98,
+	0x2039, 0x0001, 0x080c, 0x4b59, 0x701f, 0x3465, 0x012e, 0x0005,
+	0x704f, 0x0001, 0x00d6, 0x2069, 0x1c80, 0x20a9, 0x0040, 0x20e9,
+	0x0001, 0x20a1, 0x1c80, 0x2019, 0xffff, 0x4304, 0x6558, 0x9588,
+	0x3268, 0x210d, 0x918c, 0x00ff, 0x216a, 0x900e, 0x2011, 0x0002,
+	0x2100, 0x9506, 0x01a8, 0x080c, 0x64fc, 0x1190, 0xb814, 0x821c,
+	0x0238, 0x9398, 0x1c80, 0x9085, 0xff00, 0x8007, 0x201a, 0x0038,
+	0x9398, 0x1c80, 0x2324, 0x94a4, 0xff00, 0x9405, 0x201a, 0x8210,
+	0x8108, 0x9182, 0x0080, 0x1208, 0x0c18, 0x8201, 0x8007, 0x2d0c,
+	0x9105, 0x206a, 0x00de, 0x20a9, 0x0040, 0x20a1, 0x1c80, 0x2099,
+	0x1c80, 0x080c, 0x5f03, 0x0804, 0x43c8, 0x080c, 0x4b40, 0x0904,
+	0x349c, 0x080c, 0x4b11, 0x1120, 0x2009, 0x0002, 0x0804, 0x3499,
+	0x080c, 0x5664, 0xd0b4, 0x0558, 0x7884, 0x908e, 0x007e, 0x0538,
+	0x908e, 0x007f, 0x0520, 0x908e, 0x0080, 0x0508, 0x080c, 0x3257,
+	0x1148, 0xb800, 0xd08c, 0x11d8, 0xb804, 0x9084, 0x00ff, 0x9086,
+	0x0006, 0x11a8, 0xa86b, 0x0000, 0xa86c, 0xc0fd, 0xa86e, 0x080c,
+	0xc394, 0x1120, 0x2009, 0x0003, 0x0804, 0x3499, 0x7007, 0x0003,
+	0x701f, 0x4453, 0x0005, 0x080c, 0x4b40, 0x0904, 0x349c, 0x20a9,
+	0x002b, 0xb8b4, 0x20e0, 0xb8b8, 0x2098, 0xa860, 0x20e8, 0xa85c,
+	0x9080, 0x0002, 0x20a0, 0x4003, 0x20a9, 0x0008, 0x9080, 0x0006,
+	0x20a0, 0xb8b4, 0x20e0, 0xb8b8, 0x9080, 0x0006, 0x2098, 0x080c,
+	0x0f8a, 0x0070, 0x20a9, 0x0004, 0xa85c, 0x9080, 0x000a, 0x20a0,
+	0xb8b4, 0x20e0, 0xb8b8, 0x9080, 0x000a, 0x2098, 0x080c, 0x0f8a,
+	0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080,
+	0x0002, 0x2009, 0x002b, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x0804,
+	0x4b59, 0x81ff, 0x1904, 0x3499, 0x080c, 0x4b28, 0x0904, 0x349c,
+	0x080c, 0x6690, 0x0904, 0x3499, 0x0058, 0xa87c, 0x9005, 0x0120,
+	0x2009, 0x0004, 0x0804, 0x3499, 0xa978, 0xaa98, 0x0804, 0x3467,
+	0x080c, 0x566c, 0x0904, 0x3467, 0x701f, 0x449d, 0x7007, 0x0003,
+	0x0005, 0x81ff, 0x1904, 0x3499, 0x7888, 0x908a, 0x1000, 0x1a04,
+	0x349c, 0x080c, 0x4b40, 0x0904, 0x349c, 0x080c, 0x686d, 0x0120,
+	0x080c, 0x6875, 0x1904, 0x349c, 0x080c, 0x6716, 0x0904, 0x3499,
+	0x2019, 0x0004, 0x900e, 0x080c, 0x669a, 0x0904, 0x3499, 0x7984,
+	0x7a88, 0x04c9, 0x08a8, 0xa8a0, 0x908a, 0x1000, 0x12f8, 0x080c,
+	0x4b3e, 0x01e0, 0x080c, 0x686d, 0x0118, 0x080c, 0x6875, 0x11b0,
+	0x080c, 0x6716, 0x2009, 0x0002, 0x0168, 0x2009, 0x0002, 0x2019,
+	0x0004, 0x080c, 0x669a, 0x2009, 0x0003, 0x0120, 0xa99c, 0xaaa0,
+	0x00d1, 0x0060, 0xa89b, 0x4005, 0xa99e, 0x0010, 0xa89b, 0x4006,
+	0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x0005, 0xa89b, 0x4000,
+	0x080c, 0x566c, 0x0110, 0x9006, 0x0018, 0x900e, 0x9085, 0x0001,
+	0x2001, 0x0000, 0x0005, 0x9186, 0x00ff, 0x0110, 0x0071, 0x0060,
+	0x2029, 0x007e, 0x2061, 0x1800, 0x6458, 0x2400, 0x9506, 0x0110,
+	0x2508, 0x0019, 0x8529, 0x1ec8, 0x0005, 0x080c, 0x64fc, 0x1138,
+	0x2200, 0x8003, 0x800b, 0x810b, 0x9108, 0x080c, 0x84d0, 0x0005,
+	0x81ff, 0x1904, 0x3499, 0x798c, 0x2001, 0x195c, 0x918c, 0x8000,
+	0x2102, 0x080c, 0x4b28, 0x0904, 0x349c, 0x080c, 0x686d, 0x0120,
+	0x080c, 0x6875, 0x1904, 0x349c, 0x080c, 0x65c3, 0x0904, 0x3499,
+	0x080c, 0x6695, 0x0904, 0x3499, 0x2001, 0x195c, 0x2004, 0xd0fc,
+	0x1904, 0x3467, 0x0804, 0x44a8, 0xa9a4, 0x2001, 0x195c, 0x918c,
+	0x8000, 0xc18d, 0x2102, 0x080c, 0x4b33, 0x01a0, 0x080c, 0x686d,
+	0x0118, 0x080c, 0x6875, 0x1170, 0x080c, 0x65c3, 0x2009, 0x0002,
+	0x0128, 0x080c, 0x6695, 0x1170, 0x2009, 0x0003, 0xa89b, 0x4005,
+	0xa99e, 0x0010, 0xa89b, 0x4006, 0x900e, 0x9085, 0x0001, 0x2001,
+	0x0030, 0x0005, 0xa89b, 0x4000, 0x2001, 0x195c, 0x2004, 0xd0fc,
+	0x1128, 0x080c, 0x566c, 0x0110, 0x9006, 0x0018, 0x900e, 0x9085,
+	0x0001, 0x2001, 0x0000, 0x0005, 0x81ff, 0x1904, 0x3499, 0x798c,
+	0x2001, 0x195b, 0x918c, 0x8000, 0x2102, 0x080c, 0x4b28, 0x0904,
+	0x349c, 0x080c, 0x686d, 0x0120, 0x080c, 0x6875, 0x1904, 0x349c,
+	0x080c, 0x65c3, 0x0904, 0x3499, 0x080c, 0x668b, 0x0904, 0x3499,
+	0x2001, 0x195b, 0x2004, 0xd0fc, 0x1904, 0x3467, 0x0804, 0x44a8,
+	0xa9a4, 0x2001, 0x195b, 0x918c, 0x8000, 0xc18d, 0x2102, 0x080c,
+	0x4b33, 0x01a0, 0x080c, 0x686d, 0x0118, 0x080c, 0x6875, 0x1170,
+	0x080c, 0x65c3, 0x2009, 0x0002, 0x0128, 0x080c, 0x668b, 0x1170,
+	0x2009, 0x0003, 0xa89b, 0x4005, 0xa99e, 0x0010, 0xa89b, 0x4006,
+	0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x0005, 0xa89b, 0x4000,
+	0x2001, 0x195b, 0x2004, 0xd0fc, 0x1128, 0x080c, 0x566c, 0x0110,
+	0x9006, 0x0018, 0x900e, 0x9085, 0x0001, 0x2001, 0x0000, 0x0005,
+	0x6100, 0x0804, 0x3467, 0x080c, 0x4b40, 0x0904, 0x349c, 0x080c,
+	0x5678, 0x1904, 0x3499, 0x79a8, 0xd184, 0x1158, 0xb834, 0x8007,
+	0x789e, 0xb830, 0x8007, 0x789a, 0xbb2c, 0x831f, 0xba28, 0x8217,
+	0x0050, 0xb824, 0x8007, 0x789e, 0xb820, 0x8007, 0x789a, 0xbb1c,
+	0x831f, 0xba18, 0x8217, 0xb900, 0x918c, 0x0202, 0x0804, 0x3467,
+	0x78a8, 0x909c, 0x0003, 0xd0ac, 0x1158, 0xd0b4, 0x1148, 0x939a,
+	0x0003, 0x1a04, 0x3499, 0x6258, 0x7884, 0x9206, 0x1904, 0x4678,
+	0x2031, 0x1848, 0x2009, 0x013c, 0x2136, 0x2001, 0x1840, 0x2009,
+	0x000c, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x2039, 0x0001, 0x0006,
+	0x78a8, 0x9084, 0x0080, 0x15b8, 0x0006, 0x0036, 0x2001, 0x1a5e,
+	0x201c, 0x7b9a, 0x2003, 0x0000, 0x2001, 0x1a5f, 0x201c, 0x7b9e,
+	0x2003, 0x0000, 0x2001, 0x1a60, 0x201c, 0x7ba2, 0x2003, 0x0000,
+	0x2001, 0x1a5a, 0x201c, 0x7baa, 0x2003, 0x0000, 0x2001, 0x1a61,
+	0x201c, 0x7bb2, 0x2003, 0x0000, 0x003e, 0x000e, 0x0126, 0x2091,
+	0x8000, 0x0036, 0x2001, 0x185b, 0x201c, 0x7bb6, 0x2003, 0x0000,
+	0x2001, 0x185c, 0x201c, 0x7bba, 0x2003, 0x0000, 0x003e, 0x012e,
+	0x000e, 0x0804, 0x4b59, 0x000e, 0x2031, 0x0000, 0x2061, 0x18b9,
+	0x2c44, 0xa66e, 0xa17e, 0xa776, 0xa07a, 0xa292, 0xa396, 0xa49a,
+	0xa59e, 0x080c, 0x10f7, 0x7007, 0x0002, 0x701f, 0x4698, 0x0005,
+	0x81ff, 0x1904, 0x3499, 0x080c, 0x4b40, 0x0904, 0x349c, 0x080c,
+	0x686d, 0x1904, 0x3499, 0x00c6, 0x080c, 0x4b11, 0x00ce, 0x0904,
+	0x3499, 0xa86b, 0x0000, 0xa86c, 0xc0fd, 0xa86e, 0x7ea8, 0x080c,
+	0xc33a, 0x0904, 0x3499, 0x7007, 0x0003, 0x701f, 0x46d2, 0x0005,
+	0x0126, 0x2091, 0x8000, 0x0006, 0x0036, 0x2001, 0x185b, 0x201c,
+	0x7bb6, 0x2003, 0x0000, 0x2001, 0x185c, 0x201c, 0x7bba, 0x2003,
+	0x0000, 0x003e, 0x000e, 0x012e, 0x080c, 0x4196, 0x0006, 0x0036,
+	0x2001, 0x1a5e, 0x201c, 0x7b9a, 0x2003, 0x0000, 0x2001, 0x1a5f,
+	0x201c, 0x7b9e, 0x2003, 0x0000, 0x2001, 0x1a60, 0x201c, 0x7ba2,
+	0x2003, 0x0000, 0x2001, 0x1a5a, 0x201c, 0x7baa, 0x2003, 0x0000,
+	0x2001, 0x1a61, 0x201c, 0x7bb2, 0x2003, 0x0000, 0x003e, 0x000e,
+	0x0804, 0x3467, 0xa830, 0x9086, 0x0100, 0x0904, 0x3499, 0x8906,
 	0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x001c,
-	0x080c, 0x4aa6, 0x701f, 0x3a63, 0x7023, 0x0001, 0x012e, 0x0005,
-	0x0046, 0x0086, 0x0096, 0x00a6, 0x00b6, 0x00c6, 0x00d6, 0x00e6,
-	0x00f6, 0x080c, 0x390b, 0x2001, 0x197c, 0x2003, 0x0000, 0x2021,
-	0x000a, 0x2061, 0x0100, 0x6104, 0x0016, 0x60bb, 0x0000, 0x60bf,
-	0x32e1, 0x60bf, 0x0012, 0x080c, 0x3b95, 0x080c, 0x3b54, 0x00f6,
-	0x00e6, 0x0086, 0x2940, 0x2071, 0x1a44, 0x2079, 0x0090, 0x00d6,
-	0x2069, 0x0000, 0x6884, 0xd0b4, 0x0140, 0x2001, 0x0035, 0x2004,
-	0x780e, 0x2001, 0x0034, 0x2004, 0x780a, 0x00de, 0x2011, 0x0001,
-	0x080c, 0x3f3c, 0x008e, 0x00ee, 0x00fe, 0x080c, 0x3e5e, 0x080c,
-	0x3d63, 0x05b8, 0x2001, 0x020b, 0x2004, 0x9084, 0x0140, 0x1db8,
-	0x080c, 0x3fb0, 0x00f6, 0x2079, 0x0300, 0x78bc, 0x00fe, 0x908c,
-	0x0070, 0x1560, 0x2071, 0x0200, 0x7037, 0x0000, 0x7050, 0x9084,
-	0xff00, 0x9086, 0x3200, 0x1510, 0x7037, 0x0001, 0x7050, 0x9084,
-	0xff00, 0x9086, 0xe100, 0x11d0, 0x7037, 0x0000, 0x7054, 0x7037,
-	0x0000, 0x715c, 0x9106, 0x1190, 0x2001, 0x181f, 0x2004, 0x9106,
-	0x1168, 0x00c6, 0x2061, 0x0100, 0x6024, 0x9084, 0x1e00, 0x00ce,
-	0x0138, 0x080c, 0x3d6d, 0x080c, 0x3b4f, 0x0058, 0x080c, 0x3b4f,
-	0x080c, 0x3ed4, 0x080c, 0x3e54, 0x2001, 0x020b, 0x2004, 0xd0e4,
-	0x0dd8, 0x2001, 0x032a, 0x2003, 0x0004, 0x2061, 0x0100, 0x6027,
-	0x0002, 0x001e, 0x6106, 0x2011, 0x020d, 0x2013, 0x0020, 0x60bb,
-	0x0000, 0x60bf, 0x0108, 0x60bf, 0x0012, 0x2001, 0x0004, 0x200c,
-	0x918c, 0xfffd, 0x2102, 0x080c, 0x12b8, 0x2009, 0x0028, 0x080c,
-	0x22b2, 0x2001, 0x0227, 0x200c, 0x2102, 0x00fe, 0x00ee, 0x00de,
-	0x00ce, 0x00be, 0x00ae, 0x009e, 0x008e, 0x004e, 0x2001, 0x197c,
-	0x2004, 0x9005, 0x1118, 0x012e, 0x0804, 0x33cb, 0x012e, 0x2021,
-	0x400c, 0x0804, 0x33cd, 0x0016, 0x0026, 0x0036, 0x0046, 0x0056,
-	0x0076, 0x0086, 0x0096, 0x00d6, 0x0156, 0x7014, 0x2048, 0x7020,
-	0x20a8, 0x8000, 0x7022, 0xa804, 0x9005, 0x0904, 0x3abf, 0x2048,
-	0x1f04, 0x3a73, 0x7068, 0x2040, 0xa290, 0xa394, 0xa498, 0xa59c,
-	0xa930, 0xa808, 0xd0b4, 0x1120, 0x2029, 0x0000, 0x2021, 0x0000,
-	0x0096, 0x7014, 0x2048, 0xa868, 0x009e, 0x9086, 0x0103, 0x0170,
-	0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080,
-	0x001c, 0x080c, 0x4aa6, 0x701f, 0x3a63, 0x00b0, 0x8906, 0x8006,
-	0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x001c, 0x21a8,
-	0x27e0, 0x2098, 0x27e8, 0x20a0, 0x0006, 0x080c, 0x0f7e, 0x000e,
-	0x080c, 0x4aa9, 0x701f, 0x3a63, 0x015e, 0x00de, 0x009e, 0x008e,
-	0x007e, 0x005e, 0x004e, 0x003e, 0x002e, 0x001e, 0x0005, 0x7014,
-	0x2048, 0xa868, 0x9086, 0x0103, 0x1118, 0x701f, 0x3b24, 0x0450,
-	0x7014, 0x2048, 0xa86c, 0xc0fd, 0xa86e, 0x2009, 0x007f, 0x080c,
-	0x63c1, 0x0110, 0x9006, 0x0030, 0xb813, 0x00ff, 0xb817, 0xfffd,
-	0x080c, 0xbcea, 0x015e, 0x00de, 0x009e, 0x008e, 0x007e, 0x005e,
-	0x004e, 0x003e, 0x002e, 0x001e, 0x0904, 0x33fd, 0x0016, 0x0026,
-	0x0036, 0x0046, 0x0056, 0x0076, 0x0086, 0x0096, 0x00d6, 0x0156,
-	0x701f, 0x3af6, 0x7007, 0x0003, 0x0804, 0x3ab4, 0xa830, 0x9086,
-	0x0100, 0x2021, 0x400c, 0x0904, 0x33cd, 0x0076, 0xad10, 0xac0c,
-	0xab24, 0xaa20, 0xa930, 0xa808, 0xd0b4, 0x1120, 0x2029, 0x0000,
-	0x2021, 0x0000, 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084,
-	0xffc0, 0x9080, 0x001c, 0x21a8, 0x27e0, 0x2098, 0x27e8, 0x20a0,
-	0x0006, 0x080c, 0x0f7e, 0x000e, 0x080c, 0x4aa9, 0x007e, 0x701f,
-	0x3a63, 0x7023, 0x0001, 0x0005, 0x0804, 0x33cb, 0x0156, 0x00c6,
-	0xa814, 0x908a, 0x001e, 0x0218, 0xa833, 0x001e, 0x0010, 0xa832,
-	0x0078, 0x81ff, 0x0168, 0x0016, 0x080c, 0x4a61, 0x001e, 0x0130,
-	0xa800, 0x2040, 0xa008, 0xa80a, 0x2100, 0x0c58, 0x9006, 0x0010,
-	0x9085, 0x0001, 0x00ce, 0x015e, 0x0005, 0x0006, 0x00f6, 0x2079,
-	0x0000, 0x7880, 0x9086, 0x0044, 0x00fe, 0x000e, 0x0005, 0x2001,
-	0x197c, 0x2003, 0x0001, 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x2061,
-	0x0200, 0x2001, 0x1987, 0x2004, 0x601a, 0x2061, 0x0100, 0x2001,
-	0x1986, 0x2004, 0x60ce, 0x6104, 0xc1ac, 0x6106, 0x080c, 0x4a61,
-	0xa813, 0x001a, 0xa817, 0x0001, 0x2900, 0xa85a, 0x2001, 0x002e,
-	0x2004, 0xa86a, 0x2001, 0x002f, 0x2004, 0xa86e, 0x2061, 0x0090,
-	0x2079, 0x0100, 0x2001, 0x1986, 0x2004, 0x6036, 0x2009, 0x0040,
-	0x080c, 0x22b2, 0x2001, 0x002a, 0x2004, 0x9084, 0xfff8, 0xa872,
-	0x601a, 0xa877, 0x0000, 0x601f, 0x0000, 0x78ca, 0x9006, 0x600a,
-	0x600e, 0x00ce, 0x00ee, 0x00fe, 0x0005, 0x00e6, 0x080c, 0x4a61,
-	0x2940, 0xa013, 0x001a, 0xa017, 0x0001, 0x2800, 0xa05a, 0x2001,
-	0x0030, 0x2004, 0xa86a, 0x2001, 0x0031, 0x2004, 0xa86e, 0x2001,
-	0x002a, 0x2004, 0x9084, 0xfff8, 0xa872, 0xa877, 0x0000, 0x2001,
-	0x032a, 0x2003, 0x0004, 0x2001, 0x0300, 0x2003, 0x0000, 0x2001,
-	0x020d, 0x2003, 0x0000, 0x2001, 0x0004, 0x200c, 0x918d, 0x0002,
-	0x2102, 0x00ee, 0x0005, 0x0126, 0x2091, 0x8000, 0x81ff, 0x0148,
-	0x080c, 0x2a85, 0x1130, 0x9006, 0x080c, 0x29dd, 0x9006, 0x080c,
-	0x29c0, 0x2001, 0x197b, 0x2003, 0x0000, 0x7884, 0x9084, 0x0007,
-	0x0002, 0x3be4, 0x3bed, 0x3bf6, 0x3be1, 0x3be1, 0x3be1, 0x3be1,
-	0x3be1, 0x012e, 0x0804, 0x3400, 0x2009, 0x0114, 0x2104, 0x9085,
-	0x0800, 0x200a, 0x080c, 0x3db7, 0x00c0, 0x2009, 0x0114, 0x2104,
-	0x9085, 0x4000, 0x200a, 0x080c, 0x3db7, 0x0078, 0x080c, 0x72e5,
-	0x1128, 0x012e, 0x2009, 0x0016, 0x0804, 0x33fd, 0x81ff, 0x0128,
-	0x012e, 0x2021, 0x400b, 0x0804, 0x33cd, 0x2001, 0x0141, 0x2004,
-	0xd0dc, 0x0db0, 0x0086, 0x0096, 0x00a6, 0x00b6, 0x00c6, 0x00d6,
-	0x00e6, 0x00f6, 0x080c, 0x390b, 0x2009, 0x0101, 0x210c, 0x0016,
-	0x7ec8, 0x7dcc, 0x9006, 0x2068, 0x2060, 0x2058, 0x080c, 0x408b,
-	0x080c, 0x3fdb, 0x903e, 0x2720, 0x00f6, 0x00e6, 0x0086, 0x2940,
-	0x2071, 0x1a44, 0x2079, 0x0090, 0x00d6, 0x2069, 0x0000, 0x6884,
-	0xd0b4, 0x0120, 0x68d4, 0x780e, 0x68d0, 0x780a, 0x00de, 0x2011,
-	0x0001, 0x080c, 0x3f3c, 0x080c, 0x2a8d, 0x080c, 0x2a8d, 0x080c,
-	0x2a8d, 0x080c, 0x2a8d, 0x080c, 0x3f3c, 0x008e, 0x00ee, 0x00fe,
-	0x080c, 0x3e5e, 0x2009, 0x9c40, 0x8109, 0x11b0, 0x080c, 0x3d6d,
-	0x2001, 0x0004, 0x200c, 0x918c, 0xfffd, 0x2102, 0x001e, 0x00fe,
-	0x00ee, 0x00de, 0x00ce, 0x00be, 0x00ae, 0x009e, 0x008e, 0x2009,
-	0x0017, 0x080c, 0x33fd, 0x0cf8, 0x2001, 0x020b, 0x2004, 0x9084,
-	0x0140, 0x1d10, 0x00f6, 0x2079, 0x0000, 0x7884, 0x00fe, 0xd0bc,
-	0x0178, 0x2001, 0x0201, 0x200c, 0x81ff, 0x0150, 0x080c, 0x3e3c,
-	0x2d00, 0x9c05, 0x9b05, 0x0120, 0x080c, 0x3d6d, 0x0804, 0x3d1a,
-	0x080c, 0x3fb0, 0x080c, 0x3ed4, 0x080c, 0x3e1f, 0x080c, 0x3e54,
-	0x00f6, 0x2079, 0x0100, 0x7824, 0xd0ac, 0x0130, 0x8b58, 0x080c,
-	0x3d6d, 0x00fe, 0x0804, 0x3d1a, 0x00fe, 0x080c, 0x3d63, 0x1150,
-	0x8d68, 0x2001, 0x0032, 0x2602, 0x2001, 0x0033, 0x2502, 0x080c,
-	0x3d6d, 0x0080, 0x87ff, 0x0138, 0x2001, 0x0201, 0x2004, 0x9005,
-	0x1908, 0x8739, 0x0038, 0x2001, 0x1a41, 0x2004, 0x9086, 0x0000,
-	0x1904, 0x3c6a, 0x2001, 0x032f, 0x2003, 0x00f6, 0x8631, 0x1208,
-	0x8529, 0x2500, 0x9605, 0x0904, 0x3d1a, 0x7884, 0xd0bc, 0x0128,
-	0x2d00, 0x9c05, 0x9b05, 0x1904, 0x3d1a, 0xa013, 0x001a, 0x2001,
-	0x032a, 0x2003, 0x0004, 0x7884, 0xd0ac, 0x1148, 0x2001, 0x1a41,
-	0x2003, 0x0003, 0x2001, 0x032a, 0x2003, 0x0009, 0x0030, 0xa017,
-	0x0001, 0x78b4, 0x9005, 0x0108, 0xa016, 0x2800, 0xa05a, 0x2009,
-	0x0040, 0x080c, 0x22b2, 0x2900, 0xa85a, 0xa813, 0x001a, 0x7884,
-	0xd0a4, 0x1180, 0xa817, 0x0000, 0x00c6, 0x20a9, 0x0004, 0x2061,
-	0x0090, 0x602b, 0x0008, 0x2001, 0x0203, 0x2004, 0x1f04, 0x3cf1,
-	0x00ce, 0x0030, 0xa817, 0x0001, 0x78b0, 0x9005, 0x0108, 0xa816,
-	0x00f6, 0x00c6, 0x2079, 0x0100, 0x2061, 0x0090, 0x7827, 0x0002,
-	0x2001, 0x002a, 0x2004, 0x9084, 0xfff8, 0x601a, 0x0006, 0x2001,
-	0x002b, 0x2004, 0x601e, 0x78c6, 0x000e, 0x78ca, 0x00ce, 0x00fe,
-	0x0804, 0x3c24, 0x001e, 0x00c6, 0x2001, 0x032a, 0x2003, 0x0004,
-	0x2061, 0x0100, 0x6027, 0x0002, 0x6106, 0x2011, 0x020d, 0x2013,
-	0x0020, 0x2001, 0x0004, 0x200c, 0x918c, 0xfffd, 0x2102, 0x080c,
-	0x12b8, 0x7884, 0x9084, 0x0003, 0x9086, 0x0002, 0x01a0, 0x2009,
-	0x0028, 0x080c, 0x22b2, 0x2001, 0x0227, 0x200c, 0x2102, 0x6050,
-	0x9084, 0xb7ef, 0x6052, 0x602f, 0x0000, 0x604b, 0xf7f7, 0x6043,
-	0x0090, 0x6043, 0x0010, 0x00ce, 0x2d08, 0x2c10, 0x2b18, 0x2b00,
-	0x9c05, 0x9d05, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, 0x00ae,
-	0x009e, 0x008e, 0x1118, 0x012e, 0x0804, 0x33cb, 0x012e, 0x2021,
-	0x400c, 0x0804, 0x33cd, 0x9085, 0x0001, 0x1d04, 0x3d6c, 0x2091,
-	0x6000, 0x8420, 0x9486, 0x0064, 0x0005, 0x2001, 0x0105, 0x2003,
-	0x0010, 0x2001, 0x032a, 0x2003, 0x0004, 0x2001, 0x1a41, 0x2003,
-	0x0000, 0x0071, 0x2009, 0x0048, 0x080c, 0x22b2, 0x2001, 0x0227,
-	0x2024, 0x2402, 0x2001, 0x0109, 0x2003, 0x4000, 0x9026, 0x0005,
-	0x00f6, 0x00e6, 0x2071, 0x1a44, 0x7000, 0x9086, 0x0000, 0x0520,
-	0x2079, 0x0090, 0x2009, 0x0206, 0x2104, 0x2009, 0x0203, 0x210c,
-	0x9106, 0x1120, 0x2009, 0x0040, 0x080c, 0x22b2, 0x782c, 0xd0fc,
-	0x0d88, 0x080c, 0x3fb0, 0x7000, 0x9086, 0x0000, 0x1d58, 0x782b,
-	0x0004, 0x782c, 0xd0ac, 0x1de8, 0x2009, 0x0040, 0x080c, 0x22b2,
-	0x782b, 0x0002, 0x7003, 0x0000, 0x00ee, 0x00fe, 0x0005, 0x00f6,
-	0x2079, 0x0100, 0x2001, 0x1817, 0x200c, 0x7932, 0x7936, 0x080c,
-	0x26e8, 0x7850, 0x9084, 0xfbff, 0x9085, 0x0030, 0x7852, 0x2019,
-	0x01f4, 0x8319, 0x1df0, 0x9084, 0xffcf, 0x9085, 0x2000, 0x7852,
-	0x20a9, 0x0046, 0x1d04, 0x3dd2, 0x2091, 0x6000, 0x1f04, 0x3dd2,
-	0x7850, 0x9085, 0x0400, 0x9084, 0xdfff, 0x7852, 0x2001, 0x0021,
-	0x2004, 0x9084, 0x0003, 0x9086, 0x0001, 0x1120, 0x7850, 0x9084,
-	0xdfff, 0x7852, 0x784b, 0xf7f7, 0x7843, 0x0090, 0x7843, 0x0010,
-	0x20a9, 0x0028, 0xa001, 0x1f04, 0x3df2, 0x7850, 0x9085, 0x1400,
-	0x7852, 0x2019, 0x61a8, 0x7854, 0xa001, 0xa001, 0xd08c, 0x1110,
-	0x8319, 0x1dc8, 0x7827, 0x0048, 0x7850, 0x9085, 0x0400, 0x7852,
-	0x7843, 0x0040, 0x2019, 0x01f4, 0xa001, 0xa001, 0x8319, 0x1de0,
-	0x2001, 0x0100, 0x080c, 0x2b65, 0x7827, 0x0020, 0x7843, 0x0000,
-	0x9006, 0x080c, 0x2b65, 0x7827, 0x0048, 0x00fe, 0x0005, 0x7884,
-	0xd0ac, 0x11c8, 0x00f6, 0x00e6, 0x2071, 0x1a41, 0x2079, 0x0320,
-	0x2001, 0x0201, 0x2004, 0x9005, 0x0160, 0x7000, 0x9086, 0x0000,
-	0x1140, 0x0051, 0xd0bc, 0x0108, 0x8738, 0x7003, 0x0003, 0x782b,
-	0x0019, 0x00ee, 0x00fe, 0x0005, 0x00f6, 0x2079, 0x0300, 0x78bc,
-	0x00fe, 0x908c, 0x0070, 0x0178, 0x2009, 0x0032, 0x260a, 0x2009,
-	0x0033, 0x250a, 0xd0b4, 0x0108, 0x8c60, 0xd0ac, 0x0108, 0x8d68,
-	0xd0a4, 0x0108, 0x8b58, 0x0005, 0x00f6, 0x2079, 0x0200, 0x781c,
-	0xd084, 0x0110, 0x7837, 0x0050, 0x00fe, 0x0005, 0x00e6, 0x2071,
-	0x0100, 0x2001, 0x1987, 0x2004, 0x70e2, 0x080c, 0x3b45, 0x1188,
-	0x2001, 0x181f, 0x2004, 0x2009, 0x181e, 0x210c, 0x918c, 0x00ff,
-	0x706e, 0x716a, 0x7066, 0x918d, 0x3200, 0x7162, 0x7073, 0xe109,
-	0x0080, 0x702c, 0x9085, 0x0002, 0x702e, 0x2009, 0x1817, 0x210c,
-	0x716e, 0x7063, 0x0100, 0x7166, 0x719e, 0x706b, 0x0000, 0x7073,
-	0x0809, 0x7077, 0x0008, 0x7078, 0x9080, 0x0100, 0x707a, 0x7080,
-	0x8000, 0x7082, 0x7087, 0xaaaa, 0x9006, 0x708a, 0x708e, 0x707e,
-	0x70d6, 0x70ab, 0x0036, 0x70af, 0x95d5, 0x7014, 0x9084, 0x1984,
-	0x9085, 0x0092, 0x7016, 0x080c, 0x3fb0, 0x00f6, 0x2071, 0x1a41,
-	0x2079, 0x0320, 0x00d6, 0x2069, 0x0000, 0x6884, 0xd0b4, 0x0120,
-	0x689c, 0x780e, 0x6898, 0x780a, 0x00de, 0x080c, 0x3b45, 0x0140,
-	0x2001, 0x197b, 0x200c, 0x2003, 0x0001, 0x918e, 0x0001, 0x0120,
-	0x2009, 0x03e8, 0x8109, 0x1df0, 0x792c, 0xd1fc, 0x0110, 0x782b,
-	0x0004, 0x2011, 0x0011, 0x080c, 0x3f3c, 0x2011, 0x0001, 0x080c,
-	0x3f3c, 0x00fe, 0x00ee, 0x0005, 0x00f6, 0x00e6, 0x2071, 0x1a41,
-	0x2079, 0x0320, 0x792c, 0xd1fc, 0x0904, 0x3f39, 0x782b, 0x0002,
-	0x9026, 0xd19c, 0x1904, 0x3f35, 0x7000, 0x0002, 0x3f39, 0x3eea,
-	0x3f1a, 0x3f35, 0xd1bc, 0x1170, 0xd1dc, 0x1190, 0x8001, 0x7002,
-	0x2011, 0x0001, 0x080c, 0x3f3c, 0x0904, 0x3f39, 0x080c, 0x3f3c,
-	0x0804, 0x3f39, 0x00f6, 0x2079, 0x0300, 0x78bf, 0x0000, 0x00fe,
-	0x7810, 0x7914, 0x782b, 0x0004, 0x7812, 0x7916, 0x2001, 0x0201,
-	0x200c, 0x81ff, 0x0de8, 0x080c, 0x3e3c, 0x2009, 0x0001, 0x00f6,
-	0x2079, 0x0300, 0x78b8, 0x00fe, 0xd0ec, 0x0110, 0x2009, 0x0011,
-	0x792a, 0x00f8, 0x8001, 0x7002, 0x9184, 0x0880, 0x1140, 0x782c,
-	0xd0fc, 0x1904, 0x3ede, 0x2011, 0x0001, 0x00b1, 0x0090, 0xa010,
-	0x9092, 0x0004, 0x9086, 0x0016, 0x1120, 0xa000, 0xa05a, 0x2011,
-	0x0032, 0xa212, 0xd1dc, 0x1960, 0x0828, 0x782b, 0x0004, 0x7003,
-	0x0000, 0x00ee, 0x00fe, 0x0005, 0xa014, 0x9005, 0x0550, 0x8001,
-	0x0036, 0x0096, 0xa016, 0xa058, 0x2048, 0xa010, 0x2009, 0x0032,
-	0x911a, 0x831c, 0x831c, 0x938a, 0x0007, 0x1a0c, 0x0dc4, 0x9398,
-	0x3f6a, 0x231d, 0x083f, 0x9080, 0x0004, 0x7a2a, 0x7100, 0x8108,
-	0x7102, 0x009e, 0x003e, 0x908a, 0x0036, 0x1140, 0x0096, 0xa058,
-	0x2048, 0xa804, 0xa05a, 0x2001, 0x001a, 0x009e, 0xa012, 0x9085,
-	0x0001, 0x0005, 0x3fa7, 0x3f9e, 0x3f95, 0x3f8c, 0x3f83, 0x3f7a,
-	0x3f71, 0xa968, 0x7902, 0xa96c, 0x7906, 0xa970, 0x7912, 0xa974,
-	0x7916, 0x0005, 0xa978, 0x7902, 0xa97c, 0x7906, 0xa980, 0x7912,
-	0xa984, 0x7916, 0x0005, 0xa988, 0x7902, 0xa98c, 0x7906, 0xa990,
-	0x7912, 0xa994, 0x7916, 0x0005, 0xa998, 0x7902, 0xa99c, 0x7906,
-	0xa9a0, 0x7912, 0xa9a4, 0x7916, 0x0005, 0xa9a8, 0x7902, 0xa9ac,
-	0x7906, 0xa9b0, 0x7912, 0xa9b4, 0x7916, 0x0005, 0xa9b8, 0x7902,
-	0xa9bc, 0x7906, 0xa9c0, 0x7912, 0xa9c4, 0x7916, 0x0005, 0xa9c8,
-	0x7902, 0xa9cc, 0x7906, 0xa9d0, 0x7912, 0xa9d4, 0x7916, 0x0005,
-	0x00f6, 0x00e6, 0x0086, 0x2071, 0x1a44, 0x2079, 0x0090, 0x792c,
-	0xd1fc, 0x01e8, 0x782b, 0x0002, 0x2940, 0x9026, 0x7000, 0x0002,
-	0x3fd7, 0x3fc3, 0x3fce, 0x8001, 0x7002, 0xd19c, 0x1180, 0x2011,
-	0x0001, 0x080c, 0x3f3c, 0x190c, 0x3f3c, 0x0048, 0x8001, 0x7002,
-	0x782c, 0xd0fc, 0x1d38, 0x2011, 0x0001, 0x080c, 0x3f3c, 0x008e,
-	0x00ee, 0x00fe, 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x0086, 0x2061,
-	0x0200, 0x2001, 0x1987, 0x2004, 0x601a, 0x2061, 0x0100, 0x2001,
-	0x1986, 0x2004, 0x60ce, 0x6104, 0xc1ac, 0x6106, 0x2001, 0x002c,
-	0x2004, 0x9005, 0x0520, 0x2038, 0x2001, 0x002e, 0x2024, 0x2001,
-	0x002f, 0x201c, 0x080c, 0x4a61, 0xa813, 0x001a, 0xaf16, 0x2900,
-	0xa85a, 0x978a, 0x0007, 0x0220, 0x2138, 0x2009, 0x0007, 0x0010,
-	0x2708, 0x903e, 0x0096, 0xa858, 0x2048, 0xa85c, 0x9080, 0x001a,
-	0x009e, 0x080c, 0x4053, 0x1d68, 0x2900, 0xa85a, 0x00d0, 0x080c,
-	0x4a61, 0xa813, 0x001a, 0xa817, 0x0001, 0x2900, 0xa85a, 0x2001,
-	0x002e, 0x2004, 0xa86a, 0x2001, 0x002f, 0x2004, 0xa86e, 0x2001,
-	0x002a, 0x2004, 0x9084, 0xfff8, 0xa872, 0x2001, 0x002b, 0x2004,
-	0xa876, 0x2061, 0x0090, 0x2079, 0x0100, 0x2001, 0x1986, 0x2004,
-	0x6036, 0x2009, 0x0040, 0x080c, 0x22b2, 0x2001, 0x002a, 0x2004,
-	0x9084, 0xfff8, 0x601a, 0x0006, 0x2001, 0x002b, 0x2004, 0x601e,
-	0x78c6, 0x000e, 0x78ca, 0x9006, 0x600a, 0x600e, 0x008e, 0x00ce,
-	0x00ee, 0x00fe, 0x0005, 0x00e6, 0x2071, 0x0080, 0xaa60, 0x22e8,
-	0x20a0, 0x20e1, 0x0000, 0x2099, 0x0088, 0x702b, 0x0026, 0x7402,
-	0x7306, 0x9006, 0x700a, 0x700e, 0x810b, 0x810b, 0x21a8, 0x810b,
-	0x7112, 0x702b, 0x0041, 0x702c, 0xd0fc, 0x0de8, 0x702b, 0x0002,
-	0x702b, 0x0040, 0x4005, 0x7400, 0x7304, 0x87ff, 0x0190, 0x0086,
-	0x0096, 0x2940, 0x0086, 0x080c, 0x4a61, 0x008e, 0xa058, 0x00a6,
-	0x2050, 0x2900, 0xb006, 0xa05a, 0x00ae, 0x009e, 0x008e, 0x9085,
-	0x0001, 0x00ee, 0x0005, 0x00e6, 0x2001, 0x002d, 0x2004, 0x9005,
-	0x0528, 0x2038, 0x2001, 0x0030, 0x2024, 0x2001, 0x0031, 0x201c,
-	0x080c, 0x4a61, 0x2940, 0xa813, 0x001a, 0xaf16, 0x2900, 0xa85a,
-	0x978a, 0x0007, 0x0220, 0x2138, 0x2009, 0x0007, 0x0010, 0x2708,
-	0x903e, 0x0096, 0xa858, 0x2048, 0xa85c, 0x9080, 0x001a, 0x009e,
-	0x080c, 0x4053, 0x1d68, 0x2900, 0xa85a, 0x00d8, 0x080c, 0x4a61,
-	0x2940, 0xa013, 0x001a, 0xa017, 0x0001, 0x2800, 0xa05a, 0x2001,
-	0x0030, 0x2004, 0xa06a, 0x2001, 0x0031, 0x2004, 0xa06e, 0x2001,
-	0x002a, 0x2004, 0x9084, 0xfff8, 0xa072, 0x2001, 0x002b, 0x2004,
-	0xa076, 0x2001, 0x032a, 0x2003, 0x0004, 0x7884, 0xd0ac, 0x1180,
-	0x2001, 0x0101, 0x200c, 0x918d, 0x0200, 0x2102, 0xa017, 0x0000,
-	0x2001, 0x1a41, 0x2003, 0x0003, 0x2001, 0x032a, 0x2003, 0x0009,
-	0x2001, 0x0300, 0x2003, 0x0000, 0x2001, 0x020d, 0x2003, 0x0000,
-	0x2001, 0x0004, 0x200c, 0x918d, 0x0002, 0x2102, 0x00ee, 0x0005,
-	0x0126, 0x2091, 0x8000, 0x20a9, 0x001e, 0x20a1, 0x1840, 0x20e9,
-	0x0001, 0x9006, 0x4004, 0x2009, 0x013c, 0x200a, 0x012e, 0x7880,
-	0x9086, 0x0052, 0x0108, 0x0005, 0x0804, 0x33cb, 0x7d98, 0x7c9c,
-	0x0804, 0x34cf, 0x080c, 0x72e5, 0x190c, 0x5ebb, 0x2069, 0x185e,
-	0x2d00, 0x2009, 0x0030, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x2039,
-	0x0001, 0x080c, 0x4aa6, 0x701f, 0x4126, 0x0005, 0x080c, 0x55b6,
-	0x1130, 0x3b00, 0x3a08, 0xc194, 0xc095, 0x20d8, 0x21d0, 0x2069,
-	0x185e, 0x6800, 0x9005, 0x0904, 0x3400, 0x2001, 0x180d, 0x2004,
-	0xd08c, 0x6804, 0x0118, 0xc0a4, 0xc0ac, 0x6806, 0xd0ac, 0x0118,
-	0xd0a4, 0x0904, 0x3400, 0xd094, 0x00c6, 0x2061, 0x0100, 0x6104,
-	0x0138, 0x6200, 0x9292, 0x0005, 0x0218, 0x918c, 0xffdf, 0x0010,
-	0x918d, 0x0020, 0x6106, 0x00ce, 0xd08c, 0x00c6, 0x2061, 0x0100,
-	0x6104, 0x0118, 0x918d, 0x0010, 0x0010, 0x918c, 0xffef, 0x6106,
-	0x00ce, 0xd084, 0x0158, 0x6a28, 0x928a, 0x007f, 0x1a04, 0x3400,
-	0x9288, 0x31cc, 0x210d, 0x918c, 0x00ff, 0x6162, 0xd0dc, 0x0130,
-	0x6828, 0x908a, 0x007f, 0x1a04, 0x3400, 0x605a, 0x6888, 0x9084,
-	0x0030, 0x8004, 0x8004, 0x8004, 0x8004, 0x0006, 0x2009, 0x198e,
-	0x9080, 0x27e3, 0x2005, 0x200a, 0x000e, 0x2009, 0x198f, 0x9080,
-	0x27e7, 0x2005, 0x200a, 0x6808, 0x908a, 0x0100, 0x0a04, 0x3400,
-	0x908a, 0x0841, 0x1a04, 0x3400, 0x9084, 0x0007, 0x1904, 0x3400,
-	0x680c, 0x9005, 0x0904, 0x3400, 0x6810, 0x9005, 0x0904, 0x3400,
-	0x6848, 0x6940, 0x910a, 0x1a04, 0x3400, 0x8001, 0x0904, 0x3400,
-	0x684c, 0x6944, 0x910a, 0x1a04, 0x3400, 0x8001, 0x0904, 0x3400,
-	0x2009, 0x195e, 0x200b, 0x0000, 0x2001, 0x1880, 0x2004, 0xd0c4,
-	0x0140, 0x7884, 0x200a, 0x2008, 0x080c, 0x0e53, 0x3b00, 0xc085,
-	0x20d8, 0x6814, 0x908c, 0x00ff, 0x614a, 0x8007, 0x9084, 0x00ff,
-	0x604e, 0x080c, 0x760d, 0x080c, 0x6862, 0x080c, 0x68f1, 0x6808,
-	0x602a, 0x080c, 0x2224, 0x2009, 0x0170, 0x200b, 0x0080, 0xa001,
-	0xa001, 0x200b, 0x0000, 0x0036, 0x6b08, 0x080c, 0x2742, 0x003e,
-	0x6000, 0x9086, 0x0000, 0x1904, 0x42ca, 0x6818, 0x691c, 0x6a20,
-	0x6b24, 0x8007, 0x810f, 0x8217, 0x831f, 0x6016, 0x611a, 0x621e,
-	0x6322, 0x6c04, 0xd4f4, 0x0148, 0x6830, 0x6934, 0x6a38, 0x6b3c,
-	0x8007, 0x810f, 0x8217, 0x831f, 0x0010, 0x9084, 0xf0ff, 0x6006,
-	0x610a, 0x620e, 0x6312, 0x8007, 0x810f, 0x8217, 0x831f, 0x20a9,
-	0x0004, 0x20a1, 0x1990, 0x20e9, 0x0001, 0x4001, 0x20a9, 0x0004,
-	0x20a1, 0x19aa, 0x20e9, 0x0001, 0x4001, 0x080c, 0x8480, 0x00c6,
-	0x900e, 0x20a9, 0x0001, 0x6b70, 0xd384, 0x0510, 0x0068, 0x2009,
-	0x0100, 0x210c, 0x918e, 0x0008, 0x1110, 0x839d, 0x0010, 0x83f5,
-	0x3e18, 0x12b0, 0x3508, 0x8109, 0x080c, 0x7bb8, 0x6878, 0x6016,
-	0x6874, 0x2008, 0x9084, 0xff00, 0x8007, 0x600a, 0x9184, 0x00ff,
-	0x6006, 0x8108, 0x1118, 0x6003, 0x0003, 0x0010, 0x6003, 0x0001,
-	0x1f04, 0x421f, 0x00ce, 0x00c6, 0x2061, 0x1978, 0x2001, 0x180d,
-	0x2004, 0xd08c, 0x11a8, 0x6a88, 0x9284, 0xc000, 0x2010, 0x9286,
-	0x0000, 0x1158, 0x2063, 0x0000, 0x2001, 0x0001, 0x080c, 0x29dd,
-	0x2001, 0x0001, 0x080c, 0x29c0, 0x0088, 0x9286, 0x4000, 0x1148,
-	0x2063, 0x0001, 0x9006, 0x080c, 0x29dd, 0x9006, 0x080c, 0x29c0,
-	0x0028, 0x9286, 0x8000, 0x1d30, 0x2063, 0x0002, 0x00ce, 0x6888,
-	0xd0ec, 0x0130, 0x2011, 0x0114, 0x2204, 0x9085, 0x0100, 0x2012,
-	0x6a80, 0x9284, 0x0030, 0x9086, 0x0030, 0x1128, 0x9294, 0xffcf,
-	0x9295, 0x0020, 0x6a82, 0x2001, 0x1959, 0x6a80, 0x9294, 0x0030,
-	0x928e, 0x0000, 0x0170, 0x928e, 0x0010, 0x0118, 0x928e, 0x0020,
-	0x0140, 0x2003, 0xaaaa, 0x080c, 0x27b7, 0x2001, 0x194a, 0x2102,
-	0x0008, 0x2102, 0x00c6, 0x2061, 0x0100, 0x602f, 0x0040, 0x602f,
-	0x0000, 0x00ce, 0x080c, 0x72e5, 0x0128, 0x080c, 0x4e97, 0x0110,
-	0x080c, 0x2708, 0x60d0, 0x9005, 0x01c0, 0x6003, 0x0001, 0x2009,
-	0x42b2, 0x00d0, 0x080c, 0x72e5, 0x1168, 0x2011, 0x7176, 0x080c,
-	0x835e, 0x2011, 0x7169, 0x080c, 0x8474, 0x080c, 0x75e1, 0x080c,
-	0x7212, 0x0040, 0x080c, 0x5db5, 0x0028, 0x6003, 0x0004, 0x2009,
-	0x42ca, 0x0010, 0x0804, 0x33cb, 0x2001, 0x0170, 0x2004, 0x9084,
-	0x00ff, 0x9086, 0x004c, 0x1118, 0x2091, 0x30bd, 0x0817, 0x2091,
-	0x303d, 0x0817, 0x6000, 0x9086, 0x0000, 0x0904, 0x33fd, 0x2069,
-	0x185e, 0x7890, 0x6842, 0x7894, 0x6846, 0x2d00, 0x2009, 0x0030,
-	0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x2039, 0x0001, 0x0804, 0x4aa9,
-	0x9006, 0x080c, 0x2708, 0x81ff, 0x1904, 0x33fd, 0x080c, 0x72e5,
-	0x11b0, 0x080c, 0x75dc, 0x080c, 0x5ef6, 0x080c, 0x31c0, 0x0118,
-	0x6130, 0xc18d, 0x6132, 0x080c, 0xbef8, 0x0130, 0x080c, 0x7308,
-	0x1118, 0x080c, 0x72bd, 0x0038, 0x080c, 0x7212, 0x0020, 0x080c,
-	0x5ebb, 0x080c, 0x5db5, 0x0804, 0x33cb, 0x81ff, 0x1904, 0x33fd,
-	0x080c, 0x72e5, 0x1110, 0x0804, 0x33fd, 0x0126, 0x2091, 0x8000,
-	0x6190, 0x81ff, 0x0190, 0x704f, 0x0000, 0x2001, 0x1c80, 0x2009,
-	0x0040, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x2039, 0x0001, 0x080c,
-	0x4aa9, 0x701f, 0x33c9, 0x012e, 0x0005, 0x704f, 0x0001, 0x00d6,
-	0x2069, 0x1c80, 0x20a9, 0x0040, 0x20e9, 0x0001, 0x20a1, 0x1c80,
-	0x2019, 0xffff, 0x4304, 0x6558, 0x9588, 0x31cc, 0x210d, 0x918c,
-	0x00ff, 0x216a, 0x900e, 0x2011, 0x0002, 0x2100, 0x9506, 0x01a8,
-	0x080c, 0x6411, 0x1190, 0xb814, 0x821c, 0x0238, 0x9398, 0x1c80,
-	0x9085, 0xff00, 0x8007, 0x201a, 0x0038, 0x9398, 0x1c80, 0x2324,
-	0x94a4, 0xff00, 0x9405, 0x201a, 0x8210, 0x8108, 0x9182, 0x0080,
-	0x1208, 0x0c18, 0x8201, 0x8007, 0x2d0c, 0x9105, 0x206a, 0x00de,
-	0x20a9, 0x0040, 0x20a1, 0x1c80, 0x2099, 0x1c80, 0x080c, 0x5e46,
-	0x0804, 0x4325, 0x080c, 0x4a90, 0x0904, 0x3400, 0x080c, 0x4a61,
-	0x1120, 0x2009, 0x0002, 0x0804, 0x33fd, 0x080c, 0x55a7, 0xd0b4,
-	0x0558, 0x7884, 0x908e, 0x007e, 0x0538, 0x908e, 0x007f, 0x0520,
-	0x908e, 0x0080, 0x0508, 0x080c, 0x31bb, 0x1148, 0xb800, 0xd08c,
-	0x11d8, 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006, 0x11a8, 0xa86b,
-	0x0000, 0xa86c, 0xc0fd, 0xa86e, 0x080c, 0xbb19, 0x1120, 0x2009,
-	0x0003, 0x0804, 0x33fd, 0x7007, 0x0003, 0x701f, 0x43b0, 0x0005,
-	0x080c, 0x4a90, 0x0904, 0x3400, 0x20a9, 0x002b, 0xb8b0, 0x20e0,
-	0xb8b4, 0x2098, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0002, 0x20a0,
-	0x4003, 0x20a9, 0x0008, 0x9080, 0x0006, 0x20a0, 0xb8b0, 0x20e0,
-	0xb8b4, 0x9080, 0x0006, 0x2098, 0x080c, 0x0f7e, 0x0070, 0x20a9,
-	0x0004, 0xa85c, 0x9080, 0x000a, 0x20a0, 0xb8b0, 0x20e0, 0xb8b4,
-	0x9080, 0x000a, 0x2098, 0x080c, 0x0f7e, 0x8906, 0x8006, 0x8007,
-	0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x0002, 0x2009, 0x002b,
-	0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x0804, 0x4aa9, 0x81ff, 0x1904,
-	0x33fd, 0x080c, 0x4a78, 0x0904, 0x3400, 0x080c, 0x6588, 0x0904,
-	0x33fd, 0x0058, 0xa87c, 0x9005, 0x0120, 0x2009, 0x0004, 0x0804,
-	0x33fd, 0xa978, 0xaa98, 0x0804, 0x33cb, 0x080c, 0x55af, 0x0904,
-	0x33cb, 0x701f, 0x43fa, 0x7007, 0x0003, 0x0005, 0x81ff, 0x1904,
-	0x33fd, 0x7888, 0x908a, 0x1000, 0x1a04, 0x3400, 0x080c, 0x4a90,
-	0x0904, 0x3400, 0x080c, 0x6746, 0x0120, 0x080c, 0x674e, 0x1904,
-	0x3400, 0x080c, 0x660e, 0x0904, 0x33fd, 0x2019, 0x0004, 0x900e,
-	0x080c, 0x6592, 0x0904, 0x33fd, 0x7984, 0x7a88, 0x04c9, 0x08a8,
-	0xa8a0, 0x908a, 0x1000, 0x12f8, 0x080c, 0x4a8e, 0x01e0, 0x080c,
-	0x6746, 0x0118, 0x080c, 0x674e, 0x11b0, 0x080c, 0x660e, 0x2009,
-	0x0002, 0x0168, 0x2009, 0x0002, 0x2019, 0x0004, 0x080c, 0x6592,
-	0x2009, 0x0003, 0x0120, 0xa99c, 0xaaa0, 0x00d1, 0x0060, 0xa89b,
-	0x4005, 0xa99e, 0x0010, 0xa89b, 0x4006, 0x900e, 0x9085, 0x0001,
-	0x2001, 0x0030, 0x0005, 0xa89b, 0x4000, 0x080c, 0x55af, 0x0110,
-	0x9006, 0x0018, 0x900e, 0x9085, 0x0001, 0x2001, 0x0000, 0x0005,
-	0x9186, 0x00ff, 0x0110, 0x0071, 0x0060, 0x2029, 0x007e, 0x2061,
-	0x1800, 0x6458, 0x2400, 0x9506, 0x0110, 0x2508, 0x0019, 0x8529,
-	0x1ec8, 0x0005, 0x080c, 0x6411, 0x1138, 0x2200, 0x8003, 0x800b,
-	0x810b, 0x9108, 0x080c, 0x836c, 0x0005, 0x81ff, 0x1904, 0x33fd,
-	0x798c, 0x2001, 0x195d, 0x918c, 0x8000, 0x2102, 0x080c, 0x4a78,
-	0x0904, 0x3400, 0x080c, 0x6746, 0x0120, 0x080c, 0x674e, 0x1904,
-	0x3400, 0x080c, 0x64bb, 0x0904, 0x33fd, 0x080c, 0x658d, 0x0904,
-	0x33fd, 0x2001, 0x195d, 0x2004, 0xd0fc, 0x1904, 0x33cb, 0x0804,
-	0x4405, 0xa9a4, 0x2001, 0x195d, 0x918c, 0x8000, 0xc18d, 0x2102,
-	0x080c, 0x4a83, 0x01a0, 0x080c, 0x6746, 0x0118, 0x080c, 0x674e,
-	0x1170, 0x080c, 0x64bb, 0x2009, 0x0002, 0x0128, 0x080c, 0x658d,
-	0x1170, 0x2009, 0x0003, 0xa89b, 0x4005, 0xa99e, 0x0010, 0xa89b,
-	0x4006, 0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x0005, 0xa89b,
-	0x4000, 0x2001, 0x195d, 0x2004, 0xd0fc, 0x1128, 0x080c, 0x55af,
-	0x0110, 0x9006, 0x0018, 0x900e, 0x9085, 0x0001, 0x2001, 0x0000,
-	0x0005, 0x81ff, 0x1904, 0x33fd, 0x798c, 0x2001, 0x195c, 0x918c,
-	0x8000, 0x2102, 0x080c, 0x4a78, 0x0904, 0x3400, 0x080c, 0x6746,
-	0x0120, 0x080c, 0x674e, 0x1904, 0x3400, 0x080c, 0x64bb, 0x0904,
-	0x33fd, 0x080c, 0x6583, 0x0904, 0x33fd, 0x2001, 0x195c, 0x2004,
-	0xd0fc, 0x1904, 0x33cb, 0x0804, 0x4405, 0xa9a4, 0x2001, 0x195c,
-	0x918c, 0x8000, 0xc18d, 0x2102, 0x080c, 0x4a83, 0x01a0, 0x080c,
-	0x6746, 0x0118, 0x080c, 0x674e, 0x1170, 0x080c, 0x64bb, 0x2009,
-	0x0002, 0x0128, 0x080c, 0x6583, 0x1170, 0x2009, 0x0003, 0xa89b,
-	0x4005, 0xa99e, 0x0010, 0xa89b, 0x4006, 0x900e, 0x9085, 0x0001,
-	0x2001, 0x0030, 0x0005, 0xa89b, 0x4000, 0x2001, 0x195c, 0x2004,
-	0xd0fc, 0x1128, 0x080c, 0x55af, 0x0110, 0x9006, 0x0018, 0x900e,
-	0x9085, 0x0001, 0x2001, 0x0000, 0x0005, 0x6100, 0x0804, 0x33cb,
-	0x080c, 0x4a90, 0x0904, 0x3400, 0x080c, 0x55bb, 0x1904, 0x33fd,
-	0x79a8, 0xd184, 0x1158, 0xb834, 0x8007, 0x789e, 0xb830, 0x8007,
-	0x789a, 0xbb2c, 0x831f, 0xba28, 0x8217, 0x0050, 0xb824, 0x8007,
-	0x789e, 0xb820, 0x8007, 0x789a, 0xbb1c, 0x831f, 0xba18, 0x8217,
-	0xb900, 0x918c, 0x0202, 0x0804, 0x33cb, 0x78a8, 0x909c, 0x0003,
-	0xd0ac, 0x1158, 0xd0b4, 0x1148, 0x939a, 0x0003, 0x1a04, 0x33fd,
-	0x6258, 0x7884, 0x9206, 0x1904, 0x45d5, 0x2031, 0x1848, 0x2009,
-	0x013c, 0x2136, 0x2001, 0x1840, 0x2009, 0x000c, 0x7a8c, 0x7b88,
-	0x7c9c, 0x7d98, 0x2039, 0x0001, 0x0006, 0x78a8, 0x9084, 0x0080,
-	0x15b8, 0x0006, 0x0036, 0x2001, 0x1a5e, 0x201c, 0x7b9a, 0x2003,
-	0x0000, 0x2001, 0x1a5f, 0x201c, 0x7b9e, 0x2003, 0x0000, 0x2001,
-	0x1a60, 0x201c, 0x7ba2, 0x2003, 0x0000, 0x2001, 0x1a5a, 0x201c,
-	0x7baa, 0x2003, 0x0000, 0x2001, 0x1a61, 0x201c, 0x7bb2, 0x2003,
-	0x0000, 0x003e, 0x000e, 0x0126, 0x2091, 0x8000, 0x0036, 0x2001,
-	0x185b, 0x201c, 0x7bb6, 0x2003, 0x0000, 0x2001, 0x185c, 0x201c,
-	0x7bba, 0x2003, 0x0000, 0x003e, 0x012e, 0x000e, 0x0804, 0x4aa9,
-	0x000e, 0x2031, 0x0000, 0x2061, 0x18b9, 0x2c44, 0xa66e, 0xa17e,
-	0xa776, 0xa07a, 0xa292, 0xa396, 0xa49a, 0xa59e, 0x080c, 0x10eb,
-	0x7007, 0x0002, 0x701f, 0x45f5, 0x0005, 0x81ff, 0x1904, 0x33fd,
-	0x080c, 0x4a90, 0x0904, 0x3400, 0x080c, 0x6746, 0x1904, 0x33fd,
-	0x00c6, 0x080c, 0x4a61, 0x00ce, 0x0904, 0x33fd, 0xa86b, 0x0000,
-	0xa86c, 0xc0fd, 0xa86e, 0x7ea8, 0x080c, 0xbabf, 0x0904, 0x33fd,
-	0x7007, 0x0003, 0x701f, 0x462f, 0x0005, 0x0126, 0x2091, 0x8000,
-	0x0006, 0x0036, 0x2001, 0x185b, 0x201c, 0x7bb6, 0x2003, 0x0000,
-	0x2001, 0x185c, 0x201c, 0x7bba, 0x2003, 0x0000, 0x003e, 0x000e,
-	0x012e, 0x080c, 0x40f8, 0x0006, 0x0036, 0x2001, 0x1a5e, 0x201c,
-	0x7b9a, 0x2003, 0x0000, 0x2001, 0x1a5f, 0x201c, 0x7b9e, 0x2003,
-	0x0000, 0x2001, 0x1a60, 0x201c, 0x7ba2, 0x2003, 0x0000, 0x2001,
-	0x1a5a, 0x201c, 0x7baa, 0x2003, 0x0000, 0x2001, 0x1a61, 0x201c,
-	0x7bb2, 0x2003, 0x0000, 0x003e, 0x000e, 0x0804, 0x33cb, 0xa830,
-	0x9086, 0x0100, 0x0904, 0x33fd, 0x8906, 0x8006, 0x8007, 0x90bc,
-	0x003f, 0x9084, 0xffc0, 0x9080, 0x001c, 0x2009, 0x000c, 0x7a8c,
-	0x7b88, 0x7c9c, 0x7d98, 0x0804, 0x4aa9, 0xa8b4, 0x909c, 0x0003,
-	0xd0ac, 0x1150, 0xd0b4, 0x1140, 0x939a, 0x0003, 0x1a04, 0x4695,
-	0x6258, 0xa89c, 0x9206, 0x11c8, 0x2031, 0x1848, 0x2009, 0x013c,
-	0x2136, 0x2001, 0x1840, 0x2009, 0x000c, 0xaaa4, 0xaba0, 0xacac,
-	0xada8, 0x2031, 0x0000, 0x2039, 0x0001, 0x2041, 0x1247, 0x080c,
-	0xa45b, 0x1528, 0x2009, 0x0002, 0x0420, 0xa99c, 0x080c, 0x6411,
-	0x0118, 0x2009, 0x000a, 0x0408, 0x080c, 0x6746, 0x2009, 0x0009,
-	0x11c0, 0x0096, 0x080c, 0x1001, 0x1120, 0x009e, 0x2009, 0x0002,
-	0x0080, 0x2900, 0x009e, 0xa806, 0xa86c, 0xc0fc, 0xa86e, 0xaeb4,
-	0x96b4, 0x000b, 0x080c, 0xbabf, 0x2009, 0x0003, 0x0110, 0x9006,
-	0x0005, 0xa89b, 0x4005, 0xa99e, 0x0010, 0xa89b, 0x4006, 0x900e,
-	0x9085, 0x0001, 0x2001, 0x0030, 0x0005, 0xa87f, 0x0000, 0xa887,
-	0x0000, 0xa89b, 0x4000, 0x0126, 0x2091, 0x8000, 0x0006, 0x0036,
-	0x2001, 0x185b, 0x201c, 0xabc2, 0x2003, 0x0000, 0x2001, 0x185c,
-	0x201c, 0xabc6, 0x2003, 0x0000, 0x003e, 0x000e, 0x012e, 0xa8b4,
-	0xd0bc, 0x0178, 0x0126, 0x2091, 0x8000, 0x20a9, 0x001e, 0x20a1,
-	0x1840, 0x20e9, 0x0001, 0x9006, 0x4004, 0x2009, 0x013c, 0x200a,
-	0x012e, 0x0006, 0x0036, 0x2001, 0x1a5e, 0x201c, 0xabaa, 0x2003,
-	0x0000, 0x2001, 0x1a5f, 0x201c, 0xabae, 0x2003, 0x0000, 0x2001,
-	0x1a60, 0x201c, 0xabb2, 0x2003, 0x0000, 0x2001, 0x1a5a, 0x201c,
-	0xabb6, 0x2003, 0x0000, 0x2001, 0x1a61, 0x201c, 0xabbe, 0x2003,
-	0x0000, 0x003e, 0x000e, 0x0005, 0x9006, 0x080c, 0x2708, 0x78a8,
-	0x9084, 0x00ff, 0x9086, 0x00ff, 0x0118, 0x81ff, 0x1904, 0x33fd,
-	0x080c, 0x72e5, 0x190c, 0x5ebb, 0x7888, 0x908a, 0x1000, 0x1a04,
-	0x3400, 0x7984, 0x9186, 0x00ff, 0x0138, 0x9182, 0x007f, 0x1a04,
-	0x3400, 0x2100, 0x080c, 0x26d2, 0x0026, 0x00c6, 0x0126, 0x2091,
-	0x8000, 0x2061, 0x19d7, 0x601b, 0x0000, 0x601f, 0x0000, 0x607b,
-	0x0000, 0x607f, 0x0000, 0x080c, 0x72e5, 0x1158, 0x080c, 0x75dc,
-	0x080c, 0x5ef6, 0x9085, 0x0001, 0x080c, 0x732a, 0x080c, 0x7212,
-	0x00d0, 0x080c, 0x9e89, 0x2061, 0x0100, 0x2001, 0x1817, 0x2004,
-	0x9084, 0x00ff, 0x810f, 0x9105, 0x604a, 0x6043, 0x0090, 0x6043,
-	0x0010, 0x2009, 0x1975, 0x200b, 0x0000, 0x2009, 0x002d, 0x2011,
-	0x5de1, 0x080c, 0x8432, 0x7984, 0x080c, 0x72e5, 0x1110, 0x2009,
-	0x00ff, 0x7a88, 0x080c, 0x4468, 0x012e, 0x00ce, 0x002e, 0x0804,
-	0x33cb, 0x7984, 0x080c, 0x63c1, 0x2b08, 0x1904, 0x3400, 0x0804,
-	0x33cb, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x33fd, 0x60d8,
-	0xd0ac, 0x1130, 0xd09c, 0x1120, 0x2009, 0x0005, 0x0804, 0x33fd,
-	0x080c, 0x4a61, 0x1120, 0x2009, 0x0002, 0x0804, 0x33fd, 0x7984,
-	0x81ff, 0x0904, 0x3400, 0x9192, 0x0021, 0x1a04, 0x3400, 0x7a8c,
-	0x7b88, 0x7c9c, 0x7d98, 0xa85c, 0x9080, 0x001a, 0x702a, 0xaf60,
-	0x7736, 0x080c, 0x4aa6, 0x701f, 0x478c, 0x7880, 0x9086, 0x006e,
-	0x0110, 0x701f, 0x5049, 0x0005, 0x2009, 0x0080, 0x080c, 0x6411,
-	0x1118, 0x080c, 0x6746, 0x0120, 0x2021, 0x400a, 0x0804, 0x33cd,
-	0x00d6, 0x0096, 0xa968, 0xaa70, 0xab74, 0xac78, 0xad7c, 0xae80,
-	0xa888, 0x90be, 0x0100, 0x0904, 0x4825, 0x90be, 0x0112, 0x0904,
-	0x4825, 0x90be, 0x0113, 0x0904, 0x4825, 0x90be, 0x0114, 0x0904,
-	0x4825, 0x90be, 0x0117, 0x0904, 0x4825, 0x90be, 0x011a, 0x0904,
-	0x4825, 0x90be, 0x011c, 0x0904, 0x4825, 0x90be, 0x0121, 0x0904,
-	0x480c, 0x90be, 0x0131, 0x0904, 0x480c, 0x90be, 0x0171, 0x0904,
-	0x4825, 0x90be, 0x0173, 0x0904, 0x4825, 0x90be, 0x01a1, 0x1128,
-	0xa898, 0x8007, 0xa89a, 0x0804, 0x4830, 0x90be, 0x0212, 0x0904,
-	0x4819, 0x90be, 0x0213, 0x05e8, 0x90be, 0x0214, 0x0500, 0x90be,
-	0x0217, 0x0188, 0x90be, 0x021a, 0x1120, 0xa8a0, 0x8007, 0xa8a2,
-	0x04e0, 0x90be, 0x021f, 0x05c8, 0x90be, 0x0300, 0x05b0, 0x009e,
-	0x00de, 0x0804, 0x3400, 0x7028, 0x9080, 0x0010, 0x2098, 0x20a0,
-	0x7034, 0x20e0, 0x20e8, 0x20a9, 0x0007, 0x080c, 0x486e, 0x7028,
-	0x9080, 0x000e, 0x2098, 0x20a0, 0x7034, 0x20e0, 0x20e8, 0x20a9,
-	0x0001, 0x080c, 0x486e, 0x00c8, 0x7028, 0x9080, 0x000c, 0x2098,
-	0x20a0, 0x7034, 0x20e0, 0x20e8, 0x20a9, 0x0001, 0x080c, 0x487b,
-	0x00b8, 0x7028, 0x9080, 0x000e, 0x2098, 0x20a0, 0x7034, 0x20e0,
-	0x20e8, 0x20a9, 0x0001, 0x080c, 0x487b, 0x7028, 0x9080, 0x000c,
-	0x2098, 0x20a0, 0x7034, 0x20e0, 0x20e8, 0x20a9, 0x0001, 0x04f1,
-	0x00c6, 0x080c, 0x4a61, 0x0550, 0xa86c, 0xc0fd, 0xa86e, 0xa86b,
-	0x0119, 0x9006, 0xa886, 0xa883, 0x0020, 0xa88f, 0x0001, 0x810b,
-	0xa9b2, 0xa8b6, 0xaaba, 0xabbe, 0xacc2, 0xadc6, 0xa9ca, 0xa8ce,
-	0x00ce, 0x009e, 0x00de, 0xa86a, 0xa822, 0xa86c, 0xc0fd, 0xa86e,
-	0xa804, 0x2048, 0x080c, 0xbada, 0x1120, 0x2009, 0x0003, 0x0804,
-	0x33fd, 0x7007, 0x0003, 0x701f, 0x4865, 0x0005, 0x00ce, 0x009e,
-	0x00de, 0x2009, 0x0002, 0x0804, 0x33fd, 0xa820, 0x9086, 0x8001,
-	0x1904, 0x33cb, 0x2009, 0x0004, 0x0804, 0x33fd, 0x0016, 0x0026,
-	0x3510, 0x20a9, 0x0002, 0x4002, 0x4104, 0x4004, 0x8211, 0x1dc8,
-	0x002e, 0x001e, 0x0005, 0x0016, 0x0026, 0x0036, 0x0046, 0x3520,
-	0x20a9, 0x0004, 0x4002, 0x4304, 0x4204, 0x4104, 0x4004, 0x8421,
-	0x1db8, 0x004e, 0x003e, 0x002e, 0x001e, 0x0005, 0x81ff, 0x0120,
-	0x2009, 0x0001, 0x0804, 0x33fd, 0x60d8, 0xd0ac, 0x1188, 0x2009,
-	0x180d, 0x210c, 0xd18c, 0x0130, 0xd09c, 0x0120, 0x2009, 0x0016,
-	0x0804, 0x33fd, 0xd09c, 0x1120, 0x2009, 0x0005, 0x0804, 0x33fd,
-	0x7984, 0x78a8, 0x2040, 0x080c, 0x9e82, 0x1120, 0x9182, 0x007f,
-	0x0a04, 0x3400, 0x9186, 0x00ff, 0x0904, 0x3400, 0x9182, 0x0800,
-	0x1a04, 0x3400, 0x7a8c, 0x7b88, 0x6078, 0x9306, 0x1158, 0x607c,
-	0x924e, 0x0904, 0x3400, 0x080c, 0x9e82, 0x1120, 0x99cc, 0xff00,
-	0x0904, 0x3400, 0x0126, 0x2091, 0x8000, 0x2001, 0x180d, 0x2004,
-	0xd08c, 0x0190, 0x9386, 0x00ff, 0x0178, 0x0026, 0x2011, 0x8008,
-	0x080c, 0x6781, 0x002e, 0x0140, 0x918d, 0x8000, 0x080c, 0x67cb,
-	0x1118, 0x2001, 0x4009, 0x0420, 0x080c, 0x497d, 0x0528, 0x90c6,
-	0x4000, 0x1138, 0x00c6, 0x0006, 0x080c, 0x6643, 0x000e, 0x00ce,
-	0x00b8, 0x90c6, 0x4007, 0x1110, 0x2408, 0x0090, 0x90c6, 0x4008,
-	0x1118, 0x2708, 0x2610, 0x0060, 0x90c6, 0x4009, 0x1108, 0x0040,
-	0x90c6, 0x4006, 0x1108, 0x0020, 0x2001, 0x4005, 0x2009, 0x000a,
-	0x2020, 0x012e, 0x0804, 0x33cd, 0x2b00, 0x7026, 0x0016, 0x00b6,
-	0x00c6, 0x00e6, 0x2c70, 0x080c, 0x9f5b, 0x05a8, 0x2b00, 0x6012,
-	0x080c, 0xbc97, 0x2e58, 0x00ee, 0x00e6, 0x00c6, 0x080c, 0x4a61,
-	0x00ce, 0x2b70, 0x1158, 0x080c, 0x9f18, 0x00ee, 0x00ce, 0x00be,
-	0x001e, 0x012e, 0x2009, 0x0002, 0x0804, 0x33fd, 0x900e, 0xa96a,
-	0xa96e, 0x2900, 0x6016, 0xa932, 0xa86c, 0xc0fd, 0xd88c, 0x0108,
-	0xc0f5, 0xa86e, 0x080c, 0x3066, 0x6023, 0x0001, 0x9006, 0x080c,
-	0x635e, 0x2001, 0x0002, 0x080c, 0x6372, 0x2009, 0x0002, 0x080c,
-	0x9f88, 0x9085, 0x0001, 0x00ee, 0x00ce, 0x00be, 0x001e, 0x012e,
-	0x1120, 0x2009, 0x0003, 0x0804, 0x33fd, 0x7007, 0x0003, 0x701f,
-	0x495a, 0x0005, 0xa830, 0x2009, 0x180d, 0x210c, 0xd18c, 0x0140,
-	0x2008, 0x918e, 0xdead, 0x1120, 0x2021, 0x4009, 0x0804, 0x33cd,
-	0x9086, 0x0100, 0x7024, 0x2058, 0x1138, 0x2009, 0x0004, 0xba04,
-	0x9294, 0x00ff, 0x0804, 0x54f7, 0x900e, 0xa86c, 0xd0f4, 0x1904,
-	0x33cb, 0x080c, 0x6643, 0x0804, 0x33cb, 0x00e6, 0x00d6, 0x0096,
-	0x83ff, 0x0904, 0x49c3, 0x902e, 0x080c, 0x9e82, 0x0130, 0x9026,
-	0x20a9, 0x0800, 0x2071, 0x1000, 0x0030, 0x2021, 0x007f, 0x20a9,
-	0x0781, 0x2071, 0x107f, 0x2e04, 0x9005, 0x11b0, 0x2100, 0x9406,
-	0x15d8, 0x2428, 0x94ce, 0x007f, 0x1120, 0x92ce, 0xfffd, 0x1518,
-	0x0030, 0x94ce, 0x0080, 0x1130, 0x92ce, 0xfffc, 0x11e0, 0x93ce,
-	0x00ff, 0x11c8, 0xc5fd, 0x0440, 0x2058, 0xbf10, 0x2700, 0x9306,
-	0x11a8, 0xbe14, 0x2600, 0x9206, 0x1188, 0x2400, 0x9106, 0x1140,
-	0xd884, 0x0558, 0x080c, 0x6746, 0x1540, 0x2001, 0x4000, 0x0430,
+	0x2009, 0x000c, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x0804, 0x4b59,
+	0xa8b4, 0x909c, 0x0003, 0xd0ac, 0x1150, 0xd0b4, 0x1140, 0x939a,
+	0x0003, 0x1a04, 0x4738, 0x6258, 0xa89c, 0x9206, 0x11c8, 0x2031,
+	0x1848, 0x2009, 0x013c, 0x2136, 0x2001, 0x1840, 0x2009, 0x000c,
+	0xaaa4, 0xaba0, 0xacac, 0xada8, 0x2031, 0x0000, 0x2039, 0x0001,
+	0x2041, 0x1253, 0x080c, 0xa8fb, 0x1528, 0x2009, 0x0002, 0x0420,
+	0xa99c, 0x080c, 0x64fc, 0x0118, 0x2009, 0x000a, 0x0408, 0x080c,
+	0x686d, 0x2009, 0x0009, 0x11c0, 0x0096, 0x080c, 0x100d, 0x1120,
+	0x009e, 0x2009, 0x0002, 0x0080, 0x2900, 0x009e, 0xa806, 0xa86c,
+	0xc0fc, 0xa86e, 0xaeb4, 0x96b4, 0x000b, 0x080c, 0xc33a, 0x2009,
+	0x0003, 0x0110, 0x9006, 0x0005, 0xa89b, 0x4005, 0xa99e, 0x0010,
+	0xa89b, 0x4006, 0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x0005,
+	0xa87f, 0x0000, 0xa887, 0x0000, 0xa89b, 0x4000, 0x0126, 0x2091,
+	0x8000, 0x0006, 0x0036, 0x2001, 0x185b, 0x201c, 0xabc2, 0x2003,
+	0x0000, 0x2001, 0x185c, 0x201c, 0xabc6, 0x2003, 0x0000, 0x003e,
+	0x000e, 0x012e, 0xa8b4, 0xd0bc, 0x0178, 0x0126, 0x2091, 0x8000,
+	0x20a9, 0x001e, 0x20a1, 0x1840, 0x20e9, 0x0001, 0x9006, 0x4004,
+	0x2009, 0x013c, 0x200a, 0x012e, 0x0006, 0x0036, 0x2001, 0x1a5e,
+	0x201c, 0xabaa, 0x2003, 0x0000, 0x2001, 0x1a5f, 0x201c, 0xabae,
+	0x2003, 0x0000, 0x2001, 0x1a60, 0x201c, 0xabb2, 0x2003, 0x0000,
+	0x2001, 0x1a5a, 0x201c, 0xabb6, 0x2003, 0x0000, 0x2001, 0x1a61,
+	0x201c, 0xabbe, 0x2003, 0x0000, 0x003e, 0x000e, 0x0005, 0x9006,
+	0x080c, 0x2771, 0x78a8, 0x9084, 0x00ff, 0x9086, 0x00ff, 0x0118,
+	0x81ff, 0x1904, 0x3499, 0x080c, 0x7351, 0x190c, 0x5f78, 0x7888,
+	0x908a, 0x1000, 0x1a04, 0x349c, 0x7984, 0x9186, 0x00ff, 0x0138,
+	0x9182, 0x007f, 0x1a04, 0x349c, 0x2100, 0x080c, 0x273b, 0x0026,
+	0x00c6, 0x0126, 0x2091, 0x8000, 0x2061, 0x19d7, 0x601b, 0x0000,
+	0x601f, 0x0000, 0x607b, 0x0000, 0x607f, 0x0000, 0x080c, 0x7351,
+	0x1158, 0x080c, 0x764c, 0x080c, 0x5fb3, 0x9085, 0x0001, 0x080c,
+	0x7395, 0x080c, 0x727e, 0x00d0, 0x080c, 0xa30e, 0x2061, 0x0100,
+	0x2001, 0x1817, 0x2004, 0x9084, 0x00ff, 0x810f, 0x9105, 0x604a,
+	0x6043, 0x0090, 0x6043, 0x0010, 0x2009, 0x1975, 0x200b, 0x0000,
+	0x2009, 0x002d, 0x2011, 0x5e9e, 0x080c, 0x859e, 0x7984, 0x080c,
+	0x7351, 0x1110, 0x2009, 0x00ff, 0x7a88, 0x080c, 0x450b, 0x012e,
+	0x00ce, 0x002e, 0x0804, 0x3467, 0x7984, 0x080c, 0x6497, 0x2b08,
+	0x1904, 0x349c, 0x0804, 0x3467, 0x81ff, 0x0120, 0x2009, 0x0001,
+	0x0804, 0x3499, 0x60d8, 0xd0ac, 0x1130, 0xd09c, 0x1120, 0x2009,
+	0x0005, 0x0804, 0x3499, 0x080c, 0x4b11, 0x1120, 0x2009, 0x0002,
+	0x0804, 0x3499, 0x7984, 0x81ff, 0x0904, 0x349c, 0x9192, 0x0021,
+	0x1a04, 0x349c, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0xa85c, 0x9080,
+	0x001a, 0x702a, 0xaf60, 0x7736, 0x080c, 0x4b56, 0x701f, 0x482f,
+	0x7880, 0x9086, 0x006e, 0x0110, 0x701f, 0x5106, 0x0005, 0x2009,
+	0x0080, 0x080c, 0x64fc, 0x1118, 0x080c, 0x686d, 0x0120, 0x2021,
+	0x400a, 0x0804, 0x3469, 0x00d6, 0x0096, 0xa968, 0xaa70, 0xab74,
+	0xac78, 0xad7c, 0xae80, 0xa888, 0x90be, 0x0100, 0x0904, 0x48c8,
+	0x90be, 0x0112, 0x0904, 0x48c8, 0x90be, 0x0113, 0x0904, 0x48c8,
+	0x90be, 0x0114, 0x0904, 0x48c8, 0x90be, 0x0117, 0x0904, 0x48c8,
+	0x90be, 0x011a, 0x0904, 0x48c8, 0x90be, 0x011c, 0x0904, 0x48c8,
+	0x90be, 0x0121, 0x0904, 0x48af, 0x90be, 0x0131, 0x0904, 0x48af,
+	0x90be, 0x0171, 0x0904, 0x48c8, 0x90be, 0x0173, 0x0904, 0x48c8,
+	0x90be, 0x01a1, 0x1128, 0xa898, 0x8007, 0xa89a, 0x0804, 0x48d3,
+	0x90be, 0x0212, 0x0904, 0x48bc, 0x90be, 0x0213, 0x05e8, 0x90be,
+	0x0214, 0x0500, 0x90be, 0x0217, 0x0188, 0x90be, 0x021a, 0x1120,
+	0xa8a0, 0x8007, 0xa8a2, 0x04e0, 0x90be, 0x021f, 0x05c8, 0x90be,
+	0x0300, 0x05b0, 0x009e, 0x00de, 0x0804, 0x349c, 0x7028, 0x9080,
+	0x0010, 0x2098, 0x20a0, 0x7034, 0x20e0, 0x20e8, 0x20a9, 0x0007,
+	0x080c, 0x4911, 0x7028, 0x9080, 0x000e, 0x2098, 0x20a0, 0x7034,
+	0x20e0, 0x20e8, 0x20a9, 0x0001, 0x080c, 0x4911, 0x00c8, 0x7028,
+	0x9080, 0x000c, 0x2098, 0x20a0, 0x7034, 0x20e0, 0x20e8, 0x20a9,
+	0x0001, 0x080c, 0x491e, 0x00b8, 0x7028, 0x9080, 0x000e, 0x2098,
+	0x20a0, 0x7034, 0x20e0, 0x20e8, 0x20a9, 0x0001, 0x080c, 0x491e,
+	0x7028, 0x9080, 0x000c, 0x2098, 0x20a0, 0x7034, 0x20e0, 0x20e8,
+	0x20a9, 0x0001, 0x04f1, 0x00c6, 0x080c, 0x4b11, 0x0550, 0xa86c,
+	0xc0fd, 0xa86e, 0xa86b, 0x0119, 0x9006, 0xa886, 0xa883, 0x0020,
+	0xa88f, 0x0001, 0x810b, 0xa9b2, 0xa8b6, 0xaaba, 0xabbe, 0xacc2,
+	0xadc6, 0xa9ca, 0xa8ce, 0x00ce, 0x009e, 0x00de, 0xa86a, 0xa822,
+	0xa86c, 0xc0fd, 0xa86e, 0xa804, 0x2048, 0x080c, 0xc355, 0x1120,
+	0x2009, 0x0003, 0x0804, 0x3499, 0x7007, 0x0003, 0x701f, 0x4908,
+	0x0005, 0x00ce, 0x009e, 0x00de, 0x2009, 0x0002, 0x0804, 0x3499,
+	0xa820, 0x9086, 0x8001, 0x1904, 0x3467, 0x2009, 0x0004, 0x0804,
+	0x3499, 0x0016, 0x0026, 0x3510, 0x20a9, 0x0002, 0x4002, 0x4104,
+	0x4004, 0x8211, 0x1dc8, 0x002e, 0x001e, 0x0005, 0x0016, 0x0026,
+	0x0036, 0x0046, 0x3520, 0x20a9, 0x0004, 0x4002, 0x4304, 0x4204,
+	0x4104, 0x4004, 0x8421, 0x1db8, 0x004e, 0x003e, 0x002e, 0x001e,
+	0x0005, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x3499, 0x60d8,
+	0xd0ac, 0x1188, 0x2009, 0x180d, 0x210c, 0xd18c, 0x0130, 0xd09c,
+	0x0120, 0x2009, 0x0016, 0x0804, 0x3499, 0xd09c, 0x1120, 0x2009,
+	0x0005, 0x0804, 0x3499, 0x7984, 0x78a8, 0x2040, 0x080c, 0xa307,
+	0x1120, 0x9182, 0x007f, 0x0a04, 0x349c, 0x9186, 0x00ff, 0x0904,
+	0x349c, 0x9182, 0x0800, 0x1a04, 0x349c, 0x7a8c, 0x7b88, 0x6078,
+	0x9306, 0x1158, 0x607c, 0x924e, 0x0904, 0x349c, 0x080c, 0xa307,
+	0x1120, 0x99cc, 0xff00, 0x0904, 0x349c, 0x0126, 0x2091, 0x8000,
+	0x2001, 0x180d, 0x2004, 0xd08c, 0x0190, 0x9386, 0x00ff, 0x0178,
+	0x0026, 0x2011, 0x8008, 0x080c, 0x68a8, 0x002e, 0x0140, 0x918d,
+	0x8000, 0x080c, 0x68f2, 0x1118, 0x2001, 0x4009, 0x0420, 0x080c,
+	0x4a2b, 0x0528, 0x90c6, 0x4000, 0x1138, 0x00c6, 0x0006, 0x080c,
+	0x674b, 0x000e, 0x00ce, 0x00b8, 0x90c6, 0x4007, 0x1110, 0x2408,
+	0x0090, 0x90c6, 0x4008, 0x1118, 0x2708, 0x2610, 0x0060, 0x90c6,
+	0x4009, 0x1108, 0x0040, 0x90c6, 0x4006, 0x1108, 0x0020, 0x2001,
+	0x4005, 0x2009, 0x000a, 0x2020, 0x012e, 0x0804, 0x3469, 0x2b00,
+	0x7026, 0x0016, 0x00b6, 0x00c6, 0x00e6, 0x2c70, 0x080c, 0xa3ec,
+	0x0904, 0x49f9, 0x2b00, 0x6012, 0x080c, 0xc640, 0x2e58, 0x00ee,
+	0x00e6, 0x00c6, 0x080c, 0x4b11, 0x00ce, 0x2b70, 0x1158, 0x080c,
+	0xa39d, 0x00ee, 0x00ce, 0x00be, 0x001e, 0x012e, 0x2009, 0x0002,
+	0x0804, 0x3499, 0x900e, 0xa96a, 0xa96e, 0x2900, 0x6016, 0xa932,
+	0xa86c, 0xc0fd, 0xd88c, 0x0108, 0xc0f5, 0xa86e, 0x080c, 0x3102,
+	0x6023, 0x0001, 0x9006, 0x080c, 0x6434, 0x2001, 0x0002, 0x080c,
+	0x6448, 0x2009, 0x0002, 0x080c, 0xa419, 0x78a8, 0xd094, 0x0138,
+	0x00ee, 0x7024, 0x00e6, 0x2058, 0xb8bc, 0xc08d, 0xb8be, 0x9085,
+	0x0001, 0x00ee, 0x00ce, 0x00be, 0x001e, 0x012e, 0x1120, 0x2009,
+	0x0003, 0x0804, 0x3499, 0x7007, 0x0003, 0x701f, 0x4a08, 0x0005,
+	0xa830, 0x2009, 0x180d, 0x210c, 0xd18c, 0x0140, 0x2008, 0x918e,
+	0xdead, 0x1120, 0x2021, 0x4009, 0x0804, 0x3469, 0x9086, 0x0100,
+	0x7024, 0x2058, 0x1138, 0x2009, 0x0004, 0xba04, 0x9294, 0x00ff,
+	0x0804, 0x55b4, 0x900e, 0xa86c, 0xd0f4, 0x1904, 0x3467, 0x080c,
+	0x674b, 0x0804, 0x3467, 0x00e6, 0x00d6, 0x0096, 0x83ff, 0x0904,
+	0x4a73, 0x902e, 0x080c, 0xa307, 0x0130, 0x9026, 0x20a9, 0x0800,
+	0x2071, 0x1000, 0x0030, 0x2021, 0x007f, 0x20a9, 0x0781, 0x2071,
+	0x107f, 0x2e04, 0x9005, 0x11b0, 0x2100, 0x9406, 0x15e8, 0x2428,
+	0x94ce, 0x007f, 0x1120, 0x92ce, 0xfffd, 0x1528, 0x0030, 0x94ce,
+	0x0080, 0x1130, 0x92ce, 0xfffc, 0x11f0, 0x93ce, 0x00ff, 0x11d8,
+	0xc5fd, 0x0450, 0x2058, 0xbf10, 0x2700, 0x9306, 0x11b8, 0xbe14,
+	0x2600, 0x9206, 0x1198, 0x2400, 0x9106, 0x1150, 0xd884, 0x0568,
+	0xd894, 0x1558, 0x080c, 0x686d, 0x1540, 0x2001, 0x4000, 0x0430,
 	0x2001, 0x4007, 0x0418, 0x2001, 0x4006, 0x0400, 0x2400, 0x9106,
-	0x1158, 0xbe14, 0x87ff, 0x1128, 0x86ff, 0x0958, 0x080c, 0x9e82,
-	0x1940, 0x2001, 0x4008, 0x0090, 0x8420, 0x8e70, 0x1f04, 0x4993,
+	0x1158, 0xbe14, 0x87ff, 0x1128, 0x86ff, 0x0948, 0x080c, 0xa307,
+	0x1930, 0x2001, 0x4008, 0x0090, 0x8420, 0x8e70, 0x1f04, 0x4a41,
 	0x85ff, 0x1130, 0x2001, 0x4009, 0x0048, 0x2001, 0x0001, 0x0030,
-	0x080c, 0x63c1, 0x1dd0, 0xbb12, 0xba16, 0x9006, 0x9005, 0x009e,
+	0x080c, 0x6497, 0x1dd0, 0xbb12, 0xba16, 0x9006, 0x9005, 0x009e,
 	0x00de, 0x00ee, 0x0005, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804,
-	0x33fd, 0x080c, 0x4a61, 0x1120, 0x2009, 0x0002, 0x0804, 0x33fd,
+	0x3499, 0x080c, 0x4b11, 0x1120, 0x2009, 0x0002, 0x0804, 0x3499,
 	0xa86b, 0x0000, 0xa86c, 0xc0fd, 0xa86e, 0x7884, 0x9005, 0x0904,
-	0x3400, 0x9096, 0x00ff, 0x0120, 0x9092, 0x0004, 0x1a04, 0x3400,
-	0x2010, 0x2918, 0x080c, 0x3012, 0x1120, 0x2009, 0x0003, 0x0804,
-	0x33fd, 0x7007, 0x0003, 0x701f, 0x4a16, 0x0005, 0xa830, 0x9086,
-	0x0100, 0x1904, 0x33cb, 0x2009, 0x0004, 0x0804, 0x33fd, 0x7984,
-	0x080c, 0x9e82, 0x1120, 0x9182, 0x007f, 0x0a04, 0x3400, 0x9186,
-	0x00ff, 0x0904, 0x3400, 0x9182, 0x0800, 0x1a04, 0x3400, 0x2001,
-	0x9400, 0x080c, 0x5552, 0x1904, 0x33fd, 0x0804, 0x33cb, 0xa99c,
-	0x080c, 0x9e82, 0x1118, 0x9182, 0x007f, 0x0280, 0x9186, 0x00ff,
-	0x0168, 0x9182, 0x0800, 0x1250, 0x2001, 0x9400, 0x080c, 0x5552,
+	0x349c, 0x9096, 0x00ff, 0x0120, 0x9092, 0x0004, 0x1a04, 0x349c,
+	0x2010, 0x2918, 0x080c, 0x30a8, 0x1120, 0x2009, 0x0003, 0x0804,
+	0x3499, 0x7007, 0x0003, 0x701f, 0x4ac6, 0x0005, 0xa830, 0x9086,
+	0x0100, 0x1904, 0x3467, 0x2009, 0x0004, 0x0804, 0x3499, 0x7984,
+	0x080c, 0xa307, 0x1120, 0x9182, 0x007f, 0x0a04, 0x349c, 0x9186,
+	0x00ff, 0x0904, 0x349c, 0x9182, 0x0800, 0x1a04, 0x349c, 0x2001,
+	0x9400, 0x080c, 0x560f, 0x1904, 0x3499, 0x0804, 0x3467, 0xa99c,
+	0x080c, 0xa307, 0x1118, 0x9182, 0x007f, 0x0280, 0x9186, 0x00ff,
+	0x0168, 0x9182, 0x0800, 0x1250, 0x2001, 0x9400, 0x080c, 0x560f,
 	0x11a8, 0x0060, 0xa89b, 0x4005, 0xa99e, 0x0010, 0xa89b, 0x4006,
 	0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x0005, 0xa89b, 0x4000,
 	0x900e, 0x9085, 0x0001, 0x2001, 0x0000, 0x0005, 0x2009, 0x000a,
-	0x0c48, 0x080c, 0x1001, 0x0198, 0x9006, 0xa802, 0x7014, 0x9005,
+	0x0c48, 0x080c, 0x100d, 0x0198, 0x9006, 0xa802, 0x7014, 0x9005,
 	0x1120, 0x2900, 0x7016, 0x701a, 0x0040, 0x7018, 0xa802, 0x0086,
 	0x2040, 0x2900, 0xa006, 0x701a, 0x008e, 0x9085, 0x0001, 0x0005,
-	0x7984, 0x080c, 0x6411, 0x1120, 0x7e88, 0x9682, 0x4000, 0x0208,
-	0x905e, 0x8bff, 0x0005, 0xa99c, 0x080c, 0x6411, 0x1120, 0xaea0,
+	0x7984, 0x080c, 0x64fc, 0x1120, 0x7e88, 0x9682, 0x4000, 0x0208,
+	0x905e, 0x8bff, 0x0005, 0xa99c, 0x080c, 0x64fc, 0x1120, 0xaea0,
 	0x9682, 0x4000, 0x0208, 0x905e, 0x8bff, 0x0005, 0xae9c, 0x0008,
-	0x7e84, 0x2608, 0x080c, 0x6411, 0x1108, 0x0008, 0x905e, 0x8bff,
+	0x7e84, 0x2608, 0x080c, 0x64fc, 0x1108, 0x0008, 0x905e, 0x8bff,
 	0x0005, 0x0016, 0x7114, 0x81ff, 0x0128, 0x2148, 0xa904, 0x080c,
-	0x1033, 0x0cc8, 0x7116, 0x711a, 0x001e, 0x0005, 0x2031, 0x0001,
+	0x103f, 0x0cc8, 0x7116, 0x711a, 0x001e, 0x0005, 0x2031, 0x0001,
 	0x0010, 0x2031, 0x0000, 0x2061, 0x18b9, 0x2c44, 0xa66e, 0xa17e,
-	0xa776, 0xa07a, 0xa292, 0xa396, 0xa49a, 0xa59e, 0x080c, 0x10eb,
-	0x7007, 0x0002, 0x701f, 0x33cb, 0x0005, 0x00f6, 0x0126, 0x2091,
+	0xa776, 0xa07a, 0xa292, 0xa396, 0xa49a, 0xa59e, 0x080c, 0x10f7,
+	0x7007, 0x0002, 0x701f, 0x3467, 0x0005, 0x00f6, 0x0126, 0x2091,
 	0x8000, 0x2079, 0x0000, 0x2001, 0x18b1, 0x2004, 0x9005, 0x1190,
-	0x0e04, 0x4ada, 0x7a36, 0x7833, 0x0012, 0x7a82, 0x7b86, 0x7c8a,
-	0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x119d,
-	0x0804, 0x4b40, 0x0016, 0x0086, 0x0096, 0x00c6, 0x00e6, 0x2071,
+	0x0e04, 0x4b8a, 0x7a36, 0x7833, 0x0012, 0x7a82, 0x7b86, 0x7c8a,
+	0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x11a9,
+	0x0804, 0x4bf0, 0x0016, 0x0086, 0x0096, 0x00c6, 0x00e6, 0x2071,
 	0x189f, 0x7044, 0x9005, 0x1540, 0x7148, 0x9182, 0x0010, 0x0288,
-	0x7038, 0x2060, 0x080c, 0x1001, 0x0904, 0x4b38, 0xa84b, 0x0000,
-	0x2900, 0x7046, 0x2001, 0x0002, 0x9080, 0x1f70, 0x2005, 0xa846,
+	0x7038, 0x2060, 0x080c, 0x100d, 0x0904, 0x4be8, 0xa84b, 0x0000,
+	0x2900, 0x7046, 0x2001, 0x0002, 0x9080, 0x1fb8, 0x2005, 0xa846,
 	0x0098, 0x7038, 0x90e0, 0x0004, 0x2001, 0x18bb, 0x9c82, 0x18fb,
 	0x0210, 0x2061, 0x18bb, 0x2c00, 0x703a, 0x7148, 0x81ff, 0x1108,
 	0x703e, 0x8108, 0x714a, 0x0460, 0x7148, 0x8108, 0x714a, 0x7044,
-	0x2040, 0xa144, 0x2105, 0x0016, 0x908a, 0x0037, 0x1a0c, 0x0dc4,
+	0x2040, 0xa144, 0x2105, 0x0016, 0x908a, 0x0037, 0x1a0c, 0x0dc3,
 	0x2060, 0x001e, 0x8108, 0x2105, 0x9005, 0xa146, 0x1520, 0x080c,
-	0x1001, 0x1130, 0x8109, 0xa946, 0x7148, 0x8109, 0x714a, 0x00d8,
+	0x100d, 0x1130, 0x8109, 0xa946, 0x7148, 0x8109, 0x714a, 0x00d8,
 	0x9006, 0xa806, 0xa84a, 0xa046, 0x2800, 0xa802, 0x2900, 0xa006,
-	0x7046, 0x2001, 0x0002, 0x9080, 0x1f70, 0x2005, 0xa846, 0x0058,
+	0x7046, 0x2001, 0x0002, 0x9080, 0x1fb8, 0x2005, 0xa846, 0x0058,
 	0x2262, 0x6306, 0x640a, 0x00ee, 0x00ce, 0x009e, 0x008e, 0x001e,
-	0x012e, 0x00fe, 0x0005, 0x2c00, 0x9082, 0x001c, 0x0002, 0x4b62,
-	0x4b62, 0x4b64, 0x4b62, 0x4b62, 0x4b62, 0x4b68, 0x4b62, 0x4b62,
-	0x4b62, 0x4b6c, 0x4b62, 0x4b62, 0x4b62, 0x4b70, 0x4b62, 0x4b62,
-	0x4b62, 0x4b74, 0x4b62, 0x4b62, 0x4b62, 0x4b78, 0x4b62, 0x4b62,
-	0x4b62, 0x4b7d, 0x080c, 0x0dc4, 0xa27a, 0xa37e, 0xa482, 0x0898,
+	0x012e, 0x00fe, 0x0005, 0x2c00, 0x9082, 0x001c, 0x0002, 0x4c12,
+	0x4c12, 0x4c14, 0x4c12, 0x4c12, 0x4c12, 0x4c18, 0x4c12, 0x4c12,
+	0x4c12, 0x4c1c, 0x4c12, 0x4c12, 0x4c12, 0x4c20, 0x4c12, 0x4c12,
+	0x4c12, 0x4c24, 0x4c12, 0x4c12, 0x4c12, 0x4c28, 0x4c12, 0x4c12,
+	0x4c12, 0x4c2d, 0x080c, 0x0dc3, 0xa27a, 0xa37e, 0xa482, 0x0898,
 	0xa28a, 0xa38e, 0xa492, 0x0878, 0xa29a, 0xa39e, 0xa4a2, 0x0858,
 	0xa2aa, 0xa3ae, 0xa4b2, 0x0838, 0xa2ba, 0xa3be, 0xa4c2, 0x0818,
-	0xa2ca, 0xa3ce, 0xa4d2, 0x0804, 0x4b3b, 0xa2da, 0xa3de, 0xa4e2,
-	0x0804, 0x4b3b, 0x00e6, 0x2071, 0x189f, 0x7048, 0x9005, 0x0904,
-	0x4c14, 0x0126, 0x2091, 0x8000, 0x0e04, 0x4c13, 0x00f6, 0x2079,
+	0xa2ca, 0xa3ce, 0xa4d2, 0x0804, 0x4beb, 0xa2da, 0xa3de, 0xa4e2,
+	0x0804, 0x4beb, 0x00e6, 0x2071, 0x189f, 0x7048, 0x9005, 0x0904,
+	0x4cc4, 0x0126, 0x2091, 0x8000, 0x0e04, 0x4cc3, 0x00f6, 0x2079,
 	0x0000, 0x00c6, 0x0096, 0x0086, 0x0076, 0x9006, 0x2038, 0x7040,
 	0x2048, 0x9005, 0x0500, 0xa948, 0x2105, 0x0016, 0x908a, 0x0037,
-	0x1a0c, 0x0dc4, 0x2060, 0x001e, 0x8108, 0x2105, 0x9005, 0xa94a,
-	0x1904, 0x4c16, 0xa804, 0x9005, 0x090c, 0x0dc4, 0x7042, 0x2938,
-	0x2040, 0xa003, 0x0000, 0x2001, 0x0002, 0x9080, 0x1f70, 0x2005,
-	0xa04a, 0x0804, 0x4c16, 0x703c, 0x2060, 0x2c14, 0x6304, 0x6408,
+	0x1a0c, 0x0dc3, 0x2060, 0x001e, 0x8108, 0x2105, 0x9005, 0xa94a,
+	0x1904, 0x4cc6, 0xa804, 0x9005, 0x090c, 0x0dc3, 0x7042, 0x2938,
+	0x2040, 0xa003, 0x0000, 0x2001, 0x0002, 0x9080, 0x1fb8, 0x2005,
+	0xa04a, 0x0804, 0x4cc6, 0x703c, 0x2060, 0x2c14, 0x6304, 0x6408,
 	0x650c, 0x2200, 0x7836, 0x7833, 0x0012, 0x7882, 0x2300, 0x7886,
 	0x2400, 0x788a, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084,
-	0x190c, 0x119d, 0x87ff, 0x0118, 0x2748, 0x080c, 0x1033, 0x7048,
+	0x190c, 0x11a9, 0x87ff, 0x0118, 0x2748, 0x080c, 0x103f, 0x7048,
 	0x8001, 0x704a, 0x9005, 0x1170, 0x7040, 0x2048, 0x9005, 0x0128,
-	0x080c, 0x1033, 0x9006, 0x7042, 0x7046, 0x703b, 0x18bb, 0x703f,
+	0x080c, 0x103f, 0x9006, 0x7042, 0x7046, 0x703b, 0x18bb, 0x703f,
 	0x18bb, 0x0420, 0x7040, 0x9005, 0x1508, 0x7238, 0x2c00, 0x9206,
 	0x0148, 0x9c80, 0x0004, 0x90fa, 0x18fb, 0x0210, 0x2001, 0x18bb,
 	0x703e, 0x00a0, 0x9006, 0x703e, 0x703a, 0x7044, 0x9005, 0x090c,
-	0x0dc4, 0x2048, 0xa800, 0x9005, 0x1de0, 0x2900, 0x7042, 0x2001,
-	0x0002, 0x9080, 0x1f70, 0x2005, 0xa84a, 0x0000, 0x007e, 0x008e,
+	0x0dc3, 0x2048, 0xa800, 0x9005, 0x1de0, 0x2900, 0x7042, 0x2001,
+	0x0002, 0x9080, 0x1fb8, 0x2005, 0xa84a, 0x0000, 0x007e, 0x008e,
 	0x009e, 0x00ce, 0x00fe, 0x012e, 0x00ee, 0x0005, 0x2c00, 0x9082,
-	0x001c, 0x0002, 0x4c35, 0x4c35, 0x4c37, 0x4c35, 0x4c35, 0x4c35,
-	0x4c3c, 0x4c35, 0x4c35, 0x4c35, 0x4c41, 0x4c35, 0x4c35, 0x4c35,
-	0x4c46, 0x4c35, 0x4c35, 0x4c35, 0x4c4b, 0x4c35, 0x4c35, 0x4c35,
-	0x4c50, 0x4c35, 0x4c35, 0x4c35, 0x4c55, 0x080c, 0x0dc4, 0xaa78,
-	0xab7c, 0xac80, 0x0804, 0x4bc1, 0xaa88, 0xab8c, 0xac90, 0x0804,
-	0x4bc1, 0xaa98, 0xab9c, 0xaca0, 0x0804, 0x4bc1, 0xaaa8, 0xabac,
-	0xacb0, 0x0804, 0x4bc1, 0xaab8, 0xabbc, 0xacc0, 0x0804, 0x4bc1,
-	0xaac8, 0xabcc, 0xacd0, 0x0804, 0x4bc1, 0xaad8, 0xabdc, 0xace0,
-	0x0804, 0x4bc1, 0x0016, 0x0026, 0x0036, 0x00b6, 0x00c6, 0x2009,
-	0x007e, 0x080c, 0x6411, 0x2019, 0x0001, 0xb85c, 0xd0ac, 0x0110,
-	0x2019, 0x0000, 0x2011, 0x801b, 0x080c, 0x4abd, 0x00ce, 0x00be,
-	0x003e, 0x002e, 0x001e, 0x0005, 0x0026, 0x080c, 0x55a7, 0xd0c4,
-	0x0120, 0x2011, 0x8014, 0x080c, 0x4abd, 0x002e, 0x0005, 0x81ff,
-	0x1904, 0x33fd, 0x0126, 0x2091, 0x8000, 0x6030, 0xc08d, 0xc0ac,
-	0x6032, 0x080c, 0x72e5, 0x1158, 0x080c, 0x75dc, 0x080c, 0x5ef6,
-	0x9085, 0x0001, 0x080c, 0x732a, 0x080c, 0x7212, 0x0010, 0x080c,
-	0x5db5, 0x012e, 0x0804, 0x33cb, 0x81ff, 0x0120, 0x2009, 0x0001,
-	0x0804, 0x33fd, 0x080c, 0x55bb, 0x0120, 0x2009, 0x0007, 0x0804,
-	0x33fd, 0x080c, 0x673e, 0x0120, 0x2009, 0x0008, 0x0804, 0x33fd,
-	0x2001, 0x180d, 0x2004, 0xd08c, 0x0178, 0x0026, 0x2011, 0x0010,
-	0x080c, 0x6781, 0x002e, 0x0140, 0x7984, 0x080c, 0x67cb, 0x1120,
-	0x2009, 0x4009, 0x0804, 0x33fd, 0x7984, 0x080c, 0x63c1, 0x1904,
-	0x3400, 0x080c, 0x4a90, 0x0904, 0x3400, 0x2b00, 0x7026, 0x080c,
-	0x6746, 0x7888, 0x1138, 0x9084, 0x0001, 0x1120, 0x080c, 0x6643,
-	0x0804, 0x33cb, 0x080c, 0x4a61, 0x0904, 0x33fd, 0x9006, 0xa86a,
-	0xa832, 0xa86c, 0xc0fd, 0xa86e, 0x080c, 0xbb78, 0x0904, 0x33fd,
-	0x7007, 0x0003, 0x701f, 0x4d47, 0x0005, 0x2061, 0x1800, 0x080c,
-	0x55bb, 0x2009, 0x0007, 0x11f8, 0x080c, 0x673e, 0x0118, 0x2009,
-	0x0008, 0x00c8, 0xa99c, 0x080c, 0x63c1, 0x11c8, 0x080c, 0x4a8e,
-	0x01b0, 0x080c, 0x6746, 0xa8a0, 0x1130, 0x9084, 0x0001, 0x1118,
-	0x080c, 0x6643, 0x00a0, 0xa86c, 0xc0fc, 0xa86e, 0x080c, 0xbb78,
-	0x11b8, 0x2009, 0x0003, 0xa89b, 0x4005, 0xa99e, 0x0010, 0xa89b,
-	0x4006, 0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x0005, 0xa89b,
-	0x4000, 0xa99e, 0x0039, 0x9006, 0x918d, 0x0001, 0x2008, 0x0005,
-	0x9006, 0x0005, 0x20a9, 0x0004, 0xa860, 0x20e8, 0xa85c, 0x9080,
-	0x0032, 0x20a0, 0xb8b0, 0x20e0, 0xb8b4, 0x9080, 0x0006, 0x2098,
-	0x080c, 0x0f7e, 0x20a9, 0x0004, 0xa85c, 0x9080, 0x0036, 0x20a0,
-	0xb8b4, 0x9080, 0x000a, 0x2098, 0x080c, 0x0f7e, 0x0005, 0xa830,
-	0x2009, 0x180d, 0x210c, 0xd18c, 0x0140, 0x2008, 0x918e, 0xdead,
-	0x1120, 0x2021, 0x4009, 0x0804, 0x33cd, 0x9086, 0x0100, 0x7024,
-	0x2058, 0x1110, 0x0804, 0x54f7, 0x080c, 0x6643, 0x0804, 0x33cb,
-	0x080c, 0x55bb, 0x0120, 0x2009, 0x0007, 0x0804, 0x33fd, 0x7f84,
-	0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x080c, 0x4a61, 0x1120, 0x2009,
-	0x0002, 0x0804, 0x33fd, 0x900e, 0x2130, 0x7126, 0x7132, 0xa860,
-	0x20e8, 0x7036, 0xa85c, 0x9080, 0x0005, 0x702a, 0x20a0, 0x080c,
-	0x6411, 0x1904, 0x4dea, 0x080c, 0x6746, 0x0120, 0x080c, 0x674e,
-	0x1904, 0x4dea, 0x080c, 0x673e, 0x1130, 0x080c, 0x6640, 0x1118,
-	0xd79c, 0x0904, 0x4dea, 0xd794, 0x1110, 0xd784, 0x01a8, 0xb8b0,
-	0x20e0, 0xb8b4, 0x9080, 0x0006, 0x2098, 0x3400, 0xd794, 0x0198,
-	0x20a9, 0x0008, 0x4003, 0x2098, 0x20a0, 0x3d00, 0x20e0, 0x20a9,
-	0x0002, 0x080c, 0x487b, 0x0080, 0xb8b0, 0x20e0, 0xb8b4, 0x9080,
-	0x000a, 0x2098, 0x3400, 0x20a9, 0x0004, 0x4003, 0x2098, 0x20a0,
-	0x3d00, 0x20e0, 0x080c, 0x487b, 0x4104, 0xd794, 0x0528, 0xb8b0,
-	0x20e0, 0xb8b4, 0x2060, 0x9c80, 0x0000, 0x2098, 0x20a9, 0x0002,
-	0x4003, 0x9c80, 0x0003, 0x2098, 0x20a9, 0x0001, 0x4005, 0x9c80,
-	0x0004, 0x2098, 0x3400, 0x20a9, 0x0002, 0x4003, 0x2098, 0x20a0,
-	0x3d00, 0x20e0, 0x080c, 0x486e, 0x9c80, 0x0026, 0x2098, 0xb8b0,
-	0x20e0, 0x20a9, 0x0002, 0x4003, 0xd794, 0x0110, 0x96b0, 0x000b,
-	0x96b0, 0x0005, 0x8108, 0x080c, 0x9e82, 0x0118, 0x9186, 0x0800,
-	0x0040, 0xd78c, 0x0120, 0x9186, 0x0800, 0x0170, 0x0018, 0x9186,
-	0x007e, 0x0150, 0xd794, 0x0118, 0x9686, 0x0020, 0x0010, 0x9686,
-	0x0028, 0x0150, 0x0804, 0x4d7f, 0x86ff, 0x1120, 0x7124, 0x810b,
-	0x0804, 0x33cb, 0x7033, 0x0001, 0x7122, 0x7024, 0x9600, 0x7026,
-	0x772e, 0x2061, 0x18b9, 0x2c44, 0xa06f, 0x0000, 0xa67e, 0x7034,
-	0xa076, 0x7028, 0xa07a, 0xa292, 0xa396, 0xa49a, 0xa59e, 0x080c,
-	0x10eb, 0x7007, 0x0002, 0x701f, 0x4e26, 0x0005, 0x7030, 0x9005,
-	0x1180, 0x7120, 0x7028, 0x20a0, 0x772c, 0x9036, 0x7034, 0x20e8,
-	0x2061, 0x18b9, 0x2c44, 0xa290, 0xa394, 0xa498, 0xa59c, 0x0804,
-	0x4d7f, 0x7124, 0x810b, 0x0804, 0x33cb, 0x2029, 0x007e, 0x7984,
-	0x7a88, 0x7b8c, 0x7c98, 0x9184, 0xff00, 0x8007, 0x90e2, 0x0020,
-	0x0a04, 0x3400, 0x9502, 0x0a04, 0x3400, 0x9184, 0x00ff, 0x90e2,
-	0x0020, 0x0a04, 0x3400, 0x9502, 0x0a04, 0x3400, 0x9284, 0xff00,
-	0x8007, 0x90e2, 0x0020, 0x0a04, 0x3400, 0x9502, 0x0a04, 0x3400,
-	0x9284, 0x00ff, 0x90e2, 0x0020, 0x0a04, 0x3400, 0x9502, 0x0a04,
-	0x3400, 0x9384, 0xff00, 0x8007, 0x90e2, 0x0020, 0x0a04, 0x3400,
-	0x9502, 0x0a04, 0x3400, 0x9384, 0x00ff, 0x90e2, 0x0020, 0x0a04,
-	0x3400, 0x9502, 0x0a04, 0x3400, 0x9484, 0xff00, 0x8007, 0x90e2,
-	0x0020, 0x0a04, 0x3400, 0x9502, 0x0a04, 0x3400, 0x9484, 0x00ff,
-	0x90e2, 0x0020, 0x0a04, 0x3400, 0x9502, 0x0a04, 0x3400, 0x2061,
-	0x1965, 0x6102, 0x6206, 0x630a, 0x640e, 0x0804, 0x33cb, 0x0006,
-	0x080c, 0x55a7, 0xd0cc, 0x000e, 0x0005, 0x0006, 0x080c, 0x55ab,
-	0xd0bc, 0x000e, 0x0005, 0x6170, 0x7a84, 0x6300, 0x82ff, 0x1118,
-	0x7986, 0x0804, 0x33cb, 0x83ff, 0x1904, 0x3400, 0x2001, 0xfff0,
-	0x9200, 0x1a04, 0x3400, 0x2019, 0xffff, 0x6074, 0x9302, 0x9200,
-	0x0a04, 0x3400, 0x7986, 0x6272, 0x0804, 0x33cb, 0x080c, 0x55bb,
-	0x1904, 0x33fd, 0x7c88, 0x7d84, 0x7e98, 0x7f8c, 0x080c, 0x4a61,
-	0x0904, 0x33fd, 0x900e, 0x901e, 0x7326, 0x7332, 0xa860, 0x20e8,
-	0x7036, 0xa85c, 0x9080, 0x0003, 0x702a, 0x20a0, 0x91d8, 0x1000,
-	0x2b5c, 0x8bff, 0x0178, 0x080c, 0x6746, 0x0118, 0x080c, 0x674e,
-	0x1148, 0x20a9, 0x0001, 0xb814, 0x4004, 0xb810, 0x4004, 0x4104,
-	0x9398, 0x0003, 0x8108, 0x9182, 0x0800, 0x0120, 0x9386, 0x003c,
-	0x0170, 0x0c20, 0x83ff, 0x1148, 0x7224, 0x900e, 0x2001, 0x0003,
-	0x080c, 0x854b, 0x2208, 0x0804, 0x33cb, 0x7033, 0x0001, 0x7122,
-	0x7024, 0x9300, 0x7026, 0x2061, 0x18b9, 0x2c44, 0xa06f, 0x0000,
-	0xa37e, 0x7028, 0xa07a, 0x7034, 0xa076, 0xa492, 0xa596, 0xa69a,
-	0xa79e, 0x080c, 0x10eb, 0x7007, 0x0002, 0x701f, 0x4f18, 0x0005,
-	0x7030, 0x9005, 0x1178, 0x7120, 0x7028, 0x20a0, 0x901e, 0x7034,
-	0x20e8, 0x2061, 0x18b9, 0x2c44, 0xa490, 0xa594, 0xa698, 0xa79c,
-	0x0804, 0x4ed6, 0x7224, 0x900e, 0x2001, 0x0003, 0x080c, 0x854b,
-	0x2208, 0x0804, 0x33cb, 0x00f6, 0x00e6, 0x080c, 0x55bb, 0x2009,
-	0x0007, 0x1904, 0x4fac, 0x2071, 0x189f, 0x745c, 0x84ff, 0x2009,
-	0x000e, 0x1904, 0x4fac, 0xaca0, 0xad9c, 0xaea8, 0xafa4, 0x0096,
-	0x080c, 0x101a, 0x2009, 0x0002, 0x0904, 0x4fab, 0x2900, 0x705e,
-	0x900e, 0x901e, 0x7356, 0x7362, 0xa860, 0x7066, 0xa85c, 0x9080,
-	0x0003, 0x705a, 0x20a0, 0x91d8, 0x1000, 0x2b5c, 0x8bff, 0x0178,
-	0x080c, 0x6746, 0x0118, 0x080c, 0x674e, 0x1148, 0xb814, 0x20a9,
-	0x0001, 0x4004, 0xb810, 0x4004, 0x4104, 0x9398, 0x0003, 0x8108,
-	0x9182, 0x0800, 0x0120, 0x9386, 0x003c, 0x01e8, 0x0c20, 0x83ff,
-	0x11c0, 0x7254, 0x900e, 0x2001, 0x0003, 0x080c, 0x854b, 0x2208,
-	0x009e, 0xa89b, 0x4000, 0xa99e, 0x715c, 0x81ff, 0x090c, 0x0dc4,
-	0x2148, 0x080c, 0x1033, 0x9006, 0x705e, 0x918d, 0x0001, 0x2008,
-	0x0418, 0x7063, 0x0001, 0x7152, 0x7054, 0x9300, 0x7056, 0x2061,
-	0x18ba, 0x2c44, 0xa37e, 0x7058, 0xa07a, 0x7064, 0xa076, 0xa492,
-	0xa596, 0xa69a, 0xa79e, 0xa0a3, 0x4fb7, 0x000e, 0xa0a6, 0x080c,
-	0x10eb, 0x9006, 0x0048, 0x009e, 0xa89b, 0x4005, 0xa99e, 0x900e,
-	0x9085, 0x0001, 0x2001, 0x0030, 0x00ee, 0x00fe, 0x0005, 0x00f6,
-	0xa0a4, 0x904d, 0x090c, 0x0dc4, 0x00e6, 0x2071, 0x189f, 0xa070,
-	0x908e, 0x0100, 0x0138, 0xa87f, 0x0030, 0xa887, 0x0000, 0xa89b,
-	0x4002, 0x00d8, 0x7060, 0x9005, 0x1158, 0x7150, 0x7058, 0x20a0,
-	0x901e, 0x7064, 0x20e8, 0xa490, 0xa594, 0xa698, 0xa79c, 0x0428,
-	0xa87f, 0x0000, 0xa887, 0x0000, 0xa89b, 0x4000, 0x7254, 0x900e,
-	0x2001, 0x0003, 0x080c, 0x854b, 0xaa9e, 0x715c, 0x81ff, 0x090c,
-	0x0dc4, 0x2148, 0x080c, 0x1033, 0x705f, 0x0000, 0xa0a4, 0x2048,
-	0x0126, 0x2091, 0x8000, 0x080c, 0x6b1d, 0x012e, 0xa0a3, 0x0000,
-	0xa0a7, 0x0000, 0x00ee, 0x00fe, 0x0005, 0x91d8, 0x1000, 0x2b5c,
-	0x8bff, 0x0178, 0x080c, 0x6746, 0x0118, 0x080c, 0x674e, 0x1148,
-	0xb814, 0x20a9, 0x0001, 0x4004, 0xb810, 0x4004, 0x4104, 0x9398,
-	0x0003, 0x8108, 0x9182, 0x0800, 0x0120, 0x9386, 0x003c, 0x0518,
-	0x0c20, 0x83ff, 0x11f0, 0x7154, 0x810c, 0xa99e, 0xa89b, 0x4000,
-	0x715c, 0x81ff, 0x090c, 0x0dc4, 0x2148, 0x080c, 0x1033, 0x9006,
-	0x705e, 0x918d, 0x0001, 0x2008, 0xa0a4, 0x2048, 0x0126, 0x2091,
-	0x8000, 0x080c, 0x6b1d, 0x012e, 0xa0a3, 0x0000, 0xa0a7, 0x0000,
-	0x0070, 0x7063, 0x0001, 0x7152, 0x7054, 0x9300, 0x7056, 0xa37e,
-	0xa492, 0xa596, 0xa69a, 0xa79e, 0x080c, 0x10eb, 0x9006, 0x00ee,
-	0x0005, 0x0096, 0xa890, 0x90be, 0x7000, 0x0148, 0x90be, 0x7100,
-	0x0130, 0x90be, 0x7200, 0x0118, 0x009e, 0x0804, 0x3400, 0xa888,
-	0xa98c, 0x080c, 0x269f, 0x1518, 0x080c, 0x63c1, 0x1500, 0x7126,
-	0xbe12, 0xbd16, 0xae80, 0x080c, 0x4a61, 0x01f0, 0x080c, 0x4a61,
-	0x01d8, 0x009e, 0xa86b, 0x0000, 0xa86c, 0xc0fd, 0xa86e, 0xa823,
-	0x0000, 0xa804, 0x2048, 0x080c, 0xbafa, 0x1120, 0x2009, 0x0003,
-	0x0804, 0x33fd, 0x7007, 0x0003, 0x701f, 0x5085, 0x0005, 0x009e,
-	0x2009, 0x0002, 0x0804, 0x33fd, 0x0cd0, 0x7124, 0x080c, 0x3162,
-	0xa820, 0x9086, 0x8001, 0x1120, 0x2009, 0x0004, 0x0804, 0x33fd,
-	0x2900, 0x7022, 0xa804, 0x0096, 0x2048, 0x8906, 0x8006, 0x8007,
-	0x90bc, 0x003f, 0x9084, 0xffc0, 0x009e, 0x9080, 0x0002, 0x0076,
-	0x0006, 0x2098, 0x20a0, 0x27e0, 0x27e8, 0x20a9, 0x002a, 0x080c,
-	0x0f7e, 0xaa70, 0xab74, 0xac78, 0xad7c, 0x2061, 0x18b9, 0x2c44,
-	0xa06f, 0x0000, 0xae68, 0xaf90, 0x97c6, 0x7000, 0x0118, 0x97c6,
-	0x7100, 0x1148, 0x96c2, 0x0004, 0x0600, 0x2009, 0x0004, 0x000e,
-	0x007e, 0x0804, 0x4aa9, 0x97c6, 0x7200, 0x11b8, 0x96c2, 0x0054,
-	0x02a0, 0x000e, 0x007e, 0x2061, 0x18b9, 0x2c44, 0xa07a, 0xa776,
-	0xa07f, 0x002a, 0xa292, 0xa396, 0xa49a, 0xa59e, 0x080c, 0x10eb,
-	0x7007, 0x0002, 0x701f, 0x50e1, 0x0005, 0x000e, 0x007e, 0x0804,
-	0x3400, 0x7020, 0x2048, 0xa804, 0x2048, 0xa804, 0x2048, 0x8906,
-	0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x0002,
-	0x2098, 0x20a0, 0x27e0, 0x27e8, 0x20a9, 0x002a, 0x080c, 0x0f7e,
-	0x2100, 0x2238, 0x2061, 0x18b9, 0x2c44, 0xa290, 0xa394, 0xa498,
-	0xa59c, 0x2009, 0x002a, 0x0804, 0x4aa9, 0x81ff, 0x1904, 0x33fd,
-	0x798c, 0x2001, 0x195b, 0x918c, 0x8000, 0x2102, 0x080c, 0x4a78,
-	0x0904, 0x3400, 0x080c, 0x6746, 0x0120, 0x080c, 0x674e, 0x1904,
-	0x3400, 0x080c, 0x64bb, 0x0904, 0x33fd, 0x0126, 0x2091, 0x8000,
-	0x080c, 0x6597, 0x012e, 0x0904, 0x33fd, 0x2001, 0x195b, 0x2004,
-	0xd0fc, 0x1904, 0x33cb, 0x0804, 0x4405, 0xa9a4, 0x2001, 0x195b,
-	0x918c, 0x8000, 0xc18d, 0x2102, 0x080c, 0x4a83, 0x01a0, 0x080c,
-	0x6746, 0x0118, 0x080c, 0x674e, 0x1170, 0x080c, 0x64bb, 0x2009,
-	0x0002, 0x0128, 0x080c, 0x6597, 0x1170, 0x2009, 0x0003, 0xa89b,
-	0x4005, 0xa99e, 0x0010, 0xa89b, 0x4006, 0x900e, 0x9085, 0x0001,
-	0x2001, 0x0030, 0x0005, 0xa89b, 0x4000, 0x2001, 0x195b, 0x2004,
-	0xd0fc, 0x1128, 0x080c, 0x55af, 0x0110, 0x9006, 0x0018, 0x900e,
-	0x9085, 0x0001, 0x2001, 0x0000, 0x0005, 0x78a8, 0xd08c, 0x1118,
-	0xd084, 0x0904, 0x437a, 0x080c, 0x4a90, 0x0904, 0x3400, 0x080c,
-	0x4a61, 0x1120, 0x2009, 0x0002, 0x0804, 0x33fd, 0x080c, 0x6746,
-	0x0130, 0x908e, 0x0004, 0x0118, 0x908e, 0x0005, 0x15a0, 0x78a8,
-	0xd08c, 0x0120, 0xb800, 0xc08c, 0xb802, 0x0028, 0x080c, 0x55a7,
-	0xd0b4, 0x0904, 0x43b4, 0x7884, 0x908e, 0x007e, 0x0904, 0x43b4,
-	0x908e, 0x007f, 0x0904, 0x43b4, 0x908e, 0x0080, 0x0904, 0x43b4,
-	0xb800, 0xd08c, 0x1904, 0x43b4, 0xa86b, 0x0000, 0xa86c, 0xc0fd,
-	0xa86e, 0x080c, 0xbb19, 0x1120, 0x2009, 0x0003, 0x0804, 0x33fd,
-	0x7007, 0x0003, 0x701f, 0x51ad, 0x0005, 0x080c, 0x4a90, 0x0904,
-	0x3400, 0x0804, 0x43b4, 0x080c, 0x31bb, 0x0108, 0x0005, 0x2009,
-	0x1833, 0x210c, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x33fd,
-	0x080c, 0x55bb, 0x0120, 0x2009, 0x0007, 0x0804, 0x33fd, 0x080c,
-	0x673e, 0x0120, 0x2009, 0x0008, 0x0804, 0x33fd, 0xb89c, 0xd0a4,
-	0x1118, 0xd0ac, 0x1904, 0x43b4, 0x9006, 0xa86a, 0xa832, 0xa86c,
-	0xc0fd, 0xa86e, 0x080c, 0xbb78, 0x1120, 0x2009, 0x0003, 0x0804,
-	0x33fd, 0x7007, 0x0003, 0x701f, 0x51e6, 0x0005, 0xa830, 0x9086,
-	0x0100, 0x1120, 0x2009, 0x0004, 0x0804, 0x54f7, 0x080c, 0x4a90,
-	0x0904, 0x3400, 0x0804, 0x517f, 0x81ff, 0x2009, 0x0001, 0x1904,
-	0x33fd, 0x080c, 0x55bb, 0x2009, 0x0007, 0x1904, 0x33fd, 0x080c,
-	0x673e, 0x0120, 0x2009, 0x0008, 0x0804, 0x33fd, 0x080c, 0x4a90,
-	0x0904, 0x3400, 0x080c, 0x6746, 0x2009, 0x0009, 0x1904, 0x33fd,
-	0x080c, 0x4a61, 0x2009, 0x0002, 0x0904, 0x33fd, 0x9006, 0xa86a,
-	0xa832, 0xa86c, 0xc0fd, 0xa86e, 0x7988, 0xa95a, 0x9194, 0xfd00,
-	0x918c, 0x00ff, 0x9006, 0x82ff, 0x1128, 0xc0ed, 0xa952, 0x798c,
-	0xa956, 0x0038, 0x928e, 0x0100, 0x1904, 0x3400, 0xc0e5, 0xa952,
-	0xa956, 0xa83e, 0x080c, 0xbc98, 0x2009, 0x0003, 0x0904, 0x33fd,
-	0x7007, 0x0003, 0x701f, 0x523d, 0x0005, 0xa830, 0x9086, 0x0100,
-	0x2009, 0x0004, 0x0904, 0x33fd, 0x0804, 0x33cb, 0x7aa8, 0x9284,
-	0xc000, 0x0148, 0xd2ec, 0x01a0, 0x080c, 0x55bb, 0x1188, 0x2009,
-	0x0014, 0x0804, 0x33fd, 0xd2dc, 0x1578, 0x81ff, 0x2009, 0x0001,
-	0x1904, 0x33fd, 0x080c, 0x55bb, 0x2009, 0x0007, 0x1904, 0x33fd,
-	0xd2f4, 0x0138, 0x9284, 0x5000, 0xc0d5, 0x080c, 0x557d, 0x0804,
-	0x33cb, 0xd2fc, 0x0160, 0x080c, 0x4a90, 0x0904, 0x3400, 0x7984,
-	0x9284, 0x9000, 0xc0d5, 0x080c, 0x5552, 0x0804, 0x33cb, 0x080c,
-	0x4a90, 0x0904, 0x3400, 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006,
-	0x2009, 0x0009, 0x1904, 0x532c, 0x080c, 0x4a61, 0x2009, 0x0002,
-	0x0904, 0x532c, 0xa85c, 0x9080, 0x001c, 0xaf60, 0x2009, 0x0008,
-	0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x080c, 0x4aa6, 0x701f, 0x5299,
-	0x0005, 0xa870, 0x9086, 0x0500, 0x1138, 0xa874, 0x9005, 0x1120,
-	0xa878, 0x9084, 0xff00, 0x0110, 0x1904, 0x3400, 0xa86a, 0xa832,
-	0xa86c, 0xc0fd, 0xa86e, 0x080c, 0x4a90, 0x1110, 0x0804, 0x3400,
-	0x2009, 0x0043, 0x080c, 0xbd04, 0x2009, 0x0003, 0x0904, 0x532c,
-	0x7007, 0x0003, 0x701f, 0x52bd, 0x0005, 0xa830, 0x9086, 0x0100,
-	0x2009, 0x0004, 0x0904, 0x532c, 0x7984, 0x7aa8, 0x9284, 0x1000,
-	0xc0d5, 0x080c, 0x5552, 0x0804, 0x33cb, 0x00c6, 0xaab4, 0x9284,
-	0xc000, 0x0148, 0xd2ec, 0x0170, 0x080c, 0x55bb, 0x1158, 0x2009,
-	0x0014, 0x0804, 0x531b, 0x2061, 0x1800, 0x080c, 0x55bb, 0x2009,
-	0x0007, 0x15c8, 0xd2f4, 0x0130, 0x9284, 0x5000, 0xc0d5, 0x080c,
-	0x557d, 0x0058, 0xd2fc, 0x0180, 0x080c, 0x4a8e, 0x0590, 0xa99c,
-	0x9284, 0x9000, 0xc0d5, 0x080c, 0x5552, 0xa87f, 0x0000, 0xa887,
-	0x0000, 0xa89b, 0x4000, 0x0438, 0x080c, 0x4a8e, 0x0510, 0x080c,
-	0x6746, 0x2009, 0x0009, 0x11b8, 0xa8c8, 0x9086, 0x0500, 0x11c8,
-	0xa8cc, 0x9005, 0x11b0, 0xa8d0, 0x9084, 0xff00, 0x1190, 0x080c,
-	0x4a8e, 0x1108, 0x0070, 0x2009, 0x004b, 0x080c, 0xbd04, 0x2009,
-	0x0003, 0x0108, 0x0078, 0x0431, 0x19c0, 0xa89b, 0x4005, 0xa99e,
-	0x0010, 0xa89b, 0x4006, 0x900e, 0x9085, 0x0001, 0x2001, 0x0030,
-	0x00ce, 0x0005, 0x9006, 0x0ce0, 0x7aa8, 0xd2dc, 0x0904, 0x33fd,
-	0x0016, 0x7984, 0x9284, 0x1000, 0xc0fd, 0x080c, 0x5552, 0x001e,
-	0x1904, 0x33fd, 0x0804, 0x33cb, 0x00f6, 0x2d78, 0xaab4, 0x0021,
-	0x00fe, 0x0005, 0xaab4, 0xc2d5, 0xd2dc, 0x0150, 0x0016, 0xa99c,
-	0x9284, 0x1400, 0xc0fd, 0x080c, 0x5552, 0x001e, 0x9085, 0x0001,
-	0x0005, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x33fd, 0x080c,
-	0x55bb, 0x0120, 0x2009, 0x0007, 0x0804, 0x33fd, 0x7984, 0x7ea8,
-	0x96b4, 0x00ff, 0x080c, 0x6411, 0x1904, 0x3400, 0x9186, 0x007f,
-	0x0138, 0x080c, 0x6746, 0x0120, 0x2009, 0x0009, 0x0804, 0x33fd,
-	0x080c, 0x4a61, 0x1120, 0x2009, 0x0002, 0x0804, 0x33fd, 0xa86b,
-	0x0000, 0xa86c, 0xc0fd, 0xa86e, 0x2001, 0x0100, 0x8007, 0xa80a,
-	0x080c, 0xbb33, 0x1120, 0x2009, 0x0003, 0x0804, 0x33fd, 0x7007,
-	0x0003, 0x701f, 0x538c, 0x0005, 0xa808, 0x8007, 0x9086, 0x0100,
-	0x1120, 0x2009, 0x0004, 0x0804, 0x33fd, 0xa8e4, 0xa86a, 0xa810,
-	0x8007, 0x9084, 0x00ff, 0x800c, 0xa814, 0x8007, 0x9084, 0x00ff,
-	0x8004, 0x9080, 0x0002, 0x9108, 0x8906, 0x8006, 0x8007, 0x90bc,
-	0x003f, 0x9084, 0xffc0, 0x9080, 0x0004, 0x7a8c, 0x7b88, 0x7c9c,
-	0x7d98, 0x0804, 0x4aa9, 0x080c, 0x4a61, 0x1120, 0x2009, 0x0002,
-	0x0804, 0x33fd, 0x7984, 0x9194, 0xff00, 0x918c, 0x00ff, 0x8217,
-	0x82ff, 0x1118, 0x7023, 0x1990, 0x0040, 0x92c6, 0x0001, 0x1118,
-	0x7023, 0x19aa, 0x0010, 0x0804, 0x3400, 0x2009, 0x001a, 0x7a8c,
-	0x7b88, 0x7c9c, 0x7d98, 0xa85c, 0x9080, 0x001a, 0xaf60, 0x080c,
-	0x4aa6, 0x701f, 0x53dc, 0x0005, 0x2001, 0x182d, 0x2003, 0x0001,
-	0xa85c, 0x9080, 0x001a, 0x2098, 0xa860, 0x20e0, 0x20a9, 0x001a,
-	0x7020, 0x20a0, 0x20e9, 0x0001, 0x4003, 0x0804, 0x33cb, 0x080c,
-	0x4a61, 0x1120, 0x2009, 0x0002, 0x0804, 0x33fd, 0x7984, 0x9194,
-	0xff00, 0x918c, 0x00ff, 0x8217, 0x82ff, 0x1118, 0x2099, 0x1990,
-	0x0040, 0x92c6, 0x0001, 0x1118, 0x2099, 0x19aa, 0x0010, 0x0804,
-	0x3400, 0xa85c, 0x9080, 0x001a, 0x20a0, 0xa860, 0x20e8, 0x20a9,
-	0x001a, 0x20e1, 0x0001, 0x4003, 0x2009, 0x001a, 0x7a8c, 0x7b88,
-	0x7c9c, 0x7d98, 0xa85c, 0x9080, 0x001a, 0xaf60, 0x0804, 0x4aa9,
-	0x7884, 0x908a, 0x1000, 0x1a04, 0x3400, 0x0126, 0x2091, 0x8000,
-	0x8003, 0x800b, 0x810b, 0x9108, 0x00c6, 0x2061, 0x19d7, 0x614a,
-	0x00ce, 0x012e, 0x0804, 0x33cb, 0x00c6, 0x080c, 0x72e5, 0x1160,
-	0x080c, 0x75dc, 0x080c, 0x5ef6, 0x9085, 0x0001, 0x080c, 0x732a,
-	0x080c, 0x7212, 0x080c, 0x0dc4, 0x2061, 0x1800, 0x6030, 0xc09d,
-	0x6032, 0x080c, 0x5db5, 0x00ce, 0x0005, 0x2001, 0x1800, 0x2004,
-	0x908e, 0x0000, 0x0904, 0x33fd, 0x00c6, 0x7884, 0x9005, 0x0190,
-	0x7888, 0x2061, 0x1978, 0x2c0c, 0x2062, 0x080c, 0x2a75, 0x01a8,
-	0x080c, 0x2a7d, 0x0190, 0x080c, 0x2a85, 0x0178, 0x2162, 0x00ce,
-	0x0804, 0x3400, 0x2061, 0x0100, 0x6038, 0x9086, 0x0007, 0x1118,
-	0x2009, 0x0001, 0x0010, 0x2009, 0x0000, 0x7884, 0x9086, 0x0002,
-	0x1568, 0x2061, 0x0100, 0x6028, 0xc09c, 0x602a, 0x0026, 0x2011,
-	0x0003, 0x080c, 0x99d6, 0x2011, 0x0002, 0x080c, 0x99e0, 0x002e,
-	0x080c, 0x98ee, 0x0036, 0x901e, 0x080c, 0x9964, 0x003e, 0x60e3,
-	0x0000, 0x080c, 0xd33c, 0x080c, 0xd373, 0x9085, 0x0001, 0x080c,
-	0x732a, 0x9006, 0x080c, 0x2b65, 0x2001, 0x1800, 0x2003, 0x0004,
-	0x2001, 0x1984, 0x2003, 0x0000, 0x6027, 0x0008, 0x00ce, 0x0804,
-	0x33cb, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x33fd, 0x080c,
-	0x55bb, 0x0120, 0x2009, 0x0007, 0x0804, 0x33fd, 0x7984, 0x7ea8,
-	0x96b4, 0x00ff, 0x080c, 0x6411, 0x1904, 0x3400, 0x9186, 0x007f,
-	0x0138, 0x080c, 0x6746, 0x0120, 0x2009, 0x0009, 0x0804, 0x33fd,
-	0x080c, 0x4a61, 0x1120, 0x2009, 0x0002, 0x0804, 0x33fd, 0xa86b,
-	0x0000, 0xa86c, 0xc0fd, 0xa86e, 0x080c, 0xbb36, 0x1120, 0x2009,
-	0x0003, 0x0804, 0x33fd, 0x7007, 0x0003, 0x701f, 0x54e0, 0x0005,
-	0xa830, 0x9086, 0x0100, 0x1120, 0x2009, 0x0004, 0x0804, 0x33fd,
-	0xa8e4, 0xa86a, 0xa834, 0x8007, 0x800c, 0xa85c, 0x9080, 0x000c,
-	0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0xaf60, 0x0804, 0x4aa9, 0xa89c,
-	0x9086, 0x000d, 0x1904, 0x33fd, 0x2021, 0x4005, 0x0126, 0x2091,
-	0x8000, 0x0e04, 0x5504, 0x0010, 0x012e, 0x0cc0, 0x7c36, 0x9486,
-	0x4000, 0x0118, 0x7833, 0x0011, 0x0010, 0x7833, 0x0010, 0x7883,
-	0x4005, 0xa99c, 0x7986, 0xa9a8, 0x799a, 0xa9ac, 0x799e, 0x080c,
-	0x4a99, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c,
-	0x119d, 0x7007, 0x0001, 0x2091, 0x5000, 0x700f, 0x0000, 0x012e,
-	0x0005, 0x0126, 0x2091, 0x8000, 0x00c6, 0x2061, 0x19d7, 0x7984,
-	0x615a, 0x6156, 0x605f, 0x0000, 0x6053, 0x0009, 0x7898, 0x6072,
-	0x789c, 0x606e, 0x7888, 0x606a, 0x788c, 0x6066, 0x2001, 0x19e7,
-	0x2044, 0x2001, 0x19ee, 0xa07a, 0xa060, 0xa076, 0xa07f, 0x0001,
-	0xa083, 0x0002, 0xa06f, 0x0000, 0xa0a3, 0x0000, 0x00ce, 0x012e,
-	0x0804, 0x33cb, 0x0126, 0x2091, 0x8000, 0x00b6, 0x00c6, 0x90e4,
-	0xc000, 0x0168, 0x0006, 0xd0d4, 0x0130, 0x0036, 0x2019, 0x0029,
-	0x080c, 0x3180, 0x003e, 0x080c, 0xb99f, 0x000e, 0x1198, 0xd0e4,
-	0x0160, 0x9180, 0x1000, 0x2004, 0x905d, 0x0160, 0x080c, 0x5f10,
-	0x080c, 0x9e82, 0x0110, 0xb817, 0x0000, 0x9006, 0x00ce, 0x00be,
-	0x012e, 0x0005, 0x9085, 0x0001, 0x0cc8, 0x0126, 0x2091, 0x8000,
-	0x0156, 0x2010, 0x900e, 0x20a9, 0x0800, 0x0016, 0x9180, 0x1000,
-	0x2004, 0x9005, 0x0188, 0x9186, 0x007e, 0x0170, 0x9186, 0x007f,
-	0x0158, 0x9186, 0x0080, 0x0178, 0x9186, 0x00ff, 0x0128, 0x0026,
-	0x2200, 0x080c, 0x5552, 0x002e, 0x001e, 0x8108, 0x1f04, 0x5585,
-	0x015e, 0x012e, 0x0005, 0x080c, 0xbef8, 0x0db0, 0x0c80, 0x2001,
-	0x185f, 0x2004, 0x0005, 0x2001, 0x187e, 0x2004, 0x0005, 0x0006,
-	0x2001, 0x1810, 0x2004, 0xd0d4, 0x000e, 0x0005, 0x2001, 0x180e,
-	0x2004, 0xd0b4, 0x0005, 0x2001, 0x1800, 0x2004, 0x9086, 0x0003,
-	0x0005, 0x79a4, 0x81ff, 0x0904, 0x3400, 0x9182, 0x0081, 0x1a04,
-	0x3400, 0x810c, 0x0016, 0x080c, 0x4a61, 0x0170, 0x080c, 0x0f09,
-	0x2100, 0x2238, 0x7d84, 0x7c88, 0x7b8c, 0x7a90, 0x001e, 0x080c,
-	0x4aa6, 0x701f, 0x55e1, 0x0005, 0x001e, 0x2009, 0x0002, 0x0804,
-	0x33fd, 0x2079, 0x0000, 0x7d94, 0x7c98, 0x7ba8, 0x7aac, 0x79a4,
-	0x810c, 0x2061, 0x18b9, 0x2c44, 0xa774, 0xa078, 0x2071, 0x189f,
-	0x080c, 0x4aa9, 0x701f, 0x55f5, 0x0005, 0x2061, 0x18b9, 0x2c44,
-	0x0016, 0x0026, 0xa274, 0xa178, 0x080c, 0x0f11, 0x002e, 0x001e,
-	0x080c, 0x0fbe, 0x9006, 0xa802, 0xa806, 0x0804, 0x33cb, 0x0126,
-	0x0156, 0x0136, 0x0146, 0x01c6, 0x01d6, 0x00c6, 0x00d6, 0x00e6,
-	0x00f6, 0x2061, 0x0100, 0x2069, 0x0200, 0x2071, 0x1800, 0x6044,
-	0xd0a4, 0x11e8, 0xd084, 0x0118, 0x080c, 0x57b5, 0x0068, 0xd08c,
-	0x0118, 0x080c, 0x56be, 0x0040, 0xd094, 0x0118, 0x080c, 0x568e,
-	0x0018, 0xd09c, 0x0108, 0x0099, 0x00fe, 0x00ee, 0x00de, 0x00ce,
-	0x01de, 0x01ce, 0x014e, 0x013e, 0x015e, 0x012e, 0x0005, 0x0016,
-	0x6128, 0xd19c, 0x1110, 0xc19d, 0x612a, 0x001e, 0x0c68, 0x7030,
-	0xd09c, 0x1120, 0x6004, 0x9085, 0x0002, 0x6006, 0x7094, 0x9005,
-	0x0120, 0x7097, 0x0000, 0x708f, 0x0000, 0x624c, 0x9286, 0xf0f0,
-	0x1150, 0x6048, 0x9086, 0xf0f0, 0x0130, 0x624a, 0x6043, 0x0090,
-	0x6043, 0x0010, 0x0490, 0x9294, 0xff00, 0x9296, 0xf700, 0x0178,
-	0x7138, 0xd1a4, 0x1160, 0x6240, 0x9295, 0x0100, 0x6242, 0x9294,
-	0x0010, 0x0128, 0x2009, 0x00f7, 0x080c, 0x5e72, 0x00f0, 0x6040,
-	0x9084, 0x0010, 0x9085, 0x0140, 0x6042, 0x6043, 0x0000, 0x7083,
-	0x0000, 0x709f, 0x0001, 0x70c3, 0x0000, 0x70db, 0x0000, 0x2009,
-	0x1c80, 0x200b, 0x0000, 0x7093, 0x0000, 0x7087, 0x000f, 0x2009,
-	0x000f, 0x2011, 0x5d58, 0x080c, 0x8432, 0x0005, 0x2001, 0x1880,
-	0x2004, 0xd08c, 0x0110, 0x705b, 0xffff, 0x7084, 0x9005, 0x1528,
-	0x2011, 0x5d58, 0x080c, 0x835e, 0x6040, 0x9094, 0x0010, 0x9285,
-	0x0020, 0x6042, 0x20a9, 0x00c8, 0x6044, 0xd08c, 0x1168, 0x1f04,
-	0x56a4, 0x6242, 0x7097, 0x0000, 0x6040, 0x9094, 0x0010, 0x9285,
-	0x0080, 0x6042, 0x6242, 0x0048, 0x6242, 0x7097, 0x0000, 0x708b,
-	0x0000, 0x9006, 0x080c, 0x5efb, 0x0000, 0x0005, 0x7088, 0x908a,
-	0x0003, 0x1a0c, 0x0dc4, 0x000b, 0x0005, 0x56c8, 0x5719, 0x57b4,
-	0x00f6, 0x0016, 0x6900, 0x918c, 0x0800, 0x708b, 0x0001, 0x2001,
-	0x015d, 0x2003, 0x0000, 0x6803, 0x00fc, 0x20a9, 0x0004, 0x6800,
-	0x9084, 0x00fc, 0x0120, 0x1f04, 0x56d7, 0x080c, 0x0dc4, 0x68a0,
-	0x68a2, 0x689c, 0x689e, 0x6898, 0x689a, 0xa001, 0x918d, 0x1600,
-	0x6902, 0x001e, 0x6837, 0x0020, 0x080c, 0x5ed7, 0x2079, 0x1c00,
-	0x7833, 0x1101, 0x7837, 0x0000, 0x20e1, 0x0001, 0x2099, 0x1805,
-	0x20e9, 0x0001, 0x20a1, 0x1c0e, 0x20a9, 0x0004, 0x4003, 0x080c,
-	0x9d0b, 0x20e1, 0x0001, 0x2099, 0x1c00, 0x20e9, 0x0000, 0x20a1,
-	0x0240, 0x20a9, 0x0014, 0x4003, 0x60c3, 0x000c, 0x600f, 0x0000,
-	0x080c, 0x5d89, 0x00fe, 0x9006, 0x708e, 0x6043, 0x0008, 0x6042,
-	0x0005, 0x00f6, 0x708c, 0x708f, 0x0000, 0x9025, 0x0904, 0x5791,
-	0x6020, 0xd0b4, 0x1904, 0x578f, 0x719c, 0x81ff, 0x0904, 0x577d,
-	0x9486, 0x000c, 0x1904, 0x578a, 0x9480, 0x0018, 0x8004, 0x20a8,
-	0x080c, 0x5ed0, 0x2011, 0x0260, 0x2019, 0x1c00, 0x220c, 0x2304,
-	0x9106, 0x11e8, 0x8210, 0x8318, 0x1f04, 0x5736, 0x6043, 0x0004,
-	0x2061, 0x0140, 0x605b, 0xbc94, 0x605f, 0xf0f0, 0x2061, 0x0100,
-	0x6043, 0x0006, 0x708b, 0x0002, 0x7097, 0x0002, 0x2009, 0x07d0,
-	0x2011, 0x5d5f, 0x080c, 0x8432, 0x080c, 0x5ed7, 0x04c0, 0x080c,
-	0x5ed0, 0x2079, 0x0260, 0x7930, 0x918e, 0x1101, 0x1558, 0x7834,
-	0x9005, 0x1540, 0x7900, 0x918c, 0x00ff, 0x1118, 0x7804, 0x9005,
-	0x0190, 0x080c, 0x5ed0, 0x2011, 0x026e, 0x2019, 0x1805, 0x20a9,
-	0x0004, 0x220c, 0x2304, 0x9102, 0x0230, 0x11a0, 0x8210, 0x8318,
-	0x1f04, 0x5771, 0x0078, 0x709f, 0x0000, 0x080c, 0x5ed0, 0x20e1,
-	0x0000, 0x2099, 0x0260, 0x20e9, 0x0001, 0x20a1, 0x1c00, 0x20a9,
-	0x0014, 0x4003, 0x6043, 0x0008, 0x6043, 0x0000, 0x0010, 0x00fe,
-	0x0005, 0x6040, 0x9085, 0x0100, 0x6042, 0x6020, 0xd0b4, 0x1db8,
-	0x080c, 0x9d0b, 0x20e1, 0x0001, 0x2099, 0x1c00, 0x20e9, 0x0000,
-	0x20a1, 0x0240, 0x20a9, 0x0014, 0x4003, 0x60c3, 0x000c, 0x2011,
-	0x19ce, 0x2013, 0x0000, 0x708f, 0x0000, 0x60a3, 0x0056, 0x60a7,
-	0x9575, 0x080c, 0x961a, 0x08d8, 0x0005, 0x7094, 0x908a, 0x001d,
-	0x1a0c, 0x0dc4, 0x000b, 0x0005, 0x57e6, 0x57f9, 0x5822, 0x5842,
-	0x5868, 0x5897, 0x58bd, 0x58f5, 0x591b, 0x5949, 0x5984, 0x59bc,
-	0x59da, 0x5a05, 0x5a27, 0x5a42, 0x5a4c, 0x5a80, 0x5aa6, 0x5ad5,
-	0x5afb, 0x5b33, 0x5b77, 0x5bb4, 0x5bd5, 0x5c2e, 0x5c50, 0x5c7e,
-	0x5c7e, 0x00c6, 0x2061, 0x1800, 0x6003, 0x0007, 0x2061, 0x0100,
-	0x6004, 0x9084, 0xfff9, 0x6006, 0x00ce, 0x0005, 0x2061, 0x0140,
-	0x605b, 0xbc94, 0x605f, 0xf0f0, 0x2061, 0x0100, 0x6043, 0x0002,
-	0x7097, 0x0001, 0x2009, 0x07d0, 0x2011, 0x5d5f, 0x080c, 0x8432,
-	0x0005, 0x00f6, 0x708c, 0x9086, 0x0014, 0x1510, 0x6042, 0x6020,
-	0xd0b4, 0x11f0, 0x080c, 0x5ed0, 0x2079, 0x0260, 0x7a30, 0x9296,
-	0x1102, 0x11a0, 0x7834, 0x9005, 0x1188, 0x7a38, 0xd2fc, 0x0128,
-	0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001, 0x2011, 0x5d5f, 0x080c,
-	0x835e, 0x7097, 0x0010, 0x080c, 0x5a4c, 0x0010, 0x708f, 0x0000,
-	0x00fe, 0x0005, 0x00f6, 0x7097, 0x0003, 0x6043, 0x0004, 0x2011,
-	0x5d5f, 0x080c, 0x835e, 0x080c, 0x5e54, 0x2079, 0x0240, 0x7833,
-	0x1102, 0x7837, 0x0000, 0x20a9, 0x0008, 0x9f88, 0x000e, 0x200b,
-	0x0000, 0x8108, 0x1f04, 0x5837, 0x60c3, 0x0014, 0x080c, 0x5d89,
-	0x00fe, 0x0005, 0x00f6, 0x708c, 0x9005, 0x0500, 0x2011, 0x5d5f,
-	0x080c, 0x835e, 0x9086, 0x0014, 0x11b8, 0x080c, 0x5ed0, 0x2079,
-	0x0260, 0x7a30, 0x9296, 0x1102, 0x1178, 0x7834, 0x9005, 0x1160,
+	0x001c, 0x0002, 0x4ce5, 0x4ce5, 0x4ce7, 0x4ce5, 0x4ce5, 0x4ce5,
+	0x4cec, 0x4ce5, 0x4ce5, 0x4ce5, 0x4cf1, 0x4ce5, 0x4ce5, 0x4ce5,
+	0x4cf6, 0x4ce5, 0x4ce5, 0x4ce5, 0x4cfb, 0x4ce5, 0x4ce5, 0x4ce5,
+	0x4d00, 0x4ce5, 0x4ce5, 0x4ce5, 0x4d05, 0x080c, 0x0dc3, 0xaa78,
+	0xab7c, 0xac80, 0x0804, 0x4c71, 0xaa88, 0xab8c, 0xac90, 0x0804,
+	0x4c71, 0xaa98, 0xab9c, 0xaca0, 0x0804, 0x4c71, 0xaaa8, 0xabac,
+	0xacb0, 0x0804, 0x4c71, 0xaab8, 0xabbc, 0xacc0, 0x0804, 0x4c71,
+	0xaac8, 0xabcc, 0xacd0, 0x0804, 0x4c71, 0xaad8, 0xabdc, 0xace0,
+	0x0804, 0x4c71, 0x0016, 0x0026, 0x0036, 0x00b6, 0x00c6, 0x2009,
+	0x007e, 0x080c, 0x64fc, 0x2019, 0x0001, 0xb85c, 0xd0ac, 0x0110,
+	0x2019, 0x0000, 0x2011, 0x801b, 0x080c, 0x4b6d, 0x00ce, 0x00be,
+	0x003e, 0x002e, 0x001e, 0x0005, 0x0026, 0x080c, 0x5664, 0xd0c4,
+	0x0120, 0x2011, 0x8014, 0x080c, 0x4b6d, 0x002e, 0x0005, 0x81ff,
+	0x1904, 0x3499, 0x0126, 0x2091, 0x8000, 0x6030, 0xc08d, 0xc085,
+	0xc0ac, 0x6032, 0x080c, 0x7351, 0x1158, 0x080c, 0x764c, 0x080c,
+	0x5fb3, 0x9085, 0x0001, 0x080c, 0x7395, 0x080c, 0x727e, 0x0010,
+	0x080c, 0x5e72, 0x012e, 0x0804, 0x3467, 0x81ff, 0x0120, 0x2009,
+	0x0001, 0x0804, 0x3499, 0x080c, 0x5678, 0x0120, 0x2009, 0x0007,
+	0x0804, 0x3499, 0x080c, 0x6865, 0x0120, 0x2009, 0x0008, 0x0804,
+	0x3499, 0x2001, 0x180d, 0x2004, 0xd08c, 0x0178, 0x0026, 0x2011,
+	0x0010, 0x080c, 0x68a8, 0x002e, 0x0140, 0x7984, 0x080c, 0x68f2,
+	0x1120, 0x2009, 0x4009, 0x0804, 0x3499, 0x7984, 0x080c, 0x6497,
+	0x1904, 0x349c, 0x080c, 0x4b40, 0x0904, 0x349c, 0x2b00, 0x7026,
+	0x080c, 0x686d, 0x7888, 0x1138, 0x9084, 0x0005, 0x1120, 0x080c,
+	0x674b, 0x0804, 0x3467, 0x080c, 0x4b11, 0x0904, 0x3499, 0x9006,
+	0xa86a, 0xa832, 0xa86c, 0xc0fd, 0xa86e, 0x080c, 0xc3f3, 0x0904,
+	0x3499, 0x7888, 0xd094, 0x0118, 0xb8bc, 0xc08d, 0xb8be, 0x7007,
+	0x0003, 0x701f, 0x4e04, 0x0005, 0x2061, 0x1800, 0x080c, 0x5678,
+	0x2009, 0x0007, 0x1528, 0x080c, 0x6865, 0x0118, 0x2009, 0x0008,
+	0x00f8, 0xa99c, 0x080c, 0x6497, 0x11f8, 0x080c, 0x4b3e, 0x01e0,
+	0x080c, 0x686d, 0xa8a0, 0x1130, 0x9084, 0x0005, 0x1118, 0x080c,
+	0x674b, 0x00d0, 0xa86c, 0xc0fc, 0xa86e, 0x080c, 0xc3f3, 0x11e8,
+	0xa8a0, 0xd094, 0x0118, 0xb8bc, 0xc08d, 0xb8be, 0x2009, 0x0003,
+	0xa89b, 0x4005, 0xa99e, 0x0010, 0xa89b, 0x4006, 0x900e, 0x9085,
+	0x0001, 0x2001, 0x0030, 0x0005, 0xa89b, 0x4000, 0xa99e, 0x0039,
+	0x9006, 0x918d, 0x0001, 0x2008, 0x0005, 0x9006, 0x0005, 0x20a9,
+	0x0004, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0032, 0x20a0, 0xb8b4,
+	0x20e0, 0xb8b8, 0x9080, 0x0006, 0x2098, 0x080c, 0x0f8a, 0x20a9,
+	0x0004, 0xa85c, 0x9080, 0x0036, 0x20a0, 0xb8b8, 0x9080, 0x000a,
+	0x2098, 0x080c, 0x0f8a, 0x0005, 0xa830, 0x2009, 0x180d, 0x210c,
+	0xd18c, 0x0140, 0x2008, 0x918e, 0xdead, 0x1120, 0x2021, 0x4009,
+	0x0804, 0x3469, 0x9086, 0x0100, 0x7024, 0x2058, 0x1110, 0x0804,
+	0x55b4, 0x080c, 0x674b, 0x0804, 0x3467, 0x080c, 0x5678, 0x0120,
+	0x2009, 0x0007, 0x0804, 0x3499, 0x7f84, 0x7a8c, 0x7b88, 0x7c9c,
+	0x7d98, 0x080c, 0x4b11, 0x1120, 0x2009, 0x0002, 0x0804, 0x3499,
+	0x900e, 0x2130, 0x7126, 0x7132, 0xa860, 0x20e8, 0x7036, 0xa85c,
+	0x9080, 0x0005, 0x702a, 0x20a0, 0x080c, 0x64fc, 0x1904, 0x4ea7,
+	0x080c, 0x686d, 0x0120, 0x080c, 0x6875, 0x1904, 0x4ea7, 0x080c,
+	0x6865, 0x1130, 0x080c, 0x6748, 0x1118, 0xd79c, 0x0904, 0x4ea7,
+	0xd794, 0x1110, 0xd784, 0x01a8, 0xb8b4, 0x20e0, 0xb8b8, 0x9080,
+	0x0006, 0x2098, 0x3400, 0xd794, 0x0198, 0x20a9, 0x0008, 0x4003,
+	0x2098, 0x20a0, 0x3d00, 0x20e0, 0x20a9, 0x0002, 0x080c, 0x491e,
+	0x0080, 0xb8b4, 0x20e0, 0xb8b8, 0x9080, 0x000a, 0x2098, 0x3400,
+	0x20a9, 0x0004, 0x4003, 0x2098, 0x20a0, 0x3d00, 0x20e0, 0x080c,
+	0x491e, 0x4104, 0xd794, 0x0528, 0xb8b4, 0x20e0, 0xb8b8, 0x2060,
+	0x9c80, 0x0000, 0x2098, 0x20a9, 0x0002, 0x4003, 0x9c80, 0x0003,
+	0x2098, 0x20a9, 0x0001, 0x4005, 0x9c80, 0x0004, 0x2098, 0x3400,
+	0x20a9, 0x0002, 0x4003, 0x2098, 0x20a0, 0x3d00, 0x20e0, 0x080c,
+	0x4911, 0x9c80, 0x0026, 0x2098, 0xb8b4, 0x20e0, 0x20a9, 0x0002,
+	0x4003, 0xd794, 0x0110, 0x96b0, 0x000b, 0x96b0, 0x0005, 0x8108,
+	0x080c, 0xa307, 0x0118, 0x9186, 0x0800, 0x0040, 0xd78c, 0x0120,
+	0x9186, 0x0800, 0x0170, 0x0018, 0x9186, 0x007e, 0x0150, 0xd794,
+	0x0118, 0x9686, 0x0020, 0x0010, 0x9686, 0x0028, 0x0150, 0x0804,
+	0x4e3c, 0x86ff, 0x1120, 0x7124, 0x810b, 0x0804, 0x3467, 0x7033,
+	0x0001, 0x7122, 0x7024, 0x9600, 0x7026, 0x772e, 0x2061, 0x18b9,
+	0x2c44, 0xa06f, 0x0000, 0xa67e, 0x7034, 0xa076, 0x7028, 0xa07a,
+	0xa292, 0xa396, 0xa49a, 0xa59e, 0x080c, 0x10f7, 0x7007, 0x0002,
+	0x701f, 0x4ee3, 0x0005, 0x7030, 0x9005, 0x1180, 0x7120, 0x7028,
+	0x20a0, 0x772c, 0x9036, 0x7034, 0x20e8, 0x2061, 0x18b9, 0x2c44,
+	0xa290, 0xa394, 0xa498, 0xa59c, 0x0804, 0x4e3c, 0x7124, 0x810b,
+	0x0804, 0x3467, 0x2029, 0x007e, 0x7984, 0x7a88, 0x7b8c, 0x7c98,
+	0x9184, 0xff00, 0x8007, 0x90e2, 0x0020, 0x0a04, 0x349c, 0x9502,
+	0x0a04, 0x349c, 0x9184, 0x00ff, 0x90e2, 0x0020, 0x0a04, 0x349c,
+	0x9502, 0x0a04, 0x349c, 0x9284, 0xff00, 0x8007, 0x90e2, 0x0020,
+	0x0a04, 0x349c, 0x9502, 0x0a04, 0x349c, 0x9284, 0x00ff, 0x90e2,
+	0x0020, 0x0a04, 0x349c, 0x9502, 0x0a04, 0x349c, 0x9384, 0xff00,
+	0x8007, 0x90e2, 0x0020, 0x0a04, 0x349c, 0x9502, 0x0a04, 0x349c,
+	0x9384, 0x00ff, 0x90e2, 0x0020, 0x0a04, 0x349c, 0x9502, 0x0a04,
+	0x349c, 0x9484, 0xff00, 0x8007, 0x90e2, 0x0020, 0x0a04, 0x349c,
+	0x9502, 0x0a04, 0x349c, 0x9484, 0x00ff, 0x90e2, 0x0020, 0x0a04,
+	0x349c, 0x9502, 0x0a04, 0x349c, 0x2061, 0x1965, 0x6102, 0x6206,
+	0x630a, 0x640e, 0x0804, 0x3467, 0x0006, 0x080c, 0x5664, 0xd0cc,
+	0x000e, 0x0005, 0x0006, 0x080c, 0x5668, 0xd0bc, 0x000e, 0x0005,
+	0x6170, 0x7a84, 0x6300, 0x82ff, 0x1118, 0x7986, 0x0804, 0x3467,
+	0x83ff, 0x1904, 0x349c, 0x2001, 0xfff0, 0x9200, 0x1a04, 0x349c,
+	0x2019, 0xffff, 0x6074, 0x9302, 0x9200, 0x0a04, 0x349c, 0x7986,
+	0x6272, 0x0804, 0x3467, 0x080c, 0x5678, 0x1904, 0x3499, 0x7c88,
+	0x7d84, 0x7e98, 0x7f8c, 0x080c, 0x4b11, 0x0904, 0x3499, 0x900e,
+	0x901e, 0x7326, 0x7332, 0xa860, 0x20e8, 0x7036, 0xa85c, 0x9080,
+	0x0003, 0x702a, 0x20a0, 0x91d8, 0x1000, 0x2b5c, 0x8bff, 0x0178,
+	0x080c, 0x686d, 0x0118, 0x080c, 0x6875, 0x1148, 0x20a9, 0x0001,
+	0xb814, 0x4004, 0xb810, 0x4004, 0x4104, 0x9398, 0x0003, 0x8108,
+	0x9182, 0x0800, 0x0120, 0x9386, 0x003c, 0x0170, 0x0c20, 0x83ff,
+	0x1148, 0x7224, 0x900e, 0x2001, 0x0003, 0x080c, 0x871c, 0x2208,
+	0x0804, 0x3467, 0x7033, 0x0001, 0x7122, 0x7024, 0x9300, 0x7026,
+	0x2061, 0x18b9, 0x2c44, 0xa06f, 0x0000, 0xa37e, 0x7028, 0xa07a,
+	0x7034, 0xa076, 0xa492, 0xa596, 0xa69a, 0xa79e, 0x080c, 0x10f7,
+	0x7007, 0x0002, 0x701f, 0x4fd5, 0x0005, 0x7030, 0x9005, 0x1178,
+	0x7120, 0x7028, 0x20a0, 0x901e, 0x7034, 0x20e8, 0x2061, 0x18b9,
+	0x2c44, 0xa490, 0xa594, 0xa698, 0xa79c, 0x0804, 0x4f93, 0x7224,
+	0x900e, 0x2001, 0x0003, 0x080c, 0x871c, 0x2208, 0x0804, 0x3467,
+	0x00f6, 0x00e6, 0x080c, 0x5678, 0x2009, 0x0007, 0x1904, 0x5069,
+	0x2071, 0x189f, 0x745c, 0x84ff, 0x2009, 0x000e, 0x1904, 0x5069,
+	0xaca0, 0xad9c, 0xaea8, 0xafa4, 0x0096, 0x080c, 0x1026, 0x2009,
+	0x0002, 0x0904, 0x5068, 0x2900, 0x705e, 0x900e, 0x901e, 0x7356,
+	0x7362, 0xa860, 0x7066, 0xa85c, 0x9080, 0x0003, 0x705a, 0x20a0,
+	0x91d8, 0x1000, 0x2b5c, 0x8bff, 0x0178, 0x080c, 0x686d, 0x0118,
+	0x080c, 0x6875, 0x1148, 0xb814, 0x20a9, 0x0001, 0x4004, 0xb810,
+	0x4004, 0x4104, 0x9398, 0x0003, 0x8108, 0x9182, 0x0800, 0x0120,
+	0x9386, 0x003c, 0x01e8, 0x0c20, 0x83ff, 0x11c0, 0x7254, 0x900e,
+	0x2001, 0x0003, 0x080c, 0x871c, 0x2208, 0x009e, 0xa89b, 0x4000,
+	0xa99e, 0x715c, 0x81ff, 0x090c, 0x0dc3, 0x2148, 0x080c, 0x103f,
+	0x9006, 0x705e, 0x918d, 0x0001, 0x2008, 0x0418, 0x7063, 0x0001,
+	0x7152, 0x7054, 0x9300, 0x7056, 0x2061, 0x18ba, 0x2c44, 0xa37e,
+	0x7058, 0xa07a, 0x7064, 0xa076, 0xa492, 0xa596, 0xa69a, 0xa79e,
+	0xa0a3, 0x5074, 0x000e, 0xa0a6, 0x080c, 0x10f7, 0x9006, 0x0048,
+	0x009e, 0xa89b, 0x4005, 0xa99e, 0x900e, 0x9085, 0x0001, 0x2001,
+	0x0030, 0x00ee, 0x00fe, 0x0005, 0x00f6, 0xa0a4, 0x904d, 0x090c,
+	0x0dc3, 0x00e6, 0x2071, 0x189f, 0xa070, 0x908e, 0x0100, 0x0138,
+	0xa87f, 0x0030, 0xa887, 0x0000, 0xa89b, 0x4002, 0x00d8, 0x7060,
+	0x9005, 0x1158, 0x7150, 0x7058, 0x20a0, 0x901e, 0x7064, 0x20e8,
+	0xa490, 0xa594, 0xa698, 0xa79c, 0x0428, 0xa87f, 0x0000, 0xa887,
+	0x0000, 0xa89b, 0x4000, 0x7254, 0x900e, 0x2001, 0x0003, 0x080c,
+	0x871c, 0xaa9e, 0x715c, 0x81ff, 0x090c, 0x0dc3, 0x2148, 0x080c,
+	0x103f, 0x705f, 0x0000, 0xa0a4, 0x2048, 0x0126, 0x2091, 0x8000,
+	0x080c, 0x6c02, 0x012e, 0xa0a3, 0x0000, 0xa0a7, 0x0000, 0x00ee,
+	0x00fe, 0x0005, 0x91d8, 0x1000, 0x2b5c, 0x8bff, 0x0178, 0x080c,
+	0x686d, 0x0118, 0x080c, 0x6875, 0x1148, 0xb814, 0x20a9, 0x0001,
+	0x4004, 0xb810, 0x4004, 0x4104, 0x9398, 0x0003, 0x8108, 0x9182,
+	0x0800, 0x0120, 0x9386, 0x003c, 0x0518, 0x0c20, 0x83ff, 0x11f0,
+	0x7154, 0x810c, 0xa99e, 0xa89b, 0x4000, 0x715c, 0x81ff, 0x090c,
+	0x0dc3, 0x2148, 0x080c, 0x103f, 0x9006, 0x705e, 0x918d, 0x0001,
+	0x2008, 0xa0a4, 0x2048, 0x0126, 0x2091, 0x8000, 0x080c, 0x6c02,
+	0x012e, 0xa0a3, 0x0000, 0xa0a7, 0x0000, 0x0070, 0x7063, 0x0001,
+	0x7152, 0x7054, 0x9300, 0x7056, 0xa37e, 0xa492, 0xa596, 0xa69a,
+	0xa79e, 0x080c, 0x10f7, 0x9006, 0x00ee, 0x0005, 0x0096, 0xa890,
+	0x90be, 0x7000, 0x0148, 0x90be, 0x7100, 0x0130, 0x90be, 0x7200,
+	0x0118, 0x009e, 0x0804, 0x349c, 0xa888, 0xa98c, 0x080c, 0x2708,
+	0x1518, 0x080c, 0x6497, 0x1500, 0x7126, 0xbe12, 0xbd16, 0xae80,
+	0x080c, 0x4b11, 0x01f0, 0x080c, 0x4b11, 0x01d8, 0x009e, 0xa86b,
+	0x0000, 0xa86c, 0xc0fd, 0xa86e, 0xa823, 0x0000, 0xa804, 0x2048,
+	0x080c, 0xc375, 0x1120, 0x2009, 0x0003, 0x0804, 0x3499, 0x7007,
+	0x0003, 0x701f, 0x5142, 0x0005, 0x009e, 0x2009, 0x0002, 0x0804,
+	0x3499, 0x0cd0, 0x7124, 0x080c, 0x31fe, 0xa820, 0x9086, 0x8001,
+	0x1120, 0x2009, 0x0004, 0x0804, 0x3499, 0x2900, 0x7022, 0xa804,
+	0x0096, 0x2048, 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084,
+	0xffc0, 0x009e, 0x9080, 0x0002, 0x0076, 0x0006, 0x2098, 0x20a0,
+	0x27e0, 0x27e8, 0x20a9, 0x002a, 0x080c, 0x0f8a, 0xaa70, 0xab74,
+	0xac78, 0xad7c, 0x2061, 0x18b9, 0x2c44, 0xa06f, 0x0000, 0xae68,
+	0xaf90, 0x97c6, 0x7000, 0x0118, 0x97c6, 0x7100, 0x1148, 0x96c2,
+	0x0004, 0x0600, 0x2009, 0x0004, 0x000e, 0x007e, 0x0804, 0x4b59,
+	0x97c6, 0x7200, 0x11b8, 0x96c2, 0x0054, 0x02a0, 0x000e, 0x007e,
+	0x2061, 0x18b9, 0x2c44, 0xa07a, 0xa776, 0xa07f, 0x002a, 0xa292,
+	0xa396, 0xa49a, 0xa59e, 0x080c, 0x10f7, 0x7007, 0x0002, 0x701f,
+	0x519e, 0x0005, 0x000e, 0x007e, 0x0804, 0x349c, 0x7020, 0x2048,
+	0xa804, 0x2048, 0xa804, 0x2048, 0x8906, 0x8006, 0x8007, 0x90bc,
+	0x003f, 0x9084, 0xffc0, 0x9080, 0x0002, 0x2098, 0x20a0, 0x27e0,
+	0x27e8, 0x20a9, 0x002a, 0x080c, 0x0f8a, 0x2100, 0x2238, 0x2061,
+	0x18b9, 0x2c44, 0xa290, 0xa394, 0xa498, 0xa59c, 0x2009, 0x002a,
+	0x0804, 0x4b59, 0x81ff, 0x1904, 0x3499, 0x798c, 0x2001, 0x195a,
+	0x918c, 0x8000, 0x2102, 0x080c, 0x4b28, 0x0904, 0x349c, 0x080c,
+	0x686d, 0x0120, 0x080c, 0x6875, 0x1904, 0x349c, 0x080c, 0x65c3,
+	0x0904, 0x3499, 0x0126, 0x2091, 0x8000, 0x080c, 0x669f, 0x012e,
+	0x0904, 0x3499, 0x2001, 0x195a, 0x2004, 0xd0fc, 0x1904, 0x3467,
+	0x0804, 0x44a8, 0xa9a4, 0x2001, 0x195a, 0x918c, 0x8000, 0xc18d,
+	0x2102, 0x080c, 0x4b33, 0x01a0, 0x080c, 0x686d, 0x0118, 0x080c,
+	0x6875, 0x1170, 0x080c, 0x65c3, 0x2009, 0x0002, 0x0128, 0x080c,
+	0x669f, 0x1170, 0x2009, 0x0003, 0xa89b, 0x4005, 0xa99e, 0x0010,
+	0xa89b, 0x4006, 0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x0005,
+	0xa89b, 0x4000, 0x2001, 0x195a, 0x2004, 0xd0fc, 0x1128, 0x080c,
+	0x566c, 0x0110, 0x9006, 0x0018, 0x900e, 0x9085, 0x0001, 0x2001,
+	0x0000, 0x0005, 0x78a8, 0xd08c, 0x1118, 0xd084, 0x0904, 0x441d,
+	0x080c, 0x4b40, 0x0904, 0x349c, 0x080c, 0x4b11, 0x1120, 0x2009,
+	0x0002, 0x0804, 0x3499, 0x080c, 0x686d, 0x0130, 0x908e, 0x0004,
+	0x0118, 0x908e, 0x0005, 0x15a0, 0x78a8, 0xd08c, 0x0120, 0xb800,
+	0xc08c, 0xb802, 0x0028, 0x080c, 0x5664, 0xd0b4, 0x0904, 0x4457,
+	0x7884, 0x908e, 0x007e, 0x0904, 0x4457, 0x908e, 0x007f, 0x0904,
+	0x4457, 0x908e, 0x0080, 0x0904, 0x4457, 0xb800, 0xd08c, 0x1904,
+	0x4457, 0xa86b, 0x0000, 0xa86c, 0xc0fd, 0xa86e, 0x080c, 0xc394,
+	0x1120, 0x2009, 0x0003, 0x0804, 0x3499, 0x7007, 0x0003, 0x701f,
+	0x526a, 0x0005, 0x080c, 0x4b40, 0x0904, 0x349c, 0x0804, 0x4457,
+	0x080c, 0x3257, 0x0108, 0x0005, 0x2009, 0x1833, 0x210c, 0x81ff,
+	0x0120, 0x2009, 0x0001, 0x0804, 0x3499, 0x080c, 0x5678, 0x0120,
+	0x2009, 0x0007, 0x0804, 0x3499, 0x080c, 0x6865, 0x0120, 0x2009,
+	0x0008, 0x0804, 0x3499, 0xb89c, 0xd0a4, 0x1118, 0xd0ac, 0x1904,
+	0x4457, 0x9006, 0xa86a, 0xa832, 0xa86c, 0xc0fd, 0xa86e, 0x080c,
+	0xc3f3, 0x1120, 0x2009, 0x0003, 0x0804, 0x3499, 0x7007, 0x0003,
+	0x701f, 0x52a3, 0x0005, 0xa830, 0x9086, 0x0100, 0x1120, 0x2009,
+	0x0004, 0x0804, 0x55b4, 0x080c, 0x4b40, 0x0904, 0x349c, 0x0804,
+	0x523c, 0x81ff, 0x2009, 0x0001, 0x1904, 0x3499, 0x080c, 0x5678,
+	0x2009, 0x0007, 0x1904, 0x3499, 0x080c, 0x6865, 0x0120, 0x2009,
+	0x0008, 0x0804, 0x3499, 0x080c, 0x4b40, 0x0904, 0x349c, 0x080c,
+	0x686d, 0x2009, 0x0009, 0x1904, 0x3499, 0x080c, 0x4b11, 0x2009,
+	0x0002, 0x0904, 0x3499, 0x9006, 0xa86a, 0xa832, 0xa86c, 0xc0fd,
+	0xa86e, 0x7988, 0xa95a, 0x9194, 0xfd00, 0x918c, 0x00ff, 0x9006,
+	0x82ff, 0x1128, 0xc0ed, 0xa952, 0x798c, 0xa956, 0x0038, 0x928e,
+	0x0100, 0x1904, 0x349c, 0xc0e5, 0xa952, 0xa956, 0xa83e, 0x080c,
+	0xc641, 0x2009, 0x0003, 0x0904, 0x3499, 0x7007, 0x0003, 0x701f,
+	0x52fa, 0x0005, 0xa830, 0x9086, 0x0100, 0x2009, 0x0004, 0x0904,
+	0x3499, 0x0804, 0x3467, 0x7aa8, 0x9284, 0xc000, 0x0148, 0xd2ec,
+	0x01a0, 0x080c, 0x5678, 0x1188, 0x2009, 0x0014, 0x0804, 0x3499,
+	0xd2dc, 0x1578, 0x81ff, 0x2009, 0x0001, 0x1904, 0x3499, 0x080c,
+	0x5678, 0x2009, 0x0007, 0x1904, 0x3499, 0xd2f4, 0x0138, 0x9284,
+	0x5000, 0xc0d5, 0x080c, 0x563a, 0x0804, 0x3467, 0xd2fc, 0x0160,
+	0x080c, 0x4b40, 0x0904, 0x349c, 0x7984, 0x9284, 0x9000, 0xc0d5,
+	0x080c, 0x560f, 0x0804, 0x3467, 0x080c, 0x4b40, 0x0904, 0x349c,
+	0xb804, 0x9084, 0x00ff, 0x9086, 0x0006, 0x2009, 0x0009, 0x1904,
+	0x53e9, 0x080c, 0x4b11, 0x2009, 0x0002, 0x0904, 0x53e9, 0xa85c,
+	0x9080, 0x001c, 0xaf60, 0x2009, 0x0008, 0x7a8c, 0x7b88, 0x7c9c,
+	0x7d98, 0x080c, 0x4b56, 0x701f, 0x5356, 0x0005, 0xa870, 0x9086,
+	0x0500, 0x1138, 0xa874, 0x9005, 0x1120, 0xa878, 0x9084, 0xff00,
+	0x0110, 0x1904, 0x349c, 0xa86a, 0xa832, 0xa86c, 0xc0fd, 0xa86e,
+	0x080c, 0x4b40, 0x1110, 0x0804, 0x349c, 0x2009, 0x0043, 0x080c,
+	0xc6ad, 0x2009, 0x0003, 0x0904, 0x53e9, 0x7007, 0x0003, 0x701f,
+	0x537a, 0x0005, 0xa830, 0x9086, 0x0100, 0x2009, 0x0004, 0x0904,
+	0x53e9, 0x7984, 0x7aa8, 0x9284, 0x1000, 0xc0d5, 0x080c, 0x560f,
+	0x0804, 0x3467, 0x00c6, 0xaab4, 0x9284, 0xc000, 0x0148, 0xd2ec,
+	0x0170, 0x080c, 0x5678, 0x1158, 0x2009, 0x0014, 0x0804, 0x53d8,
+	0x2061, 0x1800, 0x080c, 0x5678, 0x2009, 0x0007, 0x15c8, 0xd2f4,
+	0x0130, 0x9284, 0x5000, 0xc0d5, 0x080c, 0x563a, 0x0058, 0xd2fc,
+	0x0180, 0x080c, 0x4b3e, 0x0590, 0xa99c, 0x9284, 0x9000, 0xc0d5,
+	0x080c, 0x560f, 0xa87f, 0x0000, 0xa887, 0x0000, 0xa89b, 0x4000,
+	0x0438, 0x080c, 0x4b3e, 0x0510, 0x080c, 0x686d, 0x2009, 0x0009,
+	0x11b8, 0xa8c8, 0x9086, 0x0500, 0x11c8, 0xa8cc, 0x9005, 0x11b0,
+	0xa8d0, 0x9084, 0xff00, 0x1190, 0x080c, 0x4b3e, 0x1108, 0x0070,
+	0x2009, 0x004b, 0x080c, 0xc6ad, 0x2009, 0x0003, 0x0108, 0x0078,
+	0x0431, 0x19c0, 0xa89b, 0x4005, 0xa99e, 0x0010, 0xa89b, 0x4006,
+	0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x00ce, 0x0005, 0x9006,
+	0x0ce0, 0x7aa8, 0xd2dc, 0x0904, 0x3499, 0x0016, 0x7984, 0x9284,
+	0x1000, 0xc0fd, 0x080c, 0x560f, 0x001e, 0x1904, 0x3499, 0x0804,
+	0x3467, 0x00f6, 0x2d78, 0xaab4, 0x0021, 0x00fe, 0x0005, 0xaab4,
+	0xc2d5, 0xd2dc, 0x0150, 0x0016, 0xa99c, 0x9284, 0x1400, 0xc0fd,
+	0x080c, 0x560f, 0x001e, 0x9085, 0x0001, 0x0005, 0x81ff, 0x0120,
+	0x2009, 0x0001, 0x0804, 0x3499, 0x080c, 0x5678, 0x0120, 0x2009,
+	0x0007, 0x0804, 0x3499, 0x7984, 0x7ea8, 0x96b4, 0x00ff, 0x080c,
+	0x64fc, 0x1904, 0x349c, 0x9186, 0x007f, 0x0138, 0x080c, 0x686d,
+	0x0120, 0x2009, 0x0009, 0x0804, 0x3499, 0x080c, 0x4b11, 0x1120,
+	0x2009, 0x0002, 0x0804, 0x3499, 0xa86b, 0x0000, 0xa86c, 0xc0fd,
+	0xa86e, 0x2001, 0x0100, 0x8007, 0xa80a, 0x080c, 0xc3ae, 0x1120,
+	0x2009, 0x0003, 0x0804, 0x3499, 0x7007, 0x0003, 0x701f, 0x5449,
+	0x0005, 0xa808, 0x8007, 0x9086, 0x0100, 0x1120, 0x2009, 0x0004,
+	0x0804, 0x3499, 0xa8e4, 0xa86a, 0xa810, 0x8007, 0x9084, 0x00ff,
+	0x800c, 0xa814, 0x8007, 0x9084, 0x00ff, 0x8004, 0x9080, 0x0002,
+	0x9108, 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0,
+	0x9080, 0x0004, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x0804, 0x4b59,
+	0x080c, 0x4b11, 0x1120, 0x2009, 0x0002, 0x0804, 0x3499, 0x7984,
+	0x9194, 0xff00, 0x918c, 0x00ff, 0x8217, 0x82ff, 0x1118, 0x7023,
+	0x1990, 0x0040, 0x92c6, 0x0001, 0x1118, 0x7023, 0x19aa, 0x0010,
+	0x0804, 0x349c, 0x2009, 0x001a, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98,
+	0xa85c, 0x9080, 0x001a, 0xaf60, 0x080c, 0x4b56, 0x701f, 0x5499,
+	0x0005, 0x2001, 0x182d, 0x2003, 0x0001, 0xa85c, 0x9080, 0x001a,
+	0x2098, 0xa860, 0x20e0, 0x20a9, 0x001a, 0x7020, 0x20a0, 0x20e9,
+	0x0001, 0x4003, 0x0804, 0x3467, 0x080c, 0x4b11, 0x1120, 0x2009,
+	0x0002, 0x0804, 0x3499, 0x7984, 0x9194, 0xff00, 0x918c, 0x00ff,
+	0x8217, 0x82ff, 0x1118, 0x2099, 0x1990, 0x0040, 0x92c6, 0x0001,
+	0x1118, 0x2099, 0x19aa, 0x0010, 0x0804, 0x349c, 0xa85c, 0x9080,
+	0x001a, 0x20a0, 0xa860, 0x20e8, 0x20a9, 0x001a, 0x20e1, 0x0001,
+	0x4003, 0x2009, 0x001a, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0xa85c,
+	0x9080, 0x001a, 0xaf60, 0x0804, 0x4b59, 0x7884, 0x908a, 0x1000,
+	0x1a04, 0x349c, 0x0126, 0x2091, 0x8000, 0x8003, 0x800b, 0x810b,
+	0x9108, 0x00c6, 0x2061, 0x19d7, 0x614a, 0x00ce, 0x012e, 0x0804,
+	0x3467, 0x00c6, 0x080c, 0x7351, 0x1160, 0x080c, 0x764c, 0x080c,
+	0x5fb3, 0x9085, 0x0001, 0x080c, 0x7395, 0x080c, 0x727e, 0x080c,
+	0x0dc3, 0x2061, 0x1800, 0x6030, 0xc09d, 0x6032, 0x080c, 0x5e72,
+	0x00ce, 0x0005, 0x2001, 0x1800, 0x2004, 0x908e, 0x0000, 0x0904,
+	0x3499, 0x00c6, 0x7884, 0x9005, 0x0190, 0x7888, 0x2061, 0x1978,
+	0x2c0c, 0x2062, 0x080c, 0x2ade, 0x01a8, 0x080c, 0x2ae6, 0x0190,
+	0x080c, 0x2aee, 0x0178, 0x2162, 0x00ce, 0x0804, 0x349c, 0x2061,
+	0x0100, 0x6038, 0x9086, 0x0007, 0x1118, 0x2009, 0x0001, 0x0010,
+	0x2009, 0x0000, 0x7884, 0x9086, 0x0002, 0x1568, 0x2061, 0x0100,
+	0x6028, 0xc09c, 0x602a, 0x0026, 0x2011, 0x0003, 0x080c, 0x9ca7,
+	0x2011, 0x0002, 0x080c, 0x9cb1, 0x002e, 0x080c, 0x9bbf, 0x0036,
+	0x901e, 0x080c, 0x9c35, 0x003e, 0x60e3, 0x0000, 0x080c, 0xe0c9,
+	0x080c, 0xe100, 0x9085, 0x0001, 0x080c, 0x7395, 0x9006, 0x080c,
+	0x2bce, 0x2001, 0x1800, 0x2003, 0x0004, 0x2001, 0x1984, 0x2003,
+	0x0000, 0x6027, 0x0008, 0x00ce, 0x0804, 0x3467, 0x81ff, 0x0120,
+	0x2009, 0x0001, 0x0804, 0x3499, 0x080c, 0x5678, 0x0120, 0x2009,
+	0x0007, 0x0804, 0x3499, 0x7984, 0x7ea8, 0x96b4, 0x00ff, 0x080c,
+	0x64fc, 0x1904, 0x349c, 0x9186, 0x007f, 0x0138, 0x080c, 0x686d,
+	0x0120, 0x2009, 0x0009, 0x0804, 0x3499, 0x080c, 0x4b11, 0x1120,
+	0x2009, 0x0002, 0x0804, 0x3499, 0xa86b, 0x0000, 0xa86c, 0xc0fd,
+	0xa86e, 0x080c, 0xc3b1, 0x1120, 0x2009, 0x0003, 0x0804, 0x3499,
+	0x7007, 0x0003, 0x701f, 0x559d, 0x0005, 0xa830, 0x9086, 0x0100,
+	0x1120, 0x2009, 0x0004, 0x0804, 0x3499, 0xa8e4, 0xa86a, 0xa834,
+	0x8007, 0x800c, 0xa85c, 0x9080, 0x000c, 0x7a8c, 0x7b88, 0x7c9c,
+	0x7d98, 0xaf60, 0x0804, 0x4b59, 0xa89c, 0x9086, 0x000d, 0x1904,
+	0x3499, 0x2021, 0x4005, 0x0126, 0x2091, 0x8000, 0x0e04, 0x55c1,
+	0x0010, 0x012e, 0x0cc0, 0x7c36, 0x9486, 0x4000, 0x0118, 0x7833,
+	0x0011, 0x0010, 0x7833, 0x0010, 0x7883, 0x4005, 0xa99c, 0x7986,
+	0xa9a8, 0x799a, 0xa9ac, 0x799e, 0x080c, 0x4b49, 0x2091, 0x4080,
+	0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x11a9, 0x7007, 0x0001,
+	0x2091, 0x5000, 0x700f, 0x0000, 0x012e, 0x0005, 0x0126, 0x2091,
+	0x8000, 0x00c6, 0x2061, 0x19d7, 0x7984, 0x615a, 0x6156, 0x605f,
+	0x0000, 0x6053, 0x0009, 0x7898, 0x6072, 0x789c, 0x606e, 0x7888,
+	0x606a, 0x788c, 0x6066, 0x2001, 0x19e7, 0x2044, 0x2001, 0x19ee,
+	0xa07a, 0xa060, 0xa076, 0xa07f, 0x0001, 0xa083, 0x0002, 0xa06f,
+	0x0000, 0xa0a3, 0x0000, 0x00ce, 0x012e, 0x0804, 0x3467, 0x0126,
+	0x2091, 0x8000, 0x00b6, 0x00c6, 0x90e4, 0xc000, 0x0168, 0x0006,
+	0xd0d4, 0x0130, 0x0036, 0x2019, 0x0029, 0x080c, 0x321c, 0x003e,
+	0x080c, 0xc21a, 0x000e, 0x1198, 0xd0e4, 0x0160, 0x9180, 0x1000,
+	0x2004, 0x905d, 0x0160, 0x080c, 0x5fcd, 0x080c, 0xa307, 0x0110,
+	0xb817, 0x0000, 0x9006, 0x00ce, 0x00be, 0x012e, 0x0005, 0x9085,
+	0x0001, 0x0cc8, 0x0126, 0x2091, 0x8000, 0x0156, 0x2010, 0x900e,
+	0x20a9, 0x0800, 0x0016, 0x9180, 0x1000, 0x2004, 0x9005, 0x0188,
+	0x9186, 0x007e, 0x0170, 0x9186, 0x007f, 0x0158, 0x9186, 0x0080,
+	0x0178, 0x9186, 0x00ff, 0x0128, 0x0026, 0x2200, 0x080c, 0x560f,
+	0x002e, 0x001e, 0x8108, 0x1f04, 0x5642, 0x015e, 0x012e, 0x0005,
+	0x080c, 0xc8ce, 0x0db0, 0x0c80, 0x2001, 0x185f, 0x2004, 0x0005,
+	0x2001, 0x187e, 0x2004, 0x0005, 0x0006, 0x2001, 0x1810, 0x2004,
+	0xd0d4, 0x000e, 0x0005, 0x2001, 0x180e, 0x2004, 0xd0b4, 0x0005,
+	0x2001, 0x1800, 0x2004, 0x9086, 0x0003, 0x0005, 0x79a4, 0x81ff,
+	0x0904, 0x349c, 0x9182, 0x0081, 0x1a04, 0x349c, 0x810c, 0x0016,
+	0x080c, 0x4b11, 0x0170, 0x080c, 0x0f15, 0x2100, 0x2238, 0x7d84,
+	0x7c88, 0x7b8c, 0x7a90, 0x001e, 0x080c, 0x4b56, 0x701f, 0x569e,
+	0x0005, 0x001e, 0x2009, 0x0002, 0x0804, 0x3499, 0x2079, 0x0000,
+	0x7d94, 0x7c98, 0x7ba8, 0x7aac, 0x79a4, 0x810c, 0x2061, 0x18b9,
+	0x2c44, 0xa774, 0xa078, 0x2071, 0x189f, 0x080c, 0x4b59, 0x701f,
+	0x56b2, 0x0005, 0x2061, 0x18b9, 0x2c44, 0x0016, 0x0026, 0xa274,
+	0xa178, 0x080c, 0x0f1d, 0x002e, 0x001e, 0x080c, 0x0fca, 0x9006,
+	0xa802, 0xa806, 0x0804, 0x3467, 0x0126, 0x0156, 0x0136, 0x0146,
+	0x01c6, 0x01d6, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x2061, 0x0100,
+	0x2069, 0x0200, 0x2071, 0x1800, 0x6044, 0xd0a4, 0x11e8, 0xd084,
+	0x0118, 0x080c, 0x5872, 0x0068, 0xd08c, 0x0118, 0x080c, 0x577b,
+	0x0040, 0xd094, 0x0118, 0x080c, 0x574b, 0x0018, 0xd09c, 0x0108,
+	0x0099, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x01de, 0x01ce, 0x014e,
+	0x013e, 0x015e, 0x012e, 0x0005, 0x0016, 0x6128, 0xd19c, 0x1110,
+	0xc19d, 0x612a, 0x001e, 0x0c68, 0x7030, 0xd09c, 0x1120, 0x6004,
+	0x9085, 0x0002, 0x6006, 0x7094, 0x9005, 0x0120, 0x7097, 0x0000,
+	0x708f, 0x0000, 0x624c, 0x9286, 0xf0f0, 0x1150, 0x6048, 0x9086,
+	0xf0f0, 0x0130, 0x624a, 0x6043, 0x0090, 0x6043, 0x0010, 0x0490,
+	0x9294, 0xff00, 0x9296, 0xf700, 0x0178, 0x7138, 0xd1a4, 0x1160,
+	0x6240, 0x9295, 0x0100, 0x6242, 0x9294, 0x0010, 0x0128, 0x2009,
+	0x00f7, 0x080c, 0x5f2f, 0x00f0, 0x6040, 0x9084, 0x0010, 0x9085,
+	0x0140, 0x6042, 0x6043, 0x0000, 0x7083, 0x0000, 0x709f, 0x0001,
+	0x70c3, 0x0000, 0x70db, 0x0000, 0x2009, 0x1c80, 0x200b, 0x0000,
+	0x7093, 0x0000, 0x7087, 0x000f, 0x2009, 0x000f, 0x2011, 0x5e15,
+	0x080c, 0x859e, 0x0005, 0x2001, 0x1880, 0x2004, 0xd08c, 0x0110,
+	0x705b, 0xffff, 0x7084, 0x9005, 0x1528, 0x2011, 0x5e15, 0x080c,
+	0x84c2, 0x6040, 0x9094, 0x0010, 0x9285, 0x0020, 0x6042, 0x20a9,
+	0x00c8, 0x6044, 0xd08c, 0x1168, 0x1f04, 0x5761, 0x6242, 0x7097,
+	0x0000, 0x6040, 0x9094, 0x0010, 0x9285, 0x0080, 0x6042, 0x6242,
+	0x0048, 0x6242, 0x7097, 0x0000, 0x708b, 0x0000, 0x9006, 0x080c,
+	0x5fb8, 0x0000, 0x0005, 0x7088, 0x908a, 0x0003, 0x1a0c, 0x0dc3,
+	0x000b, 0x0005, 0x5785, 0x57d6, 0x5871, 0x00f6, 0x0016, 0x6900,
+	0x918c, 0x0800, 0x708b, 0x0001, 0x2001, 0x015d, 0x2003, 0x0000,
+	0x6803, 0x00fc, 0x20a9, 0x0004, 0x6800, 0x9084, 0x00fc, 0x0120,
+	0x1f04, 0x5794, 0x080c, 0x0dc3, 0x68a0, 0x68a2, 0x689c, 0x689e,
+	0x6898, 0x689a, 0xa001, 0x918d, 0x1600, 0x6902, 0x001e, 0x6837,
+	0x0020, 0x080c, 0x5f94, 0x2079, 0x1c00, 0x7833, 0x1101, 0x7837,
+	0x0000, 0x20e1, 0x0001, 0x2099, 0x1805, 0x20e9, 0x0001, 0x20a1,
+	0x1c0e, 0x20a9, 0x0004, 0x4003, 0x080c, 0xa190, 0x20e1, 0x0001,
+	0x2099, 0x1c00, 0x20e9, 0x0000, 0x20a1, 0x0240, 0x20a9, 0x0014,
+	0x4003, 0x60c3, 0x000c, 0x600f, 0x0000, 0x080c, 0x5e46, 0x00fe,
+	0x9006, 0x708e, 0x6043, 0x0008, 0x6042, 0x0005, 0x00f6, 0x708c,
+	0x708f, 0x0000, 0x9025, 0x0904, 0x584e, 0x6020, 0xd0b4, 0x1904,
+	0x584c, 0x719c, 0x81ff, 0x0904, 0x583a, 0x9486, 0x000c, 0x1904,
+	0x5847, 0x9480, 0x0018, 0x8004, 0x20a8, 0x080c, 0x5f8d, 0x2011,
+	0x0260, 0x2019, 0x1c00, 0x220c, 0x2304, 0x9106, 0x11e8, 0x8210,
+	0x8318, 0x1f04, 0x57f3, 0x6043, 0x0004, 0x2061, 0x0140, 0x605b,
+	0xbc94, 0x605f, 0xf0f0, 0x2061, 0x0100, 0x6043, 0x0006, 0x708b,
+	0x0002, 0x7097, 0x0002, 0x2009, 0x07d0, 0x2011, 0x5e1c, 0x080c,
+	0x859e, 0x080c, 0x5f94, 0x04c0, 0x080c, 0x5f8d, 0x2079, 0x0260,
+	0x7930, 0x918e, 0x1101, 0x1558, 0x7834, 0x9005, 0x1540, 0x7900,
+	0x918c, 0x00ff, 0x1118, 0x7804, 0x9005, 0x0190, 0x080c, 0x5f8d,
+	0x2011, 0x026e, 0x2019, 0x1805, 0x20a9, 0x0004, 0x220c, 0x2304,
+	0x9102, 0x0230, 0x11a0, 0x8210, 0x8318, 0x1f04, 0x582e, 0x0078,
+	0x709f, 0x0000, 0x080c, 0x5f8d, 0x20e1, 0x0000, 0x2099, 0x0260,
+	0x20e9, 0x0001, 0x20a1, 0x1c00, 0x20a9, 0x0014, 0x4003, 0x6043,
+	0x0008, 0x6043, 0x0000, 0x0010, 0x00fe, 0x0005, 0x6040, 0x9085,
+	0x0100, 0x6042, 0x6020, 0xd0b4, 0x1db8, 0x080c, 0xa190, 0x20e1,
+	0x0001, 0x2099, 0x1c00, 0x20e9, 0x0000, 0x20a1, 0x0240, 0x20a9,
+	0x0014, 0x4003, 0x60c3, 0x000c, 0x2011, 0x19ce, 0x2013, 0x0000,
+	0x708f, 0x0000, 0x60a3, 0x0056, 0x60a7, 0x9575, 0x080c, 0x98c8,
+	0x08d8, 0x0005, 0x7094, 0x908a, 0x001d, 0x1a0c, 0x0dc3, 0x000b,
+	0x0005, 0x58a3, 0x58b6, 0x58df, 0x58ff, 0x5925, 0x5954, 0x597a,
+	0x59b2, 0x59d8, 0x5a06, 0x5a41, 0x5a79, 0x5a97, 0x5ac2, 0x5ae4,
+	0x5aff, 0x5b09, 0x5b3d, 0x5b63, 0x5b92, 0x5bb8, 0x5bf0, 0x5c34,
+	0x5c71, 0x5c92, 0x5ceb, 0x5d0d, 0x5d3b, 0x5d3b, 0x00c6, 0x2061,
+	0x1800, 0x6003, 0x0007, 0x2061, 0x0100, 0x6004, 0x9084, 0xfff9,
+	0x6006, 0x00ce, 0x0005, 0x2061, 0x0140, 0x605b, 0xbc94, 0x605f,
+	0xf0f0, 0x2061, 0x0100, 0x6043, 0x0002, 0x7097, 0x0001, 0x2009,
+	0x07d0, 0x2011, 0x5e1c, 0x080c, 0x859e, 0x0005, 0x00f6, 0x708c,
+	0x9086, 0x0014, 0x1510, 0x6042, 0x6020, 0xd0b4, 0x11f0, 0x080c,
+	0x5f8d, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1102, 0x11a0, 0x7834,
+	0x9005, 0x1188, 0x7a38, 0xd2fc, 0x0128, 0x70c0, 0x9005, 0x1110,
+	0x70c3, 0x0001, 0x2011, 0x5e1c, 0x080c, 0x84c2, 0x7097, 0x0010,
+	0x080c, 0x5b09, 0x0010, 0x708f, 0x0000, 0x00fe, 0x0005, 0x00f6,
+	0x7097, 0x0003, 0x6043, 0x0004, 0x2011, 0x5e1c, 0x080c, 0x84c2,
+	0x080c, 0x5f11, 0x2079, 0x0240, 0x7833, 0x1102, 0x7837, 0x0000,
+	0x20a9, 0x0008, 0x9f88, 0x000e, 0x200b, 0x0000, 0x8108, 0x1f04,
+	0x58f4, 0x60c3, 0x0014, 0x080c, 0x5e46, 0x00fe, 0x0005, 0x00f6,
+	0x708c, 0x9005, 0x0500, 0x2011, 0x5e1c, 0x080c, 0x84c2, 0x9086,
+	0x0014, 0x11b8, 0x080c, 0x5f8d, 0x2079, 0x0260, 0x7a30, 0x9296,
+	0x1102, 0x1178, 0x7834, 0x9005, 0x1160, 0x7a38, 0xd2fc, 0x0128,
+	0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001, 0x7097, 0x0004, 0x0029,
+	0x0010, 0x080c, 0x5f69, 0x00fe, 0x0005, 0x00f6, 0x7097, 0x0005,
+	0x080c, 0x5f11, 0x2079, 0x0240, 0x7833, 0x1103, 0x7837, 0x0000,
+	0x080c, 0x5f8d, 0x080c, 0x5f70, 0x1170, 0x7080, 0x9005, 0x1158,
+	0x7158, 0x9186, 0xffff, 0x0138, 0x2011, 0x0008, 0x080c, 0x5dc9,
+	0x0168, 0x080c, 0x5f46, 0x20a9, 0x0008, 0x20e1, 0x0000, 0x2099,
+	0x026e, 0x20e9, 0x0000, 0x20a1, 0x024e, 0x4003, 0x60c3, 0x0014,
+	0x080c, 0x5e46, 0x00fe, 0x0005, 0x00f6, 0x708c, 0x9005, 0x0500,
+	0x2011, 0x5e1c, 0x080c, 0x84c2, 0x9086, 0x0014, 0x11b8, 0x080c,
+	0x5f8d, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1103, 0x1178, 0x7834,
+	0x9005, 0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70c0, 0x9005, 0x1110,
+	0x70c3, 0x0001, 0x7097, 0x0006, 0x0029, 0x0010, 0x080c, 0x5f69,
+	0x00fe, 0x0005, 0x00f6, 0x7097, 0x0007, 0x080c, 0x5f11, 0x2079,
+	0x0240, 0x7833, 0x1104, 0x7837, 0x0000, 0x080c, 0x5f8d, 0x080c,
+	0x5f70, 0x11b8, 0x7080, 0x9005, 0x11a0, 0x7160, 0x9186, 0xffff,
+	0x0180, 0x9180, 0x3268, 0x200d, 0x918c, 0xff00, 0x810f, 0x2011,
+	0x0008, 0x080c, 0x5dc9, 0x0180, 0x080c, 0x4f5a, 0x0110, 0x080c,
+	0x2771, 0x20a9, 0x0008, 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9,
+	0x0000, 0x20a1, 0x024e, 0x4003, 0x60c3, 0x0014, 0x080c, 0x5e46,
+	0x00fe, 0x0005, 0x00f6, 0x708c, 0x9005, 0x0500, 0x2011, 0x5e1c,
+	0x080c, 0x84c2, 0x9086, 0x0014, 0x11b8, 0x080c, 0x5f8d, 0x2079,
+	0x0260, 0x7a30, 0x9296, 0x1104, 0x1178, 0x7834, 0x9005, 0x1160,
 	0x7a38, 0xd2fc, 0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001,
-	0x7097, 0x0004, 0x0029, 0x0010, 0x080c, 0x5eac, 0x00fe, 0x0005,
-	0x00f6, 0x7097, 0x0005, 0x080c, 0x5e54, 0x2079, 0x0240, 0x7833,
-	0x1103, 0x7837, 0x0000, 0x080c, 0x5ed0, 0x080c, 0x5eb3, 0x1170,
-	0x7080, 0x9005, 0x1158, 0x7158, 0x9186, 0xffff, 0x0138, 0x2011,
-	0x0008, 0x080c, 0x5d0c, 0x0168, 0x080c, 0x5e89, 0x20a9, 0x0008,
+	0x7097, 0x0008, 0x0029, 0x0010, 0x080c, 0x5f69, 0x00fe, 0x0005,
+	0x00f6, 0x7097, 0x0009, 0x080c, 0x5f11, 0x2079, 0x0240, 0x7833,
+	0x1105, 0x7837, 0x0100, 0x080c, 0x5f70, 0x1150, 0x7080, 0x9005,
+	0x1138, 0x080c, 0x5d3c, 0x1188, 0x9085, 0x0001, 0x080c, 0x2771,
+	0x20a9, 0x0008, 0x080c, 0x5f8d, 0x20e1, 0x0000, 0x2099, 0x026e,
+	0x20e9, 0x0000, 0x20a1, 0x024e, 0x4003, 0x60c3, 0x0014, 0x080c,
+	0x5e46, 0x0010, 0x080c, 0x5896, 0x00fe, 0x0005, 0x00f6, 0x708c,
+	0x9005, 0x05a8, 0x2011, 0x5e1c, 0x080c, 0x84c2, 0x9086, 0x0014,
+	0x1560, 0x080c, 0x5f8d, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1105,
+	0x1520, 0x7834, 0x9084, 0x0100, 0x2011, 0x0100, 0x921e, 0x1160,
+	0x7a38, 0xd2fc, 0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001,
+	0x7097, 0x000a, 0x00b1, 0x0098, 0x9005, 0x1178, 0x7a38, 0xd2fc,
+	0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001, 0x7093, 0x0000,
+	0x7097, 0x000e, 0x080c, 0x5ae4, 0x0010, 0x080c, 0x5f69, 0x00fe,
+	0x0005, 0x00f6, 0x7097, 0x000b, 0x2011, 0x1c0e, 0x20e9, 0x0001,
+	0x22a0, 0x20a9, 0x0040, 0x2019, 0xffff, 0x4304, 0x080c, 0x5f11,
+	0x2079, 0x0240, 0x7833, 0x1106, 0x7837, 0x0000, 0x080c, 0x5f70,
+	0x0118, 0x2013, 0x0000, 0x0020, 0x705c, 0x9085, 0x0100, 0x2012,
+	0x20a9, 0x0040, 0x2009, 0x024e, 0x2011, 0x1c0e, 0x220e, 0x8210,
+	0x8108, 0x9186, 0x0260, 0x1128, 0x6810, 0x8000, 0x6812, 0x2009,
+	0x0240, 0x1f04, 0x5a66, 0x60c3, 0x0084, 0x080c, 0x5e46, 0x00fe,
+	0x0005, 0x00f6, 0x708c, 0x9005, 0x01c0, 0x2011, 0x5e1c, 0x080c,
+	0x84c2, 0x9086, 0x0084, 0x1178, 0x080c, 0x5f8d, 0x2079, 0x0260,
+	0x7a30, 0x9296, 0x1106, 0x1138, 0x7834, 0x9005, 0x1120, 0x7097,
+	0x000c, 0x0029, 0x0010, 0x080c, 0x5f69, 0x00fe, 0x0005, 0x00f6,
+	0x7097, 0x000d, 0x080c, 0x5f11, 0x2079, 0x0240, 0x7833, 0x1107,
+	0x7837, 0x0000, 0x080c, 0x5f8d, 0x20a9, 0x0040, 0x2011, 0x026e,
+	0x2009, 0x024e, 0x220e, 0x8210, 0x8108, 0x9186, 0x0260, 0x1150,
+	0x6810, 0x8000, 0x6812, 0x2009, 0x0240, 0x6814, 0x8000, 0x6816,
+	0x2011, 0x0260, 0x1f04, 0x5aaa, 0x60c3, 0x0084, 0x080c, 0x5e46,
+	0x00fe, 0x0005, 0x00f6, 0x708c, 0x9005, 0x01e0, 0x2011, 0x5e1c,
+	0x080c, 0x84c2, 0x9086, 0x0084, 0x1198, 0x080c, 0x5f8d, 0x2079,
+	0x0260, 0x7a30, 0x9296, 0x1107, 0x1158, 0x7834, 0x9005, 0x1140,
+	0x7093, 0x0001, 0x080c, 0x5ee3, 0x7097, 0x000e, 0x0029, 0x0010,
+	0x080c, 0x5f69, 0x00fe, 0x0005, 0x918d, 0x0001, 0x080c, 0x5fb8,
+	0x7097, 0x000f, 0x708f, 0x0000, 0x2061, 0x0140, 0x605b, 0xbc85,
+	0x605f, 0xb5b5, 0x2061, 0x0100, 0x6043, 0x0005, 0x6043, 0x0004,
+	0x2009, 0x07d0, 0x2011, 0x5e1c, 0x080c, 0x84b6, 0x0005, 0x708c,
+	0x9005, 0x0130, 0x2011, 0x5e1c, 0x080c, 0x84c2, 0x7097, 0x0000,
+	0x0005, 0x7097, 0x0011, 0x080c, 0xa190, 0x080c, 0x5f8d, 0x20e1,
+	0x0000, 0x2099, 0x0260, 0x20e9, 0x0000, 0x20a1, 0x0240, 0x748c,
+	0x9480, 0x0018, 0x9080, 0x0007, 0x9084, 0x03f8, 0x8004, 0x20a8,
+	0x4003, 0x080c, 0x5f70, 0x11a0, 0x7178, 0x81ff, 0x0188, 0x900e,
+	0x707c, 0x9084, 0x00ff, 0x0160, 0x080c, 0x2708, 0x9186, 0x007e,
+	0x0138, 0x9186, 0x0080, 0x0120, 0x2011, 0x0008, 0x080c, 0x5dc9,
+	0x60c3, 0x0014, 0x080c, 0x5e46, 0x0005, 0x00f6, 0x708c, 0x9005,
+	0x0500, 0x2011, 0x5e1c, 0x080c, 0x84c2, 0x9086, 0x0014, 0x11b8,
+	0x080c, 0x5f8d, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1103, 0x1178,
+	0x7834, 0x9005, 0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70c0, 0x9005,
+	0x1110, 0x70c3, 0x0001, 0x7097, 0x0012, 0x0029, 0x0010, 0x708f,
+	0x0000, 0x00fe, 0x0005, 0x00f6, 0x7097, 0x0013, 0x080c, 0x5f1f,
+	0x2079, 0x0240, 0x7833, 0x1103, 0x7837, 0x0000, 0x080c, 0x5f8d,
+	0x080c, 0x5f70, 0x1170, 0x7080, 0x9005, 0x1158, 0x7158, 0x9186,
+	0xffff, 0x0138, 0x2011, 0x0008, 0x080c, 0x5dc9, 0x0168, 0x080c,
+	0x5f46, 0x20a9, 0x0008, 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9,
+	0x0000, 0x20a1, 0x024e, 0x4003, 0x60c3, 0x0014, 0x080c, 0x5e46,
+	0x00fe, 0x0005, 0x00f6, 0x708c, 0x9005, 0x0500, 0x2011, 0x5e1c,
+	0x080c, 0x84c2, 0x9086, 0x0014, 0x11b8, 0x080c, 0x5f8d, 0x2079,
+	0x0260, 0x7a30, 0x9296, 0x1104, 0x1178, 0x7834, 0x9005, 0x1160,
+	0x7a38, 0xd2fc, 0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001,
+	0x7097, 0x0014, 0x0029, 0x0010, 0x708f, 0x0000, 0x00fe, 0x0005,
+	0x00f6, 0x7097, 0x0015, 0x080c, 0x5f1f, 0x2079, 0x0240, 0x7833,
+	0x1104, 0x7837, 0x0000, 0x080c, 0x5f8d, 0x080c, 0x5f70, 0x11b8,
+	0x7080, 0x9005, 0x11a0, 0x7160, 0x9186, 0xffff, 0x0180, 0x9180,
+	0x3268, 0x200d, 0x918c, 0xff00, 0x810f, 0x2011, 0x0008, 0x080c,
+	0x5dc9, 0x0180, 0x080c, 0x4f5a, 0x0110, 0x080c, 0x2771, 0x20a9,
+	0x0008, 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000, 0x20a1,
+	0x024e, 0x4003, 0x60c3, 0x0014, 0x080c, 0x5e46, 0x00fe, 0x0005,
+	0x00f6, 0x708c, 0x9005, 0x05f0, 0x2011, 0x5e1c, 0x080c, 0x84c2,
+	0x9086, 0x0014, 0x15a8, 0x080c, 0x5f8d, 0x2079, 0x0260, 0x7a30,
+	0x9296, 0x1105, 0x1568, 0x7834, 0x9084, 0x0100, 0x2011, 0x0100,
+	0x921e, 0x1168, 0x9085, 0x0001, 0x080c, 0x5fb8, 0x7a38, 0xd2fc,
+	0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001, 0x0080, 0x9005,
+	0x11b8, 0x7a38, 0xd2fc, 0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3,
+	0x0001, 0x9085, 0x0001, 0x080c, 0x5fb8, 0x7093, 0x0000, 0x7a38,
+	0xd2f4, 0x0110, 0x70db, 0x0008, 0x7097, 0x0016, 0x0029, 0x0010,
+	0x708f, 0x0000, 0x00fe, 0x0005, 0x080c, 0xa190, 0x080c, 0x5f8d,
+	0x20e1, 0x0000, 0x2099, 0x0260, 0x20e9, 0x0000, 0x20a1, 0x0240,
+	0x20a9, 0x000e, 0x4003, 0x2011, 0x026d, 0x2204, 0x9084, 0x0100,
+	0x2011, 0x024d, 0x2012, 0x2011, 0x026e, 0x7097, 0x0017, 0x080c,
+	0x5f70, 0x1150, 0x7080, 0x9005, 0x1138, 0x080c, 0x5d3c, 0x1188,
+	0x9085, 0x0001, 0x080c, 0x2771, 0x20a9, 0x0008, 0x080c, 0x5f8d,
 	0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000, 0x20a1, 0x024e,
-	0x4003, 0x60c3, 0x0014, 0x080c, 0x5d89, 0x00fe, 0x0005, 0x00f6,
-	0x708c, 0x9005, 0x0500, 0x2011, 0x5d5f, 0x080c, 0x835e, 0x9086,
-	0x0014, 0x11b8, 0x080c, 0x5ed0, 0x2079, 0x0260, 0x7a30, 0x9296,
-	0x1103, 0x1178, 0x7834, 0x9005, 0x1160, 0x7a38, 0xd2fc, 0x0128,
-	0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001, 0x7097, 0x0006, 0x0029,
-	0x0010, 0x080c, 0x5eac, 0x00fe, 0x0005, 0x00f6, 0x7097, 0x0007,
-	0x080c, 0x5e54, 0x2079, 0x0240, 0x7833, 0x1104, 0x7837, 0x0000,
-	0x080c, 0x5ed0, 0x080c, 0x5eb3, 0x11b8, 0x7080, 0x9005, 0x11a0,
-	0x7160, 0x9186, 0xffff, 0x0180, 0x9180, 0x31cc, 0x200d, 0x918c,
-	0xff00, 0x810f, 0x2011, 0x0008, 0x080c, 0x5d0c, 0x0180, 0x080c,
-	0x4e9d, 0x0110, 0x080c, 0x2708, 0x20a9, 0x0008, 0x20e1, 0x0000,
-	0x2099, 0x026e, 0x20e9, 0x0000, 0x20a1, 0x024e, 0x4003, 0x60c3,
-	0x0014, 0x080c, 0x5d89, 0x00fe, 0x0005, 0x00f6, 0x708c, 0x9005,
-	0x0500, 0x2011, 0x5d5f, 0x080c, 0x835e, 0x9086, 0x0014, 0x11b8,
-	0x080c, 0x5ed0, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1104, 0x1178,
-	0x7834, 0x9005, 0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70c0, 0x9005,
-	0x1110, 0x70c3, 0x0001, 0x7097, 0x0008, 0x0029, 0x0010, 0x080c,
-	0x5eac, 0x00fe, 0x0005, 0x00f6, 0x7097, 0x0009, 0x080c, 0x5e54,
-	0x2079, 0x0240, 0x7833, 0x1105, 0x7837, 0x0100, 0x080c, 0x5eb3,
-	0x1150, 0x7080, 0x9005, 0x1138, 0x080c, 0x5c7f, 0x1188, 0x9085,
-	0x0001, 0x080c, 0x2708, 0x20a9, 0x0008, 0x080c, 0x5ed0, 0x20e1,
-	0x0000, 0x2099, 0x026e, 0x20e9, 0x0000, 0x20a1, 0x024e, 0x4003,
-	0x60c3, 0x0014, 0x080c, 0x5d89, 0x0010, 0x080c, 0x57d9, 0x00fe,
-	0x0005, 0x00f6, 0x708c, 0x9005, 0x05a8, 0x2011, 0x5d5f, 0x080c,
-	0x835e, 0x9086, 0x0014, 0x1560, 0x080c, 0x5ed0, 0x2079, 0x0260,
-	0x7a30, 0x9296, 0x1105, 0x1520, 0x7834, 0x9084, 0x0100, 0x2011,
-	0x0100, 0x921e, 0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70c0, 0x9005,
-	0x1110, 0x70c3, 0x0001, 0x7097, 0x000a, 0x00b1, 0x0098, 0x9005,
-	0x1178, 0x7a38, 0xd2fc, 0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3,
-	0x0001, 0x7093, 0x0000, 0x7097, 0x000e, 0x080c, 0x5a27, 0x0010,
-	0x080c, 0x5eac, 0x00fe, 0x0005, 0x00f6, 0x7097, 0x000b, 0x2011,
-	0x1c0e, 0x20e9, 0x0001, 0x22a0, 0x20a9, 0x0040, 0x2019, 0xffff,
-	0x4304, 0x080c, 0x5e54, 0x2079, 0x0240, 0x7833, 0x1106, 0x7837,
-	0x0000, 0x080c, 0x5eb3, 0x0118, 0x2013, 0x0000, 0x0020, 0x705c,
-	0x9085, 0x0100, 0x2012, 0x20a9, 0x0040, 0x2009, 0x024e, 0x2011,
-	0x1c0e, 0x220e, 0x8210, 0x8108, 0x9186, 0x0260, 0x1128, 0x6810,
-	0x8000, 0x6812, 0x2009, 0x0240, 0x1f04, 0x59a9, 0x60c3, 0x0084,
-	0x080c, 0x5d89, 0x00fe, 0x0005, 0x00f6, 0x708c, 0x9005, 0x01c0,
-	0x2011, 0x5d5f, 0x080c, 0x835e, 0x9086, 0x0084, 0x1178, 0x080c,
-	0x5ed0, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1106, 0x1138, 0x7834,
-	0x9005, 0x1120, 0x7097, 0x000c, 0x0029, 0x0010, 0x080c, 0x5eac,
-	0x00fe, 0x0005, 0x00f6, 0x7097, 0x000d, 0x080c, 0x5e54, 0x2079,
-	0x0240, 0x7833, 0x1107, 0x7837, 0x0000, 0x080c, 0x5ed0, 0x20a9,
-	0x0040, 0x2011, 0x026e, 0x2009, 0x024e, 0x220e, 0x8210, 0x8108,
-	0x9186, 0x0260, 0x1150, 0x6810, 0x8000, 0x6812, 0x2009, 0x0240,
-	0x6814, 0x8000, 0x6816, 0x2011, 0x0260, 0x1f04, 0x59ed, 0x60c3,
-	0x0084, 0x080c, 0x5d89, 0x00fe, 0x0005, 0x00f6, 0x708c, 0x9005,
-	0x01e0, 0x2011, 0x5d5f, 0x080c, 0x835e, 0x9086, 0x0084, 0x1198,
-	0x080c, 0x5ed0, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1107, 0x1158,
-	0x7834, 0x9005, 0x1140, 0x7093, 0x0001, 0x080c, 0x5e26, 0x7097,
-	0x000e, 0x0029, 0x0010, 0x080c, 0x5eac, 0x00fe, 0x0005, 0x918d,
-	0x0001, 0x080c, 0x5efb, 0x7097, 0x000f, 0x708f, 0x0000, 0x2061,
-	0x0140, 0x605b, 0xbc85, 0x605f, 0xb5b5, 0x2061, 0x0100, 0x6043,
-	0x0005, 0x6043, 0x0004, 0x2009, 0x07d0, 0x2011, 0x5d5f, 0x080c,
-	0x8352, 0x0005, 0x708c, 0x9005, 0x0130, 0x2011, 0x5d5f, 0x080c,
-	0x835e, 0x7097, 0x0000, 0x0005, 0x7097, 0x0011, 0x080c, 0x9d0b,
-	0x080c, 0x5ed0, 0x20e1, 0x0000, 0x2099, 0x0260, 0x20e9, 0x0000,
-	0x20a1, 0x0240, 0x748c, 0x9480, 0x0018, 0x9080, 0x0007, 0x9084,
-	0x03f8, 0x8004, 0x20a8, 0x4003, 0x080c, 0x5eb3, 0x11a0, 0x7178,
-	0x81ff, 0x0188, 0x900e, 0x707c, 0x9084, 0x00ff, 0x0160, 0x080c,
-	0x269f, 0x9186, 0x007e, 0x0138, 0x9186, 0x0080, 0x0120, 0x2011,
-	0x0008, 0x080c, 0x5d0c, 0x60c3, 0x0014, 0x080c, 0x5d89, 0x0005,
-	0x00f6, 0x708c, 0x9005, 0x0500, 0x2011, 0x5d5f, 0x080c, 0x835e,
-	0x9086, 0x0014, 0x11b8, 0x080c, 0x5ed0, 0x2079, 0x0260, 0x7a30,
-	0x9296, 0x1103, 0x1178, 0x7834, 0x9005, 0x1160, 0x7a38, 0xd2fc,
-	0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001, 0x7097, 0x0012,
-	0x0029, 0x0010, 0x708f, 0x0000, 0x00fe, 0x0005, 0x00f6, 0x7097,
-	0x0013, 0x080c, 0x5e62, 0x2079, 0x0240, 0x7833, 0x1103, 0x7837,
-	0x0000, 0x080c, 0x5ed0, 0x080c, 0x5eb3, 0x1170, 0x7080, 0x9005,
-	0x1158, 0x7158, 0x9186, 0xffff, 0x0138, 0x2011, 0x0008, 0x080c,
-	0x5d0c, 0x0168, 0x080c, 0x5e89, 0x20a9, 0x0008, 0x20e1, 0x0000,
-	0x2099, 0x026e, 0x20e9, 0x0000, 0x20a1, 0x024e, 0x4003, 0x60c3,
-	0x0014, 0x080c, 0x5d89, 0x00fe, 0x0005, 0x00f6, 0x708c, 0x9005,
-	0x0500, 0x2011, 0x5d5f, 0x080c, 0x835e, 0x9086, 0x0014, 0x11b8,
-	0x080c, 0x5ed0, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1104, 0x1178,
-	0x7834, 0x9005, 0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70c0, 0x9005,
-	0x1110, 0x70c3, 0x0001, 0x7097, 0x0014, 0x0029, 0x0010, 0x708f,
-	0x0000, 0x00fe, 0x0005, 0x00f6, 0x7097, 0x0015, 0x080c, 0x5e62,
-	0x2079, 0x0240, 0x7833, 0x1104, 0x7837, 0x0000, 0x080c, 0x5ed0,
-	0x080c, 0x5eb3, 0x11b8, 0x7080, 0x9005, 0x11a0, 0x7160, 0x9186,
-	0xffff, 0x0180, 0x9180, 0x31cc, 0x200d, 0x918c, 0xff00, 0x810f,
-	0x2011, 0x0008, 0x080c, 0x5d0c, 0x0180, 0x080c, 0x4e9d, 0x0110,
-	0x080c, 0x2708, 0x20a9, 0x0008, 0x20e1, 0x0000, 0x2099, 0x026e,
-	0x20e9, 0x0000, 0x20a1, 0x024e, 0x4003, 0x60c3, 0x0014, 0x080c,
-	0x5d89, 0x00fe, 0x0005, 0x00f6, 0x708c, 0x9005, 0x05f0, 0x2011,
-	0x5d5f, 0x080c, 0x835e, 0x9086, 0x0014, 0x15a8, 0x080c, 0x5ed0,
-	0x2079, 0x0260, 0x7a30, 0x9296, 0x1105, 0x1568, 0x7834, 0x9084,
-	0x0100, 0x2011, 0x0100, 0x921e, 0x1168, 0x9085, 0x0001, 0x080c,
-	0x5efb, 0x7a38, 0xd2fc, 0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3,
-	0x0001, 0x0080, 0x9005, 0x11b8, 0x7a38, 0xd2fc, 0x0128, 0x70c0,
-	0x9005, 0x1110, 0x70c3, 0x0001, 0x9085, 0x0001, 0x080c, 0x5efb,
-	0x7093, 0x0000, 0x7a38, 0xd2f4, 0x0110, 0x70db, 0x0008, 0x7097,
-	0x0016, 0x0029, 0x0010, 0x708f, 0x0000, 0x00fe, 0x0005, 0x080c,
-	0x9d0b, 0x080c, 0x5ed0, 0x20e1, 0x0000, 0x2099, 0x0260, 0x20e9,
-	0x0000, 0x20a1, 0x0240, 0x20a9, 0x000e, 0x4003, 0x2011, 0x026d,
-	0x2204, 0x9084, 0x0100, 0x2011, 0x024d, 0x2012, 0x2011, 0x026e,
-	0x7097, 0x0017, 0x080c, 0x5eb3, 0x1150, 0x7080, 0x9005, 0x1138,
-	0x080c, 0x5c7f, 0x1188, 0x9085, 0x0001, 0x080c, 0x2708, 0x20a9,
-	0x0008, 0x080c, 0x5ed0, 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9,
-	0x0000, 0x20a1, 0x024e, 0x4003, 0x60c3, 0x0014, 0x080c, 0x5d89,
-	0x0010, 0x080c, 0x57d9, 0x0005, 0x00f6, 0x708c, 0x9005, 0x01d8,
-	0x2011, 0x5d5f, 0x080c, 0x835e, 0x9086, 0x0084, 0x1190, 0x080c,
-	0x5ed0, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1106, 0x1150, 0x7834,
-	0x9005, 0x1138, 0x9006, 0x080c, 0x5efb, 0x7097, 0x0018, 0x0029,
-	0x0010, 0x708f, 0x0000, 0x00fe, 0x0005, 0x00f6, 0x7097, 0x0019,
-	0x080c, 0x5e62, 0x2079, 0x0240, 0x7833, 0x1106, 0x7837, 0x0000,
-	0x080c, 0x5ed0, 0x2009, 0x026e, 0x2039, 0x1c0e, 0x20a9, 0x0040,
-	0x213e, 0x8738, 0x8108, 0x9186, 0x0280, 0x1128, 0x6814, 0x8000,
-	0x6816, 0x2009, 0x0260, 0x1f04, 0x5be8, 0x2039, 0x1c0e, 0x080c,
-	0x5eb3, 0x11e8, 0x2728, 0x2514, 0x8207, 0x9084, 0x00ff, 0x8000,
-	0x2018, 0x9294, 0x00ff, 0x8007, 0x9205, 0x202a, 0x705c, 0x2310,
-	0x8214, 0x92a0, 0x1c0e, 0x2414, 0x938c, 0x0001, 0x0118, 0x9294,
-	0xff00, 0x0018, 0x9294, 0x00ff, 0x8007, 0x9215, 0x2222, 0x20a9,
-	0x0040, 0x2009, 0x024e, 0x270e, 0x8738, 0x8108, 0x9186, 0x0260,
-	0x1128, 0x6810, 0x8000, 0x6812, 0x2009, 0x0240, 0x1f04, 0x5c1b,
-	0x60c3, 0x0084, 0x080c, 0x5d89, 0x00fe, 0x0005, 0x00f6, 0x708c,
-	0x9005, 0x01e0, 0x2011, 0x5d5f, 0x080c, 0x835e, 0x9086, 0x0084,
-	0x1198, 0x080c, 0x5ed0, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1107,
-	0x1158, 0x7834, 0x9005, 0x1140, 0x7093, 0x0001, 0x080c, 0x5e26,
-	0x7097, 0x001a, 0x0029, 0x0010, 0x708f, 0x0000, 0x00fe, 0x0005,
-	0x9085, 0x0001, 0x080c, 0x5efb, 0x7097, 0x001b, 0x080c, 0x9d0b,
-	0x080c, 0x5ed0, 0x2011, 0x0260, 0x2009, 0x0240, 0x748c, 0x9480,
-	0x0018, 0x9080, 0x0007, 0x9084, 0x03f8, 0x8004, 0x20a8, 0x220e,
-	0x8210, 0x8108, 0x9186, 0x0260, 0x1150, 0x6810, 0x8000, 0x6812,
-	0x2009, 0x0240, 0x6814, 0x8000, 0x6816, 0x2011, 0x0260, 0x1f04,
-	0x5c67, 0x60c3, 0x0084, 0x080c, 0x5d89, 0x0005, 0x0005, 0x0086,
-	0x0096, 0x2029, 0x185f, 0x252c, 0x20a9, 0x0008, 0x2041, 0x1c0e,
-	0x20e9, 0x0001, 0x28a0, 0x080c, 0x5ed0, 0x20e1, 0x0000, 0x2099,
-	0x026e, 0x4003, 0x20a9, 0x0008, 0x2011, 0x0007, 0xd5d4, 0x0108,
-	0x9016, 0x2800, 0x9200, 0x200c, 0x91a6, 0xffff, 0x1148, 0xd5d4,
-	0x0110, 0x8210, 0x0008, 0x8211, 0x1f04, 0x5c99, 0x0804, 0x5d08,
-	0x82ff, 0x1160, 0xd5d4, 0x0120, 0x91a6, 0x3fff, 0x0d90, 0x0020,
-	0x91a6, 0x3fff, 0x0904, 0x5d08, 0x918d, 0xc000, 0x20a9, 0x0010,
-	0x2019, 0x0001, 0xd5d4, 0x0110, 0x2019, 0x0010, 0x2120, 0xd5d4,
-	0x0110, 0x8423, 0x0008, 0x8424, 0x1240, 0xd5d4, 0x0110, 0x8319,
-	0x0008, 0x8318, 0x1f04, 0x5cbf, 0x04d8, 0x23a8, 0x2021, 0x0001,
-	0x8426, 0x8425, 0x1f04, 0x5cd1, 0x2328, 0x8529, 0x92be, 0x0007,
-	0x0158, 0x0006, 0x2039, 0x0007, 0x2200, 0x973a, 0x000e, 0x27a8,
-	0x95a8, 0x0010, 0x1f04, 0x5ce0, 0x755a, 0x95c8, 0x31cc, 0x292d,
-	0x95ac, 0x00ff, 0x757e, 0x6532, 0x6536, 0x0016, 0x2508, 0x080c,
-	0x26e8, 0x001e, 0x60e7, 0x0000, 0x65ea, 0x2018, 0x2304, 0x9405,
-	0x201a, 0x7083, 0x0001, 0x20e9, 0x0000, 0x20a1, 0x024e, 0x20e1,
-	0x0001, 0x2898, 0x20a9, 0x0008, 0x4003, 0x9085, 0x0001, 0x0008,
-	0x9006, 0x009e, 0x008e, 0x0005, 0x0156, 0x01c6, 0x01d6, 0x0136,
-	0x0146, 0x22a8, 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000,
-	0x2011, 0x024e, 0x22a0, 0x4003, 0x014e, 0x013e, 0x01de, 0x01ce,
-	0x015e, 0x2118, 0x9026, 0x2001, 0x0007, 0x939a, 0x0010, 0x0218,
-	0x8420, 0x8001, 0x0cd0, 0x2118, 0x84ff, 0x0120, 0x939a, 0x0010,
-	0x8421, 0x1de0, 0x2021, 0x0001, 0x83ff, 0x0118, 0x8423, 0x8319,
-	0x1de8, 0x9238, 0x2029, 0x026e, 0x9528, 0x2504, 0x942c, 0x11b8,
-	0x9405, 0x203a, 0x715a, 0x91a0, 0x31cc, 0x242d, 0x95ac, 0x00ff,
-	0x757e, 0x6532, 0x6536, 0x0016, 0x2508, 0x080c, 0x26e8, 0x001e,
-	0x60e7, 0x0000, 0x65ea, 0x7083, 0x0001, 0x9084, 0x0000, 0x0005,
-	0x00e6, 0x2071, 0x1800, 0x7087, 0x0000, 0x00ee, 0x0005, 0x00e6,
-	0x00f6, 0x2079, 0x0100, 0x2071, 0x0140, 0x080c, 0x5e15, 0x080c,
-	0x9623, 0x7004, 0x9084, 0x4000, 0x0110, 0x080c, 0x2b75, 0x0126,
-	0x2091, 0x8000, 0x2071, 0x1825, 0x2073, 0x0000, 0x7840, 0x0026,
-	0x0016, 0x2009, 0x00f7, 0x080c, 0x5e72, 0x001e, 0x9094, 0x0010,
-	0x9285, 0x0080, 0x7842, 0x7a42, 0x002e, 0x012e, 0x00fe, 0x00ee,
-	0x0005, 0x0126, 0x2091, 0x8000, 0x080c, 0x29fa, 0x0228, 0x2011,
-	0x0101, 0x2204, 0xc0c5, 0x2012, 0x2011, 0x19ce, 0x2013, 0x0000,
-	0x708f, 0x0000, 0x012e, 0x60a3, 0x0056, 0x60a7, 0x9575, 0x080c,
-	0x961a, 0x6144, 0xd184, 0x0120, 0x7194, 0x918d, 0x2000, 0x0018,
-	0x7188, 0x918d, 0x1000, 0x2011, 0x1975, 0x2112, 0x2009, 0x07d0,
-	0x2011, 0x5d5f, 0x080c, 0x8432, 0x0005, 0x0016, 0x0026, 0x00c6,
-	0x0126, 0x2091, 0x8000, 0x080c, 0x9e89, 0x2009, 0x00f7, 0x080c,
-	0x5e72, 0x2061, 0x19d7, 0x900e, 0x611a, 0x611e, 0x617a, 0x617e,
-	0x2061, 0x1800, 0x6003, 0x0001, 0x2061, 0x0100, 0x6043, 0x0090,
-	0x6043, 0x0010, 0x2009, 0x1975, 0x200b, 0x0000, 0x2009, 0x002d,
-	0x2011, 0x5de1, 0x080c, 0x8352, 0x012e, 0x00ce, 0x002e, 0x001e,
-	0x0005, 0x00e6, 0x0006, 0x0126, 0x2091, 0x8000, 0x0471, 0x2071,
-	0x0100, 0x080c, 0x9623, 0x2071, 0x0140, 0x7004, 0x9084, 0x4000,
-	0x0110, 0x080c, 0x2b75, 0x080c, 0x72ed, 0x0188, 0x080c, 0x7308,
-	0x1170, 0x080c, 0x75e6, 0x0016, 0x080c, 0x27b7, 0x2001, 0x194a,
-	0x2102, 0x001e, 0x080c, 0x75e1, 0x080c, 0x7212, 0x0050, 0x2009,
-	0x0001, 0x080c, 0x2a93, 0x2001, 0x0001, 0x080c, 0x264c, 0x080c,
-	0x5db5, 0x012e, 0x000e, 0x00ee, 0x0005, 0x2001, 0x180e, 0x2004,
-	0xd0bc, 0x0158, 0x0026, 0x0036, 0x2011, 0x8017, 0x2001, 0x1975,
-	0x201c, 0x080c, 0x4abd, 0x003e, 0x002e, 0x0005, 0x20a9, 0x0012,
-	0x20e9, 0x0001, 0x20a1, 0x1c80, 0x080c, 0x5ed0, 0x20e9, 0x0000,
-	0x2099, 0x026e, 0x0099, 0x20a9, 0x0020, 0x080c, 0x5eca, 0x2099,
-	0x0260, 0x20a1, 0x1c92, 0x0051, 0x20a9, 0x000e, 0x080c, 0x5ecd,
-	0x2099, 0x0260, 0x20a1, 0x1cb2, 0x0009, 0x0005, 0x0016, 0x0026,
-	0x3410, 0x3308, 0x2104, 0x8007, 0x2012, 0x8108, 0x8210, 0x1f04,
-	0x5e4a, 0x002e, 0x001e, 0x0005, 0x080c, 0x9d0b, 0x20e1, 0x0001,
-	0x2099, 0x1c00, 0x20e9, 0x0000, 0x20a1, 0x0240, 0x20a9, 0x000c,
-	0x4003, 0x0005, 0x080c, 0x9d0b, 0x080c, 0x5ed0, 0x20e1, 0x0000,
-	0x2099, 0x0260, 0x20e9, 0x0000, 0x20a1, 0x0240, 0x20a9, 0x000c,
-	0x4003, 0x0005, 0x00c6, 0x0006, 0x2061, 0x0100, 0x810f, 0x2001,
-	0x1833, 0x2004, 0x9005, 0x1138, 0x2001, 0x1817, 0x2004, 0x9084,
-	0x00ff, 0x9105, 0x0010, 0x9185, 0x00f7, 0x604a, 0x000e, 0x00ce,
-	0x0005, 0x0016, 0x0046, 0x080c, 0x6742, 0x0158, 0x9006, 0x2020,
-	0x2009, 0x002a, 0x080c, 0xd156, 0x2001, 0x180c, 0x200c, 0xc195,
-	0x2102, 0x2019, 0x002a, 0x900e, 0x080c, 0x3037, 0x080c, 0xbef8,
-	0x0140, 0x0036, 0x2019, 0xffff, 0x2021, 0x0007, 0x080c, 0x4c74,
-	0x003e, 0x004e, 0x001e, 0x0005, 0x080c, 0x5db5, 0x7097, 0x0000,
-	0x708f, 0x0000, 0x0005, 0x0006, 0x2001, 0x180c, 0x2004, 0xd09c,
-	0x0100, 0x000e, 0x0005, 0x0006, 0x0016, 0x0126, 0x2091, 0x8000,
-	0x2001, 0x0101, 0x200c, 0x918d, 0x0006, 0x2102, 0x012e, 0x001e,
-	0x000e, 0x0005, 0x2009, 0x0001, 0x0020, 0x2009, 0x0002, 0x0008,
-	0x900e, 0x6814, 0x9084, 0xffc0, 0x910d, 0x6916, 0x0005, 0x00f6,
-	0x0156, 0x0146, 0x01d6, 0x9006, 0x20a9, 0x0080, 0x20e9, 0x0001,
-	0x20a1, 0x1c00, 0x4004, 0x2079, 0x1c00, 0x7803, 0x2200, 0x7807,
-	0x00ef, 0x780f, 0x00ef, 0x7813, 0x0138, 0x7823, 0xffff, 0x7827,
-	0xffff, 0x01de, 0x014e, 0x015e, 0x00fe, 0x0005, 0x2001, 0x1800,
-	0x2003, 0x0001, 0x0005, 0x2001, 0x1983, 0x0118, 0x2003, 0x0001,
-	0x0010, 0x2003, 0x0000, 0x0005, 0x0156, 0x20a9, 0x0800, 0x2009,
-	0x1000, 0x9006, 0x200a, 0x8108, 0x1f04, 0x5f0a, 0x015e, 0x0005,
-	0x00d6, 0x0036, 0x0156, 0x0136, 0x0146, 0x2069, 0x185e, 0x9006,
-	0xb802, 0xb8ba, 0xb807, 0x0707, 0xb80a, 0xb80e, 0xb812, 0x9198,
-	0x31cc, 0x231d, 0x939c, 0x00ff, 0xbb16, 0x0016, 0x0026, 0xb8ae,
-	0x080c, 0x9e82, 0x1120, 0x9192, 0x007e, 0x1208, 0xbbae, 0x20a9,
-	0x0004, 0xb8b0, 0x20e8, 0xb9b4, 0x9198, 0x0006, 0x9006, 0x23a0,
-	0x4004, 0x20a9, 0x0004, 0x9198, 0x000a, 0x23a0, 0x4004, 0x002e,
-	0x001e, 0xb83e, 0xb842, 0xb84e, 0xb852, 0xb856, 0xb85a, 0xb85e,
-	0xb862, 0xb866, 0xb86a, 0xb86f, 0x0100, 0xb872, 0xb876, 0xb87a,
-	0xb88a, 0xb88e, 0xb893, 0x0008, 0xb896, 0xb89a, 0xb89e, 0xb9a2,
-	0x0096, 0xb8a4, 0x904d, 0x190c, 0x0fb3, 0xb8a7, 0x0000, 0x009e,
-	0x9006, 0xb84a, 0x6810, 0xb83a, 0x680c, 0xb846, 0x6814, 0x9084,
-	0x00ff, 0xb842, 0x014e, 0x013e, 0x015e, 0x003e, 0x00de, 0x0005,
-	0x0126, 0x2091, 0x8000, 0xa978, 0x9182, 0x0800, 0x1a04, 0x5fe6,
-	0x2001, 0x180c, 0x2004, 0x9084, 0x0003, 0x1904, 0x5fcb, 0x9188,
-	0x1000, 0x2104, 0x905d, 0x0570, 0xb804, 0x9084, 0x00ff, 0x908e,
-	0x0006, 0x1560, 0xb8a4, 0x900d, 0x1904, 0x5fec, 0xa888, 0x908a,
-	0x199a, 0x0210, 0x2001, 0x1999, 0x8003, 0x800b, 0x810b, 0x9108,
-	0xa966, 0xb850, 0x900d, 0x1148, 0xa802, 0x2900, 0xb852, 0xb84e,
-	0x080c, 0x86ed, 0x9006, 0x012e, 0x0005, 0x00a6, 0x2150, 0x2900,
-	0xb002, 0xa803, 0x0000, 0x00ae, 0xb852, 0x0c90, 0x2001, 0x0005,
-	0x900e, 0x04b8, 0x2001, 0x0028, 0x900e, 0x0498, 0x9082, 0x0006,
-	0x1290, 0x080c, 0x9e82, 0x1160, 0xb8a0, 0x9084, 0xff80, 0x1140,
-	0xb900, 0xd1fc, 0x0938, 0x2001, 0x0029, 0x2009, 0x1000, 0x0408,
-	0x2001, 0x0028, 0x00a8, 0x2009, 0x180c, 0x210c, 0xd18c, 0x0118,
-	0x2001, 0x0004, 0x0068, 0xd184, 0x0118, 0x2001, 0x0004, 0x0040,
-	0x2001, 0x0029, 0xb900, 0xd1fc, 0x0118, 0x2009, 0x1000, 0x0048,
-	0x900e, 0x0038, 0x2001, 0x0029, 0x900e, 0x0018, 0x2001, 0x0029,
-	0x900e, 0x9005, 0x012e, 0x0005, 0xae7c, 0x96b4, 0x3fff, 0x080c,
-	0x65a2, 0x0904, 0x5fae, 0x0804, 0x5f8e, 0x00b6, 0x00e6, 0x0126,
-	0x2091, 0x8000, 0xa978, 0x9182, 0x0800, 0x1a04, 0x6073, 0x9188,
-	0x1000, 0x2104, 0x905d, 0x0904, 0x604b, 0xb8a0, 0x9086, 0x007f,
-	0x0190, 0xa880, 0xd0fc, 0x1178, 0x080c, 0x674e, 0x0160, 0xa998,
+	0x4003, 0x60c3, 0x0014, 0x080c, 0x5e46, 0x0010, 0x080c, 0x5896,
+	0x0005, 0x00f6, 0x708c, 0x9005, 0x01d8, 0x2011, 0x5e1c, 0x080c,
+	0x84c2, 0x9086, 0x0084, 0x1190, 0x080c, 0x5f8d, 0x2079, 0x0260,
+	0x7a30, 0x9296, 0x1106, 0x1150, 0x7834, 0x9005, 0x1138, 0x9006,
+	0x080c, 0x5fb8, 0x7097, 0x0018, 0x0029, 0x0010, 0x708f, 0x0000,
+	0x00fe, 0x0005, 0x00f6, 0x7097, 0x0019, 0x080c, 0x5f1f, 0x2079,
+	0x0240, 0x7833, 0x1106, 0x7837, 0x0000, 0x080c, 0x5f8d, 0x2009,
+	0x026e, 0x2039, 0x1c0e, 0x20a9, 0x0040, 0x213e, 0x8738, 0x8108,
+	0x9186, 0x0280, 0x1128, 0x6814, 0x8000, 0x6816, 0x2009, 0x0260,
+	0x1f04, 0x5ca5, 0x2039, 0x1c0e, 0x080c, 0x5f70, 0x11e8, 0x2728,
+	0x2514, 0x8207, 0x9084, 0x00ff, 0x8000, 0x2018, 0x9294, 0x00ff,
+	0x8007, 0x9205, 0x202a, 0x705c, 0x2310, 0x8214, 0x92a0, 0x1c0e,
+	0x2414, 0x938c, 0x0001, 0x0118, 0x9294, 0xff00, 0x0018, 0x9294,
+	0x00ff, 0x8007, 0x9215, 0x2222, 0x20a9, 0x0040, 0x2009, 0x024e,
+	0x270e, 0x8738, 0x8108, 0x9186, 0x0260, 0x1128, 0x6810, 0x8000,
+	0x6812, 0x2009, 0x0240, 0x1f04, 0x5cd8, 0x60c3, 0x0084, 0x080c,
+	0x5e46, 0x00fe, 0x0005, 0x00f6, 0x708c, 0x9005, 0x01e0, 0x2011,
+	0x5e1c, 0x080c, 0x84c2, 0x9086, 0x0084, 0x1198, 0x080c, 0x5f8d,
+	0x2079, 0x0260, 0x7a30, 0x9296, 0x1107, 0x1158, 0x7834, 0x9005,
+	0x1140, 0x7093, 0x0001, 0x080c, 0x5ee3, 0x7097, 0x001a, 0x0029,
+	0x0010, 0x708f, 0x0000, 0x00fe, 0x0005, 0x9085, 0x0001, 0x080c,
+	0x5fb8, 0x7097, 0x001b, 0x080c, 0xa190, 0x080c, 0x5f8d, 0x2011,
+	0x0260, 0x2009, 0x0240, 0x748c, 0x9480, 0x0018, 0x9080, 0x0007,
+	0x9084, 0x03f8, 0x8004, 0x20a8, 0x220e, 0x8210, 0x8108, 0x9186,
+	0x0260, 0x1150, 0x6810, 0x8000, 0x6812, 0x2009, 0x0240, 0x6814,
+	0x8000, 0x6816, 0x2011, 0x0260, 0x1f04, 0x5d24, 0x60c3, 0x0084,
+	0x080c, 0x5e46, 0x0005, 0x0005, 0x0086, 0x0096, 0x2029, 0x185f,
+	0x252c, 0x20a9, 0x0008, 0x2041, 0x1c0e, 0x20e9, 0x0001, 0x28a0,
+	0x080c, 0x5f8d, 0x20e1, 0x0000, 0x2099, 0x026e, 0x4003, 0x20a9,
+	0x0008, 0x2011, 0x0007, 0xd5d4, 0x0108, 0x9016, 0x2800, 0x9200,
+	0x200c, 0x91a6, 0xffff, 0x1148, 0xd5d4, 0x0110, 0x8210, 0x0008,
+	0x8211, 0x1f04, 0x5d56, 0x0804, 0x5dc5, 0x82ff, 0x1160, 0xd5d4,
+	0x0120, 0x91a6, 0x3fff, 0x0d90, 0x0020, 0x91a6, 0x3fff, 0x0904,
+	0x5dc5, 0x918d, 0xc000, 0x20a9, 0x0010, 0x2019, 0x0001, 0xd5d4,
+	0x0110, 0x2019, 0x0010, 0x2120, 0xd5d4, 0x0110, 0x8423, 0x0008,
+	0x8424, 0x1240, 0xd5d4, 0x0110, 0x8319, 0x0008, 0x8318, 0x1f04,
+	0x5d7c, 0x04d8, 0x23a8, 0x2021, 0x0001, 0x8426, 0x8425, 0x1f04,
+	0x5d8e, 0x2328, 0x8529, 0x92be, 0x0007, 0x0158, 0x0006, 0x2039,
+	0x0007, 0x2200, 0x973a, 0x000e, 0x27a8, 0x95a8, 0x0010, 0x1f04,
+	0x5d9d, 0x755a, 0x95c8, 0x3268, 0x292d, 0x95ac, 0x00ff, 0x757e,
+	0x6532, 0x6536, 0x0016, 0x2508, 0x080c, 0x2751, 0x001e, 0x60e7,
+	0x0000, 0x65ea, 0x2018, 0x2304, 0x9405, 0x201a, 0x7083, 0x0001,
+	0x20e9, 0x0000, 0x20a1, 0x024e, 0x20e1, 0x0001, 0x2898, 0x20a9,
+	0x0008, 0x4003, 0x9085, 0x0001, 0x0008, 0x9006, 0x009e, 0x008e,
+	0x0005, 0x0156, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x22a8, 0x20e1,
+	0x0000, 0x2099, 0x026e, 0x20e9, 0x0000, 0x2011, 0x024e, 0x22a0,
+	0x4003, 0x014e, 0x013e, 0x01de, 0x01ce, 0x015e, 0x2118, 0x9026,
+	0x2001, 0x0007, 0x939a, 0x0010, 0x0218, 0x8420, 0x8001, 0x0cd0,
+	0x2118, 0x84ff, 0x0120, 0x939a, 0x0010, 0x8421, 0x1de0, 0x2021,
+	0x0001, 0x83ff, 0x0118, 0x8423, 0x8319, 0x1de8, 0x9238, 0x2029,
+	0x026e, 0x9528, 0x2504, 0x942c, 0x11b8, 0x9405, 0x203a, 0x715a,
+	0x91a0, 0x3268, 0x242d, 0x95ac, 0x00ff, 0x757e, 0x6532, 0x6536,
+	0x0016, 0x2508, 0x080c, 0x2751, 0x001e, 0x60e7, 0x0000, 0x65ea,
+	0x7083, 0x0001, 0x9084, 0x0000, 0x0005, 0x00e6, 0x2071, 0x1800,
+	0x7087, 0x0000, 0x00ee, 0x0005, 0x00e6, 0x00f6, 0x2079, 0x0100,
+	0x2071, 0x0140, 0x080c, 0x5ed2, 0x080c, 0x98d1, 0x7004, 0x9084,
+	0x4000, 0x0110, 0x080c, 0x2bde, 0x0126, 0x2091, 0x8000, 0x2071,
+	0x1825, 0x2073, 0x0000, 0x7840, 0x0026, 0x0016, 0x2009, 0x00f7,
+	0x080c, 0x5f2f, 0x001e, 0x9094, 0x0010, 0x9285, 0x0080, 0x7842,
+	0x7a42, 0x002e, 0x012e, 0x00fe, 0x00ee, 0x0005, 0x0126, 0x2091,
+	0x8000, 0x080c, 0x2a63, 0x0228, 0x2011, 0x0101, 0x2204, 0xc0c5,
+	0x2012, 0x2011, 0x19ce, 0x2013, 0x0000, 0x708f, 0x0000, 0x012e,
+	0x60a3, 0x0056, 0x60a7, 0x9575, 0x080c, 0x98c8, 0x6144, 0xd184,
+	0x0120, 0x7194, 0x918d, 0x2000, 0x0018, 0x7188, 0x918d, 0x1000,
+	0x2011, 0x1975, 0x2112, 0x2009, 0x07d0, 0x2011, 0x5e1c, 0x080c,
+	0x859e, 0x0005, 0x0016, 0x0026, 0x00c6, 0x0126, 0x2091, 0x8000,
+	0x080c, 0xa30e, 0x2009, 0x00f7, 0x080c, 0x5f2f, 0x2061, 0x19d7,
+	0x900e, 0x611a, 0x611e, 0x617a, 0x617e, 0x2061, 0x1800, 0x6003,
+	0x0001, 0x2061, 0x0100, 0x6043, 0x0090, 0x6043, 0x0010, 0x2009,
+	0x1975, 0x200b, 0x0000, 0x2009, 0x002d, 0x2011, 0x5e9e, 0x080c,
+	0x84b6, 0x012e, 0x00ce, 0x002e, 0x001e, 0x0005, 0x00e6, 0x0006,
+	0x0126, 0x2091, 0x8000, 0x0471, 0x2071, 0x0100, 0x080c, 0x98d1,
+	0x2071, 0x0140, 0x7004, 0x9084, 0x4000, 0x0110, 0x080c, 0x2bde,
+	0x080c, 0x7359, 0x0188, 0x080c, 0x7374, 0x1170, 0x080c, 0x7656,
+	0x0016, 0x080c, 0x2820, 0x2001, 0x1949, 0x2102, 0x001e, 0x080c,
+	0x7651, 0x080c, 0x727e, 0x0050, 0x2009, 0x0001, 0x080c, 0x2afc,
+	0x2001, 0x0001, 0x080c, 0x26b1, 0x080c, 0x5e72, 0x012e, 0x000e,
+	0x00ee, 0x0005, 0x2001, 0x180e, 0x2004, 0xd0bc, 0x0158, 0x0026,
+	0x0036, 0x2011, 0x8017, 0x2001, 0x1975, 0x201c, 0x080c, 0x4b6d,
+	0x003e, 0x002e, 0x0005, 0x20a9, 0x0012, 0x20e9, 0x0001, 0x20a1,
+	0x1c80, 0x080c, 0x5f8d, 0x20e9, 0x0000, 0x2099, 0x026e, 0x0099,
+	0x20a9, 0x0020, 0x080c, 0x5f87, 0x2099, 0x0260, 0x20a1, 0x1c92,
+	0x0051, 0x20a9, 0x000e, 0x080c, 0x5f8a, 0x2099, 0x0260, 0x20a1,
+	0x1cb2, 0x0009, 0x0005, 0x0016, 0x0026, 0x3410, 0x3308, 0x2104,
+	0x8007, 0x2012, 0x8108, 0x8210, 0x1f04, 0x5f07, 0x002e, 0x001e,
+	0x0005, 0x080c, 0xa190, 0x20e1, 0x0001, 0x2099, 0x1c00, 0x20e9,
+	0x0000, 0x20a1, 0x0240, 0x20a9, 0x000c, 0x4003, 0x0005, 0x080c,
+	0xa190, 0x080c, 0x5f8d, 0x20e1, 0x0000, 0x2099, 0x0260, 0x20e9,
+	0x0000, 0x20a1, 0x0240, 0x20a9, 0x000c, 0x4003, 0x0005, 0x00c6,
+	0x0006, 0x2061, 0x0100, 0x810f, 0x2001, 0x1833, 0x2004, 0x9005,
+	0x1138, 0x2001, 0x1817, 0x2004, 0x9084, 0x00ff, 0x9105, 0x0010,
+	0x9185, 0x00f7, 0x604a, 0x000e, 0x00ce, 0x0005, 0x0016, 0x0046,
+	0x080c, 0x6869, 0x0158, 0x9006, 0x2020, 0x2009, 0x002a, 0x080c,
+	0xdd18, 0x2001, 0x180c, 0x200c, 0xc195, 0x2102, 0x2019, 0x002a,
+	0x900e, 0x080c, 0x30cd, 0x080c, 0xc8ce, 0x0140, 0x0036, 0x2019,
+	0xffff, 0x2021, 0x0007, 0x080c, 0x4d24, 0x003e, 0x004e, 0x001e,
+	0x0005, 0x080c, 0x5e72, 0x7097, 0x0000, 0x708f, 0x0000, 0x0005,
+	0x0006, 0x2001, 0x180c, 0x2004, 0xd09c, 0x0100, 0x000e, 0x0005,
+	0x0006, 0x0016, 0x0126, 0x2091, 0x8000, 0x2001, 0x0101, 0x200c,
+	0x918d, 0x0006, 0x2102, 0x012e, 0x001e, 0x000e, 0x0005, 0x2009,
+	0x0001, 0x0020, 0x2009, 0x0002, 0x0008, 0x900e, 0x6814, 0x9084,
+	0xffc0, 0x910d, 0x6916, 0x0005, 0x00f6, 0x0156, 0x0146, 0x01d6,
+	0x9006, 0x20a9, 0x0080, 0x20e9, 0x0001, 0x20a1, 0x1c00, 0x4004,
+	0x2079, 0x1c00, 0x7803, 0x2200, 0x7807, 0x00ef, 0x780f, 0x00ef,
+	0x7813, 0x0138, 0x7823, 0xffff, 0x7827, 0xffff, 0x01de, 0x014e,
+	0x015e, 0x00fe, 0x0005, 0x2001, 0x1800, 0x2003, 0x0001, 0x0005,
+	0x2001, 0x1983, 0x0118, 0x2003, 0x0001, 0x0010, 0x2003, 0x0000,
+	0x0005, 0x0156, 0x20a9, 0x0800, 0x2009, 0x1000, 0x9006, 0x200a,
+	0x8108, 0x1f04, 0x5fc7, 0x015e, 0x0005, 0x00d6, 0x0036, 0x0156,
+	0x0136, 0x0146, 0x2069, 0x185e, 0x9006, 0xb802, 0xb8be, 0xb807,
+	0x0707, 0xb80a, 0xb80e, 0xb812, 0x9198, 0x3268, 0x231d, 0x939c,
+	0x00ff, 0xbb16, 0x0016, 0x0026, 0xb8b2, 0x080c, 0xa307, 0x1120,
+	0x9192, 0x007e, 0x1208, 0xbbb2, 0x20a9, 0x0004, 0xb8b4, 0x20e8,
+	0xb9b8, 0x9198, 0x0006, 0x9006, 0x23a0, 0x4004, 0x20a9, 0x0004,
+	0x9198, 0x000a, 0x23a0, 0x4004, 0x002e, 0x001e, 0xb83e, 0xb842,
+	0xb84e, 0xb852, 0xb856, 0xb85a, 0xb85e, 0xb862, 0xb866, 0xb86a,
+	0xb86f, 0x0100, 0xb872, 0xb876, 0xb87a, 0xb88a, 0xb88e, 0xb893,
+	0x0008, 0xb896, 0xb89a, 0xb89e, 0xb8ae, 0xb9a2, 0x0096, 0xb8a4,
+	0x904d, 0x190c, 0x0fbf, 0xb8a7, 0x0000, 0x009e, 0x9006, 0xb84a,
+	0x6810, 0xb83a, 0x680c, 0xb846, 0x6814, 0x9084, 0x00ff, 0xb842,
+	0x014e, 0x013e, 0x015e, 0x003e, 0x00de, 0x0005, 0x0126, 0x2091,
+	0x8000, 0xa978, 0x9182, 0x0800, 0x1a04, 0x60a4, 0x2001, 0x180c,
+	0x2004, 0x9084, 0x0003, 0x1904, 0x60aa, 0x9188, 0x1000, 0x2104,
+	0x905d, 0x0570, 0xb804, 0x9084, 0x00ff, 0x908e, 0x0006, 0x1560,
+	0xb8a4, 0x900d, 0x1904, 0x60bc, 0xa888, 0x908a, 0x199a, 0x0210,
+	0x2001, 0x1999, 0x8003, 0x800b, 0x810b, 0x9108, 0xa966, 0xb850,
+	0x900d, 0x1148, 0xa802, 0x2900, 0xb852, 0xb84e, 0x080c, 0x88be,
+	0x9006, 0x012e, 0x0005, 0x00a6, 0x2150, 0x2900, 0xb002, 0xa803,
+	0x0000, 0x00ae, 0xb852, 0x0c90, 0x2001, 0x0005, 0x900e, 0x04b8,
+	0x2001, 0x0028, 0x900e, 0x0498, 0x9082, 0x0006, 0x1290, 0x080c,
+	0xa307, 0x1160, 0xb8a0, 0x9084, 0xff80, 0x1140, 0xb900, 0xd1fc,
+	0x0938, 0x2001, 0x0029, 0x2009, 0x1000, 0x0408, 0x2001, 0x0028,
+	0x00a8, 0x2009, 0x180c, 0x210c, 0xd18c, 0x0118, 0x2001, 0x0004,
+	0x0068, 0xd184, 0x0118, 0x2001, 0x0004, 0x0040, 0x2001, 0x0029,
+	0xb900, 0xd1fc, 0x0118, 0x2009, 0x1000, 0x0048, 0x900e, 0x0038,
+	0x2001, 0x0029, 0x900e, 0x0018, 0x2001, 0x0029, 0x900e, 0x9005,
+	0x012e, 0x0005, 0x2001, 0x180c, 0x2004, 0xd084, 0x19d0, 0x9188,
+	0x1000, 0x2104, 0x905d, 0x09a8, 0x080c, 0x686d, 0x1990, 0xb800,
+	0xd0bc, 0x0978, 0x0804, 0x6048, 0xae7c, 0x96b4, 0x3fff, 0x080c,
+	0x66aa, 0x0904, 0x606c, 0x0804, 0x604c, 0x00b6, 0x00e6, 0x0126,
+	0x2091, 0x8000, 0xa978, 0x9182, 0x0800, 0x1a04, 0x6143, 0x9188,
+	0x1000, 0x2104, 0x905d, 0x0904, 0x611b, 0xb8a0, 0x9086, 0x007f,
+	0x0190, 0xa880, 0xd0fc, 0x1178, 0x080c, 0x6875, 0x0160, 0xa998,
 	0x81ff, 0x0130, 0x908e, 0x0004, 0x0130, 0x908e, 0x0005, 0x0118,
-	0x080c, 0x6746, 0x1598, 0xa880, 0xd0fc, 0x01e0, 0xa898, 0x9005,
-	0x01c8, 0x2060, 0x0026, 0x2010, 0x080c, 0xb943, 0x002e, 0x1120,
-	0x2001, 0x0008, 0x0804, 0x6075, 0x6020, 0x9086, 0x000a, 0x0120,
-	0x2001, 0x0008, 0x0804, 0x6075, 0x601a, 0x6003, 0x0008, 0x2900,
-	0x6016, 0x0058, 0x080c, 0x9ec2, 0x05e8, 0x2b00, 0x6012, 0x2900,
+	0x080c, 0x686d, 0x1598, 0xa880, 0xd0fc, 0x01e0, 0xa898, 0x9005,
+	0x01c8, 0x2060, 0x0026, 0x2010, 0x080c, 0xc1bb, 0x002e, 0x1120,
+	0x2001, 0x0008, 0x0804, 0x6145, 0x6020, 0x9086, 0x000a, 0x0120,
+	0x2001, 0x0008, 0x0804, 0x6145, 0x601a, 0x6003, 0x0008, 0x2900,
+	0x6016, 0x0058, 0x080c, 0xa347, 0x05e8, 0x2b00, 0x6012, 0x2900,
 	0x6016, 0x600b, 0xffff, 0x6023, 0x000a, 0x2009, 0x0003, 0x080c,
-	0x9f88, 0x9006, 0x0458, 0x2001, 0x0028, 0x0438, 0x9082, 0x0006,
-	0x1290, 0x080c, 0x9e82, 0x1160, 0xb8a0, 0x9084, 0xff80, 0x1140,
+	0xa419, 0x9006, 0x0458, 0x2001, 0x0028, 0x0438, 0x9082, 0x0006,
+	0x1290, 0x080c, 0xa307, 0x1160, 0xb8a0, 0x9084, 0xff80, 0x1140,
 	0xb900, 0xd1fc, 0x0900, 0x2001, 0x0029, 0x2009, 0x1000, 0x00a8,
 	0x2001, 0x0028, 0x0090, 0x2009, 0x180c, 0x210c, 0xd18c, 0x0118,
 	0x2001, 0x0004, 0x0050, 0xd184, 0x0118, 0x2001, 0x0004, 0x0028,
@@ -2875,163 +2901,170 @@
 	0x7930, 0xd18c, 0x0118, 0x2001, 0x0004, 0x0038, 0xd184, 0x0118,
 	0x2001, 0x0004, 0x0010, 0x2001, 0x0029, 0x900e, 0x0038, 0x2001,
 	0x002c, 0x900e, 0x0018, 0x2001, 0x0029, 0x900e, 0x9006, 0x0008,
-	0x9005, 0x012e, 0x00be, 0x00fe, 0x0005, 0x610a, 0x60c5, 0x60dc,
-	0x610a, 0x610a, 0x610a, 0x610a, 0x610a, 0x2100, 0x9082, 0x007e,
-	0x1278, 0x080c, 0x63c1, 0x0148, 0x9046, 0xb810, 0x9306, 0x1904,
-	0x6112, 0xb814, 0x9206, 0x15f0, 0x0028, 0xbb12, 0xba16, 0x0010,
-	0x080c, 0x497d, 0x0150, 0x04b0, 0x080c, 0x6411, 0x1598, 0xb810,
-	0x9306, 0x1580, 0xb814, 0x9206, 0x1568, 0x080c, 0x9ec2, 0x0530,
-	0x2b00, 0x6012, 0x080c, 0xbc97, 0x2900, 0x6016, 0x600b, 0xffff,
-	0x6023, 0x000a, 0xa87c, 0x9086, 0x0001, 0x1170, 0x080c, 0x3066,
-	0x9006, 0x080c, 0x635e, 0x2001, 0x0002, 0x080c, 0x6372, 0x2001,
-	0x0200, 0xb86e, 0xb893, 0x0002, 0x2009, 0x0003, 0x080c, 0x9f88,
+	0x9005, 0x012e, 0x00be, 0x00fe, 0x0005, 0x61da, 0x6195, 0x61ac,
+	0x61da, 0x61da, 0x61da, 0x61da, 0x61da, 0x2100, 0x9082, 0x007e,
+	0x1278, 0x080c, 0x6497, 0x0148, 0x9046, 0xb810, 0x9306, 0x1904,
+	0x61e2, 0xb814, 0x9206, 0x15f0, 0x0028, 0xbb12, 0xba16, 0x0010,
+	0x080c, 0x4a2b, 0x0150, 0x04b0, 0x080c, 0x64fc, 0x1598, 0xb810,
+	0x9306, 0x1580, 0xb814, 0x9206, 0x1568, 0x080c, 0xa347, 0x0530,
+	0x2b00, 0x6012, 0x080c, 0xc640, 0x2900, 0x6016, 0x600b, 0xffff,
+	0x6023, 0x000a, 0xa87c, 0x9086, 0x0001, 0x1170, 0x080c, 0x3102,
+	0x9006, 0x080c, 0x6434, 0x2001, 0x0002, 0x080c, 0x6448, 0x2001,
+	0x0200, 0xb86e, 0xb893, 0x0002, 0x2009, 0x0003, 0x080c, 0xa419,
 	0x9006, 0x0068, 0x2001, 0x0001, 0x900e, 0x0038, 0x2001, 0x002c,
 	0x900e, 0x0018, 0x2001, 0x0028, 0x900e, 0x9005, 0x0000, 0x012e,
 	0x00be, 0x00fe, 0x0005, 0x00b6, 0x00f6, 0x00e6, 0x0126, 0x2091,
-	0x8000, 0xa898, 0x90c6, 0x0015, 0x0904, 0x62e7, 0x90c6, 0x0056,
-	0x0904, 0x62eb, 0x90c6, 0x0066, 0x0904, 0x62ef, 0x90c6, 0x0067,
-	0x0904, 0x62f3, 0x90c6, 0x0068, 0x0904, 0x62f7, 0x90c6, 0x006b,
-	0x0904, 0x62fb, 0x90c6, 0x0071, 0x0904, 0x62ff, 0x90c6, 0x0074,
-	0x0904, 0x6303, 0x90c6, 0x007c, 0x0904, 0x6307, 0x90c6, 0x007e,
-	0x0904, 0x630b, 0x90c6, 0x0037, 0x0904, 0x630f, 0x9016, 0x2079,
-	0x1800, 0xa978, 0x9186, 0x00ff, 0x0904, 0x62e2, 0x9182, 0x0800,
-	0x1a04, 0x62e2, 0x080c, 0x6411, 0x11b8, 0xb804, 0x9084, 0x00ff,
-	0x9082, 0x0006, 0x1288, 0xa898, 0x90c6, 0x0064, 0x0904, 0x6254,
-	0x90c6, 0x006f, 0x0148, 0x080c, 0x9e82, 0x1904, 0x62cb, 0xb8a0,
-	0x9084, 0xff80, 0x1904, 0x62cb, 0xa898, 0x90c6, 0x006f, 0x0158,
-	0x90c6, 0x005e, 0x0904, 0x622b, 0x90c6, 0x0064, 0x0904, 0x6254,
-	0x2008, 0x0804, 0x61f4, 0xa99c, 0xa8b4, 0x2040, 0x080c, 0x9e82,
-	0x1120, 0x9182, 0x007f, 0x0a04, 0x61f4, 0x9186, 0x00ff, 0x0904,
-	0x61f4, 0x9182, 0x0800, 0x1a04, 0x61f4, 0xaaa4, 0xaba0, 0x7878,
+	0x8000, 0xa898, 0x90c6, 0x0015, 0x0904, 0x63bd, 0x90c6, 0x0056,
+	0x0904, 0x63c1, 0x90c6, 0x0066, 0x0904, 0x63c5, 0x90c6, 0x0067,
+	0x0904, 0x63c9, 0x90c6, 0x0068, 0x0904, 0x63cd, 0x90c6, 0x006b,
+	0x0904, 0x63d1, 0x90c6, 0x0071, 0x0904, 0x63d5, 0x90c6, 0x0074,
+	0x0904, 0x63d9, 0x90c6, 0x007c, 0x0904, 0x63dd, 0x90c6, 0x007e,
+	0x0904, 0x63e1, 0x90c6, 0x0037, 0x0904, 0x63e5, 0x9016, 0x2079,
+	0x1800, 0xa978, 0x9186, 0x00ff, 0x0904, 0x63b8, 0x9182, 0x0800,
+	0x1a04, 0x63b8, 0x080c, 0x64fc, 0x11b8, 0xb804, 0x9084, 0x00ff,
+	0x9082, 0x0006, 0x1288, 0xa898, 0x90c6, 0x0064, 0x0904, 0x632a,
+	0x90c6, 0x006f, 0x0148, 0x080c, 0xa307, 0x1904, 0x63a1, 0xb8a0,
+	0x9084, 0xff80, 0x1904, 0x63a1, 0xa898, 0x90c6, 0x006f, 0x0158,
+	0x90c6, 0x005e, 0x0904, 0x6301, 0x90c6, 0x0064, 0x0904, 0x632a,
+	0x2008, 0x0804, 0x62c4, 0xa99c, 0xa8b4, 0x2040, 0x080c, 0xa307,
+	0x1120, 0x9182, 0x007f, 0x0a04, 0x62c4, 0x9186, 0x00ff, 0x0904,
+	0x62c4, 0x9182, 0x0800, 0x1a04, 0x62c4, 0xaaa4, 0xaba0, 0x7878,
 	0x9306, 0x11a8, 0x787c, 0x0096, 0x924e, 0x1128, 0x2208, 0x2310,
-	0x009e, 0x0804, 0x61f4, 0x080c, 0x9e82, 0x1140, 0x99cc, 0xff00,
-	0x009e, 0x1128, 0x2208, 0x2310, 0x0804, 0x61f4, 0x009e, 0x080c,
-	0x497d, 0x0904, 0x61fd, 0x900e, 0x9016, 0x90c6, 0x4000, 0x1528,
-	0x0006, 0x080c, 0x6643, 0x20a9, 0x0004, 0xa860, 0x20e8, 0xa85c,
-	0x9080, 0x0032, 0x20a0, 0xb8b0, 0x20e0, 0xb8b4, 0x9080, 0x0006,
-	0x2098, 0x080c, 0x0f7e, 0x20a9, 0x0004, 0xa860, 0x20e8, 0xa85c,
-	0x9080, 0x0036, 0x20a0, 0xb8b0, 0x20e0, 0xb8b4, 0x9080, 0x000a,
-	0x2098, 0x080c, 0x0f7e, 0x000e, 0x00c8, 0x90c6, 0x4007, 0x1110,
+	0x009e, 0x0804, 0x62c4, 0x080c, 0xa307, 0x1140, 0x99cc, 0xff00,
+	0x009e, 0x1128, 0x2208, 0x2310, 0x0804, 0x62c4, 0x009e, 0x080c,
+	0x4a2b, 0x0904, 0x62cd, 0x900e, 0x9016, 0x90c6, 0x4000, 0x1528,
+	0x0006, 0x080c, 0x674b, 0x20a9, 0x0004, 0xa860, 0x20e8, 0xa85c,
+	0x9080, 0x0032, 0x20a0, 0xb8b4, 0x20e0, 0xb8b8, 0x9080, 0x0006,
+	0x2098, 0x080c, 0x0f8a, 0x20a9, 0x0004, 0xa860, 0x20e8, 0xa85c,
+	0x9080, 0x0036, 0x20a0, 0xb8b4, 0x20e0, 0xb8b8, 0x9080, 0x000a,
+	0x2098, 0x080c, 0x0f8a, 0x000e, 0x00c8, 0x90c6, 0x4007, 0x1110,
 	0x2408, 0x00a0, 0x90c6, 0x4008, 0x1118, 0x2708, 0x2610, 0x0070,
 	0x90c6, 0x4009, 0x1108, 0x0050, 0x90c6, 0x4006, 0x0138, 0x2001,
 	0x4005, 0x2009, 0x000a, 0x0010, 0x2001, 0x4006, 0xa89a, 0xa99e,
-	0xaaa2, 0x2001, 0x0030, 0x900e, 0x0440, 0x080c, 0x9ec2, 0x1130,
+	0xaaa2, 0x2001, 0x0030, 0x900e, 0x0470, 0x080c, 0xa347, 0x1130,
 	0x2001, 0x4005, 0x2009, 0x0003, 0x9016, 0x0c80, 0x2b00, 0x6012,
-	0x080c, 0xbc97, 0x2900, 0x6016, 0x6023, 0x0001, 0xa86c, 0xd88c,
-	0x0108, 0xc0f5, 0xa86e, 0x0126, 0x2091, 0x8000, 0x080c, 0x3066,
-	0x012e, 0x9006, 0x080c, 0x635e, 0x2001, 0x0002, 0x080c, 0x6372,
-	0x2009, 0x0002, 0x080c, 0x9f88, 0x9006, 0x9005, 0x012e, 0x00ee,
-	0x00fe, 0x00be, 0x0005, 0x080c, 0x55bb, 0x0118, 0x2009, 0x0007,
-	0x00f8, 0xa99c, 0xaeb4, 0x080c, 0x6411, 0x1904, 0x61ef, 0x9186,
-	0x007f, 0x0130, 0x080c, 0x6746, 0x0118, 0x2009, 0x0009, 0x0080,
-	0x0096, 0x080c, 0x1001, 0x1120, 0x009e, 0x2009, 0x0002, 0x0040,
-	0x2900, 0x009e, 0xa806, 0x080c, 0xbb36, 0x19b0, 0x2009, 0x0003,
-	0x2001, 0x4005, 0x0804, 0x61f6, 0xa99c, 0xaeb4, 0x080c, 0x6411,
-	0x1904, 0x61ef, 0x0096, 0x080c, 0x1001, 0x1128, 0x009e, 0x2009,
-	0x0002, 0x0804, 0x62a8, 0x2900, 0x009e, 0xa806, 0x0096, 0x2048,
-	0x20a9, 0x002b, 0xb8b0, 0x20e0, 0xb8b4, 0x2098, 0xa860, 0x20e8,
-	0xa85c, 0x9080, 0x0002, 0x20a0, 0x4003, 0x20a9, 0x0008, 0x9080,
-	0x0006, 0x20a0, 0xbbb4, 0x9398, 0x0006, 0x2398, 0x080c, 0x0f7e,
-	0x009e, 0xa87f, 0x0000, 0xa887, 0x0000, 0xa89b, 0x4000, 0xd684,
-	0x1168, 0x080c, 0x55a7, 0xd0b4, 0x1118, 0xa89f, 0x000b, 0x00e0,
-	0xb800, 0xd08c, 0x0118, 0xa89f, 0x000c, 0x00b0, 0x080c, 0x6746,
-	0x0118, 0xa89f, 0x0009, 0x0080, 0x080c, 0x55bb, 0x0118, 0xa89f,
-	0x0007, 0x0050, 0x080c, 0xbb19, 0x1904, 0x6224, 0x2009, 0x0003,
-	0x2001, 0x4005, 0x0804, 0x61f6, 0xa87f, 0x0030, 0xa89b, 0x4005,
-	0xa804, 0x8006, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0,
-	0x9080, 0x0002, 0x2009, 0x002b, 0xaaa4, 0xaba0, 0xacac, 0xada8,
-	0x2031, 0x0000, 0x2041, 0x1247, 0x080c, 0xa45b, 0x1904, 0x6224,
-	0x2009, 0x0002, 0x08e8, 0x2001, 0x0028, 0x900e, 0x0804, 0x6225,
-	0x2009, 0x180c, 0x210c, 0xd18c, 0x0118, 0x2001, 0x0004, 0x0038,
-	0xd184, 0x0118, 0x2001, 0x0004, 0x0010, 0x2001, 0x0029, 0x900e,
-	0x0804, 0x6225, 0x2001, 0x0029, 0x900e, 0x0804, 0x6225, 0x080c,
-	0x35fd, 0x0804, 0x6226, 0x080c, 0x52cd, 0x0804, 0x6226, 0x080c,
-	0x4430, 0x0804, 0x6226, 0x080c, 0x44a9, 0x0804, 0x6226, 0x080c,
-	0x4505, 0x0804, 0x6226, 0x080c, 0x4645, 0x0804, 0x6226, 0x080c,
-	0x4a37, 0x0804, 0x6226, 0x080c, 0x4ced, 0x0804, 0x6226, 0x080c,
-	0x4f33, 0x0804, 0x6226, 0x080c, 0x512d, 0x0804, 0x6226, 0x080c,
-	0x3831, 0x0804, 0x6226, 0x00b6, 0xa978, 0x9182, 0x0800, 0x1268,
-	0x9188, 0x1000, 0x2104, 0x905d, 0x0140, 0x080c, 0x6746, 0x1148,
-	0x00e9, 0x080c, 0x6541, 0x9006, 0x00b0, 0x2001, 0x0028, 0x900e,
-	0x0090, 0x9082, 0x0006, 0x1240, 0xb900, 0xd1fc, 0x0d88, 0x2001,
-	0x0029, 0x2009, 0x1000, 0x0038, 0x2001, 0x0029, 0x900e, 0x0018,
-	0x2001, 0x0029, 0x900e, 0x9005, 0x00be, 0x0005, 0x0126, 0x2091,
-	0x8000, 0xb850, 0x900d, 0x0150, 0x2900, 0x0096, 0x2148, 0xa802,
-	0x009e, 0xa803, 0x0000, 0xb852, 0x012e, 0x0005, 0x2900, 0xb852,
-	0xb84e, 0xa803, 0x0000, 0x0cc0, 0xb84c, 0x904d, 0x0130, 0xa800,
-	0x9005, 0x1108, 0xb852, 0xb84e, 0x9905, 0x0005, 0x00b6, 0x0126,
-	0x00c6, 0x0026, 0x2091, 0x8000, 0x6210, 0x2258, 0xba00, 0x9005,
-	0x0110, 0xc285, 0x0008, 0xc284, 0xba02, 0x002e, 0x00ce, 0x012e,
-	0x00be, 0x0005, 0x00b6, 0x0126, 0x00c6, 0x2091, 0x8000, 0x6210,
-	0x2258, 0xba04, 0x0006, 0x9086, 0x0006, 0x1170, 0xb89c, 0xd0ac,
-	0x0158, 0x080c, 0x6742, 0x0140, 0x9284, 0xff00, 0x8007, 0x9086,
-	0x0007, 0x1110, 0x2011, 0x0600, 0x000e, 0x9294, 0xff00, 0x9215,
-	0xba06, 0x0006, 0x9086, 0x0006, 0x1120, 0xba90, 0x82ff, 0x090c,
-	0x0dc4, 0x000e, 0x00ce, 0x012e, 0x00be, 0x0005, 0x00b6, 0x0126,
-	0x00c6, 0x2091, 0x8000, 0x6210, 0x2258, 0xba04, 0x0006, 0x9086,
-	0x0006, 0x1168, 0xb89c, 0xd0a4, 0x0150, 0x080c, 0x673e, 0x1138,
-	0x9284, 0x00ff, 0x9086, 0x0007, 0x1110, 0x2011, 0x0006, 0x000e,
-	0x9294, 0x00ff, 0x8007, 0x9215, 0xba06, 0x00ce, 0x012e, 0x00be,
-	0x0005, 0x9182, 0x0800, 0x0218, 0x9085, 0x0001, 0x0005, 0x00d6,
-	0x0026, 0x9190, 0x1000, 0x2204, 0x905d, 0x11b0, 0x2001, 0x182f,
-	0x2004, 0x9082, 0x0050, 0x0290, 0x0096, 0x080c, 0x1001, 0x2958,
-	0x009e, 0x0160, 0x2b00, 0x2012, 0xb85c, 0xb8b6, 0xb860, 0xb8b2,
-	0x9006, 0xb8a6, 0x080c, 0x5f10, 0x9006, 0x0010, 0x9085, 0x0001,
-	0x002e, 0x00de, 0x0005, 0x00b6, 0x0096, 0x0126, 0x2091, 0x8000,
-	0x0026, 0x9182, 0x0800, 0x0218, 0x9085, 0x0001, 0x00a8, 0x00d6,
-	0x9190, 0x1000, 0x2204, 0x905d, 0x0168, 0x2013, 0x0000, 0xb8a4,
-	0x904d, 0x190c, 0x0fb3, 0x2b48, 0xb8b4, 0xb85e, 0xb8b0, 0xb862,
-	0x080c, 0x1043, 0x00de, 0x9006, 0x002e, 0x012e, 0x009e, 0x00be,
-	0x0005, 0x0016, 0x9182, 0x0800, 0x0218, 0x9085, 0x0001, 0x0030,
-	0x9188, 0x1000, 0x2104, 0x905d, 0x0dc0, 0x9006, 0x001e, 0x0005,
-	0x00d6, 0x0156, 0x0136, 0x0146, 0x9006, 0xb80a, 0xb80e, 0xb800,
-	0xc08c, 0xb802, 0x080c, 0x72e5, 0x1510, 0xb8a0, 0x9086, 0x007e,
-	0x0120, 0x080c, 0x9e82, 0x11d8, 0x0078, 0x7040, 0xd0e4, 0x01b8,
-	0x00c6, 0x2061, 0x195f, 0x7048, 0x2062, 0x704c, 0x6006, 0x7050,
-	0x600a, 0x7054, 0x600e, 0x00ce, 0x703c, 0x2069, 0x0140, 0x9005,
-	0x1110, 0x2001, 0x0001, 0x6886, 0x2069, 0x1800, 0x68b2, 0x7040,
-	0xb85e, 0x7048, 0xb862, 0x704c, 0xb866, 0x20e1, 0x0000, 0x2099,
-	0x0276, 0xb8b0, 0x20e8, 0xb8b4, 0x9088, 0x000a, 0x21a0, 0x20a9,
-	0x0004, 0x4003, 0x2099, 0x027a, 0x9088, 0x0006, 0x21a0, 0x20a9,
-	0x0004, 0x4003, 0x2069, 0x0200, 0x6817, 0x0001, 0x7040, 0xb86a,
-	0x7144, 0xb96e, 0x7048, 0xb872, 0x7050, 0xb876, 0x2069, 0x0200,
-	0x6817, 0x0000, 0xb8a0, 0x9086, 0x007e, 0x1110, 0x7144, 0xb96e,
-	0x9182, 0x0211, 0x1218, 0x2009, 0x0008, 0x0400, 0x9182, 0x0259,
-	0x1218, 0x2009, 0x0007, 0x00d0, 0x9182, 0x02c1, 0x1218, 0x2009,
-	0x0006, 0x00a0, 0x9182, 0x0349, 0x1218, 0x2009, 0x0005, 0x0070,
-	0x9182, 0x0421, 0x1218, 0x2009, 0x0004, 0x0040, 0x9182, 0x0581,
-	0x1218, 0x2009, 0x0003, 0x0010, 0x2009, 0x0002, 0xb992, 0x014e,
-	0x013e, 0x015e, 0x00de, 0x0005, 0x0016, 0x0026, 0x00e6, 0x2071,
-	0x0260, 0x7034, 0xb896, 0x703c, 0xb89a, 0x7054, 0xb89e, 0x00ee,
+	0x080c, 0xc640, 0x2900, 0x6016, 0x6023, 0x0001, 0xa86c, 0xd88c,
+	0x0108, 0xc0f5, 0xa86e, 0x0126, 0x2091, 0x8000, 0x080c, 0x3102,
+	0x012e, 0x9006, 0x080c, 0x6434, 0x2001, 0x0002, 0x080c, 0x6448,
+	0x2009, 0x0002, 0x080c, 0xa419, 0xa8b4, 0xd094, 0x0118, 0xb8bc,
+	0xc08d, 0xb8be, 0x9006, 0x9005, 0x012e, 0x00ee, 0x00fe, 0x00be,
+	0x0005, 0x080c, 0x5678, 0x0118, 0x2009, 0x0007, 0x00f8, 0xa99c,
+	0xaeb4, 0x080c, 0x64fc, 0x1904, 0x62bf, 0x9186, 0x007f, 0x0130,
+	0x080c, 0x686d, 0x0118, 0x2009, 0x0009, 0x0080, 0x0096, 0x080c,
+	0x100d, 0x1120, 0x009e, 0x2009, 0x0002, 0x0040, 0x2900, 0x009e,
+	0xa806, 0x080c, 0xc3b1, 0x19b0, 0x2009, 0x0003, 0x2001, 0x4005,
+	0x0804, 0x62c6, 0xa99c, 0xaeb4, 0x080c, 0x64fc, 0x1904, 0x62bf,
+	0x0096, 0x080c, 0x100d, 0x1128, 0x009e, 0x2009, 0x0002, 0x0804,
+	0x637e, 0x2900, 0x009e, 0xa806, 0x0096, 0x2048, 0x20a9, 0x002b,
+	0xb8b4, 0x20e0, 0xb8b8, 0x2098, 0xa860, 0x20e8, 0xa85c, 0x9080,
+	0x0002, 0x20a0, 0x4003, 0x20a9, 0x0008, 0x9080, 0x0006, 0x20a0,
+	0xbbb8, 0x9398, 0x0006, 0x2398, 0x080c, 0x0f8a, 0x009e, 0xa87f,
+	0x0000, 0xa887, 0x0000, 0xa89b, 0x4000, 0xd684, 0x1168, 0x080c,
+	0x5664, 0xd0b4, 0x1118, 0xa89f, 0x000b, 0x00e0, 0xb800, 0xd08c,
+	0x0118, 0xa89f, 0x000c, 0x00b0, 0x080c, 0x686d, 0x0118, 0xa89f,
+	0x0009, 0x0080, 0x080c, 0x5678, 0x0118, 0xa89f, 0x0007, 0x0050,
+	0x080c, 0xc394, 0x1904, 0x62fa, 0x2009, 0x0003, 0x2001, 0x4005,
+	0x0804, 0x62c6, 0xa87f, 0x0030, 0xa89b, 0x4005, 0xa804, 0x8006,
+	0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x0002,
+	0x2009, 0x002b, 0xaaa4, 0xaba0, 0xacac, 0xada8, 0x2031, 0x0000,
+	0x2041, 0x1253, 0x080c, 0xa8fb, 0x1904, 0x62fa, 0x2009, 0x0002,
+	0x08e8, 0x2001, 0x0028, 0x900e, 0x0804, 0x62fb, 0x2009, 0x180c,
+	0x210c, 0xd18c, 0x0118, 0x2001, 0x0004, 0x0038, 0xd184, 0x0118,
+	0x2001, 0x0004, 0x0010, 0x2001, 0x0029, 0x900e, 0x0804, 0x62fb,
+	0x2001, 0x0029, 0x900e, 0x0804, 0x62fb, 0x080c, 0x3699, 0x0804,
+	0x62fc, 0x080c, 0x538a, 0x0804, 0x62fc, 0x080c, 0x44d3, 0x0804,
+	0x62fc, 0x080c, 0x454c, 0x0804, 0x62fc, 0x080c, 0x45a8, 0x0804,
+	0x62fc, 0x080c, 0x46e8, 0x0804, 0x62fc, 0x080c, 0x4ae7, 0x0804,
+	0x62fc, 0x080c, 0x4da4, 0x0804, 0x62fc, 0x080c, 0x4ff0, 0x0804,
+	0x62fc, 0x080c, 0x51ea, 0x0804, 0x62fc, 0x080c, 0x38cf, 0x0804,
+	0x62fc, 0x00b6, 0xa978, 0x9182, 0x0800, 0x1268, 0x9188, 0x1000,
+	0x2104, 0x905d, 0x0140, 0x080c, 0x686d, 0x1148, 0x00e9, 0x080c,
+	0x6649, 0x9006, 0x00b0, 0x2001, 0x0028, 0x900e, 0x0090, 0x9082,
+	0x0006, 0x1240, 0xb900, 0xd1fc, 0x0d88, 0x2001, 0x0029, 0x2009,
+	0x1000, 0x0038, 0x2001, 0x0029, 0x900e, 0x0018, 0x2001, 0x0029,
+	0x900e, 0x9005, 0x00be, 0x0005, 0x0126, 0x2091, 0x8000, 0xb850,
+	0x900d, 0x0150, 0x2900, 0x0096, 0x2148, 0xa802, 0x009e, 0xa803,
+	0x0000, 0xb852, 0x012e, 0x0005, 0x2900, 0xb852, 0xb84e, 0xa803,
+	0x0000, 0x0cc0, 0xb84c, 0x904d, 0x0130, 0xa800, 0x9005, 0x1108,
+	0xb852, 0xb84e, 0x9905, 0x0005, 0x00b6, 0x0126, 0x00c6, 0x0026,
+	0x2091, 0x8000, 0x6210, 0x2258, 0xba00, 0x9005, 0x0110, 0xc285,
+	0x0008, 0xc284, 0xba02, 0x002e, 0x00ce, 0x012e, 0x00be, 0x0005,
+	0x00b6, 0x0126, 0x00c6, 0x2091, 0x8000, 0x6210, 0x2258, 0xba04,
+	0x0006, 0x9086, 0x0006, 0x1170, 0xb89c, 0xd0ac, 0x0158, 0x080c,
+	0x6869, 0x0140, 0x9284, 0xff00, 0x8007, 0x9086, 0x0007, 0x1110,
+	0x2011, 0x0600, 0x000e, 0x9294, 0xff00, 0x9215, 0xba06, 0x0006,
+	0x9086, 0x0006, 0x1120, 0xba90, 0x82ff, 0x090c, 0x0dc3, 0x000e,
+	0x00ce, 0x012e, 0x00be, 0x0005, 0x00b6, 0x0126, 0x00c6, 0x2091,
+	0x8000, 0x6210, 0x2258, 0xba04, 0x0006, 0x9086, 0x0006, 0x1168,
+	0xb89c, 0xd0a4, 0x0150, 0x080c, 0x6865, 0x1138, 0x9284, 0x00ff,
+	0x9086, 0x0007, 0x1110, 0x2011, 0x0006, 0x000e, 0x9294, 0x00ff,
+	0x8007, 0x9215, 0xba06, 0x00ce, 0x012e, 0x00be, 0x0005, 0x9182,
+	0x0800, 0x0218, 0x9085, 0x0001, 0x0005, 0x00d6, 0x0026, 0x9190,
+	0x1000, 0x2204, 0x905d, 0x11b0, 0x2001, 0x182f, 0x2004, 0x9082,
+	0x0050, 0x0290, 0x0096, 0x080c, 0x100d, 0x2958, 0x009e, 0x0160,
+	0x2b00, 0x2012, 0xb85c, 0xb8ba, 0xb860, 0xb8b6, 0x9006, 0xb8a6,
+	0x080c, 0x5fcd, 0x9006, 0x0010, 0x9085, 0x0001, 0x002e, 0x00de,
+	0x0005, 0x00b6, 0x0096, 0x0126, 0x2091, 0x8000, 0x0026, 0x9182,
+	0x0800, 0x0218, 0x9085, 0x0001, 0x0450, 0x00d6, 0x9190, 0x1000,
+	0x2204, 0x905d, 0x0510, 0x2013, 0x0000, 0xb8a4, 0x904d, 0x190c,
+	0x0fbf, 0x00d6, 0x00c6, 0xb8ac, 0x2060, 0x8cff, 0x0168, 0x600c,
+	0x0006, 0x6014, 0x2048, 0x080c, 0xc1cd, 0x0110, 0x080c, 0x0fbf,
+	0x080c, 0xa39d, 0x00ce, 0x0c88, 0x00ce, 0x00de, 0x2b48, 0xb8b8,
+	0xb85e, 0xb8b4, 0xb862, 0x080c, 0x104f, 0x00de, 0x9006, 0x002e,
+	0x012e, 0x009e, 0x00be, 0x0005, 0x0016, 0x9182, 0x0800, 0x0218,
+	0x9085, 0x0001, 0x0030, 0x9188, 0x1000, 0x2104, 0x905d, 0x0dc0,
+	0x9006, 0x001e, 0x0005, 0x00d6, 0x0156, 0x0136, 0x0146, 0x9006,
+	0xb80a, 0xb80e, 0xb800, 0xc08c, 0xb802, 0x080c, 0x7351, 0x1510,
+	0xb8a0, 0x9086, 0x007e, 0x0120, 0x080c, 0xa307, 0x11d8, 0x0078,
+	0x7040, 0xd0e4, 0x01b8, 0x00c6, 0x2061, 0x195e, 0x7048, 0x2062,
+	0x704c, 0x6006, 0x7050, 0x600a, 0x7054, 0x600e, 0x00ce, 0x703c,
+	0x2069, 0x0140, 0x9005, 0x1110, 0x2001, 0x0001, 0x6886, 0x2069,
+	0x1800, 0x68b2, 0x7040, 0xb85e, 0x7048, 0xb862, 0x704c, 0xb866,
+	0x20e1, 0x0000, 0x2099, 0x0276, 0xb8b4, 0x20e8, 0xb8b8, 0x9088,
+	0x000a, 0x21a0, 0x20a9, 0x0004, 0x4003, 0x2099, 0x027a, 0x9088,
+	0x0006, 0x21a0, 0x20a9, 0x0004, 0x4003, 0x2069, 0x0200, 0x6817,
+	0x0001, 0x7040, 0xb86a, 0x7144, 0xb96e, 0x7048, 0xb872, 0x7050,
+	0xb876, 0x2069, 0x0200, 0x6817, 0x0000, 0xb8a0, 0x9086, 0x007e,
+	0x1110, 0x7144, 0xb96e, 0x9182, 0x0211, 0x1218, 0x2009, 0x0008,
+	0x0400, 0x9182, 0x0259, 0x1218, 0x2009, 0x0007, 0x00d0, 0x9182,
+	0x02c1, 0x1218, 0x2009, 0x0006, 0x00a0, 0x9182, 0x0349, 0x1218,
+	0x2009, 0x0005, 0x0070, 0x9182, 0x0421, 0x1218, 0x2009, 0x0004,
+	0x0040, 0x9182, 0x0581, 0x1218, 0x2009, 0x0003, 0x0010, 0x2009,
+	0x0002, 0xb992, 0x014e, 0x013e, 0x015e, 0x00de, 0x0005, 0x0016,
+	0x0026, 0x00e6, 0x2071, 0x0260, 0x7034, 0xb896, 0x703c, 0xb89a,
+	0x7054, 0xb89e, 0x0036, 0xbbbc, 0xc384, 0xba00, 0x2009, 0x187e,
+	0x210c, 0xd0bc, 0x0120, 0xd1ec, 0x0110, 0xc2ad, 0x0008, 0xc2ac,
+	0xd0c4, 0x0148, 0xd1e4, 0x0138, 0xc2bd, 0xd0cc, 0x0128, 0xd38c,
+	0x1108, 0xc385, 0x0008, 0xc2bc, 0xba02, 0xbbbe, 0x003e, 0x00ee,
 	0x002e, 0x001e, 0x0005, 0x0096, 0x00a6, 0x0126, 0x2091, 0x8000,
-	0xb8a4, 0x904d, 0x05d0, 0xa968, 0x81ff, 0x1904, 0x6509, 0xaa6c,
+	0xb8a4, 0x904d, 0x05d0, 0xa968, 0x81ff, 0x1904, 0x6611, 0xaa6c,
 	0x9282, 0x001c, 0x0250, 0x2950, 0xa804, 0x904d, 0x1dc0, 0x080c,
-	0x1001, 0x05e8, 0x2900, 0xb006, 0x0468, 0x0136, 0x0146, 0x01c6,
+	0x100d, 0x05e8, 0x2900, 0xb006, 0x0468, 0x0136, 0x0146, 0x01c6,
 	0x01d6, 0x8906, 0x8006, 0x8007, 0x908c, 0x003f, 0x21e0, 0x9084,
 	0xffc0, 0x9080, 0x001e, 0x2098, 0x2009, 0x001c, 0x20a9, 0x0001,
-	0x4002, 0x9086, 0xffff, 0x0120, 0x8109, 0x1dd0, 0x080c, 0x0dc4,
+	0x4002, 0x9086, 0xffff, 0x0120, 0x8109, 0x1dd0, 0x080c, 0x0dc3,
 	0x3c00, 0x20e8, 0x3300, 0x8001, 0x20a0, 0x4604, 0x8210, 0xaa6e,
-	0x01de, 0x01ce, 0x014e, 0x013e, 0x0060, 0x080c, 0x1001, 0x0178,
-	0x2900, 0xb8a6, 0xa86b, 0x0000, 0x080c, 0x65ca, 0xa86f, 0x0001,
+	0x01de, 0x01ce, 0x014e, 0x013e, 0x0060, 0x080c, 0x100d, 0x0178,
+	0x2900, 0xb8a6, 0xa86b, 0x0000, 0x080c, 0x66d2, 0xa86f, 0x0001,
 	0xae7a, 0x9085, 0x0001, 0x012e, 0x00ae, 0x009e, 0x0005, 0x9006,
 	0x0cd0, 0x0126, 0x2091, 0x8000, 0x0096, 0x0036, 0x0046, 0x00a6,
-	0xb8a4, 0x904d, 0x0190, 0xa868, 0x9005, 0x1158, 0x080c, 0x65da,
+	0xb8a4, 0x904d, 0x0190, 0xa868, 0x9005, 0x1158, 0x080c, 0x66e2,
 	0x1160, 0x2348, 0xa86c, 0x908a, 0x0002, 0x0268, 0x8001, 0xa86e,
-	0x0020, 0x080c, 0x1033, 0xb8a7, 0x0000, 0x00ae, 0x004e, 0x003e,
+	0x0020, 0x080c, 0x103f, 0xb8a7, 0x0000, 0x00ae, 0x004e, 0x003e,
 	0x009e, 0x012e, 0x0005, 0xb8a4, 0x9306, 0x1120, 0x2348, 0xa804,
-	0xb8a6, 0x0020, 0x2348, 0x2450, 0xa804, 0xb006, 0x080c, 0x1033,
-	0x0c60, 0x0126, 0x2091, 0x8000, 0x080c, 0x86ed, 0x012e, 0x0005,
+	0xb8a6, 0x0020, 0x2348, 0x2450, 0xa804, 0xb006, 0x080c, 0x103f,
+	0x0c60, 0x0126, 0x2091, 0x8000, 0x080c, 0x88be, 0x012e, 0x0005,
 	0x901e, 0x0010, 0x2019, 0x0001, 0x900e, 0x0126, 0x2091, 0x8000,
 	0xb84c, 0x2048, 0xb800, 0xd0dc, 0x1170, 0x89ff, 0x0500, 0x83ff,
 	0x0120, 0xa87c, 0x9606, 0x0158, 0x0030, 0xa870, 0x9406, 0x1118,
 	0xa874, 0x9506, 0x0120, 0x2908, 0xa800, 0x2048, 0x0c70, 0x080c,
-	0x9a08, 0xaa00, 0xb84c, 0x9906, 0x1110, 0xba4e, 0x0020, 0x00a6,
+	0x9cd9, 0xaa00, 0xb84c, 0x9906, 0x1110, 0xba4e, 0x0020, 0x00a6,
 	0x2150, 0xb202, 0x00ae, 0x82ff, 0x1110, 0xb952, 0x89ff, 0x012e,
 	0x0005, 0x9016, 0x0036, 0x0046, 0x00f9, 0x004e, 0x003e, 0x1110,
-	0x2011, 0x0001, 0x0005, 0x080c, 0x6640, 0x1904, 0xba0f, 0x0005,
-	0x080c, 0x6640, 0x1904, 0xb9b4, 0x0005, 0x080c, 0x6640, 0x1904,
-	0xba0c, 0x0005, 0x080c, 0x6640, 0x1904, 0xb9d3, 0x0005, 0x080c,
-	0x6640, 0x1904, 0xba52, 0x0005, 0xb8a4, 0x900d, 0x1118, 0x9085,
+	0x2011, 0x0001, 0x0005, 0x080c, 0x6748, 0x1904, 0xc28a, 0x0005,
+	0x080c, 0x6748, 0x1904, 0xc22f, 0x0005, 0x080c, 0x6748, 0x1904,
+	0xc287, 0x0005, 0x080c, 0x6748, 0x1904, 0xc24e, 0x0005, 0x080c,
+	0x6748, 0x1904, 0xc2cd, 0x0005, 0xb8a4, 0x900d, 0x1118, 0x9085,
 	0x0001, 0x0005, 0x2918, 0x2320, 0x0136, 0x01c6, 0xa868, 0x9005,
 	0x11e8, 0x890e, 0x810e, 0x810f, 0x9184, 0x003f, 0x20e0, 0x9184,
 	0xffc0, 0x9080, 0x001e, 0x2098, 0x20a9, 0x0001, 0x2009, 0x001c,
@@ -3046,93 +3079,89 @@
 	0x0110, 0x2348, 0x0c30, 0x9085, 0x0001, 0x0068, 0x0146, 0x01d6,
 	0x3300, 0x8001, 0x20a0, 0x3c00, 0x20e8, 0x2001, 0xffff, 0x4004,
 	0x01de, 0x014e, 0x9006, 0x01ce, 0x013e, 0x0005, 0x0096, 0x0126,
-	0x2091, 0x8000, 0xb8a4, 0x904d, 0x1190, 0x080c, 0x1001, 0x0168,
-	0x2900, 0xb8a6, 0x080c, 0x65ca, 0xa86b, 0x0001, 0xa86f, 0x0000,
+	0x2091, 0x8000, 0xb8a4, 0x904d, 0x1190, 0x080c, 0x100d, 0x0168,
+	0x2900, 0xb8a6, 0x080c, 0x66d2, 0xa86b, 0x0001, 0xa86f, 0x0000,
 	0x9085, 0x0001, 0x012e, 0x009e, 0x0005, 0x9006, 0x0cd8, 0x0096,
-	0xa804, 0xa807, 0x0000, 0x2048, 0x080c, 0x0fb3, 0x009e, 0x0c50,
+	0xa804, 0xa807, 0x0000, 0x2048, 0x080c, 0x0fbf, 0x009e, 0x0c50,
 	0x0096, 0x0126, 0x2091, 0x8000, 0xb8a4, 0x904d, 0x0130, 0xb8a7,
-	0x0000, 0x080c, 0x0fb3, 0x9085, 0x0001, 0x012e, 0x009e, 0x0005,
+	0x0000, 0x080c, 0x0fbf, 0x9085, 0x0001, 0x012e, 0x009e, 0x0005,
 	0xb89c, 0xd0a4, 0x0005, 0x900e, 0xb89c, 0xd0a4, 0x1108, 0xc185,
-	0xd0ac, 0x1108, 0xc195, 0x0005, 0x00b6, 0x00f6, 0x080c, 0x72e5,
-	0x01b0, 0x71c0, 0x81ff, 0x1198, 0x71d8, 0xd19c, 0x0180, 0x2001,
-	0x007e, 0x9080, 0x1000, 0x2004, 0x905d, 0x0148, 0xb804, 0x9084,
-	0x00ff, 0x9086, 0x0006, 0x1118, 0xb800, 0xc0ed, 0xb802, 0x2079,
-	0x185e, 0x7804, 0xd0a4, 0x01e8, 0x0156, 0x20a9, 0x007f, 0x900e,
-	0x0016, 0x080c, 0x6411, 0x1180, 0x080c, 0x676a, 0x1168, 0xb804,
-	0x9084, 0xff00, 0x8007, 0x9096, 0x0004, 0x0118, 0x9086, 0x0006,
-	0x1118, 0xb800, 0xc0ed, 0xb802, 0x001e, 0x8108, 0x1f04, 0x6670,
-	0x015e, 0x080c, 0x6704, 0x0120, 0x2001, 0x1962, 0x200c, 0x0038,
-	0x2079, 0x185e, 0x7804, 0xd0a4, 0x0130, 0x2009, 0x07d0, 0x2011,
-	0x669e, 0x080c, 0x8432, 0x00fe, 0x00be, 0x0005, 0x00b6, 0x2011,
-	0x669e, 0x080c, 0x835e, 0x080c, 0x6704, 0x01d8, 0x2001, 0x107e,
-	0x2004, 0x2058, 0xb900, 0xc1ec, 0xb902, 0x080c, 0x6742, 0x0130,
-	0x2009, 0x07d0, 0x2011, 0x669e, 0x080c, 0x8432, 0x00e6, 0x2071,
-	0x1800, 0x9006, 0x707a, 0x705c, 0x707e, 0x080c, 0x2e5f, 0x00ee,
+	0xd0ac, 0x1108, 0xc195, 0xb800, 0xd0bc, 0x0108, 0xc18d, 0x0005,
+	0x00b6, 0x00f6, 0x080c, 0x7351, 0x01b0, 0x71c0, 0x81ff, 0x1198,
+	0x71d8, 0xd19c, 0x0180, 0x2001, 0x007e, 0x9080, 0x1000, 0x2004,
+	0x905d, 0x0148, 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006, 0x1118,
+	0xb800, 0xc0ed, 0xb802, 0x2079, 0x185e, 0x7804, 0xd0a4, 0x01e8,
+	0x0156, 0x20a9, 0x007f, 0x900e, 0x0016, 0x080c, 0x64fc, 0x1180,
+	0x080c, 0x6891, 0x1168, 0xb804, 0x9084, 0xff00, 0x8007, 0x9096,
+	0x0004, 0x0118, 0x9086, 0x0006, 0x1118, 0xb800, 0xc0ed, 0xb802,
+	0x001e, 0x8108, 0x1f04, 0x677c, 0x015e, 0x080c, 0x682b, 0x0120,
+	0x2001, 0x1961, 0x200c, 0x0098, 0x2079, 0x185e, 0x7804, 0xd0a4,
+	0x0190, 0x2009, 0x07d0, 0x2001, 0x182b, 0x2004, 0x9005, 0x0138,
+	0x2001, 0x187e, 0x2004, 0xd0e4, 0x0110, 0x2009, 0x5dc0, 0x2011,
+	0x67b6, 0x080c, 0x859e, 0x00fe, 0x00be, 0x0005, 0x00b6, 0x2011,
+	0x67b6, 0x080c, 0x84c2, 0x080c, 0x682b, 0x01d8, 0x2001, 0x107e,
+	0x2004, 0x2058, 0xb900, 0xc1ec, 0xb902, 0x080c, 0x6869, 0x0130,
+	0x2009, 0x07d0, 0x2011, 0x67b6, 0x080c, 0x859e, 0x00e6, 0x2071,
+	0x1800, 0x9006, 0x707a, 0x705c, 0x707e, 0x080c, 0x2ed6, 0x00ee,
 	0x04c8, 0x0156, 0x00c6, 0x20a9, 0x007f, 0x900e, 0x0016, 0x080c,
-	0x6411, 0x1550, 0x080c, 0x676a, 0x1538, 0xb800, 0xd0ec, 0x0520,
-	0x0046, 0xbaa0, 0x2220, 0x9006, 0x2009, 0x0029, 0x080c, 0xd156,
-	0xb800, 0xc0e5, 0xc0ec, 0xb802, 0x080c, 0x673e, 0x2001, 0x0707,
+	0x64fc, 0x1550, 0x080c, 0x6891, 0x1538, 0xb800, 0xd0ec, 0x0520,
+	0x0046, 0xbaa0, 0x2220, 0x9006, 0x2009, 0x0029, 0x080c, 0xdd18,
+	0xb800, 0xc0e5, 0xc0ec, 0xb802, 0x080c, 0x6865, 0x2001, 0x0707,
 	0x1128, 0xb804, 0x9084, 0x00ff, 0x9085, 0x0700, 0xb806, 0x2019,
-	0x0029, 0x080c, 0x8843, 0x0076, 0x903e, 0x080c, 0x8748, 0x900e,
-	0x080c, 0xce89, 0x007e, 0x004e, 0x001e, 0x8108, 0x1f04, 0x66c6,
+	0x0029, 0x080c, 0x8a2b, 0x0076, 0x903e, 0x080c, 0x8919, 0x900e,
+	0x080c, 0xda37, 0x007e, 0x004e, 0x001e, 0x8108, 0x1f04, 0x67de,
 	0x00ce, 0x015e, 0x00be, 0x0005, 0x00b6, 0x6010, 0x2058, 0xb800,
-	0xc0ec, 0xb802, 0x00be, 0x0005, 0x00b6, 0x00f6, 0x2001, 0x107e,
-	0x2004, 0x905d, 0x0110, 0xb800, 0xd0ec, 0x00fe, 0x00be, 0x0005,
-	0x0126, 0x0026, 0x2091, 0x8000, 0x0006, 0xbaa0, 0x9290, 0x1000,
-	0x2204, 0x9b06, 0x190c, 0x0dc4, 0x000e, 0xba00, 0x9005, 0x0110,
-	0xc2fd, 0x0008, 0xc2fc, 0xba02, 0x002e, 0x012e, 0x0005, 0x2011,
-	0x1836, 0x2204, 0xd0cc, 0x0138, 0x2001, 0x1960, 0x200c, 0x2011,
-	0x6734, 0x080c, 0x8432, 0x0005, 0x2011, 0x6734, 0x080c, 0x835e,
-	0x2011, 0x1836, 0x2204, 0xc0cc, 0x2012, 0x0005, 0x080c, 0x55a7,
-	0xd0ac, 0x0005, 0x080c, 0x55a7, 0xd0a4, 0x0005, 0x0016, 0xb904,
-	0x9184, 0x00ff, 0x908e, 0x0006, 0x001e, 0x0005, 0x0016, 0xb904,
-	0x9184, 0xff00, 0x8007, 0x908e, 0x0006, 0x001e, 0x0005, 0x00b6,
-	0x00f6, 0x080c, 0xbef8, 0x0158, 0x70d8, 0x9084, 0x0028, 0x0138,
-	0x2001, 0x107f, 0x2004, 0x905d, 0x0110, 0xb8b8, 0xd094, 0x00fe,
-	0x00be, 0x0005, 0x0006, 0x0016, 0x0026, 0xb810, 0x9005, 0x0168,
-	0x2009, 0x182b, 0x210c, 0x9194, 0x00ff, 0x9206, 0x1130, 0xb814,
-	0x9084, 0xff00, 0x918c, 0xff00, 0x9106, 0x002e, 0x001e, 0x000e,
-	0x0005, 0x0006, 0x0016, 0x0036, 0x0046, 0x0076, 0x00b6, 0x2001,
-	0x1817, 0x203c, 0x9780, 0x31cc, 0x203d, 0x97bc, 0xff00, 0x873f,
-	0x9006, 0x2018, 0x2008, 0x9284, 0x8000, 0x0110, 0x2019, 0x0001,
-	0x9294, 0x7fff, 0x2100, 0x9706, 0x0190, 0x91a0, 0x1000, 0x2404,
-	0x905d, 0x0168, 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006, 0x1138,
-	0x83ff, 0x0118, 0xb89c, 0xd0a4, 0x0110, 0x8211, 0x0158, 0x8108,
-	0x83ff, 0x0120, 0x9182, 0x0800, 0x0e28, 0x0068, 0x9182, 0x007e,
-	0x0e08, 0x0048, 0x00be, 0x007e, 0x004e, 0x003e, 0x001e, 0x9085,
-	0x0001, 0x000e, 0x0005, 0x00be, 0x007e, 0x004e, 0x003e, 0x001e,
-	0x9006, 0x000e, 0x0005, 0x0046, 0x0056, 0x0076, 0x00b6, 0x2100,
-	0x9084, 0x7fff, 0x9080, 0x1000, 0x2004, 0x905d, 0x0130, 0xb804,
-	0x9084, 0x00ff, 0x9086, 0x0006, 0x0550, 0x9184, 0x8000, 0x0580,
-	0x2001, 0x1817, 0x203c, 0x9780, 0x31cc, 0x203d, 0x97bc, 0xff00,
-	0x873f, 0x9006, 0x2020, 0x2400, 0x9706, 0x01a0, 0x94a8, 0x1000,
-	0x2504, 0x905d, 0x0178, 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006,
-	0x1148, 0xb89c, 0xd0a4, 0x0130, 0xb814, 0x9206, 0x1118, 0xb810,
-	0x9306, 0x0128, 0x8420, 0x9482, 0x0800, 0x0e28, 0x0048, 0x918c,
-	0x7fff, 0x00be, 0x007e, 0x005e, 0x004e, 0x9085, 0x0001, 0x0005,
-	0x918c, 0x7fff, 0x00be, 0x007e, 0x005e, 0x004e, 0x9006, 0x0005,
-	0x0006, 0x2001, 0x00a0, 0x8001, 0xa001, 0xa001, 0xa001, 0x1dd8,
-	0x000e, 0x0005, 0x0006, 0x2001, 0x00f8, 0x8001, 0xa001, 0xa001,
-	0xa001, 0x1dd8, 0x000e, 0x0005, 0x0006, 0x2001, 0x00e8, 0x8001,
-	0xa001, 0xa001, 0xa001, 0x1dd8, 0x000e, 0x0005, 0x2071, 0x1911,
-	0x7003, 0x0001, 0x7007, 0x0000, 0x9006, 0x7012, 0x7016, 0x701a,
-	0x701e, 0x700a, 0x7046, 0x2071, 0x1925, 0x080c, 0x101a, 0x090c,
-	0x0dc4, 0xa8af, 0xdcb0, 0xa86b, 0x1911, 0xa86f, 0x0000, 0xa873,
-	0x0000, 0xa877, 0x0001, 0xa87b, 0x1928, 0xa87f, 0x0020, 0xa883,
-	0x0040, 0xa8a3, 0x0000, 0x2900, 0x708e, 0x2001, 0x1923, 0x2003,
-	0x0000, 0x0005, 0x0016, 0x00e6, 0x2071, 0x1925, 0x900e, 0x710a,
-	0x080c, 0x55a7, 0xd0fc, 0x1148, 0x080c, 0x55a7, 0x900e, 0xd09c,
-	0x0108, 0x8108, 0x7102, 0x0804, 0x68c7, 0x2001, 0x187e, 0x200c,
-	0x9184, 0x000f, 0x0006, 0x2001, 0x180d, 0x2004, 0xd08c, 0x000e,
-	0x0108, 0x9006, 0x0002, 0x686c, 0x686c, 0x686c, 0x686c, 0x686c,
-	0x6893, 0x68a8, 0x68d2, 0x68ab, 0x686c, 0x686c, 0x686c, 0x686c,
-	0x686c, 0x686c, 0x686c, 0x7003, 0x0003, 0x2009, 0x187f, 0x210c,
-	0x9184, 0xff00, 0x908e, 0xff00, 0x0140, 0x8007, 0x9005, 0x1110,
-	0x2001, 0x0002, 0x8003, 0x7006, 0x0410, 0x7007, 0x0001, 0x00f8,
-	0x7003, 0x0005, 0x0c50, 0x7003, 0x0004, 0x0136, 0x0146, 0x0156,
-	0x20e1, 0x0001, 0x2099, 0x1882, 0x2071, 0x1925, 0x0096, 0x708c,
-	0x2048, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0024, 0x20a0, 0x009e,
-	0x20a9, 0x0004, 0x4003, 0x015e, 0x014e, 0x013e, 0x0000, 0x2071,
+	0xc0ec, 0xb802, 0x00be, 0x0005, 0x7810, 0x00b6, 0x2058, 0xb800,
+	0x00be, 0xd0ac, 0x0005, 0x6010, 0x00b6, 0x905d, 0x0108, 0xb800,
+	0x00be, 0xd0bc, 0x0005, 0x00b6, 0x00f6, 0x2001, 0x107e, 0x2004,
+	0x905d, 0x0110, 0xb800, 0xd0ec, 0x00fe, 0x00be, 0x0005, 0x0126,
+	0x0026, 0x2091, 0x8000, 0x0006, 0xbaa0, 0x9290, 0x1000, 0x2204,
+	0x9b06, 0x190c, 0x0dc3, 0x000e, 0xba00, 0x9005, 0x0110, 0xc2fd,
+	0x0008, 0xc2fc, 0xba02, 0x002e, 0x012e, 0x0005, 0x2011, 0x1836,
+	0x2204, 0xd0cc, 0x0138, 0x2001, 0x195f, 0x200c, 0x2011, 0x685b,
+	0x080c, 0x859e, 0x0005, 0x2011, 0x685b, 0x080c, 0x84c2, 0x2011,
+	0x1836, 0x2204, 0xc0cc, 0x2012, 0x0005, 0x080c, 0x5664, 0xd0ac,
+	0x0005, 0x080c, 0x5664, 0xd0a4, 0x0005, 0x0016, 0xb904, 0x9184,
+	0x00ff, 0x908e, 0x0006, 0x001e, 0x0005, 0x0016, 0xb904, 0x9184,
+	0xff00, 0x8007, 0x908e, 0x0006, 0x001e, 0x0005, 0x00b6, 0x00f6,
+	0x080c, 0xc8ce, 0x0158, 0x70d8, 0x9084, 0x0028, 0x0138, 0x2001,
+	0x107f, 0x2004, 0x905d, 0x0110, 0xb8bc, 0xd094, 0x00fe, 0x00be,
+	0x0005, 0x0006, 0x0016, 0x0026, 0xb810, 0x9005, 0x0168, 0x2009,
+	0x182b, 0x210c, 0x9194, 0x00ff, 0x9206, 0x1130, 0xb814, 0x9084,
+	0xff00, 0x918c, 0xff00, 0x9106, 0x002e, 0x001e, 0x000e, 0x0005,
+	0x0006, 0x0016, 0x0036, 0x0046, 0x0076, 0x00b6, 0x2001, 0x1817,
+	0x203c, 0x9780, 0x3268, 0x203d, 0x97bc, 0xff00, 0x873f, 0x9006,
+	0x2018, 0x2008, 0x9284, 0x8000, 0x0110, 0x2019, 0x0001, 0x9294,
+	0x7fff, 0x2100, 0x9706, 0x0190, 0x91a0, 0x1000, 0x2404, 0x905d,
+	0x0168, 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006, 0x1138, 0x83ff,
+	0x0118, 0xb89c, 0xd0a4, 0x0110, 0x8211, 0x0158, 0x8108, 0x83ff,
+	0x0120, 0x9182, 0x0800, 0x0e28, 0x0068, 0x9182, 0x007e, 0x0e08,
+	0x0048, 0x00be, 0x007e, 0x004e, 0x003e, 0x001e, 0x9085, 0x0001,
+	0x000e, 0x0005, 0x00be, 0x007e, 0x004e, 0x003e, 0x001e, 0x9006,
+	0x000e, 0x0005, 0x0046, 0x0056, 0x0076, 0x00b6, 0x2100, 0x9084,
+	0x7fff, 0x9080, 0x1000, 0x2004, 0x905d, 0x0130, 0xb804, 0x9084,
+	0x00ff, 0x9086, 0x0006, 0x0550, 0x9184, 0x8000, 0x0580, 0x2001,
+	0x1817, 0x203c, 0x9780, 0x3268, 0x203d, 0x97bc, 0xff00, 0x873f,
+	0x9006, 0x2020, 0x2400, 0x9706, 0x01a0, 0x94a8, 0x1000, 0x2504,
+	0x905d, 0x0178, 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006, 0x1148,
+	0xb89c, 0xd0a4, 0x0130, 0xb814, 0x9206, 0x1118, 0xb810, 0x9306,
+	0x0128, 0x8420, 0x9482, 0x0800, 0x0e28, 0x0048, 0x918c, 0x7fff,
+	0x00be, 0x007e, 0x005e, 0x004e, 0x9085, 0x0001, 0x0005, 0x918c,
+	0x7fff, 0x00be, 0x007e, 0x005e, 0x004e, 0x9006, 0x0005, 0x0006,
+	0x2001, 0x00a0, 0x8001, 0xa001, 0xa001, 0xa001, 0x1dd8, 0x000e,
+	0x0005, 0x0006, 0x2001, 0x00f8, 0x8001, 0xa001, 0xa001, 0xa001,
+	0x1dd8, 0x000e, 0x0005, 0x0006, 0x2001, 0x00e8, 0x8001, 0xa001,
+	0xa001, 0xa001, 0x1dd8, 0x000e, 0x0005, 0x2071, 0x1911, 0x7003,
+	0x0001, 0x7007, 0x0000, 0x9006, 0x7012, 0x7016, 0x701a, 0x701e,
+	0x700a, 0x7046, 0x2001, 0x1923, 0x2003, 0x0000, 0x0005, 0x0016,
+	0x00e6, 0x2071, 0x1925, 0x900e, 0x710a, 0x080c, 0x5664, 0xd0fc,
+	0x1140, 0x080c, 0x5664, 0x900e, 0xd09c, 0x0108, 0x8108, 0x7102,
+	0x0470, 0x2001, 0x187e, 0x200c, 0x9184, 0x0007, 0x0006, 0x2001,
+	0x180d, 0x2004, 0xd08c, 0x000e, 0x0108, 0x9006, 0x0002, 0x6979,
+	0x6979, 0x6979, 0x6979, 0x6979, 0x6997, 0x69ac, 0x69ba, 0x7003,
+	0x0003, 0x2009, 0x187f, 0x210c, 0x9184, 0xff00, 0x908e, 0xff00,
+	0x0140, 0x8007, 0x9005, 0x1110, 0x2001, 0x0002, 0x8003, 0x7006,
+	0x0030, 0x7007, 0x0001, 0x0018, 0x7003, 0x0005, 0x0c50, 0x2071,
 	0x1911, 0x704f, 0x0000, 0x2071, 0x1800, 0x70ef, 0x0001, 0x00ee,
 	0x001e, 0x0005, 0x7003, 0x0000, 0x2071, 0x1911, 0x2009, 0x187f,
 	0x210c, 0x9184, 0x7f00, 0x8007, 0x908c, 0x000f, 0x0160, 0x714e,
@@ -3140,423 +3169,408 @@
 	0x0128, 0x70ee, 0x0c20, 0x704f, 0x000f, 0x0c90, 0x70ef, 0x0005,
 	0x08f0, 0x00e6, 0x2071, 0x0050, 0x684c, 0x9005, 0x1150, 0x00e6,
 	0x2071, 0x1911, 0x7028, 0xc085, 0x702a, 0x00ee, 0x9085, 0x0001,
-	0x0488, 0x6844, 0x9005, 0x0158, 0x080c, 0x764e, 0x6a60, 0x9200,
+	0x0488, 0x6844, 0x9005, 0x0158, 0x080c, 0x76be, 0x6a60, 0x9200,
 	0x7002, 0x6864, 0x9101, 0x7006, 0x9006, 0x7012, 0x7016, 0x6860,
 	0x7002, 0x6864, 0x7006, 0x6868, 0x700a, 0x686c, 0x700e, 0x6844,
 	0x9005, 0x1110, 0x7012, 0x7016, 0x684c, 0x701a, 0x701c, 0x9085,
 	0x0040, 0x701e, 0x7037, 0x001a, 0x702b, 0x0001, 0x00e6, 0x2071,
 	0x1911, 0x7028, 0xc084, 0x702a, 0x7007, 0x0001, 0x700b, 0x0000,
 	0x00ee, 0x9006, 0x00ee, 0x0005, 0xa86c, 0xd0fc, 0x1508, 0x00e6,
-	0x0026, 0x2001, 0x1925, 0x2004, 0x9015, 0x0904, 0x6b22, 0xa97c,
-	0xa878, 0x9105, 0x1904, 0x6b22, 0x9286, 0x0003, 0x0904, 0x69bd,
-	0x9286, 0x0005, 0x0904, 0x69bd, 0xa880, 0xd0bc, 0x1904, 0x6b22,
-	0x2200, 0x0002, 0x6b22, 0x6981, 0x69bd, 0x69bd, 0x6ead, 0x69bd,
-	0x0005, 0xa86c, 0xd0fc, 0x1520, 0x00e6, 0x0026, 0x2009, 0x1925,
-	0x210c, 0x81ff, 0x0904, 0x6b22, 0xa884, 0x9084, 0x00ff, 0x9086,
-	0x0001, 0x1904, 0x6b22, 0x9186, 0x0003, 0x0904, 0x69bd, 0x9186,
-	0x0005, 0x0904, 0x69bd, 0xa880, 0xd0cc, 0x0904, 0x6b22, 0x9186,
-	0x0004, 0x0904, 0x6ead, 0xa84f, 0x8021, 0xa853, 0x0017, 0x0028,
-	0x0005, 0xa84f, 0x8020, 0xa853, 0x0016, 0x2071, 0x1911, 0x701c,
-	0x9005, 0x1904, 0x6cd0, 0x0e04, 0x6d1b, 0x2071, 0x0000, 0xa84c,
-	0x7082, 0xa850, 0x7032, 0xa870, 0x7086, 0x7036, 0xa874, 0x708a,
-	0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x119d,
-	0x2071, 0x1800, 0x2011, 0x0001, 0xa804, 0x900d, 0x702c, 0x1158,
-	0xa802, 0x2900, 0x702e, 0x70bc, 0x9200, 0x70be, 0x080c, 0x8245,
-	0x002e, 0x00ee, 0x0005, 0x0096, 0x2148, 0xa904, 0xa802, 0x8210,
-	0x2900, 0x81ff, 0x1dc8, 0x009e, 0x0c58, 0xa84f, 0x0000, 0x00f6,
-	0x2079, 0x0050, 0x2071, 0x1911, 0xa803, 0x0000, 0x7010, 0x9005,
-	0x1904, 0x6aa8, 0x782c, 0x908c, 0x0780, 0x190c, 0x6eed, 0x8004,
-	0x8004, 0x8004, 0x9084, 0x0003, 0x0002, 0x69db, 0x6aa8, 0x69ff,
-	0x6a45, 0x080c, 0x0dc4, 0x2071, 0x1800, 0x2900, 0x7822, 0xa804,
+	0x0026, 0x2001, 0x1925, 0x2004, 0x9015, 0x0904, 0x6c08, 0xa97c,
+	0xa878, 0x9105, 0x1904, 0x6c08, 0x9286, 0x0003, 0x0904, 0x6aa1,
+	0x9286, 0x0005, 0x0904, 0x6aa1, 0xa880, 0xd0bc, 0x1904, 0x6c08,
+	0x2200, 0x0002, 0x6c08, 0x6a65, 0x6aa1, 0x6aa1, 0x6c08, 0x6aa1,
+	0x0005, 0xa86c, 0xd0fc, 0x1500, 0x00e6, 0x0026, 0x2009, 0x1925,
+	0x210c, 0x81ff, 0x0904, 0x6c08, 0xa884, 0x9084, 0x00ff, 0x9086,
+	0x0001, 0x1904, 0x6c08, 0x9186, 0x0003, 0x0904, 0x6aa1, 0x9186,
+	0x0005, 0x0904, 0x6aa1, 0xa880, 0xd0cc, 0x0904, 0x6c08, 0xa84f,
+	0x8021, 0xa853, 0x0017, 0x0028, 0x0005, 0xa84f, 0x8020, 0xa853,
+	0x0016, 0x2071, 0x1911, 0x701c, 0x9005, 0x1904, 0x6dd6, 0x0e04,
+	0x6e21, 0x2071, 0x0000, 0xa84c, 0x7082, 0xa850, 0x7032, 0xa870,
+	0x7086, 0x7036, 0xa874, 0x708a, 0x2091, 0x4080, 0x2001, 0x0089,
+	0x2004, 0xd084, 0x190c, 0x11a9, 0x2071, 0x1800, 0x2011, 0x0001,
+	0xa804, 0x900d, 0x702c, 0x1158, 0xa802, 0x2900, 0x702e, 0x70bc,
+	0x9200, 0x70be, 0x080c, 0x83a7, 0x002e, 0x00ee, 0x0005, 0x0096,
+	0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x009e,
+	0x0c58, 0xa84f, 0x0000, 0x00f6, 0x2079, 0x0050, 0x2071, 0x1911,
+	0xa803, 0x0000, 0x7010, 0x9005, 0x1904, 0x6b8c, 0x782c, 0x908c,
+	0x0780, 0x190c, 0x6f4a, 0x8004, 0x8004, 0x8004, 0x9084, 0x0003,
+	0x0002, 0x6abf, 0x6b8c, 0x6ae3, 0x6b29, 0x080c, 0x0dc3, 0x2071,
+	0x1800, 0x2900, 0x7822, 0xa804, 0x900d, 0x1168, 0x2071, 0x19d7,
+	0x7044, 0x9005, 0x1320, 0x2001, 0x1926, 0x2004, 0x7046, 0x00fe,
+	0x002e, 0x00ee, 0x0005, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802,
+	0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200, 0x70be,
+	0x080c, 0x83a7, 0x0c18, 0x2071, 0x1800, 0x2900, 0x7822, 0xa804,
+	0x900d, 0x1578, 0x7824, 0x00e6, 0x2071, 0x0040, 0x712c, 0xd19c,
+	0x1148, 0x2009, 0x182f, 0x210c, 0x918a, 0x0040, 0x0218, 0x7022,
+	0x00ee, 0x0058, 0x00ee, 0x2048, 0x702c, 0xa802, 0x2900, 0x702e,
+	0x70bc, 0x8000, 0x70be, 0x080c, 0x83a7, 0x782c, 0x9094, 0x0780,
+	0x190c, 0x6f4a, 0xd0a4, 0x19f0, 0x2071, 0x19d7, 0x7044, 0x9005,
+	0x1320, 0x2001, 0x1926, 0x2004, 0x7046, 0x00fe, 0x002e, 0x00ee,
+	0x0005, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900,
+	0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200, 0x70be, 0x080c, 0x83a7,
+	0x0808, 0x0096, 0x00e6, 0x7824, 0x2048, 0x2071, 0x1800, 0x702c,
+	0xa802, 0x2900, 0x702e, 0x70bc, 0x8000, 0x70be, 0x080c, 0x83a7,
+	0x782c, 0x9094, 0x0780, 0x190c, 0x6f4a, 0xd0a4, 0x1d60, 0x00ee,
+	0x782c, 0x9094, 0x0780, 0x190c, 0x6f4a, 0xd09c, 0x1198, 0x009e,
+	0x2900, 0x7822, 0xa804, 0x900d, 0x1550, 0x2071, 0x19d7, 0x7044,
+	0x9005, 0x1320, 0x2001, 0x1926, 0x2004, 0x7046, 0x00fe, 0x002e,
+	0x00ee, 0x0005, 0x009e, 0x2908, 0x7010, 0x8000, 0x7012, 0x7018,
+	0x904d, 0x711a, 0x0110, 0xa902, 0x0008, 0x711e, 0x2148, 0xa804,
 	0x900d, 0x1168, 0x2071, 0x19d7, 0x7044, 0x9005, 0x1320, 0x2001,
-	0x1926, 0x2004, 0x7046, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x9016,
+	0x1926, 0x2004, 0x7046, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x2071,
+	0x1800, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900,
+	0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200, 0x70be, 0x080c, 0x83a7,
+	0x00fe, 0x002e, 0x00ee, 0x0005, 0x2908, 0x7010, 0x8000, 0x7012,
+	0x7018, 0x904d, 0x711a, 0x0110, 0xa902, 0x0008, 0x711e, 0x2148,
+	0xa804, 0x900d, 0x1904, 0x6be0, 0x782c, 0x9094, 0x0780, 0x190c,
+	0x6f4a, 0xd09c, 0x1198, 0x701c, 0x904d, 0x0180, 0x7010, 0x8001,
+	0x7012, 0x1108, 0x701a, 0xa800, 0x701e, 0x2900, 0x7822, 0x782c,
+	0x9094, 0x0780, 0x190c, 0x6f4a, 0xd09c, 0x0d68, 0x782c, 0x9094,
+	0x0780, 0x190c, 0x6f4a, 0xd0a4, 0x01b0, 0x00e6, 0x7824, 0x2048,
+	0x2071, 0x1800, 0x702c, 0xa802, 0x2900, 0x702e, 0x70bc, 0x8000,
+	0x70be, 0x080c, 0x83a7, 0x782c, 0x9094, 0x0780, 0x190c, 0x6f4a,
+	0xd0a4, 0x1d60, 0x00ee, 0x2071, 0x19d7, 0x7044, 0x9005, 0x1320,
+	0x2001, 0x1926, 0x2004, 0x7046, 0x00fe, 0x002e, 0x00ee, 0x0005,
+	0x00e6, 0x2071, 0x1800, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802,
+	0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200, 0x70be,
+	0x080c, 0x83a7, 0x00ee, 0x0804, 0x6b9c, 0xa86c, 0xd0fc, 0x1904,
+	0x6c56, 0x0096, 0xa804, 0xa807, 0x0000, 0x904d, 0x190c, 0x0fbf,
+	0x009e, 0x0020, 0xa86c, 0xd0fc, 0x1904, 0x6c56, 0x00e6, 0x0026,
+	0xa84f, 0x0000, 0x00f6, 0x2079, 0x0050, 0x2071, 0x1800, 0x70e8,
+	0x8001, 0x0558, 0x1a04, 0x6c53, 0x2071, 0x1911, 0xa803, 0x0000,
+	0xa868, 0x9084, 0x00ff, 0x908e, 0x0016, 0x01a8, 0x7010, 0x9005,
+	0x1904, 0x6d52, 0x782c, 0x908c, 0x0780, 0x190c, 0x6f4a, 0x8004,
+	0x8004, 0x8004, 0x9084, 0x0003, 0x0002, 0x6c57, 0x6d52, 0x6c72,
+	0x6ce3, 0x080c, 0x0dc3, 0x2009, 0x1925, 0x2104, 0x0002, 0x6c1e,
+	0x6c1e, 0x6c1e, 0x6aaa, 0x6c1e, 0x6aaa, 0x70eb, 0x0fa0, 0x71e4,
+	0x8107, 0x9106, 0x9094, 0x00c0, 0x9184, 0xff3f, 0x9205, 0x70e6,
+	0x3b08, 0x3a00, 0x9104, 0x918d, 0x00c0, 0x21d8, 0x9084, 0xff3f,
+	0x9205, 0x20d0, 0x0808, 0x70ea, 0x0804, 0x6c14, 0x0005, 0x2071,
+	0x1800, 0x2900, 0x7822, 0xa804, 0x900d, 0x1120, 0x00fe, 0x002e,
+	0x00ee, 0x0005, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210,
+	0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200, 0x70be, 0x080c,
+	0x83a7, 0x0c60, 0x2071, 0x1800, 0x2900, 0x7822, 0xa804, 0x900d,
+	0x1904, 0x6cd2, 0x7830, 0x8007, 0x908c, 0x001f, 0x70ec, 0x9102,
+	0x1220, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x7824, 0x00e6, 0x2071,
+	0x0040, 0x712c, 0xd19c, 0x1148, 0x2009, 0x182f, 0x210c, 0x918a,
+	0x0040, 0x0218, 0x7022, 0x00ee, 0x0058, 0x00ee, 0x2048, 0x702c,
+	0xa802, 0x2900, 0x702e, 0x70bc, 0x8000, 0x70be, 0x080c, 0x83a7,
+	0x782c, 0x9094, 0x0780, 0x190c, 0x6f4a, 0xd0a4, 0x19f0, 0x0e04,
+	0x6cc9, 0x7838, 0x7938, 0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000,
+	0x6836, 0x6833, 0x0013, 0x00de, 0x2001, 0x1922, 0x200c, 0xc184,
+	0x2102, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c,
+	0x11a9, 0x2001, 0x1923, 0x2003, 0x0000, 0x00fe, 0x002e, 0x00ee,
+	0x0005, 0x2001, 0x1922, 0x200c, 0xc185, 0x2102, 0x00fe, 0x002e,
+	0x00ee, 0x0005, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210,
+	0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200, 0x70be, 0x080c,
+	0x83a7, 0x0804, 0x6c85, 0x0096, 0x00e6, 0x7824, 0x2048, 0x2071,
+	0x1800, 0x702c, 0xa802, 0x2900, 0x702e, 0x70bc, 0x8000, 0x70be,
+	0x080c, 0x83a7, 0x782c, 0x9094, 0x0780, 0x190c, 0x6f4a, 0xd0a4,
+	0x1d60, 0x00ee, 0x0e04, 0x6d25, 0x7838, 0x7938, 0x910e, 0x1de0,
+	0x00d6, 0x2069, 0x0000, 0x6836, 0x6833, 0x0013, 0x00de, 0x7044,
+	0xc084, 0x7046, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084,
+	0x190c, 0x11a9, 0x704b, 0x0000, 0x782c, 0x9094, 0x0780, 0x190c,
+	0x6f4a, 0xd09c, 0x1170, 0x009e, 0x2900, 0x7822, 0xa804, 0x900d,
+	0x11e0, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x7044, 0xc085, 0x7046,
+	0x0c58, 0x009e, 0x2908, 0x7010, 0x8000, 0x7012, 0x7018, 0x904d,
+	0x711a, 0x0110, 0xa902, 0x0008, 0x711e, 0x2148, 0xa804, 0x900d,
+	0x1120, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x2071, 0x1800, 0x9016,
 	0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8,
-	0x702e, 0x70bc, 0x9200, 0x70be, 0x080c, 0x8245, 0x0c18, 0x2071,
-	0x1800, 0x2900, 0x7822, 0xa804, 0x900d, 0x1578, 0x7824, 0x00e6,
-	0x2071, 0x0040, 0x712c, 0xd19c, 0x1148, 0x2009, 0x182f, 0x210c,
-	0x918a, 0x0040, 0x0218, 0x7022, 0x00ee, 0x0058, 0x00ee, 0x2048,
-	0x702c, 0xa802, 0x2900, 0x702e, 0x70bc, 0x8000, 0x70be, 0x080c,
-	0x8245, 0x782c, 0x9094, 0x0780, 0x190c, 0x6eed, 0xd0a4, 0x19f0,
-	0x2071, 0x19d7, 0x7044, 0x9005, 0x1320, 0x2001, 0x1926, 0x2004,
-	0x7046, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x9016, 0x702c, 0x2148,
-	0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70bc,
-	0x9200, 0x70be, 0x080c, 0x8245, 0x0808, 0x0096, 0x00e6, 0x7824,
+	0x702e, 0x70bc, 0x9200, 0x70be, 0x080c, 0x83a7, 0x00fe, 0x002e,
+	0x00ee, 0x0005, 0x2908, 0x7010, 0x8000, 0x7012, 0x7018, 0x904d,
+	0x711a, 0x0110, 0xa902, 0x0008, 0x711e, 0x2148, 0xa804, 0x900d,
+	0x1904, 0x6dc1, 0x782c, 0x9094, 0x0780, 0x190c, 0x6f4a, 0xd09c,
+	0x11b0, 0x701c, 0x904d, 0x0198, 0xa84c, 0x9005, 0x1180, 0x7010,
+	0x8001, 0x7012, 0x1108, 0x701a, 0xa800, 0x701e, 0x2900, 0x7822,
+	0x782c, 0x9094, 0x0780, 0x190c, 0x6f4a, 0xd09c, 0x0d50, 0x782c,
+	0x9094, 0x0780, 0x190c, 0x6f4a, 0xd0a4, 0x05b8, 0x00e6, 0x7824,
 	0x2048, 0x2071, 0x1800, 0x702c, 0xa802, 0x2900, 0x702e, 0x70bc,
-	0x8000, 0x70be, 0x080c, 0x8245, 0x782c, 0x9094, 0x0780, 0x190c,
-	0x6eed, 0xd0a4, 0x1d60, 0x00ee, 0x782c, 0x9094, 0x0780, 0x190c,
-	0x6eed, 0xd09c, 0x1198, 0x009e, 0x2900, 0x7822, 0xa804, 0x900d,
-	0x1550, 0x2071, 0x19d7, 0x7044, 0x9005, 0x1320, 0x2001, 0x1926,
-	0x2004, 0x7046, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x009e, 0x2908,
-	0x7010, 0x8000, 0x7012, 0x7018, 0x904d, 0x711a, 0x0110, 0xa902,
-	0x0008, 0x711e, 0x2148, 0xa804, 0x900d, 0x1168, 0x2071, 0x19d7,
-	0x7044, 0x9005, 0x1320, 0x2001, 0x1926, 0x2004, 0x7046, 0x00fe,
-	0x002e, 0x00ee, 0x0005, 0x2071, 0x1800, 0x9016, 0x702c, 0x2148,
-	0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70bc,
-	0x9200, 0x70be, 0x080c, 0x8245, 0x00fe, 0x002e, 0x00ee, 0x0005,
-	0x2908, 0x7010, 0x8000, 0x7012, 0x7018, 0x904d, 0x711a, 0x0110,
-	0xa902, 0x0008, 0x711e, 0x2148, 0xa804, 0x900d, 0x1904, 0x6afc,
-	0x782c, 0x9094, 0x0780, 0x190c, 0x6eed, 0xd09c, 0x1198, 0x701c,
-	0x904d, 0x0180, 0x7010, 0x8001, 0x7012, 0x1108, 0x701a, 0xa800,
-	0x701e, 0x2900, 0x7822, 0x782c, 0x9094, 0x0780, 0x190c, 0x6eed,
-	0xd09c, 0x0d68, 0x782c, 0x9094, 0x0780, 0x190c, 0x6eed, 0xd0a4,
-	0x01b0, 0x00e6, 0x7824, 0x2048, 0x2071, 0x1800, 0x702c, 0xa802,
-	0x2900, 0x702e, 0x70bc, 0x8000, 0x70be, 0x080c, 0x8245, 0x782c,
-	0x9094, 0x0780, 0x190c, 0x6eed, 0xd0a4, 0x1d60, 0x00ee, 0x2071,
-	0x19d7, 0x7044, 0x9005, 0x1320, 0x2001, 0x1926, 0x2004, 0x7046,
-	0x00fe, 0x002e, 0x00ee, 0x0005, 0x00e6, 0x2071, 0x1800, 0x9016,
-	0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8,
-	0x702e, 0x70bc, 0x9200, 0x70be, 0x080c, 0x8245, 0x00ee, 0x0804,
-	0x6ab8, 0xa86c, 0xd0fc, 0x15e0, 0x0096, 0xa804, 0xa807, 0x0000,
-	0x904d, 0x190c, 0x0fb3, 0x009e, 0x0018, 0xa86c, 0xd0fc, 0x1580,
-	0x00e6, 0x0026, 0xa84f, 0x0000, 0x00f6, 0x2079, 0x0050, 0x2071,
-	0x1911, 0xa803, 0x0000, 0xa868, 0x9084, 0x00ff, 0x908e, 0x0016,
-	0x01a8, 0x7010, 0x9005, 0x1904, 0x6c4c, 0x782c, 0x908c, 0x0780,
-	0x190c, 0x6eed, 0x8004, 0x8004, 0x8004, 0x9084, 0x0003, 0x0002,
-	0x6b51, 0x6c4c, 0x6b6c, 0x6bdd, 0x080c, 0x0dc4, 0x2009, 0x1925,
-	0x2104, 0x0002, 0x6b31, 0x6b31, 0x6b31, 0x69c6, 0x6b31, 0x69c6,
-	0x0005, 0x2071, 0x1800, 0x2900, 0x7822, 0xa804, 0x900d, 0x1120,
-	0x00fe, 0x002e, 0x00ee, 0x0005, 0x9016, 0x702c, 0x2148, 0xa904,
-	0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200,
-	0x70be, 0x080c, 0x8245, 0x0c60, 0x2071, 0x1800, 0x2900, 0x7822,
-	0xa804, 0x900d, 0x1904, 0x6bcc, 0x7830, 0x8007, 0x908c, 0x001f,
-	0x70ec, 0x9102, 0x1220, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x7824,
-	0x00e6, 0x2071, 0x0040, 0x712c, 0xd19c, 0x1148, 0x2009, 0x182f,
-	0x210c, 0x918a, 0x0040, 0x0218, 0x7022, 0x00ee, 0x0058, 0x00ee,
-	0x2048, 0x702c, 0xa802, 0x2900, 0x702e, 0x70bc, 0x8000, 0x70be,
-	0x080c, 0x8245, 0x782c, 0x9094, 0x0780, 0x190c, 0x6eed, 0xd0a4,
-	0x19f0, 0x0e04, 0x6bc3, 0x7838, 0x7938, 0x910e, 0x1de0, 0x00d6,
-	0x2069, 0x0000, 0x6836, 0x6833, 0x0013, 0x00de, 0x2001, 0x1922,
-	0x200c, 0xc184, 0x2102, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004,
-	0xd084, 0x190c, 0x119d, 0x2001, 0x1923, 0x2003, 0x0000, 0x00fe,
-	0x002e, 0x00ee, 0x0005, 0x2001, 0x1922, 0x200c, 0xc185, 0x2102,
-	0x00fe, 0x002e, 0x00ee, 0x0005, 0x9016, 0x702c, 0x2148, 0xa904,
-	0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200,
-	0x70be, 0x080c, 0x8245, 0x0804, 0x6b7f, 0x0096, 0x00e6, 0x7824,
-	0x2048, 0x2071, 0x1800, 0x702c, 0xa802, 0x2900, 0x702e, 0x70bc,
-	0x8000, 0x70be, 0x080c, 0x8245, 0x782c, 0x9094, 0x0780, 0x190c,
-	0x6eed, 0xd0a4, 0x1d60, 0x00ee, 0x0e04, 0x6c1f, 0x7838, 0x7938,
+	0x8000, 0x70be, 0x080c, 0x83a7, 0x782c, 0x9094, 0x0780, 0x190c,
+	0x6f4a, 0xd0a4, 0x1d60, 0x00ee, 0x0e04, 0x6dba, 0x7838, 0x7938,
 	0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000, 0x6836, 0x6833, 0x0013,
 	0x00de, 0x7044, 0xc084, 0x7046, 0x2091, 0x4080, 0x2001, 0x0089,
-	0x2004, 0xd084, 0x190c, 0x119d, 0x704b, 0x0000, 0x782c, 0x9094,
-	0x0780, 0x190c, 0x6eed, 0xd09c, 0x1170, 0x009e, 0x2900, 0x7822,
-	0xa804, 0x900d, 0x11e0, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x7044,
-	0xc085, 0x7046, 0x0c58, 0x009e, 0x2908, 0x7010, 0x8000, 0x7012,
-	0x7018, 0x904d, 0x711a, 0x0110, 0xa902, 0x0008, 0x711e, 0x2148,
-	0xa804, 0x900d, 0x1120, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x2071,
+	0x2004, 0xd084, 0x190c, 0x11a9, 0x704b, 0x0000, 0x00fe, 0x002e,
+	0x00ee, 0x0005, 0x7044, 0xc085, 0x7046, 0x00fe, 0x002e, 0x00ee,
+	0x0005, 0x00e6, 0x2071, 0x1800, 0x9016, 0x702c, 0x2148, 0xa904,
+	0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200,
+	0x70be, 0x080c, 0x83a7, 0x00ee, 0x0804, 0x6d62, 0x2071, 0x1911,
+	0xa803, 0x0000, 0x2908, 0x7010, 0x8000, 0x7012, 0x7018, 0x904d,
+	0x711a, 0x0110, 0xa902, 0x0008, 0x711e, 0x2148, 0xa804, 0x900d,
+	0x1128, 0x1e04, 0x6e01, 0x002e, 0x00ee, 0x0005, 0x2071, 0x1800,
+	0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff,
+	0x1dc8, 0x702e, 0x70bc, 0x9200, 0x70be, 0x080c, 0x83a7, 0x0e04,
+	0x6deb, 0x2071, 0x1911, 0x701c, 0x2048, 0xa84c, 0x900d, 0x0d18,
+	0x2071, 0x0000, 0x7182, 0xa850, 0x7032, 0xa870, 0x7086, 0x7036,
+	0xa874, 0x708a, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084,
+	0x190c, 0x11a9, 0x2071, 0x1911, 0x080c, 0x6f36, 0x002e, 0x00ee,
+	0x0005, 0x2071, 0x1911, 0xa803, 0x0000, 0x2908, 0x7010, 0x8000,
+	0x7012, 0x7018, 0x904d, 0x711a, 0x0110, 0xa902, 0x0008, 0x711e,
+	0x2148, 0xa804, 0x900d, 0x1118, 0x002e, 0x00ee, 0x0005, 0x2071,
 	0x1800, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900,
-	0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200, 0x70be, 0x080c, 0x8245,
-	0x00fe, 0x002e, 0x00ee, 0x0005, 0x2908, 0x7010, 0x8000, 0x7012,
-	0x7018, 0x904d, 0x711a, 0x0110, 0xa902, 0x0008, 0x711e, 0x2148,
-	0xa804, 0x900d, 0x1904, 0x6cbb, 0x782c, 0x9094, 0x0780, 0x190c,
-	0x6eed, 0xd09c, 0x11b0, 0x701c, 0x904d, 0x0198, 0xa84c, 0x9005,
-	0x1180, 0x7010, 0x8001, 0x7012, 0x1108, 0x701a, 0xa800, 0x701e,
-	0x2900, 0x7822, 0x782c, 0x9094, 0x0780, 0x190c, 0x6eed, 0xd09c,
-	0x0d50, 0x782c, 0x9094, 0x0780, 0x190c, 0x6eed, 0xd0a4, 0x05b8,
-	0x00e6, 0x7824, 0x2048, 0x2071, 0x1800, 0x702c, 0xa802, 0x2900,
-	0x702e, 0x70bc, 0x8000, 0x70be, 0x080c, 0x8245, 0x782c, 0x9094,
-	0x0780, 0x190c, 0x6eed, 0xd0a4, 0x1d60, 0x00ee, 0x0e04, 0x6cb4,
-	0x7838, 0x7938, 0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000, 0x6836,
-	0x6833, 0x0013, 0x00de, 0x7044, 0xc084, 0x7046, 0x2091, 0x4080,
-	0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x119d, 0x704b, 0x0000,
-	0x00fe, 0x002e, 0x00ee, 0x0005, 0x7044, 0xc085, 0x7046, 0x00fe,
-	0x002e, 0x00ee, 0x0005, 0x00e6, 0x2071, 0x1800, 0x9016, 0x702c,
-	0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e,
-	0x70bc, 0x9200, 0x70be, 0x080c, 0x8245, 0x00ee, 0x0804, 0x6c5c,
-	0x2071, 0x1911, 0xa803, 0x0000, 0x2908, 0x7010, 0x8000, 0x7012,
-	0x7018, 0x904d, 0x711a, 0x0110, 0xa902, 0x0008, 0x711e, 0x2148,
-	0xa804, 0x900d, 0x1128, 0x1e04, 0x6cfb, 0x002e, 0x00ee, 0x0005,
-	0x2071, 0x1800, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210,
-	0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200, 0x70be, 0x080c,
-	0x8245, 0x0e04, 0x6ce5, 0x2071, 0x1911, 0x701c, 0x2048, 0xa84c,
-	0x900d, 0x0d18, 0x2071, 0x0000, 0x7182, 0xa850, 0x7032, 0xa870,
-	0x7086, 0x7036, 0xa874, 0x708a, 0x2091, 0x4080, 0x2001, 0x0089,
-	0x2004, 0xd084, 0x190c, 0x119d, 0x2071, 0x1911, 0x080c, 0x6ed9,
-	0x002e, 0x00ee, 0x0005, 0x2071, 0x1911, 0xa803, 0x0000, 0x2908,
-	0x7010, 0x8000, 0x7012, 0x7018, 0x904d, 0x711a, 0x0110, 0xa902,
-	0x0008, 0x711e, 0x2148, 0xa804, 0x900d, 0x1118, 0x002e, 0x00ee,
-	0x0005, 0x2071, 0x1800, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802,
-	0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200, 0x70be,
-	0x080c, 0x8245, 0x002e, 0x00ee, 0x0005, 0x0006, 0xa880, 0x0006,
-	0xa86b, 0x0103, 0x20a9, 0x001c, 0xa860, 0x20e8, 0xa85c, 0x9080,
-	0x001e, 0x20a0, 0x9006, 0x4004, 0x000e, 0x9084, 0x00ff, 0xa882,
-	0x000e, 0xa87e, 0xa986, 0x0005, 0x2071, 0x1911, 0x7004, 0x0002,
-	0x6d68, 0x6d69, 0x6eac, 0x6e96, 0x6d66, 0x6eac, 0x080c, 0x0dc4,
-	0x0005, 0x2001, 0x1925, 0x2004, 0x0002, 0x6d73, 0x6d73, 0x6dc8,
-	0x6dc9, 0x6e30, 0x6dc9, 0x0126, 0x2091, 0x8000, 0x1e0c, 0x6ef8,
-	0x701c, 0x904d, 0x01e0, 0xa84c, 0x9005, 0x01d8, 0x0e04, 0x6d97,
-	0xa94c, 0x2071, 0x0000, 0x7182, 0xa850, 0x7032, 0xa870, 0x7086,
-	0x7036, 0xa874, 0x708a, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004,
-	0xd084, 0x190c, 0x119d, 0x2071, 0x1911, 0x080c, 0x6ed9, 0x012e,
-	0x0470, 0x2001, 0x005b, 0x2004, 0x9094, 0x0780, 0x190c, 0x6eed,
-	0xd09c, 0x2071, 0x1911, 0x1510, 0x2071, 0x1911, 0x700f, 0x0001,
-	0xa968, 0x9184, 0x00ff, 0x9086, 0x0003, 0x1130, 0x810f, 0x918c,
-	0x00ff, 0x8101, 0x0108, 0x710e, 0x2900, 0x00d6, 0x2069, 0x0050,
-	0x6822, 0x00de, 0x2071, 0x1911, 0x701c, 0x2048, 0x7010, 0x8001,
-	0x7012, 0xa800, 0x701e, 0x9005, 0x1108, 0x701a, 0x012e, 0x0005,
-	0x0005, 0x00d6, 0x2008, 0x2069, 0x19d7, 0x6844, 0x9005, 0x0760,
-	0x0158, 0x9186, 0x0003, 0x0540, 0x2001, 0x1814, 0x2004, 0x2009,
-	0x1aa0, 0x210c, 0x9102, 0x1500, 0x0126, 0x2091, 0x8000, 0x2069,
-	0x0050, 0x693c, 0x6838, 0x9106, 0x0190, 0x0e04, 0x6dfb, 0x2069,
-	0x0000, 0x6837, 0x8040, 0x6833, 0x0012, 0x6883, 0x8040, 0x2091,
-	0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x119d, 0x2069,
-	0x19d7, 0x6847, 0xffff, 0x012e, 0x00de, 0x0126, 0x2091, 0x8000,
-	0x1e0c, 0x6f69, 0x701c, 0x904d, 0x0548, 0x2001, 0x005b, 0x2004,
-	0x9094, 0x0780, 0x190c, 0x6eed, 0xd09c, 0x1500, 0x2071, 0x1911,
-	0x700f, 0x0001, 0xa968, 0x9184, 0x00ff, 0x9086, 0x0003, 0x1130,
-	0x810f, 0x918c, 0x00ff, 0x8101, 0x0108, 0x710e, 0x2900, 0x00d6,
-	0x2069, 0x0050, 0x6822, 0x00de, 0x701c, 0x2048, 0x7010, 0x8001,
-	0x7012, 0xa800, 0x701e, 0x9005, 0x1108, 0x701a, 0x012e, 0x0005,
-	0x0126, 0x2091, 0x8000, 0x1e0c, 0x6ef8, 0x701c, 0x904d, 0x0568,
-	0xa84c, 0x9086, 0x0004, 0x1558, 0x0136, 0x0146, 0x0156, 0x2099,
-	0x1882, 0x20e1, 0x0001, 0x2001, 0x1948, 0x2004, 0x2040, 0xa060,
-	0x20e8, 0xa05c, 0x9080, 0x0024, 0x20a0, 0x20a9, 0x0004, 0x4003,
-	0x015e, 0x014e, 0x013e, 0xa860, 0xa076, 0xa85c, 0x9080, 0x001c,
-	0xa07a, 0xa07f, 0x0002, 0xa06f, 0x0002, 0xa073, 0x0000, 0x080c,
-	0x10eb, 0x2071, 0x1911, 0x7007, 0x0003, 0x012e, 0x0005, 0x2001,
-	0x005b, 0x2004, 0x9094, 0x0780, 0x190c, 0x6eed, 0xd09c, 0x2071,
-	0x1911, 0x1d98, 0x2071, 0x1911, 0x700f, 0x0001, 0xa968, 0x9184,
+	0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200, 0x70be, 0x080c, 0x83a7,
+	0x002e, 0x00ee, 0x0005, 0x0006, 0xa880, 0x0006, 0xa86b, 0x0103,
+	0x20a9, 0x001c, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x001e, 0x20a0,
+	0x9006, 0x4004, 0x000e, 0x9084, 0x00ff, 0xa882, 0x000e, 0xa87e,
+	0xa986, 0x0005, 0x2071, 0x1911, 0x7004, 0x0002, 0x6e6e, 0x6e6f,
+	0x6f35, 0x6e6f, 0x6e6c, 0x6f35, 0x080c, 0x0dc3, 0x0005, 0x2001,
+	0x1925, 0x2004, 0x0002, 0x6e79, 0x6e79, 0x6ece, 0x6ecf, 0x6e79,
+	0x6ecf, 0x0126, 0x2091, 0x8000, 0x1e0c, 0x6f55, 0x701c, 0x904d,
+	0x01e0, 0xa84c, 0x9005, 0x01d8, 0x0e04, 0x6e9d, 0xa94c, 0x2071,
+	0x0000, 0x7182, 0xa850, 0x7032, 0xa870, 0x7086, 0x7036, 0xa874,
+	0x708a, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c,
+	0x11a9, 0x2071, 0x1911, 0x080c, 0x6f36, 0x012e, 0x0470, 0x2001,
+	0x005b, 0x2004, 0x9094, 0x0780, 0x190c, 0x6f4a, 0xd09c, 0x2071,
+	0x1911, 0x1510, 0x2071, 0x1911, 0x700f, 0x0001, 0xa968, 0x9184,
 	0x00ff, 0x9086, 0x0003, 0x1130, 0x810f, 0x918c, 0x00ff, 0x8101,
 	0x0108, 0x710e, 0x2900, 0x00d6, 0x2069, 0x0050, 0x6822, 0x00de,
 	0x2071, 0x1911, 0x701c, 0x2048, 0x7010, 0x8001, 0x7012, 0xa800,
-	0x701e, 0x9005, 0x1990, 0x701a, 0x012e, 0x0005, 0x2071, 0x1925,
-	0x708c, 0x2040, 0xa070, 0x2071, 0x1911, 0x908e, 0x0100, 0x1120,
-	0x7007, 0x0001, 0x04b1, 0x0005, 0x908e, 0x0000, 0x0de0, 0x908e,
-	0x0200, 0x1dc8, 0x080c, 0x6eed, 0x0005, 0xa84f, 0x0004, 0xa803,
-	0x0000, 0x2908, 0x2071, 0x1911, 0x7010, 0x8000, 0x7012, 0x7018,
-	0x904d, 0x711a, 0x0110, 0xa902, 0x0008, 0x711e, 0x2148, 0xa804,
-	0x900d, 0x1118, 0x002e, 0x00ee, 0x0005, 0x2071, 0x1800, 0x9016,
-	0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8,
-	0x702e, 0x70bc, 0x9200, 0x70be, 0x080c, 0x8245, 0x002e, 0x00ee,
-	0x0005, 0x0126, 0x2091, 0x8000, 0x701c, 0x904d, 0x0160, 0x7010,
-	0x8001, 0x7012, 0xa800, 0x701e, 0x9005, 0x1108, 0x701a, 0x012e,
-	0x080c, 0x1033, 0x0005, 0x012e, 0x0005, 0x2091, 0x8000, 0x0e04,
-	0x6eef, 0x0006, 0x0016, 0x2001, 0x8004, 0x0006, 0x0804, 0x0dcd,
-	0x0096, 0x00f6, 0x2079, 0x0050, 0x7044, 0xd084, 0x01d0, 0xc084,
-	0x7046, 0x7838, 0x7938, 0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000,
-	0x6836, 0x6833, 0x0013, 0x00de, 0x2091, 0x4080, 0x2001, 0x0089,
-	0x2004, 0xd084, 0x190c, 0x119d, 0x704b, 0x0000, 0x00fe, 0x009e,
-	0x0005, 0x782c, 0x9094, 0x0780, 0x1981, 0xd0a4, 0x0db8, 0x2001,
-	0x1925, 0x2004, 0x9086, 0x0004, 0x0130, 0x7148, 0x704c, 0x8108,
-	0x714a, 0x9102, 0x0e58, 0x00e6, 0x2071, 0x1800, 0x7824, 0x00e6,
-	0x2071, 0x0040, 0x712c, 0xd19c, 0x1148, 0x2009, 0x182f, 0x210c,
-	0x918a, 0x0040, 0x0218, 0x7022, 0x00ee, 0x0058, 0x00ee, 0x2048,
-	0x702c, 0xa802, 0x2900, 0x702e, 0x70bc, 0x8000, 0x70be, 0x080c,
-	0x8245, 0x782c, 0x9094, 0x0780, 0x190c, 0x6eed, 0xd0a4, 0x19f0,
+	0x701e, 0x9005, 0x1108, 0x701a, 0x012e, 0x0005, 0x0005, 0x00d6,
+	0x2008, 0x2069, 0x19d7, 0x6844, 0x9005, 0x0760, 0x0158, 0x9186,
+	0x0003, 0x0540, 0x2001, 0x1814, 0x2004, 0x2009, 0x1aac, 0x210c,
+	0x9102, 0x1500, 0x0126, 0x2091, 0x8000, 0x2069, 0x0050, 0x693c,
+	0x6838, 0x9106, 0x0190, 0x0e04, 0x6f01, 0x2069, 0x0000, 0x6837,
+	0x8040, 0x6833, 0x0012, 0x6883, 0x8040, 0x2091, 0x4080, 0x2001,
+	0x0089, 0x2004, 0xd084, 0x190c, 0x11a9, 0x2069, 0x19d7, 0x6847,
+	0xffff, 0x012e, 0x00de, 0x0126, 0x2091, 0x8000, 0x1e0c, 0x6fc0,
+	0x701c, 0x904d, 0x0540, 0x2001, 0x005b, 0x2004, 0x9094, 0x0780,
+	0x15c9, 0xd09c, 0x1500, 0x2071, 0x1911, 0x700f, 0x0001, 0xa968,
+	0x9184, 0x00ff, 0x9086, 0x0003, 0x1130, 0x810f, 0x918c, 0x00ff,
+	0x8101, 0x0108, 0x710e, 0x2900, 0x00d6, 0x2069, 0x0050, 0x6822,
+	0x00de, 0x701c, 0x2048, 0x7010, 0x8001, 0x7012, 0xa800, 0x701e,
+	0x9005, 0x1108, 0x701a, 0x012e, 0x0005, 0x0005, 0x0126, 0x2091,
+	0x8000, 0x701c, 0x904d, 0x0160, 0x7010, 0x8001, 0x7012, 0xa800,
+	0x701e, 0x9005, 0x1108, 0x701a, 0x012e, 0x080c, 0x103f, 0x0005,
+	0x012e, 0x0005, 0x2091, 0x8000, 0x0e04, 0x6f4c, 0x0006, 0x0016,
+	0x2001, 0x8004, 0x0006, 0x0804, 0x0dcc, 0x0096, 0x00f6, 0x2079,
+	0x0050, 0x7044, 0xd084, 0x01d0, 0xc084, 0x7046, 0x7838, 0x7938,
+	0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000, 0x6836, 0x6833, 0x0013,
+	0x00de, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c,
+	0x11a9, 0x704b, 0x0000, 0x00fe, 0x009e, 0x0005, 0x782c, 0x9094,
+	0x0780, 0x1981, 0xd0a4, 0x0db8, 0x7148, 0x704c, 0x8108, 0x714a,
+	0x9102, 0x0e88, 0x00e6, 0x2071, 0x1800, 0x7824, 0x00e6, 0x2071,
+	0x0040, 0x712c, 0xd19c, 0x1148, 0x2009, 0x182f, 0x210c, 0x918a,
+	0x0040, 0x0218, 0x7022, 0x00ee, 0x0058, 0x00ee, 0x2048, 0x702c,
+	0xa802, 0x2900, 0x702e, 0x70bc, 0x8000, 0x70be, 0x080c, 0x83a7,
+	0x782c, 0x9094, 0x0780, 0x190c, 0x6f4a, 0xd0a4, 0x19f0, 0x7838,
+	0x7938, 0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000, 0x6836, 0x6833,
+	0x0013, 0x00de, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084,
+	0x190c, 0x11a9, 0x00ee, 0x704b, 0x0000, 0x00fe, 0x009e, 0x0005,
+	0x00f6, 0x2079, 0x0050, 0x7044, 0xd084, 0x01b8, 0xc084, 0x7046,
 	0x7838, 0x7938, 0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000, 0x6836,
 	0x6833, 0x0013, 0x00de, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004,
-	0xd084, 0x190c, 0x119d, 0x00ee, 0x704b, 0x0000, 0x00fe, 0x009e,
-	0x0005, 0x00f6, 0x2079, 0x0050, 0x7044, 0xd084, 0x01b8, 0xc084,
-	0x7046, 0x7838, 0x7938, 0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000,
-	0x6836, 0x6833, 0x0013, 0x00de, 0x2091, 0x4080, 0x2001, 0x0089,
-	0x2004, 0xd084, 0x190c, 0x119d, 0x00fe, 0x0005, 0x782c, 0x9094,
-	0x0780, 0x190c, 0x6eed, 0xd0a4, 0x0db8, 0x00e6, 0x2071, 0x1800,
-	0x7824, 0x2048, 0x702c, 0xa802, 0x2900, 0x702e, 0x70bc, 0x8000,
-	0x70be, 0x080c, 0x8245, 0x782c, 0x9094, 0x0780, 0x190c, 0x6eed,
-	0xd0a4, 0x1d70, 0x00d6, 0x2069, 0x0050, 0x693c, 0x2069, 0x1925,
-	0x6808, 0x690a, 0x2069, 0x19d7, 0x9102, 0x1118, 0x6844, 0x9005,
-	0x1320, 0x2001, 0x1926, 0x200c, 0x6946, 0x00de, 0x00ee, 0x00fe,
-	0x0005, 0x7094, 0x908a, 0x002a, 0x1a0c, 0x0dc4, 0x9082, 0x001d,
-	0x001b, 0x6027, 0x1e00, 0x0005, 0x70aa, 0x7017, 0x7033, 0x705d,
-	0x7099, 0x70d9, 0x70eb, 0x7033, 0x70c1, 0x6fd2, 0x7000, 0x7083,
-	0x6fd1, 0x0005, 0x00d6, 0x2069, 0x0200, 0x6804, 0x9005, 0x1180,
-	0x6808, 0x9005, 0x1518, 0x7097, 0x0029, 0x2069, 0x196b, 0x2d04,
-	0x7002, 0x080c, 0x7423, 0x6028, 0x9085, 0x0600, 0x602a, 0x00b0,
-	0x7097, 0x0029, 0x2069, 0x196b, 0x2d04, 0x7002, 0x6028, 0x9085,
-	0x0600, 0x602a, 0x00e6, 0x0036, 0x0046, 0x0056, 0x2071, 0x1a41,
-	0x080c, 0x199b, 0x005e, 0x004e, 0x003e, 0x00ee, 0x00de, 0x0005,
-	0x00d6, 0x2069, 0x0200, 0x6804, 0x9005, 0x1178, 0x6808, 0x9005,
-	0x1160, 0x7097, 0x0029, 0x2069, 0x196b, 0x2d04, 0x7002, 0x080c,
-	0x74c7, 0x6028, 0x9085, 0x0600, 0x602a, 0x00de, 0x0005, 0x0006,
-	0x2001, 0x0090, 0x080c, 0x2b65, 0x000e, 0x6124, 0xd1e4, 0x1190,
-	0x080c, 0x7158, 0xd1d4, 0x1160, 0xd1dc, 0x1138, 0xd1cc, 0x0150,
-	0x7097, 0x0020, 0x080c, 0x7158, 0x0028, 0x7097, 0x001d, 0x0010,
-	0x7097, 0x001f, 0x0005, 0x2001, 0x0088, 0x080c, 0x2b65, 0x6124,
-	0xd1cc, 0x11e8, 0xd1dc, 0x11c0, 0xd1e4, 0x1198, 0x9184, 0x1e00,
-	0x11d8, 0x080c, 0x19c8, 0x60e3, 0x0001, 0x600c, 0xc0b4, 0x600e,
-	0x080c, 0x7311, 0x2001, 0x0080, 0x080c, 0x2b65, 0x7097, 0x0029,
-	0x0058, 0x7097, 0x001e, 0x0040, 0x7097, 0x001d, 0x0028, 0x7097,
-	0x0020, 0x0010, 0x7097, 0x001f, 0x0005, 0x080c, 0x19c8, 0x60e3,
-	0x0001, 0x600c, 0xc0b4, 0x600e, 0x080c, 0x7311, 0x2001, 0x0080,
-	0x080c, 0x2b65, 0x6124, 0xd1d4, 0x1198, 0xd1dc, 0x1170, 0xd1e4,
-	0x1148, 0x9184, 0x1e00, 0x1118, 0x7097, 0x0029, 0x0058, 0x7097,
-	0x0028, 0x0040, 0x7097, 0x001e, 0x0028, 0x7097, 0x001d, 0x0010,
-	0x7097, 0x001f, 0x0005, 0x6124, 0xd1d4, 0x1180, 0xd1dc, 0x1158,
-	0xd1e4, 0x1130, 0x9184, 0x1e00, 0x1158, 0x7097, 0x0029, 0x0040,
-	0x7097, 0x001e, 0x0028, 0x7097, 0x001d, 0x0010, 0x7097, 0x001f,
-	0x0005, 0x2001, 0x00a0, 0x080c, 0x2b65, 0x6124, 0xd1dc, 0x1138,
-	0xd1e4, 0x0138, 0x080c, 0x19c8, 0x7097, 0x001e, 0x0010, 0x7097,
-	0x001d, 0x0005, 0x080c, 0x71db, 0x6124, 0xd1dc, 0x1188, 0x080c,
-	0x7158, 0x0016, 0x080c, 0x19c8, 0x001e, 0xd1d4, 0x1128, 0xd1e4,
-	0x0138, 0x7097, 0x001e, 0x0020, 0x7097, 0x001f, 0x080c, 0x7158,
-	0x0005, 0x0006, 0x2001, 0x00a0, 0x080c, 0x2b65, 0x000e, 0x6124,
-	0xd1d4, 0x1160, 0xd1cc, 0x1150, 0xd1dc, 0x1128, 0xd1e4, 0x0140,
-	0x7097, 0x001e, 0x0028, 0x7097, 0x001d, 0x0010, 0x7097, 0x0021,
-	0x0005, 0x080c, 0x71db, 0x6124, 0xd1d4, 0x1150, 0xd1dc, 0x1128,
-	0xd1e4, 0x0140, 0x7097, 0x001e, 0x0028, 0x7097, 0x001d, 0x0010,
-	0x7097, 0x001f, 0x0005, 0x0006, 0x2001, 0x0090, 0x080c, 0x2b65,
-	0x000e, 0x6124, 0xd1d4, 0x1178, 0xd1cc, 0x1150, 0xd1dc, 0x1128,
-	0xd1e4, 0x0158, 0x7097, 0x001e, 0x0040, 0x7097, 0x001d, 0x0028,
-	0x7097, 0x0020, 0x0010, 0x7097, 0x001f, 0x0005, 0x0016, 0x00c6,
-	0x00d6, 0x00e6, 0x0126, 0x2061, 0x0100, 0x2069, 0x0140, 0x2071,
-	0x1800, 0x2091, 0x8000, 0x080c, 0x72e5, 0x11d8, 0x2001, 0x180c,
-	0x200c, 0xd1b4, 0x01b0, 0xc1b4, 0x2102, 0x6027, 0x0200, 0x080c,
-	0x2a8d, 0x6024, 0xd0cc, 0x0148, 0x2001, 0x00a0, 0x080c, 0x2b65,
-	0x080c, 0x75dc, 0x080c, 0x5ef6, 0x0428, 0x6028, 0xc0cd, 0x602a,
-	0x0408, 0x080c, 0x72ff, 0x0150, 0x080c, 0x72f6, 0x1138, 0x2001,
-	0x0001, 0x080c, 0x264c, 0x080c, 0x72bd, 0x00a0, 0x080c, 0x71d8,
-	0x0178, 0x2001, 0x0001, 0x080c, 0x264c, 0x7094, 0x9086, 0x001e,
-	0x0120, 0x7094, 0x9086, 0x0022, 0x1118, 0x7097, 0x0025, 0x0010,
-	0x7097, 0x0021, 0x012e, 0x00ee, 0x00de, 0x00ce, 0x001e, 0x0005,
-	0x0026, 0x2011, 0x7169, 0x080c, 0x8474, 0x002e, 0x0016, 0x0026,
-	0x2009, 0x0064, 0x2011, 0x7169, 0x080c, 0x846b, 0x002e, 0x001e,
-	0x0005, 0x00e6, 0x00f6, 0x0016, 0x080c, 0x9623, 0x2071, 0x1800,
-	0x080c, 0x7106, 0x001e, 0x00fe, 0x00ee, 0x0005, 0x0016, 0x0026,
-	0x0036, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x0126, 0x2071, 0x1800,
-	0x080c, 0x9623, 0x2061, 0x0100, 0x2069, 0x0140, 0x2091, 0x8000,
-	0x6028, 0xc09c, 0x602a, 0x2011, 0x0003, 0x080c, 0x99d6, 0x2011,
-	0x0002, 0x080c, 0x99e0, 0x080c, 0x98ee, 0x080c, 0x8420, 0x0036,
-	0x901e, 0x080c, 0x9964, 0x003e, 0x60e3, 0x0000, 0x080c, 0xd33c,
-	0x080c, 0xd373, 0x2009, 0x0004, 0x080c, 0x2a93, 0x080c, 0x29ae,
-	0x2001, 0x1800, 0x2003, 0x0004, 0x6027, 0x0008, 0x2011, 0x7169,
-	0x080c, 0x8474, 0x080c, 0x72ff, 0x0118, 0x9006, 0x080c, 0x2b65,
-	0x080c, 0x0b9e, 0x2001, 0x0001, 0x080c, 0x264c, 0x012e, 0x00fe,
-	0x00ee, 0x00de, 0x00ce, 0x003e, 0x002e, 0x001e, 0x0005, 0x0026,
-	0x00e6, 0x2011, 0x7176, 0x2071, 0x19d7, 0x701c, 0x9206, 0x1118,
-	0x7018, 0x9005, 0x0110, 0x9085, 0x0001, 0x00ee, 0x002e, 0x0005,
-	0x6020, 0xd09c, 0x0005, 0x6800, 0x9084, 0xfffe, 0x9086, 0x00c0,
-	0x0170, 0x2001, 0x00c0, 0x080c, 0x2b65, 0x0156, 0x20a9, 0x002d,
-	0x1d04, 0x71e8, 0x2091, 0x6000, 0x1f04, 0x71e8, 0x015e, 0x0005,
-	0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2069, 0x0140, 0x2071,
-	0x1800, 0x080c, 0x75eb, 0x2001, 0x194a, 0x2003, 0x0000, 0x9006,
-	0x7096, 0x60e2, 0x6886, 0x080c, 0x2713, 0x9006, 0x080c, 0x2b65,
-	0x080c, 0x5db5, 0x6027, 0xffff, 0x602b, 0x182f, 0x00ee, 0x00de,
-	0x00ce, 0x0005, 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2069,
-	0x0140, 0x2071, 0x1800, 0x2001, 0x195a, 0x200c, 0x9186, 0x0000,
-	0x0158, 0x9186, 0x0001, 0x0158, 0x9186, 0x0002, 0x0158, 0x9186,
-	0x0003, 0x0158, 0x0804, 0x72ad, 0x7097, 0x0022, 0x0040, 0x7097,
-	0x0021, 0x0028, 0x7097, 0x0023, 0x0010, 0x7097, 0x0024, 0x60e3,
-	0x0000, 0x6887, 0x0000, 0x2001, 0x0001, 0x080c, 0x2713, 0x0026,
-	0x080c, 0x9e89, 0x002e, 0x7000, 0x908e, 0x0004, 0x0118, 0x602b,
-	0x0028, 0x0010, 0x602b, 0x0020, 0x0156, 0x0126, 0x2091, 0x8000,
-	0x20a9, 0x0005, 0x6024, 0xd0ac, 0x0150, 0x012e, 0x015e, 0x080c,
-	0xbef8, 0x0118, 0x9006, 0x080c, 0x2b8f, 0x0804, 0x72b9, 0x6800,
-	0x9084, 0x00a1, 0xc0bd, 0x6802, 0x080c, 0x2a8d, 0x6904, 0xd1d4,
-	0x1140, 0x2001, 0x0100, 0x080c, 0x2b65, 0x1f04, 0x7252, 0x080c,
-	0x733a, 0x012e, 0x015e, 0x080c, 0x72f6, 0x01d0, 0x6044, 0x9005,
-	0x0190, 0x2011, 0x0114, 0x2204, 0x9085, 0x0100, 0x2012, 0x6050,
-	0x2008, 0x9085, 0x0020, 0x6052, 0x080c, 0x733a, 0x9006, 0x8001,
-	0x1df0, 0x6152, 0x0028, 0x6804, 0xd0d4, 0x1110, 0x080c, 0x733a,
-	0x080c, 0xbef8, 0x0118, 0x9006, 0x080c, 0x2b8f, 0x0016, 0x0026,
-	0x7000, 0x908e, 0x0004, 0x0130, 0x2009, 0x00c8, 0x2011, 0x7176,
-	0x080c, 0x8432, 0x002e, 0x001e, 0x080c, 0x823c, 0x7034, 0xc085,
-	0x7036, 0x2001, 0x195a, 0x2003, 0x0004, 0x080c, 0x6fb9, 0x080c,
-	0x72f6, 0x0138, 0x6804, 0xd0d4, 0x1120, 0xd0dc, 0x1100, 0x080c,
-	0x75e1, 0x00ee, 0x00de, 0x00ce, 0x0005, 0x00c6, 0x00d6, 0x00e6,
-	0x2061, 0x0100, 0x2069, 0x0140, 0x2071, 0x1800, 0x080c, 0x8253,
-	0x080c, 0x8245, 0x080c, 0x75eb, 0x2001, 0x194a, 0x2003, 0x0000,
-	0x9006, 0x7096, 0x60e2, 0x6886, 0x080c, 0x2713, 0x9006, 0x080c,
-	0x2b65, 0x6043, 0x0090, 0x6043, 0x0010, 0x6027, 0xffff, 0x602b,
-	0x182f, 0x00ee, 0x00de, 0x00ce, 0x0005, 0x0006, 0x2001, 0x1959,
-	0x2004, 0x9086, 0xaaaa, 0x000e, 0x0005, 0x0006, 0x080c, 0x55ab,
-	0x9084, 0x0030, 0x9086, 0x0000, 0x000e, 0x0005, 0x0006, 0x080c,
-	0x55ab, 0x9084, 0x0030, 0x9086, 0x0030, 0x000e, 0x0005, 0x0006,
-	0x080c, 0x55ab, 0x9084, 0x0030, 0x9086, 0x0010, 0x000e, 0x0005,
-	0x0006, 0x080c, 0x55ab, 0x9084, 0x0030, 0x9086, 0x0020, 0x000e,
-	0x0005, 0x0036, 0x0016, 0x2001, 0x180c, 0x2004, 0x908c, 0x0013,
-	0x0170, 0x9084, 0x0011, 0x0120, 0x080c, 0x2733, 0x900e, 0x0008,
-	0x900e, 0x2019, 0x0028, 0x080c, 0x3037, 0x9006, 0x0019, 0x001e,
-	0x003e, 0x0005, 0x00e6, 0x2071, 0x180c, 0x2e04, 0x0130, 0x080c,
-	0xbef1, 0x1128, 0x9085, 0x0010, 0x0010, 0x9084, 0xffef, 0x2072,
-	0x00ee, 0x0005, 0x6050, 0x0006, 0x60ec, 0x0006, 0x600c, 0x0006,
-	0x6004, 0x0006, 0x6028, 0x0006, 0x0016, 0x6138, 0x6050, 0x9084,
-	0xfbff, 0x9085, 0x2000, 0x6052, 0x613a, 0x20a9, 0x0012, 0x1d04,
-	0x734f, 0x2091, 0x6000, 0x1f04, 0x734f, 0x602f, 0x0100, 0x602f,
-	0x0000, 0x6050, 0x9085, 0x0400, 0x9084, 0xdfff, 0x6052, 0x613a,
-	0x001e, 0x602f, 0x0040, 0x602f, 0x0000, 0x000e, 0x602a, 0x000e,
-	0x6006, 0x000e, 0x600e, 0x000e, 0x60ee, 0x60e3, 0x0000, 0x6887,
-	0x0001, 0x2001, 0x0001, 0x080c, 0x2713, 0x2001, 0x00a0, 0x0006,
-	0x080c, 0xbef8, 0x000e, 0x0130, 0x080c, 0x2b83, 0x9006, 0x080c,
-	0x2b8f, 0x0010, 0x080c, 0x2b65, 0x000e, 0x6052, 0x6050, 0x0006,
-	0xc0e5, 0x6052, 0x00f6, 0x2079, 0x0100, 0x080c, 0x2a02, 0x00fe,
-	0x000e, 0x6052, 0x0005, 0x0156, 0x0016, 0x0026, 0x0036, 0x00c6,
-	0x00d6, 0x00e6, 0x2061, 0x0100, 0x2069, 0x0140, 0x2071, 0x1800,
-	0x6020, 0x9084, 0x0080, 0x0138, 0x2001, 0x180c, 0x200c, 0xc1c5,
-	0x2102, 0x0804, 0x7415, 0x2001, 0x180c, 0x200c, 0xc1c4, 0x2102,
-	0x6028, 0x9084, 0xe1ff, 0x602a, 0x6027, 0x0200, 0x2001, 0x0090,
-	0x080c, 0x2b65, 0x20a9, 0x0366, 0x6024, 0xd0cc, 0x1518, 0x1d04,
-	0x73bc, 0x2091, 0x6000, 0x1f04, 0x73bc, 0x2011, 0x0003, 0x080c,
-	0x99d6, 0x2011, 0x0002, 0x080c, 0x99e0, 0x080c, 0x98ee, 0x901e,
-	0x080c, 0x9964, 0x2001, 0x00a0, 0x080c, 0x2b65, 0x080c, 0x75dc,
-	0x080c, 0x5ef6, 0x080c, 0xbef8, 0x0110, 0x080c, 0x0d34, 0x9085,
-	0x0001, 0x04c8, 0x080c, 0x19c8, 0x60e3, 0x0000, 0x2001, 0x180d,
-	0x2004, 0xd08c, 0x2001, 0x0002, 0x1118, 0x2001, 0x194a, 0x2004,
-	0x080c, 0x2713, 0x60e2, 0x2001, 0x0080, 0x080c, 0x2b65, 0x20a9,
-	0x0366, 0x6027, 0x1e00, 0x2009, 0x1e00, 0x080c, 0x2a8d, 0x6024,
-	0x910c, 0x0140, 0x1d04, 0x73f9, 0x2091, 0x6000, 0x1f04, 0x73f9,
-	0x0804, 0x73c5, 0x6028, 0x9085, 0x1e00, 0x602a, 0x70b0, 0x9005,
-	0x1118, 0x6887, 0x0001, 0x0008, 0x6886, 0x080c, 0xbef8, 0x0110,
-	0x080c, 0x0d34, 0x9006, 0x00ee, 0x00de, 0x00ce, 0x003e, 0x002e,
-	0x001e, 0x015e, 0x0005, 0x0156, 0x0016, 0x0026, 0x0036, 0x00c6,
-	0x00d6, 0x00e6, 0x2061, 0x0100, 0x2071, 0x1800, 0x7000, 0x9086,
-	0x0003, 0x1168, 0x2001, 0x020b, 0x2004, 0x9084, 0x5540, 0x9086,
-	0x5540, 0x1128, 0x2069, 0x1a57, 0x2d04, 0x8000, 0x206a, 0x2069,
-	0x0140, 0x6020, 0x9084, 0x00c0, 0x0120, 0x6884, 0x9005, 0x1904,
-	0x7488, 0x2001, 0x0088, 0x080c, 0x2b65, 0x9006, 0x60e2, 0x6886,
-	0x080c, 0x2713, 0x2069, 0x0200, 0x6804, 0x9005, 0x1118, 0x6808,
-	0x9005, 0x01c0, 0x6028, 0x9084, 0xfbff, 0x602a, 0x6027, 0x0400,
-	0x2069, 0x196b, 0x7000, 0x206a, 0x7097, 0x0026, 0x7003, 0x0001,
-	0x20a9, 0x0002, 0x1d04, 0x746a, 0x2091, 0x6000, 0x1f04, 0x746a,
-	0x0804, 0x74bf, 0x2069, 0x0140, 0x20a9, 0x0384, 0x6027, 0x1e00,
-	0x2009, 0x1e00, 0x080c, 0x2a8d, 0x6024, 0x910c, 0x0508, 0x9084,
-	0x1a00, 0x11f0, 0x1d04, 0x7476, 0x2091, 0x6000, 0x1f04, 0x7476,
-	0x2011, 0x0003, 0x080c, 0x99d6, 0x2011, 0x0002, 0x080c, 0x99e0,
-	0x080c, 0x98ee, 0x901e, 0x080c, 0x9964, 0x2001, 0x00a0, 0x080c,
-	0x2b65, 0x080c, 0x75dc, 0x080c, 0x5ef6, 0x9085, 0x0001, 0x00f8,
-	0x080c, 0x19c8, 0x2001, 0x0080, 0x080c, 0x2b65, 0x2069, 0x0140,
-	0x60e3, 0x0000, 0x70b0, 0x9005, 0x1118, 0x6887, 0x0001, 0x0008,
-	0x6886, 0x2001, 0x180d, 0x2004, 0xd08c, 0x2001, 0x0002, 0x1118,
-	0x2001, 0x194a, 0x2004, 0x080c, 0x2713, 0x60e2, 0x9006, 0x00ee,
-	0x00de, 0x00ce, 0x003e, 0x002e, 0x001e, 0x015e, 0x0005, 0x0156,
-	0x0016, 0x0026, 0x0036, 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100,
-	0x2071, 0x1800, 0x6020, 0x9084, 0x00c0, 0x01c8, 0x2011, 0x0003,
-	0x080c, 0x99d6, 0x2011, 0x0002, 0x080c, 0x99e0, 0x080c, 0x98ee,
-	0x901e, 0x080c, 0x9964, 0x2069, 0x0140, 0x2001, 0x00a0, 0x080c,
-	0x2b65, 0x080c, 0x75dc, 0x080c, 0x5ef6, 0x0804, 0x7561, 0x2001,
-	0x180c, 0x200c, 0xd1b4, 0x1160, 0xc1b5, 0x2102, 0x080c, 0x715e,
-	0x2069, 0x0140, 0x2001, 0x0080, 0x080c, 0x2b65, 0x60e3, 0x0000,
-	0x2069, 0x0200, 0x6804, 0x9005, 0x1118, 0x6808, 0x9005, 0x0180,
-	0x6028, 0x9084, 0xfdff, 0x602a, 0x6027, 0x0200, 0x2069, 0x196b,
-	0x7000, 0x206a, 0x7097, 0x0027, 0x7003, 0x0001, 0x0804, 0x7561,
-	0x6027, 0x1e00, 0x2009, 0x1e00, 0x080c, 0x2a8d, 0x6024, 0x910c,
-	0x01c8, 0x9084, 0x1c00, 0x11b0, 0x1d04, 0x7518, 0x0006, 0x0016,
-	0x00c6, 0x00d6, 0x00e6, 0x080c, 0x829f, 0x00ee, 0x00de, 0x00ce,
-	0x001e, 0x000e, 0x00e6, 0x2071, 0x19d7, 0x7078, 0x00ee, 0x9005,
-	0x19f8, 0x0438, 0x0026, 0x2011, 0x7176, 0x080c, 0x835e, 0x2011,
-	0x7169, 0x080c, 0x8474, 0x002e, 0x2069, 0x0140, 0x60e3, 0x0000,
-	0x70b0, 0x9005, 0x1118, 0x6887, 0x0001, 0x0008, 0x6886, 0x2001,
-	0x180d, 0x2004, 0xd08c, 0x2001, 0x0002, 0x1118, 0x2001, 0x194a,
-	0x2004, 0x080c, 0x2713, 0x60e2, 0x2001, 0x180c, 0x200c, 0xc1b4,
-	0x2102, 0x00ee, 0x00de, 0x00ce, 0x003e, 0x002e, 0x001e, 0x015e,
-	0x0005, 0x0156, 0x0016, 0x0026, 0x0036, 0x0046, 0x00c6, 0x00e6,
-	0x2061, 0x0100, 0x2071, 0x1800, 0x080c, 0xbef1, 0x1904, 0x75ca,
-	0x7130, 0xd18c, 0x1150, 0x080c, 0x31c0, 0x0118, 0xc18d, 0x7132,
-	0x0020, 0x7030, 0xd08c, 0x0904, 0x75ca, 0x2011, 0x185f, 0x220c,
-	0xd1a4, 0x0538, 0x0016, 0x2019, 0x000e, 0x080c, 0xd0d7, 0x0156,
-	0x00b6, 0x20a9, 0x007f, 0x900e, 0x9186, 0x007e, 0x01a0, 0x9186,
-	0x0080, 0x0188, 0x080c, 0x6411, 0x1170, 0x2120, 0x9006, 0x0016,
-	0x2009, 0x000e, 0x080c, 0xd156, 0x2009, 0x0001, 0x2011, 0x0100,
-	0x080c, 0x8532, 0x001e, 0x8108, 0x1f04, 0x7594, 0x00be, 0x015e,
-	0x001e, 0xd1ac, 0x1140, 0x0016, 0x900e, 0x2019, 0x0004, 0x080c,
-	0x3037, 0x001e, 0x0078, 0x0156, 0x00b6, 0x20a9, 0x007f, 0x900e,
-	0x080c, 0x6411, 0x1110, 0x080c, 0x5f10, 0x8108, 0x1f04, 0x75c0,
-	0x00be, 0x015e, 0x080c, 0x19c8, 0x080c, 0x9e89, 0x60e3, 0x0000,
-	0x080c, 0x5ef6, 0x080c, 0x7212, 0x00ee, 0x00ce, 0x004e, 0x003e,
-	0x002e, 0x001e, 0x015e, 0x0005, 0x2001, 0x195a, 0x2003, 0x0001,
-	0x0005, 0x2001, 0x195a, 0x2003, 0x0000, 0x0005, 0x2001, 0x1959,
-	0x2003, 0xaaaa, 0x0005, 0x2001, 0x1959, 0x2003, 0x0000, 0x0005,
-	0x2071, 0x18fb, 0x7003, 0x0000, 0x7007, 0x0000, 0x080c, 0x101a,
-	0x090c, 0x0dc4, 0xa8af, 0xdcb0, 0x2900, 0x704e, 0x080c, 0x101a,
-	0x090c, 0x0dc4, 0xa8af, 0xdcb0, 0x2900, 0x7052, 0xa86b, 0x0000,
+	0xd084, 0x190c, 0x11a9, 0x00fe, 0x0005, 0x782c, 0x9094, 0x0780,
+	0x190c, 0x6f4a, 0xd0a4, 0x0db8, 0x00e6, 0x2071, 0x1800, 0x7824,
+	0x2048, 0x702c, 0xa802, 0x2900, 0x702e, 0x70bc, 0x8000, 0x70be,
+	0x080c, 0x83a7, 0x782c, 0x9094, 0x0780, 0x190c, 0x6f4a, 0xd0a4,
+	0x1d70, 0x00d6, 0x2069, 0x0050, 0x693c, 0x2069, 0x1925, 0x6808,
+	0x690a, 0x2069, 0x19d7, 0x9102, 0x1118, 0x6844, 0x9005, 0x1320,
+	0x2001, 0x1926, 0x200c, 0x6946, 0x00de, 0x00ee, 0x00fe, 0x0005,
+	0x7094, 0x908a, 0x002a, 0x1a0c, 0x0dc3, 0x9082, 0x001d, 0x001b,
+	0x6027, 0x1e00, 0x0005, 0x7101, 0x706e, 0x708a, 0x70b4, 0x70f0,
+	0x7130, 0x7142, 0x708a, 0x7118, 0x7029, 0x7057, 0x70da, 0x7028,
+	0x0005, 0x00d6, 0x2069, 0x0200, 0x6804, 0x9005, 0x1180, 0x6808,
+	0x9005, 0x1518, 0x7097, 0x0029, 0x2069, 0x196b, 0x2d04, 0x7002,
+	0x080c, 0x748e, 0x6028, 0x9085, 0x0600, 0x602a, 0x00b0, 0x7097,
+	0x0029, 0x2069, 0x196b, 0x2d04, 0x7002, 0x6028, 0x9085, 0x0600,
+	0x602a, 0x00e6, 0x0036, 0x0046, 0x0056, 0x2071, 0x1a41, 0x080c,
+	0x19e3, 0x005e, 0x004e, 0x003e, 0x00ee, 0x00de, 0x0005, 0x00d6,
+	0x2069, 0x0200, 0x6804, 0x9005, 0x1178, 0x6808, 0x9005, 0x1160,
+	0x7097, 0x0029, 0x2069, 0x196b, 0x2d04, 0x7002, 0x080c, 0x7532,
+	0x6028, 0x9085, 0x0600, 0x602a, 0x00de, 0x0005, 0x0006, 0x2001,
+	0x0090, 0x080c, 0x2bce, 0x000e, 0x6124, 0xd1e4, 0x1190, 0x080c,
+	0x71af, 0xd1d4, 0x1160, 0xd1dc, 0x1138, 0xd1cc, 0x0150, 0x7097,
+	0x0020, 0x080c, 0x71af, 0x0028, 0x7097, 0x001d, 0x0010, 0x7097,
+	0x001f, 0x0005, 0x2001, 0x0088, 0x080c, 0x2bce, 0x6124, 0xd1cc,
+	0x11e8, 0xd1dc, 0x11c0, 0xd1e4, 0x1198, 0x9184, 0x1e00, 0x11d8,
+	0x080c, 0x1a10, 0x60e3, 0x0001, 0x600c, 0xc0b4, 0x600e, 0x080c,
+	0x737d, 0x2001, 0x0080, 0x080c, 0x2bce, 0x7097, 0x0029, 0x0058,
+	0x7097, 0x001e, 0x0040, 0x7097, 0x001d, 0x0028, 0x7097, 0x0020,
+	0x0010, 0x7097, 0x001f, 0x0005, 0x080c, 0x1a10, 0x60e3, 0x0001,
+	0x600c, 0xc0b4, 0x600e, 0x080c, 0x737d, 0x2001, 0x0080, 0x080c,
+	0x2bce, 0x6124, 0xd1d4, 0x1198, 0xd1dc, 0x1170, 0xd1e4, 0x1148,
+	0x9184, 0x1e00, 0x1118, 0x7097, 0x0029, 0x0058, 0x7097, 0x0028,
+	0x0040, 0x7097, 0x001e, 0x0028, 0x7097, 0x001d, 0x0010, 0x7097,
+	0x001f, 0x0005, 0x6124, 0xd1d4, 0x1180, 0xd1dc, 0x1158, 0xd1e4,
+	0x1130, 0x9184, 0x1e00, 0x1158, 0x7097, 0x0029, 0x0040, 0x7097,
+	0x001e, 0x0028, 0x7097, 0x001d, 0x0010, 0x7097, 0x001f, 0x0005,
+	0x2001, 0x00a0, 0x080c, 0x2bce, 0x6124, 0xd1dc, 0x1138, 0xd1e4,
+	0x0138, 0x080c, 0x1a10, 0x7097, 0x001e, 0x0010, 0x7097, 0x001d,
+	0x0005, 0x080c, 0x7232, 0x6124, 0xd1dc, 0x1188, 0x080c, 0x71af,
+	0x0016, 0x080c, 0x1a10, 0x001e, 0xd1d4, 0x1128, 0xd1e4, 0x0138,
+	0x7097, 0x001e, 0x0020, 0x7097, 0x001f, 0x080c, 0x71af, 0x0005,
+	0x0006, 0x2001, 0x00a0, 0x080c, 0x2bce, 0x000e, 0x6124, 0xd1d4,
+	0x1160, 0xd1cc, 0x1150, 0xd1dc, 0x1128, 0xd1e4, 0x0140, 0x7097,
+	0x001e, 0x0028, 0x7097, 0x001d, 0x0010, 0x7097, 0x0021, 0x0005,
+	0x080c, 0x7232, 0x6124, 0xd1d4, 0x1150, 0xd1dc, 0x1128, 0xd1e4,
+	0x0140, 0x7097, 0x001e, 0x0028, 0x7097, 0x001d, 0x0010, 0x7097,
+	0x001f, 0x0005, 0x0006, 0x2001, 0x0090, 0x080c, 0x2bce, 0x000e,
+	0x6124, 0xd1d4, 0x1178, 0xd1cc, 0x1150, 0xd1dc, 0x1128, 0xd1e4,
+	0x0158, 0x7097, 0x001e, 0x0040, 0x7097, 0x001d, 0x0028, 0x7097,
+	0x0020, 0x0010, 0x7097, 0x001f, 0x0005, 0x0016, 0x00c6, 0x00d6,
+	0x00e6, 0x0126, 0x2061, 0x0100, 0x2069, 0x0140, 0x2071, 0x1800,
+	0x2091, 0x8000, 0x080c, 0x7351, 0x11d8, 0x2001, 0x180c, 0x200c,
+	0xd1b4, 0x01b0, 0xc1b4, 0x2102, 0x6027, 0x0200, 0x080c, 0x2af6,
+	0x6024, 0xd0cc, 0x0148, 0x2001, 0x00a0, 0x080c, 0x2bce, 0x080c,
+	0x764c, 0x080c, 0x5fb3, 0x0428, 0x6028, 0xc0cd, 0x602a, 0x0408,
+	0x080c, 0x736b, 0x0150, 0x080c, 0x7362, 0x1138, 0x2001, 0x0001,
+	0x080c, 0x26b1, 0x080c, 0x7329, 0x00a0, 0x080c, 0x722f, 0x0178,
+	0x2001, 0x0001, 0x080c, 0x26b1, 0x7094, 0x9086, 0x001e, 0x0120,
+	0x7094, 0x9086, 0x0022, 0x1118, 0x7097, 0x0025, 0x0010, 0x7097,
+	0x0021, 0x012e, 0x00ee, 0x00de, 0x00ce, 0x001e, 0x0005, 0x0026,
+	0x2011, 0x71c0, 0x080c, 0x85e0, 0x002e, 0x0016, 0x0026, 0x2009,
+	0x0064, 0x2011, 0x71c0, 0x080c, 0x85d7, 0x002e, 0x001e, 0x0005,
+	0x00e6, 0x00f6, 0x0016, 0x080c, 0x98d1, 0x2071, 0x1800, 0x080c,
+	0x715d, 0x001e, 0x00fe, 0x00ee, 0x0005, 0x0016, 0x0026, 0x0036,
+	0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x0126, 0x2071, 0x1800, 0x080c,
+	0x98d1, 0x2061, 0x0100, 0x2069, 0x0140, 0x2091, 0x8000, 0x6028,
+	0xc09c, 0x602a, 0x2011, 0x0003, 0x080c, 0x9ca7, 0x2011, 0x0002,
+	0x080c, 0x9cb1, 0x080c, 0x9bbf, 0x080c, 0x858c, 0x0036, 0x901e,
+	0x080c, 0x9c35, 0x003e, 0x60e3, 0x0000, 0x080c, 0xe0c9, 0x080c,
+	0xe100, 0x2009, 0x0004, 0x080c, 0x2afc, 0x080c, 0x2a17, 0x2001,
+	0x1800, 0x2003, 0x0004, 0x6027, 0x0008, 0x2011, 0x71c0, 0x080c,
+	0x85e0, 0x080c, 0x736b, 0x0118, 0x9006, 0x080c, 0x2bce, 0x080c,
+	0x0b9e, 0x2001, 0x0001, 0x080c, 0x26b1, 0x012e, 0x00fe, 0x00ee,
+	0x00de, 0x00ce, 0x003e, 0x002e, 0x001e, 0x0005, 0x0026, 0x00e6,
+	0x2011, 0x71cd, 0x2071, 0x19d7, 0x701c, 0x9206, 0x1118, 0x7018,
+	0x9005, 0x0110, 0x9085, 0x0001, 0x00ee, 0x002e, 0x0005, 0x6020,
+	0xd09c, 0x0005, 0x6800, 0x9084, 0xfffe, 0x9086, 0x00c0, 0x01b8,
+	0x2001, 0x00c0, 0x080c, 0x2bce, 0x0156, 0x20a9, 0x002d, 0x1d04,
+	0x723f, 0x2091, 0x6000, 0x1f04, 0x723f, 0x015e, 0x00d6, 0x2069,
+	0x1800, 0x6898, 0x8001, 0x0220, 0x0118, 0x689a, 0x00de, 0x0005,
+	0x689b, 0x0014, 0x68e4, 0xd0dc, 0x0dc8, 0x6800, 0x9086, 0x0001,
+	0x1da8, 0x080c, 0x85ec, 0x0c90, 0x00c6, 0x00d6, 0x00e6, 0x2061,
+	0x0100, 0x2069, 0x0140, 0x2071, 0x1800, 0x080c, 0x765b, 0x2001,
+	0x1949, 0x2003, 0x0000, 0x9006, 0x7096, 0x60e2, 0x6886, 0x080c,
+	0x277c, 0x9006, 0x080c, 0x2bce, 0x080c, 0x5e72, 0x6027, 0xffff,
+	0x602b, 0x182f, 0x00ee, 0x00de, 0x00ce, 0x0005, 0x00c6, 0x00d6,
+	0x00e6, 0x2061, 0x0100, 0x2069, 0x0140, 0x2071, 0x1800, 0x2001,
+	0x1959, 0x200c, 0x9186, 0x0000, 0x0158, 0x9186, 0x0001, 0x0158,
+	0x9186, 0x0002, 0x0158, 0x9186, 0x0003, 0x0158, 0x0804, 0x7319,
+	0x7097, 0x0022, 0x0040, 0x7097, 0x0021, 0x0028, 0x7097, 0x0023,
+	0x0010, 0x7097, 0x0024, 0x60e3, 0x0000, 0x6887, 0x0000, 0x2001,
+	0x0001, 0x080c, 0x277c, 0x0026, 0x080c, 0xa30e, 0x002e, 0x7000,
+	0x908e, 0x0004, 0x0118, 0x602b, 0x0028, 0x0010, 0x602b, 0x0020,
+	0x0156, 0x0126, 0x2091, 0x8000, 0x20a9, 0x0005, 0x6024, 0xd0ac,
+	0x0150, 0x012e, 0x015e, 0x080c, 0xc8ce, 0x0118, 0x9006, 0x080c,
+	0x2bf8, 0x0804, 0x7325, 0x6800, 0x9084, 0x00a1, 0xc0bd, 0x6802,
+	0x080c, 0x2af6, 0x6904, 0xd1d4, 0x1140, 0x2001, 0x0100, 0x080c,
+	0x2bce, 0x1f04, 0x72be, 0x080c, 0x73a5, 0x012e, 0x015e, 0x080c,
+	0x7362, 0x01d0, 0x6044, 0x9005, 0x0190, 0x2011, 0x0114, 0x2204,
+	0x9085, 0x0100, 0x2012, 0x6050, 0x2008, 0x9085, 0x0020, 0x6052,
+	0x080c, 0x73a5, 0x9006, 0x8001, 0x1df0, 0x6152, 0x0028, 0x6804,
+	0xd0d4, 0x1110, 0x080c, 0x73a5, 0x080c, 0xc8ce, 0x0118, 0x9006,
+	0x080c, 0x2bf8, 0x0016, 0x0026, 0x7000, 0x908e, 0x0004, 0x0130,
+	0x2009, 0x00c8, 0x2011, 0x71cd, 0x080c, 0x859e, 0x002e, 0x001e,
+	0x080c, 0x839e, 0x7034, 0xc085, 0x7036, 0x2001, 0x1959, 0x2003,
+	0x0004, 0x080c, 0x7010, 0x080c, 0x7362, 0x0138, 0x6804, 0xd0d4,
+	0x1120, 0xd0dc, 0x1100, 0x080c, 0x7651, 0x00ee, 0x00de, 0x00ce,
+	0x0005, 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2069, 0x0140,
+	0x2071, 0x1800, 0x080c, 0x83b5, 0x080c, 0x83a7, 0x080c, 0x765b,
+	0x2001, 0x1949, 0x2003, 0x0000, 0x9006, 0x7096, 0x60e2, 0x6886,
+	0x080c, 0x277c, 0x9006, 0x080c, 0x2bce, 0x6043, 0x0090, 0x6043,
+	0x0010, 0x6027, 0xffff, 0x602b, 0x182f, 0x00ee, 0x00de, 0x00ce,
+	0x0005, 0x0006, 0x2001, 0x1958, 0x2004, 0x9086, 0xaaaa, 0x000e,
+	0x0005, 0x0006, 0x080c, 0x5668, 0x9084, 0x0030, 0x9086, 0x0000,
+	0x000e, 0x0005, 0x0006, 0x080c, 0x5668, 0x9084, 0x0030, 0x9086,
+	0x0030, 0x000e, 0x0005, 0x0006, 0x080c, 0x5668, 0x9084, 0x0030,
+	0x9086, 0x0010, 0x000e, 0x0005, 0x0006, 0x080c, 0x5668, 0x9084,
+	0x0030, 0x9086, 0x0020, 0x000e, 0x0005, 0x0036, 0x0016, 0x2001,
+	0x180c, 0x2004, 0x908c, 0x0013, 0x0168, 0x0020, 0x080c, 0x279c,
+	0x900e, 0x0010, 0x2009, 0x0002, 0x2019, 0x0028, 0x080c, 0x30cd,
+	0x9006, 0x0019, 0x001e, 0x003e, 0x0005, 0x00e6, 0x2071, 0x180c,
+	0x2e04, 0x0130, 0x080c, 0xc8c7, 0x1128, 0x9085, 0x0010, 0x0010,
+	0x9084, 0xffef, 0x2072, 0x00ee, 0x0005, 0x6050, 0x0006, 0x60ec,
+	0x0006, 0x600c, 0x0006, 0x6004, 0x0006, 0x6028, 0x0006, 0x0016,
+	0x6138, 0x6050, 0x9084, 0xfbff, 0x9085, 0x2000, 0x6052, 0x613a,
+	0x20a9, 0x0012, 0x1d04, 0x73ba, 0x2091, 0x6000, 0x1f04, 0x73ba,
+	0x602f, 0x0100, 0x602f, 0x0000, 0x6050, 0x9085, 0x0400, 0x9084,
+	0xdfff, 0x6052, 0x613a, 0x001e, 0x602f, 0x0040, 0x602f, 0x0000,
+	0x000e, 0x602a, 0x000e, 0x6006, 0x000e, 0x600e, 0x000e, 0x60ee,
+	0x60e3, 0x0000, 0x6887, 0x0001, 0x2001, 0x0001, 0x080c, 0x277c,
+	0x2001, 0x00a0, 0x0006, 0x080c, 0xc8ce, 0x000e, 0x0130, 0x080c,
+	0x2bec, 0x9006, 0x080c, 0x2bf8, 0x0010, 0x080c, 0x2bce, 0x000e,
+	0x6052, 0x6050, 0x0006, 0xc0e5, 0x6052, 0x00f6, 0x2079, 0x0100,
+	0x080c, 0x2a6b, 0x00fe, 0x000e, 0x6052, 0x0005, 0x0156, 0x0016,
+	0x0026, 0x0036, 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2069,
+	0x0140, 0x2071, 0x1800, 0x6020, 0x9084, 0x0080, 0x0138, 0x2001,
+	0x180c, 0x200c, 0xc1c5, 0x2102, 0x0804, 0x7480, 0x2001, 0x180c,
+	0x200c, 0xc1c4, 0x2102, 0x6028, 0x9084, 0xe1ff, 0x602a, 0x6027,
+	0x0200, 0x2001, 0x0090, 0x080c, 0x2bce, 0x20a9, 0x0366, 0x6024,
+	0xd0cc, 0x1518, 0x1d04, 0x7427, 0x2091, 0x6000, 0x1f04, 0x7427,
+	0x2011, 0x0003, 0x080c, 0x9ca7, 0x2011, 0x0002, 0x080c, 0x9cb1,
+	0x080c, 0x9bbf, 0x901e, 0x080c, 0x9c35, 0x2001, 0x00a0, 0x080c,
+	0x2bce, 0x080c, 0x764c, 0x080c, 0x5fb3, 0x080c, 0xc8ce, 0x0110,
+	0x080c, 0x0d31, 0x9085, 0x0001, 0x04c8, 0x080c, 0x1a10, 0x60e3,
+	0x0000, 0x2001, 0x180d, 0x2004, 0xd08c, 0x2001, 0x0002, 0x1118,
+	0x2001, 0x1949, 0x2004, 0x080c, 0x277c, 0x60e2, 0x2001, 0x0080,
+	0x080c, 0x2bce, 0x20a9, 0x0366, 0x6027, 0x1e00, 0x2009, 0x1e00,
+	0x080c, 0x2af6, 0x6024, 0x910c, 0x0140, 0x1d04, 0x7464, 0x2091,
+	0x6000, 0x1f04, 0x7464, 0x0804, 0x7430, 0x6028, 0x9085, 0x1e00,
+	0x602a, 0x70b0, 0x9005, 0x1118, 0x6887, 0x0001, 0x0008, 0x6886,
+	0x080c, 0xc8ce, 0x0110, 0x080c, 0x0d31, 0x9006, 0x00ee, 0x00de,
+	0x00ce, 0x003e, 0x002e, 0x001e, 0x015e, 0x0005, 0x0156, 0x0016,
+	0x0026, 0x0036, 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2071,
+	0x1800, 0x7000, 0x9086, 0x0003, 0x1168, 0x2001, 0x020b, 0x2004,
+	0x9084, 0x5540, 0x9086, 0x5540, 0x1128, 0x2069, 0x1a57, 0x2d04,
+	0x8000, 0x206a, 0x2069, 0x0140, 0x6020, 0x9084, 0x00c0, 0x0120,
+	0x6884, 0x9005, 0x1904, 0x74f3, 0x2001, 0x0088, 0x080c, 0x2bce,
+	0x9006, 0x60e2, 0x6886, 0x080c, 0x277c, 0x2069, 0x0200, 0x6804,
+	0x9005, 0x1118, 0x6808, 0x9005, 0x01c0, 0x6028, 0x9084, 0xfbff,
+	0x602a, 0x6027, 0x0400, 0x2069, 0x196b, 0x7000, 0x206a, 0x7097,
+	0x0026, 0x7003, 0x0001, 0x20a9, 0x0002, 0x1d04, 0x74d5, 0x2091,
+	0x6000, 0x1f04, 0x74d5, 0x0804, 0x752a, 0x2069, 0x0140, 0x20a9,
+	0x0384, 0x6027, 0x1e00, 0x2009, 0x1e00, 0x080c, 0x2af6, 0x6024,
+	0x910c, 0x0508, 0x9084, 0x1a00, 0x11f0, 0x1d04, 0x74e1, 0x2091,
+	0x6000, 0x1f04, 0x74e1, 0x2011, 0x0003, 0x080c, 0x9ca7, 0x2011,
+	0x0002, 0x080c, 0x9cb1, 0x080c, 0x9bbf, 0x901e, 0x080c, 0x9c35,
+	0x2001, 0x00a0, 0x080c, 0x2bce, 0x080c, 0x764c, 0x080c, 0x5fb3,
+	0x9085, 0x0001, 0x00f8, 0x080c, 0x1a10, 0x2001, 0x0080, 0x080c,
+	0x2bce, 0x2069, 0x0140, 0x60e3, 0x0000, 0x70b0, 0x9005, 0x1118,
+	0x6887, 0x0001, 0x0008, 0x6886, 0x2001, 0x180d, 0x2004, 0xd08c,
+	0x2001, 0x0002, 0x1118, 0x2001, 0x1949, 0x2004, 0x080c, 0x277c,
+	0x60e2, 0x9006, 0x00ee, 0x00de, 0x00ce, 0x003e, 0x002e, 0x001e,
+	0x015e, 0x0005, 0x0156, 0x0016, 0x0026, 0x0036, 0x00c6, 0x00d6,
+	0x00e6, 0x2061, 0x0100, 0x2071, 0x1800, 0x6020, 0x9084, 0x00c0,
+	0x01c8, 0x2011, 0x0003, 0x080c, 0x9ca7, 0x2011, 0x0002, 0x080c,
+	0x9cb1, 0x080c, 0x9bbf, 0x901e, 0x080c, 0x9c35, 0x2069, 0x0140,
+	0x2001, 0x00a0, 0x080c, 0x2bce, 0x080c, 0x764c, 0x080c, 0x5fb3,
+	0x0804, 0x75cc, 0x2001, 0x180c, 0x200c, 0xd1b4, 0x1160, 0xc1b5,
+	0x2102, 0x080c, 0x71b5, 0x2069, 0x0140, 0x2001, 0x0080, 0x080c,
+	0x2bce, 0x60e3, 0x0000, 0x2069, 0x0200, 0x6804, 0x9005, 0x1118,
+	0x6808, 0x9005, 0x0180, 0x6028, 0x9084, 0xfdff, 0x602a, 0x6027,
+	0x0200, 0x2069, 0x196b, 0x7000, 0x206a, 0x7097, 0x0027, 0x7003,
+	0x0001, 0x0804, 0x75cc, 0x6027, 0x1e00, 0x2009, 0x1e00, 0x080c,
+	0x2af6, 0x6024, 0x910c, 0x01c8, 0x9084, 0x1c00, 0x11b0, 0x1d04,
+	0x7583, 0x0006, 0x0016, 0x00c6, 0x00d6, 0x00e6, 0x080c, 0x8401,
+	0x00ee, 0x00de, 0x00ce, 0x001e, 0x000e, 0x00e6, 0x2071, 0x19d7,
+	0x7078, 0x00ee, 0x9005, 0x19f8, 0x0438, 0x0026, 0x2011, 0x71cd,
+	0x080c, 0x84c2, 0x2011, 0x71c0, 0x080c, 0x85e0, 0x002e, 0x2069,
+	0x0140, 0x60e3, 0x0000, 0x70b0, 0x9005, 0x1118, 0x6887, 0x0001,
+	0x0008, 0x6886, 0x2001, 0x180d, 0x2004, 0xd08c, 0x2001, 0x0002,
+	0x1118, 0x2001, 0x1949, 0x2004, 0x080c, 0x277c, 0x60e2, 0x2001,
+	0x180c, 0x200c, 0xc1b4, 0x2102, 0x00ee, 0x00de, 0x00ce, 0x003e,
+	0x002e, 0x001e, 0x015e, 0x0005, 0x0156, 0x0016, 0x0026, 0x0036,
+	0x0046, 0x00c6, 0x00e6, 0x2061, 0x0100, 0x2071, 0x1800, 0x080c,
+	0xc8c7, 0x1904, 0x763a, 0x7130, 0xd184, 0x1170, 0x080c, 0x325c,
+	0x0138, 0xc18d, 0x7132, 0x2011, 0x185f, 0x2214, 0xd2ac, 0x1120,
+	0x7030, 0xd08c, 0x0904, 0x763a, 0x2011, 0x185f, 0x220c, 0xd1a4,
+	0x0538, 0x0016, 0x2019, 0x000e, 0x080c, 0xdc90, 0x0156, 0x00b6,
+	0x20a9, 0x007f, 0x900e, 0x9186, 0x007e, 0x01a0, 0x9186, 0x0080,
+	0x0188, 0x080c, 0x64fc, 0x1170, 0x2120, 0x9006, 0x0016, 0x2009,
+	0x000e, 0x080c, 0xdd18, 0x2009, 0x0001, 0x2011, 0x0100, 0x080c,
+	0x8703, 0x001e, 0x8108, 0x1f04, 0x7603, 0x00be, 0x015e, 0x001e,
+	0xd1ac, 0x1148, 0x0016, 0x2009, 0x0002, 0x2019, 0x0004, 0x080c,
+	0x30cd, 0x001e, 0x0078, 0x0156, 0x00b6, 0x20a9, 0x007f, 0x900e,
+	0x080c, 0x64fc, 0x1110, 0x080c, 0x5fcd, 0x8108, 0x1f04, 0x7630,
+	0x00be, 0x015e, 0x080c, 0x1a10, 0x080c, 0xa30e, 0x60e3, 0x0000,
+	0x080c, 0x5fb3, 0x080c, 0x727e, 0x00ee, 0x00ce, 0x004e, 0x003e,
+	0x002e, 0x001e, 0x015e, 0x0005, 0x2001, 0x1959, 0x2003, 0x0001,
+	0x0005, 0x2001, 0x1959, 0x2003, 0x0000, 0x0005, 0x2001, 0x1958,
+	0x2003, 0xaaaa, 0x0005, 0x2001, 0x1958, 0x2003, 0x0000, 0x0005,
+	0x2071, 0x18fb, 0x7003, 0x0000, 0x7007, 0x0000, 0x080c, 0x1026,
+	0x090c, 0x0dc3, 0xa8af, 0xdcb0, 0x2900, 0x704e, 0x080c, 0x1026,
+	0x090c, 0x0dc3, 0xa8af, 0xdcb0, 0x2900, 0x7052, 0xa86b, 0x0000,
 	0xa86f, 0x0001, 0xa8a3, 0x0000, 0x0005, 0x00e6, 0x2071, 0x0040,
 	0x6848, 0x9005, 0x1118, 0x9085, 0x0001, 0x04b0, 0x6840, 0x9005,
 	0x0150, 0x04a1, 0x6a50, 0x9200, 0x7002, 0x6854, 0x9101, 0x7006,
@@ -3565,83 +3579,83 @@
 	0x6848, 0x701a, 0x701c, 0x9085, 0x0040, 0x701e, 0x2001, 0x001a,
 	0x7036, 0x702b, 0x0001, 0x2001, 0x0004, 0x200c, 0x918c, 0xfff7,
 	0x918d, 0x8000, 0x2102, 0x00d6, 0x2069, 0x18fb, 0x6807, 0x0001,
-	0x00de, 0x080c, 0x7bbd, 0x9006, 0x00ee, 0x0005, 0x900e, 0x0156,
+	0x00de, 0x080c, 0x7c5d, 0x9006, 0x00ee, 0x0005, 0x900e, 0x0156,
 	0x20a9, 0x0006, 0x8003, 0x2011, 0x0100, 0x2214, 0x9296, 0x0008,
-	0x1110, 0x818d, 0x0010, 0x81f5, 0x3e08, 0x1f04, 0x7652, 0x015e,
-	0x0005, 0x2079, 0x0040, 0x2071, 0x18fb, 0x7004, 0x0002, 0x7671,
-	0x7672, 0x76aa, 0x7705, 0x7850, 0x766f, 0x766f, 0x787a, 0x080c,
-	0x0dc4, 0x0005, 0x2079, 0x0040, 0x782c, 0x908c, 0x0780, 0x190c,
-	0x7c49, 0xd0a4, 0x01f8, 0x7824, 0x2048, 0x9006, 0xa802, 0xa806,
+	0x1110, 0x818d, 0x0010, 0x81f5, 0x3e08, 0x1f04, 0x76c2, 0x015e,
+	0x0005, 0x2079, 0x0040, 0x2071, 0x18fb, 0x7004, 0x0002, 0x76e1,
+	0x76e2, 0x771a, 0x7775, 0x78c0, 0x76df, 0x76df, 0x78ea, 0x080c,
+	0x0dc3, 0x0005, 0x2079, 0x0040, 0x782c, 0x908c, 0x0780, 0x190c,
+	0x7ce9, 0xd0a4, 0x01f8, 0x7824, 0x2048, 0x9006, 0xa802, 0xa806,
 	0xa868, 0x9084, 0x00ff, 0x908a, 0x0040, 0x0610, 0x00c0, 0x2001,
-	0x1800, 0x200c, 0x9186, 0x0003, 0x1168, 0x7004, 0x0002, 0x769a,
-	0x7674, 0x769a, 0x7698, 0x769a, 0x769a, 0x769a, 0x769a, 0x769a,
-	0x080c, 0x7705, 0x782c, 0xd09c, 0x090c, 0x7bbd, 0x0005, 0x9082,
-	0x005a, 0x1218, 0x2100, 0x003b, 0x0c10, 0x080c, 0x773b, 0x0c90,
-	0x00e3, 0x08e8, 0x0005, 0x773b, 0x773b, 0x773b, 0x773b, 0x773b,
-	0x773b, 0x773b, 0x773b, 0x775d, 0x773b, 0x773b, 0x773b, 0x773b,
-	0x773b, 0x773b, 0x773b, 0x773b, 0x773b, 0x773b, 0x773b, 0x773b,
-	0x773b, 0x773b, 0x773b, 0x773b, 0x773b, 0x773b, 0x773b, 0x7747,
-	0x773b, 0x795d, 0x773b, 0x773b, 0x773b, 0x775d, 0x773b, 0x7747,
-	0x799e, 0x79df, 0x7a26, 0x7a3a, 0x773b, 0x773b, 0x775d, 0x7747,
-	0x773b, 0x773b, 0x7824, 0x7ab3, 0x7ace, 0x773b, 0x775d, 0x773b,
-	0x773b, 0x773b, 0x773b, 0x781a, 0x7ace, 0x773b, 0x773b, 0x773b,
-	0x773b, 0x773b, 0x773b, 0x773b, 0x773b, 0x773b, 0x7771, 0x773b,
-	0x773b, 0x773b, 0x773b, 0x773b, 0x773b, 0x773b, 0x773b, 0x773b,
-	0x7bed, 0x773b, 0x773b, 0x773b, 0x773b, 0x773b, 0x7785, 0x773b,
-	0x773b, 0x773b, 0x773b, 0x773b, 0x773b, 0x2079, 0x0040, 0x7004,
-	0x9086, 0x0003, 0x1198, 0x782c, 0x080c, 0x7be6, 0xd0a4, 0x0170,
+	0x1800, 0x200c, 0x9186, 0x0003, 0x1168, 0x7004, 0x0002, 0x770a,
+	0x76e4, 0x770a, 0x7708, 0x770a, 0x770a, 0x770a, 0x770a, 0x770a,
+	0x080c, 0x7775, 0x782c, 0xd09c, 0x090c, 0x7c5d, 0x0005, 0x9082,
+	0x005a, 0x1218, 0x2100, 0x003b, 0x0c10, 0x080c, 0x77ab, 0x0c90,
+	0x00e3, 0x08e8, 0x0005, 0x77ab, 0x77ab, 0x77ab, 0x77ab, 0x77ab,
+	0x77ab, 0x77ab, 0x77ab, 0x77cd, 0x77ab, 0x77ab, 0x77ab, 0x77ab,
+	0x77ab, 0x77ab, 0x77ab, 0x77ab, 0x77ab, 0x77ab, 0x77ab, 0x77ab,
+	0x77ab, 0x77ab, 0x77ab, 0x77ab, 0x77ab, 0x77ab, 0x77ab, 0x77b7,
+	0x77ab, 0x79c4, 0x77ab, 0x77ab, 0x77ab, 0x77cd, 0x77ab, 0x77b7,
+	0x7a05, 0x7a46, 0x7a8d, 0x7aa1, 0x77ab, 0x77ab, 0x77cd, 0x77b7,
+	0x77ab, 0x77ab, 0x7894, 0x7b4c, 0x7b67, 0x77ab, 0x77cd, 0x77ab,
+	0x77ab, 0x77ab, 0x77ab, 0x788a, 0x7b67, 0x77ab, 0x77ab, 0x77ab,
+	0x77ab, 0x77ab, 0x77ab, 0x77ab, 0x77ab, 0x77ab, 0x77e1, 0x77ab,
+	0x77ab, 0x77ab, 0x77ab, 0x77ab, 0x77ab, 0x77ab, 0x77ab, 0x77ab,
+	0x7c8d, 0x77ab, 0x77ab, 0x77ab, 0x77ab, 0x77ab, 0x77f5, 0x77ab,
+	0x77ab, 0x77ab, 0x77ab, 0x77ab, 0x77ab, 0x2079, 0x0040, 0x7004,
+	0x9086, 0x0003, 0x1198, 0x782c, 0x080c, 0x7c86, 0xd0a4, 0x0170,
 	0x7824, 0x2048, 0x9006, 0xa802, 0xa806, 0xa868, 0x9084, 0x00ff,
-	0x908a, 0x001a, 0x1210, 0x002b, 0x0c50, 0x00e9, 0x080c, 0x7bbd,
-	0x0005, 0x773b, 0x7747, 0x7949, 0x773b, 0x7747, 0x773b, 0x7747,
-	0x7747, 0x773b, 0x7747, 0x7949, 0x7747, 0x7747, 0x7747, 0x7747,
-	0x7747, 0x773b, 0x7747, 0x7949, 0x773b, 0x773b, 0x7747, 0x773b,
-	0x773b, 0x773b, 0x7747, 0x00e6, 0x2071, 0x18fb, 0x2009, 0x0400,
+	0x908a, 0x001a, 0x1210, 0x002b, 0x0c50, 0x00e9, 0x080c, 0x7c5d,
+	0x0005, 0x77ab, 0x77b7, 0x79b0, 0x77ab, 0x77b7, 0x77ab, 0x77b7,
+	0x77b7, 0x77ab, 0x77b7, 0x79b0, 0x77b7, 0x77b7, 0x77b7, 0x77b7,
+	0x77b7, 0x77ab, 0x77b7, 0x79b0, 0x77ab, 0x77ab, 0x77b7, 0x77ab,
+	0x77ab, 0x77ab, 0x77b7, 0x00e6, 0x2071, 0x18fb, 0x2009, 0x0400,
 	0x0071, 0x00ee, 0x0005, 0x2009, 0x1000, 0x0049, 0x0005, 0x2009,
 	0x2000, 0x0029, 0x0005, 0x2009, 0x0800, 0x0009, 0x0005, 0x7007,
 	0x0001, 0xa86c, 0x9084, 0x00ff, 0x9105, 0xa86e, 0x0126, 0x2091,
-	0x8000, 0x080c, 0x6b1d, 0x012e, 0x0005, 0xa868, 0x8007, 0x9084,
-	0x00ff, 0x0d08, 0x8001, 0x1120, 0x7007, 0x0001, 0x0804, 0x78f9,
-	0x7007, 0x0003, 0x7012, 0x2900, 0x7016, 0x701a, 0x704b, 0x78f9,
+	0x8000, 0x080c, 0x6c02, 0x012e, 0x0005, 0xa868, 0x8007, 0x9084,
+	0x00ff, 0x0d08, 0x8001, 0x1120, 0x7007, 0x0001, 0x0804, 0x7969,
+	0x7007, 0x0003, 0x7012, 0x2900, 0x7016, 0x701a, 0x704b, 0x7969,
 	0x0005, 0xa868, 0x8007, 0x9084, 0x00ff, 0x0968, 0x8001, 0x1120,
-	0x7007, 0x0001, 0x0804, 0x791d, 0x7007, 0x0003, 0x7012, 0x2900,
-	0x7016, 0x701a, 0x704b, 0x791d, 0x0005, 0xa868, 0x8007, 0x9084,
-	0x00ff, 0x9086, 0x0001, 0x1904, 0x7743, 0x7007, 0x0001, 0x2009,
-	0x1833, 0x210c, 0x81ff, 0x1904, 0x77f1, 0x2001, 0x180d, 0x2004,
-	0xd08c, 0x0904, 0x77dc, 0xa9a0, 0x9186, 0x00ff, 0x05e8, 0xa998,
+	0x7007, 0x0001, 0x0804, 0x7984, 0x7007, 0x0003, 0x7012, 0x2900,
+	0x7016, 0x701a, 0x704b, 0x7984, 0x0005, 0xa868, 0x8007, 0x9084,
+	0x00ff, 0x9086, 0x0001, 0x1904, 0x77b3, 0x7007, 0x0001, 0x2009,
+	0x1833, 0x210c, 0x81ff, 0x1904, 0x7861, 0x2001, 0x180d, 0x2004,
+	0xd08c, 0x0904, 0x784c, 0xa9a0, 0x9186, 0x00ff, 0x05e8, 0xa998,
 	0x9186, 0x006f, 0x0188, 0x9186, 0x0074, 0x15b0, 0x0026, 0x2011,
-	0x0010, 0x080c, 0x6781, 0x002e, 0x0578, 0x0016, 0xa99c, 0x080c,
-	0x67cb, 0x001e, 0x1548, 0x0400, 0x080c, 0x72e5, 0x0140, 0xa89b,
+	0x0010, 0x080c, 0x68a8, 0x002e, 0x0578, 0x0016, 0xa99c, 0x080c,
+	0x68f2, 0x001e, 0x1548, 0x0400, 0x080c, 0x7351, 0x0140, 0xa89b,
 	0x4005, 0xa89f, 0x0016, 0x2001, 0x0030, 0x900e, 0x0438, 0x0026,
-	0x2011, 0x8008, 0x080c, 0x6781, 0x002e, 0x01b0, 0x0016, 0x0026,
-	0x0036, 0xa99c, 0xaaa4, 0xaba0, 0x918d, 0x8000, 0x080c, 0x67cb,
+	0x2011, 0x8008, 0x080c, 0x68a8, 0x002e, 0x01b0, 0x0016, 0x0026,
+	0x0036, 0xa99c, 0xaaa4, 0xaba0, 0x918d, 0x8000, 0x080c, 0x68f2,
 	0x003e, 0x002e, 0x001e, 0x1140, 0xa89b, 0x4005, 0xa89f, 0x4009,
 	0x2001, 0x0030, 0x900e, 0x0050, 0xa86c, 0x9084, 0x00ff, 0xa86e,
-	0xa887, 0x0000, 0x080c, 0x611b, 0x1108, 0x0005, 0x0126, 0x2091,
-	0x8000, 0xa86b, 0x0139, 0xa87e, 0xa986, 0x080c, 0x6b1d, 0x012e,
-	0x0ca0, 0xa998, 0x9186, 0x0071, 0x0904, 0x7795, 0x9186, 0x0064,
-	0x0904, 0x7795, 0x9186, 0x007c, 0x0904, 0x7795, 0x9186, 0x0028,
-	0x0904, 0x7795, 0x9186, 0x0038, 0x0904, 0x7795, 0x9186, 0x0078,
-	0x0904, 0x7795, 0x9186, 0x005f, 0x0904, 0x7795, 0x9186, 0x0056,
-	0x0904, 0x7795, 0xa89b, 0x4005, 0xa89f, 0x0001, 0x2001, 0x0030,
+	0xa887, 0x0000, 0x080c, 0x61eb, 0x1108, 0x0005, 0x0126, 0x2091,
+	0x8000, 0xa86b, 0x0139, 0xa87e, 0xa986, 0x080c, 0x6c02, 0x012e,
+	0x0ca0, 0xa998, 0x9186, 0x0071, 0x0904, 0x7805, 0x9186, 0x0064,
+	0x0904, 0x7805, 0x9186, 0x007c, 0x0904, 0x7805, 0x9186, 0x0028,
+	0x0904, 0x7805, 0x9186, 0x0038, 0x0904, 0x7805, 0x9186, 0x0078,
+	0x0904, 0x7805, 0x9186, 0x005f, 0x0904, 0x7805, 0x9186, 0x0056,
+	0x0904, 0x7805, 0xa89b, 0x4005, 0xa89f, 0x0001, 0x2001, 0x0030,
 	0x900e, 0x0860, 0xa880, 0x9084, 0x00c0, 0x9086, 0x00c0, 0x1120,
-	0x7007, 0x0001, 0x0804, 0x7ae5, 0x2900, 0x7016, 0x701a, 0x20a9,
+	0x7007, 0x0001, 0x0804, 0x7b7e, 0x2900, 0x7016, 0x701a, 0x20a9,
 	0x0004, 0xa860, 0x20e0, 0xa85c, 0x9080, 0x0031, 0x2098, 0x7050,
 	0x2040, 0xa060, 0x20e8, 0xa05c, 0x9080, 0x0024, 0x20a0, 0x4003,
-	0xa88c, 0x7012, 0x9082, 0x0401, 0x1a04, 0x774b, 0xaab8, 0x928a,
-	0x0002, 0x1a04, 0x774b, 0x82ff, 0x1138, 0xa8bc, 0xa9c0, 0x9105,
-	0x0118, 0x2001, 0x78b7, 0x0018, 0x9280, 0x78ad, 0x2005, 0x7056,
-	0x7010, 0x9015, 0x0904, 0x7898, 0x080c, 0x101a, 0x1118, 0x7007,
+	0xa88c, 0x7012, 0x9082, 0x0401, 0x1a04, 0x77bb, 0xaab8, 0x928a,
+	0x0002, 0x1a04, 0x77bb, 0x82ff, 0x1138, 0xa8bc, 0xa9c0, 0x9105,
+	0x0118, 0x2001, 0x7927, 0x0018, 0x9280, 0x791d, 0x2005, 0x7056,
+	0x7010, 0x9015, 0x0904, 0x7908, 0x080c, 0x1026, 0x1118, 0x7007,
 	0x0004, 0x0005, 0x2900, 0x7022, 0x7054, 0x2060, 0xe000, 0xa86a,
 	0x7050, 0x2040, 0xa95c, 0xe004, 0x9100, 0xa07a, 0xa860, 0xa076,
 	0xe008, 0x920a, 0x1210, 0x900e, 0x2200, 0x7112, 0xe20c, 0x8003,
 	0x800b, 0x9296, 0x0004, 0x0108, 0x9108, 0xa17e, 0x810b, 0xa182,
-	0x080c, 0x10eb, 0xa070, 0x908e, 0x0100, 0x0170, 0x9086, 0x0200,
-	0x0118, 0x7007, 0x0007, 0x0005, 0x7020, 0x2048, 0x080c, 0x1033,
-	0x7014, 0x2048, 0x0804, 0x774b, 0x7020, 0x2048, 0x7018, 0xa802,
-	0xa807, 0x0000, 0x2908, 0x2048, 0xa906, 0x711a, 0x0804, 0x7850,
+	0x080c, 0x10f7, 0xa070, 0x908e, 0x0100, 0x0170, 0x9086, 0x0200,
+	0x0118, 0x7007, 0x0007, 0x0005, 0x7020, 0x2048, 0x080c, 0x103f,
+	0x7014, 0x2048, 0x0804, 0x77bb, 0x7020, 0x2048, 0x7018, 0xa802,
+	0xa807, 0x0000, 0x2908, 0x2048, 0xa906, 0x711a, 0x0804, 0x78c0,
 	0x7014, 0x2048, 0x7007, 0x0001, 0xa8b8, 0x9005, 0x1128, 0xa8bc,
 	0xa9c0, 0x9105, 0x0108, 0x00b9, 0xa868, 0x9084, 0x00ff, 0x9086,
-	0x001e, 0x0904, 0x7ae5, 0x0804, 0x78f9, 0x78af, 0x78b3, 0x0002,
+	0x001e, 0x0904, 0x7b7e, 0x0804, 0x7969, 0x791f, 0x7923, 0x0002,
 	0x001e, 0x0007, 0x0004, 0x000a, 0x001c, 0x0005, 0x0006, 0x000a,
 	0x001e, 0x0005, 0x0004, 0x0076, 0x0066, 0xafbc, 0xaec0, 0xa804,
 	0x2050, 0xb0c4, 0xb0e6, 0xb0c0, 0xb0e2, 0xb0bc, 0xb0d6, 0xb0b8,
@@ -3651,1370 +3665,1504 @@
 	0xb09e, 0xb090, 0xb09a, 0xb08c, 0xb08e, 0xb088, 0xb08a, 0xb696,
 	0xb792, 0xb084, 0xb086, 0xb080, 0xb082, 0xb07c, 0xb076, 0xb078,
 	0xb072, 0xb67e, 0xb77a, 0xb004, 0x9055, 0x1958, 0x006e, 0x007e,
-	0x0005, 0x2009, 0x1833, 0x210c, 0x81ff, 0x11c0, 0xa887, 0x0000,
-	0x080c, 0x55a7, 0xd09c, 0x1118, 0xa880, 0xc0bd, 0xa882, 0x080c,
-	0x5f70, 0x1108, 0x0005, 0x080c, 0x6d45, 0x0126, 0x2091, 0x8000,
-	0x080c, 0xbc3f, 0x080c, 0x6b1d, 0x012e, 0x0ca0, 0x080c, 0xbef1,
-	0x1d28, 0x2001, 0x0028, 0x900e, 0x0c70, 0x0419, 0x11d8, 0xa88c,
-	0x9005, 0x01e0, 0xa887, 0x0000, 0xa880, 0xd0a4, 0x0120, 0x080c,
-	0x607d, 0x1138, 0x0005, 0x9006, 0xa87e, 0x080c, 0x5ff5, 0x1108,
-	0x0005, 0x0126, 0x2091, 0x8000, 0xa87e, 0xa986, 0x080c, 0x6b1d,
-	0x012e, 0x0cb0, 0x2001, 0x0028, 0x900e, 0x0c98, 0x2001, 0x0000,
-	0x0c80, 0x00c6, 0x2061, 0x1800, 0x60cc, 0x9005, 0x0100, 0x00ce,
-	0x0005, 0x7018, 0xa802, 0x2908, 0x2048, 0xa906, 0x711a, 0x7010,
-	0x8001, 0x7012, 0x0118, 0x7007, 0x0003, 0x0030, 0x7014, 0x2048,
-	0x7007, 0x0001, 0x7048, 0x080f, 0x0005, 0x00b6, 0x7007, 0x0001,
-	0xa978, 0xa87c, 0x9084, 0x00ff, 0x9096, 0x0004, 0x0540, 0x20a9,
-	0x0001, 0x9096, 0x0001, 0x0190, 0x900e, 0x20a9, 0x0800, 0x9096,
-	0x0002, 0x0160, 0x9005, 0x11d8, 0xa978, 0x080c, 0x6411, 0x11b8,
-	0x0066, 0xae84, 0x080c, 0x6511, 0x006e, 0x0088, 0x0046, 0x2011,
-	0x180c, 0x2224, 0xc484, 0x2412, 0x004e, 0x00c6, 0x080c, 0x6411,
-	0x1110, 0x080c, 0x6630, 0x8108, 0x1f04, 0x7986, 0x00ce, 0xa880,
-	0xd084, 0x1120, 0x080c, 0x1033, 0x00be, 0x0005, 0x0126, 0x2091,
-	0x8000, 0x080c, 0x6b1d, 0x012e, 0x00be, 0x0005, 0x0126, 0x2091,
-	0x8000, 0x7007, 0x0001, 0x080c, 0x6742, 0x0580, 0x2061, 0x1a4f,
-	0x6100, 0xd184, 0x0178, 0xa88c, 0x9084, 0x00ff, 0x1550, 0x6000,
-	0xd084, 0x0520, 0x6004, 0x9005, 0x1538, 0x6003, 0x0000, 0x600b,
-	0x0000, 0x00c8, 0x2011, 0x0001, 0xa894, 0x9005, 0x1110, 0x2001,
-	0x001e, 0x8000, 0x6016, 0xa88c, 0x9084, 0x00ff, 0x0178, 0x6006,
-	0xa88c, 0x8007, 0x9084, 0x00ff, 0x0148, 0x600a, 0xa88c, 0x8000,
-	0x1108, 0xc28d, 0x6202, 0x012e, 0x0804, 0x7ba7, 0x012e, 0x0804,
-	0x7ba1, 0x012e, 0x0804, 0x7b9b, 0x012e, 0x0804, 0x7b9e, 0x0126,
-	0x2091, 0x8000, 0x7007, 0x0001, 0x080c, 0x6742, 0x05e0, 0x2061,
-	0x1a4f, 0x6000, 0xd084, 0x05b8, 0x6204, 0x6308, 0xd08c, 0x1530,
-	0xac7c, 0x9484, 0x0003, 0x0170, 0xa98c, 0x918c, 0x00ff, 0x8001,
-	0x1120, 0x2100, 0x9210, 0x0620, 0x0028, 0x8001, 0x1508, 0x2100,
-	0x9212, 0x02f0, 0x9484, 0x000c, 0x0188, 0xa98c, 0x810f, 0x918c,
-	0x00ff, 0x9082, 0x0004, 0x1120, 0x2100, 0x9318, 0x0288, 0x0030,
-	0x9082, 0x0004, 0x1168, 0x2100, 0x931a, 0x0250, 0xa894, 0x9005,
-	0x0110, 0x8000, 0x6016, 0x6206, 0x630a, 0x012e, 0x0804, 0x7ba7,
-	0x012e, 0x0804, 0x7ba4, 0x012e, 0x0804, 0x7ba1, 0x0126, 0x2091,
-	0x8000, 0x7007, 0x0001, 0x2061, 0x1a4f, 0x6300, 0xd38c, 0x1120,
-	0x6308, 0x8318, 0x0220, 0x630a, 0x012e, 0x0804, 0x7bb5, 0x012e,
-	0x0804, 0x7ba4, 0x00b6, 0x0126, 0x00c6, 0x2091, 0x8000, 0x7007,
-	0x0001, 0xa880, 0xd0ac, 0x0148, 0x00c6, 0x2061, 0x1a4f, 0x6000,
-	0x9084, 0xfcff, 0x6002, 0x00ce, 0x0440, 0xa88c, 0x9005, 0x05d8,
-	0xa890, 0x9065, 0x0598, 0x2001, 0x1833, 0x2004, 0x9005, 0x0118,
-	0x080c, 0x9f42, 0x0068, 0x6017, 0xf400, 0x602b, 0x0000, 0xa980,
-	0xd1a4, 0x0110, 0xa984, 0x612a, 0x2009, 0x0041, 0x080c, 0x9f88,
-	0xa98c, 0x918c, 0xff00, 0x9186, 0x2000, 0x1138, 0x0026, 0x900e,
-	0x2011, 0xfdff, 0x080c, 0x8532, 0x002e, 0xa880, 0xd0c4, 0x0148,
-	0x2061, 0x1a4f, 0x6000, 0xd08c, 0x1120, 0x6008, 0x8000, 0x0208,
-	0x600a, 0x00ce, 0x012e, 0x00be, 0x0804, 0x7ba7, 0x00ce, 0x012e,
-	0x00be, 0x0804, 0x7ba1, 0xa988, 0x9186, 0x002e, 0x0d30, 0x9186,
-	0x002d, 0x0d18, 0x9186, 0x002a, 0x1130, 0x2001, 0x180c, 0x200c,
-	0xc194, 0x2102, 0x08d0, 0x9186, 0x0020, 0x0158, 0x9186, 0x0029,
-	0x1d28, 0xa978, 0x080c, 0x6411, 0x1980, 0xb800, 0xc0e4, 0xb802,
-	0x0860, 0xa890, 0x9065, 0x09d0, 0x6007, 0x0024, 0x2001, 0x1963,
-	0x2004, 0x601a, 0x0810, 0x2061, 0x1a4f, 0x6000, 0xd084, 0x0190,
-	0xd08c, 0x1904, 0x7bb5, 0x0126, 0x2091, 0x8000, 0x6204, 0x8210,
-	0x0220, 0x6206, 0x012e, 0x0804, 0x7bb5, 0x012e, 0xa887, 0x0016,
-	0x0804, 0x7bae, 0xa887, 0x0007, 0x0804, 0x7bae, 0xa868, 0x8007,
-	0x9084, 0x00ff, 0x0130, 0x8001, 0x1138, 0x7007, 0x0001, 0x0069,
-	0x0005, 0x080c, 0x7743, 0x0040, 0x7007, 0x0003, 0x7012, 0x2900,
-	0x7016, 0x701a, 0x704b, 0x7ae5, 0x0005, 0x00b6, 0x00e6, 0x0126,
-	0x2091, 0x8000, 0x903e, 0x2061, 0x1800, 0x61cc, 0x81ff, 0x1904,
-	0x7b63, 0x6130, 0xd194, 0x1904, 0x7b8d, 0xa87c, 0x2070, 0x9e82,
-	0x1cc8, 0x0a04, 0x7b57, 0x6064, 0x9e02, 0x1a04, 0x7b57, 0x7120,
-	0x9186, 0x0006, 0x1904, 0x7b49, 0x7010, 0x905d, 0x0904, 0x7b63,
-	0xb800, 0xd0e4, 0x1904, 0x7b87, 0x2061, 0x1a4f, 0x6100, 0x9184,
-	0x0301, 0x9086, 0x0001, 0x1580, 0xa887, 0x0000, 0xa803, 0x0000,
-	0x2908, 0x7014, 0x9005, 0x1198, 0x7116, 0xa880, 0xd0f4, 0x1904,
-	0x7b90, 0x080c, 0x55a7, 0xd09c, 0x1118, 0xa880, 0xc0cc, 0xa882,
-	0x2e60, 0x080c, 0x848e, 0x012e, 0x00ee, 0x00be, 0x0005, 0x2048,
-	0xa800, 0x9005, 0x1de0, 0xa902, 0x2148, 0xa880, 0xd0f4, 0x1904,
-	0x7b90, 0x012e, 0x00ee, 0x00be, 0x0005, 0x012e, 0x00ee, 0xa887,
-	0x0006, 0x00be, 0x0804, 0x7bae, 0xd184, 0x0db8, 0xd1c4, 0x1190,
-	0x00a0, 0xa978, 0x080c, 0x6411, 0x15d0, 0xb800, 0xd0e4, 0x15b8,
-	0x7120, 0x9186, 0x0007, 0x1118, 0xa887, 0x0002, 0x0490, 0xa887,
-	0x0008, 0x0478, 0xa887, 0x000e, 0x0460, 0xa887, 0x0017, 0x0448,
-	0xa887, 0x0035, 0x0430, 0x080c, 0x55ab, 0xd0fc, 0x01e8, 0xa87c,
-	0x2070, 0x9e82, 0x1cc8, 0x02c0, 0x6064, 0x9e02, 0x12a8, 0x7120,
-	0x9186, 0x0006, 0x1188, 0x7010, 0x905d, 0x0170, 0xb800, 0xd0bc,
-	0x0158, 0x2039, 0x0001, 0x7000, 0x9086, 0x0007, 0x1904, 0x7af1,
-	0x7003, 0x0002, 0x0804, 0x7af1, 0xa887, 0x0028, 0x0010, 0xa887,
-	0x0029, 0x012e, 0x00ee, 0x00be, 0x0408, 0xa887, 0x002a, 0x0cc8,
-	0x2e60, 0x2019, 0x0002, 0x601b, 0x0014, 0x080c, 0xccc8, 0x012e,
+	0x0005, 0x2009, 0x1833, 0x210c, 0x81ff, 0x1178, 0x080c, 0x602e,
+	0x1108, 0x0005, 0x080c, 0x6e4b, 0x0126, 0x2091, 0x8000, 0x080c,
+	0xc4ba, 0x080c, 0x6c02, 0x012e, 0x0ca0, 0x080c, 0xc8c7, 0x1d70,
+	0x2001, 0x0028, 0x900e, 0x0c70, 0x0419, 0x11d8, 0xa88c, 0x9005,
+	0x01e0, 0xa887, 0x0000, 0xa880, 0xd0a4, 0x0120, 0x080c, 0x614d,
+	0x1138, 0x0005, 0x9006, 0xa87e, 0x080c, 0x60c5, 0x1108, 0x0005,
+	0x0126, 0x2091, 0x8000, 0xa87e, 0xa986, 0x080c, 0x6c02, 0x012e,
+	0x0cb0, 0x2001, 0x0028, 0x900e, 0x0c98, 0x2001, 0x0000, 0x0c80,
+	0x00c6, 0x2061, 0x1800, 0x60cc, 0x9005, 0x0100, 0x00ce, 0x0005,
+	0x7018, 0xa802, 0x2908, 0x2048, 0xa906, 0x711a, 0x7010, 0x8001,
+	0x7012, 0x0118, 0x7007, 0x0003, 0x0030, 0x7014, 0x2048, 0x7007,
+	0x0001, 0x7048, 0x080f, 0x0005, 0x00b6, 0x7007, 0x0001, 0xa978,
+	0xa87c, 0x9084, 0x00ff, 0x9096, 0x0004, 0x0540, 0x20a9, 0x0001,
+	0x9096, 0x0001, 0x0190, 0x900e, 0x20a9, 0x0800, 0x9096, 0x0002,
+	0x0160, 0x9005, 0x11d8, 0xa978, 0x080c, 0x64fc, 0x11b8, 0x0066,
+	0xae84, 0x080c, 0x6619, 0x006e, 0x0088, 0x0046, 0x2011, 0x180c,
+	0x2224, 0xc484, 0x2412, 0x004e, 0x00c6, 0x080c, 0x64fc, 0x1110,
+	0x080c, 0x6738, 0x8108, 0x1f04, 0x79ed, 0x00ce, 0xa880, 0xd084,
+	0x1120, 0x080c, 0x103f, 0x00be, 0x0005, 0x0126, 0x2091, 0x8000,
+	0x080c, 0x6c02, 0x012e, 0x00be, 0x0005, 0x0126, 0x2091, 0x8000,
+	0x7007, 0x0001, 0x080c, 0x6869, 0x0580, 0x2061, 0x1a4f, 0x6100,
+	0xd184, 0x0178, 0xa88c, 0x9084, 0x00ff, 0x1550, 0x6000, 0xd084,
+	0x0520, 0x6004, 0x9005, 0x1538, 0x6003, 0x0000, 0x600b, 0x0000,
+	0x00c8, 0x2011, 0x0001, 0xa894, 0x9005, 0x1110, 0x2001, 0x001e,
+	0x8000, 0x6016, 0xa88c, 0x9084, 0x00ff, 0x0178, 0x6006, 0xa88c,
+	0x8007, 0x9084, 0x00ff, 0x0148, 0x600a, 0xa88c, 0x8000, 0x1108,
+	0xc28d, 0x6202, 0x012e, 0x0804, 0x7c47, 0x012e, 0x0804, 0x7c41,
+	0x012e, 0x0804, 0x7c3b, 0x012e, 0x0804, 0x7c3e, 0x0126, 0x2091,
+	0x8000, 0x7007, 0x0001, 0x080c, 0x6869, 0x05e0, 0x2061, 0x1a4f,
+	0x6000, 0xd084, 0x05b8, 0x6204, 0x6308, 0xd08c, 0x1530, 0xac7c,
+	0x9484, 0x0003, 0x0170, 0xa98c, 0x918c, 0x00ff, 0x8001, 0x1120,
+	0x2100, 0x9210, 0x0620, 0x0028, 0x8001, 0x1508, 0x2100, 0x9212,
+	0x02f0, 0x9484, 0x000c, 0x0188, 0xa98c, 0x810f, 0x918c, 0x00ff,
+	0x9082, 0x0004, 0x1120, 0x2100, 0x9318, 0x0288, 0x0030, 0x9082,
+	0x0004, 0x1168, 0x2100, 0x931a, 0x0250, 0xa894, 0x9005, 0x0110,
+	0x8000, 0x6016, 0x6206, 0x630a, 0x012e, 0x0804, 0x7c47, 0x012e,
+	0x0804, 0x7c44, 0x012e, 0x0804, 0x7c41, 0x0126, 0x2091, 0x8000,
+	0x7007, 0x0001, 0x2061, 0x1a4f, 0x6300, 0xd38c, 0x1120, 0x6308,
+	0x8318, 0x0220, 0x630a, 0x012e, 0x0804, 0x7c55, 0x012e, 0x0804,
+	0x7c44, 0x00b6, 0x0126, 0x00c6, 0x2091, 0x8000, 0x7007, 0x0001,
+	0xa880, 0xd0ac, 0x0148, 0x00c6, 0x2061, 0x1a4f, 0x6000, 0x9084,
+	0xfcff, 0x6002, 0x00ce, 0x0440, 0xa88c, 0x9005, 0x05d8, 0xa890,
+	0x9065, 0x0598, 0x2001, 0x1833, 0x2004, 0x9005, 0x0118, 0x080c,
+	0xa3cf, 0x0068, 0x6017, 0xf400, 0x605b, 0x0000, 0xa980, 0xd1a4,
+	0x0110, 0xa984, 0x615a, 0x2009, 0x0041, 0x080c, 0xa419, 0xa98c,
+	0x918c, 0xff00, 0x9186, 0x2000, 0x1138, 0x0026, 0x900e, 0x2011,
+	0xfdff, 0x080c, 0x8703, 0x002e, 0xa880, 0xd0c4, 0x0148, 0x2061,
+	0x1a4f, 0x6000, 0xd08c, 0x1120, 0x6008, 0x8000, 0x0208, 0x600a,
+	0x00ce, 0x012e, 0x00be, 0x0804, 0x7c47, 0x00ce, 0x012e, 0x00be,
+	0x0804, 0x7c41, 0xa988, 0x9186, 0x002e, 0x0d30, 0x9186, 0x002d,
+	0x0d18, 0x9186, 0x0045, 0x0510, 0x9186, 0x002a, 0x1130, 0x2001,
+	0x180c, 0x200c, 0xc194, 0x2102, 0x08b8, 0x9186, 0x0020, 0x0158,
+	0x9186, 0x0029, 0x1d10, 0xa978, 0x080c, 0x64fc, 0x1968, 0xb800,
+	0xc0e4, 0xb802, 0x0848, 0xa890, 0x9065, 0x09b8, 0x6007, 0x0024,
+	0x2001, 0x1962, 0x2004, 0x601a, 0x0804, 0x7adc, 0xa890, 0x9065,
+	0x0960, 0x00e6, 0xa894, 0x9075, 0x2001, 0x1833, 0x2004, 0x9005,
+	0x0150, 0x080c, 0xa3cf, 0x8eff, 0x0118, 0x2e60, 0x080c, 0xa3cf,
+	0x00ee, 0x0804, 0x7adc, 0x6024, 0xc0dc, 0xc0d5, 0x6026, 0x2e60,
+	0x6007, 0x003a, 0xa8a4, 0x9005, 0x0130, 0x6007, 0x003b, 0xa8a8,
+	0x602e, 0xa8ac, 0x6016, 0x6003, 0x0001, 0x080c, 0x88a1, 0x080c,
+	0x8e38, 0x00ee, 0x0804, 0x7adc, 0x2061, 0x1a4f, 0x6000, 0xd084,
+	0x0190, 0xd08c, 0x1904, 0x7c55, 0x0126, 0x2091, 0x8000, 0x6204,
+	0x8210, 0x0220, 0x6206, 0x012e, 0x0804, 0x7c55, 0x012e, 0xa887,
+	0x0016, 0x0804, 0x7c4e, 0xa887, 0x0007, 0x0804, 0x7c4e, 0xa868,
+	0x8007, 0x9084, 0x00ff, 0x0130, 0x8001, 0x1138, 0x7007, 0x0001,
+	0x0069, 0x0005, 0x080c, 0x77b3, 0x0040, 0x7007, 0x0003, 0x7012,
+	0x2900, 0x7016, 0x701a, 0x704b, 0x7b7e, 0x0005, 0x00b6, 0x00e6,
+	0x0126, 0x2091, 0x8000, 0x903e, 0x2061, 0x1800, 0x61cc, 0x81ff,
+	0x1904, 0x7c00, 0x6130, 0xd194, 0x1904, 0x7c2a, 0xa87c, 0x2070,
+	0x9e82, 0x1cd0, 0x0a04, 0x7bf4, 0x6064, 0x9e02, 0x1a04, 0x7bf4,
+	0x7120, 0x9186, 0x0006, 0x1904, 0x7be6, 0x7010, 0x905d, 0x0904,
+	0x7c00, 0xb800, 0xd0e4, 0x1904, 0x7c24, 0x2061, 0x1a4f, 0x6100,
+	0x9184, 0x0301, 0x9086, 0x0001, 0x15a0, 0x7024, 0xd0dc, 0x1904,
+	0x7c2d, 0xa887, 0x0000, 0xa803, 0x0000, 0x2908, 0x7014, 0x9005,
+	0x1198, 0x7116, 0xa880, 0xd0f4, 0x1904, 0x7c30, 0x080c, 0x5664,
+	0xd09c, 0x1118, 0xa880, 0xc0cc, 0xa882, 0x2e60, 0x080c, 0x8623,
+	0x012e, 0x00ee, 0x00be, 0x0005, 0x2048, 0xa800, 0x9005, 0x1de0,
+	0xa902, 0x2148, 0xa880, 0xd0f4, 0x1904, 0x7c30, 0x012e, 0x00ee,
+	0x00be, 0x0005, 0x012e, 0x00ee, 0xa887, 0x0006, 0x00be, 0x0804,
+	0x7c4e, 0xd184, 0x0db8, 0xd1c4, 0x1190, 0x00a0, 0xa978, 0x080c,
+	0x64fc, 0x15d0, 0xb800, 0xd0e4, 0x15b8, 0x7120, 0x9186, 0x0007,
+	0x1118, 0xa887, 0x0002, 0x0490, 0xa887, 0x0008, 0x0478, 0xa887,
+	0x000e, 0x0460, 0xa887, 0x0017, 0x0448, 0xa887, 0x0035, 0x0430,
+	0x080c, 0x5668, 0xd0fc, 0x01e8, 0xa87c, 0x2070, 0x9e82, 0x1cd0,
+	0x02c0, 0x6064, 0x9e02, 0x12a8, 0x7120, 0x9186, 0x0006, 0x1188,
+	0x7010, 0x905d, 0x0170, 0xb800, 0xd0bc, 0x0158, 0x2039, 0x0001,
+	0x7000, 0x9086, 0x0007, 0x1904, 0x7b8a, 0x7003, 0x0002, 0x0804,
+	0x7b8a, 0xa887, 0x0028, 0x0010, 0xa887, 0x0029, 0x012e, 0x00ee,
+	0x00be, 0x0420, 0xa887, 0x002a, 0x0cc8, 0xa887, 0x0045, 0x0cb0,
+	0x2e60, 0x2019, 0x0002, 0x601b, 0x0014, 0x080c, 0xd86f, 0x012e,
 	0x00ee, 0x00be, 0x0005, 0x2009, 0x003e, 0x0058, 0x2009, 0x0004,
 	0x0040, 0x2009, 0x0006, 0x0028, 0x2009, 0x0016, 0x0010, 0x2009,
 	0x0001, 0xa888, 0x9084, 0xff00, 0x9105, 0xa88a, 0x0126, 0x2091,
-	0x8000, 0x080c, 0x6b1d, 0x012e, 0x0005, 0x080c, 0x1033, 0x0005,
-	0x00d6, 0x080c, 0x8485, 0x00de, 0x0005, 0x00d6, 0x00e6, 0x0126,
+	0x8000, 0x080c, 0x6c02, 0x012e, 0x0005, 0x080c, 0x103f, 0x0005,
+	0x00d6, 0x080c, 0x861a, 0x00de, 0x0005, 0x00d6, 0x00e6, 0x0126,
 	0x2091, 0x8000, 0x2071, 0x0040, 0x702c, 0xd084, 0x01d8, 0x908c,
-	0x0780, 0x190c, 0x7c49, 0xd09c, 0x11a8, 0x2071, 0x1800, 0x70bc,
+	0x0780, 0x190c, 0x7ce9, 0xd09c, 0x11a8, 0x2071, 0x1800, 0x70bc,
 	0x90ea, 0x0040, 0x0278, 0x8001, 0x70be, 0x702c, 0x2048, 0xa800,
 	0x702e, 0x9006, 0xa802, 0xa806, 0x2071, 0x0040, 0x2900, 0x7022,
 	0x702c, 0x0c28, 0x012e, 0x00ee, 0x00de, 0x0005, 0x0006, 0x9084,
-	0x0780, 0x190c, 0x7c49, 0x000e, 0x0005, 0x00d6, 0x00c6, 0x0036,
+	0x0780, 0x190c, 0x7ce9, 0x000e, 0x0005, 0x00d6, 0x00c6, 0x0036,
 	0x0026, 0x0016, 0x00b6, 0x7007, 0x0001, 0xaa78, 0x9282, 0x0004,
-	0x1a04, 0x7c3a, 0xa980, 0x9188, 0x1000, 0x2104, 0x905d, 0xb804,
+	0x1a04, 0x7cda, 0xa980, 0x9188, 0x1000, 0x2104, 0x905d, 0xb804,
 	0xd284, 0x0140, 0x05e8, 0x8007, 0x9084, 0x00ff, 0x9084, 0x0006,
-	0x1108, 0x04b0, 0x2b10, 0x080c, 0x9ec2, 0x1118, 0x080c, 0x9f5b,
-	0x05a8, 0x6212, 0xa878, 0x0002, 0x7c18, 0x7c1d, 0x7c20, 0x7c26,
-	0x2019, 0x0002, 0x080c, 0xd0d7, 0x0060, 0x080c, 0xd077, 0x0048,
-	0x2019, 0x0002, 0xa984, 0x080c, 0xd08f, 0x0018, 0xa984, 0x080c,
-	0xd077, 0x080c, 0x9f18, 0xa88b, 0x0000, 0x0126, 0x2091, 0x8000,
-	0x080c, 0x6b1d, 0x012e, 0x00be, 0x001e, 0x002e, 0x003e, 0x00ce,
+	0x1108, 0x04b0, 0x2b10, 0x080c, 0xa347, 0x1118, 0x080c, 0xa3ec,
+	0x05a8, 0x6212, 0xa878, 0x0002, 0x7cb8, 0x7cbd, 0x7cc0, 0x7cc6,
+	0x2019, 0x0002, 0x080c, 0xdc90, 0x0060, 0x080c, 0xdc27, 0x0048,
+	0x2019, 0x0002, 0xa984, 0x080c, 0xdc42, 0x0018, 0xa984, 0x080c,
+	0xdc27, 0x080c, 0xa39d, 0xa88b, 0x0000, 0x0126, 0x2091, 0x8000,
+	0x080c, 0x6c02, 0x012e, 0x00be, 0x001e, 0x002e, 0x003e, 0x00ce,
 	0x00de, 0x0005, 0xa88b, 0x0006, 0x0c80, 0xa88b, 0x0002, 0x0c68,
 	0xa88b, 0x0005, 0x0c50, 0xa88b, 0x0004, 0x0c38, 0xa88b, 0x0007,
-	0x0c20, 0x2091, 0x8000, 0x0e04, 0x7c4b, 0x0006, 0x0016, 0x2001,
-	0x8003, 0x0006, 0x0804, 0x0dcd, 0x2001, 0x1833, 0x2004, 0x9005,
+	0x0c20, 0x2091, 0x8000, 0x0e04, 0x7ceb, 0x0006, 0x0016, 0x2001,
+	0x8003, 0x0006, 0x0804, 0x0dcc, 0x2001, 0x1833, 0x2004, 0x9005,
 	0x0005, 0x0005, 0x00f6, 0x2079, 0x0300, 0x2001, 0x0200, 0x200c,
 	0xc1e5, 0xc1dc, 0x2102, 0x2009, 0x0218, 0x210c, 0xd1ec, 0x1120,
-	0x080c, 0x14d2, 0x00fe, 0x0005, 0x2001, 0x020d, 0x2003, 0x0020,
-	0x781f, 0x0300, 0x00fe, 0x0005, 0x68bc, 0x90aa, 0x0005, 0x0a04,
-	0x823c, 0x7d44, 0x7c40, 0x9484, 0x0fff, 0x688e, 0x9584, 0x00f6,
-	0x1510, 0x9484, 0x7000, 0x0140, 0x908a, 0x2000, 0x1260, 0x9584,
-	0x0700, 0x8007, 0x0804, 0x7cd0, 0x7000, 0x9084, 0xff00, 0x9086,
-	0x8100, 0x0da8, 0x00b0, 0x9484, 0x0fff, 0x1130, 0x7000, 0x9084,
-	0xff00, 0x9086, 0x8100, 0x11c0, 0x080c, 0xd314, 0x080c, 0x8171,
-	0x7817, 0x0140, 0x00a8, 0x9584, 0x0076, 0x1118, 0x080c, 0x81cf,
-	0x19c0, 0xd5a4, 0x0148, 0x0046, 0x0056, 0x080c, 0x7d22, 0x080c,
-	0x2217, 0x005e, 0x004e, 0x0020, 0x080c, 0xd314, 0x7817, 0x0140,
-	0x080c, 0x72e5, 0x0168, 0x2001, 0x0111, 0x2004, 0xd08c, 0x0140,
-	0x688f, 0x0000, 0x2001, 0x0110, 0x2003, 0x0008, 0x2003, 0x0000,
-	0x04d1, 0x2001, 0x19cd, 0x2004, 0x9005, 0x090c, 0x8c37, 0x0005,
-	0x0002, 0x7ce2, 0x7f8f, 0x7cd9, 0x7cd9, 0x7cd9, 0x7cd9, 0x7cd9,
-	0x7cd9, 0x7817, 0x0140, 0x2001, 0x19cd, 0x2004, 0x9005, 0x090c,
-	0x8c37, 0x0005, 0x7000, 0x908c, 0xff00, 0x9194, 0xf000, 0x810f,
-	0x9286, 0x2000, 0x1150, 0x6800, 0x9086, 0x0001, 0x1118, 0x080c,
-	0x5607, 0x0040, 0x080c, 0x7d42, 0x0028, 0x9286, 0x8000, 0x1110,
-	0x080c, 0x80bc, 0x7817, 0x0140, 0x2001, 0x19cd, 0x2004, 0x9005,
-	0x090c, 0x8c37, 0x0005, 0x2001, 0x1810, 0x2004, 0xd08c, 0x0178,
-	0x2001, 0x1800, 0x2004, 0x9086, 0x0003, 0x1148, 0x0026, 0x0036,
-	0x2011, 0x8048, 0x2518, 0x080c, 0x4abd, 0x003e, 0x002e, 0x0005,
-	0x0036, 0x0046, 0x0056, 0x00f6, 0x2079, 0x0200, 0x2019, 0xfffe,
-	0x7c30, 0x0050, 0x0036, 0x0046, 0x0056, 0x00f6, 0x2079, 0x0200,
-	0x7d44, 0x7c40, 0x2019, 0xffff, 0x2001, 0x1810, 0x2004, 0xd08c,
-	0x0160, 0x2001, 0x1800, 0x2004, 0x9086, 0x0003, 0x1130, 0x0026,
-	0x2011, 0x8048, 0x080c, 0x4abd, 0x002e, 0x00fe, 0x005e, 0x004e,
-	0x003e, 0x0005, 0x00b6, 0x00c6, 0x7010, 0x9084, 0xff00, 0x8007,
-	0x9096, 0x0001, 0x0120, 0x9096, 0x0023, 0x1904, 0x7ef7, 0x688c,
-	0x9082, 0x0004, 0x0a04, 0x7ef7, 0x9186, 0x0023, 0x15e8, 0x080c,
-	0x815f, 0x0904, 0x7ef7, 0x6120, 0x9186, 0x0001, 0x0150, 0x9186,
-	0x0004, 0x0138, 0x9186, 0x0008, 0x0120, 0x9186, 0x000a, 0x1904,
-	0x7ef7, 0x7124, 0x610a, 0x7030, 0x908e, 0x0200, 0x1130, 0x2009,
-	0x0015, 0x080c, 0x9f88, 0x0804, 0x7ef7, 0x908e, 0x0214, 0x0118,
-	0x908e, 0x0210, 0x1130, 0x2009, 0x0015, 0x080c, 0x9f88, 0x0804,
-	0x7ef7, 0x908e, 0x0100, 0x1904, 0x7ef7, 0x7034, 0x9005, 0x1904,
-	0x7ef7, 0x688c, 0x9082, 0x0008, 0x0a04, 0x7ef7, 0x2009, 0x0016,
-	0x080c, 0x9f88, 0x0804, 0x7ef7, 0x9186, 0x0022, 0x1904, 0x7ef7,
-	0x7030, 0x908e, 0x0300, 0x1580, 0x68d8, 0xd0a4, 0x0528, 0xc0b5,
-	0x68da, 0x7100, 0x918c, 0x00ff, 0x697a, 0x7004, 0x687e, 0x00f6,
-	0x2079, 0x0100, 0x79e6, 0x78ea, 0x0006, 0x9084, 0x00ff, 0x0016,
-	0x2008, 0x080c, 0x26e8, 0x7932, 0x7936, 0x001e, 0x000e, 0x00fe,
-	0x080c, 0x269f, 0x695a, 0x703c, 0x00e6, 0x2071, 0x0140, 0x7086,
-	0x2071, 0x1800, 0x70b2, 0x00ee, 0x7034, 0x9005, 0x1904, 0x7ef7,
-	0x2009, 0x0017, 0x0804, 0x7ea7, 0x908e, 0x0400, 0x1190, 0x7034,
-	0x9005, 0x1904, 0x7ef7, 0x080c, 0x72e5, 0x0120, 0x2009, 0x001d,
-	0x0804, 0x7ea7, 0x68d8, 0xc0a5, 0x68da, 0x2009, 0x0030, 0x0804,
-	0x7ea7, 0x908e, 0x0500, 0x1140, 0x7034, 0x9005, 0x1904, 0x7ef7,
-	0x2009, 0x0018, 0x0804, 0x7ea7, 0x908e, 0x2010, 0x1120, 0x2009,
-	0x0019, 0x0804, 0x7ea7, 0x908e, 0x2110, 0x1120, 0x2009, 0x001a,
-	0x0804, 0x7ea7, 0x908e, 0x5200, 0x1140, 0x7034, 0x9005, 0x1904,
-	0x7ef7, 0x2009, 0x001b, 0x0804, 0x7ea7, 0x908e, 0x5000, 0x1140,
-	0x7034, 0x9005, 0x1904, 0x7ef7, 0x2009, 0x001c, 0x0804, 0x7ea7,
-	0x908e, 0x1200, 0x1140, 0x7034, 0x9005, 0x1904, 0x7ef7, 0x2009,
-	0x0024, 0x0804, 0x7ea7, 0x908c, 0xff00, 0x918e, 0x2400, 0x1170,
-	0x2009, 0x002d, 0x2001, 0x1810, 0x2004, 0xd09c, 0x0904, 0x7ea7,
-	0x080c, 0xc52f, 0x1904, 0x7ef7, 0x0804, 0x7ea5, 0x908c, 0xff00,
-	0x918e, 0x5300, 0x1120, 0x2009, 0x002a, 0x0804, 0x7ea7, 0x908e,
-	0x0f00, 0x1120, 0x2009, 0x0020, 0x0804, 0x7ea7, 0x908e, 0x6104,
-	0x1588, 0x2029, 0x0205, 0x2011, 0x026d, 0x8208, 0x2204, 0x9092,
-	0x0401, 0x1a04, 0x7ef7, 0x9094, 0x0003, 0x1904, 0x7ef7, 0x6a8c,
-	0x9212, 0x0a04, 0x7ef7, 0x9082, 0x0004, 0x0904, 0x7ef7, 0x8004,
-	0x8004, 0x20a8, 0x2011, 0x8015, 0x211c, 0x8108, 0x2124, 0x080c,
-	0x4abd, 0x8108, 0x0f04, 0x7e6d, 0x9186, 0x0280, 0x1d98, 0x2504,
-	0x8000, 0x202a, 0x2009, 0x0260, 0x0c68, 0x202b, 0x0000, 0x2009,
-	0x0023, 0x04a8, 0x908e, 0x6000, 0x1118, 0x2009, 0x003f, 0x0478,
-	0x908e, 0x7800, 0x1118, 0x2009, 0x0045, 0x0448, 0x908e, 0x1000,
-	0x1118, 0x2009, 0x004e, 0x0418, 0x908e, 0x6300, 0x1118, 0x2009,
-	0x004a, 0x00e8, 0x908c, 0xff00, 0x918e, 0x5600, 0x1118, 0x2009,
-	0x004f, 0x00a8, 0x908c, 0xff00, 0x918e, 0x5700, 0x1118, 0x2009,
-	0x0050, 0x0068, 0x908e, 0x7d00, 0x1118, 0x2009, 0x0053, 0x0038,
-	0x2009, 0x001d, 0x6838, 0xd0d4, 0x0110, 0x2009, 0x004c, 0x0016,
-	0x2011, 0x0263, 0x2204, 0x8211, 0x220c, 0x080c, 0x269f, 0x1904,
-	0x7efa, 0x080c, 0x63c1, 0x1904, 0x7efa, 0xbe12, 0xbd16, 0x001e,
-	0x0016, 0x080c, 0x72e5, 0x01c0, 0x68d8, 0xd08c, 0x1148, 0x7000,
-	0x9084, 0x00ff, 0x1188, 0x7004, 0x9084, 0xff00, 0x1168, 0x0040,
-	0x6878, 0x9606, 0x1148, 0x687c, 0x9506, 0x9084, 0xff00, 0x1120,
-	0x9584, 0x00ff, 0xb8ae, 0x0080, 0xb8ac, 0x9005, 0x1168, 0x9186,
-	0x0046, 0x1150, 0x6878, 0x9606, 0x1138, 0x687c, 0x9506, 0x9084,
-	0xff00, 0x1110, 0x001e, 0x0098, 0x080c, 0x9ec2, 0x01c8, 0x2b08,
-	0x6112, 0x6023, 0x0004, 0x7120, 0x610a, 0x001e, 0x9186, 0x004c,
-	0x1110, 0x6023, 0x000a, 0x0016, 0x001e, 0x080c, 0x9f88, 0x00ce,
-	0x00be, 0x0005, 0x001e, 0x0cd8, 0x9085, 0x0001, 0x001e, 0x0cb8,
-	0x2001, 0x180e, 0x2004, 0xd0ec, 0x0120, 0x2011, 0x8049, 0x080c,
-	0x4abd, 0x080c, 0x9f5b, 0x0d70, 0x2b08, 0x6112, 0x6023, 0x0004,
-	0x7120, 0x610a, 0x001e, 0x0016, 0x9186, 0x0017, 0x0118, 0x9186,
-	0x0030, 0x1128, 0x6007, 0x0009, 0x6017, 0x2900, 0x0020, 0x6007,
-	0x0051, 0x6017, 0x0000, 0x602f, 0x0009, 0x6003, 0x0001, 0x080c,
-	0x8718, 0x0880, 0x00b6, 0x00e6, 0x00d6, 0x2028, 0x2130, 0x9696,
-	0x00ff, 0x11b8, 0x9592, 0xfffc, 0x02a0, 0x9596, 0xfffd, 0x1120,
-	0x2009, 0x007f, 0x0804, 0x7f87, 0x9596, 0xfffe, 0x1120, 0x2009,
-	0x007e, 0x0804, 0x7f87, 0x9596, 0xfffc, 0x1118, 0x2009, 0x0080,
-	0x04f0, 0x2011, 0x0000, 0x2019, 0x1836, 0x231c, 0xd3ac, 0x0130,
-	0x9026, 0x20a9, 0x0800, 0x2071, 0x1000, 0x0030, 0x2021, 0x0081,
-	0x20a9, 0x077f, 0x2071, 0x1081, 0x2e1c, 0x93dd, 0x0000, 0x1140,
-	0x82ff, 0x11d0, 0x9496, 0x00ff, 0x01b8, 0x2410, 0xc2fd, 0x00a0,
-	0xbf10, 0x2600, 0x9706, 0xb814, 0x1120, 0x9546, 0x1110, 0x2408,
-	0x00b0, 0x9745, 0x1148, 0x94c6, 0x007e, 0x0130, 0x94c6, 0x007f,
-	0x0118, 0x94c6, 0x0080, 0x1d20, 0x8420, 0x8e70, 0x1f04, 0x7f5c,
-	0x82ff, 0x1118, 0x9085, 0x0001, 0x0018, 0xc2fc, 0x2208, 0x9006,
-	0x00de, 0x00ee, 0x00be, 0x0005, 0x9085, 0x0001, 0x0cc8, 0x2001,
+	0x080c, 0x14e7, 0x00fe, 0x0005, 0x2001, 0x020d, 0x2003, 0x0020,
+	0x781f, 0x0300, 0x00fe, 0x0005, 0x781c, 0xd08c, 0x0904, 0x7d6e,
+	0x68bc, 0x90aa, 0x0005, 0x0a04, 0x839e, 0x7d44, 0x7c40, 0x9484,
+	0x0fff, 0x688e, 0x9584, 0x00f6, 0x1510, 0x9484, 0x7000, 0x0140,
+	0x908a, 0x2000, 0x1260, 0x9584, 0x0700, 0x8007, 0x0804, 0x7d75,
+	0x7000, 0x9084, 0xff00, 0x9086, 0x8100, 0x0da8, 0x00b0, 0x9484,
+	0x0fff, 0x1130, 0x7000, 0x9084, 0xff00, 0x9086, 0x8100, 0x11c0,
+	0x080c, 0xe0a1, 0x080c, 0x82d3, 0x7817, 0x0140, 0x00a8, 0x9584,
+	0x0076, 0x1118, 0x080c, 0x8331, 0x19c0, 0xd5a4, 0x0148, 0x0046,
+	0x0056, 0x080c, 0x7dcd, 0x080c, 0x225f, 0x005e, 0x004e, 0x0020,
+	0x080c, 0xe0a1, 0x7817, 0x0140, 0x080c, 0x7351, 0x0168, 0x2001,
+	0x0111, 0x2004, 0xd08c, 0x0140, 0x688f, 0x0000, 0x2001, 0x0110,
+	0x2003, 0x0008, 0x2003, 0x0000, 0x080c, 0x7dae, 0x2001, 0x19cd,
+	0x2004, 0x9005, 0x090c, 0x8e38, 0x0005, 0x0002, 0x7d87, 0x80b7,
+	0x7d7e, 0x7d7e, 0x7d7e, 0x7d7e, 0x7d7e, 0x7d7e, 0x7817, 0x0140,
+	0x2001, 0x19cd, 0x2004, 0x9005, 0x090c, 0x8e38, 0x0005, 0x7000,
+	0x908c, 0xff00, 0x9194, 0xf000, 0x810f, 0x9286, 0x2000, 0x1150,
+	0x6800, 0x9086, 0x0001, 0x1118, 0x080c, 0x56c4, 0x0070, 0x080c,
+	0x7ded, 0x0058, 0x9286, 0x3000, 0x1118, 0x080c, 0x7fde, 0x0028,
+	0x9286, 0x8000, 0x1110, 0x080c, 0x81ec, 0x7817, 0x0140, 0x2001,
+	0x19cd, 0x2004, 0x9005, 0x090c, 0x8e38, 0x0005, 0x2001, 0x1810,
+	0x2004, 0xd08c, 0x0178, 0x2001, 0x1800, 0x2004, 0x9086, 0x0003,
+	0x1148, 0x0026, 0x0036, 0x2011, 0x8048, 0x2518, 0x080c, 0x4b6d,
+	0x003e, 0x002e, 0x0005, 0x0036, 0x0046, 0x0056, 0x00f6, 0x2079,
+	0x0200, 0x2019, 0xfffe, 0x7c30, 0x0050, 0x0036, 0x0046, 0x0056,
+	0x00f6, 0x2079, 0x0200, 0x7d44, 0x7c40, 0x2019, 0xffff, 0x2001,
+	0x1810, 0x2004, 0xd08c, 0x0160, 0x2001, 0x1800, 0x2004, 0x9086,
+	0x0003, 0x1130, 0x0026, 0x2011, 0x8048, 0x080c, 0x4b6d, 0x002e,
+	0x00fe, 0x005e, 0x004e, 0x003e, 0x0005, 0x00b6, 0x00c6, 0x7010,
+	0x9084, 0xff00, 0x8007, 0x9096, 0x0001, 0x0120, 0x9096, 0x0023,
+	0x1904, 0x7fab, 0x688c, 0x9082, 0x0004, 0x0a04, 0x7fab, 0x9186,
+	0x0023, 0x15e8, 0x080c, 0x8292, 0x0904, 0x7fab, 0x6120, 0x9186,
+	0x0001, 0x0150, 0x9186, 0x0004, 0x0138, 0x9186, 0x0008, 0x0120,
+	0x9186, 0x000a, 0x1904, 0x7fab, 0x7124, 0x610a, 0x7030, 0x908e,
+	0x0200, 0x1130, 0x2009, 0x0015, 0x080c, 0xa419, 0x0804, 0x7fab,
+	0x908e, 0x0214, 0x0118, 0x908e, 0x0210, 0x1130, 0x2009, 0x0015,
+	0x080c, 0xa419, 0x0804, 0x7fab, 0x908e, 0x0100, 0x1904, 0x7fab,
+	0x7034, 0x9005, 0x1904, 0x7fab, 0x688c, 0x9082, 0x0008, 0x0a04,
+	0x7fab, 0x2009, 0x0016, 0x080c, 0xa419, 0x0804, 0x7fab, 0x9186,
+	0x0022, 0x1904, 0x7fab, 0x7030, 0x908e, 0x0300, 0x1580, 0x68d8,
+	0xd0a4, 0x0528, 0xc0b5, 0x68da, 0x7100, 0x918c, 0x00ff, 0x697a,
+	0x7004, 0x687e, 0x00f6, 0x2079, 0x0100, 0x79e6, 0x78ea, 0x0006,
+	0x9084, 0x00ff, 0x0016, 0x2008, 0x080c, 0x2751, 0x7932, 0x7936,
+	0x001e, 0x000e, 0x00fe, 0x080c, 0x2708, 0x695a, 0x703c, 0x00e6,
+	0x2071, 0x0140, 0x7086, 0x2071, 0x1800, 0x70b2, 0x00ee, 0x7034,
+	0x9005, 0x1904, 0x7fab, 0x2009, 0x0017, 0x0804, 0x7f5b, 0x908e,
+	0x0400, 0x1190, 0x7034, 0x9005, 0x1904, 0x7fab, 0x080c, 0x7351,
+	0x0120, 0x2009, 0x001d, 0x0804, 0x7f5b, 0x68d8, 0xc0a5, 0x68da,
+	0x2009, 0x0030, 0x0804, 0x7f5b, 0x908e, 0x0500, 0x1140, 0x7034,
+	0x9005, 0x1904, 0x7fab, 0x2009, 0x0018, 0x0804, 0x7f5b, 0x908e,
+	0x2010, 0x1120, 0x2009, 0x0019, 0x0804, 0x7f5b, 0x908e, 0x2110,
+	0x1120, 0x2009, 0x001a, 0x0804, 0x7f5b, 0x908e, 0x5200, 0x1140,
+	0x7034, 0x9005, 0x1904, 0x7fab, 0x2009, 0x001b, 0x0804, 0x7f5b,
+	0x908e, 0x5000, 0x1140, 0x7034, 0x9005, 0x1904, 0x7fab, 0x2009,
+	0x001c, 0x0804, 0x7f5b, 0x908e, 0x1300, 0x1120, 0x2009, 0x0034,
+	0x0804, 0x7f5b, 0x908e, 0x1200, 0x1140, 0x7034, 0x9005, 0x1904,
+	0x7fab, 0x2009, 0x0024, 0x0804, 0x7f5b, 0x908c, 0xff00, 0x918e,
+	0x2400, 0x1170, 0x2009, 0x002d, 0x2001, 0x1810, 0x2004, 0xd09c,
+	0x0904, 0x7f5b, 0x080c, 0xd02f, 0x1904, 0x7fab, 0x0804, 0x7f59,
+	0x908c, 0xff00, 0x918e, 0x5300, 0x1120, 0x2009, 0x002a, 0x0804,
+	0x7f5b, 0x908e, 0x0f00, 0x1120, 0x2009, 0x0020, 0x0804, 0x7f5b,
+	0x908e, 0x6104, 0x1598, 0x2029, 0x0205, 0x2011, 0x026d, 0x8208,
+	0x2204, 0x9092, 0x0401, 0x1a04, 0x7fab, 0x9094, 0x0003, 0x1904,
+	0x7fab, 0x6a8c, 0x9212, 0x0a04, 0x7fab, 0x9082, 0x0004, 0x0904,
+	0x7fab, 0x8004, 0x8004, 0x20a8, 0x2011, 0x8015, 0x211c, 0x8108,
+	0x0046, 0x2124, 0x080c, 0x4b6d, 0x004e, 0x8108, 0x0f04, 0x7f21,
+	0x9186, 0x0280, 0x1d88, 0x2504, 0x8000, 0x202a, 0x2009, 0x0260,
+	0x0c58, 0x202b, 0x0000, 0x2009, 0x0023, 0x04a8, 0x908e, 0x6000,
+	0x1118, 0x2009, 0x003f, 0x0478, 0x908e, 0x7800, 0x1118, 0x2009,
+	0x0045, 0x0448, 0x908e, 0x1000, 0x1118, 0x2009, 0x004e, 0x0418,
+	0x908e, 0x6300, 0x1118, 0x2009, 0x004a, 0x00e8, 0x908c, 0xff00,
+	0x918e, 0x5600, 0x1118, 0x2009, 0x004f, 0x00a8, 0x908c, 0xff00,
+	0x918e, 0x5700, 0x1118, 0x2009, 0x0050, 0x0068, 0x908e, 0x7d00,
+	0x1118, 0x2009, 0x0053, 0x0038, 0x2009, 0x001d, 0x6838, 0xd0d4,
+	0x0110, 0x2009, 0x004c, 0x0016, 0x2011, 0x0263, 0x2204, 0x8211,
+	0x220c, 0x080c, 0x2708, 0x1904, 0x7fae, 0x080c, 0x6497, 0x1904,
+	0x7fae, 0xbe12, 0xbd16, 0x001e, 0x0016, 0x080c, 0x7351, 0x01c0,
+	0x68d8, 0xd08c, 0x1148, 0x7000, 0x9084, 0x00ff, 0x1188, 0x7004,
+	0x9084, 0xff00, 0x1168, 0x0040, 0x6878, 0x9606, 0x1148, 0x687c,
+	0x9506, 0x9084, 0xff00, 0x1120, 0x9584, 0x00ff, 0xb8b2, 0x0080,
+	0xb8b0, 0x9005, 0x1168, 0x9186, 0x0046, 0x1150, 0x6878, 0x9606,
+	0x1138, 0x687c, 0x9506, 0x9084, 0xff00, 0x1110, 0x001e, 0x0098,
+	0x080c, 0xa347, 0x01c8, 0x2b08, 0x6112, 0x6023, 0x0004, 0x7120,
+	0x610a, 0x001e, 0x9186, 0x004c, 0x1110, 0x6023, 0x000a, 0x0016,
+	0x001e, 0x080c, 0xa419, 0x00ce, 0x00be, 0x0005, 0x001e, 0x0cd8,
+	0x9085, 0x0001, 0x001e, 0x0cb8, 0x2001, 0x180e, 0x2004, 0xd0ec,
+	0x0120, 0x2011, 0x8049, 0x080c, 0x4b6d, 0x080c, 0xa3ec, 0x0d70,
+	0x2b08, 0x6112, 0x6023, 0x0004, 0x7120, 0x610a, 0x001e, 0x0016,
+	0x9186, 0x0017, 0x0118, 0x9186, 0x0030, 0x1128, 0x6007, 0x0009,
+	0x6017, 0x2900, 0x0020, 0x6007, 0x0051, 0x6017, 0x0000, 0x602f,
+	0x0009, 0x6003, 0x0001, 0x080c, 0x88e9, 0x0880, 0x080c, 0x83bd,
+	0x1158, 0x080c, 0x3226, 0x1140, 0x7010, 0x9084, 0xff00, 0x8007,
+	0x908e, 0x0008, 0x1108, 0x0009, 0x0005, 0x00b6, 0x00c6, 0x0046,
+	0x7000, 0x908c, 0xff00, 0x810f, 0x9186, 0x0033, 0x1538, 0x080c,
+	0x8292, 0x0904, 0x804c, 0x7124, 0x610a, 0x688c, 0x9082, 0x0004,
+	0x0a04, 0x804c, 0x7030, 0x908e, 0x0200, 0x1148, 0x7034, 0x9005,
+	0x1904, 0x804c, 0x2009, 0x0015, 0x080c, 0xa419, 0x04e8, 0x908e,
+	0x0100, 0x15d0, 0x7034, 0x9005, 0x15b8, 0x688c, 0x9082, 0x0008,
+	0x0698, 0x2009, 0x0016, 0x080c, 0xa419, 0x0470, 0x9186, 0x0032,
+	0x1558, 0x7030, 0x908e, 0x1400, 0x1538, 0x688c, 0x9082, 0x0010,
+	0x0618, 0x2009, 0x0038, 0x0016, 0x2011, 0x0263, 0x2204, 0x8211,
+	0x220c, 0x080c, 0x2708, 0x11b8, 0x080c, 0x6497, 0x11a0, 0xbe12,
+	0xbd16, 0x080c, 0xa347, 0x0178, 0x2b08, 0x6112, 0x080c, 0xc640,
+	0x6023, 0x0004, 0x7120, 0x610a, 0x001e, 0x080c, 0xa419, 0x080c,
+	0x8e38, 0x0010, 0x00ce, 0x001e, 0x004e, 0x00ce, 0x00be, 0x0005,
+	0x00b6, 0x0046, 0x00e6, 0x00d6, 0x2028, 0x2130, 0x9696, 0x00ff,
+	0x11b8, 0x9592, 0xfffc, 0x02a0, 0x9596, 0xfffd, 0x1120, 0x2009,
+	0x007f, 0x0804, 0x80ae, 0x9596, 0xfffe, 0x1120, 0x2009, 0x007e,
+	0x0804, 0x80ae, 0x9596, 0xfffc, 0x1118, 0x2009, 0x0080, 0x04f0,
+	0x2011, 0x0000, 0x2019, 0x1836, 0x231c, 0xd3ac, 0x0130, 0x9026,
+	0x20a9, 0x0800, 0x2071, 0x1000, 0x0030, 0x2021, 0x0081, 0x20a9,
+	0x077f, 0x2071, 0x1081, 0x2e1c, 0x93dd, 0x0000, 0x1140, 0x82ff,
+	0x11d0, 0x9496, 0x00ff, 0x01b8, 0x2410, 0xc2fd, 0x00a0, 0xbf10,
+	0x2600, 0x9706, 0xb814, 0x1120, 0x9546, 0x1110, 0x2408, 0x00b0,
+	0x9745, 0x1148, 0x94c6, 0x007e, 0x0130, 0x94c6, 0x007f, 0x0118,
+	0x94c6, 0x0080, 0x1d20, 0x8420, 0x8e70, 0x1f04, 0x8083, 0x82ff,
+	0x1118, 0x9085, 0x0001, 0x0018, 0xc2fc, 0x2208, 0x9006, 0x00de,
+	0x00ee, 0x004e, 0x00be, 0x0005, 0x9085, 0x0001, 0x0cc0, 0x2001,
 	0x1836, 0x200c, 0x9184, 0x0080, 0x0110, 0xd18c, 0x0138, 0x7000,
 	0x908c, 0xff00, 0x810f, 0x9184, 0x000f, 0x004a, 0x7817, 0x0140,
-	0x2001, 0x19cd, 0x2004, 0x9005, 0x090c, 0x8c37, 0x0005, 0x7fb7,
-	0x7fb7, 0x7fb7, 0x7fb7, 0x7fb7, 0x7fc0, 0x7ff3, 0x8081, 0x7fb7,
-	0x7fb7, 0x7fb7, 0x7fb7, 0x7fb7, 0x7fb7, 0x7fb7, 0x7fb7, 0x7817,
-	0x0140, 0x2001, 0x19cd, 0x2004, 0x9005, 0x090c, 0x8c37, 0x0005,
-	0x00b6, 0x7110, 0xd1bc, 0x0510, 0x7120, 0x2160, 0x9c8c, 0x0003,
-	0x11e8, 0x9c8a, 0x1cc8, 0x02d0, 0x6864, 0x9c02, 0x12b8, 0x7008,
+	0x2001, 0x19cd, 0x2004, 0x9005, 0x090c, 0x8e38, 0x0005, 0x80df,
+	0x80df, 0x80df, 0x82a4, 0x80df, 0x80e8, 0x811b, 0x81af, 0x80df,
+	0x80df, 0x80df, 0x80df, 0x80df, 0x80df, 0x80df, 0x80df, 0x7817,
+	0x0140, 0x2001, 0x19cd, 0x2004, 0x9005, 0x090c, 0x8e38, 0x0005,
+	0x00b6, 0x7110, 0xd1bc, 0x0510, 0x7120, 0x2160, 0x9c8c, 0x0007,
+	0x11e8, 0x9c8a, 0x1cd0, 0x02d0, 0x6864, 0x9c02, 0x12b8, 0x7008,
 	0x9084, 0x00ff, 0x6110, 0x2158, 0xb910, 0x9106, 0x1178, 0x700c,
 	0xb914, 0x9106, 0x1158, 0x9484, 0x0fff, 0x9082, 0x000c, 0x0280,
-	0x7124, 0x610a, 0x2009, 0x0046, 0x080c, 0x9f88, 0x7817, 0x0140,
-	0x2001, 0x19cd, 0x2004, 0x9005, 0x090c, 0x8c37, 0x00be, 0x0005,
-	0x080c, 0x826a, 0x0c98, 0x00b6, 0x00c6, 0x7110, 0xd1bc, 0x1904,
-	0x8054, 0x7108, 0x700c, 0x2028, 0x918c, 0x00ff, 0x2130, 0x9094,
-	0xff00, 0x15b8, 0x81ff, 0x15a8, 0x9080, 0x31cc, 0x200d, 0x918c,
-	0xff00, 0x810f, 0x2001, 0x0080, 0x9106, 0x0904, 0x8054, 0x9484,
-	0x0fff, 0x9082, 0x0020, 0x0a04, 0x805f, 0x080c, 0x63c1, 0x15e0,
-	0xbe12, 0xbd16, 0xb800, 0xd0ec, 0x15b8, 0xba04, 0x9294, 0xff00,
-	0x9286, 0x0600, 0x1180, 0x080c, 0x9ec2, 0x05e0, 0x2b08, 0x6112,
-	0x6023, 0x0006, 0x7120, 0x610a, 0x7130, 0x6126, 0x2009, 0x0044,
-	0x080c, 0xc7a6, 0x0408, 0x080c, 0x6746, 0x1138, 0xb807, 0x0606,
-	0x0c50, 0x190c, 0x7f2a, 0x11c0, 0x08c0, 0x080c, 0x9ec2, 0x2b08,
-	0x0198, 0x6112, 0x6023, 0x0004, 0x7120, 0x610a, 0x9286, 0x0400,
-	0x1118, 0x6007, 0x0005, 0x0010, 0x6007, 0x0001, 0x6003, 0x0001,
-	0x080c, 0x8718, 0x080c, 0x8c37, 0x7817, 0x0140, 0x2001, 0x19cd,
-	0x2004, 0x9005, 0x090c, 0x8c37, 0x00ce, 0x00be, 0x0005, 0x080c,
-	0x826a, 0x0c90, 0x2001, 0x180e, 0x2004, 0xd0ec, 0x0120, 0x2011,
-	0x8049, 0x080c, 0x4abd, 0x080c, 0x9f5b, 0x0d30, 0x2b08, 0x6112,
-	0x6023, 0x0006, 0x7120, 0x610a, 0x7130, 0x6126, 0x6017, 0xf300,
-	0x6003, 0x0001, 0x6007, 0x0041, 0x080c, 0x86d0, 0x080c, 0x8c37,
-	0x0898, 0x00b6, 0x7110, 0xd1bc, 0x0500, 0x7020, 0x2060, 0x9c84,
-	0x0003, 0x11d8, 0x9c82, 0x1cc8, 0x02c0, 0x6864, 0x9c02, 0x12a8,
-	0x7008, 0x9084, 0x00ff, 0x6110, 0x2158, 0xb910, 0x9106, 0x1168,
-	0x700c, 0xb914, 0x9106, 0x1148, 0x9484, 0x0fff, 0x9082, 0x000c,
-	0x0270, 0x2009, 0x0045, 0x080c, 0x9f88, 0x7817, 0x0140, 0x2001,
-	0x19cd, 0x2004, 0x9005, 0x090c, 0x8c37, 0x00be, 0x0005, 0x080c,
-	0x826a, 0x0c98, 0x6120, 0x9186, 0x0002, 0x0128, 0x9186, 0x0005,
-	0x0110, 0x9085, 0x0001, 0x0005, 0x080c, 0x825b, 0x1180, 0x080c,
-	0x318a, 0x1168, 0x7010, 0x9084, 0xff00, 0x8007, 0x9086, 0x0000,
+	0x7124, 0x610a, 0x2009, 0x0046, 0x080c, 0xa419, 0x7817, 0x0140,
+	0x2001, 0x19cd, 0x2004, 0x9005, 0x090c, 0x8e38, 0x00be, 0x0005,
+	0x080c, 0x83cc, 0x0c98, 0x00b6, 0x00c6, 0x7110, 0xd1bc, 0x1904,
+	0x8182, 0x7108, 0x700c, 0x2028, 0x918c, 0x00ff, 0x2130, 0x9094,
+	0xff00, 0x15e8, 0x81ff, 0x15d8, 0x9080, 0x3268, 0x200d, 0x918c,
+	0xff00, 0x810f, 0x2001, 0x0080, 0x9106, 0x0904, 0x8182, 0x9484,
+	0x0fff, 0x9082, 0x0020, 0x0a04, 0x818d, 0x080c, 0x6497, 0x1904,
+	0x8182, 0xbe12, 0xbd16, 0xb800, 0xd0ec, 0x15e0, 0xba04, 0x9294,
+	0xff00, 0x9286, 0x0600, 0x11a8, 0x080c, 0xa347, 0x0904, 0x8190,
+	0x2b08, 0x7028, 0x6046, 0x702c, 0x604a, 0x6112, 0x6023, 0x0006,
+	0x7120, 0x610a, 0x7130, 0x6156, 0x2009, 0x0044, 0x080c, 0xd2ad,
+	0x0408, 0x080c, 0x686d, 0x1138, 0xb807, 0x0606, 0x0c28, 0x190c,
+	0x8050, 0x11c0, 0x0890, 0x080c, 0xa347, 0x2b08, 0x0198, 0x6112,
+	0x6023, 0x0004, 0x7120, 0x610a, 0x9286, 0x0400, 0x1118, 0x6007,
+	0x0005, 0x0010, 0x6007, 0x0001, 0x6003, 0x0001, 0x080c, 0x88e9,
+	0x080c, 0x8e38, 0x7817, 0x0140, 0x2001, 0x19cd, 0x2004, 0x9005,
+	0x090c, 0x8e38, 0x00ce, 0x00be, 0x0005, 0x080c, 0x83cc, 0x0c90,
+	0x2001, 0x180e, 0x2004, 0xd0ec, 0x0120, 0x2011, 0x8049, 0x080c,
+	0x4b6d, 0x080c, 0xa3ec, 0x0d30, 0x2b08, 0x6112, 0x6023, 0x0006,
+	0x7120, 0x610a, 0x7130, 0x6156, 0x6017, 0xf300, 0x6003, 0x0001,
+	0x6007, 0x0041, 0x080c, 0x88a1, 0x080c, 0x8e38, 0x0898, 0x00b6,
+	0x7110, 0xd1bc, 0x0510, 0x7020, 0x2060, 0x9c84, 0x0007, 0x11e8,
+	0x9c82, 0x1cd0, 0x02d0, 0x6864, 0x9c02, 0x12b8, 0x7008, 0x9084,
+	0x00ff, 0x6110, 0x2158, 0xb910, 0x9106, 0x1178, 0x700c, 0xb914,
+	0x9106, 0x1158, 0x9484, 0x0fff, 0x9082, 0x000c, 0x0280, 0x7124,
+	0x610a, 0x2009, 0x0045, 0x080c, 0xa419, 0x7817, 0x0140, 0x2001,
+	0x19cd, 0x2004, 0x9005, 0x090c, 0x8e38, 0x00be, 0x0005, 0x080c,
+	0x83cc, 0x0c98, 0x6120, 0x9186, 0x0002, 0x0128, 0x9186, 0x0005,
+	0x0110, 0x9085, 0x0001, 0x0005, 0x080c, 0x83bd, 0x1180, 0x080c,
+	0x3226, 0x1168, 0x7010, 0x9084, 0xff00, 0x8007, 0x9086, 0x0000,
 	0x1130, 0x9184, 0x000f, 0x908a, 0x0006, 0x1208, 0x000b, 0x0005,
-	0x80d6, 0x80d7, 0x80d6, 0x80d6, 0x8139, 0x814c, 0x0005, 0x00b6,
-	0x700c, 0x7108, 0x080c, 0x269f, 0x1904, 0x8137, 0x080c, 0x63c1,
-	0x1904, 0x8137, 0xbe12, 0xbd16, 0x7110, 0xd1bc, 0x0528, 0x702c,
-	0xd084, 0x1904, 0x8137, 0x080c, 0x6746, 0x0148, 0x9086, 0x0004,
-	0x0130, 0x080c, 0x674e, 0x0118, 0x9086, 0x0004, 0x1588, 0x00c6,
-	0x080c, 0x815f, 0x00ce, 0x05d8, 0x080c, 0x9ec2, 0x2b08, 0x05b8,
-	0x6112, 0x080c, 0xbc97, 0x6023, 0x0002, 0x7120, 0x610a, 0x2009,
-	0x0088, 0x080c, 0x9f88, 0x0458, 0x080c, 0x6746, 0x0148, 0x9086,
-	0x0004, 0x0130, 0x080c, 0x674e, 0x0118, 0x9086, 0x0004, 0x1180,
-	0x080c, 0x9ec2, 0x2b08, 0x01d8, 0x6112, 0x080c, 0xbc97, 0x6023,
-	0x0005, 0x7120, 0x610a, 0x2009, 0x0088, 0x080c, 0x9f88, 0x0078,
-	0x080c, 0x9ec2, 0x2b08, 0x0158, 0x6112, 0x080c, 0xbc97, 0x6023,
-	0x0004, 0x7120, 0x610a, 0x2009, 0x0001, 0x080c, 0x9f88, 0x00be,
-	0x0005, 0x688c, 0x9082, 0x000c, 0x0270, 0x7110, 0xd1bc, 0x0158,
-	0x00f1, 0x0148, 0x080c, 0x80b2, 0x1130, 0x7124, 0x610a, 0x2009,
-	0x0089, 0x080c, 0x9f88, 0x0005, 0x688c, 0x9082, 0x0004, 0x0270,
-	0x7110, 0xd1bc, 0x0158, 0x0059, 0x0148, 0x080c, 0x80b2, 0x1130,
-	0x7124, 0x610a, 0x2009, 0x008a, 0x080c, 0x9f88, 0x0005, 0x7020,
-	0x2060, 0x9c84, 0x0003, 0x1158, 0x9c82, 0x1cc8, 0x0240, 0x2001,
-	0x1819, 0x2004, 0x9c02, 0x1218, 0x9085, 0x0001, 0x0005, 0x9006,
-	0x0ce8, 0x2031, 0x0105, 0x0069, 0x0005, 0x2031, 0x0206, 0x0049,
-	0x0005, 0x2031, 0x0207, 0x0029, 0x0005, 0x2031, 0x0213, 0x0009,
-	0x0005, 0x00c6, 0x0096, 0x00f6, 0x7000, 0x9084, 0xf000, 0x9086,
-	0xc000, 0x05d0, 0x080c, 0x9ec2, 0x05b8, 0x0066, 0x00c6, 0x0046,
-	0x2011, 0x0263, 0x2204, 0x8211, 0x220c, 0x080c, 0x269f, 0x15a0,
-	0x080c, 0x63c1, 0x1588, 0xbe12, 0xbd16, 0x2b00, 0x004e, 0x00ce,
-	0x6012, 0x080c, 0xbc97, 0x080c, 0x1001, 0x0510, 0x2900, 0x602a,
-	0x9006, 0xa802, 0xa86a, 0xac6e, 0xa85c, 0x90f8, 0x001c, 0x20a9,
-	0x000e, 0xa860, 0x20e8, 0x20e1, 0x0000, 0x2fa0, 0x2e98, 0x4003,
-	0x006e, 0x6616, 0x6007, 0x003e, 0x6023, 0x0001, 0x6003, 0x0001,
-	0x080c, 0x8718, 0x080c, 0x8c37, 0x00fe, 0x009e, 0x00ce, 0x0005,
-	0x080c, 0x9f18, 0x006e, 0x0cc0, 0x004e, 0x00ce, 0x0cc8, 0x00c6,
-	0x7000, 0x908c, 0xff00, 0x9184, 0xf000, 0x810f, 0x9086, 0x2000,
-	0x1904, 0x8226, 0x9186, 0x0022, 0x15f0, 0x2001, 0x0111, 0x2004,
-	0x9005, 0x1904, 0x8228, 0x7030, 0x908e, 0x0400, 0x0904, 0x8228,
-	0x908e, 0x6000, 0x05e8, 0x908e, 0x5400, 0x05d0, 0x908e, 0x0300,
-	0x11d8, 0x2009, 0x1836, 0x210c, 0xd18c, 0x1590, 0xd1a4, 0x1580,
-	0x080c, 0x6704, 0x0588, 0x68ac, 0x9084, 0x00ff, 0x7100, 0x918c,
-	0x00ff, 0x9106, 0x1518, 0x687c, 0x69ac, 0x918c, 0xff00, 0x9105,
-	0x7104, 0x9106, 0x11d8, 0x00e0, 0x2009, 0x0103, 0x210c, 0xd1b4,
-	0x11a8, 0x908e, 0x5200, 0x09e8, 0x908e, 0x0500, 0x09d0, 0x908e,
-	0x5000, 0x09b8, 0x0058, 0x9186, 0x0023, 0x1140, 0x080c, 0x815f,
-	0x0128, 0x6004, 0x9086, 0x0002, 0x0118, 0x0000, 0x9006, 0x0010,
-	0x9085, 0x0001, 0x00ce, 0x0005, 0x7030, 0x908e, 0x0300, 0x0118,
-	0x908e, 0x5200, 0x1d98, 0x2001, 0x1836, 0x2004, 0x9084, 0x0009,
-	0x9086, 0x0008, 0x0d68, 0x0c50, 0x00f6, 0x2079, 0x0200, 0x7800,
-	0xc0e5, 0xc0cc, 0x7802, 0x00fe, 0x0005, 0x00f6, 0x2079, 0x1800,
-	0x7834, 0xd084, 0x1130, 0x2079, 0x0200, 0x7800, 0x9085, 0x1200,
-	0x7802, 0x00fe, 0x0005, 0x00e6, 0x2071, 0x1800, 0x7034, 0xc084,
-	0x7036, 0x00ee, 0x0005, 0x0016, 0x2001, 0x1836, 0x200c, 0x9184,
-	0x0080, 0x0118, 0xd18c, 0x0118, 0x9006, 0x001e, 0x0005, 0x9085,
-	0x0001, 0x0cd8, 0x0016, 0x2009, 0x185d, 0x2104, 0x8000, 0x0208,
-	0x200a, 0x001e, 0x0005, 0x2071, 0x19d7, 0x7003, 0x0003, 0x700f,
-	0x0361, 0x9006, 0x701a, 0x707a, 0x7012, 0x7017, 0x1cc8, 0x7007,
-	0x0000, 0x7026, 0x702b, 0x9639, 0x7032, 0x703a, 0x703f, 0x0064,
-	0x7037, 0x96a1, 0x7047, 0xffff, 0x704a, 0x704f, 0x5434, 0x7052,
-	0x7063, 0x843b, 0x080c, 0x101a, 0x090c, 0x0dc4, 0x2900, 0x7042,
-	0xa86b, 0x0003, 0xa873, 0x0100, 0xa8af, 0xdcb0, 0x0005, 0x2071,
-	0x19d7, 0x1d04, 0x834d, 0x2091, 0x6000, 0x700c, 0x8001, 0x700e,
-	0x1500, 0x2001, 0x1880, 0x2004, 0xd0c4, 0x0158, 0x3a00, 0xd08c,
-	0x1140, 0x20d1, 0x0000, 0x20d1, 0x0001, 0x20d1, 0x0000, 0x080c,
-	0x0dc4, 0x700f, 0x0361, 0x7007, 0x0001, 0x0126, 0x2091, 0x8000,
-	0x7048, 0x900d, 0x0148, 0x8109, 0x714a, 0x1130, 0x704c, 0x080f,
-	0x0018, 0x0126, 0x2091, 0x8000, 0x7024, 0x900d, 0x0188, 0x7020,
-	0x8001, 0x7022, 0x1168, 0x7023, 0x0009, 0x8109, 0x7126, 0x9186,
-	0x03e8, 0x1110, 0x7028, 0x080f, 0x81ff, 0x1110, 0x7028, 0x080f,
-	0x7030, 0x900d, 0x05a8, 0x702c, 0x8001, 0x702e, 0x1588, 0x0016,
-	0x2009, 0x0306, 0x210c, 0x9184, 0x0030, 0x01e8, 0x9184, 0x0048,
-	0x9086, 0x0008, 0x11c0, 0x7038, 0x9005, 0x01a8, 0x8001, 0x703a,
-	0x1190, 0x080c, 0x72e5, 0x0178, 0x00e6, 0x2071, 0x19c4, 0x080c,
-	0x971d, 0x00ee, 0x1140, 0x2009, 0x1a61, 0x2104, 0x8000, 0x0208,
-	0x200a, 0x001e, 0x0068, 0x001e, 0x702f, 0x0009, 0x8109, 0x7132,
-	0x0128, 0x9184, 0x007f, 0x090c, 0x97ec, 0x0010, 0x7034, 0x080f,
-	0x7044, 0x9005, 0x0118, 0x0310, 0x8001, 0x7046, 0x7054, 0x900d,
-	0x0168, 0x7050, 0x8001, 0x7052, 0x1148, 0x7053, 0x0009, 0x8109,
-	0x7156, 0x1120, 0x7158, 0x7156, 0x7060, 0x080f, 0x7018, 0x900d,
-	0x01d8, 0x0016, 0x7078, 0x900d, 0x0158, 0x7074, 0x8001, 0x7076,
-	0x1138, 0x7077, 0x0009, 0x8109, 0x717a, 0x1110, 0x707c, 0x080f,
-	0x001e, 0x7008, 0x8001, 0x700a, 0x1138, 0x700b, 0x0009, 0x8109,
-	0x711a, 0x1110, 0x701c, 0x080f, 0x012e, 0x7004, 0x0002, 0x8375,
-	0x8376, 0x83dc, 0x00e6, 0x2071, 0x19d7, 0x7018, 0x9005, 0x1120,
-	0x711a, 0x721e, 0x700b, 0x0009, 0x00ee, 0x0005, 0x00e6, 0x0006,
-	0x2071, 0x19d7, 0x701c, 0x9206, 0x1120, 0x701a, 0x701e, 0x707a,
-	0x707e, 0x000e, 0x00ee, 0x0005, 0x00e6, 0x2071, 0x19d7, 0xb888,
-	0x9102, 0x0208, 0xb98a, 0x00ee, 0x0005, 0x0005, 0x00b6, 0x7110,
-	0x0126, 0x2091, 0x8000, 0x080c, 0x6411, 0x1904, 0x83d1, 0xb888,
-	0x8001, 0x0230, 0xb88a, 0x1120, 0x0016, 0x080c, 0x8c37, 0x001e,
-	0x901e, 0xb84c, 0x904d, 0x0904, 0x83d1, 0xa864, 0x9005, 0x0118,
-	0x8001, 0xa866, 0x0128, 0x2918, 0xa800, 0x904d, 0x05d0, 0x0ca8,
-	0xa888, 0x90a2, 0x199a, 0x0270, 0x9082, 0x1999, 0xa88a, 0x90a2,
-	0x199a, 0x0210, 0x2001, 0x1999, 0x8003, 0x8023, 0x8423, 0x9420,
-	0xac66, 0x0c48, 0xac00, 0xa803, 0x0000, 0x83ff, 0x1150, 0xb850,
-	0x9906, 0x1128, 0xb84f, 0x0000, 0xb853, 0x0000, 0x0050, 0xbc4e,
-	0x0040, 0x0096, 0x2348, 0xac02, 0x009e, 0xb850, 0x9906, 0x1108,
-	0xbb52, 0xa86b, 0x0103, 0xa87f, 0x0006, 0xa87b, 0x0000, 0x0016,
-	0x0036, 0x0046, 0x080c, 0x6b1d, 0x004e, 0x003e, 0x001e, 0x2400,
-	0x0820, 0x012e, 0x8108, 0x9182, 0x0800, 0x0218, 0x900e, 0x7007,
-	0x0002, 0x7112, 0x00be, 0x0005, 0x7014, 0x2060, 0x0126, 0x2091,
-	0x8000, 0x6018, 0x9005, 0x0528, 0x8001, 0x601a, 0x1510, 0x6120,
-	0x9186, 0x0003, 0x0118, 0x9186, 0x0006, 0x11c8, 0x080c, 0xb955,
-	0x01b0, 0x6014, 0x2048, 0xa888, 0x908a, 0x199a, 0x0280, 0x9082,
-	0x1999, 0xa88a, 0x908a, 0x199a, 0x0210, 0x2001, 0x1999, 0x8003,
-	0x800b, 0x810b, 0x9108, 0x611a, 0xa880, 0xd0e4, 0x0110, 0x080c,
-	0xb68c, 0x012e, 0x9c88, 0x000c, 0x7116, 0x2001, 0x1819, 0x2004,
-	0x9102, 0x0220, 0x7017, 0x1cc8, 0x7007, 0x0000, 0x0005, 0x00e6,
-	0x2071, 0x19d7, 0x7027, 0x07d0, 0x7023, 0x0009, 0x00ee, 0x0005,
-	0x2001, 0x19e0, 0x2003, 0x0000, 0x0005, 0x00e6, 0x2071, 0x19d7,
-	0x7132, 0x702f, 0x0009, 0x00ee, 0x0005, 0x2011, 0x19e3, 0x2013,
-	0x0000, 0x0005, 0x00e6, 0x2071, 0x19d7, 0x711a, 0x721e, 0x700b,
-	0x0009, 0x00ee, 0x0005, 0x0086, 0x0026, 0x705c, 0x8000, 0x705e,
-	0x2001, 0x19e7, 0x2044, 0xa070, 0x9086, 0x0000, 0x0150, 0x7070,
-	0xa09e, 0x706c, 0xa09a, 0x7068, 0xa096, 0x7064, 0xa092, 0x080c,
-	0x10eb, 0x002e, 0x008e, 0x0005, 0x0006, 0x0016, 0x0096, 0x00a6,
-	0x00b6, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x0156, 0x080c, 0x829f,
-	0x015e, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, 0x00ae, 0x009e,
-	0x001e, 0x000e, 0x0005, 0x00e6, 0x2071, 0x19d7, 0x717a, 0x727e,
-	0x7077, 0x0009, 0x00ee, 0x0005, 0x00e6, 0x0006, 0x2071, 0x19d7,
-	0x707c, 0x9206, 0x1110, 0x707a, 0x707e, 0x000e, 0x00ee, 0x0005,
-	0x00c6, 0x2061, 0x1a4f, 0x00ce, 0x0005, 0x9184, 0x000f, 0x8003,
-	0x8003, 0x8003, 0x9080, 0x1a4f, 0x2060, 0x0005, 0xa888, 0x908a,
-	0x199a, 0x1630, 0x9005, 0x1150, 0x00c6, 0x2061, 0x1a4f, 0x6014,
-	0x00ce, 0x9005, 0x1130, 0x2001, 0x001e, 0x0018, 0x908e, 0xffff,
-	0x01a8, 0x8003, 0x800b, 0x810b, 0x9108, 0x611a, 0xa880, 0x908c,
-	0x00c0, 0x918e, 0x00c0, 0x0904, 0x84ec, 0xd0b4, 0x1160, 0xd0bc,
-	0x1528, 0x2009, 0x0006, 0x080c, 0x8509, 0x0005, 0x900e, 0x0c68,
-	0x2001, 0x1999, 0x08b8, 0xd0fc, 0x0138, 0x908c, 0x0003, 0x0120,
-	0x918e, 0x0003, 0x1904, 0x8503, 0x2009, 0x1880, 0x2104, 0xd084,
-	0x1138, 0x87ff, 0x1120, 0x2009, 0x0043, 0x0804, 0x9f88, 0x0005,
-	0x87ff, 0x1de8, 0x2009, 0x0042, 0x0804, 0x9f88, 0xd0fc, 0x0130,
-	0x908c, 0x0003, 0x0118, 0x918e, 0x0003, 0x1528, 0x0076, 0x00f6,
-	0x2c78, 0x080c, 0x1679, 0x00fe, 0x007e, 0x87ff, 0x1120, 0x2009,
-	0x0042, 0x080c, 0x9f88, 0x0005, 0xd0fc, 0x0160, 0x9084, 0x0003,
-	0x908e, 0x0002, 0x0148, 0x87ff, 0x1120, 0x2009, 0x0041, 0x080c,
-	0x9f88, 0x0005, 0x0061, 0x0ce8, 0x87ff, 0x1dd8, 0x2009, 0x0043,
-	0x080c, 0x9f88, 0x0cb0, 0x2009, 0x0004, 0x0019, 0x0005, 0x2009,
-	0x0001, 0x0096, 0x080c, 0xb955, 0x0518, 0x6014, 0x2048, 0xa986,
-	0xa800, 0x6016, 0x9186, 0x0001, 0x1188, 0xa980, 0x918c, 0x8100,
-	0x918e, 0x8100, 0x1158, 0x00c6, 0x2061, 0x1a4f, 0x6200, 0xd28c,
-	0x1120, 0x6204, 0x8210, 0x0208, 0x6206, 0x00ce, 0x080c, 0x6959,
-	0x6014, 0x904d, 0x0076, 0x2039, 0x0000, 0x190c, 0x848e, 0x007e,
-	0x009e, 0x0005, 0x0156, 0x00c6, 0x2061, 0x1a4f, 0x6000, 0x81ff,
-	0x0110, 0x9205, 0x0008, 0x9204, 0x6002, 0x00ce, 0x015e, 0x0005,
-	0x6800, 0xd08c, 0x1138, 0x6808, 0x9005, 0x0120, 0x8001, 0x680a,
-	0x9085, 0x0001, 0x0005, 0x0126, 0x2091, 0x8000, 0x0076, 0x0156,
-	0x20a9, 0x0010, 0x9005, 0x0510, 0x911a, 0x1600, 0x8213, 0x2039,
-	0x0100, 0x273c, 0x97be, 0x0008, 0x1110, 0x818d, 0x0010, 0x81f5,
-	0x3e08, 0x0228, 0x911a, 0x1220, 0x1f04, 0x8556, 0x0028, 0x911a,
-	0x2308, 0x8210, 0x1f04, 0x8556, 0x0006, 0x3200, 0x9084, 0xefff,
-	0x2080, 0x000e, 0x015e, 0x007e, 0x012e, 0x0005, 0x0006, 0x3200,
-	0x9085, 0x1000, 0x0ca8, 0x0126, 0x2091, 0x2800, 0x2079, 0x19c4,
-	0x012e, 0x00d6, 0x2069, 0x19c4, 0x6803, 0x0005, 0x0156, 0x0146,
-	0x01d6, 0x20e9, 0x0000, 0x2069, 0x0200, 0x080c, 0x9d0b, 0x0401,
-	0x080c, 0x9cf6, 0x00e9, 0x080c, 0x9cf9, 0x00d1, 0x080c, 0x9cfc,
-	0x00b9, 0x080c, 0x9cff, 0x00a1, 0x080c, 0x9d02, 0x0089, 0x080c,
-	0x9d05, 0x0071, 0x080c, 0x9d08, 0x0059, 0x01de, 0x014e, 0x015e,
-	0x2069, 0x0004, 0x2d04, 0x9085, 0x8001, 0x206a, 0x00de, 0x0005,
-	0x20a9, 0x0020, 0x20a1, 0x0240, 0x2001, 0x0000, 0x4004, 0x0005,
-	0x00c6, 0x6027, 0x0001, 0x7804, 0x9084, 0x0007, 0x0002, 0x85cb,
-	0x85ef, 0x8630, 0x85d1, 0x85ef, 0x85cb, 0x85c9, 0x85c7, 0x080c,
-	0x0dc4, 0x00ce, 0x0005, 0x080c, 0x8420, 0x080c, 0x8c37, 0x00ce,
-	0x0005, 0x62c0, 0x82ff, 0x1110, 0x00ce, 0x0005, 0x2011, 0x5d5f,
-	0x080c, 0x835e, 0x7828, 0x9092, 0x00c8, 0x1228, 0x8000, 0x782a,
-	0x080c, 0x5d9f, 0x0c88, 0x62c0, 0x080c, 0x9d0f, 0x080c, 0x5d5f,
-	0x7807, 0x0003, 0x7827, 0x0000, 0x782b, 0x0000, 0x0c28, 0x080c,
-	0x8420, 0x6220, 0xd2a4, 0x0170, 0xd2cc, 0x0160, 0x782b, 0x0000,
-	0x7824, 0x9065, 0x090c, 0x0dc4, 0x2009, 0x0013, 0x080c, 0x9f88,
-	0x00ce, 0x0005, 0x00c6, 0x7824, 0x9065, 0x090c, 0x0dc4, 0x7828,
-	0x9092, 0xc350, 0x12c0, 0x8000, 0x782a, 0x00ce, 0x080c, 0x29fa,
-	0x0278, 0x00c6, 0x7924, 0x2160, 0x6010, 0x906d, 0x090c, 0x0dc4,
-	0x7807, 0x0000, 0x7827, 0x0000, 0x00ce, 0x080c, 0x8c37, 0x0c00,
-	0x080c, 0x95ff, 0x08e8, 0x2011, 0x0130, 0x2214, 0x080c, 0x9d0f,
-	0x080c, 0xd36d, 0x2009, 0x0014, 0x080c, 0x9f88, 0x00ce, 0x0880,
-	0x2001, 0x19e0, 0x2003, 0x0000, 0x62c0, 0x82ff, 0x1160, 0x782b,
-	0x0000, 0x7824, 0x9065, 0x090c, 0x0dc4, 0x2009, 0x0013, 0x080c,
-	0x9fda, 0x00ce, 0x0005, 0x00b6, 0x00c6, 0x00d6, 0x7824, 0x9005,
-	0x090c, 0x0dc4, 0x7828, 0x9092, 0xc350, 0x1648, 0x8000, 0x782a,
-	0x00de, 0x00ce, 0x00be, 0x080c, 0x29fa, 0x02f0, 0x00b6, 0x00c6,
-	0x00d6, 0x781c, 0x905d, 0x090c, 0x0dc4, 0xb800, 0xc0dc, 0xb802,
-	0x7924, 0x2160, 0x080c, 0x9f18, 0xb93c, 0x81ff, 0x090c, 0x0dc4,
-	0x8109, 0xb93e, 0x7807, 0x0000, 0x7827, 0x0000, 0x00de, 0x00ce,
-	0x00be, 0x080c, 0x8c37, 0x0868, 0x080c, 0x95ff, 0x0850, 0x2011,
-	0x0130, 0x2214, 0x080c, 0x9d0f, 0x080c, 0xd36d, 0x7824, 0x9065,
-	0x2009, 0x0014, 0x080c, 0x9f88, 0x00de, 0x00ce, 0x00be, 0x0804,
-	0x8641, 0x00c6, 0x2001, 0x009b, 0x2004, 0xd0fc, 0x190c, 0x1d94,
-	0x6024, 0x6027, 0x0002, 0xd0f4, 0x1580, 0x62c8, 0x60c4, 0x9205,
-	0x1170, 0x783c, 0x9065, 0x0130, 0x2009, 0x0049, 0x080c, 0x9f88,
-	0x00ce, 0x0005, 0x2011, 0x19e3, 0x2013, 0x0000, 0x0cc8, 0x793c,
-	0x81ff, 0x0dc0, 0x7944, 0x9192, 0x7530, 0x12f0, 0x8108, 0x7946,
-	0x793c, 0x9188, 0x0008, 0x210c, 0x918e, 0x0006, 0x1138, 0x6014,
-	0x9084, 0x1984, 0x9085, 0x0012, 0x6016, 0x0c10, 0x6014, 0x9084,
-	0x1984, 0x9085, 0x0016, 0x6016, 0x08d8, 0x793c, 0x2160, 0x2009,
-	0x004a, 0x080c, 0x9f88, 0x08a0, 0x7848, 0xc085, 0x784a, 0x0880,
-	0x0006, 0x0016, 0x00c6, 0x0126, 0x2091, 0x8000, 0x600f, 0x0000,
-	0x2c08, 0x2061, 0x19c4, 0x6020, 0x8000, 0x6022, 0x6010, 0x9005,
-	0x0148, 0x9080, 0x0003, 0x2102, 0x6112, 0x012e, 0x00ce, 0x001e,
-	0x000e, 0x0005, 0x6116, 0x6112, 0x0cc0, 0x00d6, 0x2069, 0x19c4,
-	0xb800, 0xd0d4, 0x0168, 0x6820, 0x8000, 0x6822, 0x9086, 0x0001,
-	0x1110, 0x2b00, 0x681e, 0x00de, 0x0804, 0x8c37, 0x00de, 0x0005,
-	0xc0d5, 0xb802, 0x6818, 0x9005, 0x0168, 0xb856, 0xb85b, 0x0000,
-	0x0086, 0x0006, 0x2b00, 0x681a, 0x008e, 0xa05a, 0x008e, 0x2069,
-	0x19c4, 0x0c08, 0xb856, 0xb85a, 0x2b00, 0x681a, 0x681e, 0x08d8,
-	0x0006, 0x0016, 0x00c6, 0x0126, 0x2091, 0x8000, 0x600f, 0x0000,
-	0x2c08, 0x2061, 0x19c4, 0x6020, 0x8000, 0x6022, 0x6008, 0x9005,
-	0x0148, 0x9080, 0x0003, 0x2102, 0x610a, 0x012e, 0x00ce, 0x001e,
-	0x000e, 0x0005, 0x610e, 0x610a, 0x0cc0, 0x00c6, 0x600f, 0x0000,
-	0x2c08, 0x2061, 0x19c4, 0x6034, 0x9005, 0x0130, 0x9080, 0x0003,
-	0x2102, 0x6136, 0x00ce, 0x0005, 0x613a, 0x6136, 0x00ce, 0x0005,
-	0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x00b6, 0x0096, 0x0076, 0x0066,
-	0x0056, 0x0036, 0x0026, 0x0016, 0x0006, 0x0126, 0x902e, 0x2071,
-	0x19c4, 0x7638, 0x2660, 0x2678, 0x2091, 0x8000, 0x8cff, 0x0904,
-	0x87c4, 0x6010, 0x2058, 0xb8a0, 0x9206, 0x1904, 0x87bf, 0x87ff,
-	0x0120, 0x6024, 0x9106, 0x1904, 0x87bf, 0x703c, 0x9c06, 0x1178,
-	0x0036, 0x2019, 0x0001, 0x080c, 0x9964, 0x7033, 0x0000, 0x9006,
-	0x703e, 0x7042, 0x7046, 0x704a, 0x003e, 0x2029, 0x0001, 0x7038,
-	0x9c36, 0x1110, 0x660c, 0x763a, 0x7034, 0x9c36, 0x1140, 0x2c00,
-	0x9f36, 0x0118, 0x2f00, 0x7036, 0x0010, 0x7037, 0x0000, 0x660c,
-	0x0066, 0x2c00, 0x9f06, 0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f,
-	0x0000, 0x080c, 0xb955, 0x01f0, 0x6014, 0x2048, 0x6020, 0x9086,
-	0x0003, 0x15b8, 0x6004, 0x9086, 0x0040, 0x090c, 0x9b30, 0xa86b,
-	0x0103, 0xab7e, 0xa87b, 0x0000, 0x0016, 0x0036, 0x0076, 0x080c,
-	0xbc3f, 0x080c, 0xd242, 0x080c, 0x6b1d, 0x007e, 0x003e, 0x001e,
-	0x080c, 0xbb39, 0x080c, 0x9f42, 0x00ce, 0x0804, 0x875e, 0x2c78,
-	0x600c, 0x2060, 0x0804, 0x875e, 0x85ff, 0x0120, 0x0036, 0x080c,
-	0x8d06, 0x003e, 0x012e, 0x000e, 0x001e, 0x002e, 0x003e, 0x005e,
-	0x006e, 0x007e, 0x009e, 0x00be, 0x00ce, 0x00de, 0x00ee, 0x00fe,
-	0x0005, 0x6020, 0x9086, 0x0006, 0x1158, 0x0016, 0x0036, 0x0076,
-	0x080c, 0xd242, 0x080c, 0xd101, 0x007e, 0x003e, 0x001e, 0x0890,
-	0x6020, 0x9086, 0x000a, 0x0904, 0x87a9, 0x0804, 0x87a2, 0x0006,
-	0x0066, 0x0096, 0x00c6, 0x00d6, 0x00f6, 0x9036, 0x0126, 0x2091,
-	0x8000, 0x2079, 0x19c4, 0x7838, 0x9065, 0x0578, 0x600c, 0x0006,
-	0x600f, 0x0000, 0x783c, 0x9c06, 0x1168, 0x0036, 0x2019, 0x0001,
-	0x080c, 0x9964, 0x7833, 0x0000, 0x901e, 0x7b3e, 0x7b42, 0x7b46,
-	0x7b4a, 0x003e, 0x080c, 0xb955, 0x01a0, 0x6014, 0x2048, 0x6020,
-	0x9086, 0x0003, 0x11e0, 0x6004, 0x9086, 0x0040, 0x090c, 0x9b30,
-	0xa86b, 0x0103, 0xab7e, 0xa87b, 0x0000, 0x080c, 0x6b11, 0x080c,
-	0xbb39, 0x080c, 0x9f42, 0x000e, 0x0878, 0x7e3a, 0x7e36, 0x012e,
+	0x8206, 0x8207, 0x8206, 0x8206, 0x826c, 0x827f, 0x0005, 0x00b6,
+	0x700c, 0x7108, 0x080c, 0x2708, 0x1904, 0x826a, 0x080c, 0x6497,
+	0x1904, 0x826a, 0xbe12, 0xbd16, 0x7110, 0xd1bc, 0x0540, 0x702c,
+	0xd084, 0x1120, 0xb800, 0xd0bc, 0x1904, 0x826a, 0x080c, 0x686d,
+	0x0148, 0x9086, 0x0004, 0x0130, 0x080c, 0x6875, 0x0118, 0x9086,
+	0x0004, 0x1588, 0x00c6, 0x080c, 0x8292, 0x00ce, 0x05d8, 0x080c,
+	0xa347, 0x2b08, 0x05b8, 0x6112, 0x080c, 0xc640, 0x6023, 0x0002,
+	0x7120, 0x610a, 0x2009, 0x0088, 0x080c, 0xa419, 0x0458, 0x080c,
+	0x686d, 0x0148, 0x9086, 0x0004, 0x0130, 0x080c, 0x6875, 0x0118,
+	0x9086, 0x0004, 0x1180, 0x080c, 0xa347, 0x2b08, 0x01d8, 0x6112,
+	0x080c, 0xc640, 0x6023, 0x0005, 0x7120, 0x610a, 0x2009, 0x0088,
+	0x080c, 0xa419, 0x0078, 0x080c, 0xa347, 0x2b08, 0x0158, 0x6112,
+	0x080c, 0xc640, 0x6023, 0x0004, 0x7120, 0x610a, 0x2009, 0x0001,
+	0x080c, 0xa419, 0x00be, 0x0005, 0x688c, 0x9082, 0x000c, 0x0270,
+	0x7110, 0xd1bc, 0x0158, 0x00f1, 0x0148, 0x080c, 0x81e2, 0x1130,
+	0x7124, 0x610a, 0x2009, 0x0089, 0x080c, 0xa419, 0x0005, 0x688c,
+	0x9082, 0x0004, 0x0270, 0x7110, 0xd1bc, 0x0158, 0x0059, 0x0148,
+	0x080c, 0x81e2, 0x1130, 0x7124, 0x610a, 0x2009, 0x008a, 0x080c,
+	0xa419, 0x0005, 0x7020, 0x2060, 0x9c84, 0x0007, 0x1158, 0x9c82,
+	0x1cd0, 0x0240, 0x2001, 0x1819, 0x2004, 0x9c02, 0x1218, 0x9085,
+	0x0001, 0x0005, 0x9006, 0x0ce8, 0x00b6, 0x7110, 0xd1bc, 0x11f0,
+	0x7024, 0x2060, 0x9c84, 0x0007, 0x11c8, 0x9c82, 0x1cd0, 0x02b0,
+	0x6864, 0x9c02, 0x1298, 0x7008, 0x9084, 0x00ff, 0x6110, 0x2158,
+	0xb910, 0x9106, 0x1158, 0x700c, 0xb914, 0x9106, 0x1138, 0x698c,
+	0x81ff, 0x1170, 0x2009, 0x0051, 0x080c, 0xa419, 0x7817, 0x0140,
+	0x2001, 0x19cd, 0x2004, 0x9005, 0x090c, 0x8e38, 0x00be, 0x0005,
+	0x080c, 0x83cc, 0x0c98, 0x2031, 0x0105, 0x0069, 0x0005, 0x2031,
+	0x0206, 0x0049, 0x0005, 0x2031, 0x0207, 0x0029, 0x0005, 0x2031,
+	0x0213, 0x0009, 0x0005, 0x00c6, 0x0096, 0x00f6, 0x7000, 0x9084,
+	0xf000, 0x9086, 0xc000, 0x05d0, 0x080c, 0xa347, 0x05b8, 0x0066,
+	0x00c6, 0x0046, 0x2011, 0x0263, 0x2204, 0x8211, 0x220c, 0x080c,
+	0x2708, 0x15a0, 0x080c, 0x6497, 0x1588, 0xbe12, 0xbd16, 0x2b00,
+	0x004e, 0x00ce, 0x6012, 0x080c, 0xc640, 0x080c, 0x100d, 0x0510,
+	0x2900, 0x605a, 0x9006, 0xa802, 0xa86a, 0xac6e, 0xa85c, 0x90f8,
+	0x001c, 0x20a9, 0x000e, 0xa860, 0x20e8, 0x20e1, 0x0000, 0x2fa0,
+	0x2e98, 0x4003, 0x006e, 0x6616, 0x6007, 0x003e, 0x6023, 0x0001,
+	0x6003, 0x0001, 0x080c, 0x88e9, 0x080c, 0x8e38, 0x00fe, 0x009e,
+	0x00ce, 0x0005, 0x080c, 0xa39d, 0x006e, 0x0cc0, 0x004e, 0x00ce,
+	0x0cc8, 0x00c6, 0x7000, 0x908c, 0xff00, 0x9184, 0xf000, 0x810f,
+	0x9086, 0x2000, 0x1904, 0x8388, 0x9186, 0x0022, 0x15f0, 0x2001,
+	0x0111, 0x2004, 0x9005, 0x1904, 0x838a, 0x7030, 0x908e, 0x0400,
+	0x0904, 0x838a, 0x908e, 0x6000, 0x05e8, 0x908e, 0x5400, 0x05d0,
+	0x908e, 0x0300, 0x11d8, 0x2009, 0x1836, 0x210c, 0xd18c, 0x1590,
+	0xd1a4, 0x1580, 0x080c, 0x682b, 0x0588, 0x68ac, 0x9084, 0x00ff,
+	0x7100, 0x918c, 0x00ff, 0x9106, 0x1518, 0x687c, 0x69ac, 0x918c,
+	0xff00, 0x9105, 0x7104, 0x9106, 0x11d8, 0x00e0, 0x2009, 0x0103,
+	0x210c, 0xd1b4, 0x11a8, 0x908e, 0x5200, 0x09e8, 0x908e, 0x0500,
+	0x09d0, 0x908e, 0x5000, 0x09b8, 0x0058, 0x9186, 0x0023, 0x1140,
+	0x080c, 0x8292, 0x0128, 0x6004, 0x9086, 0x0002, 0x0118, 0x0000,
+	0x9006, 0x0010, 0x9085, 0x0001, 0x00ce, 0x0005, 0x7030, 0x908e,
+	0x0300, 0x0118, 0x908e, 0x5200, 0x1d98, 0x2001, 0x1836, 0x2004,
+	0x9084, 0x0009, 0x9086, 0x0008, 0x0d68, 0x0c50, 0x00f6, 0x2079,
+	0x0200, 0x7800, 0xc0e5, 0xc0cc, 0x7802, 0x00fe, 0x0005, 0x00f6,
+	0x2079, 0x1800, 0x7834, 0xd084, 0x1130, 0x2079, 0x0200, 0x7800,
+	0x9085, 0x1200, 0x7802, 0x00fe, 0x0005, 0x00e6, 0x2071, 0x1800,
+	0x7034, 0xc084, 0x7036, 0x00ee, 0x0005, 0x0016, 0x2001, 0x1836,
+	0x200c, 0x9184, 0x0080, 0x0118, 0xd18c, 0x0118, 0x9006, 0x001e,
+	0x0005, 0x9085, 0x0001, 0x0cd8, 0x0016, 0x2009, 0x185d, 0x2104,
+	0x8000, 0x0208, 0x200a, 0x001e, 0x0005, 0x2071, 0x19d7, 0x7003,
+	0x0003, 0x700f, 0x0361, 0x9006, 0x701a, 0x707a, 0x7012, 0x7017,
+	0x1cd0, 0x7007, 0x0000, 0x7026, 0x702b, 0x98e7, 0x7032, 0x703a,
+	0x703f, 0x0064, 0x7037, 0x994f, 0x7047, 0xffff, 0x704a, 0x704f,
+	0x54f1, 0x7052, 0x7063, 0x85a7, 0x080c, 0x1026, 0x090c, 0x0dc3,
+	0x2900, 0x7042, 0xa86b, 0x0003, 0xa873, 0x0100, 0xa8af, 0xdcb0,
+	0x0005, 0x2071, 0x19d7, 0x1d04, 0x84b1, 0x2091, 0x6000, 0x700c,
+	0x8001, 0x700e, 0x1510, 0x2001, 0x1880, 0x2004, 0xd0c4, 0x0158,
+	0x3a00, 0xd08c, 0x1140, 0x20d1, 0x0000, 0x20d1, 0x0001, 0x20d1,
+	0x0000, 0x080c, 0x0dc3, 0x700f, 0x0361, 0x7007, 0x0001, 0x0126,
+	0x2091, 0x8000, 0x080c, 0x85ec, 0x7048, 0x900d, 0x0148, 0x8109,
+	0x714a, 0x1130, 0x704c, 0x080f, 0x0018, 0x0126, 0x2091, 0x8000,
+	0x7024, 0x900d, 0x0188, 0x7020, 0x8001, 0x7022, 0x1168, 0x7023,
+	0x0009, 0x8109, 0x7126, 0x9186, 0x03e8, 0x1110, 0x7028, 0x080f,
+	0x81ff, 0x1110, 0x7028, 0x080f, 0x7030, 0x900d, 0x05a8, 0x702c,
+	0x8001, 0x702e, 0x1588, 0x0016, 0x2009, 0x0306, 0x210c, 0x9184,
+	0x0030, 0x01e8, 0x9184, 0x0048, 0x9086, 0x0008, 0x11c0, 0x7038,
+	0x9005, 0x01a8, 0x8001, 0x703a, 0x1190, 0x080c, 0x7351, 0x0178,
+	0x00e6, 0x2071, 0x19c4, 0x080c, 0x99cb, 0x00ee, 0x1140, 0x2009,
+	0x1a61, 0x2104, 0x8000, 0x0208, 0x200a, 0x001e, 0x0068, 0x001e,
+	0x702f, 0x0009, 0x8109, 0x7132, 0x0128, 0x9184, 0x007f, 0x090c,
+	0x9a9a, 0x0010, 0x7034, 0x080f, 0x7044, 0x9005, 0x0118, 0x0310,
+	0x8001, 0x7046, 0x7054, 0x900d, 0x0168, 0x7050, 0x8001, 0x7052,
+	0x1148, 0x7053, 0x0009, 0x8109, 0x7156, 0x1120, 0x7158, 0x7156,
+	0x7060, 0x080f, 0x7018, 0x900d, 0x01d8, 0x0016, 0x7078, 0x900d,
+	0x0158, 0x7074, 0x8001, 0x7076, 0x1138, 0x7077, 0x0009, 0x8109,
+	0x717a, 0x1110, 0x707c, 0x080f, 0x001e, 0x7008, 0x8001, 0x700a,
+	0x1138, 0x700b, 0x0009, 0x8109, 0x711a, 0x1110, 0x701c, 0x080f,
+	0x012e, 0x7004, 0x0002, 0x84d9, 0x84da, 0x8540, 0x00e6, 0x2071,
+	0x19d7, 0x7018, 0x9005, 0x1120, 0x711a, 0x721e, 0x700b, 0x0009,
+	0x00ee, 0x0005, 0x00e6, 0x0006, 0x2071, 0x19d7, 0x701c, 0x9206,
+	0x1120, 0x701a, 0x701e, 0x707a, 0x707e, 0x000e, 0x00ee, 0x0005,
+	0x00e6, 0x2071, 0x19d7, 0xb888, 0x9102, 0x0208, 0xb98a, 0x00ee,
+	0x0005, 0x0005, 0x00b6, 0x7110, 0x0126, 0x2091, 0x8000, 0x080c,
+	0x64fc, 0x1904, 0x8535, 0xb888, 0x8001, 0x0230, 0xb88a, 0x1120,
+	0x0016, 0x080c, 0x8e38, 0x001e, 0x901e, 0xb84c, 0x904d, 0x0904,
+	0x8535, 0xa864, 0x9005, 0x0118, 0x8001, 0xa866, 0x0128, 0x2918,
+	0xa800, 0x904d, 0x05d0, 0x0ca8, 0xa888, 0x90a2, 0x199a, 0x0270,
+	0x9082, 0x1999, 0xa88a, 0x90a2, 0x199a, 0x0210, 0x2001, 0x1999,
+	0x8003, 0x8023, 0x8423, 0x9420, 0xac66, 0x0c48, 0xac00, 0xa803,
+	0x0000, 0x83ff, 0x1150, 0xb850, 0x9906, 0x1128, 0xb84f, 0x0000,
+	0xb853, 0x0000, 0x0050, 0xbc4e, 0x0040, 0x0096, 0x2348, 0xac02,
+	0x009e, 0xb850, 0x9906, 0x1108, 0xbb52, 0xa86b, 0x0103, 0xa87f,
+	0x0006, 0xa87b, 0x0000, 0x0016, 0x0036, 0x0046, 0x080c, 0x6c02,
+	0x004e, 0x003e, 0x001e, 0x2400, 0x0820, 0x012e, 0x8108, 0x9182,
+	0x0800, 0x0218, 0x900e, 0x7007, 0x0002, 0x7112, 0x00be, 0x0005,
+	0x7014, 0x2060, 0x0126, 0x2091, 0x8000, 0x6040, 0x9005, 0x0128,
+	0x8001, 0x6042, 0x1110, 0x080c, 0xc4d1, 0x6018, 0x9005, 0x0528,
+	0x8001, 0x601a, 0x1510, 0x6120, 0x9186, 0x0003, 0x0118, 0x9186,
+	0x0006, 0x11c8, 0x080c, 0xc1cd, 0x01b0, 0x6014, 0x2048, 0xa888,
+	0x908a, 0x199a, 0x0280, 0x9082, 0x1999, 0xa88a, 0x908a, 0x199a,
+	0x0210, 0x2001, 0x1999, 0x8003, 0x800b, 0x810b, 0x9108, 0x611a,
+	0xa880, 0xd0e4, 0x0110, 0x080c, 0xbeae, 0x012e, 0x9c88, 0x0018,
+	0x7116, 0x2001, 0x1819, 0x2004, 0x9102, 0x0220, 0x7017, 0x1cd0,
+	0x7007, 0x0000, 0x0005, 0x00e6, 0x2071, 0x19d7, 0x7027, 0x07d0,
+	0x7023, 0x0009, 0x00ee, 0x0005, 0x2001, 0x19e0, 0x2003, 0x0000,
+	0x0005, 0x00e6, 0x2071, 0x19d7, 0x7132, 0x702f, 0x0009, 0x00ee,
+	0x0005, 0x2011, 0x19e3, 0x2013, 0x0000, 0x0005, 0x00e6, 0x2071,
+	0x19d7, 0x711a, 0x721e, 0x700b, 0x0009, 0x00ee, 0x0005, 0x0086,
+	0x0026, 0x705c, 0x8000, 0x705e, 0x2001, 0x19e7, 0x2044, 0xa070,
+	0x9086, 0x0000, 0x0150, 0x7070, 0xa09e, 0x706c, 0xa09a, 0x7068,
+	0xa096, 0x7064, 0xa092, 0x080c, 0x10f7, 0x002e, 0x008e, 0x0005,
+	0x0006, 0x0016, 0x0096, 0x00a6, 0x00b6, 0x00c6, 0x00d6, 0x00e6,
+	0x00f6, 0x0156, 0x080c, 0x8401, 0x015e, 0x00fe, 0x00ee, 0x00de,
+	0x00ce, 0x00be, 0x00ae, 0x009e, 0x001e, 0x000e, 0x0005, 0x00e6,
+	0x2071, 0x19d7, 0x717a, 0x727e, 0x7077, 0x0009, 0x00ee, 0x0005,
+	0x00e6, 0x0006, 0x2071, 0x19d7, 0x707c, 0x9206, 0x1110, 0x707a,
+	0x707e, 0x000e, 0x00ee, 0x0005, 0x2069, 0x1800, 0x69e4, 0xd1e4,
+	0x1518, 0x0026, 0xd1ec, 0x0140, 0x6a50, 0x6870, 0x9202, 0x0288,
+	0x8117, 0x9294, 0x00c0, 0x0088, 0x9184, 0x0007, 0x01a0, 0x8109,
+	0x9184, 0x0007, 0x0110, 0x69e6, 0x0070, 0x8107, 0x9084, 0x0007,
+	0x910d, 0x8107, 0x9106, 0x9094, 0x00c0, 0x9184, 0xff3f, 0x9205,
+	0x68e6, 0x080c, 0x0eed, 0x002e, 0x0005, 0x00c6, 0x2061, 0x1a4f,
+	0x00ce, 0x0005, 0x9184, 0x000f, 0x8003, 0x8003, 0x8003, 0x9080,
+	0x1a4f, 0x2060, 0x0005, 0xa888, 0x908a, 0x199a, 0x1638, 0x9005,
+	0x1150, 0x00c6, 0x2061, 0x1a4f, 0x6014, 0x00ce, 0x9005, 0x1130,
+	0x2001, 0x001e, 0x0018, 0x908e, 0xffff, 0x01b0, 0x8003, 0x800b,
+	0x810b, 0x9108, 0x611a, 0xa880, 0x908c, 0x00c0, 0x918e, 0x00c0,
+	0x0904, 0x86ad, 0xd0b4, 0x1168, 0xd0bc, 0x1904, 0x8686, 0x2009,
+	0x0006, 0x080c, 0x86da, 0x0005, 0x900e, 0x0c60, 0x2001, 0x1999,
+	0x08b0, 0xd0fc, 0x0160, 0x908c, 0x0003, 0x0120, 0x918e, 0x0003,
+	0x1904, 0x86d4, 0x908c, 0x2020, 0x918e, 0x2020, 0x01a8, 0x6024,
+	0xd0d4, 0x11e8, 0x2009, 0x1880, 0x2104, 0xd084, 0x1138, 0x87ff,
+	0x1120, 0x2009, 0x0043, 0x0804, 0xa419, 0x0005, 0x87ff, 0x1de8,
+	0x2009, 0x0042, 0x0804, 0xa419, 0x6110, 0x00b6, 0x2158, 0xb900,
+	0x00be, 0xd1ac, 0x0d20, 0x6024, 0xc0cd, 0x6026, 0x0c00, 0xc0d4,
+	0x6026, 0xa894, 0x602e, 0xa890, 0x6032, 0x08e0, 0xd0fc, 0x0160,
+	0x908c, 0x0003, 0x0120, 0x918e, 0x0003, 0x1904, 0x86d4, 0x908c,
+	0x2020, 0x918e, 0x2020, 0x0170, 0x0076, 0x00f6, 0x2c78, 0x080c,
+	0x16c1, 0x00fe, 0x007e, 0x87ff, 0x1120, 0x2009, 0x0042, 0x080c,
+	0xa419, 0x0005, 0x6110, 0x00b6, 0x2158, 0xb900, 0x00be, 0xd1ac,
+	0x0d58, 0x6124, 0xc1cd, 0x6126, 0x0c38, 0xd0fc, 0x0188, 0x908c,
+	0x2020, 0x918e, 0x2020, 0x01a8, 0x9084, 0x0003, 0x908e, 0x0002,
+	0x0148, 0x87ff, 0x1120, 0x2009, 0x0041, 0x080c, 0xa419, 0x0005,
+	0x00b9, 0x0ce8, 0x87ff, 0x1dd8, 0x2009, 0x0043, 0x080c, 0xa419,
+	0x0cb0, 0x6110, 0x00b6, 0x2158, 0xb900, 0x00be, 0xd1ac, 0x0d20,
+	0x6124, 0xc1cd, 0x6126, 0x0c00, 0x2009, 0x0004, 0x0019, 0x0005,
+	0x2009, 0x0001, 0x0096, 0x080c, 0xc1cd, 0x0518, 0x6014, 0x2048,
+	0xa986, 0xa800, 0x6016, 0x9186, 0x0001, 0x1188, 0xa980, 0x918c,
+	0x8100, 0x918e, 0x8100, 0x1158, 0x00c6, 0x2061, 0x1a4f, 0x6200,
+	0xd28c, 0x1120, 0x6204, 0x8210, 0x0208, 0x6206, 0x00ce, 0x080c,
+	0x6a41, 0x6014, 0x904d, 0x0076, 0x2039, 0x0000, 0x190c, 0x8623,
+	0x007e, 0x009e, 0x0005, 0x0156, 0x00c6, 0x2061, 0x1a4f, 0x6000,
+	0x81ff, 0x0110, 0x9205, 0x0008, 0x9204, 0x6002, 0x00ce, 0x015e,
+	0x0005, 0x6800, 0xd08c, 0x1138, 0x6808, 0x9005, 0x0120, 0x8001,
+	0x680a, 0x9085, 0x0001, 0x0005, 0x0126, 0x2091, 0x8000, 0x0076,
+	0x0156, 0x20a9, 0x0010, 0x9005, 0x0510, 0x911a, 0x1600, 0x8213,
+	0x2039, 0x0100, 0x273c, 0x97be, 0x0008, 0x1110, 0x818d, 0x0010,
+	0x81f5, 0x3e08, 0x0228, 0x911a, 0x1220, 0x1f04, 0x8727, 0x0028,
+	0x911a, 0x2308, 0x8210, 0x1f04, 0x8727, 0x0006, 0x3200, 0x9084,
+	0xefff, 0x2080, 0x000e, 0x015e, 0x007e, 0x012e, 0x0005, 0x0006,
+	0x3200, 0x9085, 0x1000, 0x0ca8, 0x0126, 0x2091, 0x2800, 0x2079,
+	0x19c4, 0x012e, 0x00d6, 0x2069, 0x19c4, 0x6803, 0x0005, 0x0156,
+	0x0146, 0x01d6, 0x20e9, 0x0000, 0x2069, 0x0200, 0x080c, 0xa190,
+	0x0401, 0x080c, 0xa17b, 0x00e9, 0x080c, 0xa17e, 0x00d1, 0x080c,
+	0xa181, 0x00b9, 0x080c, 0xa184, 0x00a1, 0x080c, 0xa187, 0x0089,
+	0x080c, 0xa18a, 0x0071, 0x080c, 0xa18d, 0x0059, 0x01de, 0x014e,
+	0x015e, 0x2069, 0x0004, 0x2d04, 0x9085, 0x8001, 0x206a, 0x00de,
+	0x0005, 0x20a9, 0x0020, 0x20a1, 0x0240, 0x2001, 0x0000, 0x4004,
+	0x0005, 0x00c6, 0x6027, 0x0001, 0x7804, 0x9084, 0x0007, 0x0002,
+	0x879c, 0x87c0, 0x8801, 0x87a2, 0x87c0, 0x879c, 0x879a, 0x8798,
+	0x080c, 0x0dc3, 0x00ce, 0x0005, 0x080c, 0x858c, 0x080c, 0x8e38,
+	0x00ce, 0x0005, 0x62c0, 0x82ff, 0x1110, 0x00ce, 0x0005, 0x2011,
+	0x5e1c, 0x080c, 0x84c2, 0x7828, 0x9092, 0x00c8, 0x1228, 0x8000,
+	0x782a, 0x080c, 0x5e5c, 0x0c88, 0x62c0, 0x080c, 0xa194, 0x080c,
+	0x5e1c, 0x7807, 0x0003, 0x7827, 0x0000, 0x782b, 0x0000, 0x0c28,
+	0x080c, 0x858c, 0x6220, 0xd2a4, 0x0170, 0xd2cc, 0x0160, 0x782b,
+	0x0000, 0x7824, 0x9065, 0x090c, 0x0dc3, 0x2009, 0x0013, 0x080c,
+	0xa419, 0x00ce, 0x0005, 0x00c6, 0x7824, 0x9065, 0x090c, 0x0dc3,
+	0x7828, 0x9092, 0xc350, 0x12c0, 0x8000, 0x782a, 0x00ce, 0x080c,
+	0x2a63, 0x0278, 0x00c6, 0x7924, 0x2160, 0x6010, 0x906d, 0x090c,
+	0x0dc3, 0x7807, 0x0000, 0x7827, 0x0000, 0x00ce, 0x080c, 0x8e38,
+	0x0c00, 0x080c, 0x98ad, 0x08e8, 0x2011, 0x0130, 0x2214, 0x080c,
+	0xa194, 0x080c, 0xe0fa, 0x2009, 0x0014, 0x080c, 0xa419, 0x00ce,
+	0x0880, 0x2001, 0x19e0, 0x2003, 0x0000, 0x62c0, 0x82ff, 0x1160,
+	0x782b, 0x0000, 0x7824, 0x9065, 0x090c, 0x0dc3, 0x2009, 0x0013,
+	0x080c, 0xa46b, 0x00ce, 0x0005, 0x00b6, 0x00c6, 0x00d6, 0x7824,
+	0x9005, 0x090c, 0x0dc3, 0x7828, 0x9092, 0xc350, 0x1648, 0x8000,
+	0x782a, 0x00de, 0x00ce, 0x00be, 0x080c, 0x2a63, 0x02f0, 0x00b6,
+	0x00c6, 0x00d6, 0x781c, 0x905d, 0x090c, 0x0dc3, 0xb800, 0xc0dc,
+	0xb802, 0x7924, 0x2160, 0x080c, 0xa39d, 0xb93c, 0x81ff, 0x090c,
+	0x0dc3, 0x8109, 0xb93e, 0x7807, 0x0000, 0x7827, 0x0000, 0x00de,
+	0x00ce, 0x00be, 0x080c, 0x8e38, 0x0868, 0x080c, 0x98ad, 0x0850,
+	0x2011, 0x0130, 0x2214, 0x080c, 0xa194, 0x080c, 0xe0fa, 0x7824,
+	0x9065, 0x2009, 0x0014, 0x080c, 0xa419, 0x00de, 0x00ce, 0x00be,
+	0x0804, 0x8812, 0x00c6, 0x2001, 0x009b, 0x2004, 0xd0fc, 0x190c,
+	0x1ddc, 0x6024, 0x6027, 0x0002, 0xd0f4, 0x1580, 0x62c8, 0x60c4,
+	0x9205, 0x1170, 0x783c, 0x9065, 0x0130, 0x2009, 0x0049, 0x080c,
+	0xa419, 0x00ce, 0x0005, 0x2011, 0x19e3, 0x2013, 0x0000, 0x0cc8,
+	0x793c, 0x81ff, 0x0dc0, 0x7944, 0x9192, 0x7530, 0x12f0, 0x8108,
+	0x7946, 0x793c, 0x9188, 0x0008, 0x210c, 0x918e, 0x0006, 0x1138,
+	0x6014, 0x9084, 0x1984, 0x9085, 0x0012, 0x6016, 0x0c10, 0x6014,
+	0x9084, 0x1984, 0x9085, 0x0016, 0x6016, 0x08d8, 0x793c, 0x2160,
+	0x2009, 0x004a, 0x080c, 0xa419, 0x08a0, 0x7848, 0xc085, 0x784a,
+	0x0880, 0x0006, 0x0016, 0x00c6, 0x0126, 0x2091, 0x8000, 0x600f,
+	0x0000, 0x2c08, 0x2061, 0x19c4, 0x6020, 0x8000, 0x6022, 0x6010,
+	0x9005, 0x0148, 0x9080, 0x0003, 0x2102, 0x6112, 0x012e, 0x00ce,
+	0x001e, 0x000e, 0x0005, 0x6116, 0x6112, 0x0cc0, 0x00d6, 0x2069,
+	0x19c4, 0xb800, 0xd0d4, 0x0168, 0x6820, 0x8000, 0x6822, 0x9086,
+	0x0001, 0x1110, 0x2b00, 0x681e, 0x00de, 0x0804, 0x8e38, 0x00de,
+	0x0005, 0xc0d5, 0xb802, 0x6818, 0x9005, 0x0168, 0xb856, 0xb85b,
+	0x0000, 0x0086, 0x0006, 0x2b00, 0x681a, 0x008e, 0xa05a, 0x008e,
+	0x2069, 0x19c4, 0x0c08, 0xb856, 0xb85a, 0x2b00, 0x681a, 0x681e,
+	0x08d8, 0x0006, 0x0016, 0x00c6, 0x0126, 0x2091, 0x8000, 0x600f,
+	0x0000, 0x2c08, 0x2061, 0x19c4, 0x6020, 0x8000, 0x6022, 0x6008,
+	0x9005, 0x0148, 0x9080, 0x0003, 0x2102, 0x610a, 0x012e, 0x00ce,
+	0x001e, 0x000e, 0x0005, 0x610e, 0x610a, 0x0cc0, 0x00c6, 0x600f,
+	0x0000, 0x2c08, 0x2061, 0x19c4, 0x6034, 0x9005, 0x0130, 0x9080,
+	0x0003, 0x2102, 0x6136, 0x00ce, 0x0005, 0x613a, 0x6136, 0x00ce,
+	0x0005, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x00b6, 0x0096, 0x0076,
+	0x0066, 0x0056, 0x0036, 0x0026, 0x0016, 0x0006, 0x0126, 0x902e,
+	0x2071, 0x19c4, 0x7638, 0x2660, 0x2678, 0x2091, 0x8000, 0x8cff,
+	0x0904, 0x8995, 0x6010, 0x2058, 0xb8a0, 0x9206, 0x1904, 0x8990,
+	0x87ff, 0x0120, 0x6054, 0x9106, 0x1904, 0x8990, 0x703c, 0x9c06,
+	0x1178, 0x0036, 0x2019, 0x0001, 0x080c, 0x9c35, 0x7033, 0x0000,
+	0x9006, 0x703e, 0x7042, 0x7046, 0x704a, 0x003e, 0x2029, 0x0001,
+	0x7038, 0x9c36, 0x1110, 0x660c, 0x763a, 0x7034, 0x9c36, 0x1140,
+	0x2c00, 0x9f36, 0x0118, 0x2f00, 0x7036, 0x0010, 0x7037, 0x0000,
+	0x660c, 0x0066, 0x2c00, 0x9f06, 0x0110, 0x7e0e, 0x0008, 0x2678,
+	0x600f, 0x0000, 0x080c, 0xc1cd, 0x01f0, 0x6014, 0x2048, 0x6020,
+	0x9086, 0x0003, 0x15b8, 0x6004, 0x9086, 0x0040, 0x090c, 0x9e03,
+	0xa86b, 0x0103, 0xab7e, 0xa87b, 0x0000, 0x0016, 0x0036, 0x0076,
+	0x080c, 0xc4ba, 0x080c, 0xdfcf, 0x080c, 0x6c02, 0x007e, 0x003e,
+	0x001e, 0x080c, 0xc3b4, 0x080c, 0xa3cf, 0x00ce, 0x0804, 0x892f,
+	0x2c78, 0x600c, 0x2060, 0x0804, 0x892f, 0x85ff, 0x0120, 0x0036,
+	0x080c, 0x8f0e, 0x003e, 0x012e, 0x000e, 0x001e, 0x002e, 0x003e,
+	0x005e, 0x006e, 0x007e, 0x009e, 0x00be, 0x00ce, 0x00de, 0x00ee,
+	0x00fe, 0x0005, 0x6020, 0x9086, 0x0006, 0x1158, 0x0016, 0x0036,
+	0x0076, 0x080c, 0xdfcf, 0x080c, 0xdcc3, 0x007e, 0x003e, 0x001e,
+	0x0890, 0x6020, 0x9086, 0x000a, 0x0904, 0x897a, 0x0804, 0x8973,
+	0x0006, 0x0066, 0x0096, 0x00c6, 0x00d6, 0x00f6, 0x9036, 0x0126,
+	0x2091, 0x8000, 0x2079, 0x19c4, 0x7838, 0x9065, 0x0904, 0x8a15,
+	0x600c, 0x0006, 0x600f, 0x0000, 0x783c, 0x9c06, 0x1168, 0x0036,
+	0x2019, 0x0001, 0x080c, 0x9c35, 0x7833, 0x0000, 0x901e, 0x7b3e,
+	0x7b42, 0x7b46, 0x7b4a, 0x003e, 0x080c, 0xc1cd, 0x0548, 0x6014,
+	0x2048, 0x6020, 0x9086, 0x0003, 0x1590, 0x3e08, 0x918e, 0x0002,
+	0x1188, 0x6010, 0x9005, 0x0170, 0x00b6, 0x2058, 0xb800, 0x00be,
+	0xd0bc, 0x0140, 0x6040, 0x9005, 0x11a8, 0x2001, 0x1964, 0x2004,
+	0x6042, 0x0080, 0x6004, 0x9086, 0x0040, 0x090c, 0x9e03, 0xa86b,
+	0x0103, 0xab7e, 0xa87b, 0x0000, 0x080c, 0x6bf5, 0x080c, 0xc3b4,
+	0x080c, 0xa3cf, 0x000e, 0x0804, 0x89cd, 0x7e3a, 0x7e36, 0x012e,
 	0x00fe, 0x00de, 0x00ce, 0x009e, 0x006e, 0x000e, 0x0005, 0x6020,
-	0x9086, 0x0006, 0x1118, 0x080c, 0xd101, 0x0c58, 0x6020, 0x9086,
-	0x000a, 0x0d00, 0x08c0, 0x0016, 0x0026, 0x0086, 0x9046, 0x0099,
-	0x080c, 0x892e, 0x008e, 0x002e, 0x001e, 0x0005, 0x00f6, 0x0126,
-	0x2079, 0x19c4, 0x2091, 0x8000, 0x080c, 0x89c5, 0x080c, 0x8a4f,
+	0x9086, 0x0006, 0x1118, 0x080c, 0xdcc3, 0x0c50, 0x6020, 0x9086,
+	0x000a, 0x09f8, 0x08b8, 0x0016, 0x0026, 0x0086, 0x9046, 0x0099,
+	0x080c, 0x8b16, 0x008e, 0x002e, 0x001e, 0x0005, 0x00f6, 0x0126,
+	0x2079, 0x19c4, 0x2091, 0x8000, 0x080c, 0x8bad, 0x080c, 0x8c3d,
 	0x012e, 0x00fe, 0x0005, 0x00b6, 0x0096, 0x00f6, 0x00e6, 0x00d6,
 	0x00c6, 0x0066, 0x0016, 0x0006, 0x0126, 0x2091, 0x8000, 0x2071,
-	0x19c4, 0x7614, 0x2660, 0x2678, 0x8cff, 0x0904, 0x88f3, 0x6010,
-	0x2058, 0xb8a0, 0x9206, 0x1904, 0x88ee, 0x88ff, 0x0120, 0x6024,
-	0x9106, 0x1904, 0x88ee, 0x7024, 0x9c06, 0x1568, 0x2069, 0x0100,
-	0x6820, 0xd0a4, 0x0110, 0xd0cc, 0x1508, 0x080c, 0x8420, 0x080c,
-	0x9623, 0x68c3, 0x0000, 0x080c, 0x9b30, 0x7027, 0x0000, 0x0036,
+	0x19c4, 0x7614, 0x2660, 0x2678, 0x8cff, 0x0904, 0x8adb, 0x6010,
+	0x2058, 0xb8a0, 0x9206, 0x1904, 0x8ad6, 0x88ff, 0x0120, 0x6054,
+	0x9106, 0x1904, 0x8ad6, 0x7024, 0x9c06, 0x1568, 0x2069, 0x0100,
+	0x6820, 0xd0a4, 0x0110, 0xd0cc, 0x1508, 0x080c, 0x858c, 0x080c,
+	0x98d1, 0x68c3, 0x0000, 0x080c, 0x9e03, 0x7027, 0x0000, 0x0036,
 	0x2069, 0x0140, 0x6b04, 0x9384, 0x1000, 0x0138, 0x2001, 0x0100,
-	0x080c, 0x2b65, 0x9006, 0x080c, 0x2b65, 0x2069, 0x0100, 0x6824,
+	0x080c, 0x2bce, 0x9006, 0x080c, 0x2bce, 0x2069, 0x0100, 0x6824,
 	0xd084, 0x0110, 0x6827, 0x0001, 0x003e, 0x0028, 0x6003, 0x0009,
-	0x630a, 0x0804, 0x88ee, 0x7014, 0x9c36, 0x1110, 0x660c, 0x7616,
+	0x630a, 0x0804, 0x8ad6, 0x7014, 0x9c36, 0x1110, 0x660c, 0x7616,
 	0x7010, 0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118, 0x2f00, 0x7012,
 	0x0010, 0x7013, 0x0000, 0x660c, 0x0066, 0x2c00, 0x9f06, 0x0110,
 	0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000, 0x6014, 0x2048, 0x080c,
-	0xb955, 0x01e8, 0x6020, 0x9086, 0x0003, 0x1580, 0x080c, 0xbb56,
-	0x1118, 0x080c, 0xa717, 0x0098, 0xa86b, 0x0103, 0xab7e, 0xa87b,
-	0x0000, 0x0016, 0x0036, 0x0086, 0x080c, 0xbc3f, 0x080c, 0xd242,
-	0x080c, 0x6b1d, 0x008e, 0x003e, 0x001e, 0x080c, 0xbb39, 0x080c,
-	0x9f42, 0x080c, 0x9a08, 0x00ce, 0x0804, 0x886c, 0x2c78, 0x600c,
-	0x2060, 0x0804, 0x886c, 0x012e, 0x000e, 0x001e, 0x006e, 0x00ce,
+	0xc1cd, 0x01e8, 0x6020, 0x9086, 0x0003, 0x1580, 0x080c, 0xc3d1,
+	0x1118, 0x080c, 0xadb3, 0x0098, 0xa86b, 0x0103, 0xab7e, 0xa87b,
+	0x0000, 0x0016, 0x0036, 0x0086, 0x080c, 0xc4ba, 0x080c, 0xdfcf,
+	0x080c, 0x6c02, 0x008e, 0x003e, 0x001e, 0x080c, 0xc3b4, 0x080c,
+	0xa3cf, 0x080c, 0x9cd9, 0x00ce, 0x0804, 0x8a54, 0x2c78, 0x600c,
+	0x2060, 0x0804, 0x8a54, 0x012e, 0x000e, 0x001e, 0x006e, 0x00ce,
 	0x00de, 0x00ee, 0x00fe, 0x009e, 0x00be, 0x0005, 0x6020, 0x9086,
-	0x0006, 0x1158, 0x0016, 0x0036, 0x0086, 0x080c, 0xd242, 0x080c,
-	0xd101, 0x008e, 0x003e, 0x001e, 0x08d0, 0x080c, 0xa717, 0x6020,
+	0x0006, 0x1158, 0x0016, 0x0036, 0x0086, 0x080c, 0xdfcf, 0x080c,
+	0xdcc3, 0x008e, 0x003e, 0x001e, 0x08d0, 0x080c, 0xadb3, 0x6020,
 	0x9086, 0x0002, 0x1160, 0x6004, 0x0006, 0x9086, 0x0085, 0x000e,
-	0x0904, 0x88d4, 0x9086, 0x008b, 0x0904, 0x88d4, 0x0840, 0x6020,
+	0x0904, 0x8abc, 0x9086, 0x008b, 0x0904, 0x8abc, 0x0840, 0x6020,
 	0x9086, 0x0005, 0x1920, 0x6004, 0x0006, 0x9086, 0x0085, 0x000e,
-	0x09c8, 0x9086, 0x008b, 0x09b0, 0x0804, 0x88e7, 0x00b6, 0x00a6,
+	0x09c8, 0x9086, 0x008b, 0x09b0, 0x0804, 0x8acf, 0x00b6, 0x00a6,
 	0x0096, 0x00c6, 0x0006, 0x0126, 0x2091, 0x8000, 0x9280, 0x1000,
-	0x2004, 0x905d, 0x0904, 0x89be, 0x00f6, 0x00e6, 0x00d6, 0x0066,
+	0x2004, 0x905d, 0x0904, 0x8ba6, 0x00f6, 0x00e6, 0x00d6, 0x0066,
 	0x2071, 0x19c4, 0xbe54, 0x7018, 0x9b06, 0x1108, 0x761a, 0x701c,
 	0x9b06, 0x1130, 0x86ff, 0x1118, 0x7018, 0x701e, 0x0008, 0x761e,
 	0xb858, 0x904d, 0x0108, 0xae56, 0x96d5, 0x0000, 0x0110, 0x2900,
 	0xb05a, 0xb857, 0x0000, 0xb85b, 0x0000, 0xb800, 0xc0d4, 0xc0dc,
-	0xb802, 0x080c, 0x6354, 0x0904, 0x89ba, 0x7624, 0x86ff, 0x0904,
-	0x89a9, 0x9680, 0x0005, 0x2004, 0x9906, 0x15d8, 0x00d6, 0x2069,
-	0x0100, 0x68c0, 0x9005, 0x0560, 0x080c, 0x8420, 0x080c, 0x9623,
-	0x68c3, 0x0000, 0x080c, 0x9b30, 0x7027, 0x0000, 0x0036, 0x2069,
+	0xb802, 0x080c, 0x642a, 0x0904, 0x8ba2, 0x7624, 0x86ff, 0x0904,
+	0x8b91, 0x9680, 0x0005, 0x2004, 0x9906, 0x15d8, 0x00d6, 0x2069,
+	0x0100, 0x68c0, 0x9005, 0x0560, 0x080c, 0x858c, 0x080c, 0x98d1,
+	0x68c3, 0x0000, 0x080c, 0x9e03, 0x7027, 0x0000, 0x0036, 0x2069,
 	0x0140, 0x6b04, 0x9384, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c,
-	0x2b65, 0x9006, 0x080c, 0x2b65, 0x2069, 0x0100, 0x6824, 0xd084,
+	0x2bce, 0x9006, 0x080c, 0x2bce, 0x2069, 0x0100, 0x6824, 0xd084,
 	0x0110, 0x6827, 0x0001, 0x003e, 0x00de, 0x00c6, 0xb83c, 0x9005,
-	0x0110, 0x8001, 0xb83e, 0x2660, 0x080c, 0x9f42, 0x00ce, 0x0048,
+	0x0110, 0x8001, 0xb83e, 0x2660, 0x080c, 0xa3cf, 0x00ce, 0x0048,
 	0x00de, 0x00c6, 0x2660, 0x6003, 0x0009, 0x630a, 0x00ce, 0x0804,
-	0x8961, 0x89ff, 0x0158, 0xa86b, 0x0103, 0xab7e, 0xa87b, 0x0000,
-	0x080c, 0xbc3f, 0x080c, 0xd242, 0x080c, 0x6b1d, 0x080c, 0x9a08,
-	0x0804, 0x8961, 0x006e, 0x00de, 0x00ee, 0x00fe, 0x012e, 0x000e,
+	0x8b49, 0x89ff, 0x0158, 0xa86b, 0x0103, 0xab7e, 0xa87b, 0x0000,
+	0x080c, 0xc4ba, 0x080c, 0xdfcf, 0x080c, 0x6c02, 0x080c, 0x9cd9,
+	0x0804, 0x8b49, 0x006e, 0x00de, 0x00ee, 0x00fe, 0x012e, 0x000e,
 	0x00ce, 0x009e, 0x00ae, 0x00be, 0x0005, 0x0096, 0x0006, 0x0066,
-	0x00c6, 0x00d6, 0x9036, 0x7814, 0x9065, 0x0904, 0x8a22, 0x600c,
-	0x0006, 0x600f, 0x0000, 0x7824, 0x9c06, 0x1568, 0x2069, 0x0100,
-	0x6820, 0xd0a4, 0x0110, 0xd0cc, 0x1508, 0x080c, 0x8420, 0x080c,
-	0x9623, 0x68c3, 0x0000, 0x080c, 0x9b30, 0x7827, 0x0000, 0x0036,
+	0x00c6, 0x00d6, 0x9036, 0x7814, 0x9065, 0x0904, 0x8c10, 0x600c,
+	0x0006, 0x600f, 0x0000, 0x7824, 0x9c06, 0x1580, 0x2069, 0x0100,
+	0x6820, 0xd0a4, 0x0110, 0xd0cc, 0x1508, 0x080c, 0x858c, 0x080c,
+	0x98d1, 0x68c3, 0x0000, 0x080c, 0x9e03, 0x7827, 0x0000, 0x0036,
 	0x2069, 0x0140, 0x6b04, 0x9384, 0x1000, 0x0138, 0x2001, 0x0100,
-	0x080c, 0x2b65, 0x9006, 0x080c, 0x2b65, 0x2069, 0x0100, 0x6824,
-	0xd084, 0x0110, 0x6827, 0x0001, 0x003e, 0x0028, 0x6003, 0x0009,
-	0x630a, 0x2c30, 0x00e0, 0x6014, 0x2048, 0x080c, 0xb953, 0x0198,
-	0x6020, 0x9086, 0x0003, 0x11f0, 0x080c, 0xbb56, 0x1118, 0x080c,
-	0xa717, 0x0048, 0xa86b, 0x0103, 0xab7e, 0xa87b, 0x0000, 0x080c,
-	0x6b1d, 0x080c, 0xbb39, 0x080c, 0x9f42, 0x080c, 0x9a08, 0x000e,
-	0x0804, 0x89cc, 0x7e16, 0x7e12, 0x00de, 0x00ce, 0x006e, 0x000e,
-	0x009e, 0x0005, 0x6020, 0x9086, 0x0006, 0x1118, 0x080c, 0xd101,
-	0x0c50, 0x080c, 0xa717, 0x6020, 0x9086, 0x0002, 0x1150, 0x6004,
-	0x0006, 0x9086, 0x0085, 0x000e, 0x09a8, 0x9086, 0x008b, 0x0990,
-	0x08d0, 0x6020, 0x9086, 0x0005, 0x19b0, 0x6004, 0x0006, 0x9086,
-	0x0085, 0x000e, 0x0d18, 0x9086, 0x008b, 0x0d00, 0x0860, 0x0006,
-	0x0066, 0x0096, 0x00b6, 0x00c6, 0x00d6, 0x7818, 0x905d, 0x0904,
-	0x8abc, 0xb854, 0x0006, 0x9006, 0xb856, 0xb85a, 0xb800, 0xc0d4,
-	0xc0dc, 0xb802, 0x080c, 0x6354, 0x0904, 0x8ab9, 0x7e24, 0x86ff,
-	0x0904, 0x8aac, 0x9680, 0x0005, 0x2004, 0x9906, 0x15e8, 0x00d6,
-	0x2069, 0x0100, 0x68c0, 0x9005, 0x0570, 0x080c, 0x8420, 0x080c,
-	0x9623, 0x68c3, 0x0000, 0x080c, 0x9b30, 0x7827, 0x0000, 0x0036,
+	0x080c, 0x2bce, 0x9006, 0x080c, 0x2bce, 0x2069, 0x0100, 0x6824,
+	0xd084, 0x0110, 0x6827, 0x0001, 0x003e, 0x0040, 0x080c, 0x6823,
+	0x1520, 0x6003, 0x0009, 0x630a, 0x2c30, 0x00f8, 0x6014, 0x2048,
+	0x080c, 0xc1cb, 0x01b0, 0x6020, 0x9086, 0x0003, 0x1508, 0x080c,
+	0xc3d1, 0x1118, 0x080c, 0xadb3, 0x0060, 0x080c, 0x6823, 0x1168,
+	0xa86b, 0x0103, 0xab7e, 0xa87b, 0x0000, 0x080c, 0x6c02, 0x080c,
+	0xc3b4, 0x080c, 0xa3cf, 0x080c, 0x9cd9, 0x000e, 0x0804, 0x8bb4,
+	0x7e16, 0x7e12, 0x00de, 0x00ce, 0x006e, 0x000e, 0x009e, 0x0005,
+	0x6020, 0x9086, 0x0006, 0x1118, 0x080c, 0xdcc3, 0x0c50, 0x080c,
+	0xadb3, 0x6020, 0x9086, 0x0002, 0x1150, 0x6004, 0x0006, 0x9086,
+	0x0085, 0x000e, 0x0990, 0x9086, 0x008b, 0x0978, 0x08d0, 0x6020,
+	0x9086, 0x0005, 0x19b0, 0x6004, 0x0006, 0x9086, 0x0085, 0x000e,
+	0x0d18, 0x9086, 0x008b, 0x0d00, 0x0860, 0x0006, 0x0066, 0x0096,
+	0x00b6, 0x00c6, 0x00d6, 0x7818, 0x905d, 0x0904, 0x8cbd, 0xb854,
+	0x0006, 0x9006, 0xb856, 0xb85a, 0xb800, 0xc0d4, 0xc0dc, 0xb802,
+	0x080c, 0x642a, 0x0904, 0x8cba, 0x7e24, 0x86ff, 0x0904, 0x8cad,
+	0x9680, 0x0005, 0x2004, 0x9906, 0x1904, 0x8cad, 0x00d6, 0x2069,
+	0x0100, 0x68c0, 0x9005, 0x0904, 0x8ca4, 0x080c, 0x858c, 0x080c,
+	0x98d1, 0x68c3, 0x0000, 0x080c, 0x9e03, 0x7827, 0x0000, 0x0036,
 	0x2069, 0x0140, 0x6b04, 0x9384, 0x1000, 0x0138, 0x2001, 0x0100,
-	0x080c, 0x2b65, 0x9006, 0x080c, 0x2b65, 0x2069, 0x0100, 0x6824,
-	0xd084, 0x0110, 0x6827, 0x0001, 0x003e, 0x00de, 0x00c6, 0xb83c,
-	0x9005, 0x0110, 0x8001, 0xb83e, 0x2660, 0x600f, 0x0000, 0x080c,
-	0x9f42, 0x00ce, 0x0048, 0x00de, 0x00c6, 0x2660, 0x6003, 0x0009,
-	0x630a, 0x00ce, 0x0804, 0x8a62, 0x89ff, 0x0138, 0xa86b, 0x0103,
-	0xab7e, 0xa87b, 0x0000, 0x080c, 0x6b1d, 0x080c, 0x9a08, 0x0804,
-	0x8a62, 0x000e, 0x0804, 0x8a56, 0x781e, 0x781a, 0x00de, 0x00ce,
-	0x00be, 0x009e, 0x006e, 0x000e, 0x0005, 0x00e6, 0x00d6, 0x0096,
-	0x0066, 0xb800, 0xd0dc, 0x01a0, 0xb84c, 0x904d, 0x0188, 0xa87c,
-	0x9606, 0x1170, 0x2071, 0x19c4, 0x7024, 0x9035, 0x0148, 0x9080,
-	0x0005, 0x2004, 0x9906, 0x1120, 0xb800, 0xc0dc, 0xb802, 0x0029,
-	0x006e, 0x009e, 0x00de, 0x00ee, 0x0005, 0x00f6, 0x2079, 0x0100,
-	0x78c0, 0x9005, 0x1138, 0x00c6, 0x2660, 0x6003, 0x0009, 0x630a,
-	0x00ce, 0x04b8, 0x080c, 0x9623, 0x78c3, 0x0000, 0x080c, 0x9b30,
-	0x7027, 0x0000, 0x0036, 0x2079, 0x0140, 0x7b04, 0x9384, 0x1000,
-	0x0138, 0x2001, 0x0100, 0x080c, 0x2b65, 0x9006, 0x080c, 0x2b65,
-	0x2079, 0x0100, 0x7824, 0xd084, 0x0110, 0x7827, 0x0001, 0x080c,
-	0x9b30, 0x003e, 0x080c, 0x6354, 0x00c6, 0xb83c, 0x9005, 0x0110,
-	0x8001, 0xb83e, 0x2660, 0x080c, 0x9f18, 0x00ce, 0xa86b, 0x0103,
-	0xab7e, 0xa87b, 0x0000, 0x080c, 0xbc3f, 0x080c, 0x6b1d, 0x080c,
-	0x9a08, 0x00fe, 0x0005, 0x00b6, 0x00e6, 0x00c6, 0x2011, 0x0101,
-	0x2204, 0xc0c4, 0x2012, 0x2001, 0x180c, 0x2014, 0xc2e4, 0x2202,
-	0x2071, 0x19c4, 0x7004, 0x9084, 0x0007, 0x0002, 0x8b48, 0x8b4c,
-	0x8b6a, 0x8b93, 0x8bd1, 0x8b48, 0x8b63, 0x8b46, 0x080c, 0x0dc4,
-	0x00ce, 0x00ee, 0x00be, 0x0005, 0x7024, 0x9065, 0x0148, 0x7020,
-	0x8001, 0x7022, 0x600c, 0x9015, 0x0158, 0x7216, 0x600f, 0x0000,
-	0x7007, 0x0000, 0x7027, 0x0000, 0x00ce, 0x00ee, 0x00be, 0x0005,
-	0x7216, 0x7212, 0x0ca8, 0x7007, 0x0000, 0x7027, 0x0000, 0x7020,
-	0x9005, 0x0070, 0x6010, 0x2058, 0x080c, 0x6354, 0xb800, 0xc0dc,
-	0xb802, 0x7007, 0x0000, 0x7027, 0x0000, 0x7020, 0x8001, 0x7022,
-	0x1148, 0x2001, 0x180c, 0x2014, 0xd2ec, 0x1180, 0x00ce, 0x00ee,
-	0x00be, 0x0005, 0xb854, 0x9015, 0x0120, 0x721e, 0x080c, 0x8c37,
-	0x0ca8, 0x7218, 0x721e, 0x080c, 0x8c37, 0x0c80, 0xc2ec, 0x2202,
-	0x080c, 0x8d06, 0x0c58, 0x7024, 0x9065, 0x05b8, 0x700c, 0x9c06,
-	0x1160, 0x080c, 0x9a08, 0x600c, 0x9015, 0x0120, 0x720e, 0x600f,
-	0x0000, 0x0448, 0x720e, 0x720a, 0x0430, 0x7014, 0x9c06, 0x1160,
-	0x080c, 0x9a08, 0x600c, 0x9015, 0x0120, 0x7216, 0x600f, 0x0000,
-	0x00d0, 0x7216, 0x7212, 0x00b8, 0x6020, 0x9086, 0x0003, 0x1198,
-	0x6010, 0x2058, 0x080c, 0x6354, 0xb800, 0xc0dc, 0xb802, 0x080c,
-	0x9a08, 0x701c, 0x9065, 0x0138, 0xb854, 0x9015, 0x0110, 0x721e,
-	0x0010, 0x7218, 0x721e, 0x7027, 0x0000, 0x00ce, 0x00ee, 0x00be,
-	0x0005, 0x7024, 0x9065, 0x0140, 0x080c, 0x9a08, 0x600c, 0x9015,
-	0x0158, 0x720e, 0x600f, 0x0000, 0x080c, 0x9b30, 0x7027, 0x0000,
-	0x00ce, 0x00ee, 0x00be, 0x0005, 0x720e, 0x720a, 0x0ca8, 0x00d6,
-	0x2069, 0x19c4, 0x6830, 0x9084, 0x0003, 0x0002, 0x8bf4, 0x8bf6,
-	0x8c1a, 0x8bf2, 0x080c, 0x0dc4, 0x00de, 0x0005, 0x00c6, 0x6840,
-	0x9086, 0x0001, 0x01b8, 0x683c, 0x9065, 0x0130, 0x600c, 0x9015,
-	0x0170, 0x6a3a, 0x600f, 0x0000, 0x6833, 0x0000, 0x683f, 0x0000,
-	0x2011, 0x19e3, 0x2013, 0x0000, 0x00ce, 0x00de, 0x0005, 0x683a,
-	0x6836, 0x0c90, 0x6843, 0x0000, 0x6838, 0x9065, 0x0d68, 0x6003,
-	0x0003, 0x0c50, 0x00c6, 0x9006, 0x6842, 0x6846, 0x684a, 0x683c,
-	0x9065, 0x0160, 0x600c, 0x9015, 0x0130, 0x6a3a, 0x600f, 0x0000,
-	0x683f, 0x0000, 0x0018, 0x683e, 0x683a, 0x6836, 0x00ce, 0x00de,
-	0x0005, 0x2001, 0x180c, 0x200c, 0xc1e5, 0x2102, 0x0005, 0x2001,
-	0x180c, 0x200c, 0xd1ec, 0x0120, 0xc1ec, 0x2102, 0x080c, 0x8d06,
-	0x2001, 0x19d0, 0x2004, 0x9086, 0x0001, 0x0d58, 0x00d6, 0x2069,
-	0x19c4, 0x6804, 0x9084, 0x0007, 0x0002, 0x8c57, 0x8cee, 0x8cee,
-	0x8cee, 0x8cee, 0x8cf0, 0x8cee, 0x8c55, 0x080c, 0x0dc4, 0x6820,
-	0x9005, 0x1110, 0x00de, 0x0005, 0x00c6, 0x680c, 0x9065, 0x0150,
-	0x6807, 0x0004, 0x6826, 0x682b, 0x0000, 0x080c, 0x8d5d, 0x00ce,
-	0x00de, 0x0005, 0x6814, 0x9065, 0x0150, 0x6807, 0x0001, 0x6826,
-	0x682b, 0x0000, 0x080c, 0x8d5d, 0x00ce, 0x00de, 0x0005, 0x00b6,
-	0x00e6, 0x6a1c, 0x92dd, 0x0000, 0x0904, 0x8cd8, 0xb84c, 0x900d,
-	0x0118, 0xb888, 0x9005, 0x01a0, 0xb854, 0x905d, 0x0120, 0x920e,
-	0x0904, 0x8cd8, 0x0028, 0x6818, 0x920e, 0x0904, 0x8cd8, 0x2058,
-	0xb84c, 0x900d, 0x0d88, 0xb888, 0x9005, 0x1d70, 0x2b00, 0x681e,
-	0xbb3c, 0xb838, 0x9302, 0x1e40, 0x080c, 0x9eef, 0x05c8, 0x8318,
-	0xbb3e, 0x6116, 0x2b10, 0x6212, 0x0096, 0x2148, 0xab64, 0xa867,
+	0x080c, 0x2bce, 0x9006, 0x080c, 0x2bce, 0x2069, 0x0100, 0x6824,
+	0xd084, 0x0110, 0x6827, 0x0001, 0x003e, 0x00de, 0x00c6, 0x3e08,
+	0x918e, 0x0002, 0x1168, 0xb800, 0xd0bc, 0x0150, 0x9680, 0x0010,
+	0x200c, 0x81ff, 0x1518, 0x2009, 0x1964, 0x210c, 0x2102, 0x00f0,
+	0xb83c, 0x9005, 0x0110, 0x8001, 0xb83e, 0x2660, 0x600f, 0x0000,
+	0x080c, 0xa3cf, 0x00ce, 0x0048, 0x00de, 0x00c6, 0x2660, 0x6003,
+	0x0009, 0x630a, 0x00ce, 0x0804, 0x8c50, 0x89ff, 0x0138, 0xa86b,
+	0x0103, 0xab7e, 0xa87b, 0x0000, 0x080c, 0x6c02, 0x080c, 0x9cd9,
+	0x0804, 0x8c50, 0x000e, 0x0804, 0x8c44, 0x781e, 0x781a, 0x00de,
+	0x00ce, 0x00be, 0x009e, 0x006e, 0x000e, 0x0005, 0x00e6, 0x00d6,
+	0x0096, 0x0066, 0xb800, 0xd0dc, 0x01a0, 0xb84c, 0x904d, 0x0188,
+	0xa87c, 0x9606, 0x1170, 0x2071, 0x19c4, 0x7024, 0x9035, 0x0148,
+	0x9080, 0x0005, 0x2004, 0x9906, 0x1120, 0xb800, 0xc0dc, 0xb802,
+	0x0029, 0x006e, 0x009e, 0x00de, 0x00ee, 0x0005, 0x00f6, 0x2079,
+	0x0100, 0x78c0, 0x9005, 0x1138, 0x00c6, 0x2660, 0x6003, 0x0009,
+	0x630a, 0x00ce, 0x04b8, 0x080c, 0x98d1, 0x78c3, 0x0000, 0x080c,
+	0x9e03, 0x7027, 0x0000, 0x0036, 0x2079, 0x0140, 0x7b04, 0x9384,
+	0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x2bce, 0x9006, 0x080c,
+	0x2bce, 0x2079, 0x0100, 0x7824, 0xd084, 0x0110, 0x7827, 0x0001,
+	0x080c, 0x9e03, 0x003e, 0x080c, 0x642a, 0x00c6, 0xb83c, 0x9005,
+	0x0110, 0x8001, 0xb83e, 0x2660, 0x080c, 0xa39d, 0x00ce, 0xa86b,
+	0x0103, 0xab7e, 0xa87b, 0x0000, 0x080c, 0xc4ba, 0x080c, 0x6c02,
+	0x080c, 0x9cd9, 0x00fe, 0x0005, 0x00b6, 0x00e6, 0x00c6, 0x2011,
+	0x0101, 0x2204, 0xc0c4, 0x2012, 0x2001, 0x180c, 0x2014, 0xc2e4,
+	0x2202, 0x2071, 0x19c4, 0x7004, 0x9084, 0x0007, 0x0002, 0x8d49,
+	0x8d4d, 0x8d6b, 0x8d94, 0x8dd2, 0x8d49, 0x8d64, 0x8d47, 0x080c,
+	0x0dc3, 0x00ce, 0x00ee, 0x00be, 0x0005, 0x7024, 0x9065, 0x0148,
+	0x7020, 0x8001, 0x7022, 0x600c, 0x9015, 0x0158, 0x7216, 0x600f,
+	0x0000, 0x7007, 0x0000, 0x7027, 0x0000, 0x00ce, 0x00ee, 0x00be,
+	0x0005, 0x7216, 0x7212, 0x0ca8, 0x7007, 0x0000, 0x7027, 0x0000,
+	0x7020, 0x9005, 0x0070, 0x6010, 0x2058, 0x080c, 0x642a, 0xb800,
+	0xc0dc, 0xb802, 0x7007, 0x0000, 0x7027, 0x0000, 0x7020, 0x8001,
+	0x7022, 0x1148, 0x2001, 0x180c, 0x2014, 0xd2ec, 0x1180, 0x00ce,
+	0x00ee, 0x00be, 0x0005, 0xb854, 0x9015, 0x0120, 0x721e, 0x080c,
+	0x8e38, 0x0ca8, 0x7218, 0x721e, 0x080c, 0x8e38, 0x0c80, 0xc2ec,
+	0x2202, 0x080c, 0x8f0e, 0x0c58, 0x7024, 0x9065, 0x05b8, 0x700c,
+	0x9c06, 0x1160, 0x080c, 0x9cd9, 0x600c, 0x9015, 0x0120, 0x720e,
+	0x600f, 0x0000, 0x0448, 0x720e, 0x720a, 0x0430, 0x7014, 0x9c06,
+	0x1160, 0x080c, 0x9cd9, 0x600c, 0x9015, 0x0120, 0x7216, 0x600f,
+	0x0000, 0x00d0, 0x7216, 0x7212, 0x00b8, 0x6020, 0x9086, 0x0003,
+	0x1198, 0x6010, 0x2058, 0x080c, 0x642a, 0xb800, 0xc0dc, 0xb802,
+	0x080c, 0x9cd9, 0x701c, 0x9065, 0x0138, 0xb854, 0x9015, 0x0110,
+	0x721e, 0x0010, 0x7218, 0x721e, 0x7027, 0x0000, 0x00ce, 0x00ee,
+	0x00be, 0x0005, 0x7024, 0x9065, 0x0140, 0x080c, 0x9cd9, 0x600c,
+	0x9015, 0x0158, 0x720e, 0x600f, 0x0000, 0x080c, 0x9e03, 0x7027,
+	0x0000, 0x00ce, 0x00ee, 0x00be, 0x0005, 0x720e, 0x720a, 0x0ca8,
+	0x00d6, 0x2069, 0x19c4, 0x6830, 0x9084, 0x0003, 0x0002, 0x8df5,
+	0x8df7, 0x8e1b, 0x8df3, 0x080c, 0x0dc3, 0x00de, 0x0005, 0x00c6,
+	0x6840, 0x9086, 0x0001, 0x01b8, 0x683c, 0x9065, 0x0130, 0x600c,
+	0x9015, 0x0170, 0x6a3a, 0x600f, 0x0000, 0x6833, 0x0000, 0x683f,
+	0x0000, 0x2011, 0x19e3, 0x2013, 0x0000, 0x00ce, 0x00de, 0x0005,
+	0x683a, 0x6836, 0x0c90, 0x6843, 0x0000, 0x6838, 0x9065, 0x0d68,
+	0x6003, 0x0003, 0x0c50, 0x00c6, 0x9006, 0x6842, 0x6846, 0x684a,
+	0x683c, 0x9065, 0x0160, 0x600c, 0x9015, 0x0130, 0x6a3a, 0x600f,
+	0x0000, 0x683f, 0x0000, 0x0018, 0x683e, 0x683a, 0x6836, 0x00ce,
+	0x00de, 0x0005, 0x2001, 0x180c, 0x200c, 0xc1e5, 0x2102, 0x0005,
+	0x2001, 0x180c, 0x200c, 0xd1ec, 0x0120, 0xc1ec, 0x2102, 0x080c,
+	0x8f0e, 0x2001, 0x19d0, 0x2004, 0x9086, 0x0001, 0x0d58, 0x00d6,
+	0x2069, 0x19c4, 0x6804, 0x9084, 0x0007, 0x0002, 0x8e58, 0x8ef6,
+	0x8ef6, 0x8ef6, 0x8ef6, 0x8ef8, 0x8ef6, 0x8e56, 0x080c, 0x0dc3,
+	0x6820, 0x9005, 0x1110, 0x00de, 0x0005, 0x00c6, 0x680c, 0x9065,
+	0x0150, 0x6807, 0x0004, 0x6826, 0x682b, 0x0000, 0x080c, 0x8f65,
+	0x00ce, 0x00de, 0x0005, 0x6814, 0x9065, 0x0150, 0x6807, 0x0001,
+	0x6826, 0x682b, 0x0000, 0x080c, 0x8f65, 0x00ce, 0x00de, 0x0005,
+	0x00b6, 0x00e6, 0x6a1c, 0x92dd, 0x0000, 0x0904, 0x8ee0, 0xb84c,
+	0x900d, 0x0118, 0xb888, 0x9005, 0x01a0, 0xb854, 0x905d, 0x0120,
+	0x920e, 0x0904, 0x8ee0, 0x0028, 0x6818, 0x920e, 0x0904, 0x8ee0,
+	0x2058, 0xb84c, 0x900d, 0x0d88, 0xb888, 0x9005, 0x1d70, 0x2b00,
+	0x681e, 0xbb3c, 0xb838, 0x9302, 0x1e40, 0x080c, 0xa374, 0x0904,
+	0x8ee0, 0x8318, 0xbb3e, 0x6116, 0x2b10, 0x6212, 0x0096, 0x2148,
+	0xa884, 0x9084, 0x00ff, 0x605e, 0xa887, 0x0000, 0xab64, 0xa867,
 	0x0000, 0x009e, 0x631a, 0x6114, 0x0096, 0x2148, 0xa968, 0x009e,
 	0x918c, 0x00ff, 0x918e, 0x0048, 0x0538, 0x00f6, 0x2c78, 0x2061,
-	0x0100, 0xbaac, 0x629a, 0x2069, 0x0200, 0x2071, 0x0240, 0x080c,
-	0x92c9, 0x2069, 0x19c4, 0xbb00, 0xc3dd, 0xbb02, 0x6807, 0x0002,
+	0x0100, 0xbab0, 0x629a, 0x2069, 0x0200, 0x2071, 0x0240, 0x080c,
+	0x94f6, 0x2069, 0x19c4, 0xbb00, 0xc3dd, 0xbb02, 0x6807, 0x0002,
 	0x2f18, 0x6b26, 0x682b, 0x0000, 0x7823, 0x0003, 0x7803, 0x0001,
 	0x7807, 0x0040, 0x00fe, 0x00ee, 0x00be, 0x00ce, 0x00de, 0x0005,
 	0x00ee, 0x00be, 0x00ce, 0x0cd0, 0x6807, 0x0006, 0x2c18, 0x6b26,
-	0x6820, 0x8001, 0x6822, 0x682b, 0x0000, 0x080c, 0x6354, 0x080c,
-	0x9d2f, 0x00ee, 0x00be, 0x00ce, 0x00de, 0x0005, 0x00de, 0x0005,
+	0x6820, 0x8001, 0x6822, 0x682b, 0x0000, 0x080c, 0x642a, 0x080c,
+	0xa1b4, 0x00ee, 0x00be, 0x00ce, 0x00de, 0x0005, 0x00de, 0x0005,
 	0x00c6, 0x680c, 0x9065, 0x0138, 0x6807, 0x0004, 0x6826, 0x682b,
-	0x0000, 0x080c, 0x8d5d, 0x00ce, 0x00de, 0x0005, 0x2001, 0x180c,
+	0x0000, 0x080c, 0x8f65, 0x00ce, 0x00de, 0x0005, 0x2001, 0x180c,
 	0x2014, 0xc2ed, 0x2202, 0x00de, 0x00fe, 0x0005, 0x00f6, 0x00d6,
 	0x2069, 0x19c4, 0x6830, 0x9086, 0x0000, 0x1548, 0x2001, 0x180c,
-	0x2014, 0xd2e4, 0x0130, 0xc2e4, 0x2202, 0x080c, 0x8c46, 0x2069,
+	0x2014, 0xd2e4, 0x0130, 0xc2e4, 0x2202, 0x080c, 0x8e47, 0x2069,
 	0x19c4, 0x2001, 0x180c, 0x200c, 0xd1c4, 0x11e0, 0x6838, 0x907d,
 	0x01b0, 0x6a04, 0x9296, 0x0000, 0x1568, 0x6833, 0x0001, 0x683e,
 	0x6847, 0x0000, 0x684b, 0x0000, 0x0126, 0x00f6, 0x2091, 0x2400,
-	0x002e, 0x080c, 0x1b2e, 0x1158, 0x012e, 0x080c, 0x94a3, 0x00de,
-	0x00fe, 0x0005, 0xc1c4, 0x2102, 0x080c, 0x7393, 0x08f8, 0x012e,
+	0x002e, 0x080c, 0x1b76, 0x1158, 0x012e, 0x080c, 0x972e, 0x00de,
+	0x00fe, 0x0005, 0xc1c4, 0x2102, 0x080c, 0x73fe, 0x08f8, 0x012e,
 	0x6843, 0x0000, 0x7803, 0x0002, 0x780c, 0x9015, 0x0140, 0x6a3a,
 	0x780f, 0x0000, 0x6833, 0x0000, 0x683f, 0x0000, 0x0c40, 0x683a,
-	0x6836, 0x0cc0, 0x6a04, 0x9296, 0x0006, 0x1904, 0x8cfe, 0x6a30,
-	0x9296, 0x0000, 0x0950, 0x0804, 0x8cfe, 0x6020, 0x9084, 0x000f,
-	0x000b, 0x0005, 0x8d71, 0x8d76, 0x91f9, 0x9292, 0x8d76, 0x91f9,
-	0x9292, 0x8d71, 0x8d76, 0x8d71, 0x8d71, 0x8d71, 0x8d71, 0x8d71,
-	0x8d71, 0x080c, 0x8b2b, 0x080c, 0x8c37, 0x0005, 0x00b6, 0x0156,
+	0x6836, 0x0cc0, 0x6a04, 0x9296, 0x0006, 0x1904, 0x8f06, 0x6a30,
+	0x9296, 0x0000, 0x0950, 0x0804, 0x8f06, 0x6020, 0x9084, 0x000f,
+	0x000b, 0x0005, 0x8f79, 0x8f7e, 0x9426, 0x94bf, 0x8f7e, 0x9426,
+	0x94bf, 0x8f79, 0x8f7e, 0x8f79, 0x8f79, 0x8f79, 0x8f79, 0x8f79,
+	0x8f79, 0x080c, 0x8d2c, 0x080c, 0x8e38, 0x0005, 0x00b6, 0x0156,
 	0x0136, 0x0146, 0x01c6, 0x01d6, 0x00c6, 0x00d6, 0x00e6, 0x00f6,
 	0x2069, 0x0200, 0x2071, 0x0240, 0x6004, 0x908a, 0x0054, 0x1a0c,
-	0x0dc4, 0x6110, 0x2158, 0xb9ac, 0x2c78, 0x2061, 0x0100, 0x619a,
-	0x908a, 0x0040, 0x1a04, 0x8de2, 0x005b, 0x00fe, 0x00ee, 0x00de,
+	0x0dc3, 0x6110, 0x2158, 0xb9b0, 0x2c78, 0x2061, 0x0100, 0x619a,
+	0x908a, 0x0040, 0x1a04, 0x8fea, 0x005b, 0x00fe, 0x00ee, 0x00de,
 	0x00ce, 0x01de, 0x01ce, 0x014e, 0x013e, 0x015e, 0x00be, 0x0005,
-	0x8f7f, 0x8fba, 0x8fe3, 0x90a7, 0x90c6, 0x90cc, 0x90d6, 0x90de,
-	0x90ea, 0x90f0, 0x9101, 0x90f0, 0x9140, 0x90de, 0x914c, 0x9152,
-	0x90ea, 0x9152, 0x915e, 0x8de0, 0x8de0, 0x8de0, 0x8de0, 0x8de0,
-	0x8de0, 0x8de0, 0x8de0, 0x8de0, 0x8de0, 0x8de0, 0x8de0, 0x983e,
-	0x984f, 0x986f, 0x98a1, 0x90d6, 0x8de0, 0x90d6, 0x90f0, 0x8de0,
-	0x8fe3, 0x90a7, 0x8de0, 0x9c27, 0x90f0, 0x8de0, 0x9c43, 0x90f0,
-	0x8de0, 0x90ea, 0x8f79, 0x8e05, 0x8de0, 0x8de0, 0x8de0, 0x8de0,
-	0x8de0, 0x8de0, 0x8de0, 0x8de0, 0x8de0, 0x98ab, 0x9c79, 0x8de0,
-	0x080c, 0x0dc4, 0x2100, 0x005b, 0x00fe, 0x00ee, 0x00de, 0x00ce,
-	0x01de, 0x01ce, 0x014e, 0x013e, 0x015e, 0x00be, 0x0005, 0x8e03,
-	0x8e03, 0x8e03, 0x8e3d, 0x8ee9, 0x8ef4, 0x8e03, 0x8e03, 0x8e03,
-	0x8f4e, 0x8f5a, 0x8e58, 0x8e03, 0x8e73, 0x8ea7, 0x9df6, 0x9e3b,
-	0x90f0, 0x8e03, 0x9c5f, 0x080c, 0x0dc4, 0x00d6, 0x0096, 0x080c,
-	0x9171, 0x0026, 0x0036, 0x7814, 0x2048, 0xa958, 0xd1cc, 0x1138,
+	0x9187, 0x91c2, 0x91eb, 0x92b5, 0x92d7, 0x92dd, 0x92ea, 0x92f2,
+	0x92fe, 0x9304, 0x9315, 0x9304, 0x936d, 0x92f2, 0x9379, 0x937f,
+	0x92fe, 0x937f, 0x938b, 0x8fe8, 0x8fe8, 0x8fe8, 0x8fe8, 0x8fe8,
+	0x8fe8, 0x8fe8, 0x8fe8, 0x8fe8, 0x8fe8, 0x8fe8, 0x9aec, 0x9b0f,
+	0x9b20, 0x9b40, 0x9b72, 0x92ea, 0x8fe8, 0x92ea, 0x9304, 0x8fe8,
+	0x91eb, 0x92b5, 0x8fe8, 0x9efa, 0x9304, 0x8fe8, 0x9f16, 0x9304,
+	0x8fe8, 0x92fe, 0x9181, 0x900d, 0x8fe8, 0x9f32, 0x9f9f, 0xa07a,
+	0x8fe8, 0xa087, 0x92e7, 0xa0b2, 0x8fe8, 0x9b7c, 0xa0f9, 0x8fe8,
+	0x080c, 0x0dc3, 0x2100, 0x005b, 0x00fe, 0x00ee, 0x00de, 0x00ce,
+	0x01de, 0x01ce, 0x014e, 0x013e, 0x015e, 0x00be, 0x0005, 0x900b,
+	0x900b, 0x900b, 0x9045, 0x90f1, 0x90fc, 0x900b, 0x900b, 0x900b,
+	0x9156, 0x9162, 0x9060, 0x900b, 0x907b, 0x90af, 0xa27b, 0xa2c0,
+	0x9304, 0x900b, 0xa0df, 0x080c, 0x0dc3, 0x00d6, 0x0096, 0x080c,
+	0x939e, 0x0026, 0x0036, 0x7814, 0x2048, 0xa958, 0xd1cc, 0x1138,
 	0x2009, 0x2414, 0x2011, 0x0018, 0x2019, 0x0018, 0x0030, 0x2009,
 	0x2410, 0x2011, 0x0014, 0x2019, 0x0014, 0x7102, 0x7206, 0x700b,
 	0x0800, 0xa83c, 0x700e, 0xa850, 0x7022, 0xa854, 0x7026, 0x63c2,
-	0x080c, 0x95f7, 0x003e, 0x002e, 0x009e, 0x00de, 0x0005, 0x7810,
-	0x00b6, 0x2058, 0xb8a0, 0x00be, 0x080c, 0x9e82, 0x1118, 0x9084,
+	0x080c, 0x98a5, 0x003e, 0x002e, 0x009e, 0x00de, 0x0005, 0x7810,
+	0x00b6, 0x2058, 0xb8a0, 0x00be, 0x080c, 0xa307, 0x1118, 0x9084,
 	0xff80, 0x0110, 0x9085, 0x0001, 0x0005, 0x00d6, 0x0096, 0x080c,
-	0x9171, 0x7003, 0x0500, 0x7814, 0x2048, 0xa878, 0x700a, 0xa87c,
+	0x939e, 0x7003, 0x0500, 0x7814, 0x2048, 0xa878, 0x700a, 0xa87c,
 	0x700e, 0xa880, 0x7012, 0xa884, 0x7016, 0xa888, 0x701a, 0xa88c,
-	0x701e, 0x60c3, 0x0010, 0x080c, 0x95f7, 0x009e, 0x00de, 0x0005,
-	0x00d6, 0x0096, 0x080c, 0x9171, 0x7003, 0x0500, 0x7814, 0x2048,
+	0x701e, 0x60c3, 0x0010, 0x080c, 0x98a5, 0x009e, 0x00de, 0x0005,
+	0x00d6, 0x0096, 0x080c, 0x939e, 0x7003, 0x0500, 0x7814, 0x2048,
 	0xa8d0, 0x700a, 0xa8d4, 0x700e, 0xa8d8, 0x7012, 0xa8dc, 0x7016,
-	0xa8e0, 0x701a, 0xa8e4, 0x701e, 0x60c3, 0x0010, 0x080c, 0x95f7,
+	0xa8e0, 0x701a, 0xa8e4, 0x701e, 0x60c3, 0x0010, 0x080c, 0x98a5,
 	0x009e, 0x00de, 0x0005, 0x00d6, 0x0096, 0x0126, 0x2091, 0x8000,
-	0x080c, 0x9171, 0x20e9, 0x0000, 0x2001, 0x1980, 0x2003, 0x0000,
+	0x080c, 0x939e, 0x20e9, 0x0000, 0x2001, 0x1980, 0x2003, 0x0000,
 	0x7814, 0x2048, 0xa814, 0x8003, 0x60c2, 0xa830, 0x20a8, 0xa860,
 	0x20e0, 0xa85c, 0x9080, 0x001c, 0x2098, 0x2001, 0x1980, 0x0016,
-	0x200c, 0x2001, 0x0001, 0x080c, 0x2297, 0x080c, 0xc491, 0x9006,
-	0x080c, 0x2297, 0x001e, 0xa804, 0x9005, 0x0110, 0x2048, 0x0c28,
-	0x04d9, 0x080c, 0x95f7, 0x012e, 0x009e, 0x00de, 0x0005, 0x00d6,
-	0x0096, 0x0126, 0x2091, 0x8000, 0x080c, 0x91bc, 0x20e9, 0x0000,
+	0x200c, 0x2001, 0x0001, 0x080c, 0x22df, 0x080c, 0xcf91, 0x9006,
+	0x080c, 0x22df, 0x001e, 0xa804, 0x9005, 0x0110, 0x2048, 0x0c28,
+	0x04d9, 0x080c, 0x98a5, 0x012e, 0x009e, 0x00de, 0x0005, 0x00d6,
+	0x0096, 0x0126, 0x2091, 0x8000, 0x080c, 0x93e9, 0x20e9, 0x0000,
 	0x2001, 0x1980, 0x2003, 0x0000, 0x7814, 0x2048, 0xa873, 0x0200,
 	0xa877, 0x0000, 0xa814, 0x8003, 0x60c2, 0xa830, 0x20a8, 0xa860,
 	0x20e0, 0xa85c, 0x9080, 0x001c, 0x2098, 0x2001, 0x1980, 0x0016,
-	0x200c, 0x080c, 0xc491, 0x001e, 0xa804, 0x9005, 0x0110, 0x2048,
-	0x0c60, 0x0051, 0x7814, 0x2048, 0x080c, 0x0fb3, 0x080c, 0x95f7,
+	0x200c, 0x080c, 0xcf91, 0x001e, 0xa804, 0x9005, 0x0110, 0x2048,
+	0x0c60, 0x0051, 0x7814, 0x2048, 0x080c, 0x0fbf, 0x080c, 0x98a5,
 	0x012e, 0x009e, 0x00de, 0x0005, 0x60c0, 0x8004, 0x9084, 0x0003,
 	0x9005, 0x0130, 0x9082, 0x0004, 0x20a3, 0x0000, 0x8000, 0x1de0,
-	0x0005, 0x080c, 0x9171, 0x7003, 0x7800, 0x7808, 0x8007, 0x700a,
-	0x60c3, 0x0008, 0x0804, 0x95f7, 0x00d6, 0x00e6, 0x080c, 0x91bc,
+	0x0005, 0x080c, 0x939e, 0x7003, 0x7800, 0x7808, 0x8007, 0x700a,
+	0x60c3, 0x0008, 0x0804, 0x98a5, 0x00d6, 0x00e6, 0x080c, 0x93e9,
 	0x7814, 0x9084, 0xff00, 0x2073, 0x0200, 0x8e70, 0x8e70, 0x9096,
 	0xdf00, 0x0138, 0x9096, 0xe000, 0x0120, 0x2073, 0x0010, 0x8e70,
 	0x0030, 0x9095, 0x0010, 0x2272, 0x8e70, 0x2073, 0x0034, 0x8e70,
 	0x2069, 0x1805, 0x20a9, 0x0004, 0x2d76, 0x8d68, 0x8e70, 0x1f04,
-	0x8f14, 0x2069, 0x1801, 0x20a9, 0x0004, 0x2d76, 0x8d68, 0x8e70,
-	0x1f04, 0x8f1d, 0x9096, 0xdf00, 0x0130, 0x9096, 0xe000, 0x0118,
+	0x911c, 0x2069, 0x1801, 0x20a9, 0x0004, 0x2d76, 0x8d68, 0x8e70,
+	0x1f04, 0x9125, 0x9096, 0xdf00, 0x0130, 0x9096, 0xe000, 0x0118,
 	0x60c3, 0x0018, 0x00f0, 0x2069, 0x1990, 0x9086, 0xdf00, 0x0110,
 	0x2069, 0x19aa, 0x20a9, 0x001a, 0x9e86, 0x0260, 0x1148, 0x00c6,
 	0x2061, 0x0200, 0x6010, 0x8000, 0x6012, 0x00ce, 0x2071, 0x0240,
-	0x2d04, 0x8007, 0x2072, 0x8d68, 0x8e70, 0x1f04, 0x8f34, 0x60c3,
-	0x004c, 0x080c, 0x95f7, 0x00ee, 0x00de, 0x0005, 0x080c, 0x9171,
+	0x2d04, 0x8007, 0x2072, 0x8d68, 0x8e70, 0x1f04, 0x913c, 0x60c3,
+	0x004c, 0x080c, 0x98a5, 0x00ee, 0x00de, 0x0005, 0x080c, 0x939e,
 	0x7003, 0x6300, 0x7007, 0x0028, 0x7808, 0x700e, 0x60c3, 0x0008,
-	0x0804, 0x95f7, 0x00d6, 0x0026, 0x0016, 0x080c, 0x91bc, 0x7003,
+	0x0804, 0x98a5, 0x00d6, 0x0026, 0x0016, 0x080c, 0x93e9, 0x7003,
 	0x0200, 0x7814, 0x700e, 0x00e6, 0x9ef0, 0x0004, 0x2009, 0x0001,
 	0x2011, 0x000c, 0x2073, 0x0800, 0x8e70, 0x2073, 0x0000, 0x00ee,
-	0x7206, 0x710a, 0x62c2, 0x080c, 0x95f7, 0x001e, 0x002e, 0x00de,
-	0x0005, 0x2001, 0x1817, 0x2004, 0x609a, 0x0804, 0x95f7, 0x080c,
-	0x9171, 0x7003, 0x5200, 0x2069, 0x185e, 0x6804, 0xd084, 0x0130,
-	0x6828, 0x0016, 0x080c, 0x26d2, 0x710e, 0x001e, 0x20a9, 0x0004,
+	0x7206, 0x710a, 0x62c2, 0x080c, 0x98a5, 0x001e, 0x002e, 0x00de,
+	0x0005, 0x2001, 0x1817, 0x2004, 0x609a, 0x0804, 0x98a5, 0x080c,
+	0x939e, 0x7003, 0x5200, 0x2069, 0x185e, 0x6804, 0xd084, 0x0130,
+	0x6828, 0x0016, 0x080c, 0x273b, 0x710e, 0x001e, 0x20a9, 0x0004,
 	0x20e1, 0x0001, 0x2099, 0x1805, 0x20e9, 0x0000, 0x20a1, 0x0250,
 	0x4003, 0x20a9, 0x0004, 0x2099, 0x1801, 0x20a1, 0x0254, 0x4003,
-	0x080c, 0x9e82, 0x1120, 0xb8a0, 0x9082, 0x007f, 0x0248, 0x2001,
+	0x080c, 0xa307, 0x1120, 0xb8a0, 0x9082, 0x007f, 0x0248, 0x2001,
 	0x181e, 0x2004, 0x7032, 0x2001, 0x181f, 0x2004, 0x7036, 0x0030,
 	0x2001, 0x1817, 0x2004, 0x9084, 0x00ff, 0x7036, 0x60c3, 0x001c,
-	0x0804, 0x95f7, 0x080c, 0x9171, 0x7003, 0x0500, 0x080c, 0x9e82,
+	0x0804, 0x98a5, 0x080c, 0x939e, 0x7003, 0x0500, 0x080c, 0xa307,
 	0x1120, 0xb8a0, 0x9082, 0x007f, 0x0248, 0x2001, 0x181e, 0x2004,
 	0x700a, 0x2001, 0x181f, 0x2004, 0x700e, 0x0030, 0x2001, 0x1817,
 	0x2004, 0x9084, 0x00ff, 0x700e, 0x20a9, 0x0004, 0x20e1, 0x0001,
 	0x2099, 0x1805, 0x20e9, 0x0000, 0x20a1, 0x0250, 0x4003, 0x60c3,
-	0x0010, 0x0804, 0x95f7, 0x080c, 0x9171, 0x9006, 0x080c, 0x6710,
+	0x0010, 0x0804, 0x98a5, 0x080c, 0x939e, 0x9006, 0x080c, 0x6837,
 	0xb8a0, 0x9086, 0x007e, 0x1170, 0x2011, 0x0240, 0x2013, 0x22ff,
 	0x2011, 0x0241, 0x2013, 0xfffe, 0x7003, 0x0400, 0x620c, 0xc2b4,
 	0x620e, 0x0058, 0x7814, 0x0096, 0x904d, 0x0120, 0x9006, 0xa89e,
 	0xa8aa, 0xa8ae, 0x009e, 0x7003, 0x0300, 0xb8a0, 0x9086, 0x007e,
-	0x1904, 0x9067, 0x00d6, 0x2069, 0x1949, 0x2001, 0x1836, 0x2004,
+	0x1904, 0x9275, 0x00d6, 0x2069, 0x1948, 0x2001, 0x1836, 0x2004,
 	0xd0a4, 0x0188, 0x6800, 0x700a, 0x6808, 0x9084, 0x2000, 0x7012,
-	0x080c, 0x9e99, 0x680c, 0x7016, 0x701f, 0x2710, 0x6818, 0x7022,
+	0x080c, 0xa31e, 0x680c, 0x7016, 0x701f, 0x2710, 0x6818, 0x7022,
 	0x681c, 0x7026, 0x0428, 0x6800, 0x700a, 0x6804, 0x700e, 0x2009,
 	0x180d, 0x210c, 0xd18c, 0x0110, 0x2001, 0x0002, 0x00f6, 0x2079,
-	0x0100, 0x080c, 0x72e5, 0x1128, 0x78e3, 0x0000, 0x080c, 0x2713,
-	0x78e2, 0x00fe, 0x6808, 0x080c, 0x72e5, 0x1118, 0x9084, 0x37ff,
-	0x0010, 0x9084, 0x3fff, 0x7012, 0x080c, 0x9e99, 0x680c, 0x7016,
+	0x0100, 0x080c, 0x7351, 0x1128, 0x78e3, 0x0000, 0x080c, 0x277c,
+	0x78e2, 0x00fe, 0x6808, 0x080c, 0x7351, 0x1118, 0x9084, 0x37ff,
+	0x0010, 0x9084, 0x3fff, 0x7012, 0x080c, 0xa31e, 0x680c, 0x7016,
 	0x00de, 0x20a9, 0x0004, 0x20e1, 0x0001, 0x2099, 0x1805, 0x20e9,
 	0x0000, 0x20a1, 0x0256, 0x4003, 0x20a9, 0x0004, 0x2099, 0x1801,
-	0x20a1, 0x025a, 0x4003, 0x00d6, 0x080c, 0x9cf6, 0x2069, 0x1951,
-	0x2071, 0x024e, 0x6800, 0xc0dd, 0x7002, 0x00de, 0x04e0, 0x2001,
-	0x1836, 0x2004, 0xd0a4, 0x01a8, 0x0016, 0x2001, 0x180d, 0x2004,
-	0xd08c, 0x2009, 0x0002, 0x1118, 0x2001, 0x194a, 0x200c, 0x60e0,
-	0x9106, 0x0130, 0x2100, 0x60e3, 0x0000, 0x080c, 0x2713, 0x61e2,
-	0x001e, 0x20e1, 0x0001, 0x2099, 0x1949, 0x20e9, 0x0000, 0x20a1,
-	0x024e, 0x20a9, 0x0008, 0x4003, 0x20a9, 0x0004, 0x2099, 0x1805,
-	0x20a1, 0x0256, 0x4003, 0x20a9, 0x0004, 0x2099, 0x1801, 0x20a1,
-	0x025a, 0x4003, 0x080c, 0x9cf6, 0x20a1, 0x024e, 0x20a9, 0x0008,
-	0x2099, 0x1951, 0x4003, 0x60c3, 0x0074, 0x0804, 0x95f7, 0x080c,
-	0x9171, 0x7003, 0x2010, 0x7007, 0x0014, 0x700b, 0x0800, 0x700f,
-	0x2000, 0x9006, 0x00f6, 0x2079, 0x185e, 0x7904, 0x00fe, 0xd1ac,
-	0x1110, 0x9085, 0x0020, 0xd1a4, 0x0110, 0x9085, 0x0010, 0x9085,
-	0x0002, 0x7026, 0x60c3, 0x0014, 0x0804, 0x95f7, 0x080c, 0x9171,
-	0x7003, 0x5000, 0x0804, 0x9005, 0x080c, 0x9171, 0x7003, 0x2110,
-	0x7007, 0x0014, 0x60c3, 0x0014, 0x0804, 0x95f7, 0x080c, 0x91bc,
-	0x7003, 0x0200, 0x60c3, 0x0004, 0x0804, 0x95f7, 0x080c, 0x91bc,
-	0x7003, 0x0100, 0x700b, 0x0003, 0x700f, 0x2a00, 0x60c3, 0x0008,
-	0x0804, 0x95f7, 0x080c, 0x91bc, 0x7003, 0x0200, 0x0804, 0x9005,
-	0x080c, 0x91bc, 0x7003, 0x0100, 0x782c, 0x9005, 0x0110, 0x700a,
-	0x0010, 0x700b, 0x0003, 0x7814, 0x700e, 0x60c3, 0x0008, 0x0804,
-	0x95f7, 0x00d6, 0x080c, 0x91bc, 0x7003, 0x0210, 0x7007, 0x0014,
-	0x700b, 0x0800, 0xb894, 0x9086, 0x0014, 0x1198, 0xb99c, 0x9184,
-	0x0030, 0x0190, 0xb998, 0x9184, 0xc000, 0x1140, 0xd1ec, 0x0118,
-	0x700f, 0x2100, 0x0058, 0x700f, 0x0100, 0x0040, 0x700f, 0x0400,
-	0x0028, 0x700f, 0x0700, 0x0010, 0x700f, 0x0800, 0x00f6, 0x2079,
-	0x185e, 0x7904, 0x00fe, 0xd1ac, 0x1110, 0x9085, 0x0020, 0xd1a4,
-	0x0110, 0x9085, 0x0010, 0x2009, 0x1880, 0x210c, 0xd184, 0x1110,
-	0x9085, 0x0002, 0x7026, 0x60c3, 0x0014, 0x00de, 0x0804, 0x95f7,
-	0x080c, 0x91bc, 0x7003, 0x0210, 0x7007, 0x0014, 0x700f, 0x0100,
-	0x60c3, 0x0014, 0x0804, 0x95f7, 0x080c, 0x91bc, 0x7003, 0x0200,
-	0x0804, 0x8f83, 0x080c, 0x91bc, 0x7003, 0x0100, 0x700b, 0x0003,
-	0x700f, 0x2a00, 0x60c3, 0x0008, 0x0804, 0x95f7, 0x080c, 0x91bc,
-	0x7003, 0x0100, 0x700b, 0x000b, 0x60c3, 0x0008, 0x0804, 0x95f7,
-	0x0026, 0x00d6, 0x0036, 0x0046, 0x2019, 0x3200, 0x2021, 0x0800,
-	0x0040, 0x0026, 0x00d6, 0x0036, 0x0046, 0x2019, 0x2200, 0x2021,
-	0x0100, 0x080c, 0x9d0b, 0xb810, 0x9305, 0x7002, 0xb814, 0x7006,
-	0x2069, 0x1800, 0x6878, 0x700a, 0x687c, 0x700e, 0x9485, 0x0029,
-	0x7012, 0x004e, 0x003e, 0x00de, 0x080c, 0x95e5, 0x721a, 0x9f95,
-	0x0000, 0x7222, 0x7027, 0xffff, 0x2071, 0x024c, 0x002e, 0x0005,
-	0x0026, 0x080c, 0x9d0b, 0x7003, 0x02ff, 0x7007, 0xfffc, 0x00d6,
-	0x2069, 0x1800, 0x6878, 0x700a, 0x687c, 0x700e, 0x00de, 0x7013,
-	0x2029, 0x0c10, 0x7003, 0x0100, 0x7007, 0x0000, 0x700b, 0xfc02,
-	0x700f, 0x0000, 0x0005, 0x0026, 0x00d6, 0x0036, 0x0046, 0x2019,
-	0x3300, 0x2021, 0x0800, 0x0040, 0x0026, 0x00d6, 0x0036, 0x0046,
-	0x2019, 0x2300, 0x2021, 0x0100, 0x080c, 0x9d0b, 0xb810, 0x9305,
-	0x7002, 0xb814, 0x7006, 0x2069, 0x1800, 0xb810, 0x9005, 0x1140,
-	0xb814, 0x9005, 0x1128, 0x700b, 0x00ff, 0x700f, 0xfffe, 0x0020,
-	0x6878, 0x700a, 0x687c, 0x700e, 0x0000, 0x9485, 0x0098, 0x7012,
-	0x004e, 0x003e, 0x00de, 0x080c, 0x95e5, 0x721a, 0x7a08, 0x7222,
-	0x2f10, 0x7226, 0x2071, 0x024c, 0x002e, 0x0005, 0x080c, 0x95e5,
-	0x721a, 0x7a08, 0x7222, 0x7814, 0x7026, 0x2071, 0x024c, 0x002e,
-	0x0005, 0x00b6, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x2069, 0x0200,
-	0x2071, 0x0240, 0x6004, 0x908a, 0x0085, 0x0a0c, 0x0dc4, 0x908a,
-	0x0092, 0x1a0c, 0x0dc4, 0x6110, 0x2158, 0xb9ac, 0x2c78, 0x2061,
-	0x0100, 0x619a, 0x9082, 0x0085, 0x0033, 0x00fe, 0x00ee, 0x00de,
-	0x00ce, 0x00be, 0x0005, 0x922a, 0x9239, 0x9244, 0x9228, 0x9228,
-	0x9228, 0x922a, 0x9228, 0x9228, 0x9228, 0x9228, 0x9228, 0x9228,
-	0x080c, 0x0dc4, 0x0411, 0x60c3, 0x0000, 0x0026, 0x080c, 0x29fa,
-	0x0228, 0x2011, 0x0101, 0x2204, 0xc0c5, 0x2012, 0x002e, 0x0804,
-	0x95f7, 0x0431, 0x7808, 0x700a, 0x7814, 0x700e, 0x7017, 0xffff,
-	0x60c3, 0x000c, 0x0804, 0x95f7, 0x04a1, 0x7003, 0x0003, 0x7007,
-	0x0300, 0x60c3, 0x0004, 0x0804, 0x95f7, 0x0026, 0x080c, 0x9d0b,
-	0xb810, 0x9085, 0x8100, 0x7002, 0xb814, 0x7006, 0x2069, 0x1800,
-	0x6878, 0x700a, 0x687c, 0x700e, 0x7013, 0x0009, 0x0804, 0x918c,
-	0x0026, 0x080c, 0x9d0b, 0xb810, 0x9085, 0x8400, 0x7002, 0xb814,
-	0x7006, 0x2069, 0x1800, 0x6878, 0x700a, 0x687c, 0x700e, 0x2001,
-	0x0099, 0x7a20, 0x9296, 0x0005, 0x0108, 0xc0bc, 0x7012, 0x0804,
-	0x91ee, 0x0026, 0x080c, 0x9d0b, 0xb810, 0x9085, 0x8500, 0x7002,
-	0xb814, 0x7006, 0x2069, 0x1800, 0x6878, 0x700a, 0x687c, 0x700e,
-	0x2001, 0x0099, 0x7a20, 0x9296, 0x0005, 0x0108, 0xc0bc, 0x7012,
-	0x0804, 0x91ee, 0x00b6, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x2c78,
-	0x2069, 0x0200, 0x2071, 0x0240, 0x7804, 0x908a, 0x0040, 0x0a0c,
-	0x0dc4, 0x908a, 0x0054, 0x1a0c, 0x0dc4, 0x7910, 0x2158, 0xb9ac,
-	0x2061, 0x0100, 0x619a, 0x9082, 0x0040, 0x0033, 0x00fe, 0x00ee,
-	0x00de, 0x00ce, 0x00be, 0x0005, 0x92c9, 0x9375, 0x9348, 0x9454,
-	0x92c7, 0x92c7, 0x92c7, 0x92c7, 0x92c7, 0x92c7, 0x92c7, 0x99ef,
-	0x99f4, 0x99f9, 0x99fe, 0x92c7, 0x92c7, 0x92c7, 0x99ea, 0x080c,
-	0x0dc4, 0x0096, 0x080c, 0x932c, 0x7914, 0x2148, 0xa97c, 0x7926,
-	0xae68, 0x96b4, 0x00ff, 0x9686, 0x0008, 0x1148, 0xa8b8, 0x7032,
-	0xa8bc, 0x7036, 0xa8c0, 0x703a, 0xa8c4, 0x703e, 0x0008, 0x7132,
-	0xa980, 0x9184, 0x000f, 0x1118, 0x2001, 0x0005, 0x0040, 0xd184,
-	0x0118, 0x2001, 0x0004, 0x0018, 0x9084, 0x0006, 0x8004, 0x7042,
-	0xd1ac, 0x0158, 0x7047, 0x0002, 0x9686, 0x0008, 0x1118, 0x080c,
-	0x17b7, 0x0010, 0x080c, 0x1679, 0x0050, 0xd1b4, 0x0118, 0x7047,
-	0x0001, 0x0028, 0x7047, 0x0000, 0x9016, 0x2230, 0x0010, 0xaab4,
-	0xaeb0, 0x726a, 0x766e, 0x20a9, 0x0008, 0x20e9, 0x0000, 0xa860,
-	0x20e0, 0xa85c, 0x9080, 0x0024, 0x2098, 0x20a1, 0x0252, 0x2069,
-	0x0200, 0x6813, 0x0018, 0x4003, 0x6813, 0x0008, 0x60c3, 0x0020,
-	0x6017, 0x0009, 0x2001, 0x19e0, 0x2003, 0x07d0, 0x2001, 0x19df,
-	0x2003, 0x0009, 0x009e, 0x0005, 0x6813, 0x0008, 0xba8c, 0x8210,
+	0x20a1, 0x025a, 0x4003, 0x00d6, 0x080c, 0xa17b, 0x2069, 0x1950,
+	0x2071, 0x024e, 0x6800, 0xc0dd, 0x7002, 0x080c, 0x5668, 0xd0e4,
+	0x0110, 0x680c, 0x700e, 0x00de, 0x04e0, 0x2001, 0x1836, 0x2004,
+	0xd0a4, 0x01a8, 0x0016, 0x2001, 0x180d, 0x2004, 0xd08c, 0x2009,
+	0x0002, 0x1118, 0x2001, 0x1949, 0x200c, 0x60e0, 0x9106, 0x0130,
+	0x2100, 0x60e3, 0x0000, 0x080c, 0x277c, 0x61e2, 0x001e, 0x20e1,
+	0x0001, 0x2099, 0x1948, 0x20e9, 0x0000, 0x20a1, 0x024e, 0x20a9,
+	0x0008, 0x4003, 0x20a9, 0x0004, 0x2099, 0x1805, 0x20a1, 0x0256,
+	0x4003, 0x20a9, 0x0004, 0x2099, 0x1801, 0x20a1, 0x025a, 0x4003,
+	0x080c, 0xa17b, 0x20a1, 0x024e, 0x20a9, 0x0008, 0x2099, 0x1950,
+	0x4003, 0x60c3, 0x0074, 0x0804, 0x98a5, 0x080c, 0x939e, 0x7003,
+	0x2010, 0x7007, 0x0014, 0x700b, 0x0800, 0x700f, 0x2000, 0x9006,
+	0x00f6, 0x2079, 0x185e, 0x7904, 0x00fe, 0xd1ac, 0x1110, 0x9085,
+	0x0020, 0xd1a4, 0x0110, 0x9085, 0x0010, 0x9085, 0x0002, 0x00d6,
+	0x0804, 0x934e, 0x7026, 0x60c3, 0x0014, 0x0804, 0x98a5, 0x080c,
+	0x939e, 0x7003, 0x5000, 0x0804, 0x920d, 0x080c, 0x939e, 0x7003,
+	0x2110, 0x7007, 0x0014, 0x60c3, 0x0014, 0x0804, 0x98a5, 0x080c,
+	0x93e0, 0x0010, 0x080c, 0x93e9, 0x7003, 0x0200, 0x60c3, 0x0004,
+	0x0804, 0x98a5, 0x080c, 0x93e9, 0x7003, 0x0100, 0x700b, 0x0003,
+	0x700f, 0x2a00, 0x60c3, 0x0008, 0x0804, 0x98a5, 0x080c, 0x93e9,
+	0x7003, 0x0200, 0x0804, 0x920d, 0x080c, 0x93e9, 0x7003, 0x0100,
+	0x782c, 0x9005, 0x0110, 0x700a, 0x0010, 0x700b, 0x0003, 0x7814,
+	0x700e, 0x60c3, 0x0008, 0x0804, 0x98a5, 0x00d6, 0x080c, 0x93e9,
+	0x7003, 0x0210, 0x7007, 0x0014, 0x700b, 0x0800, 0xb894, 0x9086,
+	0x0014, 0x1198, 0xb99c, 0x9184, 0x0030, 0x0190, 0xb998, 0x9184,
+	0xc000, 0x1140, 0xd1ec, 0x0118, 0x700f, 0x2100, 0x0058, 0x700f,
+	0x0100, 0x0040, 0x700f, 0x0400, 0x0028, 0x700f, 0x0700, 0x0010,
+	0x700f, 0x0800, 0x00f6, 0x2079, 0x185e, 0x7904, 0x00fe, 0xd1ac,
+	0x1110, 0x9085, 0x0020, 0xd1a4, 0x0110, 0x9085, 0x0010, 0x2009,
+	0x1880, 0x210c, 0xd184, 0x1110, 0x9085, 0x0002, 0x0026, 0x2009,
+	0x187e, 0x210c, 0xd1e4, 0x0150, 0xc0c5, 0xbabc, 0xd28c, 0x1108,
+	0xc0cd, 0x9094, 0x0030, 0x9296, 0x0010, 0x0140, 0xd1ec, 0x0130,
+	0x9094, 0x0030, 0x9296, 0x0010, 0x0108, 0xc0bd, 0x002e, 0x7026,
+	0x60c3, 0x0014, 0x00de, 0x0804, 0x98a5, 0x080c, 0x93e9, 0x7003,
+	0x0210, 0x7007, 0x0014, 0x700f, 0x0100, 0x60c3, 0x0014, 0x0804,
+	0x98a5, 0x080c, 0x93e9, 0x7003, 0x0200, 0x0804, 0x918b, 0x080c,
+	0x93e9, 0x7003, 0x0100, 0x700b, 0x0003, 0x700f, 0x2a00, 0x60c3,
+	0x0008, 0x0804, 0x98a5, 0x080c, 0x93e9, 0x7003, 0x0100, 0x700b,
+	0x000b, 0x60c3, 0x0008, 0x0804, 0x98a5, 0x0026, 0x00d6, 0x0036,
+	0x0046, 0x2019, 0x3200, 0x2021, 0x0800, 0x0040, 0x0026, 0x00d6,
+	0x0036, 0x0046, 0x2019, 0x2200, 0x2021, 0x0100, 0x080c, 0xa190,
+	0xb810, 0x9305, 0x7002, 0xb814, 0x7006, 0x2069, 0x1800, 0x6878,
+	0x700a, 0x687c, 0x700e, 0x9485, 0x0029, 0x7012, 0x004e, 0x003e,
+	0x00de, 0x080c, 0x9893, 0x721a, 0x9f95, 0x0000, 0x7222, 0x7027,
+	0xffff, 0x2071, 0x024c, 0x002e, 0x0005, 0x0026, 0x080c, 0xa190,
+	0x7003, 0x02ff, 0x7007, 0xfffc, 0x00d6, 0x2069, 0x1800, 0x6878,
+	0x700a, 0x687c, 0x700e, 0x00de, 0x7013, 0x2029, 0x0c10, 0x7003,
+	0x0100, 0x7007, 0x0000, 0x700b, 0xfc02, 0x700f, 0x0000, 0x0005,
+	0x0026, 0x00d6, 0x0036, 0x0046, 0x2019, 0x3300, 0x2021, 0x0800,
+	0x0040, 0x0026, 0x00d6, 0x0036, 0x0046, 0x2019, 0x2300, 0x2021,
+	0x0100, 0x080c, 0xa190, 0xb810, 0x9305, 0x7002, 0xb814, 0x7006,
+	0x2069, 0x1800, 0xb810, 0x9005, 0x1140, 0xb814, 0x9005, 0x1128,
+	0x700b, 0x00ff, 0x700f, 0xfffe, 0x0020, 0x6878, 0x700a, 0x687c,
+	0x700e, 0x0000, 0x9485, 0x0098, 0x7012, 0x004e, 0x003e, 0x00de,
+	0x080c, 0x9893, 0x721a, 0x7a08, 0x7222, 0x2f10, 0x7226, 0x2071,
+	0x024c, 0x002e, 0x0005, 0x080c, 0x9893, 0x721a, 0x7a08, 0x7222,
+	0x7814, 0x7026, 0x2071, 0x024c, 0x002e, 0x0005, 0x00b6, 0x00c6,
+	0x00d6, 0x00e6, 0x00f6, 0x2069, 0x0200, 0x2071, 0x0240, 0x6004,
+	0x908a, 0x0085, 0x0a0c, 0x0dc3, 0x908a, 0x0092, 0x1a0c, 0x0dc3,
+	0x6110, 0x2158, 0xb9b0, 0x2c78, 0x2061, 0x0100, 0x619a, 0x9082,
+	0x0085, 0x0033, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, 0x0005,
+	0x9457, 0x9466, 0x9471, 0x9455, 0x9455, 0x9455, 0x9457, 0x9455,
+	0x9455, 0x9455, 0x9455, 0x9455, 0x9455, 0x080c, 0x0dc3, 0x0411,
+	0x60c3, 0x0000, 0x0026, 0x080c, 0x2a63, 0x0228, 0x2011, 0x0101,
+	0x2204, 0xc0c5, 0x2012, 0x002e, 0x0804, 0x98a5, 0x0431, 0x7808,
+	0x700a, 0x7814, 0x700e, 0x7017, 0xffff, 0x60c3, 0x000c, 0x0804,
+	0x98a5, 0x04a1, 0x7003, 0x0003, 0x7007, 0x0300, 0x60c3, 0x0004,
+	0x0804, 0x98a5, 0x0026, 0x080c, 0xa190, 0xb810, 0x9085, 0x8100,
+	0x7002, 0xb814, 0x7006, 0x2069, 0x1800, 0x6878, 0x700a, 0x687c,
+	0x700e, 0x7013, 0x0009, 0x0804, 0x93b9, 0x0026, 0x080c, 0xa190,
+	0xb810, 0x9085, 0x8400, 0x7002, 0xb814, 0x7006, 0x2069, 0x1800,
+	0x6878, 0x700a, 0x687c, 0x700e, 0x2001, 0x0099, 0x7a20, 0x9296,
+	0x0005, 0x0108, 0xc0bc, 0x7012, 0x0804, 0x941b, 0x0026, 0x080c,
+	0xa190, 0xb810, 0x9085, 0x8500, 0x7002, 0xb814, 0x7006, 0x2069,
+	0x1800, 0x6878, 0x700a, 0x687c, 0x700e, 0x2001, 0x0099, 0x7a20,
+	0x9296, 0x0005, 0x0108, 0xc0bc, 0x7012, 0x0804, 0x941b, 0x00b6,
+	0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x2c78, 0x2069, 0x0200, 0x2071,
+	0x0240, 0x7804, 0x908a, 0x0040, 0x0a0c, 0x0dc3, 0x908a, 0x0054,
+	0x1a0c, 0x0dc3, 0x7910, 0x2158, 0xb9b0, 0x2061, 0x0100, 0x619a,
+	0x9082, 0x0040, 0x0033, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be,
+	0x0005, 0x94f6, 0x95bd, 0x9590, 0x96df, 0x94f4, 0x94f4, 0x94f4,
+	0x94f4, 0x94f4, 0x94f4, 0x94f4, 0x9cc0, 0x9cc5, 0x9cca, 0x9ccf,
+	0x94f4, 0xa0be, 0x94f4, 0x9cbb, 0x080c, 0x0dc3, 0x0096, 0x780b,
+	0xffff, 0x080c, 0x9561, 0x7914, 0x2148, 0xa97c, 0x7956, 0xae68,
+	0x96b4, 0x00ff, 0x9686, 0x0008, 0x1148, 0xa8b8, 0x7032, 0xa8bc,
+	0x7036, 0xa8c0, 0x703a, 0xa8c4, 0x703e, 0x0008, 0x7132, 0xa980,
+	0x9184, 0x000f, 0x1118, 0x2001, 0x0005, 0x0040, 0xd184, 0x0118,
+	0x2001, 0x0004, 0x0018, 0x9084, 0x0006, 0x8004, 0x2010, 0x785c,
+	0x9084, 0x00ff, 0x8007, 0x9205, 0x7042, 0xd1ac, 0x0158, 0x7047,
+	0x0002, 0x9686, 0x0008, 0x1118, 0x080c, 0x17ff, 0x0010, 0x080c,
+	0x16c1, 0x0050, 0xd1b4, 0x0118, 0x7047, 0x0001, 0x0028, 0x7047,
+	0x0000, 0x9016, 0x2230, 0x0010, 0xaab4, 0xaeb0, 0x726a, 0x766e,
+	0x20a9, 0x0008, 0x20e9, 0x0000, 0xa860, 0x20e0, 0xa85c, 0x9080,
+	0x0024, 0x2098, 0x20a1, 0x0252, 0x2069, 0x0200, 0x6813, 0x0018,
+	0x4003, 0x6813, 0x0008, 0x60c3, 0x0020, 0x6017, 0x0009, 0x2001,
+	0x19e0, 0x2003, 0x07d0, 0x2001, 0x19df, 0x2003, 0x0009, 0x009e,
+	0x0005, 0x6813, 0x0008, 0xba8c, 0x8210, 0xb8bc, 0xd084, 0x0180,
+	0x2001, 0x1aab, 0x200c, 0x8108, 0x2102, 0x2001, 0x1aaa, 0x201c,
+	0x1218, 0x8318, 0x2302, 0x0ea0, 0x794a, 0x712e, 0x7b46, 0x732a,
 	0x9294, 0x00ff, 0xba8e, 0x8217, 0x721a, 0xba10, 0x9295, 0x0600,
 	0x7202, 0xba14, 0x7206, 0x2069, 0x1800, 0x6a78, 0x720a, 0x6a7c,
 	0x720e, 0x7013, 0x0829, 0x2f10, 0x7222, 0x7027, 0xffff, 0x0005,
 	0x00d6, 0x0096, 0x0081, 0x7814, 0x2048, 0xa894, 0x7002, 0xa890,
 	0x7006, 0xa8b4, 0x700a, 0xa8b0, 0x700e, 0x60c3, 0x000c, 0x009e,
-	0x00de, 0x0804, 0x95f7, 0x6813, 0x0008, 0xb810, 0x9085, 0x0500,
+	0x00de, 0x0804, 0x98a5, 0x6813, 0x0008, 0xb810, 0x9085, 0x0500,
 	0x7002, 0xb814, 0x7006, 0x2069, 0x1800, 0x6878, 0x700a, 0x687c,
-	0x700e, 0x7013, 0x0889, 0x080c, 0x95e5, 0x721a, 0x7a08, 0x7222,
+	0x700e, 0x7013, 0x0889, 0x080c, 0x9893, 0x721a, 0x7a08, 0x7222,
 	0x2f10, 0x7226, 0x2071, 0x024c, 0x0005, 0x00d6, 0x0096, 0x080c,
-	0x9438, 0x7814, 0x2048, 0x080c, 0xb953, 0x1130, 0x7814, 0x9084,
+	0x96bd, 0x7814, 0x2048, 0x080c, 0xc1cb, 0x1130, 0x7814, 0x9084,
 	0x0700, 0x8007, 0x0033, 0x0010, 0x9006, 0x001b, 0x009e, 0x00de,
-	0x0005, 0x9393, 0x93f0, 0x93fa, 0x9412, 0x9418, 0x9424, 0x9427,
-	0x9391, 0x080c, 0x0dc4, 0x0016, 0x0036, 0xa980, 0x918c, 0x0003,
-	0x0118, 0x9186, 0x0003, 0x1170, 0xabac, 0x7316, 0xa89c, 0x701a,
-	0xa898, 0x701e, 0x003e, 0x001e, 0x2001, 0x198e, 0x2004, 0x60c2,
-	0x0804, 0x95f7, 0x9186, 0x0001, 0x190c, 0x0dc4, 0xabac, 0x7316,
-	0xa89c, 0x701a, 0xa898, 0x701e, 0xa8a8, 0x7026, 0xa8b0, 0x702e,
-	0x2009, 0x0018, 0x9384, 0x0300, 0x0570, 0xd3c4, 0x0110, 0xa8b0,
-	0x9108, 0xd3cc, 0x0110, 0xa8a8, 0x9108, 0x6810, 0x9085, 0x0010,
-	0x6812, 0x2011, 0x0258, 0x20e9, 0x0000, 0x22a0, 0x0156, 0x20a9,
-	0x0008, 0xa860, 0x20e0, 0xa85c, 0x9080, 0x002d, 0x2098, 0x4003,
-	0x6810, 0x8000, 0x6812, 0x2011, 0x0240, 0x22a0, 0x20a9, 0x0005,
-	0x4003, 0x6810, 0xc0a4, 0x6812, 0x015e, 0x9184, 0x0003, 0x0118,
-	0x2019, 0x0245, 0x201a, 0x61c2, 0x003e, 0x001e, 0x0804, 0x95f7,
-	0x7017, 0x0008, 0x2001, 0x180f, 0x2004, 0xd0a4, 0x0110, 0x7017,
-	0x0028, 0x00d0, 0x7017, 0x0302, 0x7027, 0x0012, 0x702f, 0x0008,
+	0x0005, 0x95db, 0x9644, 0x9654, 0x967a, 0x9686, 0x9697, 0x969f,
+	0x95d9, 0x080c, 0x0dc3, 0x0016, 0x0036, 0xa980, 0x918c, 0x0003,
+	0x0118, 0x9186, 0x0003, 0x1198, 0xabac, 0x7824, 0xd0cc, 0x1168,
+	0x7316, 0xa89c, 0x701a, 0xa898, 0x701e, 0x003e, 0x001e, 0x2001,
+	0x198e, 0x2004, 0x60c2, 0x0804, 0x98a5, 0xc3e5, 0x0c88, 0x9186,
+	0x0001, 0x190c, 0x0dc3, 0xabac, 0x7824, 0xd0cc, 0x1904, 0x9641,
+	0x7316, 0xa89c, 0x701a, 0xa898, 0x701e, 0xa8a8, 0x7026, 0xa8b0,
+	0x702e, 0x2009, 0x0018, 0x9384, 0x0300, 0x0570, 0xd3c4, 0x0110,
+	0xa8b0, 0x9108, 0xd3cc, 0x0110, 0xa8a8, 0x9108, 0x6810, 0x9085,
+	0x0010, 0x6812, 0x2011, 0x0258, 0x20e9, 0x0000, 0x22a0, 0x0156,
+	0x20a9, 0x0008, 0xa860, 0x20e0, 0xa85c, 0x9080, 0x002d, 0x2098,
+	0x4003, 0x6810, 0x8000, 0x6812, 0x2011, 0x0240, 0x22a0, 0x20a9,
+	0x0005, 0x4003, 0x6810, 0xc0a4, 0x6812, 0x015e, 0x9184, 0x0003,
+	0x0118, 0x2019, 0x0245, 0x201a, 0x61c2, 0x003e, 0x001e, 0x0804,
+	0x98a5, 0xc3e5, 0x0804, 0x9600, 0x2011, 0x0008, 0x2001, 0x180f,
+	0x2004, 0xd0a4, 0x0110, 0x2011, 0x0028, 0x7824, 0xd0cc, 0x1110,
+	0x7216, 0x0470, 0x0ce8, 0xc2e5, 0x2011, 0x0302, 0x0016, 0x782c,
+	0x701a, 0x7930, 0x711e, 0x9105, 0x0108, 0xc2dd, 0x001e, 0x7824,
+	0xd0cc, 0x0108, 0xc2e5, 0x7216, 0x7027, 0x0012, 0x702f, 0x0008,
 	0x7043, 0x7000, 0x7047, 0x0500, 0x704f, 0x000a, 0x2069, 0x0200,
 	0x6813, 0x0009, 0x2071, 0x0240, 0x700b, 0x2500, 0x60c3, 0x0032,
-	0x0804, 0x95f7, 0x7017, 0x0028, 0x60c3, 0x0018, 0x0804, 0x95f7,
-	0x7017, 0x0100, 0x702f, 0x0008, 0x7828, 0x9084, 0x00ff, 0x7036,
-	0x60c3, 0x0020, 0x0804, 0x95f7, 0x7017, 0x0008, 0x0c68, 0x0036,
-	0x7b14, 0x9384, 0xff00, 0x7816, 0x9384, 0x00ff, 0x8001, 0x1118,
-	0x7216, 0x003e, 0x0c08, 0x7017, 0x0800, 0x701e, 0x003e, 0x08e0,
-	0x00d6, 0x6813, 0x0008, 0xb810, 0x9085, 0x0700, 0x7002, 0xb814,
-	0x7006, 0x2069, 0x1800, 0x6878, 0x700a, 0x687c, 0x700e, 0x7013,
-	0x0898, 0x080c, 0x95e5, 0x721a, 0x7a08, 0x7222, 0x2f10, 0x7226,
-	0x2071, 0x024c, 0x00de, 0x0005, 0x0016, 0x7814, 0x9084, 0x0700,
-	0x8007, 0x0013, 0x001e, 0x0005, 0x9464, 0x9464, 0x9466, 0x9464,
-	0x9464, 0x9464, 0x9480, 0x9464, 0x080c, 0x0dc4, 0x7914, 0x918c,
-	0x08ff, 0x918d, 0xf600, 0x7916, 0x2009, 0x0003, 0x00b9, 0x2069,
-	0x185e, 0x6804, 0xd0bc, 0x0130, 0x682c, 0x9084, 0x00ff, 0x8007,
-	0x7032, 0x0010, 0x7033, 0x3f00, 0x60c3, 0x0001, 0x0804, 0x95f7,
-	0x2009, 0x0003, 0x0019, 0x7033, 0x7f00, 0x0cb0, 0x0016, 0x080c,
-	0x9d0b, 0x001e, 0xb810, 0x9085, 0x0100, 0x7002, 0xb814, 0x7006,
-	0x2069, 0x1800, 0x6a78, 0x720a, 0x6a7c, 0x720e, 0x7013, 0x0888,
-	0x918d, 0x0008, 0x7116, 0x080c, 0x95e5, 0x721a, 0x7a08, 0x7222,
-	0x2f10, 0x7226, 0x0005, 0x00b6, 0x0096, 0x00e6, 0x00d6, 0x00c6,
-	0x0056, 0x0046, 0x0036, 0x2061, 0x0100, 0x2071, 0x1800, 0x7810,
-	0x2058, 0xb8a0, 0x2028, 0xb910, 0xba14, 0x7378, 0x747c, 0x7820,
-	0x90be, 0x0006, 0x0904, 0x9577, 0x90be, 0x000a, 0x1904, 0x9533,
-	0xb8ac, 0x609e, 0x7814, 0x2048, 0xa880, 0xd0fc, 0x0558, 0xaf94,
-	0x9784, 0xff00, 0x9105, 0x6062, 0x873f, 0x9784, 0xff00, 0x0006,
-	0x7814, 0x2048, 0xa87c, 0xc0fc, 0x9005, 0x000e, 0x1160, 0xaf98,
-	0x87ff, 0x0198, 0x2039, 0x0098, 0x9705, 0x6072, 0x7808, 0x6082,
-	0x2f00, 0x6086, 0x0038, 0x9185, 0x2200, 0x6062, 0x6073, 0x0129,
-	0x6077, 0x0000, 0xb8ac, 0x609e, 0x0050, 0x2039, 0x0029, 0x9705,
-	0x6072, 0x0cc0, 0x9185, 0x0200, 0x6062, 0x6073, 0x2029, 0xa880,
-	0xd0fc, 0x0118, 0xaf98, 0x87ff, 0x1120, 0x2f00, 0x6082, 0x7808,
-	0x6086, 0x6266, 0x636a, 0x646e, 0x6077, 0x0000, 0xb88c, 0x8000,
-	0x9084, 0x00ff, 0xb88e, 0x8007, 0x607a, 0x607f, 0x0000, 0xa838,
-	0x608a, 0xa834, 0x608e, 0xa848, 0x60c6, 0xa844, 0x60ca, 0xb86c,
-	0x60ce, 0x60af, 0x95d5, 0x60d7, 0x0000, 0x080c, 0x9cf0, 0x2009,
-	0x07d0, 0x60c4, 0x9084, 0xfff0, 0x9005, 0x0110, 0x2009, 0x1b58,
-	0x080c, 0x8425, 0x003e, 0x004e, 0x005e, 0x00ce, 0x00de, 0x00ee,
-	0x009e, 0x00be, 0x0005, 0x7804, 0x9086, 0x0040, 0x0904, 0x95aa,
-	0x9185, 0x0100, 0x6062, 0x6266, 0x636a, 0x646e, 0x6073, 0x0809,
-	0x6077, 0x0008, 0x60af, 0x95d5, 0x60d7, 0x0000, 0xb88c, 0x8000,
-	0x9084, 0x00ff, 0xb88e, 0x8007, 0x607a, 0x607f, 0x0000, 0x2f00,
-	0x6082, 0x7808, 0x6086, 0x7814, 0x2048, 0xa838, 0x608a, 0xa834,
-	0x608e, 0xa848, 0x60c6, 0xa844, 0x60ca, 0xb86c, 0x60ce, 0xbaac,
-	0x629e, 0x080c, 0x9cf0, 0x2009, 0x07d0, 0x60c4, 0x9084, 0xfff0,
-	0x9005, 0x0110, 0x2009, 0x1b58, 0x080c, 0x8425, 0x003e, 0x004e,
-	0x005e, 0x00ce, 0x00de, 0x00ee, 0x009e, 0x00be, 0x0005, 0x7814,
-	0x2048, 0xa880, 0x9084, 0x0003, 0x9086, 0x0002, 0x05d8, 0x9185,
-	0x0100, 0x6062, 0x6266, 0x636a, 0x646e, 0x6073, 0x0880, 0x6077,
-	0x0008, 0xb88c, 0x8000, 0x9084, 0x00ff, 0xb88e, 0x8007, 0x607a,
-	0x607f, 0x0000, 0x2f00, 0x6086, 0x7808, 0x6082, 0xa894, 0x608a,
-	0xa890, 0x608e, 0xa8b4, 0x60c6, 0xa8b0, 0x60ca, 0xb86c, 0x60ce,
-	0x60af, 0x95d5, 0x60d7, 0x0000, 0xbaac, 0x629e, 0x080c, 0x9cd2,
-	0x0804, 0x9563, 0x9185, 0x0600, 0x6062, 0x6266, 0x636a, 0x646e,
+	0x0804, 0x98a5, 0x2011, 0x0028, 0x7824, 0xd0cc, 0x1128, 0x7216,
+	0x60c3, 0x0018, 0x0804, 0x98a5, 0x0cd0, 0xc2e5, 0x2011, 0x0100,
+	0x7824, 0xd0cc, 0x0108, 0xc2e5, 0x7216, 0x702f, 0x0008, 0x7858,
+	0x9084, 0x00ff, 0x7036, 0x60c3, 0x0020, 0x0804, 0x98a5, 0x2011,
+	0x0008, 0x7824, 0xd0cc, 0x0108, 0xc2e5, 0x7216, 0x0c08, 0x0036,
+	0x7b14, 0x9384, 0xff00, 0x7816, 0x9384, 0x00ff, 0x8001, 0x1138,
+	0x7824, 0xd0cc, 0x0108, 0xc2e5, 0x7216, 0x003e, 0x0888, 0x0046,
+	0x2021, 0x0800, 0x0006, 0x7824, 0xd0cc, 0x000e, 0x0108, 0xc4e5,
+	0x7416, 0x004e, 0x701e, 0x003e, 0x0818, 0x00d6, 0x6813, 0x0008,
+	0xb810, 0x9085, 0x0700, 0x7002, 0xb814, 0x7006, 0x2069, 0x1800,
+	0x6878, 0x700a, 0x687c, 0x700e, 0x7824, 0xd0cc, 0x1168, 0x7013,
+	0x0898, 0x080c, 0x9893, 0x721a, 0x7a08, 0x7222, 0x2f10, 0x7226,
+	0x2071, 0x024c, 0x00de, 0x0005, 0x7013, 0x0889, 0x0c90, 0x0016,
+	0x7814, 0x9084, 0x0700, 0x8007, 0x0013, 0x001e, 0x0005, 0x96ef,
+	0x96ef, 0x96f1, 0x96ef, 0x96ef, 0x96ef, 0x970b, 0x96ef, 0x080c,
+	0x0dc3, 0x7914, 0x918c, 0x08ff, 0x918d, 0xf600, 0x7916, 0x2009,
+	0x0003, 0x00b9, 0x2069, 0x185e, 0x6804, 0xd0bc, 0x0130, 0x682c,
+	0x9084, 0x00ff, 0x8007, 0x7032, 0x0010, 0x7033, 0x3f00, 0x60c3,
+	0x0001, 0x0804, 0x98a5, 0x2009, 0x0003, 0x0019, 0x7033, 0x7f00,
+	0x0cb0, 0x0016, 0x080c, 0xa190, 0x001e, 0xb810, 0x9085, 0x0100,
+	0x7002, 0xb814, 0x7006, 0x2069, 0x1800, 0x6a78, 0x720a, 0x6a7c,
+	0x720e, 0x7013, 0x0888, 0x918d, 0x0008, 0x7116, 0x080c, 0x9893,
+	0x721a, 0x7a08, 0x7222, 0x2f10, 0x7226, 0x0005, 0x00b6, 0x0096,
+	0x00e6, 0x00d6, 0x00c6, 0x0056, 0x0046, 0x0036, 0x2061, 0x0100,
+	0x2071, 0x1800, 0x7810, 0x2058, 0xb8a0, 0x2028, 0xb910, 0xba14,
+	0x7378, 0x747c, 0x7820, 0x90be, 0x0006, 0x0904, 0x9802, 0x90be,
+	0x000a, 0x1904, 0x97be, 0xb8b0, 0x609e, 0x7814, 0x2048, 0xa880,
+	0xd0fc, 0x0558, 0xaf94, 0x9784, 0xff00, 0x9105, 0x6062, 0x873f,
+	0x9784, 0xff00, 0x0006, 0x7814, 0x2048, 0xa87c, 0xc0fc, 0x9005,
+	0x000e, 0x1160, 0xaf98, 0x87ff, 0x0198, 0x2039, 0x0098, 0x9705,
+	0x6072, 0x7808, 0x6082, 0x2f00, 0x6086, 0x0038, 0x9185, 0x2200,
+	0x6062, 0x6073, 0x0129, 0x6077, 0x0000, 0xb8b0, 0x609e, 0x0050,
+	0x2039, 0x0029, 0x9705, 0x6072, 0x0cc0, 0x9185, 0x0200, 0x6062,
+	0x6073, 0x2029, 0xa880, 0xd0fc, 0x0118, 0xaf98, 0x87ff, 0x1120,
+	0x2f00, 0x6082, 0x7808, 0x6086, 0x6266, 0x636a, 0x646e, 0x6077,
+	0x0000, 0xb88c, 0x8000, 0x9084, 0x00ff, 0xb88e, 0x8007, 0x607a,
+	0x607f, 0x0000, 0xa838, 0x608a, 0xa834, 0x608e, 0xa848, 0x60c6,
+	0xa844, 0x60ca, 0xb86c, 0x60ce, 0x60af, 0x95d5, 0x60d7, 0x0000,
+	0x080c, 0xa175, 0x2009, 0x07d0, 0x60c4, 0x9084, 0xfff0, 0x9005,
+	0x0110, 0x2009, 0x1b58, 0x080c, 0x8591, 0x003e, 0x004e, 0x005e,
+	0x00ce, 0x00de, 0x00ee, 0x009e, 0x00be, 0x0005, 0x7804, 0x9086,
+	0x0040, 0x0904, 0x983e, 0x9185, 0x0100, 0x6062, 0x6266, 0x636a,
+	0x646e, 0x6073, 0x0809, 0x6077, 0x0008, 0x60af, 0x95d5, 0x60d7,
+	0x0000, 0xb88c, 0x8000, 0x9084, 0x00ff, 0xb88e, 0x8007, 0x607a,
+	0x607f, 0x0000, 0x2f00, 0x6082, 0x7808, 0x6086, 0x7814, 0x2048,
+	0xa838, 0x608a, 0xa834, 0x608e, 0xa848, 0x60c6, 0xa844, 0x60ca,
+	0xb86c, 0x60ce, 0xbab0, 0x629e, 0x080c, 0xa175, 0x2009, 0x07d0,
+	0x60c4, 0x9084, 0xfff0, 0x9005, 0x0110, 0x2009, 0x1b58, 0x080c,
+	0x8591, 0x003e, 0x004e, 0x005e, 0x00ce, 0x00de, 0x00ee, 0x009e,
+	0x00be, 0x0005, 0x7814, 0x2048, 0xa880, 0x9084, 0x0003, 0x9086,
+	0x0002, 0x0904, 0x985a, 0x9185, 0x0100, 0x6062, 0x6266, 0x636a,
+	0x646e, 0x6073, 0x0880, 0x6077, 0x0008, 0xb88c, 0x8000, 0x9084,
+	0x00ff, 0xb88e, 0x8007, 0x607a, 0x7838, 0x607e, 0x2f00, 0x6086,
+	0x7808, 0x6082, 0xa894, 0x608a, 0xa890, 0x608e, 0xa8b4, 0x60c6,
+	0xa8b0, 0x60ca, 0xa8b0, 0x7930, 0x9108, 0x7932, 0xa8b4, 0x792c,
+	0x9109, 0x792e, 0xb86c, 0x60ce, 0x60af, 0x95d5, 0x60d7, 0x0000,
+	0xbab0, 0x629e, 0x080c, 0xa152, 0x0804, 0x97ee, 0xb8bc, 0xd084,
+	0x0148, 0xb88c, 0x7814, 0x2048, 0xb88c, 0x784a, 0xa836, 0x2900,
+	0xa83a, 0xb046, 0x9185, 0x0600, 0x6062, 0x6266, 0x636a, 0x646e,
 	0x6073, 0x0829, 0x6077, 0x0000, 0x60af, 0x9575, 0x60d7, 0x0000,
-	0x0804, 0x9546, 0x9185, 0x0700, 0x6062, 0x6266, 0x636a, 0x646e,
-	0x6073, 0x0898, 0x6077, 0x0000, 0xb88c, 0x8000, 0x9084, 0x00ff,
-	0xb88e, 0x8007, 0x607a, 0x607f, 0x0000, 0x2f00, 0x6086, 0x7808,
-	0x6082, 0xa838, 0x608a, 0xa834, 0x608e, 0xa848, 0x60c6, 0xa844,
-	0x60ca, 0xb86c, 0x60ce, 0x60af, 0x95d5, 0x60d7, 0x0000, 0xbaac,
-	0x629e, 0x080c, 0x9cd2, 0x0804, 0x9563, 0x7a10, 0x00b6, 0x2258,
-	0xba8c, 0x8210, 0x9294, 0x00ff, 0xba8e, 0x00be, 0x8217, 0x0005,
-	0x00d6, 0x2069, 0x19c4, 0x6843, 0x0001, 0x00de, 0x0005, 0x60a3,
-	0x0056, 0x60a7, 0x9575, 0x00f1, 0x080c, 0x8417, 0x0005, 0x0016,
-	0x2001, 0x180c, 0x200c, 0x9184, 0x0600, 0x9086, 0x0600, 0x0128,
-	0x0089, 0x080c, 0x8417, 0x001e, 0x0005, 0xc1e5, 0x2001, 0x180c,
-	0x2102, 0x2001, 0x19c5, 0x2003, 0x0000, 0x2001, 0x19cd, 0x2003,
-	0x0000, 0x0c88, 0x0006, 0x6014, 0x9084, 0x1804, 0x9085, 0x0009,
-	0x6016, 0x000e, 0x0005, 0x0016, 0x00c6, 0x0006, 0x2061, 0x0100,
-	0x61a4, 0x60a7, 0x95f5, 0x6014, 0x9084, 0x1804, 0x9085, 0x0008,
-	0x6016, 0x000e, 0xa001, 0xa001, 0xa001, 0x61a6, 0x00ce, 0x001e,
-	0x0005, 0x00c6, 0x00d6, 0x0016, 0x0026, 0x2061, 0x0100, 0x2069,
-	0x0140, 0x080c, 0x72e5, 0x11c0, 0x2001, 0x19e0, 0x2004, 0x9005,
-	0x15d0, 0x080c, 0x7393, 0x1160, 0x2061, 0x0100, 0x6020, 0xd0b4,
-	0x1120, 0x6024, 0xd084, 0x090c, 0x0dc4, 0x080c, 0x8417, 0x0458,
-	0x00c6, 0x2061, 0x19c4, 0x00c8, 0x6904, 0x9194, 0x4000, 0x0540,
-	0x0811, 0x080c, 0x2b75, 0x00c6, 0x2061, 0x19c4, 0x6128, 0x9192,
-	0x0008, 0x1258, 0x8108, 0x612a, 0x6124, 0x00ce, 0x81ff, 0x0198,
-	0x080c, 0x8417, 0x080c, 0x961a, 0x0070, 0x6124, 0x91e5, 0x0000,
-	0x0140, 0x080c, 0xd36d, 0x080c, 0x8420, 0x2009, 0x0014, 0x080c,
-	0x9f88, 0x00ce, 0x0000, 0x002e, 0x001e, 0x00de, 0x00ce, 0x0005,
-	0x2001, 0x19e0, 0x2004, 0x9005, 0x1db0, 0x00c6, 0x2061, 0x19c4,
-	0x6128, 0x9192, 0x0003, 0x1e08, 0x8108, 0x612a, 0x00ce, 0x080c,
-	0x8417, 0x080c, 0x5db5, 0x2009, 0x185a, 0x2114, 0x8210, 0x220a,
-	0x0c10, 0x0096, 0x00c6, 0x00d6, 0x00e6, 0x0016, 0x0026, 0x080c,
-	0x842d, 0x2071, 0x19c4, 0x713c, 0x81ff, 0x0904, 0x9711, 0x2061,
-	0x0100, 0x2069, 0x0140, 0x080c, 0x72e5, 0x1198, 0x0036, 0x2019,
-	0x0002, 0x080c, 0x9964, 0x003e, 0x080c, 0xd36d, 0x703c, 0x9065,
-	0x0120, 0x2009, 0x004a, 0x080c, 0x9f88, 0x080c, 0x7393, 0x0804,
-	0x9711, 0x080c, 0x971d, 0x0904, 0x9711, 0x6904, 0xd1f4, 0x0904,
-	0x9718, 0x080c, 0x2b75, 0x00c6, 0x703c, 0x9065, 0x090c, 0x0dc4,
-	0x6020, 0x00ce, 0x9086, 0x0006, 0x1528, 0x61c8, 0x60c4, 0x9105,
-	0x1508, 0x2009, 0x180c, 0x2104, 0xd0d4, 0x01e0, 0x6214, 0x9294,
-	0x1800, 0x1128, 0x6224, 0x9294, 0x0002, 0x1518, 0x0030, 0xc0d4,
-	0x200a, 0xd0cc, 0x0110, 0x080c, 0x2aa7, 0x6014, 0x9084, 0xe7fd,
-	0x9085, 0x0010, 0x6016, 0x703c, 0x2060, 0x2009, 0x0049, 0x080c,
-	0x9f88, 0x0078, 0x080c, 0xd36d, 0x0036, 0x2019, 0x0001, 0x080c,
-	0x9964, 0x003e, 0x703c, 0x9065, 0x0120, 0x2009, 0x004a, 0x080c,
-	0x9f88, 0x002e, 0x001e, 0x00ee, 0x00de, 0x00ce, 0x009e, 0x0005,
-	0xd1ec, 0x1904, 0x96d1, 0x0804, 0x96d3, 0x00d6, 0x00c6, 0x0096,
-	0x703c, 0x9065, 0x090c, 0x0dc4, 0x2001, 0x0306, 0x200c, 0x9184,
-	0x0030, 0x0904, 0x97e9, 0x9184, 0x0048, 0x9086, 0x0008, 0x1904,
-	0x97e9, 0x2009, 0x0206, 0x2104, 0x2009, 0x0203, 0x210c, 0x9106,
-	0x1904, 0x97e9, 0x2009, 0x022a, 0x2104, 0x2009, 0x022f, 0x210c,
-	0x9116, 0x9084, 0x03ff, 0x918c, 0x03ff, 0x9294, 0x0400, 0x0110,
-	0x9102, 0x0030, 0x2010, 0x2100, 0x9202, 0x2009, 0x0228, 0x9102,
-	0x9082, 0x0005, 0x0250, 0x2008, 0x2001, 0x013b, 0x2004, 0x8004,
-	0x8004, 0x8004, 0x9102, 0x1a04, 0x97e9, 0x2009, 0x1a5f, 0x2104,
-	0x8000, 0x0208, 0x200a, 0x2069, 0x0100, 0x6914, 0x918c, 0x1984,
-	0x918d, 0x0010, 0x6916, 0x69c8, 0x2011, 0x0020, 0x68c8, 0x9106,
-	0x1904, 0x97c2, 0x8211, 0x1dd0, 0x2001, 0x0306, 0x2003, 0x4800,
-	0x00c6, 0x2061, 0x0090, 0x602c, 0xd0b4, 0x1de8, 0x2001, 0x022e,
-	0x200c, 0x2001, 0x012c, 0x080c, 0x1a37, 0x602c, 0xd0b4, 0x1d98,
-	0x2001, 0x022e, 0x2004, 0x9106, 0x9084, 0x07ff, 0x1d60, 0x00ce,
-	0x2001, 0x009a, 0x2003, 0x0004, 0x2001, 0x1a44, 0x2003, 0x0000,
-	0x2001, 0x1a4d, 0x2003, 0x0000, 0x6a88, 0x698c, 0x2200, 0x9105,
-	0x1170, 0x0096, 0x6014, 0x2048, 0xa880, 0xc0dc, 0xa882, 0xa884,
-	0xc0fc, 0xa886, 0x009e, 0x2c10, 0x080c, 0x1aa2, 0x0040, 0x6014,
-	0x2048, 0xaa3a, 0xa936, 0x6ac4, 0x69c8, 0xa946, 0xaa4a, 0x0126,
-	0x00c6, 0x2091, 0x2400, 0x002e, 0x080c, 0x1b2e, 0x190c, 0x0dc4,
-	0x012e, 0x0090, 0x2009, 0x1a60, 0x2104, 0x8000, 0x0208, 0x200a,
-	0x69c8, 0x2011, 0x0020, 0x8211, 0x1df0, 0x68c8, 0x9106, 0x1dc0,
-	0x69c4, 0x68c8, 0x9105, 0x0160, 0x6824, 0xd08c, 0x0110, 0x6827,
-	0x0002, 0x7048, 0xc085, 0x704a, 0x0079, 0x7048, 0xc084, 0x704a,
-	0x2009, 0x07d0, 0x080c, 0x8425, 0x9006, 0x009e, 0x00ce, 0x00de,
-	0x0005, 0x9085, 0x0001, 0x0cc8, 0x0026, 0x00e6, 0x2071, 0x19c4,
-	0x7048, 0xd084, 0x01c0, 0x713c, 0x81ff, 0x01a8, 0x2071, 0x0100,
-	0x9188, 0x0008, 0x2114, 0x928e, 0x0006, 0x1138, 0x7014, 0x9084,
-	0x1984, 0x9085, 0x0012, 0x7016, 0x0030, 0x7014, 0x9084, 0x1984,
-	0x9085, 0x0016, 0x7016, 0x00ee, 0x002e, 0x0005, 0x00b6, 0x00e6,
-	0x00d6, 0x00c6, 0x0066, 0x0056, 0x0046, 0x0006, 0x0126, 0x2091,
-	0x8000, 0x6010, 0x2058, 0xbca0, 0x2071, 0x19c4, 0x7018, 0x2058,
-	0x8bff, 0x0190, 0xb8a0, 0x9406, 0x0118, 0xb854, 0x2058, 0x0cc0,
-	0x6014, 0x0096, 0x2048, 0xac70, 0xad74, 0xae7c, 0x009e, 0x080c,
-	0x6548, 0x0110, 0x9085, 0x0001, 0x012e, 0x000e, 0x004e, 0x005e,
-	0x006e, 0x00ce, 0x00de, 0x00ee, 0x00be, 0x0005, 0x080c, 0x9171,
-	0x7003, 0x0f00, 0x7808, 0xd09c, 0x0128, 0xb810, 0x9084, 0x00ff,
-	0x700a, 0xb814, 0x700e, 0x60c3, 0x0008, 0x0804, 0x95f7, 0x0156,
-	0x080c, 0x91bc, 0x7003, 0x0200, 0x2011, 0x1848, 0x63f0, 0x2312,
-	0x20a9, 0x0006, 0x2011, 0x1840, 0x2019, 0x1841, 0x9ef0, 0x0002,
-	0x2376, 0x8e70, 0x2276, 0x8e70, 0x9398, 0x0002, 0x9290, 0x0002,
-	0x1f04, 0x9860, 0x60c3, 0x001c, 0x015e, 0x0804, 0x95f7, 0x0016,
-	0x0026, 0x080c, 0x9198, 0x080c, 0x91aa, 0x9e80, 0x0004, 0x20e9,
-	0x0000, 0x20a0, 0x7814, 0x0096, 0x2048, 0xa800, 0x2048, 0xa860,
-	0x20e0, 0xa85c, 0x9080, 0x0022, 0x2098, 0x009e, 0x7808, 0x9088,
-	0x0002, 0x21a8, 0x9192, 0x0010, 0x1250, 0x4003, 0x9080, 0x0004,
-	0x8003, 0x60c2, 0x080c, 0x95f7, 0x002e, 0x001e, 0x0005, 0x20a9,
-	0x0010, 0x4003, 0x080c, 0x9cf6, 0x20a1, 0x0240, 0x22a8, 0x4003,
-	0x0c68, 0x080c, 0x9171, 0x7003, 0x6200, 0x7808, 0x700e, 0x60c3,
-	0x0008, 0x0804, 0x95f7, 0x0016, 0x0026, 0x080c, 0x9171, 0x20e9,
-	0x0000, 0x20a1, 0x024c, 0x7814, 0x0096, 0x2048, 0xa800, 0x2048,
-	0xa860, 0x20e0, 0xa85c, 0x9080, 0x0024, 0x2098, 0x009e, 0x7808,
-	0x9088, 0x0002, 0x21a8, 0x4003, 0x8003, 0x60c2, 0x080c, 0x95f7,
-	0x002e, 0x001e, 0x0005, 0x00e6, 0x00c6, 0x0006, 0x0126, 0x2091,
-	0x8000, 0x2071, 0x19c4, 0x700c, 0x2060, 0x8cff, 0x0178, 0x080c,
-	0xbb56, 0x1110, 0x080c, 0xa717, 0x600c, 0x0006, 0x080c, 0xbc8f,
-	0x080c, 0x9f18, 0x080c, 0x9a08, 0x00ce, 0x0c78, 0x2c00, 0x700e,
-	0x700a, 0x012e, 0x000e, 0x00ce, 0x00ee, 0x0005, 0x0126, 0x0156,
-	0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0026, 0x0016, 0x0006,
-	0x2091, 0x8000, 0x2001, 0x180c, 0x200c, 0x918c, 0xe7ff, 0x2102,
-	0x2069, 0x0100, 0x2079, 0x0140, 0x2071, 0x19c4, 0x7024, 0x2060,
-	0x8cff, 0x01f8, 0x080c, 0x9623, 0x6ac0, 0x68c3, 0x0000, 0x080c,
-	0x8420, 0x00c6, 0x2061, 0x0100, 0x080c, 0x9d0f, 0x00ce, 0x20a9,
-	0x01f4, 0x0461, 0x2009, 0x0013, 0x080c, 0x9f88, 0x000e, 0x001e,
-	0x002e, 0x006e, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x015e, 0x012e,
-	0x0005, 0x2001, 0x1800, 0x2004, 0x9096, 0x0001, 0x0d78, 0x9096,
-	0x0004, 0x0d60, 0x080c, 0x8420, 0x6814, 0x9084, 0x0001, 0x0110,
-	0x68a7, 0x95f5, 0x6817, 0x0008, 0x68c3, 0x0000, 0x2011, 0x5d5f,
-	0x080c, 0x835e, 0x20a9, 0x01f4, 0x0009, 0x08c0, 0x6824, 0xd094,
-	0x0140, 0x6827, 0x0004, 0x7804, 0x9084, 0x4000, 0x190c, 0x2b75,
-	0x0090, 0xd084, 0x0118, 0x6827, 0x4001, 0x0010, 0x1f04, 0x9946,
-	0x7804, 0x9084, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x2b65,
-	0x9006, 0x080c, 0x2b65, 0x0005, 0x0126, 0x0156, 0x00f6, 0x00e6,
-	0x00d6, 0x00c6, 0x0066, 0x0026, 0x0016, 0x0006, 0x2091, 0x8000,
-	0x2001, 0x180c, 0x200c, 0x918c, 0xdbff, 0x2102, 0x2069, 0x0100,
-	0x2079, 0x0140, 0x2071, 0x19c4, 0x703c, 0x2060, 0x8cff, 0x0904,
-	0x99cb, 0x9386, 0x0002, 0x1128, 0x6814, 0x9084, 0x0002, 0x0904,
-	0x99cb, 0x68af, 0x95f5, 0x6817, 0x0010, 0x2009, 0x00fa, 0x8109,
-	0x1df0, 0x69c6, 0x68cb, 0x0008, 0x080c, 0x842d, 0x080c, 0x1eda,
-	0x2001, 0x0032, 0x6920, 0xd1bc, 0x0130, 0x8001, 0x1dd8, 0x692c,
-	0x918d, 0x0008, 0x692e, 0x20a9, 0x03e8, 0x6824, 0xd094, 0x0140,
-	0x6827, 0x0004, 0x7804, 0x9084, 0x4000, 0x190c, 0x2b75, 0x0090,
-	0xd08c, 0x0118, 0x6827, 0x0002, 0x0010, 0x1f04, 0x99a5, 0x7804,
-	0x9084, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x2b65, 0x9006,
-	0x080c, 0x2b65, 0x6827, 0x4000, 0x6824, 0x83ff, 0x1120, 0x2009,
-	0x0049, 0x080c, 0x9f88, 0x000e, 0x001e, 0x002e, 0x006e, 0x00ce,
-	0x00de, 0x00ee, 0x00fe, 0x015e, 0x012e, 0x0005, 0x00d6, 0x0126,
-	0x2091, 0x8000, 0x2069, 0x19c4, 0x6a06, 0x012e, 0x00de, 0x0005,
-	0x00d6, 0x0126, 0x2091, 0x8000, 0x2069, 0x19c4, 0x6a32, 0x012e,
-	0x00de, 0x0005, 0x080c, 0x932c, 0x7047, 0x1000, 0x0098, 0x080c,
-	0x932c, 0x7047, 0x4000, 0x0070, 0x080c, 0x932c, 0x7047, 0x2000,
-	0x0048, 0x080c, 0x932c, 0x7047, 0x0400, 0x0020, 0x080c, 0x932c,
-	0x7047, 0x0200, 0x7824, 0x7032, 0x60c3, 0x0020, 0x0804, 0x95f7,
-	0x00e6, 0x2071, 0x19c4, 0x7020, 0x9005, 0x0110, 0x8001, 0x7022,
-	0x00ee, 0x0005, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0076, 0x0066,
-	0x0006, 0x0126, 0x2091, 0x8000, 0x2071, 0x19c4, 0x7614, 0x2660,
-	0x2678, 0x2039, 0x0001, 0x87ff, 0x0904, 0x9aab, 0x8cff, 0x0904,
-	0x9aab, 0x6020, 0x9086, 0x0006, 0x1904, 0x9aa6, 0x88ff, 0x0138,
-	0x2800, 0x9c06, 0x1904, 0x9aa6, 0x2039, 0x0000, 0x0050, 0x6010,
-	0x9b06, 0x1904, 0x9aa6, 0x85ff, 0x0120, 0x6024, 0x9106, 0x1904,
-	0x9aa6, 0x7024, 0x9c06, 0x15b0, 0x2069, 0x0100, 0x68c0, 0x9005,
-	0x1160, 0x6824, 0xd084, 0x0148, 0x6827, 0x0001, 0x080c, 0x8420,
-	0x080c, 0x9b30, 0x7027, 0x0000, 0x0428, 0x080c, 0x8420, 0x6820,
-	0xd0b4, 0x0110, 0x68a7, 0x95f5, 0x6817, 0x0008, 0x68c3, 0x0000,
-	0x080c, 0x9b30, 0x7027, 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04,
-	0x9384, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x2b65, 0x9006,
-	0x080c, 0x2b65, 0x2069, 0x0100, 0x6824, 0xd084, 0x0110, 0x6827,
-	0x0001, 0x003e, 0x7014, 0x9c36, 0x1110, 0x660c, 0x7616, 0x7010,
-	0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118, 0x2f00, 0x7012, 0x0010,
-	0x7013, 0x0000, 0x660c, 0x0066, 0x2c00, 0x9f06, 0x0110, 0x7e0e,
-	0x0008, 0x2678, 0x600f, 0x0000, 0x6014, 0x0096, 0x2048, 0x080c,
-	0xb953, 0x0110, 0x080c, 0xd101, 0x009e, 0x080c, 0x9f42, 0x080c,
-	0x9a08, 0x88ff, 0x1190, 0x00ce, 0x0804, 0x9a23, 0x2c78, 0x600c,
-	0x2060, 0x0804, 0x9a23, 0x9006, 0x012e, 0x000e, 0x006e, 0x007e,
-	0x00ce, 0x00de, 0x00ee, 0x00fe, 0x0005, 0x601b, 0x0000, 0x00ce,
-	0x98c5, 0x0001, 0x0c88, 0x00f6, 0x00e6, 0x00d6, 0x0096, 0x00c6,
-	0x0066, 0x0026, 0x0006, 0x0126, 0x2091, 0x8000, 0x2071, 0x19c4,
-	0x7638, 0x2660, 0x2678, 0x8cff, 0x0904, 0x9b1f, 0x6020, 0x9086,
-	0x0006, 0x1904, 0x9b1a, 0x87ff, 0x0128, 0x2700, 0x9c06, 0x1904,
-	0x9b1a, 0x0040, 0x6010, 0x9b06, 0x15e8, 0x85ff, 0x0118, 0x6024,
-	0x9106, 0x15c0, 0x703c, 0x9c06, 0x1168, 0x0036, 0x2019, 0x0001,
-	0x080c, 0x9964, 0x7033, 0x0000, 0x9006, 0x703e, 0x7042, 0x7046,
-	0x704a, 0x003e, 0x7038, 0x9c36, 0x1110, 0x660c, 0x763a, 0x7034,
-	0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118, 0x2f00, 0x7036, 0x0010,
-	0x7037, 0x0000, 0x660c, 0x0066, 0x2c00, 0x9f06, 0x0110, 0x7e0e,
-	0x0008, 0x2678, 0x600f, 0x0000, 0x6014, 0x2048, 0x080c, 0xb953,
-	0x0110, 0x080c, 0xd101, 0x080c, 0x9f42, 0x87ff, 0x1198, 0x00ce,
-	0x0804, 0x9acb, 0x2c78, 0x600c, 0x2060, 0x0804, 0x9acb, 0x9006,
-	0x012e, 0x000e, 0x002e, 0x006e, 0x00ce, 0x009e, 0x00de, 0x00ee,
-	0x00fe, 0x0005, 0x601b, 0x0000, 0x00ce, 0x97bd, 0x0001, 0x0c80,
-	0x00e6, 0x2071, 0x19c4, 0x2001, 0x1800, 0x2004, 0x9086, 0x0002,
-	0x1118, 0x7007, 0x0005, 0x0010, 0x7007, 0x0000, 0x00ee, 0x0005,
-	0x00f6, 0x00e6, 0x00c6, 0x0066, 0x0026, 0x0006, 0x0126, 0x2091,
-	0x8000, 0x2071, 0x19c4, 0x2c10, 0x7638, 0x2660, 0x2678, 0x8cff,
-	0x0540, 0x2200, 0x9c06, 0x1508, 0x7038, 0x9c36, 0x1110, 0x660c,
-	0x763a, 0x7034, 0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118, 0x2f00,
-	0x7036, 0x0010, 0x7037, 0x0000, 0x660c, 0x2c00, 0x9f06, 0x0110,
-	0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000, 0x6004, 0x9086, 0x0040,
-	0x090c, 0x8b2b, 0x9085, 0x0001, 0x0020, 0x2c78, 0x600c, 0x2060,
-	0x08b0, 0x012e, 0x000e, 0x002e, 0x006e, 0x00ce, 0x00ee, 0x00fe,
-	0x0005, 0x0096, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0026,
-	0x0006, 0x0126, 0x2091, 0x8000, 0x2071, 0x19c4, 0x760c, 0x2660,
-	0x2678, 0x8cff, 0x0904, 0x9c16, 0x6010, 0x00b6, 0x2058, 0xb8a0,
-	0x00be, 0x9206, 0x1904, 0x9c11, 0x7024, 0x9c06, 0x1520, 0x2069,
-	0x0100, 0x68c0, 0x9005, 0x0904, 0x9be8, 0x080c, 0x9623, 0x68c3,
-	0x0000, 0x080c, 0x9b30, 0x7027, 0x0000, 0x0036, 0x2069, 0x0140,
-	0x6b04, 0x9384, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x2b65,
-	0x9006, 0x080c, 0x2b65, 0x2069, 0x0100, 0x6824, 0xd084, 0x0110,
-	0x6827, 0x0001, 0x003e, 0x700c, 0x9c36, 0x1110, 0x660c, 0x760e,
-	0x7008, 0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118, 0x2f00, 0x700a,
-	0x0010, 0x700b, 0x0000, 0x660c, 0x0066, 0x2c00, 0x9f06, 0x0110,
-	0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000, 0x080c, 0xbb45, 0x1180,
-	0x080c, 0x308f, 0x080c, 0xbb56, 0x1518, 0x080c, 0xa717, 0x0400,
-	0x080c, 0x9b30, 0x6824, 0xd084, 0x09b0, 0x6827, 0x0001, 0x0898,
-	0x080c, 0xbb56, 0x1118, 0x080c, 0xa717, 0x0090, 0x6014, 0x2048,
-	0x080c, 0xb953, 0x0168, 0x6020, 0x9086, 0x0003, 0x1508, 0xa86b,
-	0x0103, 0xab7e, 0xa87b, 0x0000, 0x080c, 0x6b11, 0x080c, 0xbb39,
-	0x080c, 0xbc8f, 0x080c, 0x9f42, 0x080c, 0x9a08, 0x00ce, 0x0804,
-	0x9b91, 0x2c78, 0x600c, 0x2060, 0x0804, 0x9b91, 0x012e, 0x000e,
-	0x002e, 0x006e, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x009e, 0x0005,
-	0x6020, 0x9086, 0x0006, 0x1d20, 0x080c, 0xd101, 0x0c08, 0x00d6,
-	0x080c, 0x91bc, 0x7003, 0x0200, 0x7007, 0x0014, 0x60c3, 0x0014,
-	0x20e1, 0x0001, 0x2099, 0x1965, 0x20e9, 0x0000, 0x20a1, 0x0250,
-	0x20a9, 0x0004, 0x4003, 0x7023, 0x0004, 0x7027, 0x7878, 0x080c,
-	0x95f7, 0x00de, 0x0005, 0x080c, 0x91bc, 0x700b, 0x0800, 0x7814,
-	0x9084, 0xff00, 0x700e, 0x7814, 0x9084, 0x00ff, 0x7022, 0x782c,
-	0x7026, 0x7828, 0x9084, 0x00ff, 0x9085, 0x0200, 0x7002, 0x7828,
-	0x9084, 0xff00, 0x8007, 0x7006, 0x60c2, 0x0804, 0x95f7, 0x080c,
-	0x91bc, 0x7003, 0x0200, 0x7007, 0x0001, 0x700b, 0xc000, 0x6238,
+	0x0804, 0x97d1, 0x9185, 0x0700, 0x6062, 0x6266, 0x636a, 0x646e,
+	0x7824, 0xd0cc, 0x7826, 0x0118, 0x6073, 0x0889, 0x0010, 0x6073,
+	0x0898, 0x6077, 0x0000, 0xb88c, 0x8000, 0x9084, 0x00ff, 0xb88e,
+	0x8007, 0x607a, 0x607f, 0x0000, 0x2f00, 0x6086, 0x7808, 0x6082,
+	0xa838, 0x608a, 0xa834, 0x608e, 0xa848, 0x60c6, 0xa844, 0x60ca,
+	0xb86c, 0x60ce, 0x60af, 0x95d5, 0x60d7, 0x0000, 0xbab0, 0x629e,
+	0x7824, 0xd0cc, 0x0120, 0x080c, 0xa175, 0x0804, 0x97ee, 0x080c,
+	0xa152, 0x0804, 0x97ee, 0x7a10, 0x00b6, 0x2258, 0xba8c, 0x8210,
+	0x9294, 0x00ff, 0xba8e, 0x00be, 0x8217, 0x0005, 0x00d6, 0x2069,
+	0x19c4, 0x6843, 0x0001, 0x00de, 0x0005, 0x60a3, 0x0056, 0x60a7,
+	0x9575, 0x00f1, 0x080c, 0x8583, 0x0005, 0x0016, 0x2001, 0x180c,
+	0x200c, 0x9184, 0x0600, 0x9086, 0x0600, 0x0128, 0x0089, 0x080c,
+	0x8583, 0x001e, 0x0005, 0xc1e5, 0x2001, 0x180c, 0x2102, 0x2001,
+	0x19c5, 0x2003, 0x0000, 0x2001, 0x19cd, 0x2003, 0x0000, 0x0c88,
+	0x0006, 0x6014, 0x9084, 0x1804, 0x9085, 0x0009, 0x6016, 0x000e,
+	0x0005, 0x0016, 0x00c6, 0x0006, 0x2061, 0x0100, 0x61a4, 0x60a7,
+	0x95f5, 0x6014, 0x9084, 0x1804, 0x9085, 0x0008, 0x6016, 0x000e,
+	0xa001, 0xa001, 0xa001, 0x61a6, 0x00ce, 0x001e, 0x0005, 0x00c6,
+	0x00d6, 0x0016, 0x0026, 0x2061, 0x0100, 0x2069, 0x0140, 0x080c,
+	0x7351, 0x11c0, 0x2001, 0x19e0, 0x2004, 0x9005, 0x15d0, 0x080c,
+	0x73fe, 0x1160, 0x2061, 0x0100, 0x6020, 0xd0b4, 0x1120, 0x6024,
+	0xd084, 0x090c, 0x0dc3, 0x080c, 0x8583, 0x0458, 0x00c6, 0x2061,
+	0x19c4, 0x00c8, 0x6904, 0x9194, 0x4000, 0x0540, 0x0811, 0x080c,
+	0x2bde, 0x00c6, 0x2061, 0x19c4, 0x6128, 0x9192, 0x0008, 0x1258,
+	0x8108, 0x612a, 0x6124, 0x00ce, 0x81ff, 0x0198, 0x080c, 0x8583,
+	0x080c, 0x98c8, 0x0070, 0x6124, 0x91e5, 0x0000, 0x0140, 0x080c,
+	0xe0fa, 0x080c, 0x858c, 0x2009, 0x0014, 0x080c, 0xa419, 0x00ce,
+	0x0000, 0x002e, 0x001e, 0x00de, 0x00ce, 0x0005, 0x2001, 0x19e0,
+	0x2004, 0x9005, 0x1db0, 0x00c6, 0x2061, 0x19c4, 0x6128, 0x9192,
+	0x0003, 0x1e08, 0x8108, 0x612a, 0x00ce, 0x080c, 0x8583, 0x080c,
+	0x5e72, 0x2009, 0x185a, 0x2114, 0x8210, 0x220a, 0x0c10, 0x0096,
+	0x00c6, 0x00d6, 0x00e6, 0x0016, 0x0026, 0x080c, 0x8599, 0x2071,
+	0x19c4, 0x713c, 0x81ff, 0x0904, 0x99bf, 0x2061, 0x0100, 0x2069,
+	0x0140, 0x080c, 0x7351, 0x1198, 0x0036, 0x2019, 0x0002, 0x080c,
+	0x9c35, 0x003e, 0x080c, 0xe0fa, 0x703c, 0x9065, 0x0120, 0x2009,
+	0x004a, 0x080c, 0xa419, 0x080c, 0x73fe, 0x0804, 0x99bf, 0x080c,
+	0x99cb, 0x0904, 0x99bf, 0x6904, 0xd1f4, 0x0904, 0x99c6, 0x080c,
+	0x2bde, 0x00c6, 0x703c, 0x9065, 0x090c, 0x0dc3, 0x6020, 0x00ce,
+	0x9086, 0x0006, 0x1528, 0x61c8, 0x60c4, 0x9105, 0x1508, 0x2009,
+	0x180c, 0x2104, 0xd0d4, 0x01e0, 0x6214, 0x9294, 0x1800, 0x1128,
+	0x6224, 0x9294, 0x0002, 0x1518, 0x0030, 0xc0d4, 0x200a, 0xd0cc,
+	0x0110, 0x080c, 0x2b10, 0x6014, 0x9084, 0xe7fd, 0x9085, 0x0010,
+	0x6016, 0x703c, 0x2060, 0x2009, 0x0049, 0x080c, 0xa419, 0x0078,
+	0x080c, 0xe0fa, 0x0036, 0x2019, 0x0001, 0x080c, 0x9c35, 0x003e,
+	0x703c, 0x9065, 0x0120, 0x2009, 0x004a, 0x080c, 0xa419, 0x002e,
+	0x001e, 0x00ee, 0x00de, 0x00ce, 0x009e, 0x0005, 0xd1ec, 0x1904,
+	0x997f, 0x0804, 0x9981, 0x00d6, 0x00c6, 0x0096, 0x703c, 0x9065,
+	0x090c, 0x0dc3, 0x2001, 0x0306, 0x200c, 0x9184, 0x0030, 0x0904,
+	0x9a97, 0x9184, 0x0048, 0x9086, 0x0008, 0x1904, 0x9a97, 0x2009,
+	0x0206, 0x2104, 0x2009, 0x0203, 0x210c, 0x9106, 0x1904, 0x9a97,
+	0x2009, 0x022a, 0x2104, 0x2009, 0x022f, 0x210c, 0x9116, 0x9084,
+	0x03ff, 0x918c, 0x03ff, 0x9294, 0x0400, 0x0110, 0x9102, 0x0030,
+	0x2010, 0x2100, 0x9202, 0x2009, 0x0228, 0x9102, 0x9082, 0x0005,
+	0x0250, 0x2008, 0x2001, 0x013b, 0x2004, 0x8004, 0x8004, 0x8004,
+	0x9102, 0x1a04, 0x9a97, 0x2009, 0x1a5f, 0x2104, 0x8000, 0x0208,
+	0x200a, 0x2069, 0x0100, 0x6914, 0x918c, 0x1984, 0x918d, 0x0010,
+	0x6916, 0x69c8, 0x2011, 0x0020, 0x68c8, 0x9106, 0x1904, 0x9a70,
+	0x8211, 0x1dd0, 0x2001, 0x0306, 0x2003, 0x4800, 0x00c6, 0x2061,
+	0x0090, 0x602c, 0xd0b4, 0x1de8, 0x2001, 0x022e, 0x200c, 0x2001,
+	0x012c, 0x080c, 0x1a7f, 0x602c, 0xd0b4, 0x1d98, 0x2001, 0x022e,
+	0x2004, 0x9106, 0x9084, 0x07ff, 0x1d60, 0x00ce, 0x2001, 0x009a,
+	0x2003, 0x0004, 0x2001, 0x1a44, 0x2003, 0x0000, 0x2001, 0x1a4d,
+	0x2003, 0x0000, 0x6a88, 0x698c, 0x2200, 0x9105, 0x1170, 0x0096,
+	0x6014, 0x2048, 0xa880, 0xc0dc, 0xa882, 0xa884, 0xc0fc, 0xa886,
+	0x009e, 0x2c10, 0x080c, 0x1aea, 0x0040, 0x6014, 0x2048, 0xaa3a,
+	0xa936, 0x6ac4, 0x69c8, 0xa946, 0xaa4a, 0x0126, 0x00c6, 0x2091,
+	0x2400, 0x002e, 0x080c, 0x1b76, 0x190c, 0x0dc3, 0x012e, 0x0090,
+	0x2009, 0x1a60, 0x2104, 0x8000, 0x0208, 0x200a, 0x69c8, 0x2011,
+	0x0020, 0x8211, 0x1df0, 0x68c8, 0x9106, 0x1dc0, 0x69c4, 0x68c8,
+	0x9105, 0x0160, 0x6824, 0xd08c, 0x0110, 0x6827, 0x0002, 0x7048,
+	0xc085, 0x704a, 0x0079, 0x7048, 0xc084, 0x704a, 0x2009, 0x07d0,
+	0x080c, 0x8591, 0x9006, 0x009e, 0x00ce, 0x00de, 0x0005, 0x9085,
+	0x0001, 0x0cc8, 0x0026, 0x00e6, 0x2071, 0x19c4, 0x7048, 0xd084,
+	0x01c0, 0x713c, 0x81ff, 0x01a8, 0x2071, 0x0100, 0x9188, 0x0008,
+	0x2114, 0x928e, 0x0006, 0x1138, 0x7014, 0x9084, 0x1984, 0x9085,
+	0x0012, 0x7016, 0x0030, 0x7014, 0x9084, 0x1984, 0x9085, 0x0016,
+	0x7016, 0x00ee, 0x002e, 0x0005, 0x00b6, 0x00e6, 0x00d6, 0x00c6,
+	0x0066, 0x0056, 0x0046, 0x0006, 0x0126, 0x2091, 0x8000, 0x6010,
+	0x2058, 0xbca0, 0x2071, 0x19c4, 0x7018, 0x2058, 0x8bff, 0x0190,
+	0xb8a0, 0x9406, 0x0118, 0xb854, 0x2058, 0x0cc0, 0x6014, 0x0096,
+	0x2048, 0xac70, 0xad74, 0xae7c, 0x009e, 0x080c, 0x6650, 0x0110,
+	0x9085, 0x0001, 0x012e, 0x000e, 0x004e, 0x005e, 0x006e, 0x00ce,
+	0x00de, 0x00ee, 0x00be, 0x0005, 0x080c, 0x939e, 0x7003, 0x1200,
+	0x7838, 0x7012, 0x783c, 0x7016, 0x00c6, 0x7820, 0x9086, 0x0004,
+	0x1148, 0x7810, 0x9005, 0x0130, 0x00b6, 0x2058, 0xb810, 0xb914,
+	0x00be, 0x0020, 0x2061, 0x1800, 0x6078, 0x617c, 0x9084, 0x00ff,
+	0x700a, 0x710e, 0x00ce, 0x60c3, 0x002c, 0x0804, 0x98a5, 0x080c,
+	0x939e, 0x7003, 0x0f00, 0x7808, 0xd09c, 0x0128, 0xb810, 0x9084,
+	0x00ff, 0x700a, 0xb814, 0x700e, 0x60c3, 0x0008, 0x0804, 0x98a5,
+	0x0156, 0x080c, 0x93e9, 0x7003, 0x0200, 0x2011, 0x1848, 0x63f0,
+	0x2312, 0x20a9, 0x0006, 0x2011, 0x1840, 0x2019, 0x1841, 0x9ef0,
+	0x0002, 0x2376, 0x8e70, 0x2276, 0x8e70, 0x9398, 0x0002, 0x9290,
+	0x0002, 0x1f04, 0x9b31, 0x60c3, 0x001c, 0x015e, 0x0804, 0x98a5,
+	0x0016, 0x0026, 0x080c, 0x93c5, 0x080c, 0x93d7, 0x9e80, 0x0004,
+	0x20e9, 0x0000, 0x20a0, 0x7814, 0x0096, 0x2048, 0xa800, 0x2048,
+	0xa860, 0x20e0, 0xa85c, 0x9080, 0x0022, 0x2098, 0x009e, 0x7808,
+	0x9088, 0x0002, 0x21a8, 0x9192, 0x0010, 0x1250, 0x4003, 0x9080,
+	0x0004, 0x8003, 0x60c2, 0x080c, 0x98a5, 0x002e, 0x001e, 0x0005,
+	0x20a9, 0x0010, 0x4003, 0x080c, 0xa17b, 0x20a1, 0x0240, 0x22a8,
+	0x4003, 0x0c68, 0x080c, 0x939e, 0x7003, 0x6200, 0x7808, 0x700e,
+	0x60c3, 0x0008, 0x0804, 0x98a5, 0x0016, 0x0026, 0x080c, 0x939e,
+	0x20e9, 0x0000, 0x20a1, 0x024c, 0x7814, 0x0096, 0x2048, 0xa800,
+	0x2048, 0xa860, 0x20e0, 0xa85c, 0x9080, 0x0024, 0x2098, 0x009e,
+	0x7808, 0x9088, 0x0002, 0x21a8, 0x4003, 0x8003, 0x60c2, 0x080c,
+	0x98a5, 0x002e, 0x001e, 0x0005, 0x00e6, 0x00c6, 0x0006, 0x0126,
+	0x2091, 0x8000, 0x2071, 0x19c4, 0x700c, 0x2060, 0x8cff, 0x0178,
+	0x080c, 0xc3d1, 0x1110, 0x080c, 0xadb3, 0x600c, 0x0006, 0x080c,
+	0xc638, 0x080c, 0xa39d, 0x080c, 0x9cd9, 0x00ce, 0x0c78, 0x2c00,
+	0x700e, 0x700a, 0x012e, 0x000e, 0x00ce, 0x00ee, 0x0005, 0x0126,
+	0x0156, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0026, 0x0016,
+	0x0006, 0x2091, 0x8000, 0x2001, 0x180c, 0x200c, 0x918c, 0xe7ff,
+	0x2102, 0x2069, 0x0100, 0x2079, 0x0140, 0x2071, 0x19c4, 0x7024,
+	0x2060, 0x8cff, 0x01f8, 0x080c, 0x98d1, 0x6ac0, 0x68c3, 0x0000,
+	0x080c, 0x858c, 0x00c6, 0x2061, 0x0100, 0x080c, 0xa194, 0x00ce,
+	0x20a9, 0x01f4, 0x0461, 0x2009, 0x0013, 0x080c, 0xa419, 0x000e,
+	0x001e, 0x002e, 0x006e, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x015e,
+	0x012e, 0x0005, 0x2001, 0x1800, 0x2004, 0x9096, 0x0001, 0x0d78,
+	0x9096, 0x0004, 0x0d60, 0x080c, 0x858c, 0x6814, 0x9084, 0x0001,
+	0x0110, 0x68a7, 0x95f5, 0x6817, 0x0008, 0x68c3, 0x0000, 0x2011,
+	0x5e1c, 0x080c, 0x84c2, 0x20a9, 0x01f4, 0x0009, 0x08c0, 0x6824,
+	0xd094, 0x0140, 0x6827, 0x0004, 0x7804, 0x9084, 0x4000, 0x190c,
+	0x2bde, 0x0090, 0xd084, 0x0118, 0x6827, 0x4001, 0x0010, 0x1f04,
+	0x9c17, 0x7804, 0x9084, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c,
+	0x2bce, 0x9006, 0x080c, 0x2bce, 0x0005, 0x0126, 0x0156, 0x00f6,
+	0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0026, 0x0016, 0x0006, 0x2091,
+	0x8000, 0x2001, 0x180c, 0x200c, 0x918c, 0xdbff, 0x2102, 0x2069,
+	0x0100, 0x2079, 0x0140, 0x2071, 0x19c4, 0x703c, 0x2060, 0x8cff,
+	0x0904, 0x9c9c, 0x9386, 0x0002, 0x1128, 0x6814, 0x9084, 0x0002,
+	0x0904, 0x9c9c, 0x68af, 0x95f5, 0x6817, 0x0010, 0x2009, 0x00fa,
+	0x8109, 0x1df0, 0x69c6, 0x68cb, 0x0008, 0x080c, 0x8599, 0x080c,
+	0x1f22, 0x2001, 0x0032, 0x6920, 0xd1bc, 0x0130, 0x8001, 0x1dd8,
+	0x692c, 0x918d, 0x0008, 0x692e, 0x20a9, 0x03e8, 0x6824, 0xd094,
+	0x0140, 0x6827, 0x0004, 0x7804, 0x9084, 0x4000, 0x190c, 0x2bde,
+	0x0090, 0xd08c, 0x0118, 0x6827, 0x0002, 0x0010, 0x1f04, 0x9c76,
+	0x7804, 0x9084, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x2bce,
+	0x9006, 0x080c, 0x2bce, 0x6827, 0x4000, 0x6824, 0x83ff, 0x1120,
+	0x2009, 0x0049, 0x080c, 0xa419, 0x000e, 0x001e, 0x002e, 0x006e,
+	0x00ce, 0x00de, 0x00ee, 0x00fe, 0x015e, 0x012e, 0x0005, 0x00d6,
+	0x0126, 0x2091, 0x8000, 0x2069, 0x19c4, 0x6a06, 0x012e, 0x00de,
+	0x0005, 0x00d6, 0x0126, 0x2091, 0x8000, 0x2069, 0x19c4, 0x6a32,
+	0x012e, 0x00de, 0x0005, 0x080c, 0x9561, 0x7047, 0x1000, 0x0098,
+	0x080c, 0x9561, 0x7047, 0x4000, 0x0070, 0x080c, 0x9561, 0x7047,
+	0x2000, 0x0048, 0x080c, 0x9561, 0x7047, 0x0400, 0x0020, 0x080c,
+	0x9561, 0x7047, 0x0200, 0x7854, 0x7032, 0x60c3, 0x0020, 0x0804,
+	0x98a5, 0x00e6, 0x2071, 0x19c4, 0x7020, 0x9005, 0x0110, 0x8001,
+	0x7022, 0x00ee, 0x0005, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0076,
+	0x0066, 0x0006, 0x0126, 0x2091, 0x8000, 0x2071, 0x19c4, 0x7614,
+	0x2660, 0x2678, 0x2039, 0x0001, 0x87ff, 0x0904, 0x9d7e, 0x8cff,
+	0x0904, 0x9d7e, 0x6020, 0x9086, 0x0006, 0x1904, 0x9d79, 0x88ff,
+	0x0138, 0x2800, 0x9c06, 0x1904, 0x9d79, 0x2039, 0x0000, 0x0050,
+	0x6010, 0x9b06, 0x1904, 0x9d79, 0x85ff, 0x0120, 0x6054, 0x9106,
+	0x1904, 0x9d79, 0x7024, 0x9c06, 0x15b0, 0x2069, 0x0100, 0x68c0,
+	0x9005, 0x1160, 0x6824, 0xd084, 0x0148, 0x6827, 0x0001, 0x080c,
+	0x858c, 0x080c, 0x9e03, 0x7027, 0x0000, 0x0428, 0x080c, 0x858c,
+	0x6820, 0xd0b4, 0x0110, 0x68a7, 0x95f5, 0x6817, 0x0008, 0x68c3,
+	0x0000, 0x080c, 0x9e03, 0x7027, 0x0000, 0x0036, 0x2069, 0x0140,
+	0x6b04, 0x9384, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x2bce,
+	0x9006, 0x080c, 0x2bce, 0x2069, 0x0100, 0x6824, 0xd084, 0x0110,
+	0x6827, 0x0001, 0x003e, 0x7014, 0x9c36, 0x1110, 0x660c, 0x7616,
+	0x7010, 0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118, 0x2f00, 0x7012,
+	0x0010, 0x7013, 0x0000, 0x660c, 0x0066, 0x2c00, 0x9f06, 0x0110,
+	0x7e0e, 0x0008, 0x2678, 0x89ff, 0x1168, 0x600f, 0x0000, 0x6014,
+	0x0096, 0x2048, 0x080c, 0xc1cb, 0x0110, 0x080c, 0xdcc3, 0x009e,
+	0x080c, 0xa3cf, 0x080c, 0x9cd9, 0x88ff, 0x1190, 0x00ce, 0x0804,
+	0x9cf4, 0x2c78, 0x600c, 0x2060, 0x0804, 0x9cf4, 0x9006, 0x012e,
+	0x000e, 0x006e, 0x007e, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x0005,
+	0x601b, 0x0000, 0x00ce, 0x98c5, 0x0001, 0x0c88, 0x00f6, 0x00e6,
+	0x00d6, 0x0096, 0x00c6, 0x0066, 0x0026, 0x0006, 0x0126, 0x2091,
+	0x8000, 0x2071, 0x19c4, 0x7638, 0x2660, 0x2678, 0x8cff, 0x0904,
+	0x9df2, 0x6020, 0x9086, 0x0006, 0x1904, 0x9ded, 0x87ff, 0x0128,
+	0x2700, 0x9c06, 0x1904, 0x9ded, 0x0040, 0x6010, 0x9b06, 0x15e8,
+	0x85ff, 0x0118, 0x6054, 0x9106, 0x15c0, 0x703c, 0x9c06, 0x1168,
+	0x0036, 0x2019, 0x0001, 0x080c, 0x9c35, 0x7033, 0x0000, 0x9006,
+	0x703e, 0x7042, 0x7046, 0x704a, 0x003e, 0x7038, 0x9c36, 0x1110,
+	0x660c, 0x763a, 0x7034, 0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118,
+	0x2f00, 0x7036, 0x0010, 0x7037, 0x0000, 0x660c, 0x0066, 0x2c00,
+	0x9f06, 0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000, 0x6014,
+	0x2048, 0x080c, 0xc1cb, 0x0110, 0x080c, 0xdcc3, 0x080c, 0xa3cf,
+	0x87ff, 0x1198, 0x00ce, 0x0804, 0x9d9e, 0x2c78, 0x600c, 0x2060,
+	0x0804, 0x9d9e, 0x9006, 0x012e, 0x000e, 0x002e, 0x006e, 0x00ce,
+	0x009e, 0x00de, 0x00ee, 0x00fe, 0x0005, 0x601b, 0x0000, 0x00ce,
+	0x97bd, 0x0001, 0x0c80, 0x00e6, 0x2071, 0x19c4, 0x2001, 0x1800,
+	0x2004, 0x9086, 0x0002, 0x1118, 0x7007, 0x0005, 0x0010, 0x7007,
+	0x0000, 0x00ee, 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x0066, 0x0026,
+	0x0006, 0x0126, 0x2091, 0x8000, 0x2071, 0x19c4, 0x2c10, 0x7638,
+	0x2660, 0x2678, 0x8cff, 0x0540, 0x2200, 0x9c06, 0x1508, 0x7038,
+	0x9c36, 0x1110, 0x660c, 0x763a, 0x7034, 0x9c36, 0x1140, 0x2c00,
+	0x9f36, 0x0118, 0x2f00, 0x7036, 0x0010, 0x7037, 0x0000, 0x660c,
+	0x2c00, 0x9f06, 0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000,
+	0x6004, 0x9086, 0x0040, 0x090c, 0x8d2c, 0x9085, 0x0001, 0x0020,
+	0x2c78, 0x600c, 0x2060, 0x08b0, 0x012e, 0x000e, 0x002e, 0x006e,
+	0x00ce, 0x00ee, 0x00fe, 0x0005, 0x0096, 0x00f6, 0x00e6, 0x00d6,
+	0x00c6, 0x0066, 0x0026, 0x0006, 0x0126, 0x2091, 0x8000, 0x2071,
+	0x19c4, 0x760c, 0x2660, 0x2678, 0x8cff, 0x0904, 0x9ee9, 0x6010,
+	0x00b6, 0x2058, 0xb8a0, 0x00be, 0x9206, 0x1904, 0x9ee4, 0x7024,
+	0x9c06, 0x1520, 0x2069, 0x0100, 0x68c0, 0x9005, 0x0904, 0x9ebb,
+	0x080c, 0x98d1, 0x68c3, 0x0000, 0x080c, 0x9e03, 0x7027, 0x0000,
+	0x0036, 0x2069, 0x0140, 0x6b04, 0x9384, 0x1000, 0x0138, 0x2001,
+	0x0100, 0x080c, 0x2bce, 0x9006, 0x080c, 0x2bce, 0x2069, 0x0100,
+	0x6824, 0xd084, 0x0110, 0x6827, 0x0001, 0x003e, 0x700c, 0x9c36,
+	0x1110, 0x660c, 0x760e, 0x7008, 0x9c36, 0x1140, 0x2c00, 0x9f36,
+	0x0118, 0x2f00, 0x700a, 0x0010, 0x700b, 0x0000, 0x660c, 0x0066,
+	0x2c00, 0x9f06, 0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000,
+	0x080c, 0xc3c0, 0x1180, 0x080c, 0x312b, 0x080c, 0xc3d1, 0x1518,
+	0x080c, 0xadb3, 0x0400, 0x080c, 0x9e03, 0x6824, 0xd084, 0x09b0,
+	0x6827, 0x0001, 0x0898, 0x080c, 0xc3d1, 0x1118, 0x080c, 0xadb3,
+	0x0090, 0x6014, 0x2048, 0x080c, 0xc1cb, 0x0168, 0x6020, 0x9086,
+	0x0003, 0x1508, 0xa86b, 0x0103, 0xab7e, 0xa87b, 0x0000, 0x080c,
+	0x6bf5, 0x080c, 0xc3b4, 0x080c, 0xc638, 0x080c, 0xa3cf, 0x080c,
+	0x9cd9, 0x00ce, 0x0804, 0x9e64, 0x2c78, 0x600c, 0x2060, 0x0804,
+	0x9e64, 0x012e, 0x000e, 0x002e, 0x006e, 0x00ce, 0x00de, 0x00ee,
+	0x00fe, 0x009e, 0x0005, 0x6020, 0x9086, 0x0006, 0x1d20, 0x080c,
+	0xdcc3, 0x0c08, 0x00d6, 0x080c, 0x93e9, 0x7003, 0x0200, 0x7007,
+	0x0014, 0x60c3, 0x0014, 0x20e1, 0x0001, 0x2099, 0x1965, 0x20e9,
+	0x0000, 0x20a1, 0x0250, 0x20a9, 0x0004, 0x4003, 0x7023, 0x0004,
+	0x7027, 0x7878, 0x080c, 0x98a5, 0x00de, 0x0005, 0x080c, 0x93e9,
+	0x700b, 0x0800, 0x7814, 0x9084, 0xff00, 0x700e, 0x7814, 0x9084,
+	0x00ff, 0x7022, 0x782c, 0x7026, 0x7858, 0x9084, 0x00ff, 0x9085,
+	0x0200, 0x7002, 0x7858, 0x9084, 0xff00, 0x8007, 0x7006, 0x60c2,
+	0x0804, 0x98a5, 0x00b6, 0x00d6, 0x0016, 0x00d6, 0x2f68, 0x2009,
+	0x0035, 0x080c, 0xc83f, 0x00de, 0x1904, 0x9f97, 0x080c, 0x939e,
+	0x7003, 0x1300, 0x782c, 0x080c, 0xa09d, 0x2068, 0x6820, 0x9086,
+	0x0003, 0x0560, 0x7810, 0x2058, 0xbaa0, 0x080c, 0xa307, 0x11d8,
+	0x9286, 0x007e, 0x1128, 0x700b, 0x00ff, 0x700f, 0xfffe, 0x0498,
+	0x9286, 0x007f, 0x1128, 0x700b, 0x00ff, 0x700f, 0xfffd, 0x0458,
+	0x9284, 0xff80, 0x0180, 0x9286, 0x0080, 0x1128, 0x700b, 0x00ff,
+	0x700f, 0xfffc, 0x0400, 0x92d8, 0x1000, 0x2b5c, 0xb810, 0x700a,
+	0xb814, 0x700e, 0x00c0, 0x6098, 0x700e, 0x00a8, 0x080c, 0xa307,
+	0x1130, 0x7810, 0x2058, 0xb8a0, 0x9082, 0x007e, 0x0250, 0x00d6,
+	0x2069, 0x181e, 0x2d04, 0x700a, 0x8d68, 0x2d04, 0x700e, 0x00de,
+	0x0010, 0x6034, 0x700e, 0x7838, 0x7012, 0x783c, 0x7016, 0x60c3,
+	0x000c, 0x001e, 0x00de, 0x080c, 0x98a5, 0x00be, 0x0005, 0x781b,
+	0x0001, 0x7803, 0x0006, 0x001e, 0x00de, 0x00be, 0x0005, 0x792c,
+	0x9180, 0x0008, 0x200c, 0x9186, 0x0006, 0x01c0, 0x9186, 0x0003,
+	0x0904, 0xa012, 0x9186, 0x0005, 0x0904, 0x9ffa, 0x9186, 0x0004,
+	0x05d8, 0x9186, 0x0008, 0x0904, 0xa003, 0x7807, 0x0037, 0x782f,
+	0x0003, 0x7817, 0x1700, 0x080c, 0xa07a, 0x0005, 0x080c, 0xa03b,
+	0x00d6, 0x0026, 0x792c, 0x2168, 0x2009, 0x4000, 0x6800, 0x0002,
+	0x9fdb, 0x9fe6, 0x9fdd, 0x9fe6, 0x9fe2, 0x9fdb, 0x9fdb, 0x9fe6,
+	0x9fe6, 0x9fe6, 0x9fe6, 0x9fdb, 0x9fdb, 0x9fdb, 0x9fdb, 0x9fdb,
+	0x9fe6, 0x9fdb, 0x9fe6, 0x080c, 0x0dc3, 0x6824, 0xd0e4, 0x0110,
+	0xd0cc, 0x0110, 0x900e, 0x0010, 0x2009, 0x2000, 0x682c, 0x7022,
+	0x6830, 0x7026, 0x0804, 0xa034, 0x080c, 0xa03b, 0x00d6, 0x0026,
+	0x792c, 0x2168, 0x2009, 0x4000, 0x6a00, 0x9286, 0x0002, 0x1108,
+	0x900e, 0x04d0, 0x080c, 0xa03b, 0x00d6, 0x0026, 0x792c, 0x2168,
+	0x2009, 0x4000, 0x0488, 0x04b9, 0x00d6, 0x0026, 0x792c, 0x2168,
+	0x2009, 0x4000, 0x9286, 0x0005, 0x0118, 0x9286, 0x0002, 0x1108,
+	0x900e, 0x0410, 0x0441, 0x00d6, 0x0026, 0x792c, 0x2168, 0x6814,
+	0x6924, 0xc185, 0x6926, 0x0096, 0x2048, 0xa9b0, 0xa834, 0x9112,
+	0xa9b4, 0xa838, 0x009e, 0x9103, 0x7022, 0x7226, 0x792c, 0x9180,
+	0x0000, 0x2004, 0x908e, 0x0002, 0x0130, 0x908e, 0x0004, 0x0118,
+	0x2009, 0x4000, 0x0008, 0x900e, 0x712a, 0x60c3, 0x0018, 0x002e,
+	0x00de, 0x0804, 0x98a5, 0x00b6, 0x0036, 0x0046, 0x0056, 0x0066,
+	0x080c, 0x93e9, 0x9006, 0x7003, 0x0200, 0x7938, 0x710a, 0x793c,
+	0x710e, 0x7810, 0x2058, 0xb8a0, 0x080c, 0xa307, 0x1118, 0x9092,
+	0x007e, 0x0268, 0x00d6, 0x2069, 0x181e, 0x2d2c, 0x8d68, 0x2d34,
+	0x90d8, 0x1000, 0x2b5c, 0xbb10, 0xbc14, 0x00de, 0x0028, 0x901e,
+	0x6498, 0x2029, 0x0000, 0x6634, 0x782c, 0x9080, 0x0008, 0x2004,
+	0x9086, 0x0003, 0x1128, 0x7512, 0x7616, 0x731a, 0x741e, 0x0020,
+	0x7312, 0x7416, 0x751a, 0x761e, 0x006e, 0x005e, 0x004e, 0x003e,
+	0x00be, 0x0005, 0x080c, 0x93e9, 0x7003, 0x0100, 0x782c, 0x700a,
+	0x7814, 0x700e, 0x700e, 0x60c3, 0x0008, 0x0804, 0x98a5, 0x080c,
+	0x9395, 0x7003, 0x1400, 0x7838, 0x700a, 0x0079, 0x783c, 0x700e,
+	0x782c, 0x7012, 0x7830, 0x7016, 0x7834, 0x9084, 0x00ff, 0x8007,
+	0x701a, 0x60c3, 0x0010, 0x0804, 0x98a5, 0x00e6, 0x2071, 0x0240,
+	0x0006, 0x00f6, 0x2078, 0x7810, 0x00b6, 0x2058, 0xb8bc, 0xd084,
+	0x0120, 0x7844, 0x702a, 0x7848, 0x702e, 0x00be, 0x00fe, 0x000e,
+	0x00ee, 0x0005, 0x080c, 0x93e0, 0x7003, 0x0100, 0x782c, 0x700a,
+	0x7814, 0x700e, 0x60c3, 0x0008, 0x0804, 0x98a5, 0x0021, 0x60c3,
+	0x0000, 0x0804, 0x98a5, 0x00d6, 0x080c, 0xa190, 0xb810, 0x9085,
+	0x0300, 0x7002, 0xb814, 0x7006, 0x2069, 0x1800, 0x6878, 0x700a,
+	0x687c, 0x700e, 0x7013, 0x0819, 0x080c, 0x9893, 0x721a, 0x2f10,
+	0x7222, 0x7a08, 0x7226, 0x2071, 0x024c, 0x00de, 0x0005, 0x080c,
+	0x93e9, 0x7003, 0x0200, 0x7007, 0x0001, 0x700b, 0xc000, 0x6238,
 	0x9286, 0x0004, 0x2001, 0x8000, 0x0138, 0x9286, 0x0007, 0x2001,
 	0x4000, 0x0110, 0x2001, 0x0002, 0x700e, 0x60c3, 0x0008, 0x0804,
-	0x95f7, 0x00a9, 0x7914, 0x712a, 0x60c3, 0x0000, 0x60a7, 0x9575,
-	0x0026, 0x080c, 0x29fa, 0x0228, 0x2011, 0x0101, 0x2204, 0xc0c5,
-	0x2012, 0x002e, 0x080c, 0x961a, 0x080c, 0x8417, 0x0005, 0x0036,
-	0x0096, 0x00d6, 0x00e6, 0x7828, 0x2048, 0xaa80, 0x9296, 0x00c0,
+	0x98a5, 0x00a9, 0x7914, 0x712a, 0x60c3, 0x0000, 0x60a7, 0x9575,
+	0x0026, 0x080c, 0x2a63, 0x0228, 0x2011, 0x0101, 0x2204, 0xc0c5,
+	0x2012, 0x002e, 0x080c, 0x98c8, 0x080c, 0x8583, 0x0005, 0x0036,
+	0x0096, 0x00d6, 0x00e6, 0x7858, 0x2048, 0xaa80, 0x9296, 0x00c0,
 	0x9294, 0x00fd, 0xaa82, 0xaa84, 0x9294, 0x0300, 0xaa86, 0xa970,
 	0x9194, 0x00ff, 0xab78, 0x9384, 0x00ff, 0x908d, 0xc200, 0xa972,
 	0x9384, 0xff00, 0x9215, 0xaa7a, 0xa874, 0xaa7c, 0xa87e, 0xaa76,
-	0x00d6, 0x2069, 0x0200, 0x080c, 0x9d0b, 0x00de, 0x20e9, 0x0000,
+	0x00d6, 0x2069, 0x0200, 0x080c, 0xa190, 0x00de, 0x20e9, 0x0000,
 	0x20a1, 0x0240, 0x20a9, 0x000a, 0xa860, 0x20e0, 0xa85c, 0x9080,
 	0x001c, 0x2098, 0x4003, 0x60a3, 0x0035, 0xaa6c, 0x9294, 0x7000,
 	0x9286, 0x3000, 0x0110, 0x60a3, 0x0037, 0x00ee, 0x00de, 0x009e,
 	0x003e, 0x0005, 0x900e, 0x7814, 0x0096, 0x2048, 0xa880, 0xd0fc,
-	0x0198, 0x9084, 0x0003, 0x1180, 0x2001, 0x180c, 0x2004, 0xd0bc,
-	0x0158, 0xa8ac, 0x9005, 0x1140, 0x2001, 0x180c, 0x200c, 0xc1d5,
-	0x2102, 0x2009, 0x198f, 0x210c, 0x009e, 0x918d, 0x0092, 0x0010,
-	0x2009, 0x0096, 0x60ab, 0x0036, 0x6116, 0x0005, 0x2009, 0x0009,
-	0x00a0, 0x2009, 0x000a, 0x0088, 0x2009, 0x000b, 0x0070, 0x2009,
-	0x000c, 0x0058, 0x2009, 0x000d, 0x0040, 0x2009, 0x000e, 0x0028,
-	0x2009, 0x000f, 0x0010, 0x2009, 0x0008, 0x6912, 0x0005, 0x00d6,
-	0x9290, 0x0018, 0x8214, 0x20e9, 0x0000, 0x2069, 0x0200, 0x6813,
-	0x0000, 0x22a8, 0x9284, 0x00e0, 0x0128, 0x20a9, 0x0020, 0x9292,
-	0x0020, 0x0008, 0x9016, 0x20a1, 0x0240, 0x9006, 0x4004, 0x82ff,
-	0x0120, 0x6810, 0x8000, 0x6812, 0x0c60, 0x00de, 0x0005, 0x00d6,
-	0x0096, 0x6014, 0x2048, 0xa87c, 0x6026, 0x9006, 0xa836, 0xa83a,
-	0xa9a0, 0xa946, 0xa84a, 0x6023, 0x0003, 0x6007, 0x0040, 0x6003,
-	0x0003, 0x600b, 0xffff, 0xa817, 0x0001, 0xa842, 0xa83e, 0x2900,
-	0xa85a, 0xa813, 0x1f6e, 0x080c, 0x8735, 0x0126, 0x2091, 0x8000,
-	0x080c, 0x8d06, 0x012e, 0x009e, 0x00de, 0x0005, 0x00f6, 0x00e6,
-	0x00d6, 0x00c6, 0x00a6, 0x0096, 0x0066, 0x0126, 0x2091, 0x8000,
-	0x2071, 0x19c4, 0x760c, 0x2660, 0x2678, 0x8cff, 0x0904, 0x9de2,
-	0x7024, 0x9c06, 0x1520, 0x2069, 0x0100, 0x68c0, 0x9005, 0x0904,
-	0x9db4, 0x080c, 0x9623, 0x68c3, 0x0000, 0x080c, 0x9b30, 0x7027,
-	0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, 0x9384, 0x1000, 0x0138,
-	0x2001, 0x0100, 0x080c, 0x2b65, 0x9006, 0x080c, 0x2b65, 0x2069,
-	0x0100, 0x6824, 0xd084, 0x0110, 0x6827, 0x0001, 0x003e, 0x700c,
-	0x9c36, 0x1110, 0x660c, 0x760e, 0x7008, 0x9c36, 0x1140, 0x2c00,
-	0x9f36, 0x0118, 0x2f00, 0x700a, 0x0010, 0x700b, 0x0000, 0x660c,
-	0x0066, 0x2c00, 0x9f06, 0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f,
-	0x0000, 0x080c, 0xbb45, 0x1180, 0x080c, 0x308f, 0x080c, 0xbb56,
-	0x1518, 0x080c, 0xa717, 0x0400, 0x080c, 0x9b30, 0x6824, 0xd084,
-	0x09b0, 0x6827, 0x0001, 0x0898, 0x080c, 0xbb56, 0x1118, 0x080c,
-	0xa717, 0x0090, 0x6014, 0x2048, 0x080c, 0xb953, 0x0168, 0x6020,
-	0x9086, 0x0003, 0x1520, 0xa86b, 0x0103, 0xab7e, 0xa87b, 0x0000,
-	0x080c, 0x6b1d, 0x080c, 0xbb39, 0x080c, 0xbc8f, 0x080c, 0x9f42,
-	0x080c, 0x9a08, 0x00ce, 0x0804, 0x9d65, 0x2c78, 0x600c, 0x2060,
-	0x0804, 0x9d65, 0x700f, 0x0000, 0x700b, 0x0000, 0x012e, 0x006e,
-	0x009e, 0x00ae, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x0005, 0x6020,
-	0x9086, 0x0006, 0x1d08, 0x080c, 0xd101, 0x08f0, 0x00d6, 0x0156,
-	0x080c, 0x91bc, 0x7a14, 0x82ff, 0x0138, 0x7003, 0x0100, 0x700b,
-	0x0003, 0x60c3, 0x0008, 0x0490, 0x7003, 0x0200, 0x7007, 0x0000,
-	0x2069, 0x1800, 0x901e, 0x6800, 0x9086, 0x0004, 0x1110, 0xc38d,
-	0x0060, 0x080c, 0x72e5, 0x1110, 0xc3ad, 0x0008, 0xc3a5, 0x6ad8,
-	0xd29c, 0x1110, 0xd2ac, 0x0108, 0xc39d, 0x730e, 0x2011, 0x1848,
-	0x63f0, 0x2312, 0x20a9, 0x0006, 0x2011, 0x1840, 0x2019, 0x1841,
-	0x2071, 0x0250, 0x2376, 0x8e70, 0x2276, 0x8e70, 0x9398, 0x0002,
-	0x9290, 0x0002, 0x1f04, 0x9e2a, 0x60c3, 0x0020, 0x080c, 0x95f7,
-	0x015e, 0x00de, 0x0005, 0x0156, 0x080c, 0x91bc, 0x7a14, 0x82ff,
-	0x0168, 0x9286, 0xffff, 0x0118, 0x9282, 0x000e, 0x1238, 0x7003,
-	0x0100, 0x700b, 0x0003, 0x60c3, 0x0008, 0x0488, 0x7003, 0x0200,
-	0x7007, 0x001c, 0x700f, 0x0001, 0x2011, 0x199a, 0x2204, 0x8007,
-	0x701a, 0x8210, 0x2204, 0x8007, 0x701e, 0x0421, 0x1120, 0xb8a0,
-	0x9082, 0x007f, 0x0248, 0x2001, 0x181e, 0x2004, 0x7022, 0x2001,
-	0x181f, 0x2004, 0x7026, 0x0030, 0x2001, 0x1817, 0x2004, 0x9084,
-	0x00ff, 0x7026, 0x20a9, 0x0004, 0x20e1, 0x0001, 0x2099, 0x1805,
-	0x20e9, 0x0000, 0x20a1, 0x0256, 0x4003, 0x60c3, 0x001c, 0x015e,
-	0x0804, 0x95f7, 0x0006, 0x2001, 0x1836, 0x2004, 0xd0ac, 0x000e,
-	0x0005, 0x2011, 0x0003, 0x080c, 0x99d6, 0x2011, 0x0002, 0x080c,
-	0x99e0, 0x080c, 0x98ee, 0x0036, 0x901e, 0x080c, 0x9964, 0x003e,
-	0x0005, 0x080c, 0x31c5, 0x0188, 0x0016, 0x00b6, 0x00c6, 0x7010,
-	0x9085, 0x0020, 0x7012, 0x2009, 0x007e, 0x080c, 0x6411, 0xb85c,
-	0xc0ac, 0xb85e, 0x00ce, 0x00be, 0x001e, 0x0005, 0x2071, 0x188e,
-	0x7000, 0x9005, 0x0140, 0x2001, 0x12ee, 0x2071, 0x1800, 0x7072,
-	0x7076, 0x7067, 0xfff0, 0x2071, 0x1800, 0x7070, 0x7052, 0x7057,
-	0x1cc8, 0x0005, 0x00e6, 0x0126, 0x2071, 0x1800, 0x2091, 0x8000,
-	0x7550, 0x9582, 0x0010, 0x0608, 0x7054, 0x2060, 0x6000, 0x9086,
-	0x0000, 0x0148, 0x9ce0, 0x000c, 0x7064, 0x9c02, 0x1208, 0x0cb0,
-	0x2061, 0x1cc8, 0x0c98, 0x6003, 0x0008, 0x8529, 0x7552, 0x9ca8,
-	0x000c, 0x7064, 0x9502, 0x1230, 0x7556, 0x9085, 0x0001, 0x012e,
-	0x00ee, 0x0005, 0x7057, 0x1cc8, 0x0cc0, 0x9006, 0x0cc0, 0x00e6,
-	0x2071, 0x1800, 0x7550, 0x9582, 0x0010, 0x0600, 0x7054, 0x2060,
-	0x6000, 0x9086, 0x0000, 0x0148, 0x9ce0, 0x000c, 0x7064, 0x9c02,
-	0x1208, 0x0cb0, 0x2061, 0x1cc8, 0x0c98, 0x6003, 0x0008, 0x8529,
-	0x7552, 0x9ca8, 0x000c, 0x7064, 0x9502, 0x1228, 0x7556, 0x9085,
-	0x0001, 0x00ee, 0x0005, 0x7057, 0x1cc8, 0x0cc8, 0x9006, 0x0cc8,
-	0x9c82, 0x1cc8, 0x0a0c, 0x0dc4, 0x2001, 0x1819, 0x2004, 0x9c02,
-	0x1a0c, 0x0dc4, 0x9006, 0x6006, 0x600a, 0x600e, 0x6016, 0x601a,
-	0x6012, 0x6023, 0x0000, 0x6003, 0x0000, 0x601e, 0x6026, 0x602a,
-	0x2061, 0x1800, 0x6050, 0x8000, 0x6052, 0x9086, 0x0001, 0x0108,
-	0x0005, 0x0126, 0x2091, 0x8000, 0x0016, 0x080c, 0x8c37, 0x001e,
-	0x012e, 0x0cb0, 0x0006, 0x6000, 0x9086, 0x0000, 0x0190, 0x601c,
-	0xd084, 0x190c, 0x1950, 0x6017, 0x0000, 0x6023, 0x0007, 0x2001,
-	0x1963, 0x2004, 0x0006, 0x9082, 0x0051, 0x000e, 0x0208, 0x8004,
-	0x601a, 0x000e, 0x0005, 0x00e6, 0x0126, 0x2071, 0x1800, 0x2091,
-	0x8000, 0x7550, 0x9582, 0x0001, 0x0608, 0x7054, 0x2060, 0x6000,
-	0x9086, 0x0000, 0x0148, 0x9ce0, 0x000c, 0x7064, 0x9c02, 0x1208,
-	0x0cb0, 0x2061, 0x1cc8, 0x0c98, 0x6003, 0x0008, 0x8529, 0x7552,
-	0x9ca8, 0x000c, 0x7064, 0x9502, 0x1230, 0x7556, 0x9085, 0x0001,
-	0x012e, 0x00ee, 0x0005, 0x7057, 0x1cc8, 0x0cc0, 0x9006, 0x0cc0,
-	0x6020, 0x9084, 0x000f, 0x0002, 0x9f9b, 0x9fa4, 0x9fbf, 0x9fda,
-	0xbf64, 0xbf81, 0xbf9c, 0x9f9b, 0x9fa4, 0x9f9b, 0x9ff3, 0x9f9b,
-	0x9f9b, 0x9f9b, 0x9f9b, 0x9186, 0x0013, 0x1128, 0x080c, 0x8b2b,
-	0x080c, 0x8c37, 0x0005, 0x0005, 0x0066, 0x6000, 0x90b2, 0x0010,
-	0x1a0c, 0x0dc4, 0x0013, 0x006e, 0x0005, 0x9fbd, 0xa57b, 0xa75e,
-	0x9fbd, 0xa7dd, 0x9fbd, 0x9fbd, 0x9fbd, 0xa505, 0xadb7, 0x9fbd,
-	0x9fbd, 0x9fbd, 0x9fbd, 0x9fbd, 0x9fbd, 0x080c, 0x0dc4, 0x0066,
-	0x6000, 0x90b2, 0x0010, 0x1a0c, 0x0dc4, 0x0013, 0x006e, 0x0005,
-	0x9fd8, 0xb3cf, 0x9fd8, 0x9fd8, 0x9fd8, 0x9fd8, 0x9fd8, 0x9fd8,
-	0xb37f, 0xb4c6, 0x9fd8, 0xb410, 0xb474, 0xb410, 0xb474, 0x9fd8,
-	0x080c, 0x0dc4, 0x6000, 0x9082, 0x0010, 0x1a0c, 0x0dc4, 0x6000,
-	0x0002, 0x9ff1, 0xadfc, 0xaeb8, 0xafac, 0xb14e, 0x9ff1, 0x9ff1,
-	0x9ff1, 0xadd2, 0xb304, 0xb307, 0x9ff1, 0x9ff1, 0x9ff1, 0x9ff1,
-	0xb336, 0x080c, 0x0dc4, 0x0066, 0x6000, 0x90b2, 0x0010, 0x1a0c,
-	0x0dc4, 0x0013, 0x006e, 0x0005, 0xa00c, 0xa00c, 0xa04f, 0xa0e7,
-	0xa17c, 0xa00c, 0xa00c, 0xa00c, 0xa00e, 0xa00c, 0xa00c, 0xa00c,
-	0xa00c, 0xa00c, 0xa00c, 0xa00c, 0x080c, 0x0dc4, 0x9186, 0x004c,
-	0x0588, 0x9186, 0x0003, 0x190c, 0x0dc4, 0x0096, 0x601c, 0xc0ed,
-	0x601e, 0x6003, 0x0003, 0x6106, 0x6014, 0x2048, 0xa880, 0x9084,
-	0xa010, 0xc0b5, 0xa882, 0xa8b0, 0xa846, 0xa8b4, 0xa84a, 0x9006,
-	0xa836, 0xa83a, 0xa888, 0x9092, 0x199a, 0x0210, 0x2001, 0x1999,
-	0x8003, 0x8013, 0x8213, 0x9210, 0x621a, 0x009e, 0x2c10, 0x080c,
-	0x1aa2, 0x080c, 0x8735, 0x0126, 0x2091, 0x8000, 0x080c, 0x8d06,
-	0x012e, 0x0005, 0x6010, 0x00b6, 0x2058, 0xbca0, 0x00be, 0x2c00,
-	0x080c, 0xa19e, 0x080c, 0xbf10, 0x6003, 0x0007, 0x0005, 0x00d6,
-	0x0096, 0x00f6, 0x2079, 0x1800, 0x7a8c, 0x6014, 0x2048, 0xa880,
-	0xd0ec, 0x1110, 0x9290, 0x0018, 0xac7c, 0xc4fc, 0x0046, 0xa8e4,
-	0x9005, 0x1140, 0xa8e0, 0x921a, 0x0140, 0x0220, 0xa87f, 0x0007,
-	0x2010, 0x0028, 0xa87f, 0x0015, 0x0010, 0xa87f, 0x0000, 0x8214,
-	0xa887, 0x0000, 0xaa02, 0x0006, 0x0016, 0x0026, 0x00c6, 0x00d6,
-	0x00e6, 0x00f6, 0x2400, 0x9005, 0x1108, 0x009a, 0x2100, 0x9086,
-	0x0015, 0x1118, 0x2001, 0x0001, 0x0038, 0x2100, 0x9086, 0x0016,
-	0x0118, 0x2001, 0x0001, 0x002a, 0x94a4, 0x0007, 0x8423, 0x9405,
-	0x0002, 0xa0af, 0xa0af, 0xa0a6, 0xa0a9, 0xa0af, 0xa0a3, 0xa0a1,
-	0xa0a1, 0xa0a1, 0xa0a1, 0xa0a1, 0xa0a1, 0xa0a1, 0xa0a1, 0xa0a1,
-	0xa0a1, 0x080c, 0x0dc4, 0x080c, 0xa9ce, 0x0048, 0x080c, 0xab05,
-	0x0030, 0x080c, 0xabf3, 0x2001, 0x0004, 0x080c, 0x6372, 0x00fe,
-	0x00ee, 0x00de, 0x00ce, 0x002e, 0x001e, 0x2c00, 0xa89a, 0x000e,
-	0x080c, 0xa25c, 0x0530, 0xa804, 0xa80e, 0x00a6, 0x2050, 0xb100,
-	0x00ae, 0x8006, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0,
-	0x9080, 0x0002, 0xaad0, 0xabd4, 0xacd8, 0xaddc, 0x2031, 0x0000,
-	0x2041, 0x1266, 0x080c, 0xa45b, 0x0160, 0x000e, 0x9005, 0x0120,
-	0x00fe, 0x009e, 0x00de, 0x0005, 0x00fe, 0x009e, 0x00de, 0x0804,
-	0x9f18, 0x2001, 0x002c, 0x900e, 0x080c, 0xa2c2, 0x0c70, 0x91b6,
-	0x0015, 0x0170, 0x91b6, 0x0016, 0x0158, 0x91b2, 0x0047, 0x0a0c,
-	0x0dc4, 0x91b2, 0x0050, 0x1a0c, 0x0dc4, 0x9182, 0x0047, 0x00ca,
-	0x2001, 0x0109, 0x2004, 0xd08c, 0x0198, 0x0126, 0x2091, 0x2800,
-	0x0006, 0x0016, 0x0026, 0x080c, 0x8689, 0x002e, 0x001e, 0x000e,
-	0x012e, 0xa001, 0x6000, 0x9086, 0x0002, 0x1110, 0x0804, 0xa04f,
-	0x0005, 0xa11a, 0xa11a, 0xa11c, 0xa152, 0xa11a, 0xa11a, 0xa11a,
-	0xa11a, 0xa165, 0x080c, 0x0dc4, 0x00d6, 0x0016, 0x0096, 0x080c,
-	0x8be7, 0x080c, 0x8d06, 0x6003, 0x0004, 0x6114, 0x2148, 0xa880,
-	0xd0fc, 0x01c0, 0xa87c, 0xc0fc, 0x9005, 0x1158, 0xa898, 0x9005,
-	0x0140, 0x2001, 0x0000, 0x900e, 0x080c, 0xa2c2, 0x080c, 0x9f18,
-	0x00a8, 0x6003, 0x0002, 0xa8a8, 0xa9ac, 0x9105, 0x1178, 0xa8b2,
-	0xa8b6, 0x0c78, 0xa883, 0x0020, 0xa890, 0xa88e, 0xa8a8, 0xa8b2,
-	0xa8ac, 0xa8b6, 0xa8cb, 0x0000, 0xa8cf, 0x0000, 0x009e, 0x001e,
-	0x00de, 0x0005, 0x080c, 0x8be7, 0x00d6, 0x0096, 0x6114, 0x2148,
-	0x080c, 0xb955, 0x0120, 0xa87f, 0x0006, 0x080c, 0x6b1d, 0x009e,
-	0x00de, 0x080c, 0x9f18, 0x0804, 0x8d06, 0x080c, 0x8be7, 0x080c,
-	0x3066, 0x080c, 0xbf0d, 0x00d6, 0x0096, 0x6114, 0x2148, 0x080c,
-	0xb955, 0x0120, 0xa87f, 0x0029, 0x080c, 0x6b1d, 0x009e, 0x00de,
-	0x080c, 0x9f18, 0x0804, 0x8d06, 0x9182, 0x0047, 0x0002, 0xa18c,
-	0xa18e, 0xa18c, 0xa18c, 0xa18c, 0xa18c, 0xa18c, 0xa18c, 0xa18c,
-	0xa18c, 0xa18c, 0xa18c, 0xa18e, 0x080c, 0x0dc4, 0x00d6, 0x0096,
-	0x080c, 0x154a, 0x6114, 0x2148, 0xa87f, 0x0000, 0xa887, 0x0000,
-	0x080c, 0x6b1d, 0x009e, 0x00de, 0x0804, 0x9f18, 0x0026, 0x0036,
-	0x0056, 0x0066, 0x0096, 0x00a6, 0x00f6, 0x0006, 0x080c, 0x1001,
-	0x000e, 0x090c, 0x0dc4, 0xa960, 0x21e8, 0xa95c, 0x9188, 0x001a,
-	0x21a0, 0x900e, 0x20a9, 0x0020, 0x4104, 0xa87e, 0x2079, 0x1800,
-	0x798c, 0x9188, 0x0018, 0x918c, 0x0fff, 0xa976, 0xac7a, 0x2950,
-	0x00a6, 0x2001, 0x0205, 0x2003, 0x0000, 0x901e, 0x2029, 0x0001,
-	0x9182, 0x0035, 0x1228, 0x2011, 0x0020, 0x080c, 0xb54b, 0x04c0,
-	0x2130, 0x2009, 0x0034, 0x2011, 0x0020, 0x080c, 0xb54b, 0x96b2,
-	0x0034, 0xb004, 0x904d, 0x0110, 0x080c, 0x0fb3, 0x080c, 0x1001,
-	0x01d0, 0x8528, 0xa86b, 0x0110, 0xa86f, 0x0000, 0x2920, 0xb406,
-	0x968a, 0x003d, 0x1230, 0x2608, 0x2011, 0x001c, 0x080c, 0xb54b,
-	0x00b8, 0x96b2, 0x003c, 0x2009, 0x003c, 0x2950, 0x2011, 0x001c,
-	0x080c, 0xb54b, 0x0c18, 0x2001, 0x0205, 0x2003, 0x0000, 0x00ae,
-	0x852f, 0x95ad, 0x0050, 0xb56a, 0xb074, 0xc0fd, 0xb076, 0x0048,
-	0x2001, 0x0205, 0x2003, 0x0000, 0x00ae, 0x852f, 0x95ad, 0x0050,
-	0xb56a, 0x2a48, 0xa804, 0xa807, 0x0000, 0x0006, 0x080c, 0x6b1d,
-	0x000e, 0x2048, 0x9005, 0x1db0, 0x00fe, 0x00ae, 0x009e, 0x006e,
-	0x005e, 0x003e, 0x002e, 0x0005, 0x00d6, 0x00f6, 0x0096, 0x0006,
-	0x080c, 0x1001, 0x000e, 0x090c, 0x0dc4, 0xa960, 0x21e8, 0xa95c,
-	0x9188, 0x001a, 0x21a0, 0x900e, 0x20a9, 0x0020, 0x4104, 0xaa6a,
-	0xa87e, 0x2079, 0x1800, 0x798c, 0x810c, 0x9188, 0x000c, 0x9182,
-	0x001a, 0x0210, 0x2009, 0x001a, 0x21a8, 0x810b, 0xa976, 0xac7a,
-	0x2e98, 0xa85c, 0x9080, 0x0020, 0x20a0, 0x2001, 0x0205, 0x200c,
-	0x918d, 0x0080, 0x2102, 0x4003, 0x2003, 0x0000, 0x080c, 0x6b1d,
-	0x009e, 0x00fe, 0x00de, 0x0005, 0x0016, 0x00d6, 0x00f6, 0x0096,
-	0x0016, 0x2001, 0x0205, 0x200c, 0x918d, 0x0080, 0x2102, 0x001e,
-	0x2079, 0x0200, 0x2e98, 0xa880, 0xd0ec, 0x0118, 0x9e80, 0x000c,
-	0x2098, 0x2021, 0x003e, 0x901e, 0x9282, 0x0020, 0x0218, 0x2011,
-	0x0020, 0x2018, 0x9486, 0x003e, 0x1170, 0x0096, 0x080c, 0x1001,
-	0x2900, 0x009e, 0x05c0, 0xa806, 0x2048, 0xa860, 0x20e8, 0xa85c,
-	0x9080, 0x0002, 0x20a0, 0x3300, 0x908e, 0x0260, 0x0140, 0x2009,
-	0x0280, 0x9102, 0x920a, 0x0218, 0x2010, 0x2100, 0x9318, 0x2200,
-	0x9402, 0x1228, 0x2400, 0x9202, 0x2410, 0x9318, 0x9006, 0x2020,
-	0x22a8, 0xa800, 0x9200, 0xa802, 0x20e1, 0x0000, 0x4003, 0x83ff,
-	0x0180, 0x3300, 0x9086, 0x0280, 0x1130, 0x7814, 0x8000, 0x9085,
-	0x0080, 0x7816, 0x2e98, 0x2310, 0x84ff, 0x0904, 0xa271, 0x0804,
-	0xa273, 0x9085, 0x0001, 0x7817, 0x0000, 0x009e, 0x00fe, 0x00de,
-	0x001e, 0x0005, 0x00d6, 0x0036, 0x0096, 0x6314, 0x2348, 0xa87e,
-	0xa986, 0x080c, 0x6b11, 0x009e, 0x003e, 0x00de, 0x0005, 0x20a9,
-	0x000e, 0x20e1, 0x0000, 0x2e98, 0x6014, 0x0096, 0x2048, 0xa804,
-	0x9005, 0x15c0, 0x2900, 0x009e, 0x0096, 0x2048, 0xa860, 0x20e8,
-	0xa85c, 0x20a0, 0x009e, 0x4003, 0x9196, 0x0016, 0x01f0, 0x0136,
-	0x9080, 0x001c, 0x20a0, 0x2011, 0x0006, 0x20a9, 0x0001, 0x3418,
-	0x8318, 0x23a0, 0x4003, 0x3318, 0x8318, 0x2398, 0x8211, 0x1db8,
-	0x2011, 0x0006, 0x013e, 0x20a0, 0x3318, 0x8318, 0x2398, 0x4003,
-	0x3418, 0x8318, 0x23a0, 0x8211, 0x1db8, 0x0096, 0x080c, 0xb955,
-	0x0130, 0x6014, 0x2048, 0xa807, 0x0000, 0xa86b, 0x0103, 0x009e,
-	0x0804, 0x9f18, 0x009e, 0x7130, 0x918e, 0x0100, 0x1120, 0x080c,
-	0xa717, 0x0804, 0x9f18, 0x20e1, 0x0000, 0x9e88, 0x000e, 0x2198,
-	0x0096, 0x2048, 0xa860, 0x20e8, 0xa85c, 0x009e, 0x0136, 0x9080,
-	0x000e, 0x20a0, 0x2011, 0x0006, 0x20a9, 0x0001, 0x3418, 0x83a0,
-	0x4003, 0x3318, 0x8398, 0x8211, 0x1dc8, 0x2011, 0x0006, 0x013e,
-	0x20a0, 0x3318, 0x8398, 0x4003, 0x3418, 0x83a0, 0x8211, 0x1dc8,
-	0x6014, 0x0096, 0x2048, 0xa804, 0x0086, 0x2040, 0x2009, 0x000c,
-	0x8806, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080,
-	0x000e, 0xaaa4, 0xaba0, 0xacac, 0xada8, 0x2031, 0x0000, 0x2041,
-	0x1247, 0x080c, 0xa45b, 0x0120, 0x008e, 0x009e, 0x0804, 0x9f18,
-	0x080c, 0xa717, 0x0cc8, 0x0096, 0x00d6, 0x0036, 0x7330, 0x9386,
-	0x0200, 0x11a8, 0x6010, 0x00b6, 0x2058, 0xb8bb, 0x0000, 0x00be,
-	0x6014, 0x9005, 0x0130, 0x2048, 0xa807, 0x0000, 0xa86b, 0x0103,
-	0xab32, 0x080c, 0x9f18, 0x003e, 0x00de, 0x009e, 0x0005, 0x0011,
-	0x1d48, 0x0cc8, 0x0006, 0x0016, 0x080c, 0xbef8, 0x0178, 0x6014,
-	0x9005, 0x1160, 0x600b, 0x0003, 0x601b, 0x0000, 0x2009, 0x0022,
-	0x080c, 0xa551, 0x9006, 0x001e, 0x000e, 0x0005, 0x9085, 0x0001,
+	0x01c0, 0x9084, 0x0003, 0x11a8, 0x2001, 0x180c, 0x2004, 0xd0bc,
+	0x0180, 0x7824, 0xd0cc, 0x1168, 0xd0c4, 0x1158, 0xa8ac, 0x9005,
+	0x1140, 0x2001, 0x180c, 0x200c, 0xc1d5, 0x2102, 0x2009, 0x198f,
+	0x210c, 0x009e, 0x918d, 0x0092, 0x0010, 0x2009, 0x0096, 0x60ab,
+	0x0036, 0x6116, 0x0005, 0x2009, 0x0009, 0x00a0, 0x2009, 0x000a,
+	0x0088, 0x2009, 0x000b, 0x0070, 0x2009, 0x000c, 0x0058, 0x2009,
+	0x000d, 0x0040, 0x2009, 0x000e, 0x0028, 0x2009, 0x000f, 0x0010,
+	0x2009, 0x0008, 0x6912, 0x0005, 0x00d6, 0x9290, 0x0018, 0x8214,
+	0x20e9, 0x0000, 0x2069, 0x0200, 0x6813, 0x0000, 0x22a8, 0x9284,
+	0x00e0, 0x0128, 0x20a9, 0x0020, 0x9292, 0x0020, 0x0008, 0x9016,
+	0x20a1, 0x0240, 0x9006, 0x4004, 0x82ff, 0x0120, 0x6810, 0x8000,
+	0x6812, 0x0c60, 0x00de, 0x0005, 0x00d6, 0x0096, 0x6014, 0x2048,
+	0xa87c, 0x6056, 0x9006, 0xa836, 0xa83a, 0xa9a0, 0xa946, 0xa84a,
+	0x6023, 0x0003, 0x6007, 0x0040, 0x6003, 0x0003, 0x600b, 0xffff,
+	0xa817, 0x0001, 0xa842, 0xa83e, 0x2900, 0xa85a, 0xa813, 0x1fb6,
+	0x080c, 0x8906, 0x0126, 0x2091, 0x8000, 0x080c, 0x8f0e, 0x012e,
+	0x009e, 0x00de, 0x0005, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x00a6,
+	0x0096, 0x0066, 0x0126, 0x2091, 0x8000, 0x2071, 0x19c4, 0x760c,
+	0x2660, 0x2678, 0x8cff, 0x0904, 0xa267, 0x7024, 0x9c06, 0x1520,
+	0x2069, 0x0100, 0x68c0, 0x9005, 0x0904, 0xa239, 0x080c, 0x98d1,
+	0x68c3, 0x0000, 0x080c, 0x9e03, 0x7027, 0x0000, 0x0036, 0x2069,
+	0x0140, 0x6b04, 0x9384, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c,
+	0x2bce, 0x9006, 0x080c, 0x2bce, 0x2069, 0x0100, 0x6824, 0xd084,
+	0x0110, 0x6827, 0x0001, 0x003e, 0x700c, 0x9c36, 0x1110, 0x660c,
+	0x760e, 0x7008, 0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118, 0x2f00,
+	0x700a, 0x0010, 0x700b, 0x0000, 0x660c, 0x0066, 0x2c00, 0x9f06,
+	0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000, 0x080c, 0xc3c0,
+	0x1180, 0x080c, 0x312b, 0x080c, 0xc3d1, 0x1518, 0x080c, 0xadb3,
+	0x0400, 0x080c, 0x9e03, 0x6824, 0xd084, 0x09b0, 0x6827, 0x0001,
+	0x0898, 0x080c, 0xc3d1, 0x1118, 0x080c, 0xadb3, 0x0090, 0x6014,
+	0x2048, 0x080c, 0xc1cb, 0x0168, 0x6020, 0x9086, 0x0003, 0x1520,
+	0xa86b, 0x0103, 0xab7e, 0xa87b, 0x0000, 0x080c, 0x6c02, 0x080c,
+	0xc3b4, 0x080c, 0xc638, 0x080c, 0xa3cf, 0x080c, 0x9cd9, 0x00ce,
+	0x0804, 0xa1ea, 0x2c78, 0x600c, 0x2060, 0x0804, 0xa1ea, 0x700f,
+	0x0000, 0x700b, 0x0000, 0x012e, 0x006e, 0x009e, 0x00ae, 0x00ce,
+	0x00de, 0x00ee, 0x00fe, 0x0005, 0x6020, 0x9086, 0x0006, 0x1d08,
+	0x080c, 0xdcc3, 0x08f0, 0x00d6, 0x0156, 0x080c, 0x93e9, 0x7a14,
+	0x82ff, 0x0138, 0x7003, 0x0100, 0x700b, 0x0003, 0x60c3, 0x0008,
+	0x0490, 0x7003, 0x0200, 0x7007, 0x0000, 0x2069, 0x1800, 0x901e,
+	0x6800, 0x9086, 0x0004, 0x1110, 0xc38d, 0x0060, 0x080c, 0x7351,
+	0x1110, 0xc3ad, 0x0008, 0xc3a5, 0x6ad8, 0xd29c, 0x1110, 0xd2ac,
+	0x0108, 0xc39d, 0x730e, 0x2011, 0x1848, 0x63f0, 0x2312, 0x20a9,
+	0x0006, 0x2011, 0x1840, 0x2019, 0x1841, 0x2071, 0x0250, 0x2376,
+	0x8e70, 0x2276, 0x8e70, 0x9398, 0x0002, 0x9290, 0x0002, 0x1f04,
+	0xa2af, 0x60c3, 0x0020, 0x080c, 0x98a5, 0x015e, 0x00de, 0x0005,
+	0x0156, 0x080c, 0x93e9, 0x7a14, 0x82ff, 0x0168, 0x9286, 0xffff,
+	0x0118, 0x9282, 0x000e, 0x1238, 0x7003, 0x0100, 0x700b, 0x0003,
+	0x60c3, 0x0008, 0x0488, 0x7003, 0x0200, 0x7007, 0x001c, 0x700f,
+	0x0001, 0x2011, 0x199a, 0x2204, 0x8007, 0x701a, 0x8210, 0x2204,
+	0x8007, 0x701e, 0x0421, 0x1120, 0xb8a0, 0x9082, 0x007f, 0x0248,
+	0x2001, 0x181e, 0x2004, 0x7022, 0x2001, 0x181f, 0x2004, 0x7026,
+	0x0030, 0x2001, 0x1817, 0x2004, 0x9084, 0x00ff, 0x7026, 0x20a9,
+	0x0004, 0x20e1, 0x0001, 0x2099, 0x1805, 0x20e9, 0x0000, 0x20a1,
+	0x0256, 0x4003, 0x60c3, 0x001c, 0x015e, 0x0804, 0x98a5, 0x0006,
+	0x2001, 0x1836, 0x2004, 0xd0ac, 0x000e, 0x0005, 0x2011, 0x0003,
+	0x080c, 0x9ca7, 0x2011, 0x0002, 0x080c, 0x9cb1, 0x080c, 0x9bbf,
+	0x0036, 0x901e, 0x080c, 0x9c35, 0x003e, 0x0005, 0x080c, 0x3261,
+	0x0188, 0x0016, 0x00b6, 0x00c6, 0x7010, 0x9085, 0x0020, 0x7012,
+	0x2009, 0x007e, 0x080c, 0x64fc, 0xb85c, 0xc0ac, 0xb85e, 0x00ce,
+	0x00be, 0x001e, 0x0005, 0x2071, 0x188e, 0x7000, 0x9005, 0x0140,
+	0x2001, 0x0976, 0x2071, 0x1800, 0x7072, 0x7076, 0x7067, 0xffe0,
+	0x2071, 0x1800, 0x7070, 0x7052, 0x7057, 0x1cd0, 0x0005, 0x00e6,
+	0x0126, 0x2071, 0x1800, 0x2091, 0x8000, 0x7550, 0x9582, 0x0010,
+	0x0608, 0x7054, 0x2060, 0x6000, 0x9086, 0x0000, 0x0148, 0x9ce0,
+	0x0018, 0x7064, 0x9c02, 0x1208, 0x0cb0, 0x2061, 0x1cd0, 0x0c98,
+	0x6003, 0x0008, 0x8529, 0x7552, 0x9ca8, 0x0018, 0x7064, 0x9502,
+	0x1230, 0x7556, 0x9085, 0x0001, 0x012e, 0x00ee, 0x0005, 0x7057,
+	0x1cd0, 0x0cc0, 0x9006, 0x0cc0, 0x00e6, 0x2071, 0x1800, 0x7550,
+	0x9582, 0x0010, 0x0600, 0x7054, 0x2060, 0x6000, 0x9086, 0x0000,
+	0x0148, 0x9ce0, 0x0018, 0x7064, 0x9c02, 0x1208, 0x0cb0, 0x2061,
+	0x1cd0, 0x0c98, 0x6003, 0x0008, 0x8529, 0x7552, 0x9ca8, 0x0018,
+	0x7064, 0x9502, 0x1228, 0x7556, 0x9085, 0x0001, 0x00ee, 0x0005,
+	0x7057, 0x1cd0, 0x0cc8, 0x9006, 0x0cc8, 0x9c82, 0x1cd0, 0x0a0c,
+	0x0dc3, 0x2001, 0x1819, 0x2004, 0x9c02, 0x1a0c, 0x0dc3, 0x9006,
+	0x6006, 0x600a, 0x600e, 0x6016, 0x601a, 0x6012, 0x6023, 0x0000,
+	0x6003, 0x0000, 0x601e, 0x6056, 0x605a, 0x6026, 0x602a, 0x602e,
+	0x6032, 0x6036, 0x603a, 0x603e, 0x6042, 0x2061, 0x1800, 0x6050,
+	0x8000, 0x6052, 0x9086, 0x0001, 0x0108, 0x0005, 0x0126, 0x2091,
+	0x8000, 0x0016, 0x080c, 0x8e38, 0x001e, 0x012e, 0x0cb0, 0x0006,
+	0x6000, 0x9086, 0x0000, 0x01b0, 0x601c, 0xd084, 0x190c, 0x1998,
+	0x6017, 0x0000, 0x6023, 0x0007, 0x2001, 0x1962, 0x2004, 0x0006,
+	0x9082, 0x0051, 0x000e, 0x0208, 0x8004, 0x601a, 0x080c, 0xdf7c,
+	0x6043, 0x0000, 0x000e, 0x0005, 0x00e6, 0x0126, 0x2071, 0x1800,
+	0x2091, 0x8000, 0x7550, 0x9582, 0x0001, 0x0608, 0x7054, 0x2060,
+	0x6000, 0x9086, 0x0000, 0x0148, 0x9ce0, 0x0018, 0x7064, 0x9c02,
+	0x1208, 0x0cb0, 0x2061, 0x1cd0, 0x0c98, 0x6003, 0x0008, 0x8529,
+	0x7552, 0x9ca8, 0x0018, 0x7064, 0x9502, 0x1230, 0x7556, 0x9085,
+	0x0001, 0x012e, 0x00ee, 0x0005, 0x7057, 0x1cd0, 0x0cc0, 0x9006,
+	0x0cc0, 0x6020, 0x9084, 0x000f, 0x0002, 0xa42c, 0xa435, 0xa450,
+	0xa46b, 0xc93f, 0xc95c, 0xc977, 0xa42c, 0xa435, 0xa42c, 0xa484,
+	0xa42c, 0xa42c, 0xa42c, 0xa42c, 0x9186, 0x0013, 0x1128, 0x080c,
+	0x8d2c, 0x080c, 0x8e38, 0x0005, 0x0005, 0x0066, 0x6000, 0x90b2,
+	0x0010, 0x1a0c, 0x0dc3, 0x0013, 0x006e, 0x0005, 0xa44e, 0xac0f,
+	0xadfa, 0xa44e, 0xae89, 0xa760, 0xa44e, 0xa44e, 0xab8f, 0xb472,
+	0xa44e, 0xa44e, 0xa44e, 0xa44e, 0xa44e, 0xa44e, 0x080c, 0x0dc3,
+	0x0066, 0x6000, 0x90b2, 0x0010, 0x1a0c, 0x0dc3, 0x0013, 0x006e,
+	0x0005, 0xa469, 0xbb61, 0xa469, 0xa469, 0xa469, 0xa469, 0xa469,
+	0xa469, 0xbaf8, 0xbce3, 0xa469, 0xbba2, 0xbc21, 0xbba2, 0xbc21,
+	0xa469, 0x080c, 0x0dc3, 0x6000, 0x9082, 0x0010, 0x1a0c, 0x0dc3,
+	0x6000, 0x0002, 0xa482, 0xb4b9, 0xb581, 0xb6b7, 0xb866, 0xa482,
+	0xa482, 0xa482, 0xb48d, 0xba7d, 0xba80, 0xa482, 0xa482, 0xa482,
+	0xa482, 0xbaaf, 0x080c, 0x0dc3, 0x0066, 0x6000, 0x90b2, 0x0010,
+	0x1a0c, 0x0dc3, 0x0013, 0x006e, 0x0005, 0xa49d, 0xa49d, 0xa4e0,
+	0xa578, 0xa60d, 0xa49d, 0xa49d, 0xa49d, 0xa49f, 0xa49d, 0xa49d,
+	0xa49d, 0xa49d, 0xa49d, 0xa49d, 0xa49d, 0x080c, 0x0dc3, 0x9186,
+	0x004c, 0x0588, 0x9186, 0x0003, 0x190c, 0x0dc3, 0x0096, 0x601c,
+	0xc0ed, 0x601e, 0x6003, 0x0003, 0x6106, 0x6014, 0x2048, 0xa880,
+	0x9084, 0xa010, 0xc0b5, 0xa882, 0xa8b0, 0xa846, 0xa8b4, 0xa84a,
+	0x9006, 0xa836, 0xa83a, 0xa888, 0x9092, 0x199a, 0x0210, 0x2001,
+	0x1999, 0x8003, 0x8013, 0x8213, 0x9210, 0x621a, 0x009e, 0x2c10,
+	0x080c, 0x1aea, 0x080c, 0x8906, 0x0126, 0x2091, 0x8000, 0x080c,
+	0x8f0e, 0x012e, 0x0005, 0x6010, 0x00b6, 0x2058, 0xbca0, 0x00be,
+	0x2c00, 0x080c, 0xa62f, 0x080c, 0xc8e6, 0x6003, 0x0007, 0x0005,
+	0x00d6, 0x0096, 0x00f6, 0x2079, 0x1800, 0x7a8c, 0x6014, 0x2048,
+	0xa880, 0xd0ec, 0x1110, 0x9290, 0x0018, 0xac7c, 0xc4fc, 0x0046,
+	0xa8e4, 0x9005, 0x1140, 0xa8e0, 0x921a, 0x0140, 0x0220, 0xa87f,
+	0x0007, 0x2010, 0x0028, 0xa87f, 0x0015, 0x0010, 0xa87f, 0x0000,
+	0x8214, 0xa887, 0x0000, 0xaa02, 0x0006, 0x0016, 0x0026, 0x00c6,
+	0x00d6, 0x00e6, 0x00f6, 0x2400, 0x9005, 0x1108, 0x009a, 0x2100,
+	0x9086, 0x0015, 0x1118, 0x2001, 0x0001, 0x0038, 0x2100, 0x9086,
+	0x0016, 0x0118, 0x2001, 0x0001, 0x002a, 0x94a4, 0x0007, 0x8423,
+	0x9405, 0x0002, 0xa540, 0xa540, 0xa537, 0xa53a, 0xa540, 0xa534,
+	0xa532, 0xa532, 0xa532, 0xa532, 0xa532, 0xa532, 0xa532, 0xa532,
+	0xa532, 0xa532, 0x080c, 0x0dc3, 0x080c, 0xb082, 0x0048, 0x080c,
+	0xb1b9, 0x0030, 0x080c, 0xb2a7, 0x2001, 0x0004, 0x080c, 0x6448,
+	0x00fe, 0x00ee, 0x00de, 0x00ce, 0x002e, 0x001e, 0x2c00, 0xa89a,
+	0x000e, 0x080c, 0xa6ed, 0x0530, 0xa804, 0xa80e, 0x00a6, 0x2050,
+	0xb100, 0x00ae, 0x8006, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084,
+	0xffc0, 0x9080, 0x0002, 0xaad0, 0xabd4, 0xacd8, 0xaddc, 0x2031,
+	0x0000, 0x2041, 0x1272, 0x080c, 0xa8fb, 0x0160, 0x000e, 0x9005,
+	0x0120, 0x00fe, 0x009e, 0x00de, 0x0005, 0x00fe, 0x009e, 0x00de,
+	0x0804, 0xa39d, 0x2001, 0x002c, 0x900e, 0x080c, 0xa753, 0x0c70,
+	0x91b6, 0x0015, 0x0170, 0x91b6, 0x0016, 0x0158, 0x91b2, 0x0047,
+	0x0a0c, 0x0dc3, 0x91b2, 0x0050, 0x1a0c, 0x0dc3, 0x9182, 0x0047,
+	0x00ca, 0x2001, 0x0109, 0x2004, 0xd08c, 0x0198, 0x0126, 0x2091,
+	0x2800, 0x0006, 0x0016, 0x0026, 0x080c, 0x885a, 0x002e, 0x001e,
+	0x000e, 0x012e, 0xa001, 0x6000, 0x9086, 0x0002, 0x1110, 0x0804,
+	0xa4e0, 0x0005, 0xa5ab, 0xa5ab, 0xa5ad, 0xa5e3, 0xa5ab, 0xa5ab,
+	0xa5ab, 0xa5ab, 0xa5f6, 0x080c, 0x0dc3, 0x00d6, 0x0016, 0x0096,
+	0x080c, 0x8de8, 0x080c, 0x8f0e, 0x6003, 0x0004, 0x6114, 0x2148,
+	0xa880, 0xd0fc, 0x01c0, 0xa87c, 0xc0fc, 0x9005, 0x1158, 0xa898,
+	0x9005, 0x0140, 0x2001, 0x0000, 0x900e, 0x080c, 0xa753, 0x080c,
+	0xa39d, 0x00a8, 0x6003, 0x0002, 0xa8a8, 0xa9ac, 0x9105, 0x1178,
+	0xa8b2, 0xa8b6, 0x0c78, 0xa883, 0x0020, 0xa890, 0xa88e, 0xa8a8,
+	0xa8b2, 0xa8ac, 0xa8b6, 0xa8cb, 0x0000, 0xa8cf, 0x0000, 0x009e,
+	0x001e, 0x00de, 0x0005, 0x080c, 0x8de8, 0x00d6, 0x0096, 0x6114,
+	0x2148, 0x080c, 0xc1cd, 0x0120, 0xa87f, 0x0006, 0x080c, 0x6c02,
+	0x009e, 0x00de, 0x080c, 0xa39d, 0x0804, 0x8f0e, 0x080c, 0x8de8,
+	0x080c, 0x3102, 0x080c, 0xc8e3, 0x00d6, 0x0096, 0x6114, 0x2148,
+	0x080c, 0xc1cd, 0x0120, 0xa87f, 0x0029, 0x080c, 0x6c02, 0x009e,
+	0x00de, 0x080c, 0xa39d, 0x0804, 0x8f0e, 0x9182, 0x0047, 0x0002,
+	0xa61d, 0xa61f, 0xa61d, 0xa61d, 0xa61d, 0xa61d, 0xa61d, 0xa61d,
+	0xa61d, 0xa61d, 0xa61d, 0xa61d, 0xa61f, 0x080c, 0x0dc3, 0x00d6,
+	0x0096, 0x080c, 0x155f, 0x6114, 0x2148, 0xa87f, 0x0000, 0xa887,
+	0x0000, 0x080c, 0x6c02, 0x009e, 0x00de, 0x0804, 0xa39d, 0x0026,
+	0x0036, 0x0056, 0x0066, 0x0096, 0x00a6, 0x00f6, 0x0006, 0x080c,
+	0x100d, 0x000e, 0x090c, 0x0dc3, 0xa960, 0x21e8, 0xa95c, 0x9188,
+	0x001a, 0x21a0, 0x900e, 0x20a9, 0x0020, 0x4104, 0xa87e, 0x2079,
+	0x1800, 0x798c, 0x9188, 0x0018, 0x918c, 0x0fff, 0xa976, 0xac7a,
+	0x2950, 0x00a6, 0x2001, 0x0205, 0x2003, 0x0000, 0x901e, 0x2029,
+	0x0001, 0x9182, 0x0035, 0x1228, 0x2011, 0x0020, 0x080c, 0xbd68,
+	0x04c0, 0x2130, 0x2009, 0x0034, 0x2011, 0x0020, 0x080c, 0xbd68,
+	0x96b2, 0x0034, 0xb004, 0x904d, 0x0110, 0x080c, 0x0fbf, 0x080c,
+	0x100d, 0x01d0, 0x8528, 0xa86b, 0x0110, 0xa86f, 0x0000, 0x2920,
+	0xb406, 0x968a, 0x003d, 0x1230, 0x2608, 0x2011, 0x001c, 0x080c,
+	0xbd68, 0x00b8, 0x96b2, 0x003c, 0x2009, 0x003c, 0x2950, 0x2011,
+	0x001c, 0x080c, 0xbd68, 0x0c18, 0x2001, 0x0205, 0x2003, 0x0000,
+	0x00ae, 0x852f, 0x95ad, 0x0050, 0xb56a, 0xb074, 0xc0fd, 0xb076,
+	0x0048, 0x2001, 0x0205, 0x2003, 0x0000, 0x00ae, 0x852f, 0x95ad,
+	0x0050, 0xb56a, 0x2a48, 0xa804, 0xa807, 0x0000, 0x0006, 0x080c,
+	0x6c02, 0x000e, 0x2048, 0x9005, 0x1db0, 0x00fe, 0x00ae, 0x009e,
+	0x006e, 0x005e, 0x003e, 0x002e, 0x0005, 0x00d6, 0x00f6, 0x0096,
+	0x0006, 0x080c, 0x100d, 0x000e, 0x090c, 0x0dc3, 0xa960, 0x21e8,
+	0xa95c, 0x9188, 0x001a, 0x21a0, 0x900e, 0x20a9, 0x0020, 0x4104,
+	0xaa6a, 0xa87e, 0x2079, 0x1800, 0x798c, 0x810c, 0x9188, 0x000c,
+	0x9182, 0x001a, 0x0210, 0x2009, 0x001a, 0x21a8, 0x810b, 0xa976,
+	0xac7a, 0x2e98, 0xa85c, 0x9080, 0x0020, 0x20a0, 0x2001, 0x0205,
+	0x200c, 0x918d, 0x0080, 0x2102, 0x4003, 0x2003, 0x0000, 0x080c,
+	0x6c02, 0x009e, 0x00fe, 0x00de, 0x0005, 0x0016, 0x00d6, 0x00f6,
+	0x0096, 0x0016, 0x2001, 0x0205, 0x200c, 0x918d, 0x0080, 0x2102,
+	0x001e, 0x2079, 0x0200, 0x2e98, 0xa880, 0xd0ec, 0x0118, 0x9e80,
+	0x000c, 0x2098, 0x2021, 0x003e, 0x901e, 0x9282, 0x0020, 0x0218,
+	0x2011, 0x0020, 0x2018, 0x9486, 0x003e, 0x1170, 0x0096, 0x080c,
+	0x100d, 0x2900, 0x009e, 0x05c0, 0xa806, 0x2048, 0xa860, 0x20e8,
+	0xa85c, 0x9080, 0x0002, 0x20a0, 0x3300, 0x908e, 0x0260, 0x0140,
+	0x2009, 0x0280, 0x9102, 0x920a, 0x0218, 0x2010, 0x2100, 0x9318,
+	0x2200, 0x9402, 0x1228, 0x2400, 0x9202, 0x2410, 0x9318, 0x9006,
+	0x2020, 0x22a8, 0xa800, 0x9200, 0xa802, 0x20e1, 0x0000, 0x4003,
+	0x83ff, 0x0180, 0x3300, 0x9086, 0x0280, 0x1130, 0x7814, 0x8000,
+	0x9085, 0x0080, 0x7816, 0x2e98, 0x2310, 0x84ff, 0x0904, 0xa702,
+	0x0804, 0xa704, 0x9085, 0x0001, 0x7817, 0x0000, 0x009e, 0x00fe,
+	0x00de, 0x001e, 0x0005, 0x00d6, 0x0036, 0x0096, 0x6314, 0x2348,
+	0xa87e, 0xa986, 0x080c, 0x6bf5, 0x009e, 0x003e, 0x00de, 0x0005,
+	0x91b6, 0x0015, 0x1118, 0x080c, 0xa39d, 0x0030, 0x91b6, 0x0016,
+	0x190c, 0x0dc3, 0x080c, 0xa39d, 0x0005, 0x20a9, 0x000e, 0x20e1,
+	0x0000, 0x2e98, 0x6014, 0x0096, 0x2048, 0xa804, 0x9005, 0x15c0,
+	0x2900, 0x009e, 0x0096, 0x2048, 0xa860, 0x20e8, 0xa85c, 0x20a0,
+	0x009e, 0x4003, 0x9196, 0x0016, 0x01f0, 0x0136, 0x9080, 0x001c,
+	0x20a0, 0x2011, 0x0006, 0x20a9, 0x0001, 0x3418, 0x8318, 0x23a0,
+	0x4003, 0x3318, 0x8318, 0x2398, 0x8211, 0x1db8, 0x2011, 0x0006,
+	0x013e, 0x20a0, 0x3318, 0x8318, 0x2398, 0x4003, 0x3418, 0x8318,
+	0x23a0, 0x8211, 0x1db8, 0x0096, 0x080c, 0xc1cd, 0x0130, 0x6014,
+	0x2048, 0xa807, 0x0000, 0xa86b, 0x0103, 0x009e, 0x0804, 0xa39d,
+	0x009e, 0x7130, 0x918e, 0x0100, 0x1120, 0x080c, 0xadb3, 0x0804,
+	0xa39d, 0x20e1, 0x0000, 0x9e88, 0x000e, 0x2198, 0x0096, 0x2048,
+	0xa860, 0x20e8, 0xa85c, 0x009e, 0x0136, 0x9080, 0x000e, 0x20a0,
+	0x2011, 0x0006, 0x20a9, 0x0001, 0x3418, 0x83a0, 0x4003, 0x3318,
+	0x8398, 0x8211, 0x1dc8, 0x2011, 0x0006, 0x013e, 0x20a0, 0x3318,
+	0x8398, 0x4003, 0x3418, 0x83a0, 0x8211, 0x1dc8, 0x6014, 0x0096,
+	0x2048, 0xa804, 0x0086, 0x2040, 0x2009, 0x000c, 0x8806, 0x8006,
+	0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x000e, 0xaaa4,
+	0xaba0, 0xacac, 0xada8, 0x2031, 0x0000, 0x2041, 0x1253, 0x080c,
+	0xa8fb, 0x0120, 0x008e, 0x009e, 0x0804, 0xa39d, 0x080c, 0xadb3,
+	0x0cc8, 0x0096, 0x00d6, 0x0036, 0x7330, 0x9386, 0x0200, 0x11a8,
+	0x6010, 0x00b6, 0x2058, 0xb8bf, 0x0000, 0x00be, 0x6014, 0x9005,
+	0x0130, 0x2048, 0xa807, 0x0000, 0xa86b, 0x0103, 0xab32, 0x080c,
+	0xa39d, 0x003e, 0x00de, 0x009e, 0x0005, 0x0011, 0x1d48, 0x0cc8,
+	0x0006, 0x0016, 0x080c, 0xc8ce, 0x0188, 0x6014, 0x9005, 0x1170,
+	0x600b, 0x0003, 0x601b, 0x0000, 0x6043, 0x0000, 0x2009, 0x0022,
+	0x080c, 0xabe5, 0x9006, 0x001e, 0x000e, 0x0005, 0x9085, 0x0001,
 	0x0cd0, 0x0096, 0x0016, 0x20a9, 0x0014, 0x9e80, 0x000c, 0x20e1,
 	0x0000, 0x2098, 0x6014, 0x2048, 0xa860, 0x20e8, 0xa85c, 0x9080,
 	0x0002, 0x20a0, 0x4003, 0x2001, 0x0205, 0x2003, 0x0001, 0x2099,
@@ -5022,449 +5170,528 @@
 	0xa860, 0x20e8, 0xa85c, 0x9080, 0x0002, 0x20a0, 0x4003, 0x2001,
 	0x0205, 0x2003, 0x0002, 0x2099, 0x0260, 0x20a9, 0x0020, 0x4003,
 	0x2003, 0x0000, 0x6014, 0x2048, 0xa800, 0x2048, 0xa86b, 0x0103,
-	0x080c, 0x9f18, 0x001e, 0x009e, 0x0005, 0x0096, 0x0016, 0x900e,
+	0x080c, 0xa39d, 0x001e, 0x009e, 0x0005, 0x0096, 0x0016, 0x900e,
 	0x7030, 0x9086, 0x0100, 0x0140, 0x7038, 0x9084, 0x00ff, 0x800c,
 	0x703c, 0x9084, 0x00ff, 0x8004, 0x9080, 0x0004, 0x9108, 0x810b,
-	0x2011, 0x0002, 0x2019, 0x000c, 0x6014, 0x2048, 0x080c, 0xb54b,
-	0x2011, 0x0205, 0x2013, 0x0000, 0x080c, 0xb955, 0x0140, 0x6014,
+	0x2011, 0x0002, 0x2019, 0x000c, 0x6014, 0x2048, 0x080c, 0xbd68,
+	0x2011, 0x0205, 0x2013, 0x0000, 0x080c, 0xc1cd, 0x0140, 0x6014,
 	0x2048, 0xa807, 0x0000, 0xa868, 0xa8e6, 0xa86b, 0x0103, 0x080c,
-	0x9f18, 0x001e, 0x009e, 0x0005, 0x0016, 0x0096, 0x7030, 0x9086,
+	0xa39d, 0x001e, 0x009e, 0x0005, 0x0016, 0x0096, 0x7030, 0x9086,
 	0x0100, 0x1118, 0x2009, 0x0004, 0x0010, 0x7034, 0x800c, 0x810b,
 	0x2011, 0x000c, 0x2019, 0x000c, 0x6014, 0x2048, 0xa804, 0x0096,
-	0x9005, 0x0108, 0x2048, 0x080c, 0xb54b, 0x2011, 0x0205, 0x2013,
-	0x0000, 0x009e, 0x080c, 0xb955, 0x0148, 0xa804, 0x9005, 0x1158,
-	0xa807, 0x0000, 0xa868, 0xa8e6, 0xa86b, 0x0103, 0x080c, 0x9f18,
+	0x9005, 0x0108, 0x2048, 0x080c, 0xbd68, 0x2011, 0x0205, 0x2013,
+	0x0000, 0x009e, 0x080c, 0xc1cd, 0x0148, 0xa804, 0x9005, 0x1158,
+	0xa807, 0x0000, 0xa868, 0xa8e6, 0xa86b, 0x0103, 0x080c, 0xa39d,
 	0x009e, 0x001e, 0x0005, 0x0086, 0x2040, 0xa030, 0x8007, 0x9086,
-	0x0100, 0x1118, 0x080c, 0xa717, 0x00e0, 0xa034, 0x8007, 0x800c,
+	0x0100, 0x1118, 0x080c, 0xadb3, 0x00e0, 0xa034, 0x8007, 0x800c,
 	0x8806, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080,
 	0x000c, 0xa87f, 0x0000, 0xa887, 0x0000, 0xa89b, 0x4000, 0xaaa4,
-	0xaba0, 0xacac, 0xada8, 0x2031, 0x0000, 0x2041, 0x1247, 0x0019,
-	0x0d08, 0x008e, 0x0898, 0x0096, 0x0006, 0x080c, 0x1001, 0x000e,
+	0xaba0, 0xacac, 0xada8, 0x2031, 0x0000, 0x2041, 0x1253, 0x0019,
+	0x0d08, 0x008e, 0x0898, 0x0096, 0x0006, 0x080c, 0x100d, 0x000e,
 	0x01b0, 0xa8af, 0x0dcb, 0xa87a, 0x000e, 0xa8a6, 0x0006, 0xae6e,
 	0x2800, 0xa8a2, 0xa97e, 0xaf76, 0xaa92, 0xab96, 0xac9a, 0xad9e,
-	0x0086, 0x2940, 0x080c, 0x10eb, 0x008e, 0x9085, 0x0001, 0x009e,
-	0x0005, 0x00b6, 0x0096, 0x00f6, 0x6014, 0x2048, 0x6010, 0x2058,
-	0x91b6, 0x0015, 0x0130, 0xba08, 0xbb0c, 0xbc00, 0xc48c, 0xbc02,
-	0x0470, 0x0096, 0x0156, 0x0036, 0x0026, 0x2b48, 0x9e90, 0x0010,
-	0x2019, 0x000a, 0x20a9, 0x0004, 0x080c, 0xad8d, 0x002e, 0x003e,
-	0x015e, 0x009e, 0x1904, 0xa4e4, 0x0096, 0x0156, 0x0036, 0x0026,
-	0x2b48, 0x9e90, 0x0014, 0x2019, 0x0006, 0x20a9, 0x0004, 0x080c,
-	0xad8d, 0x002e, 0x003e, 0x015e, 0x009e, 0x15b0, 0x7238, 0xba0a,
-	0x733c, 0xbb0e, 0x83ff, 0x0118, 0xbc00, 0xc48d, 0xbc02, 0xa804,
-	0x9005, 0x1128, 0x00fe, 0x009e, 0x00be, 0x0804, 0xa305, 0x0096,
-	0x2048, 0xaa12, 0xab16, 0xac0a, 0x009e, 0x8006, 0x8006, 0x8007,
-	0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x0002, 0x2009, 0x002b,
-	0xaaa4, 0xaba0, 0xacac, 0xada8, 0x2031, 0x0000, 0x2041, 0x1247,
-	0x080c, 0xa45b, 0x0130, 0x00fe, 0x009e, 0x080c, 0x9f18, 0x00be,
-	0x0005, 0x080c, 0xa717, 0x0cb8, 0x2b78, 0x00f6, 0x080c, 0x3066,
-	0x080c, 0xbf0d, 0x00fe, 0x00c6, 0x080c, 0x9ec2, 0x2f00, 0x6012,
-	0x6017, 0x0000, 0x6023, 0x0001, 0x6007, 0x0001, 0x6003, 0x0001,
-	0x2001, 0x0007, 0x080c, 0x6372, 0x080c, 0x639e, 0x080c, 0x8718,
-	0x080c, 0x8c37, 0x00ce, 0x0804, 0xa4b7, 0x2100, 0x91b2, 0x0054,
-	0x1a0c, 0x0dc4, 0x91b2, 0x0040, 0x1a04, 0xa563, 0x0002, 0xa551,
-	0xa551, 0xa551, 0xa551, 0xa551, 0xa551, 0xa54f, 0xa54f, 0xa54f,
-	0xa54f, 0xa54f, 0xa54f, 0xa54f, 0xa54f, 0xa54f, 0xa54f, 0xa54f,
-	0xa54f, 0xa54f, 0xa54f, 0xa54f, 0xa54f, 0xa54f, 0xa54f, 0xa54f,
-	0xa54f, 0xa54f, 0xa54f, 0xa54f, 0xa54f, 0xa54f, 0xa551, 0xa54f,
-	0xa551, 0xa551, 0xa54f, 0xa54f, 0xa54f, 0xa54f, 0xa54f, 0xa551,
-	0xa54f, 0xa54f, 0xa54f, 0xa54f, 0xa54f, 0xa54f, 0xa54f, 0xa54f,
-	0xa54f, 0xa551, 0xa551, 0xa54f, 0xa54f, 0xa54f, 0xa54f, 0xa54f,
-	0xa54f, 0xa54f, 0xa54f, 0xa54f, 0xa551, 0xa54f, 0xa54f, 0x080c,
-	0x0dc4, 0x6003, 0x0001, 0x6106, 0x9186, 0x0032, 0x0118, 0x080c,
-	0x8718, 0x0010, 0x080c, 0x86d0, 0x0126, 0x2091, 0x8000, 0x080c,
-	0x8c37, 0x012e, 0x0005, 0x2600, 0x0002, 0xa579, 0xa579, 0xa579,
-	0xa551, 0xa551, 0xa579, 0xa579, 0xa579, 0xa579, 0xa551, 0xa579,
-	0xa551, 0xa579, 0xa551, 0xa579, 0xa579, 0xa579, 0xa579, 0xa579,
-	0xa579, 0x080c, 0x0dc4, 0x6004, 0x90b2, 0x0054, 0x1a0c, 0x0dc4,
-	0x91b6, 0x0013, 0x0904, 0xa64e, 0x91b6, 0x0027, 0x1904, 0xa5f8,
-	0x080c, 0x8b2b, 0x6004, 0x080c, 0xbb45, 0x01b0, 0x080c, 0xbb56,
-	0x01a8, 0x908e, 0x0021, 0x0904, 0xa5f5, 0x908e, 0x0022, 0x1130,
-	0x080c, 0xa382, 0x0904, 0xa5f1, 0x0804, 0xa5f2, 0x908e, 0x003d,
-	0x0904, 0xa5f5, 0x0804, 0xa5eb, 0x080c, 0x308f, 0x2001, 0x0007,
-	0x080c, 0x6372, 0x6010, 0x00b6, 0x2058, 0xb9a0, 0x00be, 0x080c,
-	0xa717, 0x9186, 0x007e, 0x1148, 0x2001, 0x1836, 0x2014, 0xc285,
-	0x080c, 0x72e5, 0x1108, 0xc2ad, 0x2202, 0x0036, 0x0026, 0x2019,
-	0x0028, 0x2110, 0x080c, 0xd251, 0x002e, 0x003e, 0x0016, 0x0026,
-	0x0036, 0x2110, 0x2019, 0x0028, 0x080c, 0x8843, 0x0076, 0x903e,
-	0x080c, 0x8748, 0x6010, 0x00b6, 0x905d, 0x0100, 0x00be, 0x2c08,
-	0x080c, 0xce89, 0x007e, 0x003e, 0x002e, 0x001e, 0x080c, 0xbf0d,
-	0x0016, 0x080c, 0xbc8f, 0x080c, 0x9f18, 0x001e, 0x080c, 0x3162,
-	0x080c, 0x8c37, 0x0030, 0x080c, 0xbc8f, 0x080c, 0x9f18, 0x080c,
-	0x8c37, 0x0005, 0x080c, 0xa717, 0x0cb0, 0x080c, 0xa753, 0x0c98,
-	0x9186, 0x0015, 0x0118, 0x9186, 0x0016, 0x1148, 0x080c, 0xbf19,
-	0x0d80, 0x6000, 0x9086, 0x0002, 0x0904, 0xa75e, 0x0c50, 0x9186,
-	0x0014, 0x1d38, 0x080c, 0x8b2b, 0x6004, 0x908e, 0x0022, 0x1118,
-	0x080c, 0xa382, 0x09f0, 0x080c, 0x3066, 0x080c, 0xbf0d, 0x080c,
-	0xbb45, 0x1198, 0x080c, 0x308f, 0x6010, 0x00b6, 0x2058, 0xb9a0,
-	0x00be, 0x080c, 0xa717, 0x9186, 0x007e, 0x1128, 0x2001, 0x1836,
-	0x200c, 0xc185, 0x2102, 0x0804, 0xa5eb, 0x080c, 0xbb56, 0x1120,
-	0x080c, 0xa717, 0x0804, 0xa5eb, 0x6004, 0x908e, 0x0032, 0x1160,
-	0x00e6, 0x00f6, 0x2071, 0x189f, 0x2079, 0x0000, 0x080c, 0x33fd,
-	0x00fe, 0x00ee, 0x0804, 0xa5eb, 0x6004, 0x908e, 0x0021, 0x0d40,
-	0x908e, 0x0022, 0x090c, 0xa717, 0x0804, 0xa5eb, 0x90b2, 0x0040,
-	0x1a04, 0xa6fe, 0x2008, 0x0002, 0xa696, 0xa697, 0xa69a, 0xa69d,
-	0xa6a0, 0xa6ad, 0xa694, 0xa694, 0xa694, 0xa694, 0xa694, 0xa694,
-	0xa694, 0xa694, 0xa694, 0xa694, 0xa694, 0xa694, 0xa694, 0xa694,
-	0xa694, 0xa694, 0xa694, 0xa694, 0xa694, 0xa694, 0xa694, 0xa694,
-	0xa694, 0xa694, 0xa6b0, 0xa6b3, 0xa694, 0xa6b5, 0xa6b3, 0xa694,
-	0xa694, 0xa694, 0xa694, 0xa694, 0xa6b3, 0xa6b3, 0xa694, 0xa694,
-	0xa694, 0xa694, 0xa694, 0xa694, 0xa694, 0xa694, 0xa6e5, 0xa6b3,
-	0xa694, 0xa694, 0xa694, 0xa694, 0xa694, 0xa694, 0xa694, 0xa694,
-	0xa694, 0xa6b3, 0xa6dc, 0xa694, 0x080c, 0x0dc4, 0x00e0, 0x2001,
-	0x000b, 0x0420, 0x2001, 0x0003, 0x0408, 0x2001, 0x0005, 0x00f0,
-	0x6010, 0x00b6, 0x2058, 0xb804, 0x00be, 0x9084, 0x00ff, 0x9086,
-	0x0000, 0x11b0, 0x2001, 0x0001, 0x0088, 0x2001, 0x0009, 0x0070,
-	0x080c, 0x0dc4, 0x0050, 0x0804, 0xa6f6, 0x080c, 0x8b2b, 0x080c,
-	0xbf10, 0x6003, 0x0004, 0x080c, 0x8c37, 0x0005, 0x080c, 0x6372,
-	0x080c, 0x8b2b, 0x6003, 0x0002, 0x0036, 0x2019, 0x1869, 0x2304,
-	0x9084, 0xff00, 0x1120, 0x2001, 0x1963, 0x201c, 0x0040, 0x8007,
-	0x909a, 0x0004, 0x0ec0, 0x8003, 0x801b, 0x831b, 0x9318, 0x631a,
-	0x003e, 0x080c, 0x8c37, 0x0c08, 0x080c, 0x8b2b, 0x080c, 0xbc8f,
-	0x080c, 0x9f18, 0x080c, 0x8c37, 0x08c0, 0x00e6, 0x00f6, 0x2071,
-	0x189f, 0x2079, 0x0000, 0x080c, 0x33fd, 0x00fe, 0x00ee, 0x080c,
-	0x8b2b, 0x080c, 0x9f18, 0x080c, 0x8c37, 0x0838, 0x080c, 0x8b2b,
-	0x6003, 0x0002, 0x080c, 0xbf10, 0x0804, 0x8c37, 0x2600, 0x2008,
-	0x0002, 0xa715, 0xa715, 0xa715, 0xa6f6, 0xa6f6, 0xa715, 0xa715,
-	0xa715, 0xa715, 0xa6f6, 0xa715, 0xa6f6, 0xa715, 0xa6f6, 0xa715,
-	0xa715, 0xa715, 0xa715, 0xa715, 0xa715, 0x080c, 0x0dc4, 0x00e6,
-	0x0096, 0x0026, 0x0016, 0x080c, 0xb955, 0x0568, 0x6014, 0x2048,
-	0xa868, 0x9086, 0x0139, 0x11a8, 0xa898, 0x9086, 0x0056, 0x1148,
-	0x080c, 0x533c, 0x0130, 0x2001, 0x0000, 0x900e, 0x2011, 0x4000,
-	0x0028, 0x2001, 0x0030, 0x900e, 0x2011, 0x4005, 0x080c, 0xbe00,
-	0x0090, 0xa86c, 0xd0fc, 0x0178, 0xa807, 0x0000, 0x0016, 0x6004,
-	0x908e, 0x0021, 0x0168, 0x908e, 0x003d, 0x0150, 0x001e, 0xa86b,
-	0x0103, 0xa833, 0x0100, 0x001e, 0x002e, 0x009e, 0x00ee, 0x0005,
-	0x001e, 0x0009, 0x0cc0, 0x0096, 0x6014, 0x2048, 0xa800, 0x2048,
-	0xa86b, 0x0103, 0xa823, 0x8001, 0x009e, 0x0005, 0x00b6, 0x6610,
-	0x2658, 0xb804, 0x9084, 0x00ff, 0x90b2, 0x000c, 0x1a0c, 0x0dc4,
-	0x6604, 0x96b6, 0x004d, 0x1120, 0x080c, 0xbd1f, 0x0804, 0xa7cb,
-	0x6604, 0x96b6, 0x0043, 0x1120, 0x080c, 0xbd68, 0x0804, 0xa7cb,
-	0x6604, 0x96b6, 0x004b, 0x1120, 0x080c, 0xbd94, 0x0804, 0xa7cb,
-	0x6604, 0x96b6, 0x0033, 0x1120, 0x080c, 0xbcb1, 0x0804, 0xa7cb,
-	0x6604, 0x96b6, 0x0028, 0x1118, 0x080c, 0xbb94, 0x04e0, 0x6604,
-	0x96b6, 0x0029, 0x1118, 0x080c, 0xbbd5, 0x04a8, 0x6604, 0x96b6,
-	0x001f, 0x1118, 0x080c, 0xa2cf, 0x0470, 0x6604, 0x96b6, 0x0000,
-	0x1118, 0x080c, 0xa479, 0x0438, 0x6604, 0x96b6, 0x0022, 0x1118,
-	0x080c, 0xa363, 0x0400, 0x6604, 0x96b6, 0x003d, 0x1118, 0x080c,
-	0xa399, 0x00c8, 0x6604, 0x96b6, 0x0044, 0x1118, 0x080c, 0xa3d5,
-	0x0090, 0x6604, 0x96b6, 0x0049, 0x1118, 0x080c, 0xa404, 0x0058,
-	0x91b6, 0x0015, 0x1110, 0x0063, 0x0030, 0x91b6, 0x0016, 0x1128,
-	0x00be, 0x0804, 0xaaac, 0x00be, 0x0005, 0x080c, 0x9fa3, 0x0cd8,
-	0xa7e9, 0xa7f7, 0xa7e9, 0xa834, 0xa7e9, 0xa9ce, 0xaab9, 0xa7e9,
-	0xa7e9, 0xa7e9, 0xaa86, 0xa7e9, 0xaa9a, 0x0096, 0x080c, 0x154a,
-	0x6014, 0x2048, 0xa800, 0x2048, 0xa86b, 0x0103, 0x009e, 0x0804,
-	0x9f18, 0xa001, 0xa001, 0x0005, 0x6604, 0x96b6, 0x0004, 0x1130,
-	0x2001, 0x0001, 0x080c, 0x635e, 0x0804, 0x9f18, 0x0005, 0x00e6,
-	0x2071, 0x1800, 0x708c, 0x9086, 0x0074, 0x1500, 0x080c, 0xce5a,
-	0x1170, 0x6010, 0x00b6, 0x2058, 0x00e9, 0x00be, 0x2001, 0x0006,
-	0x080c, 0x6372, 0x080c, 0x308f, 0x080c, 0x9f18, 0x0088, 0x2001,
-	0x000a, 0x080c, 0x6372, 0x080c, 0x308f, 0x6003, 0x0001, 0x6007,
-	0x0001, 0x080c, 0x8718, 0x080c, 0x8c37, 0x0010, 0x080c, 0xa9b9,
-	0x00ee, 0x0005, 0x00d6, 0xb800, 0xd084, 0x0160, 0x9006, 0x080c,
-	0x635e, 0x2069, 0x185e, 0x6804, 0xd0a4, 0x0120, 0x2001, 0x0006,
-	0x080c, 0x639e, 0x00de, 0x0005, 0x00b6, 0x0096, 0x00d6, 0x2011,
-	0x1823, 0x2204, 0x9086, 0x0074, 0x1904, 0xa990, 0x6010, 0x2058,
-	0xbaa0, 0x9286, 0x007e, 0x1120, 0x080c, 0xabfe, 0x0804, 0xa8fd,
-	0x2001, 0x180d, 0x2004, 0xd08c, 0x0904, 0xa89f, 0x00d6, 0x080c,
-	0x72e5, 0x01a0, 0x0026, 0x2011, 0x0010, 0x080c, 0x6781, 0x002e,
-	0x0904, 0xa89e, 0x080c, 0x55bb, 0x1598, 0x6014, 0x2048, 0xa807,
-	0x0000, 0xa86b, 0x0103, 0xa833, 0xdead, 0x0450, 0x6010, 0x00b6,
-	0x2058, 0xb910, 0x00be, 0x9186, 0x00ff, 0x0580, 0x0026, 0x2011,
-	0x8008, 0x080c, 0x6781, 0x002e, 0x0548, 0x6014, 0x9005, 0x090c,
-	0x0dc4, 0x2048, 0xa868, 0x9084, 0x00ff, 0x9086, 0x0039, 0x1140,
-	0x2001, 0x0030, 0x900e, 0x2011, 0x4009, 0x080c, 0xbe00, 0x0040,
-	0x6014, 0x2048, 0xa807, 0x0000, 0xa86b, 0x0103, 0xa833, 0xdead,
-	0x6010, 0x2058, 0xb9a0, 0x0016, 0x080c, 0x308f, 0x080c, 0x9f18,
-	0x001e, 0x080c, 0x3162, 0x00de, 0x0804, 0xa993, 0x00de, 0x080c,
-	0xabf3, 0x6010, 0x2058, 0xbaa0, 0x9286, 0x0080, 0x1510, 0x6014,
-	0x9005, 0x01a8, 0x2048, 0xa868, 0x9084, 0x00ff, 0x9086, 0x0039,
-	0x1140, 0x2001, 0x0000, 0x900e, 0x2011, 0x4000, 0x080c, 0xbe00,
-	0x0030, 0xa807, 0x0000, 0xa86b, 0x0103, 0xa833, 0x0200, 0x2001,
-	0x0006, 0x080c, 0x6372, 0x080c, 0x308f, 0x080c, 0x9f18, 0x0804,
-	0xa993, 0x080c, 0xa9a1, 0x6014, 0x9005, 0x0190, 0x2048, 0xa86c,
-	0xd0f4, 0x01e8, 0xa868, 0x9084, 0x00ff, 0x9086, 0x0039, 0x1d08,
-	0x2001, 0x0000, 0x900e, 0x2011, 0x4000, 0x080c, 0xbe00, 0x08f8,
-	0x080c, 0xa997, 0x0160, 0x9006, 0x080c, 0x635e, 0x2001, 0x0004,
-	0x080c, 0x639e, 0x2001, 0x0007, 0x080c, 0x6372, 0x08a0, 0x2001,
-	0x0004, 0x080c, 0x6372, 0x6003, 0x0001, 0x6007, 0x0003, 0x080c,
-	0x8718, 0x080c, 0x8c37, 0x0804, 0xa993, 0xb85c, 0xd0e4, 0x0178,
-	0x080c, 0xbc49, 0x080c, 0x72e5, 0x0118, 0xd0dc, 0x1904, 0xa8bf,
-	0x2011, 0x1836, 0x2204, 0xc0ad, 0x2012, 0x0804, 0xa8bf, 0x080c,
-	0xbc7a, 0x2011, 0x1836, 0x2204, 0xc0a5, 0x2012, 0x0006, 0x080c,
-	0xcffa, 0x000e, 0x1904, 0xa8bf, 0xc0b5, 0x2012, 0x2001, 0x0006,
-	0x080c, 0x6372, 0x9006, 0x080c, 0x635e, 0x00c6, 0x2001, 0x180f,
-	0x2004, 0xd09c, 0x0520, 0x00f6, 0x2079, 0x0100, 0x00e6, 0x2071,
-	0x1800, 0x700c, 0x9084, 0x00ff, 0x78e6, 0x707a, 0x7010, 0x78ea,
-	0x707e, 0x908c, 0x00ff, 0x00ee, 0x780c, 0xc0b5, 0x780e, 0x00fe,
-	0x080c, 0x26e8, 0x00f6, 0x2100, 0x900e, 0x080c, 0x269f, 0x795a,
-	0x00fe, 0x9186, 0x0081, 0x01f0, 0x2009, 0x0081, 0x00e0, 0x2009,
-	0x00ef, 0x00f6, 0x2079, 0x0100, 0x79ea, 0x78e7, 0x0000, 0x7932,
-	0x7936, 0x780c, 0xc0b5, 0x780e, 0x00fe, 0x080c, 0x26e8, 0x00f6,
-	0x2079, 0x1800, 0x797e, 0x2100, 0x900e, 0x797a, 0x080c, 0x269f,
-	0x795a, 0x00fe, 0x8108, 0x080c, 0x63c1, 0x2b00, 0x00ce, 0x1904,
-	0xa8bf, 0x6012, 0x2009, 0x180f, 0x210c, 0xd19c, 0x0150, 0x2009,
-	0x027c, 0x210c, 0x918c, 0x00ff, 0xb912, 0x2009, 0x027d, 0x210c,
-	0xb916, 0x2001, 0x0002, 0x080c, 0x6372, 0x6023, 0x0001, 0x6003,
-	0x0001, 0x6007, 0x0002, 0x080c, 0x8718, 0x080c, 0x8c37, 0x0018,
-	0x080c, 0xa717, 0x0431, 0x00de, 0x009e, 0x00be, 0x0005, 0x2001,
-	0x1810, 0x2004, 0xd0a4, 0x0120, 0x2001, 0x185f, 0x2004, 0xd0ac,
-	0x0005, 0x00e6, 0x080c, 0xd2aa, 0x0190, 0x2071, 0x0260, 0x7108,
-	0x720c, 0x918c, 0x00ff, 0x1118, 0x9284, 0xff00, 0x0140, 0x6010,
-	0x2058, 0xb8a0, 0x9084, 0xff80, 0x1110, 0xb912, 0xba16, 0x00ee,
-	0x0005, 0x2030, 0x2001, 0x0007, 0x080c, 0x6372, 0x080c, 0x55bb,
-	0x1120, 0x2001, 0x0007, 0x080c, 0x639e, 0x080c, 0x308f, 0x6020,
-	0x9086, 0x000a, 0x1108, 0x0005, 0x0804, 0x9f18, 0x00b6, 0x00e6,
-	0x0026, 0x0016, 0x2071, 0x1800, 0x708c, 0x9086, 0x0014, 0x1904,
-	0xaa7d, 0x2001, 0x180d, 0x2004, 0xd08c, 0x0904, 0xaa30, 0x00d6,
-	0x080c, 0x72e5, 0x01a0, 0x0026, 0x2011, 0x0010, 0x080c, 0x6781,
-	0x002e, 0x0904, 0xaa2f, 0x080c, 0x55bb, 0x1598, 0x6014, 0x2048,
-	0xa807, 0x0000, 0xa86b, 0x0103, 0xa833, 0xdead, 0x0450, 0x6010,
-	0x00b6, 0x2058, 0xb910, 0x00be, 0x9186, 0x00ff, 0x0580, 0x0026,
-	0x2011, 0x8008, 0x080c, 0x6781, 0x002e, 0x0548, 0x6014, 0x9005,
-	0x090c, 0x0dc4, 0x2048, 0xa868, 0x9084, 0x00ff, 0x9086, 0x0039,
-	0x1140, 0x2001, 0x0030, 0x900e, 0x2011, 0x4009, 0x080c, 0xbe00,
-	0x0040, 0x6014, 0x2048, 0xa807, 0x0000, 0xa86b, 0x0103, 0xa833,
-	0xdead, 0x6010, 0x2058, 0xb9a0, 0x0016, 0x080c, 0x308f, 0x080c,
-	0x9f18, 0x001e, 0x080c, 0x3162, 0x00de, 0x0804, 0xaa81, 0x00de,
-	0x080c, 0x55bb, 0x1170, 0x6014, 0x9005, 0x1158, 0x0036, 0x0046,
-	0x6010, 0x2058, 0xbba0, 0x2021, 0x0006, 0x080c, 0x4c74, 0x004e,
-	0x003e, 0x00d6, 0x6010, 0x2058, 0x080c, 0x64ac, 0x080c, 0xa822,
-	0x00de, 0x080c, 0xacce, 0x1588, 0x6010, 0x2058, 0xb890, 0x9005,
-	0x0560, 0x2001, 0x0006, 0x080c, 0x6372, 0x0096, 0x6014, 0x904d,
-	0x01d0, 0xa868, 0x9084, 0x00ff, 0x9086, 0x0039, 0x1140, 0x2001,
-	0x0000, 0x900e, 0x2011, 0x4000, 0x080c, 0xbe00, 0x0060, 0xa868,
-	0x9084, 0x00ff, 0x9086, 0x0029, 0x0130, 0xa807, 0x0000, 0xa86b,
-	0x0103, 0xa833, 0x0200, 0x009e, 0x080c, 0x308f, 0x6020, 0x9086,
-	0x000a, 0x0138, 0x080c, 0x9f18, 0x0020, 0x080c, 0xa717, 0x080c,
-	0xa9b9, 0x001e, 0x002e, 0x00ee, 0x00be, 0x0005, 0x2011, 0x1823,
-	0x2204, 0x9086, 0x0014, 0x1160, 0x2001, 0x0002, 0x080c, 0x6372,
-	0x6003, 0x0001, 0x6007, 0x0001, 0x080c, 0x8718, 0x0804, 0x8c37,
-	0x0804, 0xa9b9, 0x2030, 0x2011, 0x1823, 0x2204, 0x9086, 0x0004,
-	0x1148, 0x96b6, 0x000b, 0x1120, 0x2001, 0x0007, 0x080c, 0x6372,
-	0x0804, 0x9f18, 0x0804, 0xa9b9, 0x0002, 0xa7e9, 0xaac4, 0xa7e9,
-	0xab05, 0xa7e9, 0xabb0, 0xaab9, 0xa7ec, 0xa7e9, 0xabc2, 0xa7e9,
-	0xabd2, 0x6604, 0x9686, 0x0003, 0x0904, 0xa9ce, 0x96b6, 0x001e,
-	0x1110, 0x080c, 0x9f18, 0x0005, 0x00b6, 0x00d6, 0x00c6, 0x080c,
-	0xabe2, 0x11a0, 0x9006, 0x080c, 0x635e, 0x080c, 0x3066, 0x080c,
-	0xbf0d, 0x2001, 0x0002, 0x080c, 0x6372, 0x6003, 0x0001, 0x6007,
-	0x0002, 0x080c, 0x8718, 0x080c, 0x8c37, 0x0418, 0x2009, 0x026e,
-	0x2104, 0x9086, 0x0009, 0x1160, 0x6010, 0x2058, 0xb840, 0x9084,
-	0x00ff, 0x9005, 0x0180, 0x8001, 0xb842, 0x601b, 0x000a, 0x0088,
-	0x2009, 0x026f, 0x2104, 0x9084, 0xff00, 0x908e, 0x1900, 0x0148,
-	0x908e, 0x1e00, 0x0990, 0x080c, 0x3066, 0x080c, 0xbf0d, 0x080c,
-	0xa9b9, 0x00ce, 0x00de, 0x00be, 0x0005, 0x0096, 0x00b6, 0x0026,
-	0x9016, 0x080c, 0xabf0, 0x00d6, 0x2069, 0x1959, 0x2d04, 0x9005,
-	0x0168, 0x6010, 0x2058, 0xb8a0, 0x9086, 0x007e, 0x1138, 0x2069,
-	0x181f, 0x2d04, 0x8000, 0x206a, 0x00de, 0x0010, 0x00de, 0x0088,
-	0x9006, 0x080c, 0x635e, 0x2001, 0x0002, 0x080c, 0x6372, 0x6003,
-	0x0001, 0x6007, 0x0002, 0x080c, 0x8718, 0x080c, 0x8c37, 0x0804,
-	0xab80, 0x080c, 0xb955, 0x01b0, 0x6014, 0x2048, 0xa868, 0x2010,
-	0x9086, 0x0139, 0x1138, 0x6007, 0x0016, 0x2001, 0x0002, 0x080c,
-	0xbe57, 0x00b0, 0x6014, 0x2048, 0xa868, 0xd0fc, 0x0118, 0x2001,
-	0x0001, 0x0ca8, 0x2001, 0x180e, 0x2004, 0xd0dc, 0x0148, 0x6010,
-	0x2058, 0xb840, 0x9084, 0x00ff, 0x9005, 0x1110, 0x9006, 0x0c38,
-	0x080c, 0xa717, 0x2009, 0x026e, 0x2134, 0x96b4, 0x00ff, 0x9686,
-	0x0005, 0x0510, 0x9686, 0x000b, 0x01c8, 0x2009, 0x026f, 0x2104,
-	0x9084, 0xff00, 0x1118, 0x9686, 0x0009, 0x01b0, 0x9086, 0x1900,
-	0x1168, 0x9686, 0x0009, 0x0180, 0x2001, 0x0004, 0x080c, 0x6372,
-	0x2001, 0x0028, 0x601a, 0x6007, 0x0052, 0x0010, 0x080c, 0xa9b9,
-	0x002e, 0x00be, 0x009e, 0x0005, 0x9286, 0x0139, 0x0160, 0x6014,
-	0x2048, 0x080c, 0xb955, 0x0140, 0xa868, 0x9086, 0x0139, 0x0118,
-	0xa86c, 0xd0fc, 0x0108, 0x0c50, 0x6010, 0x2058, 0xb840, 0x9084,
-	0x00ff, 0x9005, 0x0138, 0x8001, 0xb842, 0x601b, 0x000a, 0x6007,
-	0x0016, 0x08f0, 0xb8a0, 0x9086, 0x007e, 0x1138, 0x00e6, 0x2071,
-	0x1800, 0x080c, 0x5e89, 0x00ee, 0x0010, 0x080c, 0x3066, 0x0870,
-	0x2001, 0x0004, 0x080c, 0x6372, 0x04d9, 0x1140, 0x6003, 0x0001,
-	0x6007, 0x0003, 0x080c, 0x8718, 0x0804, 0x8c37, 0x080c, 0xa717,
-	0x0804, 0xa9b9, 0x0469, 0x1160, 0x2001, 0x0008, 0x080c, 0x6372,
-	0x6003, 0x0001, 0x6007, 0x0005, 0x080c, 0x8718, 0x0804, 0x8c37,
-	0x0804, 0xa9b9, 0x00e9, 0x1160, 0x2001, 0x000a, 0x080c, 0x6372,
-	0x6003, 0x0001, 0x6007, 0x0001, 0x080c, 0x8718, 0x0804, 0x8c37,
-	0x0804, 0xa9b9, 0x2009, 0x026e, 0x2104, 0x9086, 0x0003, 0x1138,
-	0x2009, 0x026f, 0x2104, 0x9084, 0xff00, 0x9086, 0x2a00, 0x0005,
-	0x9085, 0x0001, 0x0005, 0x00b6, 0x00c6, 0x0016, 0x6110, 0x2158,
-	0x080c, 0x6420, 0x001e, 0x00ce, 0x00be, 0x0005, 0x00b6, 0x00f6,
-	0x00e6, 0x00d6, 0x0036, 0x0016, 0x6010, 0x2058, 0x2009, 0x1836,
-	0x2104, 0x9085, 0x0003, 0x200a, 0x080c, 0xaca0, 0x05d0, 0x2009,
-	0x1836, 0x2104, 0xc0cd, 0x200a, 0x080c, 0x6742, 0x0158, 0x9006,
-	0x2020, 0x2009, 0x002a, 0x080c, 0xd156, 0x2001, 0x180c, 0x200c,
-	0xc195, 0x2102, 0x6120, 0x0016, 0x6023, 0x0007, 0x2019, 0x002a,
-	0x2009, 0x0001, 0x00e6, 0x2071, 0x1800, 0x00c6, 0x2061, 0x0100,
-	0x080c, 0x3037, 0x00ce, 0x6010, 0x9005, 0x090c, 0x0dc4, 0x080c,
-	0x2e5f, 0x00ee, 0x001e, 0x6122, 0x00c6, 0x0156, 0x20a9, 0x0781,
-	0x2009, 0x007f, 0x080c, 0x3162, 0x8108, 0x1f04, 0xac42, 0x015e,
-	0x00ce, 0x080c, 0xabf3, 0x2071, 0x0260, 0x2079, 0x0200, 0x7817,
-	0x0001, 0x2001, 0x1836, 0x200c, 0xc1c5, 0x7018, 0xd0fc, 0x0110,
-	0xd0dc, 0x0118, 0x7038, 0xd0dc, 0x1108, 0xc1c4, 0x7817, 0x0000,
-	0x2001, 0x1836, 0x2102, 0x9184, 0x0050, 0x9086, 0x0050, 0x0588,
-	0x2079, 0x0100, 0x2e04, 0x9084, 0x00ff, 0x2069, 0x181e, 0x206a,
-	0x78e6, 0x0006, 0x8e70, 0x2e04, 0x2069, 0x181f, 0x206a, 0x78ea,
-	0x7832, 0x7836, 0x2010, 0x9084, 0xff00, 0x001e, 0x9105, 0x2009,
-	0x182b, 0x200a, 0x2200, 0x9084, 0x00ff, 0x2008, 0x080c, 0x26e8,
-	0x080c, 0x72e5, 0x0170, 0x2071, 0x0260, 0x2069, 0x195f, 0x7048,
-	0x206a, 0x704c, 0x6806, 0x7050, 0x680a, 0x7054, 0x680e, 0x080c,
-	0xbc49, 0x001e, 0x003e, 0x00de, 0x00ee, 0x00fe, 0x00be, 0x0005,
-	0x0096, 0x0026, 0x0036, 0x00e6, 0x0156, 0x2019, 0x182b, 0x231c,
-	0x83ff, 0x01f0, 0x2071, 0x0260, 0x7200, 0x9294, 0x00ff, 0x7004,
-	0x9084, 0xff00, 0x9205, 0x9306, 0x1198, 0x2011, 0x0276, 0x20a9,
-	0x0004, 0x2b48, 0x2019, 0x000a, 0x080c, 0xad8d, 0x1148, 0x2011,
-	0x027a, 0x20a9, 0x0004, 0x2019, 0x0006, 0x080c, 0xad8d, 0x1100,
-	0x015e, 0x00ee, 0x003e, 0x002e, 0x009e, 0x0005, 0x00e6, 0x2071,
-	0x0260, 0x7034, 0x9086, 0x0014, 0x11a8, 0x7038, 0x9086, 0x0800,
-	0x1188, 0x703c, 0xd0ec, 0x0160, 0x9084, 0x0f00, 0x9086, 0x0100,
-	0x1138, 0x7054, 0xd0a4, 0x1110, 0xd0ac, 0x0110, 0x9006, 0x0010,
-	0x9085, 0x0001, 0x00ee, 0x0005, 0x00e6, 0x0096, 0x00c6, 0x0076,
-	0x0056, 0x0046, 0x0026, 0x0006, 0x0126, 0x2091, 0x8000, 0x2029,
-	0x19cd, 0x252c, 0x2021, 0x19d3, 0x2424, 0x2061, 0x1cc8, 0x2071,
-	0x1800, 0x7250, 0x7070, 0x9202, 0x1a04, 0xad63, 0x080c, 0xd187,
-	0x0904, 0xad5c, 0x6720, 0x9786, 0x0007, 0x0904, 0xad5c, 0x2500,
-	0x9c06, 0x0904, 0xad5c, 0x2400, 0x9c06, 0x0904, 0xad5c, 0x3e08,
-	0x81ff, 0x0190, 0x6010, 0x9005, 0x0178, 0x00b6, 0x2058, 0x9186,
-	0x0001, 0x1148, 0xbaa0, 0x9286, 0x007e, 0x1128, 0x6004, 0x9086,
-	0x0002, 0x0904, 0xad77, 0x00be, 0x00c6, 0x6000, 0x9086, 0x0004,
-	0x1110, 0x080c, 0x1950, 0x9786, 0x000a, 0x0148, 0x080c, 0xbb56,
-	0x1130, 0x00ce, 0x080c, 0xa717, 0x080c, 0x9f42, 0x00e8, 0x6014,
-	0x2048, 0x080c, 0xb955, 0x01a8, 0x9786, 0x0003, 0x1530, 0xa86b,
-	0x0103, 0xa880, 0xd0cc, 0x0130, 0x0096, 0xa87c, 0x2048, 0x080c,
-	0x0fb3, 0x009e, 0xab7e, 0xa87b, 0x0000, 0x080c, 0x6b11, 0x080c,
-	0xbb39, 0x080c, 0x9f42, 0x00ce, 0x9ce0, 0x000c, 0x7064, 0x9c02,
-	0x1210, 0x0804, 0xad01, 0x012e, 0x000e, 0x002e, 0x004e, 0x005e,
-	0x007e, 0x00ce, 0x009e, 0x00ee, 0x0005, 0x9786, 0x0006, 0x1118,
-	0x080c, 0xd101, 0x0c30, 0x9786, 0x000a, 0x09e0, 0x0880, 0x00be,
-	0x0c18, 0x220c, 0x2304, 0x9106, 0x1130, 0x8210, 0x8318, 0x1f04,
-	0xad79, 0x9006, 0x0005, 0x2304, 0x9102, 0x0218, 0x2001, 0x0001,
-	0x0008, 0x9006, 0x918d, 0x0001, 0x0005, 0x0136, 0x01c6, 0x0016,
-	0x8906, 0x8006, 0x8007, 0x908c, 0x003f, 0x21e0, 0x9084, 0xffc0,
-	0x9300, 0x2098, 0x3518, 0x20a9, 0x0001, 0x220c, 0x4002, 0x910e,
-	0x1140, 0x8210, 0x8319, 0x1dc8, 0x9006, 0x001e, 0x01ce, 0x013e,
-	0x0005, 0x220c, 0x9102, 0x0218, 0x2001, 0x0001, 0x0010, 0x2001,
-	0x0000, 0x918d, 0x0001, 0x001e, 0x01ce, 0x013e, 0x0005, 0x6004,
-	0x908a, 0x0054, 0x1a0c, 0x0dc4, 0x080c, 0xbb45, 0x0120, 0x080c,
-	0xbb56, 0x0168, 0x0028, 0x080c, 0x308f, 0x080c, 0xbb56, 0x0138,
-	0x080c, 0x8b2b, 0x080c, 0x9f18, 0x080c, 0x8c37, 0x0005, 0x080c,
-	0xa717, 0x0cb0, 0x9182, 0x0054, 0x1220, 0x9182, 0x0040, 0x0208,
-	0x000a, 0x0005, 0xadee, 0xadee, 0xadee, 0xadee, 0xadee, 0xadee,
-	0xadee, 0xadee, 0xadee, 0xadee, 0xadee, 0xadf0, 0xadf0, 0xadf0,
-	0xadf0, 0xadee, 0xadee, 0xadee, 0xadf0, 0xadee, 0x080c, 0x0dc4,
-	0x6003, 0x0001, 0x6106, 0x080c, 0x86d0, 0x0126, 0x2091, 0x8000,
-	0x080c, 0x8c37, 0x012e, 0x0005, 0x9186, 0x0013, 0x1128, 0x6004,
-	0x9082, 0x0040, 0x0804, 0xae86, 0x9186, 0x0027, 0x1520, 0x080c,
-	0x8b2b, 0x080c, 0x3066, 0x080c, 0xbf0d, 0x0096, 0x6114, 0x2148,
-	0x080c, 0xb955, 0x0198, 0x080c, 0xbb56, 0x1118, 0x080c, 0xa717,
-	0x0068, 0xa86b, 0x0103, 0xa87f, 0x0029, 0xa87b, 0x0000, 0xa980,
-	0xc1c5, 0xa982, 0x080c, 0x6b1d, 0x080c, 0xbb39, 0x009e, 0x080c,
-	0x9f18, 0x0804, 0x8c37, 0x9186, 0x0014, 0x1120, 0x6004, 0x9082,
-	0x0040, 0x00b8, 0x9186, 0x0046, 0x0150, 0x9186, 0x0045, 0x0138,
-	0x9186, 0x0053, 0x0120, 0x9186, 0x0048, 0x190c, 0x0dc4, 0x080c,
-	0xbf19, 0x0130, 0x6000, 0x9086, 0x0002, 0x1110, 0x0804, 0xaeb8,
-	0x0005, 0x0002, 0xae60, 0xae5e, 0xae5e, 0xae5e, 0xae5e, 0xae5e,
-	0xae5e, 0xae5e, 0xae5e, 0xae5e, 0xae5e, 0xae7b, 0xae7b, 0xae7b,
-	0xae7b, 0xae5e, 0xae5e, 0xae5e, 0xae7b, 0xae5e, 0x080c, 0x0dc4,
-	0x080c, 0x8b2b, 0x0096, 0x6114, 0x2148, 0x080c, 0xb955, 0x0168,
-	0xa86b, 0x0103, 0xa87f, 0x0006, 0xa87b, 0x0000, 0xa884, 0xc0ec,
-	0xa886, 0x080c, 0x6b1d, 0x080c, 0xbb39, 0x009e, 0x080c, 0x9f18,
-	0x080c, 0x8c37, 0x0005, 0x080c, 0x8b2b, 0x080c, 0xbb56, 0x090c,
-	0xa717, 0x080c, 0x9f18, 0x080c, 0x8c37, 0x0005, 0x0002, 0xae9d,
-	0xae9b, 0xae9b, 0xae9b, 0xae9b, 0xae9b, 0xae9b, 0xae9b, 0xae9b,
-	0xae9b, 0xae9b, 0xaeb0, 0xaeb0, 0xaeb0, 0xaeb0, 0xae9b, 0xae9b,
-	0xae9b, 0xaeb0, 0xae9b, 0x080c, 0x0dc4, 0x0096, 0x080c, 0x8b2b,
-	0x6014, 0x2048, 0xa980, 0xd1ac, 0x0140, 0x6003, 0x0004, 0xa880,
-	0x9085, 0x0400, 0xa882, 0x009e, 0x0005, 0x6003, 0x0002, 0x0cb8,
-	0x080c, 0x8b2b, 0x080c, 0xbf10, 0x6003, 0x000f, 0x0804, 0x8c37,
-	0x9182, 0x0054, 0x1220, 0x9182, 0x0040, 0x0208, 0x000a, 0x0005,
-	0xaed4, 0xaed4, 0xaed4, 0xaed4, 0xaed4, 0xaed6, 0xaf79, 0xaed4,
-	0xafab, 0xaed4, 0xaed4, 0xaed4, 0xaed4, 0xaed4, 0xaed4, 0xaed4,
-	0xaed4, 0xaed4, 0xaed4, 0xafab, 0x080c, 0x0dc4, 0x00b6, 0x0096,
-	0x6114, 0x2148, 0x7644, 0x96b4, 0x0fff, 0x86ff, 0x11d8, 0xa87f,
-	0x0000, 0xa86b, 0x0103, 0xae7a, 0xa880, 0xd0ac, 0x0128, 0xa834,
-	0xa938, 0x9115, 0x190c, 0xb137, 0x080c, 0x6934, 0x6210, 0x2258,
-	0xba3c, 0x82ff, 0x0110, 0x8211, 0xba3e, 0x080c, 0x9f18, 0x009e,
-	0x00be, 0x0005, 0x080c, 0xbf3b, 0x1dd0, 0x968c, 0x0c00, 0x0120,
-	0x7348, 0xab96, 0x734c, 0xab92, 0x968c, 0x00ff, 0x9186, 0x0002,
-	0x0508, 0x9186, 0x0028, 0x1118, 0xa87f, 0x001c, 0x00e8, 0xd6dc,
-	0x01a0, 0xa87f, 0x0015, 0xa880, 0xd0ac, 0x0170, 0xa938, 0xaa34,
-	0x2100, 0x9205, 0x0148, 0x7048, 0x9106, 0x1118, 0x704c, 0x9206,
-	0x0118, 0xa996, 0xaa92, 0xc6dc, 0x0038, 0xd6d4, 0x0118, 0xa87f,
-	0x0007, 0x0010, 0xa87f, 0x0000, 0xa86b, 0x0103, 0xae7a, 0x901e,
-	0xd6c4, 0x01d8, 0x9686, 0x0100, 0x1130, 0x7064, 0x9005, 0x1118,
-	0xc6c4, 0x0804, 0xaedd, 0x735c, 0xab8a, 0x83ff, 0x0170, 0x938a,
-	0x0009, 0x0210, 0x2019, 0x0008, 0x0036, 0x2308, 0x2019, 0x0018,
-	0x2011, 0x0026, 0x080c, 0xb54b, 0x003e, 0xd6cc, 0x0904, 0xaeec,
-	0x7154, 0xa98e, 0x81ff, 0x0904, 0xaeec, 0x9192, 0x0021, 0x1278,
-	0x8304, 0x9098, 0x0018, 0x2011, 0x002a, 0x080c, 0xb54b, 0x2011,
-	0x0205, 0x2013, 0x0000, 0x080c, 0xbe96, 0x0804, 0xaeec, 0xa86c,
-	0xd0fc, 0x0120, 0x2009, 0x0020, 0xa98e, 0x0c50, 0x00a6, 0x2950,
-	0x080c, 0xb4ea, 0x00ae, 0x080c, 0xbe96, 0x080c, 0xb53b, 0x0804,
-	0xaeee, 0x0096, 0x00f6, 0x6003, 0x0003, 0x6007, 0x0043, 0x2079,
-	0x026c, 0x7c04, 0x7b00, 0x7e0c, 0x7d08, 0x6014, 0x2048, 0xa880,
-	0xd0ac, 0x0140, 0x6003, 0x0002, 0x00fe, 0x009e, 0x0005, 0x2130,
-	0x2228, 0x0058, 0x2400, 0xa9b0, 0x910a, 0x2300, 0xaab4, 0x9213,
-	0x2600, 0x9102, 0x2500, 0x9203, 0x0e90, 0xac36, 0xab3a, 0xae46,
-	0xad4a, 0x00fe, 0x2c10, 0x080c, 0x1aa2, 0x080c, 0x8735, 0x080c,
-	0x8d06, 0x009e, 0x0005, 0x0005, 0x9182, 0x0054, 0x1220, 0x9182,
-	0x0040, 0x0208, 0x000a, 0x0005, 0xafc8, 0xafc8, 0xafc8, 0xafc8,
-	0xafc8, 0xafca, 0xb060, 0xafc8, 0xafc8, 0xb077, 0xb0fc, 0xafc8,
-	0xafc8, 0xafc8, 0xafc8, 0xb10f, 0xafc8, 0xafc8, 0xafc8, 0xafc8,
-	0x080c, 0x0dc4, 0x0076, 0x00a6, 0x00e6, 0x0096, 0x2071, 0x0260,
-	0x6114, 0x2150, 0x7644, 0xb67a, 0x96b4, 0x0fff, 0xb780, 0xc7e5,
-	0xb782, 0x6210, 0x00b6, 0x2258, 0xba3c, 0x82ff, 0x0110, 0x8211,
-	0xba3e, 0x00be, 0x86ff, 0x0904, 0xb05b, 0x9694, 0xff00, 0x9284,
-	0x0c00, 0x0120, 0x7048, 0xb096, 0x704c, 0xb092, 0x9284, 0x0300,
-	0x0904, 0xb05b, 0x080c, 0x1001, 0x090c, 0x0dc4, 0x2900, 0xb07e,
-	0xb780, 0xc7cd, 0xb782, 0xa86b, 0x0103, 0xb06c, 0xa86e, 0xb070,
-	0xa872, 0xb074, 0xa876, 0xae7a, 0x968c, 0x0c00, 0x0120, 0x7348,
-	0xab96, 0x734c, 0xab92, 0x968c, 0x00ff, 0x9186, 0x0002, 0x0180,
-	0x9186, 0x0028, 0x1118, 0xa87f, 0x001c, 0x0060, 0xd6dc, 0x0118,
-	0xa87f, 0x0015, 0x0038, 0xd6d4, 0x0118, 0xa87f, 0x0007, 0x0010,
-	0xa87f, 0x0000, 0xaf82, 0xb084, 0xa886, 0xb088, 0xa88a, 0x901e,
-	0xd6c4, 0x0190, 0x735c, 0xab8a, 0x83ff, 0x0170, 0x938a, 0x0009,
-	0x0210, 0x2019, 0x0008, 0x0036, 0x2308, 0x2019, 0x0018, 0x2011,
-	0x0026, 0x080c, 0xb54b, 0x003e, 0xd6cc, 0x01e8, 0x7154, 0xa98e,
-	0x81ff, 0x01c8, 0x9192, 0x0021, 0x1260, 0x8304, 0x9098, 0x0018,
-	0x2011, 0x002a, 0x080c, 0xb54b, 0x2011, 0x0205, 0x2013, 0x0000,
-	0x0050, 0xb06c, 0xd0fc, 0x0120, 0x2009, 0x0020, 0xa98e, 0x0c68,
-	0x2950, 0x080c, 0xb4ea, 0x009e, 0x00ee, 0x00ae, 0x007e, 0x0005,
-	0x00f6, 0x00a6, 0x6003, 0x0003, 0x2079, 0x026c, 0x7c04, 0x7b00,
-	0x7e0c, 0x7d08, 0x6014, 0x2050, 0xb436, 0xb33a, 0xb646, 0xb54a,
-	0x00ae, 0x00fe, 0x2c10, 0x080c, 0x1aa2, 0x0804, 0x95f0, 0x6003,
-	0x0002, 0x6004, 0x9086, 0x0040, 0x11c8, 0x0096, 0x6014, 0x2048,
-	0xa880, 0xd0ac, 0x0160, 0x601c, 0xd084, 0x1130, 0x00f6, 0x2c00,
-	0x2078, 0x080c, 0x1679, 0x00fe, 0x6003, 0x0004, 0x0010, 0x6003,
-	0x0002, 0x009e, 0x080c, 0x8b2b, 0x080c, 0x8c37, 0x0096, 0x080c,
-	0x8be7, 0x080c, 0x8d06, 0x6114, 0x2148, 0xa980, 0xd1e4, 0x0904,
-	0xb0fa, 0xd1cc, 0x05c8, 0xa97c, 0xa86c, 0xd0fc, 0x0540, 0x0016,
-	0xa880, 0x0006, 0xa884, 0x0006, 0xa860, 0x20e8, 0xa85c, 0x9080,
-	0x001a, 0x20a0, 0x810e, 0x810e, 0x810f, 0x9184, 0x003f, 0x20e0,
-	0x9184, 0xffc0, 0x9080, 0x001a, 0x2098, 0x0156, 0x20a9, 0x0020,
-	0x4003, 0x015e, 0x000e, 0xa886, 0x000e, 0xc0cc, 0xa882, 0x001e,
-	0xa878, 0x0006, 0x2148, 0x080c, 0x0fb3, 0x001e, 0x0448, 0x0016,
-	0x080c, 0x0fb3, 0x009e, 0xa880, 0xc0cc, 0xa882, 0xa978, 0x0016,
-	0x080c, 0xb53b, 0x001e, 0x00e0, 0xa86b, 0x0103, 0xa978, 0x9184,
-	0x00ff, 0x90b6, 0x0002, 0x0180, 0x9086, 0x0028, 0x1118, 0xa87f,
-	0x001c, 0x0060, 0xd1dc, 0x0118, 0xa87f, 0x0015, 0x0038, 0xd1d4,
-	0x0118, 0xa87f, 0x0007, 0x0010, 0xa87f, 0x0000, 0x080c, 0x6934,
-	0x080c, 0x9f18, 0x009e, 0x0005, 0x6004, 0x9086, 0x0040, 0x1120,
-	0x080c, 0x8b2b, 0x080c, 0x8c37, 0x2019, 0x0001, 0x080c, 0x9964,
-	0x6003, 0x0002, 0x080c, 0x8be7, 0x080c, 0x8d06, 0x0005, 0x6004,
-	0x9086, 0x0040, 0x1120, 0x080c, 0x8b2b, 0x080c, 0x8c37, 0x2019,
-	0x0001, 0x080c, 0x9964, 0x080c, 0x8be7, 0x080c, 0x3066, 0x080c,
-	0xbf0d, 0x0096, 0x6114, 0x2148, 0x080c, 0xb955, 0x0150, 0xa86b,
-	0x0103, 0xa87f, 0x0029, 0xa87b, 0x0000, 0x080c, 0x6b1d, 0x080c,
-	0xbb39, 0x009e, 0x080c, 0x9f18, 0x080c, 0x8d06, 0x0005, 0xa87f,
+	0x0086, 0x2940, 0x080c, 0x10f7, 0x008e, 0x9085, 0x0001, 0x009e,
+	0x0005, 0x00e6, 0x00d6, 0x0026, 0x7008, 0x9084, 0x00ff, 0x6210,
+	0x00b6, 0x2258, 0xba10, 0x00be, 0x9206, 0x1520, 0x700c, 0x6210,
+	0x00b6, 0x2258, 0xba14, 0x00be, 0x9206, 0x11e0, 0x6043, 0x0000,
+	0x2c68, 0x0016, 0x2009, 0x0035, 0x080c, 0xc83f, 0x001e, 0x1158,
+	0x622c, 0x2268, 0x2071, 0x026c, 0x6b20, 0x9386, 0x0003, 0x0130,
+	0x9386, 0x0006, 0x0128, 0x080c, 0xa39d, 0x0020, 0x0039, 0x0010,
+	0x080c, 0xaa1c, 0x002e, 0x00de, 0x00ee, 0x0005, 0x0096, 0x6814,
+	0x2048, 0x9186, 0x0015, 0x0904, 0xaa02, 0x918e, 0x0016, 0x1904,
+	0xaa1a, 0x700c, 0x908c, 0xff00, 0x9186, 0x1700, 0x0120, 0x9186,
+	0x0300, 0x1904, 0xa9dc, 0x89ff, 0x1138, 0x6800, 0x9086, 0x000f,
+	0x0904, 0xa9bf, 0x0804, 0xaa18, 0x6808, 0x9086, 0xffff, 0x1904,
+	0xaa04, 0xa880, 0x9084, 0x0060, 0x9086, 0x0020, 0x1128, 0xa83c,
+	0xa940, 0x9105, 0x1904, 0xaa04, 0x6824, 0xd084, 0x1904, 0xaa04,
+	0xd0b4, 0x0158, 0x0016, 0x2001, 0x1962, 0x200c, 0x6018, 0x9102,
+	0x9082, 0x0005, 0x001e, 0x1a04, 0xaa04, 0x080c, 0xc3b4, 0x685c,
+	0xa886, 0xa880, 0xc0dc, 0xc0f4, 0xc0d4, 0xa882, 0x0026, 0x900e,
+	0x6a18, 0x2001, 0x000a, 0x080c, 0x871c, 0xa888, 0x920a, 0x0208,
+	0x8011, 0xaa8a, 0x82ff, 0x002e, 0x1138, 0x00c6, 0x2d60, 0x080c,
+	0xbed5, 0x00ce, 0x0804, 0xaa18, 0x00c6, 0xa86c, 0xd0fc, 0x1118,
+	0x080c, 0x602e, 0x0010, 0x080c, 0x63e9, 0x00ce, 0x1904, 0xaa04,
+	0x00c6, 0x2d60, 0x080c, 0xa39d, 0x00ce, 0x0804, 0xaa18, 0x00c6,
+	0x080c, 0xa3ec, 0x0198, 0x6017, 0x0000, 0x6810, 0x6012, 0x080c,
+	0xc640, 0x6023, 0x0003, 0x6904, 0x00c6, 0x2d60, 0x080c, 0xa39d,
+	0x00ce, 0x080c, 0xa419, 0x00ce, 0x0804, 0xaa18, 0x2001, 0x1964,
+	0x2004, 0x6842, 0x00ce, 0x04e0, 0x7008, 0x9086, 0x000b, 0x11c8,
+	0x6010, 0x00b6, 0x2058, 0xb900, 0xc1bc, 0xb902, 0x00be, 0x00c6,
+	0x2d60, 0xa87f, 0x0003, 0x080c, 0xc883, 0x6007, 0x0085, 0x6003,
+	0x000b, 0x6023, 0x0002, 0x080c, 0x88a1, 0x080c, 0x8e38, 0x00ce,
+	0x00f8, 0x700c, 0x9086, 0x2a00, 0x1138, 0x2001, 0x1964, 0x2004,
+	0x6842, 0x00b0, 0x0489, 0x00b0, 0x89ff, 0x090c, 0x0dc3, 0x00c6,
+	0x00d6, 0x2d60, 0xa86b, 0x0103, 0xa87f, 0x0003, 0xa87b, 0x0000,
+	0x080c, 0x6a1c, 0x080c, 0xc3b4, 0x080c, 0xa3cf, 0x00de, 0x00ce,
+	0x080c, 0xa39d, 0x009e, 0x0005, 0x9186, 0x0015, 0x1128, 0x2001,
+	0x1964, 0x2004, 0x6842, 0x0068, 0x918e, 0x0016, 0x1160, 0x00c6,
+	0x2d00, 0x2060, 0x080c, 0xdf7c, 0x080c, 0x86d8, 0x080c, 0xa39d,
+	0x00ce, 0x080c, 0xa39d, 0x0005, 0x0026, 0x0036, 0x0046, 0x7228,
+	0xacb4, 0xabb0, 0xd2f4, 0x0130, 0x2001, 0x1964, 0x2004, 0x6842,
+	0x0804, 0xaa96, 0x00c6, 0x2d60, 0x080c, 0xbdd8, 0x00ce, 0x6804,
+	0x9086, 0x0050, 0x1168, 0x00c6, 0x2d00, 0x2060, 0x6003, 0x0001,
+	0x6007, 0x0050, 0x080c, 0x88a1, 0x080c, 0x8e38, 0x00ce, 0x04f0,
+	0x6800, 0x9086, 0x000f, 0x01a8, 0x89ff, 0x090c, 0x0dc3, 0x6800,
+	0x9086, 0x0004, 0x1190, 0xa880, 0xd0ac, 0x0178, 0xa843, 0x0fff,
+	0xa83f, 0x0fff, 0xa884, 0xc0fc, 0xa886, 0x2001, 0x0001, 0x6832,
+	0x0400, 0x2001, 0x0007, 0x6832, 0x00e0, 0xa880, 0xd0b4, 0x1150,
+	0xd0ac, 0x0db8, 0x6824, 0xd0f4, 0x1d48, 0xa838, 0xa934, 0x9105,
+	0x0d80, 0x0c20, 0xd2ec, 0x1d68, 0x7024, 0x9306, 0x1118, 0x7020,
+	0x9406, 0x0d38, 0x7020, 0x683e, 0x7024, 0x683a, 0x2001, 0x0005,
+	0x6832, 0x080c, 0xc537, 0x080c, 0x8e38, 0x0010, 0x080c, 0xa39d,
+	0x004e, 0x003e, 0x002e, 0x0005, 0x00e6, 0x00d6, 0x0026, 0x7008,
+	0x9084, 0x00ff, 0x6210, 0x00b6, 0x2258, 0xba10, 0x00be, 0x9206,
+	0x1904, 0xaafd, 0x700c, 0x6210, 0x00b6, 0x2258, 0xba14, 0x00be,
+	0x9206, 0x1904, 0xaafd, 0x6038, 0x2068, 0x6824, 0xc0dc, 0x6826,
+	0x6a20, 0x9286, 0x0007, 0x0904, 0xaafd, 0x9286, 0x0002, 0x05e8,
+	0x9286, 0x0000, 0x05d0, 0x6808, 0x633c, 0x9306, 0x15b0, 0x2071,
+	0x026c, 0x9186, 0x0015, 0x0558, 0x00c6, 0x6038, 0x2060, 0x6104,
+	0x9186, 0x004b, 0x01c0, 0x9186, 0x004c, 0x01a8, 0x9186, 0x004d,
+	0x0190, 0x9186, 0x004e, 0x0178, 0x9186, 0x0052, 0x0160, 0x6014,
+	0x0096, 0x2048, 0x080c, 0xc1cd, 0x090c, 0x0dc3, 0xa87f, 0x0003,
+	0x009e, 0x080c, 0xc883, 0x6007, 0x0085, 0x6003, 0x000b, 0x6023,
+	0x0002, 0x080c, 0x88a1, 0x080c, 0x8e38, 0x00ce, 0x0030, 0x6038,
+	0x2070, 0x2001, 0x1964, 0x2004, 0x7042, 0x080c, 0xa39d, 0x002e,
+	0x00de, 0x00ee, 0x0005, 0x00b6, 0x0096, 0x00f6, 0x6014, 0x2048,
+	0x6010, 0x2058, 0x91b6, 0x0015, 0x0130, 0xba08, 0xbb0c, 0xbc00,
+	0xc48c, 0xbc02, 0x0470, 0x0096, 0x0156, 0x0036, 0x0026, 0x2b48,
+	0x9e90, 0x0010, 0x2019, 0x000a, 0x20a9, 0x0004, 0x080c, 0xb448,
+	0x002e, 0x003e, 0x015e, 0x009e, 0x1904, 0xab6e, 0x0096, 0x0156,
+	0x0036, 0x0026, 0x2b48, 0x9e90, 0x0014, 0x2019, 0x0006, 0x20a9,
+	0x0004, 0x080c, 0xb448, 0x002e, 0x003e, 0x015e, 0x009e, 0x15b0,
+	0x7238, 0xba0a, 0x733c, 0xbb0e, 0x83ff, 0x0118, 0xbc00, 0xc48d,
+	0xbc02, 0xa804, 0x9005, 0x1128, 0x00fe, 0x009e, 0x00be, 0x0804,
+	0xa7a3, 0x0096, 0x2048, 0xaa12, 0xab16, 0xac0a, 0x009e, 0x8006,
+	0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x0002,
+	0x2009, 0x002b, 0xaaa4, 0xaba0, 0xacac, 0xada8, 0x2031, 0x0000,
+	0x2041, 0x1253, 0x080c, 0xa8fb, 0x0130, 0x00fe, 0x009e, 0x080c,
+	0xa39d, 0x00be, 0x0005, 0x080c, 0xadb3, 0x0cb8, 0x2b78, 0x00f6,
+	0x080c, 0x3102, 0x080c, 0xc8e3, 0x00fe, 0x00c6, 0x080c, 0xa347,
+	0x2f00, 0x6012, 0x6017, 0x0000, 0x6023, 0x0001, 0x6007, 0x0001,
+	0x6003, 0x0001, 0x2001, 0x0007, 0x080c, 0x6448, 0x080c, 0x6474,
+	0x080c, 0x88e9, 0x080c, 0x8e38, 0x00ce, 0x0804, 0xab41, 0x2100,
+	0x91b2, 0x0054, 0x1a0c, 0x0dc3, 0x91b2, 0x0040, 0x1a04, 0xabf7,
+	0x0002, 0xabe5, 0xabe5, 0xabdb, 0xabe5, 0xabe5, 0xabe5, 0xabd9,
+	0xabd9, 0xabd9, 0xabd9, 0xabd9, 0xabd9, 0xabd9, 0xabd9, 0xabd9,
+	0xabd9, 0xabd9, 0xabd9, 0xabd9, 0xabd9, 0xabd9, 0xabd9, 0xabd9,
+	0xabd9, 0xabd9, 0xabd9, 0xabd9, 0xabd9, 0xabd9, 0xabd9, 0xabd9,
+	0xabe5, 0xabd9, 0xabe5, 0xabe5, 0xabd9, 0xabd9, 0xabd9, 0xabd9,
+	0xabd9, 0xabdb, 0xabd9, 0xabd9, 0xabd9, 0xabd9, 0xabd9, 0xabd9,
+	0xabd9, 0xabd9, 0xabd9, 0xabe5, 0xabe5, 0xabd9, 0xabd9, 0xabd9,
+	0xabd9, 0xabd9, 0xabd9, 0xabd9, 0xabd9, 0xabd9, 0xabe5, 0xabd9,
+	0xabd9, 0x080c, 0x0dc3, 0x0066, 0x00b6, 0x6610, 0x2658, 0xb8bc,
+	0xc08c, 0xb8be, 0x00be, 0x006e, 0x0000, 0x6003, 0x0001, 0x6106,
+	0x9186, 0x0032, 0x0118, 0x080c, 0x88e9, 0x0010, 0x080c, 0x88a1,
+	0x0126, 0x2091, 0x8000, 0x080c, 0x8e38, 0x012e, 0x0005, 0x2600,
+	0x0002, 0xac0d, 0xac0d, 0xac0d, 0xabe5, 0xabe5, 0xac0d, 0xac0d,
+	0xac0d, 0xac0d, 0xabe5, 0xac0d, 0xabe5, 0xac0d, 0xabe5, 0xac0d,
+	0xac0d, 0xac0d, 0xac0d, 0xac0d, 0xac0d, 0x080c, 0x0dc3, 0x6004,
+	0x90b2, 0x0054, 0x1a0c, 0x0dc3, 0x91b6, 0x0013, 0x0904, 0xace2,
+	0x91b6, 0x0027, 0x1904, 0xac8c, 0x080c, 0x8d2c, 0x6004, 0x080c,
+	0xc3c0, 0x01b0, 0x080c, 0xc3d1, 0x01a8, 0x908e, 0x0021, 0x0904,
+	0xac89, 0x908e, 0x0022, 0x1130, 0x080c, 0xa820, 0x0904, 0xac85,
+	0x0804, 0xac86, 0x908e, 0x003d, 0x0904, 0xac89, 0x0804, 0xac7f,
+	0x080c, 0x312b, 0x2001, 0x0007, 0x080c, 0x6448, 0x6010, 0x00b6,
+	0x2058, 0xb9a0, 0x00be, 0x080c, 0xadb3, 0x9186, 0x007e, 0x1148,
+	0x2001, 0x1836, 0x2014, 0xc285, 0x080c, 0x7351, 0x1108, 0xc2ad,
+	0x2202, 0x0036, 0x0026, 0x2019, 0x0028, 0x2110, 0x080c, 0xdfde,
+	0x002e, 0x003e, 0x0016, 0x0026, 0x0036, 0x2110, 0x2019, 0x0028,
+	0x080c, 0x8a2b, 0x0076, 0x903e, 0x080c, 0x8919, 0x6010, 0x00b6,
+	0x905d, 0x0100, 0x00be, 0x2c08, 0x080c, 0xda37, 0x007e, 0x003e,
+	0x002e, 0x001e, 0x080c, 0xc8e3, 0x0016, 0x080c, 0xc638, 0x080c,
+	0xa39d, 0x001e, 0x080c, 0x31fe, 0x080c, 0x8e38, 0x0030, 0x080c,
+	0xc638, 0x080c, 0xa39d, 0x080c, 0x8e38, 0x0005, 0x080c, 0xadb3,
+	0x0cb0, 0x080c, 0xadef, 0x0c98, 0x9186, 0x0015, 0x0118, 0x9186,
+	0x0016, 0x1148, 0x080c, 0xc8f4, 0x0d80, 0x6000, 0x9086, 0x0002,
+	0x0904, 0xadfa, 0x0c50, 0x9186, 0x0014, 0x1d38, 0x080c, 0x8d2c,
+	0x6004, 0x908e, 0x0022, 0x1118, 0x080c, 0xa820, 0x09f0, 0x080c,
+	0x3102, 0x080c, 0xc8e3, 0x080c, 0xc3c0, 0x1198, 0x080c, 0x312b,
+	0x6010, 0x00b6, 0x2058, 0xb9a0, 0x00be, 0x080c, 0xadb3, 0x9186,
+	0x007e, 0x1128, 0x2001, 0x1836, 0x200c, 0xc185, 0x2102, 0x0804,
+	0xac7f, 0x080c, 0xc3d1, 0x1120, 0x080c, 0xadb3, 0x0804, 0xac7f,
+	0x6004, 0x908e, 0x0032, 0x1160, 0x00e6, 0x00f6, 0x2071, 0x189f,
+	0x2079, 0x0000, 0x080c, 0x3499, 0x00fe, 0x00ee, 0x0804, 0xac7f,
+	0x6004, 0x908e, 0x0021, 0x0d40, 0x908e, 0x0022, 0x090c, 0xadb3,
+	0x0804, 0xac7f, 0x90b2, 0x0040, 0x1a04, 0xad9a, 0x2008, 0x0002,
+	0xad2a, 0xad2b, 0xad2e, 0xad31, 0xad34, 0xad41, 0xad28, 0xad28,
+	0xad28, 0xad28, 0xad28, 0xad28, 0xad28, 0xad28, 0xad28, 0xad28,
+	0xad28, 0xad28, 0xad28, 0xad28, 0xad28, 0xad28, 0xad28, 0xad28,
+	0xad28, 0xad28, 0xad28, 0xad28, 0xad28, 0xad28, 0xad44, 0xad4f,
+	0xad28, 0xad51, 0xad4f, 0xad28, 0xad28, 0xad28, 0xad28, 0xad28,
+	0xad4f, 0xad4f, 0xad28, 0xad28, 0xad28, 0xad28, 0xad28, 0xad28,
+	0xad28, 0xad28, 0xad81, 0xad4f, 0xad28, 0xad4d, 0xad28, 0xad28,
+	0xad28, 0xad4e, 0xad28, 0xad28, 0xad28, 0xad4f, 0xad78, 0xad28,
+	0x080c, 0x0dc3, 0x0420, 0x2001, 0x000b, 0x0460, 0x2001, 0x0003,
+	0x0448, 0x2001, 0x0005, 0x0430, 0x6010, 0x00b6, 0x2058, 0xb804,
+	0x00be, 0x9084, 0x00ff, 0x9086, 0x0000, 0x11f0, 0x2001, 0x0001,
+	0x00c8, 0x2001, 0x0009, 0x00b0, 0x080c, 0x8d2c, 0x6003, 0x0005,
+	0x080c, 0xc8e6, 0x080c, 0x8e38, 0x0060, 0x0008, 0x0000, 0x0804,
+	0xad92, 0x080c, 0x8d2c, 0x080c, 0xc8e6, 0x6003, 0x0004, 0x080c,
+	0x8e38, 0x0005, 0x080c, 0x6448, 0x080c, 0x8d2c, 0x6003, 0x0002,
+	0x0036, 0x2019, 0x1869, 0x2304, 0x9084, 0xff00, 0x1120, 0x2001,
+	0x1962, 0x201c, 0x0040, 0x8007, 0x909a, 0x0004, 0x0ec0, 0x8003,
+	0x801b, 0x831b, 0x9318, 0x631a, 0x003e, 0x080c, 0x8e38, 0x0c08,
+	0x080c, 0x8d2c, 0x080c, 0xc638, 0x080c, 0xa39d, 0x080c, 0x8e38,
+	0x08c0, 0x00e6, 0x00f6, 0x2071, 0x189f, 0x2079, 0x0000, 0x080c,
+	0x3499, 0x00fe, 0x00ee, 0x080c, 0x8d2c, 0x080c, 0xa39d, 0x080c,
+	0x8e38, 0x0838, 0x080c, 0x8d2c, 0x6003, 0x0002, 0x080c, 0xc8e6,
+	0x0804, 0x8e38, 0x2600, 0x2008, 0x0002, 0xadb1, 0xadb1, 0xadb1,
+	0xad92, 0xad92, 0xadb1, 0xadb1, 0xadb1, 0xadb1, 0xad92, 0xadb1,
+	0xad92, 0xadb1, 0xad92, 0xadb1, 0xadb1, 0xadb1, 0xadb1, 0xadb1,
+	0xadb1, 0x080c, 0x0dc3, 0x00e6, 0x0096, 0x0026, 0x0016, 0x080c,
+	0xc1cd, 0x0568, 0x6014, 0x2048, 0xa868, 0x9086, 0x0139, 0x11a8,
+	0xa898, 0x9086, 0x0056, 0x1148, 0x080c, 0x53f9, 0x0130, 0x2001,
+	0x0000, 0x900e, 0x2011, 0x4000, 0x0028, 0x2001, 0x0030, 0x900e,
+	0x2011, 0x4005, 0x080c, 0xc7a9, 0x0090, 0xa86c, 0xd0fc, 0x0178,
+	0xa807, 0x0000, 0x0016, 0x6004, 0x908e, 0x0021, 0x0168, 0x908e,
+	0x003d, 0x0150, 0x001e, 0xa86b, 0x0103, 0xa833, 0x0100, 0x001e,
+	0x002e, 0x009e, 0x00ee, 0x0005, 0x001e, 0x0009, 0x0cc0, 0x0096,
+	0x6014, 0x2048, 0xa800, 0x2048, 0xa86b, 0x0103, 0xa823, 0x8001,
+	0x009e, 0x0005, 0x00b6, 0x6610, 0x2658, 0xb804, 0x9084, 0x00ff,
+	0x90b2, 0x000c, 0x1a0c, 0x0dc3, 0x6604, 0x96b6, 0x004d, 0x1120,
+	0x080c, 0xc6c8, 0x0804, 0xae77, 0x6604, 0x96b6, 0x0043, 0x1120,
+	0x080c, 0xc711, 0x0804, 0xae77, 0x6604, 0x96b6, 0x004b, 0x1120,
+	0x080c, 0xc73d, 0x0804, 0xae77, 0x6604, 0x96b6, 0x0033, 0x1120,
+	0x080c, 0xc65a, 0x0804, 0xae77, 0x6604, 0x96b6, 0x0028, 0x1120,
+	0x080c, 0xc40f, 0x0804, 0xae77, 0x6604, 0x96b6, 0x0029, 0x1120,
+	0x080c, 0xc450, 0x0804, 0xae77, 0x6604, 0x96b6, 0x001f, 0x1118,
+	0x080c, 0xa76d, 0x04e0, 0x6604, 0x96b6, 0x0000, 0x1118, 0x080c,
+	0xab03, 0x04a8, 0x6604, 0x96b6, 0x0022, 0x1118, 0x080c, 0xa801,
+	0x0470, 0x6604, 0x96b6, 0x0035, 0x1118, 0x080c, 0xa919, 0x0438,
+	0x6604, 0x96b6, 0x0039, 0x1118, 0x080c, 0xaa9c, 0x0400, 0x6604,
+	0x96b6, 0x003d, 0x1118, 0x080c, 0xa839, 0x00c8, 0x6604, 0x96b6,
+	0x0044, 0x1118, 0x080c, 0xa875, 0x0090, 0x6604, 0x96b6, 0x0049,
+	0x1118, 0x080c, 0xa8a4, 0x0058, 0x91b6, 0x0015, 0x1110, 0x0063,
+	0x0030, 0x91b6, 0x0016, 0x1128, 0x00be, 0x0804, 0xb160, 0x00be,
+	0x0005, 0x080c, 0xa434, 0x0cd8, 0xae95, 0xaea3, 0xae95, 0xaee8,
+	0xae95, 0xb082, 0xb16d, 0xae95, 0xae95, 0xae95, 0xb13a, 0xae95,
+	0xb14e, 0x0096, 0x080c, 0x155f, 0x6014, 0x2048, 0xa800, 0x2048,
+	0xa86b, 0x0103, 0x009e, 0x0804, 0xa39d, 0xa001, 0xa001, 0x0005,
+	0x6604, 0x96b6, 0x0004, 0x1130, 0x2001, 0x0001, 0x080c, 0x6434,
+	0x0804, 0xa39d, 0x0005, 0x00e6, 0x2071, 0x1800, 0x708c, 0x9086,
+	0x0074, 0x1540, 0x080c, 0xda08, 0x11b0, 0x6010, 0x00b6, 0x2058,
+	0x7030, 0xd08c, 0x0128, 0xb800, 0xd0bc, 0x0110, 0xc0c5, 0xb802,
+	0x00e9, 0x00be, 0x2001, 0x0006, 0x080c, 0x6448, 0x080c, 0x312b,
+	0x080c, 0xa39d, 0x0088, 0x2001, 0x000a, 0x080c, 0x6448, 0x080c,
+	0x312b, 0x6003, 0x0001, 0x6007, 0x0001, 0x080c, 0x88e9, 0x080c,
+	0x8e38, 0x0010, 0x080c, 0xb06d, 0x00ee, 0x0005, 0x00d6, 0xb800,
+	0xd084, 0x0160, 0x9006, 0x080c, 0x6434, 0x2069, 0x185e, 0x6804,
+	0xd0a4, 0x0120, 0x2001, 0x0006, 0x080c, 0x6474, 0x00de, 0x0005,
+	0x00b6, 0x0096, 0x00d6, 0x2011, 0x1823, 0x2204, 0x9086, 0x0074,
+	0x1904, 0xb044, 0x6010, 0x2058, 0xbaa0, 0x9286, 0x007e, 0x1120,
+	0x080c, 0xb2b2, 0x0804, 0xafb1, 0x2001, 0x180d, 0x2004, 0xd08c,
+	0x0904, 0xaf53, 0x00d6, 0x080c, 0x7351, 0x01a0, 0x0026, 0x2011,
+	0x0010, 0x080c, 0x68a8, 0x002e, 0x0904, 0xaf52, 0x080c, 0x5678,
+	0x1598, 0x6014, 0x2048, 0xa807, 0x0000, 0xa86b, 0x0103, 0xa833,
+	0xdead, 0x0450, 0x6010, 0x00b6, 0x2058, 0xb910, 0x00be, 0x9186,
+	0x00ff, 0x0580, 0x0026, 0x2011, 0x8008, 0x080c, 0x68a8, 0x002e,
+	0x0548, 0x6014, 0x9005, 0x090c, 0x0dc3, 0x2048, 0xa868, 0x9084,
+	0x00ff, 0x9086, 0x0039, 0x1140, 0x2001, 0x0030, 0x900e, 0x2011,
+	0x4009, 0x080c, 0xc7a9, 0x0040, 0x6014, 0x2048, 0xa807, 0x0000,
+	0xa86b, 0x0103, 0xa833, 0xdead, 0x6010, 0x2058, 0xb9a0, 0x0016,
+	0x080c, 0x312b, 0x080c, 0xa39d, 0x001e, 0x080c, 0x31fe, 0x00de,
+	0x0804, 0xb047, 0x00de, 0x080c, 0xb2a7, 0x6010, 0x2058, 0xbaa0,
+	0x9286, 0x0080, 0x1510, 0x6014, 0x9005, 0x01a8, 0x2048, 0xa868,
+	0x9084, 0x00ff, 0x9086, 0x0039, 0x1140, 0x2001, 0x0000, 0x900e,
+	0x2011, 0x4000, 0x080c, 0xc7a9, 0x0030, 0xa807, 0x0000, 0xa86b,
+	0x0103, 0xa833, 0x0200, 0x2001, 0x0006, 0x080c, 0x6448, 0x080c,
+	0x312b, 0x080c, 0xa39d, 0x0804, 0xb047, 0x080c, 0xb055, 0x6014,
+	0x9005, 0x0190, 0x2048, 0xa86c, 0xd0f4, 0x01e8, 0xa868, 0x9084,
+	0x00ff, 0x9086, 0x0039, 0x1d08, 0x2001, 0x0000, 0x900e, 0x2011,
+	0x4000, 0x080c, 0xc7a9, 0x08f8, 0x080c, 0xb04b, 0x0160, 0x9006,
+	0x080c, 0x6434, 0x2001, 0x0004, 0x080c, 0x6474, 0x2001, 0x0007,
+	0x080c, 0x6448, 0x08a0, 0x2001, 0x0004, 0x080c, 0x6448, 0x6003,
+	0x0001, 0x6007, 0x0003, 0x080c, 0x88e9, 0x080c, 0x8e38, 0x0804,
+	0xb047, 0xb85c, 0xd0e4, 0x0178, 0x080c, 0xc5da, 0x080c, 0x7351,
+	0x0118, 0xd0dc, 0x1904, 0xaf73, 0x2011, 0x1836, 0x2204, 0xc0ad,
+	0x2012, 0x0804, 0xaf73, 0x080c, 0xc617, 0x2011, 0x1836, 0x2204,
+	0xc0a5, 0x2012, 0x0006, 0x080c, 0xdba8, 0x000e, 0x1904, 0xaf73,
+	0xc0b5, 0x2012, 0x2001, 0x0006, 0x080c, 0x6448, 0x9006, 0x080c,
+	0x6434, 0x00c6, 0x2001, 0x180f, 0x2004, 0xd09c, 0x0520, 0x00f6,
+	0x2079, 0x0100, 0x00e6, 0x2071, 0x1800, 0x700c, 0x9084, 0x00ff,
+	0x78e6, 0x707a, 0x7010, 0x78ea, 0x707e, 0x908c, 0x00ff, 0x00ee,
+	0x780c, 0xc0b5, 0x780e, 0x00fe, 0x080c, 0x2751, 0x00f6, 0x2100,
+	0x900e, 0x080c, 0x2708, 0x795a, 0x00fe, 0x9186, 0x0081, 0x01f0,
+	0x2009, 0x0081, 0x00e0, 0x2009, 0x00ef, 0x00f6, 0x2079, 0x0100,
+	0x79ea, 0x78e7, 0x0000, 0x7932, 0x7936, 0x780c, 0xc0b5, 0x780e,
+	0x00fe, 0x080c, 0x2751, 0x00f6, 0x2079, 0x1800, 0x797e, 0x2100,
+	0x900e, 0x797a, 0x080c, 0x2708, 0x795a, 0x00fe, 0x8108, 0x080c,
+	0x6497, 0x2b00, 0x00ce, 0x1904, 0xaf73, 0x6012, 0x2009, 0x180f,
+	0x210c, 0xd19c, 0x0150, 0x2009, 0x027c, 0x210c, 0x918c, 0x00ff,
+	0xb912, 0x2009, 0x027d, 0x210c, 0xb916, 0x2001, 0x0002, 0x080c,
+	0x6448, 0x6023, 0x0001, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c,
+	0x88e9, 0x080c, 0x8e38, 0x0018, 0x080c, 0xadb3, 0x0431, 0x00de,
+	0x009e, 0x00be, 0x0005, 0x2001, 0x1810, 0x2004, 0xd0a4, 0x0120,
+	0x2001, 0x185f, 0x2004, 0xd0ac, 0x0005, 0x00e6, 0x080c, 0xe037,
+	0x0190, 0x2071, 0x0260, 0x7108, 0x720c, 0x918c, 0x00ff, 0x1118,
+	0x9284, 0xff00, 0x0140, 0x6010, 0x2058, 0xb8a0, 0x9084, 0xff80,
+	0x1110, 0xb912, 0xba16, 0x00ee, 0x0005, 0x2030, 0x2001, 0x0007,
+	0x080c, 0x6448, 0x080c, 0x5678, 0x1120, 0x2001, 0x0007, 0x080c,
+	0x6474, 0x080c, 0x312b, 0x6020, 0x9086, 0x000a, 0x1108, 0x0005,
+	0x0804, 0xa39d, 0x00b6, 0x00e6, 0x0026, 0x0016, 0x2071, 0x1800,
+	0x708c, 0x9086, 0x0014, 0x1904, 0xb131, 0x2001, 0x180d, 0x2004,
+	0xd08c, 0x0904, 0xb0e4, 0x00d6, 0x080c, 0x7351, 0x01a0, 0x0026,
+	0x2011, 0x0010, 0x080c, 0x68a8, 0x002e, 0x0904, 0xb0e3, 0x080c,
+	0x5678, 0x1598, 0x6014, 0x2048, 0xa807, 0x0000, 0xa86b, 0x0103,
+	0xa833, 0xdead, 0x0450, 0x6010, 0x00b6, 0x2058, 0xb910, 0x00be,
+	0x9186, 0x00ff, 0x0580, 0x0026, 0x2011, 0x8008, 0x080c, 0x68a8,
+	0x002e, 0x0548, 0x6014, 0x9005, 0x090c, 0x0dc3, 0x2048, 0xa868,
+	0x9084, 0x00ff, 0x9086, 0x0039, 0x1140, 0x2001, 0x0030, 0x900e,
+	0x2011, 0x4009, 0x080c, 0xc7a9, 0x0040, 0x6014, 0x2048, 0xa807,
+	0x0000, 0xa86b, 0x0103, 0xa833, 0xdead, 0x6010, 0x2058, 0xb9a0,
+	0x0016, 0x080c, 0x312b, 0x080c, 0xa39d, 0x001e, 0x080c, 0x31fe,
+	0x00de, 0x0804, 0xb135, 0x00de, 0x080c, 0x5678, 0x1170, 0x6014,
+	0x9005, 0x1158, 0x0036, 0x0046, 0x6010, 0x2058, 0xbba0, 0x2021,
+	0x0006, 0x080c, 0x4d24, 0x004e, 0x003e, 0x00d6, 0x6010, 0x2058,
+	0x080c, 0x6597, 0x080c, 0xaed6, 0x00de, 0x080c, 0xb382, 0x1588,
+	0x6010, 0x2058, 0xb890, 0x9005, 0x0560, 0x2001, 0x0006, 0x080c,
+	0x6448, 0x0096, 0x6014, 0x904d, 0x01d0, 0xa868, 0x9084, 0x00ff,
+	0x9086, 0x0039, 0x1140, 0x2001, 0x0000, 0x900e, 0x2011, 0x4000,
+	0x080c, 0xc7a9, 0x0060, 0xa868, 0x9084, 0x00ff, 0x9086, 0x0029,
+	0x0130, 0xa807, 0x0000, 0xa86b, 0x0103, 0xa833, 0x0200, 0x009e,
+	0x080c, 0x312b, 0x6020, 0x9086, 0x000a, 0x0138, 0x080c, 0xa39d,
+	0x0020, 0x080c, 0xadb3, 0x080c, 0xb06d, 0x001e, 0x002e, 0x00ee,
+	0x00be, 0x0005, 0x2011, 0x1823, 0x2204, 0x9086, 0x0014, 0x1160,
+	0x2001, 0x0002, 0x080c, 0x6448, 0x6003, 0x0001, 0x6007, 0x0001,
+	0x080c, 0x88e9, 0x0804, 0x8e38, 0x0804, 0xb06d, 0x2030, 0x2011,
+	0x1823, 0x2204, 0x9086, 0x0004, 0x1148, 0x96b6, 0x000b, 0x1120,
+	0x2001, 0x0007, 0x080c, 0x6448, 0x0804, 0xa39d, 0x0804, 0xb06d,
+	0x0002, 0xae95, 0xb178, 0xae95, 0xb1b9, 0xae95, 0xb264, 0xb16d,
+	0xae98, 0xae95, 0xb276, 0xae95, 0xb286, 0x6604, 0x9686, 0x0003,
+	0x0904, 0xb082, 0x96b6, 0x001e, 0x1110, 0x080c, 0xa39d, 0x0005,
+	0x00b6, 0x00d6, 0x00c6, 0x080c, 0xb296, 0x11a0, 0x9006, 0x080c,
+	0x6434, 0x080c, 0x3102, 0x080c, 0xc8e3, 0x2001, 0x0002, 0x080c,
+	0x6448, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c, 0x88e9, 0x080c,
+	0x8e38, 0x0418, 0x2009, 0x026e, 0x2104, 0x9086, 0x0009, 0x1160,
+	0x6010, 0x2058, 0xb840, 0x9084, 0x00ff, 0x9005, 0x0180, 0x8001,
+	0xb842, 0x601b, 0x000a, 0x0088, 0x2009, 0x026f, 0x2104, 0x9084,
+	0xff00, 0x908e, 0x1900, 0x0148, 0x908e, 0x1e00, 0x0990, 0x080c,
+	0x3102, 0x080c, 0xc8e3, 0x080c, 0xb06d, 0x00ce, 0x00de, 0x00be,
+	0x0005, 0x0096, 0x00b6, 0x0026, 0x9016, 0x080c, 0xb2a4, 0x00d6,
+	0x2069, 0x1958, 0x2d04, 0x9005, 0x0168, 0x6010, 0x2058, 0xb8a0,
+	0x9086, 0x007e, 0x1138, 0x2069, 0x181f, 0x2d04, 0x8000, 0x206a,
+	0x00de, 0x0010, 0x00de, 0x0088, 0x9006, 0x080c, 0x6434, 0x2001,
+	0x0002, 0x080c, 0x6448, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c,
+	0x88e9, 0x080c, 0x8e38, 0x0804, 0xb234, 0x080c, 0xc1cd, 0x01b0,
+	0x6014, 0x2048, 0xa868, 0x2010, 0x9086, 0x0139, 0x1138, 0x6007,
+	0x0016, 0x2001, 0x0002, 0x080c, 0xc800, 0x00b0, 0x6014, 0x2048,
+	0xa868, 0xd0fc, 0x0118, 0x2001, 0x0001, 0x0ca8, 0x2001, 0x180e,
+	0x2004, 0xd0dc, 0x0148, 0x6010, 0x2058, 0xb840, 0x9084, 0x00ff,
+	0x9005, 0x1110, 0x9006, 0x0c38, 0x080c, 0xadb3, 0x2009, 0x026e,
+	0x2134, 0x96b4, 0x00ff, 0x9686, 0x0005, 0x0510, 0x9686, 0x000b,
+	0x01c8, 0x2009, 0x026f, 0x2104, 0x9084, 0xff00, 0x1118, 0x9686,
+	0x0009, 0x01b0, 0x9086, 0x1900, 0x1168, 0x9686, 0x0009, 0x0180,
+	0x2001, 0x0004, 0x080c, 0x6448, 0x2001, 0x0028, 0x601a, 0x6007,
+	0x0052, 0x0010, 0x080c, 0xb06d, 0x002e, 0x00be, 0x009e, 0x0005,
+	0x9286, 0x0139, 0x0160, 0x6014, 0x2048, 0x080c, 0xc1cd, 0x0140,
+	0xa868, 0x9086, 0x0139, 0x0118, 0xa86c, 0xd0fc, 0x0108, 0x0c50,
+	0x6010, 0x2058, 0xb840, 0x9084, 0x00ff, 0x9005, 0x0138, 0x8001,
+	0xb842, 0x601b, 0x000a, 0x6007, 0x0016, 0x08f0, 0xb8a0, 0x9086,
+	0x007e, 0x1138, 0x00e6, 0x2071, 0x1800, 0x080c, 0x5f46, 0x00ee,
+	0x0010, 0x080c, 0x3102, 0x0870, 0x2001, 0x0004, 0x080c, 0x6448,
+	0x04d9, 0x1140, 0x6003, 0x0001, 0x6007, 0x0003, 0x080c, 0x88e9,
+	0x0804, 0x8e38, 0x080c, 0xadb3, 0x0804, 0xb06d, 0x0469, 0x1160,
+	0x2001, 0x0008, 0x080c, 0x6448, 0x6003, 0x0001, 0x6007, 0x0005,
+	0x080c, 0x88e9, 0x0804, 0x8e38, 0x0804, 0xb06d, 0x00e9, 0x1160,
+	0x2001, 0x000a, 0x080c, 0x6448, 0x6003, 0x0001, 0x6007, 0x0001,
+	0x080c, 0x88e9, 0x0804, 0x8e38, 0x0804, 0xb06d, 0x2009, 0x026e,
+	0x2104, 0x9086, 0x0003, 0x1138, 0x2009, 0x026f, 0x2104, 0x9084,
+	0xff00, 0x9086, 0x2a00, 0x0005, 0x9085, 0x0001, 0x0005, 0x00b6,
+	0x00c6, 0x0016, 0x6110, 0x2158, 0x080c, 0x650b, 0x001e, 0x00ce,
+	0x00be, 0x0005, 0x00b6, 0x00f6, 0x00e6, 0x00d6, 0x0036, 0x0016,
+	0x6010, 0x2058, 0x2009, 0x1836, 0x2104, 0x9085, 0x0003, 0x200a,
+	0x080c, 0xb354, 0x05d0, 0x2009, 0x1836, 0x2104, 0xc0cd, 0x200a,
+	0x080c, 0x6869, 0x0158, 0x9006, 0x2020, 0x2009, 0x002a, 0x080c,
+	0xdd18, 0x2001, 0x180c, 0x200c, 0xc195, 0x2102, 0x6120, 0x0016,
+	0x6023, 0x0007, 0x2019, 0x002a, 0x2009, 0x0001, 0x00e6, 0x2071,
+	0x1800, 0x00c6, 0x2061, 0x0100, 0x080c, 0x30cd, 0x00ce, 0x6010,
+	0x9005, 0x090c, 0x0dc3, 0x080c, 0x2ed6, 0x00ee, 0x001e, 0x6122,
+	0x00c6, 0x0156, 0x20a9, 0x0781, 0x2009, 0x007f, 0x080c, 0x31fe,
+	0x8108, 0x1f04, 0xb2f6, 0x015e, 0x00ce, 0x080c, 0xb2a7, 0x2071,
+	0x0260, 0x2079, 0x0200, 0x7817, 0x0001, 0x2001, 0x1836, 0x200c,
+	0xc1c5, 0x7018, 0xd0fc, 0x0110, 0xd0dc, 0x0118, 0x7038, 0xd0dc,
+	0x1108, 0xc1c4, 0x7817, 0x0000, 0x2001, 0x1836, 0x2102, 0x9184,
+	0x0050, 0x9086, 0x0050, 0x0588, 0x2079, 0x0100, 0x2e04, 0x9084,
+	0x00ff, 0x2069, 0x181e, 0x206a, 0x78e6, 0x0006, 0x8e70, 0x2e04,
+	0x2069, 0x181f, 0x206a, 0x78ea, 0x7832, 0x7836, 0x2010, 0x9084,
+	0xff00, 0x001e, 0x9105, 0x2009, 0x182b, 0x200a, 0x2200, 0x9084,
+	0x00ff, 0x2008, 0x080c, 0x2751, 0x080c, 0x7351, 0x0170, 0x2071,
+	0x0260, 0x2069, 0x195e, 0x7048, 0x206a, 0x704c, 0x6806, 0x7050,
+	0x680a, 0x7054, 0x680e, 0x080c, 0xc5da, 0x001e, 0x003e, 0x00de,
+	0x00ee, 0x00fe, 0x00be, 0x0005, 0x0096, 0x0026, 0x0036, 0x00e6,
+	0x0156, 0x2019, 0x182b, 0x231c, 0x83ff, 0x01f0, 0x2071, 0x0260,
+	0x7200, 0x9294, 0x00ff, 0x7004, 0x9084, 0xff00, 0x9205, 0x9306,
+	0x1198, 0x2011, 0x0276, 0x20a9, 0x0004, 0x2b48, 0x2019, 0x000a,
+	0x080c, 0xb448, 0x1148, 0x2011, 0x027a, 0x20a9, 0x0004, 0x2019,
+	0x0006, 0x080c, 0xb448, 0x1100, 0x015e, 0x00ee, 0x003e, 0x002e,
+	0x009e, 0x0005, 0x00e6, 0x2071, 0x0260, 0x7034, 0x9086, 0x0014,
+	0x11a8, 0x7038, 0x9086, 0x0800, 0x1188, 0x703c, 0xd0ec, 0x0160,
+	0x9084, 0x0f00, 0x9086, 0x0100, 0x1138, 0x7054, 0xd0a4, 0x1110,
+	0xd0ac, 0x0110, 0x9006, 0x0010, 0x9085, 0x0001, 0x00ee, 0x0005,
+	0x00e6, 0x0096, 0x00c6, 0x0076, 0x0056, 0x0046, 0x0026, 0x0006,
+	0x0126, 0x2091, 0x8000, 0x2029, 0x19cd, 0x252c, 0x2021, 0x19d3,
+	0x2424, 0x2061, 0x1cd0, 0x2071, 0x1800, 0x7250, 0x7070, 0x9202,
+	0x1a04, 0xb41e, 0x080c, 0xdd49, 0x0904, 0xb417, 0x6720, 0x9786,
+	0x0007, 0x0904, 0xb417, 0x2500, 0x9c06, 0x0904, 0xb417, 0x2400,
+	0x9c06, 0x0904, 0xb417, 0x3e08, 0x81ff, 0x01c8, 0x6010, 0x9005,
+	0x01b0, 0x00b6, 0x2058, 0x9186, 0x0002, 0x1120, 0xb800, 0xd0bc,
+	0x1904, 0xb432, 0x9186, 0x0001, 0x1148, 0xbaa0, 0x9286, 0x007e,
+	0x1128, 0x6004, 0x9086, 0x0002, 0x0904, 0xb432, 0x00be, 0x00c6,
+	0x6000, 0x9086, 0x0004, 0x1110, 0x080c, 0x1998, 0x9786, 0x000a,
+	0x0148, 0x080c, 0xc3d1, 0x1130, 0x00ce, 0x080c, 0xadb3, 0x080c,
+	0xa3cf, 0x00e8, 0x6014, 0x2048, 0x080c, 0xc1cd, 0x01a8, 0x9786,
+	0x0003, 0x1530, 0xa86b, 0x0103, 0xa880, 0xd0cc, 0x0130, 0x0096,
+	0xa87c, 0x2048, 0x080c, 0x0fbf, 0x009e, 0xab7e, 0xa87b, 0x0000,
+	0x080c, 0x6bf5, 0x080c, 0xc3b4, 0x080c, 0xa3cf, 0x00ce, 0x9ce0,
+	0x0018, 0x7064, 0x9c02, 0x1210, 0x0804, 0xb3b5, 0x012e, 0x000e,
+	0x002e, 0x004e, 0x005e, 0x007e, 0x00ce, 0x009e, 0x00ee, 0x0005,
+	0x9786, 0x0006, 0x1118, 0x080c, 0xdcc3, 0x0c30, 0x9786, 0x000a,
+	0x09e0, 0x0880, 0x00be, 0x0c18, 0x220c, 0x2304, 0x9106, 0x1130,
+	0x8210, 0x8318, 0x1f04, 0xb434, 0x9006, 0x0005, 0x2304, 0x9102,
+	0x0218, 0x2001, 0x0001, 0x0008, 0x9006, 0x918d, 0x0001, 0x0005,
+	0x0136, 0x01c6, 0x0016, 0x8906, 0x8006, 0x8007, 0x908c, 0x003f,
+	0x21e0, 0x9084, 0xffc0, 0x9300, 0x2098, 0x3518, 0x20a9, 0x0001,
+	0x220c, 0x4002, 0x910e, 0x1140, 0x8210, 0x8319, 0x1dc8, 0x9006,
+	0x001e, 0x01ce, 0x013e, 0x0005, 0x220c, 0x9102, 0x0218, 0x2001,
+	0x0001, 0x0010, 0x2001, 0x0000, 0x918d, 0x0001, 0x001e, 0x01ce,
+	0x013e, 0x0005, 0x6004, 0x908a, 0x0054, 0x1a0c, 0x0dc3, 0x080c,
+	0xc3c0, 0x0120, 0x080c, 0xc3d1, 0x0168, 0x0028, 0x080c, 0x312b,
+	0x080c, 0xc3d1, 0x0138, 0x080c, 0x8d2c, 0x080c, 0xa39d, 0x080c,
+	0x8e38, 0x0005, 0x080c, 0xadb3, 0x0cb0, 0x9182, 0x0054, 0x1220,
+	0x9182, 0x0040, 0x0208, 0x000a, 0x0005, 0xb4a9, 0xb4a9, 0xb4a9,
+	0xb4a9, 0xb4a9, 0xb4a9, 0xb4a9, 0xb4a9, 0xb4a9, 0xb4a9, 0xb4a9,
+	0xb4ab, 0xb4ab, 0xb4ab, 0xb4ab, 0xb4a9, 0xb4a9, 0xb4a9, 0xb4ab,
+	0xb4a9, 0x080c, 0x0dc3, 0x600b, 0xffff, 0x6003, 0x0001, 0x6106,
+	0x080c, 0x88a1, 0x0126, 0x2091, 0x8000, 0x080c, 0x8e38, 0x012e,
+	0x0005, 0x9186, 0x0013, 0x1128, 0x6004, 0x9082, 0x0040, 0x0804,
+	0xb543, 0x9186, 0x0027, 0x1520, 0x080c, 0x8d2c, 0x080c, 0x3102,
+	0x080c, 0xc8e3, 0x0096, 0x6114, 0x2148, 0x080c, 0xc1cd, 0x0198,
+	0x080c, 0xc3d1, 0x1118, 0x080c, 0xadb3, 0x0068, 0xa86b, 0x0103,
+	0xa87f, 0x0029, 0xa87b, 0x0000, 0xa980, 0xc1c5, 0xa982, 0x080c,
+	0x6c02, 0x080c, 0xc3b4, 0x009e, 0x080c, 0xa39d, 0x0804, 0x8e38,
+	0x9186, 0x0014, 0x1120, 0x6004, 0x9082, 0x0040, 0x00b8, 0x9186,
+	0x0046, 0x0150, 0x9186, 0x0045, 0x0138, 0x9186, 0x0053, 0x0120,
+	0x9186, 0x0048, 0x190c, 0x0dc3, 0x080c, 0xc8f4, 0x0130, 0x6000,
+	0x9086, 0x0002, 0x1110, 0x0804, 0xb581, 0x0005, 0x0002, 0xb51d,
+	0xb51b, 0xb51b, 0xb51b, 0xb51b, 0xb51b, 0xb51b, 0xb51b, 0xb51b,
+	0xb51b, 0xb51b, 0xb538, 0xb538, 0xb538, 0xb538, 0xb51b, 0xb538,
+	0xb51b, 0xb538, 0xb51b, 0x080c, 0x0dc3, 0x080c, 0x8d2c, 0x0096,
+	0x6114, 0x2148, 0x080c, 0xc1cd, 0x0168, 0xa86b, 0x0103, 0xa87f,
+	0x0006, 0xa87b, 0x0000, 0xa884, 0xc0ec, 0xa886, 0x080c, 0x6c02,
+	0x080c, 0xc3b4, 0x009e, 0x080c, 0xa39d, 0x080c, 0x8e38, 0x0005,
+	0x080c, 0x8d2c, 0x080c, 0xc3d1, 0x090c, 0xadb3, 0x080c, 0xa39d,
+	0x080c, 0x8e38, 0x0005, 0x0002, 0xb55a, 0xb558, 0xb558, 0xb558,
+	0xb558, 0xb558, 0xb558, 0xb558, 0xb558, 0xb558, 0xb558, 0xb571,
+	0xb571, 0xb571, 0xb571, 0xb558, 0xb57b, 0xb558, 0xb571, 0xb558,
+	0x080c, 0x0dc3, 0x0096, 0x080c, 0x8d2c, 0x6014, 0x2048, 0x2001,
+	0x1964, 0x2004, 0x6042, 0xa980, 0xd1ac, 0x0140, 0x6003, 0x0004,
+	0xa880, 0x9085, 0x0400, 0xa882, 0x009e, 0x0005, 0x6003, 0x0002,
+	0x0cb8, 0x080c, 0x8d2c, 0x080c, 0xc8e6, 0x080c, 0xc8eb, 0x6003,
+	0x000f, 0x0804, 0x8e38, 0x080c, 0x8d2c, 0x080c, 0xa39d, 0x0804,
+	0x8e38, 0x9182, 0x0054, 0x1220, 0x9182, 0x0040, 0x0208, 0x000a,
+	0x0005, 0xb59d, 0xb59d, 0xb59d, 0xb59d, 0xb59d, 0xb59f, 0xb682,
+	0xb59d, 0xb6b6, 0xb59d, 0xb59d, 0xb59d, 0xb59d, 0xb59d, 0xb59d,
+	0xb59d, 0xb59d, 0xb59d, 0xb59d, 0xb6b6, 0x080c, 0x0dc3, 0x00b6,
+	0x0096, 0x6114, 0x2148, 0x7644, 0x96b4, 0x0fff, 0x86ff, 0x1528,
+	0x6010, 0x2058, 0xb800, 0xd0bc, 0x1904, 0xb671, 0xa87f, 0x0000,
+	0xa86b, 0x0103, 0xae7a, 0xa880, 0xd0ac, 0x0128, 0xa834, 0xa938,
+	0x9115, 0x190c, 0xb84f, 0x080c, 0x6a1c, 0x6210, 0x2258, 0xba3c,
+	0x82ff, 0x0110, 0x8211, 0xba3e, 0x7044, 0xd0e4, 0x1904, 0xb652,
+	0x080c, 0xa39d, 0x009e, 0x00be, 0x0005, 0x080c, 0xc916, 0x1dd0,
+	0x968c, 0x0c00, 0x0150, 0x6010, 0x2058, 0xb800, 0xd0bc, 0x1904,
+	0xb656, 0x7348, 0xab96, 0x734c, 0xab92, 0x968c, 0x00ff, 0x9186,
+	0x0002, 0x0508, 0x9186, 0x0028, 0x1118, 0xa87f, 0x001c, 0x00e8,
+	0xd6dc, 0x01a0, 0xa87f, 0x0015, 0xa880, 0xd0ac, 0x0170, 0xa938,
+	0xaa34, 0x2100, 0x9205, 0x0148, 0x7048, 0x9106, 0x1118, 0x704c,
+	0x9206, 0x0118, 0xa996, 0xaa92, 0xc6dc, 0x0038, 0xd6d4, 0x0118,
+	0xa87f, 0x0007, 0x0010, 0xa87f, 0x0000, 0xa86b, 0x0103, 0xae7a,
+	0x901e, 0xd6c4, 0x01d8, 0x9686, 0x0100, 0x1130, 0x7064, 0x9005,
+	0x1118, 0xc6c4, 0x0804, 0xb5a6, 0x735c, 0xab8a, 0x83ff, 0x0170,
+	0x938a, 0x0009, 0x0210, 0x2019, 0x0008, 0x0036, 0x2308, 0x2019,
+	0x0018, 0x2011, 0x0026, 0x080c, 0xbd68, 0x003e, 0xd6cc, 0x0904,
+	0xb5bb, 0x7154, 0xa98e, 0x81ff, 0x0904, 0xb5bb, 0x9192, 0x0021,
+	0x1278, 0x8304, 0x9098, 0x0018, 0x2011, 0x002a, 0x080c, 0xbd68,
+	0x2011, 0x0205, 0x2013, 0x0000, 0x080c, 0xc86c, 0x0804, 0xb5bb,
+	0xa86c, 0xd0fc, 0x0120, 0x2009, 0x0020, 0xa98e, 0x0c50, 0x00a6,
+	0x2950, 0x080c, 0xbd07, 0x00ae, 0x080c, 0xc86c, 0x080c, 0xbd58,
+	0x0804, 0xb5bd, 0x080c, 0xc4c4, 0x0804, 0xb5ca, 0xa880, 0xd0ac,
+	0x0904, 0xb5d9, 0xa884, 0xd0bc, 0x1904, 0xb5d9, 0x9684, 0x0400,
+	0x0130, 0xa838, 0xab34, 0x9305, 0x0904, 0xb5d9, 0x00b8, 0x7348,
+	0xa838, 0x9306, 0x1198, 0x734c, 0xa834, 0x931e, 0x0904, 0xb5d9,
+	0x0068, 0xa880, 0xd0ac, 0x0904, 0xb5ae, 0xa838, 0xa934, 0x9105,
+	0x0904, 0xb5ae, 0xa884, 0xd0bc, 0x1904, 0xb5ae, 0x080c, 0xc4fe,
+	0x0804, 0xb5ca, 0x0096, 0x00f6, 0x6003, 0x0003, 0x6007, 0x0043,
+	0x2079, 0x026c, 0x7c04, 0x7b00, 0x7e0c, 0x7d08, 0x6014, 0x2048,
+	0xa880, 0xd0ac, 0x0140, 0x6003, 0x0002, 0x00fe, 0x009e, 0x0005,
+	0x2130, 0x2228, 0x0058, 0x2400, 0xa9b0, 0x910a, 0x2300, 0xaab4,
+	0x9213, 0x2600, 0x9102, 0x2500, 0x9203, 0x0e90, 0xac36, 0xab3a,
+	0xae46, 0xad4a, 0x00fe, 0x6043, 0x0000, 0x2c10, 0x080c, 0x1aea,
+	0x080c, 0x8906, 0x080c, 0x8f0e, 0x009e, 0x0005, 0x0005, 0x9182,
+	0x0054, 0x1220, 0x9182, 0x0040, 0x0208, 0x000a, 0x0005, 0xb6d3,
+	0xb6d3, 0xb6d3, 0xb6d3, 0xb6d3, 0xb6d5, 0xb76b, 0xb6d3, 0xb6d3,
+	0xb782, 0xb812, 0xb6d3, 0xb6d3, 0xb6d3, 0xb6d3, 0xb827, 0xb6d3,
+	0xb6d3, 0xb6d3, 0xb6d3, 0x080c, 0x0dc3, 0x0076, 0x00a6, 0x00e6,
+	0x0096, 0x2071, 0x0260, 0x6114, 0x2150, 0x7644, 0xb67a, 0x96b4,
+	0x0fff, 0xb780, 0xc7e5, 0xb782, 0x6210, 0x00b6, 0x2258, 0xba3c,
+	0x82ff, 0x0110, 0x8211, 0xba3e, 0x00be, 0x86ff, 0x0904, 0xb766,
+	0x9694, 0xff00, 0x9284, 0x0c00, 0x0120, 0x7048, 0xb096, 0x704c,
+	0xb092, 0x9284, 0x0300, 0x0904, 0xb766, 0x080c, 0x100d, 0x090c,
+	0x0dc3, 0x2900, 0xb07e, 0xb780, 0xc7cd, 0xb782, 0xa86b, 0x0103,
+	0xb06c, 0xa86e, 0xb070, 0xa872, 0xb074, 0xa876, 0xae7a, 0x968c,
+	0x0c00, 0x0120, 0x7348, 0xab96, 0x734c, 0xab92, 0x968c, 0x00ff,
+	0x9186, 0x0002, 0x0180, 0x9186, 0x0028, 0x1118, 0xa87f, 0x001c,
+	0x0060, 0xd6dc, 0x0118, 0xa87f, 0x0015, 0x0038, 0xd6d4, 0x0118,
+	0xa87f, 0x0007, 0x0010, 0xa87f, 0x0000, 0xaf82, 0xb084, 0xa886,
+	0xb088, 0xa88a, 0x901e, 0xd6c4, 0x0190, 0x735c, 0xab8a, 0x83ff,
+	0x0170, 0x938a, 0x0009, 0x0210, 0x2019, 0x0008, 0x0036, 0x2308,
+	0x2019, 0x0018, 0x2011, 0x0026, 0x080c, 0xbd68, 0x003e, 0xd6cc,
+	0x01e8, 0x7154, 0xa98e, 0x81ff, 0x01c8, 0x9192, 0x0021, 0x1260,
+	0x8304, 0x9098, 0x0018, 0x2011, 0x002a, 0x080c, 0xbd68, 0x2011,
+	0x0205, 0x2013, 0x0000, 0x0050, 0xb06c, 0xd0fc, 0x0120, 0x2009,
+	0x0020, 0xa98e, 0x0c68, 0x2950, 0x080c, 0xbd07, 0x009e, 0x00ee,
+	0x00ae, 0x007e, 0x0005, 0x00f6, 0x00a6, 0x6003, 0x0003, 0x2079,
+	0x026c, 0x7c04, 0x7b00, 0x7e0c, 0x7d08, 0x6014, 0x2050, 0xb436,
+	0xb33a, 0xb646, 0xb54a, 0x00ae, 0x00fe, 0x2c10, 0x080c, 0x1aea,
+	0x0804, 0x989e, 0x6003, 0x0002, 0x6004, 0x9086, 0x0040, 0x11c8,
+	0x0096, 0x6014, 0x2048, 0xa880, 0xd0ac, 0x0160, 0x601c, 0xd084,
+	0x1130, 0x00f6, 0x2c00, 0x2078, 0x080c, 0x16c1, 0x00fe, 0x6003,
+	0x0004, 0x0010, 0x6003, 0x0002, 0x009e, 0x080c, 0x8d2c, 0x080c,
+	0x8e38, 0x0096, 0x2001, 0x1964, 0x2004, 0x6042, 0x080c, 0x8de8,
+	0x080c, 0x8f0e, 0x6114, 0x2148, 0xa980, 0xd1e4, 0x0904, 0xb80d,
+	0xd1cc, 0x05c8, 0xa97c, 0xa86c, 0xd0fc, 0x0540, 0x0016, 0xa880,
+	0x0006, 0xa884, 0x0006, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x001a,
+	0x20a0, 0x810e, 0x810e, 0x810f, 0x9184, 0x003f, 0x20e0, 0x9184,
+	0xffc0, 0x9080, 0x001a, 0x2098, 0x0156, 0x20a9, 0x0020, 0x4003,
+	0x015e, 0x000e, 0xa886, 0x000e, 0xc0cc, 0xa882, 0x001e, 0xa878,
+	0x0006, 0x2148, 0x080c, 0x0fbf, 0x001e, 0x0458, 0x0016, 0x080c,
+	0x0fbf, 0x009e, 0xa880, 0xc0cc, 0xa882, 0xa978, 0x0016, 0x080c,
+	0xbd58, 0x001e, 0x00f0, 0xa86b, 0x0103, 0xa978, 0x9184, 0x00ff,
+	0x90b6, 0x0002, 0x0180, 0x9086, 0x0028, 0x1118, 0xa87f, 0x001c,
+	0x0060, 0xd1dc, 0x0118, 0xa87f, 0x0015, 0x0038, 0xd1d4, 0x0118,
+	0xa87f, 0x0007, 0x0010, 0xa87f, 0x0000, 0x0016, 0x080c, 0x6a1c,
+	0x001e, 0xd1e4, 0x1120, 0x080c, 0xa39d, 0x009e, 0x0005, 0x080c,
+	0xc4c4, 0x0cd8, 0x6004, 0x9086, 0x0040, 0x1120, 0x080c, 0x8d2c,
+	0x080c, 0x8e38, 0x2019, 0x0001, 0x080c, 0x9c35, 0x6003, 0x0002,
+	0x080c, 0xc8eb, 0x080c, 0x8de8, 0x080c, 0x8f0e, 0x0005, 0x6004,
+	0x9086, 0x0040, 0x1120, 0x080c, 0x8d2c, 0x080c, 0x8e38, 0x2019,
+	0x0001, 0x080c, 0x9c35, 0x080c, 0x8de8, 0x080c, 0x3102, 0x080c,
+	0xc8e3, 0x0096, 0x6114, 0x2148, 0x080c, 0xc1cd, 0x0150, 0xa86b,
+	0x0103, 0xa87f, 0x0029, 0xa87b, 0x0000, 0x080c, 0x6c02, 0x080c,
+	0xc3b4, 0x009e, 0x080c, 0xa39d, 0x080c, 0x8f0e, 0x0005, 0xa87f,
 	0x0015, 0xd1fc, 0x0180, 0xa87f, 0x0007, 0x8002, 0x8000, 0x810a,
 	0x9189, 0x0000, 0x0006, 0x0016, 0x2009, 0x1a58, 0x2104, 0x8000,
 	0x200a, 0x001e, 0x000e, 0xa996, 0xa892, 0x0005, 0x9182, 0x0054,
-	0x1220, 0x9182, 0x0040, 0x0208, 0x000a, 0x0005, 0xb16a, 0xb16a,
-	0xb16a, 0xb16a, 0xb16a, 0xb16c, 0xb16a, 0xb16a, 0xb21a, 0xb16a,
-	0xb16a, 0xb16a, 0xb16a, 0xb16a, 0xb16a, 0xb16a, 0xb16a, 0xb16a,
-	0xb16a, 0xb2fb, 0x080c, 0x0dc4, 0x0076, 0x00a6, 0x00e6, 0x0096,
-	0x2071, 0x0260, 0x6114, 0x2150, 0x7644, 0x86ff, 0x1904, 0xb215,
+	0x1220, 0x9182, 0x0040, 0x0208, 0x000a, 0x0005, 0xb882, 0xb882,
+	0xb882, 0xb882, 0xb882, 0xb884, 0xb882, 0xb882, 0xb932, 0xb882,
+	0xb882, 0xb882, 0xb882, 0xb882, 0xb882, 0xb882, 0xb882, 0xb882,
+	0xb882, 0xba74, 0x080c, 0x0dc3, 0x0076, 0x00a6, 0x00e6, 0x0096,
+	0x2071, 0x0260, 0x6114, 0x2150, 0x7644, 0x86ff, 0x1904, 0xb92d,
 	0xb67a, 0x96b4, 0x0fff, 0xb780, 0xc7e5, 0xb782, 0x6210, 0x00b6,
 	0x2258, 0xba3c, 0x82ff, 0x0110, 0x8211, 0xba3e, 0x00be, 0x86ff,
-	0x0904, 0xb20e, 0x9694, 0xff00, 0x9284, 0x0c00, 0x0120, 0x7048,
-	0xb096, 0x704c, 0xb092, 0x9284, 0x0300, 0x0904, 0xb20e, 0x9686,
+	0x0904, 0xb926, 0x9694, 0xff00, 0x9284, 0x0c00, 0x0120, 0x7048,
+	0xb096, 0x704c, 0xb092, 0x9284, 0x0300, 0x0904, 0xb926, 0x9686,
 	0x0100, 0x1130, 0x7064, 0x9005, 0x1118, 0xc6c4, 0xb67a, 0x0c38,
-	0x080c, 0x1001, 0x090c, 0x0dc4, 0x2900, 0xb07e, 0xb780, 0x97bd,
+	0x080c, 0x100d, 0x090c, 0x0dc3, 0x2900, 0xb07e, 0xb780, 0x97bd,
 	0x0200, 0xb782, 0xa86b, 0x0103, 0xb06c, 0xa86e, 0xb070, 0xa872,
 	0xb074, 0xa876, 0x7044, 0x9084, 0xf000, 0x9635, 0xae7a, 0x968c,
 	0x0c00, 0x0120, 0x7348, 0xab96, 0x734c, 0xab92, 0x968c, 0x00ff,
@@ -5473,1234 +5700,1444 @@
 	0xa87f, 0x0007, 0x0010, 0xa87f, 0x0000, 0xaf82, 0xb084, 0xa886,
 	0xb088, 0xa88a, 0x901e, 0xd6c4, 0x0190, 0x735c, 0xab8a, 0x83ff,
 	0x0170, 0x938a, 0x0009, 0x0210, 0x2019, 0x0008, 0x0036, 0x2308,
-	0x2019, 0x0018, 0x2011, 0x0026, 0x080c, 0xb54b, 0x003e, 0xd6cc,
+	0x2019, 0x0018, 0x2011, 0x0026, 0x080c, 0xbd68, 0x003e, 0xd6cc,
 	0x01e8, 0x7154, 0xa98e, 0x81ff, 0x01c8, 0x9192, 0x0021, 0x1260,
-	0x8304, 0x9098, 0x0018, 0x2011, 0x002a, 0x080c, 0xb54b, 0x2011,
+	0x8304, 0x9098, 0x0018, 0x2011, 0x002a, 0x080c, 0xbd68, 0x2011,
 	0x0205, 0x2013, 0x0000, 0x0050, 0xb06c, 0xd0fc, 0x0120, 0x2009,
-	0x0020, 0xa98e, 0x0c68, 0x2950, 0x080c, 0xb4ea, 0x080c, 0x191a,
-	0x009e, 0x00ee, 0x00ae, 0x007e, 0x0005, 0x080c, 0xbf3b, 0x0904,
-	0xb178, 0x0cb0, 0x0096, 0x6114, 0x2148, 0xa83c, 0xa940, 0x9105,
-	0x1118, 0xa880, 0xc0dc, 0xa882, 0x6003, 0x0002, 0xa980, 0xd1e4,
-	0x0904, 0xb2f9, 0xd1cc, 0x0904, 0xb2cd, 0xa97c, 0xa86c, 0xd0fc,
-	0x0904, 0xb28e, 0x0016, 0xa880, 0x0006, 0xa884, 0x0006, 0x00a6,
-	0x2150, 0xb178, 0x9184, 0x00ff, 0x90b6, 0x0002, 0x01e0, 0x9086,
-	0x0028, 0x1128, 0xa87f, 0x001c, 0xb07f, 0x001c, 0x00e0, 0xd1dc,
-	0x0158, 0xa87f, 0x0015, 0xb07f, 0x0015, 0x080c, 0xbde9, 0x0118,
-	0xb178, 0xc1dc, 0xb17a, 0x0078, 0xd1d4, 0x0128, 0xa87f, 0x0007,
-	0xb07f, 0x0007, 0x0040, 0xa880, 0xd0ac, 0x0128, 0xa834, 0xa938,
-	0x9115, 0x190c, 0xb137, 0xa880, 0xb082, 0xa894, 0xb096, 0xa890,
-	0xb092, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x001a, 0x20a0, 0x20a9,
-	0x0020, 0x8a06, 0x8006, 0x8007, 0x9094, 0x003f, 0x22e0, 0x9084,
-	0xffc0, 0x9080, 0x001a, 0x2098, 0x4003, 0x00ae, 0x000e, 0xa886,
-	0x000e, 0xc0cc, 0xa882, 0x080c, 0xbe96, 0x001e, 0xa878, 0x0006,
-	0x2148, 0x080c, 0x0fb3, 0x001e, 0x0804, 0xb2f7, 0x0016, 0x00a6,
-	0x2150, 0xb178, 0x9184, 0x00ff, 0x90b6, 0x0002, 0x01e0, 0x9086,
-	0x0028, 0x1128, 0xa87f, 0x001c, 0xb07f, 0x001c, 0x00e0, 0xd1dc,
-	0x0158, 0xa87f, 0x0015, 0xb07f, 0x0015, 0x080c, 0xbde9, 0x0118,
-	0xb178, 0xc1dc, 0xb17a, 0x0078, 0xd1d4, 0x0128, 0xa87f, 0x0007,
-	0xb07f, 0x0007, 0x0040, 0xa880, 0xd0ac, 0x0128, 0xa834, 0xa938,
-	0x9115, 0x190c, 0xb137, 0xa894, 0xb096, 0xa890, 0xb092, 0xa880,
-	0xb082, 0x00ae, 0x080c, 0x0fb3, 0x009e, 0x080c, 0xbe96, 0xa978,
-	0x0016, 0x080c, 0xb53b, 0x001e, 0x0450, 0xa86b, 0x0103, 0xa978,
-	0x9184, 0x00ff, 0x90b6, 0x0002, 0x01b0, 0x9086, 0x0028, 0x1118,
-	0xa87f, 0x001c, 0x00d0, 0xd1dc, 0x0148, 0xa87f, 0x0015, 0x080c,
-	0xbde9, 0x0118, 0xa978, 0xc1dc, 0xa97a, 0x0078, 0xd1d4, 0x0118,
-	0xa87f, 0x0007, 0x0050, 0xa87f, 0x0000, 0xa880, 0xd0ac, 0x0128,
-	0xa834, 0xa938, 0x9115, 0x190c, 0xb137, 0x080c, 0x6934, 0x080c,
-	0x9f18, 0x009e, 0x0005, 0x6114, 0x0096, 0x2148, 0xa980, 0xd1e4,
-	0x190c, 0x193c, 0x009e, 0x0005, 0x080c, 0x8b2b, 0x0010, 0x080c,
-	0x8be7, 0x080c, 0xb955, 0x01f0, 0x0096, 0x6114, 0x2148, 0x080c,
-	0xbb56, 0x1118, 0x080c, 0xa717, 0x00a0, 0xa86b, 0x0103, 0x2009,
-	0x180c, 0x210c, 0xd18c, 0x11b8, 0xd184, 0x1190, 0x6108, 0xa97e,
-	0x918e, 0x0029, 0x1110, 0x080c, 0xd242, 0xa87b, 0x0000, 0x080c,
-	0x6b1d, 0x009e, 0x080c, 0x9f18, 0x080c, 0x8c37, 0x0804, 0x8d06,
-	0xa87f, 0x0004, 0x0c90, 0xa87f, 0x0004, 0x0c78, 0x9182, 0x0054,
-	0x1220, 0x9182, 0x0040, 0x0208, 0x000a, 0x0005, 0xb352, 0xb352,
-	0xb352, 0xb352, 0xb352, 0xb354, 0xb352, 0xb352, 0xb352, 0xb352,
-	0xb352, 0xb352, 0xb352, 0xb352, 0xb352, 0xb352, 0xb352, 0xb352,
-	0xb352, 0xb352, 0x080c, 0x0dc4, 0x080c, 0x55af, 0x0528, 0x7144,
-	0x918c, 0x0fff, 0x0066, 0x2130, 0x080c, 0xbf3b, 0x006e, 0x11f0,
-	0x6014, 0x9016, 0xd1c4, 0x0118, 0x7264, 0x9294, 0x00ff, 0x0096,
-	0x904d, 0x0188, 0xa87f, 0x0000, 0xa868, 0x9086, 0x0139, 0x0128,
-	0xa86b, 0x0103, 0xa97a, 0xaa9a, 0x0030, 0xa89b, 0x4000, 0xa99e,
-	0xaaa2, 0x080c, 0x6b1d, 0x009e, 0x0804, 0x9f18, 0x0005, 0x9182,
-	0x0085, 0x0002, 0xb391, 0xb38f, 0xb38f, 0xb39d, 0xb38f, 0xb38f,
-	0xb38f, 0xb38f, 0xb38f, 0xb38f, 0xb38f, 0xb38f, 0xb38f, 0x080c,
-	0x0dc4, 0x6003, 0x000b, 0x6106, 0x080c, 0x86d0, 0x0126, 0x2091,
-	0x8000, 0x080c, 0x8c37, 0x012e, 0x0005, 0x0026, 0x0056, 0x00d6,
-	0x00e6, 0x2071, 0x0260, 0x7224, 0x6216, 0x7220, 0x080c, 0xb943,
-	0x01c8, 0x2268, 0x6800, 0x9086, 0x0000, 0x01a0, 0x6010, 0x6d10,
-	0x952e, 0x1180, 0x00c6, 0x2d60, 0x00d6, 0x080c, 0xb5b8, 0x00de,
-	0x00ce, 0x0128, 0x080c, 0xb578, 0x6007, 0x0086, 0x0028, 0x080c,
-	0xb5a7, 0x0dc0, 0x6007, 0x0087, 0x6003, 0x0001, 0x080c, 0x86d0,
-	0x080c, 0x8c37, 0x00ee, 0x00de, 0x005e, 0x002e, 0x0005, 0x9186,
-	0x0013, 0x1160, 0x6004, 0x908a, 0x0085, 0x0a0c, 0x0dc4, 0x908a,
-	0x0092, 0x1a0c, 0x0dc4, 0x9082, 0x0085, 0x00e2, 0x9186, 0x0027,
-	0x0120, 0x9186, 0x0014, 0x0108, 0x0005, 0x080c, 0x8b2b, 0x0096,
-	0x6014, 0x2048, 0x080c, 0xb955, 0x0140, 0xa86b, 0x0103, 0xa87b,
-	0x0000, 0xa87f, 0x0029, 0x080c, 0x6b1d, 0x009e, 0x080c, 0x9f42,
-	0x0804, 0x8c37, 0xb407, 0xb409, 0xb409, 0xb407, 0xb407, 0xb407,
-	0xb407, 0xb407, 0xb407, 0xb407, 0xb407, 0xb407, 0xb407, 0x080c,
-	0x0dc4, 0x080c, 0x8b2b, 0x080c, 0x9f42, 0x080c, 0x8c37, 0x0005,
-	0x9186, 0x0013, 0x1128, 0x6004, 0x9082, 0x0085, 0x2008, 0x04ba,
-	0x9186, 0x0027, 0x11f8, 0x080c, 0x8b2b, 0x080c, 0x3066, 0x080c,
-	0xbf0d, 0x0096, 0x6014, 0x2048, 0x080c, 0xb955, 0x0150, 0xa86b,
-	0x0103, 0xa87b, 0x0000, 0xa87f, 0x0029, 0x080c, 0x6b1d, 0x080c,
-	0xbb39, 0x009e, 0x080c, 0x9f18, 0x080c, 0x8c37, 0x0005, 0x080c,
-	0x9fa3, 0x0ce0, 0x9186, 0x0014, 0x1dd0, 0x080c, 0x8b2b, 0x0096,
-	0x6014, 0x2048, 0x080c, 0xb955, 0x0d60, 0xa86b, 0x0103, 0xa87b,
-	0x0000, 0xa87f, 0x0006, 0xa884, 0xc0ec, 0xa886, 0x08f0, 0xb45e,
-	0xb45c, 0xb45c, 0xb45c, 0xb45c, 0xb45c, 0xb469, 0xb45c, 0xb45c,
-	0xb45c, 0xb45c, 0xb45c, 0xb45c, 0x080c, 0x0dc4, 0x080c, 0x8b2b,
-	0x2001, 0x1964, 0x2004, 0x601a, 0x6003, 0x000c, 0x080c, 0x8c37,
-	0x0005, 0x080c, 0x8b2b, 0x2001, 0x1964, 0x2004, 0x601a, 0x6003,
-	0x000e, 0x080c, 0x8c37, 0x0005, 0x9182, 0x0092, 0x1220, 0x9182,
-	0x0085, 0x0208, 0x0012, 0x0804, 0x9fa3, 0xb48a, 0xb48a, 0xb48a,
-	0xb48a, 0xb48c, 0xb4a4, 0xb48a, 0xb48a, 0xb48a, 0xb48a, 0xb48a,
-	0xb48a, 0xb48a, 0x080c, 0x0dc4, 0x0096, 0x080c, 0xb955, 0x1118,
-	0x080c, 0xbb39, 0x0068, 0x6014, 0x2048, 0xa880, 0xd0e4, 0x1110,
-	0x080c, 0xbb39, 0xa86b, 0x0103, 0x080c, 0xbed3, 0x080c, 0x6b1d,
-	0x080c, 0x9f18, 0x009e, 0x0005, 0x0096, 0x6014, 0x2048, 0x080c,
-	0xb955, 0x01c8, 0xa86b, 0x0103, 0xa884, 0xd0b4, 0x0128, 0xc0ec,
-	0xa886, 0xa87f, 0x0006, 0x0048, 0xd0bc, 0x0118, 0xa87f, 0x0002,
-	0x0020, 0xa87f, 0x0005, 0x080c, 0xbc45, 0xa87b, 0x0000, 0x080c,
-	0x6b1d, 0x080c, 0xbb39, 0x009e, 0x0804, 0x9f18, 0x0016, 0x0096,
-	0x6014, 0x2048, 0x080c, 0xb955, 0x0140, 0xa86b, 0x0103, 0xa87f,
-	0x0028, 0xa87b, 0x0000, 0x080c, 0x6b1d, 0x009e, 0x001e, 0x9186,
-	0x0013, 0x0148, 0x9186, 0x0014, 0x0130, 0x9186, 0x0027, 0x0118,
-	0x080c, 0x9fa3, 0x0030, 0x080c, 0x8b2b, 0x080c, 0x9f42, 0x080c,
-	0x8c37, 0x0005, 0x0056, 0x0066, 0x0096, 0x00a6, 0x2029, 0x0001,
-	0x9182, 0x0101, 0x1208, 0x0010, 0x2009, 0x0100, 0x2130, 0x8304,
-	0x9098, 0x0018, 0x2009, 0x0020, 0x2011, 0x002a, 0x080c, 0xb54b,
-	0x96b2, 0x0020, 0xb004, 0x904d, 0x0110, 0x080c, 0x0fb3, 0x080c,
-	0x1001, 0x0520, 0x8528, 0xa86b, 0x0110, 0xa86f, 0x0000, 0x2920,
-	0xb406, 0x968a, 0x003d, 0x1228, 0x2608, 0x2011, 0x001c, 0x0499,
-	0x00a8, 0x96b2, 0x003c, 0x2009, 0x003c, 0x2950, 0x2011, 0x001c,
-	0x0451, 0x0c28, 0x2001, 0x0205, 0x2003, 0x0000, 0x00ae, 0x852f,
-	0x95ad, 0x0003, 0xb56a, 0x95ac, 0x0000, 0x0048, 0x2001, 0x0205,
-	0x2003, 0x0000, 0x00ae, 0x852f, 0x95ad, 0x0003, 0xb56a, 0x009e,
-	0x006e, 0x005e, 0x0005, 0x00a6, 0x89ff, 0x0158, 0xa804, 0x9055,
-	0x0130, 0xa807, 0x0000, 0x080c, 0x6b1d, 0x2a48, 0x0cb8, 0x080c,
-	0x6b1d, 0x00ae, 0x0005, 0x00f6, 0x2079, 0x0200, 0x7814, 0x9085,
-	0x0080, 0x7816, 0xd184, 0x0108, 0x8108, 0x810c, 0x20a9, 0x0001,
-	0xa860, 0x20e8, 0xa85c, 0x9200, 0x20a0, 0x20e1, 0x0000, 0x2300,
-	0x9e00, 0x2098, 0x4003, 0x8318, 0x9386, 0x0020, 0x1148, 0x2018,
-	0x2300, 0x9e00, 0x2098, 0x7814, 0x8000, 0x9085, 0x0080, 0x7816,
-	0x8109, 0x1d80, 0x7814, 0x9084, 0xff7f, 0x7816, 0x00fe, 0x0005,
-	0x6920, 0x9186, 0x0003, 0x0118, 0x9186, 0x0002, 0x11d8, 0x00c6,
-	0x00d6, 0x00e6, 0x2d60, 0x0096, 0x6014, 0x2048, 0x080c, 0xb955,
-	0x0158, 0x0089, 0x2001, 0x0006, 0xa984, 0xc1d5, 0x080c, 0x6d45,
-	0x080c, 0x6b11, 0x080c, 0xbb39, 0x009e, 0x080c, 0x9f42, 0x00ee,
-	0x00de, 0x00ce, 0x0005, 0xa880, 0xd0cc, 0x0140, 0x0096, 0xa87c,
-	0x2048, 0x080c, 0x0fb3, 0x009e, 0xa87f, 0x0000, 0x0005, 0x00c6,
+	0x0020, 0xa98e, 0x0c68, 0x2950, 0x080c, 0xbd07, 0x080c, 0x1962,
+	0x009e, 0x00ee, 0x00ae, 0x007e, 0x0005, 0x080c, 0xc916, 0x0904,
+	0xb890, 0x0cb0, 0x2001, 0x1964, 0x2004, 0x6042, 0x0096, 0x6114,
+	0x2148, 0xa83c, 0xa940, 0x9105, 0x1118, 0xa880, 0xc0dc, 0xa882,
+	0x6003, 0x0002, 0xa980, 0xd1e4, 0x0904, 0xba6f, 0x6043, 0x0000,
+	0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc, 0x1500, 0xd1cc,
+	0x0904, 0xba3e, 0xa97c, 0xa86c, 0xd0fc, 0x0904, 0xb9ff, 0x0016,
+	0xa880, 0x0006, 0xa884, 0x0006, 0x00a6, 0x2150, 0xb178, 0x9184,
+	0x00ff, 0x90b6, 0x0002, 0x0904, 0xb9cc, 0x9086, 0x0028, 0x1904,
+	0xb9b8, 0xa87f, 0x001c, 0xb07f, 0x001c, 0x0804, 0xb9d4, 0x6024,
+	0xd0f4, 0x11d0, 0xa838, 0xaa34, 0x9205, 0x09c8, 0xa838, 0xaa94,
+	0x9206, 0x1120, 0xa890, 0xaa34, 0x9206, 0x0988, 0x6024, 0xd0d4,
+	0x1148, 0xa9b0, 0xa834, 0x9102, 0x603a, 0xa9b4, 0xa838, 0x9103,
+	0x603e, 0x6024, 0xc0f5, 0x6026, 0x6010, 0x00b6, 0x2058, 0xb83c,
+	0x8000, 0xb83e, 0x00be, 0x9006, 0xa87a, 0xa896, 0xa892, 0xa880,
+	0xc0e4, 0xa882, 0xd0cc, 0x0140, 0xc0cc, 0xa882, 0x0096, 0xa87c,
+	0x2048, 0x080c, 0x0fbf, 0x009e, 0x6218, 0x82ff, 0x0168, 0x2001,
+	0x1964, 0x2004, 0x9202, 0x1240, 0xa86b, 0x0103, 0xa87f, 0x0006,
+	0xa87b, 0x0000, 0x0804, 0xba66, 0x080c, 0xc4fe, 0x0804, 0xba6f,
+	0xd1dc, 0x0158, 0xa87f, 0x0015, 0xb07f, 0x0015, 0x080c, 0xc792,
+	0x0118, 0xb178, 0xc1dc, 0xb17a, 0x0078, 0xd1d4, 0x0128, 0xa87f,
+	0x0007, 0xb07f, 0x0007, 0x0040, 0xa880, 0xd0ac, 0x0128, 0xa834,
+	0xa938, 0x9115, 0x190c, 0xb84f, 0xa880, 0xb082, 0xa894, 0xb096,
+	0xa890, 0xb092, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x001a, 0x20a0,
+	0x20a9, 0x0020, 0x8a06, 0x8006, 0x8007, 0x9094, 0x003f, 0x22e0,
+	0x9084, 0xffc0, 0x9080, 0x001a, 0x2098, 0x4003, 0x00ae, 0x000e,
+	0xa886, 0x000e, 0xc0cc, 0xa882, 0x080c, 0xc86c, 0x001e, 0xa878,
+	0x0006, 0x2148, 0x080c, 0x0fbf, 0x001e, 0x0804, 0xba6b, 0x0016,
+	0x00a6, 0x2150, 0xb178, 0x9184, 0x00ff, 0x90b6, 0x0002, 0x01e0,
+	0x9086, 0x0028, 0x1128, 0xa87f, 0x001c, 0xb07f, 0x001c, 0x00e0,
+	0xd1dc, 0x0158, 0xa87f, 0x0015, 0xb07f, 0x0015, 0x080c, 0xc792,
+	0x0118, 0xb178, 0xc1dc, 0xb17a, 0x0078, 0xd1d4, 0x0128, 0xa87f,
+	0x0007, 0xb07f, 0x0007, 0x0040, 0xa880, 0xd0ac, 0x0128, 0xa834,
+	0xa938, 0x9115, 0x190c, 0xb84f, 0xa894, 0xb096, 0xa890, 0xb092,
+	0xa880, 0xb082, 0x00ae, 0x080c, 0x0fbf, 0x009e, 0x080c, 0xc86c,
+	0xa978, 0x0016, 0x080c, 0xbd58, 0x001e, 0x0468, 0xa86b, 0x0103,
+	0xa978, 0x9184, 0x00ff, 0x90b6, 0x0002, 0x01b0, 0x9086, 0x0028,
+	0x1118, 0xa87f, 0x001c, 0x00d0, 0xd1dc, 0x0148, 0xa87f, 0x0015,
+	0x080c, 0xc792, 0x0118, 0xa978, 0xc1dc, 0xa97a, 0x0078, 0xd1d4,
+	0x0118, 0xa87f, 0x0007, 0x0050, 0xa87f, 0x0000, 0xa880, 0xd0ac,
+	0x0128, 0xa834, 0xa938, 0x9115, 0x190c, 0xb84f, 0xa978, 0x0016,
+	0x080c, 0x6a1c, 0x001e, 0xd1e4, 0x1120, 0x080c, 0xa39d, 0x009e,
+	0x0005, 0x080c, 0xc4c4, 0x0cd8, 0x6114, 0x0096, 0x2148, 0xa980,
+	0xd1e4, 0x190c, 0x1984, 0x009e, 0x0005, 0x080c, 0x8d2c, 0x0010,
+	0x080c, 0x8de8, 0x080c, 0xc1cd, 0x01f0, 0x0096, 0x6114, 0x2148,
+	0x080c, 0xc3d1, 0x1118, 0x080c, 0xadb3, 0x00a0, 0xa86b, 0x0103,
+	0x2009, 0x180c, 0x210c, 0xd18c, 0x11b8, 0xd184, 0x1190, 0x6108,
+	0xa97e, 0x918e, 0x0029, 0x1110, 0x080c, 0xdfcf, 0xa87b, 0x0000,
+	0x080c, 0x6c02, 0x009e, 0x080c, 0xa39d, 0x080c, 0x8e38, 0x0804,
+	0x8f0e, 0xa87f, 0x0004, 0x0c90, 0xa87f, 0x0004, 0x0c78, 0x9182,
+	0x0054, 0x1220, 0x9182, 0x0040, 0x0208, 0x000a, 0x0005, 0xbacb,
+	0xbacb, 0xbacb, 0xbacb, 0xbacb, 0xbacd, 0xbacb, 0xbacb, 0xbacb,
+	0xbacb, 0xbacb, 0xbacb, 0xbacb, 0xbacb, 0xbacb, 0xbacb, 0xbacb,
+	0xbacb, 0xbacb, 0xbacb, 0x080c, 0x0dc3, 0x080c, 0x566c, 0x0528,
+	0x7144, 0x918c, 0x0fff, 0x0066, 0x2130, 0x080c, 0xc916, 0x006e,
+	0x11f0, 0x6014, 0x9016, 0xd1c4, 0x0118, 0x7264, 0x9294, 0x00ff,
+	0x0096, 0x904d, 0x0188, 0xa87f, 0x0000, 0xa868, 0x9086, 0x0139,
+	0x0128, 0xa86b, 0x0103, 0xa97a, 0xaa9a, 0x0030, 0xa89b, 0x4000,
+	0xa99e, 0xaaa2, 0x080c, 0x6c02, 0x009e, 0x0804, 0xa39d, 0x0005,
+	0x9182, 0x0085, 0x0002, 0xbb0a, 0xbb08, 0xbb08, 0xbb16, 0xbb08,
+	0xbb08, 0xbb08, 0xbb08, 0xbb08, 0xbb08, 0xbb08, 0xbb08, 0xbb08,
+	0x080c, 0x0dc3, 0x6003, 0x0001, 0x6106, 0x080c, 0x88a1, 0x0126,
+	0x2091, 0x8000, 0x080c, 0x8e38, 0x012e, 0x0005, 0x0026, 0x0056,
+	0x00d6, 0x00e6, 0x2071, 0x0260, 0x7224, 0x6216, 0x7220, 0x080c,
+	0xc1bb, 0x01f8, 0x2268, 0x6800, 0x9086, 0x0000, 0x01d0, 0x6010,
+	0x6d10, 0x952e, 0x11b0, 0x00c6, 0x2d60, 0x00d6, 0x080c, 0xbdd8,
+	0x00de, 0x00ce, 0x0158, 0x702c, 0xd084, 0x1118, 0x080c, 0xbd95,
+	0x0010, 0x6803, 0x0002, 0x6007, 0x0086, 0x0028, 0x080c, 0xbdc4,
+	0x0d90, 0x6007, 0x0087, 0x6003, 0x0001, 0x080c, 0x88a1, 0x080c,
+	0x8e38, 0x7220, 0x080c, 0xc1bb, 0x0178, 0x6810, 0x00b6, 0x2058,
+	0xb800, 0x00be, 0xd0bc, 0x0140, 0x6824, 0xd0ec, 0x0128, 0x00c6,
+	0x2d60, 0x080c, 0xc4fe, 0x00ce, 0x00ee, 0x00de, 0x005e, 0x002e,
+	0x0005, 0x9186, 0x0013, 0x1160, 0x6004, 0x908a, 0x0085, 0x0a0c,
+	0x0dc3, 0x908a, 0x0092, 0x1a0c, 0x0dc3, 0x9082, 0x0085, 0x00e2,
+	0x9186, 0x0027, 0x0120, 0x9186, 0x0014, 0x0108, 0x0005, 0x080c,
+	0x8d2c, 0x0096, 0x6014, 0x2048, 0x080c, 0xc1cd, 0x0140, 0xa86b,
+	0x0103, 0xa87b, 0x0000, 0xa87f, 0x0029, 0x080c, 0x6c02, 0x009e,
+	0x080c, 0xa3cf, 0x0804, 0x8e38, 0xbb99, 0xbb9b, 0xbb9b, 0xbb99,
+	0xbb99, 0xbb99, 0xbb99, 0xbb99, 0xbb99, 0xbb99, 0xbb99, 0xbb99,
+	0xbb99, 0x080c, 0x0dc3, 0x080c, 0x8d2c, 0x080c, 0xa3cf, 0x080c,
+	0x8e38, 0x0005, 0x9186, 0x0013, 0x1128, 0x6004, 0x9082, 0x0085,
+	0x2008, 0x04b8, 0x9186, 0x0027, 0x11f8, 0x080c, 0x8d2c, 0x080c,
+	0x3102, 0x080c, 0xc8e3, 0x0096, 0x6014, 0x2048, 0x080c, 0xc1cd,
+	0x0150, 0xa86b, 0x0103, 0xa87b, 0x0000, 0xa87f, 0x0029, 0x080c,
+	0x6c02, 0x080c, 0xc3b4, 0x009e, 0x080c, 0xa39d, 0x080c, 0x8e38,
+	0x0005, 0x080c, 0xa434, 0x0ce0, 0x9186, 0x0014, 0x1dd0, 0x080c,
+	0x8d2c, 0x0096, 0x6014, 0x2048, 0x080c, 0xc1cd, 0x0d60, 0xa86b,
+	0x0103, 0xa87b, 0x0000, 0xa87f, 0x0006, 0xa884, 0xc0ec, 0xa886,
+	0x08f0, 0x0002, 0xbbf1, 0xbbef, 0xbbef, 0xbbef, 0xbbef, 0xbbef,
+	0xbc09, 0xbbef, 0xbbef, 0xbbef, 0xbbef, 0xbbef, 0xbbef, 0x080c,
+	0x0dc3, 0x080c, 0x8d2c, 0x6034, 0x908c, 0xff00, 0x810f, 0x9186,
+	0x0039, 0x0118, 0x9186, 0x0035, 0x1118, 0x2001, 0x1962, 0x0010,
+	0x2001, 0x1963, 0x2004, 0x601a, 0x6003, 0x000c, 0x080c, 0x8e38,
+	0x0005, 0x080c, 0x8d2c, 0x6034, 0x908c, 0xff00, 0x810f, 0x9186,
+	0x0039, 0x0118, 0x9186, 0x0035, 0x1118, 0x2001, 0x1962, 0x0010,
+	0x2001, 0x1963, 0x2004, 0x601a, 0x6003, 0x000e, 0x080c, 0x8e38,
+	0x0005, 0x9182, 0x0092, 0x1220, 0x9182, 0x0085, 0x0208, 0x0012,
+	0x0804, 0xa434, 0xbc37, 0xbc37, 0xbc37, 0xbc37, 0xbc39, 0xbc86,
+	0xbc37, 0xbc37, 0xbc37, 0xbc37, 0xbc37, 0xbc37, 0xbc37, 0x080c,
+	0x0dc3, 0x0096, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc,
+	0x0168, 0x6034, 0x908c, 0xff00, 0x810f, 0x9186, 0x0039, 0x0118,
+	0x9186, 0x0035, 0x1118, 0x009e, 0x0804, 0xbc9a, 0x080c, 0xc1cd,
+	0x1118, 0x080c, 0xc3b4, 0x0068, 0x6014, 0x2048, 0xa880, 0xd0e4,
+	0x1110, 0x080c, 0xc3b4, 0xa86b, 0x0103, 0x080c, 0xc8a9, 0x080c,
+	0x6c02, 0x00d6, 0x2c68, 0x080c, 0xa347, 0x01d0, 0x6003, 0x0001,
+	0x6007, 0x001e, 0x600b, 0xffff, 0x2009, 0x026e, 0x210c, 0x613a,
+	0x2009, 0x026f, 0x210c, 0x613e, 0x6910, 0x6112, 0x080c, 0xc640,
+	0x6954, 0x6156, 0x6023, 0x0001, 0x080c, 0x88a1, 0x080c, 0x8e38,
+	0x2d60, 0x00de, 0x080c, 0xa39d, 0x009e, 0x0005, 0x6010, 0x00b6,
+	0x2058, 0xb800, 0x00be, 0xd0bc, 0x05a0, 0x6034, 0x908c, 0xff00,
+	0x810f, 0x9186, 0x0035, 0x0130, 0x9186, 0x001e, 0x0118, 0x9186,
+	0x0039, 0x1538, 0x00d6, 0x2c68, 0x080c, 0xc83f, 0x11f0, 0x080c,
+	0xa347, 0x01d8, 0x6106, 0x6003, 0x0001, 0x6023, 0x0001, 0x6910,
+	0x6112, 0x692c, 0x612e, 0x6930, 0x6132, 0x6934, 0x918c, 0x00ff,
+	0x6136, 0x6938, 0x613a, 0x693c, 0x613e, 0x6954, 0x6156, 0x080c,
+	0xc640, 0x080c, 0x88a1, 0x080c, 0x8e38, 0x2d60, 0x00de, 0x0804,
+	0xa39d, 0x0096, 0x6014, 0x2048, 0x080c, 0xc1cd, 0x01c8, 0xa86b,
+	0x0103, 0xa884, 0xd0b4, 0x0128, 0xc0ec, 0xa886, 0xa87f, 0x0006,
+	0x0048, 0xd0bc, 0x0118, 0xa87f, 0x0002, 0x0020, 0xa87f, 0x0005,
+	0x080c, 0xc4c0, 0xa87b, 0x0000, 0x080c, 0x6c02, 0x080c, 0xc3b4,
+	0x009e, 0x0804, 0xa39d, 0x0016, 0x0096, 0x6014, 0x2048, 0x080c,
+	0xc1cd, 0x0140, 0xa86b, 0x0103, 0xa87f, 0x0028, 0xa87b, 0x0000,
+	0x080c, 0x6c02, 0x009e, 0x001e, 0x9186, 0x0013, 0x0148, 0x9186,
+	0x0014, 0x0130, 0x9186, 0x0027, 0x0118, 0x080c, 0xa434, 0x0030,
+	0x080c, 0x8d2c, 0x080c, 0xa3cf, 0x080c, 0x8e38, 0x0005, 0x0056,
+	0x0066, 0x0096, 0x00a6, 0x2029, 0x0001, 0x9182, 0x0101, 0x1208,
+	0x0010, 0x2009, 0x0100, 0x2130, 0x8304, 0x9098, 0x0018, 0x2009,
+	0x0020, 0x2011, 0x002a, 0x080c, 0xbd68, 0x96b2, 0x0020, 0xb004,
+	0x904d, 0x0110, 0x080c, 0x0fbf, 0x080c, 0x100d, 0x0520, 0x8528,
+	0xa86b, 0x0110, 0xa86f, 0x0000, 0x2920, 0xb406, 0x968a, 0x003d,
+	0x1228, 0x2608, 0x2011, 0x001c, 0x0499, 0x00a8, 0x96b2, 0x003c,
+	0x2009, 0x003c, 0x2950, 0x2011, 0x001c, 0x0451, 0x0c28, 0x2001,
+	0x0205, 0x2003, 0x0000, 0x00ae, 0x852f, 0x95ad, 0x0003, 0xb56a,
+	0x95ac, 0x0000, 0x0048, 0x2001, 0x0205, 0x2003, 0x0000, 0x00ae,
+	0x852f, 0x95ad, 0x0003, 0xb56a, 0x009e, 0x006e, 0x005e, 0x0005,
+	0x00a6, 0x89ff, 0x0158, 0xa804, 0x9055, 0x0130, 0xa807, 0x0000,
+	0x080c, 0x6c02, 0x2a48, 0x0cb8, 0x080c, 0x6c02, 0x00ae, 0x0005,
+	0x00f6, 0x2079, 0x0200, 0x7814, 0x9085, 0x0080, 0x7816, 0xd184,
+	0x0108, 0x8108, 0x810c, 0x20a9, 0x0001, 0xa860, 0x20e8, 0xa85c,
+	0x9200, 0x20a0, 0x20e1, 0x0000, 0x2300, 0x9e00, 0x2098, 0x4003,
+	0x8318, 0x9386, 0x0020, 0x1148, 0x2018, 0x2300, 0x9e00, 0x2098,
+	0x7814, 0x8000, 0x9085, 0x0080, 0x7816, 0x8109, 0x1d80, 0x7814,
+	0x9084, 0xff7f, 0x7816, 0x00fe, 0x0005, 0x6920, 0x9186, 0x0003,
+	0x0118, 0x9186, 0x0002, 0x11d8, 0x00c6, 0x00d6, 0x00e6, 0x2d60,
+	0x0096, 0x6014, 0x2048, 0x080c, 0xc1cd, 0x0158, 0x0089, 0x2001,
+	0x0006, 0xa984, 0xc1d5, 0x080c, 0x6e4b, 0x080c, 0x6bf5, 0x080c,
+	0xc3b4, 0x009e, 0x080c, 0xa3cf, 0x00ee, 0x00de, 0x00ce, 0x0005,
+	0xa880, 0xd0cc, 0x0140, 0x0096, 0xa87c, 0x2048, 0x080c, 0x0fbf,
+	0x009e, 0xa87f, 0x0000, 0x0005, 0x00c6, 0x702c, 0xd084, 0x1170,
 	0x6008, 0x2060, 0x6020, 0x9086, 0x0002, 0x1140, 0x6104, 0x9186,
 	0x0085, 0x0118, 0x9186, 0x008b, 0x1108, 0x9006, 0x00ce, 0x0005,
 	0x0066, 0x0126, 0x2091, 0x8000, 0x2031, 0x0001, 0x6020, 0x9084,
 	0x000f, 0x0083, 0x012e, 0x006e, 0x0005, 0x0126, 0x2091, 0x8000,
 	0x0066, 0x2031, 0x0000, 0x6020, 0x9084, 0x000f, 0x001b, 0x006e,
-	0x012e, 0x0005, 0xb5ef, 0xb5ef, 0xb5ea, 0xb60f, 0xb5e1, 0xb5ea,
-	0xb5e3, 0xb5ea, 0xb5ea, 0xb5e1, 0xb5ea, 0xb5ea, 0xb5ea, 0xb5e1,
-	0xb5e1, 0x080c, 0x0dc4, 0x0036, 0x2019, 0x0010, 0x080c, 0xccbc,
+	0x012e, 0x0005, 0xbe0f, 0xbe0f, 0xbe0a, 0xbe31, 0xbe01, 0xbe0a,
+	0xbe31, 0xbe0a, 0xbe0a, 0xbe01, 0xbe0a, 0xbe0a, 0xbe0a, 0xbe01,
+	0xbe01, 0x080c, 0x0dc3, 0x0036, 0x2019, 0x0010, 0x080c, 0xd861,
 	0x003e, 0x0005, 0x9006, 0x0005, 0x9085, 0x0001, 0x0005, 0x0096,
-	0x6014, 0x2048, 0x080c, 0xb955, 0x01c0, 0xa868, 0x9086, 0x0139,
-	0x1128, 0xa87f, 0x0005, 0xa887, 0x0000, 0x0028, 0x900e, 0x2001,
-	0x0005, 0x080c, 0x6d45, 0x080c, 0xbc45, 0x080c, 0x6b11, 0x080c,
-	0x9f42, 0x9085, 0x0001, 0x009e, 0x0005, 0x9006, 0x0ce0, 0x6000,
-	0x908a, 0x0010, 0x1a0c, 0x0dc4, 0x0002, 0xb625, 0xb655, 0xb627,
-	0xb676, 0xb650, 0xb625, 0xb5ea, 0xb5ef, 0xb5ef, 0xb5ea, 0xb5ea,
-	0xb5ea, 0xb5ea, 0xb5ea, 0xb5ea, 0xb5ea, 0x080c, 0x0dc4, 0x86ff,
-	0x1520, 0x6020, 0x9086, 0x0006, 0x0500, 0x0096, 0x6014, 0x2048,
-	0x080c, 0xb955, 0x0168, 0xa880, 0xd0cc, 0x0140, 0x0096, 0xc0cc,
-	0xa882, 0xa87c, 0x2048, 0x080c, 0x0fb3, 0x009e, 0x080c, 0xbc45,
-	0x009e, 0x080c, 0xbead, 0x6007, 0x0085, 0x6003, 0x000b, 0x6023,
-	0x0002, 0x080c, 0x86d0, 0x080c, 0x8c37, 0x9085, 0x0001, 0x0005,
-	0x0066, 0x080c, 0x1950, 0x006e, 0x0890, 0x00e6, 0x2071, 0x19c4,
-	0x7024, 0x9c06, 0x1120, 0x080c, 0x98ee, 0x00ee, 0x0840, 0x6020,
-	0x9084, 0x000f, 0x9086, 0x0006, 0x1150, 0x0086, 0x0096, 0x2049,
-	0x0001, 0x2c40, 0x080c, 0x9a12, 0x009e, 0x008e, 0x0010, 0x080c,
-	0x980e, 0x00ee, 0x1904, 0xb627, 0x0804, 0xb5ea, 0x0036, 0x00e6,
-	0x2071, 0x19c4, 0x703c, 0x9c06, 0x1138, 0x901e, 0x080c, 0x9964,
-	0x00ee, 0x003e, 0x0804, 0xb627, 0x080c, 0x9b40, 0x00ee, 0x003e,
-	0x1904, 0xb627, 0x0804, 0xb5ea, 0x00c6, 0x6020, 0x9084, 0x000f,
-	0x0013, 0x00ce, 0x0005, 0xb6a9, 0xb776, 0xb8a8, 0xb6b3, 0x9f42,
-	0xb6a9, 0xccb6, 0xbf15, 0xb776, 0xb6a2, 0xb91a, 0xb6a2, 0xb6a2,
-	0xb6a2, 0xb6a2, 0x080c, 0x0dc4, 0x080c, 0xbb56, 0x1110, 0x080c,
-	0xa717, 0x0005, 0x080c, 0x8b2b, 0x080c, 0x8c37, 0x0804, 0x9f18,
-	0x601b, 0x0001, 0x0005, 0x080c, 0xb955, 0x0130, 0x6014, 0x0096,
-	0x2048, 0x2c00, 0xa89a, 0x009e, 0x6000, 0x908a, 0x0010, 0x1a0c,
-	0x0dc4, 0x0002, 0xb6d2, 0xb6d4, 0xb6f8, 0xb70c, 0xb732, 0xb6d2,
-	0xb6a9, 0xb6a9, 0xb6a9, 0xb70c, 0xb70c, 0xb6d2, 0xb6d2, 0xb6d2,
-	0xb6d2, 0xb716, 0x080c, 0x0dc4, 0x00e6, 0x6014, 0x0096, 0x2048,
-	0xa884, 0xc0b5, 0xa886, 0x009e, 0x2071, 0x19c4, 0x7024, 0x9c06,
-	0x01a0, 0x080c, 0x980e, 0x080c, 0xbead, 0x6007, 0x0085, 0x6003,
-	0x000b, 0x6023, 0x0002, 0x2001, 0x1964, 0x2004, 0x601a, 0x080c,
-	0x86d0, 0x080c, 0x8c37, 0x00ee, 0x0005, 0x601b, 0x0001, 0x0cd8,
-	0x0096, 0x6014, 0x2048, 0xa884, 0xc0b5, 0xa886, 0x009e, 0x080c,
-	0xbead, 0x6007, 0x0085, 0x6003, 0x000b, 0x6023, 0x0002, 0x080c,
-	0x86d0, 0x080c, 0x8c37, 0x0005, 0x0096, 0x601b, 0x0001, 0x6014,
-	0x2048, 0xa884, 0xc0b5, 0xa886, 0x009e, 0x0005, 0x080c, 0x55af,
-	0x01b8, 0x6014, 0x0096, 0x904d, 0x0190, 0xa868, 0xa86b, 0x0103,
-	0xa87f, 0x0006, 0x9086, 0x0139, 0x1150, 0xa86b, 0x0139, 0xa87f,
-	0x0030, 0xa89b, 0x4005, 0xa89f, 0x0004, 0x080c, 0x6b1d, 0x009e,
-	0x0804, 0x9f18, 0x6014, 0x0096, 0x904d, 0x05d8, 0xa980, 0xd1e4,
-	0x05c0, 0x2001, 0x180f, 0x2004, 0xd0c4, 0x0110, 0x009e, 0x0005,
-	0xa888, 0x009e, 0x8003, 0x800b, 0x810b, 0x9108, 0x611a, 0x2001,
-	0x0030, 0x2c08, 0x0026, 0x621c, 0x080c, 0x1553, 0x2001, 0x030c,
-	0x2004, 0x002e, 0x9086, 0x0041, 0x1198, 0x6014, 0x0096, 0x904d,
-	0x090c, 0x0dc4, 0xa884, 0xd0f4, 0x1130, 0xc0f5, 0xa886, 0x009e,
-	0x601b, 0x0002, 0x0068, 0x009e, 0x00c6, 0x080c, 0x2217, 0x00ce,
-	0x6000, 0x9086, 0x0004, 0x1120, 0x2009, 0x0048, 0x080c, 0x9f88,
-	0x0005, 0x009e, 0x080c, 0x1950, 0x0804, 0xb6f8, 0x6000, 0x908a,
-	0x0010, 0x1a0c, 0x0dc4, 0x000b, 0x0005, 0xb78d, 0xb6b0, 0xb78f,
-	0xb78d, 0xb78f, 0xb78d, 0xb6aa, 0xb78d, 0xb6a4, 0xb6a4, 0xb78d,
-	0xb78d, 0xb78d, 0xb78d, 0xb78d, 0xb78d, 0x080c, 0x0dc4, 0x6010,
-	0x00b6, 0x2058, 0xb804, 0x9084, 0x00ff, 0x00be, 0x908a, 0x000c,
-	0x1a0c, 0x0dc4, 0x00b6, 0x0013, 0x00be, 0x0005, 0xb7aa, 0xb86e,
-	0xb7ac, 0xb7e1, 0xb7ac, 0xb7e1, 0xb7ac, 0xb7ba, 0xb7aa, 0xb7e1,
-	0xb7aa, 0xb7d0, 0x080c, 0x0dc4, 0x6004, 0x908e, 0x0016, 0x0568,
-	0x908e, 0x0004, 0x0550, 0x908e, 0x0002, 0x0538, 0x908e, 0x0052,
-	0x0904, 0xb86a, 0x6004, 0x080c, 0xbb56, 0x0904, 0xb887, 0x908e,
-	0x0004, 0x1110, 0x080c, 0x308f, 0x908e, 0x0021, 0x0904, 0xb88b,
-	0x908e, 0x0022, 0x0904, 0xb8a4, 0x908e, 0x003d, 0x0904, 0xb88b,
-	0x908e, 0x0001, 0x1140, 0x6010, 0x2058, 0xb804, 0x9084, 0x00ff,
-	0x9086, 0x0006, 0x0110, 0x080c, 0x3066, 0x080c, 0xa717, 0x0804,
-	0x9f42, 0x00c6, 0x00d6, 0x6104, 0x9186, 0x0016, 0x0904, 0xb85b,
-	0x9186, 0x0002, 0x1904, 0xb830, 0x2001, 0x1836, 0x2004, 0xd08c,
-	0x11c8, 0x080c, 0x72e5, 0x11b0, 0x080c, 0xbef8, 0x0138, 0x080c,
-	0x7308, 0x1120, 0x080c, 0x71f0, 0x0804, 0xb88f, 0x2001, 0x195a,
-	0x2003, 0x0001, 0x2001, 0x1800, 0x2003, 0x0001, 0x080c, 0x7212,
-	0x0804, 0xb88f, 0x6010, 0x2058, 0xb8a0, 0x9086, 0x0080, 0x0130,
-	0x2001, 0x1836, 0x2004, 0xd0ac, 0x1904, 0xb88f, 0xb8a0, 0x9082,
-	0x0081, 0x1a04, 0xb88f, 0xb840, 0x9084, 0x00ff, 0x9005, 0x0180,
-	0x8001, 0xb842, 0x6017, 0x0000, 0x6023, 0x0007, 0x601b, 0x0398,
-	0x080c, 0x9ec2, 0x0128, 0x2b00, 0x6012, 0x6023, 0x0001, 0x0458,
-	0x00de, 0x00ce, 0x6004, 0x908e, 0x0002, 0x11a0, 0x6010, 0x2058,
-	0xb8a0, 0x9086, 0x007e, 0x1170, 0x2009, 0x1836, 0x2104, 0xc085,
-	0x200a, 0x00e6, 0x2071, 0x1800, 0x080c, 0x5e89, 0x00ee, 0x080c,
-	0xa717, 0x0030, 0x080c, 0xa717, 0x080c, 0x3066, 0x080c, 0xbf0d,
-	0x00e6, 0x0126, 0x2091, 0x8000, 0x080c, 0x308f, 0x012e, 0x00ee,
-	0x080c, 0x9f42, 0x0005, 0x2001, 0x0002, 0x080c, 0x6372, 0x6003,
-	0x0001, 0x6007, 0x0002, 0x080c, 0x8718, 0x080c, 0x8c37, 0x00de,
-	0x00ce, 0x0c80, 0x080c, 0x308f, 0x0804, 0xb7dd, 0x00c6, 0x00d6,
-	0x6104, 0x9186, 0x0016, 0x0d38, 0x6010, 0x2058, 0xb840, 0x9084,
-	0x00ff, 0x9005, 0x0904, 0xb830, 0x8001, 0xb842, 0x6003, 0x0001,
-	0x080c, 0x8718, 0x080c, 0x8c37, 0x00de, 0x00ce, 0x0898, 0x080c,
-	0xa717, 0x0804, 0xb7df, 0x080c, 0xa753, 0x0804, 0xb7df, 0x00de,
-	0x00ce, 0x080c, 0xa717, 0x080c, 0x3066, 0x00e6, 0x0126, 0x2091,
-	0x8000, 0x080c, 0x308f, 0x6017, 0x0000, 0x6023, 0x0007, 0x601b,
-	0x0398, 0x012e, 0x00ee, 0x0005, 0x080c, 0xa382, 0x1d00, 0x0005,
-	0x6000, 0x908a, 0x0010, 0x1a0c, 0x0dc4, 0x0096, 0x00d6, 0x001b,
-	0x00de, 0x009e, 0x0005, 0xb8c3, 0xb8c3, 0xb8c3, 0xb8c3, 0xb8c3,
-	0xb8c3, 0xb8c3, 0xb8c3, 0xb8c3, 0xb6a9, 0xb8c3, 0xb6b0, 0xb8c5,
-	0xb6b0, 0xb8d2, 0xb8c3, 0x080c, 0x0dc4, 0x6004, 0x9086, 0x008b,
-	0x0148, 0x6007, 0x008b, 0x6003, 0x000d, 0x080c, 0x86d0, 0x080c,
-	0x8c37, 0x0005, 0x080c, 0xbeec, 0x0118, 0x080c, 0xbeff, 0x0010,
-	0x080c, 0xbf0d, 0x080c, 0xbb39, 0x080c, 0xb955, 0x0570, 0x080c,
-	0x3066, 0x080c, 0xb955, 0x0168, 0x6014, 0x2048, 0xa86b, 0x0103,
-	0xa87f, 0x0006, 0xa87b, 0x0000, 0xa884, 0xc0ed, 0xa886, 0x080c,
-	0x6b1d, 0x2c68, 0x080c, 0x9ec2, 0x0150, 0x6810, 0x6012, 0x080c,
-	0xbc97, 0x00c6, 0x2d60, 0x080c, 0x9f42, 0x00ce, 0x0008, 0x2d60,
-	0x6017, 0x0000, 0x6023, 0x0001, 0x6007, 0x0001, 0x6003, 0x0001,
-	0x080c, 0x8718, 0x080c, 0x8c37, 0x0060, 0x080c, 0xbeec, 0x0138,
-	0x602c, 0x9086, 0x4000, 0x1118, 0x080c, 0x3066, 0x08d0, 0x080c,
-	0x9f42, 0x0005, 0x6000, 0x908a, 0x0010, 0x1a0c, 0x0dc4, 0x0002,
-	0xb930, 0xb930, 0xb934, 0xb932, 0xb93e, 0xb930, 0xb930, 0x9f42,
-	0xb930, 0xb930, 0xb930, 0xb930, 0xb930, 0xb930, 0xb930, 0xb930,
-	0x080c, 0x0dc4, 0x080c, 0x9b40, 0x6114, 0x0096, 0x2148, 0xa87f,
-	0x0006, 0x080c, 0x6b1d, 0x009e, 0x0804, 0x9f18, 0x601c, 0xd084,
-	0x190c, 0x1950, 0x0c88, 0x9284, 0x0003, 0x1158, 0x9282, 0x1cc8,
+	0x86ff, 0x11d8, 0x6014, 0x2048, 0x080c, 0xc1cd, 0x01c0, 0xa868,
+	0x9086, 0x0139, 0x1128, 0xa87f, 0x0005, 0xa887, 0x0000, 0x0028,
+	0x900e, 0x2001, 0x0005, 0x080c, 0x6e4b, 0x080c, 0xc4c0, 0x080c,
+	0x6bf5, 0x080c, 0xa3cf, 0x9085, 0x0001, 0x009e, 0x0005, 0x9006,
+	0x0ce0, 0x6000, 0x908a, 0x0010, 0x1a0c, 0x0dc3, 0x0002, 0xbe47,
+	0xbe77, 0xbe49, 0xbe98, 0xbe72, 0xbe47, 0xbe0a, 0xbe0f, 0xbe0f,
+	0xbe0a, 0xbe0a, 0xbe0a, 0xbe0a, 0xbe0a, 0xbe0a, 0xbe0a, 0x080c,
+	0x0dc3, 0x86ff, 0x1520, 0x6020, 0x9086, 0x0006, 0x0500, 0x0096,
+	0x6014, 0x2048, 0x080c, 0xc1cd, 0x0168, 0xa880, 0xd0cc, 0x0140,
+	0x0096, 0xc0cc, 0xa882, 0xa87c, 0x2048, 0x080c, 0x0fbf, 0x009e,
+	0x080c, 0xc4c0, 0x009e, 0x080c, 0xc883, 0x6007, 0x0085, 0x6003,
+	0x000b, 0x6023, 0x0002, 0x080c, 0x88a1, 0x080c, 0x8e38, 0x9085,
+	0x0001, 0x0005, 0x0066, 0x080c, 0x1998, 0x006e, 0x0890, 0x00e6,
+	0x2071, 0x19c4, 0x7024, 0x9c06, 0x1120, 0x080c, 0x9bbf, 0x00ee,
+	0x0840, 0x6020, 0x9084, 0x000f, 0x9086, 0x0006, 0x1150, 0x0086,
+	0x0096, 0x2049, 0x0001, 0x2c40, 0x080c, 0x9ce3, 0x009e, 0x008e,
+	0x0010, 0x080c, 0x9abc, 0x00ee, 0x1904, 0xbe49, 0x0804, 0xbe0a,
+	0x0036, 0x00e6, 0x2071, 0x19c4, 0x703c, 0x9c06, 0x1138, 0x901e,
+	0x080c, 0x9c35, 0x00ee, 0x003e, 0x0804, 0xbe49, 0x080c, 0x9e13,
+	0x00ee, 0x003e, 0x1904, 0xbe49, 0x0804, 0xbe0a, 0x00c6, 0x6020,
+	0x9084, 0x000f, 0x0013, 0x00ce, 0x0005, 0xbecb, 0xbf98, 0xc106,
+	0xbed5, 0xa3cf, 0xbecb, 0xd857, 0xc8f0, 0xbf98, 0xbec4, 0xc192,
+	0xbec4, 0xbec4, 0xbec4, 0xbec4, 0x080c, 0x0dc3, 0x080c, 0xc3d1,
+	0x1110, 0x080c, 0xadb3, 0x0005, 0x080c, 0x8d2c, 0x080c, 0x8e38,
+	0x0804, 0xa39d, 0x601b, 0x0001, 0x0005, 0x080c, 0xc1cd, 0x0130,
+	0x6014, 0x0096, 0x2048, 0x2c00, 0xa89a, 0x009e, 0x6000, 0x908a,
+	0x0010, 0x1a0c, 0x0dc3, 0x0002, 0xbef4, 0xbef6, 0xbf1a, 0xbf2e,
+	0xbf54, 0xbef4, 0xbecb, 0xbecb, 0xbecb, 0xbf2e, 0xbf2e, 0xbef4,
+	0xbef4, 0xbef4, 0xbef4, 0xbf38, 0x080c, 0x0dc3, 0x00e6, 0x6014,
+	0x0096, 0x2048, 0xa884, 0xc0b5, 0xa886, 0x009e, 0x2071, 0x19c4,
+	0x7024, 0x9c06, 0x01a0, 0x080c, 0x9abc, 0x080c, 0xc883, 0x6007,
+	0x0085, 0x6003, 0x000b, 0x6023, 0x0002, 0x2001, 0x1963, 0x2004,
+	0x601a, 0x080c, 0x88a1, 0x080c, 0x8e38, 0x00ee, 0x0005, 0x601b,
+	0x0001, 0x0cd8, 0x0096, 0x6014, 0x2048, 0xa884, 0xc0b5, 0xa886,
+	0x009e, 0x080c, 0xc883, 0x6007, 0x0085, 0x6003, 0x000b, 0x6023,
+	0x0002, 0x080c, 0x88a1, 0x080c, 0x8e38, 0x0005, 0x0096, 0x601b,
+	0x0001, 0x6014, 0x2048, 0xa884, 0xc0b5, 0xa886, 0x009e, 0x0005,
+	0x080c, 0x566c, 0x01b8, 0x6014, 0x0096, 0x904d, 0x0190, 0xa868,
+	0xa86b, 0x0103, 0xa87f, 0x0006, 0x9086, 0x0139, 0x1150, 0xa86b,
+	0x0139, 0xa87f, 0x0030, 0xa89b, 0x4005, 0xa89f, 0x0004, 0x080c,
+	0x6c02, 0x009e, 0x0804, 0xa39d, 0x6014, 0x0096, 0x904d, 0x05d8,
+	0xa980, 0xd1e4, 0x05c0, 0x2001, 0x180f, 0x2004, 0xd0c4, 0x0110,
+	0x009e, 0x0005, 0xa888, 0x009e, 0x8003, 0x800b, 0x810b, 0x9108,
+	0x611a, 0x2001, 0x0030, 0x2c08, 0x0026, 0x621c, 0x080c, 0x1568,
+	0x2001, 0x030c, 0x2004, 0x002e, 0x9086, 0x0041, 0x1198, 0x6014,
+	0x0096, 0x904d, 0x090c, 0x0dc3, 0xa884, 0xd0f4, 0x1130, 0xc0f5,
+	0xa886, 0x009e, 0x601b, 0x0002, 0x0068, 0x009e, 0x00c6, 0x080c,
+	0x225f, 0x00ce, 0x6000, 0x9086, 0x0004, 0x1120, 0x2009, 0x0048,
+	0x080c, 0xa419, 0x0005, 0x009e, 0x080c, 0x1998, 0x0804, 0xbf1a,
+	0x6000, 0x908a, 0x0010, 0x1a0c, 0x0dc3, 0x000b, 0x0005, 0xbfaf,
+	0xbed2, 0xbfb1, 0xbfaf, 0xbfb1, 0xbfb1, 0xbecc, 0xbfaf, 0xbec6,
+	0xbec6, 0xbfaf, 0xbfaf, 0xbfaf, 0xbfaf, 0xbfaf, 0xbfaf, 0x080c,
+	0x0dc3, 0x6010, 0x00b6, 0x2058, 0xb804, 0x9084, 0x00ff, 0x00be,
+	0x908a, 0x000c, 0x1a0c, 0x0dc3, 0x00b6, 0x0013, 0x00be, 0x0005,
+	0xbfcc, 0xc09d, 0xbfce, 0xc00e, 0xbfce, 0xc00e, 0xbfce, 0xbfdc,
+	0xbfcc, 0xc00e, 0xbfcc, 0xbffd, 0x080c, 0x0dc3, 0x6004, 0x908e,
+	0x0016, 0x05c0, 0x908e, 0x0004, 0x05a8, 0x908e, 0x0002, 0x0590,
+	0x908e, 0x0052, 0x0904, 0xc099, 0x6004, 0x080c, 0xc3d1, 0x0904,
+	0xc0b6, 0x908e, 0x0004, 0x1110, 0x080c, 0x312b, 0x908e, 0x0021,
+	0x0904, 0xc0ba, 0x908e, 0x0022, 0x0904, 0xc101, 0x908e, 0x003d,
+	0x0904, 0xc0ba, 0x908e, 0x0039, 0x0904, 0xc0be, 0x908e, 0x0035,
+	0x0904, 0xc0be, 0x908e, 0x001e, 0x0178, 0x908e, 0x0001, 0x1140,
+	0x6010, 0x2058, 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006, 0x0110,
+	0x080c, 0x3102, 0x080c, 0xadb3, 0x0804, 0xa3cf, 0x00c6, 0x00d6,
+	0x6104, 0x9186, 0x0016, 0x0904, 0xc08a, 0x9186, 0x0002, 0x1904,
+	0xc05f, 0x2001, 0x1836, 0x2004, 0xd08c, 0x11c8, 0x080c, 0x7351,
+	0x11b0, 0x080c, 0xc8ce, 0x0138, 0x080c, 0x7374, 0x1120, 0x080c,
+	0x725c, 0x0804, 0xc0ea, 0x2001, 0x1959, 0x2003, 0x0001, 0x2001,
+	0x1800, 0x2003, 0x0001, 0x080c, 0x727e, 0x0804, 0xc0ea, 0x6010,
+	0x2058, 0xb8a0, 0x9086, 0x0080, 0x0130, 0x2001, 0x1836, 0x2004,
+	0xd0ac, 0x1904, 0xc0ea, 0xb8a0, 0x9082, 0x0081, 0x1a04, 0xc0ea,
+	0xb840, 0x9084, 0x00ff, 0x9005, 0x0190, 0x8001, 0xb842, 0x6017,
+	0x0000, 0x6023, 0x0007, 0x601b, 0x0398, 0x6043, 0x0000, 0x080c,
+	0xa347, 0x0128, 0x2b00, 0x6012, 0x6023, 0x0001, 0x0458, 0x00de,
+	0x00ce, 0x6004, 0x908e, 0x0002, 0x11a0, 0x6010, 0x2058, 0xb8a0,
+	0x9086, 0x007e, 0x1170, 0x2009, 0x1836, 0x2104, 0xc085, 0x200a,
+	0x00e6, 0x2071, 0x1800, 0x080c, 0x5f46, 0x00ee, 0x080c, 0xadb3,
+	0x0030, 0x080c, 0xadb3, 0x080c, 0x3102, 0x080c, 0xc8e3, 0x00e6,
+	0x0126, 0x2091, 0x8000, 0x080c, 0x312b, 0x012e, 0x00ee, 0x080c,
+	0xa3cf, 0x0005, 0x2001, 0x0002, 0x080c, 0x6448, 0x6003, 0x0001,
+	0x6007, 0x0002, 0x080c, 0x88e9, 0x080c, 0x8e38, 0x00de, 0x00ce,
+	0x0c80, 0x080c, 0x312b, 0x0804, 0xc00a, 0x00c6, 0x00d6, 0x6104,
+	0x9186, 0x0016, 0x0d38, 0x6010, 0x2058, 0xb840, 0x9084, 0x00ff,
+	0x9005, 0x0904, 0xc05f, 0x8001, 0xb842, 0x6003, 0x0001, 0x080c,
+	0x88e9, 0x080c, 0x8e38, 0x00de, 0x00ce, 0x0898, 0x080c, 0xadb3,
+	0x0804, 0xc00c, 0x080c, 0xadef, 0x0804, 0xc00c, 0x00d6, 0x2c68,
+	0x6104, 0x080c, 0xc83f, 0x00de, 0x0118, 0x080c, 0xa39d, 0x0408,
+	0x6004, 0x8007, 0x6134, 0x918c, 0x00ff, 0x9105, 0x6036, 0x6007,
+	0x0085, 0x6003, 0x000b, 0x6023, 0x0002, 0x603c, 0x600a, 0x2001,
+	0x1963, 0x2004, 0x601a, 0x602c, 0x2c08, 0x2060, 0x6024, 0xd0b4,
+	0x0108, 0xc085, 0xc0b5, 0x6026, 0x2160, 0x080c, 0x88a1, 0x080c,
+	0x8e38, 0x0005, 0x00de, 0x00ce, 0x080c, 0xadb3, 0x080c, 0x3102,
+	0x00e6, 0x0126, 0x2091, 0x8000, 0x080c, 0x312b, 0x6017, 0x0000,
+	0x6023, 0x0007, 0x601b, 0x0398, 0x6043, 0x0000, 0x012e, 0x00ee,
+	0x0005, 0x080c, 0xa820, 0x1904, 0xc0b6, 0x0005, 0x6000, 0x908a,
+	0x0010, 0x1a0c, 0x0dc3, 0x0096, 0x00d6, 0x001b, 0x00de, 0x009e,
+	0x0005, 0xc121, 0xc121, 0xc121, 0xc121, 0xc121, 0xc121, 0xc121,
+	0xc121, 0xc121, 0xbecb, 0xc121, 0xbed2, 0xc123, 0xbed2, 0xc13d,
+	0xc121, 0x080c, 0x0dc3, 0x6004, 0x9086, 0x008b, 0x01b0, 0x6034,
+	0x908c, 0xff00, 0x810f, 0x9186, 0x0035, 0x1130, 0x602c, 0x9080,
+	0x0009, 0x200c, 0xc185, 0x2102, 0x6007, 0x008b, 0x6003, 0x000d,
+	0x080c, 0x88a1, 0x080c, 0x8e38, 0x0005, 0x080c, 0xc8c2, 0x0118,
+	0x080c, 0xc8d5, 0x0010, 0x080c, 0xc8e3, 0x080c, 0xc3b4, 0x080c,
+	0xc1cd, 0x0570, 0x080c, 0x3102, 0x080c, 0xc1cd, 0x0168, 0x6014,
+	0x2048, 0xa86b, 0x0103, 0xa87f, 0x0006, 0xa87b, 0x0000, 0xa884,
+	0xc0ed, 0xa886, 0x080c, 0x6c02, 0x2c68, 0x080c, 0xa347, 0x0150,
+	0x6810, 0x6012, 0x080c, 0xc640, 0x00c6, 0x2d60, 0x080c, 0xa3cf,
+	0x00ce, 0x0008, 0x2d60, 0x6017, 0x0000, 0x6023, 0x0001, 0x6007,
+	0x0001, 0x6003, 0x0001, 0x080c, 0x88e9, 0x080c, 0x8e38, 0x00c8,
+	0x080c, 0xc8c2, 0x0138, 0x6034, 0x9086, 0x4000, 0x1118, 0x080c,
+	0x3102, 0x08d0, 0x6034, 0x908c, 0xff00, 0x810f, 0x9186, 0x0039,
+	0x0118, 0x9186, 0x0035, 0x1118, 0x080c, 0x3102, 0x0868, 0x080c,
+	0xa3cf, 0x0005, 0x6000, 0x908a, 0x0010, 0x1a0c, 0x0dc3, 0x0002,
+	0xc1a8, 0xc1a8, 0xc1ac, 0xc1aa, 0xc1b6, 0xc1a8, 0xc1a8, 0xa3cf,
+	0xc1a8, 0xc1a8, 0xc1a8, 0xc1a8, 0xc1a8, 0xc1a8, 0xc1a8, 0xc1a8,
+	0x080c, 0x0dc3, 0x080c, 0x9e13, 0x6114, 0x0096, 0x2148, 0xa87f,
+	0x0006, 0x080c, 0x6c02, 0x009e, 0x0804, 0xa39d, 0x601c, 0xd084,
+	0x190c, 0x1998, 0x0c88, 0x9284, 0x0007, 0x1158, 0x9282, 0x1cd0,
 	0x0240, 0x2001, 0x1819, 0x2004, 0x9202, 0x1218, 0x9085, 0x0001,
 	0x0005, 0x9006, 0x0ce8, 0x0096, 0x0028, 0x0096, 0x0006, 0x6014,
 	0x2048, 0x000e, 0x0006, 0x9984, 0xf000, 0x9086, 0xf000, 0x0110,
-	0x080c, 0x10ac, 0x000e, 0x009e, 0x0005, 0x00e6, 0x00c6, 0x0036,
-	0x0006, 0x0126, 0x2091, 0x8000, 0x2061, 0x1cc8, 0x2071, 0x1800,
-	0x7350, 0x7070, 0x9302, 0x1628, 0x6020, 0x9206, 0x11e0, 0x080c,
-	0xbef8, 0x0180, 0x9286, 0x0001, 0x1168, 0x6004, 0x9086, 0x0004,
-	0x1148, 0x080c, 0x3066, 0x080c, 0xbf0d, 0x00c6, 0x080c, 0x9f42,
-	0x00ce, 0x0048, 0x080c, 0xbb56, 0x1110, 0x080c, 0xa717, 0x00c6,
-	0x080c, 0x9f18, 0x00ce, 0x9ce0, 0x000c, 0x7064, 0x9c02, 0x1208,
-	0x08b8, 0x012e, 0x000e, 0x003e, 0x00ce, 0x00ee, 0x0005, 0x00e6,
-	0x00c6, 0x0016, 0x9188, 0x1000, 0x210c, 0x81ff, 0x0128, 0x2061,
-	0x1a92, 0x6112, 0x080c, 0x3066, 0x9006, 0x0010, 0x9085, 0x0001,
-	0x001e, 0x00ce, 0x00ee, 0x0005, 0x00c6, 0x0126, 0x2091, 0x8000,
-	0x080c, 0x9ec2, 0x01b0, 0x6626, 0x2b00, 0x6012, 0x080c, 0x55af,
-	0x0118, 0x080c, 0xba81, 0x0168, 0x080c, 0xbc97, 0x6023, 0x0003,
-	0x2009, 0x004b, 0x080c, 0x9f88, 0x9085, 0x0001, 0x012e, 0x00ce,
-	0x0005, 0x9006, 0x0cd8, 0x00c6, 0x0126, 0x2091, 0x8000, 0xbaa0,
-	0x080c, 0x9f5b, 0x0560, 0x6027, 0x0000, 0x2b00, 0x6012, 0x080c,
-	0xbc97, 0x6023, 0x0003, 0x0016, 0x080c, 0x8843, 0x0076, 0x903e,
-	0x080c, 0x8748, 0x2c08, 0x080c, 0xce89, 0x007e, 0x001e, 0xd184,
-	0x0128, 0x080c, 0x9f18, 0x9085, 0x0001, 0x0070, 0x080c, 0x55af,
-	0x0128, 0xd18c, 0x1170, 0x080c, 0xba81, 0x0148, 0x2009, 0x004c,
-	0x080c, 0x9f88, 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006,
-	0x0cd8, 0x2900, 0x6016, 0x0c90, 0x2009, 0x004d, 0x0010, 0x2009,
-	0x004e, 0x00f6, 0x00c6, 0x0046, 0x0016, 0x080c, 0x9ec2, 0x2c78,
-	0x05a0, 0x7e26, 0x2b00, 0x7812, 0x7823, 0x0003, 0x0016, 0x2021,
-	0x0005, 0x080c, 0xba93, 0x001e, 0x9186, 0x004d, 0x0118, 0x9186,
-	0x004e, 0x0148, 0x2001, 0x195d, 0x200c, 0xd1fc, 0x0168, 0x2f60,
-	0x080c, 0x9f18, 0x00d0, 0x2001, 0x195c, 0x200c, 0xd1fc, 0x0120,
-	0x2f60, 0x080c, 0x9f18, 0x0088, 0x2f60, 0x080c, 0x55af, 0x0138,
-	0xd18c, 0x1118, 0x04f1, 0x0148, 0x0010, 0x2900, 0x7816, 0x001e,
-	0x0016, 0x080c, 0x9f88, 0x9085, 0x0001, 0x001e, 0x004e, 0x00ce,
-	0x00fe, 0x0005, 0x00f6, 0x00c6, 0x0046, 0x080c, 0x9ec2, 0x2c78,
-	0x0508, 0x7e26, 0x2b00, 0x7812, 0x7823, 0x0003, 0x0096, 0x2021,
-	0x0004, 0x0489, 0x009e, 0x2001, 0x195b, 0x200c, 0xd1fc, 0x0120,
-	0x2f60, 0x080c, 0x9f18, 0x0060, 0x2f60, 0x080c, 0x55af, 0x0120,
-	0xd18c, 0x1160, 0x0071, 0x0130, 0x2009, 0x0052, 0x080c, 0x9f88,
-	0x9085, 0x0001, 0x004e, 0x00ce, 0x00fe, 0x0005, 0x2900, 0x7816,
-	0x0c98, 0x00c6, 0x080c, 0x4a61, 0x00ce, 0x1120, 0x080c, 0x9f18,
-	0x9006, 0x0005, 0xa86b, 0x0000, 0xa86f, 0x8000, 0x2900, 0x6016,
-	0x9085, 0x0001, 0x0005, 0x0096, 0x0076, 0x0126, 0x2091, 0x8000,
-	0x080c, 0x654a, 0x0138, 0x900e, 0x2400, 0x080c, 0x6d45, 0x080c,
-	0x6b1d, 0x0cb0, 0x2418, 0x080c, 0x8ac5, 0xbaa0, 0x0086, 0x2041,
-	0x0001, 0x2039, 0x0001, 0x2608, 0x080c, 0x885b, 0x008e, 0x080c,
-	0x8748, 0x2f08, 0x2648, 0x080c, 0xce89, 0xb93c, 0x81ff, 0x090c,
-	0x892e, 0x080c, 0x8c37, 0x012e, 0x007e, 0x009e, 0x0005, 0x00c6,
-	0x0126, 0x2091, 0x8000, 0x080c, 0x9ec2, 0x0190, 0x660a, 0x2b08,
-	0x6112, 0x080c, 0xbc97, 0x6023, 0x0001, 0x2900, 0x6016, 0x2009,
-	0x001f, 0x080c, 0x9f88, 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005,
-	0x9006, 0x0cd8, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0x9f5b,
-	0x01b8, 0x660a, 0x2b08, 0x6112, 0x080c, 0xbc97, 0x6023, 0x0008,
-	0x2900, 0x6016, 0x00f6, 0x2c78, 0x080c, 0x1679, 0x00fe, 0x2009,
-	0x0021, 0x080c, 0x9f88, 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005,
-	0x9006, 0x0cd8, 0x2009, 0x003d, 0x00c6, 0x0126, 0x0016, 0x2091,
-	0x8000, 0x080c, 0x9ec2, 0x0198, 0x660a, 0x2b08, 0x6112, 0x080c,
-	0xbc97, 0x6023, 0x0001, 0x2900, 0x6016, 0x001e, 0x0016, 0x080c,
-	0x9f88, 0x9085, 0x0001, 0x001e, 0x012e, 0x00ce, 0x0005, 0x9006,
-	0x0cd0, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0x9f5b, 0x0188,
-	0x2b08, 0x6112, 0x080c, 0xbc97, 0x6023, 0x0001, 0x2900, 0x6016,
-	0x2009, 0x0000, 0x080c, 0x9f88, 0x9085, 0x0001, 0x012e, 0x00ce,
-	0x0005, 0x9006, 0x0cd8, 0x2009, 0x0044, 0x0830, 0x2009, 0x0049,
-	0x0818, 0x0026, 0x00b6, 0x6210, 0x2258, 0xba3c, 0x82ff, 0x0110,
-	0x8211, 0xba3e, 0x00be, 0x002e, 0x0005, 0x0006, 0x0016, 0x6004,
-	0x908e, 0x0002, 0x0140, 0x908e, 0x0003, 0x0128, 0x908e, 0x0004,
-	0x0110, 0x9085, 0x0001, 0x001e, 0x000e, 0x0005, 0x0006, 0x0086,
-	0x0096, 0x6020, 0x9086, 0x0004, 0x01a8, 0x6014, 0x904d, 0x080c,
-	0xb955, 0x0180, 0xa868, 0x9086, 0x0139, 0x0170, 0x6020, 0x90c6,
-	0x0003, 0x0140, 0x90c6, 0x0002, 0x0128, 0xa86c, 0xd0fc, 0x0110,
-	0x9006, 0x0010, 0x9085, 0x0001, 0x009e, 0x008e, 0x000e, 0x0005,
-	0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0x9f5b, 0x0198, 0x2b08,
-	0x6112, 0x080c, 0xbc97, 0x6023, 0x0001, 0x2900, 0x6016, 0x080c,
-	0x3066, 0x2009, 0x0028, 0x080c, 0x9f88, 0x9085, 0x0001, 0x012e,
-	0x00ce, 0x0005, 0x9006, 0x0cd8, 0x9186, 0x0015, 0x11a8, 0x2011,
-	0x1823, 0x2204, 0x9086, 0x0074, 0x1178, 0x00b6, 0x080c, 0xa9a1,
-	0x00be, 0x080c, 0xabf3, 0x6003, 0x0001, 0x6007, 0x0029, 0x080c,
-	0x8718, 0x080c, 0x8c37, 0x0078, 0x6014, 0x0096, 0x2048, 0xa86c,
-	0x009e, 0xd0fc, 0x0148, 0x2001, 0x0001, 0x080c, 0xbe57, 0x080c,
-	0xa717, 0x080c, 0x9f18, 0x0005, 0x0096, 0x6014, 0x904d, 0x090c,
-	0x0dc4, 0xa87f, 0x0030, 0xa887, 0x0000, 0xa89b, 0x4005, 0xa89f,
-	0x0004, 0xa86b, 0x0139, 0x0126, 0x2091, 0x8000, 0x080c, 0x6b1d,
-	0x012e, 0x009e, 0x080c, 0x9f18, 0x0c30, 0x0096, 0x9186, 0x0016,
-	0x1128, 0x2001, 0x0004, 0x080c, 0x6372, 0x00e8, 0x9186, 0x0015,
-	0x1510, 0x2011, 0x1823, 0x2204, 0x9086, 0x0014, 0x11e0, 0x6010,
-	0x00b6, 0x2058, 0x080c, 0x64ac, 0x00be, 0x080c, 0xacce, 0x1198,
-	0x6010, 0x00b6, 0x2058, 0xb890, 0x00be, 0x9005, 0x0160, 0x2001,
-	0x0006, 0x080c, 0x6372, 0x6014, 0x2048, 0xa86c, 0xd0fc, 0x0170,
-	0x080c, 0xa305, 0x0048, 0x6014, 0x2048, 0xa86c, 0xd0fc, 0x0500,
-	0x080c, 0xa717, 0x080c, 0x9f18, 0x009e, 0x0005, 0x6014, 0x6310,
-	0x2358, 0x904d, 0x090c, 0x0dc4, 0xa87f, 0x0000, 0xa887, 0x0000,
-	0xa89b, 0x4000, 0x080c, 0x6643, 0xa99e, 0x080c, 0x4d2a, 0x0126,
-	0x2091, 0x8000, 0x080c, 0x6b1d, 0x012e, 0x080c, 0x9f18, 0x0c20,
-	0x6014, 0x904d, 0x090c, 0x0dc4, 0xa87f, 0x0030, 0xa887, 0x0000,
+	0x080c, 0x10b8, 0x000e, 0x009e, 0x0005, 0x00e6, 0x00c6, 0x0036,
+	0x0006, 0x0126, 0x2091, 0x8000, 0x2061, 0x1cd0, 0x2071, 0x1800,
+	0x7350, 0x7070, 0x9302, 0x1640, 0x6020, 0x9206, 0x11f8, 0x080c,
+	0xc8ce, 0x0180, 0x9286, 0x0001, 0x1168, 0x6004, 0x9086, 0x0004,
+	0x1148, 0x080c, 0x3102, 0x080c, 0xc8e3, 0x00c6, 0x080c, 0xa3cf,
+	0x00ce, 0x0060, 0x080c, 0xc5ba, 0x0148, 0x080c, 0xc3d1, 0x1110,
+	0x080c, 0xadb3, 0x00c6, 0x080c, 0xa39d, 0x00ce, 0x9ce0, 0x0018,
+	0x7064, 0x9c02, 0x1208, 0x08a0, 0x012e, 0x000e, 0x003e, 0x00ce,
+	0x00ee, 0x0005, 0x00e6, 0x00c6, 0x0016, 0x9188, 0x1000, 0x210c,
+	0x81ff, 0x0128, 0x2061, 0x1a92, 0x6112, 0x080c, 0x3102, 0x9006,
+	0x0010, 0x9085, 0x0001, 0x001e, 0x00ce, 0x00ee, 0x0005, 0x00c6,
+	0x0126, 0x2091, 0x8000, 0x080c, 0xa347, 0x01b0, 0x6656, 0x2b00,
+	0x6012, 0x080c, 0x566c, 0x0118, 0x080c, 0xc2fc, 0x0168, 0x080c,
+	0xc640, 0x6023, 0x0003, 0x2009, 0x004b, 0x080c, 0xa419, 0x9085,
+	0x0001, 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x00c6, 0x0126,
+	0x2091, 0x8000, 0xbaa0, 0x080c, 0xa3ec, 0x0560, 0x6057, 0x0000,
+	0x2b00, 0x6012, 0x080c, 0xc640, 0x6023, 0x0003, 0x0016, 0x080c,
+	0x8a2b, 0x0076, 0x903e, 0x080c, 0x8919, 0x2c08, 0x080c, 0xda37,
+	0x007e, 0x001e, 0xd184, 0x0128, 0x080c, 0xa39d, 0x9085, 0x0001,
+	0x0070, 0x080c, 0x566c, 0x0128, 0xd18c, 0x1170, 0x080c, 0xc2fc,
+	0x0148, 0x2009, 0x004c, 0x080c, 0xa419, 0x9085, 0x0001, 0x012e,
+	0x00ce, 0x0005, 0x9006, 0x0cd8, 0x2900, 0x6016, 0x0c90, 0x2009,
+	0x004d, 0x0010, 0x2009, 0x004e, 0x00f6, 0x00c6, 0x0046, 0x0016,
+	0x080c, 0xa347, 0x2c78, 0x05a0, 0x7e56, 0x2b00, 0x7812, 0x7823,
+	0x0003, 0x0016, 0x2021, 0x0005, 0x080c, 0xc30e, 0x001e, 0x9186,
+	0x004d, 0x0118, 0x9186, 0x004e, 0x0148, 0x2001, 0x195c, 0x200c,
+	0xd1fc, 0x0168, 0x2f60, 0x080c, 0xa39d, 0x00d0, 0x2001, 0x195b,
+	0x200c, 0xd1fc, 0x0120, 0x2f60, 0x080c, 0xa39d, 0x0088, 0x2f60,
+	0x080c, 0x566c, 0x0138, 0xd18c, 0x1118, 0x04f1, 0x0148, 0x0010,
+	0x2900, 0x7816, 0x001e, 0x0016, 0x080c, 0xa419, 0x9085, 0x0001,
+	0x001e, 0x004e, 0x00ce, 0x00fe, 0x0005, 0x00f6, 0x00c6, 0x0046,
+	0x080c, 0xa347, 0x2c78, 0x0508, 0x7e56, 0x2b00, 0x7812, 0x7823,
+	0x0003, 0x0096, 0x2021, 0x0004, 0x0489, 0x009e, 0x2001, 0x195a,
+	0x200c, 0xd1fc, 0x0120, 0x2f60, 0x080c, 0xa39d, 0x0060, 0x2f60,
+	0x080c, 0x566c, 0x0120, 0xd18c, 0x1160, 0x0071, 0x0130, 0x2009,
+	0x0052, 0x080c, 0xa419, 0x9085, 0x0001, 0x004e, 0x00ce, 0x00fe,
+	0x0005, 0x2900, 0x7816, 0x0c98, 0x00c6, 0x080c, 0x4b11, 0x00ce,
+	0x1120, 0x080c, 0xa39d, 0x9006, 0x0005, 0xa86b, 0x0000, 0xa86f,
+	0x8000, 0x2900, 0x6016, 0x9085, 0x0001, 0x0005, 0x0096, 0x0076,
+	0x0126, 0x2091, 0x8000, 0x080c, 0x6652, 0x0138, 0x900e, 0x2400,
+	0x080c, 0x6e4b, 0x080c, 0x6c02, 0x0cb0, 0x2418, 0x080c, 0x8cc6,
+	0xbaa0, 0x0086, 0x2041, 0x0001, 0x2039, 0x0001, 0x2608, 0x080c,
+	0x8a43, 0x008e, 0x080c, 0x8919, 0x2f08, 0x2648, 0x080c, 0xda37,
+	0xb93c, 0x81ff, 0x090c, 0x8b16, 0x080c, 0x8e38, 0x012e, 0x007e,
+	0x009e, 0x0005, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0xa347,
+	0x0190, 0x660a, 0x2b08, 0x6112, 0x080c, 0xc640, 0x6023, 0x0001,
+	0x2900, 0x6016, 0x2009, 0x001f, 0x080c, 0xa419, 0x9085, 0x0001,
+	0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x00c6, 0x0126, 0x2091,
+	0x8000, 0x080c, 0xa3ec, 0x01b8, 0x660a, 0x2b08, 0x6112, 0x080c,
+	0xc640, 0x6023, 0x0008, 0x2900, 0x6016, 0x00f6, 0x2c78, 0x080c,
+	0x16c1, 0x00fe, 0x2009, 0x0021, 0x080c, 0xa419, 0x9085, 0x0001,
+	0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x2009, 0x003d, 0x00c6,
+	0x0126, 0x0016, 0x2091, 0x8000, 0x080c, 0xa347, 0x0198, 0x660a,
+	0x2b08, 0x6112, 0x080c, 0xc640, 0x6023, 0x0001, 0x2900, 0x6016,
+	0x001e, 0x0016, 0x080c, 0xa419, 0x9085, 0x0001, 0x001e, 0x012e,
+	0x00ce, 0x0005, 0x9006, 0x0cd0, 0x00c6, 0x0126, 0x2091, 0x8000,
+	0x080c, 0xa3ec, 0x0188, 0x2b08, 0x6112, 0x080c, 0xc640, 0x6023,
+	0x0001, 0x2900, 0x6016, 0x2009, 0x0000, 0x080c, 0xa419, 0x9085,
+	0x0001, 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x2009, 0x0044,
+	0x0830, 0x2009, 0x0049, 0x0818, 0x0026, 0x00b6, 0x6210, 0x2258,
+	0xba3c, 0x82ff, 0x0110, 0x8211, 0xba3e, 0x00be, 0x002e, 0x0005,
+	0x0006, 0x0016, 0x6004, 0x908e, 0x0002, 0x0140, 0x908e, 0x0003,
+	0x0128, 0x908e, 0x0004, 0x0110, 0x9085, 0x0001, 0x001e, 0x000e,
+	0x0005, 0x0006, 0x0086, 0x0096, 0x6020, 0x9086, 0x0004, 0x01a8,
+	0x6014, 0x904d, 0x080c, 0xc1cd, 0x0180, 0xa868, 0x9086, 0x0139,
+	0x0170, 0x6020, 0x90c6, 0x0003, 0x0140, 0x90c6, 0x0002, 0x0128,
+	0xa86c, 0xd0fc, 0x0110, 0x9006, 0x0010, 0x9085, 0x0001, 0x009e,
+	0x008e, 0x000e, 0x0005, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c,
+	0xa3ec, 0x0198, 0x2b08, 0x6112, 0x080c, 0xc640, 0x6023, 0x0001,
+	0x2900, 0x6016, 0x080c, 0x3102, 0x2009, 0x0028, 0x080c, 0xa419,
+	0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x9186,
+	0x0015, 0x11a8, 0x2011, 0x1823, 0x2204, 0x9086, 0x0074, 0x1178,
+	0x00b6, 0x080c, 0xb055, 0x00be, 0x080c, 0xb2a7, 0x6003, 0x0001,
+	0x6007, 0x0029, 0x080c, 0x88e9, 0x080c, 0x8e38, 0x0078, 0x6014,
+	0x0096, 0x2048, 0xa86c, 0x009e, 0xd0fc, 0x0148, 0x2001, 0x0001,
+	0x080c, 0xc800, 0x080c, 0xadb3, 0x080c, 0xa39d, 0x0005, 0x0096,
+	0x6014, 0x904d, 0x090c, 0x0dc3, 0xa87f, 0x0030, 0xa887, 0x0000,
 	0xa89b, 0x4005, 0xa89f, 0x0004, 0xa86b, 0x0139, 0x0126, 0x2091,
-	0x8000, 0x080c, 0x6b1d, 0x012e, 0x080c, 0x9f18, 0x0868, 0xa87c,
-	0x9086, 0x0005, 0x1108, 0x0009, 0x0005, 0xa884, 0xc0ad, 0xa886,
-	0x0005, 0x0006, 0x0016, 0x0026, 0x0036, 0x00e6, 0x2001, 0x195f,
-	0x200c, 0x8000, 0x2014, 0x2001, 0x0032, 0x080c, 0x854b, 0x2001,
-	0x1963, 0x82ff, 0x1110, 0x2011, 0x0014, 0x2202, 0x2001, 0x1961,
-	0x200c, 0x8000, 0x2014, 0x2071, 0x1949, 0x711a, 0x721e, 0x2001,
-	0x0064, 0x080c, 0x854b, 0x2001, 0x1964, 0x82ff, 0x1110, 0x2011,
-	0x0014, 0x2202, 0x080c, 0x6727, 0x00ee, 0x003e, 0x002e, 0x001e,
-	0x000e, 0x0005, 0x0006, 0x0016, 0x00e6, 0x2001, 0x1963, 0x2003,
-	0x0028, 0x2001, 0x1964, 0x2003, 0x0014, 0x2071, 0x1949, 0x701b,
-	0x0000, 0x701f, 0x07d0, 0x00ee, 0x001e, 0x000e, 0x0005, 0x0096,
-	0x6028, 0x904d, 0x0110, 0x080c, 0x1033, 0x009e, 0x0005, 0x0005,
-	0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0x9ec2, 0x0180, 0x2b08,
-	0x6112, 0x0ca9, 0x6023, 0x0001, 0x2900, 0x6016, 0x2009, 0x0033,
-	0x080c, 0x9f88, 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006,
-	0x0cd8, 0x0096, 0x00e6, 0x00f6, 0x2071, 0x1800, 0x9186, 0x0015,
-	0x1520, 0x708c, 0x9086, 0x0018, 0x0120, 0x708c, 0x9086, 0x0014,
-	0x11e0, 0x6014, 0x2048, 0xaa3c, 0xd2e4, 0x1160, 0x2c78, 0x080c,
-	0x8e2f, 0x01d8, 0x7078, 0xaa50, 0x9206, 0x1160, 0x707c, 0xaa54,
-	0x9206, 0x1140, 0x6210, 0x00b6, 0x2258, 0xbaa0, 0x00be, 0x900e,
-	0x080c, 0x30af, 0x080c, 0xa305, 0x0020, 0x080c, 0xa717, 0x080c,
-	0x9f18, 0x00fe, 0x00ee, 0x009e, 0x0005, 0x705c, 0xaa54, 0x9206,
-	0x0d48, 0x0c80, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0x9ec2,
-	0x0188, 0x2b08, 0x6112, 0x080c, 0xbc97, 0x6023, 0x0001, 0x2900,
-	0x6016, 0x2009, 0x004d, 0x080c, 0x9f88, 0x9085, 0x0001, 0x012e,
-	0x00ce, 0x0005, 0x9006, 0x0cd8, 0x00c6, 0x0126, 0x2091, 0x8000,
-	0x0016, 0x080c, 0x9ec2, 0x0180, 0x2b08, 0x6112, 0x080c, 0xbc97,
-	0x6023, 0x0001, 0x2900, 0x6016, 0x001e, 0x080c, 0x9f88, 0x9085,
-	0x0001, 0x012e, 0x00ce, 0x0005, 0x001e, 0x9006, 0x0cd0, 0x0016,
-	0x0026, 0x0036, 0x0046, 0x0056, 0x0066, 0x0096, 0x00e6, 0x00f6,
-	0x2071, 0x1800, 0x9186, 0x0015, 0x1568, 0x718c, 0x6014, 0x2048,
-	0xa814, 0x8003, 0x9106, 0x1530, 0x20e1, 0x0000, 0x2001, 0x197d,
-	0x2003, 0x0000, 0x6014, 0x2048, 0xa830, 0x20a8, 0x8906, 0x8006,
-	0x8007, 0x9094, 0x003f, 0x22e8, 0x9084, 0xffc0, 0x9080, 0x001c,
-	0x20a0, 0x2001, 0x197d, 0x0016, 0x200c, 0x080c, 0xc443, 0x001e,
-	0xa804, 0x9005, 0x0110, 0x2048, 0x0c38, 0x6014, 0x2048, 0xa86b,
-	0x0103, 0x0010, 0x080c, 0xa717, 0x080c, 0x9f18, 0x00fe, 0x00ee,
-	0x009e, 0x006e, 0x005e, 0x004e, 0x003e, 0x002e, 0x001e, 0x0005,
-	0x0096, 0x00e6, 0x00f6, 0x2071, 0x1800, 0x9186, 0x0015, 0x11b8,
-	0x708c, 0x9086, 0x0004, 0x1198, 0x6014, 0x2048, 0x2c78, 0x080c,
-	0x8e2f, 0x01a8, 0x7078, 0xaa78, 0x9206, 0x1130, 0x707c, 0xaa7c,
-	0x9206, 0x1110, 0x080c, 0x3066, 0x080c, 0xa305, 0x0020, 0x080c,
-	0xa717, 0x080c, 0x9f18, 0x00fe, 0x00ee, 0x009e, 0x0005, 0x705c,
-	0xaa7c, 0x9206, 0x0d78, 0x0c80, 0x0096, 0x00e6, 0x00f6, 0x2071,
-	0x1800, 0x9186, 0x0015, 0x1550, 0x708c, 0x9086, 0x0004, 0x1530,
-	0x6014, 0x2048, 0x2c78, 0x080c, 0x8e2f, 0x05f0, 0x7078, 0xaad0,
-	0x9206, 0x1180, 0x707c, 0xaad4, 0x9206, 0x1160, 0x080c, 0x3066,
-	0x0016, 0xa99c, 0xaab4, 0x9284, 0x1000, 0xc0fd, 0x080c, 0x5552,
-	0x001e, 0x0010, 0x080c, 0x533c, 0x080c, 0xb955, 0x0508, 0xa87f,
-	0x0000, 0xa887, 0x0000, 0xa89b, 0x4000, 0x0080, 0x080c, 0xb955,
-	0x01b8, 0x6014, 0x2048, 0x080c, 0x533c, 0x1d70, 0xa87f, 0x0030,
-	0xa887, 0x0000, 0xa89b, 0x4005, 0xa89f, 0x0004, 0x0126, 0x2091,
-	0x8000, 0xa86b, 0x0139, 0x080c, 0x6b1d, 0x012e, 0x080c, 0x9f18,
-	0x00fe, 0x00ee, 0x009e, 0x0005, 0x705c, 0xaad4, 0x9206, 0x0930,
-	0x0888, 0x0016, 0x0026, 0xa880, 0xd0ac, 0x0178, 0xa938, 0xaa34,
-	0x2100, 0x9205, 0x0150, 0xa894, 0x9106, 0x1118, 0xa890, 0x9206,
-	0x0120, 0xa996, 0xaa92, 0x9085, 0x0001, 0x002e, 0x001e, 0x0005,
-	0x00b6, 0x00d6, 0x0036, 0x080c, 0xb955, 0x0904, 0xbe53, 0x0096,
-	0x6314, 0x2348, 0xa87e, 0xa986, 0x929e, 0x4000, 0x1550, 0x6310,
-	0x00c6, 0x2358, 0x2009, 0x0000, 0xa86c, 0xd0f4, 0x1110, 0x080c,
-	0x6643, 0xaa9a, 0xa99e, 0x20a9, 0x0004, 0xa860, 0x20e8, 0xa85c,
-	0x9080, 0x0032, 0x20a0, 0xb8b0, 0x20e0, 0xb8b4, 0x9080, 0x0006,
-	0x2098, 0x080c, 0x0f7e, 0x20a9, 0x0004, 0xa85c, 0x9080, 0x0036,
-	0x20a0, 0xb8b4, 0x9080, 0x000a, 0x2098, 0x080c, 0x0f7e, 0x00ce,
-	0x0090, 0xaa9a, 0x3918, 0x9398, 0x0007, 0x231c, 0x6004, 0x9086,
-	0x0016, 0x0110, 0xa89f, 0x0004, 0xaba6, 0x6310, 0x2358, 0xb804,
-	0x9084, 0x00ff, 0xa8a2, 0xa86c, 0xc0f4, 0xa86e, 0x080c, 0x6b11,
-	0x6017, 0x0000, 0x009e, 0x003e, 0x00de, 0x00be, 0x0005, 0x0026,
-	0x0036, 0x0046, 0x00b6, 0x0096, 0x00f6, 0x6214, 0x2248, 0x6210,
-	0x2258, 0x2079, 0x0260, 0x9096, 0x0000, 0x11a0, 0xb814, 0x9084,
-	0x00ff, 0x900e, 0x080c, 0x269f, 0x2118, 0x831f, 0x939c, 0xff00,
-	0x7838, 0x9084, 0x00ff, 0x931d, 0x7c3c, 0x2011, 0x8018, 0x080c,
-	0x4abd, 0x00a8, 0x9096, 0x0001, 0x1148, 0x89ff, 0x0180, 0xa89f,
-	0x000d, 0x7838, 0xa8aa, 0x783c, 0xa8ae, 0x0048, 0x9096, 0x0002,
-	0x1130, 0xa89f, 0x000d, 0x7838, 0xa8aa, 0x783c, 0xa8ae, 0x00fe,
-	0x009e, 0x00be, 0x004e, 0x003e, 0x002e, 0x0005, 0xa978, 0xd1cc,
-	0x0198, 0x918c, 0x00ff, 0x918e, 0x0002, 0x1170, 0xa9ac, 0x918c,
-	0x000f, 0x918e, 0x0001, 0x1140, 0xa880, 0xd0ac, 0x0128, 0xa834,
-	0xa938, 0x9115, 0x190c, 0xb137, 0x0005, 0x0036, 0x2019, 0x0001,
-	0x0010, 0x0036, 0x901e, 0x04c1, 0x01e0, 0x080c, 0xb955, 0x01c8,
-	0x080c, 0xbb39, 0x602f, 0x4000, 0x6014, 0x6017, 0x0000, 0x0096,
-	0x2048, 0xa880, 0x080c, 0xbb56, 0x1118, 0x080c, 0xa717, 0x0040,
-	0xa86b, 0x0103, 0xa87b, 0x0000, 0x83ff, 0x1129, 0x080c, 0x6b1d,
-	0x009e, 0x003e, 0x0005, 0xa884, 0xd0b4, 0x0128, 0xa87f, 0x0006,
-	0xc0ec, 0xa886, 0x0070, 0xd0bc, 0x0118, 0xa87f, 0x0002, 0x0048,
-	0xd0dc, 0x0118, 0xa87f, 0x0003, 0x0020, 0xa87f, 0x0005, 0x080c,
-	0xbc45, 0xa87b, 0x0000, 0x0005, 0x2001, 0x1810, 0x2004, 0xd0ec,
-	0x0005, 0x0006, 0x2001, 0x1810, 0x2004, 0xd0f4, 0x000e, 0x0005,
-	0x0006, 0x2001, 0x1810, 0x2004, 0xd0e4, 0x000e, 0x0005, 0x0036,
-	0x0046, 0x6010, 0x00b6, 0x2058, 0xbba0, 0x00be, 0x2021, 0x0007,
-	0x080c, 0x4c74, 0x004e, 0x003e, 0x0005, 0x0c51, 0x1d81, 0x0005,
-	0x2001, 0x1963, 0x2004, 0x601a, 0x0005, 0x080c, 0x9f18, 0x0804,
-	0x8c37, 0x2001, 0x0109, 0x2004, 0xd084, 0x01e0, 0x0126, 0x2091,
-	0x2800, 0x0006, 0x0016, 0x0026, 0x0036, 0x00f6, 0x00e6, 0x00c6,
-	0x2079, 0x19c4, 0x2071, 0x1800, 0x2061, 0x0100, 0x080c, 0x85b8,
-	0x00ce, 0x00ee, 0x00fe, 0x003e, 0x002e, 0x001e, 0x000e, 0x012e,
-	0x9085, 0x0001, 0x0005, 0x0016, 0x0026, 0x2009, 0x1823, 0x210c,
-	0x9694, 0x0c00, 0x0118, 0x9182, 0x0010, 0x02c8, 0x9016, 0xd6cc,
-	0x0120, 0x9182, 0x0014, 0x0298, 0x7254, 0x9006, 0xd6c4, 0x0120,
-	0x9182, 0x0018, 0x0260, 0x705c, 0x9200, 0x0248, 0x0128, 0x9080,
-	0x0018, 0x9102, 0x0220, 0x9006, 0x002e, 0x001e, 0x0005, 0x080c,
-	0x826a, 0x9085, 0x0001, 0x0cc0, 0x00b6, 0x0066, 0x6000, 0x90b2,
-	0x0010, 0x1a0c, 0x0dc4, 0x001b, 0x006e, 0x00be, 0x0005, 0xbf7f,
-	0xc5a8, 0xc71d, 0xbf7f, 0xbf7f, 0xbf7f, 0xbf7f, 0xbf7f, 0xbfb6,
-	0xc79a, 0xbf7f, 0xbf7f, 0xbf7f, 0xbf7f, 0xbf7f, 0xbf7f, 0x080c,
-	0x0dc4, 0x0066, 0x6000, 0x90b2, 0x0010, 0x1a0c, 0x0dc4, 0x0013,
-	0x006e, 0x0005, 0xbf9a, 0xcc4f, 0xbf9a, 0xbf9a, 0xbf9a, 0xbf9a,
-	0xbf9a, 0xbf9a, 0xcbfc, 0xcca3, 0xbf9a, 0xd1a5, 0xd1db, 0xd1a5,
-	0xd1db, 0xbf9a, 0x080c, 0x0dc4, 0x6000, 0x9082, 0x0010, 0x1a0c,
-	0x0dc4, 0x6000, 0x000a, 0x0005, 0xbfb4, 0xc96b, 0xca29, 0xca43,
-	0xcace, 0xbfb4, 0xcb6f, 0xcb27, 0xc7a6, 0xcbd2, 0xcbe7, 0xbfb4,
-	0xbfb4, 0xbfb4, 0xbfb4, 0xbfb4, 0x080c, 0x0dc4, 0x91b2, 0x0054,
-	0x1a0c, 0x0dc4, 0x2100, 0x91b2, 0x0040, 0x1a04, 0xc34c, 0x0002,
-	0xc000, 0xc214, 0xc000, 0xc000, 0xc000, 0xc21d, 0xc000, 0xc000,
-	0xc000, 0xc000, 0xc000, 0xc000, 0xc000, 0xc000, 0xc000, 0xc000,
-	0xc000, 0xc000, 0xc000, 0xc000, 0xc000, 0xc000, 0xc000, 0xc002,
-	0xc065, 0xc074, 0xc0dd, 0xc113, 0xc18c, 0xc1ff, 0xc000, 0xc000,
-	0xc220, 0xc000, 0xc000, 0xc235, 0xc242, 0xc000, 0xc000, 0xc000,
-	0xc000, 0xc000, 0xc2e8, 0xc000, 0xc000, 0xc2fc, 0xc000, 0xc000,
-	0xc2b7, 0xc000, 0xc000, 0xc000, 0xc000, 0xc000, 0xc000, 0xc000,
-	0xc000, 0xc000, 0xc000, 0xc000, 0xc000, 0xc000, 0xc000, 0xc314,
-	0x080c, 0x0dc4, 0x080c, 0x6704, 0x1150, 0x2001, 0x1836, 0x2004,
-	0xd0cc, 0x1128, 0x9084, 0x0009, 0x9086, 0x0008, 0x1140, 0x6007,
-	0x0009, 0x602f, 0x0009, 0x6017, 0x0000, 0x0804, 0xc20d, 0x080c,
-	0x66fc, 0x00e6, 0x00c6, 0x0036, 0x0026, 0x0016, 0x6210, 0x2258,
-	0xbaa0, 0x0026, 0x2019, 0x0029, 0x080c, 0x8843, 0x0076, 0x903e,
-	0x080c, 0x8748, 0x2c08, 0x080c, 0xce89, 0x007e, 0x001e, 0x001e,
-	0x002e, 0x003e, 0x00ce, 0x00ee, 0x6610, 0x2658, 0x080c, 0x6420,
-	0xbe04, 0x9684, 0x00ff, 0x9082, 0x0006, 0x1268, 0x0016, 0x0026,
-	0x6210, 0x00b6, 0x2258, 0xbaa0, 0x00be, 0x2c08, 0x080c, 0xd2d2,
-	0x002e, 0x001e, 0x1178, 0x080c, 0xcdbb, 0x1904, 0xc0d5, 0x080c,
-	0xcd57, 0x1120, 0x6007, 0x0008, 0x0804, 0xc20d, 0x6007, 0x0009,
-	0x0804, 0xc20d, 0x080c, 0xcffa, 0x0128, 0x080c, 0xcdbb, 0x0d78,
-	0x0804, 0xc0d5, 0x6017, 0x1900, 0x0c88, 0x080c, 0x318a, 0x1904,
-	0xc349, 0x6106, 0x080c, 0xccfb, 0x6007, 0x0006, 0x0804, 0xc20d,
-	0x6007, 0x0007, 0x0804, 0xc20d, 0x080c, 0xd1fc, 0x1904, 0xc349,
-	0x080c, 0x318a, 0x1904, 0xc349, 0x00d6, 0x6610, 0x2658, 0xbe04,
-	0x9684, 0x00ff, 0x9082, 0x0006, 0x1220, 0x2001, 0x0001, 0x080c,
-	0x635e, 0x96b4, 0xff00, 0x8637, 0x9686, 0x0006, 0x0188, 0x9686,
-	0x0004, 0x0170, 0xbe04, 0x96b4, 0x00ff, 0x9686, 0x0006, 0x0140,
-	0x9686, 0x0004, 0x0128, 0x9686, 0x0005, 0x0110, 0x00de, 0x04a8,
-	0x00e6, 0x2071, 0x0260, 0x7034, 0x9084, 0x0003, 0x1168, 0x7034,
-	0x908a, 0x0014, 0x0248, 0x2009, 0x1823, 0x210c, 0x9102, 0x0220,
-	0x7030, 0x9084, 0x0003, 0x0130, 0x00ee, 0x6017, 0x0000, 0x602f,
-	0x0007, 0x00b0, 0x00ee, 0x080c, 0xce1f, 0x1190, 0x9686, 0x0006,
-	0x1140, 0x0026, 0x6210, 0x2258, 0xbaa0, 0x900e, 0x080c, 0x30af,
-	0x002e, 0x080c, 0x64ac, 0x6007, 0x000a, 0x00de, 0x0804, 0xc20d,
-	0x6007, 0x000b, 0x00de, 0x0804, 0xc20d, 0x080c, 0x3066, 0x080c,
-	0xbf0d, 0x6007, 0x0001, 0x0804, 0xc20d, 0x080c, 0xd1fc, 0x1904,
-	0xc349, 0x080c, 0x318a, 0x1904, 0xc349, 0x00d6, 0x00e6, 0x2071,
-	0x0260, 0x7034, 0x90b4, 0x0003, 0x1938, 0x2031, 0x1823, 0x2634,
-	0x9632, 0x0a10, 0x90b2, 0x0014, 0x0a04, 0xc0b4, 0x7030, 0x9084,
-	0x0003, 0x1904, 0xc0b4, 0x00ee, 0x00de, 0x6610, 0x2658, 0xbe04,
-	0x9686, 0x0707, 0x0990, 0x0026, 0x6210, 0x2258, 0xbaa0, 0x900e,
-	0x080c, 0x30af, 0x002e, 0x6007, 0x000c, 0x2001, 0x0001, 0x080c,
-	0xd2b1, 0x0804, 0xc20d, 0x080c, 0x6704, 0x1140, 0x2001, 0x1836,
-	0x2004, 0x9084, 0x0009, 0x9086, 0x0008, 0x1110, 0x0804, 0xc00f,
-	0x080c, 0x66fc, 0x6610, 0x2658, 0xbe04, 0x9684, 0x00ff, 0x9082,
-	0x0006, 0x06c8, 0x1138, 0x0026, 0x2001, 0x0006, 0x080c, 0x639e,
-	0x002e, 0x0050, 0x96b4, 0xff00, 0x8637, 0x9686, 0x0004, 0x0120,
-	0x9686, 0x0006, 0x1904, 0xc0d5, 0x080c, 0xce2c, 0x1120, 0x6007,
-	0x000e, 0x0804, 0xc20d, 0x0046, 0x6410, 0x2458, 0xbca0, 0x0046,
-	0x080c, 0x3066, 0x080c, 0xbf0d, 0x004e, 0x0016, 0x9006, 0x2009,
-	0x185f, 0x210c, 0xd1a4, 0x0148, 0x2009, 0x0029, 0x080c, 0xd156,
-	0x6010, 0x2058, 0xb800, 0xc0e5, 0xb802, 0x001e, 0x004e, 0x6007,
-	0x0001, 0x0804, 0xc20d, 0x2001, 0x0001, 0x080c, 0x635e, 0x0156,
-	0x0016, 0x0026, 0x0036, 0x20a9, 0x0004, 0x2019, 0x1805, 0x2011,
-	0x0270, 0x080c, 0xad79, 0x003e, 0x002e, 0x001e, 0x015e, 0x9005,
-	0x0168, 0x96b4, 0xff00, 0x8637, 0x9682, 0x0004, 0x0a04, 0xc0d5,
-	0x9682, 0x0007, 0x0a04, 0xc13c, 0x0804, 0xc0d5, 0x6017, 0x1900,
-	0x6007, 0x0009, 0x0804, 0xc20d, 0x080c, 0x6704, 0x1140, 0x2001,
-	0x1836, 0x2004, 0x9084, 0x0009, 0x9086, 0x0008, 0x1110, 0x0804,
-	0xc00f, 0x080c, 0x66fc, 0x6610, 0x2658, 0xbe04, 0x9684, 0x00ff,
-	0x0006, 0x0016, 0x908e, 0x0001, 0x0118, 0x908e, 0x0000, 0x1118,
-	0x001e, 0x000e, 0x0080, 0x001e, 0x000e, 0x9082, 0x0006, 0x06a0,
-	0x0150, 0x96b4, 0xff00, 0x8637, 0x9686, 0x0004, 0x0120, 0x9686,
-	0x0006, 0x1904, 0xc0d5, 0x080c, 0xce5a, 0x1138, 0x080c, 0xcd57,
-	0x1120, 0x6007, 0x0010, 0x0804, 0xc20d, 0x0046, 0x6410, 0x2458,
-	0xbca0, 0x0046, 0x080c, 0x3066, 0x080c, 0xbf0d, 0x004e, 0x0016,
-	0x9006, 0x2009, 0x185f, 0x210c, 0xd1a4, 0x0148, 0x2009, 0x0029,
-	0x080c, 0xd156, 0x6010, 0x2058, 0xb800, 0xc0e5, 0xb802, 0x001e,
-	0x004e, 0x6007, 0x0001, 0x0448, 0x080c, 0xcffa, 0x0198, 0x0016,
-	0x968c, 0x00ff, 0x9186, 0x0002, 0x0160, 0x9186, 0x0003, 0x0148,
-	0x001e, 0x96b4, 0xff00, 0x8637, 0x9686, 0x0006, 0x0920, 0x0804,
-	0xc0d5, 0x001e, 0x6017, 0x1900, 0x6007, 0x0009, 0x0070, 0x080c,
-	0x318a, 0x1904, 0xc349, 0x080c, 0xd1fc, 0x1904, 0xc349, 0x080c,
-	0xc4e0, 0x1904, 0xc0d5, 0x6007, 0x0012, 0x6003, 0x0001, 0x080c,
-	0x8718, 0x080c, 0x8c37, 0x0005, 0x6007, 0x0001, 0x6003, 0x0001,
-	0x080c, 0x8718, 0x080c, 0x8c37, 0x0cb0, 0x6007, 0x0005, 0x0c68,
-	0x080c, 0xd1fc, 0x1904, 0xc349, 0x080c, 0x318a, 0x1904, 0xc349,
-	0x080c, 0xc4e0, 0x1904, 0xc0d5, 0x6007, 0x0020, 0x6003, 0x0001,
-	0x080c, 0x8718, 0x080c, 0x8c37, 0x0005, 0x080c, 0x318a, 0x1904,
-	0xc349, 0x6007, 0x0023, 0x6003, 0x0001, 0x080c, 0x8718, 0x080c,
-	0x8c37, 0x0005, 0x080c, 0xd1fc, 0x1904, 0xc349, 0x080c, 0x318a,
-	0x1904, 0xc349, 0x080c, 0xc4e0, 0x1904, 0xc0d5, 0x0016, 0x0026,
-	0x00e6, 0x2071, 0x0260, 0x2c08, 0x2011, 0x181f, 0x2214, 0x703c,
-	0x9206, 0x11e0, 0x2011, 0x181e, 0x2214, 0x7038, 0x9084, 0x00ff,
-	0x9206, 0x11a0, 0x7240, 0x080c, 0xb943, 0x0570, 0x2260, 0x6008,
-	0x9086, 0xffff, 0x0120, 0x7244, 0x6008, 0x9206, 0x1528, 0x6020,
-	0x9086, 0x0007, 0x1508, 0x080c, 0x9f18, 0x04a0, 0x7244, 0x9286,
-	0xffff, 0x0180, 0x2c08, 0x080c, 0xb943, 0x01b0, 0x2260, 0x7240,
-	0x6008, 0x9206, 0x1188, 0x6010, 0x9190, 0x0004, 0x2214, 0x9206,
-	0x01b8, 0x0050, 0x7240, 0x2c08, 0x9006, 0x080c, 0xd128, 0x1180,
-	0x7244, 0x9286, 0xffff, 0x01b0, 0x2160, 0x6007, 0x0026, 0x6017,
-	0x1700, 0x7214, 0x9296, 0xffff, 0x1180, 0x6007, 0x0025, 0x0068,
-	0x6020, 0x9086, 0x0007, 0x1d80, 0x6004, 0x9086, 0x0024, 0x1110,
-	0x080c, 0x9f18, 0x2160, 0x6007, 0x0025, 0x6003, 0x0001, 0x080c,
-	0x8718, 0x080c, 0x8c37, 0x00ee, 0x002e, 0x001e, 0x0005, 0x2001,
-	0x0001, 0x080c, 0x635e, 0x0156, 0x0016, 0x0026, 0x0036, 0x20a9,
-	0x0004, 0x2019, 0x1805, 0x2011, 0x0276, 0x080c, 0xad79, 0x003e,
-	0x002e, 0x001e, 0x015e, 0x0120, 0x6007, 0x0031, 0x0804, 0xc20d,
-	0x080c, 0xa9b9, 0x080c, 0x72e5, 0x1190, 0x0006, 0x0026, 0x0036,
-	0x080c, 0x72ff, 0x1138, 0x080c, 0x75dc, 0x080c, 0x5ef6, 0x080c,
-	0x7212, 0x0010, 0x080c, 0x72bd, 0x003e, 0x002e, 0x000e, 0x0005,
-	0x080c, 0x318a, 0x1904, 0xc349, 0x080c, 0xc4e0, 0x1904, 0xc0d5,
-	0x6106, 0x080c, 0xc4fc, 0x1120, 0x6007, 0x002b, 0x0804, 0xc20d,
-	0x6007, 0x002c, 0x0804, 0xc20d, 0x080c, 0xd1fc, 0x1904, 0xc349,
-	0x080c, 0x318a, 0x1904, 0xc349, 0x080c, 0xc4e0, 0x1904, 0xc0d5,
-	0x6106, 0x080c, 0xc501, 0x1120, 0x6007, 0x002e, 0x0804, 0xc20d,
-	0x6007, 0x002f, 0x0804, 0xc20d, 0x00e6, 0x0026, 0x080c, 0x6704,
-	0x0550, 0x080c, 0x66fc, 0x080c, 0xd205, 0x1518, 0x2071, 0x1800,
-	0x70d8, 0x9085, 0x0003, 0x70da, 0x00f6, 0x2079, 0x0100, 0x72ac,
-	0x9284, 0x00ff, 0x707a, 0x78e6, 0x9284, 0xff00, 0x727c, 0x9205,
-	0x707e, 0x78ea, 0x00fe, 0x70e3, 0x0000, 0x080c, 0x6742, 0x0120,
-	0x2011, 0x19dd, 0x2013, 0x07d0, 0xd0ac, 0x1128, 0x080c, 0x2e5f,
-	0x0010, 0x080c, 0xd239, 0x002e, 0x00ee, 0x080c, 0x9f18, 0x0804,
-	0xc213, 0x080c, 0x9f18, 0x0005, 0x2600, 0x0002, 0xc362, 0xc362,
-	0xc362, 0xc362, 0xc362, 0xc364, 0xc362, 0xc362, 0xc362, 0xc362,
-	0xc37e, 0xc362, 0xc362, 0xc362, 0xc390, 0xc3a6, 0xc3d7, 0xc362,
-	0xc362, 0xc3dc, 0x080c, 0x0dc4, 0x080c, 0xd1fc, 0x1d10, 0x080c,
-	0x318a, 0x19f8, 0x7038, 0x6016, 0x6007, 0x0045, 0x6003, 0x0001,
-	0x080c, 0x8718, 0x0005, 0x080c, 0x3066, 0x080c, 0xbf0d, 0x6007,
-	0x0001, 0x6003, 0x0001, 0x080c, 0x8718, 0x0005, 0x080c, 0xd1fc,
-	0x1940, 0x080c, 0x318a, 0x1928, 0x080c, 0xc4e0, 0x1d60, 0x703c,
-	0x6016, 0x6007, 0x004a, 0x6003, 0x0001, 0x080c, 0x8718, 0x0005,
-	0x2001, 0x1823, 0x2004, 0x9082, 0x00e1, 0x1268, 0x080c, 0xc3ea,
-	0x0904, 0xc349, 0x6007, 0x004e, 0x6003, 0x0001, 0x080c, 0x8718,
-	0x080c, 0x8c37, 0x0005, 0x6007, 0x0012, 0x0cb0, 0x6007, 0x004f,
-	0x6017, 0x0000, 0x7134, 0x918c, 0x00ff, 0x81ff, 0x0508, 0x9186,
-	0x0001, 0x1160, 0x7140, 0x2001, 0x199a, 0x2004, 0x9106, 0x11b0,
-	0x7144, 0x2001, 0x199b, 0x2004, 0x9106, 0x0190, 0x9186, 0x0002,
-	0x1168, 0x2011, 0x0276, 0x20a9, 0x0004, 0x6010, 0x0096, 0x2048,
-	0x2019, 0x000a, 0x080c, 0xad8d, 0x009e, 0x0110, 0x6017, 0x0001,
-	0x6003, 0x0001, 0x080c, 0x8718, 0x080c, 0x8c37, 0x0005, 0x6007,
-	0x0050, 0x703c, 0x6016, 0x0ca0, 0x080c, 0xd1fc, 0x1904, 0xc349,
-	0x080c, 0x318a, 0x1904, 0xc349, 0x6007, 0x0053, 0x6003, 0x0001,
-	0x0804, 0x8718, 0x0016, 0x0096, 0x0086, 0x00e6, 0x01c6, 0x01d6,
+	0x8000, 0x080c, 0x6c02, 0x012e, 0x009e, 0x080c, 0xa39d, 0x0c30,
+	0x0096, 0x9186, 0x0016, 0x1128, 0x2001, 0x0004, 0x080c, 0x6448,
+	0x00e8, 0x9186, 0x0015, 0x1510, 0x2011, 0x1823, 0x2204, 0x9086,
+	0x0014, 0x11e0, 0x6010, 0x00b6, 0x2058, 0x080c, 0x6597, 0x00be,
+	0x080c, 0xb382, 0x1198, 0x6010, 0x00b6, 0x2058, 0xb890, 0x00be,
+	0x9005, 0x0160, 0x2001, 0x0006, 0x080c, 0x6448, 0x6014, 0x2048,
+	0xa86c, 0xd0fc, 0x0170, 0x080c, 0xa7a3, 0x0048, 0x6014, 0x2048,
+	0xa86c, 0xd0fc, 0x0500, 0x080c, 0xadb3, 0x080c, 0xa39d, 0x009e,
+	0x0005, 0x6014, 0x6310, 0x2358, 0x904d, 0x090c, 0x0dc3, 0xa87f,
+	0x0000, 0xa887, 0x0000, 0xa89b, 0x4000, 0x080c, 0x674b, 0xa99e,
+	0x080c, 0x4de7, 0x0126, 0x2091, 0x8000, 0x080c, 0x6c02, 0x012e,
+	0x080c, 0xa39d, 0x0c20, 0x6014, 0x904d, 0x090c, 0x0dc3, 0xa87f,
+	0x0030, 0xa887, 0x0000, 0xa89b, 0x4005, 0xa89f, 0x0004, 0xa86b,
+	0x0139, 0x0126, 0x2091, 0x8000, 0x080c, 0x6c02, 0x012e, 0x080c,
+	0xa39d, 0x0868, 0xa87c, 0x9086, 0x0005, 0x1108, 0x0009, 0x0005,
+	0xa884, 0xc0ad, 0xa886, 0x0005, 0x6043, 0x0000, 0x6017, 0x0000,
+	0x6003, 0x0001, 0x6007, 0x0050, 0x080c, 0x88a1, 0x080c, 0x8e38,
+	0x0005, 0x00c6, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc,
+	0x0120, 0x6020, 0x9084, 0x000f, 0x0013, 0x00ce, 0x0005, 0xbecb,
+	0xc4f0, 0xc4f0, 0xc4f3, 0xdd67, 0xdd82, 0xdd85, 0xbecb, 0xbecb,
+	0xbecb, 0xbecb, 0xbecb, 0xbecb, 0xbecb, 0xbecb, 0x080c, 0x0dc3,
+	0xa001, 0xa001, 0x0005, 0x0096, 0x6014, 0x904d, 0x0118, 0xa880,
+	0xd0e4, 0x1110, 0x009e, 0x0010, 0x009e, 0x0005, 0x6010, 0x00b6,
+	0x2058, 0xb800, 0x00be, 0xd0bc, 0x0550, 0x2001, 0x1833, 0x2004,
+	0x9005, 0x1540, 0x00f6, 0x2c78, 0x080c, 0xa347, 0x0508, 0x7810,
+	0x6012, 0x080c, 0xc640, 0x7820, 0x9086, 0x0003, 0x0128, 0x7808,
+	0x603a, 0x2f00, 0x603e, 0x0020, 0x7808, 0x603e, 0x2f00, 0x603a,
+	0x602e, 0x6023, 0x0001, 0x6007, 0x0035, 0x6003, 0x0001, 0x7954,
+	0x6156, 0x080c, 0x88a1, 0x080c, 0x8e38, 0x2f60, 0x00fe, 0x0005,
+	0x2f60, 0x00fe, 0x2001, 0x1964, 0x2004, 0x6042, 0x0005, 0x0016,
+	0x0096, 0x6814, 0x2048, 0xa880, 0xd0e4, 0x0180, 0xc0e4, 0xa882,
+	0xa87b, 0x0000, 0xa897, 0x0000, 0xa893, 0x0000, 0xd0cc, 0x0130,
+	0xc0cc, 0xa882, 0xa87c, 0x2048, 0x080c, 0x0fbf, 0x6830, 0x6036,
+	0x908e, 0x0001, 0x0148, 0x6803, 0x0002, 0x9086, 0x0005, 0x0170,
+	0x9006, 0x602e, 0x6032, 0x00d0, 0x681c, 0xc085, 0x681e, 0x6803,
+	0x0004, 0x6824, 0xc0f4, 0x9085, 0x0c00, 0x6826, 0x6814, 0x2048,
+	0xa8b0, 0x6938, 0x9102, 0xa8b4, 0x693c, 0x9103, 0x1e48, 0x683c,
+	0x602e, 0x6838, 0x9084, 0xfffc, 0x683a, 0x6032, 0x2d00, 0x603a,
+	0x6808, 0x603e, 0x6910, 0x6112, 0x6954, 0x6156, 0x6023, 0x0001,
+	0x6007, 0x0039, 0x6003, 0x0001, 0x080c, 0x88a1, 0x080c, 0x8e38,
+	0x009e, 0x001e, 0x0005, 0x6024, 0xd0d4, 0x0510, 0xd0f4, 0x11f8,
+	0x6038, 0x940a, 0x603c, 0x9303, 0x0230, 0x9105, 0x0120, 0x6024,
+	0xc0d4, 0xc0f5, 0x0098, 0x643a, 0x633e, 0xac3e, 0xab42, 0x0046,
+	0x0036, 0x2400, 0xacb0, 0x9402, 0xa836, 0x2300, 0xabb4, 0x9303,
+	0xa83a, 0x003e, 0x004e, 0x6024, 0xc0d4, 0x0000, 0x6026, 0x0005,
+	0xd0f4, 0x1138, 0xa83c, 0x603a, 0xa840, 0x603e, 0x6024, 0xc0f5,
+	0x6026, 0x0005, 0x0006, 0x0016, 0x6004, 0x908e, 0x0034, 0x01b8,
+	0x908e, 0x0035, 0x01a0, 0x908e, 0x0036, 0x0188, 0x908e, 0x0037,
+	0x0170, 0x908e, 0x0038, 0x0158, 0x908e, 0x0039, 0x0140, 0x908e,
+	0x003a, 0x0128, 0x908e, 0x003b, 0x0110, 0x9085, 0x0001, 0x001e,
+	0x000e, 0x0005, 0x0006, 0x0016, 0x0026, 0x0036, 0x00e6, 0x2001,
+	0x195e, 0x200c, 0x8000, 0x2014, 0x2001, 0x0032, 0x080c, 0x871c,
+	0x2001, 0x1962, 0x82ff, 0x1110, 0x2011, 0x0014, 0x2202, 0x2001,
+	0x1960, 0x200c, 0x8000, 0x2014, 0x2071, 0x1948, 0x711a, 0x721e,
+	0x2001, 0x0064, 0x080c, 0x871c, 0x2001, 0x1963, 0x82ff, 0x1110,
+	0x2011, 0x0014, 0x2202, 0x2001, 0x1964, 0x9288, 0x000a, 0x2102,
+	0x2001, 0x1a73, 0x2102, 0x2001, 0x0032, 0x080c, 0x1568, 0x080c,
+	0x684e, 0x00ee, 0x003e, 0x002e, 0x001e, 0x000e, 0x0005, 0x0006,
+	0x0016, 0x00e6, 0x2001, 0x1962, 0x2003, 0x0028, 0x2001, 0x1963,
+	0x2003, 0x0014, 0x2071, 0x1948, 0x701b, 0x0000, 0x701f, 0x07d0,
+	0x2001, 0x1964, 0x2009, 0x001e, 0x2102, 0x2001, 0x1a73, 0x2102,
+	0x2001, 0x0032, 0x080c, 0x1568, 0x00ee, 0x001e, 0x000e, 0x0005,
+	0x0096, 0x6058, 0x904d, 0x0110, 0x080c, 0x103f, 0x009e, 0x0005,
+	0x0005, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0xa347, 0x0180,
+	0x2b08, 0x6112, 0x0ca9, 0x6023, 0x0001, 0x2900, 0x6016, 0x2009,
+	0x0033, 0x080c, 0xa419, 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005,
+	0x9006, 0x0cd8, 0x0096, 0x00e6, 0x00f6, 0x2071, 0x1800, 0x9186,
+	0x0015, 0x1520, 0x708c, 0x9086, 0x0018, 0x0120, 0x708c, 0x9086,
+	0x0014, 0x11e0, 0x6014, 0x2048, 0xaa3c, 0xd2e4, 0x1160, 0x2c78,
+	0x080c, 0x9037, 0x01d8, 0x7078, 0xaa50, 0x9206, 0x1160, 0x707c,
+	0xaa54, 0x9206, 0x1140, 0x6210, 0x00b6, 0x2258, 0xbaa0, 0x00be,
+	0x900e, 0x080c, 0x314b, 0x080c, 0xa7a3, 0x0020, 0x080c, 0xadb3,
+	0x080c, 0xa39d, 0x00fe, 0x00ee, 0x009e, 0x0005, 0x705c, 0xaa54,
+	0x9206, 0x0d48, 0x0c80, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c,
+	0xa347, 0x0188, 0x2b08, 0x6112, 0x080c, 0xc640, 0x6023, 0x0001,
+	0x2900, 0x6016, 0x2009, 0x004d, 0x080c, 0xa419, 0x9085, 0x0001,
+	0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x00c6, 0x0126, 0x2091,
+	0x8000, 0x0016, 0x080c, 0xa347, 0x0180, 0x2b08, 0x6112, 0x080c,
+	0xc640, 0x6023, 0x0001, 0x2900, 0x6016, 0x001e, 0x080c, 0xa419,
+	0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, 0x001e, 0x9006, 0x0cd0,
+	0x0016, 0x0026, 0x0036, 0x0046, 0x0056, 0x0066, 0x0096, 0x00e6,
+	0x00f6, 0x2071, 0x1800, 0x9186, 0x0015, 0x1568, 0x718c, 0x6014,
+	0x2048, 0xa814, 0x8003, 0x9106, 0x1530, 0x20e1, 0x0000, 0x2001,
+	0x197d, 0x2003, 0x0000, 0x6014, 0x2048, 0xa830, 0x20a8, 0x8906,
+	0x8006, 0x8007, 0x9094, 0x003f, 0x22e8, 0x9084, 0xffc0, 0x9080,
+	0x001c, 0x20a0, 0x2001, 0x197d, 0x0016, 0x200c, 0x080c, 0xcf43,
+	0x001e, 0xa804, 0x9005, 0x0110, 0x2048, 0x0c38, 0x6014, 0x2048,
+	0xa86b, 0x0103, 0x0010, 0x080c, 0xadb3, 0x080c, 0xa39d, 0x00fe,
+	0x00ee, 0x009e, 0x006e, 0x005e, 0x004e, 0x003e, 0x002e, 0x001e,
+	0x0005, 0x0096, 0x00e6, 0x00f6, 0x2071, 0x1800, 0x9186, 0x0015,
+	0x11b8, 0x708c, 0x9086, 0x0004, 0x1198, 0x6014, 0x2048, 0x2c78,
+	0x080c, 0x9037, 0x01a8, 0x7078, 0xaa78, 0x9206, 0x1130, 0x707c,
+	0xaa7c, 0x9206, 0x1110, 0x080c, 0x3102, 0x080c, 0xa7a3, 0x0020,
+	0x080c, 0xadb3, 0x080c, 0xa39d, 0x00fe, 0x00ee, 0x009e, 0x0005,
+	0x705c, 0xaa7c, 0x9206, 0x0d78, 0x0c80, 0x0096, 0x00e6, 0x00f6,
+	0x2071, 0x1800, 0x9186, 0x0015, 0x1550, 0x708c, 0x9086, 0x0004,
+	0x1530, 0x6014, 0x2048, 0x2c78, 0x080c, 0x9037, 0x05f0, 0x7078,
+	0xaad0, 0x9206, 0x1180, 0x707c, 0xaad4, 0x9206, 0x1160, 0x080c,
+	0x3102, 0x0016, 0xa99c, 0xaab4, 0x9284, 0x1000, 0xc0fd, 0x080c,
+	0x560f, 0x001e, 0x0010, 0x080c, 0x53f9, 0x080c, 0xc1cd, 0x0508,
+	0xa87f, 0x0000, 0xa887, 0x0000, 0xa89b, 0x4000, 0x0080, 0x080c,
+	0xc1cd, 0x01b8, 0x6014, 0x2048, 0x080c, 0x53f9, 0x1d70, 0xa87f,
+	0x0030, 0xa887, 0x0000, 0xa89b, 0x4005, 0xa89f, 0x0004, 0x0126,
+	0x2091, 0x8000, 0xa86b, 0x0139, 0x080c, 0x6c02, 0x012e, 0x080c,
+	0xa39d, 0x00fe, 0x00ee, 0x009e, 0x0005, 0x705c, 0xaad4, 0x9206,
+	0x0930, 0x0888, 0x0016, 0x0026, 0xa880, 0xd0ac, 0x0178, 0xa938,
+	0xaa34, 0x2100, 0x9205, 0x0150, 0xa894, 0x9106, 0x1118, 0xa890,
+	0x9206, 0x0120, 0xa996, 0xaa92, 0x9085, 0x0001, 0x002e, 0x001e,
+	0x0005, 0x00b6, 0x00d6, 0x0036, 0x080c, 0xc1cd, 0x0904, 0xc7fc,
+	0x0096, 0x6314, 0x2348, 0xa87e, 0xa986, 0x929e, 0x4000, 0x1550,
+	0x6310, 0x00c6, 0x2358, 0x2009, 0x0000, 0xa86c, 0xd0f4, 0x1110,
+	0x080c, 0x674b, 0xaa9a, 0xa99e, 0x20a9, 0x0004, 0xa860, 0x20e8,
+	0xa85c, 0x9080, 0x0032, 0x20a0, 0xb8b4, 0x20e0, 0xb8b8, 0x9080,
+	0x0006, 0x2098, 0x080c, 0x0f8a, 0x20a9, 0x0004, 0xa85c, 0x9080,
+	0x0036, 0x20a0, 0xb8b8, 0x9080, 0x000a, 0x2098, 0x080c, 0x0f8a,
+	0x00ce, 0x0090, 0xaa9a, 0x3918, 0x9398, 0x0007, 0x231c, 0x6004,
+	0x9086, 0x0016, 0x0110, 0xa89f, 0x0004, 0xaba6, 0x6310, 0x2358,
+	0xb804, 0x9084, 0x00ff, 0xa8a2, 0xa86c, 0xc0f4, 0xa86e, 0x080c,
+	0x6bf5, 0x6017, 0x0000, 0x009e, 0x003e, 0x00de, 0x00be, 0x0005,
+	0x0026, 0x0036, 0x0046, 0x00b6, 0x0096, 0x00f6, 0x6214, 0x2248,
+	0x6210, 0x2258, 0x2079, 0x0260, 0x9096, 0x0000, 0x11a0, 0xb814,
+	0x9084, 0x00ff, 0x900e, 0x080c, 0x2708, 0x2118, 0x831f, 0x939c,
+	0xff00, 0x7838, 0x9084, 0x00ff, 0x931d, 0x7c3c, 0x2011, 0x8018,
+	0x080c, 0x4b6d, 0x00a8, 0x9096, 0x0001, 0x1148, 0x89ff, 0x0180,
+	0xa89f, 0x000d, 0x7838, 0xa8aa, 0x783c, 0xa8ae, 0x0048, 0x9096,
+	0x0002, 0x1130, 0xa89f, 0x000d, 0x7838, 0xa8aa, 0x783c, 0xa8ae,
+	0x00fe, 0x009e, 0x00be, 0x004e, 0x003e, 0x002e, 0x0005, 0x00c6,
+	0x0026, 0x0016, 0x9186, 0x0035, 0x0110, 0x6a38, 0x0008, 0x6a2c,
+	0x080c, 0xc1bb, 0x01f0, 0x2260, 0x6120, 0x9186, 0x0003, 0x0118,
+	0x9186, 0x0006, 0x1190, 0x6838, 0x9206, 0x0140, 0x683c, 0x9206,
+	0x1160, 0x6108, 0x6838, 0x9106, 0x1140, 0x0020, 0x6008, 0x693c,
+	0x9106, 0x1118, 0x6010, 0x6910, 0x9106, 0x001e, 0x002e, 0x00ce,
+	0x0005, 0x9085, 0x0001, 0x0cc8, 0xa978, 0xd1cc, 0x0198, 0x918c,
+	0x00ff, 0x918e, 0x0002, 0x1170, 0xa9ac, 0x918c, 0x000f, 0x918e,
+	0x0001, 0x1140, 0xa880, 0xd0ac, 0x0128, 0xa834, 0xa938, 0x9115,
+	0x190c, 0xb84f, 0x0005, 0x0036, 0x2019, 0x0001, 0x0010, 0x0036,
+	0x901e, 0x04c1, 0x01e0, 0x080c, 0xc1cd, 0x01c8, 0x080c, 0xc3b4,
+	0x6037, 0x4000, 0x6014, 0x6017, 0x0000, 0x0096, 0x2048, 0xa880,
+	0x080c, 0xc3d1, 0x1118, 0x080c, 0xadb3, 0x0040, 0xa86b, 0x0103,
+	0xa87b, 0x0000, 0x83ff, 0x1129, 0x080c, 0x6c02, 0x009e, 0x003e,
+	0x0005, 0xa884, 0xd0b4, 0x0128, 0xa87f, 0x0006, 0xc0ec, 0xa886,
+	0x0070, 0xd0bc, 0x0118, 0xa87f, 0x0002, 0x0048, 0xd0dc, 0x0118,
+	0xa87f, 0x0003, 0x0020, 0xa87f, 0x0005, 0x080c, 0xc4c0, 0xa87b,
+	0x0000, 0x0005, 0x2001, 0x1810, 0x2004, 0xd0ec, 0x0005, 0x0006,
+	0x2001, 0x1810, 0x2004, 0xd0f4, 0x000e, 0x0005, 0x0006, 0x2001,
+	0x1810, 0x2004, 0xd0e4, 0x000e, 0x0005, 0x0036, 0x0046, 0x6010,
+	0x00b6, 0x2058, 0xbba0, 0x00be, 0x2021, 0x0007, 0x080c, 0x4d24,
+	0x004e, 0x003e, 0x0005, 0x0c51, 0x1d81, 0x0005, 0x2001, 0x1962,
+	0x2004, 0x601a, 0x0005, 0x2001, 0x1964, 0x2004, 0x6042, 0x0005,
+	0x080c, 0xa39d, 0x0804, 0x8e38, 0x2001, 0x0109, 0x2004, 0xd084,
+	0x01e0, 0x0126, 0x2091, 0x2800, 0x0006, 0x0016, 0x0026, 0x0036,
+	0x00f6, 0x00e6, 0x00c6, 0x2079, 0x19c4, 0x2071, 0x1800, 0x2061,
+	0x0100, 0x080c, 0x8789, 0x00ce, 0x00ee, 0x00fe, 0x003e, 0x002e,
+	0x001e, 0x000e, 0x012e, 0x9085, 0x0001, 0x0005, 0x0016, 0x0026,
+	0x2009, 0x1823, 0x210c, 0x9694, 0x0c00, 0x0118, 0x9182, 0x0010,
+	0x02c8, 0x9016, 0xd6cc, 0x0120, 0x9182, 0x0014, 0x0298, 0x7254,
+	0x9006, 0xd6c4, 0x0120, 0x9182, 0x0018, 0x0260, 0x705c, 0x9200,
+	0x0248, 0x0128, 0x9080, 0x0018, 0x9102, 0x0220, 0x9006, 0x002e,
+	0x001e, 0x0005, 0x080c, 0x83cc, 0x9085, 0x0001, 0x0cc0, 0x00b6,
+	0x0066, 0x6000, 0x90b2, 0x0010, 0x1a0c, 0x0dc3, 0x001b, 0x006e,
+	0x00be, 0x0005, 0xc95a, 0xd0a8, 0xd21d, 0xc95a, 0xc95a, 0xc95a,
+	0xc95a, 0xc95a, 0xc991, 0xd2a1, 0xc95a, 0xc95a, 0xc95a, 0xc95a,
+	0xc95a, 0xc95a, 0x080c, 0x0dc3, 0x0066, 0x6000, 0x90b2, 0x0010,
+	0x1a0c, 0x0dc3, 0x0013, 0x006e, 0x0005, 0xc975, 0xd7f0, 0xc975,
+	0xc975, 0xc975, 0xc975, 0xc975, 0xc975, 0xd79d, 0xd844, 0xc975,
+	0xde9a, 0xded0, 0xde9a, 0xded0, 0xc975, 0x080c, 0x0dc3, 0x6000,
+	0x9082, 0x0010, 0x1a0c, 0x0dc3, 0x6000, 0x000a, 0x0005, 0xc98f,
+	0xd47f, 0xd54e, 0xd571, 0xd631, 0xc98f, 0xd710, 0xd6b9, 0xd2ad,
+	0xd773, 0xd788, 0xc98f, 0xc98f, 0xc98f, 0xc98f, 0xc98f, 0x080c,
+	0x0dc3, 0x91b2, 0x0054, 0x1a0c, 0x0dc3, 0x2100, 0x91b2, 0x0040,
+	0x1a04, 0xce2f, 0x0002, 0xc9db, 0xcbef, 0xc9db, 0xc9db, 0xc9db,
+	0xcbf8, 0xc9db, 0xc9db, 0xc9db, 0xc9db, 0xc9db, 0xc9db, 0xc9db,
+	0xc9db, 0xc9db, 0xc9db, 0xc9db, 0xc9db, 0xc9db, 0xc9db, 0xc9db,
+	0xc9db, 0xc9db, 0xc9dd, 0xca40, 0xca4f, 0xcab8, 0xcaee, 0xcb67,
+	0xcbda, 0xc9db, 0xc9db, 0xcbfb, 0xc9db, 0xc9db, 0xcc10, 0xcc1d,
+	0xc9db, 0xc9db, 0xc9db, 0xc9db, 0xc9db, 0xccc3, 0xc9db, 0xc9db,
+	0xccd7, 0xc9db, 0xc9db, 0xcc92, 0xc9db, 0xc9db, 0xc9db, 0xccef,
+	0xc9db, 0xc9db, 0xc9db, 0xcd6c, 0xc9db, 0xc9db, 0xc9db, 0xc9db,
+	0xc9db, 0xc9db, 0xcdf7, 0x080c, 0x0dc3, 0x080c, 0x682b, 0x1150,
+	0x2001, 0x1836, 0x2004, 0xd0cc, 0x1128, 0x9084, 0x0009, 0x9086,
+	0x0008, 0x1140, 0x6007, 0x0009, 0x602f, 0x0009, 0x6017, 0x0000,
+	0x0804, 0xcbe8, 0x080c, 0x6814, 0x00e6, 0x00c6, 0x0036, 0x0026,
+	0x0016, 0x6210, 0x2258, 0xbaa0, 0x0026, 0x2019, 0x0029, 0x080c,
+	0x8a2b, 0x0076, 0x903e, 0x080c, 0x8919, 0x2c08, 0x080c, 0xda37,
+	0x007e, 0x001e, 0x001e, 0x002e, 0x003e, 0x00ce, 0x00ee, 0x6610,
+	0x2658, 0x080c, 0x650b, 0xbe04, 0x9684, 0x00ff, 0x9082, 0x0006,
+	0x1268, 0x0016, 0x0026, 0x6210, 0x00b6, 0x2258, 0xbaa0, 0x00be,
+	0x2c08, 0x080c, 0xe05f, 0x002e, 0x001e, 0x1178, 0x080c, 0xd969,
+	0x1904, 0xcab0, 0x080c, 0xd905, 0x1120, 0x6007, 0x0008, 0x0804,
+	0xcbe8, 0x6007, 0x0009, 0x0804, 0xcbe8, 0x080c, 0xdba8, 0x0128,
+	0x080c, 0xd969, 0x0d78, 0x0804, 0xcab0, 0x6017, 0x1900, 0x0c88,
+	0x080c, 0x3226, 0x1904, 0xce2c, 0x6106, 0x080c, 0xd8a9, 0x6007,
+	0x0006, 0x0804, 0xcbe8, 0x6007, 0x0007, 0x0804, 0xcbe8, 0x080c,
+	0xdf0c, 0x1904, 0xce2c, 0x080c, 0x3226, 0x1904, 0xce2c, 0x00d6,
+	0x6610, 0x2658, 0xbe04, 0x9684, 0x00ff, 0x9082, 0x0006, 0x1220,
+	0x2001, 0x0001, 0x080c, 0x6434, 0x96b4, 0xff00, 0x8637, 0x9686,
+	0x0006, 0x0188, 0x9686, 0x0004, 0x0170, 0xbe04, 0x96b4, 0x00ff,
+	0x9686, 0x0006, 0x0140, 0x9686, 0x0004, 0x0128, 0x9686, 0x0005,
+	0x0110, 0x00de, 0x04a8, 0x00e6, 0x2071, 0x0260, 0x7034, 0x9084,
+	0x0003, 0x1168, 0x7034, 0x908a, 0x0014, 0x0248, 0x2009, 0x1823,
+	0x210c, 0x9102, 0x0220, 0x7030, 0x9084, 0x0003, 0x0130, 0x00ee,
+	0x6017, 0x0000, 0x602f, 0x0007, 0x00b0, 0x00ee, 0x080c, 0xd9cd,
+	0x1190, 0x9686, 0x0006, 0x1140, 0x0026, 0x6210, 0x2258, 0xbaa0,
+	0x900e, 0x080c, 0x314b, 0x002e, 0x080c, 0x6597, 0x6007, 0x000a,
+	0x00de, 0x0804, 0xcbe8, 0x6007, 0x000b, 0x00de, 0x0804, 0xcbe8,
+	0x080c, 0x3102, 0x080c, 0xc8e3, 0x6007, 0x0001, 0x0804, 0xcbe8,
+	0x080c, 0xdf0c, 0x1904, 0xce2c, 0x080c, 0x3226, 0x1904, 0xce2c,
+	0x00d6, 0x00e6, 0x2071, 0x0260, 0x7034, 0x90b4, 0x0003, 0x1938,
+	0x2031, 0x1823, 0x2634, 0x9632, 0x0a10, 0x90b2, 0x0014, 0x0a04,
+	0xca8f, 0x7030, 0x9084, 0x0003, 0x1904, 0xca8f, 0x00ee, 0x00de,
+	0x6610, 0x2658, 0xbe04, 0x9686, 0x0707, 0x0990, 0x0026, 0x6210,
+	0x2258, 0xbaa0, 0x900e, 0x080c, 0x314b, 0x002e, 0x6007, 0x000c,
+	0x2001, 0x0001, 0x080c, 0xe03e, 0x0804, 0xcbe8, 0x080c, 0x682b,
+	0x1140, 0x2001, 0x1836, 0x2004, 0x9084, 0x0009, 0x9086, 0x0008,
+	0x1110, 0x0804, 0xc9ea, 0x080c, 0x6814, 0x6610, 0x2658, 0xbe04,
+	0x9684, 0x00ff, 0x9082, 0x0006, 0x06c8, 0x1138, 0x0026, 0x2001,
+	0x0006, 0x080c, 0x6474, 0x002e, 0x0050, 0x96b4, 0xff00, 0x8637,
+	0x9686, 0x0004, 0x0120, 0x9686, 0x0006, 0x1904, 0xcab0, 0x080c,
+	0xd9da, 0x1120, 0x6007, 0x000e, 0x0804, 0xcbe8, 0x0046, 0x6410,
+	0x2458, 0xbca0, 0x0046, 0x080c, 0x3102, 0x080c, 0xc8e3, 0x004e,
+	0x0016, 0x9006, 0x2009, 0x185f, 0x210c, 0xd1a4, 0x0148, 0x2009,
+	0x0029, 0x080c, 0xdd18, 0x6010, 0x2058, 0xb800, 0xc0e5, 0xb802,
+	0x001e, 0x004e, 0x6007, 0x0001, 0x0804, 0xcbe8, 0x2001, 0x0001,
+	0x080c, 0x6434, 0x0156, 0x0016, 0x0026, 0x0036, 0x20a9, 0x0004,
+	0x2019, 0x1805, 0x2011, 0x0270, 0x080c, 0xb434, 0x003e, 0x002e,
+	0x001e, 0x015e, 0x9005, 0x0168, 0x96b4, 0xff00, 0x8637, 0x9682,
+	0x0004, 0x0a04, 0xcab0, 0x9682, 0x0007, 0x0a04, 0xcb17, 0x0804,
+	0xcab0, 0x6017, 0x1900, 0x6007, 0x0009, 0x0804, 0xcbe8, 0x080c,
+	0x682b, 0x1140, 0x2001, 0x1836, 0x2004, 0x9084, 0x0009, 0x9086,
+	0x0008, 0x1110, 0x0804, 0xc9ea, 0x080c, 0x6814, 0x6610, 0x2658,
+	0xbe04, 0x9684, 0x00ff, 0x0006, 0x0016, 0x908e, 0x0001, 0x0118,
+	0x908e, 0x0000, 0x1118, 0x001e, 0x000e, 0x0080, 0x001e, 0x000e,
+	0x9082, 0x0006, 0x06a0, 0x0150, 0x96b4, 0xff00, 0x8637, 0x9686,
+	0x0004, 0x0120, 0x9686, 0x0006, 0x1904, 0xcab0, 0x080c, 0xda08,
+	0x1138, 0x080c, 0xd905, 0x1120, 0x6007, 0x0010, 0x0804, 0xcbe8,
+	0x0046, 0x6410, 0x2458, 0xbca0, 0x0046, 0x080c, 0x3102, 0x080c,
+	0xc8e3, 0x004e, 0x0016, 0x9006, 0x2009, 0x185f, 0x210c, 0xd1a4,
+	0x0148, 0x2009, 0x0029, 0x080c, 0xdd18, 0x6010, 0x2058, 0xb800,
+	0xc0e5, 0xb802, 0x001e, 0x004e, 0x6007, 0x0001, 0x0448, 0x080c,
+	0xdba8, 0x0198, 0x0016, 0x968c, 0x00ff, 0x9186, 0x0002, 0x0160,
+	0x9186, 0x0003, 0x0148, 0x001e, 0x96b4, 0xff00, 0x8637, 0x9686,
+	0x0006, 0x0920, 0x0804, 0xcab0, 0x001e, 0x6017, 0x1900, 0x6007,
+	0x0009, 0x0070, 0x080c, 0x3226, 0x1904, 0xce2c, 0x080c, 0xdf0c,
+	0x1904, 0xce2c, 0x080c, 0xcfe0, 0x1904, 0xcab0, 0x6007, 0x0012,
+	0x6003, 0x0001, 0x080c, 0x88e9, 0x080c, 0x8e38, 0x0005, 0x6007,
+	0x0001, 0x6003, 0x0001, 0x080c, 0x88e9, 0x080c, 0x8e38, 0x0cb0,
+	0x6007, 0x0005, 0x0c68, 0x080c, 0xdf0c, 0x1904, 0xce2c, 0x080c,
+	0x3226, 0x1904, 0xce2c, 0x080c, 0xcfe0, 0x1904, 0xcab0, 0x6007,
+	0x0020, 0x6003, 0x0001, 0x080c, 0x88e9, 0x080c, 0x8e38, 0x0005,
+	0x080c, 0x3226, 0x1904, 0xce2c, 0x6007, 0x0023, 0x6003, 0x0001,
+	0x080c, 0x88e9, 0x080c, 0x8e38, 0x0005, 0x080c, 0xdf0c, 0x1904,
+	0xce2c, 0x080c, 0x3226, 0x1904, 0xce2c, 0x080c, 0xcfe0, 0x1904,
+	0xcab0, 0x0016, 0x0026, 0x00e6, 0x2071, 0x0260, 0x2c08, 0x2011,
+	0x181f, 0x2214, 0x703c, 0x9206, 0x11e0, 0x2011, 0x181e, 0x2214,
+	0x7038, 0x9084, 0x00ff, 0x9206, 0x11a0, 0x7240, 0x080c, 0xc1bb,
+	0x0570, 0x2260, 0x6008, 0x9086, 0xffff, 0x0120, 0x7244, 0x6008,
+	0x9206, 0x1528, 0x6020, 0x9086, 0x0007, 0x1508, 0x080c, 0xa39d,
+	0x04a0, 0x7244, 0x9286, 0xffff, 0x0180, 0x2c08, 0x080c, 0xc1bb,
+	0x01b0, 0x2260, 0x7240, 0x6008, 0x9206, 0x1188, 0x6010, 0x9190,
+	0x0004, 0x2214, 0x9206, 0x01b8, 0x0050, 0x7240, 0x2c08, 0x9006,
+	0x080c, 0xdcea, 0x1180, 0x7244, 0x9286, 0xffff, 0x01b0, 0x2160,
+	0x6007, 0x0026, 0x6017, 0x1700, 0x7214, 0x9296, 0xffff, 0x1180,
+	0x6007, 0x0025, 0x0068, 0x6020, 0x9086, 0x0007, 0x1d80, 0x6004,
+	0x9086, 0x0024, 0x1110, 0x080c, 0xa39d, 0x2160, 0x6007, 0x0025,
+	0x6003, 0x0001, 0x080c, 0x88e9, 0x080c, 0x8e38, 0x00ee, 0x002e,
+	0x001e, 0x0005, 0x2001, 0x0001, 0x080c, 0x6434, 0x0156, 0x0016,
+	0x0026, 0x0036, 0x20a9, 0x0004, 0x2019, 0x1805, 0x2011, 0x0276,
+	0x080c, 0xb434, 0x003e, 0x002e, 0x001e, 0x015e, 0x0120, 0x6007,
+	0x0031, 0x0804, 0xcbe8, 0x080c, 0xb06d, 0x080c, 0x7351, 0x1190,
+	0x0006, 0x0026, 0x0036, 0x080c, 0x736b, 0x1138, 0x080c, 0x764c,
+	0x080c, 0x5fb3, 0x080c, 0x727e, 0x0010, 0x080c, 0x7329, 0x003e,
+	0x002e, 0x000e, 0x0005, 0x080c, 0x3226, 0x1904, 0xce2c, 0x080c,
+	0xcfe0, 0x1904, 0xcab0, 0x6106, 0x080c, 0xcffc, 0x1120, 0x6007,
+	0x002b, 0x0804, 0xcbe8, 0x6007, 0x002c, 0x0804, 0xcbe8, 0x080c,
+	0xdf0c, 0x1904, 0xce2c, 0x080c, 0x3226, 0x1904, 0xce2c, 0x080c,
+	0xcfe0, 0x1904, 0xcab0, 0x6106, 0x080c, 0xd001, 0x1120, 0x6007,
+	0x002e, 0x0804, 0xcbe8, 0x6007, 0x002f, 0x0804, 0xcbe8, 0x080c,
+	0x3226, 0x1904, 0xce2c, 0x00e6, 0x00d6, 0x00c6, 0x6010, 0x2058,
+	0xb904, 0x9184, 0x00ff, 0x9086, 0x0006, 0x0158, 0x9184, 0xff00,
+	0x8007, 0x9086, 0x0006, 0x0128, 0x00ce, 0x00de, 0x00ee, 0x0804,
+	0xcbef, 0x080c, 0x5668, 0xd0e4, 0x0904, 0xcd69, 0x2071, 0x026c,
+	0x7010, 0x603a, 0x7014, 0x603e, 0x7108, 0x720c, 0x080c, 0x6869,
+	0x0140, 0x6010, 0x2058, 0xb810, 0x9106, 0x1118, 0xb814, 0x9206,
+	0x0510, 0x080c, 0x6865, 0x15b8, 0x2069, 0x1800, 0x687c, 0x9206,
+	0x1590, 0x6878, 0x9106, 0x1578, 0x7210, 0x080c, 0xc1bb, 0x0590,
+	0x080c, 0xcecd, 0x0578, 0x080c, 0xdd94, 0x0560, 0x622e, 0x6007,
+	0x0036, 0x6003, 0x0001, 0x080c, 0x88a1, 0x080c, 0x8e38, 0x00ce,
+	0x00de, 0x00ee, 0x0005, 0x7214, 0x9286, 0xffff, 0x0150, 0x080c,
+	0xc1bb, 0x01c0, 0x9280, 0x0002, 0x2004, 0x7110, 0x9106, 0x1190,
+	0x08e0, 0x7210, 0x2c08, 0x9085, 0x0001, 0x080c, 0xdcea, 0x2c10,
+	0x2160, 0x0140, 0x0890, 0x6007, 0x0037, 0x602f, 0x0009, 0x6017,
+	0x1500, 0x08b8, 0x6007, 0x0037, 0x602f, 0x0003, 0x6017, 0x1700,
+	0x0880, 0x6007, 0x0012, 0x0868, 0x080c, 0x3226, 0x1904, 0xce2c,
+	0x6010, 0x2058, 0xb804, 0x9084, 0xff00, 0x8007, 0x9086, 0x0006,
+	0x1904, 0xcbef, 0x00e6, 0x00d6, 0x00c6, 0x080c, 0x5668, 0xd0e4,
+	0x0904, 0xcdef, 0x2069, 0x1800, 0x2071, 0x026c, 0x7008, 0x603a,
+	0x720c, 0x623e, 0x9286, 0xffff, 0x1158, 0x7208, 0x00c6, 0x2c08,
+	0x9085, 0x0001, 0x080c, 0xdcea, 0x2c10, 0x00ce, 0x0904, 0xcde2,
+	0x080c, 0xc1bb, 0x0904, 0xcde2, 0x7108, 0x9280, 0x0002, 0x2004,
+	0x9106, 0x1904, 0xcde2, 0x00c6, 0x0026, 0x2260, 0x0066, 0x2031,
+	0x0001, 0x6020, 0x9084, 0x000f, 0x9086, 0x0006, 0x190c, 0x0dc3,
+	0x080c, 0xbe31, 0x006e, 0x002e, 0x00ce, 0x7118, 0x918c, 0xff00,
+	0x810f, 0x9186, 0x0001, 0x0178, 0x9186, 0x0005, 0x0118, 0x9186,
+	0x0007, 0x1198, 0x9280, 0x0005, 0x2004, 0x9005, 0x0170, 0x080c,
+	0xcecd, 0x0904, 0xcd62, 0x0056, 0x7510, 0x7614, 0x080c, 0xddad,
+	0x005e, 0x00ce, 0x00de, 0x00ee, 0x0005, 0x6007, 0x003b, 0x602f,
+	0x0009, 0x6017, 0x2a00, 0x6003, 0x0001, 0x080c, 0x88a1, 0x080c,
+	0x8e38, 0x0c78, 0x6007, 0x003b, 0x602f, 0x0003, 0x6017, 0x0300,
+	0x6003, 0x0001, 0x080c, 0x88a1, 0x080c, 0x8e38, 0x0c10, 0x6007,
+	0x003b, 0x602f, 0x000b, 0x6017, 0x0000, 0x0804, 0xcd39, 0x00e6,
+	0x0026, 0x080c, 0x682b, 0x0550, 0x080c, 0x6814, 0x080c, 0xdf92,
+	0x1518, 0x2071, 0x1800, 0x70d8, 0x9085, 0x0003, 0x70da, 0x00f6,
+	0x2079, 0x0100, 0x72ac, 0x9284, 0x00ff, 0x707a, 0x78e6, 0x9284,
+	0xff00, 0x727c, 0x9205, 0x707e, 0x78ea, 0x00fe, 0x70e3, 0x0000,
+	0x080c, 0x6869, 0x0120, 0x2011, 0x19dd, 0x2013, 0x07d0, 0xd0ac,
+	0x1128, 0x080c, 0x2ed6, 0x0010, 0x080c, 0xdfc6, 0x002e, 0x00ee,
+	0x080c, 0xa39d, 0x0804, 0xcbee, 0x080c, 0xa39d, 0x0005, 0x2600,
+	0x0002, 0xce45, 0xce45, 0xce45, 0xce45, 0xce45, 0xce47, 0xce45,
+	0xce45, 0xce45, 0xce45, 0xce61, 0xce45, 0xce45, 0xce45, 0xce73,
+	0xce89, 0xceba, 0xce45, 0xce45, 0xcebf, 0x080c, 0x0dc3, 0x080c,
+	0xdf0c, 0x1d10, 0x080c, 0x3226, 0x19f8, 0x7038, 0x6016, 0x6007,
+	0x0045, 0x6003, 0x0001, 0x080c, 0x88e9, 0x0005, 0x080c, 0x3102,
+	0x080c, 0xc8e3, 0x6007, 0x0001, 0x6003, 0x0001, 0x080c, 0x88e9,
+	0x0005, 0x080c, 0xdf0c, 0x1940, 0x080c, 0x3226, 0x1928, 0x080c,
+	0xcfe0, 0x1d60, 0x703c, 0x6016, 0x6007, 0x004a, 0x6003, 0x0001,
+	0x080c, 0x88e9, 0x0005, 0x2001, 0x1823, 0x2004, 0x9082, 0x00e1,
+	0x1268, 0x080c, 0xceea, 0x0904, 0xce2c, 0x6007, 0x004e, 0x6003,
+	0x0001, 0x080c, 0x88e9, 0x080c, 0x8e38, 0x0005, 0x6007, 0x0012,
+	0x0cb0, 0x6007, 0x004f, 0x6017, 0x0000, 0x7134, 0x918c, 0x00ff,
+	0x81ff, 0x0508, 0x9186, 0x0001, 0x1160, 0x7140, 0x2001, 0x199a,
+	0x2004, 0x9106, 0x11b0, 0x7144, 0x2001, 0x199b, 0x2004, 0x9106,
+	0x0190, 0x9186, 0x0002, 0x1168, 0x2011, 0x0276, 0x20a9, 0x0004,
+	0x6010, 0x0096, 0x2048, 0x2019, 0x000a, 0x080c, 0xb448, 0x009e,
+	0x0110, 0x6017, 0x0001, 0x6003, 0x0001, 0x080c, 0x88e9, 0x080c,
+	0x8e38, 0x0005, 0x6007, 0x0050, 0x703c, 0x6016, 0x0ca0, 0x080c,
+	0xdf0c, 0x1904, 0xce2c, 0x080c, 0x3226, 0x1904, 0xce2c, 0x6007,
+	0x0053, 0x6003, 0x0001, 0x0804, 0x88e9, 0x0016, 0x00e6, 0x2071,
+	0x0260, 0x00b6, 0x00c6, 0x2260, 0x6010, 0x2058, 0xb8bc, 0xd084,
+	0x0150, 0x7128, 0x6044, 0x9106, 0x1120, 0x712c, 0x6048, 0x9106,
+	0x0110, 0x9006, 0x0010, 0x9085, 0x0001, 0x00ce, 0x00be, 0x00ee,
+	0x001e, 0x0005, 0x0016, 0x0096, 0x0086, 0x00e6, 0x01c6, 0x01d6,
 	0x0126, 0x2091, 0x8000, 0x2071, 0x1800, 0x20e1, 0x0000, 0x2001,
-	0x197d, 0x2003, 0x0000, 0x080c, 0x101a, 0x05a0, 0x2900, 0x6016,
+	0x197d, 0x2003, 0x0000, 0x080c, 0x1026, 0x05a0, 0x2900, 0x6016,
 	0x708c, 0x8004, 0xa816, 0x908a, 0x001e, 0x02d0, 0xa833, 0x001e,
 	0x20a9, 0x001e, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x001c, 0x20a0,
 	0x2001, 0x197d, 0x0016, 0x200c, 0x0471, 0x001e, 0x81ff, 0x01b8,
-	0x2940, 0x080c, 0x101a, 0x01b0, 0x2900, 0xa006, 0x2100, 0x0c18,
+	0x2940, 0x080c, 0x1026, 0x01b0, 0x2900, 0xa006, 0x2100, 0x0c18,
 	0xa832, 0x20a8, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x001c, 0x20a0,
 	0x2001, 0x197d, 0x0016, 0x200c, 0x00b1, 0x001e, 0x0000, 0x9085,
 	0x0001, 0x0048, 0x2071, 0x1800, 0x708f, 0x0000, 0x6014, 0x2048,
-	0x080c, 0x0fb3, 0x9006, 0x012e, 0x01de, 0x01ce, 0x00ee, 0x008e,
+	0x080c, 0x0fbf, 0x9006, 0x012e, 0x01de, 0x01ce, 0x00ee, 0x008e,
 	0x009e, 0x001e, 0x0005, 0x0006, 0x0016, 0x0026, 0x0036, 0x00c6,
-	0x918c, 0xffff, 0x11b0, 0x080c, 0x228b, 0x2099, 0x026c, 0x2001,
+	0x918c, 0xffff, 0x11b0, 0x080c, 0x22d3, 0x2099, 0x026c, 0x2001,
 	0x0014, 0x3518, 0x9312, 0x0108, 0x1218, 0x23a8, 0x4003, 0x0400,
-	0x20a8, 0x4003, 0x22a8, 0x8108, 0x080c, 0x228b, 0x2099, 0x0260,
-	0x0ca8, 0x080c, 0x228b, 0x2061, 0x197d, 0x6004, 0x2098, 0x6008,
+	0x20a8, 0x4003, 0x22a8, 0x8108, 0x080c, 0x22d3, 0x2099, 0x0260,
+	0x0ca8, 0x080c, 0x22d3, 0x2061, 0x197d, 0x6004, 0x2098, 0x6008,
 	0x3518, 0x9312, 0x0108, 0x1218, 0x23a8, 0x4003, 0x0048, 0x20a8,
-	0x4003, 0x22a8, 0x8108, 0x080c, 0x228b, 0x2099, 0x0260, 0x0ca8,
+	0x4003, 0x22a8, 0x8108, 0x080c, 0x22d3, 0x2099, 0x0260, 0x0ca8,
 	0x2061, 0x197d, 0x2019, 0x0280, 0x3300, 0x931e, 0x0110, 0x6006,
 	0x0020, 0x2001, 0x0260, 0x6006, 0x8108, 0x2162, 0x9292, 0x0021,
 	0x9296, 0xffff, 0x620a, 0x00ce, 0x003e, 0x002e, 0x001e, 0x000e,
 	0x0005, 0x0006, 0x0016, 0x0026, 0x0036, 0x00c6, 0x81ff, 0x11b8,
-	0x080c, 0x22a3, 0x20a1, 0x024c, 0x2001, 0x0014, 0x3518, 0x9312,
+	0x080c, 0x22eb, 0x20a1, 0x024c, 0x2001, 0x0014, 0x3518, 0x9312,
 	0x1218, 0x23a8, 0x4003, 0x0418, 0x20a8, 0x4003, 0x82ff, 0x01f8,
-	0x22a8, 0x8108, 0x080c, 0x22a3, 0x20a1, 0x0240, 0x0c98, 0x080c,
-	0x22a3, 0x2061, 0x1980, 0x6004, 0x20a0, 0x6008, 0x3518, 0x9312,
+	0x22a8, 0x8108, 0x080c, 0x22eb, 0x20a1, 0x0240, 0x0c98, 0x080c,
+	0x22eb, 0x2061, 0x1980, 0x6004, 0x20a0, 0x6008, 0x3518, 0x9312,
 	0x1218, 0x23a8, 0x4003, 0x0058, 0x20a8, 0x4003, 0x82ff, 0x0138,
-	0x22a8, 0x8108, 0x080c, 0x22a3, 0x20a1, 0x0240, 0x0c98, 0x2061,
+	0x22a8, 0x8108, 0x080c, 0x22eb, 0x20a1, 0x0240, 0x0c98, 0x2061,
 	0x1980, 0x2019, 0x0260, 0x3400, 0x931e, 0x0110, 0x6006, 0x0020,
 	0x2001, 0x0240, 0x6006, 0x8108, 0x2162, 0x9292, 0x0021, 0x9296,
 	0xffff, 0x620a, 0x00ce, 0x003e, 0x002e, 0x001e, 0x000e, 0x0005,
 	0x00b6, 0x0066, 0x6610, 0x2658, 0xbe04, 0x96b4, 0xff00, 0x8637,
 	0x9686, 0x0006, 0x0170, 0x9686, 0x0004, 0x0158, 0xbe04, 0x96b4,
 	0x00ff, 0x9686, 0x0006, 0x0128, 0x9686, 0x0004, 0x0110, 0x9085,
-	0x0001, 0x006e, 0x00be, 0x0005, 0x00d6, 0x080c, 0xc578, 0x00de,
-	0x0005, 0x00d6, 0x080c, 0xc585, 0x1520, 0x680c, 0x908c, 0xff00,
+	0x0001, 0x006e, 0x00be, 0x0005, 0x00d6, 0x080c, 0xd078, 0x00de,
+	0x0005, 0x00d6, 0x080c, 0xd085, 0x1520, 0x680c, 0x908c, 0xff00,
 	0x6820, 0x9084, 0x00ff, 0x9115, 0x6216, 0x6824, 0x602e, 0xd1e4,
-	0x0130, 0x9006, 0x080c, 0xd2b1, 0x2009, 0x0001, 0x0078, 0xd1ec,
-	0x0180, 0x6920, 0x918c, 0x00ff, 0x6824, 0x080c, 0x269f, 0x1148,
-	0x2001, 0x0001, 0x080c, 0xd2b1, 0x2110, 0x900e, 0x080c, 0x30af,
+	0x0130, 0x9006, 0x080c, 0xe03e, 0x2009, 0x0001, 0x0078, 0xd1ec,
+	0x0180, 0x6920, 0x918c, 0x00ff, 0x6824, 0x080c, 0x2708, 0x1148,
+	0x2001, 0x0001, 0x080c, 0xe03e, 0x2110, 0x900e, 0x080c, 0x314b,
 	0x0018, 0x9085, 0x0001, 0x0008, 0x9006, 0x00de, 0x0005, 0x00b6,
-	0x00c6, 0x080c, 0x9f5b, 0x05a8, 0x0016, 0x0026, 0x00c6, 0x2011,
-	0x0263, 0x2204, 0x8211, 0x220c, 0x080c, 0x269f, 0x1578, 0x080c,
-	0x63c1, 0x1560, 0xbe12, 0xbd16, 0x00ce, 0x002e, 0x001e, 0x2b00,
-	0x6012, 0x080c, 0xd1fc, 0x11d8, 0x080c, 0x318a, 0x11c0, 0x080c,
-	0xc4e0, 0x0510, 0x2001, 0x0007, 0x080c, 0x6372, 0x2001, 0x0007,
-	0x080c, 0x639e, 0x6017, 0x0000, 0x6023, 0x0001, 0x6007, 0x0001,
-	0x6003, 0x0001, 0x080c, 0x8718, 0x080c, 0x8c37, 0x0010, 0x080c,
-	0x9f18, 0x9085, 0x0001, 0x00ce, 0x00be, 0x0005, 0x080c, 0x9f18,
-	0x00ce, 0x002e, 0x001e, 0x0ca8, 0x080c, 0x9f18, 0x9006, 0x0c98,
+	0x00c6, 0x080c, 0xa3ec, 0x05a8, 0x0016, 0x0026, 0x00c6, 0x2011,
+	0x0263, 0x2204, 0x8211, 0x220c, 0x080c, 0x2708, 0x1578, 0x080c,
+	0x6497, 0x1560, 0xbe12, 0xbd16, 0x00ce, 0x002e, 0x001e, 0x2b00,
+	0x6012, 0x080c, 0xdf0c, 0x11d8, 0x080c, 0x3226, 0x11c0, 0x080c,
+	0xcfe0, 0x0510, 0x2001, 0x0007, 0x080c, 0x6448, 0x2001, 0x0007,
+	0x080c, 0x6474, 0x6017, 0x0000, 0x6023, 0x0001, 0x6007, 0x0001,
+	0x6003, 0x0001, 0x080c, 0x88e9, 0x080c, 0x8e38, 0x0010, 0x080c,
+	0xa39d, 0x9085, 0x0001, 0x00ce, 0x00be, 0x0005, 0x080c, 0xa39d,
+	0x00ce, 0x002e, 0x001e, 0x0ca8, 0x080c, 0xa39d, 0x9006, 0x0c98,
 	0x2069, 0x026d, 0x6800, 0x9082, 0x0010, 0x1228, 0x6017, 0x0000,
 	0x9085, 0x0001, 0x0008, 0x9006, 0x0005, 0x6017, 0x0000, 0x2069,
 	0x026c, 0x6808, 0x9084, 0xff00, 0x9086, 0x0800, 0x11c0, 0x6804,
 	0x2009, 0x1823, 0x210c, 0x9102, 0x0290, 0x6904, 0x9186, 0x0018,
 	0x0118, 0x9186, 0x0014, 0x1158, 0x810f, 0x6800, 0x9084, 0x00ff,
-	0x910d, 0x612a, 0x908e, 0x0014, 0x0110, 0x908e, 0x0010, 0x0005,
-	0x6004, 0x90b2, 0x0054, 0x1a0c, 0x0dc4, 0x91b6, 0x0013, 0x1130,
-	0x2008, 0x91b2, 0x0040, 0x1a04, 0xc6eb, 0x040a, 0x91b6, 0x0027,
+	0x910d, 0x615a, 0x908e, 0x0014, 0x0110, 0x908e, 0x0010, 0x0005,
+	0x6004, 0x90b2, 0x0054, 0x1a0c, 0x0dc3, 0x91b6, 0x0013, 0x1130,
+	0x2008, 0x91b2, 0x0040, 0x1a04, 0xd1eb, 0x040a, 0x91b6, 0x0027,
 	0x0198, 0x9186, 0x0015, 0x0118, 0x9186, 0x0016, 0x1148, 0x080c,
-	0xbf19, 0x0128, 0x6000, 0x9086, 0x0002, 0x0904, 0xa75e, 0x0005,
-	0x91b6, 0x0014, 0x190c, 0x0dc4, 0x2001, 0x0007, 0x080c, 0x639e,
-	0x080c, 0x8b2b, 0x080c, 0x9f42, 0x080c, 0x8c37, 0x0005, 0xc617,
-	0xc619, 0xc617, 0xc617, 0xc617, 0xc619, 0xc628, 0xc6e4, 0xc66c,
-	0xc6e4, 0xc692, 0xc6e4, 0xc628, 0xc6e4, 0xc6dc, 0xc6e4, 0xc6dc,
-	0xc6e4, 0xc6e4, 0xc617, 0xc617, 0xc617, 0xc617, 0xc617, 0xc617,
-	0xc617, 0xc617, 0xc617, 0xc617, 0xc617, 0xc617, 0xc617, 0xc6e4,
-	0xc617, 0xc617, 0xc6e4, 0xc617, 0xc6e4, 0xc6e4, 0xc617, 0xc617,
-	0xc617, 0xc617, 0xc6e4, 0xc6e4, 0xc617, 0xc6e4, 0xc6e4, 0xc617,
-	0xc623, 0xc617, 0xc617, 0xc617, 0xc617, 0xc617, 0xc617, 0xc617,
-	0xc617, 0xc617, 0xc617, 0xc617, 0xc617, 0xc617, 0xc617, 0x080c,
-	0x0dc4, 0x080c, 0x8b2b, 0x080c, 0xbf10, 0x6003, 0x0002, 0x080c,
-	0x8c37, 0x0804, 0xc6ea, 0x9006, 0x080c, 0x635e, 0x0804, 0xc6e4,
-	0x080c, 0x673e, 0x1904, 0xc6e4, 0x9006, 0x080c, 0x635e, 0x6010,
+	0xc8f4, 0x0128, 0x6000, 0x9086, 0x0002, 0x0904, 0xadfa, 0x0005,
+	0x91b6, 0x0014, 0x190c, 0x0dc3, 0x2001, 0x0007, 0x080c, 0x6474,
+	0x080c, 0x8d2c, 0x080c, 0xa3cf, 0x080c, 0x8e38, 0x0005, 0xd117,
+	0xd119, 0xd117, 0xd117, 0xd117, 0xd119, 0xd128, 0xd1e4, 0xd16c,
+	0xd1e4, 0xd192, 0xd1e4, 0xd128, 0xd1e4, 0xd1dc, 0xd1e4, 0xd1dc,
+	0xd1e4, 0xd1e4, 0xd117, 0xd117, 0xd117, 0xd117, 0xd117, 0xd117,
+	0xd117, 0xd117, 0xd117, 0xd117, 0xd117, 0xd119, 0xd117, 0xd1e4,
+	0xd117, 0xd117, 0xd1e4, 0xd117, 0xd1e1, 0xd1e4, 0xd117, 0xd117,
+	0xd117, 0xd117, 0xd1e4, 0xd1e4, 0xd117, 0xd1e4, 0xd1e4, 0xd117,
+	0xd123, 0xd117, 0xd117, 0xd117, 0xd117, 0xd1e0, 0xd1e4, 0xd117,
+	0xd117, 0xd1e4, 0xd1e4, 0xd117, 0xd117, 0xd117, 0xd117, 0x080c,
+	0x0dc3, 0x080c, 0x8d2c, 0x080c, 0xc8e6, 0x6003, 0x0002, 0x080c,
+	0x8e38, 0x0804, 0xd1ea, 0x9006, 0x080c, 0x6434, 0x0804, 0xd1e4,
+	0x080c, 0x6865, 0x1904, 0xd1e4, 0x9006, 0x080c, 0x6434, 0x6010,
 	0x2058, 0xb810, 0x9086, 0x00ff, 0x1140, 0x00f6, 0x2079, 0x1800,
-	0x78a4, 0x8000, 0x78a6, 0x00fe, 0x00b8, 0x6010, 0x2058, 0xb8ac,
-	0x9005, 0x0904, 0xc6e4, 0x080c, 0x31bb, 0x1904, 0xc6e4, 0x2001,
+	0x78a4, 0x8000, 0x78a6, 0x00fe, 0x00b8, 0x6010, 0x2058, 0xb8b0,
+	0x9005, 0x0904, 0xd1e4, 0x080c, 0x3257, 0x1904, 0xd1e4, 0x2001,
 	0x1800, 0x2004, 0x9086, 0x0002, 0x1138, 0x00f6, 0x2079, 0x1800,
-	0x78a4, 0x8000, 0x78a6, 0x00fe, 0x2001, 0x0002, 0x080c, 0x6372,
-	0x080c, 0x8b2b, 0x6023, 0x0001, 0x6003, 0x0001, 0x6007, 0x0002,
-	0x080c, 0x8718, 0x080c, 0x8c37, 0x6110, 0x2158, 0x2009, 0x0001,
-	0x080c, 0x836c, 0x0804, 0xc6ea, 0x6610, 0x2658, 0xbe04, 0x96b4,
+	0x78a4, 0x8000, 0x78a6, 0x00fe, 0x2001, 0x0002, 0x080c, 0x6448,
+	0x080c, 0x8d2c, 0x6023, 0x0001, 0x6003, 0x0001, 0x6007, 0x0002,
+	0x080c, 0x88e9, 0x080c, 0x8e38, 0x6110, 0x2158, 0x2009, 0x0001,
+	0x080c, 0x84d0, 0x0804, 0xd1ea, 0x6610, 0x2658, 0xbe04, 0x96b4,
 	0xff00, 0x8637, 0x9686, 0x0006, 0x0138, 0x9686, 0x0004, 0x0120,
-	0x2001, 0x0004, 0x080c, 0x639e, 0x080c, 0xd300, 0x0904, 0xc6e4,
-	0x080c, 0x8b2b, 0x2001, 0x0004, 0x080c, 0x6372, 0x6023, 0x0001,
-	0x6003, 0x0001, 0x6007, 0x0003, 0x080c, 0x8718, 0x080c, 0x8c37,
-	0x0804, 0xc6ea, 0x2001, 0x1800, 0x2004, 0x9086, 0x0003, 0x1158,
+	0x2001, 0x0004, 0x080c, 0x6474, 0x080c, 0xe08d, 0x0904, 0xd1e4,
+	0x080c, 0x8d2c, 0x2001, 0x0004, 0x080c, 0x6448, 0x6023, 0x0001,
+	0x6003, 0x0001, 0x6007, 0x0003, 0x080c, 0x88e9, 0x080c, 0x8e38,
+	0x0804, 0xd1ea, 0x2001, 0x1800, 0x2004, 0x9086, 0x0003, 0x1158,
 	0x0036, 0x0046, 0x6010, 0x2058, 0xbba0, 0x2021, 0x0006, 0x080c,
-	0x4c74, 0x004e, 0x003e, 0x2001, 0x0006, 0x080c, 0xc70a, 0x6610,
+	0x4d24, 0x004e, 0x003e, 0x2001, 0x0006, 0x080c, 0xd20a, 0x6610,
 	0x2658, 0xbe04, 0x0066, 0x96b4, 0xff00, 0x8637, 0x9686, 0x0006,
-	0x006e, 0x0180, 0x2001, 0x0006, 0x080c, 0x639e, 0x9284, 0x00ff,
+	0x006e, 0x0180, 0x2001, 0x0006, 0x080c, 0x6474, 0x9284, 0x00ff,
 	0x908e, 0x0007, 0x0118, 0x908e, 0x0004, 0x1120, 0x2001, 0x0006,
-	0x080c, 0x6372, 0x080c, 0x673e, 0x11f8, 0x2001, 0x1836, 0x2004,
+	0x080c, 0x6448, 0x080c, 0x6865, 0x11f8, 0x2001, 0x1836, 0x2004,
 	0xd0a4, 0x01d0, 0xbe04, 0x96b4, 0x00ff, 0x9686, 0x0006, 0x01a0,
 	0x00f6, 0x2079, 0x1800, 0x78a4, 0x8000, 0x78a6, 0x00fe, 0x0804,
-	0xc654, 0x2001, 0x0004, 0x0030, 0x2001, 0x0006, 0x0459, 0x0020,
-	0x0018, 0x0010, 0x080c, 0x639e, 0x080c, 0x8b2b, 0x080c, 0x9f18,
-	0x080c, 0x8c37, 0x0005, 0x2600, 0x0002, 0xc701, 0xc701, 0xc701,
-	0xc701, 0xc701, 0xc703, 0xc701, 0xc701, 0xc701, 0xc701, 0xc703,
-	0xc701, 0xc701, 0xc701, 0xc703, 0xc703, 0xc703, 0xc703, 0xc701,
-	0xc703, 0x080c, 0x0dc4, 0x080c, 0x8b2b, 0x080c, 0x9f18, 0x080c,
-	0x8c37, 0x0005, 0x0016, 0x00b6, 0x00d6, 0x6110, 0x2158, 0xb900,
-	0xd184, 0x0138, 0x080c, 0x6372, 0x9006, 0x080c, 0x635e, 0x080c,
-	0x308f, 0x00de, 0x00be, 0x001e, 0x0005, 0x6610, 0x2658, 0xb804,
-	0x9084, 0xff00, 0x8007, 0x90b2, 0x000c, 0x1a0c, 0x0dc4, 0x91b6,
-	0x0015, 0x1110, 0x003b, 0x0028, 0x91b6, 0x0016, 0x190c, 0x0dc4,
-	0x006b, 0x0005, 0xa7e9, 0xa7e9, 0xa7e9, 0xa7e9, 0xc798, 0xa7e9,
-	0xa7e9, 0xc74a, 0xa7e9, 0xa7e9, 0xa7e9, 0xa7e9, 0xa7e9, 0xa7e9,
-	0xa7e9, 0xa7e9, 0xc798, 0xa7e9, 0xa7e9, 0xc789, 0xa7e9, 0xa7e9,
-	0xa7e9, 0xa7e9, 0x00f6, 0x080c, 0x673e, 0x11d8, 0x080c, 0xbef8,
-	0x11c0, 0x6010, 0x905d, 0x01a8, 0xb8ac, 0x9005, 0x0190, 0x9006,
-	0x080c, 0x635e, 0x2001, 0x0002, 0x080c, 0x6372, 0x6023, 0x0001,
-	0x6003, 0x0001, 0x6007, 0x0002, 0x080c, 0x8718, 0x080c, 0x8c37,
-	0x00f0, 0x2011, 0x0263, 0x2204, 0x8211, 0x220c, 0x080c, 0x269f,
-	0x11b0, 0x080c, 0x6411, 0x0118, 0x080c, 0x9f18, 0x0080, 0xb810,
-	0x0006, 0xb814, 0x0006, 0xb8ac, 0x0006, 0x080c, 0x5f10, 0x000e,
-	0xb8ae, 0x000e, 0xb816, 0x000e, 0xb812, 0x080c, 0x9f18, 0x00fe,
-	0x0005, 0x080c, 0xabf0, 0x1148, 0x6003, 0x0001, 0x6007, 0x0001,
-	0x080c, 0x8718, 0x080c, 0x8c37, 0x0010, 0x080c, 0x9f18, 0x0005,
-	0x0804, 0x9f18, 0x6004, 0x908a, 0x0054, 0x1a0c, 0x0dc4, 0x080c,
-	0x8b2b, 0x080c, 0x9f42, 0x080c, 0x8c37, 0x0005, 0x9182, 0x0040,
-	0x0002, 0xc7bd, 0xc7bd, 0xc7bd, 0xc7bd, 0xc7bf, 0xc7bd, 0xc7bd,
-	0xc7bd, 0xc7bd, 0xc7bd, 0xc7bd, 0xc7bd, 0xc7bd, 0xc7bd, 0xc7bd,
-	0xc7bd, 0xc7bd, 0xc7bd, 0xc7bd, 0xc7bd, 0x080c, 0x0dc4, 0x0096,
-	0x00b6, 0x00d6, 0x00e6, 0x00f6, 0x0046, 0x0026, 0x6106, 0x2071,
-	0x0260, 0x7444, 0x94a4, 0xff00, 0x0904, 0xc81c, 0x080c, 0xd2a5,
-	0x1150, 0x9486, 0x2000, 0x1138, 0x2009, 0x0001, 0x2011, 0x0200,
-	0x080c, 0x8532, 0x0000, 0x080c, 0x1001, 0x090c, 0x0dc4, 0x6003,
+	0xd154, 0x2001, 0x0004, 0x0030, 0x2001, 0x0006, 0x0459, 0x0020,
+	0x0018, 0x0010, 0x080c, 0x6474, 0x080c, 0x8d2c, 0x080c, 0xa39d,
+	0x080c, 0x8e38, 0x0005, 0x2600, 0x0002, 0xd201, 0xd201, 0xd201,
+	0xd201, 0xd201, 0xd203, 0xd201, 0xd201, 0xd201, 0xd201, 0xd203,
+	0xd201, 0xd201, 0xd201, 0xd203, 0xd203, 0xd203, 0xd203, 0xd201,
+	0xd203, 0x080c, 0x0dc3, 0x080c, 0x8d2c, 0x080c, 0xa39d, 0x080c,
+	0x8e38, 0x0005, 0x0016, 0x00b6, 0x00d6, 0x6110, 0x2158, 0xb900,
+	0xd184, 0x0138, 0x080c, 0x6448, 0x9006, 0x080c, 0x6434, 0x080c,
+	0x312b, 0x00de, 0x00be, 0x001e, 0x0005, 0x6610, 0x2658, 0xb804,
+	0x9084, 0xff00, 0x8007, 0x90b2, 0x000c, 0x1a0c, 0x0dc3, 0x91b6,
+	0x0015, 0x1110, 0x003b, 0x0028, 0x91b6, 0x0016, 0x190c, 0x0dc3,
+	0x006b, 0x0005, 0xae95, 0xae95, 0xae95, 0xae95, 0xd29f, 0xae95,
+	0xd289, 0xd24a, 0xae95, 0xae95, 0xae95, 0xae95, 0xae95, 0xae95,
+	0xae95, 0xae95, 0xd29f, 0xae95, 0xd289, 0xd290, 0xae95, 0xae95,
+	0xae95, 0xae95, 0x00f6, 0x080c, 0x6865, 0x11d8, 0x080c, 0xc8ce,
+	0x11c0, 0x6010, 0x905d, 0x01a8, 0xb8b0, 0x9005, 0x0190, 0x9006,
+	0x080c, 0x6434, 0x2001, 0x0002, 0x080c, 0x6448, 0x6023, 0x0001,
+	0x6003, 0x0001, 0x6007, 0x0002, 0x080c, 0x88e9, 0x080c, 0x8e38,
+	0x00f0, 0x2011, 0x0263, 0x2204, 0x8211, 0x220c, 0x080c, 0x2708,
+	0x11b0, 0x080c, 0x64fc, 0x0118, 0x080c, 0xa39d, 0x0080, 0xb810,
+	0x0006, 0xb814, 0x0006, 0xb8b0, 0x0006, 0x080c, 0x5fcd, 0x000e,
+	0xb8b2, 0x000e, 0xb816, 0x000e, 0xb812, 0x080c, 0xa39d, 0x00fe,
+	0x0005, 0x6604, 0x96b6, 0x001e, 0x1110, 0x080c, 0xa39d, 0x0005,
+	0x080c, 0xb2a4, 0x1148, 0x6003, 0x0001, 0x6007, 0x0001, 0x080c,
+	0x88e9, 0x080c, 0x8e38, 0x0010, 0x080c, 0xa39d, 0x0005, 0x0804,
+	0xa39d, 0x6004, 0x908a, 0x0054, 0x1a0c, 0x0dc3, 0x080c, 0x8d2c,
+	0x080c, 0xa3cf, 0x080c, 0x8e38, 0x0005, 0x9182, 0x0040, 0x0002,
+	0xd2c4, 0xd2c4, 0xd2c4, 0xd2c4, 0xd2c6, 0xd2c4, 0xd2c4, 0xd2c4,
+	0xd2c4, 0xd2c4, 0xd2c4, 0xd2c4, 0xd2c4, 0xd2c4, 0xd2c4, 0xd2c4,
+	0xd2c4, 0xd2c4, 0xd2c4, 0xd2c4, 0x080c, 0x0dc3, 0x0096, 0x00b6,
+	0x00d6, 0x00e6, 0x00f6, 0x0046, 0x0026, 0x6210, 0x2258, 0xb8ac,
+	0x9005, 0x11a8, 0x6106, 0x2071, 0x0260, 0x7444, 0x94a4, 0xff00,
+	0x0904, 0xd32c, 0x080c, 0xe032, 0x1170, 0x9486, 0x2000, 0x1158,
+	0x2009, 0x0001, 0x2011, 0x0200, 0x080c, 0x8703, 0x0020, 0x9026,
+	0x080c, 0xdf55, 0x0c38, 0x080c, 0x100d, 0x090c, 0x0dc3, 0x6003,
 	0x0007, 0xa86b, 0x010d, 0x9006, 0xa802, 0xa86e, 0xac8e, 0x2c00,
 	0xa892, 0x6008, 0xa8e6, 0x6010, 0x2058, 0xb8a0, 0x7130, 0xa97e,
 	0x0016, 0xa87a, 0xa883, 0x0000, 0xa887, 0x0000, 0xa88b, 0x0036,
-	0x080c, 0x6b1d, 0x001e, 0x080c, 0xd2a5, 0x1904, 0xc87c, 0x9486,
-	0x2000, 0x1130, 0x2019, 0x0017, 0x080c, 0xd0d7, 0x0804, 0xc87c,
-	0x9486, 0x0200, 0x1120, 0x080c, 0xd077, 0x0804, 0xc87c, 0x9486,
-	0x0400, 0x0120, 0x9486, 0x1000, 0x1904, 0xc87c, 0x2019, 0x0002,
-	0x080c, 0xd08f, 0x0804, 0xc87c, 0x2069, 0x1a4f, 0x6a00, 0xd284,
-	0x0904, 0xc8e2, 0x9284, 0x0300, 0x1904, 0xc8db, 0x6804, 0x9005,
-	0x0904, 0xc8c3, 0x2d78, 0x6003, 0x0007, 0x080c, 0x101a, 0x0904,
-	0xc888, 0x7800, 0xd08c, 0x1118, 0x7804, 0x8001, 0x7806, 0x6017,
-	0x0000, 0x2001, 0x180f, 0x2004, 0xd084, 0x1904, 0xc8e6, 0x9006,
+	0x080c, 0x6c02, 0x001e, 0x080c, 0xe032, 0x1904, 0xd38c, 0x9486,
+	0x2000, 0x1130, 0x2019, 0x0017, 0x080c, 0xdc90, 0x0804, 0xd38c,
+	0x9486, 0x0200, 0x1120, 0x080c, 0xdc27, 0x0804, 0xd38c, 0x9486,
+	0x0400, 0x0120, 0x9486, 0x1000, 0x1904, 0xd38c, 0x2019, 0x0002,
+	0x080c, 0xdc42, 0x0804, 0xd38c, 0x2069, 0x1a4f, 0x6a00, 0xd284,
+	0x0904, 0xd3f6, 0x9284, 0x0300, 0x1904, 0xd3ef, 0x6804, 0x9005,
+	0x0904, 0xd3d7, 0x2d78, 0x6003, 0x0007, 0x080c, 0x1026, 0x0904,
+	0xd398, 0x7800, 0xd08c, 0x1118, 0x7804, 0x8001, 0x7806, 0x6017,
+	0x0000, 0x2001, 0x180f, 0x2004, 0xd084, 0x1904, 0xd3fa, 0x9006,
 	0xa802, 0xa86b, 0x0116, 0xa86e, 0x6008, 0xa8e6, 0x2c00, 0xa87e,
 	0x6010, 0x2058, 0xb8a0, 0x7130, 0xa9ba, 0xa87a, 0xb928, 0xa9be,
 	0xb92c, 0xa9c2, 0xb930, 0xa9c6, 0xb934, 0xa9ca, 0xa887, 0x003d,
-	0x7044, 0x9084, 0x0003, 0x9080, 0xc884, 0x2005, 0xa882, 0x20a9,
+	0x7044, 0x9084, 0x0003, 0x9080, 0xd394, 0x2005, 0xa882, 0x20a9,
 	0x000a, 0x2001, 0x0270, 0xaa5c, 0x9290, 0x0022, 0x2009, 0x0205,
 	0x200b, 0x0080, 0x20e1, 0x0000, 0xab60, 0x23e8, 0x2098, 0x22a0,
 	0x4003, 0x200b, 0x0000, 0x2001, 0x027a, 0x200c, 0xa9b6, 0x8000,
-	0x200c, 0xa9b2, 0x080c, 0x6b1d, 0x002e, 0x004e, 0x00fe, 0x00ee,
+	0x200c, 0xa9b2, 0x080c, 0x6c02, 0x002e, 0x004e, 0x00fe, 0x00ee,
 	0x00de, 0x00be, 0x009e, 0x0005, 0x0000, 0x0080, 0x0040, 0x0000,
-	0x2001, 0x1810, 0x2004, 0xd084, 0x0120, 0x080c, 0x1001, 0x1904,
-	0xc831, 0x6017, 0xf100, 0x6003, 0x0001, 0x6007, 0x0041, 0x080c,
-	0x86d0, 0x080c, 0x8c37, 0x0c00, 0x2069, 0x0260, 0x6848, 0x9084,
+	0x2001, 0x1810, 0x2004, 0xd084, 0x0120, 0x080c, 0x100d, 0x1904,
+	0xd341, 0x6017, 0xf100, 0x6003, 0x0001, 0x6007, 0x0041, 0x080c,
+	0x88a1, 0x080c, 0x8e38, 0x0c00, 0x2069, 0x0260, 0x6848, 0x9084,
 	0xff00, 0x9086, 0x1200, 0x1198, 0x686c, 0x9084, 0x00ff, 0x0016,
 	0x6114, 0x918c, 0xf700, 0x910d, 0x6116, 0x001e, 0x6003, 0x0001,
-	0x6007, 0x0043, 0x080c, 0x86d0, 0x080c, 0x8c37, 0x0828, 0x6017,
-	0xf200, 0x6003, 0x0001, 0x6007, 0x0041, 0x080c, 0x86d0, 0x080c,
-	0x8c37, 0x0804, 0xc87c, 0x2001, 0x180e, 0x2004, 0xd0ec, 0x0120,
-	0x2011, 0x8049, 0x080c, 0x4abd, 0x6017, 0xf300, 0x0010, 0x6017,
-	0xf100, 0x6003, 0x0001, 0x6007, 0x0041, 0x080c, 0x86d0, 0x080c,
-	0x8c37, 0x0804, 0xc87c, 0x6017, 0xf500, 0x0c98, 0x6017, 0xf600,
-	0x0804, 0xc89c, 0x6017, 0xf200, 0x0804, 0xc89c, 0xa86b, 0x0146,
-	0xa86f, 0x0000, 0x6008, 0xa88a, 0x2c00, 0xa87e, 0x7044, 0x9084,
-	0x0003, 0x9080, 0xc884, 0x2005, 0xa882, 0x2928, 0x6010, 0x2058,
-	0xb8a0, 0xa87a, 0xb828, 0xa88e, 0xb82c, 0xa892, 0xb830, 0xa896,
-	0xb834, 0xa89a, 0xa887, 0x003d, 0x2009, 0x0205, 0x2104, 0x9085,
-	0x0080, 0x200a, 0x20e1, 0x0000, 0x2011, 0x0210, 0x2214, 0x9294,
-	0x0fff, 0xaaa6, 0x9282, 0x0111, 0x1a0c, 0x0dc4, 0x8210, 0x821c,
-	0x2001, 0x026c, 0x2098, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x002a,
-	0x20a0, 0x2011, 0xc962, 0x2041, 0x0001, 0x223d, 0x9784, 0x00ff,
-	0x9322, 0x1208, 0x2300, 0x20a8, 0x4003, 0x931a, 0x0530, 0x8210,
-	0xd7fc, 0x1130, 0x8d68, 0x2d0a, 0x2001, 0x0260, 0x2098, 0x0c68,
-	0x2950, 0x080c, 0x101a, 0x0170, 0x2900, 0xb002, 0xa86b, 0x0147,
-	0xa86f, 0x0000, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x001c, 0x20a0,
-	0x8840, 0x08d8, 0x2548, 0xa800, 0x902d, 0x0118, 0x080c, 0x1033,
-	0x0cc8, 0x080c, 0x1033, 0x0804, 0xc888, 0x2548, 0x8847, 0x9885,
-	0x0046, 0xa86a, 0x2009, 0x0205, 0x200b, 0x0000, 0x080c, 0xd101,
-	0x0804, 0xc87c, 0x8010, 0x0004, 0x801a, 0x0006, 0x8018, 0x0008,
-	0x8016, 0x000a, 0x8014, 0x9186, 0x0013, 0x1160, 0x6004, 0x908a,
-	0x0054, 0x1a0c, 0x0dc4, 0x9082, 0x0040, 0x0a0c, 0x0dc4, 0x2008,
-	0x0804, 0xc9ee, 0x0048, 0x080c, 0xbf19, 0x0500, 0x6000, 0x9086,
-	0x0002, 0x11e0, 0x0804, 0xca29, 0x9186, 0x0027, 0x0190, 0x9186,
-	0x0048, 0x0128, 0x9186, 0x0014, 0x0160, 0x190c, 0x0dc4, 0x080c,
-	0xbf19, 0x0160, 0x6000, 0x9086, 0x0004, 0x190c, 0x0dc4, 0x0804,
-	0xcace, 0x6004, 0x9082, 0x0040, 0x2008, 0x001a, 0x080c, 0x9fa3,
-	0x0005, 0xc9b5, 0xc9b7, 0xc9b7, 0xc9de, 0xc9b5, 0xc9b5, 0xc9b5,
-	0xc9b5, 0xc9b5, 0xc9b5, 0xc9b5, 0xc9b5, 0xc9b5, 0xc9b5, 0xc9b5,
-	0xc9b5, 0xc9b5, 0xc9b5, 0xc9b5, 0xc9b5, 0x080c, 0x0dc4, 0x080c,
-	0x8b2b, 0x080c, 0x8c37, 0x0036, 0x0096, 0x6014, 0x904d, 0x01d8,
-	0x080c, 0xb955, 0x01c0, 0x6003, 0x0002, 0x6010, 0x00b6, 0x2058,
-	0xb800, 0x00be, 0xd0bc, 0x1178, 0x2019, 0x0004, 0x080c, 0xd101,
-	0x6017, 0x0000, 0x6018, 0x9005, 0x1120, 0x2001, 0x1964, 0x2004,
-	0x601a, 0x6003, 0x0007, 0x009e, 0x003e, 0x0005, 0x0096, 0x080c,
-	0x8b2b, 0x080c, 0x8c37, 0x080c, 0xb955, 0x0120, 0x6014, 0x2048,
-	0x080c, 0x1033, 0x080c, 0x9f42, 0x009e, 0x0005, 0x0002, 0xca03,
-	0xca1a, 0xca05, 0xca23, 0xca03, 0xca03, 0xca03, 0xca03, 0xca03,
-	0xca03, 0xca03, 0xca03, 0xca03, 0xca03, 0xca03, 0xca03, 0xca03,
-	0xca03, 0xca03, 0xca03, 0x080c, 0x0dc4, 0x0096, 0x080c, 0x8b2b,
-	0x6014, 0x2048, 0xa880, 0xd0b4, 0x0138, 0x6003, 0x0007, 0x2009,
-	0x0043, 0x080c, 0x9f88, 0x0010, 0x6003, 0x0004, 0x080c, 0x8c37,
-	0x009e, 0x0005, 0x080c, 0x8b2b, 0x080c, 0x8507, 0x080c, 0x9f18,
-	0x080c, 0x8c37, 0x0005, 0x080c, 0x8b2b, 0x2009, 0x0041, 0x0804,
-	0xcb27, 0x9182, 0x0040, 0x0002, 0xca40, 0xca42, 0xca40, 0xca40,
-	0xca40, 0xca40, 0xca40, 0xca40, 0xca40, 0xca40, 0xca40, 0xca40,
-	0xca40, 0xca40, 0xca40, 0xca40, 0xca40, 0xca40, 0xca40, 0xca40,
-	0x080c, 0x0dc4, 0x0005, 0x9182, 0x0040, 0x0002, 0xca5a, 0xca5a,
-	0xca5a, 0xca5a, 0xca5a, 0xca5a, 0xca5a, 0xca5a, 0xca5a, 0xca5c,
-	0xcaae, 0xca5a, 0xca5a, 0xca5a, 0xca5a, 0xcaae, 0xca5a, 0xca5a,
-	0xca5a, 0xca5a, 0x080c, 0x0dc4, 0x2001, 0x0105, 0x2004, 0x9084,
-	0x1800, 0x01c0, 0x2001, 0x0132, 0x200c, 0x2001, 0x0131, 0x2004,
-	0x9105, 0x1904, 0xcaae, 0x2009, 0x180c, 0x2104, 0xd0d4, 0x05f0,
-	0xc0d4, 0x200a, 0x2009, 0x0105, 0x2104, 0x9084, 0xe7fd, 0x9085,
-	0x0010, 0x200a, 0x080c, 0x8be7, 0x6014, 0x0096, 0x2048, 0xa880,
-	0xd0fc, 0x0188, 0x908c, 0x0003, 0x918e, 0x0002, 0x01b0, 0x2001,
-	0x180c, 0x2004, 0xd0d4, 0x1188, 0x080c, 0x8d06, 0x2009, 0x0041,
-	0x009e, 0x0804, 0xcb27, 0x080c, 0x8d06, 0x6003, 0x0007, 0x601b,
-	0x0000, 0x080c, 0x8507, 0x009e, 0x0005, 0x2001, 0x180c, 0x200c,
-	0xc1d4, 0x2102, 0xd1cc, 0x0110, 0x080c, 0x2aa7, 0x080c, 0x8d06,
-	0x080c, 0x8507, 0x080c, 0x9f18, 0x009e, 0x0005, 0x2001, 0x180c,
-	0x200c, 0xc1d4, 0x2102, 0x0036, 0x080c, 0x8be7, 0x080c, 0x8d06,
-	0x6014, 0x0096, 0x2048, 0x2019, 0x0004, 0x080c, 0xd101, 0x6018,
-	0x9005, 0x1128, 0x2001, 0x1964, 0x2004, 0x8003, 0x601a, 0x6017,
-	0x0000, 0x6003, 0x0007, 0x009e, 0x003e, 0x0005, 0x9182, 0x0040,
-	0x0002, 0xcae5, 0xcae5, 0xcae5, 0xcae5, 0xcae5, 0xcae5, 0xcae5,
-	0xcae5, 0xcae7, 0xcae5, 0xcae5, 0xcae5, 0xcae5, 0xcae5, 0xcae5,
-	0xcae5, 0xcae5, 0xcae5, 0xcae5, 0xcb0c, 0x080c, 0x0dc4, 0x6014,
-	0x0096, 0x2048, 0xa834, 0xaa38, 0x920d, 0x1178, 0xa880, 0xd0fc,
-	0x0120, 0x2009, 0x0041, 0x009e, 0x0490, 0x6003, 0x0007, 0x601b,
-	0x0000, 0x080c, 0x8507, 0x009e, 0x0005, 0x2009, 0x180e, 0x210c,
-	0xd19c, 0x0118, 0x6003, 0x0007, 0x0010, 0x6003, 0x0006, 0x0081,
-	0x080c, 0x8509, 0x009e, 0x0005, 0x6014, 0x0096, 0x2048, 0xa834,
-	0xa938, 0x009e, 0x9105, 0x1118, 0x080c, 0x154a, 0x1980, 0x0005,
-	0xd2fc, 0x0140, 0x8002, 0x8000, 0x8212, 0x9291, 0x0000, 0x2009,
-	0x0009, 0x0010, 0x2009, 0x0015, 0xaa9e, 0xa89a, 0x0005, 0x9182,
-	0x0040, 0x0208, 0x0012, 0x080c, 0x0dc4, 0xcb41, 0xcb48, 0xcb54,
-	0xcb60, 0xcb41, 0xcb41, 0xcb41, 0xcb41, 0xcb43, 0xcb41, 0xcb41,
-	0xcb41, 0xcb41, 0xcb41, 0xcb41, 0xcb41, 0xcb41, 0xcb41, 0xcb41,
-	0xcb43, 0x080c, 0x0dc4, 0x6014, 0x9005, 0x190c, 0x0dc4, 0x0005,
-	0x6003, 0x0001, 0x6106, 0x080c, 0x86d0, 0x0126, 0x2091, 0x8000,
-	0x080c, 0x8c37, 0x012e, 0x0005, 0x6003, 0x0001, 0x6106, 0x080c,
-	0x86d0, 0x0126, 0x2091, 0x8000, 0x080c, 0x8c37, 0x012e, 0x0005,
-	0x6003, 0x0003, 0x6106, 0x2c10, 0x080c, 0x1aa2, 0x0126, 0x2091,
-	0x8000, 0x080c, 0x8735, 0x080c, 0x8d06, 0x012e, 0x0005, 0x0126,
-	0x2091, 0x8000, 0x0036, 0x0096, 0x9182, 0x0040, 0x0023, 0x009e,
-	0x003e, 0x012e, 0x0005, 0xcb8f, 0xcb91, 0xcba3, 0xcbbd, 0xcb8f,
-	0xcb8f, 0xcb8f, 0xcb8f, 0xcb8f, 0xcb8f, 0xcb8f, 0xcb8f, 0xcb8f,
-	0xcb8f, 0xcb8f, 0xcb8f, 0xcb8f, 0xcb8f, 0xcb8f, 0xcb8f, 0x080c,
-	0x0dc4, 0x6014, 0x2048, 0xa880, 0xd0fc, 0x01f8, 0x909c, 0x0003,
-	0x939e, 0x0003, 0x01d0, 0x6003, 0x0001, 0x6106, 0x080c, 0x86d0,
-	0x080c, 0x8c37, 0x0470, 0x6014, 0x2048, 0xa880, 0xd0fc, 0x0168,
-	0x909c, 0x0003, 0x939e, 0x0003, 0x0140, 0x6003, 0x0001, 0x6106,
-	0x080c, 0x86d0, 0x080c, 0x8c37, 0x00e0, 0x901e, 0x6316, 0x631a,
-	0x2019, 0x0004, 0x080c, 0xd101, 0x00a0, 0x6014, 0x2048, 0xa880,
-	0xd0fc, 0x0d98, 0x909c, 0x0003, 0x939e, 0x0003, 0x0d70, 0x6003,
-	0x0003, 0x6106, 0x2c10, 0x080c, 0x1aa2, 0x080c, 0x8735, 0x080c,
-	0x8d06, 0x0005, 0x080c, 0x8b2b, 0x6114, 0x81ff, 0x0158, 0x0096,
-	0x2148, 0x080c, 0xd242, 0x0036, 0x2019, 0x0029, 0x080c, 0xd101,
-	0x003e, 0x009e, 0x080c, 0x9f42, 0x080c, 0x8c37, 0x0005, 0x080c,
-	0x8be7, 0x6114, 0x81ff, 0x0158, 0x0096, 0x2148, 0x080c, 0xd242,
-	0x0036, 0x2019, 0x0029, 0x080c, 0xd101, 0x003e, 0x009e, 0x080c,
-	0x9f42, 0x080c, 0x8d06, 0x0005, 0x9182, 0x0085, 0x0002, 0xcc0e,
-	0xcc0c, 0xcc0c, 0xcc1a, 0xcc0c, 0xcc0c, 0xcc0c, 0xcc0c, 0xcc0c,
-	0xcc0c, 0xcc0c, 0xcc0c, 0xcc0c, 0x080c, 0x0dc4, 0x6003, 0x000b,
-	0x6106, 0x080c, 0x86d0, 0x0126, 0x2091, 0x8000, 0x080c, 0x8c37,
-	0x012e, 0x0005, 0x0026, 0x00e6, 0x080c, 0xd1fc, 0x0118, 0x080c,
-	0x9f18, 0x0450, 0x2071, 0x0260, 0x7224, 0x6216, 0x2001, 0x180e,
-	0x2004, 0xd0e4, 0x0150, 0x6010, 0x00b6, 0x2058, 0xbca0, 0x00be,
-	0x2c00, 0x2011, 0x014e, 0x080c, 0xa224, 0x7220, 0x080c, 0xcf6a,
-	0x0118, 0x6007, 0x0086, 0x0040, 0x6007, 0x0087, 0x7224, 0x9296,
-	0xffff, 0x1110, 0x6007, 0x0086, 0x6003, 0x0001, 0x080c, 0x86d0,
-	0x080c, 0x8c37, 0x080c, 0x8d06, 0x00ee, 0x002e, 0x0005, 0x9186,
-	0x0013, 0x1160, 0x6004, 0x908a, 0x0085, 0x0a0c, 0x0dc4, 0x908a,
-	0x0092, 0x1a0c, 0x0dc4, 0x9082, 0x0085, 0x00a2, 0x9186, 0x0027,
-	0x0130, 0x9186, 0x0014, 0x0118, 0x080c, 0x9fa3, 0x0050, 0x2001,
-	0x0007, 0x080c, 0x639e, 0x080c, 0x8b2b, 0x080c, 0x9f42, 0x080c,
-	0x8c37, 0x0005, 0xcc7f, 0xcc81, 0xcc81, 0xcc7f, 0xcc7f, 0xcc7f,
-	0xcc7f, 0xcc7f, 0xcc7f, 0xcc7f, 0xcc7f, 0xcc7f, 0xcc7f, 0x080c,
-	0x0dc4, 0x080c, 0x8b2b, 0x080c, 0x9f18, 0x080c, 0x8c37, 0x0005,
-	0x9182, 0x0085, 0x0a0c, 0x0dc4, 0x9182, 0x0092, 0x1a0c, 0x0dc4,
-	0x9182, 0x0085, 0x0002, 0xcca0, 0xcca0, 0xcca0, 0xcca2, 0xcca0,
-	0xcca0, 0xcca0, 0xcca0, 0xcca0, 0xcca0, 0xcca0, 0xcca0, 0xcca0,
-	0x080c, 0x0dc4, 0x0005, 0x9186, 0x0013, 0x0148, 0x9186, 0x0014,
-	0x0130, 0x9186, 0x0027, 0x0118, 0x080c, 0x9fa3, 0x0030, 0x080c,
-	0x8b2b, 0x080c, 0x9f42, 0x080c, 0x8c37, 0x0005, 0x0036, 0x2019,
-	0x000b, 0x0011, 0x003e, 0x0005, 0x6010, 0x0006, 0x0049, 0x000e,
-	0x6012, 0x6023, 0x0006, 0x6003, 0x0007, 0x601b, 0x0000, 0x0005,
-	0x0126, 0x0036, 0x2091, 0x8000, 0x0086, 0x2c40, 0x080c, 0x9a12,
-	0x008e, 0x1530, 0x0076, 0x2c38, 0x080c, 0x9abb, 0x007e, 0x1500,
-	0x6000, 0x9086, 0x0000, 0x01e0, 0x6020, 0x9086, 0x0007, 0x01c0,
-	0x0096, 0x601c, 0xd084, 0x0130, 0x080c, 0xbf10, 0x080c, 0x1950,
-	0x6023, 0x0007, 0x6014, 0x2048, 0x080c, 0xb955, 0x0110, 0x080c,
-	0xd101, 0x009e, 0x6017, 0x0000, 0x6023, 0x0007, 0x080c, 0xbf10,
-	0x003e, 0x012e, 0x0005, 0x00f6, 0x00c6, 0x00b6, 0x0036, 0x0156,
-	0x2079, 0x0260, 0x7938, 0x783c, 0x080c, 0x269f, 0x1904, 0xcd51,
-	0x0016, 0x00c6, 0x080c, 0x6411, 0x1904, 0xcd4f, 0x001e, 0x00c6,
-	0x080c, 0xbef8, 0x1130, 0xb8ac, 0x9005, 0x0118, 0x080c, 0x31bb,
-	0x0148, 0x2b10, 0x2160, 0x6010, 0x0006, 0x6212, 0x080c, 0xbeff,
-	0x000e, 0x6012, 0x00ce, 0x002e, 0x0026, 0x0016, 0x2019, 0x0029,
-	0x080c, 0x9b81, 0x080c, 0x8843, 0x0076, 0x903e, 0x080c, 0x8748,
-	0x007e, 0x001e, 0x0076, 0x903e, 0x080c, 0xce89, 0x007e, 0x0026,
-	0xba04, 0x9294, 0xff00, 0x8217, 0x9286, 0x0006, 0x0118, 0x9286,
-	0x0004, 0x1118, 0xbaa0, 0x080c, 0x3124, 0x002e, 0xbcac, 0x001e,
-	0x080c, 0x5f10, 0xbe12, 0xbd16, 0xbcae, 0x9006, 0x0010, 0x00ce,
-	0x001e, 0x015e, 0x003e, 0x00be, 0x00ce, 0x00fe, 0x0005, 0x00c6,
-	0x00d6, 0x00b6, 0x0016, 0x2009, 0x1823, 0x2104, 0x9086, 0x0074,
-	0x1904, 0xcdb0, 0x2069, 0x0260, 0x6944, 0x9182, 0x0100, 0x06e0,
-	0x6940, 0x9184, 0x8000, 0x0904, 0xcdad, 0x2001, 0x1959, 0x2004,
-	0x9005, 0x1140, 0x6010, 0x2058, 0xb8ac, 0x9005, 0x0118, 0x9184,
-	0x0800, 0x0598, 0x6948, 0x918a, 0x0001, 0x0648, 0x080c, 0xd2aa,
-	0x0118, 0x6978, 0xd1fc, 0x11b8, 0x2009, 0x0205, 0x200b, 0x0001,
-	0x693c, 0x81ff, 0x1198, 0x6944, 0x9182, 0x0100, 0x02a8, 0x6940,
-	0x81ff, 0x1178, 0x6948, 0x918a, 0x0001, 0x0288, 0x6950, 0x918a,
-	0x0001, 0x0298, 0x00d0, 0x6017, 0x0100, 0x00a0, 0x6017, 0x0300,
-	0x0088, 0x6017, 0x0500, 0x0070, 0x6017, 0x0700, 0x0058, 0x6017,
-	0x0900, 0x0040, 0x6017, 0x0b00, 0x0028, 0x6017, 0x0f00, 0x0010,
-	0x6017, 0x2d00, 0x9085, 0x0001, 0x0008, 0x9006, 0x001e, 0x00be,
-	0x00de, 0x00ce, 0x0005, 0x00c6, 0x00b6, 0x0026, 0x0036, 0x0156,
-	0x6210, 0x2258, 0xbb04, 0x9394, 0x00ff, 0x9286, 0x0006, 0x0180,
-	0x9286, 0x0004, 0x0168, 0x9394, 0xff00, 0x8217, 0x9286, 0x0006,
-	0x0138, 0x9286, 0x0004, 0x0120, 0x080c, 0x6420, 0x0804, 0xce18,
-	0x2011, 0x0276, 0x20a9, 0x0004, 0x0096, 0x2b48, 0x2019, 0x000a,
-	0x080c, 0xad8d, 0x009e, 0x15a8, 0x2011, 0x027a, 0x20a9, 0x0004,
-	0x0096, 0x2b48, 0x2019, 0x0006, 0x080c, 0xad8d, 0x009e, 0x1548,
-	0x0046, 0x0016, 0xbaa0, 0x2220, 0x9006, 0x2009, 0x185f, 0x210c,
-	0xd1a4, 0x0138, 0x2009, 0x0029, 0x080c, 0xd156, 0xb800, 0xc0e5,
-	0xb802, 0x2019, 0x0029, 0x080c, 0x8843, 0x0076, 0x2039, 0x0000,
-	0x080c, 0x8748, 0x2c08, 0x080c, 0xce89, 0x007e, 0x2001, 0x0007,
-	0x080c, 0x639e, 0x2001, 0x0007, 0x080c, 0x6372, 0x001e, 0x004e,
-	0x9006, 0x015e, 0x003e, 0x002e, 0x00be, 0x00ce, 0x0005, 0x00d6,
-	0x2069, 0x026e, 0x6800, 0x9086, 0x0800, 0x0118, 0x6017, 0x0000,
-	0x0008, 0x9006, 0x00de, 0x0005, 0x00b6, 0x00f6, 0x0016, 0x0026,
-	0x0036, 0x0156, 0x2079, 0x026c, 0x7930, 0x7834, 0x080c, 0x269f,
-	0x11d0, 0x080c, 0x6411, 0x11b8, 0x2011, 0x0270, 0x20a9, 0x0004,
-	0x0096, 0x2b48, 0x2019, 0x000a, 0x080c, 0xad8d, 0x009e, 0x1158,
-	0x2011, 0x0274, 0x20a9, 0x0004, 0x0096, 0x2b48, 0x2019, 0x0006,
-	0x080c, 0xad8d, 0x009e, 0x015e, 0x003e, 0x002e, 0x001e, 0x00fe,
-	0x00be, 0x0005, 0x00b6, 0x0006, 0x0016, 0x0026, 0x0036, 0x0156,
-	0x2011, 0x0263, 0x2204, 0x8211, 0x220c, 0x080c, 0x269f, 0x11d0,
-	0x080c, 0x6411, 0x11b8, 0x2011, 0x0276, 0x20a9, 0x0004, 0x0096,
-	0x2b48, 0x2019, 0x000a, 0x080c, 0xad8d, 0x009e, 0x1158, 0x2011,
-	0x027a, 0x20a9, 0x0004, 0x0096, 0x2b48, 0x2019, 0x0006, 0x080c,
-	0xad8d, 0x009e, 0x015e, 0x003e, 0x002e, 0x001e, 0x000e, 0x00be,
-	0x0005, 0x00e6, 0x00c6, 0x0086, 0x0076, 0x0066, 0x0056, 0x0046,
-	0x0026, 0x0126, 0x2091, 0x8000, 0x2740, 0x2029, 0x19cd, 0x252c,
-	0x2021, 0x19d3, 0x2424, 0x2061, 0x1cc8, 0x2071, 0x1800, 0x7650,
-	0x7070, 0x81ff, 0x0150, 0x0006, 0x9186, 0x1a92, 0x000e, 0x0128,
-	0x8001, 0x9602, 0x1a04, 0xcf23, 0x0018, 0x9606, 0x0904, 0xcf23,
-	0x2100, 0x9c06, 0x0904, 0xcf1a, 0x6720, 0x9786, 0x0007, 0x0904,
-	0xcf1a, 0x080c, 0xd197, 0x1904, 0xcf1a, 0x080c, 0xd2c8, 0x0904,
-	0xcf1a, 0x080c, 0xd187, 0x0904, 0xcf1a, 0x6720, 0x9786, 0x0001,
-	0x1148, 0x080c, 0x31bb, 0x0904, 0xcf3e, 0x6004, 0x9086, 0x0000,
-	0x1904, 0xcf3e, 0x9786, 0x0004, 0x0904, 0xcf3e, 0x2500, 0x9c06,
-	0x0904, 0xcf1a, 0x2400, 0x9c06, 0x05e8, 0x88ff, 0x0118, 0x6024,
-	0x9906, 0x15c0, 0x0096, 0x6000, 0x9086, 0x0004, 0x1120, 0x0016,
-	0x080c, 0x1950, 0x001e, 0x9786, 0x000a, 0x0148, 0x080c, 0xbb56,
-	0x1130, 0x080c, 0xa717, 0x009e, 0x080c, 0x9f42, 0x0418, 0x6014,
-	0x2048, 0x080c, 0xb955, 0x01d8, 0x9786, 0x0003, 0x1570, 0xa86b,
-	0x0103, 0xa880, 0xd0cc, 0x0130, 0x0096, 0xa87c, 0x2048, 0x080c,
-	0x0fb3, 0x009e, 0xab7e, 0xa87b, 0x0000, 0x080c, 0xd242, 0x0016,
-	0x080c, 0xbc3f, 0x080c, 0x6b11, 0x001e, 0x080c, 0xbb39, 0x009e,
-	0x080c, 0x9f42, 0x9ce0, 0x000c, 0x2001, 0x1819, 0x2004, 0x9c02,
-	0x1210, 0x0804, 0xce9d, 0x012e, 0x002e, 0x004e, 0x005e, 0x006e,
-	0x007e, 0x008e, 0x00ce, 0x00ee, 0x0005, 0x9786, 0x0006, 0x1150,
-	0x9386, 0x0005, 0x0128, 0x080c, 0xd242, 0x080c, 0xd101, 0x08f8,
-	0x009e, 0x0c00, 0x9786, 0x000a, 0x0968, 0x0808, 0x81ff, 0x09d0,
-	0x9180, 0x0001, 0x2004, 0x9086, 0x0018, 0x0130, 0x9180, 0x0001,
-	0x2004, 0x9086, 0x002d, 0x1970, 0x6000, 0x9086, 0x0002, 0x1950,
-	0x080c, 0xbb45, 0x0130, 0x080c, 0xbb56, 0x1920, 0x080c, 0xa717,
-	0x0038, 0x080c, 0x308f, 0x080c, 0xbb56, 0x1110, 0x080c, 0xa717,
-	0x080c, 0x9f42, 0x0804, 0xcf1a, 0xa868, 0x9084, 0x00ff, 0x9086,
-	0x0039, 0x0005, 0x00c6, 0x00e6, 0x0016, 0x2c08, 0x2170, 0x9006,
-	0x080c, 0xd128, 0x001e, 0x0120, 0x6020, 0x9084, 0x000f, 0x001b,
-	0x00ee, 0x00ce, 0x0005, 0xcf89, 0xcf89, 0xcf89, 0xcf89, 0xcf89,
-	0xcf89, 0xcf8b, 0xcf89, 0xcf89, 0xcf89, 0xcfb4, 0x9f42, 0x9f42,
-	0xcf89, 0x9006, 0x0005, 0x0036, 0x0046, 0x0016, 0x7010, 0x00b6,
-	0x2058, 0xbca0, 0x00be, 0x2c00, 0x2009, 0x0020, 0x080c, 0xd156,
-	0x001e, 0x004e, 0x2019, 0x0002, 0x080c, 0xccc8, 0x003e, 0x9085,
-	0x0001, 0x0005, 0x0096, 0x080c, 0xb955, 0x0140, 0x6014, 0x904d,
-	0x080c, 0xb5c5, 0x687f, 0x0005, 0x080c, 0x6b1d, 0x009e, 0x080c,
-	0x9f42, 0x9085, 0x0001, 0x0005, 0x0019, 0x9085, 0x0001, 0x0005,
-	0x6000, 0x908a, 0x0010, 0x1a0c, 0x0dc4, 0x000b, 0x0005, 0xcfcf,
-	0xcfcf, 0xcfe6, 0xcfd6, 0xcff5, 0xcfcf, 0xcfcf, 0xcfd1, 0xcfcf,
-	0xcfcf, 0xcfcf, 0xcfcf, 0xcfcf, 0xcfcf, 0xcfcf, 0xcfcf, 0x080c,
-	0x0dc4, 0x080c, 0x9f42, 0x9085, 0x0001, 0x0005, 0x0036, 0x00e6,
-	0x2071, 0x19c4, 0x703c, 0x9c06, 0x1128, 0x2019, 0x0001, 0x080c,
-	0x9964, 0x0010, 0x080c, 0x9b40, 0x00ee, 0x003e, 0x0096, 0x00d6,
-	0x6014, 0x2048, 0xa87f, 0x0005, 0x080c, 0x6b1d, 0x080c, 0x9f42,
-	0x00de, 0x009e, 0x9085, 0x0001, 0x0005, 0x601c, 0xd084, 0x190c,
-	0x1950, 0x0c60, 0x2001, 0x0001, 0x080c, 0x635e, 0x0156, 0x0016,
-	0x0026, 0x0036, 0x20a9, 0x0004, 0x2019, 0x1805, 0x2011, 0x0276,
-	0x080c, 0xad79, 0x003e, 0x002e, 0x001e, 0x015e, 0x9005, 0x0005,
-	0x00f6, 0x00e6, 0x00c6, 0x0086, 0x0076, 0x0066, 0x00b6, 0x0126,
-	0x2091, 0x8000, 0x2740, 0x2061, 0x1cc8, 0x2079, 0x0001, 0x8fff,
-	0x0904, 0xd06a, 0x2071, 0x1800, 0x7650, 0x7070, 0x8001, 0x9602,
-	0x1a04, 0xd06a, 0x88ff, 0x0120, 0x2800, 0x9c06, 0x1590, 0x2078,
-	0x080c, 0xd187, 0x0570, 0x2400, 0x9c06, 0x0558, 0x6720, 0x9786,
-	0x0006, 0x1538, 0x9786, 0x0007, 0x0520, 0x88ff, 0x1150, 0xd58c,
-	0x1118, 0x6010, 0x9b06, 0x11e8, 0xd584, 0x0118, 0x6024, 0x9106,
-	0x11c0, 0x0096, 0x601c, 0xd084, 0x0130, 0x080c, 0xbf10, 0x080c,
-	0x1950, 0x6023, 0x0007, 0x6014, 0x2048, 0x080c, 0xb955, 0x0120,
-	0x0046, 0x080c, 0xd101, 0x004e, 0x009e, 0x080c, 0x9f42, 0x88ff,
-	0x1198, 0x9ce0, 0x000c, 0x2001, 0x1819, 0x2004, 0x9c02, 0x1210,
-	0x0804, 0xd01f, 0x9006, 0x012e, 0x00be, 0x006e, 0x007e, 0x008e,
+	0x6007, 0x0043, 0x080c, 0x88a1, 0x080c, 0x8e38, 0x0828, 0x6868,
+	0x602e, 0x686c, 0x6032, 0x6017, 0xf200, 0x6003, 0x0001, 0x6007,
+	0x0041, 0x080c, 0x88a1, 0x080c, 0x8e38, 0x0804, 0xd38c, 0x2001,
+	0x180e, 0x2004, 0xd0ec, 0x0120, 0x2011, 0x8049, 0x080c, 0x4b6d,
+	0x6017, 0xf300, 0x0010, 0x6017, 0xf100, 0x6003, 0x0001, 0x6007,
+	0x0041, 0x080c, 0x88a1, 0x080c, 0x8e38, 0x0804, 0xd38c, 0x6017,
+	0xf500, 0x0c98, 0x6017, 0xf600, 0x0804, 0xd3ac, 0x6017, 0xf200,
+	0x0804, 0xd3ac, 0xa86b, 0x0146, 0xa86f, 0x0000, 0x6008, 0xa88a,
+	0x2c00, 0xa87e, 0x7044, 0x9084, 0x0003, 0x9080, 0xd394, 0x2005,
+	0xa882, 0x2928, 0x6010, 0x2058, 0xb8a0, 0xa87a, 0xb828, 0xa88e,
+	0xb82c, 0xa892, 0xb830, 0xa896, 0xb834, 0xa89a, 0xa887, 0x003d,
+	0x2009, 0x0205, 0x2104, 0x9085, 0x0080, 0x200a, 0x20e1, 0x0000,
+	0x2011, 0x0210, 0x2214, 0x9294, 0x0fff, 0xaaa6, 0x9282, 0x0111,
+	0x1a0c, 0x0dc3, 0x8210, 0x821c, 0x2001, 0x026c, 0x2098, 0xa860,
+	0x20e8, 0xa85c, 0x9080, 0x002a, 0x20a0, 0x2011, 0xd476, 0x2041,
+	0x0001, 0x223d, 0x9784, 0x00ff, 0x9322, 0x1208, 0x2300, 0x20a8,
+	0x4003, 0x931a, 0x0530, 0x8210, 0xd7fc, 0x1130, 0x8d68, 0x2d0a,
+	0x2001, 0x0260, 0x2098, 0x0c68, 0x2950, 0x080c, 0x1026, 0x0170,
+	0x2900, 0xb002, 0xa86b, 0x0147, 0xa86f, 0x0000, 0xa860, 0x20e8,
+	0xa85c, 0x9080, 0x001c, 0x20a0, 0x8840, 0x08d8, 0x2548, 0xa800,
+	0x902d, 0x0118, 0x080c, 0x103f, 0x0cc8, 0x080c, 0x103f, 0x0804,
+	0xd398, 0x2548, 0x8847, 0x9885, 0x0046, 0xa86a, 0x2009, 0x0205,
+	0x200b, 0x0000, 0x080c, 0xdcc3, 0x0804, 0xd38c, 0x8010, 0x0004,
+	0x801a, 0x0006, 0x8018, 0x0008, 0x8016, 0x000a, 0x8014, 0x9186,
+	0x0013, 0x1160, 0x6004, 0x908a, 0x0054, 0x1a0c, 0x0dc3, 0x9082,
+	0x0040, 0x0a0c, 0x0dc3, 0x2008, 0x0804, 0xd505, 0x9186, 0x0051,
+	0x0108, 0x0048, 0x080c, 0xc8f4, 0x0500, 0x6000, 0x9086, 0x0002,
+	0x11e0, 0x0804, 0xd54e, 0x9186, 0x0027, 0x0190, 0x9186, 0x0048,
+	0x0128, 0x9186, 0x0014, 0x0160, 0x190c, 0x0dc3, 0x080c, 0xc8f4,
+	0x0160, 0x6000, 0x9086, 0x0004, 0x190c, 0x0dc3, 0x0804, 0xd631,
+	0x6004, 0x9082, 0x0040, 0x2008, 0x001a, 0x080c, 0xa434, 0x0005,
+	0xd4cc, 0xd4ce, 0xd4ce, 0xd4f5, 0xd4cc, 0xd4cc, 0xd4cc, 0xd4cc,
+	0xd4cc, 0xd4cc, 0xd4cc, 0xd4cc, 0xd4cc, 0xd4cc, 0xd4cc, 0xd4cc,
+	0xd4cc, 0xd4cc, 0xd4cc, 0xd4cc, 0x080c, 0x0dc3, 0x080c, 0x8d2c,
+	0x080c, 0x8e38, 0x0036, 0x0096, 0x6014, 0x904d, 0x01d8, 0x080c,
+	0xc1cd, 0x01c0, 0x6003, 0x0002, 0x6010, 0x00b6, 0x2058, 0xb800,
+	0x00be, 0xd0bc, 0x1178, 0x2019, 0x0004, 0x080c, 0xdcc3, 0x6017,
+	0x0000, 0x6018, 0x9005, 0x1120, 0x2001, 0x1963, 0x2004, 0x601a,
+	0x6003, 0x0007, 0x009e, 0x003e, 0x0005, 0x0096, 0x080c, 0x8d2c,
+	0x080c, 0x8e38, 0x080c, 0xc1cd, 0x0120, 0x6014, 0x2048, 0x080c,
+	0x103f, 0x080c, 0xa3cf, 0x009e, 0x0005, 0x0002, 0xd51a, 0xd531,
+	0xd51c, 0xd548, 0xd51a, 0xd51a, 0xd51a, 0xd51a, 0xd51a, 0xd51a,
+	0xd51a, 0xd51a, 0xd51a, 0xd51a, 0xd51a, 0xd51a, 0xd51a, 0xd51a,
+	0xd51a, 0xd51a, 0x080c, 0x0dc3, 0x0096, 0x080c, 0x8d2c, 0x6014,
+	0x2048, 0xa880, 0xd0b4, 0x0138, 0x6003, 0x0007, 0x2009, 0x0043,
+	0x080c, 0xa419, 0x0010, 0x6003, 0x0004, 0x080c, 0x8e38, 0x009e,
+	0x0005, 0x080c, 0x8d2c, 0x080c, 0xc1cd, 0x0138, 0x6114, 0x0096,
+	0x2148, 0xa980, 0x009e, 0xd1ec, 0x1138, 0x080c, 0x86d8, 0x080c,
+	0xa39d, 0x080c, 0x8e38, 0x0005, 0x080c, 0xdf15, 0x0db0, 0x0cc8,
+	0x080c, 0x8d2c, 0x2009, 0x0041, 0x0804, 0xd6b9, 0x9182, 0x0040,
+	0x0002, 0xd565, 0xd567, 0xd565, 0xd565, 0xd565, 0xd565, 0xd565,
+	0xd565, 0xd565, 0xd565, 0xd565, 0xd565, 0xd565, 0xd565, 0xd565,
+	0xd565, 0xd565, 0xd568, 0xd565, 0xd565, 0x080c, 0x0dc3, 0x0005,
+	0x00d6, 0x080c, 0x86d8, 0x00de, 0x080c, 0xdf7c, 0x080c, 0xa39d,
+	0x0005, 0x9182, 0x0040, 0x0002, 0xd588, 0xd588, 0xd588, 0xd588,
+	0xd588, 0xd588, 0xd588, 0xd588, 0xd588, 0xd58a, 0xd5f9, 0xd588,
+	0xd588, 0xd588, 0xd588, 0xd5f9, 0xd588, 0xd588, 0xd588, 0xd588,
+	0x080c, 0x0dc3, 0x2001, 0x0105, 0x2004, 0x9084, 0x1800, 0x01c8,
+	0x2001, 0x0132, 0x200c, 0x2001, 0x0131, 0x2004, 0x9105, 0x1904,
+	0xd5f9, 0x2009, 0x180c, 0x2104, 0xd0d4, 0x0904, 0xd5f9, 0xc0d4,
+	0x200a, 0x2009, 0x0105, 0x2104, 0x9084, 0xe7fd, 0x9085, 0x0010,
+	0x200a, 0x2001, 0x187e, 0x2004, 0xd0e4, 0x1528, 0x603b, 0x0000,
+	0x080c, 0x8de8, 0x6014, 0x0096, 0x2048, 0xa880, 0xd0fc, 0x0188,
+	0x908c, 0x0003, 0x918e, 0x0002, 0x0508, 0x2001, 0x180c, 0x2004,
+	0xd0d4, 0x11e0, 0x080c, 0x8f0e, 0x2009, 0x0041, 0x009e, 0x0804,
+	0xd6b9, 0x080c, 0x8f0e, 0x6003, 0x0007, 0x601b, 0x0000, 0x080c,
+	0x86d8, 0x009e, 0x0005, 0x2001, 0x0100, 0x2004, 0x9082, 0x0005,
+	0x0aa8, 0x2001, 0x011f, 0x2004, 0x603a, 0x0890, 0x2001, 0x180c,
+	0x200c, 0xc1d4, 0x2102, 0xd1cc, 0x0110, 0x080c, 0x2b10, 0x080c,
+	0x8f0e, 0x6014, 0x2048, 0xa980, 0xd1ec, 0x1130, 0x080c, 0x86d8,
+	0x080c, 0xa39d, 0x009e, 0x0005, 0x080c, 0xdf15, 0x0db8, 0x009e,
+	0x0005, 0x2001, 0x180c, 0x200c, 0xc1d4, 0x2102, 0x0036, 0x080c,
+	0x8de8, 0x080c, 0x8f0e, 0x6014, 0x0096, 0x2048, 0x6010, 0x00b6,
+	0x2058, 0xb800, 0x00be, 0xd0bc, 0x0188, 0xa880, 0x9084, 0x0003,
+	0x9086, 0x0002, 0x0140, 0xa8b0, 0x6330, 0x931a, 0x6332, 0xa8b4,
+	0x632c, 0x931b, 0x632e, 0x6003, 0x0002, 0x0080, 0x2019, 0x0004,
+	0x080c, 0xdcc3, 0x6018, 0x9005, 0x1128, 0x2001, 0x1963, 0x2004,
+	0x8003, 0x601a, 0x6017, 0x0000, 0x6003, 0x0007, 0x009e, 0x003e,
+	0x0005, 0x9182, 0x0040, 0x0002, 0xd648, 0xd648, 0xd648, 0xd648,
+	0xd648, 0xd648, 0xd648, 0xd648, 0xd64a, 0xd648, 0xd648, 0xd648,
+	0xd648, 0xd648, 0xd648, 0xd648, 0xd648, 0xd648, 0xd648, 0xd695,
+	0x080c, 0x0dc3, 0x6014, 0x0096, 0x2048, 0xa834, 0xaa38, 0x6110,
+	0x00b6, 0x2158, 0xb900, 0x00be, 0xd1bc, 0x1190, 0x920d, 0x1518,
+	0xa880, 0xd0fc, 0x0128, 0x2009, 0x0041, 0x009e, 0x0804, 0xd6b9,
+	0x6003, 0x0007, 0x601b, 0x0000, 0x080c, 0x86d8, 0x009e, 0x0005,
+	0x6124, 0xd1f4, 0x1d58, 0x0006, 0x0046, 0xacb0, 0x9422, 0xa9b4,
+	0x2200, 0x910b, 0x6030, 0x9420, 0x6432, 0x602c, 0x9109, 0x612e,
+	0x004e, 0x000e, 0x08d8, 0x6110, 0x00b6, 0x2158, 0xb900, 0x00be,
+	0xd1bc, 0x1178, 0x2009, 0x180e, 0x210c, 0xd19c, 0x0118, 0x6003,
+	0x0007, 0x0010, 0x6003, 0x0006, 0x00e9, 0x080c, 0x86da, 0x009e,
+	0x0005, 0x6003, 0x0002, 0x009e, 0x0005, 0x6024, 0xd0f4, 0x0128,
+	0x080c, 0x155f, 0x1904, 0xd64a, 0x0005, 0x6014, 0x0096, 0x2048,
+	0xa834, 0xa938, 0x009e, 0x9105, 0x1120, 0x080c, 0x155f, 0x1904,
+	0xd64a, 0x0005, 0xd2fc, 0x0140, 0x8002, 0x8000, 0x8212, 0x9291,
+	0x0000, 0x2009, 0x0009, 0x0010, 0x2009, 0x0015, 0xaa9e, 0xa89a,
+	0x0005, 0x9182, 0x0040, 0x0208, 0x0062, 0x9186, 0x0013, 0x0120,
+	0x9186, 0x0014, 0x190c, 0x0dc3, 0x6024, 0xd0dc, 0x090c, 0x0dc3,
+	0x0005, 0xd6dd, 0xd6e9, 0xd6f5, 0xd701, 0xd6dd, 0xd6dd, 0xd6dd,
+	0xd6dd, 0xd6e4, 0xd6df, 0xd6df, 0xd6dd, 0xd6dd, 0xd6dd, 0xd6dd,
+	0xd6df, 0xd6dd, 0xd6df, 0xd6dd, 0xd6e4, 0x080c, 0x0dc3, 0x6024,
+	0xd0dc, 0x090c, 0x0dc3, 0x0005, 0x6014, 0x9005, 0x190c, 0x0dc3,
+	0x0005, 0x6003, 0x0001, 0x6106, 0x080c, 0x88a1, 0x0126, 0x2091,
+	0x8000, 0x080c, 0x8e38, 0x012e, 0x0005, 0x6003, 0x0001, 0x6106,
+	0x080c, 0x88a1, 0x0126, 0x2091, 0x8000, 0x080c, 0x8e38, 0x012e,
+	0x0005, 0x6003, 0x0003, 0x6106, 0x2c10, 0x080c, 0x1aea, 0x0126,
+	0x2091, 0x8000, 0x080c, 0x8906, 0x080c, 0x8f0e, 0x012e, 0x0005,
+	0x0126, 0x2091, 0x8000, 0x0036, 0x0096, 0x9182, 0x0040, 0x0023,
+	0x009e, 0x003e, 0x012e, 0x0005, 0xd730, 0xd732, 0xd744, 0xd75e,
+	0xd730, 0xd730, 0xd730, 0xd730, 0xd730, 0xd730, 0xd730, 0xd730,
+	0xd730, 0xd730, 0xd730, 0xd730, 0xd730, 0xd730, 0xd730, 0xd730,
+	0x080c, 0x0dc3, 0x6014, 0x2048, 0xa880, 0xd0fc, 0x01f8, 0x909c,
+	0x0003, 0x939e, 0x0003, 0x01d0, 0x6003, 0x0001, 0x6106, 0x080c,
+	0x88a1, 0x080c, 0x8e38, 0x0470, 0x6014, 0x2048, 0xa880, 0xd0fc,
+	0x0168, 0x909c, 0x0003, 0x939e, 0x0003, 0x0140, 0x6003, 0x0001,
+	0x6106, 0x080c, 0x88a1, 0x080c, 0x8e38, 0x00e0, 0x901e, 0x6316,
+	0x631a, 0x2019, 0x0004, 0x080c, 0xdcc3, 0x00a0, 0x6014, 0x2048,
+	0xa880, 0xd0fc, 0x0d98, 0x909c, 0x0003, 0x939e, 0x0003, 0x0d70,
+	0x6003, 0x0003, 0x6106, 0x2c10, 0x080c, 0x1aea, 0x080c, 0x8906,
+	0x080c, 0x8f0e, 0x0005, 0x080c, 0x8d2c, 0x6114, 0x81ff, 0x0158,
+	0x0096, 0x2148, 0x080c, 0xdfcf, 0x0036, 0x2019, 0x0029, 0x080c,
+	0xdcc3, 0x003e, 0x009e, 0x080c, 0xa3cf, 0x080c, 0x8e38, 0x0005,
+	0x080c, 0x8de8, 0x6114, 0x81ff, 0x0158, 0x0096, 0x2148, 0x080c,
+	0xdfcf, 0x0036, 0x2019, 0x0029, 0x080c, 0xdcc3, 0x003e, 0x009e,
+	0x080c, 0xa3cf, 0x080c, 0x8f0e, 0x0005, 0x9182, 0x0085, 0x0002,
+	0xd7af, 0xd7ad, 0xd7ad, 0xd7bb, 0xd7ad, 0xd7ad, 0xd7ad, 0xd7ad,
+	0xd7ad, 0xd7ad, 0xd7ad, 0xd7ad, 0xd7ad, 0x080c, 0x0dc3, 0x6003,
+	0x000b, 0x6106, 0x080c, 0x88a1, 0x0126, 0x2091, 0x8000, 0x080c,
+	0x8e38, 0x012e, 0x0005, 0x0026, 0x00e6, 0x080c, 0xdf0c, 0x0118,
+	0x080c, 0xa39d, 0x0450, 0x2071, 0x0260, 0x7224, 0x6216, 0x2001,
+	0x180e, 0x2004, 0xd0e4, 0x0150, 0x6010, 0x00b6, 0x2058, 0xbca0,
+	0x00be, 0x2c00, 0x2011, 0x014e, 0x080c, 0xa6b5, 0x7220, 0x080c,
+	0xdb18, 0x0118, 0x6007, 0x0086, 0x0040, 0x6007, 0x0087, 0x7224,
+	0x9296, 0xffff, 0x1110, 0x6007, 0x0086, 0x6003, 0x0001, 0x080c,
+	0x88a1, 0x080c, 0x8e38, 0x080c, 0x8f0e, 0x00ee, 0x002e, 0x0005,
+	0x9186, 0x0013, 0x1160, 0x6004, 0x908a, 0x0085, 0x0a0c, 0x0dc3,
+	0x908a, 0x0092, 0x1a0c, 0x0dc3, 0x9082, 0x0085, 0x00a2, 0x9186,
+	0x0027, 0x0130, 0x9186, 0x0014, 0x0118, 0x080c, 0xa434, 0x0050,
+	0x2001, 0x0007, 0x080c, 0x6474, 0x080c, 0x8d2c, 0x080c, 0xa3cf,
+	0x080c, 0x8e38, 0x0005, 0xd820, 0xd822, 0xd822, 0xd820, 0xd820,
+	0xd820, 0xd820, 0xd820, 0xd820, 0xd820, 0xd820, 0xd820, 0xd820,
+	0x080c, 0x0dc3, 0x080c, 0x8d2c, 0x080c, 0xa3cf, 0x080c, 0x8e38,
+	0x0005, 0x9182, 0x0085, 0x0a0c, 0x0dc3, 0x9182, 0x0092, 0x1a0c,
+	0x0dc3, 0x9182, 0x0085, 0x0002, 0xd841, 0xd841, 0xd841, 0xd843,
+	0xd841, 0xd841, 0xd841, 0xd841, 0xd841, 0xd841, 0xd841, 0xd841,
+	0xd841, 0x080c, 0x0dc3, 0x0005, 0x9186, 0x0013, 0x0148, 0x9186,
+	0x0014, 0x0130, 0x9186, 0x0027, 0x0118, 0x080c, 0xa434, 0x0030,
+	0x080c, 0x8d2c, 0x080c, 0xa3cf, 0x080c, 0x8e38, 0x0005, 0x0036,
+	0x080c, 0xdf7c, 0x6043, 0x0000, 0x2019, 0x000b, 0x0011, 0x003e,
+	0x0005, 0x6010, 0x0006, 0x0059, 0x000e, 0x6012, 0x6023, 0x0006,
+	0x6003, 0x0007, 0x601b, 0x0000, 0x6043, 0x0000, 0x0005, 0x0126,
+	0x0036, 0x2091, 0x8000, 0x0086, 0x2c40, 0x0096, 0x904e, 0x080c,
+	0x9ce3, 0x009e, 0x008e, 0x1550, 0x0076, 0x2c38, 0x080c, 0x9d8e,
+	0x007e, 0x1520, 0x6000, 0x9086, 0x0000, 0x0500, 0x6020, 0x9086,
+	0x0007, 0x01e0, 0x0096, 0x601c, 0xd084, 0x0140, 0x080c, 0xdf7c,
+	0x080c, 0xc8e6, 0x080c, 0x1998, 0x6023, 0x0007, 0x6014, 0x2048,
+	0x080c, 0xc1cd, 0x0110, 0x080c, 0xdcc3, 0x009e, 0x6017, 0x0000,
+	0x080c, 0xdf7c, 0x6023, 0x0007, 0x080c, 0xc8e6, 0x003e, 0x012e,
+	0x0005, 0x00f6, 0x00c6, 0x00b6, 0x0036, 0x0156, 0x2079, 0x0260,
+	0x7938, 0x783c, 0x080c, 0x2708, 0x1904, 0xd8ff, 0x0016, 0x00c6,
+	0x080c, 0x64fc, 0x1904, 0xd8fd, 0x001e, 0x00c6, 0x080c, 0xc8ce,
+	0x1130, 0xb8b0, 0x9005, 0x0118, 0x080c, 0x3257, 0x0148, 0x2b10,
+	0x2160, 0x6010, 0x0006, 0x6212, 0x080c, 0xc8d5, 0x000e, 0x6012,
+	0x00ce, 0x002e, 0x0026, 0x0016, 0x2019, 0x0029, 0x080c, 0x9e54,
+	0x080c, 0x8a2b, 0x0076, 0x903e, 0x080c, 0x8919, 0x007e, 0x001e,
+	0x0076, 0x903e, 0x080c, 0xda37, 0x007e, 0x0026, 0xba04, 0x9294,
+	0xff00, 0x8217, 0x9286, 0x0006, 0x0118, 0x9286, 0x0004, 0x1118,
+	0xbaa0, 0x080c, 0x31c0, 0x002e, 0xbcb0, 0x001e, 0x080c, 0x5fcd,
+	0xbe12, 0xbd16, 0xbcb2, 0x9006, 0x0010, 0x00ce, 0x001e, 0x015e,
+	0x003e, 0x00be, 0x00ce, 0x00fe, 0x0005, 0x00c6, 0x00d6, 0x00b6,
+	0x0016, 0x2009, 0x1823, 0x2104, 0x9086, 0x0074, 0x1904, 0xd95e,
+	0x2069, 0x0260, 0x6944, 0x9182, 0x0100, 0x06e0, 0x6940, 0x9184,
+	0x8000, 0x0904, 0xd95b, 0x2001, 0x1958, 0x2004, 0x9005, 0x1140,
+	0x6010, 0x2058, 0xb8b0, 0x9005, 0x0118, 0x9184, 0x0800, 0x0598,
+	0x6948, 0x918a, 0x0001, 0x0648, 0x080c, 0xe037, 0x0118, 0x6978,
+	0xd1fc, 0x11b8, 0x2009, 0x0205, 0x200b, 0x0001, 0x693c, 0x81ff,
+	0x1198, 0x6944, 0x9182, 0x0100, 0x02a8, 0x6940, 0x81ff, 0x1178,
+	0x6948, 0x918a, 0x0001, 0x0288, 0x6950, 0x918a, 0x0001, 0x0298,
+	0x00d0, 0x6017, 0x0100, 0x00a0, 0x6017, 0x0300, 0x0088, 0x6017,
+	0x0500, 0x0070, 0x6017, 0x0700, 0x0058, 0x6017, 0x0900, 0x0040,
+	0x6017, 0x0b00, 0x0028, 0x6017, 0x0f00, 0x0010, 0x6017, 0x2d00,
+	0x9085, 0x0001, 0x0008, 0x9006, 0x001e, 0x00be, 0x00de, 0x00ce,
+	0x0005, 0x00c6, 0x00b6, 0x0026, 0x0036, 0x0156, 0x6210, 0x2258,
+	0xbb04, 0x9394, 0x00ff, 0x9286, 0x0006, 0x0180, 0x9286, 0x0004,
+	0x0168, 0x9394, 0xff00, 0x8217, 0x9286, 0x0006, 0x0138, 0x9286,
+	0x0004, 0x0120, 0x080c, 0x650b, 0x0804, 0xd9c6, 0x2011, 0x0276,
+	0x20a9, 0x0004, 0x0096, 0x2b48, 0x2019, 0x000a, 0x080c, 0xb448,
+	0x009e, 0x15a8, 0x2011, 0x027a, 0x20a9, 0x0004, 0x0096, 0x2b48,
+	0x2019, 0x0006, 0x080c, 0xb448, 0x009e, 0x1548, 0x0046, 0x0016,
+	0xbaa0, 0x2220, 0x9006, 0x2009, 0x185f, 0x210c, 0xd1a4, 0x0138,
+	0x2009, 0x0029, 0x080c, 0xdd18, 0xb800, 0xc0e5, 0xb802, 0x2019,
+	0x0029, 0x080c, 0x8a2b, 0x0076, 0x2039, 0x0000, 0x080c, 0x8919,
+	0x2c08, 0x080c, 0xda37, 0x007e, 0x2001, 0x0007, 0x080c, 0x6474,
+	0x2001, 0x0007, 0x080c, 0x6448, 0x001e, 0x004e, 0x9006, 0x015e,
+	0x003e, 0x002e, 0x00be, 0x00ce, 0x0005, 0x00d6, 0x2069, 0x026e,
+	0x6800, 0x9086, 0x0800, 0x0118, 0x6017, 0x0000, 0x0008, 0x9006,
+	0x00de, 0x0005, 0x00b6, 0x00f6, 0x0016, 0x0026, 0x0036, 0x0156,
+	0x2079, 0x026c, 0x7930, 0x7834, 0x080c, 0x2708, 0x11d0, 0x080c,
+	0x64fc, 0x11b8, 0x2011, 0x0270, 0x20a9, 0x0004, 0x0096, 0x2b48,
+	0x2019, 0x000a, 0x080c, 0xb448, 0x009e, 0x1158, 0x2011, 0x0274,
+	0x20a9, 0x0004, 0x0096, 0x2b48, 0x2019, 0x0006, 0x080c, 0xb448,
+	0x009e, 0x015e, 0x003e, 0x002e, 0x001e, 0x00fe, 0x00be, 0x0005,
+	0x00b6, 0x0006, 0x0016, 0x0026, 0x0036, 0x0156, 0x2011, 0x0263,
+	0x2204, 0x8211, 0x220c, 0x080c, 0x2708, 0x11d0, 0x080c, 0x64fc,
+	0x11b8, 0x2011, 0x0276, 0x20a9, 0x0004, 0x0096, 0x2b48, 0x2019,
+	0x000a, 0x080c, 0xb448, 0x009e, 0x1158, 0x2011, 0x027a, 0x20a9,
+	0x0004, 0x0096, 0x2b48, 0x2019, 0x0006, 0x080c, 0xb448, 0x009e,
+	0x015e, 0x003e, 0x002e, 0x001e, 0x000e, 0x00be, 0x0005, 0x00e6,
+	0x00c6, 0x0086, 0x0076, 0x0066, 0x0056, 0x0046, 0x0026, 0x0126,
+	0x2091, 0x8000, 0x2740, 0x2029, 0x19cd, 0x252c, 0x2021, 0x19d3,
+	0x2424, 0x2061, 0x1cd0, 0x2071, 0x1800, 0x7650, 0x7070, 0x81ff,
+	0x0150, 0x0006, 0x9186, 0x1a92, 0x000e, 0x0128, 0x8001, 0x9602,
+	0x1a04, 0xdad1, 0x0018, 0x9606, 0x0904, 0xdad1, 0x2100, 0x9c06,
+	0x0904, 0xdac8, 0x6720, 0x9786, 0x0007, 0x0904, 0xdac8, 0x080c,
+	0xdd59, 0x1904, 0xdac8, 0x080c, 0xe055, 0x0904, 0xdac8, 0x080c,
+	0xdd49, 0x0904, 0xdac8, 0x6720, 0x9786, 0x0001, 0x1148, 0x080c,
+	0x3257, 0x0904, 0xdaec, 0x6004, 0x9086, 0x0000, 0x1904, 0xdaec,
+	0x9786, 0x0004, 0x0904, 0xdaec, 0x2500, 0x9c06, 0x0904, 0xdac8,
+	0x2400, 0x9c06, 0x05e8, 0x88ff, 0x0118, 0x6054, 0x9906, 0x15c0,
+	0x0096, 0x6000, 0x9086, 0x0004, 0x1120, 0x0016, 0x080c, 0x1998,
+	0x001e, 0x9786, 0x000a, 0x0148, 0x080c, 0xc3d1, 0x1130, 0x080c,
+	0xadb3, 0x009e, 0x080c, 0xa3cf, 0x0418, 0x6014, 0x2048, 0x080c,
+	0xc1cd, 0x01d8, 0x9786, 0x0003, 0x1570, 0xa86b, 0x0103, 0xa880,
+	0xd0cc, 0x0130, 0x0096, 0xa87c, 0x2048, 0x080c, 0x0fbf, 0x009e,
+	0xab7e, 0xa87b, 0x0000, 0x080c, 0xdfcf, 0x0016, 0x080c, 0xc4ba,
+	0x080c, 0x6bf5, 0x001e, 0x080c, 0xc3b4, 0x009e, 0x080c, 0xa3cf,
+	0x9ce0, 0x0018, 0x2001, 0x1819, 0x2004, 0x9c02, 0x1210, 0x0804,
+	0xda4b, 0x012e, 0x002e, 0x004e, 0x005e, 0x006e, 0x007e, 0x008e,
+	0x00ce, 0x00ee, 0x0005, 0x9786, 0x0006, 0x1150, 0x9386, 0x0005,
+	0x0128, 0x080c, 0xdfcf, 0x080c, 0xdcc3, 0x08f8, 0x009e, 0x0c00,
+	0x9786, 0x000a, 0x0968, 0x0808, 0x81ff, 0x09d0, 0x9180, 0x0001,
+	0x2004, 0x9086, 0x0018, 0x0130, 0x9180, 0x0001, 0x2004, 0x9086,
+	0x002d, 0x1970, 0x6000, 0x9086, 0x0002, 0x1950, 0x080c, 0xc3c0,
+	0x0130, 0x080c, 0xc3d1, 0x1920, 0x080c, 0xadb3, 0x0038, 0x080c,
+	0x312b, 0x080c, 0xc3d1, 0x1110, 0x080c, 0xadb3, 0x080c, 0xa3cf,
+	0x0804, 0xdac8, 0xa868, 0x9084, 0x00ff, 0x9086, 0x0039, 0x0005,
+	0x00c6, 0x00e6, 0x0016, 0x2c08, 0x2170, 0x9006, 0x080c, 0xdcea,
+	0x001e, 0x0120, 0x6020, 0x9084, 0x000f, 0x001b, 0x00ee, 0x00ce,
+	0x0005, 0xdb37, 0xdb37, 0xdb37, 0xdb37, 0xdb37, 0xdb37, 0xdb39,
+	0xdb37, 0xdb37, 0xdb37, 0xdb62, 0xa3cf, 0xa3cf, 0xdb37, 0x9006,
+	0x0005, 0x0036, 0x0046, 0x0016, 0x7010, 0x00b6, 0x2058, 0xbca0,
+	0x00be, 0x2c00, 0x2009, 0x0020, 0x080c, 0xdd18, 0x001e, 0x004e,
+	0x2019, 0x0002, 0x080c, 0xd86f, 0x003e, 0x9085, 0x0001, 0x0005,
+	0x0096, 0x080c, 0xc1cd, 0x0140, 0x6014, 0x904d, 0x080c, 0xbde5,
+	0x687f, 0x0005, 0x080c, 0x6c02, 0x009e, 0x080c, 0xa3cf, 0x9085,
+	0x0001, 0x0005, 0x0019, 0x9085, 0x0001, 0x0005, 0x6000, 0x908a,
+	0x0010, 0x1a0c, 0x0dc3, 0x000b, 0x0005, 0xdb7d, 0xdb7d, 0xdb94,
+	0xdb84, 0xdba3, 0xdb7d, 0xdb7d, 0xdb7f, 0xdb7d, 0xdb7d, 0xdb7d,
+	0xdb7d, 0xdb7d, 0xdb7d, 0xdb7d, 0xdb7d, 0x080c, 0x0dc3, 0x080c,
+	0xa3cf, 0x9085, 0x0001, 0x0005, 0x0036, 0x00e6, 0x2071, 0x19c4,
+	0x703c, 0x9c06, 0x1128, 0x2019, 0x0001, 0x080c, 0x9c35, 0x0010,
+	0x080c, 0x9e13, 0x00ee, 0x003e, 0x0096, 0x00d6, 0x6014, 0x2048,
+	0xa87f, 0x0005, 0x080c, 0x6c02, 0x080c, 0xa3cf, 0x00de, 0x009e,
+	0x9085, 0x0001, 0x0005, 0x601c, 0xd084, 0x190c, 0x1998, 0x0c60,
+	0x2001, 0x0001, 0x080c, 0x6434, 0x0156, 0x0016, 0x0026, 0x0036,
+	0x20a9, 0x0004, 0x2019, 0x1805, 0x2011, 0x0276, 0x080c, 0xb434,
+	0x003e, 0x002e, 0x001e, 0x015e, 0x9005, 0x0005, 0x00f6, 0x00e6,
+	0x00c6, 0x0086, 0x0076, 0x0066, 0x00b6, 0x0126, 0x2091, 0x8000,
+	0x2740, 0x2061, 0x1cd0, 0x2079, 0x0001, 0x8fff, 0x0904, 0xdc1a,
+	0x2071, 0x1800, 0x7650, 0x7070, 0x8001, 0x9602, 0x1a04, 0xdc1a,
+	0x88ff, 0x0120, 0x2800, 0x9c06, 0x15a0, 0x2078, 0x080c, 0xdd49,
+	0x0580, 0x2400, 0x9c06, 0x0568, 0x6720, 0x9786, 0x0006, 0x1548,
+	0x9786, 0x0007, 0x0530, 0x88ff, 0x1150, 0xd58c, 0x1118, 0x6010,
+	0x9b06, 0x11f8, 0xd584, 0x0118, 0x6054, 0x9106, 0x11d0, 0x0096,
+	0x601c, 0xd084, 0x0140, 0x080c, 0xdf7c, 0x080c, 0xc8e6, 0x080c,
+	0x1998, 0x6023, 0x0007, 0x6014, 0x2048, 0x080c, 0xc1cd, 0x0120,
+	0x0046, 0x080c, 0xdcc3, 0x004e, 0x009e, 0x080c, 0xa3cf, 0x88ff,
+	0x1198, 0x9ce0, 0x0018, 0x2001, 0x1819, 0x2004, 0x9c02, 0x1210,
+	0x0804, 0xdbcd, 0x9006, 0x012e, 0x00be, 0x006e, 0x007e, 0x008e,
 	0x00ce, 0x00ee, 0x00fe, 0x0005, 0x98c5, 0x0001, 0x0ca0, 0x00b6,
 	0x0076, 0x0056, 0x0086, 0x9046, 0x2029, 0x0001, 0x2c20, 0x2019,
-	0x0002, 0x6210, 0x2258, 0x080c, 0x9a12, 0x008e, 0x903e, 0x080c,
-	0x9abb, 0x080c, 0xd010, 0x005e, 0x007e, 0x00be, 0x0005, 0x00b6,
-	0x0046, 0x0056, 0x0076, 0x00c6, 0x0156, 0x2c20, 0x2128, 0x20a9,
-	0x007f, 0x900e, 0x0016, 0x0036, 0x080c, 0x6411, 0x1168, 0x0056,
-	0x0086, 0x9046, 0x2508, 0x2029, 0x0001, 0x080c, 0x9a12, 0x008e,
-	0x903e, 0x080c, 0x9abb, 0x005e, 0x003e, 0x001e, 0x8108, 0x1f04,
-	0xd09a, 0x0036, 0x2508, 0x2029, 0x0003, 0x080c, 0xd010, 0x003e,
-	0x015e, 0x00ce, 0x007e, 0x005e, 0x004e, 0x00be, 0x0005, 0x00b6,
-	0x0076, 0x0056, 0x6210, 0x2258, 0x0086, 0x9046, 0x2029, 0x0001,
-	0x2019, 0x0048, 0x080c, 0x9a12, 0x008e, 0x903e, 0x080c, 0x9abb,
-	0x2c20, 0x080c, 0xd010, 0x005e, 0x007e, 0x00be, 0x0005, 0x00b6,
-	0x0046, 0x0056, 0x0076, 0x00c6, 0x0156, 0x2c20, 0x20a9, 0x0800,
-	0x900e, 0x0016, 0x0036, 0x080c, 0x6411, 0x1148, 0x0086, 0x9046,
-	0x2828, 0x080c, 0x9a12, 0x008e, 0x903e, 0x080c, 0x9abb, 0x003e,
-	0x001e, 0x8108, 0x1f04, 0xd0e1, 0x0036, 0x2029, 0x0002, 0x080c,
-	0xd010, 0x003e, 0x015e, 0x00ce, 0x007e, 0x005e, 0x004e, 0x00be,
-	0x0005, 0x0016, 0x00f6, 0x080c, 0xb953, 0x0198, 0xa868, 0x9084,
-	0x00ff, 0x9086, 0x0046, 0x0180, 0xa800, 0x907d, 0x0138, 0xa803,
-	0x0000, 0xab86, 0x080c, 0x6b1d, 0x2f48, 0x0cb0, 0xab86, 0x080c,
-	0x6b1d, 0x00fe, 0x001e, 0x0005, 0xa800, 0x907d, 0x0130, 0xa803,
-	0x0000, 0x080c, 0x6b1d, 0x2f48, 0x0cb8, 0x080c, 0x6b1d, 0x0c88,
-	0x00e6, 0x0046, 0x0036, 0x2061, 0x1cc8, 0x9005, 0x1138, 0x2071,
-	0x1800, 0x7450, 0x7070, 0x8001, 0x9402, 0x12d8, 0x2100, 0x9c06,
-	0x0168, 0x6000, 0x9086, 0x0000, 0x0148, 0x6008, 0x9206, 0x1130,
-	0x6010, 0x91a0, 0x0004, 0x2424, 0x9406, 0x0140, 0x9ce0, 0x000c,
-	0x2001, 0x1819, 0x2004, 0x9c02, 0x1220, 0x0c40, 0x9085, 0x0001,
-	0x0008, 0x9006, 0x003e, 0x004e, 0x00ee, 0x0005, 0x0096, 0x0006,
-	0x080c, 0x1001, 0x000e, 0x090c, 0x0dc4, 0xaae6, 0xa86b, 0x010d,
-	0xa892, 0x0026, 0x2010, 0x080c, 0xb943, 0x2001, 0x0000, 0x0120,
-	0x2200, 0x9080, 0x0009, 0x2004, 0x002e, 0xa87e, 0x9186, 0x0020,
-	0x0110, 0xa8e7, 0xffff, 0xa98a, 0xac7a, 0xa883, 0x0000, 0x2001,
-	0x196a, 0x2004, 0xa886, 0x9006, 0xa802, 0xa86e, 0xa88e, 0x0126,
-	0x2091, 0x8000, 0x080c, 0x6b1d, 0x012e, 0x009e, 0x0005, 0x6700,
-	0x9786, 0x0000, 0x0158, 0x9786, 0x0001, 0x0140, 0x9786, 0x000a,
-	0x0128, 0x9786, 0x0009, 0x0110, 0x9085, 0x0001, 0x0005, 0x00e6,
-	0x6010, 0x9075, 0x0138, 0x00b6, 0x2058, 0xb8a0, 0x00be, 0x9206,
-	0x00ee, 0x0005, 0x9085, 0x0001, 0x0cd8, 0x9186, 0x0013, 0x1128,
-	0x6004, 0x9082, 0x0085, 0x2008, 0x00c2, 0x9186, 0x0027, 0x1178,
-	0x080c, 0x8b2b, 0x0036, 0x0096, 0x6014, 0x2048, 0x2019, 0x0004,
-	0x080c, 0xd101, 0x009e, 0x003e, 0x080c, 0x8c37, 0x0005, 0x9186,
-	0x0014, 0x0d70, 0x080c, 0x9fa3, 0x0005, 0xd1d4, 0xd1d2, 0xd1d2,
-	0xd1d2, 0xd1d2, 0xd1d2, 0xd1d4, 0xd1d2, 0xd1d2, 0xd1d2, 0xd1d2,
-	0xd1d2, 0xd1d2, 0x080c, 0x0dc4, 0x080c, 0x8b2b, 0x6003, 0x000c,
-	0x080c, 0x8c37, 0x0005, 0x9182, 0x0092, 0x1220, 0x9182, 0x0085,
-	0x0208, 0x001a, 0x080c, 0x9fa3, 0x0005, 0xd1f2, 0xd1f2, 0xd1f2,
-	0xd1f2, 0xd1f4, 0xd1f9, 0xd1f2, 0xd1f2, 0xd1f2, 0xd1f2, 0xd1f2,
-	0xd1f2, 0xd1f2, 0x080c, 0x0dc4, 0x00d6, 0x080c, 0x9f18, 0x00de,
-	0x0005, 0x080c, 0x9f18, 0x0005, 0x00e6, 0x6010, 0x00b6, 0x2058,
-	0xb800, 0x00be, 0xd0ec, 0x00ee, 0x0005, 0x0026, 0x0036, 0x0156,
-	0x2011, 0x182b, 0x2204, 0x9084, 0x00ff, 0x2019, 0x026e, 0x2334,
-	0x96b4, 0x00ff, 0x9636, 0x1508, 0x8318, 0x2334, 0x2204, 0x9084,
-	0xff00, 0x9636, 0x11d0, 0x2011, 0x0270, 0x20a9, 0x0004, 0x6010,
-	0x0096, 0x2048, 0x2019, 0x000a, 0x080c, 0xad8d, 0x009e, 0x1168,
-	0x2011, 0x0274, 0x20a9, 0x0004, 0x6010, 0x0096, 0x2048, 0x2019,
-	0x0006, 0x080c, 0xad8d, 0x009e, 0x1100, 0x015e, 0x003e, 0x002e,
-	0x0005, 0x00e6, 0x2071, 0x1800, 0x080c, 0x5e89, 0x080c, 0x2e5f,
-	0x00ee, 0x0005, 0x00e6, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be,
-	0xd0fc, 0x0108, 0x0011, 0x00ee, 0x0005, 0xa884, 0xc0e5, 0xa886,
-	0x0005, 0x00e6, 0x00d6, 0x00c6, 0x0076, 0x0066, 0x0056, 0x0046,
-	0x0026, 0x0016, 0x0126, 0x2091, 0x8000, 0x2029, 0x19cd, 0x252c,
-	0x2021, 0x19d3, 0x2424, 0x2061, 0x1cc8, 0x2071, 0x1800, 0x7650,
-	0x7070, 0x9606, 0x0578, 0x6720, 0x9786, 0x0001, 0x0118, 0x9786,
-	0x0008, 0x1500, 0x2500, 0x9c06, 0x01e8, 0x2400, 0x9c06, 0x01d0,
-	0x080c, 0xd187, 0x01b8, 0x080c, 0xd197, 0x11a0, 0x6000, 0x9086,
-	0x0004, 0x1120, 0x0016, 0x080c, 0x1950, 0x001e, 0x080c, 0xbb45,
-	0x1110, 0x080c, 0x308f, 0x080c, 0xbb56, 0x1110, 0x080c, 0xa717,
-	0x080c, 0x9f42, 0x9ce0, 0x000c, 0x2001, 0x1819, 0x2004, 0x9c02,
-	0x1208, 0x0858, 0x012e, 0x001e, 0x002e, 0x004e, 0x005e, 0x006e,
-	0x007e, 0x00ce, 0x00de, 0x00ee, 0x0005, 0x2001, 0x1810, 0x2004,
-	0xd0dc, 0x0005, 0x0006, 0x2001, 0x1836, 0x2004, 0xd09c, 0x000e,
-	0x0005, 0x0006, 0x0036, 0x0046, 0x080c, 0xbef8, 0x0168, 0x2019,
-	0xffff, 0x9005, 0x0128, 0x6010, 0x00b6, 0x2058, 0xbba0, 0x00be,
-	0x2021, 0x0004, 0x080c, 0x4c74, 0x004e, 0x003e, 0x000e, 0x0005,
-	0x6004, 0x9086, 0x0001, 0x1128, 0x080c, 0x9b81, 0x080c, 0x9f42,
-	0x9006, 0x0005, 0x00e6, 0x00c6, 0x00b6, 0x0046, 0x2061, 0x1cc8,
-	0x2071, 0x1800, 0x7450, 0x7070, 0x8001, 0x9402, 0x12d8, 0x2100,
-	0x9c06, 0x0168, 0x6000, 0x9086, 0x0000, 0x0148, 0x6010, 0x2058,
-	0xb8a0, 0x9206, 0x1120, 0x6004, 0x9086, 0x0002, 0x0140, 0x9ce0,
-	0x000c, 0x2001, 0x1819, 0x2004, 0x9c02, 0x1220, 0x0c40, 0x9085,
-	0x0001, 0x0008, 0x9006, 0x004e, 0x00be, 0x00ce, 0x00ee, 0x0005,
-	0x2001, 0x1810, 0x2004, 0xd0a4, 0x0160, 0x2001, 0x1836, 0x2004,
-	0xd0a4, 0x0138, 0x2001, 0x185f, 0x2004, 0xd0a4, 0x1118, 0x9085,
-	0x0001, 0x0005, 0x9006, 0x0ce8, 0x0126, 0x0006, 0x00e6, 0x0016,
-	0x2091, 0x8000, 0x2071, 0x1840, 0xd5a4, 0x0118, 0x7054, 0x8000,
-	0x7056, 0xd5b4, 0x0118, 0x7050, 0x8000, 0x7052, 0xd5ac, 0x0178,
-	0x2500, 0x9084, 0x0007, 0x908e, 0x0003, 0x0148, 0x908e, 0x0004,
-	0x0130, 0x908e, 0x0005, 0x0118, 0x2071, 0x184a, 0x0469, 0x001e,
-	0x00ee, 0x000e, 0x012e, 0x0005, 0x0126, 0x0006, 0x00e6, 0x2091,
-	0x8000, 0x2071, 0x1842, 0x0401, 0x00ee, 0x000e, 0x012e, 0x0005,
-	0x0126, 0x0006, 0x00e6, 0x2091, 0x8000, 0x2071, 0x1840, 0x706c,
-	0x8000, 0x706e, 0x00ee, 0x000e, 0x012e, 0x0005, 0x0126, 0x0006,
-	0x00e6, 0x2091, 0x8000, 0x2071, 0x1840, 0x7070, 0x8000, 0x7072,
-	0x00ee, 0x000e, 0x012e, 0x0005, 0x2e04, 0x8000, 0x2072, 0x1220,
-	0x8e70, 0x2e04, 0x8000, 0x2072, 0x0005, 0x00e6, 0x2071, 0x1840,
-	0x0c99, 0x00ee, 0x0005, 0x00e6, 0x2071, 0x1844, 0x0c69, 0x00ee,
-	0x0005, 0x0126, 0x0006, 0x00e6, 0x2091, 0x8000, 0x2071, 0x1840,
-	0x7064, 0x8000, 0x7066, 0x00ee, 0x000e, 0x012e, 0x0005, 0x0003,
-	0x000b, 0x04b0, 0x0000, 0xc000, 0x0001, 0x8064, 0x0008, 0x0010,
-	0x0000, 0x8066, 0x0000, 0x0101, 0x0008, 0x4407, 0x0003, 0x8060,
-	0x0000, 0x0400, 0x0000, 0x580d, 0x000b, 0x799e, 0x000b, 0x50eb,
-	0x000b, 0x4c0a, 0x0003, 0xbac0, 0x0009, 0x008a, 0x0000, 0x0c0a,
-	0x000b, 0x15fe, 0x0008, 0x340a, 0x0003, 0xc4c0, 0x0009, 0x7000,
-	0x0000, 0xffa0, 0x0001, 0x2000, 0x0000, 0x162c, 0x000b, 0x808c,
-	0x0008, 0x0001, 0x0000, 0x0000, 0x0007, 0x4047, 0x000a, 0x808c,
-	0x0008, 0x0002, 0x0000, 0x0821, 0x0003, 0x4022, 0x0000, 0x0022,
-	0x000b, 0x4122, 0x0008, 0x4447, 0x0002, 0x0e54, 0x000b, 0x0bfe,
-	0x0008, 0x11a0, 0x0001, 0x1232, 0x0003, 0x0ca0, 0x0001, 0x1232,
-	0x0003, 0x9180, 0x0001, 0x0004, 0x0000, 0x8060, 0x0000, 0x0400,
-	0x0000, 0x7f62, 0x0008, 0x8066, 0x0000, 0x0009, 0x0008, 0x4430,
-	0x000b, 0x808c, 0x0008, 0x0000, 0x0008, 0x0060, 0x0008, 0x8062,
-	0x0008, 0x0004, 0x0000, 0x8066, 0x0000, 0x0411, 0x0000, 0x4438,
-	0x0003, 0x03fe, 0x0000, 0x43e0, 0x0001, 0x0e2f, 0x000b, 0xc2c0,
-	0x0009, 0x00ff, 0x0008, 0x02e0, 0x0001, 0x0e2f, 0x000b, 0x9180,
-	0x0001, 0x0005, 0x0008, 0x8060, 0x0000, 0x0400, 0x0000, 0x7f62,
-	0x0008, 0x8066, 0x0000, 0x0019, 0x0000, 0x4447, 0x000b, 0x0240,
-	0x0002, 0x0a2c, 0x0003, 0x00fe, 0x0000, 0x322f, 0x000b, 0x112a,
-	0x0000, 0x002e, 0x0008, 0x022c, 0x0008, 0x3a44, 0x0002, 0x0c0a,
-	0x000b, 0x808c, 0x0008, 0x0002, 0x0000, 0x1760, 0x0008, 0x8062,
-	0x0008, 0x000f, 0x0008, 0x8066, 0x0000, 0x0011, 0x0008, 0x4458,
-	0x0003, 0x01fe, 0x0008, 0x42e0, 0x0009, 0x0e22, 0x0003, 0x00fe,
-	0x0000, 0x43e0, 0x0001, 0x0e22, 0x0003, 0x1734, 0x0000, 0x1530,
-	0x0000, 0x1632, 0x0008, 0x0d2a, 0x0008, 0x808a, 0x0008, 0x0003,
-	0x0008, 0x1a60, 0x0000, 0x8062, 0x0008, 0x0002, 0x0000, 0x5868,
-	0x000b, 0x8066, 0x0000, 0x3679, 0x0000, 0x446b, 0x0003, 0x586c,
-	0x0003, 0x3efe, 0x0008, 0x7f4f, 0x0002, 0x0872, 0x0003, 0x0d00,
-	0x0000, 0x007a, 0x000c, 0x8054, 0x0008, 0x0011, 0x0008, 0x8074,
-	0x0000, 0x1010, 0x0008, 0x1efe, 0x0000, 0x300a, 0x000b, 0x00c8,
-	0x000c, 0x000a, 0x000b, 0x00fe, 0x0000, 0x3482, 0x0003, 0x1a60,
-	0x0000, 0x8062, 0x0008, 0x0007, 0x0000, 0x8066, 0x0000, 0x0231,
-	0x0008, 0x4481, 0x000b, 0x03fe, 0x0000, 0x04d0, 0x0001, 0x0cbc,
-	0x0003, 0x82c0, 0x0001, 0x1f00, 0x0000, 0xffa0, 0x0001, 0x0400,
-	0x0000, 0x089a, 0x0003, 0x14c4, 0x0003, 0x01fe, 0x0008, 0x0580,
-	0x0009, 0x7f06, 0x0000, 0x8690, 0x0009, 0x0000, 0x0008, 0x7f0c,
-	0x0000, 0x02fe, 0x0008, 0xffc0, 0x0001, 0x00ff, 0x0008, 0x0680,
-	0x0009, 0x109a, 0x0003, 0x7f08, 0x0008, 0x84c0, 0x0001, 0xff00,
-	0x0008, 0x08bc, 0x000b, 0xb9c0, 0x0009, 0x0030, 0x0008, 0x0cab,
-	0x0003, 0x8060, 0x0000, 0x0400, 0x0000, 0x80fe, 0x0008, 0x19e6,
-	0x0001, 0x7f62, 0x0008, 0x8066, 0x0000, 0x0409, 0x0000, 0x44a4,
-	0x0003, 0x80fe, 0x0008, 0x19e5, 0x0001, 0x7f62, 0x0008, 0x8066,
-	0x0000, 0x040a, 0x0000, 0x44aa, 0x000b, 0x00fe, 0x0000, 0x34b2,
-	0x0003, 0x8072, 0x0000, 0x1010, 0x0008, 0x3944, 0x0002, 0x08ad,
-	0x000b, 0x00b6, 0x0003, 0x8072, 0x0000, 0x2020, 0x0008, 0x3945,
-	0x000a, 0x08b2, 0x0003, 0x3946, 0x000a, 0x0cc3, 0x000b, 0x0000,
-	0x0007, 0x3943, 0x000a, 0x08c3, 0x0003, 0x00b6, 0x0003, 0x00fe,
-	0x0000, 0x34c1, 0x000b, 0x8072, 0x0000, 0x1000, 0x0000, 0x00c3,
-	0x000b, 0x8072, 0x0000, 0x2000, 0x0000, 0x4000, 0x000f, 0x86c0,
-	0x0009, 0xfc00, 0x0008, 0x08bc, 0x000b, 0x009a, 0x000b, 0x1c60,
-	0x0000, 0x1b62, 0x0000, 0x8066, 0x0000, 0x0231, 0x0008, 0x44cc,
-	0x000b, 0x58cd, 0x000b, 0x0140, 0x0008, 0x0242, 0x0000, 0x1f43,
-	0x0002, 0x0cdb, 0x000b, 0x0d44, 0x0000, 0x0d46, 0x0008, 0x0348,
-	0x0008, 0x044a, 0x0008, 0x030a, 0x0008, 0x040c, 0x0000, 0x0d06,
-	0x0000, 0x0d08, 0x0008, 0x00df, 0x0003, 0x0344, 0x0008, 0x0446,
-	0x0008, 0x0548, 0x0008, 0x064a, 0x0000, 0x58df, 0x000b, 0x3efe,
-	0x0008, 0x7f4f, 0x0002, 0x08e6, 0x000b, 0x8000, 0x0000, 0x0001,
-	0x0000, 0x007a, 0x000c, 0x8054, 0x0008, 0x0001, 0x0000, 0x8074,
-	0x0000, 0x2020, 0x0008, 0x4000, 0x000f, 0x3a40, 0x000a, 0x0c0d,
-	0x0003, 0x2b24, 0x0008, 0x2b24, 0x0008, 0x58ef, 0x000b, 0x8054,
-	0x0008, 0x0002, 0x0000, 0x1242, 0x0002, 0x093d, 0x0003, 0x3a45,
-	0x000a, 0x092c, 0x0003, 0x8072, 0x0000, 0x1000, 0x0000, 0x3945,
-	0x000a, 0x08fc, 0x0003, 0x8072, 0x0000, 0x3010, 0x0000, 0x1e10,
-	0x000a, 0x7f3c, 0x0000, 0x0927, 0x000b, 0x1d00, 0x0002, 0x7f3a,
-	0x0000, 0x0d60, 0x0000, 0x7f62, 0x0008, 0x8066, 0x0000, 0x0009,
-	0x0008, 0x4505, 0x0003, 0x00fe, 0x0000, 0x3524, 0x000b, 0x1c60,
-	0x0000, 0x8062, 0x0008, 0x0001, 0x0000, 0x8066, 0x0000, 0x0009,
-	0x0008, 0x450d, 0x000b, 0x00fe, 0x0000, 0x320c, 0x0003, 0x0038,
-	0x0000, 0x0060, 0x0008, 0x8062, 0x0008, 0x001a, 0x0000, 0x8066,
-	0x0000, 0x0009, 0x0008, 0x4516, 0x000b, 0x80c0, 0x0009, 0x00ff,
-	0x0008, 0x7f3e, 0x0008, 0x0d60, 0x0000, 0x0efe, 0x0008, 0x1f80,
-	0x0001, 0x7f62, 0x0008, 0x8066, 0x0000, 0x0009, 0x0008, 0x4520,
-	0x000b, 0x003a, 0x0008, 0x1dfe, 0x0000, 0x0101, 0x000b, 0x0036,
-	0x0008, 0x00c8, 0x000c, 0x013d, 0x000b, 0x8074, 0x0000, 0x2000,
-	0x0000, 0x8072, 0x0000, 0x2000, 0x0000, 0x013d, 0x000b, 0x3a44,
-	0x0002, 0x0a35, 0x000b, 0x8074, 0x0000, 0x1000, 0x0000, 0x8072,
-	0x0000, 0x1000, 0x0000, 0x2d0e, 0x0000, 0x2d0e, 0x0000, 0x3609,
-	0x000b, 0x26fe, 0x0008, 0x26fe, 0x0008, 0x2700, 0x0008, 0x2700,
-	0x0008, 0x00d0, 0x0009, 0x0d4f, 0x000b, 0x8074, 0x0000, 0x4040,
-	0x0008, 0x593d, 0x0003, 0x50eb, 0x000b, 0x3a46, 0x000a, 0x0d4f,
-	0x000b, 0x3a47, 0x0002, 0x094a, 0x0003, 0x8054, 0x0008, 0x0004,
-	0x0000, 0x8074, 0x0000, 0x8000, 0x0000, 0x8072, 0x0000, 0x3000,
-	0x0008, 0x0192, 0x000b, 0x92c0, 0x0009, 0x0fc8, 0x0000, 0x080a,
-	0x0003, 0x1246, 0x000a, 0x0e06, 0x0003, 0x1a60, 0x0000, 0x8062,
-	0x0008, 0x0002, 0x0000, 0x8066, 0x0000, 0x362a, 0x0000, 0x4554,
-	0x000b, 0x2000, 0x0000, 0x2000, 0x0000, 0x2102, 0x0000, 0x2102,
-	0x0000, 0x2204, 0x0000, 0x2204, 0x0000, 0x2306, 0x0000, 0x2306,
-	0x0000, 0x2408, 0x0000, 0x2408, 0x0000, 0x250a, 0x0000, 0x250a,
-	0x0000, 0x260c, 0x0000, 0x260c, 0x0000, 0x270e, 0x0000, 0x270e,
-	0x0000, 0x2810, 0x0000, 0x2810, 0x0000, 0x2912, 0x0000, 0x2912,
-	0x0000, 0x1a60, 0x0000, 0x8062, 0x0008, 0x0007, 0x0000, 0x8066,
-	0x0000, 0x0052, 0x0000, 0x456e, 0x000b, 0x92c0, 0x0009, 0x0780,
-	0x0008, 0x0e1f, 0x000b, 0x124b, 0x0002, 0x0977, 0x000b, 0x2e4d,
-	0x0002, 0x2e4d, 0x0002, 0x0a09, 0x000b, 0x3a46, 0x000a, 0x0d84,
-	0x0003, 0x5979, 0x0003, 0x8054, 0x0008, 0x0004, 0x0000, 0x1243,
-	0x000a, 0x098e, 0x000b, 0x8010, 0x0008, 0x000d, 0x0000, 0x01fa,
-	0x000c, 0x1810, 0x0000, 0x01fa, 0x000c, 0x018e, 0x0003, 0x194d,
-	0x000a, 0x0988, 0x000b, 0x1243, 0x000a, 0x0a13, 0x0003, 0x5988,
-	0x000b, 0x8054, 0x0008, 0x0004, 0x0000, 0x01ef, 0x0004, 0x1810,
-	0x0000, 0x01fa, 0x000c, 0x8074, 0x0000, 0xf000, 0x0008, 0x8072,
-	0x0000, 0x3000, 0x0008, 0x0d30, 0x0000, 0x3a42, 0x0002, 0x0d98,
-	0x000b, 0x15fe, 0x0008, 0x3451, 0x000b, 0x000a, 0x000b, 0x8074,
-	0x0000, 0x0501, 0x0000, 0x8010, 0x0008, 0x000c, 0x0008, 0x01fa,
-	0x000c, 0x000a, 0x000b, 0xbbe0, 0x0009, 0x0030, 0x0008, 0x0dae,
-	0x000b, 0x18fe, 0x0000, 0x3ce0, 0x0009, 0x09ab, 0x0003, 0x15fe,
-	0x0008, 0x3ce0, 0x0009, 0x09ab, 0x0003, 0x01ea, 0x0004, 0x8076,
-	0x0008, 0x0040, 0x0000, 0x01e7, 0x0003, 0x8076, 0x0008, 0x0041,
-	0x0008, 0x01e7, 0x0003, 0xbbe0, 0x0009, 0x0037, 0x0000, 0x0dcc,
-	0x0003, 0x18fe, 0x0000, 0x3ce0, 0x0009, 0x0dab, 0x000b, 0x8076,
-	0x0008, 0x0040, 0x0000, 0x1a60, 0x0000, 0x8062, 0x0008, 0x000d,
-	0x0000, 0x2604, 0x0008, 0x2604, 0x0008, 0x2706, 0x0008, 0x2706,
-	0x0008, 0x2808, 0x0000, 0x2808, 0x0000, 0x290a, 0x0000, 0x290a,
-	0x0000, 0x8066, 0x0000, 0x0422, 0x0000, 0x45c3, 0x0003, 0x01ef,
-	0x0004, 0x8054, 0x0008, 0x0004, 0x0000, 0x8074, 0x0000, 0xf000,
-	0x0008, 0x8072, 0x0000, 0xb000, 0x0000, 0x0192, 0x000b, 0xbbe0,
-	0x0009, 0x0038, 0x0000, 0x0dde, 0x0003, 0x18fe, 0x0000, 0x3ce0,
-	0x0009, 0x09db, 0x000b, 0x15fe, 0x0008, 0x3ce0, 0x0009, 0x0da7,
-	0x000b, 0x01ea, 0x0004, 0x8076, 0x0008, 0x0040, 0x0000, 0x8072,
-	0x0000, 0x8000, 0x0000, 0x022c, 0x000b, 0x8076, 0x0008, 0x0042,
-	0x0008, 0x01e7, 0x0003, 0xbbe0, 0x0009, 0x0016, 0x0000, 0x0de7,
-	0x0003, 0x3a44, 0x0002, 0x0c0c, 0x000b, 0x8072, 0x0000, 0x8000,
-	0x0000, 0x8000, 0x000f, 0x000a, 0x000b, 0x8072, 0x0000, 0x8000,
-	0x0000, 0x000a, 0x000b, 0x3d30, 0x000a, 0x7f00, 0x0000, 0xbc80,
-	0x0001, 0x0007, 0x0000, 0x01f3, 0x0003, 0x1930, 0x000a, 0x7f00,
-	0x0000, 0x9880, 0x0001, 0x0007, 0x0000, 0x8060, 0x0000, 0x0400,
-	0x0000, 0x7f62, 0x0008, 0x8066, 0x0000, 0x000a, 0x0008, 0x45f8,
-	0x000b, 0x4000, 0x000f, 0x21fa, 0x000b, 0x0870, 0x0008, 0x4000,
-	0x000f, 0xbac0, 0x0009, 0x0090, 0x0008, 0x0a03, 0x000b, 0x8074,
-	0x0000, 0x0706, 0x0000, 0x0205, 0x0003, 0x8074, 0x0000, 0x0703,
-	0x0000, 0x4000, 0x000f, 0x8010, 0x0008, 0x0023, 0x0000, 0x023a,
-	0x0003, 0x8010, 0x0008, 0x0022, 0x0008, 0x023a, 0x0003, 0x01ef,
-	0x0004, 0x8010, 0x0008, 0x0007, 0x0000, 0x01fa, 0x000c, 0x1810,
-	0x0000, 0x01fa, 0x000c, 0x0246, 0x000b, 0x01ef, 0x0004, 0x8010,
-	0x0008, 0x001b, 0x0008, 0x01fa, 0x000c, 0x1810, 0x0000, 0x01fa,
-	0x000c, 0x8074, 0x0000, 0xf080, 0x0000, 0x8072, 0x0000, 0x3000,
-	0x0008, 0x0d30, 0x0000, 0x000a, 0x000b, 0x8010, 0x0008, 0x0009,
-	0x0008, 0x023a, 0x0003, 0x808c, 0x0008, 0x0001, 0x0000, 0x8010,
-	0x0008, 0x0004, 0x0000, 0x4143, 0x000a, 0x085f, 0x0003, 0x3a44,
-	0x0002, 0x0c0a, 0x000b, 0x0d2a, 0x0008, 0x023a, 0x0003, 0x8010,
-	0x0008, 0x0003, 0x0008, 0x023e, 0x000b, 0x8010, 0x0008, 0x000b,
-	0x0000, 0x023e, 0x000b, 0x8010, 0x0008, 0x0002, 0x0000, 0x023e,
-	0x000b, 0x3a47, 0x0002, 0x0d3d, 0x000b, 0x8010, 0x0008, 0x0006,
-	0x0008, 0x023e, 0x000b, 0x8074, 0x0000, 0xf000, 0x0008, 0x8072,
-	0x0000, 0x3000, 0x0008, 0x01fa, 0x000c, 0x01fd, 0x0004, 0x3a40,
-	0x000a, 0x080a, 0x0003, 0x8010, 0x0008, 0x000c, 0x0008, 0x01fa,
-	0x000c, 0x000a, 0x000b, 0x8074, 0x0000, 0xf080, 0x0000, 0x8072,
-	0x0000, 0x3000, 0x0008, 0x0d30, 0x0000, 0x2e4d, 0x0002, 0x2e4d,
-	0x0002, 0x0a51, 0x0003, 0x8054, 0x0008, 0x0019, 0x0000, 0x000a,
-	0x000b, 0x8054, 0x0008, 0x0009, 0x0008, 0x000a, 0x000b, 0x3a44,
-	0x0002, 0x0c0a, 0x000b, 0x022f, 0x000b, 0xf8aa, 0xf3d5, 0x0001,
-	0x0002, 0x0004, 0x0008, 0x0010, 0x0020, 0x0040, 0x0080, 0x0100,
-	0x0200, 0x0400, 0x0800, 0x1000, 0x2000, 0x4000, 0x8000, 0x5d31
+	0x0002, 0x6210, 0x2258, 0x0096, 0x904e, 0x080c, 0x9ce3, 0x009e,
+	0x008e, 0x903e, 0x080c, 0x9d8e, 0x080c, 0xdbbe, 0x005e, 0x007e,
+	0x00be, 0x0005, 0x00b6, 0x0046, 0x0056, 0x0076, 0x00c6, 0x0156,
+	0x2c20, 0x2128, 0x20a9, 0x007f, 0x900e, 0x0016, 0x0036, 0x080c,
+	0x64fc, 0x1180, 0x0056, 0x0086, 0x9046, 0x2508, 0x2029, 0x0001,
+	0x0096, 0x904e, 0x080c, 0x9ce3, 0x009e, 0x008e, 0x903e, 0x080c,
+	0x9d8e, 0x005e, 0x003e, 0x001e, 0x8108, 0x1f04, 0xdc4d, 0x0036,
+	0x2508, 0x2029, 0x0003, 0x080c, 0xdbbe, 0x003e, 0x015e, 0x00ce,
+	0x007e, 0x005e, 0x004e, 0x00be, 0x0005, 0x00b6, 0x0076, 0x0056,
+	0x6210, 0x2258, 0x0086, 0x9046, 0x2029, 0x0001, 0x2019, 0x0048,
+	0x0096, 0x904e, 0x080c, 0x9ce3, 0x009e, 0x008e, 0x903e, 0x080c,
+	0x9d8e, 0x2c20, 0x080c, 0xdbbe, 0x005e, 0x007e, 0x00be, 0x0005,
+	0x00b6, 0x0046, 0x0056, 0x0076, 0x00c6, 0x0156, 0x2c20, 0x20a9,
+	0x0800, 0x900e, 0x0016, 0x0036, 0x080c, 0x64fc, 0x1190, 0x0086,
+	0x9046, 0x2828, 0x0046, 0x2021, 0x0001, 0x080c, 0xdf55, 0x004e,
+	0x0096, 0x904e, 0x080c, 0x9ce3, 0x009e, 0x008e, 0x903e, 0x080c,
+	0x9d8e, 0x003e, 0x001e, 0x8108, 0x1f04, 0xdc9a, 0x0036, 0x2029,
+	0x0002, 0x080c, 0xdbbe, 0x003e, 0x015e, 0x00ce, 0x007e, 0x005e,
+	0x004e, 0x00be, 0x0005, 0x0016, 0x00f6, 0x080c, 0xc1cb, 0x0198,
+	0xa868, 0x9084, 0x00ff, 0x9086, 0x0046, 0x0180, 0xa800, 0x907d,
+	0x0138, 0xa803, 0x0000, 0xab86, 0x080c, 0x6c02, 0x2f48, 0x0cb0,
+	0xab86, 0x080c, 0x6c02, 0x00fe, 0x001e, 0x0005, 0xa800, 0x907d,
+	0x0130, 0xa803, 0x0000, 0x080c, 0x6c02, 0x2f48, 0x0cb8, 0x080c,
+	0x6c02, 0x0c88, 0x00e6, 0x0046, 0x0036, 0x2061, 0x1cd0, 0x9005,
+	0x1138, 0x2071, 0x1800, 0x7450, 0x7070, 0x8001, 0x9402, 0x12d8,
+	0x2100, 0x9c06, 0x0168, 0x6000, 0x9086, 0x0000, 0x0148, 0x6008,
+	0x9206, 0x1130, 0x6010, 0x91a0, 0x0004, 0x2424, 0x9406, 0x0140,
+	0x9ce0, 0x0018, 0x2001, 0x1819, 0x2004, 0x9c02, 0x1220, 0x0c40,
+	0x9085, 0x0001, 0x0008, 0x9006, 0x003e, 0x004e, 0x00ee, 0x0005,
+	0x0096, 0x0006, 0x080c, 0x100d, 0x000e, 0x090c, 0x0dc3, 0xaae6,
+	0xa86b, 0x010d, 0xa892, 0x0026, 0x2010, 0x080c, 0xc1bb, 0x2001,
+	0x0000, 0x0120, 0x2200, 0x9080, 0x0015, 0x2004, 0x002e, 0xa87e,
+	0x9186, 0x0020, 0x0110, 0xa8e7, 0xffff, 0xa98a, 0xac7a, 0xa883,
+	0x0000, 0x2001, 0x196a, 0x2004, 0xa886, 0x9006, 0xa802, 0xa86e,
+	0xa88e, 0x0126, 0x2091, 0x8000, 0x080c, 0x6c02, 0x012e, 0x009e,
+	0x0005, 0x6700, 0x9786, 0x0000, 0x0158, 0x9786, 0x0001, 0x0140,
+	0x9786, 0x000a, 0x0128, 0x9786, 0x0009, 0x0110, 0x9085, 0x0001,
+	0x0005, 0x00e6, 0x6010, 0x9075, 0x0138, 0x00b6, 0x2058, 0xb8a0,
+	0x00be, 0x9206, 0x00ee, 0x0005, 0x9085, 0x0001, 0x0cd8, 0x0016,
+	0x6004, 0x908e, 0x001e, 0x11a0, 0x8007, 0x6134, 0x918c, 0x00ff,
+	0x9105, 0x6036, 0x6007, 0x0085, 0x6003, 0x000b, 0x6023, 0x0005,
+	0x2001, 0x1963, 0x2004, 0x601a, 0x080c, 0x88a1, 0x080c, 0x8e38,
+	0x001e, 0x0005, 0xa001, 0xa001, 0x0005, 0x6024, 0xd0e4, 0x0158,
+	0xd0cc, 0x0118, 0x080c, 0xc4fe, 0x0030, 0x080c, 0xdf7c, 0x080c,
+	0x86d8, 0x080c, 0xa39d, 0x0005, 0x9280, 0x0008, 0x2004, 0x9084,
+	0x000f, 0x0002, 0xdda8, 0xdda8, 0xdda8, 0xddaa, 0xdda8, 0xddaa,
+	0xddaa, 0xdda8, 0xddaa, 0xdda8, 0xdda8, 0xdda8, 0xdda8, 0xdda8,
+	0x9006, 0x0005, 0x9085, 0x0001, 0x0005, 0x9280, 0x0008, 0x2004,
+	0x9084, 0x000f, 0x0002, 0xddc1, 0xddc1, 0xddc1, 0xddc1, 0xddc1,
+	0xddc1, 0xddce, 0xddc1, 0xddc1, 0xddc1, 0xddc1, 0xddc1, 0xddc1,
+	0xddc1, 0x6007, 0x003b, 0x602f, 0x0009, 0x6017, 0x2a00, 0x6003,
+	0x0001, 0x080c, 0x88a1, 0x080c, 0x8e38, 0x0005, 0x0096, 0x00c6,
+	0x2260, 0x080c, 0xdf7c, 0x6043, 0x0000, 0x6024, 0xc0f4, 0xc0e4,
+	0x6026, 0x603b, 0x0000, 0x00ce, 0x00d6, 0x2268, 0x9186, 0x0007,
+	0x1904, 0xde27, 0x6814, 0x9005, 0x0138, 0x2048, 0xa880, 0xd0fc,
+	0x1118, 0x00de, 0x009e, 0x08a8, 0x6007, 0x003a, 0x6003, 0x0001,
+	0x080c, 0x88a1, 0x080c, 0x8e38, 0x00c6, 0x2d60, 0x6100, 0x9186,
+	0x0002, 0x1904, 0xde96, 0x6014, 0x9005, 0x1138, 0x6000, 0x9086,
+	0x0007, 0x190c, 0x0dc3, 0x0804, 0xde96, 0x2048, 0x080c, 0xc1cd,
+	0x1130, 0x0028, 0x2048, 0xa800, 0x9005, 0x1de0, 0x2900, 0x2048,
+	0xa880, 0x9084, 0x0003, 0x9086, 0x0002, 0x1168, 0xa880, 0xc0dc,
+	0xc0f4, 0xa882, 0xa884, 0xc0fc, 0xa886, 0x2009, 0x0043, 0x080c,
+	0xd6b9, 0x0804, 0xde96, 0x2009, 0x0041, 0x0804, 0xde90, 0x9186,
+	0x0005, 0x15a0, 0x6814, 0x2048, 0xa880, 0xd0bc, 0x1120, 0x00de,
+	0x009e, 0x0804, 0xddc1, 0xd0b4, 0x0128, 0xd0fc, 0x090c, 0x0dc3,
+	0x0804, 0xdde2, 0x6007, 0x003a, 0x6003, 0x0001, 0x080c, 0x88a1,
+	0x080c, 0x8e38, 0x00c6, 0x2d60, 0x6100, 0x9186, 0x0002, 0x0120,
+	0x9186, 0x0004, 0x1904, 0xde96, 0x6814, 0x2048, 0xa980, 0xc1f4,
+	0xc1dc, 0xa982, 0xa984, 0xc1fc, 0xc1bc, 0xa986, 0x00f6, 0x2c78,
+	0x080c, 0x16c1, 0x00fe, 0x2009, 0x0042, 0x0490, 0x0036, 0x080c,
+	0x100d, 0x090c, 0x0dc3, 0xa86b, 0x010d, 0x9006, 0xa802, 0xa86e,
+	0xa88e, 0x2d18, 0xab92, 0xa88b, 0x0045, 0x2c00, 0xa896, 0x6038,
+	0xa8a6, 0x2360, 0x6024, 0xc0dd, 0x6026, 0x6010, 0x00b6, 0x2058,
+	0xb8a0, 0x00be, 0x6354, 0xab7e, 0xa87a, 0x9006, 0xa882, 0xa886,
+	0xad9e, 0xae9a, 0xa8a3, 0x0001, 0x080c, 0x6c02, 0x2019, 0x0045,
+	0x6008, 0x2068, 0x080c, 0xd861, 0x2d00, 0x600a, 0x003e, 0x0038,
+	0x6043, 0x0000, 0x6003, 0x0007, 0x080c, 0xd6b9, 0x00ce, 0x00de,
+	0x009e, 0x0005, 0x9186, 0x0013, 0x1128, 0x6004, 0x9082, 0x0085,
+	0x2008, 0x00c2, 0x9186, 0x0027, 0x1178, 0x080c, 0x8d2c, 0x0036,
+	0x0096, 0x6014, 0x2048, 0x2019, 0x0004, 0x080c, 0xdcc3, 0x009e,
+	0x003e, 0x080c, 0x8e38, 0x0005, 0x9186, 0x0014, 0x0d70, 0x080c,
+	0xa434, 0x0005, 0xdec9, 0xdec7, 0xdec7, 0xdec7, 0xdec7, 0xdec7,
+	0xdec9, 0xdec7, 0xdec7, 0xdec7, 0xdec7, 0xdec7, 0xdec7, 0x080c,
+	0x0dc3, 0x080c, 0x8d2c, 0x6003, 0x000c, 0x080c, 0x8e38, 0x0005,
+	0x9182, 0x0092, 0x1220, 0x9182, 0x0085, 0x0208, 0x001a, 0x080c,
+	0xa434, 0x0005, 0xdee7, 0xdee7, 0xdee7, 0xdee7, 0xdee9, 0xdf09,
+	0xdee7, 0xdee7, 0xdee7, 0xdee7, 0xdee7, 0xdee7, 0xdee7, 0x080c,
+	0x0dc3, 0x00d6, 0x2c68, 0x080c, 0xa347, 0x01b0, 0x6003, 0x0001,
+	0x6007, 0x001e, 0x2009, 0x026e, 0x210c, 0x613a, 0x2009, 0x026f,
+	0x210c, 0x613e, 0x600b, 0xffff, 0x6910, 0x6112, 0x6023, 0x0004,
+	0x080c, 0x88a1, 0x080c, 0x8e38, 0x2d60, 0x080c, 0xa39d, 0x00de,
+	0x0005, 0x080c, 0xa39d, 0x0005, 0x00e6, 0x6010, 0x00b6, 0x2058,
+	0xb800, 0x00be, 0xd0ec, 0x00ee, 0x0005, 0x2009, 0x187e, 0x210c,
+	0xd1ec, 0x05d0, 0x6003, 0x0002, 0x6024, 0xc0e5, 0x6026, 0xd0cc,
+	0x0150, 0x2001, 0x1964, 0x2004, 0x6042, 0x2009, 0x187e, 0x210c,
+	0xd1f4, 0x1540, 0x00a0, 0x2009, 0x187e, 0x210c, 0xd1f4, 0x0128,
+	0x6024, 0xc0e4, 0x6026, 0x9006, 0x00f8, 0x2001, 0x1964, 0x200c,
+	0x2001, 0x1962, 0x2004, 0x9100, 0x9080, 0x000a, 0x6042, 0x6010,
+	0x00b6, 0x2058, 0xb8ac, 0x9005, 0x1130, 0x2c00, 0xb8ae, 0x0038,
+	0x2104, 0x9005, 0x0118, 0x9088, 0x0003, 0x0cd0, 0x2c0a, 0x00be,
+	0x600f, 0x0000, 0x9085, 0x0001, 0x0005, 0x0016, 0x00c6, 0x00e6,
+	0x6154, 0xb8ac, 0x9005, 0x01e0, 0x2060, 0x9006, 0x2070, 0xb8ae,
+	0x8cff, 0x01b0, 0x84ff, 0x1118, 0x6054, 0x9106, 0x1148, 0x600c,
+	0x8eff, 0x0108, 0x2072, 0x080c, 0x86d8, 0x080c, 0xa39d, 0x0030,
+	0x8eff, 0x1110, 0x2c00, 0xb8ae, 0x9cf0, 0x0003, 0x2e64, 0x0c40,
+	0x00ee, 0x00ce, 0x001e, 0x0005, 0x00d6, 0x00b6, 0x6010, 0x2058,
+	0xb8ac, 0x9c06, 0x1118, 0x600c, 0xb8ae, 0x0048, 0xb8ac, 0x906d,
+	0x0130, 0x9c06, 0x0110, 0x680c, 0x0cd0, 0x600c, 0x680e, 0x00be,
+	0x00de, 0x0005, 0x0026, 0x0036, 0x0156, 0x2011, 0x182b, 0x2204,
+	0x9084, 0x00ff, 0x2019, 0x026e, 0x2334, 0x96b4, 0x00ff, 0x9636,
+	0x1508, 0x8318, 0x2334, 0x2204, 0x9084, 0xff00, 0x9636, 0x11d0,
+	0x2011, 0x0270, 0x20a9, 0x0004, 0x6010, 0x0096, 0x2048, 0x2019,
+	0x000a, 0x080c, 0xb448, 0x009e, 0x1168, 0x2011, 0x0274, 0x20a9,
+	0x0004, 0x6010, 0x0096, 0x2048, 0x2019, 0x0006, 0x080c, 0xb448,
+	0x009e, 0x1100, 0x015e, 0x003e, 0x002e, 0x0005, 0x00e6, 0x2071,
+	0x1800, 0x080c, 0x5f46, 0x080c, 0x2ed6, 0x00ee, 0x0005, 0x00e6,
+	0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0fc, 0x0108, 0x0011,
+	0x00ee, 0x0005, 0xa884, 0xc0e5, 0xa886, 0x0005, 0x00e6, 0x00d6,
+	0x00c6, 0x0076, 0x0066, 0x0056, 0x0046, 0x0026, 0x0016, 0x0126,
+	0x2091, 0x8000, 0x2029, 0x19cd, 0x252c, 0x2021, 0x19d3, 0x2424,
+	0x2061, 0x1cd0, 0x2071, 0x1800, 0x7650, 0x7070, 0x9606, 0x0578,
+	0x6720, 0x9786, 0x0001, 0x0118, 0x9786, 0x0008, 0x1500, 0x2500,
+	0x9c06, 0x01e8, 0x2400, 0x9c06, 0x01d0, 0x080c, 0xdd49, 0x01b8,
+	0x080c, 0xdd59, 0x11a0, 0x6000, 0x9086, 0x0004, 0x1120, 0x0016,
+	0x080c, 0x1998, 0x001e, 0x080c, 0xc3c0, 0x1110, 0x080c, 0x312b,
+	0x080c, 0xc3d1, 0x1110, 0x080c, 0xadb3, 0x080c, 0xa3cf, 0x9ce0,
+	0x0018, 0x2001, 0x1819, 0x2004, 0x9c02, 0x1208, 0x0858, 0x012e,
+	0x001e, 0x002e, 0x004e, 0x005e, 0x006e, 0x007e, 0x00ce, 0x00de,
+	0x00ee, 0x0005, 0x2001, 0x1810, 0x2004, 0xd0dc, 0x0005, 0x0006,
+	0x2001, 0x1836, 0x2004, 0xd09c, 0x000e, 0x0005, 0x0006, 0x0036,
+	0x0046, 0x080c, 0xc8ce, 0x0168, 0x2019, 0xffff, 0x9005, 0x0128,
+	0x6010, 0x00b6, 0x2058, 0xbba0, 0x00be, 0x2021, 0x0004, 0x080c,
+	0x4d24, 0x004e, 0x003e, 0x000e, 0x0005, 0x6004, 0x9086, 0x0001,
+	0x1128, 0x080c, 0x9e54, 0x080c, 0xa3cf, 0x9006, 0x0005, 0x00e6,
+	0x00c6, 0x00b6, 0x0046, 0x2061, 0x1cd0, 0x2071, 0x1800, 0x7450,
+	0x7070, 0x8001, 0x9402, 0x12d8, 0x2100, 0x9c06, 0x0168, 0x6000,
+	0x9086, 0x0000, 0x0148, 0x6010, 0x2058, 0xb8a0, 0x9206, 0x1120,
+	0x6004, 0x9086, 0x0002, 0x0140, 0x9ce0, 0x0018, 0x2001, 0x1819,
+	0x2004, 0x9c02, 0x1220, 0x0c40, 0x9085, 0x0001, 0x0008, 0x9006,
+	0x004e, 0x00be, 0x00ce, 0x00ee, 0x0005, 0x2001, 0x1810, 0x2004,
+	0xd0a4, 0x0160, 0x2001, 0x1836, 0x2004, 0xd0a4, 0x0138, 0x2001,
+	0x185f, 0x2004, 0xd0a4, 0x1118, 0x9085, 0x0001, 0x0005, 0x9006,
+	0x0ce8, 0x0126, 0x0006, 0x00e6, 0x0016, 0x2091, 0x8000, 0x2071,
+	0x1840, 0xd5a4, 0x0118, 0x7054, 0x8000, 0x7056, 0xd5b4, 0x0118,
+	0x7050, 0x8000, 0x7052, 0xd5ac, 0x0178, 0x2500, 0x9084, 0x0007,
+	0x908e, 0x0003, 0x0148, 0x908e, 0x0004, 0x0130, 0x908e, 0x0005,
+	0x0118, 0x2071, 0x184a, 0x0469, 0x001e, 0x00ee, 0x000e, 0x012e,
+	0x0005, 0x0126, 0x0006, 0x00e6, 0x2091, 0x8000, 0x2071, 0x1842,
+	0x0401, 0x00ee, 0x000e, 0x012e, 0x0005, 0x0126, 0x0006, 0x00e6,
+	0x2091, 0x8000, 0x2071, 0x1840, 0x706c, 0x8000, 0x706e, 0x00ee,
+	0x000e, 0x012e, 0x0005, 0x0126, 0x0006, 0x00e6, 0x2091, 0x8000,
+	0x2071, 0x1840, 0x7070, 0x8000, 0x7072, 0x00ee, 0x000e, 0x012e,
+	0x0005, 0x2e04, 0x8000, 0x2072, 0x1220, 0x8e70, 0x2e04, 0x8000,
+	0x2072, 0x0005, 0x00e6, 0x2071, 0x1840, 0x0c99, 0x00ee, 0x0005,
+	0x00e6, 0x2071, 0x1844, 0x0c69, 0x00ee, 0x0005, 0x0126, 0x0006,
+	0x00e6, 0x2091, 0x8000, 0x2071, 0x1840, 0x7064, 0x8000, 0x7066,
+	0x00ee, 0x000e, 0x012e, 0x0005, 0x0003, 0x000b, 0x04ca, 0x0000,
+	0xc000, 0x0001, 0x8064, 0x0008, 0x0010, 0x0000, 0x8066, 0x0000,
+	0x0101, 0x0008, 0x4407, 0x0003, 0x8060, 0x0000, 0x0400, 0x0000,
+	0x580d, 0x000b, 0x79a6, 0x0003, 0x50f3, 0x000b, 0x4c0a, 0x0003,
+	0xbac0, 0x0009, 0x008a, 0x0000, 0x0c0a, 0x000b, 0x15fe, 0x0008,
+	0x340a, 0x0003, 0xc4c0, 0x0009, 0x7000, 0x0000, 0xffa0, 0x0001,
+	0x2000, 0x0000, 0x1639, 0x0003, 0x808c, 0x0008, 0x0001, 0x0000,
+	0x0000, 0x0007, 0x4047, 0x000a, 0x808c, 0x0008, 0x0002, 0x0000,
+	0x0821, 0x0003, 0x4022, 0x0000, 0x0022, 0x000b, 0x4122, 0x0008,
+	0x4447, 0x0002, 0x0e61, 0x000b, 0x0bfe, 0x0008, 0x11a0, 0x0001,
+	0x123f, 0x000b, 0x0ca0, 0x0001, 0x123f, 0x000b, 0x9180, 0x0001,
+	0x0004, 0x0000, 0x8060, 0x0000, 0x0400, 0x0000, 0x7f62, 0x0008,
+	0x8066, 0x0000, 0x0009, 0x0008, 0x4430, 0x000b, 0x808c, 0x0008,
+	0x0000, 0x0008, 0x0060, 0x0008, 0x8062, 0x0008, 0x0004, 0x0000,
+	0x8066, 0x0000, 0x0411, 0x0000, 0x4438, 0x0003, 0x03fe, 0x0000,
+	0x43e0, 0x0001, 0x0e3c, 0x0003, 0xc2c0, 0x0009, 0x00ff, 0x0008,
+	0x02e0, 0x0001, 0x0e3c, 0x0003, 0x9180, 0x0001, 0x0005, 0x0008,
+	0x8060, 0x0000, 0x0400, 0x0000, 0x7f62, 0x0008, 0x8066, 0x0000,
+	0x0019, 0x0000, 0x4447, 0x000b, 0x0240, 0x0002, 0x0a39, 0x000b,
+	0x00fe, 0x0000, 0x323c, 0x0003, 0x112a, 0x0000, 0x002e, 0x0008,
+	0x022c, 0x0008, 0x3a44, 0x0002, 0x0c0a, 0x000b, 0x808c, 0x0008,
+	0x0002, 0x0000, 0x1760, 0x0008, 0x8062, 0x0008, 0x000f, 0x0008,
+	0x8066, 0x0000, 0x0011, 0x0008, 0x4458, 0x0003, 0x01fe, 0x0008,
+	0x42e0, 0x0009, 0x0e2f, 0x000b, 0x00fe, 0x0000, 0x43e0, 0x0001,
+	0x0e2f, 0x000b, 0x1734, 0x0000, 0x1530, 0x0000, 0x1632, 0x0008,
+	0x0d2a, 0x0008, 0x9880, 0x0001, 0x0010, 0x0000, 0x8060, 0x0000,
+	0x0400, 0x0000, 0x7f62, 0x0008, 0x8066, 0x0000, 0x1e0a, 0x0008,
+	0x446a, 0x000b, 0x808a, 0x0008, 0x0003, 0x0008, 0x1a60, 0x0000,
+	0x8062, 0x0008, 0x0002, 0x0000, 0x5870, 0x000b, 0x8066, 0x0000,
+	0x3679, 0x0000, 0x4473, 0x0003, 0x5874, 0x0003, 0x3efe, 0x0008,
+	0x7f4f, 0x0002, 0x087a, 0x000b, 0x0d00, 0x0000, 0x0082, 0x0004,
+	0x8054, 0x0008, 0x0011, 0x0008, 0x8074, 0x0000, 0x1010, 0x0008,
+	0x1efe, 0x0000, 0x300a, 0x000b, 0x00d0, 0x000c, 0x000a, 0x000b,
+	0x00fe, 0x0000, 0x348a, 0x000b, 0x1a60, 0x0000, 0x8062, 0x0008,
+	0x0007, 0x0000, 0x8066, 0x0000, 0x0231, 0x0008, 0x4489, 0x0003,
+	0x03fe, 0x0000, 0x04d0, 0x0001, 0x0cc4, 0x0003, 0x82c0, 0x0001,
+	0x1f00, 0x0000, 0xffa0, 0x0001, 0x0400, 0x0000, 0x08a2, 0x000b,
+	0x14cc, 0x000b, 0x01fe, 0x0008, 0x0580, 0x0009, 0x7f06, 0x0000,
+	0x8690, 0x0009, 0x0000, 0x0008, 0x7f0c, 0x0000, 0x02fe, 0x0008,
+	0xffc0, 0x0001, 0x00ff, 0x0008, 0x0680, 0x0009, 0x10a2, 0x000b,
+	0x7f08, 0x0008, 0x84c0, 0x0001, 0xff00, 0x0008, 0x08c4, 0x000b,
+	0xb9c0, 0x0009, 0x0030, 0x0008, 0x0cb3, 0x0003, 0x8060, 0x0000,
+	0x0400, 0x0000, 0x80fe, 0x0008, 0x19e6, 0x0001, 0x7f62, 0x0008,
+	0x8066, 0x0000, 0x0409, 0x0000, 0x44ac, 0x000b, 0x80fe, 0x0008,
+	0x19e5, 0x0001, 0x7f62, 0x0008, 0x8066, 0x0000, 0x040a, 0x0000,
+	0x44b2, 0x000b, 0x00fe, 0x0000, 0x34ba, 0x000b, 0x8072, 0x0000,
+	0x1010, 0x0008, 0x3944, 0x0002, 0x08b5, 0x000b, 0x00be, 0x000b,
+	0x8072, 0x0000, 0x2020, 0x0008, 0x3945, 0x000a, 0x08ba, 0x000b,
+	0x3946, 0x000a, 0x0ccb, 0x0003, 0x0000, 0x0007, 0x3943, 0x000a,
+	0x08cb, 0x000b, 0x00be, 0x000b, 0x00fe, 0x0000, 0x34c9, 0x0003,
+	0x8072, 0x0000, 0x1000, 0x0000, 0x00cb, 0x0003, 0x8072, 0x0000,
+	0x2000, 0x0000, 0x4000, 0x000f, 0x86c0, 0x0009, 0xfc00, 0x0008,
+	0x08c4, 0x000b, 0x00a2, 0x0003, 0x1c60, 0x0000, 0x1b62, 0x0000,
+	0x8066, 0x0000, 0x0231, 0x0008, 0x44d4, 0x000b, 0x58d5, 0x000b,
+	0x0140, 0x0008, 0x0242, 0x0000, 0x1f43, 0x0002, 0x0ce3, 0x0003,
+	0x0d44, 0x0000, 0x0d46, 0x0008, 0x0348, 0x0008, 0x044a, 0x0008,
+	0x030a, 0x0008, 0x040c, 0x0000, 0x0d06, 0x0000, 0x0d08, 0x0008,
+	0x00e7, 0x000b, 0x0344, 0x0008, 0x0446, 0x0008, 0x0548, 0x0008,
+	0x064a, 0x0000, 0x58e7, 0x0003, 0x3efe, 0x0008, 0x7f4f, 0x0002,
+	0x08ee, 0x0003, 0x8000, 0x0000, 0x0001, 0x0000, 0x0082, 0x0004,
+	0x8054, 0x0008, 0x0001, 0x0000, 0x8074, 0x0000, 0x2020, 0x0008,
+	0x4000, 0x000f, 0x3a40, 0x000a, 0x0c0d, 0x0003, 0x2b24, 0x0008,
+	0x2b24, 0x0008, 0x58f7, 0x000b, 0x8054, 0x0008, 0x0002, 0x0000,
+	0x1242, 0x0002, 0x0945, 0x0003, 0x3a45, 0x000a, 0x0934, 0x0003,
+	0x8072, 0x0000, 0x1000, 0x0000, 0x3945, 0x000a, 0x0904, 0x0003,
+	0x8072, 0x0000, 0x3010, 0x0000, 0x1e10, 0x000a, 0x7f3c, 0x0000,
+	0x092f, 0x0003, 0x1d00, 0x0002, 0x7f3a, 0x0000, 0x0d60, 0x0000,
+	0x7f62, 0x0008, 0x8066, 0x0000, 0x0009, 0x0008, 0x450d, 0x000b,
+	0x00fe, 0x0000, 0x352c, 0x0003, 0x1c60, 0x0000, 0x8062, 0x0008,
+	0x0001, 0x0000, 0x8066, 0x0000, 0x0009, 0x0008, 0x4515, 0x000b,
+	0x00fe, 0x0000, 0x3219, 0x000b, 0x0038, 0x0000, 0x0060, 0x0008,
+	0x8062, 0x0008, 0x001a, 0x0000, 0x8066, 0x0000, 0x0009, 0x0008,
+	0x451e, 0x0003, 0x80c0, 0x0009, 0x00ff, 0x0008, 0x7f3e, 0x0008,
+	0x0d60, 0x0000, 0x0efe, 0x0008, 0x1f80, 0x0001, 0x7f62, 0x0008,
+	0x8066, 0x0000, 0x0009, 0x0008, 0x4528, 0x0003, 0x003a, 0x0008,
+	0x1dfe, 0x0000, 0x0109, 0x0003, 0x0036, 0x0008, 0x00d0, 0x000c,
+	0x0145, 0x000b, 0x8074, 0x0000, 0x2000, 0x0000, 0x8072, 0x0000,
+	0x2000, 0x0000, 0x0145, 0x000b, 0x3a44, 0x0002, 0x0a42, 0x000b,
+	0x8074, 0x0000, 0x1000, 0x0000, 0x8072, 0x0000, 0x1000, 0x0000,
+	0x2d0e, 0x0000, 0x2d0e, 0x0000, 0x3616, 0x0003, 0x26fe, 0x0008,
+	0x26fe, 0x0008, 0x2700, 0x0008, 0x2700, 0x0008, 0x00d0, 0x0009,
+	0x0d57, 0x000b, 0x8074, 0x0000, 0x4040, 0x0008, 0x5945, 0x0003,
+	0x50f3, 0x000b, 0x3a46, 0x000a, 0x0d57, 0x000b, 0x3a47, 0x0002,
+	0x0952, 0x0003, 0x8054, 0x0008, 0x0004, 0x0000, 0x8074, 0x0000,
+	0x8000, 0x0000, 0x8072, 0x0000, 0x3000, 0x0008, 0x019a, 0x0003,
+	0x92c0, 0x0009, 0x0fc8, 0x0000, 0x080a, 0x0003, 0x1246, 0x000a,
+	0x0e13, 0x000b, 0x1a60, 0x0000, 0x8062, 0x0008, 0x0002, 0x0000,
+	0x8066, 0x0000, 0x362a, 0x0000, 0x455c, 0x0003, 0x2000, 0x0000,
+	0x2000, 0x0000, 0x2102, 0x0000, 0x2102, 0x0000, 0x2204, 0x0000,
+	0x2204, 0x0000, 0x2306, 0x0000, 0x2306, 0x0000, 0x2408, 0x0000,
+	0x2408, 0x0000, 0x250a, 0x0000, 0x250a, 0x0000, 0x260c, 0x0000,
+	0x260c, 0x0000, 0x270e, 0x0000, 0x270e, 0x0000, 0x2810, 0x0000,
+	0x2810, 0x0000, 0x2912, 0x0000, 0x2912, 0x0000, 0x1a60, 0x0000,
+	0x8062, 0x0008, 0x0007, 0x0000, 0x8066, 0x0000, 0x0052, 0x0000,
+	0x4576, 0x000b, 0x92c0, 0x0009, 0x0780, 0x0008, 0x0e2c, 0x000b,
+	0x124b, 0x0002, 0x097f, 0x0003, 0x2e4d, 0x0002, 0x2e4d, 0x0002,
+	0x0a16, 0x0003, 0x3a46, 0x000a, 0x0d8c, 0x000b, 0x5981, 0x000b,
+	0x8054, 0x0008, 0x0004, 0x0000, 0x1243, 0x000a, 0x0996, 0x000b,
+	0x8010, 0x0008, 0x000d, 0x0000, 0x0207, 0x0004, 0x1810, 0x0000,
+	0x0207, 0x0004, 0x0196, 0x0003, 0x194d, 0x000a, 0x0990, 0x000b,
+	0x1243, 0x000a, 0x0a20, 0x0003, 0x5990, 0x000b, 0x8054, 0x0008,
+	0x0004, 0x0000, 0x01fc, 0x000c, 0x1810, 0x0000, 0x0207, 0x0004,
+	0x8074, 0x0000, 0xf000, 0x0008, 0x8072, 0x0000, 0x3000, 0x0008,
+	0x0d30, 0x0000, 0x3a42, 0x0002, 0x0da0, 0x0003, 0x15fe, 0x0008,
+	0x3451, 0x000b, 0x000a, 0x000b, 0x8074, 0x0000, 0x0501, 0x0000,
+	0x8010, 0x0008, 0x000c, 0x0008, 0x0207, 0x0004, 0x000a, 0x000b,
+	0xbbe0, 0x0009, 0x0030, 0x0008, 0x0db6, 0x000b, 0x18fe, 0x0000,
+	0x3ce0, 0x0009, 0x09b3, 0x0003, 0x15fe, 0x0008, 0x3ce0, 0x0009,
+	0x09b3, 0x0003, 0x01f7, 0x0004, 0x8076, 0x0008, 0x0040, 0x0000,
+	0x01f4, 0x000b, 0x8076, 0x0008, 0x0041, 0x0008, 0x01f4, 0x000b,
+	0xbbe0, 0x0009, 0x0032, 0x0000, 0x0dbb, 0x0003, 0x3c1e, 0x0008,
+	0x01f4, 0x000b, 0xbbe0, 0x0009, 0x0037, 0x0000, 0x0dd9, 0x000b,
+	0x18fe, 0x0000, 0x3ce0, 0x0009, 0x0db3, 0x000b, 0x8076, 0x0008,
+	0x0040, 0x0000, 0x1a60, 0x0000, 0x8062, 0x0008, 0x000d, 0x0000,
+	0x2604, 0x0008, 0x2604, 0x0008, 0x2706, 0x0008, 0x2706, 0x0008,
+	0x2808, 0x0000, 0x2808, 0x0000, 0x290a, 0x0000, 0x290a, 0x0000,
+	0x8066, 0x0000, 0x0422, 0x0000, 0x45d0, 0x000b, 0x01fc, 0x000c,
+	0x8054, 0x0008, 0x0004, 0x0000, 0x8074, 0x0000, 0xf000, 0x0008,
+	0x8072, 0x0000, 0xb000, 0x0000, 0x019a, 0x0003, 0xbbe0, 0x0009,
+	0x0038, 0x0000, 0x0deb, 0x0003, 0x18fe, 0x0000, 0x3ce0, 0x0009,
+	0x09e8, 0x000b, 0x15fe, 0x0008, 0x3ce0, 0x0009, 0x0daf, 0x0003,
+	0x01f7, 0x0004, 0x8076, 0x0008, 0x0040, 0x0000, 0x8072, 0x0000,
+	0x8000, 0x0000, 0x0239, 0x0003, 0x8076, 0x0008, 0x0042, 0x0008,
+	0x01f4, 0x000b, 0xbbe0, 0x0009, 0x0016, 0x0000, 0x0df4, 0x000b,
+	0x3a44, 0x0002, 0x0c0c, 0x000b, 0x8072, 0x0000, 0x8000, 0x0000,
+	0x8000, 0x000f, 0x000a, 0x000b, 0x8072, 0x0000, 0x8000, 0x0000,
+	0x000a, 0x000b, 0x3d30, 0x000a, 0x7f00, 0x0000, 0xbc80, 0x0001,
+	0x0007, 0x0000, 0x0200, 0x0003, 0x1930, 0x000a, 0x7f00, 0x0000,
+	0x9880, 0x0001, 0x0007, 0x0000, 0x8060, 0x0000, 0x0400, 0x0000,
+	0x7f62, 0x0008, 0x8066, 0x0000, 0x000a, 0x0008, 0x4605, 0x0003,
+	0x4000, 0x000f, 0x2207, 0x0003, 0x0870, 0x0008, 0x4000, 0x000f,
+	0xbac0, 0x0009, 0x0090, 0x0008, 0x0a10, 0x0003, 0x8074, 0x0000,
+	0x0706, 0x0000, 0x0212, 0x0003, 0x8074, 0x0000, 0x0703, 0x0000,
+	0x4000, 0x000f, 0x8010, 0x0008, 0x0023, 0x0000, 0x0247, 0x0003,
+	0x8010, 0x0008, 0x0022, 0x0008, 0x0247, 0x0003, 0x01fc, 0x000c,
+	0x8010, 0x0008, 0x0007, 0x0000, 0x0207, 0x0004, 0x1810, 0x0000,
+	0x0207, 0x0004, 0x0253, 0x0003, 0x01fc, 0x000c, 0x8010, 0x0008,
+	0x001b, 0x0008, 0x0207, 0x0004, 0x1810, 0x0000, 0x0207, 0x0004,
+	0x8074, 0x0000, 0xf080, 0x0000, 0x8072, 0x0000, 0x3000, 0x0008,
+	0x0d30, 0x0000, 0x000a, 0x000b, 0x8010, 0x0008, 0x0009, 0x0008,
+	0x0247, 0x0003, 0x808c, 0x0008, 0x0001, 0x0000, 0x8010, 0x0008,
+	0x0004, 0x0000, 0x4143, 0x000a, 0x085f, 0x0003, 0x3a44, 0x0002,
+	0x0c0a, 0x000b, 0x0d2a, 0x0008, 0x0247, 0x0003, 0x8010, 0x0008,
+	0x0003, 0x0008, 0x024b, 0x0003, 0x8010, 0x0008, 0x000b, 0x0000,
+	0x024b, 0x0003, 0x8010, 0x0008, 0x0002, 0x0000, 0x024b, 0x0003,
+	0x3a47, 0x0002, 0x0d45, 0x000b, 0x8010, 0x0008, 0x0006, 0x0008,
+	0x024b, 0x0003, 0x8074, 0x0000, 0xf000, 0x0008, 0x8072, 0x0000,
+	0x3000, 0x0008, 0x0207, 0x0004, 0x020a, 0x000c, 0x3a40, 0x000a,
+	0x080a, 0x0003, 0x8010, 0x0008, 0x000c, 0x0008, 0x0207, 0x0004,
+	0x000a, 0x000b, 0x8074, 0x0000, 0xf080, 0x0000, 0x8072, 0x0000,
+	0x3000, 0x0008, 0x0d30, 0x0000, 0x2e4d, 0x0002, 0x2e4d, 0x0002,
+	0x0a5e, 0x0003, 0x8054, 0x0008, 0x0019, 0x0000, 0x000a, 0x000b,
+	0x8054, 0x0008, 0x0009, 0x0008, 0x000a, 0x000b, 0x3a44, 0x0002,
+	0x0c0a, 0x000b, 0x023c, 0x0003, 0x6c3e, 0xf40f, 0x0001, 0x0002,
+	0x0004, 0x0008, 0x0010, 0x0020, 0x0040, 0x0080, 0x0100, 0x0200,
+	0x0400, 0x0800, 0x1000, 0x2000, 0x4000, 0x8000, 0x0e6c
 };
 #ifdef	ISP_2300_RISC_CODE
 #undef	ISP_2300_RISC_CODE
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/md/md.c
--- a/head/sys/dev/md/md.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/md/md.c	Fri Aug 10 14:19:25 2012 +0300
@@ -6,7 +6,7 @@
  * this stuff is worth it, you can buy me a beer in return.   Poul-Henning=
 Kamp
  * -----------------------------------------------------------------------=
-----
  *
- * $FreeBSD: head/sys/dev/md/md.c 238215 2012-07-07 20:32:21Z trasz $
+ * $FreeBSD: head/sys/dev/md/md.c 239065 2012-08-05 14:11:42Z kib $
  *
  */
=20
@@ -84,14 +84,13 @@
 #include <geom/geom.h>
=20
 #include <vm/vm.h>
+#include <vm/vm_param.h>
 #include <vm/vm_object.h>
 #include <vm/vm_page.h>
 #include <vm/vm_pager.h>
 #include <vm/swap_pager.h>
 #include <vm/uma.h>
=20
-#include <machine/vmparam.h>
-
 #define MD_MODVER 1
=20
 #define MD_SHUTDOWN	0x10000		/* Tell worker thread to terminate. */
@@ -725,12 +724,6 @@
 		/* Actions on further pages start at offset 0 */
 		p +=3D PAGE_SIZE - offs;
 		offs =3D 0;
-#if 0
-if (bootverbose || bp->bio_offset / PAGE_SIZE < 17)
-printf("wire_count %d busy %d flags %x hold_count %d act_count %d queue %d=
 valid %d dirty %d @ %d\n",
-    m->wire_count, m->busy,
-    m->flags, m->hold_count, m->act_count, m->queue, m->valid, m->dirty, i=
);
-#endif
 	}
 	vm_object_pip_subtract(sc->object, 1);
 	VM_OBJECT_UNLOCK(sc->object);
@@ -1090,7 +1083,7 @@
 	case MD_VNODE:
 		break;
 	case MD_SWAP:
-		if (mdio->md_mediasize =3D=3D 0 ||
+		if (mdio->md_mediasize <=3D 0 ||
 		    (mdio->md_mediasize % PAGE_SIZE) !=3D 0)
 			return (EDOM);
 		oldpages =3D OFF_TO_IDX(round_page(sc->mediasize));
@@ -1148,7 +1141,7 @@
 	 * Range check.  Disallow negative sizes or any size less then the
 	 * size of a page.  Then round to a page.
 	 */
-	if (sc->mediasize =3D=3D 0 || (sc->mediasize % PAGE_SIZE) !=3D 0)
+	if (sc->mediasize <=3D 0 || (sc->mediasize % PAGE_SIZE) !=3D 0)
 		return (EDOM);
=20
 	/*
@@ -1189,6 +1182,7 @@
 	struct md_ioctl *mdio;
 	struct md_s *sc;
 	int error, i;
+	unsigned sectsize;
=20
 	if (md_debug)
 		printf("mdctlioctl(%s %lx %p %x %p)\n",
@@ -1217,6 +1211,12 @@
 		default:
 			return (EINVAL);
 		}
+		if (mdio->md_sectorsize =3D=3D 0)
+			sectsize =3D DEV_BSIZE;
+		else
+			sectsize =3D mdio->md_sectorsize;
+		if (sectsize > MAXPHYS || mdio->md_mediasize < sectsize)
+			return (EINVAL);
 		if (mdio->md_options & MD_AUTOUNIT)
 			sc =3D mdnew(-1, &error, mdio->md_type);
 		else {
@@ -1229,10 +1229,7 @@
 		if (mdio->md_options & MD_AUTOUNIT)
 			mdio->md_unit =3D sc->unit;
 		sc->mediasize =3D mdio->md_mediasize;
-		if (mdio->md_sectorsize =3D=3D 0)
-			sc->sectorsize =3D DEV_BSIZE;
-		else
-			sc->sectorsize =3D mdio->md_sectorsize;
+		sc->sectorsize =3D sectsize;
 		error =3D EDOOFUS;
 		switch (sc->type) {
 		case MD_MALLOC:
@@ -1282,6 +1279,8 @@
 		sc =3D mdfind(mdio->md_unit);
 		if (sc =3D=3D NULL)
 			return (ENOENT);
+		if (mdio->md_mediasize < sc->sectorsize)
+			return (EINVAL);
 		if (mdio->md_mediasize < sc->mediasize &&
 		    !(sc->flags & MD_FORCE) &&
 		    !(mdio->md_options & MD_FORCE))
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/mge/if_mge.c
--- a/head/sys/dev/mge/if_mge.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/mge/if_mge.c	Fri Aug 10 14:19:25 2012 +0300
@@ -34,7 +34,7 @@
 #endif
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/dev/mge/if_mge.c 232874 2012-03-12 18:15:08Z =
scottl $");
+__FBSDID("$FreeBSD: head/sys/dev/mge/if_mge.c 238873 2012-07-28 21:56:24Z =
hrs $");
=20
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -258,7 +258,9 @@
 	uint32_t d, r;
=20
 	soc_id(&d, &r);
-	if (d =3D=3D MV_DEV_88F6281 || d =3D=3D MV_DEV_MV78100 ||
+	if (d =3D=3D MV_DEV_88F6281 ||
+	    d =3D=3D MV_DEV_88F6282 ||
+	    d =3D=3D MV_DEV_MV78100 ||
 	    d =3D=3D MV_DEV_MV78100_Z0) {
 		sc->mge_ver =3D 2;
 		sc->mge_mtu =3D 0x4e8;
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/mii/e1000phy.c
--- a/head/sys/dev/mii/e1000phy.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/mii/e1000phy.c	Fri Aug 10 14:19:25 2012 +0300
@@ -30,7 +30,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/dev/mii/e1000phy.c 227908 2011-11-23 20:27:26=
Z marius $");
+__FBSDID("$FreeBSD: head/sys/dev/mii/e1000phy.c 238874 2012-07-28 21:59:12=
Z hrs $");
=20
 /*
  * driver for the Marvell 88E1000 series external 1000/100/10-BT PHY.
@@ -106,6 +106,7 @@
 	MII_PHY_DESC(xxMARVELL, E1111),
 	MII_PHY_DESC(xxMARVELL, E1116),
 	MII_PHY_DESC(xxMARVELL, E1116R),
+	MII_PHY_DESC(xxMARVELL, E1116R_29),
 	MII_PHY_DESC(xxMARVELL, E1118),
 	MII_PHY_DESC(xxMARVELL, E1149R),
 	MII_PHY_DESC(xxMARVELL, E3016),
@@ -208,6 +209,7 @@
 		case MII_MODEL_xxMARVELL_E1111:
 		case MII_MODEL_xxMARVELL_E1112:
 		case MII_MODEL_xxMARVELL_E1116:
+		case MII_MODEL_xxMARVELL_E1116R_29:
 		case MII_MODEL_xxMARVELL_E1118:
 		case MII_MODEL_xxMARVELL_E1149:
 		case MII_MODEL_xxMARVELL_E1149R:
@@ -215,7 +217,8 @@
 			/* Disable energy detect mode. */
 			reg &=3D ~E1000_SCR_EN_DETECT_MASK;
 			reg |=3D E1000_SCR_AUTO_X_MODE;
-			if (sc->mii_mpd_model =3D=3D MII_MODEL_xxMARVELL_E1116)
+			if (sc->mii_mpd_model =3D=3D MII_MODEL_xxMARVELL_E1116 ||
+			    sc->mii_mpd_model =3D=3D MII_MODEL_xxMARVELL_E1116R_29)
 				reg &=3D ~E1000_SCR_POWER_DOWN;
 			reg |=3D E1000_SCR_ASSERT_CRS_ON_TX;
 			break;
@@ -243,6 +246,7 @@
 		PHY_WRITE(sc, E1000_SCR, reg);
=20
 		if (sc->mii_mpd_model =3D=3D MII_MODEL_xxMARVELL_E1116 ||
+		    sc->mii_mpd_model =3D=3D MII_MODEL_xxMARVELL_E1116R_29 ||
 		    sc->mii_mpd_model =3D=3D MII_MODEL_xxMARVELL_E1149 ||
 		    sc->mii_mpd_model =3D=3D MII_MODEL_xxMARVELL_E1149R) {
 			PHY_WRITE(sc, E1000_EADR, 2);
@@ -259,6 +263,7 @@
 	case MII_MODEL_xxMARVELL_E1118:
 		break;
 	case MII_MODEL_xxMARVELL_E1116:
+	case MII_MODEL_xxMARVELL_E1116R_29:
 		page =3D PHY_READ(sc, E1000_EADR);
 		/* Select page 3, LED control register. */
 		PHY_WRITE(sc, E1000_EADR, 3);
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/mlx/mlxvar.h
--- a/head/sys/dev/mlx/mlxvar.h	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/mlx/mlxvar.h	Fri Aug 10 14:19:25 2012 +0300
@@ -23,7 +23,7 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- *	$FreeBSD$
+ *	$FreeBSD: head/sys/dev/mlx/mlxvar.h 238997 2012-08-03 00:11:13Z delphij=
 $
  */
=20
 /*
@@ -47,7 +47,7 @@
  * making that fit cleanly without crossing page boundaries requires round=
ing up
  * to the next power of two.
  */
-#define MLX_MAXPHYS	(128 * 124)
+#define MLX_MAXPHYS	(128 * 1024)
 #define MLX_NSEG	64
=20
 #define MLX_NSLOTS	256		/* max number of command slots */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/mps/mps.c
--- a/head/sys/dev/mps/mps.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/mps/mps.c	Fri Aug 10 14:19:25 2012 +0300
@@ -26,11 +26,11 @@
  *
  * LSI MPT-Fusion Host Adapter FreeBSD
  *
- * $FreeBSD: head/sys/dev/mps/mps.c 237683 2012-06-28 03:48:54Z ken $
+ * $FreeBSD: head/sys/dev/mps/mps.c 238974 2012-08-01 17:31:31Z mav $
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/dev/mps/mps.c 237683 2012-06-28 03:48:54Z ken=
 $");
+__FBSDID("$FreeBSD: head/sys/dev/mps/mps.c 238974 2012-08-01 17:31:31Z mav=
 $");
=20
 /* Communications core for LSI MPT2 */
=20
@@ -924,7 +924,7 @@
 				NULL, NULL,		/* filter, filterarg */
                                 BUS_SPACE_MAXSIZE_32BIT,/* maxsize */
                                 nsegs,			/* nsegments */
-                                BUS_SPACE_MAXSIZE_32BIT,/* maxsegsize */
+                                BUS_SPACE_MAXSIZE_24BIT,/* maxsegsize */
                                 BUS_DMA_ALLOCNOW,	/* flags */
                                 busdma_lock_mutex,	/* lockfunc */
 				&sc->mps_mtx,		/* lockarg */
@@ -2014,7 +2014,6 @@
 	MPI2_SGE_SIMPLE64 *sge =3D sgep;
 	int error, type;
 	uint32_t saved_buf_len, saved_address_low, saved_address_high;
-	u32 sge_flags;
=20
 	type =3D (tc->Flags & MPI2_SGE_FLAGS_ELEMENT_MASK);
=20
@@ -2034,14 +2033,12 @@
 		break;
 	case MPI2_SGE_FLAGS_SIMPLE_ELEMENT:
 		/* Driver only uses 64-bit SGE simple elements */
-		sge =3D sgep;
 		if (len !=3D MPS_SGE64_SIZE)
 			panic("SGE simple %p length %u or %zu?", sge,
 			    MPS_SGE64_SIZE, len);
-		if (((sge->FlagsLength >> MPI2_SGE_FLAGS_SHIFT) &
+		if (((le32toh(sge->FlagsLength) >> MPI2_SGE_FLAGS_SHIFT) &
 		    MPI2_SGE_FLAGS_ADDRESS_SIZE) =3D=3D 0)
-			panic("SGE simple %p flags %02x not marked 64-bit?",
-			    sge, sge->FlagsLength >> MPI2_SGE_FLAGS_SHIFT);
+			panic("SGE simple %p not marked 64-bit?", sge);
=20
 		break;
 	default:
@@ -2073,8 +2070,8 @@
 		 * Mark as last element in this chain if necessary.
 		 */
 		if (type =3D=3D MPI2_SGE_FLAGS_SIMPLE_ELEMENT) {
-			sge->FlagsLength |=3D
-				(MPI2_SGE_FLAGS_LAST_ELEMENT << MPI2_SGE_FLAGS_SHIFT);
+			sge->FlagsLength |=3D htole32(
+			    MPI2_SGE_FLAGS_LAST_ELEMENT << MPI2_SGE_FLAGS_SHIFT);
 		}
=20
 		/*
@@ -2083,11 +2080,6 @@
 		 * understanding the code.
 		 */
 		cm->cm_sglsize -=3D len;
-		/* Endian Safe code */
-		sge_flags =3D sge->FlagsLength;
-		sge->FlagsLength =3D htole32(sge_flags);
-		sge->Address.High =3D htole32(sge->Address.High);=09
-		sge->Address.Low =3D 	htole32(sge->Address.Low);
 		bcopy(sgep, cm->cm_sge, len);
 		cm->cm_sge =3D (MPI2_SGE_IO_UNION *)((uintptr_t)cm->cm_sge + len);
 		return (mps_add_chain(cm));
@@ -2127,27 +2119,22 @@
 		 * 2 SGL's for a bi-directional request, they both use the same
 		 * DMA buffer (same cm command).
 		 */
-		saved_buf_len =3D sge->FlagsLength & 0x00FFFFFF;
+		saved_buf_len =3D le32toh(sge->FlagsLength) & 0x00FFFFFF;
 		saved_address_low =3D sge->Address.Low;
 		saved_address_high =3D sge->Address.High;
 		if (cm->cm_out_len) {
-			sge->FlagsLength =3D cm->cm_out_len |
+			sge->FlagsLength =3D htole32(cm->cm_out_len |
 			    ((uint32_t)(MPI2_SGE_FLAGS_SIMPLE_ELEMENT |
 			    MPI2_SGE_FLAGS_END_OF_BUFFER |
 			    MPI2_SGE_FLAGS_HOST_TO_IOC |
 			    MPI2_SGE_FLAGS_64_BIT_ADDRESSING) <<
-			    MPI2_SGE_FLAGS_SHIFT);
+			    MPI2_SGE_FLAGS_SHIFT));
 			cm->cm_sglsize -=3D len;
-			/* Endian Safe code */
-			sge_flags =3D sge->FlagsLength;
-			sge->FlagsLength =3D htole32(sge_flags);
-			sge->Address.High =3D htole32(sge->Address.High);=09
-			sge->Address.Low =3D 	htole32(sge->Address.Low);
 			bcopy(sgep, cm->cm_sge, len);
 			cm->cm_sge =3D (MPI2_SGE_IO_UNION *)((uintptr_t)cm->cm_sge
 			    + len);
 		}
-		sge->FlagsLength =3D saved_buf_len |
+		saved_buf_len |=3D
 		    ((uint32_t)(MPI2_SGE_FLAGS_SIMPLE_ELEMENT |
 		    MPI2_SGE_FLAGS_END_OF_BUFFER |
 		    MPI2_SGE_FLAGS_LAST_ELEMENT |
@@ -2155,24 +2142,20 @@
 		    MPI2_SGE_FLAGS_64_BIT_ADDRESSING) <<
 		    MPI2_SGE_FLAGS_SHIFT);
 		if (cm->cm_flags & MPS_CM_FLAGS_DATAIN) {
-			sge->FlagsLength |=3D
+			saved_buf_len |=3D
 			    ((uint32_t)(MPI2_SGE_FLAGS_IOC_TO_HOST) <<
 			    MPI2_SGE_FLAGS_SHIFT);
 		} else {
-			sge->FlagsLength |=3D
+			saved_buf_len |=3D
 			    ((uint32_t)(MPI2_SGE_FLAGS_HOST_TO_IOC) <<
 			    MPI2_SGE_FLAGS_SHIFT);
 		}
+		sge->FlagsLength =3D htole32(saved_buf_len);
 		sge->Address.Low =3D saved_address_low;
 		sge->Address.High =3D saved_address_high;
 	}
=20
 	cm->cm_sglsize -=3D len;
-	/* Endian Safe code */
-	sge_flags =3D sge->FlagsLength;
-	sge->FlagsLength =3D htole32(sge_flags);
-	sge->Address.High =3D htole32(sge->Address.High);=09
-	sge->Address.Low =3D 	htole32(sge->Address.Low);
 	bcopy(sgep, cm->cm_sge, len);
 	cm->cm_sge =3D (MPI2_SGE_IO_UNION *)((uintptr_t)cm->cm_sge + len);
 	return (0);
@@ -2190,10 +2173,10 @@
 	/*
 	 * This driver always uses 64-bit address elements for simplicity.
 	 */
+	bzero(&sge, sizeof(sge));
 	flags |=3D MPI2_SGE_FLAGS_SIMPLE_ELEMENT |
 	    MPI2_SGE_FLAGS_64_BIT_ADDRESSING;
-	/* Set Endian safe macro in mps_push_sge */
-	sge.FlagsLength =3D len | (flags << MPI2_SGE_FLAGS_SHIFT);
+	sge.FlagsLength =3D htole32(len | (flags << MPI2_SGE_FLAGS_SHIFT));
 	mps_from_u64(pa, &sge.Address);
=20
 	return (mps_push_sge(cm, &sge, sizeof sge, segsleft));
@@ -2290,7 +2273,6 @@
 int
 mps_map_command(struct mps_softc *sc, struct mps_command *cm)
 {
-	MPI2_SGE_SIMPLE32 *sge;
 	int error =3D 0;
=20
 	if (cm->cm_flags & MPS_CM_FLAGS_USE_UIO) {
@@ -2301,15 +2283,8 @@
 		    cm->cm_data, cm->cm_length, mps_data_cb, cm, 0);
 	} else {
 		/* Add a zero-length element as needed */
-		if (cm->cm_sge !=3D NULL) {
-			sge =3D (MPI2_SGE_SIMPLE32 *)cm->cm_sge;
-			sge->FlagsLength =3D htole32((MPI2_SGE_FLAGS_LAST_ELEMENT |
-			    MPI2_SGE_FLAGS_END_OF_BUFFER |
-			    MPI2_SGE_FLAGS_END_OF_LIST |
-			    MPI2_SGE_FLAGS_SIMPLE_ELEMENT) <<
-			    MPI2_SGE_FLAGS_SHIFT);
-			sge->Address =3D 0;
-		}
+		if (cm->cm_sge !=3D NULL)
+			mps_add_dmaseg(cm, 0, 0, 0, 1);
 		mps_enqueue_request(sc, cm);=09
 	}
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/mps/mps_sas.c
--- a/head/sys/dev/mps/mps_sas.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/mps/mps_sas.c	Fri Aug 10 14:19:25 2012 +0300
@@ -26,11 +26,11 @@
  *
  * LSI MPT-Fusion Host Adapter FreeBSD
  *
- * $FreeBSD: head/sys/dev/mps/mps_sas.c 237800 2012-06-29 17:00:52Z ken $
+ * $FreeBSD: head/sys/dev/mps/mps_sas.c 238969 2012-08-01 12:24:13Z mav $
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/dev/mps/mps_sas.c 237800 2012-06-29 17:00:52Z=
 ken $");
+__FBSDID("$FreeBSD: head/sys/dev/mps/mps_sas.c 238969 2012-08-01 12:24:13Z=
 mav $");
=20
 /* Communications core for LSI MPT2 */
=20
@@ -3003,6 +3003,7 @@
 	tm->cm_desc.HighPriority.RequestFlags =3D MPI2_REQ_DESCRIPT_FLAGS_HIGH_PR=
IORITY;
 	tm->cm_complete =3D mpssas_resetdev_complete;
 	tm->cm_complete_data =3D ccb;
+	tm->cm_targ =3D targ;
 	mps_map_command(sc, tm);
 }
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/mps/mps_table.c
--- a/head/sys/dev/mps/mps_table.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/mps/mps_table.c	Fri Aug 10 14:19:25 2012 +0300
@@ -25,7 +25,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/dev/mps/mps_table.c 230592 2012-01-26 18:17:2=
1Z ken $");
+__FBSDID("$FreeBSD: head/sys/dev/mps/mps_table.c 238974 2012-08-01 17:31:3=
1Z mav $");
=20
 /* Debugging tables for MPT2 */
=20
@@ -463,10 +463,12 @@
 	sge =3D (MPI2_SGE_SIMPLE64 *)&frame[offset * 4];
 	printf("SGL for command %p\n", cm);
=20
+	hexdump(frame, 128, NULL, 0);
 	while (frame !=3D NULL) {
-		flags =3D sge->FlagsLength >> MPI2_SGE_FLAGS_SHIFT;
-		printf("seg%d flags=3D0x%x len=3D0x%x addr=3D0x%jx\n", i, flags,
-		    sge->FlagsLength & 0xffffff, mps_to_u64(&sge->Address));
+		flags =3D le32toh(sge->FlagsLength) >> MPI2_SGE_FLAGS_SHIFT;
+		printf("seg%d flags=3D0x%02x len=3D0x%06x addr=3D0x%016jx\n",
+		    i, flags, le32toh(sge->FlagsLength) & 0xffffff,
+		    mps_to_u64(&sge->Address));
 		if (flags & (MPI2_SGE_FLAGS_END_OF_LIST |
 		    MPI2_SGE_FLAGS_END_OF_BUFFER))
 			break;
@@ -475,8 +477,8 @@
 		if (flags & MPI2_SGE_FLAGS_LAST_ELEMENT) {
 			sgc =3D (MPI2_SGE_CHAIN32 *)sge;
 			printf("chain flags=3D0x%x len=3D0x%x Offset=3D0x%x "
-			    "Address=3D0x%x\n", sgc->Flags, sgc->Length,
-			    sgc->NextChainOffset, sgc->Address);
+			    "Address=3D0x%x\n", sgc->Flags, le16toh(sgc->Length),
+			    sgc->NextChainOffset, le32toh(sgc->Address));
 			if (chain =3D=3D NULL)
 				chain =3D TAILQ_FIRST(&cm->cm_chain_list);
 			else
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/mps/mps_user.c
--- a/head/sys/dev/mps/mps_user.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/mps/mps_user.c	Fri Aug 10 14:19:25 2012 +0300
@@ -56,11 +56,11 @@
  *
  * LSI MPT-Fusion Host Adapter FreeBSD
  *
- * $FreeBSD: head/sys/dev/mps/mps_user.c 237683 2012-06-28 03:48:54Z ken $
+ * $FreeBSD: head/sys/dev/mps/mps_user.c 238974 2012-08-01 17:31:31Z mav $
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/dev/mps/mps_user.c 237683 2012-06-28 03:48:54=
Z ken $");
+__FBSDID("$FreeBSD: head/sys/dev/mps/mps_user.c 238974 2012-08-01 17:31:31=
Z mav $");
=20
 #include "opt_compat.h"
=20
@@ -534,11 +534,6 @@
 		return (EINVAL);
=20
 	mpi_init_sge(cm, req, &req->SGL);
-	if (cmd->len =3D=3D 0) {
-		/* Perhaps just asking what the size of the fw is? */
-		return (0);
-	}
-
 	bzero(&tc, sizeof tc);
=20
 	/*
@@ -554,6 +549,8 @@
 	tc.ImageOffset =3D 0;
 	tc.ImageSize =3D cmd->len;
=20
+	cm->cm_flags |=3D MPS_CM_FLAGS_DATAIN;
+
 	return (mps_push_sge(cm, &tc, sizeof tc, 0));
 }
=20
@@ -692,13 +689,6 @@
 	mps_dprint(sc, MPS_INFO, "mps_user_command: Function %02X  "
 	    "MsgFlags %02X\n", hdr->Function, hdr->MsgFlags );
=20
-	err =3D mps_user_setup_request(cm, cmd);
-	if (err !=3D 0) {
-		mps_printf(sc, "mps_user_command: unsupported function 0x%X\n",
-		    hdr->Function );
-		goto RetFreeUnlocked;
-	}
-
 	if (cmd->len > 0) {
 		buf =3D malloc(cmd->len, M_MPSUSER, M_WAITOK|M_ZERO);
 		if(!buf) {
@@ -716,8 +706,15 @@
 	cm->cm_flags =3D MPS_CM_FLAGS_SGE_SIMPLE;
 	cm->cm_desc.Default.RequestFlags =3D MPI2_REQ_DESCRIPT_FLAGS_DEFAULT_TYPE;
=20
+	err =3D mps_user_setup_request(cm, cmd);
+	if (err !=3D 0) {
+		mps_printf(sc, "mps_user_command: unsupported function 0x%X\n",
+		    hdr->Function );
+		goto RetFreeUnlocked;
+	}
+
 	mps_lock(sc);
-	err =3D mps_wait_command(sc, cm, 30);
+	err =3D mps_wait_command(sc, cm, 60);
=20
 	if (err) {
 		mps_printf(sc, "%s: invalid request: error %d\n",
@@ -726,7 +723,10 @@
 	}
=20
 	rpl =3D (MPI2_DEFAULT_REPLY *)cm->cm_reply;
-	sz =3D rpl->MsgLength * 4;
+	if (rpl !=3D NULL)
+		sz =3D rpl->MsgLength * 4;
+	else
+		sz =3D 0;
 =09
 	if (sz > cmd->rpl_len) {
 		mps_printf(sc,
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/mps/mpsvar.h
--- a/head/sys/dev/mps/mpsvar.h	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/mps/mpsvar.h	Fri Aug 10 14:19:25 2012 +0300
@@ -26,13 +26,13 @@
  *
  * LSI MPT-Fusion Host Adapter FreeBSD
  *
- * $FreeBSD: head/sys/dev/mps/mpsvar.h 237683 2012-06-28 03:48:54Z ken $
+ * $FreeBSD: head/sys/dev/mps/mpsvar.h 238974 2012-08-01 17:31:31Z mav $
  */
=20
 #ifndef _MPSVAR_H
 #define _MPSVAR_H
=20
-#define MPS_DRIVER_VERSION	"14.00.00.01-fbsd"
+#define MPS_DRIVER_VERSION	"14.00.00.02-fbsd"
=20
 #define MPS_DB_MAX_WAIT		2500
=20
@@ -627,15 +627,15 @@
 static __inline void
 mps_from_u64(uint64_t data, U64 *mps)
 {
-	(mps)->High =3D (uint32_t)((data) >> 32);
-	(mps)->Low =3D (uint32_t)((data) & 0xffffffff);
+	(mps)->High =3D htole32((uint32_t)((data) >> 32));
+	(mps)->Low =3D htole32((uint32_t)((data) & 0xffffffff));
 }
=20
 static __inline uint64_t
 mps_to_u64(U64 *data)
 {
=20
-	return (((uint64_t)data->High << 32) | data->Low);
+	return (((uint64_t)le32toh(data->High) << 32) | le32toh(data->Low));
 }
=20
 static __inline void
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/mvs/mvs_soc.c
--- a/head/sys/dev/mvs/mvs_soc.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/mvs/mvs_soc.c	Fri Aug 10 14:19:25 2012 +0300
@@ -25,7 +25,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/dev/mvs/mvs_soc.c 236952 2012-06-12 11:08:51Z=
 mav $");
+__FBSDID("$FreeBSD: head/sys/dev/mvs/mvs_soc.c 238873 2012-07-28 21:56:24Z=
 hrs $");
=20
 #include <sys/param.h>
 #include <sys/module.h>
@@ -63,6 +63,7 @@
 } mvs_ids[] =3D {
 	{MV_DEV_88F5182, 0x00,   "Marvell 88F5182",	2, MVS_Q_GENIIE|MVS_Q_SOC},
 	{MV_DEV_88F6281, 0x00,   "Marvell 88F6281",	2, MVS_Q_GENIIE|MVS_Q_SOC},
+	{MV_DEV_88F6282, 0x00,   "Marvell 88F6282",	2, MVS_Q_GENIIE|MVS_Q_SOC},
 	{MV_DEV_MV78100, 0x00,   "Marvell MV78100",	2, MVS_Q_GENIIE|MVS_Q_SOC},
 	{MV_DEV_MV78100_Z0, 0x00,"Marvell MV78100",	2, MVS_Q_GENIIE|MVS_Q_SOC},
 	{0,              0x00,   NULL,			0, 0}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/netmap/if_em_netmap.h
--- a/head/sys/dev/netmap/if_em_netmap.h	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/netmap/if_em_netmap.h	Fri Aug 10 14:19:25 2012 +0300
@@ -24,7 +24,7 @@
  */
=20
 /*
- * $FreeBSD: head/sys/dev/netmap/if_em_netmap.h 232238 2012-02-27 19:05:01=
Z luigi $
+ * $FreeBSD: head/sys/dev/netmap/if_em_netmap.h 238985 2012-08-02 11:59:43=
Z luigi $
  * $Id: if_em_netmap.h 10627 2012-02-23 19:37:15Z luigi $
  *
  * netmap support for em.
@@ -171,7 +171,7 @@
 	u_int j, k, l, n =3D 0, lim =3D kring->nkr_num_slots - 1;
=20
 	/* generate an interrupt approximately every half ring */
-	int report_frequency =3D kring->nkr_num_slots >> 1;
+	u_int report_frequency =3D kring->nkr_num_slots >> 1;
=20
 	k =3D ring->cur;
 	if (k > lim)
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/netmap/if_igb_netmap.h
--- a/head/sys/dev/netmap/if_igb_netmap.h	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/netmap/if_igb_netmap.h	Fri Aug 10 14:19:25 2012 +0300
@@ -24,7 +24,7 @@
  */
=20
 /*
- * $FreeBSD: head/sys/dev/netmap/if_igb_netmap.h 232238 2012-02-27 19:05:0=
1Z luigi $
+ * $FreeBSD: head/sys/dev/netmap/if_igb_netmap.h 238985 2012-08-02 11:59:4=
3Z luigi $
  * $Id: if_igb_netmap.h 10627 2012-02-23 19:37:15Z luigi $
  *
  * Netmap support for igb, partly contributed by Ahmed Kooli
@@ -125,7 +125,7 @@
 	u_int j, k, l, n =3D 0, lim =3D kring->nkr_num_slots - 1;
=20
 	/* generate an interrupt approximately every half ring */
-	int report_frequency =3D kring->nkr_num_slots >> 1;
+	u_int report_frequency =3D kring->nkr_num_slots >> 1;
=20
 	k =3D ring->cur;
 	if (k > lim)
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/netmap/ixgbe_netmap.h
--- a/head/sys/dev/netmap/ixgbe_netmap.h	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/netmap/ixgbe_netmap.h	Fri Aug 10 14:19:25 2012 +0300
@@ -24,7 +24,7 @@
  */
=20
 /*
- * $FreeBSD: head/sys/dev/netmap/ixgbe_netmap.h 234229 2012-04-13 16:42:54=
Z luigi $
+ * $FreeBSD: head/sys/dev/netmap/ixgbe_netmap.h 238985 2012-08-02 11:59:43=
Z luigi $
  * $Id: ixgbe_netmap.h 10627 2012-02-23 19:37:15Z luigi $
  *
  * netmap modifications for ixgbe
@@ -233,7 +233,7 @@
 	 * seems very expensive, so we interrupt once every half ring,
 	 * or when requested with NS_REPORT
 	 */
-	int report_frequency =3D kring->nkr_num_slots >> 1;
+	u_int report_frequency =3D kring->nkr_num_slots >> 1;
=20
 	if (k > lim)
 		return netmap_ring_reinit(kring);
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/netmap/netmap.c
--- a/head/sys/dev/netmap/netmap.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/netmap/netmap.c	Fri Aug 10 14:19:25 2012 +0300
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2011 Matteo Landi, Luigi Rizzo. All rights reserved.
+ * Copyright (C) 2011-2012 Matteo Landi, Luigi Rizzo. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -23,6 +23,8 @@
  * SUCH DAMAGE.
  */
=20
+#define NM_BRIDGE
+
 /*
  * This module supports memory mapped access to network devices,
  * see netmap(4).
@@ -52,8 +54,18 @@
  *    transmit or receive queues (or all queues for a given interface).
  */
=20
+#ifdef linux
+#include "bsd_glue.h"
+static netdev_tx_t linux_netmap_start(struct sk_buff *skb, struct net_devi=
ce *dev);
+#endif /* linux */
+
+#ifdef __APPLE__
+#include "osx_glue.h"
+#endif /* __APPLE__ */
+
+#ifdef __FreeBSD__
 #include <sys/cdefs.h> /* prerequisite */
-__FBSDID("$FreeBSD: head/sys/dev/netmap/netmap.c 234986 2012-05-03 21:16:5=
3Z luigi $");
+__FBSDID("$FreeBSD: head/sys/dev/netmap/netmap.c 239149 2012-08-09 14:46:5=
2Z emaste $");
=20
 #include <sys/types.h>
 #include <sys/module.h>
@@ -78,11 +90,13 @@
 #include <net/if.h>
 #include <net/bpf.h>		/* BIOCIMMEDIATE */
 #include <net/vnet.h>
-#include <net/netmap.h>
-#include <dev/netmap/netmap_kern.h>
 #include <machine/bus.h>	/* bus_dmamap_* */
=20
 MALLOC_DEFINE(M_NETMAP, "netmap", "Network memory map");
+#endif /* __FreeBSD__ */
+
+#include <net/netmap.h>
+#include <dev/netmap/netmap_kern.h>
=20
 /*
  * lock and unlock for the netmap memory allocator
@@ -105,8 +119,8 @@
     CTLFLAG_RW, &netmap_verbose, 0, "Verbose mode");
 SYSCTL_INT(_dev_netmap, OID_AUTO, no_timestamp,
     CTLFLAG_RW, &netmap_no_timestamp, 0, "no_timestamp");
-int netmap_buf_size =3D 2048;
-TUNABLE_INT("hw.netmap.buf_size", &netmap_buf_size);
+u_int netmap_buf_size =3D 2048;
+TUNABLE_INT("hw.netmap.buf_size", (u_int *)&netmap_buf_size);
 SYSCTL_INT(_dev_netmap, OID_AUTO, buf_size,
     CTLFLAG_RD, &netmap_buf_size, 0, "Size of packet buffers");
 int netmap_mitigate =3D 1;
@@ -115,6 +129,162 @@
 SYSCTL_INT(_dev_netmap, OID_AUTO, no_pendintr,
     CTLFLAG_RW, &netmap_no_pendintr, 0, "Always look for new received pack=
ets.");
=20
+int netmap_drop =3D 0;	/* debugging */
+int netmap_flags =3D 0;	/* debug flags */
+int netmap_copy =3D 0;	/* debugging, copy content */
+
+SYSCTL_INT(_dev_netmap, OID_AUTO, drop, CTLFLAG_RW, &netmap_drop, 0 , "");
+SYSCTL_INT(_dev_netmap, OID_AUTO, flags, CTLFLAG_RW, &netmap_flags, 0 , ""=
);
+SYSCTL_INT(_dev_netmap, OID_AUTO, copy, CTLFLAG_RW, &netmap_copy, 0 , "");
+
+#ifdef NM_BRIDGE /* support for netmap bridge */
+
+/*
+ * system parameters.
+ *
+ * All switched ports have prefix NM_NAME.
+ * The switch has a max of NM_BDG_MAXPORTS ports (often stored in a bitmap,
+ * so a practical upper bound is 64).
+ * Each tx ring is read-write, whereas rx rings are readonly (XXX not done=
 yet).
+ * The virtual interfaces use per-queue lock instead of core lock.
+ * In the tx loop, we aggregate traffic in batches to make all operations
+ * faster. The batch size is NM_BDG_BATCH
+ */
+#define	NM_NAME			"vale"	/* prefix for the interface */
+#define NM_BDG_MAXPORTS		16	/* up to 64 ? */
+#define NM_BRIDGE_RINGSIZE	1024	/* in the device */
+#define NM_BDG_HASH		1024	/* forwarding table entries */
+#define NM_BDG_BATCH		1024	/* entries in the forwarding buffer */
+#define	NM_BRIDGES		4	/* number of bridges */
+int netmap_bridge =3D NM_BDG_BATCH; /* bridge batch size */
+SYSCTL_INT(_dev_netmap, OID_AUTO, bridge, CTLFLAG_RW, &netmap_bridge, 0 , =
"");
+
+#ifdef linux
+#define	ADD_BDG_REF(ifp)	(NA(ifp)->if_refcount++)
+#define	DROP_BDG_REF(ifp)	(NA(ifp)->if_refcount-- <=3D 1)
+#else /* !linux */
+#define	ADD_BDG_REF(ifp)	(ifp)->if_refcount++
+#define	DROP_BDG_REF(ifp)	refcount_release(&(ifp)->if_refcount)
+#ifdef __FreeBSD__
+#include <sys/endian.h>
+#include <sys/refcount.h>
+#endif /* __FreeBSD__ */
+#define prefetch(x)	__builtin_prefetch(x)
+#endif /* !linux */
+
+static void bdg_netmap_attach(struct ifnet *ifp);
+static int bdg_netmap_reg(struct ifnet *ifp, int onoff);
+/* per-tx-queue entry */
+struct nm_bdg_fwd {	/* forwarding entry for a bridge */
+	void *buf;
+	uint64_t dst;	/* dst mask */
+	uint32_t src;	/* src index ? */
+	uint16_t len;	/* src len */
+};
+
+struct nm_hash_ent {
+	uint64_t	mac;	/* the top 2 bytes are the epoch */
+	uint64_t	ports;
+};
+
+/*
+ * Interfaces for a bridge are all in ports[].
+ * The array has fixed size, an empty entry does not terminate
+ * the search.
+ */
+struct nm_bridge {
+	struct ifnet *bdg_ports[NM_BDG_MAXPORTS];
+	int n_ports;
+	uint64_t act_ports;
+	int freelist;	/* first buffer index */
+	NM_SELINFO_T si;	/* poll/select wait queue */
+	NM_LOCK_T bdg_lock;	/* protect the selinfo ? */
+
+	/* the forwarding table, MAC+ports */
+	struct nm_hash_ent ht[NM_BDG_HASH];
+
+	int namelen;	/* 0 means free */
+	char basename[IFNAMSIZ];
+};
+
+struct nm_bridge nm_bridges[NM_BRIDGES];
+
+#define BDG_LOCK(b)	mtx_lock(&(b)->bdg_lock)
+#define BDG_UNLOCK(b)	mtx_unlock(&(b)->bdg_lock)
+
+/*
+ * NA(ifp)->bdg_port	port index
+ */
+
+// XXX only for multiples of 64 bytes, non overlapped.
+static inline void
+pkt_copy(void *_src, void *_dst, int l)
+{
+        uint64_t *src =3D _src;
+        uint64_t *dst =3D _dst;
+        if (unlikely(l >=3D 1024)) {
+                bcopy(src, dst, l);
+                return;
+        }
+        for (; likely(l > 0); l-=3D64) {
+                *dst++ =3D *src++;
+                *dst++ =3D *src++;
+                *dst++ =3D *src++;
+                *dst++ =3D *src++;
+                *dst++ =3D *src++;
+                *dst++ =3D *src++;
+                *dst++ =3D *src++;
+                *dst++ =3D *src++;
+        }
+}
+
+/*
+ * locate a bridge among the existing ones.
+ * a ':' in the name terminates the bridge name. Otherwise, just NM_NAME.
+ * We assume that this is called with a name of at least NM_NAME chars.
+ */
+static struct nm_bridge *
+nm_find_bridge(const char *name)
+{
+	int i, l, namelen, e;
+	struct nm_bridge *b =3D NULL;
+
+	namelen =3D strlen(NM_NAME);	/* base length */
+	l =3D strlen(name);		/* actual length */
+	for (i =3D namelen + 1; i < l; i++) {
+		if (name[i] =3D=3D ':') {
+			namelen =3D i;
+			break;
+		}
+	}
+	if (namelen >=3D IFNAMSIZ)
+		namelen =3D IFNAMSIZ;
+	ND("--- prefix is '%.*s' ---", namelen, name);
+
+	/* use the first entry for locking */
+	BDG_LOCK(nm_bridges); // XXX do better
+	for (e =3D -1, i =3D 1; i < NM_BRIDGES; i++) {
+		b =3D nm_bridges + i;
+		if (b->namelen =3D=3D 0)
+			e =3D i;	/* record empty slot */
+		else if (strncmp(name, b->basename, namelen) =3D=3D 0) {
+			ND("found '%.*s' at %d", namelen, name, i);
+			break;
+		}
+	}
+	if (i =3D=3D NM_BRIDGES) { /* all full */
+		if (e =3D=3D -1) { /* no empty slot */
+			b =3D NULL;
+		} else {
+			b =3D nm_bridges + e;
+			strncpy(b->basename, name, namelen);
+			b->namelen =3D namelen;
+		}
+	}
+	BDG_UNLOCK(nm_bridges);
+	return b;
+}
+#endif /* NM_BRIDGE */
=20
 /*------------- memory allocator -----------------*/
 #ifdef NETMAP_MEM2
@@ -186,13 +356,20 @@
 			lim =3D na->tx_rings[i].nkr_num_slots;
 			for (j =3D 0; j < lim; j++)
 				netmap_free_buf(nifp, ring->slot[j].buf_idx);
+			/* knlist_destroy(&na->tx_rings[i].si.si_note); */
+			mtx_destroy(&na->tx_rings[i].q_lock);
 		}
 		for (i =3D 0; i < na->num_rx_rings + 1; i++) {
 			struct netmap_ring *ring =3D na->rx_rings[i].ring;
 			lim =3D na->rx_rings[i].nkr_num_slots;
 			for (j =3D 0; j < lim; j++)
 				netmap_free_buf(nifp, ring->slot[j].buf_idx);
+			/* knlist_destroy(&na->rx_rings[i].si.si_note); */
+			mtx_destroy(&na->rx_rings[i].q_lock);
 		}
+		/* XXX kqueue(9) needed; these will mirror knlist_init. */
+		/* knlist_destroy(&na->tx_si.si_note); */
+		/* knlist_destroy(&na->rx_si.si_note); */
 		NMA_UNLOCK();
 		netmap_free_rings(na);
 		wakeup(na);
@@ -200,6 +377,46 @@
 	netmap_if_free(nifp);
 }
=20
+static void
+nm_if_rele(struct ifnet *ifp)
+{
+#ifndef NM_BRIDGE
+	if_rele(ifp);
+#else /* NM_BRIDGE */
+	int i, full;
+	struct nm_bridge *b;
+
+	if (strncmp(ifp->if_xname, NM_NAME, sizeof(NM_NAME) - 1)) {
+		if_rele(ifp);
+		return;
+	}
+	if (!DROP_BDG_REF(ifp))
+		return;
+	b =3D ifp->if_bridge;
+	BDG_LOCK(nm_bridges);
+	BDG_LOCK(b);
+	ND("want to disconnect %s from the bridge", ifp->if_xname);
+	full =3D 0;
+	for (i =3D 0; i < NM_BDG_MAXPORTS; i++) {
+		if (b->bdg_ports[i] =3D=3D ifp) {
+			b->bdg_ports[i] =3D NULL;
+			bzero(ifp, sizeof(*ifp));
+			free(ifp, M_DEVBUF);
+			break;
+		}=20
+		else if (b->bdg_ports[i] !=3D NULL)
+			full =3D 1;
+	}
+	BDG_UNLOCK(b);
+	if (full =3D=3D 0) {
+		ND("freeing bridge %d", b - nm_bridges);
+		b->namelen =3D 0;
+	}
+	BDG_UNLOCK(nm_bridges);
+	if (i =3D=3D NM_BDG_MAXPORTS)
+		D("ouch, cannot find ifp to remove");
+#endif /* NM_BRIDGE */
+}
=20
 static void
 netmap_dtor(void *data)
@@ -212,7 +429,7 @@
 	netmap_dtor_locked(data);
 	na->nm_lock(ifp, NETMAP_REG_UNLOCK, 0);
=20
-	if_rele(ifp);
+	nm_if_rele(ifp);
 	bzero(priv, sizeof(*priv));	/* XXX for safety */
 	free(priv, M_DEVBUF);
 }
@@ -228,6 +445,7 @@
  * Return 0 on success, -1 otherwise.
  */
=20
+#ifdef __FreeBSD__
 static int
 netmap_mmap(__unused struct cdev *dev,
 #if __FreeBSD_version < 900000
@@ -246,6 +464,7 @@
=20
 	return (0);
 }
+#endif /* __FreeBSD__ */
=20
=20
 /*
@@ -316,15 +535,19 @@
  *
  * This routine also does the selrecord if called from the poll handler
  * (we know because td !=3D NULL).
+ *
+ * NOTE: on linux, selrecord() is defined as a macro and uses pwait
+ *     as an additional hidden argument.
  */
 static void
-netmap_sync_from_host(struct netmap_adapter *na, struct thread *td)
+netmap_sync_from_host(struct netmap_adapter *na, struct thread *td, void *=
pwait)
 {
 	struct netmap_kring *kring =3D &na->rx_rings[na->num_rx_rings];
 	struct netmap_ring *ring =3D kring->ring;
 	u_int j, n, lim =3D kring->nkr_num_slots;
 	u_int k =3D ring->cur, resvd =3D ring->reserved;
=20
+	(void)pwait;	/* disable unused warnings */
 	na->nm_lock(na->ifp, NETMAP_CORE_LOCK, 0);
 	if (k >=3D lim) {
 		netmap_ring_reinit(kring);
@@ -363,6 +586,64 @@
 static int
 get_ifp(const char *name, struct ifnet **ifp)
 {
+#ifdef NM_BRIDGE
+	struct ifnet *iter =3D NULL;
+
+	do {
+		struct nm_bridge *b;
+		int i, l, cand =3D -1;
+
+		if (strncmp(name, NM_NAME, sizeof(NM_NAME) - 1))
+			break;
+		b =3D nm_find_bridge(name);
+		if (b =3D=3D NULL) {
+			D("no bridges available for '%s'", name);
+			return (ENXIO);
+		}
+		/* XXX locking */
+		BDG_LOCK(b);
+		/* lookup in the local list of ports */
+		for (i =3D 0; i < NM_BDG_MAXPORTS; i++) {
+			iter =3D b->bdg_ports[i];
+			if (iter =3D=3D NULL) {
+				if (cand =3D=3D -1)
+					cand =3D i; /* potential insert point */
+				continue;
+			}
+			if (!strcmp(iter->if_xname, name)) {
+				ADD_BDG_REF(iter);
+				ND("found existing interface");
+				BDG_UNLOCK(b);
+				break;
+			}
+		}
+		if (i < NM_BDG_MAXPORTS) /* already unlocked */
+			break;
+		if (cand =3D=3D -1) {
+			D("bridge full, cannot create new port");
+no_port:
+			BDG_UNLOCK(b);
+			*ifp =3D NULL;
+			return EINVAL;
+		}
+		ND("create new bridge port %s", name);
+		/* space for forwarding list after the ifnet */
+		l =3D sizeof(*iter) +
+			 sizeof(struct nm_bdg_fwd)*NM_BDG_BATCH ;
+		iter =3D malloc(l, M_DEVBUF, M_NOWAIT | M_ZERO);
+		if (!iter)
+			goto no_port;
+		strcpy(iter->if_xname, name);
+		bdg_netmap_attach(iter);
+		b->bdg_ports[cand] =3D iter;
+		iter->if_bridge =3D b;
+		ADD_BDG_REF(iter);
+		BDG_UNLOCK(b);
+		ND("attaching virtual bridge %p", b);
+	} while (0);
+	*ifp =3D iter;
+	if (! *ifp)
+#endif /* NM_BRIDGE */
 	*ifp =3D ifunit_ref(name);
 	if (*ifp =3D=3D NULL)
 		return (ENXIO);
@@ -371,7 +652,7 @@
 	 */
 	if ((*ifp)->if_capabilities & IFCAP_NETMAP && NA(*ifp))
 		return 0;	/* valid pointer, we hold the refcount */
-	if_rele(*ifp);
+	nm_if_rele(*ifp);
 	return EINVAL;	// not NETMAP capable
 }
=20
@@ -491,8 +772,8 @@
  * Return 0 on success, errno otherwise.
  */
 static int
-netmap_ioctl(__unused struct cdev *dev, u_long cmd, caddr_t data,
-	__unused int fflag, struct thread *td)
+netmap_ioctl(struct cdev *dev, u_long cmd, caddr_t data,
+	int fflag, struct thread *td)
 {
 	struct netmap_priv_d *priv =3D NULL;
 	struct ifnet *ifp;
@@ -502,6 +783,23 @@
 	u_int i, lim;
 	struct netmap_if *nifp;
=20
+	(void)dev;	/* UNUSED */
+	(void)fflag;	/* UNUSED */
+#ifdef linux
+#define devfs_get_cdevpriv(pp)				\
+	({ *(struct netmap_priv_d **)pp =3D ((struct file *)td)->private_data; 	\
+		(*pp ? 0 : ENOENT); })
+
+/* devfs_set_cdevpriv cannot fail on linux */
+#define devfs_set_cdevpriv(p, fn)				\
+	({ ((struct file *)td)->private_data =3D p; (p ? 0 : EINVAL); })
+
+
+#define devfs_clear_cdevpriv()	do {				\
+		netmap_dtor(priv); ((struct file *)td)->private_data =3D 0;	\
+	} while (0)
+#endif /* linux */
+
 	CURVNET_SET(TD_TO_VNET(td));
=20
 	error =3D devfs_get_cdevpriv((void **)&priv);
@@ -511,6 +809,7 @@
 	}
=20
 	error =3D 0;	/* Could be ENOENT */
+	nmr->nr_name[sizeof(nmr->nr_name) - 1] =3D '\0';	/* truncate name */
 	switch (cmd) {
 	case NIOCGINFO:		/* return capabilities etc */
 		/* memsize is always valid */
@@ -535,7 +834,7 @@
 		nmr->nr_tx_rings =3D na->num_tx_rings;
 		nmr->nr_rx_slots =3D na->num_rx_desc;
 		nmr->nr_tx_slots =3D na->num_tx_desc;
-		if_rele(ifp);	/* return the refcount */
+		nm_if_rele(ifp);	/* return the refcount */
 		break;
=20
 	case NIOCREGIF:
@@ -561,7 +860,7 @@
 			      M_NOWAIT | M_ZERO);
 		if (priv =3D=3D NULL) {
 			error =3D ENOMEM;
-			if_rele(ifp);   /* return the refcount */
+			nm_if_rele(ifp);   /* return the refcount */
 			break;
 		}
=20
@@ -576,7 +875,7 @@
 			D("too many NIOCREGIF attempts, give up");
 			error =3D EINVAL;
 			free(priv, M_DEVBUF);
-			if_rele(ifp);	/* return the refcount */
+			nm_if_rele(ifp);	/* return the refcount */
 			break;
 		}
=20
@@ -593,6 +892,11 @@
 			/* Otherwise set the card in netmap mode
 			 * and make it use the shared buffers.
 			 */
+			for (i =3D 0 ; i < na->num_tx_rings + 1; i++)
+				mtx_init(&na->tx_rings[i].q_lock, "nm_txq_lock", MTX_NETWORK_LOCK, MTX=
_DEF);
+			for (i =3D 0 ; i < na->num_rx_rings + 1; i++) {
+				mtx_init(&na->rx_rings[i].q_lock, "nm_rxq_lock", MTX_NETWORK_LOCK, MTX=
_DEF);
+			}
 			error =3D na->nm_register(ifp, 1); /* mode on */
 			if (error)
 				netmap_dtor_locked(priv);
@@ -601,7 +905,7 @@
 		if (error) {	/* reg. failed, release priv and ref */
 error:
 			na->nm_lock(ifp, NETMAP_REG_UNLOCK, 0);
-			if_rele(ifp);	/* return the refcount */
+			nm_if_rele(ifp);	/* return the refcount */
 			bzero(priv, sizeof(*priv));
 			free(priv, M_DEVBUF);
 			break;
@@ -650,7 +954,7 @@
 			if (cmd =3D=3D NIOCTXSYNC)
 				netmap_sync_to_host(na);
 			else
-				netmap_sync_from_host(na, NULL);
+				netmap_sync_from_host(na, NULL, NULL);
 			break;
 		}
 		/* find the last ring to scan */
@@ -679,6 +983,7 @@
=20
 		break;
=20
+#ifdef __FreeBSD__
 	case BIOCIMMEDIATE:
 	case BIOCGHDRCMPLT:
 	case BIOCSHDRCMPLT:
@@ -696,9 +1001,14 @@
 		so.so_vnet =3D ifp->if_vnet;
 		// so->so_proto not null.
 		error =3D ifioctl(&so, cmd, data, td);
-		if_rele(ifp);
+		nm_if_rele(ifp);
 		break;
 	    }
+
+#else /* linux */
+	default:
+		error =3D EOPNOTSUPP;
+#endif /* linux */
 	}
=20
 	CURVNET_RESTORE();
@@ -715,9 +1025,13 @@
  * selfd or on the global one.
  * Device-dependent parts (locking and sync of tx/rx rings)
  * are done through callbacks.
+ *
+ * On linux, arguments are really pwait, the poll table, and 'td' is struc=
t file *
+ * The first one is remapped to pwait as selrecord() uses the name as an
+ * hidden argument.
  */
 static int
-netmap_poll(__unused struct cdev *dev, int events, struct thread *td)
+netmap_poll(struct cdev *dev, int events, struct thread *td)
 {
 	struct netmap_priv_d *priv =3D NULL;
 	struct netmap_adapter *na;
@@ -726,6 +1040,9 @@
 	u_int core_lock, i, check_all, want_tx, want_rx, revents =3D 0;
 	u_int lim_tx, lim_rx;
 	enum {NO_CL, NEED_CL, LOCKED_CL }; /* see below */
+	void *pwait =3D dev;	/* linux compatibility */
+
+	(void)pwait;
=20
 	if (devfs_get_cdevpriv((void **)&priv) !=3D 0 || priv =3D=3D NULL)
 		return POLLERR;
@@ -755,7 +1072,7 @@
 		if (want_rx) {
 			kring =3D &na->rx_rings[lim_rx];
 			if (kring->ring->avail =3D=3D 0)
-				netmap_sync_from_host(na, td);
+				netmap_sync_from_host(na, td, dev);
 			if (kring->ring->avail > 0) {
 				revents |=3D want_rx;
 			}
@@ -801,6 +1118,13 @@
 	 * LOCKED_CL	core lock is set, so we need to release it.
 	 */
 	core_lock =3D (check_all || !na->separate_locks) ? NEED_CL : NO_CL;
+#ifdef NM_BRIDGE
+	/* the bridge uses separate locks */
+	if (na->nm_register =3D=3D bdg_netmap_reg) {
+		ND("not using core lock for %s", ifp->if_xname);
+		core_lock =3D NO_CL;
+	}
+#endif /* NM_BRIDGE */
 	if (priv->np_qlast !=3D NETMAP_HW_RING) {
 		lim_tx =3D lim_rx =3D priv->np_qlast;
 	}
@@ -965,12 +1289,14 @@
  * kring	N+1	is only used for the selinfo for all queues.
  * Return 0 on success, ENOMEM otherwise.
  *
- * na->num_tx_rings can be set for cards with different tx/rx setups
+ * By default the receive and transmit adapter ring counts are both initia=
lized
+ * to num_queues.  na->num_tx_rings can be set for cards with different tx=
/rx
+ * setups.
  */
 int
 netmap_attach(struct netmap_adapter *na, int num_queues)
 {
-	int i, n, size;
+	int n, size;
 	void *buf;
 	struct ifnet *ifp =3D na->ifp;
=20
@@ -999,19 +1325,23 @@
 		ifp->if_capabilities |=3D IFCAP_NETMAP;
=20
 		na =3D buf;
-		if (na->nm_lock =3D=3D NULL)
+		/* Core lock initialized here.  Others are initialized after
+		 * netmap_if_new.
+		 */
+		mtx_init(&na->core_lock, "netmap core lock", MTX_NETWORK_LOCK,
+		    MTX_DEF);
+		if (na->nm_lock =3D=3D NULL) {
+			ND("using default locks for %s", ifp->if_xname);
 			na->nm_lock =3D netmap_lock_wrapper;
-		mtx_init(&na->core_lock, "netmap core lock", NULL, MTX_DEF);
-		for (i =3D 0 ; i < na->num_tx_rings + 1; i++)
-			mtx_init(&na->tx_rings[i].q_lock, "netmap txq lock", NULL, MTX_DEF);
-		for (i =3D 0 ; i < na->num_rx_rings + 1; i++)
-			mtx_init(&na->rx_rings[i].q_lock, "netmap rxq lock", NULL, MTX_DEF);
+		}
 	}
 #ifdef linux
-	D("netdev_ops %p", ifp->netdev_ops);
-	/* prepare a clone of the netdev ops */
-	na->nm_ndo =3D *ifp->netdev_ops;
-	na->nm_ndo.ndo_start_xmit =3D netmap_start_linux;
+	if (ifp->netdev_ops) {
+		D("netdev_ops %p", ifp->netdev_ops);
+		/* prepare a clone of the netdev ops */
+		na->nm_ndo =3D *ifp->netdev_ops;
+	}
+	na->nm_ndo.ndo_start_xmit =3D linux_netmap_start;
 #endif
 	D("%s for %s", buf ? "ok" : "failed", ifp->if_xname);
=20
@@ -1026,22 +1356,13 @@
 void
 netmap_detach(struct ifnet *ifp)
 {
-	u_int i;
 	struct netmap_adapter *na =3D NA(ifp);
=20
 	if (!na)
 		return;
=20
-	for (i =3D 0; i < na->num_tx_rings + 1; i++) {
-		knlist_destroy(&na->tx_rings[i].si.si_note);
-		mtx_destroy(&na->tx_rings[i].q_lock);
-	}
-	for (i =3D 0; i < na->num_rx_rings + 1; i++) {
-		knlist_destroy(&na->rx_rings[i].si.si_note);
-		mtx_destroy(&na->rx_rings[i].q_lock);
-	}
-	knlist_destroy(&na->tx_si.si_note);
-	knlist_destroy(&na->rx_si.si_note);
+	mtx_destroy(&na->core_lock);
+
 	bzero(na, sizeof(*na));
 	WNA(ifp) =3D NULL;
 	free(na, M_DEVBUF);
@@ -1059,7 +1380,7 @@
 	struct netmap_adapter *na =3D NA(ifp);
 	struct netmap_kring *kring =3D &na->rx_rings[na->num_rx_rings];
 	u_int i, len =3D MBUF_LEN(m);
-	int error =3D EBUSY, lim =3D kring->nkr_num_slots - 1;
+	u_int error =3D EBUSY, lim =3D kring->nkr_num_slots - 1;
 	struct netmap_slot *slot;
=20
 	if (netmap_verbose & NM_VERB_HOST)
@@ -1137,6 +1458,16 @@
 			kring->nkr_hwofs, na->ifp->if_xname,
 			tx =3D=3D NR_TX ? "TX" : "RX", n);
=20
+#if 0 // def linux
+	/* XXX check that the mappings are correct */
+	/* need ring_nr, adapter->pdev, direction */
+	buffer_info->dma =3D dma_map_single(&pdev->dev, addr, adapter->rx_buffer_=
len, DMA_FROM_DEVICE);
+	if (dma_mapping_error(&adapter->pdev->dev, buffer_info->dma)) {
+		D("error mapping rx netmap buffer %d", i);
+		// XXX fix error handling
+	}
+
+#endif /* linux */
 	/*
 	 * Wakeup on the individual and global lock
 	 * We do the wakeup here, but the ring is not yet reconfigured.
@@ -1201,6 +1532,154 @@
 }
=20
=20
+#ifdef linux	/* linux-specific routines */
+
+/*
+ * Remap linux arguments into the FreeBSD call.
+ * - pwait is the poll table, passed as 'dev';
+ *   If pwait =3D=3D NULL someone else already woke up before. We can repo=
rt
+ *   events but they are filtered upstream.
+ *   If pwait !=3D NULL, then pwait->key contains the list of events.
+ * - events is computed from pwait as above.
+ * - file is passed as 'td';
+ */
+static u_int
+linux_netmap_poll(struct file * file, struct poll_table_struct *pwait)
+{
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,4,0)
+	int events =3D pwait ? pwait->key : POLLIN | POLLOUT;
+#else /* in 3.4.0 field 'key' was renamed to '_key' */
+	int events =3D pwait ? pwait->_key : POLLIN | POLLOUT;
+#endif
+	return netmap_poll((void *)pwait, events, (void *)file);
+}
+
+static int
+linux_netmap_mmap(struct file *f, struct vm_area_struct *vma)
+{
+	int lut_skip, i, j;
+	int user_skip =3D 0;
+	struct lut_entry *l_entry;
+	const struct netmap_obj_pool *p[] =3D {
+		nm_mem->nm_if_pool,
+		nm_mem->nm_ring_pool,
+		nm_mem->nm_buf_pool };
+	/*
+	 * vma->vm_start: start of mapping user address space
+	 * vma->vm_end: end of the mapping user address space
+	 */
+
+	(void)f;	/* UNUSED */
+	// XXX security checks
+
+	for (i =3D 0; i < 3; i++) {  /* loop through obj_pools */
+		/*
+		 * In each pool memory is allocated in clusters
+		 * of size _clustsize , each containing clustentries
+		 * entries. For each object k we already store the
+		 * vtophys malling in lut[k] so we use that, scanning
+		 * the lut[] array in steps of clustentries,
+		 * and we map each cluster (not individual pages,
+		 * it would be overkill).
+		 */
+		for (lut_skip =3D 0, j =3D 0; j < p[i]->_numclusters; j++) {
+			l_entry =3D &p[i]->lut[lut_skip];
+			if (remap_pfn_range(vma, vma->vm_start + user_skip,
+					l_entry->paddr >> PAGE_SHIFT, p[i]->_clustsize,
+					vma->vm_page_prot))
+				return -EAGAIN; // XXX check return value
+			lut_skip +=3D p[i]->clustentries;
+			user_skip +=3D p[i]->_clustsize;
+		}
+	}
+
+	return 0;
+}
+
+static netdev_tx_t
+linux_netmap_start(struct sk_buff *skb, struct net_device *dev)
+{
+	netmap_start(dev, skb);
+	return (NETDEV_TX_OK);
+}
+
+
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,37)	// XXX was 38
+#define LIN_IOCTL_NAME	.ioctl
+int
+linux_netmap_ioctl(struct inode *inode, struct file *file, u_int cmd, u_lo=
ng data /* arg */)
+#else
+#define LIN_IOCTL_NAME	.unlocked_ioctl
+long
+linux_netmap_ioctl(struct file *file, u_int cmd, u_long data /* arg */)
+#endif
+{
+	int ret;
+	struct nmreq nmr;
+	bzero(&nmr, sizeof(nmr));
+
+	if (data && copy_from_user(&nmr, (void *)data, sizeof(nmr) ) !=3D 0)
+		return -EFAULT;
+	ret =3D netmap_ioctl(NULL, cmd, (caddr_t)&nmr, 0, (void *)file);
+	if (data && copy_to_user((void*)data, &nmr, sizeof(nmr) ) !=3D 0)
+		return -EFAULT;
+	return -ret;
+}
+
+
+static int
+netmap_release(struct inode *inode, struct file *file)
+{
+	(void)inode;	/* UNUSED */
+	if (file->private_data)
+		netmap_dtor(file->private_data);
+	return (0);
+}
+
+
+static struct file_operations netmap_fops =3D {
+    .mmap =3D linux_netmap_mmap,
+    LIN_IOCTL_NAME =3D linux_netmap_ioctl,
+    .poll =3D linux_netmap_poll,
+    .release =3D netmap_release,
+};
+
+static struct miscdevice netmap_cdevsw =3D {	/* same name as FreeBSD */
+	MISC_DYNAMIC_MINOR,
+	"netmap",
+	&netmap_fops,
+};
+
+static int netmap_init(void);
+static void netmap_fini(void);
+
+/* Errors have negative values on linux */
+static int linux_netmap_init(void)
+{
+	return -netmap_init();
+}
+
+module_init(linux_netmap_init);
+module_exit(netmap_fini);
+/* export certain symbols to other modules */
+EXPORT_SYMBOL(netmap_attach);		// driver attach routines
+EXPORT_SYMBOL(netmap_detach);		// driver detach routines
+EXPORT_SYMBOL(netmap_ring_reinit);	// ring init on error
+EXPORT_SYMBOL(netmap_buffer_lut);
+EXPORT_SYMBOL(netmap_total_buffers);	// index check
+EXPORT_SYMBOL(netmap_buffer_base);
+EXPORT_SYMBOL(netmap_reset);		// ring init routines
+EXPORT_SYMBOL(netmap_buf_size);
+EXPORT_SYMBOL(netmap_rx_irq);		// default irq handler
+EXPORT_SYMBOL(netmap_no_pendintr);	// XXX mitigation - should go away
+
+
+MODULE_AUTHOR("http://info.iet.unipi.it/~luigi/netmap/");
+MODULE_DESCRIPTION("The netmap packet I/O framework");
+MODULE_LICENSE("Dual BSD/GPL"); /* the code here is all BSD. */
+
+#else /* __FreeBSD__ */
+
 static struct cdevsw netmap_cdevsw =3D {
 	.d_version =3D D_VERSION,
 	.d_name =3D "netmap",
@@ -1208,7 +1687,345 @@
 	.d_ioctl =3D netmap_ioctl,
 	.d_poll =3D netmap_poll,
 };
+#endif /* __FreeBSD__ */
=20
+#ifdef NM_BRIDGE
+/*
+ *---- support for virtual bridge -----
+ */
+
+/* ----- FreeBSD if_bridge hash function ------- */
+
+/*
+ * The following hash function is adapted from "Hash Functions" by Bob Jen=
kins
+ * ("Algorithm Alley", Dr. Dobbs Journal, September 1997).
+ *
+ * http://www.burtleburtle.net/bob/hash/spooky.html
+ */
+#define mix(a, b, c)                                                    \
+do {                                                                    \
+        a -=3D b; a -=3D c; a ^=3D (c >> 13);                             =
    \
+        b -=3D c; b -=3D a; b ^=3D (a << 8);                              =
    \
+        c -=3D a; c -=3D b; c ^=3D (b >> 13);                             =
    \
+        a -=3D b; a -=3D c; a ^=3D (c >> 12);                             =
    \
+        b -=3D c; b -=3D a; b ^=3D (a << 16);                             =
    \
+        c -=3D a; c -=3D b; c ^=3D (b >> 5);                              =
    \
+        a -=3D b; a -=3D c; a ^=3D (c >> 3);                              =
    \
+        b -=3D c; b -=3D a; b ^=3D (a << 10);                             =
    \
+        c -=3D a; c -=3D b; c ^=3D (b >> 15);                             =
    \
+} while (/*CONSTCOND*/0)
+
+static __inline uint32_t
+nm_bridge_rthash(const uint8_t *addr)
+{
+        uint32_t a =3D 0x9e3779b9, b =3D 0x9e3779b9, c =3D 0; // hask key
+
+        b +=3D addr[5] << 8;
+        b +=3D addr[4];
+        a +=3D addr[3] << 24;
+        a +=3D addr[2] << 16;
+        a +=3D addr[1] << 8;
+        a +=3D addr[0];
+
+        mix(a, b, c);
+#define BRIDGE_RTHASH_MASK	(NM_BDG_HASH-1)
+        return (c & BRIDGE_RTHASH_MASK);
+}
+
+#undef mix
+
+
+static int
+bdg_netmap_reg(struct ifnet *ifp, int onoff)
+{
+	int i, err =3D 0;
+	struct nm_bridge *b =3D ifp->if_bridge;
+
+	BDG_LOCK(b);
+	if (onoff) {
+		/* the interface must be already in the list.
+		 * only need to mark the port as active
+		 */
+		ND("should attach %s to the bridge", ifp->if_xname);
+		for (i=3D0; i < NM_BDG_MAXPORTS; i++)
+			if (b->bdg_ports[i] =3D=3D ifp)
+				break;
+		if (i =3D=3D NM_BDG_MAXPORTS) {
+			D("no more ports available");
+			err =3D EINVAL;
+			goto done;
+		}
+		ND("setting %s in netmap mode", ifp->if_xname);
+		ifp->if_capenable |=3D IFCAP_NETMAP;
+		NA(ifp)->bdg_port =3D i;
+		b->act_ports |=3D (1<<i);
+		b->bdg_ports[i] =3D ifp;
+	} else {
+		/* should be in the list, too -- remove from the mask */
+		ND("removing %s from netmap mode", ifp->if_xname);
+		ifp->if_capenable &=3D ~IFCAP_NETMAP;
+		i =3D NA(ifp)->bdg_port;
+		b->act_ports &=3D ~(1<<i);
+	}
+done:
+	BDG_UNLOCK(b);
+	return err;
+}
+
+
+static int
+nm_bdg_flush(struct nm_bdg_fwd *ft, int n, struct ifnet *ifp)
+{
+	int i, ifn;
+	uint64_t all_dst, dst;
+	uint32_t sh, dh;
+	uint64_t mysrc =3D 1 << NA(ifp)->bdg_port;
+	uint64_t smac, dmac;
+	struct netmap_slot *slot;
+	struct nm_bridge *b =3D ifp->if_bridge;
+
+	ND("prepare to send %d packets, act_ports 0x%x", n, b->act_ports);
+	/* only consider valid destinations */
+	all_dst =3D (b->act_ports & ~mysrc);
+	/* first pass: hash and find destinations */
+	for (i =3D 0; likely(i < n); i++) {
+		uint8_t *buf =3D ft[i].buf;
+		dmac =3D le64toh(*(uint64_t *)(buf)) & 0xffffffffffff;
+		smac =3D le64toh(*(uint64_t *)(buf + 4));
+		smac >>=3D 16;
+		if (unlikely(netmap_verbose)) {
+		    uint8_t *s =3D buf+6, *d =3D buf;
+		    D("%d len %4d %02x:%02x:%02x:%02x:%02x:%02x -> %02x:%02x:%02x:%02x:%=
02x:%02x",
+			i,
+			ft[i].len,
+			s[0], s[1], s[2], s[3], s[4], s[5],
+			d[0], d[1], d[2], d[3], d[4], d[5]);
+		}
+		/*
+		 * The hash is somewhat expensive, there might be some
+		 * worthwhile optimizations here.
+		 */
+		if ((buf[6] & 1) =3D=3D 0) { /* valid src */
+		    	uint8_t *s =3D buf+6;
+			sh =3D nm_bridge_rthash(buf+6); // XXX hash of source
+			/* update source port forwarding entry */
+			b->ht[sh].mac =3D smac;	/* XXX expire ? */
+			b->ht[sh].ports =3D mysrc;
+			if (netmap_verbose)
+			    D("src %02x:%02x:%02x:%02x:%02x:%02x on port %d",
+				s[0], s[1], s[2], s[3], s[4], s[5], NA(ifp)->bdg_port);
+		}
+		dst =3D 0;
+		if ( (buf[0] & 1) =3D=3D 0) { /* unicast */
+		    	uint8_t *d =3D buf;
+			dh =3D nm_bridge_rthash(buf); // XXX hash of dst
+			if (b->ht[dh].mac =3D=3D dmac) {	/* found dst */
+				dst =3D b->ht[dh].ports;
+				if (netmap_verbose)
+				    D("dst %02x:%02x:%02x:%02x:%02x:%02x to port %x",
+					d[0], d[1], d[2], d[3], d[4], d[5], (uint32_t)(dst >> 16));
+			}
+		}
+		if (dst =3D=3D 0)
+			dst =3D all_dst;
+		dst &=3D all_dst; /* only consider valid ports */
+		if (unlikely(netmap_verbose))
+			D("pkt goes to ports 0x%x", (uint32_t)dst);
+		ft[i].dst =3D dst;
+	}
+
+	/* second pass, scan interfaces and forward */
+	all_dst =3D (b->act_ports & ~mysrc);
+	for (ifn =3D 0; all_dst; ifn++) {
+		struct ifnet *dst_ifp =3D b->bdg_ports[ifn];
+		struct netmap_adapter *na;
+		struct netmap_kring *kring;
+		struct netmap_ring *ring;
+		int j, lim, sent, locked;
+
+		if (!dst_ifp)
+			continue;
+		ND("scan port %d %s", ifn, dst_ifp->if_xname);
+		dst =3D 1 << ifn;
+		if ((dst & all_dst) =3D=3D 0)	/* skip if not set */
+			continue;
+		all_dst &=3D ~dst;	/* clear current node */
+		na =3D NA(dst_ifp);
+
+		ring =3D NULL;
+		kring =3D NULL;
+		lim =3D sent =3D locked =3D 0;
+		/* inside, scan slots */
+		for (i =3D 0; likely(i < n); i++) {
+			if ((ft[i].dst & dst) =3D=3D 0)
+				continue;	/* not here */
+			if (!locked) {
+				kring =3D &na->rx_rings[0];
+				ring =3D kring->ring;
+				lim =3D kring->nkr_num_slots - 1;
+				na->nm_lock(dst_ifp, NETMAP_RX_LOCK, 0);
+				locked =3D 1;
+			}
+			if (unlikely(kring->nr_hwavail >=3D lim)) {
+				if (netmap_verbose)
+					D("rx ring full on %s", ifp->if_xname);
+				break;
+			}
+			j =3D kring->nr_hwcur + kring->nr_hwavail;
+			if (j > lim)
+				j -=3D kring->nkr_num_slots;
+			slot =3D &ring->slot[j];
+			ND("send %d %d bytes at %s:%d", i, ft[i].len, dst_ifp->if_xname, j);
+			pkt_copy(ft[i].buf, NMB(slot), ft[i].len);
+			slot->len =3D ft[i].len;
+			kring->nr_hwavail++;
+			sent++;
+		}
+		if (locked) {
+			ND("sent %d on %s", sent, dst_ifp->if_xname);
+			if (sent)
+				selwakeuppri(&kring->si, PI_NET);
+			na->nm_lock(dst_ifp, NETMAP_RX_UNLOCK, 0);
+		}
+	}
+	return 0;
+}
+
+/*
+ * main dispatch routine
+ */
+static int
+bdg_netmap_txsync(struct ifnet *ifp, u_int ring_nr, int do_lock)
+{
+	struct netmap_adapter *na =3D NA(ifp);
+	struct netmap_kring *kring =3D &na->tx_rings[ring_nr];
+	struct netmap_ring *ring =3D kring->ring;
+	int i, j, k, lim =3D kring->nkr_num_slots - 1;
+	struct nm_bdg_fwd *ft =3D (struct nm_bdg_fwd *)(ifp + 1);
+	int ft_i;	/* position in the forwarding table */
+
+	k =3D ring->cur;
+	if (k > lim)
+		return netmap_ring_reinit(kring);
+	if (do_lock)
+		na->nm_lock(ifp, NETMAP_TX_LOCK, ring_nr);
+
+	if (netmap_bridge <=3D 0) { /* testing only */
+		j =3D k; // used all
+		goto done;
+	}
+	if (netmap_bridge > NM_BDG_BATCH)
+		netmap_bridge =3D NM_BDG_BATCH;
+
+	ft_i =3D 0;	/* start from 0 */
+	for (j =3D kring->nr_hwcur; likely(j !=3D k); j =3D unlikely(j =3D=3D lim=
) ? 0 : j+1) {
+		struct netmap_slot *slot =3D &ring->slot[j];
+		int len =3D ft[ft_i].len =3D slot->len;
+		char *buf =3D ft[ft_i].buf =3D NMB(slot);
+
+		prefetch(buf);
+		if (unlikely(len < 14))
+			continue;
+		if (unlikely(++ft_i =3D=3D netmap_bridge))
+			ft_i =3D nm_bdg_flush(ft, ft_i, ifp);
+	}
+	if (ft_i)
+		ft_i =3D nm_bdg_flush(ft, ft_i, ifp);
+	/* count how many packets we sent */
+	i =3D k - j;
+	if (i < 0)
+		i +=3D kring->nkr_num_slots;
+	kring->nr_hwavail =3D kring->nkr_num_slots - 1 - i;
+	if (j !=3D k)
+		D("early break at %d/ %d, avail %d", j, k, kring->nr_hwavail);
+
+done:
+	kring->nr_hwcur =3D j;
+	ring->avail =3D kring->nr_hwavail;
+	if (do_lock)
+		na->nm_lock(ifp, NETMAP_TX_UNLOCK, ring_nr);
+
+	if (netmap_verbose)
+		D("%s ring %d lock %d", ifp->if_xname, ring_nr, do_lock);
+	return 0;
+}
+
+static int
+bdg_netmap_rxsync(struct ifnet *ifp, u_int ring_nr, int do_lock)
+{
+	struct netmap_adapter *na =3D NA(ifp);
+	struct netmap_kring *kring =3D &na->rx_rings[ring_nr];
+	struct netmap_ring *ring =3D kring->ring;
+	u_int j, n, lim =3D kring->nkr_num_slots - 1;
+	u_int k =3D ring->cur, resvd =3D ring->reserved;
+
+	ND("%s ring %d lock %d avail %d",
+		ifp->if_xname, ring_nr, do_lock, kring->nr_hwavail);
+
+	if (k > lim)
+		return netmap_ring_reinit(kring);
+	if (do_lock)
+		na->nm_lock(ifp, NETMAP_RX_LOCK, ring_nr);
+
+	/* skip past packets that userspace has released */
+	j =3D kring->nr_hwcur;    /* netmap ring index */
+	if (resvd > 0) {
+		if (resvd + ring->avail >=3D lim + 1) {
+			D("XXX invalid reserve/avail %d %d", resvd, ring->avail);
+			ring->reserved =3D resvd =3D 0; // XXX panic...
+		}
+		k =3D (k >=3D resvd) ? k - resvd : k + lim + 1 - resvd;
+	}
+
+	if (j !=3D k) { /* userspace has released some packets. */
+		n =3D k - j;
+		if (n < 0)
+			n +=3D kring->nkr_num_slots;
+		ND("userspace releases %d packets", n);
+                for (n =3D 0; likely(j !=3D k); n++) {
+                        struct netmap_slot *slot =3D &ring->slot[j];
+                        void *addr =3D NMB(slot);
+
+                        if (addr =3D=3D netmap_buffer_base) { /* bad buf */
+                                if (do_lock)
+                                        na->nm_lock(ifp, NETMAP_RX_UNLOCK,=
 ring_nr);
+                                return netmap_ring_reinit(kring);
+                        }
+			/* decrease refcount for buffer */
+
+			slot->flags &=3D ~NS_BUF_CHANGED;
+                        j =3D unlikely(j =3D=3D lim) ? 0 : j + 1;
+                }
+                kring->nr_hwavail -=3D n;
+                kring->nr_hwcur =3D k;
+        }
+        /* tell userspace that there are new packets */
+        ring->avail =3D kring->nr_hwavail - resvd;
+
+	if (do_lock)
+		na->nm_lock(ifp, NETMAP_RX_UNLOCK, ring_nr);
+	return 0;
+}
+
+static void
+bdg_netmap_attach(struct ifnet *ifp)
+{
+	struct netmap_adapter na;
+
+	ND("attaching virtual bridge");
+	bzero(&na, sizeof(na));
+
+	na.ifp =3D ifp;
+	na.separate_locks =3D 1;
+	na.num_tx_desc =3D NM_BRIDGE_RINGSIZE;
+	na.num_rx_desc =3D NM_BRIDGE_RINGSIZE;
+	na.nm_txsync =3D bdg_netmap_txsync;
+	na.nm_rxsync =3D bdg_netmap_rxsync;
+	na.nm_register =3D bdg_netmap_reg;
+	netmap_attach(&na, 1);
+}
+
+#endif /* NM_BRIDGE */
=20
 static struct cdev *netmap_dev; /* /dev/netmap character device. */
=20
@@ -1228,13 +2045,21 @@
=20
 	error =3D netmap_memory_init();
 	if (error !=3D 0) {
-		printf("netmap: unable to initialize the memory allocator.");
+		printf("netmap: unable to initialize the memory allocator.\n");
 		return (error);
 	}
 	printf("netmap: loaded module with %d Mbytes\n",
 		(int)(nm_mem->nm_totalsize >> 20));
 	netmap_dev =3D make_dev(&netmap_cdevsw, 0, UID_ROOT, GID_WHEEL, 0660,
 			      "netmap");
+
+#ifdef NM_BRIDGE
+	{
+	int i;
+	for (i =3D 0; i < NM_BRIDGES; i++)
+		mtx_init(&nm_bridges[i].bdg_lock, "bdg lock", "bdg_lock", MTX_DEF);
+	}
+#endif
 	return (error);
 }
=20
@@ -1253,6 +2078,7 @@
 }
=20
=20
+#ifdef __FreeBSD__
 /*
  * Kernel entry point.
  *
@@ -1284,3 +2110,4 @@
=20
=20
 DEV_MODULE(netmap, netmap_loader, NULL);
+#endif /* __FreeBSD__ */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/netmap/netmap_kern.h
--- a/head/sys/dev/netmap/netmap_kern.h	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/netmap/netmap_kern.h	Fri Aug 10 14:19:25 2012 +0300
@@ -24,8 +24,8 @@
  */
=20
 /*
- * $FreeBSD: head/sys/dev/netmap/netmap_kern.h 234227 2012-04-13 16:03:07Z=
 luigi $
- * $Id: netmap_kern.h 10602 2012-02-21 16:47:55Z luigi $
+ * $FreeBSD: head/sys/dev/netmap/netmap_kern.h 239140 2012-08-08 15:27:01Z=
 emaste $
+ * $Id: netmap_kern.h 11343 2012-07-03 09:08:38Z luigi $
  *
  * The header contains the definitions of constants and function
  * prototypes used only in kernelspace.
@@ -37,6 +37,9 @@
 #define NETMAP_MEM2    // use the new memory allocator
=20
 #if defined(__FreeBSD__)
+#define likely(x)	__builtin_expect(!!(x), 1)
+#define unlikely(x)	__builtin_expect(!!(x), 0)
+
 #define	NM_LOCK_T	struct mtx
 #define	NM_SELINFO_T	struct selinfo
 #define	MBUF_LEN(m)	((m)->m_pkthdr.len)
@@ -46,14 +49,37 @@
 #define	NM_SELINFO_T	wait_queue_head_t
 #define	MBUF_LEN(m)	((m)->len)
 #define	NM_SEND_UP(ifp, m)	netif_rx(m)
+
+#ifndef DEV_NETMAP
+#define DEV_NETMAP
+#endif
+
+/*
+ * IFCAP_NETMAP goes into net_device's flags (if_capabilities)
+ * and priv_flags (if_capenable). The latter used to be 16 bits
+ * up to linux 2.6.36, so we need to use a 16 bit value on older
+ * platforms and tolerate the clash with IFF_DYNAMIC and IFF_BRIDGE_PORT.
+ * For the 32-bit value, 0x100000 (bit 20) has no clashes up to 3.3.1
+ */
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,37)
+#define IFCAP_NETMAP	0x8000
+#else
+#define IFCAP_NETMAP	0x100000
+#endif
+
+#elif defined (__APPLE__)
+#warning apple support is experimental
+#define likely(x)	__builtin_expect(!!(x), 1)
+#define unlikely(x)	__builtin_expect(!!(x), 0)
+#define	NM_LOCK_T	IOLock *
+#define	NM_SELINFO_T	struct selinfo
+#define	MBUF_LEN(m)	((m)->m_pkthdr.len)
+#define	NM_SEND_UP(ifp, m)	((ifp)->if_input)(ifp, m)
+
 #else
 #error unsupported platform
 #endif
=20
-#ifdef MALLOC_DECLARE
-MALLOC_DECLARE(M_NETMAP);
-#endif
-
 #define ND(format, ...)
 #define D(format, ...)						\
 	do {							\
@@ -118,8 +144,8 @@
 	int separate_locks; /* set if the interface suports different
 			       locks for rx, tx and core. */
=20
-	u_int num_rx_rings; /* number of tx/rx ring pairs */
-	u_int num_tx_rings; // if nonzero, overrides num_rx_rings
+	u_int num_rx_rings; /* number of adapter receive rings */
+	u_int num_tx_rings; /* number of adapter transmit rings */
=20
 	u_int num_tx_desc; /* number of descriptor in each queue */
 	u_int num_rx_desc;
@@ -150,8 +176,11 @@
 	void (*nm_lock)(struct ifnet *, int what, u_int ringid);
 	int (*nm_txsync)(struct ifnet *, u_int ring, int lock);
 	int (*nm_rxsync)(struct ifnet *, u_int ring, int lock);
+
+	int bdg_port;
 #ifdef linux
 	struct net_device_ops nm_ndo;
+	int if_refcount;	// XXX additions for bridge
 #endif /* linux */
 };
=20
@@ -212,7 +241,7 @@
 	enum txrx tx, int n, u_int new_cur);
 int netmap_ring_reinit(struct netmap_kring *);
=20
-extern int netmap_buf_size;
+extern u_int netmap_buf_size;
 #define NETMAP_BUF_SIZE	netmap_buf_size
 extern int netmap_mitigate;
 extern int netmap_no_pendintr;
@@ -240,6 +269,7 @@
 #define	NA(_ifp)	((struct netmap_adapter *)WNA(_ifp))
=20
=20
+#ifdef __FreeBSD__
 /* Callback invoked by the dma machinery after a successfull dmamap_load */
 static void netmap_dmamap_cb(__unused void *arg,
     __unused bus_dma_segment_t * segs, __unused int nseg, __unused int err=
or)
@@ -267,6 +297,48 @@
 		    netmap_dmamap_cb, NULL, BUS_DMA_NOWAIT);
 	}
 }
+#else /* linux */
+
+/*
+ * XXX How do we redefine these functions:
+ *
+ * on linux we need
+ *	dma_map_single(&pdev->dev, virt_addr, len, direction)
+ *	dma_unmap_single(&adapter->pdev->dev, phys_addr, len, direction
+ * The len can be implicit (on netmap it is NETMAP_BUF_SIZE)
+ * unfortunately the direction is not, so we need to change
+ * something to have a cross API
+ */
+#define netmap_load_map(_t, _m, _b)
+#define netmap_reload_map(_t, _m, _b)
+#if 0
+	struct e1000_buffer *buffer_info =3D  &tx_ring->buffer_info[l];
+	/* set time_stamp *before* dma to help avoid a possible race */
+	buffer_info->time_stamp =3D jiffies;
+	buffer_info->mapped_as_page =3D false;
+	buffer_info->length =3D len;
+	//buffer_info->next_to_watch =3D l;
+	/* reload dma map */
+	dma_unmap_single(&adapter->pdev->dev, buffer_info->dma,
+			NETMAP_BUF_SIZE, DMA_TO_DEVICE);
+	buffer_info->dma =3D dma_map_single(&adapter->pdev->dev,
+			addr, NETMAP_BUF_SIZE, DMA_TO_DEVICE);
+
+	if (dma_mapping_error(&adapter->pdev->dev, buffer_info->dma)) {
+		D("dma mapping error");
+		/* goto dma_error; See e1000_put_txbuf() */
+		/* XXX reset */
+	}
+	tx_desc->buffer_addr =3D htole64(buffer_info->dma); //XXX
+
+#endif
+
+/*
+ * The bus_dmamap_sync() can be one of wmb() or rmb() depending on directi=
on.
+ */
+#define bus_dmamap_sync(_a, _b, _c)
+
+#endif /* linux */
=20
 /*
  * functions to map NIC to KRING indexes (n2k) and vice versa (k2n)
@@ -322,7 +394,7 @@
 NMB(struct netmap_slot *slot)
 {
 	uint32_t i =3D slot->buf_idx;
-	return (i >=3D netmap_total_buffers) ?  NMB_VA(0) : NMB_VA(i);
+	return (unlikely(i >=3D netmap_total_buffers)) ?  NMB_VA(0) : NMB_VA(i);
 }
=20
 static inline void *
@@ -341,4 +413,6 @@
 /* default functions to handle rx/tx interrupts */
 int netmap_rx_irq(struct ifnet *, int, int *);
 #define netmap_tx_irq(_n, _q) netmap_rx_irq(_n, _q, NULL)
+
+extern int netmap_copy;
 #endif /* _NET_NETMAP_KERN_H_ */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/netmap/netmap_mem2.c
--- a/head/sys/dev/netmap/netmap_mem2.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/netmap/netmap_mem2.c	Fri Aug 10 14:19:25 2012 +0300
@@ -24,8 +24,8 @@
  */
=20
 /*
- * $FreeBSD: head/sys/dev/netmap/netmap_mem2.c 234290 2012-04-14 16:44:18Z=
 luigi $
- * $Id: netmap_mem2.c 10830 2012-03-22 18:06:01Z luigi $
+ * $FreeBSD: head/sys/dev/netmap/netmap_mem2.c 238912 2012-07-30 18:21:48Z=
 luigi $
+ * $Id: netmap_mem2.c 11445 2012-07-30 10:49:07Z luigi $
  *
  * New memory allocator for netmap
  */
@@ -300,12 +300,13 @@
=20
=20
 static void
-netmap_new_bufs(struct netmap_if *nifp __unused,
+netmap_new_bufs(struct netmap_if *nifp,
                 struct netmap_slot *slot, u_int n)
 {
 	struct netmap_obj_pool *p =3D nm_mem->nm_buf_pool;
 	uint32_t i =3D 0;	/* slot counter */
=20
+	(void)nifp;	/* UNUSED */
 	for (i =3D 0; i < n; i++) {
 		void *vaddr =3D netmap_buf_malloc();
 		if (vaddr =3D=3D NULL) {
@@ -679,11 +680,11 @@
 #ifdef linux
 	// XXX initialize the selrecord structs.
 	for (i =3D 0; i < ntx; i++)
+		init_waitqueue_head(&na->tx_rings[i].si);
+	for (i =3D 0; i < nrx; i++)
 		init_waitqueue_head(&na->rx_rings[i].si);
-	for (i =3D 0; i < nrx; i++)
-		init_waitqueue_head(&na->tx_rings[i].si);
+	init_waitqueue_head(&na->tx_si);
 	init_waitqueue_head(&na->rx_si);
-	init_waitqueue_head(&na->tx_si);
 #endif
 final:
 	/*
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/pccbb/pccbb_pci.c
--- a/head/sys/dev/pccbb/pccbb_pci.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/pccbb/pccbb_pci.c	Fri Aug 10 14:19:25 2012 +0300
@@ -72,7 +72,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/dev/pccbb/pccbb_pci.c 227843 2011-11-22 21:28=
:20Z marius $");
+__FBSDID("$FreeBSD: head/sys/dev/pccbb/pccbb_pci.c 238954 2012-07-31 18:47=
:17Z adrian $");
=20
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -465,6 +465,11 @@
 	if (pci_read_config(sc->dev, PCIR_LATTIMER, 1) < 0x20)
 		pci_write_config(sc->dev, PCIR_LATTIMER, 0x20, 1);
=20
+	/* Restore bus configuration */
+	pci_write_config(sc->dev, PCIR_PRIBUS_2, sc->pribus, 1);
+	pci_write_config(sc->dev, PCIR_SECBUS_2, sc->secbus, 1);
+	pci_write_config(sc->dev, PCIR_SUBBUS_2, sc->subbus, 1);
+
 	/* Enable memory access */
 	PCI_MASK_CONFIG(sc->dev, PCIR_COMMAND,
 	    | PCIM_CMD_MEMEN
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/pci/pci_pci.c
--- a/head/sys/dev/pci/pci_pci.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/pci/pci_pci.c	Fri Aug 10 14:19:25 2012 +0300
@@ -29,7 +29,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/dev/pci/pci_pci.c 237673 2012-06-27 22:17:52Z=
 marius $");
+__FBSDID("$FreeBSD: head/sys/dev/pci/pci_pci.c 239103 2012-08-06 19:49:57Z=
 jhb $");
=20
 /*
  * PCI:PCI bridge support.
@@ -683,6 +683,13 @@
      *     would be more widely routed than absolutely necessary.  We could
      *     then do a walk of the tree later and fix it.
      */
+
+    /*
+     * Always enable busmastering on bridges so that transactions
+     * initiated on the secondary bus are passed through to the
+     * primary bus.
+     */
+    pci_enable_busmaster(dev);
 }
=20
 int
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/puc/puc_cfg.h
--- a/head/sys/dev/puc/puc_cfg.h	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/puc/puc_cfg.h	Fri Aug 10 14:19:25 2012 +0300
@@ -23,7 +23,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.
  *
- * $FreeBSD: head/sys/dev/puc/puc_cfg.h 237350 2012-06-21 03:10:48Z fjoe $
+ * $FreeBSD: head/sys/dev/puc/puc_cfg.h 238933 2012-07-31 05:23:23Z fjoe $
  */
=20
 #ifndef _DEV_PUC_CFG_H_
@@ -79,7 +79,7 @@
 	int8_t		ports;
 	int8_t		rid;		/* Rid of first port */
 	int8_t		d_rid;		/* Delta rid of next ports */
-	int16_t		d_ofs;		/* Delta offset of next ports */
+	int8_t		d_ofs;		/* Delta offset of next ports */
 	puc_config_f 	*config_function;
 };
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/puc/pucdata.c
--- a/head/sys/dev/puc/pucdata.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/puc/pucdata.c	Fri Aug 10 14:19:25 2012 +0300
@@ -25,7 +25,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/dev/puc/pucdata.c 237357 2012-06-21 04:57:59Z=
 fjoe $");
+__FBSDID("$FreeBSD: head/sys/dev/puc/pucdata.c 239076 2012-08-05 19:37:18Z=
 eadler $");
=20
 /*
  * PCI "universal" communications card driver configuration data (used to
@@ -510,13 +510,15 @@
 	{   0x1393, 0x1024, 0xffff, 0,
 	    "Moxa Technologies, Smartio CP-102E/PCIe",
 	    DEFAULT_RCLK * 8,
-	    PUC_PORT_2S, 0x14, 0, 0x200
+	    PUC_PORT_2S, 0x14, 0, -1,
+	        .config_function =3D puc_config_moxa
 	},
=20
 	{   0x1393, 0x1025, 0xffff, 0,
 	    "Moxa Technologies, Smartio CP-102EL/PCIe",
 	    DEFAULT_RCLK * 8,
-	    PUC_PORT_2S, 0x14, 0, 0x200,
+	    PUC_PORT_2S, 0x14, 0, -1,
+	        .config_function =3D puc_config_moxa
 	},
=20
 	{   0x1393, 0x1040, 0xffff, 0,
@@ -572,7 +574,8 @@
 	{   0x1393, 0x1182, 0xffff, 0,
 	    "Moxa Technologies, Smartio CP-118EL-A/PCIe",
 	    DEFAULT_RCLK * 8,
-	    PUC_PORT_8S, 0x14, 0, 0x200,
+	    PUC_PORT_8S, 0x14, 0, -1,
+		.config_function =3D puc_config_moxa
 	},
=20
 	{   0x1393, 0x1680, 0xffff, 0,
@@ -596,7 +599,8 @@
 	{   0x1393, 0x1683, 0xffff, 0,
 	    "Moxa Technologies, Smartio CP-168EL-A/PCIe",
 	    DEFAULT_RCLK * 8,
-	    PUC_PORT_8S, 0x14, 0, 0x200,
+	    PUC_PORT_8S, 0x14, 0, -1,
+		.config_function =3D puc_config_moxa
 	},
=20
 	{   0x13a8, 0x0152, 0xffff, 0,
@@ -733,6 +737,12 @@
 	    PUC_PORT_2S, 0x10, 0, 8,
 	},
=20
+	{   0x1415, 0x950a, 0x131f, 0x2032,
+	    "SIIG Cyber Serial Dual PCI 16C850",
+	    DEFAULT_RCLK * 10,
+	    PUC_PORT_4S, 0x10, 0, 8,
+	},
+
 	{   0x1415, 0x950a, 0xffff, 0,
 	    "Oxford Semiconductor OX16PCI954 UARTs",
 	    DEFAULT_RCLK,
@@ -764,11 +774,36 @@
 	 */
=20
 	{   0x155f, 0x0331, 0xffff, 0,
+	    "Perle Ultraport4 Express",
+	    DEFAULT_RCLK * 8,
+	    PUC_PORT_4S, 0x10, 0, 8,
+	},
+
+	{   0x155f, 0xB012, 0xffff, 0,
+	    "Perle Speed2 LE",
+	    DEFAULT_RCLK * 8,
+	    PUC_PORT_2S, 0x10, 0, 8,
+	},
+
+	{   0x155f, 0xB022, 0xffff, 0,
+	    "Perle Speed2 LE",
+	    DEFAULT_RCLK * 8,
+	    PUC_PORT_2S, 0x10, 0, 8,
+	},
+
+	{   0x155f, 0xB004, 0xffff, 0,
 	    "Perle Speed4 LE",
 	    DEFAULT_RCLK * 8,
 	    PUC_PORT_4S, 0x10, 0, 8,
 	},
=20
+	{   0x155f, 0xB008, 0xffff, 0,
+	    "Perle Speed8 LE",
+	    DEFAULT_RCLK * 8,
+	    PUC_PORT_8S, 0x10, 0, 8,
+	},
+
+
 	/*
 	 * Oxford Semiconductor PCI Express Expresso family
 	 *
@@ -1159,7 +1194,12 @@
     intptr_t *res)
 {
 	if (cmd =3D=3D PUC_CFG_GET_OFS) {
-		*res =3D ((port =3D=3D 3) ? 7 : port) * 0x200;
+		const struct puc_cfg *cfg =3D sc->sc_cfg;
+
+		if (port =3D=3D 3 && (cfg->device =3D=3D 0x1045 || cfg->device =3D=3D 0x=
1144))
+			port =3D 7;
+		*res =3D port * 0x200;
+
 		return 0;
 	}
 	return (ENXIO);
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/sdhci/sdhci.c
--- a/head/sys/dev/sdhci/sdhci.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/sdhci/sdhci.c	Fri Aug 10 14:19:25 2012 +0300
@@ -24,7 +24,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/dev/sdhci/sdhci.c 238672 2012-07-21 14:07:43Z=
 glebius $");
+__FBSDID("$FreeBSD: head/sys/dev/sdhci/sdhci.c 238898 2012-07-30 08:56:56Z=
 glebius $");
=20
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -364,7 +364,7 @@
=20
 	/*
 	 * Some SD/MMC cards don't work with the default base
-	 * clock frequency of 200MHz. Lower it to 50MHz.
+	 * clock frequency of 200MHz.  Lower it to 50MHz.
 	 */
 	pci_write_config(dev, SDHC_PCI_BASE_FREQ_KEY, 0x01, 1);
 	pci_write_config(dev, SDHC_PCI_BASE_FREQ, 50, 1);
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/spibus/spi.h
--- a/head/sys/dev/spibus/spi.h	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/spibus/spi.h	Fri Aug 10 14:19:25 2012 +0300
@@ -1,6 +1,7 @@
-/* $FreeBSD$ */
+/* $FreeBSD: head/sys/dev/spibus/spi.h 238965 2012-08-01 01:18:36Z imp $ */
=20
 struct spi_command {
+	int	cs;
 	void	*tx_cmd;
 	uint32_t tx_cmd_sz;
 	void	*rx_cmd;
@@ -10,3 +11,5 @@
 	void	*rx_data;
 	uint32_t rx_data_sz;
 };
+
+#define	SPI_CHIP_SELECT_HIGH	0x1		/* Chip select high (else low) */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/spibus/spibus.c
--- a/head/sys/dev/spibus/spibus.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/spibus/spibus.c	Fri Aug 10 14:19:25 2012 +0300
@@ -1,5 +1,5 @@
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/dev/spibus/spibus.c 227843 2011-11-22 21:28:2=
0Z marius $");
+__FBSDID("$FreeBSD: head/sys/dev/spibus/spibus.c 238965 2012-08-01 01:18:3=
6Z imp $");
=20
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -165,6 +165,9 @@
 static int
 spibus_transfer_impl(device_t dev, device_t child, struct spi_command *cmd)
 {
+	/* Maybe set flags too? spi mode? */
+	spibus_get_cs(dev, &cmd->cs);
+
 	return (SPIBUS_TRANSFER(device_get_parent(dev), child, cmd));
 }
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/usb/controller/at91dci_at=
melarm.c
--- a/head/sys/dev/usb/controller/at91dci_atmelarm.c	Mon Jul 30 11:44:18 20=
12 +0300
+++ b/head/sys/dev/usb/controller/at91dci_atmelarm.c	Fri Aug 10 14:19:25 20=
12 +0300
@@ -1,5 +1,5 @@
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/dev/usb/controller/at91dci_atmelarm.c 228483 =
2011-12-14 00:28:54Z hselasky $");
+__FBSDID("$FreeBSD: head/sys/dev/usb/controller/at91dci_atmelarm.c 238848 =
2012-07-27 17:28:11Z imp $");
=20
 /*-
  * Copyright (c) 2007-2008 Hans Petter Selasky. All rights reserved.
@@ -61,12 +61,12 @@
=20
 #include <arm/at91/at91_pmcvar.h>
 #include <arm/at91/at91rm92reg.h>
-#include <arm/at91/at91_pio_rm9200.h>
+#include <arm/at91/at91_pioreg.h>
 #include <arm/at91/at91_piovar.h>
=20
 #define	MEM_RID	0
=20
-/* Pin Definitions - do they belong here or somewhere else ? */
+/* Pin Definitions - do they belong here or somewhere else ? -- YES! */
=20
 #define	VBUS_MASK	AT91C_PIO_PB24
 #define	VBUS_BASE	AT91RM92_PIOB_BASE
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/usb/controller/ohci_atmel=
arm.c
--- a/head/sys/dev/usb/controller/ohci_atmelarm.c	Mon Jul 30 11:44:18 2012 =
+0300
+++ b/head/sys/dev/usb/controller/ohci_atmelarm.c	Fri Aug 10 14:19:25 2012 =
+0300
@@ -23,7 +23,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/dev/usb/controller/ohci_atmelarm.c 228483 201=
1-12-14 00:28:54Z hselasky $");
+__FBSDID("$FreeBSD: head/sys/dev/usb/controller/ohci_atmelarm.c 238819 201=
2-07-27 05:24:09Z imp $");
=20
 #include <sys/stdint.h>
 #include <sys/stddef.h>
@@ -76,6 +76,7 @@
 static int
 ohci_atmelarm_probe(device_t dev)
 {
+
 	device_set_desc(dev, "AT91 integrated OHCI controller");
 	return (BUS_PROBE_DEFAULT);
 }
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/usb/serial/uftdi.c
--- a/head/sys/dev/usb/serial/uftdi.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/usb/serial/uftdi.c	Fri Aug 10 14:19:25 2012 +0300
@@ -30,7 +30,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/dev/usb/serial/uftdi.c 237236 2012-06-18 19:1=
8:31Z marius $");
+__FBSDID("$FreeBSD: head/sys/dev/usb/serial/uftdi.c 239055 2012-08-05 11:5=
0:56Z hselasky $");
=20
 /*
  * NOTE: all function names beginning like "uftdi_cfg_" can only
@@ -209,32 +209,228 @@
 static const STRUCT_USB_HOST_ID uftdi_devs[] =3D {
 #define	UFTDI_DEV(v, p, i) \
   { USB_VPI(USB_VENDOR_##v, USB_PRODUCT_##v##_##p, i) }
+	UFTDI_DEV(ACTON, SPECTRAPRO, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(ALTI2, N3, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(ANALOGDEVICES, GNICE, UFTDI_TYPE_AUTO | UFTDI_FLAG_JTAG),
+	UFTDI_DEV(ANALOGDEVICES, GNICEPLUS, UFTDI_TYPE_AUTO | UFTDI_FLAG_JTAG),
 	UFTDI_DEV(ATMEL, STK541, UFTDI_TYPE_8U232AM),
+	UFTDI_DEV(BAYER, CONTOUR_CABLE, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(BBELECTRONICS, 232USB9M, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(BBELECTRONICS, 485USB9F_2W, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(BBELECTRONICS, 485USB9F_4W, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(BBELECTRONICS, 485USBTB_2W, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(BBELECTRONICS, 485USBTB_4W, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(BBELECTRONICS, TTL3USB9M, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(BBELECTRONICS, TTL5USB9M, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(BBELECTRONICS, USO9ML2, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(BBELECTRONICS, USO9ML2DR, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(BBELECTRONICS, USO9ML2DR_2, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(BBELECTRONICS, USOPTL4, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(BBELECTRONICS, USOPTL4DR, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(BBELECTRONICS, USOPTL4DR2, UFTDI_TYPE_AUTO),
 	UFTDI_DEV(BBELECTRONICS, USOTL4, UFTDI_TYPE_8U232AM),
-	UFTDI_DEV(DRESDENELEKTRONIK, SENSORTERMINALBOARD,
-	    UFTDI_TYPE_8U232AM),
-	UFTDI_DEV(DRESDENELEKTRONIK, WIRELESSHANDHELDTERMINAL,
-	    UFTDI_TYPE_8U232AM),
+	UFTDI_DEV(BBELECTRONICS, USPTL4, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(BBELECTRONICS, USTL4, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(BBELECTRONICS, ZZ_PROG1_USB, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(CONTEC, COM1USBH, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(DRESDENELEKTRONIK, SENSORTERMINALBOARD, UFTDI_TYPE_8U232AM),
+	UFTDI_DEV(DRESDENELEKTRONIK, WIRELESSHANDHELDTERMINAL, UFTDI_TYPE_8U232AM=
),
+	UFTDI_DEV(ELEKTOR, FT323R, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(EVOLUTION, ER1, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(EVOLUTION, HYBRID, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(EVOLUTION, RCM4, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FALCOM, SAMBA, UFTDI_TYPE_AUTO),
 	UFTDI_DEV(FALCOM, TWIST, UFTDI_TYPE_8U232AM),
+	UFTDI_DEV(FIC, NEO1973_DEBUG, UFTDI_TYPE_AUTO | UFTDI_FLAG_JTAG),
+	UFTDI_DEV(FIC, NEO1973_DEBUG, UFTDI_TYPE_AUTO | UFTDI_FLAG_JTAG),
+	UFTDI_DEV(FTDI, 232H, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, 232RL, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, 4N_GALAXY_DE_1, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, 4N_GALAXY_DE_2, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, 4N_GALAXY_DE_3, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, 8U232AM_ALT, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, ACCESSO, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, ACG_HFDUAL, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, ACTIVE_ROBOTS, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, ACTZWAVE, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, AMC232, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, ARTEMIS, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, ASK_RDR400, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, ATIK_ATK16, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, ATIK_ATK16C, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, ATIK_ATK16HR, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, ATIK_ATK16HRC, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, ATIK_ATK16IC, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, BCS_SE923, UFTDI_TYPE_AUTO),
 	UFTDI_DEV(FTDI, BEAGLEBONE, UFTDI_TYPE_8U232AM),
+	UFTDI_DEV(FTDI, CANDAPTER, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, CANUSB, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, CCSICDU20_0, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, CCSICDU40_1, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, CCSICDU64_4, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, CCSLOAD_N_GO_3, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, CCSMACHX_2, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, CCSPRIME8_5, UFTDI_TYPE_AUTO),
 	UFTDI_DEV(FTDI, CFA_631, UFTDI_TYPE_8U232AM),
 	UFTDI_DEV(FTDI, CFA_632, UFTDI_TYPE_8U232AM),
 	UFTDI_DEV(FTDI, CFA_633, UFTDI_TYPE_8U232AM),
 	UFTDI_DEV(FTDI, CFA_634, UFTDI_TYPE_8U232AM),
 	UFTDI_DEV(FTDI, CFA_635, UFTDI_TYPE_8U232AM),
+	UFTDI_DEV(FTDI, CHAMSYS_24_MASTER_WING, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, CHAMSYS_MAXI_WING, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, CHAMSYS_MEDIA_WING, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, CHAMSYS_MIDI_TIMECODE, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, CHAMSYS_MINI_WING, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, CHAMSYS_PC_WING, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, CHAMSYS_USB_DMX, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, CHAMSYS_WING, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, COM4SM, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, CONVERTER_0, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, CONVERTER_1, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, CONVERTER_2, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, CONVERTER_3, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, CONVERTER_4, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, CONVERTER_5, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, CONVERTER_6, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, CONVERTER_7, UFTDI_TYPE_AUTO),
 	UFTDI_DEV(FTDI, CTI_USB_MINI_485, UFTDI_TYPE_8U232AM),
 	UFTDI_DEV(FTDI, CTI_USB_NANO_485, UFTDI_TYPE_8U232AM),
+	UFTDI_DEV(FTDI, DMX4ALL, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, DOMINTELL_DGQG, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, DOMINTELL_DUSB, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, DOTEC, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, ECLO_COM_1WIRE, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, ECO_PRO_CDS, UFTDI_TYPE_AUTO),
 	UFTDI_DEV(FTDI, EISCOU, UFTDI_TYPE_8U232AM),
+	UFTDI_DEV(FTDI, ELSTER_UNICOM, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, ELV_ALC8500, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, ELV_CLI7000, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, ELV_CSI8, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, ELV_EC3000, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, ELV_EM1000DL, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, ELV_EM1010PC, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, ELV_FEM, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, ELV_FHZ1000PC, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, ELV_FHZ1300PC, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, ELV_FM3RX, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, ELV_FS20SIG, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, ELV_HS485, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, ELV_KL100, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, ELV_MSM1, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, ELV_PCD200, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, ELV_PCK100, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, ELV_PPS7330, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, ELV_RFP500, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, ELV_T1100, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, ELV_TFD128, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, ELV_TFM100, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, ELV_TWS550, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, ELV_UAD8, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, ELV_UDA7, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, ELV_UDF77, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, ELV_UIO88, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, ELV_ULA200, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, ELV_UM100, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, ELV_UMS100, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, ELV_UO100, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, ELV_UR100, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, ELV_USI2, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, ELV_USR, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, ELV_UTP8, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, ELV_WS300PC, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, ELV_WS444PC, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, ELV_WS500, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, ELV_WS550, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, ELV_WS777, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, ELV_WS888, UFTDI_TYPE_AUTO),
 	UFTDI_DEV(FTDI, EMCU2D, UFTDI_TYPE_8U232AM),
 	UFTDI_DEV(FTDI, EMCU2H, UFTDI_TYPE_8U232AM),
+	UFTDI_DEV(FTDI, FUTURE_0, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, FUTURE_1, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, FUTURE_2, UFTDI_TYPE_AUTO),
 	UFTDI_DEV(FTDI, GAMMASCOUT, UFTDI_TYPE_8U232AM),
+	UFTDI_DEV(FTDI, GENERIC, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, GUDEADS_E808, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, GUDEADS_E809, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, GUDEADS_E80A, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, GUDEADS_E80B, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, GUDEADS_E80C, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, GUDEADS_E80D, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, GUDEADS_E80E, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, GUDEADS_E80F, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, GUDEADS_E88D, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, GUDEADS_E88E, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, GUDEADS_E88F, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, HD_RADIO, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, HO720, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, HO730, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, HO820, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, HO870, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, IBS_APP70, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, IBS_PCMCIA, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, IBS_PEDO, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, IBS_PICPRO, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, IBS_PK1, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, IBS_PROD, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, IBS_RS232MON, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, IBS_US485, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, IPLUS, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, IPLUS2, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, IRTRANS, UFTDI_TYPE_AUTO),
 	UFTDI_DEV(FTDI, KBS, UFTDI_TYPE_8U232AM),
+	UFTDI_DEV(FTDI, LENZ_LIUSB, UFTDI_TYPE_AUTO),
 	UFTDI_DEV(FTDI, LK202, UFTDI_TYPE_8U232AM),
 	UFTDI_DEV(FTDI, LK204, UFTDI_TYPE_8U232AM),
+	UFTDI_DEV(FTDI, LM3S_DEVEL_BOARD, UFTDI_TYPE_AUTO | UFTDI_FLAG_JTAG),
+	UFTDI_DEV(FTDI, LM3S_EVAL_BOARD, UFTDI_TYPE_AUTO | UFTDI_FLAG_JTAG),
+	UFTDI_DEV(FTDI, MASTERDEVEL2, UFTDI_TYPE_AUTO),
 	UFTDI_DEV(FTDI, MAXSTREAM, UFTDI_TYPE_8U232AM),
+	UFTDI_DEV(FTDI, MHAM_DB9, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, MHAM_IC, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, MHAM_KW, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, MHAM_RS232, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, MHAM_Y6, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, MHAM_Y8, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, MHAM_Y9, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, MHAM_YS, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, MICRO_CHAMELEON, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, MTXORB_5, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, MTXORB_6, UFTDI_TYPE_AUTO),
 	UFTDI_DEV(FTDI, MX2_3, UFTDI_TYPE_8U232AM),
 	UFTDI_DEV(FTDI, MX4_5, UFTDI_TYPE_8U232AM),
+	UFTDI_DEV(FTDI, NXTCAM, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, OCEANIC, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, OOCDLINK, UFTDI_TYPE_AUTO | UFTDI_FLAG_JTAG),
+	UFTDI_DEV(FTDI, OPENDCC, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, OPENDCC_GATEWAY, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, OPENDCC_GBM, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, OPENDCC_SNIFFER, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, OPENDCC_THROTTLE, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, PCDJ_DAC2, UFTDI_TYPE_AUTO),
 	UFTDI_DEV(FTDI, PCMSFU, UFTDI_TYPE_8U232AM),
+	UFTDI_DEV(FTDI, PERLE_ULTRAPORT, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, PHI_FISCO, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, PIEGROUP, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, PROPOX_JTAGCABLEII, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, R2000KU_TRUE_RNG, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, R2X0, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, RELAIS, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, REU_TINY, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, RMP200, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, RM_CANVIEW, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, RRCIRKITS_LOCOBUFFER, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, SCIENCESCOPE_HS_LOGBOOK, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, SCIENCESCOPE_LOGBOOKML, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, SCIENCESCOPE_LS_LOGBOOK, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, SCS_DEVICE_0, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, SCS_DEVICE_1, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, SCS_DEVICE_2, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, SCS_DEVICE_3, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, SCS_DEVICE_4, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, SCS_DEVICE_5, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, SCS_DEVICE_6, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, SCS_DEVICE_7, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, SDMUSBQSS, UFTDI_TYPE_AUTO),
 	UFTDI_DEV(FTDI, SEMC_DSS20, UFTDI_TYPE_8U232AM),
 	UFTDI_DEV(FTDI, SERIAL_2232C, UFTDI_TYPE_8U232AM),
 	UFTDI_DEV(FTDI, SERIAL_2232D, UFTDI_TYPE_8U232AM),
@@ -242,20 +438,405 @@
 	UFTDI_DEV(FTDI, SERIAL_8U100AX, UFTDI_TYPE_SIO),
 	UFTDI_DEV(FTDI, SERIAL_8U232AM, UFTDI_TYPE_8U232AM),
 	UFTDI_DEV(FTDI, SERIAL_8U232AM4, UFTDI_TYPE_8U232AM),
+	UFTDI_DEV(FTDI, SIGNALYZER_SH2, UFTDI_TYPE_AUTO | UFTDI_FLAG_JTAG),
+	UFTDI_DEV(FTDI, SIGNALYZER_SH4, UFTDI_TYPE_AUTO | UFTDI_FLAG_JTAG),
+	UFTDI_DEV(FTDI, SIGNALYZER_SLITE, UFTDI_TYPE_AUTO | UFTDI_FLAG_JTAG),
+	UFTDI_DEV(FTDI, SIGNALYZER_ST, UFTDI_TYPE_AUTO | UFTDI_FLAG_JTAG),
+	UFTDI_DEV(FTDI, SPECIAL_1, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, SPECIAL_3, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, SPECIAL_4, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, SPROG_II, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, SR_RADIO, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, SUUNTO_SPORTS, UFTDI_TYPE_AUTO),
 	UFTDI_DEV(FTDI, TACTRIX_OPENPORT_13M, UFTDI_TYPE_8U232AM),
 	UFTDI_DEV(FTDI, TACTRIX_OPENPORT_13S, UFTDI_TYPE_8U232AM),
 	UFTDI_DEV(FTDI, TACTRIX_OPENPORT_13U, UFTDI_TYPE_8U232AM),
+	UFTDI_DEV(FTDI, TAVIR_STK500, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, TERATRONIK_D2XX, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, TERATRONIK_VCP, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, THORLABS, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, TNC_X, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, TTUSB, UFTDI_TYPE_AUTO),
 	UFTDI_DEV(FTDI, TURTELIZER2, UFTDI_TYPE_8U232AM | UFTDI_FLAG_JTAG),
 	UFTDI_DEV(FTDI, UOPTBR, UFTDI_TYPE_8U232AM),
 	UFTDI_DEV(FTDI, USBSERIAL, UFTDI_TYPE_8U232AM),
+	UFTDI_DEV(FTDI, USBX_707, UFTDI_TYPE_AUTO),
 	UFTDI_DEV(FTDI, USB_UIRT, UFTDI_TYPE_8U232AM),
+	UFTDI_DEV(FTDI, USINT_CAT, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, USINT_RS232, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, USINT_WKEY, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, VARDAAN, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, VNHCPCUSB_D, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, WESTREX_MODEL_777, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, WESTREX_MODEL_8900F, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, XF_547, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, XF_640, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, XF_642, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, XM_RADIO, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(FTDI, YEI_SERVOCENTER31, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(GNOTOMETRICS, USB, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(ICOM, SP1, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(ICOM, OPC_U_UC, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(ICOM, RP2C1, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(ICOM, RP2C2, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(ICOM, RP2D, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(ICOM, RP2KVR, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(ICOM, RP2KVT, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(ICOM, RP2VR, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(ICOM, RP2VT, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(ICOM, RP4KVR, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(ICOM, RP4KVT, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(IDTECH, IDT1221U, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(INTERBIOMETRICS, IOBOARD, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(INTERBIOMETRICS, MINI_IOBOARD, UFTDI_TYPE_AUTO),
 	UFTDI_DEV(INTREPIDCS, NEOVI, UFTDI_TYPE_8U232AM),
 	UFTDI_DEV(INTREPIDCS, VALUECAN, UFTDI_TYPE_8U232AM),
+	UFTDI_DEV(IONICS, PLUGCOMPUTER, UFTDI_TYPE_AUTO | UFTDI_FLAG_JTAG),
+	UFTDI_DEV(JETI, SPC1201, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(KOBIL, CONV_B1, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(KOBIL, CONV_KAAN, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(LARSENBRUSGAARD, ALTITRACK, UFTDI_TYPE_AUTO),
 	UFTDI_DEV(MARVELL, SHEEVAPLUG, UFTDI_TYPE_8U232AM),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0100, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0101, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0102, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0103, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0104, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0105, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0106, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0107, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0108, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0109, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_010A, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_010B, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_010C, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_010D, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_010E, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_010F, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0110, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0111, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0112, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0113, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0114, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0115, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0116, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0117, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0118, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0119, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_011A, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_011B, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_011C, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_011D, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_011E, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_011F, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0120, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0121, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0122, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0123, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0124, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0125, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0126, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0128, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0129, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_012A, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_012B, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_012D, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_012E, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_012F, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0130, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0131, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0132, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0133, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0134, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0135, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0136, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0137, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0138, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0139, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_013A, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_013B, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_013C, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_013D, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_013E, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_013F, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0140, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0141, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0142, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0143, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0144, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0145, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0146, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0147, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0148, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0149, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_014A, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_014B, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_014C, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_014D, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_014E, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_014F, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0150, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0151, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0152, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0159, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_015A, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_015B, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_015C, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_015D, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_015E, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_015F, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0160, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0161, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0162, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0163, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0164, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0165, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0166, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0167, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0168, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0169, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_016A, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_016B, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_016C, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_016D, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_016E, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_016F, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0170, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0171, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0172, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0173, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0174, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0175, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0176, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0177, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0178, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0179, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_017A, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_017B, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_017C, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_017D, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_017E, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_017F, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0180, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0181, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0182, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0183, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0184, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0185, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0186, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0187, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0188, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0189, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_018A, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_018B, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_018C, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_018D, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_018E, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_018F, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0190, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0191, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0192, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0193, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0194, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0195, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0196, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0197, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0198, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_0199, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_019A, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_019B, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_019C, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_019D, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_019E, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_019F, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01A0, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01A1, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01A2, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01A3, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01A4, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01A5, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01A6, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01A7, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01A8, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01A9, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01AA, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01AB, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01AC, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01AD, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01AE, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01AF, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01B0, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01B1, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01B2, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01B3, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01B4, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01B5, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01B6, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01B7, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01B8, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01B9, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01BA, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01BB, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01BC, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01BD, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01BE, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01BF, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01C0, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01C1, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01C2, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01C3, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01C4, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01C5, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01C6, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01C7, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01C8, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01C9, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01CA, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01CB, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01CC, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01CD, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01CE, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01CF, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01D0, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01D1, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01D2, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01D3, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01D4, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01D5, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01D6, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01D7, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01D8, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01D9, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01DA, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01DB, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01DC, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01DD, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01DE, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01DF, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01E0, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01E1, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01E2, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01E3, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01E4, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01E5, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01E6, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01E7, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01E8, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01E9, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01EA, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01EB, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01EC, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01ED, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01EE, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01EF, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01F0, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01F1, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01F2, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01F3, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01F4, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01F5, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01F6, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01F7, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01F8, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01F9, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01FA, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01FB, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01FC, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01FD, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01FE, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MATRIXORBITAL, FTDI_RANGE_01FF, UFTDI_TYPE_AUTO),
 	UFTDI_DEV(MATRIXORBITAL, MOUA, UFTDI_TYPE_8U232AM),
 	UFTDI_DEV(MELCO, PCOPRS1, UFTDI_TYPE_8U232AM),
+	UFTDI_DEV(METAGEEK, TELLSTICK, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(MOBILITY, USB_SERIAL, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(OLIMEX, ARM_USB_OCD, UFTDI_TYPE_AUTO | UFTDI_FLAG_JTAG),
+	UFTDI_DEV(OLIMEX, ARM_USB_OCD_H, UFTDI_TYPE_AUTO | UFTDI_FLAG_JTAG),
+	UFTDI_DEV(PAPOUCH, AD4USB, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(PAPOUCH, AP485, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(PAPOUCH, AP485_2, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(PAPOUCH, DRAK5, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(PAPOUCH, DRAK6, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(PAPOUCH, GMSR, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(PAPOUCH, GMUX, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(PAPOUCH, IRAMP, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(PAPOUCH, LEC, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(PAPOUCH, MU, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(PAPOUCH, QUIDO10X1, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(PAPOUCH, QUIDO2X16, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(PAPOUCH, QUIDO2X2, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(PAPOUCH, QUIDO30X3, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(PAPOUCH, QUIDO3X32, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(PAPOUCH, QUIDO4X4, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(PAPOUCH, QUIDO60X3, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(PAPOUCH, QUIDO8X8, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(PAPOUCH, SB232, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(PAPOUCH, SB422, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(PAPOUCH, SB422_2, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(PAPOUCH, SB485, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(PAPOUCH, SB485C, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(PAPOUCH, SB485S, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(PAPOUCH, SB485_2, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(PAPOUCH, SIMUKEY, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(PAPOUCH, TMU, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(PAPOUCH, UPSUSB, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(POSIFLEX, PP7000, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(QIHARDWARE, JTAGSERIAL, UFTDI_TYPE_AUTO | UFTDI_FLAG_JTAG),
 	UFTDI_DEV(RATOC, REXUSB60F, UFTDI_TYPE_8U232AM),
-	UFTDI_DEV(SIIG2, US2308, UFTDI_TYPE_8U232AM)
+	UFTDI_DEV(RTSYSTEMS, CT29B, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(RTSYSTEMS, SERIAL_VX7, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(SEALEVEL, 2101, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(SEALEVEL, 2102, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(SEALEVEL, 2103, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(SEALEVEL, 2104, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(SEALEVEL, 2106, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(SEALEVEL, 2201_1, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(SEALEVEL, 2201_2, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(SEALEVEL, 2202_1, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(SEALEVEL, 2202_2, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(SEALEVEL, 2203_1, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(SEALEVEL, 2203_2, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(SEALEVEL, 2401_1, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(SEALEVEL, 2401_2, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(SEALEVEL, 2401_3, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(SEALEVEL, 2401_4, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(SEALEVEL, 2402_1, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(SEALEVEL, 2402_2, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(SEALEVEL, 2402_3, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(SEALEVEL, 2402_4, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(SEALEVEL, 2403_1, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(SEALEVEL, 2403_2, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(SEALEVEL, 2403_3, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(SEALEVEL, 2403_4, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(SEALEVEL, 2801_1, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(SEALEVEL, 2801_2, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(SEALEVEL, 2801_3, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(SEALEVEL, 2801_4, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(SEALEVEL, 2801_5, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(SEALEVEL, 2801_6, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(SEALEVEL, 2801_7, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(SEALEVEL, 2801_8, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(SEALEVEL, 2802_1, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(SEALEVEL, 2802_2, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(SEALEVEL, 2802_3, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(SEALEVEL, 2802_4, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(SEALEVEL, 2802_5, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(SEALEVEL, 2802_6, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(SEALEVEL, 2802_7, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(SEALEVEL, 2802_8, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(SEALEVEL, 2803_1, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(SEALEVEL, 2803_2, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(SEALEVEL, 2803_3, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(SEALEVEL, 2803_4, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(SEALEVEL, 2803_5, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(SEALEVEL, 2803_6, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(SEALEVEL, 2803_7, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(SEALEVEL, 2803_8, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(SIIG2, DK201, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(SIIG2, US2308, UFTDI_TYPE_8U232AM),
+	UFTDI_DEV(TESTO, USB_INTERFACE, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(TML, USB_SERIAL, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(TTI, QL355P, UFTDI_TYPE_AUTO),
+	UFTDI_DEV(UNKNOWN4, NF_RIC, UFTDI_TYPE_AUTO),
 #undef UFTDI_DEV
 };
=20
@@ -314,6 +895,17 @@
 	sc->sc_type =3D USB_GET_DRIVER_INFO(uaa) & UFTDI_TYPE_MASK;
=20
 	switch (sc->sc_type) {
+	case UFTDI_TYPE_AUTO:
+		/* simplified type check */
+		if (uaa->info.bcdDevice >=3D 0x0200 ||
+		    usbd_get_iface(uaa->device, 1) !=3D NULL) {
+			sc->sc_type =3D UFTDI_TYPE_8U232AM;
+			sc->sc_hdrlen =3D 0;
+		} else {
+			sc->sc_type =3D UFTDI_TYPE_SIO;
+			sc->sc_hdrlen =3D 1;
+		}
+		break;
 	case UFTDI_TYPE_SIO:
 		sc->sc_hdrlen =3D 1;
 		break;
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/usb/serial/uftdi_reg.h
--- a/head/sys/dev/usb/serial/uftdi_reg.h	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/usb/serial/uftdi_reg.h	Fri Aug 10 14:19:25 2012 +0300
@@ -1,5 +1,5 @@
 /*	$NetBSD: uftdireg.h,v 1.6 2002/07/11 21:14:28 augustss Exp $ */
-/*	$FreeBSD: head/sys/dev/usb/serial/uftdi_reg.h 237236 2012-06-18 19:18:3=
1Z marius $	*/
+/*	$FreeBSD: head/sys/dev/usb/serial/uftdi_reg.h 239055 2012-08-05 11:50:5=
6Z hselasky $	*/
=20
 /*
  * Definitions for the FTDI USB Single Port Serial Converter -
@@ -39,6 +39,7 @@
 #define	UFTDI_TYPE_MASK		0x000000ff
 #define	UFTDI_TYPE_SIO		0x00000001
 #define	UFTDI_TYPE_8U232AM	0x00000002
+#define	UFTDI_TYPE_AUTO		(UFTDI_TYPE_SIO | UFTDI_TYPE_8U232AM)
 #define	UFTDI_FLAG_MASK		0x0000ff00
 #define	UFTDI_FLAG_JTAG		0x00000100
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/usb/serial/uslcom.c
--- a/head/sys/dev/usb/serial/uslcom.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/usb/serial/uslcom.c	Fri Aug 10 14:19:25 2012 +0300
@@ -1,7 +1,7 @@
 /*	$OpenBSD: uslcom.c,v 1.17 2007/11/24 10:52:12 jsg Exp $	*/
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/dev/usb/serial/uslcom.c 227463 2011-11-12 08:=
40:52Z hselasky $");
+__FBSDID("$FreeBSD: head/sys/dev/usb/serial/uslcom.c 239050 2012-08-05 08:=
56:29Z hselasky $");
=20
 /*
  * Copyright (c) 2006 Jonathan Gray <jsg at openbsd.org>
@@ -60,7 +60,6 @@
=20
 #define	USLCOM_BULK_BUF_SIZE		1024
 #define	USLCOM_CONFIG_INDEX	0
-#define	USLCOM_IFACE_INDEX	0
=20
 #define	USLCOM_SET_DATA_BITS(x)	((x) << 8)
=20
@@ -70,12 +69,13 @@
=20
 /* Request codes */
 #define	USLCOM_UART		0x00
-#define	USLCOM_BAUD_RATE	0x01=09
+#define	USLCOM_SET_BAUD_DIV	0x01=09
 #define	USLCOM_DATA		0x03
 #define	USLCOM_BREAK		0x05
 #define	USLCOM_CTRL		0x07
 #define	USLCOM_RCTRL            0x08
 #define	USLCOM_SET_FLOWCTRL     0x13
+#define	USLCOM_SET_BAUD_RATE	0x1e=09
 #define	USLCOM_VENDOR_SPECIFIC	0xff
=20
 /* USLCOM_UART values */
@@ -92,8 +92,8 @@
 #define	USLCOM_CTRL_RI          0x0040
 #define	USLCOM_CTRL_DCD		0x0080
=20
-/* USLCOM_BAUD_RATE values */
-#define	USLCOM_BAUD_REF		0x384000
+/* USLCOM_SET_BAUD_DIV values */
+#define	USLCOM_BAUD_REF		3686400 /* 3.6864 MHz */
=20
 /* USLCOM_DATA values */
 #define	USLCOM_STOP_BITS_1	0x00
@@ -102,8 +102,6 @@
 #define	USLCOM_PARITY_ODD	0x10
 #define	USLCOM_PARITY_EVEN	0x20
=20
-#define	USLCOM_PORT_NO		0x0000
-
 /* USLCOM_BREAK values */
 #define	USLCOM_BREAK_OFF	0x00
 #define	USLCOM_BREAK_ON		0x01
@@ -137,6 +135,7 @@
=20
 	uint8_t		 sc_msr;
 	uint8_t		 sc_lsr;
+	uint8_t		 sc_iface_no;
 };
=20
 static device_probe_t uslcom_probe;
@@ -213,7 +212,13 @@
 static const STRUCT_USB_HOST_ID uslcom_devs[] =3D {
 #define	USLCOM_DEV(v,p)  { USB_VP(USB_VENDOR_##v, USB_PRODUCT_##v##_##p) }
     USLCOM_DEV(BALTECH, CARDREADER),
+    USLCOM_DEV(CLIPSAL, 5000CT2),
+    USLCOM_DEV(CLIPSAL, 5500PACA),
     USLCOM_DEV(CLIPSAL, 5500PCU),
+    USLCOM_DEV(CLIPSAL, 560884),
+    USLCOM_DEV(CLIPSAL, 5800PC),
+    USLCOM_DEV(CLIPSAL, C5000CT2),
+    USLCOM_DEV(CLIPSAL, L51xx),
     USLCOM_DEV(DATAAPEX, MULTICOM),
     USLCOM_DEV(DELL, DW700),
     USLCOM_DEV(DIGIANSWER, ZIGBEE802154),
@@ -221,17 +226,27 @@
     USLCOM_DEV(DYNASTREAM, ANTDEVBOARD2),
     USLCOM_DEV(DYNASTREAM, ANT2USB),
     USLCOM_DEV(ELV, USBI2C),
+    USLCOM_DEV(FESTO, CMSP),
+    USLCOM_DEV(FESTO, CPX_USB),
     USLCOM_DEV(FOXCONN, PIRELLI_DP_L10),
     USLCOM_DEV(FOXCONN, TCOM_TC_300),
     USLCOM_DEV(GEMALTO, PROXPU),
     USLCOM_DEV(JABLOTRON, PC60B),
+    USLCOM_DEV(KAMSTRUP, OPTICALEYE),
+    USLCOM_DEV(KAMSTRUP, MBUS_250D),
+    USLCOM_DEV(LINKINSTRUMENTS, MSO19),
+    USLCOM_DEV(LINKINSTRUMENTS, MSO28),
+    USLCOM_DEV(LINKINSTRUMENTS, MSO28_2),
     USLCOM_DEV(MEI, CASHFLOW_SC),
     USLCOM_DEV(MEI, S2000),
-    USLCOM_DEV(JABLOTRON, PC60B),
     USLCOM_DEV(OWEN, AC4),
     USLCOM_DEV(PHILIPS, ACE1001),
     USLCOM_DEV(PLX, CA42),
     USLCOM_DEV(RENESAS, RX610),
+    USLCOM_DEV(SILABS, AC_SERV_CAN),
+    USLCOM_DEV(SILABS, AC_SERV_CIS),
+    USLCOM_DEV(SILABS, AC_SERV_IBUS),
+    USLCOM_DEV(SILABS, AC_SERV_OBD),
     USLCOM_DEV(SILABS, AEROCOMM),
     USLCOM_DEV(SILABS, AMBER_AMB2560),
     USLCOM_DEV(SILABS, ARGUSISP),
@@ -247,16 +262,21 @@
     USLCOM_DEV(SILABS, C2_EDGE_MODEM),
     USLCOM_DEV(SILABS, CP2102),
     USLCOM_DEV(SILABS, CP210X_2),
+    USLCOM_DEV(SILABS, CP210X_3),
+    USLCOM_DEV(SILABS, CP210X_4),
     USLCOM_DEV(SILABS, CRUMB128),
     USLCOM_DEV(SILABS, CYGNAL),
     USLCOM_DEV(SILABS, CYGNAL_DEBUG),
     USLCOM_DEV(SILABS, CYGNAL_GPS),
     USLCOM_DEV(SILABS, DEGREE),
+    USLCOM_DEV(SILABS, DEKTEK_DTAPLUS),
     USLCOM_DEV(SILABS, EMS_C1007),
+    USLCOM_DEV(SILABS, HAMLINKUSB),
     USLCOM_DEV(SILABS, HELICOM),
     USLCOM_DEV(SILABS, IMS_USB_RS422),
     USLCOM_DEV(SILABS, INFINITY_MIC),
     USLCOM_DEV(SILABS, INSYS_MODEM),
+    USLCOM_DEV(SILABS, IRZ_SG10),
     USLCOM_DEV(SILABS, KYOCERA_GPS),
     USLCOM_DEV(SILABS, LIPOWSKY_HARP),
     USLCOM_DEV(SILABS, LIPOWSKY_JTAG),
@@ -264,12 +284,14 @@
     USLCOM_DEV(SILABS, MC35PU),
     USLCOM_DEV(SILABS, MJS_TOSLINK),
     USLCOM_DEV(SILABS, MSD_DASHHAWK),
+    USLCOM_DEV(SILABS, MULTIPLEX_RC),
+    USLCOM_DEV(SILABS, OPTRIS_MSPRO),
     USLCOM_DEV(SILABS, POLOLU),
     USLCOM_DEV(SILABS, PROCYON_AVS),
     USLCOM_DEV(SILABS, SB_PARAMOUNT_ME),
     USLCOM_DEV(SILABS, SUUNTO),
     USLCOM_DEV(SILABS, TAMSMASTER),
-    USLCOM_DEV(SILABS, TELEGESYS_ETRX2),
+    USLCOM_DEV(SILABS, TELEGESIS_ETRX2),
     USLCOM_DEV(SILABS, TRACIENT),
     USLCOM_DEV(SILABS, TRAQMATE),
     USLCOM_DEV(SILABS, USBCOUNT50),
@@ -343,9 +365,6 @@
 	if (uaa->info.bConfigIndex !=3D USLCOM_CONFIG_INDEX) {
 		return (ENXIO);
 	}
-	if (uaa->info.bIfaceIndex !=3D USLCOM_IFACE_INDEX) {
-		return (ENXIO);
-	}
 	return (usbd_lookup_id_by_uaa(uslcom_devs, sizeof(uslcom_devs), uaa));
 }
=20
@@ -363,6 +382,8 @@
 	usb_callout_init_mtx(&sc->sc_watchdog, &sc->sc_mtx, 0);
=20
 	sc->sc_udev =3D uaa->device;
+	/* use the interface number from the USB interface descriptor */
+	sc->sc_iface_no =3D uaa->info.bIfaceNum;
=20
 	error =3D usbd_transfer_setup(uaa->device,
 	    &uaa->info.bIfaceIndex, sc->sc_xfer, uslcom_config,
@@ -417,7 +438,7 @@
 	req.bmRequestType =3D USLCOM_WRITE;
 	req.bRequest =3D USLCOM_UART;
 	USETW(req.wValue, USLCOM_UART_ENABLE);
-	USETW(req.wIndex, USLCOM_PORT_NO);
+	USETW(req.wIndex, sc->sc_iface_no);
 	USETW(req.wLength, 0);
=20
         if (ucom_cfg_do_request(sc->sc_udev, &sc->sc_ucom,=20
@@ -441,7 +462,7 @@
 	req.bmRequestType =3D USLCOM_WRITE;
 	req.bRequest =3D USLCOM_UART;
 	USETW(req.wValue, USLCOM_UART_DISABLE);
-	USETW(req.wIndex, USLCOM_PORT_NO);
+	USETW(req.wIndex, sc->sc_iface_no);
 	USETW(req.wLength, 0);
=20
 	if (ucom_cfg_do_request(sc->sc_udev, &sc->sc_ucom,=20
@@ -465,7 +486,7 @@
 	req.bmRequestType =3D USLCOM_WRITE;
 	req.bRequest =3D USLCOM_CTRL;
 	USETW(req.wValue, ctl);
-	USETW(req.wIndex, USLCOM_PORT_NO);
+	USETW(req.wIndex, sc->sc_iface_no);
 	USETW(req.wLength, 0);
=20
         if (ucom_cfg_do_request(sc->sc_udev, &sc->sc_ucom,=20
@@ -489,7 +510,7 @@
 	req.bmRequestType =3D USLCOM_WRITE;
 	req.bRequest =3D USLCOM_CTRL;
 	USETW(req.wValue, ctl);
-	USETW(req.wIndex, USLCOM_PORT_NO);
+	USETW(req.wIndex, sc->sc_iface_no);
 	USETW(req.wLength, 0);
=20
         if (ucom_cfg_do_request(sc->sc_udev, &sc->sc_ucom,=20
@@ -511,19 +532,20 @@
 {
 	struct uslcom_softc *sc =3D ucom->sc_parent;
 	struct usb_device_request req;
-	uint32_t flowctrl[4];
+	uint32_t baudrate, flowctrl[4];
 	uint16_t data;
=20
 	DPRINTF("\n");
=20
+	baudrate =3D t->c_ospeed;
 	req.bmRequestType =3D USLCOM_WRITE;
-	req.bRequest =3D USLCOM_BAUD_RATE;
-	USETW(req.wValue, USLCOM_BAUD_REF / t->c_ospeed);
-	USETW(req.wIndex, USLCOM_PORT_NO);
-	USETW(req.wLength, 0);
+	req.bRequest =3D USLCOM_SET_BAUD_RATE;
+	USETW(req.wValue, 0);
+	USETW(req.wIndex, sc->sc_iface_no);
+	USETW(req.wLength, sizeof(baudrate));
=20
-        if (ucom_cfg_do_request(sc->sc_udev, &sc->sc_ucom,=20
-	    &req, NULL, 0, 1000)) {
+	if (ucom_cfg_do_request(sc->sc_udev, &sc->sc_ucom,=20
+	    &req, &baudrate, 0, 1000)) {
 		DPRINTF("Set baudrate failed (ignored)\n");
 	}
=20
@@ -556,7 +578,7 @@
 	req.bmRequestType =3D USLCOM_WRITE;
 	req.bRequest =3D USLCOM_DATA;
 	USETW(req.wValue, data);
-	USETW(req.wIndex, USLCOM_PORT_NO);
+	USETW(req.wIndex, sc->sc_iface_no);
 	USETW(req.wLength, 0);
=20
         if (ucom_cfg_do_request(sc->sc_udev, &sc->sc_ucom,=20
@@ -578,7 +600,7 @@
 	req.bmRequestType =3D USLCOM_WRITE;
 	req.bRequest =3D USLCOM_SET_FLOWCTRL;
 	USETW(req.wValue, 0);
-	USETW(req.wIndex, USLCOM_PORT_NO);
+	USETW(req.wIndex, sc->sc_iface_no);
 	USETW(req.wLength, sizeof(flowctrl));
=20
 	if (ucom_cfg_do_request(sc->sc_udev, &sc->sc_ucom,=20
@@ -608,7 +630,7 @@
 	req.bmRequestType =3D USLCOM_WRITE;
 	req.bRequest =3D USLCOM_BREAK;
 	USETW(req.wValue, brk);
-	USETW(req.wIndex, USLCOM_PORT_NO);
+	USETW(req.wIndex, sc->sc_iface_no);
 	USETW(req.wLength, 0);
=20
         if (ucom_cfg_do_request(sc->sc_udev, &sc->sc_ucom,=20
@@ -762,7 +784,7 @@
 		req.bmRequestType =3D USLCOM_READ;
 		req.bRequest =3D USLCOM_RCTRL;
 		USETW(req.wValue, 0);
-		USETW(req.wIndex, USLCOM_PORT_NO);
+		USETW(req.wIndex, sc->sc_iface_no);
 		USETW(req.wLength, sizeof(buf));
               =20
 		usbd_xfer_set_frames(xfer, 2);
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/usb/usbdevs
--- a/head/sys/dev/usb/usbdevs	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/usb/usbdevs	Fri Aug 10 14:19:25 2012 +0300
@@ -1,4 +1,4 @@
-$FreeBSD: head/sys/dev/usb/usbdevs 238766 2012-07-25 11:33:43Z gavin $
+$FreeBSD: head/sys/dev/usb/usbdevs 239055 2012-08-05 11:50:56Z hselasky $
 /* $NetBSD: usbdevs,v 1.392 2004/12/29 08:38:44 imp Exp $ */
=20
 /*-
@@ -322,6 +322,7 @@
 vendor GUNZE		0x0637	Gunze Electronics USA
 vendor AVISION		0x0638	Avision
 vendor TEAC		0x0644	TEAC
+vendor ACTON		0x0647	Acton Research Corp.
 vendor SGI		0x065e	Silicon Graphics
 vendor SANWASUPPLY	0x0663	Sanwa Supply
 vendor MEGATEC		0x0665	Megatec
@@ -346,6 +347,7 @@
 vendor ASIAMD		0x06be	Asia Microelectronic Development
 vendor BIZLINK		0x06c4	Bizlink International
 vendor KEYSPAN		0x06cd	Keyspan / InnoSys Inc.
+vendor CONTEC		0x06ce	Contec products
 vendor AASHIMA		0x06d6	Aashima Technology
 vendor LIEBERT		0x06da	Liebert
 vendor MULTITECH	0x06e0	MultiTech
@@ -488,7 +490,8 @@
 vendor MEDELI		0x0a67	Medeli
 vendor GEOCAST		0x0a79	Geocast Network Systems
 vendor EGO		0x0a92	EGO systems
-vendor IDQUANTIQUE	0x0aba	id Quantique
+vendor IDQUANTIQUE	0x0aba	ID Quantique
+vendor IDTECH		0x0acd	ID TECH
 vendor ZYDAS		0x0ace	Zydas Technology Corporation
 vendor NEODIO		0x0aec	Neodio
 vendor OPTION		0x0af0	Option N.V.
@@ -515,14 +518,20 @@
 vendor FSC		0x0bf8	Fujitsu Siemens Computers
 vendor AGATE		0x0c08	Agate Technologies
 vendor DMI		0x0c0b	DMI
+vendor ICOM		0x0c26	Icom Inc.
+vendor GNOTOMETRICS	0x0c33	GN Otometrics
 vendor CHICONY2		0x0c45	Chicony
 vendor REINERSCT	0x0c4b	Reiner-SCT
 vendor SEALEVEL		0x0c52	Sealevel System
+vendor JETI		0x0c6c	Jeti
 vendor LUWEN		0x0c76	Luwen
+vendor ELEKTOR		0x0c7d	ELEKTOR Electronics
 vendor KYOCERA2		0x0c88	Kyocera Wireless Corp.
 vendor ZCOM		0x0cde	Z-Com
 vendor ATHEROS2		0x0cf3	Atheros Communications
+vendor POSIFLEX		0x0d3a	POSIFLEX
 vendor TANGTOP		0x0d3d	Tangtop
+vendor KOBIL		0x0d46	KOBIL
 vendor SMC3		0x0d5c	Standard Microsystems
 vendor ADDON		0x0d7d	Add-on Technology
 vendor ACDC		0x0d7e	American Computer & Digital Components
@@ -531,6 +540,7 @@
 vendor SKANHEX		0x0d96	Skanhex Technology, Inc.
 vendor MSI		0x0db0	Micro Star International
 vendor ELCON		0x0db7	ELCON Systemtechnik
+vendor UNKNOWN4		0x0dcd	Unknown vendor
 vendor NETAC		0x0dd8	Netac
 vendor SITECOMEU	0x0df6	Sitecom Europe
 vendor MOBILEACTION	0x0df7	Mobile Action
@@ -554,6 +564,7 @@
 vendor FALCOM		0x0f94	Falcom Wireless Communications GmbH
 vendor RIM		0x0fca	Research In Motion
 vendor DYNASTREAM	0x0fcf	Dynastream Innovations
+vendor LARSENBRUSGAARD	0x0fd8	Larsen and Brusgaard
 vendor KONTRON		0x0fe6	Kontron AG
 vendor QUALCOMM		0x1004	Qualcomm
 vendor APACER		0x1005	Apacer
@@ -561,6 +572,7 @@
 vendor AIRPLUS		0x1011  Airplus
 vendor DESKNOTE		0x1019	Desknote
 vendor NEC3		0x1033	NEC
+vendor TTI		0x103e	Thurlby Thandar Instruments
 vendor GIGABYTE		0x1044	GIGABYTE
 vendor WESTERN		0x1058	Western Digital
 vendor MOTOROLA		0x1063	Motorola
@@ -589,12 +601,14 @@
 vendor SIEMENS3		0x11f5	Siemens
 vendor NETINDEX		0x11f6	NetIndex
 vendor ALCATEL		0x11f7	Alcatel
+vendor INTERBIOMETRICS	0x1209	Interbiometrics
 vendor UNKNOWN3		0x1233	Unknown vendor
 vendor TSUNAMI		0x1241	Tsunami
 vendor PHEENET		0x124a	Pheenet
 vendor TARGUS		0x1267	Targus
 vendor TWINMOS		0x126f	TwinMOS
 vendor TENDA		0x1286	Tenda
+vendor TESTO		0x128d	Testo products
 vendor CREATIVE2	0x1292	Creative Labs
 vendor BELKIN2		0x1293	Belkin Components
 vendor CYBERTAN		0x129b	CyberTAN Technology
@@ -616,6 +630,7 @@
 vendor REDOCTANE	0x1430	RedOctane
 vendor WISTRONNEWEB	0x1435	Wistron NeWeb
 vendor RADIOSHACK	0x1453	Radio Shack
+vendor FIC		0x1457	FIC / OpenMoko
 vendor HUAWEI3COM	0x1472	Huawei-3Com
 vendor ABOCOM2		0x1482	AboCom Systems
 vendor SILICOM		0x1485	Silicom
@@ -634,6 +649,7 @@
 vendor UMEDIA		0x157e	U-MEDIA Communications
 vendor FIBERLINE	0x1582	Fiberline
 vendor SPARKLAN		0x15a9	SparkLAN
+vendor OLIMEX		0x15ba	Olimex
 vendor SOUNDGRAPH 	0x15c2	Soundgraph, Inc.
 vendor AMIT2		0x15c5	AMIT
 vendor TEXTECH		0x15ca	Textech International Ltd.
@@ -659,6 +675,7 @@
 vendor ASUS2		0x1761	ASUS
 vendor SWEEX2		0x177f	Sweex
 vendor METAGEEK		0x1781	MetaGeek
+vendor KAMSTRUP		0x17a8	Kamstrup A/S
 vendor WAVESENSE	0x17f4	WaveSense
 vendor VAISALA		0x1843	Vaisala
 vendor AMIT		0x18c5	AMIT
@@ -667,13 +684,18 @@
 vendor ELV		0x18ef	ELV
 vendor LINKSYS3		0x1915	Linksys
 vendor QUALCOMMINC	0x19d2	Qualcomm, Incorporated
+vendor BAYER		0x1a79	Bayer
 vendor WCH2		0x1a86	QinHeng Electronics
 vendor STELERA		0x1a8d	Stelera Wireless
 vendor MATRIXORBITAL	0x1b3d	Matrix Orbital
 vendor OVISLINK		0x1b75	OvisLink
+vendor TML		0x1b91	The Mobility Lab
 vendor TCTMOBILE	0x1bbb  TCT Mobile
+vendor ALTI2		0x1bc9	Alti-2 products
+vendor SUNPLUS		0x1bcf	Sunplus Innovation Technology Inc.
 vendor WAGO		0x1be3  WAGO Kontakttechnik GmbH.
 vendor TELIT		0x1bc7  Telit
+vendor IONICS		0x1c0c	Ionics PlugComputer
 vendor LONGCHEER	0x1c9e	Longcheer Holdings, Ltd.
 vendor MPMAN		0x1cae	MpMan
 vendor DRESDENELEKTRONIK 0x1cf1 dresden elektronik
@@ -683,22 +705,27 @@
 vendor METAGEEK2	0x1dd5	MetaGeek
 vendor ALINK		0x1e0e  Alink
 vendor AIRTIES		0x1eda	AirTies
+vendor FESTO		0x1e29	Festo
 vendor VERTEX		0x1fe7  Vertex Wireless Co., Ltd.
 vendor DLINK		0x2001	D-Link
 vendor PLANEX2		0x2019	Planex Communications
 vendor HAUPPAUGE2	0x2040	Hauppauge Computer Works
 vendor TLAYTECH		0x20b9	Tlay Tech
 vendor ENCORE		0x203d	Encore
+vendor QIHARDWARE	0x20b7	QI-hardware
 vendor PARA		0x20b8	PARA Industrial
 vendor SIMTEC		0x20df	Simtec Electronics
+vendor RTSYSTEMS	0x2100	RTSYSTEMS
 vendor VIALABS		0x2109	VIA Labs
 vendor ERICSSON		0x2282	Ericsson
 vendor MOTOROLA2	0x22b8	Motorola
+vendor WETELECOM	0x22de	WeTelecom Incorporated
 vendor TRIPPLITE	0x2478	Tripp-Lite
 vendor HIROSE		0x2631	Hirose Electric
 vendor NHJ		0x2770	NHJ
 vendor PLANEX		0x2c02	Planex Communications
 vendor VIDZMEDIA	0x3275	VidzMedia Pte Ltd
+vendor LINKINSTRUMENTS	0x3195	Link Instruments Inc.
 vendor AEI		0x3334	AEI
 vendor HANK		0x3353	Hank Connection
 vendor PQI		0x3538	PQI
@@ -710,6 +737,7 @@
 vendor DELL		0x413c	Dell
 vendor WCH		0x4348	QinHeng Electronics
 vendor ACEECA		0x4766	Aceeca
+vendor PAPOUCH		0x5050	Papouch products
 vendor AVERATEC		0x50c2	Averatec
 vendor SWEEX		0x5173	Sweex
 vendor PROLIFIC2	0x5372	Prolific Technologies
@@ -726,6 +754,7 @@
 vendor MOSCHIP		0x9710	MosChip Semiconductor
 vendor MARVELL		0x9e88	Marvell Technology Group Ltd.
 vendor 3COM3		0xa727	3Com
+vendor EVOLUTION	0xdeee	Evolution Robotics products
 vendor DATAAPEX		0xdaae	DataApex
 vendor HP2		0xf003	Hewlett Packard
 vendor LOGILINK		0xfc08	LogiLink
@@ -782,6 +811,9 @@
 product ABOCOM RT2573_4		0xb21e	RT2573
 product ABOCOM WUG2700		0xb21f	WUG2700
=20
+/* Acton Research Corp. */
+product ACTON SPECTRAPRO	0x0100	FTDI compatible adapter
+
 /* Accton products */
 product ACCTON USB320_EC	0x1046	USB320-EC Ethernet Adapter
 product ACCTON 2664W		0x3501	2664W
@@ -945,6 +977,9 @@
 product ALTEC ADA70		0x0070	ADA70 Speakers
 product ALTEC ASC495		0xff05	ASC495 Speakers
=20
+/* Alti-2 products */
+product ALTI2 N3		0x6001	FTDI compatible adapter
+
 /* Allied Telesyn International products */
 product ALLIEDTELESYN ATUSB100	0xb100	AT-USB100
=20
@@ -991,6 +1026,10 @@
 /* AMIT(2) products */
 product AMIT2 RT2870		0x0008	RT2870
=20
+/* Analog Devices products */
+product ANALOGDEVICES GNICE	0xf000	FTDI compatible adapter
+product ANALOGDEVICES GNICEPLUS	0xf001	FTDI compatible adapter
+
 /* Anchor products */
 product ANCHOR SERIAL		0x2008	Serial
 product ANCHOR EZUSB		0x2131	EZUSB
@@ -1125,8 +1164,27 @@
 /* Baltech products */
 product BALTECH CARDREADER	0x9999	Card reader
=20
+/* Bayer products */
+product BAYER CONTOUR_CABLE	0x6001	FTDI compatible adapter
+
 /* B&B Electronics products */
 product BBELECTRONICS USOTL4	0xAC01	RS-422/485
+product BBELECTRONICS 232USB9M		0xac27	FTDI compatible adapter
+product BBELECTRONICS 485USB9F_2W	0xac25	FTDI compatible adapter
+product BBELECTRONICS 485USB9F_4W	0xac26	FTDI compatible adapter
+product BBELECTRONICS 485USBTB_2W	0xac33	FTDI compatible adapter
+product BBELECTRONICS 485USBTB_4W	0xac34	FTDI compatible adapter
+product BBELECTRONICS TTL3USB9M		0xac50	FTDI compatible adapter
+product BBELECTRONICS TTL5USB9M		0xac49	FTDI compatible adapter
+product BBELECTRONICS USO9ML2		0xac03	FTDI compatible adapter
+product BBELECTRONICS USO9ML2DR		0xac17	FTDI compatible adapter
+product BBELECTRONICS USO9ML2DR_2	0xac16	FTDI compatible adapter
+product BBELECTRONICS USOPTL4		0xac11	FTDI compatible adapter
+product BBELECTRONICS USOPTL4DR		0xac19	FTDI compatible adapter
+product BBELECTRONICS USOPTL4DR2	0xac18	FTDI compatible adapter
+product BBELECTRONICS USPTL4		0xac12	FTDI compatible adapter
+product BBELECTRONICS USTL4		0xac02	FTDI compatible adapter
+product BBELECTRONICS ZZ_PROG1_USB	0xba02	FTDI compatible adapter
=20
 /* Belkin products */
 /*product BELKIN F5U111		0x????	F5U111 Ethernet*/
@@ -1245,7 +1303,13 @@
 product CISCOLINKSYS3 RT3070	0x0101	RT3070
=20
 /* Clipsal products */
-product CLIPSAL 5500PCU		0x0303	5500PCU C-Bus
+product CLIPSAL 560884		0x0101	560884 C-Bus Audio Matrix Switch
+product CLIPSAL 5500PACA	0x0201	5500PACA C-Bus Pascal Automation Controller
+product CLIPSAL 5800PC		0x0301	5800PC C-Bus Wireless Interface
+product CLIPSAL 5500PCU		0x0303	5500PCU C-Bus Interface
+product CLIPSAL 5000CT2		0x0304	5000CT2 C-Bus Touch Screen
+product CLIPSAL C5000CT2	0x0305	C5000CT2 C-Bus Touch Screen
+product CLIPSAL L51xx		0x0401	L51xx C-Bus Dimmer
=20
 /* CMOTECH products */
 product CMOTECH CNU510		0x5141	CDMA Technologies USB modem
@@ -1287,6 +1351,9 @@
 /* Connectix products */
 product CONNECTIX QUICKCAM	0x0001	QuickCam
=20
+/* Conect products */
+product CONTEC COM1USBH		0x8311	FTDI compatible adapter
+
 /* Corega products */
 product COREGA ETHER_USB_T	0x0001	Ether USB-T
 product COREGA FETHER_USB_TX	0x0004	FEther USB-TX
@@ -1504,6 +1571,9 @@
 product ELECOM UCSGT0		0x5004	UC-SGT
 product ELECOM LDUSBTX3		0xabc1	LD-USB/TX
=20
+/* Elektor products */
+product ELEKTOR FT323R		0x0005	FTDI compatible adapter
+
 /* Elsa products */
 product ELSA MODEM1		0x2265	ELSA Modem Board
 product ELSA USB2ETHERNET	0x3000	Microlink USB2Ethernet
@@ -1581,20 +1651,33 @@
 /* e-TEK Labs products */
 product ETEK 1COM		0x8007	Serial
=20
+/* Evolution products */
+product EVOLUTION ER1		0x0300	FTDI compatible adapter
+product EVOLUTION HYBRID	0x0302	FTDI compatible adapter
+product EVOLUTION RCM4		0x0303	FTDI compatible adapter
+
 /* Extended Systems products */
 product EXTENDED XTNDACCESS	0x0100	XTNDAccess IrDA
=20
 /* Falcom products */
 product FALCOM TWIST		0x0001	USB GSM/GPRS Modem
+product FALCOM SAMBA		0x0005	FTDI compatible adapter
=20
 /* FEIYA products */
 product FEIYA DUMMY		0x0000	Dummy product
 product FEIYA 5IN1		0x1132	5-in-1 Card Reader
 product FEIYA AC110		0x6300	AC-110 Card Reader
=20
+/* Festo */
+product FESTO CPX_USB		0x0102	CPX-USB
+product FESTO CMSP		0x0501	CMSP
+
 /* Fiberline */
 product FIBERLINE WL430U	0x6003	WL-430U
=20
+/* FIC / OpenMoko */
+product FIC NEO1973_DEBUG	0x5118	FTDI compatible adapter
+
 /* Fossil, Inc products */
 product FOSSIL WRISTPDA		0x0002	Wrist PDA
=20
@@ -1614,6 +1697,7 @@
 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 232H		0x6014	FTDI compatible adapter
 product FTDI SERIAL_2232D	0x9e90	FT2232D Dual port Serial
 product FTDI SERIAL_4232H	0x6011	FT4232H Quad port Serial
 product FTDI BEAGLEBONE		0xa6d0	BeagleBone
@@ -1645,6 +1729,204 @@
 /* Commerzielle und Technische Informationssysteme GmbH products */
 product FTDI CTI_USB_NANO_485	0xf60b	CTI USB-Nano 485
 product FTDI CTI_USB_MINI_485	0xf608	CTI USB-Mini 485
+/* Other products */
+product FTDI 232RL		0xfbfa	FTDI compatible adapter
+product FTDI 4N_GALAXY_DE_1	0xf3c0	FTDI compatible adapter
+product FTDI 4N_GALAXY_DE_2	0xf3c1	FTDI compatible adapter
+product FTDI 4N_GALAXY_DE_3	0xf3c2	FTDI compatible adapter
+product FTDI 8U232AM_ALT	0x6006	FTDI compatible adapter
+product FTDI ACCESSO		0xfad0	FTDI compatible adapter
+product FTDI ACG_HFDUAL		0xdd20	FTDI compatible adapter
+product FTDI ACTIVE_ROBOTS	0xe548	FTDI compatible adapter
+product FTDI ACTZWAVE		0xf2d0	FTDI compatible adapter
+product FTDI AMC232		0xff00	FTDI compatible adapter
+product FTDI ARTEMIS		0xdf28	FTDI compatible adapter
+product FTDI ASK_RDR400		0xc991	FTDI compatible adapter
+product FTDI ATIK_ATK16		0xdf30	FTDI compatible adapter
+product FTDI ATIK_ATK16C	0xdf32	FTDI compatible adapter
+product FTDI ATIK_ATK16HR	0xdf31	FTDI compatible adapter
+product FTDI ATIK_ATK16HRC	0xdf33	FTDI compatible adapter
+product FTDI ATIK_ATK16IC	0xdf35	FTDI compatible adapter
+product FTDI BCS_SE923		0xfb99	FTDI compatible adapter
+product FTDI CANDAPTER		0x9f80	FTDI compatible adapter
+product FTDI CANUSB		0xffa8	FTDI compatible adapter
+product FTDI CCSICDU20_0	0xf9d0	FTDI compatible adapter
+product FTDI CCSICDU40_1	0xf9d1	FTDI compatible adapter
+product FTDI CCSICDU64_4	0xf9d4	FTDI compatible adapter
+product FTDI CCSLOAD_N_GO_3	0xf9d3	FTDI compatible adapter
+product FTDI CCSMACHX_2		0xf9d2	FTDI compatible adapter
+product FTDI CCSPRIME8_5	0xf9d5	FTDI compatible adapter
+product FTDI CHAMSYS_24_MASTER_WING	0xdaf8	FTDI compatible adapter
+product FTDI CHAMSYS_MAXI_WING	0xdafd	FTDI compatible adapter
+product FTDI CHAMSYS_MEDIA_WING	0xdafe	FTDI compatible adapter
+product FTDI CHAMSYS_MIDI_TIMECODE	0xdafb	FTDI compatible adapter
+product FTDI CHAMSYS_MINI_WING	0xdafc	FTDI compatible adapter
+product FTDI CHAMSYS_PC_WING	0xdaf9	FTDI compatible adapter
+product FTDI CHAMSYS_USB_DMX	0xdafa	FTDI compatible adapter
+product FTDI CHAMSYS_WING	0xdaff	FTDI compatible adapter
+product FTDI COM4SM		0xd578	FTDI compatible adapter
+product FTDI CONVERTER_0	0xd388	FTDI compatible adapter
+product FTDI CONVERTER_1	0xd389	FTDI compatible adapter
+product FTDI CONVERTER_2	0xd38a	FTDI compatible adapter
+product FTDI CONVERTER_3	0xd38b	FTDI compatible adapter
+product FTDI CONVERTER_4	0xd38c	FTDI compatible adapter
+product FTDI CONVERTER_5	0xd38d	FTDI compatible adapter
+product FTDI CONVERTER_6	0xd38e	FTDI compatible adapter
+product FTDI CONVERTER_7	0xd38f	FTDI compatible adapter
+product FTDI DMX4ALL		0xc850	FTDI compatible adapter
+product FTDI DOMINTELL_DGQG	0xef50	FTDI compatible adapter
+product FTDI DOMINTELL_DUSB	0xef51	FTDI compatible adapter
+product FTDI DOTEC		0x9868	FTDI compatible adapter
+product FTDI ECLO_COM_1WIRE	0xea90	FTDI compatible adapter
+product FTDI ECO_PRO_CDS	0xe520	FTDI compatible adapter
+product FTDI ELSTER_UNICOM	0xe700	FTDI compatible adapter
+product FTDI ELV_ALC8500	0xf06e	FTDI compatible adapter
+product FTDI ELV_CLI7000	0xfb59	FTDI compatible adapter
+product FTDI ELV_CSI8		0xe0f0	FTDI compatible adapter
+product FTDI ELV_EC3000		0xe006	FTDI compatible adapter
+product FTDI ELV_EM1000DL	0xe0f1	FTDI compatible adapter
+product FTDI ELV_EM1010PC	0xe0ef	FTDI compatible adapter
+product FTDI ELV_FEM		0xe00a	FTDI compatible adapter
+product FTDI ELV_FHZ1000PC	0xf06f	FTDI compatible adapter
+product FTDI ELV_FHZ1300PC	0xe0e8	FTDI compatible adapter
+product FTDI ELV_FM3RX		0xe0ed	FTDI compatible adapter
+product FTDI ELV_FS20SIG	0xe0f4	FTDI compatible adapter
+product FTDI ELV_HS485		0xe0ea	FTDI compatible adapter
+product FTDI ELV_KL100		0xe002	FTDI compatible adapter
+product FTDI ELV_MSM1		0xe001	FTDI compatible adapter
+product FTDI ELV_PCD200		0xf06c	FTDI compatible adapter
+product FTDI ELV_PCK100		0xe0f2	FTDI compatible adapter
+product FTDI ELV_PPS7330	0xfb5c	FTDI compatible adapter
+product FTDI ELV_RFP500		0xe0f3	FTDI compatible adapter
+product FTDI ELV_T1100		0xf06b	FTDI compatible adapter
+product FTDI ELV_TFD128		0xe0ec	FTDI compatible adapter
+product FTDI ELV_TFM100		0xfb5d	FTDI compatible adapter
+product FTDI ELV_TWS550		0xe009	FTDI compatible adapter
+product FTDI ELV_UAD8		0xf068	FTDI compatible adapter
+product FTDI ELV_UDA7		0xf069	FTDI compatible adapter
+product FTDI ELV_UDF77		0xfb5e	FTDI compatible adapter
+product FTDI ELV_UIO88		0xfb5f	FTDI compatible adapter
+product FTDI ELV_ULA200		0xf06d	FTDI compatible adapter
+product FTDI ELV_UM100		0xfb5a	FTDI compatible adapter
+product FTDI ELV_UMS100		0xe0eb	FTDI compatible adapter
+product FTDI ELV_UO100		0xfb5b	FTDI compatible adapter
+product FTDI ELV_UR100		0xfb58	FTDI compatible adapter
+product FTDI ELV_USI2		0xf06a	FTDI compatible adapter
+product FTDI ELV_USR		0xe000	FTDI compatible adapter
+product FTDI ELV_UTP8		0xe0f5	FTDI compatible adapter
+product FTDI ELV_WS300PC	0xe0f6	FTDI compatible adapter
+product FTDI ELV_WS444PC	0xe0f7	FTDI compatible adapter
+product FTDI ELV_WS500		0xe0e9	FTDI compatible adapter
+product FTDI ELV_WS550		0xe004	FTDI compatible adapter
+product FTDI ELV_WS777		0xe0ee	FTDI compatible adapter
+product FTDI ELV_WS888		0xe008	FTDI compatible adapter
+product FTDI FUTURE_0		0xf44a	FTDI compatible adapter
+product FTDI FUTURE_1		0xf44b	FTDI compatible adapter
+product FTDI FUTURE_2		0xf44c	FTDI compatible adapter
+product FTDI GENERIC		0x9378	FTDI compatible adapter
+product FTDI GUDEADS_E808	0xe808	FTDI compatible adapter
+product FTDI GUDEADS_E809	0xe809	FTDI compatible adapter
+product FTDI GUDEADS_E80A	0xe80a	FTDI compatible adapter
+product FTDI GUDEADS_E80B	0xe80b	FTDI compatible adapter
+product FTDI GUDEADS_E80C	0xe80c	FTDI compatible adapter
+product FTDI GUDEADS_E80D	0xe80d	FTDI compatible adapter
+product FTDI GUDEADS_E80E	0xe80e	FTDI compatible adapter
+product FTDI GUDEADS_E80F	0xe80f	FTDI compatible adapter
+product FTDI GUDEADS_E88D	0xe88d	FTDI compatible adapter
+product FTDI GUDEADS_E88E	0xe88e	FTDI compatible adapter
+product FTDI GUDEADS_E88F	0xe88f	FTDI compatible adapter
+product FTDI HD_RADIO		0x937c	FTDI compatible adapter
+product FTDI HO720		0xed72	FTDI compatible adapter
+product FTDI HO730		0xed73	FTDI compatible adapter
+product FTDI HO820		0xed74	FTDI compatible adapter
+product FTDI HO870		0xed71	FTDI compatible adapter
+product FTDI IBS_APP70		0xff3d	FTDI compatible adapter
+product FTDI IBS_PCMCIA		0xff3a	FTDI compatible adapter
+product FTDI IBS_PEDO		0xff3e	FTDI compatible adapter
+product FTDI IBS_PICPRO		0xff39	FTDI compatible adapter
+product FTDI IBS_PK1		0xff3b	FTDI compatible adapter
+product FTDI IBS_PROD		0xff3f	FTDI compatible adapter
+product FTDI IBS_RS232MON	0xff3c	FTDI compatible adapter
+product FTDI IBS_US485		0xff38	FTDI compatible adapter
+product FTDI IPLUS		0xd070	FTDI compatible adapter
+product FTDI IPLUS2		0xd071	FTDI compatible adapter
+product FTDI IRTRANS		0xfc60	FTDI compatible adapter
+product FTDI LENZ_LIUSB		0xd780	FTDI compatible adapter
+product FTDI LM3S_DEVEL_BOARD	0xbcd8	FTDI compatible adapter
+product FTDI LM3S_EVAL_BOARD	0xbcd9	FTDI compatible adapter
+product FTDI MASTERDEVEL2	0xf449	FTDI compatible adapter
+product FTDI MHAM_DB9		0xeeed	FTDI compatible adapter
+product FTDI MHAM_IC		0xeeec	FTDI compatible adapter
+product FTDI MHAM_KW		0xeee8	FTDI compatible adapter
+product FTDI MHAM_RS232		0xeeee	FTDI compatible adapter
+product FTDI MHAM_Y6		0xeeea	FTDI compatible adapter
+product FTDI MHAM_Y8		0xeeeb	FTDI compatible adapter
+product FTDI MHAM_Y9		0xeeef	FTDI compatible adapter
+product FTDI MHAM_YS		0xeee9	FTDI compatible adapter
+product FTDI MICRO_CHAMELEON	0xcaa0	FTDI compatible adapter
+product FTDI MTXORB_5		0xfa05	FTDI compatible adapter
+product FTDI MTXORB_6		0xfa06	FTDI compatible adapter
+product FTDI NXTCAM		0xabb8	FTDI compatible adapter
+product FTDI OCEANIC		0xf460	FTDI compatible adapter
+product FTDI OOCDLINK		0xbaf8	FTDI compatible adapter
+product FTDI OPENDCC		0xbfd8	FTDI compatible adapter
+product FTDI OPENDCC_GATEWAY	0xbfdb	FTDI compatible adapter
+product FTDI OPENDCC_GBM	0xbfdc	FTDI compatible adapter
+product FTDI OPENDCC_SNIFFER	0xbfd9	FTDI compatible adapter
+product FTDI OPENDCC_THROTTLE	0xbfda	FTDI compatible adapter
+product FTDI PCDJ_DAC2		0xfa88	FTDI compatible adapter
+product FTDI PERLE_ULTRAPORT	0xf0c0	FTDI compatible adapter
+product FTDI PHI_FISCO		0xe40b	FTDI compatible adapter
+product FTDI PIEGROUP		0xf208	FTDI compatible adapter
+product FTDI PROPOX_JTAGCABLEII	0xd738	FTDI compatible adapter
+product FTDI R2000KU_TRUE_RNG	0xfb80	FTDI compatible adapter
+product FTDI R2X0		0xfc71	FTDI compatible adapter
+product FTDI RELAIS		0xfa10	FTDI compatible adapter
+product FTDI REU_TINY		0xed22	FTDI compatible adapter
+product FTDI RMP200		0xe729	FTDI compatible adapter
+product FTDI RM_CANVIEW		0xfd60	FTDI compatible adapter
+product FTDI RRCIRKITS_LOCOBUFFER	0xc7d0	FTDI compatible adapter
+product FTDI SCIENCESCOPE_HS_LOGBOOK	0xff1d	FTDI compatible adapter
+product FTDI SCIENCESCOPE_LOGBOOKML	0xff18	FTDI compatible adapter
+product FTDI SCIENCESCOPE_LS_LOGBOOK	0xff1c	FTDI compatible adapter
+product FTDI SCS_DEVICE_0	0xd010	FTDI compatible adapter
+product FTDI SCS_DEVICE_1	0xd011	FTDI compatible adapter
+product FTDI SCS_DEVICE_2	0xd012	FTDI compatible adapter
+product FTDI SCS_DEVICE_3	0xd013	FTDI compatible adapter
+product FTDI SCS_DEVICE_4	0xd014	FTDI compatible adapter
+product FTDI SCS_DEVICE_5	0xd015	FTDI compatible adapter
+product FTDI SCS_DEVICE_6	0xd016	FTDI compatible adapter
+product FTDI SCS_DEVICE_7	0xd017	FTDI compatible adapter
+product FTDI SDMUSBQSS		0xf448	FTDI compatible adapter
+product FTDI SIGNALYZER_SH2	0xbca2	FTDI compatible adapter
+product FTDI SIGNALYZER_SH4	0xbca4	FTDI compatible adapter
+product FTDI SIGNALYZER_SLITE	0xbca1	FTDI compatible adapter
+product FTDI SIGNALYZER_ST	0xbca0	FTDI compatible adapter
+product FTDI SPECIAL_1		0xfc70	FTDI compatible adapter
+product FTDI SPECIAL_3		0xfc72	FTDI compatible adapter
+product FTDI SPECIAL_4		0xfc73	FTDI compatible adapter
+product FTDI SPROG_II		0xf0c8	FTDI compatible adapter
+product FTDI SR_RADIO		0x9379	FTDI compatible adapter
+product FTDI SUUNTO_SPORTS	0xf680	FTDI compatible adapter
+product FTDI TAVIR_STK500	0xfa33	FTDI compatible adapter
+product FTDI TERATRONIK_D2XX	0xec89	FTDI compatible adapter
+product FTDI TERATRONIK_VCP	0xec88	FTDI compatible adapter
+product FTDI THORLABS		0xfaf0	FTDI compatible adapter
+product FTDI TNC_X		0xebe0	FTDI compatible adapter
+product FTDI TTUSB		0xff20	FTDI compatible adapter
+product FTDI USBX_707		0xf857	FTDI compatible adapter
+product FTDI USINT_CAT		0xb810	FTDI compatible adapter
+product FTDI USINT_RS232	0xb812	FTDI compatible adapter
+product FTDI USINT_WKEY		0xb811	FTDI compatible adapter
+product FTDI VARDAAN		0xf070	FTDI compatible adapter
+product FTDI VNHCPCUSB_D	0xfe38	FTDI compatible adapter
+product FTDI WESTREX_MODEL_777		0xdc00	FTDI compatible adapter
+product FTDI WESTREX_MODEL_8900F	0xdc01	FTDI compatible adapter
+product FTDI XF_547		0xfc0a	FTDI compatible adapter
+product FTDI XF_640		0xfc0e	FTDI compatible adapter
+product FTDI XF_642		0xfc0f	FTDI compatible adapter
+product FTDI XM_RADIO		0x937a	FTDI compatible adapter
+product FTDI YEI_SERVOCENTER31	0xe050	FTDI compatible adapter
=20
 /* Fuji photo products */
 product FUJIPHOTO MASS0100	0x0100	Mass Storage
@@ -1659,7 +1941,7 @@
 product GARMIN IQUE_3600	0x0004	iQue 3600
=20
 /* Gemalto products */
-product GEMALTO PROXPU		0x5501	Prox-PU/CU
+product GEMALTO PROXPU		0x5501	Prox-PU/CU RFID Card Reader
=20
 /* General Instruments (Motorola) products */
 product GENERALINSTMNTS SB5100	0x5100	SURFboard SB5100 Cable modem
@@ -1707,6 +1989,9 @@
 /* G.Mate, Inc products */
 product GMATE YP3X00		0x1001	YP3X00 PDA
=20
+/* GN Otometrics */
+product GNOTOMETRICS USB	0x0010	FTDI compatible adapter
+
 /* GoHubs products */
 product GOHUBS GOCOM232		0x1001	GoCOM232 Serial
=20
@@ -1909,6 +2194,22 @@
 /* IBM Corporation */
 product IBM USBCDROMDRIVE	0x4427	USB CD-ROM Drive
=20
+/* Icom products */
+product ICOM SP1		0x0004	FTDI compatible adapter
+product ICOM OPC_U_UC		0x0018	FTDI compatible adapter
+product ICOM RP2C1		0x0009	FTDI compatible adapter
+product ICOM RP2C2		0x000a	FTDI compatible adapter
+product ICOM RP2D		0x000b	FTDI compatible adapter
+product ICOM RP2KVR		0x0013	FTDI compatible adapter
+product ICOM RP2KVT		0x0012	FTDI compatible adapter
+product ICOM RP2VR		0x000d	FTDI compatible adapter
+product ICOM RP2VT		0x000c	FTDI compatible adapter
+product ICOM RP4KVR		0x0011	FTDI compatible adapter
+product ICOM RP4KVT		0x0010	FTDI compatible adapter
+
+/* ID-tech products */
+product IDTECH IDT1221U		0x0300	FTDI compatible adapter
+
 /* Imagination Technologies products */
 product IMAGINATION DBX1	0x2107	DBX1 DSP core
=20
@@ -1933,6 +2234,10 @@
 product INTEL2 IRMH        	0x0020	Integrated Rate Matching Hub
 product INTEL2 IRMH2        	0x0024	Integrated Rate Matching Hub
=20
+/* Interbiometric products */
+product INTERBIOMETRICS IOBOARD		0x1002	FTDI compatible adapter
+product INTERBIOMETRICS MINI_IOBOARD		0x1006	FTDI compatible adapter
+
 /* Intersil products */
 product INTERSIL PRISM_GT	0x1000	PrismGT USB 2.0 WLAN
 product INTERSIL PRISM_2X	0x3642	Prism2.x or Atmel WLAN
@@ -1964,6 +2269,9 @@
 product IOMEGA ZIP100		0x0001	Zip 100
 product IOMEGA ZIP250		0x0030	Zip 250
=20
+/* Ionic products */
+product IONICS PLUGCOMPUTER		0x0102	FTDI compatible adapter
+
 /* Integrated System Solution Corp. products */
 product ISSC ISSCBTA		0x1001	Bluetooth USB Adapter
=20
@@ -1981,6 +2289,9 @@
 /* Jaton products */
 product JATON EDA		0x5704	Ethernet
=20
+/* Jeti products */
+product JETI SPC1201		0x04b2	FTDI compatible adapter
+
 /* JMicron products */
 product JMICRON JM20336		0x2336	USB to SATA Bridge
 product JMICRON JM20337		0x2338	USB to ATA/ATAPI Bridge
@@ -1992,6 +2303,10 @@
 /* JRC products */
 product JRC AH_J3001V_J3002V	0x0001	AirH PHONE AH-J3001V/J3002V
=20
+/* Kamstrrup products */
+product KAMSTRUP OPTICALEYE	0x0001	Optical Eye/3-wire
+product KAMSTRUP MBUS_250D	0x0005	M-Bus Master MultiPort 250D
+
 /* Kawatsu products */
 product KAWATSU MH4000P		0x0003	MiniHub 4000P
=20
@@ -2040,6 +2355,10 @@
 product KLSI DUH3E10BT		0x0008	USB Ethernet
 product KLSI DUH3E10BTN		0x0009	USB Ethernet
=20
+/* Kobil products */
+product KOBIL CONV_B1		0x2020	FTDI compatible adapter
+product KOBIL CONV_KAAN		0x2021	FTDI compatible adapter
+
 /* Kodak products */
 product KODAK DC220		0x0100	Digital Science DC220
 product KODAK DC260		0x0110	Digital Science DC260
@@ -2074,6 +2393,9 @@
 product LACIE HD		0xa601	Hard Disk
 product LACIE CDRW		0xa602	CD R/W
=20
+/* Larsen and Brusgaard products */
+product LARSENBRUSGAARD ALTITRACK	0x0001	FTDI compatible adapter
+
 /* Leadtek products */
 product LEADTEK 9531		0x2101	9531 GPS
=20
@@ -2087,6 +2409,11 @@
 /* Liebert products */
 product LIEBERT POWERSURE_PXT	0xffff	PowerSure Personal XT
=20
+/* Link Instruments Inc. products */
+product	LINKINSTRUMENTS MSO19	0xf190	Link Instruments MSO-19
+product	LINKINSTRUMENTS MSO28	0xf280	Link Instruments MSO-28
+product	LINKINSTRUMENTS MSO28_2	0xf281	Link Instruments MSO-28
+
 /* Linksys products */
 product LINKSYS MAUSB2		0x0105	Camedia MAUSB-2
 product LINKSYS USB10TX1	0x200c	USB10TX
@@ -2167,7 +2494,255 @@
 product MARVELL SHEEVAPLUG	0x9e8f	SheevaPlug serial interface
=20
 /* Matrix Orbital products */
+product MATRIXORBITAL FTDI_RANGE_0100		0x0100	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0101		0x0101	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0102		0x0102	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0103		0x0103	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0104		0x0104	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0105		0x0105	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0106		0x0106	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0107		0x0107	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0108		0x0108	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0109		0x0109	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_010A		0x010a	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_010B		0x010b	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_010C		0x010c	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_010D		0x010d	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_010E		0x010e	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_010F		0x010f	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0110		0x0110	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0111		0x0111	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0112		0x0112	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0113		0x0113	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0114		0x0114	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0115		0x0115	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0116		0x0116	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0117		0x0117	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0118		0x0118	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0119		0x0119	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_011A		0x011a	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_011B		0x011b	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_011C		0x011c	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_011D		0x011d	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_011E		0x011e	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_011F		0x011f	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0120		0x0120	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0121		0x0121	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0122		0x0122	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0123		0x0123	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0124		0x0124	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0125		0x0125	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0126		0x0126	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0128		0x0128	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0129		0x0129	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_012A		0x012a	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_012B		0x012b	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_012D		0x012d	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_012E		0x012e	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_012F		0x012f	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0130		0x0130	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0131		0x0131	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0132		0x0132	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0133		0x0133	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0134		0x0134	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0135		0x0135	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0136		0x0136	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0137		0x0137	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0138		0x0138	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0139		0x0139	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_013A		0x013a	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_013B		0x013b	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_013C		0x013c	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_013D		0x013d	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_013E		0x013e	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_013F		0x013f	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0140		0x0140	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0141		0x0141	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0142		0x0142	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0143		0x0143	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0144		0x0144	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0145		0x0145	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0146		0x0146	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0147		0x0147	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0148		0x0148	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0149		0x0149	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_014A		0x014a	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_014B		0x014b	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_014C		0x014c	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_014D		0x014d	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_014E		0x014e	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_014F		0x014f	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0150		0x0150	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0151		0x0151	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0152		0x0152	FTDI compatible adapter
 product MATRIXORBITAL MOUA	0x0153	Martrix Orbital MOU-Axxxx LCD displays
+product MATRIXORBITAL FTDI_RANGE_0159		0x0159	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_015A		0x015a	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_015B		0x015b	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_015C		0x015c	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_015D		0x015d	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_015E		0x015e	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_015F		0x015f	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0160		0x0160	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0161		0x0161	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0162		0x0162	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0163		0x0163	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0164		0x0164	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0165		0x0165	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0166		0x0166	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0167		0x0167	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0168		0x0168	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0169		0x0169	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_016A		0x016a	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_016B		0x016b	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_016C		0x016c	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_016D		0x016d	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_016E		0x016e	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_016F		0x016f	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0170		0x0170	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0171		0x0171	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0172		0x0172	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0173		0x0173	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0174		0x0174	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0175		0x0175	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0176		0x0176	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0177		0x0177	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0178		0x0178	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0179		0x0179	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_017A		0x017a	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_017B		0x017b	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_017C		0x017c	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_017D		0x017d	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_017E		0x017e	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_017F		0x017f	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0180		0x0180	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0181		0x0181	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0182		0x0182	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0183		0x0183	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0184		0x0184	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0185		0x0185	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0186		0x0186	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0187		0x0187	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0188		0x0188	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0189		0x0189	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_018A		0x018a	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_018B		0x018b	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_018C		0x018c	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_018D		0x018d	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_018E		0x018e	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_018F		0x018f	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0190		0x0190	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0191		0x0191	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0192		0x0192	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0193		0x0193	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0194		0x0194	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0195		0x0195	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0196		0x0196	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0197		0x0197	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0198		0x0198	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_0199		0x0199	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_019A		0x019a	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_019B		0x019b	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_019C		0x019c	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_019D		0x019d	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_019E		0x019e	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_019F		0x019f	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01A0		0x01a0	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01A1		0x01a1	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01A2		0x01a2	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01A3		0x01a3	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01A4		0x01a4	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01A5		0x01a5	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01A6		0x01a6	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01A7		0x01a7	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01A8		0x01a8	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01A9		0x01a9	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01AA		0x01aa	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01AB		0x01ab	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01AC		0x01ac	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01AD		0x01ad	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01AE		0x01ae	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01AF		0x01af	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01B0		0x01b0	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01B1		0x01b1	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01B2		0x01b2	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01B3		0x01b3	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01B4		0x01b4	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01B5		0x01b5	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01B6		0x01b6	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01B7		0x01b7	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01B8		0x01b8	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01B9		0x01b9	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01BA		0x01ba	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01BB		0x01bb	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01BC		0x01bc	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01BD		0x01bd	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01BE		0x01be	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01BF		0x01bf	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01C0		0x01c0	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01C1		0x01c1	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01C2		0x01c2	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01C3		0x01c3	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01C4		0x01c4	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01C5		0x01c5	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01C6		0x01c6	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01C7		0x01c7	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01C8		0x01c8	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01C9		0x01c9	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01CA		0x01ca	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01CB		0x01cb	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01CC		0x01cc	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01CD		0x01cd	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01CE		0x01ce	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01CF		0x01cf	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01D0		0x01d0	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01D1		0x01d1	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01D2		0x01d2	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01D3		0x01d3	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01D4		0x01d4	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01D5		0x01d5	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01D6		0x01d6	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01D7		0x01d7	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01D8		0x01d8	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01D9		0x01d9	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01DA		0x01da	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01DB		0x01db	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01DC		0x01dc	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01DD		0x01dd	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01DE		0x01de	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01DF		0x01df	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01E0		0x01e0	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01E1		0x01e1	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01E2		0x01e2	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01E3		0x01e3	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01E4		0x01e4	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01E5		0x01e5	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01E6		0x01e6	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01E7		0x01e7	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01E8		0x01e8	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01E9		0x01e9	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01EA		0x01ea	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01EB		0x01eb	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01EC		0x01ec	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01ED		0x01ed	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01EE		0x01ee	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01EF		0x01ef	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01F0		0x01f0	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01F1		0x01f1	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01F2		0x01f2	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01F3		0x01f3	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01F4		0x01f4	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01F5		0x01f5	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01F6		0x01f6	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01F7		0x01f7	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01F8		0x01f8	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01F9		0x01f9	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01FA		0x01fa	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01FB		0x01fb	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01FC		0x01fc	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01FD		0x01fd	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01FE		0x01fe	FTDI compatible adapter
+product MATRIXORBITAL FTDI_RANGE_01FF		0x01ff	FTDI compatible adapter
=20
 /* MCT Corp. */
 product MCT HUB0100		0x0100	Hub
@@ -2217,6 +2792,7 @@
 product MERLIN V620             0x1110  Merlin V620
=20
 /* MetaGeek products */
+product METAGEEK TELLSTICK	0x0c30	FTDI compatible adapter
 product METAGEEK WISPY1B	0x083e	MetaGeek Wi-Spy
 product METAGEEK WISPY24X	0x083f	MetaGeek Wi-Spy 2.4x
 product METAGEEK2 WISPYDBX	0x5000	MetaGeek Wi-Spy DBx
@@ -2230,7 +2806,7 @@
=20
 /* MEI products */
 product MEI CASHFLOW_SC		0x1100	Cashflow-SC Cash Acceptor
-product MEI S2000		0x1101	Seies 2000 Combo Acceptor
+product MEI S2000		0x1101	Series 2000 Combo Acceptor
=20
 /* Micro Star International products */
 product MSI BT_DONGLE		0x1967	Bluetooth USB dongle
@@ -2321,6 +2897,7 @@
 product MOBILEACTION MA620	0x0620	MA-620 Infrared Adapter
=20
 /* Mobility products */
+product MOBILITY USB_SERIAL	0x0202	FTDI compatible adapter
 product MOBILITY EA		0x0204	Ethernet
 product MOBILITY EASIDOCK	0x0304	EasiDock Ethernet
=20
@@ -2343,6 +2920,10 @@
 product MOTOROLA4 RT2770	0x9031	RT2770
 product MOTOROLA4 RT3070	0x9032	RT3070
=20
+/* MpMan products */
+product MPMAN MPF400_2		0x25a8	MPF400 Music Player 2Go
+product MPMAN MPF400_1		0x36d0	MPF400 Music Player 1Go
+
 /* MultiTech products */
 product MULTITECH ATLAS		0xf101	MT5634ZBA-USB modem
=20
@@ -2468,6 +3049,10 @@
 product O2MICRO OZ776_HUB	0x7761	OZ776 hub
 product O2MICRO OZ776_CCID_SC	0x7772	OZ776 CCID SC Reader
=20
+/* Olimex products */
+product OLIMEX ARM_USB_OCD		0x0003	FTDI compatible adapter
+product OLIMEX ARM_USB_OCD_H		0x002b	FTDI compatible adapter
+
 /* Olympus products */
 product OLYMPUS C1		0x0102	C-1 Digital Camera
 product OLYMPUS C700		0x0105	C-700 Ultra Zoom
@@ -2570,6 +3155,36 @@
 product PANASONIC SDCAAE	0x1b00	MultiMediaCard
 product PANASONIC TYTP50P6S	0x3900	TY-TP50P6-S 50in Touch Panel
=20
+/* Papouch products */
+product PAPOUCH AD4USB		0x8003	FTDI compatible adapter
+product PAPOUCH AP485		0x0101	FTDI compatible adapter
+product PAPOUCH AP485_2		0x0104	FTDI compatible adapter
+product PAPOUCH DRAK5		0x0700	FTDI compatible adapter
+product PAPOUCH DRAK6		0x1000	FTDI compatible adapter
+product PAPOUCH GMSR		0x8005	FTDI compatible adapter
+product PAPOUCH GMUX		0x8004	FTDI compatible adapter
+product PAPOUCH IRAMP		0x0500	FTDI compatible adapter
+product PAPOUCH LEC		0x0300	FTDI compatible adapter
+product PAPOUCH MU		0x8001	FTDI compatible adapter
+product PAPOUCH QUIDO10X1		0x0b00	FTDI compatible adapter
+product PAPOUCH QUIDO2X16		0x0e00	FTDI compatible adapter
+product PAPOUCH QUIDO2X2		0x0a00	FTDI compatible adapter
+product PAPOUCH QUIDO30X3		0x0c00	FTDI compatible adapter
+product PAPOUCH QUIDO3X32		0x0f00	FTDI compatible adapter
+product PAPOUCH QUIDO4X4		0x0900	FTDI compatible adapter
+product PAPOUCH QUIDO60X3		0x0d00	FTDI compatible adapter
+product PAPOUCH QUIDO8X8		0x0800	FTDI compatible adapter
+product PAPOUCH SB232		0x0301	FTDI compatible adapter
+product PAPOUCH SB422		0x0102	FTDI compatible adapter
+product PAPOUCH SB422_2		0x0105	FTDI compatible adapter
+product PAPOUCH SB485		0x0100	FTDI compatible adapter
+product PAPOUCH SB485C		0x0107	FTDI compatible adapter
+product PAPOUCH SB485S		0x0106	FTDI compatible adapter
+product PAPOUCH SB485_2		0x0103	FTDI compatible adapter
+product PAPOUCH SIMUKEY		0x8002	FTDI compatible adapter
+product PAPOUCH TMU		0x0400	FTDI compatible adapter
+product PAPOUCH UPSUSB		0x8000	FTDI compatible adapter
+
 /* PARA Industrial products */
 product PARA RT3070		0x8888	RT3070
=20
@@ -2647,6 +3262,9 @@
 /* Portsmith products */
 product PORTSMITH EEA		0x3003	Express Ethernet
=20
+/* Posiflex products */
+product POSIFLEX PP7000		0x0300	FTDI compatible adapter
+
 /* Primax products */
 product PRIMAX G2X300		0x0300	G2-200 scanner
 product PRIMAX G2E300		0x0301	G2E-300 scanner
@@ -2695,6 +3313,9 @@
 product QCOM RT2573_3		0x6238	RT2573
 product QCOM RT2870		0x6259	RT2870
=20
+/* QI-hardware */
+product QIHARDWARE JTAGSERIAL		0x0713	FTDI compatible adapter
+
 /* Qisda products */
 product QISDA H21_1		0x4512	3G modem
 product QISDA H21_2		0x4523	3G modem
@@ -2884,6 +3505,10 @@
 product RATOC REXUSB60		0xb000	REX-USB60
 product RATOC REXUSB60F		0xb020	REX-USB60F
=20
+/* RT system products */
+product RTSYSTEMS CT29B		0x9e54	FTDI compatible adapter
+product RTSYSTEMS SERIAL_VX7		0x9e52	FTDI compatible adapter
+
 /* Sagem products */
 product SAGEM USBSERIAL		0x0027	USB-Serial Controller
 product SAGEM XG760A		0x004a	XG-760A
@@ -2922,6 +3547,55 @@
 product SCANLOGIC SL11R		0x0002	SL11R IDE Adapter
 product SCANLOGIC 336CX		0x0300	Phantom 336CX - C3 scanner
=20
+/* Sealevel products */
+product SEALEVEL 2101		0x2101	FTDI compatible adapter
+product SEALEVEL 2102		0x2102	FTDI compatible adapter
+product SEALEVEL 2103		0x2103	FTDI compatible adapter
+product SEALEVEL 2104		0x2104	FTDI compatible adapter
+product SEALEVEL 2106		0x9020	FTDI compatible adapter
+product SEALEVEL 2201_1		0x2211	FTDI compatible adapter
+product SEALEVEL 2201_2		0x2221	FTDI compatible adapter
+product SEALEVEL 2202_1		0x2212	FTDI compatible adapter
+product SEALEVEL 2202_2		0x2222	FTDI compatible adapter
+product SEALEVEL 2203_1		0x2213	FTDI compatible adapter
+product SEALEVEL 2203_2		0x2223	FTDI compatible adapter
+product SEALEVEL 2401_1		0x2411	FTDI compatible adapter
+product SEALEVEL 2401_2		0x2421	FTDI compatible adapter
+product SEALEVEL 2401_3		0x2431	FTDI compatible adapter
+product SEALEVEL 2401_4		0x2441	FTDI compatible adapter
+product SEALEVEL 2402_1		0x2412	FTDI compatible adapter
+product SEALEVEL 2402_2		0x2422	FTDI compatible adapter
+product SEALEVEL 2402_3		0x2432	FTDI compatible adapter
+product SEALEVEL 2402_4		0x2442	FTDI compatible adapter
+product SEALEVEL 2403_1		0x2413	FTDI compatible adapter
+product SEALEVEL 2403_2		0x2423	FTDI compatible adapter
+product SEALEVEL 2403_3		0x2433	FTDI compatible adapter
+product SEALEVEL 2403_4		0x2443	FTDI compatible adapter
+product SEALEVEL 2801_1		0x2811	FTDI compatible adapter
+product SEALEVEL 2801_2		0x2821	FTDI compatible adapter
+product SEALEVEL 2801_3		0x2831	FTDI compatible adapter
+product SEALEVEL 2801_4		0x2841	FTDI compatible adapter
+product SEALEVEL 2801_5		0x2851	FTDI compatible adapter
+product SEALEVEL 2801_6		0x2861	FTDI compatible adapter
+product SEALEVEL 2801_7		0x2871	FTDI compatible adapter
+product SEALEVEL 2801_8		0x2881	FTDI compatible adapter
+product SEALEVEL 2802_1		0x2812	FTDI compatible adapter
+product SEALEVEL 2802_2		0x2822	FTDI compatible adapter
+product SEALEVEL 2802_3		0x2832	FTDI compatible adapter
+product SEALEVEL 2802_4		0x2842	FTDI compatible adapter
+product SEALEVEL 2802_5		0x2852	FTDI compatible adapter
+product SEALEVEL 2802_6		0x2862	FTDI compatible adapter
+product SEALEVEL 2802_7		0x2872	FTDI compatible adapter
+product SEALEVEL 2802_8		0x2882	FTDI compatible adapter
+product SEALEVEL 2803_1		0x2813	FTDI compatible adapter
+product SEALEVEL 2803_2		0x2823	FTDI compatible adapter
+product SEALEVEL 2803_3		0x2833	FTDI compatible adapter
+product SEALEVEL 2803_4		0x2843	FTDI compatible adapter
+product SEALEVEL 2803_5		0x2853	FTDI compatible adapter
+product SEALEVEL 2803_6		0x2863	FTDI compatible adapter
+product SEALEVEL 2803_7		0x2873	FTDI compatible adapter
+product SEALEVEL 2803_8		0x2883	FTDI compatible adapter
+
 /* Senao products */
 product SENAO RT2870_3		0x0605	RT2870
 product SENAO RT2870_4		0x0615	RT2870
@@ -3050,6 +3724,7 @@
 /* Also: Omnidirectional Control Technology products */
 product SIIG DIGIFILMREADER	0x0004	DigiFilm-Combo Reader
 product SIIG WINTERREADER	0x0330	WINTERREADER Reader
+product SIIG2 DK201		0x0103	FTDI compatible adapter
 product SIIG2 USBTOETHER	0x0109	USB TO Ethernet
 product SIIG2 US2308		0x0421	Serial
=20
@@ -3058,10 +3733,10 @@
 product SILICOM GPE		0x0002	Psion Gold Port Ethernet
=20
 /* SI Labs */
-product SILABS	VSTABI		0x0f91	Vstabi
+product SILABS	VSTABI		0x0f91	VStabi Controller
 product SILABS	ARKHAM_DS101_M	0x1101	Arkham DS101 Monitor
 product SILABS	ARKHAM_DS101_A	0x1601	Arkham DS101 Adapter
-product SILABS	BSM7DUSB	0x800a	BSM7-D-USB
+product SILABS	BSM7DUSB	0x800a	SPORTident BSM7-D USB
 product SILABS	POLOLU		0x803b	Pololu Serial
 product SILABS	CYGNAL_DEBUG	0x8044	Cygnal Debug Adapter
 product SILABS	SB_PARAMOUNT_ME	0x8043	Software Bisque Paramount ME
@@ -3070,6 +3745,7 @@
 product SILABS	ARGUSISP	0x8066	Argussoft ISP
 product SILABS	IMS_USB_RS422	0x806f	IMS USB-RS422
 product SILABS	CRUMB128	0x807a	Crumb128 board
+product SILABS	OPTRIS_MSPRO	0x80c4	Optris MSpro LT Thermometer
 product SILABS	DEGREE		0x80ca	Degree Controls Inc
 product SILABS	TRACIENT	0x80dd	Tracient RFID
 product SILABS	TRAQMATE	0x80ed	Track Systems Traqmate
@@ -3082,9 +3758,11 @@
 product SILABS	WMRRIGTALK	0x814b	WMR RIGtalk RT1
 product SILABS	B_G_H3000	0x8156	B&G H3000 Data Cable
 product SILABS	HELICOM		0x815e	Helicomm IP-Link 1220-DVM
+product SILABS	HAMLINKUSB	0x815f	Timewave HamLinkUSB
 product SILABS	AVIT_USB_TTL	0x818b	AVIT Research USB-TTL
-product SILABS	MJS_TOSLINK	0x819f	MJS USB-TOSLINk
+product SILABS	MJS_TOSLINK	0x819f	MJS USB-TOSLINK
 product SILABS	WAVIT		0x81a6	ThinkOptics WavIt
+product SILABS	MULTIPLEX_RC	0x81a9	Multiplex RC adapter
 product SILABS	MSD_DASHHAWK	0x81ac	MSD DashHawk
 product SILABS	INSYS_MODEM	0x81ad	INSYS Modem
 product SILABS	LIPOWSKY_JTAG	0x81c8	Lipowsky Baby-JTAG
@@ -3095,16 +3773,24 @@
 product SILABS	LIPOWSKY_HARP	0x8218	Lipowsky HARP-1
 product SILABS	C2_EDGE_MODEM	0x822b	Commander 2 EDGE(GSM) Modem
 product SILABS	CYGNAL_GPS	0x826b	Cygnal Fasttrax GPS
-product SILABS	TELEGESYS_ETRX2	0x8293	Telegesys ETRX2USB
+product SILABS	TELEGESIS_ETRX2	0x8293	Telegesis ETRX2USB
 product SILABS	PROCYON_AVS	0x82f9	Procyon AVS
 product SILABS	MC35PU		0x8341	MC35pu
 product SILABS	CYGNAL		0x8382	Cygnal
 product SILABS	AMBER_AMB2560	0x83a8	Amber Wireless AMB2560
+product SILABS	DEKTEK_DTAPLUS	0x83d8	DekTec DTA Plus VHF/UHF Booster
 product SILABS	KYOCERA_GPS	0x8411	Kyocera GPS
+product SILABS	IRZ_SG10	0x8418	IRZ SG-10 GSM/GPRS Modem
 product SILABS	BEI_VCP		0x846e	BEI USB Sensor (VCP)
 product SILABS	BALLUFF_RFID	0x8477	Balluff RFID reader
+product SILABS	AC_SERV_IBUS	0x85ea	AC-Services IBUS Interface
+product SILABS	AC_SERV_CIS	0x85eb	AC-Services CIS-IBUS
+product SILABS	AC_SERV_CAN	0x8664	AC-Services CAN Interface
+product SILABS	AC_SERV_OBD	0x8665	AC-Services OBD Interface
 product SILABS	CP2102		0xea60	SILABS USB UART
 product SILABS	CP210X_2	0xea61	CP210x Serial
+product SILABS	CP210X_3	0xea70	CP210x Serial
+product SILABS	CP210X_4	0xea80	CP210x Serial
 product SILABS	INFINITY_MIC	0xea71	Infinity GPS-MIC-1 Radio Monophone
 product SILABS	USBSCOPE50	0xf001	USBscope50
 product SILABS	USBWAVE12	0xf002	USBwave12
@@ -3244,10 +3930,6 @@
 product STELERA E1011		0x1011	3G modem
 product STELERA E1012		0x1012	3G modem
=20
-/* MpMan products */
-product MPMAN MPF400_1		0x36d0	MPF400 Music Player 1Go
-product MPMAN MPF400_2		0x25a8	MPF400 Music Player 2Go
-
 /* STMicroelectronics products */
 product STMICRO BIOCPU		0x2016	Biometric Coprocessor
 product STMICRO COMMUNICATOR	0x7554	USB Communicator
@@ -3270,6 +3952,9 @@
 product SUN MOUSE		0x0100	Type 6 USB mouse
 product SUN KBD_HUB		0x100e	Kbd Hub
=20
+/* Sunplus Innovation Technology Inc. products */
+product SUNPLUS USBMOUSE	0x0007	USB Optical Mouse
+
 /* Super Top products */
 product	SUPERTOP IDE		0x6600	USB-IDE
=20
@@ -3280,11 +3965,20 @@
 /* Teclast products */
 product TECLAST TLC300		0x3203	USB Media Player
=20
+/* Testo products */
+product TESTO USB_INTERFACE	0x0001	FTDI compatible adapter
+
 /* TexTech products */
 product TEXTECH DUMMY		0x0000	Dummy product
 product TEXTECH U2M_1		0x0101	Textech USB MIDI cable
 product TEXTECH U2M_2		0x1806	Textech USB MIDI cable
=20
+/* The Mobility Lab products */
+product TML USB_SERIAL		0x0064	FTDI compatible adapter
+
+/* Thurlby Thandar Instrument products */
+product TTI QL355P		0x03e8	FTDI compatible adapter
+
 /* Supra products */
 product DIAMOND2 SUPRAEXPRESS56K 0x07da	Supra Express 56K modem
 product DIAMOND2 SUPRA2890	0x0b4a	SupraMax 2890 56K Modem
@@ -3409,6 +4103,9 @@
 /* Universal Access products */
 product UNIACCESS PANACHE	0x0101	Panache Surf USB ISDN Adapter
=20
+/* Unknown products */
+product UNKNOWN4 NF_RIC		0x0001	FTDI compatible adapter
+
 /* USI products */
 product USI MC60		0x10c5	MC60 Serial
=20
@@ -3476,6 +4173,10 @@
 product WESTERN MYBOOK		0x0901	MyBook External HDD
 product WESTERN MYPASSWORD	0x0704	MyPassword External HDD
=20
+/* WeTelecom Incorporated */
+product WETELECOM WM_D300	0x6801	Wetelecom CDMA 450 EVDO Rev.B Mobile
+product WETELECOM ZEROCD	0x6803	Wetelecom Mobile Products
+
 /* WIENER Plein & Baus GmbH products */
 product WIENERPLEINBAUS PL512	0x0010	PL512 PSU
 product WIENERPLEINBAUS RCM	0x0011	RCM Remote Control
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/dev/wtap/if_wtap.c
--- a/head/sys/dev/wtap/if_wtap.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/dev/wtap/if_wtap.c	Fri Aug 10 14:19:25 2012 +0300
@@ -29,7 +29,7 @@
  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
  * THE POSSIBILITY OF SUCH DAMAGES.
  *
- * $FreeBSD: head/sys/dev/wtap/if_wtap.c 233184 2012-03-19 13:54:15Z adria=
n $
+ * $FreeBSD: head/sys/dev/wtap/if_wtap.c 238938 2012-07-31 07:22:50Z month=
adar $
  */
 #include "if_wtapvar.h"
 #include <sys/uio.h>    /* uio struct */
@@ -230,8 +230,10 @@
 	struct ieee80211vap *vap =3D arg;
 	struct mbuf *m;
=20
-	KASSERT(vap->iv_state >=3D IEEE80211_S_RUN,
-	    ("not running, state %d", vap->iv_state));
+	if (vap->iv_state < IEEE80211_S_RUN) {
+	    DWTAP_PRINTF("Skip beacon, not running, state %d", vap->iv_state);
+	    return ;
+	}
 	DWTAP_PRINTF("[%d] beacon intrp\n", avp->id);	//burst mode
 	/*
 	 * Update dynamic beacon contents.  If this returns
@@ -289,6 +291,8 @@
 		default:
 			goto bad;
 		}
+	} else if (nstate =3D=3D IEEE80211_S_INIT) {
+		callout_stop(&avp->av_swba);
 	}
 	return 0;
 bad:
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/fs/fifofs/fifo_vnops.c
--- a/head/sys/fs/fifofs/fifo_vnops.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/fs/fifofs/fifo_vnops.c	Fri Aug 10 14:19:25 2012 +0300
@@ -30,7 +30,7 @@
  * SUCH DAMAGE.
  *
  *	@(#)fifo_vnops.c	8.10 (Berkeley) 5/27/95
- * $FreeBSD: head/sys/fs/fifofs/fifo_vnops.c 232823 2012-03-11 15:58:27Z k=
ib $
+ * $FreeBSD: head/sys/fs/fifofs/fifo_vnops.c 238936 2012-07-31 05:48:35Z d=
avidxu $
  */
=20
 #include <sys/param.h>
@@ -59,23 +59,13 @@
  * Notes about locking:
  *   - fi_pipe is invariant since init time.
  *   - fi_readers and fi_writers are protected by the vnode lock.
- *   - fi_wgen and fi_seqcount are protected by the pipe mutex.
  */
 struct fifoinfo {
 	struct pipe *fi_pipe;
 	long	fi_readers;
 	long	fi_writers;
-	int	fi_wgen;
-	int	fi_seqcount;
 };
=20
-#define FIFO_UPDWGEN(fip, pip)	do { \
-	if ((fip)->fi_wgen =3D=3D (fip)->fi_seqcount) 			\
-		(pip)->pipe_state |=3D PIPE_SAMEWGEN;			\
-	else								\
-		(pip)->pipe_state &=3D ~PIPE_SAMEWGEN;			\
-} while (0)
-
 static vop_print_t	fifo_print;
 static vop_open_t	fifo_open;
 static vop_close_t	fifo_close;
@@ -161,7 +151,7 @@
 			return (error);
 		fip =3D malloc(sizeof(*fip), M_VNODE, M_WAITOK);
 		fip->fi_pipe =3D fpipe;
-		fip->fi_wgen =3D fip->fi_readers =3D fip->fi_writers =3D 0;
+		fpipe->pipe_wgen =3D fip->fi_readers =3D fip->fi_writers =3D 0;
  		KASSERT(vp->v_fifoinfo =3D=3D NULL, ("fifo_open: v_fifoinfo race"));
 		vp->v_fifoinfo =3D fip;
 	}
@@ -181,8 +171,7 @@
 			if (fip->fi_writers > 0)
 				wakeup(&fip->fi_writers);
 		}
-		fip->fi_seqcount =3D fip->fi_wgen - fip->fi_writers;
-		FIFO_UPDWGEN(fip, fpipe);
+		fp->f_seqcount =3D fpipe->pipe_wgen - fip->fi_writers;
 	}
 	if (ap->a_mode & FWRITE) {
 		if ((ap->a_mode & O_NONBLOCK) && fip->fi_readers =3D=3D 0) {
@@ -235,8 +224,7 @@
 					fpipe->pipe_state |=3D PIPE_EOF;
 					if (fpipe->pipe_state & PIPE_WANTR)
 						wakeup(fpipe);
-					fip->fi_wgen++;
-					FIFO_UPDWGEN(fip, fpipe);
+					fpipe->pipe_wgen++;
 					PIPE_UNLOCK(fpipe);
 					fifo_cleanup(vp);
 				}
@@ -283,8 +271,11 @@
 		if (fip->fi_readers =3D=3D 0) {
 			PIPE_LOCK(cpipe);
 			cpipe->pipe_state |=3D PIPE_EOF;
-			if (cpipe->pipe_state & PIPE_WANTW)
+			if ((cpipe->pipe_state & PIPE_WANTW)) {
+				cpipe->pipe_state &=3D ~PIPE_WANTW;
 				wakeup(cpipe);
+			}
+			pipeselwakeup(cpipe);
 			PIPE_UNLOCK(cpipe);
 		}
 	}
@@ -293,10 +284,12 @@
 		if (fip->fi_writers =3D=3D 0) {
 			PIPE_LOCK(cpipe);
 			cpipe->pipe_state |=3D PIPE_EOF;
-			if (cpipe->pipe_state & PIPE_WANTR)
+			if ((cpipe->pipe_state & PIPE_WANTR)) {
+				cpipe->pipe_state &=3D ~PIPE_WANTR;
 				wakeup(cpipe);
-			fip->fi_wgen++;
-			FIFO_UPDWGEN(fip, cpipe);
+			}
+			cpipe->pipe_wgen++;
+			pipeselwakeup(cpipe);
 			PIPE_UNLOCK(cpipe);
 		}
 	}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/fs/nfs/nfs_commonport.c
--- a/head/sys/fs/nfs/nfs_commonport.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/fs/nfs/nfs_commonport.c	Fri Aug 10 14:19:25 2012 +0300
@@ -32,7 +32,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/fs/nfs/nfs_commonport.c 231805 2012-02-16 02:=
19:53Z rmacklem $");
+__FBSDID("$FreeBSD: head/sys/fs/nfs/nfs_commonport.c 239039 2012-08-04 18:=
12:54Z kib $");
=20
 /*
  * Functions that need to be different for different versions of BSD
@@ -49,7 +49,6 @@
 #include <vm/vm_kern.h>
 #include <vm/vm_extern.h>
 #include <vm/uma.h>
-#include <vm/uma_int.h>
=20
 extern int nfscl_ticks;
 extern int nfsrv_nfsuserd;
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/fs/nfsclient/nfs_clbio.c
--- a/head/sys/fs/nfsclient/nfs_clbio.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/fs/nfsclient/nfs_clbio.c	Fri Aug 10 14:19:25 2012 +0300
@@ -33,7 +33,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/fs/nfsclient/nfs_clbio.c 237987 2012-07-02 09=
:53:08Z kib $");
+__FBSDID("$FreeBSD: head/sys/fs/nfsclient/nfs_clbio.c 239065 2012-08-05 14=
:11:42Z kib $");
=20
 #include "opt_kdtrace.h"
=20
@@ -47,6 +47,7 @@
 #include <sys/vnode.h>
=20
 #include <vm/vm.h>
+#include <vm/vm_param.h>
 #include <vm/vm_extern.h>
 #include <vm/vm_page.h>
 #include <vm/vm_object.h>
@@ -223,36 +224,8 @@
 			 */
 			;
 		}
-		if (i !=3D ap->a_reqpage) {
-			/*
-			 * Whether or not to leave the page activated is up in
-			 * the air, but we should put the page on a page queue
-			 * somewhere (it already is in the object).  Result:
-			 * It appears that emperical results show that
-			 * deactivating pages is best.
-			 */
-
-			/*
-			 * Just in case someone was asking for this page we
-			 * now tell them that it is ok to use.
-			 */
-			if (!error) {
-				if (m->oflags & VPO_WANTED) {
-					vm_page_lock(m);
-					vm_page_activate(m);
-					vm_page_unlock(m);
-				} else {
-					vm_page_lock(m);
-					vm_page_deactivate(m);
-					vm_page_unlock(m);
-				}
-				vm_page_wakeup(m);
-			} else {
-				vm_page_lock(m);
-				vm_page_free(m);
-				vm_page_unlock(m);
-			}
-		}
+		if (i !=3D ap->a_reqpage)
+			vm_page_readahead_finish(m, error);
 	}
 	VM_OBJECT_UNLOCK(object);
 	return (0);
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/fs/nwfs/nwfs_io.c
--- a/head/sys/fs/nwfs/nwfs_io.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/fs/nwfs/nwfs_io.c	Fri Aug 10 14:19:25 2012 +0300
@@ -23,7 +23,7 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: head/sys/fs/nwfs/nwfs_io.c 228156 2011-11-30 17:39:00Z kib $
+ * $FreeBSD: head/sys/fs/nwfs/nwfs_io.c 239065 2012-08-05 14:11:42Z kib $
  *
  */
 #include <sys/param.h>
@@ -38,6 +38,7 @@
 #include <sys/sysctl.h>
=20
 #include <vm/vm.h>
+#include <vm/vm_param.h>
 #include <vm/vm_page.h>
 #include <vm/vm_extern.h>
 #include <vm/vm_object.h>
@@ -457,36 +458,8 @@
 			    ("nwfs_getpages: page %p is dirty", m));
 		}
=20
-		if (i !=3D ap->a_reqpage) {
-			/*
-			 * Whether or not to leave the page activated is up in
-			 * the air, but we should put the page on a page queue
-			 * somewhere (it already is in the object).  Result:
-			 * It appears that emperical results show that
-			 * deactivating pages is best.
-			 */
-
-			/*
-			 * Just in case someone was asking for this page we
-			 * now tell them that it is ok to use.
-			 */
-			if (!error) {
-				if (m->oflags & VPO_WANTED) {
-					vm_page_lock(m);
-					vm_page_activate(m);
-					vm_page_unlock(m);
-				} else {
-					vm_page_lock(m);
-					vm_page_deactivate(m);
-					vm_page_unlock(m);
-				}
-				vm_page_wakeup(m);
-			} else {
-				vm_page_lock(m);
-				vm_page_free(m);
-				vm_page_unlock(m);
-			}
-		}
+		if (i !=3D ap->a_reqpage)
+			vm_page_readahead_finish(m, error);
 	}
 	VM_OBJECT_UNLOCK(object);
 	return 0;
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/fs/smbfs/smbfs_io.c
--- a/head/sys/fs/smbfs/smbfs_io.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/fs/smbfs/smbfs_io.c	Fri Aug 10 14:19:25 2012 +0300
@@ -23,7 +23,7 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: head/sys/fs/smbfs/smbfs_io.c 228156 2011-11-30 17:39:00Z kib $
+ * $FreeBSD: head/sys/fs/smbfs/smbfs_io.c 239065 2012-08-05 14:11:42Z kib $
  *
  */
 #include <sys/param.h>
@@ -41,6 +41,7 @@
 #include <sys/vmmeter.h>
=20
 #include <vm/vm.h>
+#include <vm/vm_param.h>
 #include <vm/vm_page.h>
 #include <vm/vm_extern.h>
 #include <vm/vm_object.h>
@@ -521,36 +522,8 @@
 			;
 		}
=20
-		if (i !=3D reqpage) {
-			/*
-			 * Whether or not to leave the page activated is up in
-			 * the air, but we should put the page on a page queue
-			 * somewhere (it already is in the object).  Result:
-			 * It appears that emperical results show that
-			 * deactivating pages is best.
-			 */
-
-			/*
-			 * Just in case someone was asking for this page we
-			 * now tell them that it is ok to use.
-			 */
-			if (!error) {
-				if (m->oflags & VPO_WANTED) {
-					vm_page_lock(m);
-					vm_page_activate(m);
-					vm_page_unlock(m);
-				} else {
-					vm_page_lock(m);
-					vm_page_deactivate(m);
-					vm_page_unlock(m);
-				}
-				vm_page_wakeup(m);
-			} else {
-				vm_page_lock(m);
-				vm_page_free(m);
-				vm_page_unlock(m);
-			}
-		}
+		if (i !=3D reqpage)
+			vm_page_readahead_finish(m, error);
 	}
 	VM_OBJECT_UNLOCK(object);
 	return 0;
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/fs/tmpfs/tmpfs_subr.c
--- a/head/sys/fs/tmpfs/tmpfs_subr.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/fs/tmpfs/tmpfs_subr.c	Fri Aug 10 14:19:25 2012 +0300
@@ -34,7 +34,7 @@
  * Efficient memory file system supporting functions.
  */
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/fs/tmpfs/tmpfs_subr.c 234422 2012-04-18 15:22=
:08Z jh $");
+__FBSDID("$FreeBSD: head/sys/fs/tmpfs/tmpfs_subr.c 239065 2012-08-05 14:11=
:42Z kib $");
=20
 #include <sys/param.h>
 #include <sys/namei.h>
@@ -47,6 +47,7 @@
 #include <sys/vmmeter.h>
=20
 #include <vm/vm.h>
+#include <vm/vm_param.h>
 #include <vm/vm_object.h>
 #include <vm/vm_page.h>
 #include <vm/vm_pageout.h>
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/fs/tmpfs/tmpfs_vnops.c
--- a/head/sys/fs/tmpfs/tmpfs_vnops.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/fs/tmpfs/tmpfs_vnops.c	Fri Aug 10 14:19:25 2012 +0300
@@ -34,7 +34,7 @@
  * tmpfs vnode interface.
  */
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/fs/tmpfs/tmpfs_vnops.c 234607 2012-04-23 14:1=
0:34Z trasz $");
+__FBSDID("$FreeBSD: head/sys/fs/tmpfs/tmpfs_vnops.c 239065 2012-08-05 14:1=
1:42Z kib $");
=20
 #include <sys/param.h>
 #include <sys/fcntl.h>
@@ -51,6 +51,7 @@
 #include <sys/vnode.h>
=20
 #include <vm/vm.h>
+#include <vm/vm_param.h>
 #include <vm/vm_object.h>
 #include <vm/vm_page.h>
 #include <vm/vm_pager.h>
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/geom/gate/g_gate.c
--- a/head/sys/geom/gate/g_gate.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/geom/gate/g_gate.c	Fri Aug 10 14:19:25 2012 +0300
@@ -29,7 +29,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/geom/gate/g_gate.c 238119 2012-07-04 20:16:28=
Z pjd $");
+__FBSDID("$FreeBSD: head/sys/geom/gate/g_gate.c 239131 2012-08-07 18:50:33=
Z trociny $");
=20
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -398,7 +398,9 @@
 	sc =3D gp->softc;
 	if (sc =3D=3D NULL || pp !=3D NULL || cp !=3D NULL)
 		return;
-	g_gate_hold(sc->sc_unit, NULL);
+	sc =3D g_gate_hold(sc->sc_unit, NULL);
+	if (sc =3D=3D NULL)
+		return;
 	if ((sc->sc_flags & G_GATE_FLAG_READONLY) !=3D 0) {
 		sbuf_printf(sb, "%s<access>%s</access>\n", indent, "read-only");
 	} else if ((sc->sc_flags & G_GATE_FLAG_WRITEONLY) !=3D 0) {
@@ -470,31 +472,6 @@
 		return (EINVAL);
 	}
=20
-	g_topology_lock();
-
-	if (ggio->gctl_readprov[0] =3D=3D '\0') {
-		ropp =3D NULL;
-	} else {
-		ropp =3D g_provider_by_name(ggio->gctl_readprov);
-		if (ropp =3D=3D NULL) {
-			g_topology_unlock();
-			G_GATE_DEBUG(1, "Provider %s doesn't exist.",
-			    ggio->gctl_readprov);
-			return (EINVAL);
-		}
-		if ((ggio->gctl_readoffset % ggio->gctl_sectorsize) !=3D 0) {
-			g_topology_unlock();
-			G_GATE_DEBUG(1, "Invalid read offset.");
-			return (EINVAL);
-		}
-		if (ggio->gctl_mediasize + ggio->gctl_readoffset >
-		    ropp->mediasize) {
-			g_topology_unlock();
-			G_GATE_DEBUG(1, "Invalid read offset or media size.");
-			return (EINVAL);
-		}
-	}
-
 	sc =3D malloc(sizeof(*sc), M_GATE, M_WAITOK | M_ZERO);
 	sc->sc_flags =3D (ggio->gctl_flags & G_GATE_USERFLAGS);
 	strlcpy(sc->sc_info, ggio->gctl_info, sizeof(sc->sc_info));
@@ -509,6 +486,55 @@
 	sc->sc_timeout =3D ggio->gctl_timeout;
 	callout_init(&sc->sc_callout, CALLOUT_MPSAFE);
=20
+	mtx_lock(&g_gate_units_lock);
+	sc->sc_unit =3D g_gate_getunit(ggio->gctl_unit, &error);
+	if (sc->sc_unit < 0)
+		goto fail1;
+	if (ggio->gctl_unit =3D=3D G_GATE_NAME_GIVEN)
+		snprintf(name, sizeof(name), "%s", ggio->gctl_name);
+	else {
+		snprintf(name, sizeof(name), "%s%d", G_GATE_PROVIDER_NAME,
+		    sc->sc_unit);
+	}
+	/* Check for name collision. */
+	for (unit =3D 0; unit < g_gate_maxunits; unit++) {
+		if (g_gate_units[unit] =3D=3D NULL)
+			continue;
+		if (strcmp(name, g_gate_units[unit]->sc_name) !=3D 0)
+			continue;
+		error =3D EEXIST;
+		goto fail1;
+	}
+	sc->sc_name =3D name;
+	g_gate_units[sc->sc_unit] =3D sc;
+	g_gate_nunits++;
+	mtx_unlock(&g_gate_units_lock);
+
+	g_topology_lock();
+
+	if (ggio->gctl_readprov[0] =3D=3D '\0') {
+		ropp =3D NULL;
+	} else {
+		ropp =3D g_provider_by_name(ggio->gctl_readprov);
+		if (ropp =3D=3D NULL) {
+			G_GATE_DEBUG(1, "Provider %s doesn't exist.",
+			    ggio->gctl_readprov);
+			error =3D EINVAL;
+			goto fail2;
+		}
+		if ((ggio->gctl_readoffset % ggio->gctl_sectorsize) !=3D 0) {
+			G_GATE_DEBUG(1, "Invalid read offset.");
+			error =3D EINVAL;
+			goto fail2;
+		}
+		if (ggio->gctl_mediasize + ggio->gctl_readoffset >
+		    ropp->mediasize) {
+			G_GATE_DEBUG(1, "Invalid read offset or media size.");
+			error =3D EINVAL;
+			goto fail2;
+		}
+	}
+
 	gp =3D g_new_geomf(&g_gate_class, "%s", name);
 	gp->start =3D g_gate_start;
 	gp->access =3D g_gate_access;
@@ -521,70 +547,18 @@
 		error =3D g_attach(cp, ropp);
 		if (error !=3D 0) {
 			G_GATE_DEBUG(1, "Unable to attach to %s.", ropp->name);
-		} else {
-			error =3D g_access(cp, 1, 0, 0);
-			if (error !=3D 0) {
-				G_GATE_DEBUG(1, "Unable to access %s.",
-				    ropp->name);
-				g_detach(cp);
-			}
+			goto fail3;
 		}
+		error =3D g_access(cp, 1, 0, 0);
 		if (error !=3D 0) {
-			g_destroy_consumer(cp);
-			g_destroy_geom(gp);
-			g_topology_unlock();
-			mtx_destroy(&sc->sc_queue_mtx);
-			free(sc, M_GATE);
-			return (error);
+			G_GATE_DEBUG(1, "Unable to access %s.", ropp->name);
+			g_detach(cp);
+			goto fail3;
 		}
 		sc->sc_readcons =3D cp;
 		sc->sc_readoffset =3D ggio->gctl_readoffset;
 	}
=20
-	mtx_lock(&g_gate_units_lock);
-	sc->sc_unit =3D g_gate_getunit(ggio->gctl_unit, &error);
-	if (sc->sc_unit < 0) {
-		mtx_unlock(&g_gate_units_lock);
-		if (sc->sc_readcons !=3D NULL) {
-			(void)g_access(sc->sc_readcons, -1, 0, 0);
-			g_detach(sc->sc_readcons);
-			g_destroy_consumer(sc->sc_readcons);
-		}
-		g_destroy_geom(gp);
-		g_topology_unlock();
-		mtx_destroy(&sc->sc_queue_mtx);
-		free(sc, M_GATE);
-		return (error);
-	}
-	if (ggio->gctl_unit =3D=3D G_GATE_NAME_GIVEN)
-		snprintf(name, sizeof(name), "%s", ggio->gctl_name);
-	else {
-		snprintf(name, sizeof(name), "%s%d", G_GATE_PROVIDER_NAME,
-		    sc->sc_unit);
-	}
-	/* Check for name collision. */
-	for (unit =3D 0; unit < g_gate_maxunits; unit++) {
-		if (g_gate_units[unit] =3D=3D NULL)
-			continue;
-		if (strcmp(name, g_gate_units[unit]->sc_name) !=3D 0)
-			continue;
-		mtx_unlock(&g_gate_units_lock);
-		if (sc->sc_readcons !=3D NULL) {
-			(void)g_access(sc->sc_readcons, -1, 0, 0);
-			g_detach(sc->sc_readcons);
-			g_destroy_consumer(sc->sc_readcons);
-		}
-		g_destroy_geom(gp);
-		g_topology_unlock();
-		mtx_destroy(&sc->sc_queue_mtx);
-		free(sc, M_GATE);
-		return (EEXIST);
-	}
-	sc->sc_name =3D name;
-	g_gate_units[sc->sc_unit] =3D sc;
-	g_gate_nunits++;
-	mtx_unlock(&g_gate_units_lock);
-
 	ggio->gctl_unit =3D sc->sc_unit;
=20
 	pp =3D g_new_providerf(gp, "%s", name);
@@ -604,6 +578,20 @@
 		    g_gate_guard, sc);
 	}
 	return (0);
+fail3:
+	g_destroy_consumer(cp);
+	g_destroy_geom(gp);
+fail2:
+	g_topology_unlock();
+	mtx_lock(&g_gate_units_lock);
+	g_gate_units[sc->sc_unit] =3D NULL;
+	KASSERT(g_gate_nunits > 0, ("negative g_gate_nunits?"));
+	g_gate_nunits--;
+fail1:
+	mtx_unlock(&g_gate_units_lock);
+	mtx_destroy(&sc->sc_queue_mtx);
+	free(sc, M_GATE);
+	return (error);
 }
=20
 static int
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/geom/geom.h
--- a/head/sys/geom/geom.h	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/geom/geom.h	Fri Aug 10 14:19:25 2012 +0300
@@ -32,7 +32,7 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: head/sys/geom/geom.h 238559 2012-07-17 22:16:10Z ken $
+ * $FreeBSD: head/sys/geom/geom.h 238886 2012-07-29 11:51:48Z mav $
  */
=20
 #ifndef _GEOM_GEOM_H_
@@ -174,7 +174,9 @@
 	struct g_provider	*provider;
 	LIST_ENTRY(g_consumer)	consumers;	/* XXX: better name */
 	int			acr, acw, ace;
-	int			spoiled;
+	int			flags;
+#define G_CF_SPOILED		0x1
+#define G_CF_ORPHAN		0x4
 	struct devstat		*stat;
 	u_int			nstart, nend;
=20
@@ -247,6 +249,8 @@
 int g_waitfor_event(g_event_t *func, void *arg, int flag, ...);
 void g_cancel_event(void *ref);
 int g_attr_changed(struct g_provider *pp, const char *attr, int flag);
+int g_media_changed(struct g_provider *pp, int flag);
+int g_media_gone(struct g_provider *pp, int flag);
 void g_orphan_provider(struct g_provider *pp, int error);
 void g_waitidlelock(void);
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/geom/geom_dev.c
--- a/head/sys/geom/geom_dev.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/geom/geom_dev.c	Fri Aug 10 14:19:25 2012 +0300
@@ -34,7 +34,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/geom/geom_dev.c 238171 2012-07-06 15:46:38Z t=
rasz $");
+__FBSDID("$FreeBSD: head/sys/geom/geom_dev.c 238886 2012-07-29 11:51:48Z m=
av $");
=20
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -43,6 +43,7 @@
 #include <sys/conf.h>
 #include <sys/ctype.h>
 #include <sys/bio.h>
+#include <sys/bus.h>
 #include <sys/lock.h>
 #include <sys/mutex.h>
 #include <sys/proc.h>
@@ -105,6 +106,21 @@
 static void
 g_dev_attrchanged(struct g_consumer *cp, const char *attr)
 {
+	struct cdev *dev;
+	char buf[SPECNAMELEN + 6];
+
+	if (strcmp(attr, "GEOM::media") =3D=3D 0) {
+		dev =3D cp->geom->softc;
+		snprintf(buf, sizeof(buf), "cdev=3D%s", dev->si_name);
+		devctl_notify_f("DEVFS", "CDEV", "MEDIACHANGE", buf, M_WAITOK);
+		dev =3D cp->cp_alias_dev;
+		if (dev !=3D NULL) {
+			snprintf(buf, sizeof(buf), "cdev=3D%s", dev->si_name);
+			devctl_notify_f("DEVFS", "CDEV", "MEDIACHANGE", buf,
+			    M_WAITOK);
+		}
+		return;
+	}
=20
 	if (strcmp(attr, "GEOM::physpath") !=3D 0)
 		return;
@@ -119,7 +135,6 @@
 		    g_io_getattr("GEOM::physpath", cp, &physpath_len, physpath);
 		g_access(cp, -1, 0, 0);
 		if (error =3D=3D 0 && strlen(physpath) !=3D 0) {
-			struct cdev *dev;
 			struct cdev *old_alias_dev;
 			struct cdev **alias_devp;
=20
@@ -161,9 +176,6 @@
=20
 	g_trace(G_T_TOPOLOGY, "dev_taste(%s,%s)", mp->name, pp->name);
 	g_topology_assert();
-	LIST_FOREACH(cp, &pp->consumers, consumers)
-		if (cp->geom->class =3D=3D mp)
-			return (NULL);
 	gp =3D g_new_geomf(mp, pp->name);
 	cp =3D g_new_consumer(gp);
 	error =3D g_attach(cp, pp);
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/geom/geom_disk.c
--- a/head/sys/geom/geom_disk.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/geom/geom_disk.c	Fri Aug 10 14:19:25 2012 +0300
@@ -34,7 +34,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/geom/geom_disk.c 238216 2012-07-07 21:28:31Z =
trasz $");
+__FBSDID("$FreeBSD: head/sys/geom/geom_disk.c 238886 2012-07-29 11:51:48Z =
mav $");
=20
 #include "opt_geom.h"
=20
@@ -660,6 +660,32 @@
 }
=20
 void
+disk_media_changed(struct disk *dp, int flag)
+{
+	struct g_geom *gp;
+	struct g_provider *pp;
+
+	gp =3D dp->d_geom;
+	if (gp !=3D NULL) {
+		LIST_FOREACH(pp, &gp->provider, provider)
+			g_media_changed(pp, flag);
+	}
+}
+
+void
+disk_media_gone(struct disk *dp, int flag)
+{
+	struct g_geom *gp;
+	struct g_provider *pp;
+
+	gp =3D dp->d_geom;
+	if (gp !=3D NULL) {
+		LIST_FOREACH(pp, &gp->provider, provider)
+			g_media_gone(pp, flag);
+	}
+}
+
+void
 disk_resize(struct disk *dp)
 {
 	struct g_geom *gp;
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/geom/geom_disk.h
--- a/head/sys/geom/geom_disk.h	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/geom/geom_disk.h	Fri Aug 10 14:19:25 2012 +0300
@@ -31,7 +31,7 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: head/sys/geom/geom_disk.h 238216 2012-07-07 21:28:31Z trasz $
+ * $FreeBSD: head/sys/geom/geom_disk.h 238886 2012-07-29 11:51:48Z mav $
  */
=20
 #ifndef _GEOM_GEOM_DISK_H_
@@ -109,6 +109,8 @@
 void disk_destroy(struct disk *disk);
 void disk_gone(struct disk *disk);
 void disk_attr_changed(struct disk *dp, const char *attr, int flag);
+void disk_media_changed(struct disk *dp, int flag);
+void disk_media_gone(struct disk *dp, int flag);
 void disk_resize(struct disk *dp);
=20
 #define DISK_VERSION_00		0x58561059
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/geom/geom_event.c
--- a/head/sys/geom/geom_event.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/geom/geom_event.c	Fri Aug 10 14:19:25 2012 +0300
@@ -39,7 +39,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/geom/geom_event.c 226985 2011-11-01 08:57:49Z=
 mav $");
+__FBSDID("$FreeBSD: head/sys/geom/geom_event.c 238886 2012-07-29 11:51:48Z=
 mav $");
=20
 #include <sys/param.h>
 #include <sys/malloc.h>
@@ -202,14 +202,12 @@
 	 * Tell all consumers the bad news.
 	 * Don't be surprised if they self-destruct.
 	 */
-	cp =3D LIST_FIRST(&pp->consumers);
-	while (cp !=3D NULL) {
-		cp2 =3D LIST_NEXT(cp, consumers);
+	LIST_FOREACH_SAFE(cp, &pp->consumers, consumers, cp2) {
 		KASSERT(cp->geom->orphan !=3D NULL,
 		    ("geom %s has no orphan, class %s",
 		    cp->geom->name, cp->geom->class->name));
+		cp->flags |=3D G_CF_ORPHAN;
 		cp->geom->orphan(cp);
-		cp =3D cp2;
 	}
 	if (LIST_EMPTY(&pp->consumers) && wf)
 		g_destroy_provider(pp);
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/geom/geom_io.c
--- a/head/sys/geom/geom_io.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/geom/geom_io.c	Fri Aug 10 14:19:25 2012 +0300
@@ -34,7 +34,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
+__FBSDID("$FreeBSD: head/sys/geom/geom_io.c 239132 2012-08-07 20:16:10Z ji=
mharris $");
=20
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -177,6 +177,12 @@
 	if (bp2 !=3D NULL) {
 		bp2->bio_parent =3D bp;
 		bp2->bio_cmd =3D bp->bio_cmd;
+		/*
+		 *  BIO_ORDERED flag may be used by disk drivers to enforce
+		 *  ordering restrictions, so this flag needs to be cloned.
+		 *  Other bio flags are not suitable for cloning.
+		 */
+		bp2->bio_flags =3D bp->bio_flags & BIO_ORDERED;
 		bp2->bio_length =3D bp->bio_length;
 		bp2->bio_offset =3D bp->bio_offset;
 		bp2->bio_data =3D bp->bio_data;
@@ -305,6 +311,8 @@
 	/* if provider is marked for error, don't disturb. */
 	if (pp->error)
 		return (pp->error);
+	if (cp->flags & G_CF_ORPHAN)
+		return (ENXIO);
=20
 	switch(bp->bio_cmd) {
 	case BIO_READ:
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/geom/geom_slice.c
--- a/head/sys/geom/geom_slice.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/geom/geom_slice.c	Fri Aug 10 14:19:25 2012 +0300
@@ -34,7 +34,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/geom/geom_slice.c 238198 2012-07-07 17:09:44Z=
 trasz $");
+__FBSDID("$FreeBSD: head/sys/geom/geom_slice.c 238886 2012-07-29 11:51:48Z=
 mav $");
=20
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -466,6 +466,7 @@
 	g_topology_assert();
 	gp =3D cp->geom;
 	g_trace(G_T_TOPOLOGY, "g_slice_spoiled(%p/%s)", cp, gp->name);
+	cp->flags |=3D G_CF_ORPHAN;
 	gsp =3D gp->softc;
 	gp->softc =3D NULL;
 	g_slice_free(gsp);
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/geom/geom_subr.c
--- a/head/sys/geom/geom_subr.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/geom/geom_subr.c	Fri Aug 10 14:19:25 2012 +0300
@@ -34,7 +34,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/geom/geom_subr.c 238565 2012-07-18 07:26:20Z =
trasz $");
+__FBSDID("$FreeBSD: head/sys/geom/geom_subr.c 238886 2012-07-29 11:51:48Z =
mav $");
=20
 #include "opt_ddb.h"
=20
@@ -262,10 +262,11 @@
 static void
 g_retaste_event(void *arg, int flag)
 {
-	struct g_class *cp, *mp;
-	struct g_geom *gp, *gp2;
+	struct g_class *mp, *mp2;
+	struct g_geom *gp;
 	struct g_hh00 *hh;
 	struct g_provider *pp;
+	struct g_consumer *cp;
=20
 	g_topology_assert();
 	if (flag =3D=3D EV_CANCEL)  /* XXX: can't happen ? */
@@ -282,17 +283,20 @@
 	}
 	g_trace(G_T_TOPOLOGY, "g_retaste(%s)", mp->name);
=20
-	LIST_FOREACH(cp, &g_classes, class) {
-		LIST_FOREACH(gp, &cp->geom, geom) {
+	LIST_FOREACH(mp2, &g_classes, class) {
+		LIST_FOREACH(gp, &mp2->geom, geom) {
 			LIST_FOREACH(pp, &gp->provider, provider) {
 				if (pp->acr || pp->acw || pp->ace)
 					continue;
-				LIST_FOREACH(gp2, &mp->geom, geom) {
-					if (!strcmp(pp->name, gp2->name))
+				LIST_FOREACH(cp, &pp->consumers, consumers) {
+					if (cp->geom->class =3D=3D mp &&
+					    (cp->flags & G_CF_ORPHAN) =3D=3D 0)
 						break;
 				}
-				if (gp2 !=3D NULL)
-					g_wither_geom(gp2, ENXIO);
+				if (cp !=3D NULL) {
+					cp->flags |=3D G_CF_ORPHAN;
+					g_wither_geom(cp->geom, ENXIO);
+				}
 				mp->taste(mp, pp, 0);
 				g_topology_assert();
 			}
@@ -534,7 +538,7 @@
 {
 	struct g_class *mp;
 	struct g_provider *pp;
-	struct g_consumer *cp;
+	struct g_consumer *cp, *next_cp;
=20
 	g_topology_assert();
 	if (flag =3D=3D EV_CANCEL)
@@ -545,11 +549,17 @@
 	G_VALID_PROVIDER(pp);
 	KASSERT(!(pp->flags & G_PF_WITHER),
 	    ("g_new_provider_event but withered"));
+	LIST_FOREACH_SAFE(cp, &pp->consumers, consumers, next_cp) {
+		if ((cp->flags & G_CF_ORPHAN) =3D=3D 0 &&
+		    cp->geom->attrchanged !=3D NULL)
+			cp->geom->attrchanged(cp, "GEOM::media");
+	}
 	LIST_FOREACH(mp, &g_classes, class) {
 		if (mp->taste =3D=3D NULL)
 			continue;
 		LIST_FOREACH(cp, &pp->consumers, consumers)
-			if (cp->geom->class =3D=3D mp)
+			if (cp->geom->class =3D=3D mp &&
+			    (cp->flags & G_CF_ORPHAN) =3D=3D 0)
 				break;
 		if (cp !=3D NULL)
 			continue;
@@ -628,8 +638,10 @@
=20
 	LIST_FOREACH_SAFE(cp, &pp->consumers, consumers, cp2) {
 		gp =3D cp->geom;
-		if (gp->resize =3D=3D NULL && size < pp->mediasize)
+		if (gp->resize =3D=3D NULL && size < pp->mediasize) {
+			cp->flags |=3D G_CF_ORPHAN;
 			cp->geom->orphan(cp);
+		}
 	}
=20
 	pp->mediasize =3D size;
@@ -648,7 +660,8 @@
 		if (mp->taste =3D=3D NULL)
 			continue;
 		LIST_FOREACH(cp, &pp->consumers, consumers)
-			if (cp->geom->class =3D=3D mp)
+			if (cp->geom->class =3D=3D mp &&
+			    (cp->flags & G_CF_ORPHAN) =3D=3D 0)
 				break;
 		if (cp !=3D NULL)
 			continue;
@@ -867,7 +880,7 @@
 	 * are probably just ahead of the event telling us that.  Fail
 	 * now rather than having to unravel this later.
 	 */
-	if (cp->geom->spoiled !=3D NULL && cp->spoiled &&
+	if (cp->geom->spoiled !=3D NULL && (cp->flags & G_CF_SPOILED) &&
 	    (dcr > 0 || dcw > 0 || dce > 0))
 		return (ENXIO);
=20
@@ -1017,6 +1030,7 @@
 	g_topology_assert();
 	G_VALID_CONSUMER(cp);
 	g_trace(G_T_TOPOLOGY, "g_std_spoiled(%p)", cp);
+	cp->flags |=3D G_CF_ORPHAN;
 	g_detach(cp);
 	gp =3D cp->geom;
 	LIST_FOREACH(pp, &gp->provider, provider)
@@ -1052,9 +1066,9 @@
 	G_VALID_PROVIDER(pp);
 	for (cp =3D LIST_FIRST(&pp->consumers); cp !=3D NULL; cp =3D cp2) {
 		cp2 =3D LIST_NEXT(cp, consumers);
-		if (!cp->spoiled)
+		if ((cp->flags & G_CF_SPOILED) =3D=3D 0)
 			continue;
-		cp->spoiled =3D 0;
+		cp->flags &=3D ~G_CF_SPOILED;
 		if (cp->geom->spoiled =3D=3D NULL)
 			continue;
 		cp->geom->spoiled(cp);
@@ -1079,11 +1093,54 @@
 		KASSERT(cp2->acw =3D=3D 0, ("spoiling cp->acw =3D %d", cp2->acw));
 */
 		KASSERT(cp2->ace =3D=3D 0, ("spoiling cp->ace =3D %d", cp2->ace));
-		cp2->spoiled++;
+		cp2->flags |=3D G_CF_SPOILED;
 	}
 	g_post_event(g_spoil_event, pp, M_WAITOK, pp, NULL);
 }
=20
+static void
+g_media_changed_event(void *arg, int flag)
+{
+	struct g_provider *pp;
+	int retaste;
+
+	g_topology_assert();
+	if (flag =3D=3D EV_CANCEL)
+		return;
+	pp =3D arg;
+	G_VALID_PROVIDER(pp);
+
+	/*
+	 * If provider was not open for writing, queue retaste after spoiling.
+	 * If it was, retaste will happen automatically on close.
+	 */
+	retaste =3D (pp->acw =3D=3D 0 && pp->error =3D=3D 0 &&
+	    !(pp->geom->flags & G_GEOM_WITHER));
+	g_spoil_event(arg, flag);
+	if (retaste)
+		g_post_event(g_new_provider_event, pp, M_WAITOK, pp, NULL);
+}
+
+int
+g_media_changed(struct g_provider *pp, int flag)
+{
+	struct g_consumer *cp;
+
+	LIST_FOREACH(cp, &pp->consumers, consumers)
+		cp->flags |=3D G_CF_SPOILED;
+	return (g_post_event(g_media_changed_event, pp, flag, pp, NULL));
+}
+
+int
+g_media_gone(struct g_provider *pp, int flag)
+{
+	struct g_consumer *cp;
+
+	LIST_FOREACH(cp, &pp->consumers, consumers)
+		cp->flags |=3D G_CF_SPOILED;
+	return (g_post_event(g_spoil_event, pp, flag, pp, NULL));
+}
+
 int
 g_getattr__(const char *attr, struct g_consumer *cp, void *var, int len)
 {
@@ -1239,15 +1296,15 @@
 			    cp->provider);
 		}
 		gprintln("  access:   r%dw%de%d", cp->acr, cp->acw, cp->ace);
-		gprintln("  spoiled:  %d", cp->spoiled);
+		gprintln("  flags:    0x%04x", cp->flags);
 		gprintln("  nstart:   %u", cp->nstart);
 		gprintln("  nend:     %u", cp->nend);
 	} else {
 		gprintf("consumer: %p (%s), access=3Dr%dw%de%d", cp,
 		    cp->provider !=3D NULL ? cp->provider->name : "none",
 		    cp->acr, cp->acw, cp->ace);
-		if (cp->spoiled)
-			db_printf(", spoiled=3D%d", cp->spoiled);
+		if (cp->flags)
+			db_printf(", flags=3D0x%04x", cp->flags);
 		db_printf("\n");
 	}
 }
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/geom/geom_vfs.c
--- a/head/sys/geom/geom_vfs.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/geom/geom_vfs.c	Fri Aug 10 14:19:25 2012 +0300
@@ -25,7 +25,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/geom/geom_vfs.c 234026 2012-04-08 06:20:21Z m=
ckusick $");
+__FBSDID("$FreeBSD: head/sys/geom/geom_vfs.c 238892 2012-07-29 20:04:09Z m=
av $");
=20
 #include <sys/param.h>
 #include <sys/systm.h>
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/geom/multipath/g_multipath.c
--- a/head/sys/geom/multipath/g_multipath.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/geom/multipath/g_multipath.c	Fri Aug 10 14:19:25 2012 +0300
@@ -31,7 +31,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/geom/multipath/g_multipath.c 236619 2012-06-0=
5 16:46:34Z mav $");
+__FBSDID("$FreeBSD: head/sys/geom/multipath/g_multipath.c 239012 2012-08-0=
3 14:55:35Z thomas $");
 #include <sys/param.h>
 #include <sys/systm.h>
 #include <sys/kernel.h>
@@ -849,6 +849,78 @@
 }
=20
 static void
+g_multipath_ctl_prefer(struct gctl_req *req, struct g_class *mp)
+{
+	struct g_geom *gp;
+	struct g_multipath_softc *sc;
+	struct g_consumer *cp;
+	const char *name, *mpname;
+	static const char devpf[6] =3D "/dev/";
+	int *nargs;
+
+	g_topology_assert();
+
+	mpname =3D gctl_get_asciiparam(req, "arg0");
+        if (mpname =3D=3D NULL) {
+                gctl_error(req, "No 'arg0' argument");
+                return;
+        }
+	gp =3D g_multipath_find_geom(mp, mpname);
+	if (gp =3D=3D NULL) {
+		gctl_error(req, "Device %s is invalid", mpname);
+		return;
+	}
+	sc =3D gp->softc;
+
+	nargs =3D gctl_get_paraml(req, "nargs", sizeof(*nargs));
+	if (nargs =3D=3D NULL) {
+		gctl_error(req, "No 'nargs' argument");
+		return;
+	}
+	if (*nargs !=3D 2) {
+		gctl_error(req, "missing device");
+		return;
+	}
+
+	name =3D gctl_get_asciiparam(req, "arg1");
+	if (name =3D=3D NULL) {
+		gctl_error(req, "No 'arg1' argument");
+		return;
+	}
+	if (strncmp(name, devpf, 5) =3D=3D 0) {
+		name +=3D 5;
+	}
+
+	LIST_FOREACH(cp, &gp->consumer, consumer) {
+		if (cp->provider !=3D NULL
+                      && strcmp(cp->provider->name, name) =3D=3D 0)
+		    break;
+	}
+
+	if (cp =3D=3D NULL) {
+		gctl_error(req, "Provider %s not found", name);
+		return;
+	}
+
+	mtx_lock(&sc->sc_mtx);
+
+	if (cp->index & MP_BAD) {
+		gctl_error(req, "Consumer %s is invalid", name);
+		mtx_unlock(&sc->sc_mtx);
+		return;
+	}
+
+	/* Here when the consumer is present and in good shape */
+
+	sc->sc_active =3D cp;
+	if (!sc->sc_active_active)
+	    printf("GEOM_MULTIPATH: %s now active path in %s\n",
+		sc->sc_active->provider->name, sc->sc_name);
+
+	mtx_unlock(&sc->sc_mtx);
+}
+
+static void
 g_multipath_ctl_add(struct gctl_req *req, struct g_class *mp)
 {
 	struct g_multipath_softc *sc;
@@ -1278,6 +1350,8 @@
 		gctl_error(req, "Userland and kernel parts are out of sync");
 	} else if (strcmp(verb, "add") =3D=3D 0) {
 		g_multipath_ctl_add(req, mp);
+	} else if (strcmp(verb, "prefer") =3D=3D 0) {
+		g_multipath_ctl_prefer(req, mp);
 	} else if (strcmp(verb, "create") =3D=3D 0) {
 		g_multipath_ctl_create(req, mp);
 	} else if (strcmp(verb, "configure") =3D=3D 0) {
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/geom/part/g_part.c
--- a/head/sys/geom/part/g_part.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/geom/part/g_part.c	Fri Aug 10 14:19:25 2012 +0300
@@ -25,7 +25,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/geom/part/g_part.c 238657 2012-07-20 17:51:20=
Z trasz $");
+__FBSDID("$FreeBSD: head/sys/geom/part/g_part.c 238886 2012-07-29 11:51:48=
Z mav $");
=20
 #include <sys/param.h>
 #include <sys/bio.h>
@@ -2055,6 +2055,7 @@
 	G_PART_TRACE((G_T_TOPOLOGY, "%s(%s)", __func__, cp->provider->name));
 	g_topology_assert();
=20
+	cp->flags |=3D G_CF_ORPHAN;
 	g_part_wither(cp->geom, ENXIO);
 }
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/geom/virstor/g_virstor.c
--- a/head/sys/geom/virstor/g_virstor.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/geom/virstor/g_virstor.c	Fri Aug 10 14:19:25 2012 +0300
@@ -30,7 +30,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/geom/virstor/g_virstor.c 227309 2011-11-07 15=
:43:11Z ed $");
+__FBSDID("$FreeBSD: head/sys/geom/virstor/g_virstor.c 239021 2012-08-03 20=
:24:16Z jimharris $");
=20
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -235,6 +235,12 @@
 			return;
 		}
 		sc =3D virstor_find_geom(cp, name);
+		if (sc =3D=3D NULL) {
+			gctl_error(req, "Don't know anything about '%s'", name);
+			g_topology_unlock();
+			return;
+		}
+
 		LOG_MSG(LVL_INFO, "Stopping %s by the userland command",
 		    sc->geom->name);
 		update_metadata(sc);
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/gnu/fs/reiserfs/reiserfs_vfso=
ps.c
--- a/head/sys/gnu/fs/reiserfs/reiserfs_vfsops.c	Mon Jul 30 11:44:18 2012 +=
0300
+++ b/head/sys/gnu/fs/reiserfs/reiserfs_vfsops.c	Fri Aug 10 14:19:25 2012 +=
0300
@@ -4,7 +4,7 @@
  *=20
  * Ported to FreeBSD by Jean-S=C3=A9bastien P=C3=A9dron <jspedron at club-int=
ernet.fr>
  *=20
- * $FreeBSD: head/sys/gnu/fs/reiserfs/reiserfs_vfsops.c 233575 2012-03-27 =
20:36:03Z dumbbell $
+ * $FreeBSD: head/sys/gnu/fs/reiserfs/reiserfs_vfsops.c 238980 2012-08-01 =
23:05:57Z avatar $
  */
=20
 #include <gnu/fs/reiserfs/reiserfs_fs.h>
@@ -227,7 +227,7 @@
=20
 	DROP_GIANT();
 	g_topology_lock();
-	g_wither_geom_close(rmp->rm_cp->geom, ENXIO);
+	g_vfs_close(rmp->rm_cp);
 	g_topology_unlock();
 	PICKUP_GIANT();
 	vrele(rmp->rm_devvp);
@@ -611,7 +611,7 @@
 	if (cp !=3D NULL) {
 		DROP_GIANT();
 		g_topology_lock();
-		g_wither_geom_close(cp->geom, ENXIO);
+		g_vfs_close(cp);
 		g_topology_unlock();
 		PICKUP_GIANT();
 	}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/i386/i386/machdep.c
--- a/head/sys/i386/i386/machdep.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/i386/i386/machdep.c	Fri Aug 10 14:19:25 2012 +0300
@@ -38,7 +38,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/i386/i386/machdep.c 238310 2012-07-09 20:42:0=
8Z jhb $");
+__FBSDID("$FreeBSD: head/sys/i386/i386/machdep.c 238792 2012-07-26 09:11:3=
7Z kib $");
=20
 #include "opt_apic.h"
 #include "opt_atalk.h"
@@ -1606,7 +1606,7 @@
                 pcb->pcb_dr3 =3D 0;
                 pcb->pcb_dr6 =3D 0;
                 pcb->pcb_dr7 =3D 0;
-                if (pcb =3D=3D PCPU_GET(curpcb)) {
+                if (pcb =3D=3D curpcb) {
 		        /*
 			 * Clear the debug registers on the running
 			 * CPU, otherwise they will end up affecting
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/i386/i386/pmap.c
--- a/head/sys/i386/i386/pmap.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/i386/i386/pmap.c	Fri Aug 10 14:19:25 2012 +0300
@@ -75,7 +75,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/i386/i386/pmap.c 237623 2012-06-27 03:45:25Z =
alc $");
+__FBSDID("$FreeBSD: head/sys/i386/i386/pmap.c 238792 2012-07-26 09:11:37Z =
kib $");
=20
 /*
  *	Manages physical address maps.
@@ -1962,7 +1962,7 @@
 	(*ipi_lazypmap_counts[PCPU_GET(cpuid)])++;
 #endif
 	if (rcr3() =3D=3D lazyptd)
-		load_cr3(PCPU_GET(curpcb)->pcb_cr3);
+		load_cr3(curpcb->pcb_cr3);
 	CPU_CLR_ATOMIC(PCPU_GET(cpuid), lazymask);
 	atomic_store_rel_int(&lazywait, 1);
 }
@@ -1972,7 +1972,7 @@
 {
=20
 	if (rcr3() =3D=3D lazyptd)
-		load_cr3(PCPU_GET(curpcb)->pcb_cr3);
+		load_cr3(curpcb->pcb_cr3);
 	CPU_CLR_ATOMIC(cpuid, lazymask);
 }
=20
@@ -2039,7 +2039,7 @@
=20
 	cr3 =3D vtophys(pmap->pm_pdir);
 	if (cr3 =3D=3D rcr3()) {
-		load_cr3(PCPU_GET(curpcb)->pcb_cr3);
+		load_cr3(curpcb->pcb_cr3);
 		CPU_CLR(PCPU_GET(cpuid), &pmap->pm_active);
 	}
 }
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/i386/i386/trap.c
--- a/head/sys/i386/i386/trap.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/i386/i386/trap.c	Fri Aug 10 14:19:25 2012 +0300
@@ -38,7 +38,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/i386/i386/trap.c 238678 2012-07-21 21:52:48Z =
kib $");
+__FBSDID("$FreeBSD: head/sys/i386/i386/trap.c 238792 2012-07-26 09:11:37Z =
kib $");
=20
 /*
  * 386 Trap and System call handling
@@ -344,7 +344,7 @@
=20
         if ((ISPL(frame->tf_cs) =3D=3D SEL_UPL) ||
 	    ((frame->tf_eflags & PSL_VM) &&=20
-		!(PCPU_GET(curpcb)->pcb_flags & PCB_VM86CALL))) {
+		!(curpcb->pcb_flags & PCB_VM86CALL))) {
 		/* user trap */
=20
 		td->td_pticks =3D 0;
@@ -593,7 +593,7 @@
 			/* FALL THROUGH */
=20
 		case T_SEGNPFLT:	/* segment not present fault */
-			if (PCPU_GET(curpcb)->pcb_flags & PCB_VM86CALL)
+			if (curpcb->pcb_flags & PCB_VM86CALL)
 				break;
=20
 			/*
@@ -606,7 +606,7 @@
 			 * a signal.
 			 */
 			if (frame->tf_eip =3D=3D (int)cpu_switch_load_gs) {
-				PCPU_GET(curpcb)->pcb_gs =3D 0;
+				curpcb->pcb_gs =3D 0;
 #if 0			=09
 				PROC_LOCK(p);
 				kern_psignal(p, SIGBUS);
@@ -644,9 +644,9 @@
 				frame->tf_eip =3D (int)doreti_popl_fs_fault;
 				goto out;
 			}
-			if (PCPU_GET(curpcb)->pcb_onfault !=3D NULL) {
+			if (curpcb->pcb_onfault !=3D NULL) {
 				frame->tf_eip =3D
-				    (int)PCPU_GET(curpcb)->pcb_onfault;
+				    (int)curpcb->pcb_onfault;
 				goto out;
 			}
 			break;
@@ -696,7 +696,7 @@
 			 * debugging the kernel.
 			 */
 			if (user_dbreg_trap() &&=20
-			   !(PCPU_GET(curpcb)->pcb_flags & PCB_VM86CALL)) {
+			   !(curpcb->pcb_flags & PCB_VM86CALL)) {
 				/*
 				 * Reset breakpoint bits because the
 				 * processor doesn't
@@ -877,7 +877,7 @@
 		 * it normally, and panic immediately.
 		 */
 		if (!usermode && (td->td_intr_nesting_level !=3D 0 ||
-		    PCPU_GET(curpcb)->pcb_onfault =3D=3D NULL)) {
+		    curpcb->pcb_onfault =3D=3D NULL)) {
 			trap_fatal(frame, eva);
 			return (-1);
 		}
@@ -935,8 +935,8 @@
 nogo:
 	if (!usermode) {
 		if (td->td_intr_nesting_level =3D=3D 0 &&
-		    PCPU_GET(curpcb)->pcb_onfault !=3D NULL) {
-			frame->tf_eip =3D (int)PCPU_GET(curpcb)->pcb_onfault;
+		    curpcb->pcb_onfault !=3D NULL) {
+			frame->tf_eip =3D (int)curpcb->pcb_onfault;
 			return (0);
 		}
 		trap_fatal(frame, eva);
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/i386/i386/vm86.c
--- a/head/sys/i386/i386/vm86.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/i386/i386/vm86.c	Fri Aug 10 14:19:25 2012 +0300
@@ -25,7 +25,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/i386/i386/vm86.c 237924 2012-07-01 12:59:00Z =
brueffer $");
+__FBSDID("$FreeBSD: head/sys/i386/i386/vm86.c 238792 2012-07-26 09:11:37Z =
kib $");
=20
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -143,9 +143,9 @@
 	 * the extension is not present.  (This check should not be needed,
 	 * as we can't enter vm86 mode until we set up an extension area)
 	 */
-	if (PCPU_GET(curpcb)->pcb_ext =3D=3D 0)
+	if (curpcb->pcb_ext =3D=3D 0)
 		return (SIGBUS);
-	vm86 =3D &PCPU_GET(curpcb)->pcb_ext->ext_vm86;
+	vm86 =3D &curpcb->pcb_ext->ext_vm86;
=20
 	if (vmf->vmf_eflags & PSL_T)
 		retcode =3D SIGTRAP;
@@ -535,7 +535,7 @@
 	vmf->kernel_fs =3D vmf->kernel_es =3D vmf->kernel_ds =3D 0;
 	vmf->vmf_eflags =3D PSL_VIF | PSL_VM | PSL_USER;
=20
-	vm86 =3D &PCPU_GET(curpcb)->pcb_ext->ext_vm86;
+	vm86 =3D &curpcb->pcb_ext->ext_vm86;
 	if (!vm86->vm86_has_vme)=20
 		vm86->vm86_eflags =3D vmf->vmf_eflags;  /* save VIF, VIP */
 }
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/i386/i386/vm_machdep.c
--- a/head/sys/i386/i386/vm_machdep.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/i386/i386/vm_machdep.c	Fri Aug 10 14:19:25 2012 +0300
@@ -41,7 +41,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/i386/i386/vm_machdep.c 223758 2011-07-04 12:0=
4:52Z attilio $");
+__FBSDID("$FreeBSD: head/sys/i386/i386/vm_machdep.c 238792 2012-07-26 09:1=
1:37Z kib $");
=20
 #include "opt_isa.h"
 #include "opt_npx.h"
@@ -106,6 +106,10 @@
 #define	NSFBUFS		(512 + maxusers * 16)
 #endif
=20
+CTASSERT((struct thread **)OFFSETOF_CURTHREAD =3D=3D
+    &((struct pcpu *)NULL)->pc_curthread);
+CTASSERT((struct pcb **)OFFSETOF_CURPCB =3D=3D &((struct pcpu *)NULL)->pc_=
curpcb);
+
 static void	cpu_reset_real(void);
 #ifdef SMP
 static void	cpu_reset_proxy(void);
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/i386/include/cpufunc.h
--- a/head/sys/i386/include/cpufunc.h	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/i386/include/cpufunc.h	Fri Aug 10 14:19:25 2012 +0300
@@ -26,7 +26,7 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: head/sys/i386/include/cpufunc.h 238311 2012-07-09 20:55:39Z j=
hb $
+ * $FreeBSD: head/sys/i386/include/cpufunc.h 238972 2012-08-01 17:24:53Z k=
ib $
  */
=20
 /*
@@ -155,6 +155,13 @@
 }
=20
 static __inline void
+lfence(void)
+{
+
+	__asm __volatile("lfence" : : : "memory");
+}
+
+static __inline void
 mfence(void)
 {
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/i386/include/pcpu.h
--- a/head/sys/i386/include/pcpu.h	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/i386/include/pcpu.h	Fri Aug 10 14:19:25 2012 +0300
@@ -23,7 +23,7 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD$
+ * $FreeBSD: head/sys/i386/include/pcpu.h 238792 2012-07-26 09:11:37Z kib $
  */
=20
 #ifndef _MACHINE_PCPU_H_
@@ -236,16 +236,36 @@
 #define	PCPU_PTR(member)	__PCPU_PTR(pc_ ## member)
 #define	PCPU_SET(member, val)	__PCPU_SET(pc_ ## member, val)
=20
+#define	OFFSETOF_CURTHREAD	0
+#ifdef __clang__
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wnull-dereference"
+#endif
 static __inline __pure2 struct thread *
 __curthread(void)
 {
 	struct thread *td;
=20
-	__asm("movl %%fs:0,%0" : "=3Dr" (td));
+	__asm("movl %%fs:%1,%0" : "=3Dr" (td)
+	    : "m" (*(char *)OFFSETOF_CURTHREAD));
 	return (td);
 }
+#ifdef __clang__
+#pragma clang diagnostic pop
+#endif
 #define	curthread		(__curthread())
=20
+#define	OFFSETOF_CURPCB		16
+static __inline __pure2 struct pcb *
+__curpcb(void)
+{
+	struct pcb *pcb;
+
+	__asm("movl %%fs:%1,%0" : "=3Dr" (pcb) : "m" (*(char *)OFFSETOF_CURPCB));
+	return (pcb);
+}
+#define	curpcb		(__curpcb())
+
 #else /* !lint || defined(__GNUCLIKE_ASM) && defined(__GNUCLIKE___TYPEOF) =
*/
=20
 #error "this file needs to be ported to your compiler"
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/i386/isa/npx.c
--- a/head/sys/i386/isa/npx.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/i386/isa/npx.c	Fri Aug 10 14:19:25 2012 +0300
@@ -31,7 +31,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/i386/isa/npx.c 238678 2012-07-21 21:52:48Z ki=
b $");
+__FBSDID("$FreeBSD: head/sys/i386/isa/npx.c 238914 2012-07-30 19:26:02Z ki=
b $");
=20
 #include "opt_cpu.h"
 #include "opt_isa.h"
@@ -114,7 +114,7 @@
 #ifdef CPU_ENABLE_SSE
 void	fxsave(caddr_t addr);
 void	fxrstor(caddr_t addr);
-void	stmxcsr(u_int csr);
+void	stmxcsr(u_int *csr);
 #endif
=20
 #endif	/* __GNUCLIKE_ASM && !lint */
@@ -378,7 +378,7 @@
=20
 	critical_enter();
 	if (curthread =3D=3D PCPU_GET(fpcurthread))
-		npxsave(PCPU_GET(curpcb)->pcb_save);
+		npxsave(curpcb->pcb_save);
 	critical_exit();
 #ifdef NPX_DEBUG
 	if (hw_float) {
@@ -663,7 +663,6 @@
 int
 npxdna(void)
 {
-	struct pcb *pcb;
=20
 	if (!hw_float)
 		return (0);
@@ -687,25 +686,24 @@
 	 * Record new context early in case frstor causes an IRQ13.
 	 */
 	PCPU_SET(fpcurthread, curthread);
-	pcb =3D PCPU_GET(curpcb);
=20
 #ifdef CPU_ENABLE_SSE
 	if (cpu_fxsr)
 		fpu_clean_state();
 #endif
=20
-	if ((pcb->pcb_flags & PCB_NPXINITDONE) =3D=3D 0) {
+	if ((curpcb->pcb_flags & PCB_NPXINITDONE) =3D=3D 0) {
 		/*
 		 * This is the first time this thread has used the FPU or
 		 * the PCB doesn't contain a clean FPU state.  Explicitly
 		 * load an initial state.
 		 */
 		fpurstor(&npx_initialstate);
-		if (pcb->pcb_initial_npxcw !=3D __INITIAL_NPXCW__)
-			fldcw(pcb->pcb_initial_npxcw);
-		pcb->pcb_flags |=3D PCB_NPXINITDONE;
-		if (PCB_USER_FPU(pcb))
-			pcb->pcb_flags |=3D PCB_NPXUSERINITDONE;
+		if (curpcb->pcb_initial_npxcw !=3D __INITIAL_NPXCW__)
+			fldcw(curpcb->pcb_initial_npxcw);
+		curpcb->pcb_flags |=3D PCB_NPXINITDONE;
+		if (PCB_USER_FPU(curpcb))
+			curpcb->pcb_flags |=3D PCB_NPXUSERINITDONE;
 	} else {
 		/*
 		 * The following fpurstor() may cause an IRQ13 when the
@@ -721,7 +719,7 @@
 		 * fnclex if it is the first FPU instruction after a context
 		 * switch.
 		 */
-		fpurstor(pcb->pcb_save);
+		fpurstor(curpcb->pcb_save);
 	}
 	critical_exit();
=20
@@ -1099,13 +1097,14 @@
 {
 	struct pcb *pcb;
=20
-	pcb =3D PCPU_GET(curpcb);
+	pcb =3D curpcb;
 	KASSERT((curthread->td_pflags & TDP_KTHREAD) !=3D 0,
 	    ("Only kthread may use fpu_kern_thread"));
-	KASSERT(pcb->pcb_save =3D=3D &pcb->pcb_user_save, ("mangled pcb_save"));
-	KASSERT(PCB_USER_FPU(pcb), ("recursive call"));
+	KASSERT(curpcb->pcb_save =3D=3D &curpcb->pcb_user_save,
+	    ("mangled pcb_save"));
+	KASSERT(PCB_USER_FPU(curpcb), ("recursive call"));
=20
-	pcb->pcb_flags |=3D PCB_KERNNPX;
+	curpcb->pcb_flags |=3D PCB_KERNNPX;
 	return (0);
 }
=20
@@ -1115,5 +1114,5 @@
=20
 	if ((curthread->td_pflags & TDP_KTHREAD) =3D=3D 0)
 		return (0);
-	return ((PCPU_GET(curpcb)->pcb_flags & PCB_KERNNPX) !=3D 0);
+	return ((curpcb->pcb_flags & PCB_KERNNPX) !=3D 0);
 }
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/i386/linux/linux_proto.h
--- a/head/sys/i386/linux/linux_proto.h	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/i386/linux/linux_proto.h	Fri Aug 10 14:19:25 2012 +0300
@@ -2,8 +2,8 @@
  * System call prototypes.
  *
  * DO NOT EDIT-- this file is automatically generated.
- * $FreeBSD: head/sys/i386/linux/linux_proto.h 234360 2012-04-16 23:17:29Z=
 jkim $
- * created from FreeBSD: head/sys/i386/linux/syscalls.master 234359 2012-0=
4-16 23:16:18Z jkim=20
+ * $FreeBSD: head/sys/i386/linux/linux_proto.h 238918 2012-07-30 20:45:17Z=
 jhb $
+ * created from FreeBSD: head/sys/i386/linux/syscalls.master 238917 2012-0=
7-30 20:44:45Z jhb=20
  */
=20
 #ifndef _LINUX_SYSPROTO_H_
@@ -261,7 +261,7 @@
 };
 struct linux_lstat_args {
 	char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)];
-	char up_l_[PADL_(struct ostat *)]; struct ostat * up; char up_r_[PADR_(st=
ruct ostat *)];
+	char up_l_[PADL_(struct l_stat *)]; struct l_stat * up; char up_r_[PADR_(=
struct l_stat *)];
 };
 struct linux_readlink_args {
 	char name_l_[PADL_(char *)]; char * name; char name_r_[PADR_(char *)];
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/i386/linux/linux_syscall.h
--- a/head/sys/i386/linux/linux_syscall.h	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/i386/linux/linux_syscall.h	Fri Aug 10 14:19:25 2012 +0300
@@ -2,8 +2,8 @@
  * System call numbers.
  *
  * DO NOT EDIT-- this file is automatically generated.
- * $FreeBSD: head/sys/i386/linux/linux_syscall.h 234360 2012-04-16 23:17:2=
9Z jkim $
- * created from FreeBSD: head/sys/i386/linux/syscalls.master 234359 2012-0=
4-16 23:16:18Z jkim=20
+ * $FreeBSD: head/sys/i386/linux/linux_syscall.h 238918 2012-07-30 20:45:1=
7Z jhb $
+ * created from FreeBSD: head/sys/i386/linux/syscalls.master 238917 2012-0=
7-30 20:44:45Z jhb=20
  */
=20
 #define	LINUX_SYS_exit	1
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/i386/linux/linux_syscalls.c
--- a/head/sys/i386/linux/linux_syscalls.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/i386/linux/linux_syscalls.c	Fri Aug 10 14:19:25 2012 +0300
@@ -2,8 +2,8 @@
  * System call names.
  *
  * DO NOT EDIT-- this file is automatically generated.
- * $FreeBSD: head/sys/i386/linux/linux_syscalls.c 234360 2012-04-16 23:17:=
29Z jkim $
- * created from FreeBSD: head/sys/i386/linux/syscalls.master 234359 2012-0=
4-16 23:16:18Z jkim=20
+ * $FreeBSD: head/sys/i386/linux/linux_syscalls.c 238918 2012-07-30 20:45:=
17Z jhb $
+ * created from FreeBSD: head/sys/i386/linux/syscalls.master 238917 2012-0=
7-30 20:44:45Z jhb=20
  */
=20
 const char *linux_syscallnames[] =3D {
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/i386/linux/linux_sysent.c
--- a/head/sys/i386/linux/linux_sysent.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/i386/linux/linux_sysent.c	Fri Aug 10 14:19:25 2012 +0300
@@ -2,8 +2,8 @@
  * System call switch table.
  *
  * DO NOT EDIT-- this file is automatically generated.
- * $FreeBSD: head/sys/i386/linux/linux_sysent.c 234360 2012-04-16 23:17:29=
Z jkim $
- * created from FreeBSD: head/sys/i386/linux/syscalls.master 234359 2012-0=
4-16 23:16:18Z jkim=20
+ * $FreeBSD: head/sys/i386/linux/linux_sysent.c 238918 2012-07-30 20:45:17=
Z jhb $
+ * created from FreeBSD: head/sys/i386/linux/syscalls.master 238917 2012-0=
7-30 20:44:45Z jhb=20
  */
=20
 #include <sys/param.h>
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/i386/linux/linux_systrace_arg=
s.c
--- a/head/sys/i386/linux/linux_systrace_args.c	Mon Jul 30 11:44:18 2012 +0=
300
+++ b/head/sys/i386/linux/linux_systrace_args.c	Fri Aug 10 14:19:25 2012 +0=
300
@@ -2,7 +2,7 @@
  * System call argument to DTrace register array converstion.
  *
  * DO NOT EDIT-- this file is automatically generated.
- * $FreeBSD: head/sys/i386/linux/linux_systrace_args.c 234360 2012-04-16 2=
3:17:29Z jkim $
+ * $FreeBSD: head/sys/i386/linux/linux_systrace_args.c 238918 2012-07-30 2=
0:45:17Z jhb $
  * This file is part of the DTrace syscall provider.
  */
=20
@@ -570,7 +570,7 @@
 	case 84: {
 		struct linux_lstat_args *p =3D params;
 		uarg[0] =3D (intptr_t) p->path; /* char * */
-		uarg[1] =3D (intptr_t) p->up; /* struct ostat * */
+		uarg[1] =3D (intptr_t) p->up; /* struct l_stat * */
 		*n_args =3D 2;
 		break;
 	}
@@ -3192,7 +3192,7 @@
 			p =3D "char *";
 			break;
 		case 1:
-			p =3D "struct ostat *";
+			p =3D "struct l_stat *";
 			break;
 		default:
 			break;
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/i386/linux/syscalls.master
--- a/head/sys/i386/linux/syscalls.master	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/i386/linux/syscalls.master	Fri Aug 10 14:19:25 2012 +0300
@@ -1,4 +1,4 @@
- $FreeBSD: head/sys/i386/linux/syscalls.master 234359 2012-04-16 23:16:18Z=
 jkim $
+ $FreeBSD: head/sys/i386/linux/syscalls.master 238917 2012-07-30 20:44:45Z=
 jhb $
=20
 ;	@(#)syscalls.master	8.1 (Berkeley) 7/19/93
 ; System call name/number master file (or rather, slave, from LINUX).
@@ -158,7 +158,7 @@
 				    struct l_old_select_argv *ptr); }
 83	AUE_SYMLINK	STD	{ int linux_symlink(char *path, char *to); }
 ; 84: oldlstat
-84	AUE_LSTAT	STD	{ int linux_lstat(char *path, struct ostat *up); }
+84	AUE_LSTAT	STD	{ int linux_lstat(char *path, struct l_stat *up); }
 85	AUE_READLINK	STD	{ int linux_readlink(char *name, char *buf, \
 				    l_int count); }
 86	AUE_USELIB	STD	{ int linux_uselib(char *library); }
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/i386/xen/pmap.c
--- a/head/sys/i386/xen/pmap.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/i386/xen/pmap.c	Fri Aug 10 14:19:25 2012 +0300
@@ -75,7 +75,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/i386/xen/pmap.c 236534 2012-06-04 03:51:08Z a=
lc $");
+__FBSDID("$FreeBSD: head/sys/i386/xen/pmap.c 239171 2012-08-10 05:47:04Z a=
lc $");
=20
 /*
  *	Manages physical address maps.
@@ -965,9 +965,7 @@
 		mtx_lock(&PMAP2mutex);
 		newpf =3D *pde & PG_FRAME;
 		if ((*PMAP2 & PG_FRAME) !=3D newpf) {
-			vm_page_lock_queues();
 			PT_SET_MA(PADDR2, newpf | PG_V | PG_A | PG_M);
-			vm_page_unlock_queues();
 			CTR3(KTR_PMAP, "pmap_pte: pmap=3D%p va=3D0x%x newpte=3D0x%08x",
 			    pmap, va, (*PMAP2 & 0xffffffff));
 		}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/ia64/ia64/pmap.c
--- a/head/sys/ia64/ia64/pmap.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/ia64/ia64/pmap.c	Fri Aug 10 14:19:25 2012 +0300
@@ -46,7 +46,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/ia64/ia64/pmap.c 238190 2012-07-07 05:17:43Z =
marcel $");
+__FBSDID("$FreeBSD: head/sys/ia64/ia64/pmap.c 239065 2012-08-05 14:11:42Z =
kib $");
=20
 #include <sys/param.h>
 #include <sys/kernel.h>
@@ -59,6 +59,7 @@
 #include <sys/systm.h>
=20
 #include <vm/vm.h>
+#include <vm/vm_param.h>
 #include <vm/vm_page.h>
 #include <vm/vm_map.h>
 #include <vm/vm_object.h>
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/kern/kern_clocksource.c
--- a/head/sys/kern/kern_clocksource.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/kern/kern_clocksource.c	Fri Aug 10 14:19:25 2012 +0300
@@ -25,7 +25,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/kern/kern_clocksource.c 232919 2012-03-13 10:=
21:08Z mav $");
+__FBSDID("$FreeBSD: head/sys/kern/kern_clocksource.c 239036 2012-08-04 08:=
06:37Z mav $");
=20
 /*
  * Common routines to manage event timers hardware.
@@ -168,8 +168,8 @@
 	state =3D DPCPU_PTR(timerstate);
 	now =3D state->now;
 	CTR4(KTR_SPARE2, "ipi  at %d:    now  %d.%08x%08x",
-	    curcpu, now.sec, (unsigned int)(now.frac >> 32),
-			     (unsigned int)(now.frac & 0xffffffff));
+	    curcpu, now.sec, (u_int)(now.frac >> 32),
+			     (u_int)(now.frac & 0xffffffff));
 	done =3D handleevents(&now, 0);
 	return (done ? FILTER_HANDLED : FILTER_STRAY);
 }
@@ -188,8 +188,8 @@
 	int done, runs;
=20
 	CTR4(KTR_SPARE2, "handle at %d:  now  %d.%08x%08x",
-	    curcpu, now->sec, (unsigned int)(now->frac >> 32),
-		     (unsigned int)(now->frac & 0xffffffff));
+	    curcpu, now->sec, (u_int)(now->frac >> 32),
+		     (u_int)(now->frac & 0xffffffff));
 	done =3D 0;
 	if (fake) {
 		frame =3D NULL;
@@ -205,19 +205,21 @@
=20
 	runs =3D 0;
 	while (bintime_cmp(now, &state->nexthard, >=3D)) {
-		bintime_add(&state->nexthard, &hardperiod);
+		bintime_addx(&state->nexthard, hardperiod.frac);
 		runs++;
 	}
-	if ((timer->et_flags & ET_FLAGS_PERCPU) =3D=3D 0 &&
-	    bintime_cmp(&state->nexthard, &nexthard, >))
-		nexthard =3D state->nexthard;
-	if (runs && fake < 2) {
-		hardclock_cnt(runs, usermode);
-		done =3D 1;
+	if (runs) {
+		if ((timer->et_flags & ET_FLAGS_PERCPU) =3D=3D 0 &&
+		    bintime_cmp(&state->nexthard, &nexthard, >))
+			nexthard =3D state->nexthard;
+		if (fake < 2) {
+			hardclock_cnt(runs, usermode);
+			done =3D 1;
+		}
 	}
 	runs =3D 0;
 	while (bintime_cmp(now, &state->nextstat, >=3D)) {
-		bintime_add(&state->nextstat, &statperiod);
+		bintime_addx(&state->nextstat, statperiod.frac);
 		runs++;
 	}
 	if (runs && fake < 2) {
@@ -227,7 +229,7 @@
 	if (profiling) {
 		runs =3D 0;
 		while (bintime_cmp(now, &state->nextprof, >=3D)) {
-			bintime_add(&state->nextprof, &profperiod);
+			bintime_addx(&state->nextprof, profperiod.frac);
 			runs++;
 		}
 		if (runs && !fake) {
@@ -330,8 +332,8 @@
 			*event =3D nexthard;
 	}
 	CTR5(KTR_SPARE2, "next at %d:    next %d.%08x%08x by %d",
-	    curcpu, event->sec, (unsigned int)(event->frac >> 32),
-			     (unsigned int)(event->frac & 0xffffffff), c);
+	    curcpu, event->sec, (u_int)(event->frac >> 32),
+			     (u_int)(event->frac & 0xffffffff), c);
 }
=20
 /* Hardware timer callback function. */
@@ -354,17 +356,16 @@
 		next =3D &state->nexttick;
 	} else
 		next =3D &nexttick;
-	if (periodic) {
-		now =3D *next;	/* Ex-next tick time becomes present time. */
-		bintime_add(next, &timerperiod); /* Next tick in 1 period. */
-	} else {
-		binuptime(&now);	/* Get present time from hardware. */
-		next->sec =3D -1;		/* Next tick is not scheduled yet. */
-	}
+	binuptime(&now);=20
+	if (periodic) {=20
+		*next =3D now;
+		bintime_addx(next, timerperiod.frac); /* Next tick in 1 period. */
+	} else
+		next->sec =3D -1;	/* Next tick is not scheduled yet. */
 	state->now =3D now;
 	CTR4(KTR_SPARE2, "intr at %d:    now  %d.%08x%08x",
-	    curcpu, now.sec, (unsigned int)(now.frac >> 32),
-			     (unsigned int)(now.frac & 0xffffffff));
+	    curcpu, (int)(now.sec), (u_int)(now.frac >> 32),
+			     (u_int)(now.frac & 0xffffffff));
=20
 #ifdef SMP
 	/* Prepare broadcasting to other CPUs for non-per-CPU timers. */
@@ -433,10 +434,10 @@
 			new.sec =3D 0;
 			new.frac =3D timerperiod.frac - tmp;
 			if (new.frac < tmp)	/* Left less then passed. */
-				bintime_add(&new, &timerperiod);
+				bintime_addx(&new, timerperiod.frac);
 			CTR5(KTR_SPARE2, "load p at %d:   now %d.%08x first in %d.%08x",
-			    curcpu, now->sec, (unsigned int)(now->frac >> 32),
-			    new.sec, (unsigned int)(new.frac >> 32));
+			    curcpu, now->sec, (u_int)(now->frac >> 32),
+			    new.sec, (u_int)(new.frac >> 32));
 			*next =3D new;
 			bintime_add(next, now);
 			et_start(timer, &new, &timerperiod);
@@ -445,8 +446,8 @@
 		getnextevent(&new);
 		eq =3D bintime_cmp(&new, next, =3D=3D);
 		CTR5(KTR_SPARE2, "load at %d:    next %d.%08x%08x eq %d",
-		    curcpu, new.sec, (unsigned int)(new.frac >> 32),
-			     (unsigned int)(new.frac & 0xffffffff),
+		    curcpu, new.sec, (u_int)(new.frac >> 32),
+			     (u_int)(new.frac & 0xffffffff),
 			     eq);
 		if (!eq) {
 			*next =3D new;
@@ -531,7 +532,7 @@
 	if (start) {
 		/* Initialize time machine parameters. */
 		next =3D now;
-		bintime_add(&next, &timerperiod);
+		bintime_addx(&next, timerperiod.frac);
 		if (periodic)
 			nexttick =3D next;
 		else
@@ -712,11 +713,7 @@
 	state =3D DPCPU_PTR(timerstate);
 	binuptime(&now);
 	ET_HW_LOCK(state);
-	if ((timer->et_flags & ET_FLAGS_PERCPU) =3D=3D 0 && periodic) {
-		state->now =3D nexttick;
-		bintime_sub(&state->now, &timerperiod);
-	} else
-		state->now =3D now;
+	state->now =3D now;
 	hardclock_sync(curcpu);
 	handleevents(&state->now, 2);
 	if (timer->et_flags & ET_FLAGS_PERCPU)
@@ -780,8 +777,8 @@
 	else
 		binuptime(&now);
 	CTR4(KTR_SPARE2, "idle at %d:    now  %d.%08x%08x",
-	    curcpu, now.sec, (unsigned int)(now.frac >> 32),
-			     (unsigned int)(now.frac & 0xffffffff));
+	    curcpu, now.sec, (u_int)(now.frac >> 32),
+			     (u_int)(now.frac & 0xffffffff));
 	getnextcpuevent(&t, 1);
 	ET_HW_LOCK(state);
 	state->idle =3D 1;
@@ -809,8 +806,8 @@
 	else
 		binuptime(&now);
 	CTR4(KTR_SPARE2, "active at %d:  now  %d.%08x%08x",
-	    curcpu, now.sec, (unsigned int)(now.frac >> 32),
-			     (unsigned int)(now.frac & 0xffffffff));
+	    curcpu, now.sec, (u_int)(now.frac >> 32),
+			     (u_int)(now.frac & 0xffffffff));
 	spinlock_enter();
 	td =3D curthread;
 	td->td_intr_nesting_level++;
@@ -833,11 +830,11 @@
 		binuptime(&now);
=20
 	CTR4(KTR_SPARE2, "set_cyc at %d:  now  %d.%08x%08x",
-	    curcpu, now.sec, (unsigned int)(now.frac >> 32),
-			     (unsigned int)(now.frac & 0xffffffff));
+	    curcpu, now.sec, (u_int)(now.frac >> 32),
+			     (u_int)(now.frac & 0xffffffff));
 	CTR4(KTR_SPARE2, "set_cyc at %d:  t  %d.%08x%08x",
-	    curcpu, t->sec, (unsigned int)(t->frac >> 32),
-			     (unsigned int)(t->frac & 0xffffffff));
+	    curcpu, t->sec, (u_int)(t->frac >> 32),
+			     (u_int)(t->frac & 0xffffffff));
=20
 	ET_HW_LOCK(state);
 	if (bintime_cmp(t, &state->nextcyc, =3D=3D)) {
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/kern/kern_descrip.c
--- a/head/sys/kern/kern_descrip.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/kern/kern_descrip.c	Fri Aug 10 14:19:25 2012 +0300
@@ -35,7 +35,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/kern/kern_descrip.c 238667 2012-07-21 13:02:1=
1Z kib $");
+__FBSDID("$FreeBSD: head/sys/kern/kern_descrip.c 238834 2012-07-27 10:41:1=
0Z kib $");
=20
 #include "opt_capsicum.h"
 #include "opt_compat.h"
@@ -491,6 +491,12 @@
 		error =3D do_dup(td, DUP_FIXED, fd, tmp, td->td_retval);
 		break;
=20
+	case F_DUP2FD_CLOEXEC:
+		tmp =3D arg;
+		error =3D do_dup(td, DUP_FIXED | DUP_CLOEXEC, fd, tmp,
+		    td->td_retval);
+		break;
+
 	case F_GETFD:
 		FILEDESC_SLOCK(fdp);
 		if ((fp =3D fget_locked(fdp, fd)) =3D=3D NULL) {
@@ -849,6 +855,8 @@
 	}
 	if (flags & DUP_FIXED && old =3D=3D new) {
 		*retval =3D new;
+		if (flags & DUP_CLOEXEC)
+			fdp->fd_ofileflags[new] |=3D UF_EXCLOSE;
 		FILEDESC_XUNLOCK(fdp);
 		return (0);
 	}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/kern/kern_intr.c
--- a/head/sys/kern/kern_intr.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/kern/kern_intr.c	Fri Aug 10 14:19:25 2012 +0300
@@ -25,7 +25,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/kern/kern_intr.c 232751 2012-03-09 22:30:54Z =
jmallett $");
+__FBSDID("$FreeBSD: head/sys/kern/kern_intr.c 239095 2012-08-06 16:37:43Z =
kan $");
=20
 #include "opt_ddb.h"
=20
@@ -545,17 +545,6 @@
 		}
 	}
=20
-	/* Add the new handler to the event in priority order. */
-	TAILQ_FOREACH(temp_ih, &ie->ie_handlers, ih_next) {
-		if (temp_ih->ih_pri > ih->ih_pri)
-			break;
-	}
-	if (temp_ih =3D=3D NULL)
-		TAILQ_INSERT_TAIL(&ie->ie_handlers, ih, ih_next);
-	else
-		TAILQ_INSERT_BEFORE(temp_ih, ih, ih_next);
-	intr_event_update(ie);
-
 	/* Create a thread if we need one. */
 	while (ie->ie_thread =3D=3D NULL && handler !=3D NULL) {
 		if (ie->ie_flags & IE_ADDING_THREAD)
@@ -572,6 +561,18 @@
 			wakeup(ie);
 		}
 	}
+
+	/* Add the new handler to the event in priority order. */
+	TAILQ_FOREACH(temp_ih, &ie->ie_handlers, ih_next) {
+		if (temp_ih->ih_pri > ih->ih_pri)
+			break;
+	}
+	if (temp_ih =3D=3D NULL)
+		TAILQ_INSERT_TAIL(&ie->ie_handlers, ih, ih_next);
+	else
+		TAILQ_INSERT_BEFORE(temp_ih, ih, ih_next);
+	intr_event_update(ie);
+
 	CTR3(KTR_INTR, "%s: added %s to %s", __func__, ih->ih_name,
 	    ie->ie_name);
 	mtx_unlock(&ie->ie_lock);
@@ -618,23 +619,12 @@
 		}
 	}
=20
-	/* Add the new handler to the event in priority order. */
-	TAILQ_FOREACH(temp_ih, &ie->ie_handlers, ih_next) {
-		if (temp_ih->ih_pri > ih->ih_pri)
-			break;
-	}
-	if (temp_ih =3D=3D NULL)
-		TAILQ_INSERT_TAIL(&ie->ie_handlers, ih, ih_next);
-	else
-		TAILQ_INSERT_BEFORE(temp_ih, ih, ih_next);
-	intr_event_update(ie);
-
 	/* For filtered handlers, create a private ithread to run on. */
-	if (filter !=3D NULL && handler !=3D NULL) {=20
+	if (filter !=3D NULL && handler !=3D NULL) {
 		mtx_unlock(&ie->ie_lock);
-		it =3D ithread_create("intr: newborn", ih);	=09
+		it =3D ithread_create("intr: newborn", ih);
 		mtx_lock(&ie->ie_lock);
-		it->it_event =3D ie;=20
+		it->it_event =3D ie;
 		ih->ih_thread =3D it;
 		ithread_update(it); /* XXX - do we really need this?!?!? */
 	} else { /* Create the global per-event thread if we need one. */
@@ -654,6 +644,18 @@
 			}
 		}
 	}
+
+	/* Add the new handler to the event in priority order. */
+	TAILQ_FOREACH(temp_ih, &ie->ie_handlers, ih_next) {
+		if (temp_ih->ih_pri > ih->ih_pri)
+			break;
+	}
+	if (temp_ih =3D=3D NULL)
+		TAILQ_INSERT_TAIL(&ie->ie_handlers, ih, ih_next);
+	else
+		TAILQ_INSERT_BEFORE(temp_ih, ih, ih_next);
+	intr_event_update(ie);
+
 	CTR3(KTR_INTR, "%s: added %s to %s", __func__, ih->ih_name,
 	    ie->ie_name);
 	mtx_unlock(&ie->ie_lock);
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/kern/kern_ktr.c
--- a/head/sys/kern/kern_ktr.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/kern/kern_ktr.c	Fri Aug 10 14:19:25 2012 +0300
@@ -33,7 +33,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/kern/kern_ktr.c 229272 2012-01-02 12:12:10Z e=
d $");
+__FBSDID("$FreeBSD: head/sys/kern/kern_ktr.c 238925 2012-07-30 22:46:42Z d=
avide $");
=20
 #include "opt_ddb.h"
 #include "opt_ktr.h"
@@ -283,7 +283,7 @@
 	{
 		do {
 			saveindex =3D ktr_idx;
-			newindex =3D (saveindex + 1) & (KTR_ENTRIES - 1);
+			newindex =3D (saveindex + 1) % KTR_ENTRIES;
 		} while (atomic_cmpset_rel_int(&ktr_idx, saveindex, newindex) =3D=3D 0);
 		entry =3D &ktr_buf[saveindex];
 	}
@@ -338,7 +338,7 @@
 DB_SHOW_COMMAND(ktr, db_ktr_all)
 {
 =09
-	tstate.cur =3D (ktr_idx - 1) & (KTR_ENTRIES - 1);
+	tstate.cur =3D (ktr_idx - 1) % KTR_ENTRIES;
 	tstate.first =3D -1;
 	db_ktr_verbose =3D 0;
 	db_ktr_verbose |=3D (strchr(modif, 'v') !=3D NULL) ? 2 : 0;
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/kern/kern_proc.c
--- a/head/sys/kern/kern_proc.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/kern/kern_proc.c	Fri Aug 10 14:19:25 2012 +0300
@@ -30,7 +30,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/kern/kern_proc.c 238527 2012-07-16 09:38:19Z =
pgj $");
+__FBSDID("$FreeBSD: head/sys/kern/kern_proc.c 239065 2012-08-05 14:11:42Z =
kib $");
=20
 #include "opt_compat.h"
 #include "opt_ddb.h"
@@ -77,6 +77,7 @@
 #endif
=20
 #include <vm/vm.h>
+#include <vm/vm_param.h>
 #include <vm/vm_extern.h>
 #include <vm/pmap.h>
 #include <vm/vm_map.h>
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/kern/sched_4bsd.c
--- a/head/sys/kern/sched_4bsd.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/kern/sched_4bsd.c	Fri Aug 10 14:19:25 2012 +0300
@@ -33,7 +33,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/kern/sched_4bsd.c 235471 2012-05-15 10:58:17Z=
 pluknet $");
+__FBSDID("$FreeBSD: head/sys/kern/sched_4bsd.c 239157 2012-08-09 19:26:13Z=
 mav $");
=20
 #include "opt_hwpmc_hooks.h"
 #include "opt_sched.h"
@@ -94,6 +94,7 @@
 	fixpt_t		ts_pctcpu;	/* (j) %cpu during p_swtime. */
 	int		ts_cpticks;	/* (j) Ticks of cpu time. */
 	int		ts_slptime;	/* (j) Seconds !RUNNING. */
+	int		ts_slice;	/* Remaining part of time slice. */
 	int		ts_flags;
 	struct runq	*ts_runq;	/* runq the thread is currently on */
 #ifdef KTR
@@ -104,6 +105,7 @@
 /* flags kept in td_flags */
 #define TDF_DIDRUN	TDF_SCHED0	/* thread actually ran. */
 #define TDF_BOUND	TDF_SCHED1	/* Bound to one CPU. */
+#define	TDF_SLICEEND	TDF_SCHED2	/* Thread time slice is over. */
=20
 /* flags kept in ts_flags */
 #define	TSF_AFFINITY	0x0001		/* Has a non-"full" CPU set. */
@@ -117,9 +119,9 @@
 static struct td_sched td_sched0;
 struct mtx sched_lock;
=20
+static int	realstathz;	/* stathz is sometimes 0 and run off of hz. */
 static int	sched_tdcnt;	/* Total runnable threads in the system. */
-static int	sched_quantum;	/* Roundrobin scheduling quantum in ticks. */
-#define	SCHED_QUANTUM	(hz / 10)	/* Default sched quantum */
+static int	sched_slice =3D 1; /* Thread run time before rescheduling. */
=20
 static void	setup_runqs(void);
 static void	schedcpu(void);
@@ -145,6 +147,10 @@
     &sched_kp);
 SYSINIT(sched_setup, SI_SUB_RUN_QUEUE, SI_ORDER_FIRST, sched_setup, NULL);
=20
+static void sched_initticks(void *dummy);
+SYSINIT(sched_initticks, SI_SUB_CLOCKS, SI_ORDER_THIRD, sched_initticks,
+    NULL);
+
 /*
  * Global run queue.
  */
@@ -179,31 +185,12 @@
 	runq_init(&runq);
 }
=20
-static int
-sysctl_kern_quantum(SYSCTL_HANDLER_ARGS)
-{
-	int error, new_val;
-
-	new_val =3D sched_quantum * tick;
-	error =3D sysctl_handle_int(oidp, &new_val, 0, req);
-        if (error !=3D 0 || req->newptr =3D=3D NULL)
-		return (error);
-	if (new_val < tick)
-		return (EINVAL);
-	sched_quantum =3D new_val / tick;
-	hogticks =3D 2 * sched_quantum;
-	return (0);
-}
-
 SYSCTL_NODE(_kern, OID_AUTO, sched, CTLFLAG_RD, 0, "Scheduler");
=20
 SYSCTL_STRING(_kern_sched, OID_AUTO, name, CTLFLAG_RD, "4BSD", 0,
     "Scheduler name");
-
-SYSCTL_PROC(_kern_sched, OID_AUTO, quantum, CTLTYPE_INT | CTLFLAG_RW,
-    0, sizeof sched_quantum, sysctl_kern_quantum, "I",
-    "Roundrobin scheduling quantum in microseconds");
-
+SYSCTL_INT(_kern_sched, OID_AUTO, slice, CTLFLAG_RW, &sched_slice, 0,
+    "Slice size for timeshare threads");
 #ifdef SMP
 /* Enable forwarding of wakeups to all other cpus */
 static SYSCTL_NODE(_kern_sched, OID_AUTO, ipiwakeup, CTLFLAG_RD, NULL,
@@ -471,9 +458,8 @@
 	struct thread *td;
 	struct proc *p;
 	struct td_sched *ts;
-	int awake, realstathz;
+	int awake;
=20
-	realstathz =3D stathz ? stathz : hz;
 	sx_slock(&allproc_lock);
 	FOREACH_PROC_IN_SYSTEM(p) {
 		PROC_LOCK(p);
@@ -645,14 +631,28 @@
 {
 	setup_runqs();
=20
-	if (sched_quantum =3D=3D 0)
-		sched_quantum =3D SCHED_QUANTUM;
-	hogticks =3D 2 * sched_quantum;
+	/*
+	 * To avoid divide-by-zero, we set realstathz a dummy value
+	 * in case which sched_clock() called before sched_initticks().
+	 */
+	realstathz =3D hz;
+	sched_slice =3D realstathz / 10;	/* ~100ms */
=20
 	/* Account for thread0. */
 	sched_load_add();
 }
=20
+/*
+ * This routine determines the sched_slice after stathz and hz are setup.
+ */
+static void
+sched_initticks(void *dummy)
+{
+
+	realstathz =3D stathz ? stathz : hz;
+	sched_slice =3D realstathz / 10;	/* ~100ms */
+}
+
 /* External interfaces start here */
=20
 /*
@@ -670,6 +670,7 @@
 	proc0.p_sched =3D NULL; /* XXX */
 	thread0.td_sched =3D &td_sched0;
 	thread0.td_lock =3D &sched_lock;
+	td_sched0.ts_slice =3D sched_slice;
 	mtx_init(&sched_lock, "sched lock", NULL, MTX_SPIN | MTX_RECURSE);
 }
=20
@@ -686,9 +687,9 @@
 int
 sched_rr_interval(void)
 {
-	if (sched_quantum =3D=3D 0)
-		sched_quantum =3D SCHED_QUANTUM;
-	return (sched_quantum);
+
+	/* Convert sched_slice from stathz to hz. */
+	return (hz / (realstathz / sched_slice));
 }
=20
 /*
@@ -725,9 +726,10 @@
 	 * Force a context switch if the current thread has used up a full
 	 * quantum (default quantum is 100ms).
 	 */
-	if (!TD_IS_IDLETHREAD(td) &&
-	    ticks - PCPU_GET(switchticks) >=3D sched_quantum)
-		td->td_flags |=3D TDF_NEEDRESCHED;
+	if (!TD_IS_IDLETHREAD(td) && (--ts->ts_slice <=3D 0)) {
+		ts->ts_slice =3D sched_slice;
+		td->td_flags |=3D TDF_NEEDRESCHED | TDF_SLICEEND;
+	}
=20
 	stat =3D DPCPU_PTR(idlestat);
 	stat->oldidlecalls =3D stat->idlecalls;
@@ -781,6 +783,7 @@
 	ts =3D childtd->td_sched;
 	bzero(ts, sizeof(*ts));
 	ts->ts_flags |=3D (td->td_sched->ts_flags & TSF_AFFINITY);
+	ts->ts_slice =3D 1;
 }
=20
 void
@@ -941,6 +944,7 @@
 	struct mtx *tmtx;
 	struct td_sched *ts;
 	struct proc *p;
+	int preempted;
=20
 	tmtx =3D NULL;
 	ts =3D td->td_sched;
@@ -962,8 +966,8 @@
 		sched_load_rem();
=20
 	td->td_lastcpu =3D td->td_oncpu;
-	if (!(flags & SW_PREEMPT))
-		td->td_flags &=3D ~TDF_NEEDRESCHED;
+	preempted =3D !(td->td_flags & TDF_SLICEEND);
+	td->td_flags &=3D ~(TDF_NEEDRESCHED | TDF_SLICEEND);
 	td->td_owepreempt =3D 0;
 	td->td_oncpu =3D NOCPU;
=20
@@ -981,7 +985,7 @@
 	} else {
 		if (TD_IS_RUNNING(td)) {
 			/* Put us back on the run queue. */
-			sched_add(td, (flags & SW_PREEMPT) ?
+			sched_add(td, preempted ?
 			    SRQ_OURSELF|SRQ_YIELDING|SRQ_PREEMPTED :
 			    SRQ_OURSELF|SRQ_YIELDING);
 		}
@@ -1077,6 +1081,7 @@
 	}
 	td->td_slptick =3D 0;
 	ts->ts_slptime =3D 0;
+	ts->ts_slice =3D sched_slice;
 	sched_add(td, SRQ_BORING);
 }
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/kern/sched_ule.c
--- a/head/sys/kern/sched_ule.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/kern/sched_ule.c	Fri Aug 10 14:19:25 2012 +0300
@@ -36,7 +36,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/kern/sched_ule.c 236141 2012-05-27 10:25:20Z =
raj $");
+__FBSDID("$FreeBSD: head/sys/kern/sched_ule.c 239157 2012-08-09 19:26:13Z =
mav $");
=20
 #include "opt_hwpmc_hooks.h"
 #include "opt_kdtrace.h"
@@ -189,6 +189,9 @@
 #define	SCHED_INTERACT_HALF	(SCHED_INTERACT_MAX / 2)
 #define	SCHED_INTERACT_THRESH	(30)
=20
+/* Flags kept in td_flags. */
+#define	TDF_SLICEEND	TDF_SCHED2	/* Thread time slice is over. */
+
 /*
  * tickincr:		Converts a stathz tick into a hz domain scaled by
  *			the shift factor.  Without the shift the error rate
@@ -1841,7 +1844,7 @@
 	struct td_sched *ts;
 	struct mtx *mtx;
 	int srqflag;
-	int cpuid;
+	int cpuid, preempted;
=20
 	THREAD_LOCK_ASSERT(td, MA_OWNED);
 	KASSERT(newtd =3D=3D NULL, ("sched_switch: Unsupported newtd argument"));
@@ -1854,8 +1857,8 @@
 	ts->ts_rltick =3D ticks;
 	td->td_lastcpu =3D td->td_oncpu;
 	td->td_oncpu =3D NOCPU;
-	if (!(flags & SW_PREEMPT))
-		td->td_flags &=3D ~TDF_NEEDRESCHED;
+	preempted =3D !(td->td_flags & TDF_SLICEEND);
+	td->td_flags &=3D ~(TDF_NEEDRESCHED | TDF_SLICEEND);
 	td->td_owepreempt =3D 0;
 	tdq->tdq_switchcnt++;
 	/*
@@ -1867,7 +1870,7 @@
 		TD_SET_CAN_RUN(td);
 	} else if (TD_IS_RUNNING(td)) {
 		MPASS(td->td_lock =3D=3D TDQ_LOCKPTR(tdq));
-		srqflag =3D (flags & SW_PREEMPT) ?
+		srqflag =3D preempted ?
 		    SRQ_OURSELF|SRQ_YIELDING|SRQ_PREEMPTED :
 		    SRQ_OURSELF|SRQ_YIELDING;
 #ifdef SMP
@@ -2237,7 +2240,7 @@
 	 * We're out of time, force a requeue at userret().
 	 */
 	ts->ts_slice =3D sched_slice;
-	td->td_flags |=3D TDF_NEEDRESCHED;
+	td->td_flags |=3D TDF_NEEDRESCHED | TDF_SLICEEND;
 }
=20
 /*
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/kern/subr_uio.c
--- a/head/sys/kern/subr_uio.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/kern/subr_uio.c	Fri Aug 10 14:19:25 2012 +0300
@@ -35,7 +35,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/kern/subr_uio.c 233291 2012-03-22 04:52:51Z a=
lc $");
+__FBSDID("$FreeBSD: head/sys/kern/subr_uio.c 239065 2012-08-05 14:11:42Z k=
ib $");
=20
 #include "opt_zero.h"
=20
@@ -53,11 +53,11 @@
 #include <sys/vnode.h>
=20
 #include <vm/vm.h>
+#include <vm/vm_param.h>
 #include <vm/vm_extern.h>
 #include <vm/vm_page.h>
 #include <vm/vm_map.h>
 #ifdef ZERO_COPY_SOCKETS
-#include <vm/vm_param.h>
 #include <vm/vm_object.h>
 #endif
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/kern/sys_pipe.c
--- a/head/sys/kern/sys_pipe.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/kern/sys_pipe.c	Fri Aug 10 14:19:25 2012 +0300
@@ -90,7 +90,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/kern/sys_pipe.c 234352 2012-04-16 21:22:02Z j=
kim $");
+__FBSDID("$FreeBSD: head/sys/kern/sys_pipe.c 238936 2012-07-31 05:48:35Z d=
avidxu $");
=20
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -227,7 +227,6 @@
 static int pipe_paircreate(struct thread *td, struct pipepair **p_pp);
 static __inline int pipelock(struct pipe *cpipe, int catch);
 static __inline void pipeunlock(struct pipe *cpipe);
-static __inline void pipeselwakeup(struct pipe *cpipe);
 #ifndef PIPE_NODIRECT
 static int pipe_build_write_buffer(struct pipe *wpipe, struct uio *uio);
 static void pipe_destroy_write_buffer(struct pipe *wpipe);
@@ -607,7 +606,7 @@
 	}
 }
=20
-static __inline void
+void
 pipeselwakeup(cpipe)
 	struct pipe *cpipe;
 {
@@ -738,7 +737,7 @@
 			rpipe->pipe_map.pos +=3D size;
 			rpipe->pipe_map.cnt -=3D size;
 			if (rpipe->pipe_map.cnt =3D=3D 0) {
-				rpipe->pipe_state &=3D ~PIPE_DIRECTW;
+				rpipe->pipe_state &=3D ~(PIPE_DIRECTW|PIPE_WANTW);
 				wakeup(rpipe);
 			}
 #endif
@@ -1001,6 +1000,7 @@
 			wakeup(wpipe);
 		}
 		pipeselwakeup(wpipe);
+		wpipe->pipe_state |=3D PIPE_WANTW;
 		pipeunlock(wpipe);
 		error =3D msleep(wpipe, PIPE_MTX(wpipe), PRIBIO | PCATCH,
 		    "pipdwt", 0);
@@ -1442,7 +1442,7 @@
 	levents =3D events &
 	    (POLLIN | POLLINIGNEOF | POLLPRI | POLLRDNORM | POLLRDBAND);
 	if (rpipe->pipe_state & PIPE_NAMED && fp->f_flag & FREAD && levents &&
-	    rpipe->pipe_state & PIPE_SAMEWGEN)
+	    fp->f_seqcount =3D=3D rpipe->pipe_wgen)
 		events |=3D POLLINIGNEOF;
=20
 	if ((events & POLLINIGNEOF) =3D=3D 0) {
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/kern/sys_process.c
--- a/head/sys/kern/sys_process.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/kern/sys_process.c	Fri Aug 10 14:19:25 2012 +0300
@@ -30,7 +30,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/kern/sys_process.c 238287 2012-07-09 09:24:46=
Z davidxu $");
+__FBSDID("$FreeBSD: head/sys/kern/sys_process.c 239135 2012-08-08 00:20:30=
Z kib $");
=20
 #include "opt_compat.h"
=20
@@ -1112,6 +1112,7 @@
 #endif
 		pl =3D addr;
 		pl->pl_lwpid =3D td2->td_tid;
+		pl->pl_event =3D PL_EVENT_NONE;
 		pl->pl_flags =3D 0;
 		if (td2->td_dbgflags & TDB_XSIG) {
 			pl->pl_event =3D PL_EVENT_SIGNAL;
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/kern/uipc_syscalls.c
--- a/head/sys/kern/uipc_syscalls.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/kern/uipc_syscalls.c	Fri Aug 10 14:19:25 2012 +0300
@@ -33,7 +33,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/kern/uipc_syscalls.c 236891 2012-06-11 16:08:=
03Z pjd $");
+__FBSDID("$FreeBSD: head/sys/kern/uipc_syscalls.c 239065 2012-08-05 14:11:=
42Z kib $");
=20
 #include "opt_capsicum.h"
 #include "opt_inet.h"
@@ -82,6 +82,7 @@
 #include <security/mac/mac_framework.h>
=20
 #include <vm/vm.h>
+#include <vm/vm_param.h>
 #include <vm/vm_object.h>
 #include <vm/vm_page.h>
 #include <vm/vm_pageout.h>
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/kern/vfs_syscalls.c
--- a/head/sys/kern/vfs_syscalls.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/kern/vfs_syscalls.c	Fri Aug 10 14:19:25 2012 +0300
@@ -35,7 +35,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/kern/vfs_syscalls.c 238029 2012-07-02 21:01:0=
3Z kib $");
+__FBSDID("$FreeBSD: head/sys/kern/vfs_syscalls.c 238952 2012-07-31 18:25:0=
0Z jhb $");
=20
 #include "opt_capsicum.h"
 #include "opt_compat.h"
@@ -1093,8 +1093,7 @@
 	struct file *fp;
 	struct vnode *vp;
 	int cmode;
-	int type, indx =3D -1, error;
-	struct flock lf;
+	int indx =3D -1, error;
 	struct nameidata nd;
 	int vfslocked;
 	cap_rights_t rights_needed =3D CAP_LOOKUP;
@@ -1180,26 +1179,11 @@
 	if (fp->f_ops =3D=3D &badfileops) {
 		KASSERT(vp->v_type !=3D VFIFO, ("Unexpected fifo."));
 		fp->f_seqcount =3D 1;
-		finit(fp, flags & FMASK, DTYPE_VNODE, vp, &vnops);
+		finit(fp, (flags & FMASK) | (fp->f_flag & FHASLOCK), DTYPE_VNODE,
+		    vp, &vnops);
 	}
=20
 	VOP_UNLOCK(vp, 0);
-	if (fp->f_type =3D=3D DTYPE_VNODE && (flags & (O_EXLOCK | O_SHLOCK)) !=3D=
 0) {
-		lf.l_whence =3D SEEK_SET;
-		lf.l_start =3D 0;
-		lf.l_len =3D 0;
-		if (flags & O_EXLOCK)
-			lf.l_type =3D F_WRLCK;
-		else
-			lf.l_type =3D F_RDLCK;
-		type =3D F_FLOCK;
-		if ((flags & FNONBLOCK) =3D=3D 0)
-			type |=3D F_WAIT;
-		if ((error =3D VOP_ADVLOCK(vp, (caddr_t)fp, F_SETLK, &lf,
-		    type)) !=3D 0)
-			goto bad;
-		atomic_set_int(&fp->f_flag, FHASLOCK);
-	}
 	if (flags & O_TRUNC) {
 		error =3D fo_truncate(fp, 0, td->td_ucred, td);
 		if (error)
@@ -4483,9 +4467,8 @@
 	struct mount *mp;
 	struct vnode *vp;
 	struct fhandle fhp;
-	struct flock lf;
 	struct file *fp;
-	int fmode, error, type;
+	int fmode, error;
 	int vfslocked;
 	int indx;
=20
@@ -4542,24 +4525,9 @@
 #endif
 	fp->f_vnode =3D vp;
 	fp->f_seqcount =3D 1;
-	finit(fp, fmode & FMASK, DTYPE_VNODE, vp, &vnops);
+	finit(fp, (fmode & FMASK) | (fp->f_flag & FHASLOCK), DTYPE_VNODE, vp,
+	    &vnops);
 	VOP_UNLOCK(vp, 0);
-	if (fmode & (O_EXLOCK | O_SHLOCK)) {
-		lf.l_whence =3D SEEK_SET;
-		lf.l_start =3D 0;
-		lf.l_len =3D 0;
-		if (fmode & O_EXLOCK)
-			lf.l_type =3D F_WRLCK;
-		else
-			lf.l_type =3D F_RDLCK;
-		type =3D F_FLOCK;
-		if ((fmode & FNONBLOCK) =3D=3D 0)
-			type |=3D F_WAIT;
-		if ((error =3D VOP_ADVLOCK(vp, (caddr_t)fp, F_SETLK, &lf,
-		    type)) !=3D 0)
-			goto bad;
-		atomic_set_int(&fp->f_flag, FHASLOCK);
-	}
 	if (fmode & O_TRUNC) {
 		error =3D fo_truncate(fp, 0, td->td_ucred, td);
 		if (error)
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/kern/vfs_vnops.c
--- a/head/sys/kern/vfs_vnops.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/kern/vfs_vnops.c	Fri Aug 10 14:19:25 2012 +0300
@@ -35,7 +35,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/kern/vfs_vnops.c 238029 2012-07-02 21:01:03Z =
kib $");
+__FBSDID("$FreeBSD: head/sys/kern/vfs_vnops.c 238952 2012-07-31 18:25:00Z =
jhb $");
=20
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -229,8 +229,10 @@
 vn_open_vnode(struct vnode *vp, int fmode, struct ucred *cred,
     struct thread *td, struct file *fp)
 {
+	struct mount *mp;
 	accmode_t accmode;
-	int error;
+	struct flock lf;
+	int error, have_flock, lock_flags, type;
=20
 	VFS_ASSERT_GIANT(vp->v_mount);
 	if (vp->v_type =3D=3D VLNK)
@@ -271,6 +273,51 @@
 	if ((error =3D VOP_OPEN(vp, fmode, cred, td, fp)) !=3D 0)
 		return (error);
=20
+	if (fmode & (O_EXLOCK | O_SHLOCK)) {
+		KASSERT(fp !=3D NULL, ("open with flock requires fp"));
+		lock_flags =3D VOP_ISLOCKED(vp);
+		VOP_UNLOCK(vp, 0);
+		lf.l_whence =3D SEEK_SET;
+		lf.l_start =3D 0;
+		lf.l_len =3D 0;
+		if (fmode & O_EXLOCK)
+			lf.l_type =3D F_WRLCK;
+		else
+			lf.l_type =3D F_RDLCK;
+		type =3D F_FLOCK;
+		if ((fmode & FNONBLOCK) =3D=3D 0)
+			type |=3D F_WAIT;
+		error =3D VOP_ADVLOCK(vp, (caddr_t)fp, F_SETLK, &lf, type);
+		have_flock =3D (error =3D=3D 0);
+		vn_lock(vp, lock_flags | LK_RETRY);
+		if (error =3D=3D 0 && vp->v_iflag & VI_DOOMED)
+			error =3D ENOENT;
+		/*
+		 * Another thread might have used this vnode as an
+		 * executable while the vnode lock was dropped.
+		 * Ensure the vnode is still able to be opened for
+		 * writing after the lock has been obtained.
+		 */
+		if (error =3D=3D 0 && accmode & VWRITE)
+			error =3D vn_writechk(vp);
+		if (error) {
+			VOP_UNLOCK(vp, 0);
+			if (have_flock) {
+				lf.l_whence =3D SEEK_SET;
+				lf.l_start =3D 0;
+				lf.l_len =3D 0;
+				lf.l_type =3D F_UNLCK;
+				(void) VOP_ADVLOCK(vp, fp, F_UNLCK, &lf,
+				    F_FLOCK);
+			}
+			vn_start_write(vp, &mp, V_WAIT);
+			vn_lock(vp, lock_flags | LK_RETRY);
+			(void)VOP_CLOSE(vp, fmode, cred, td);
+			vn_finished_write(mp);
+			return (error);
+		}
+		fp->f_flag |=3D FHASLOCK;
+	}
 	if (fmode & FWRITE) {
 		vp->v_writecount++;
 		CTR3(KTR_VFS, "%s: vp %p v_writecount increased to %d",
@@ -1400,19 +1447,22 @@
 	int error;
=20
 	vp =3D fp->f_vnode;
+	fp->f_ops =3D &badfileops;
=20
 	vfslocked =3D VFS_LOCK_GIANT(vp->v_mount);
+	if (fp->f_type =3D=3D DTYPE_VNODE && fp->f_flag & FHASLOCK)
+		vref(vp);
+
+	error =3D vn_close(vp, fp->f_flag, fp->f_cred, td);
+
 	if (fp->f_type =3D=3D DTYPE_VNODE && fp->f_flag & FHASLOCK) {
 		lf.l_whence =3D SEEK_SET;
 		lf.l_start =3D 0;
 		lf.l_len =3D 0;
 		lf.l_type =3D F_UNLCK;
 		(void) VOP_ADVLOCK(vp, fp, F_UNLCK, &lf, F_FLOCK);
+		vrele(vp);
 	}
-
-	fp->f_ops =3D &badfileops;
-
-	error =3D vn_close(vp, fp->f_flag, fp->f_cred, td);
 	VFS_UNLOCK_GIANT(vfslocked);
 	return (error);
 }
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/mips/include/pmap.h
--- a/head/sys/mips/include/pmap.h	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/mips/include/pmap.h	Fri Aug 10 14:19:25 2012 +0300
@@ -40,7 +40,7 @@
  *	from: @(#)pmap.h	7.4 (Berkeley) 5/12/91
  *	from: src/sys/i386/include/pmap.h,v 1.65.2.2 2000/11/30 01:54:42 peter
  *	JNPR: pmap.h,v 1.7.2.1 2007/09/10 07:44:12 girish
- *      $FreeBSD: head/sys/mips/include/pmap.h 237168 2012-06-16 18:56:19Z=
 alc $
+ *      $FreeBSD: head/sys/mips/include/pmap.h 239152 2012-08-09 16:38:17Z=
 alc $
  */
=20
 #ifndef _MACHINE_PMAP_H_
@@ -90,7 +90,6 @@
 		u_int32_t gen:ASIDGEN_BITS;	/* its generation number */
 	}      pm_asid[MAXSMPCPU];
 	struct pmap_statistics pm_stats;	/* pmap statistics */
-	struct vm_page *pm_ptphint;	/* pmap ptp hint */
 	struct mtx pm_mtx;
 };
=20
@@ -126,7 +125,6 @@
 	vm_offset_t pv_va;	/* virtual address for mapping */
 	TAILQ_ENTRY(pv_entry) pv_list;
 	TAILQ_ENTRY(pv_entry) pv_plist;
-	vm_page_t pv_ptem;	/* VM page for pte */
 }       *pv_entry_t;
=20
 /*
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/mips/mips/pmap.c
--- a/head/sys/mips/mips/pmap.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/mips/mips/pmap.c	Fri Aug 10 14:19:25 2012 +0300
@@ -66,7 +66,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/mips/mips/pmap.c 238561 2012-07-18 05:21:34Z =
alc $");
+__FBSDID("$FreeBSD: head/sys/mips/mips/pmap.c 239170 2012-08-10 05:00:50Z =
alc $");
=20
 #include "opt_ddb.h"
=20
@@ -164,7 +164,8 @@
 static __inline void pmap_changebit(vm_page_t m, int bit, boolean_t setem);
 static vm_page_t pmap_enter_quick_locked(pmap_t pmap, vm_offset_t va,
     vm_page_t m, vm_prot_t prot, vm_page_t mpte);
-static int pmap_remove_pte(struct pmap *pmap, pt_entry_t *ptq, vm_offset_t=
 va);
+static int pmap_remove_pte(struct pmap *pmap, pt_entry_t *ptq, vm_offset_t=
 va,
+    pd_entry_t pde);
 static void pmap_remove_page(struct pmap *pmap, vm_offset_t va);
 static void pmap_remove_entry(struct pmap *pmap, vm_page_t m, vm_offset_t =
va);
 static boolean_t pmap_try_insert_pv_entry(pmap_t pmap, vm_page_t mpte,
@@ -176,7 +177,7 @@
=20
 static vm_page_t pmap_allocpte(pmap_t pmap, vm_offset_t va, int flags);
 static vm_page_t _pmap_allocpte(pmap_t pmap, unsigned ptepindex, int flags=
);
-static int pmap_unuse_pt(pmap_t, vm_offset_t, vm_page_t);
+static int pmap_unuse_pt(pmap_t, vm_offset_t, pd_entry_t);
 static pt_entry_t init_pte_prot(vm_offset_t va, vm_page_t m, vm_prot_t pro=
t);
=20
 #ifdef SMP
@@ -973,8 +974,6 @@
 		pmap_unwire_pte_hold(pmap, va, pdpg);
 	}
 #endif
-	if (pmap->pm_ptphint =3D=3D m)
-		pmap->pm_ptphint =3D NULL;
=20
 	/*
 	 * If the page is finally unwired, simply free it.
@@ -989,25 +988,14 @@
  * conditionally free the page, and manage the hold/wire counts.
  */
 static int
-pmap_unuse_pt(pmap_t pmap, vm_offset_t va, vm_page_t mpte)
+pmap_unuse_pt(pmap_t pmap, vm_offset_t va, pd_entry_t pde)
 {
-	unsigned ptepindex;
-	pd_entry_t pteva;
+	vm_page_t mpte;
=20
 	if (va >=3D VM_MAXUSER_ADDRESS)
 		return (0);
-
-	if (mpte =3D=3D NULL) {
-		ptepindex =3D pmap_pde_pindex(va);
-		if (pmap->pm_ptphint &&
-		    (pmap->pm_ptphint->pindex =3D=3D ptepindex)) {
-			mpte =3D pmap->pm_ptphint;
-		} else {
-			pteva =3D *pmap_pde(pmap, va);
-			mpte =3D PHYS_TO_VM_PAGE(MIPS_DIRECT_TO_PHYS(pteva));
-			pmap->pm_ptphint =3D mpte;
-		}
-	}
+	KASSERT(pde !=3D 0, ("pmap_unuse_pt: pde !=3D 0"));
+	mpte =3D PHYS_TO_VM_PAGE(MIPS_DIRECT_TO_PHYS(pde));
 	return (pmap_unwire_pte_hold(pmap, va, mpte));
 }
=20
@@ -1019,7 +1007,6 @@
 	PMAP_LOCK_INIT(pmap);
 	pmap->pm_segtab =3D kernel_segmap;
 	CPU_ZERO(&pmap->pm_active);
-	pmap->pm_ptphint =3D NULL;
 	for (i =3D 0; i < MAXCPU; i++) {
 		pmap->pm_asid[i].asid =3D PMAP_ASID_RESERVED;
 		pmap->pm_asid[i].gen =3D 0;
@@ -1079,7 +1066,6 @@
 	ptdva =3D MIPS_PHYS_TO_DIRECT(VM_PAGE_TO_PHYS(ptdpg));
 	pmap->pm_segtab =3D (pd_entry_t *)ptdva;
 	CPU_ZERO(&pmap->pm_active);
-	pmap->pm_ptphint =3D NULL;
 	for (i =3D 0; i < MAXCPU; i++) {
 		pmap->pm_asid[i].asid =3D PMAP_ASID_RESERVED;
 		pmap->pm_asid[i].gen =3D 0;
@@ -1156,17 +1142,11 @@
 		/* Next level entry */
 		pde =3D (pd_entry_t *)*pdep;
 		pde[pdeindex] =3D (pd_entry_t)pageva;
-		pmap->pm_ptphint =3D m;
 	}
 #else
 	pmap->pm_segtab[ptepindex] =3D (pd_entry_t)pageva;
 #endif
 	pmap->pm_stats.resident_count++;
-
-	/*
-	 * Set the page table hint
-	 */
-	pmap->pm_ptphint =3D m;
 	return (m);
 }
=20
@@ -1196,16 +1176,7 @@
 	 * count, and activate it.
 	 */
 	if (pde !=3D NULL && *pde !=3D NULL) {
-		/*
-		 * In order to get the page table page, try the hint first.
-		 */
-		if (pmap->pm_ptphint &&
-		    (pmap->pm_ptphint->pindex =3D=3D ptepindex)) {
-			m =3D pmap->pm_ptphint;
-		} else {
-			m =3D PHYS_TO_VM_PAGE(MIPS_DIRECT_TO_PHYS(*pde));
-			pmap->pm_ptphint =3D m;
-		}
+		m =3D PHYS_TO_VM_PAGE(MIPS_DIRECT_TO_PHYS(*pde));
 		m->wire_count++;
 	} else {
 		/*
@@ -1351,6 +1322,7 @@
 	static const struct timeval printinterval =3D { 60, 0 };
 	static struct timeval lastprint;
 	struct vpgqueues *vpq;
+	pd_entry_t *pde;
 	pt_entry_t *pte, oldpte;
 	pmap_t pmap;
 	pv_entry_t allocated_pv, next_pv, pv;
@@ -1389,8 +1361,10 @@
 			else if (pmap !=3D locked_pmap && !PMAP_TRYLOCK(pmap))
 				continue;
 			pmap->pm_stats.resident_count--;
-			pte =3D pmap_pte(pmap, va);
-			KASSERT(pte !=3D NULL, ("pte"));
+			pde =3D pmap_pde(pmap, va);
+			KASSERT(pde !=3D NULL && *pde !=3D 0,
+			    ("get_pv_entry: pde"));
+			pte =3D pmap_pde_to_pte(pde, va);
 			oldpte =3D *pte;
 			if (is_kernel_pmap(pmap))
 				*pte =3D PTE_G;
@@ -1406,7 +1380,7 @@
 			TAILQ_REMOVE(&pmap->pm_pvlist, pv, pv_plist);
 			m->md.pv_list_count--;
 			TAILQ_REMOVE(&m->md.pv_list, pv, pv_list);
-			pmap_unuse_pt(pmap, va, pv->pv_ptem);
+			pmap_unuse_pt(pmap, va, *pde);
 			if (pmap !=3D locked_pmap)
 				PMAP_UNLOCK(pmap);
 			if (allocated_pv =3D=3D NULL)
@@ -1513,7 +1487,6 @@
 		pv_entry_count++;
 		pv->pv_va =3D va;
 		pv->pv_pmap =3D pmap;
-		pv->pv_ptem =3D mpte;
 		TAILQ_INSERT_TAIL(&pmap->pm_pvlist, pv, pv_plist);
 		TAILQ_INSERT_TAIL(&m->md.pv_list, pv, pv_list);
 		m->md.pv_list_count++;
@@ -1526,7 +1499,8 @@
  * pmap_remove_pte: do the things to unmap a page in a process
  */
 static int
-pmap_remove_pte(struct pmap *pmap, pt_entry_t *ptq, vm_offset_t va)
+pmap_remove_pte(struct pmap *pmap, pt_entry_t *ptq, vm_offset_t va,=20
+    pd_entry_t pde)
 {
 	pt_entry_t oldpte;
 	vm_page_t m;
@@ -1561,7 +1535,7 @@
=20
 		pmap_remove_entry(pmap, m, va);
 	}
-	return (pmap_unuse_pt(pmap, va, NULL));
+	return (pmap_unuse_pt(pmap, va, pde));
 }
=20
 /*
@@ -1570,16 +1544,20 @@
 static void
 pmap_remove_page(struct pmap *pmap, vm_offset_t va)
 {
+	pd_entry_t *pde;
 	pt_entry_t *ptq;
=20
 	mtx_assert(&vm_page_queue_mtx, MA_OWNED);
 	PMAP_LOCK_ASSERT(pmap, MA_OWNED);
-	ptq =3D pmap_pte(pmap, va);
+	pde =3D pmap_pde(pmap, va);
+	if (pde =3D=3D NULL || *pde =3D=3D 0)
+		return;
+	ptq =3D pmap_pde_to_pte(pde, va);
=20
 	/*
 	 * if there is no pte for this address, just skip it!!!
 	 */
-	if (!ptq || !pte_test(ptq, PTE_V)) {
+	if (!pte_test(ptq, PTE_V)) {
 		return;
 	}
=20
@@ -1591,7 +1569,7 @@
 	/*
 	 * get a local va for mappings for this pmap.
 	 */
-	(void)pmap_remove_pte(pmap, ptq, va);
+	(void)pmap_remove_pte(pmap, ptq, va, *pde);
 	pmap_invalidate_page(pmap, va);
=20
 	return;
@@ -1610,9 +1588,6 @@
 	pd_entry_t *pde, *pdpe;
 	pt_entry_t *pte;
=20
-	if (pmap =3D=3D NULL)
-		return;
-
 	if (pmap->pm_stats.resident_count =3D=3D 0)
 		return;
=20
@@ -1673,6 +1648,7 @@
 pmap_remove_all(vm_page_t m)
 {
 	pv_entry_t pv;
+	pd_entry_t *pde;
 	pt_entry_t *pte, tpte;
=20
 	KASSERT((m->oflags & VPO_UNMANAGED) =3D=3D 0,
@@ -1694,7 +1670,9 @@
=20
 		pv->pv_pmap->pm_stats.resident_count--;
=20
-		pte =3D pmap_pte(pv->pv_pmap, pv->pv_va);
+		pde =3D pmap_pde(pv->pv_pmap, pv->pv_va);
+		KASSERT(pde !=3D NULL && *pde !=3D 0, ("pmap_remove_all: pde"));
+		pte =3D pmap_pde_to_pte(pde, pv->pv_va);
=20
 		tpte =3D *pte;
 		if (is_kernel_pmap(pv->pv_pmap))
@@ -1719,7 +1697,7 @@
 		TAILQ_REMOVE(&pv->pv_pmap->pm_pvlist, pv, pv_plist);
 		TAILQ_REMOVE(&m->md.pv_list, pv, pv_list);
 		m->md.pv_list_count--;
-		pmap_unuse_pt(pv->pv_pmap, pv->pv_va, pv->pv_ptem);
+		pmap_unuse_pt(pv->pv_pmap, pv->pv_va, *pde);
 		PMAP_UNLOCK(pv->pv_pmap);
 		free_pv_entry(pv);
 	}
@@ -1740,9 +1718,6 @@
 	pd_entry_t *pde, *pdpe;
 	vm_offset_t va_next;
=20
-	if (pmap =3D=3D NULL)
-		return;
-
 	if ((prot & VM_PROT_READ) =3D=3D VM_PROT_NONE) {
 		pmap_remove(pmap, sva, eva);
 		return;
@@ -1825,9 +1800,6 @@
 	vm_page_t mpte, om;
 	pt_entry_t rw =3D 0;
=20
-	if (pmap =3D=3D NULL)
-		return;
-
 	va &=3D ~PAGE_MASK;
  	KASSERT(va <=3D VM_MAX_KERNEL_ADDRESS, ("pmap_enter: toobig"));
 	KASSERT((m->oflags & (VPO_UNMANAGED | VPO_BUSY)) !=3D 0,
@@ -1925,7 +1897,6 @@
 			pv =3D get_pv_entry(pmap);
 		pv->pv_va =3D va;
 		pv->pv_pmap =3D pmap;
-		pv->pv_ptem =3D mpte;
 		TAILQ_INSERT_TAIL(&pmap->pm_pvlist, pv, pv_plist);
 		TAILQ_INSERT_TAIL(&m->md.pv_list, pv, pv_list);
 		m->md.pv_list_count++;
@@ -2063,14 +2034,8 @@
 			 * increment the hold count, and activate it.
 			 */
 			if (pde && *pde !=3D 0) {
-				if (pmap->pm_ptphint &&
-				    (pmap->pm_ptphint->pindex =3D=3D ptepindex)) {
-					mpte =3D pmap->pm_ptphint;
-				} else {
-					mpte =3D PHYS_TO_VM_PAGE(
-						MIPS_DIRECT_TO_PHYS(*pde));
-					pmap->pm_ptphint =3D mpte;
-				}
+				mpte =3D PHYS_TO_VM_PAGE(
+				    MIPS_DIRECT_TO_PHYS(*pde));
 				mpte->wire_count++;
 			} else {
 				mpte =3D _pmap_allocpte(pmap, ptepindex,
@@ -2277,9 +2242,6 @@
 {
 	pt_entry_t *pte;
=20
-	if (pmap =3D=3D NULL)
-		return;
-
 	PMAP_LOCK(pmap);
 	pte =3D pmap_pte(pmap, va);
=20
@@ -2458,6 +2420,7 @@
 void
 pmap_remove_pages(pmap_t pmap)
 {
+	pd_entry_t *pde;
 	pt_entry_t *pte, tpte;
 	pv_entry_t pv, npv;
 	vm_page_t m;
@@ -2470,7 +2433,9 @@
 	PMAP_LOCK(pmap);
 	for (pv =3D TAILQ_FIRST(&pmap->pm_pvlist); pv !=3D NULL; pv =3D npv) {
=20
-		pte =3D pmap_pte(pv->pv_pmap, pv->pv_va);
+		pde =3D pmap_pde(pmap, pv->pv_va);
+		KASSERT(pde !=3D NULL && *pde !=3D 0, ("pmap_remove_pages: pde"));
+		pte =3D pmap_pde_to_pte(pde, pv->pv_va);
 		if (!pte_test(pte, PTE_V))
 			panic("pmap_remove_pages: page on pm_pvlist has no pte");
 		tpte =3D *pte;
@@ -2488,7 +2453,7 @@
 		KASSERT(m !=3D NULL,
 		    ("pmap_remove_pages: bad tpte %#jx", (uintmax_t)tpte));
=20
-		pv->pv_pmap->pm_stats.resident_count--;
+		pmap->pm_stats.resident_count--;
=20
 		/*
 		 * Update the vm_page_t clean and reference bits.
@@ -2497,14 +2462,14 @@
 			vm_page_dirty(m);
 		}
 		npv =3D TAILQ_NEXT(pv, pv_plist);
-		TAILQ_REMOVE(&pv->pv_pmap->pm_pvlist, pv, pv_plist);
+		TAILQ_REMOVE(&pmap->pm_pvlist, pv, pv_plist);
=20
 		m->md.pv_list_count--;
 		TAILQ_REMOVE(&m->md.pv_list, pv, pv_list);
 		if (TAILQ_FIRST(&m->md.pv_list) =3D=3D NULL) {
 			vm_page_aflag_clear(m, PGA_WRITEABLE);
 		}
-		pmap_unuse_pt(pv->pv_pmap, pv->pv_va, pv->pv_ptem);
+		pmap_unuse_pt(pmap, pv->pv_va, *pde);
 		free_pv_entry(pv);
 	}
 	pmap_invalidate_all(pmap);
@@ -3146,16 +3111,16 @@
 	pt_entry_t rw;
=20
 	if (!(prot & VM_PROT_WRITE))
-		rw =3D  PTE_V | PTE_RO | PTE_C_CACHE;
+		rw =3D  PTE_V | PTE_RO;
 	else if ((m->oflags & VPO_UNMANAGED) =3D=3D 0) {
 		if ((m->md.pv_flags & PV_TABLE_MOD) !=3D 0)
-			rw =3D  PTE_V | PTE_D | PTE_C_CACHE;
+			rw =3D  PTE_V | PTE_D;
 		else
-			rw =3D PTE_V | PTE_C_CACHE;
+			rw =3D PTE_V;
 		vm_page_aflag_set(m, PGA_WRITEABLE);
 	} else
 		/* Needn't emulate a modified bit for unmanaged pages. */
-		rw =3D  PTE_V | PTE_D | PTE_C_CACHE;
+		rw =3D  PTE_V | PTE_D;
 	return (rw);
 }
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/mips/mips/trap.c
--- a/head/sys/mips/mips/trap.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/mips/mips/trap.c	Fri Aug 10 14:19:25 2012 +0300
@@ -39,7 +39,7 @@
  *	JNPR: trap.c,v 1.13.2.2 2007/08/29 10:03:49 girish
  */
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/mips/mips/trap.c 233638 2012-03-29 02:04:15Z =
jmallett $");
+__FBSDID("$FreeBSD: head/sys/mips/mips/trap.c 239126 2012-08-07 08:37:35Z =
imp $");
=20
 #include "opt_compat.h"
 #include "opt_ddb.h"
@@ -302,7 +302,7 @@
 static int emulate_fp =3D 0;
 #endif
 SYSCTL_INT(_machdep, OID_AUTO, emulate_fp, CTLFLAG_RW,
-    &allow_unaligned_acc, 0, "Emulate unimplemented FPU instructions");
+    &emulate_fp, 0, "Emulate unimplemented FPU instructions");
=20
 static int emulate_unaligned_access(struct trapframe *frame, int mode);
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/modules/ahci/Makefile
--- a/head/sys/modules/ahci/Makefile	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/modules/ahci/Makefile	Fri Aug 10 14:19:25 2012 +0300
@@ -1,8 +1,8 @@
-# $FreeBSD$
+# $FreeBSD: head/sys/modules/ahci/Makefile 238805 2012-07-26 13:44:48Z mav=
 $
=20
 .PATH: ${.CURDIR}/../../dev/ahci
=20
 KMOD=3D	ahci
-SRCS=3D	ahci.c ahci.h device_if.h bus_if.h pci_if.h opt_cam.h
+SRCS=3D	ahci.c ahciem.c ahci.h device_if.h bus_if.h pci_if.h opt_cam.h
=20
 .include <bsd.kmod.mk>
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/modules/cam/Makefile
--- a/head/sys/modules/cam/Makefile	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/modules/cam/Makefile	Fri Aug 10 14:19:25 2012 +0300
@@ -1,4 +1,4 @@
-# $FreeBSD: head/sys/modules/cam/Makefile 235911 2012-05-24 14:07:44Z mav $
+# $FreeBSD: head/sys/modules/cam/Makefile 238894 2012-07-30 03:00:58Z bz $
=20
 S=3D	${.CURDIR}/../..
=20
@@ -14,7 +14,6 @@
 SRCS+=3D	opt_cd.h
 SRCS+=3D	opt_pt.h
 SRCS+=3D	opt_sa.h
-SRCS+=3D	opt_enc.h
 SRCS+=3D	device_if.h bus_if.h vnode_if.h
 SRCS+=3D	cam.c
 .if exists($S/${MACHINE}/${MACHINE}/cam_machdep.c)
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/net/bpf_zerocopy.c
--- a/head/sys/net/bpf_zerocopy.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/net/bpf_zerocopy.c	Fri Aug 10 14:19:25 2012 +0300
@@ -28,7 +28,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/net/bpf_zerocopy.c 235745 2012-05-21 22:17:29=
Z melifaro $");
+__FBSDID("$FreeBSD: head/sys/net/bpf_zerocopy.c 239065 2012-08-05 14:11:42=
Z kib $");
=20
 #include "opt_bpf.h"
=20
@@ -50,6 +50,7 @@
 #include <net/bpfdesc.h>
=20
 #include <vm/vm.h>
+#include <vm/vm_param.h>
 #include <vm/pmap.h>
 #include <vm/vm_extern.h>
 #include <vm/vm_map.h>
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/net/flowtable.c
--- a/head/sys/net/flowtable.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/net/flowtable.c	Fri Aug 10 14:19:25 2012 +0300
@@ -34,7 +34,7 @@
 #include "opt_inet6.h"
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/net/flowtable.c 238092 2012-07-04 07:37:53Z g=
lebius $");
+__FBSDID("$FreeBSD: head/sys/net/flowtable.c 238989 2012-08-02 13:20:44Z g=
lebius $");
=20
 #include <sys/param.h> =20
 #include <sys/types.h>
@@ -1258,7 +1258,7 @@
 		=09
 			else
 				l3addr =3D (struct sockaddr_storage *)&ro->ro_dst;
-			llentry_update(&lle, LLTABLE6(ifp), l3addr, ifp);
+			lle =3D llentry_alloc(ifp, LLTABLE6(ifp), l3addr);
 		}
 #endif=09
 #ifdef INET
@@ -1267,7 +1267,7 @@
 				l3addr =3D (struct sockaddr_storage *)rt->rt_gateway;
 			else
 				l3addr =3D (struct sockaddr_storage *)&ro->ro_dst;
-			llentry_update(&lle, LLTABLE(ifp), l3addr, ifp);=09
+			lle =3D llentry_alloc(ifp, LLTABLE(ifp), l3addr);=09
 		}
 		=09
 #endif
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/net/if_llatbl.c
--- a/head/sys/net/if_llatbl.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/net/if_llatbl.c	Fri Aug 10 14:19:25 2012 +0300
@@ -25,7 +25,7 @@
  * SUCH DAMAGE.
  */
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/net/if_llatbl.c 230598 2012-01-26 20:02:40Z k=
macy $");
+__FBSDID("$FreeBSD: head/sys/net/if_llatbl.c 238990 2012-08-02 13:57:49Z g=
lebius $");
=20
 #include "opt_ddb.h"
 #include "opt_inet.h"
@@ -106,10 +106,19 @@
 	size_t pkts_dropped;
 	struct mbuf *next;
=20
+	IF_AFDATA_WLOCK_ASSERT(lle->lle_tbl->llt_ifp);
+	LLE_WLOCK_ASSERT(lle);
+
+	/* XXX: guard against race with other llentry_free(). */
+	if (!(lle->la_flags & LLE_LINKED)) {
+		LLE_FREE_LOCKED(lle);
+		return (0);
+	}
+
+	LIST_REMOVE(lle, lle_next);
+	lle->la_flags &=3D ~(LLE_VALID | LLE_LINKED);
+
 	pkts_dropped =3D 0;
-	LLE_WLOCK_ASSERT(lle);
-	LIST_REMOVE(lle, lle_next);
-
 	while ((lle->la_numheld > 0) && (lle->la_hold !=3D NULL)) {
 		next =3D lle->la_hold->m_nextpkt;
 		m_freem(lle->la_hold);
@@ -118,53 +127,43 @@
 		pkts_dropped++;
 	}
=20
-	KASSERT(lle->la_numheld =3D=3D 0,=20
-		("%s: la_numheld %d > 0, pkts_droped %zd", __func__,=20
+	KASSERT(lle->la_numheld =3D=3D 0,
+		("%s: la_numheld %d > 0, pkts_droped %zd", __func__,
 		 lle->la_numheld, pkts_dropped));
=20
-	lle->la_flags &=3D ~LLE_VALID;
 	LLE_FREE_LOCKED(lle);
=20
 	return (pkts_dropped);
 }
=20
 /*
- * Update an llentry for address dst (equivalent to rtalloc for new-arp)
- * Caller must pass in a valid struct llentry * (or NULL)
+ * (al)locate an llentry for address dst (equivalent to rtalloc for new-ar=
p).
  *
- * if found the llentry * is returned referenced and unlocked
+ * If found the llentry * is returned referenced and unlocked.
  */
-int
-llentry_update(struct llentry **llep, struct lltable *lt,
-    struct sockaddr_storage *dst, struct ifnet *ifp)
+struct llentry *
+llentry_alloc(struct ifnet *ifp, struct lltable *lt,
+    struct sockaddr_storage *dst)
 {
 	struct llentry *la;
=20
-	IF_AFDATA_RLOCK(ifp);=09
-	la =3D lla_lookup(lt, LLE_EXCLUSIVE,
-	    (struct sockaddr *)dst);
+	IF_AFDATA_RLOCK(ifp);
+	la =3D lla_lookup(lt, LLE_EXCLUSIVE, (struct sockaddr *)dst);
 	IF_AFDATA_RUNLOCK(ifp);
-	if ((la =3D=3D NULL) &&=20
+	if ((la =3D=3D NULL) &&
 	    (ifp->if_flags & (IFF_NOARP | IFF_STATICARP)) =3D=3D 0) {
 		IF_AFDATA_WLOCK(ifp);
-		la =3D lla_lookup(lt,
-		    (LLE_CREATE | LLE_EXCLUSIVE),
+		la =3D lla_lookup(lt, (LLE_CREATE | LLE_EXCLUSIVE),
 		    (struct sockaddr *)dst);
-		IF_AFDATA_WUNLOCK(ifp);=09
+		IF_AFDATA_WUNLOCK(ifp);
 	}
-	if (la !=3D NULL && (*llep !=3D la)) {
-		if (*llep !=3D NULL)
-			LLE_FREE(*llep);
+
+	if (la !=3D NULL) {
 		LLE_ADDREF(la);
 		LLE_WUNLOCK(la);
-		*llep =3D la;
-	} else if (la !=3D NULL)
-		LLE_WUNLOCK(la);
+	}
=20
-	if (la =3D=3D NULL)
-		return (ENOENT);
-
-	return (0);
+	return (la);
 }
=20
 /*
@@ -182,17 +181,16 @@
 	SLIST_REMOVE(&V_lltables, llt, lltable, llt_link);
 	LLTABLE_WUNLOCK();
=20
-	for (i=3D0; i < LLTBL_HASHTBL_SIZE; i++) {
+	IF_AFDATA_WLOCK(llt->llt_ifp);
+	for (i =3D 0; i < LLTBL_HASHTBL_SIZE; i++) {
 		LIST_FOREACH_SAFE(lle, &llt->lle_head[i], lle_next, next) {
-			int canceled;
-
-			canceled =3D callout_drain(&lle->la_timer);
 			LLE_WLOCK(lle);
-			if (canceled)
+			if (callout_stop(&lle->la_timer))
 				LLE_REMREF(lle);
 			llentry_free(lle);
 		}
 	}
+	IF_AFDATA_WUNLOCK(llt->llt_ifp);
=20
 	free(llt, M_LLTABLE);
 }
@@ -227,7 +225,7 @@
=20
 void
 lltable_prefix_free(int af, struct sockaddr *prefix, struct sockaddr *mask,
-	    u_int flags)
+    u_int flags)
 {
 	struct lltable *llt;
=20
@@ -297,7 +295,7 @@
 		if (rtm->rtm_flags & RTF_ANNOUNCE) {
 			flags |=3D LLE_PUB;
 #ifdef INET
-			if (dst->sa_family =3D=3D AF_INET &&=20
+			if (dst->sa_family =3D=3D AF_INET &&
 			    ((struct sockaddr_inarp *)dst)->sin_other !=3D 0) {
 				struct rtentry *rt;
 				((struct sockaddr_inarp *)dst)->sin_other =3D 0;
@@ -342,7 +340,7 @@
=20
 	if (flags & LLE_CREATE)
 		flags |=3D LLE_EXCLUSIVE;
-=09
+
 	IF_AFDATA_LOCK(ifp);
 	lle =3D lla_lookup(llt, flags, dst);
 	IF_AFDATA_UNLOCK(ifp);
@@ -378,7 +376,7 @@
 #ifdef INET
 			/*  gratuitous ARP */
 			if ((laflags & LLE_PUB) && dst->sa_family =3D=3D AF_INET) {
-				arprequest(ifp,=20
+				arprequest(ifp,
 				    &((struct sockaddr_in *)dst)->sin_addr,
 				    &((struct sockaddr_in *)dst)->sin_addr,
 				    ((laflags & LLE_PROXY) ?
@@ -451,7 +449,7 @@
=20
 		sin =3D (struct sockaddr_in *)&la->l3_addr;
 		inet_ntoa_r(sin->sin_addr, l3s);
-		db_printf(" l3_addr=3D%s\n", l3s);=09
+		db_printf(" l3_addr=3D%s\n", l3s);
 		break;
 	}
 #endif
@@ -463,7 +461,7 @@
=20
 		sin6 =3D (struct sockaddr_in6 *)&la->l3_addr;
 		ip6_sprintf(l3s, &sin6->sin6_addr);
-		db_printf(" l3_addr=3D%s\n", l3s);=09
+		db_printf(" l3_addr=3D%s\n", l3s);
 		break;
 	}
 #endif
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/net/if_llatbl.h
--- a/head/sys/net/if_llatbl.h	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/net/if_llatbl.h	Fri Aug 10 14:19:25 2012 +0300
@@ -25,7 +25,7 @@
  * SUCH DAMAGE.
  */
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/net/if_llatbl.h 232054 2012-02-23 18:21:37Z k=
macy $");
+__FBSDID("$FreeBSD: head/sys/net/if_llatbl.h 238990 2012-08-02 13:57:49Z g=
lebius $");
=20
 #ifndef	_NET_IF_LLATBL_H_
 #define	_NET_IF_LLATBL_H_
@@ -61,17 +61,17 @@
 	struct llentries	 *lle_head;
 	void			(*lle_free)(struct lltable *, struct llentry *);
 	struct mbuf		 *la_hold;
-	int     		 la_numheld;  /* # of packets currently held */
+	int			 la_numheld;  /* # of packets currently held */
 	time_t			 la_expire;
-	uint16_t		 la_flags;   =20
+	uint16_t		 la_flags;
 	uint16_t		 la_asked;
 	uint16_t		 la_preempt;
 	uint16_t		 ln_byhint;
 	int16_t			 ln_state;	/* IPv6 has ND6_LLINFO_NOSTATE =3D=3D -2 */
-	uint16_t		 ln_router;=20
+	uint16_t		 ln_router;
 	time_t			 ln_ntick;
 	int			 lle_refcnt;
-				=20
+
 	union {
 		uint64_t	mac_aligned;
 		uint16_t	mac16[3];
@@ -103,25 +103,28 @@
 #define	LLE_ADDREF(lle) do {					\
 	LLE_WLOCK_ASSERT(lle);					\
 	KASSERT((lle)->lle_refcnt >=3D 0,				\
-		("negative refcnt %d", (lle)->lle_refcnt));	\
+	    ("negative refcnt %d on lle %p",			\
+	    (lle)->lle_refcnt, (lle)));				\
 	(lle)->lle_refcnt++;					\
 } while (0)
+
 #define	LLE_REMREF(lle)	do {					\
 	LLE_WLOCK_ASSERT(lle);					\
-	KASSERT((lle)->lle_refcnt > 1,				\
-		("bogus refcnt %d", (lle)->lle_refcnt));	\
+	KASSERT((lle)->lle_refcnt > 0,				\
+	    ("bogus refcnt %d on lle %p",			\
+	    (lle)->lle_refcnt, (lle)));				\
 	(lle)->lle_refcnt--;					\
 } while (0)
=20
 #define	LLE_FREE_LOCKED(lle) do {				\
-	if ((lle)->lle_refcnt <=3D 1)				\
-		(lle)->lle_free((lle)->lle_tbl, (lle));\
+	if ((lle)->lle_refcnt =3D=3D 1)				\
+		(lle)->lle_free((lle)->lle_tbl, (lle));		\
 	else {							\
-		(lle)->lle_refcnt--;				\
+		LLE_REMREF(lle);				\
 		LLE_WUNLOCK(lle);				\
 	}							\
 	/* guard against invalid refs */			\
-	lle =3D NULL;						\
+	(lle) =3D NULL;						\
 } while (0)
=20
 #define	LLE_FREE(lle) do {					\
@@ -158,7 +161,7 @@
 	struct llentry *	(*llt_lookup)(struct lltable *, u_int flags,
 				    const struct sockaddr *l3addr);
 	int			(*llt_dump)(struct lltable *,
-				     struct sysctl_req *);
+				    struct sysctl_req *);
 };
 MALLOC_DECLARE(M_LLTABLE);
=20
@@ -171,25 +174,26 @@
 #define	LLE_VALID	0x0008	/* ll_addr is valid */
 #define	LLE_PROXY	0x0010	/* proxy entry ??? */
 #define	LLE_PUB		0x0020	/* publish entry ??? */
+#define	LLE_LINKED	0x0040	/* linked to lookup structure */
+#define	LLE_EXCLUSIVE	0x2000	/* return lle xlocked  */
 #define	LLE_DELETE	0x4000	/* delete on a lookup - match LLE_IFADDR */
 #define	LLE_CREATE	0x8000	/* create on a lookup miss */
-#define	LLE_EXCLUSIVE	0x2000	/* return lle xlocked  */
=20
 #define LLATBL_HASH(key, mask) \
 	(((((((key >> 8) ^ key) >> 8) ^ key) >> 8) ^ key) & mask)
=20
 struct lltable *lltable_init(struct ifnet *, int);
 void		lltable_free(struct lltable *);
-void		lltable_prefix_free(int, struct sockaddr *,=20
-                       struct sockaddr *, u_int);
+void		lltable_prefix_free(int, struct sockaddr *,
+		    struct sockaddr *, u_int);
 #if 0
 void		lltable_drain(int);
 #endif
 int		lltable_sysctl_dumparp(int, struct sysctl_req *);
=20
 size_t		llentry_free(struct llentry *);
-int		llentry_update(struct llentry **, struct lltable *,
-                       struct sockaddr_storage *, struct ifnet *);
+struct llentry  *llentry_alloc(struct ifnet *, struct lltable *,
+		    struct sockaddr_storage *);
=20
 /*
  * Generic link layer address lookup function.
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/net/if_loop.c
--- a/head/sys/net/if_loop.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/net/if_loop.c	Fri Aug 10 14:19:25 2012 +0300
@@ -27,7 +27,7 @@
  * SUCH DAMAGE.
  *
  *	@(#)if_loop.c	8.2 (Berkeley) 1/9/95
- * $FreeBSD: head/sys/net/if_loop.c 236332 2012-05-30 20:56:07Z tuexen $
+ * $FreeBSD: head/sys/net/if_loop.c 238871 2012-07-28 20:31:39Z bz $
  */
=20
 /*
@@ -257,10 +257,20 @@
 		m->m_pkthdr.csum_flags &=3D ~LO_CSUM_FEATURES;
 		break;
 	case AF_INET6:
+#if 0
+		/*
+		 * XXX-BZ for now always claim the checksum is good despite
+		 * any interface flags.   This is a workaround for 9.1-R and
+		 * a proper solution ought to be sought later.
+		 */
 		if (ifp->if_capenable & IFCAP_RXCSUM_IPV6) {
 			m->m_pkthdr.csum_data =3D 0xffff;
 			m->m_pkthdr.csum_flags =3D LO_CSUM_SET;
 		}
+#else
+		m->m_pkthdr.csum_data =3D 0xffff;
+		m->m_pkthdr.csum_flags =3D LO_CSUM_SET;
+#endif
 		m->m_pkthdr.csum_flags &=3D ~LO_CSUM_FEATURES6;
 		break;
 	case AF_IPX:
@@ -446,15 +456,29 @@
 			ifp->if_capenable ^=3D IFCAP_RXCSUM;
 		if ((mask & IFCAP_TXCSUM) !=3D 0)
 			ifp->if_capenable ^=3D IFCAP_TXCSUM;
-		if ((mask & IFCAP_RXCSUM_IPV6) !=3D 0)
+		if ((mask & IFCAP_RXCSUM_IPV6) !=3D 0) {
+#if 0
 			ifp->if_capenable ^=3D IFCAP_RXCSUM_IPV6;
-		if ((mask & IFCAP_TXCSUM_IPV6) !=3D 0)
+#else
+			error =3D EOPNOTSUPP;
+			break;
+#endif
+		}
+		if ((mask & IFCAP_TXCSUM_IPV6) !=3D 0) {
+#if 0
 			ifp->if_capenable ^=3D IFCAP_TXCSUM_IPV6;
+#else
+			error =3D EOPNOTSUPP;
+			break;
+#endif
+		}
 		ifp->if_hwassist =3D 0;
 		if (ifp->if_capenable & IFCAP_TXCSUM)
 			ifp->if_hwassist =3D LO_CSUM_FEATURES;
+#if 0
 		if (ifp->if_capenable & IFCAP_TXCSUM_IPV6)
 			ifp->if_hwassist |=3D LO_CSUM_FEATURES6;
+#endif
 		break;
=20
 	default:
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/net/if_var.h
--- a/head/sys/net/if_var.h	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/net/if_var.h	Fri Aug 10 14:19:25 2012 +0300
@@ -27,7 +27,7 @@
  * SUCH DAMAGE.
  *
  *	From: @(#)if.h	8.1 (Berkeley) 6/10/93
- * $FreeBSD: head/sys/net/if_var.h 237263 2012-06-19 07:34:13Z np $
+ * $FreeBSD: head/sys/net/if_var.h 238990 2012-08-02 13:57:49Z glebius $
  */
=20
 #ifndef	_NET_IF_VAR_H_
@@ -415,6 +415,8 @@
 #define	IF_AFDATA_DESTROY(ifp)	rw_destroy(&(ifp)->if_afdata_lock)
=20
 #define	IF_AFDATA_LOCK_ASSERT(ifp)	rw_assert(&(ifp)->if_afdata_lock, RA_LO=
CKED)
+#define	IF_AFDATA_RLOCK_ASSERT(ifp)	rw_assert(&(ifp)->if_afdata_lock, RA_R=
LOCKED)
+#define	IF_AFDATA_WLOCK_ASSERT(ifp)	rw_assert(&(ifp)->if_afdata_lock, RA_W=
LOCKED)
 #define	IF_AFDATA_UNLOCK_ASSERT(ifp)	rw_assert(&(ifp)->if_afdata_lock, RA_=
UNLOCKED)
=20
 int	if_handoff(struct ifqueue *ifq, struct mbuf *m, struct ifnet *ifp,
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/net80211/ieee80211.h
--- a/head/sys/net80211/ieee80211.h	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/net80211/ieee80211.h	Fri Aug 10 14:19:25 2012 +0300
@@ -23,7 +23,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.
  *
- * $FreeBSD: head/sys/net80211/ieee80211.h 234892 2012-05-01 16:14:18Z mon=
thadar $
+ * $FreeBSD: head/sys/net80211/ieee80211.h 239142 2012-08-08 17:16:06Z adr=
ian $
  */
 #ifndef _NET80211_IEEE80211_H_
 #define _NET80211_IEEE80211_H_
@@ -772,7 +772,7 @@
 	(sizeof(struct ieee80211_country_ie) + 3*(IEEE80211_COUNTRY_MAX_BANDS-1))
=20
 /*
- * 802.11h Channel Switch Announcement (CSA).
+ * 802.11h Quiet Time Element.
  */
 struct ieee80211_quiet_ie {
 	uint8_t		quiet_ie;		/* IEEE80211_ELEMID_QUIET */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/net80211/ieee80211_hwmp.c
--- a/head/sys/net80211/ieee80211_hwmp.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/net80211/ieee80211_hwmp.c	Fri Aug 10 14:19:25 2012 +0300
@@ -28,7 +28,7 @@
  */=20
 #include <sys/cdefs.h>
 #ifdef __FreeBSD__
-__FBSDID("$FreeBSD: head/sys/net80211/ieee80211_hwmp.c 234896 2012-05-01 1=
6:18:38Z monthadar $");
+__FBSDID("$FreeBSD: head/sys/net80211/ieee80211_hwmp.c 238942 2012-07-31 0=
8:05:40Z monthadar $");
 #endif
=20
 /*
@@ -840,7 +840,7 @@
 	IEEE80211_NOTE(vap, IEEE80211_MSG_HWMP, vap->iv_bss,
 	    "%s", "send broadcast PREQ");
=20
-	preq.preq_flags =3D IEEE80211_MESHPREQ_FLAGS_AM;
+	preq.preq_flags =3D 0;
 	if (ms->ms_flags & IEEE80211_MESHFLAGS_GATE)
 		preq.preq_flags |=3D IEEE80211_MESHPREQ_FLAGS_GATE;
 	if (hs->hs_rootmode =3D=3D IEEE80211_HWMP_ROOTMODE_PROACTIVE)
@@ -912,6 +912,7 @@
 	struct ieee80211_hwmp_state *hs =3D vap->iv_hwmp;
 	struct ieee80211_meshprep_ie prep;
 	ieee80211_hwmp_seq preqid;	/* last seen preqid for orig */
+	uint32_t metric =3D 0;
=20
 	if (ni =3D=3D vap->iv_bss ||
 	    ni->ni_mlstate !=3D IEEE80211_NODE_MESH_ESTABLISHED)
@@ -951,7 +952,7 @@
 		hrtarg =3D IEEE80211_MESH_ROUTE_PRIV(rttarg,
 		    struct ieee80211_hwmp_route);
 	/* Address mode: ucast */
-	if((preq->preq_flags & IEEE80211_MESHPREQ_FLAGS_AM) =3D=3D 0 &&
+	if(preq->preq_flags & IEEE80211_MESHPREQ_FLAGS_AM &&
 	    rttarg =3D=3D NULL &&
 	    !IEEE80211_ADDR_EQ(vap->iv_myaddr, PREQ_TADDR(0))) {
 		IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_HWMP,
@@ -985,13 +986,13 @@
 	/* Data creation and update of forwarding information
 	 * according to Table 11C-8 for originator mesh STA.
 	 */
+	metric =3D preq->preq_metric + ms->ms_pmetric->mpm_metric(ni);
 	if (HWMP_SEQ_GT(preq->preq_origseq, hrorig->hr_seq) ||
 	    (HWMP_SEQ_EQ(preq->preq_origseq, hrorig->hr_seq) &&
-	    preq->preq_metric < rtorig->rt_metric)) {
+	    metric < rtorig->rt_metric)) {
 		hrorig->hr_seq =3D preq->preq_origseq;
 		IEEE80211_ADDR_COPY(rtorig->rt_nexthop, wh->i_addr2);
-		rtorig->rt_metric =3D preq->preq_metric +
-			ms->ms_pmetric->mpm_metric(ni);
+		rtorig->rt_metric =3D metric;
 		rtorig->rt_nhops  =3D preq->preq_hopcount + 1;
 		ieee80211_mesh_rt_update(rtorig, preq->preq_lifetime);
 		/* path to orig is valid now */
@@ -1029,6 +1030,8 @@
 		hs->hs_seq =3D HWMP_SEQ_MAX(hs->hs_seq, PREQ_TSEQ(0)) + 1;
=20
 		prep.prep_flags =3D 0;
+		prep.prep_hopcount =3D 0;
+		IEEE80211_ADDR_COPY(prep.prep_targetaddr, vap->iv_myaddr);
 		if (rttarg !=3D NULL && /* if NULL it means we are the target */
 		    rttarg->rt_flags & IEEE80211_MESHRT_FLAGS_PROXY) {
 			IEEE80211_NOTE(vap, IEEE80211_MSG_HWMP, ni,
@@ -1038,13 +1041,13 @@
 			    rttarg->rt_dest);
 			/* update proxy seqno to HWMP seqno */
 			rttarg->rt_ext_seq =3D hs->hs_seq;
+			prep.prep_hopcount =3D rttarg->rt_nhops;
+			IEEE80211_ADDR_COPY(prep.prep_targetaddr, rttarg->rt_mesh_gate);
 		}
 		/*
 		 * Build and send a PREP frame.
 		 */
-		prep.prep_hopcount =3D 0;
 		prep.prep_ttl =3D ms->ms_ttl;
-		IEEE80211_ADDR_COPY(prep.prep_targetaddr, vap->iv_myaddr);
 		prep.prep_targetseq =3D hs->hs_seq;
 		prep.prep_lifetime =3D preq->preq_lifetime;
 		prep.prep_metric =3D IEEE80211_MESHLMETRIC_INITIALVAL;
@@ -1286,7 +1289,7 @@
 			IEEE80211_NOTE(vap, IEEE80211_MSG_HWMP, ni,
 			    "discard PREP from %6D, new metric %u > %u",
 			    prep->prep_targetaddr, ":",
-			    prep->prep_metric, rt->rt_metric);
+			    metric, rt->rt_metric);
 			return;
 		}
 	}
@@ -1296,7 +1299,7 @@
 	    rt->rt_flags & IEEE80211_MESHRT_FLAGS_VALID ?
 	    "prefer" : "update",
 	    prep->prep_targetaddr, ":",
-	    rt->rt_nhops, prep->prep_hopcount,
+	    rt->rt_nhops, prep->prep_hopcount + 1,
 	    rt->rt_metric, metric);
=20
 	hr->hr_seq =3D prep->prep_targetseq;
@@ -1368,7 +1371,7 @@
 		    rtext->rt_flags & IEEE80211_MESHRT_FLAGS_VALID ?
 		    "prefer" : "update",
 		    prep->prep_target_ext_addr, ":",
-		    rtext->rt_nhops, prep->prep_hopcount,
+		    rtext->rt_nhops, prep->prep_hopcount + 1,
 		    rtext->rt_metric, metric);
=20
 		rtext->rt_flags =3D IEEE80211_MESHRT_FLAGS_PROXY |
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/netgraph/ng_ether.c
--- a/head/sys/netgraph/ng_ether.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/netgraph/ng_ether.c	Fri Aug 10 14:19:25 2012 +0300
@@ -39,7 +39,7 @@
  * Authors: Archie Cobbs <archie at freebsd.org>
  *	    Julian Elischer <julian at freebsd.org>
  *
- * $FreeBSD: head/sys/netgraph/ng_ether.c 224307 2011-07-25 09:12:48Z avg $
+ * $FreeBSD: head/sys/netgraph/ng_ether.c 238844 2012-07-27 13:57:28Z emas=
te $
  */
=20
 /*
@@ -71,6 +71,8 @@
 #include <netgraph/ng_parse.h>
 #include <netgraph/ng_ether.h>
=20
+MODULE_VERSION(ng_ether, 1);
+
 #define IFP2NG(ifp)  (IFP2AC((ifp))->ac_netgraph)
=20
 /* Per-node private data */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/netgraph/ng_pptpgre.c
--- a/head/sys/netgraph/ng_pptpgre.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/netgraph/ng_pptpgre.c	Fri Aug 10 14:19:25 2012 +0300
@@ -37,7 +37,7 @@
  *
  * Author: Archie Cobbs <archie at freebsd.org>
  *
- * $FreeBSD: head/sys/netgraph/ng_pptpgre.c 220768 2011-04-18 09:12:27Z gl=
ebius $
+ * $FreeBSD: head/sys/netgraph/ng_pptpgre.c 239007 2012-08-03 12:55:31Z ma=
v $
  * $Whistle: ng_pptpgre.c,v 1.7 1999/12/08 00:10:06 archie Exp $
  */
=20
@@ -562,7 +562,7 @@
 		}
=20
 		/* Sanity check frame length */
-		if (m !=3D NULL && m->m_pkthdr.len > PPTP_MAX_PAYLOAD) {
+		if (m->m_pkthdr.len > PPTP_MAX_PAYLOAD) {
 			priv->stats.xmitTooBig++;
 			ERROUT(EMSGSIZE);
 		}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/netinet/if_ether.c
--- a/head/sys/netinet/if_ether.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/netinet/if_ether.c	Fri Aug 10 14:19:25 2012 +0300
@@ -36,7 +36,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/netinet/if_ether.c 237263 2012-06-19 07:34:13=
Z np $");
+__FBSDID("$FreeBSD: head/sys/netinet/if_ether.c 238990 2012-08-02 13:57:49=
Z glebius $");
=20
 #include "opt_inet.h"
=20
@@ -87,8 +87,8 @@
 VNET_DEFINE(int, useloopback) =3D 1;	/* use loopback interface for
 					 * local traffic */
 static VNET_DEFINE(int, arp_proxyall) =3D 0;
-static VNET_DEFINE(int, arpt_down) =3D 20;      /* keep incomplete entries=
 for
-					       * 20 seconds */
+static VNET_DEFINE(int, arpt_down) =3D 20;	/* keep incomplete entries for
+						 * 20 seconds */
 VNET_DEFINE(struct arpstat, arpstat);  /* ARP statistics, see if_arp.h */
=20
 static VNET_DEFINE(int, arp_maxhold) =3D 1;
@@ -119,7 +119,7 @@
 	&VNET_NAME(arpstat), arpstat,
 	"ARP statistics (struct arpstat, net/if_arp.h)");
 SYSCTL_VNET_INT(_net_link_ether_inet, OID_AUTO, maxhold, CTLFLAG_RW,
-	&VNET_NAME(arp_maxhold), 0,=20
+	&VNET_NAME(arp_maxhold), 0,
 	"Number of packets to hold per ARP entry");
=20
 static void	arp_init(void);
@@ -163,49 +163,40 @@
 static void
 arptimer(void *arg)
 {
+	struct llentry *lle =3D (struct llentry *)arg;
 	struct ifnet *ifp;
-	struct llentry   *lle;
-	int pkts_dropped;
+	size_t pkts_dropped;
=20
-	KASSERT(arg !=3D NULL, ("%s: arg NULL", __func__));
-	lle =3D (struct llentry *)arg;
+	if (lle->la_flags & LLE_STATIC) {
+		LLE_WUNLOCK(lle);
+		return;
+	}
+
 	ifp =3D lle->lle_tbl->llt_ifp;
 	CURVNET_SET(ifp->if_vnet);
+
+	if (lle->la_flags !=3D LLE_DELETED) {
+		int evt;
+
+		if (lle->la_flags & LLE_VALID)
+			evt =3D LLENTRY_EXPIRED;
+		else
+			evt =3D LLENTRY_TIMEDOUT;
+		EVENTHANDLER_INVOKE(lle_event, lle, evt);
+	}
+
+	callout_stop(&lle->la_timer);
+
+	/* XXX: LOR avoidance. We still have ref on lle. */
+	LLE_WUNLOCK(lle);
 	IF_AFDATA_LOCK(ifp);
 	LLE_WLOCK(lle);
-	if (lle->la_flags & LLE_STATIC)
-		LLE_WUNLOCK(lle);
-	else {
-		if (!callout_pending(&lle->la_timer) &&
-		    callout_active(&lle->la_timer)) {
-			callout_stop(&lle->la_timer);
-			LLE_REMREF(lle);
=20
-			if (lle->la_flags !=3D LLE_DELETED) {
-				int evt;
-
-				if (lle->la_flags & LLE_VALID)
-					evt =3D LLENTRY_EXPIRED;
-				else
-					evt =3D LLENTRY_TIMEDOUT;
-				EVENTHANDLER_INVOKE(lle_event, lle, evt);
-			}
-
-			pkts_dropped =3D llentry_free(lle);
-			ARPSTAT_ADD(dropped, pkts_dropped);
-			ARPSTAT_INC(timeouts);
-		} else {
-#ifdef DIAGNOSTIC
-			struct sockaddr *l3addr =3D L3_ADDR(lle);
-			log(LOG_INFO,=20
-			    "arptimer issue: %p, IPv4 address: \"%s\"\n", lle,
-			    inet_ntoa(
-			        ((const struct sockaddr_in *)l3addr)->sin_addr));
-#endif
-			LLE_WUNLOCK(lle);
-		}
-	}
+	LLE_REMREF(lle);
+	pkts_dropped =3D llentry_free(lle);
 	IF_AFDATA_UNLOCK(ifp);
+	ARPSTAT_ADD(dropped, pkts_dropped);
+	ARPSTAT_INC(timeouts);
 	CURVNET_RESTORE();
 }
=20
@@ -250,7 +241,7 @@
 				break;  /* found it. */
 		}
 		IF_ADDR_RUNLOCK(ifp);
-		if (sip =3D=3D NULL) { =20
+		if (sip =3D=3D NULL) {
 			printf("%s: cannot find matching address\n", __func__);
 			return;
 		}
@@ -322,15 +313,15 @@
 		}
 	}
 retry:
-	IF_AFDATA_RLOCK(ifp);=09
+	IF_AFDATA_RLOCK(ifp);
 	la =3D lla_lookup(LLTABLE(ifp), flags, dst);
-	IF_AFDATA_RUNLOCK(ifp);=09
+	IF_AFDATA_RUNLOCK(ifp);
 	if ((la =3D=3D NULL) && ((flags & LLE_EXCLUSIVE) =3D=3D 0)
-	    && ((ifp->if_flags & (IFF_NOARP | IFF_STATICARP)) =3D=3D 0)) {	=09
+	    && ((ifp->if_flags & (IFF_NOARP | IFF_STATICARP)) =3D=3D 0)) {
 		flags |=3D (LLE_CREATE | LLE_EXCLUSIVE);
-		IF_AFDATA_WLOCK(ifp);=09
+		IF_AFDATA_WLOCK(ifp);
 		la =3D lla_lookup(LLTABLE(ifp), flags, dst);
-		IF_AFDATA_WUNLOCK(ifp);=09
+		IF_AFDATA_WUNLOCK(ifp);
 	}
 	if (la =3D=3D NULL) {
 		if (flags & LLE_CREATE)
@@ -339,7 +330,7 @@
 			    inet_ntoa(SIN(dst)->sin_addr));
 		m_freem(m);
 		return (EINVAL);
-	}=20
+	}
=20
 	if ((la->la_flags & LLE_VALID) &&
 	    ((la->la_flags & LLE_STATIC) || la->la_expire > time_uptime)) {
@@ -354,12 +345,12 @@
 			arprequest(ifp, NULL, &SIN(dst)->sin_addr, NULL);
 			la->la_preempt--;
 		}
-	=09
+
 		*lle =3D la;
 		error =3D 0;
 		goto done;
-	}=20
-			   =20
+	}
+
 	if (la->la_flags & LLE_STATIC) {   /* should not happen! */
 		log(LOG_DEBUG, "arpresolve: ouch, empty static llinfo for %s\n",
 		    inet_ntoa(SIN(dst)->sin_addr));
@@ -389,20 +380,20 @@
 				la->la_numheld--;
 				ARPSTAT_INC(dropped);
 			}
-		}=20
+		}
 		if (la->la_hold !=3D NULL) {
 			curr =3D la->la_hold;
 			while (curr->m_nextpkt !=3D NULL)
 				curr =3D curr->m_nextpkt;
 			curr->m_nextpkt =3D m;
-		} else=20
+		} else
 			la->la_hold =3D m;
 		la->la_numheld++;
 		if (renew =3D=3D 0 && (flags & LLE_EXCLUSIVE)) {
 			flags &=3D ~LLE_EXCLUSIVE;
 			LLE_DOWNGRADE(la);
 		}
-	=09
+
 	}
 	/*
 	 * Return EWOULDBLOCK if we have tried less than arp_maxtries. It
@@ -510,11 +501,11 @@
 	&log_arp_wrong_iface, 0,
 	"log arp packets arriving on the wrong interface");
 SYSCTL_INT(_net_link_ether_inet, OID_AUTO, log_arp_movements, CTLFLAG_RW,
-        &log_arp_movements, 0,
-        "log arp replies from MACs different than the one in the cache");
+	&log_arp_movements, 0,
+	"log arp replies from MACs different than the one in the cache");
 SYSCTL_INT(_net_link_ether_inet, OID_AUTO, log_arp_permanent_modify, CTLFL=
AG_RW,
-        &log_arp_permanent_modify, 0,
-        "log arp replies from MACs different than the one in the permanent=
 arp entry");
+	&log_arp_permanent_modify, 0,
+	"log arp replies from MACs different than the one in the permanent arp en=
try");
=20
=20
 static void
@@ -550,7 +541,7 @@
 	}
=20
 	ah =3D mtod(m, struct arphdr *);
-	/*=20
+	/*
 	 * ARP is only for IPv4 so we can reject packets with
 	 * a protocol length not equal to an IPv4 address.
 	 */
@@ -686,7 +677,7 @@
 	sin.sin_addr =3D isaddr;
 	flags =3D (itaddr.s_addr =3D=3D myaddr.s_addr) ? LLE_CREATE : 0;
 	flags |=3D LLE_EXCLUSIVE;
-	IF_AFDATA_LOCK(ifp);=20
+	IF_AFDATA_LOCK(ifp);
 	la =3D lla_lookup(LLTABLE(ifp), flags, (struct sockaddr *)&sin);
 	IF_AFDATA_UNLOCK(ifp);
 	if (la !=3D NULL) {
@@ -716,7 +707,7 @@
 				goto reply;
 			}
 			if (log_arp_movements) {
-			        log(LOG_INFO, "arp: %s moved from %*D "
+				log(LOG_INFO, "arp: %s moved from %*D "
 				    "to %*D on %s\n",
 				    inet_ntoa(isaddr),
 				    ifp->if_addrlen,
@@ -725,7 +716,7 @@
 				    ifp->if_xname);
 			}
 		}
-		   =20
+
 		if (ifp->if_addrlen !=3D ah->ar_hln) {
 			LLE_WUNLOCK(la);
 			log(LOG_WARNING, "arp from %*D: addr len: new %d, "
@@ -751,7 +742,7 @@
 		}
 		la->la_asked =3D 0;
 		la->la_preempt =3D V_arp_maxtries;
-		/*=20
+		/*
 		 * The packets are all freed within the call to the output
 		 * routine.
 		 *
@@ -787,7 +778,7 @@
 		struct llentry *lle =3D NULL;
=20
 		sin.sin_addr =3D itaddr;
-		IF_AFDATA_LOCK(ifp);=20
+		IF_AFDATA_LOCK(ifp);
 		lle =3D lla_lookup(LLTABLE(ifp), 0, (struct sockaddr *)&sin);
 		IF_AFDATA_UNLOCK(ifp);
=20
@@ -802,7 +793,7 @@
=20
 			if (!V_arp_proxyall)
 				goto drop;
-		=09
+
 			sin.sin_addr =3D itaddr;
 			/* XXX MRT use table 0 for arp reply  */
 			rt =3D in_rtalloc1((struct sockaddr *)&sin, 0, 0UL, 0);
@@ -830,7 +821,7 @@
 			 * wrong network.
 			 */
 			sin.sin_addr =3D isaddr;
-		=09
+
 			/* XXX MRT use table 0 for arp checks */
 			rt =3D in_rtalloc1((struct sockaddr *)&sin, 0, 0UL, 0);
 			if (!rt)
@@ -846,8 +837,7 @@
 			RTFREE_LOCKED(rt);
=20
 #ifdef DEBUG_PROXY
-			printf("arp: proxying for %s\n",
-			       inet_ntoa(itaddr));
+			printf("arp: proxying for %s\n", inet_ntoa(itaddr));
 #endif
 		}
 	}
@@ -869,8 +859,8 @@
 	(void)memcpy(ar_spa(ah), &itaddr, ah->ar_pln);
 	ah->ar_op =3D htons(ARPOP_REPLY);
 	ah->ar_pro =3D htons(ETHERTYPE_IP); /* let's be sure! */
-	m->m_len =3D sizeof(*ah) + (2 * ah->ar_pln) + (2 * ah->ar_hln);  =20
-	m->m_pkthdr.len =3D m->m_len;  =20
+	m->m_len =3D sizeof(*ah) + (2 * ah->ar_pln) + (2 * ah->ar_hln);
+	m->m_pkthdr.len =3D m->m_len;
 	m->m_pkthdr.rcvif =3D NULL;
 	sa.sa_family =3D AF_ARP;
 	sa.sa_len =3D 2;
@@ -894,7 +884,7 @@
 	if (ntohl(IA_SIN(ifa)->sin_addr.s_addr) !=3D INADDR_ANY) {
 		arprequest(ifp, &IA_SIN(ifa)->sin_addr,
 				&IA_SIN(ifa)->sin_addr, IF_LLADDR(ifp));
-		/*=20
+		/*
 		 * interface address is considered static entry
 		 * because the output of the arp utility shows
 		 * that L2 entry as permanent
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/netinet/in.c
--- a/head/sys/netinet/in.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/netinet/in.c	Fri Aug 10 14:19:25 2012 +0300
@@ -31,7 +31,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/netinet/in.c 237263 2012-06-19 07:34:13Z np $=
");
+__FBSDID("$FreeBSD: head/sys/netinet/in.c 238990 2012-08-02 13:57:49Z gleb=
ius $");
=20
 #include "opt_mpath.h"
=20
@@ -489,20 +489,20 @@
 			    ia->ia_addr.sin_addr.s_addr)
 			hostIsNew =3D 0;
 		if (ifra->ifra_mask.sin_len) {
-			/*=20
+			/*
 			 * QL: XXX
 			 * Need to scrub the prefix here in case
 			 * the issued command is SIOCAIFADDR with
 			 * the same address, but with a different
 			 * prefix length. And if the prefix length
-			 * is the same as before, then the call is=20
+			 * is the same as before, then the call is
 			 * un-necessarily executed here.
 			 */
 			in_ifscrub(ifp, ia, LLE_STATIC);
 			ia->ia_sockmask =3D ifra->ifra_mask;
 			ia->ia_sockmask.sin_family =3D AF_INET;
 			ia->ia_subnetmask =3D
-			     ntohl(ia->ia_sockmask.sin_addr.s_addr);
+			    ntohl(ia->ia_sockmask.sin_addr.s_addr);
 			maskIsNew =3D 1;
 		}
 		if ((ifp->if_flags & IFF_POINTOPOINT) &&
@@ -886,8 +886,8 @@
 			RT_ADDREF(ia_ro.ro_rt);
 			RTFREE_LOCKED(ia_ro.ro_rt);
 		} else
-			error =3D ifa_add_loopback_route((struct ifaddr *)ia,=20
-				       (struct sockaddr *)&ia->ia_addr);
+			error =3D ifa_add_loopback_route((struct ifaddr *)ia,
+			    (struct sockaddr *)&ia->ia_addr);
 		if (error =3D=3D 0)
 			ia->ia_flags |=3D IFA_RTSELF;
 		if (ia_ro.ro_rt !=3D NULL)
@@ -902,10 +902,10 @@
 	    ? RTF_HOST : 0)
=20
 /*
- * Generate a routing message when inserting or deleting=20
+ * Generate a routing message when inserting or deleting
  * an interface address alias.
  */
-static void in_addralias_rtmsg(int cmd, struct in_addr *prefix,=20
+static void in_addralias_rtmsg(int cmd, struct in_addr *prefix,
     struct in_ifaddr *target)
 {
 	struct route pfx_ro;
@@ -928,16 +928,13 @@
=20
 		/* QL: XXX
 		 * Point the gateway to the new interface
-		 * address as if a new prefix route entry has=20
-		 * been added through the new address alias.=20
-		 * All other parts of the rtentry is accurate,=20
+		 * 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 =3D=20
-			(struct sockaddr *)&target->ia_addr;
-		rt_newaddrmsg(cmd,=20
-			      (struct ifaddr *)target,
-			      0, &msg_rt);
+		msg_rt.rt_gateway =3D (struct sockaddr *)&target->ia_addr;
+		rt_newaddrmsg(cmd, (struct ifaddr *)target, 0, &msg_rt);
 		RTFREE(pfx_ro.ro_rt);
 	}
 	return;
@@ -985,7 +982,7 @@
 		 */
 		if (ia->ia_flags & IFA_ROUTE) {
 #ifdef RADIX_MPATH
-			if (ia->ia_addr.sin_addr.s_addr =3D=3D=20
+			if (ia->ia_addr.sin_addr.s_addr =3D=3D
 			    target->ia_addr.sin_addr.s_addr) {
 				IN_IFADDR_RUNLOCK();
 				return (EEXIST);
@@ -1058,7 +1055,7 @@
 		}
 		if (freeit && (flags & LLE_STATIC)) {
 			error =3D ifa_del_loopback_route((struct ifaddr *)target,
-				       (struct sockaddr *)&target->ia_addr);
+			    (struct sockaddr *)&target->ia_addr);
 			if (error =3D=3D 0)
 				target->ia_flags &=3D ~IFA_RTSELF;
 		}
@@ -1141,8 +1138,8 @@
 	mask0.sin_len =3D sizeof(mask0);
 	mask0.sin_family =3D AF_INET;
 	mask0.sin_addr.s_addr =3D target->ia_subnetmask;
-	lltable_prefix_free(AF_INET, (struct sockaddr *)&prefix0,=20
-			    (struct sockaddr *)&mask0, flags);
+	lltable_prefix_free(AF_INET, (struct sockaddr *)&prefix0,
+	    (struct sockaddr *)&mask0, flags);
=20
 	/*
 	 * As no-one seem to have this prefix, we can remove the route.
@@ -1184,14 +1181,14 @@
 		      * Check for old-style (host 0) broadcast, but
 		      * taking into account that RFC 3021 obsoletes it.
 		      */
-		     (ia->ia_subnetmask !=3D IN_RFC3021_MASK &&
-		     t =3D=3D ia->ia_subnet)) &&
+		    (ia->ia_subnetmask !=3D IN_RFC3021_MASK &&
+		    t =3D=3D ia->ia_subnet)) &&
 		     /*
 		      * Check for an all one subnetmask. These
 		      * only exist when an interface gets a secondary
 		      * address.
 		      */
-		     ia->ia_subnetmask !=3D (u_long)0xffffffff)
+		    ia->ia_subnetmask !=3D (u_long)0xffffffff)
 			    return (1);
 	return (0);
 #undef ia
@@ -1283,7 +1280,6 @@
 	if (lle =3D=3D NULL)		/* NB: caller generates msg */
 		return NULL;
=20
-	callout_init(&lle->base.la_timer, CALLOUT_MPSAFE);
 	/*
 	 * For IPv4 this will trigger "arpresolve" to generate
 	 * an ARP request.
@@ -1293,45 +1289,44 @@
 	lle->base.lle_refcnt =3D 1;
 	lle->base.lle_free =3D in_lltable_free;
 	LLE_LOCK_INIT(&lle->base);
-	return &lle->base;
+	callout_init_rw(&lle->base.la_timer, &lle->base.lle_lock,
+	    CALLOUT_RETURNUNLOCKED);
+
+	return (&lle->base);
 }
=20
 #define IN_ARE_MASKED_ADDR_EQUAL(d, a, m)	(			\
 	    (((ntohl((d)->sin_addr.s_addr) ^ (a)->sin_addr.s_addr) & (m)->sin_add=
r.s_addr)) =3D=3D 0 )
=20
 static void
-in_lltable_prefix_free(struct lltable *llt,=20
-		       const struct sockaddr *prefix,
-		       const struct sockaddr *mask,
-		       u_int flags)
+in_lltable_prefix_free(struct lltable *llt, const struct sockaddr *prefix,
+    const struct sockaddr *mask, u_int flags)
 {
 	const struct sockaddr_in *pfx =3D (const struct sockaddr_in *)prefix;
 	const struct sockaddr_in *msk =3D (const struct sockaddr_in *)mask;
 	struct llentry *lle, *next;
-	register int i;
+	int i;
 	size_t pkts_dropped;
=20
-	for (i=3D0; i < LLTBL_HASHTBL_SIZE; i++) {
+	IF_AFDATA_WLOCK(llt->llt_ifp);
+	for (i =3D 0; i < LLTBL_HASHTBL_SIZE; i++) {
 		LIST_FOREACH_SAFE(lle, &llt->lle_head[i], lle_next, next) {
-
-		        /*=20
+			/*
 			 * (flags & LLE_STATIC) means deleting all entries
-			 * including static ARP entries
+			 * including static ARP entries.
 			 */
-			if (IN_ARE_MASKED_ADDR_EQUAL((struct sockaddr_in *)L3_ADDR(lle),=20
-						     pfx, msk) &&
-			    ((flags & LLE_STATIC) || !(lle->la_flags & LLE_STATIC))) {
-				int canceled;
-
-				canceled =3D callout_drain(&lle->la_timer);
+			if (IN_ARE_MASKED_ADDR_EQUAL(satosin(L3_ADDR(lle)),
+			    pfx, msk) && ((flags & LLE_STATIC) ||
+			    !(lle->la_flags & LLE_STATIC))) {
 				LLE_WLOCK(lle);
-				if (canceled)
+				if (callout_stop(&lle->la_timer))
 					LLE_REMREF(lle);
 				pkts_dropped =3D llentry_free(lle);
 				ARPSTAT_ADD(dropped, pkts_dropped);
 			}
 		}
 	}
+	IF_AFDATA_WUNLOCK(llt->llt_ifp);
 }
=20
=20
@@ -1357,19 +1352,18 @@
 	 */
 	if (rt->rt_flags & RTF_GATEWAY) {
 		if (!(rt->rt_flags & RTF_HOST) || !rt->rt_ifp ||
-			rt->rt_ifp->if_type !=3D IFT_ETHER ||
-			  (rt->rt_ifp->if_flags &=20
-			   (IFF_NOARP | IFF_STATICARP)) !=3D 0 ||
-			  memcmp(rt->rt_gateway->sa_data, l3addr->sa_data,
-				 sizeof(in_addr_t)) !=3D 0) {
+		    rt->rt_ifp->if_type !=3D IFT_ETHER ||
+		    (rt->rt_ifp->if_flags & (IFF_NOARP | IFF_STATICARP)) !=3D 0 ||
+		    memcmp(rt->rt_gateway->sa_data, l3addr->sa_data,
+		    sizeof(in_addr_t)) !=3D 0) {
 			RTFREE_LOCKED(rt);
 			return (EINVAL);
 		}
 	}
=20
 	/*
-	 * Make sure that at least the destination address is covered=20
-	 * by the route. This is for handling the case where 2 or more=20
+	 * Make sure that at least the destination address is covered
+	 * by the route. This is for handling the case where 2 or more
 	 * interfaces have the same prefix. An incoming packet arrives
 	 * on one interface and the corresponding outgoing packet leaves
 	 * another interface.
@@ -1429,7 +1423,7 @@
 	hashkey =3D sin->sin_addr.s_addr;
 	lleh =3D &llt->lle_head[LLATBL_HASH(hashkey, LLTBL_HASHMASK)];
 	LIST_FOREACH(lle, lleh, lle_next) {
-		struct sockaddr_in *sa2 =3D (struct sockaddr_in *)L3_ADDR(lle);
+		struct sockaddr_in *sa2 =3D satosin(L3_ADDR(lle));
 		if (lle->la_flags & LLE_DELETED)
 			continue;
 		if (sa2->sin_addr.s_addr =3D=3D sin->sin_addr.s_addr)
@@ -1438,7 +1432,7 @@
 	if (lle =3D=3D NULL) {
 #ifdef DIAGNOSTIC
 		if (flags & LLE_DELETE)
-			log(LOG_INFO, "interface address is missing from cache =3D %p  in delet=
e\n", lle);=09
+			log(LOG_INFO, "interface address is missing from cache =3D %p  in delet=
e\n", lle);
 #endif
 		if (!(flags & LLE_CREATE))
 			return (NULL);
@@ -1464,19 +1458,20 @@
=20
 		lle->lle_tbl  =3D llt;
 		lle->lle_head =3D lleh;
+		lle->la_flags |=3D LLE_LINKED;
 		LIST_INSERT_HEAD(lleh, lle, lle_next);
 	} else if (flags & LLE_DELETE) {
 		if (!(lle->la_flags & LLE_IFADDR) || (flags & LLE_IFADDR)) {
 			LLE_WLOCK(lle);
-			lle->la_flags =3D LLE_DELETED;
+			lle->la_flags |=3D LLE_DELETED;
 			EVENTHANDLER_INVOKE(lle_event, lle, LLENTRY_DELETED);
 			LLE_WUNLOCK(lle);
 #ifdef DIAGNOSTIC
-			log(LOG_INFO, "ifaddr cache =3D %p  is deleted\n", lle);=09
+			log(LOG_INFO, "ifaddr cache =3D %p  is deleted\n", lle);
 #endif
 		}
 		lle =3D (void *)-1;
-	=09
+
 	}
 	if (LLE_IS_VALID(lle)) {
 		if (flags & LLE_EXCLUSIVE)
@@ -1508,7 +1503,7 @@
 	for (i =3D 0; i < LLTBL_HASHTBL_SIZE; i++) {
 		LIST_FOREACH(lle, &llt->lle_head[i], lle_next) {
 			struct sockaddr_dl *sdl;
-		=09
+
 			/* skip deleted entries */
 			if ((lle->la_flags & LLE_DELETED) =3D=3D LLE_DELETED)
 				continue;
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/netinet/in_cksum.c
--- a/head/sys/netinet/in_cksum.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/netinet/in_cksum.c	Fri Aug 10 14:19:25 2012 +0300
@@ -30,7 +30,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
+__FBSDID("$FreeBSD: head/sys/netinet/in_cksum.c 238941 2012-07-31 08:04:49=
Z luigi $");
=20
 #include <sys/param.h>
 #include <sys/mbuf.h>
@@ -88,7 +88,7 @@
 		/*
 		 * Force to even boundary.
 		 */
-		if ((1 & (int) w) && (mlen > 0)) {
+		if ((1 & (uintptr_t) w) && (mlen > 0)) {
 			REDUCE;
 			sum <<=3D 8;
 			s_util.c[0] =3D *(u_char *)w;
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/netinet/ip_dummynet.h
--- a/head/sys/netinet/ip_dummynet.h	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/netinet/ip_dummynet.h	Fri Aug 10 14:19:25 2012 +0300
@@ -24,7 +24,7 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD$
+ * $FreeBSD: head/sys/netinet/ip_dummynet.h 239124 2012-08-07 07:52:25Z lu=
igi $
  */
=20
 #ifndef _IP_DUMMYNET_H
@@ -171,8 +171,8 @@
 	struct ipfw_flow_id fid;
 	uint64_t	tot_pkts; /* statistics counters  */
 	uint64_t	tot_bytes;
-	uint32_t	length; /* Queue lenght, in packets */
-	uint32_t	len_bytes; /* Queue lenght, in bytes */
+	uint32_t	length; /* Queue length, in packets */
+	uint32_t	len_bytes; /* Queue length, in bytes */
 	uint32_t	drops;
 };
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/netinet/ipfw/dummynet.txt
--- a/head/sys/netinet/ipfw/dummynet.txt	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/netinet/ipfw/dummynet.txt	Fri Aug 10 14:19:25 2012 +0300
@@ -1,5 +1,5 @@
 #
-# $FreeBSD: head/sys/netinet/ipfw/dummynet.txt 227458 2011-11-11 22:27:09Z=
 eadler $
+# $FreeBSD: head/sys/netinet/ipfw/dummynet.txt 239124 2012-08-07 07:52:25Z=
 luigi $
 #
=20
 Notes on the internal structure of dummynet (2010 version)
@@ -839,7 +839,7 @@
=20
 The struct scheduler represent the scheduler descriptor that is passed to
 dummynet when a scheduler module is loaded.
-This struct contains the type of scheduler, the lenght of all structs and
+This struct contains the type of scheduler, the length of all structs and
 all function pointers.
 If a function is not implemented should be initialize to NULL. Some functi=
ons
 are mandatory, other are mandatory if some memory should be freed.
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/netinet/ipfw/ip_dn_io.c
--- a/head/sys/netinet/ipfw/ip_dn_io.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/netinet/ipfw/ip_dn_io.c	Fri Aug 10 14:19:25 2012 +0300
@@ -28,7 +28,7 @@
  * Dummynet portions related to packet handling.
  */
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/netinet/ipfw/ip_dn_io.c 227309 2011-11-07 15:=
43:11Z ed $");
+__FBSDID("$FreeBSD: head/sys/netinet/ipfw/ip_dn_io.c 239093 2012-08-06 11:=
02:23Z luigi $");
=20
 #include "opt_inet6.h"
=20
@@ -98,17 +98,11 @@
=20
 #ifdef SYSCTL_NODE
=20
-SYSBEGIN(f4)
-
-SYSCTL_DECL(_net_inet);
-SYSCTL_DECL(_net_inet_ip);
-static SYSCTL_NODE(_net_inet_ip, OID_AUTO, dummynet, CTLFLAG_RW, 0, "Dummy=
net");
-
-/* wrapper to pass dn_cfg fields to SYSCTL_* */
-//#define DC(x)	(&(VNET_NAME(_base_dn_cfg).x))
-#define DC(x)	(&(dn_cfg.x))
-/* parameters */
-
+/*
+ * Because of the way the SYSBEGIN/SYSEND macros work on other
+ * platforms, there should not be functions between them.
+ * So keep the handlers outside the block.
+ */
 static int
 sysctl_hash_size(SYSCTL_HANDLER_ARGS)
 {
@@ -124,10 +118,6 @@
 	return (0);
 }
=20
-SYSCTL_PROC(_net_inet_ip_dummynet, OID_AUTO, hash_size,
-    CTLTYPE_INT | CTLFLAG_RW, 0, 0, sysctl_hash_size,
-    "I", "Default hash table size");
-
 static int
 sysctl_limits(SYSCTL_HANDLER_ARGS)
 {
@@ -154,6 +144,23 @@
 	return (0);
 }
=20
+SYSBEGIN(f4)
+
+SYSCTL_DECL(_net_inet);
+SYSCTL_DECL(_net_inet_ip);
+static SYSCTL_NODE(_net_inet_ip, OID_AUTO, dummynet, CTLFLAG_RW, 0, "Dummy=
net");
+
+/* wrapper to pass dn_cfg fields to SYSCTL_* */
+//#define DC(x)	(&(VNET_NAME(_base_dn_cfg).x))
+#define DC(x)	(&(dn_cfg.x))
+/* parameters */
+
+
+SYSCTL_PROC(_net_inet_ip_dummynet, OID_AUTO, hash_size,
+    CTLTYPE_INT | CTLFLAG_RW, 0, 0, sysctl_hash_size,
+    "I", "Default hash table size");
+
+
 SYSCTL_PROC(_net_inet_ip_dummynet, OID_AUTO, pipe_slot_limit,
     CTLTYPE_LONG | CTLFLAG_RW, 0, 1, sysctl_limits,
     "L", "Upper limit in slots for pipe queue.");
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/netinet/ipfw/ip_dummynet.c
--- a/head/sys/netinet/ipfw/ip_dummynet.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/netinet/ipfw/ip_dummynet.c	Fri Aug 10 14:19:25 2012 +0300
@@ -26,7 +26,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/netinet/ipfw/ip_dummynet.c 238063 2012-07-03 =
08:42:48Z issyl0 $");
+__FBSDID("$FreeBSD: head/sys/netinet/ipfw/ip_dummynet.c 238988 2012-08-02 =
12:45:13Z luigi $");
=20
 /*
  * Configuration and internal object management for dummynet.
@@ -77,9 +77,10 @@
 static struct taskqueue	*dn_tq =3D NULL;
=20
 static void
-dummynet(void * __unused unused)
+dummynet(void *arg)
 {
=20
+	(void)arg;	/* UNUSED */
 	taskqueue_enqueue(dn_tq, &dn_task);
 }
=20
@@ -1286,7 +1287,7 @@
         }
 	if (nfs->flags & DN_HAVE_MASK) {
 		/* make sure we have some buckets */
-		ipdn_bound_var(&nfs->buckets, dn_cfg.hash_size,
+		ipdn_bound_var((int *)&nfs->buckets, dn_cfg.hash_size,
 			1, dn_cfg.max_hash_size, "flowset buckets");
 	} else {
 		nfs->buckets =3D 1;	/* we only need 1 */
@@ -1371,7 +1372,7 @@
 		return EINVAL;
 	/* make sure we have some buckets */
 	if (a.sch->flags & DN_HAVE_MASK)
-		ipdn_bound_var(&a.sch->buckets, dn_cfg.hash_size,
+		ipdn_bound_var((int *)&a.sch->buckets, dn_cfg.hash_size,
 			1, dn_cfg.max_hash_size, "sched buckets");
 	/* XXX other sanity checks */
 	bzero(&p, sizeof(p));
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/netinet/ipfw/ip_fw2.c
--- a/head/sys/netinet/ipfw/ip_fw2.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/netinet/ipfw/ip_fw2.c	Fri Aug 10 14:19:25 2012 +0300
@@ -24,7 +24,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/netinet/ipfw/ip_fw2.c 233478 2012-03-25 20:37=
:59Z melifaro $");
+__FBSDID("$FreeBSD: head/sys/netinet/ipfw/ip_fw2.c 238977 2012-08-01 18:49=
:00Z luigi $");
=20
 /*
  * The FreeBSD IP packet firewall, main file
@@ -176,7 +176,7 @@
     &default_to_accept, 0,
     "Make the default rule accept all packets.");
 TUNABLE_INT("net.inet.ip.fw.default_to_accept", &default_to_accept);
-TUNABLE_INT("net.inet.ip.fw.tables_max", &default_fw_tables);
+TUNABLE_INT("net.inet.ip.fw.tables_max", (int *)&default_fw_tables);
 SYSCTL_VNET_INT(_net_inet_ip_fw, OID_AUTO, static_count,
     CTLFLAG_RD, &VNET_NAME(layer3_chain.n_rules), 0,
     "Number of static rules");
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/netinet/ipfw/ip_fw_dynamic.c
--- a/head/sys/netinet/ipfw/ip_fw_dynamic.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/netinet/ipfw/ip_fw_dynamic.c	Fri Aug 10 14:19:25 2012 +0300
@@ -24,7 +24,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/netinet/ipfw/ip_fw_dynamic.c 232273 2012-02-2=
8 22:00:41Z oleg $");
+__FBSDID("$FreeBSD: head/sys/netinet/ipfw/ip_fw_dynamic.c 238978 2012-08-0=
1 18:52:07Z luigi $");
=20
 #define        DEB(x)
 #define        DDB(x) x
@@ -275,9 +275,9 @@
 #endif
 	{
 		da.s_addr =3D htonl(id->src_ip);
-		inet_ntoa_r(da, src);
+		inet_ntop(AF_INET, &da, src, sizeof(src));
 		da.s_addr =3D htonl(id->dst_ip);
-		inet_ntoa_r(da, dst);
+		inet_ntop(AF_INET, &da, dst, sizeof(dst));
 	}
 	printf("ipfw: unlink entry %s %d -> %s %d, %d left\n",
 	    src, id->src_port, dst, id->dst_port, V_dyn_count - 1);
@@ -656,9 +656,9 @@
 #endif
 		{
 			da.s_addr =3D htonl(r->id.src_ip);
-			inet_ntoa_r(da, src);
+			inet_ntop(AF_INET, &da, src, sizeof(src));
 			da.s_addr =3D htonl(r->id.dst_ip);
-			inet_ntoa_r(da, dst);
+			inet_ntop(AF_INET, &da, dst, sizeof(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,
@@ -740,9 +740,9 @@
 #endif
 	{
 		da.s_addr =3D htonl(args->f_id.src_ip);
-		inet_ntoa_r(da, src);
+		inet_ntop(AF_INET, &da, src, sizeof(src));
 		da.s_addr =3D htonl(args->f_id.dst_ip);
-		inet_ntoa_r(da, dst);
+		inet_ntop(AF_INET, &da, dst, sizeof(dst));
 	}
 	printf("ipfw: %s: type %d %s %u -> %s %u\n",
 	    __func__, cmd->o.opcode, src, args->f_id.src_port,
@@ -850,10 +850,12 @@
 					{
 						da.s_addr =3D
 						    htonl(args->f_id.src_ip);
-						inet_ntoa_r(da, src);
+						inet_ntop(AF_INET, &da, src,
+						    sizeof(src));
 						da.s_addr =3D
 						    htonl(args->f_id.dst_ip);
-						inet_ntoa_r(da, dst);
+						inet_ntop(AF_INET, &da, dst,
+						    sizeof(dst));
 					}
 					log(LOG_SECURITY | LOG_DEBUG,
 					    "ipfw: %d %s %s:%u -> %s:%u, %s\n",
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/netinet/ipfw/ip_fw_log.c
--- a/head/sys/netinet/ipfw/ip_fw_log.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/netinet/ipfw/ip_fw_log.c	Fri Aug 10 14:19:25 2012 +0300
@@ -24,7 +24,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/netinet/ipfw/ip_fw_log.c 238277 2012-07-09 07=
:16:19Z hrs $");
+__FBSDID("$FreeBSD: head/sys/netinet/ipfw/ip_fw_log.c 239092 2012-08-06 10=
:50:43Z luigi $");
=20
 /*
  * Logging support for ipfw
@@ -115,7 +115,7 @@
 	struct sockaddr *dst, struct route *ro)
 {
 	if (m !=3D NULL)
-		m_freem(m);
+		FREE_PKT(m);
 	return EINVAL;
 }
=20
@@ -450,8 +450,8 @@
 			tcp =3D L3HDR(struct tcphdr, ip);
 			udp =3D L3HDR(struct udphdr, ip);
=20
-			inet_ntoa_r(ip->ip_src, src);
-			inet_ntoa_r(ip->ip_dst, dst);
+			inet_ntop(AF_INET, &ip->ip_src, src, sizeof(src));
+			inet_ntop(AF_INET, &ip->ip_dst, dst, sizeof(dst));
 		}
=20
 		switch (args->f_id.proto) {
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/netinet/sctp_bsd_addr.c
--- a/head/sys/netinet/sctp_bsd_addr.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/netinet/sctp_bsd_addr.c	Fri Aug 10 14:19:25 2012 +0300
@@ -31,7 +31,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/netinet/sctp_bsd_addr.c 237540 2012-06-24 21:=
25:54Z tuexen $");
+__FBSDID("$FreeBSD: head/sys/netinet/sctp_bsd_addr.c 239035 2012-08-04 08:=
03:30Z tuexen $");
=20
 #include <netinet/sctp_os.h>
 #include <netinet/sctp_var.h>
@@ -152,12 +152,12 @@
=20
=20
 static uint32_t
-sctp_is_desired_interface_type(struct ifaddr *ifa)
+sctp_is_desired_interface_type(struct ifnet *ifn)
 {
 	int result;
=20
 	/* check the interface type to see if it's one we care about */
-	switch (ifa->ifa_ifp->if_type) {
+	switch (ifn->if_type) {
 	case IFT_ETHER:
 	case IFT_ISO88023:
 	case IFT_ISO88024:
@@ -216,6 +216,10 @@
=20
 	IFNET_RLOCK();
 	TAILQ_FOREACH(ifn, &MODULE_GLOBAL(ifnet), if_list) {
+		if (sctp_is_desired_interface_type(ifn) =3D=3D 0) {
+			/* non desired type */
+			continue;
+		}
 		IF_ADDR_RLOCK(ifn);
 		TAILQ_FOREACH(ifa, &ifn->if_addrlist, ifa_list) {
 			if (ifa->ifa_addr =3D=3D NULL) {
@@ -240,10 +244,6 @@
 			default:
 				continue;
 			}
-			if (sctp_is_desired_interface_type(ifa) =3D=3D 0) {
-				/* non desired type */
-				continue;
-			}
 			switch (ifa->ifa_addr->sa_family) {
 #ifdef INET
 			case AF_INET:
@@ -317,6 +317,10 @@
 	if (ifa->ifa_addr =3D=3D NULL) {
 		return;
 	}
+	if (sctp_is_desired_interface_type(ifa->ifa_ifp) =3D=3D 0) {
+		/* non desired type */
+		return;
+	}
 	switch (ifa->ifa_addr->sa_family) {
 #ifdef INET
 	case AF_INET:
@@ -338,22 +342,16 @@
 		/* non inet/inet6 skip */
 		return;
 	}
-
-	if (sctp_is_desired_interface_type(ifa) =3D=3D 0) {
-		/* non desired type */
-		return;
-	}
 	if (cmd =3D=3D RTM_ADD) {
 		(void)sctp_add_addr_to_vrf(SCTP_DEFAULT_VRFID, (void *)ifa->ifa_ifp,
-		    ifa->ifa_ifp->if_index, ifa->ifa_ifp->if_type,
-		    ifa->ifa_ifp->if_xname,
+		    ifa->ifa_ifp->if_index, ifa->ifa_ifp->if_type, ifa->ifa_ifp->if_xnam=
e,
 		    (void *)ifa, ifa->ifa_addr, ifa_flags, 1);
 	} else {
=20
 		sctp_del_addr_from_vrf(SCTP_DEFAULT_VRFID, ifa->ifa_addr,
 		    ifa->ifa_ifp->if_index,
-		    ifa->ifa_ifp->if_xname
-		    );
+		    ifa->ifa_ifp->if_xname);
+
 		/*
 		 * We don't bump refcount here so when it completes the
 		 * final delete will happen.
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/netinet/sctp_input.c
--- a/head/sys/netinet/sctp_input.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/netinet/sctp_input.c	Fri Aug 10 14:19:25 2012 +0300
@@ -31,7 +31,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/netinet/sctp_input.c 238454 2012-07-14 19:44:=
39Z tuexen $");
+__FBSDID("$FreeBSD: head/sys/netinet/sctp_input.c 239091 2012-08-06 10:50:=
23Z tuexen $");
=20
 #include <netinet/sctp_os.h>
 #include <netinet/sctp_var.h>
@@ -5600,7 +5600,7 @@
 	struct mbuf *m =3D *mm;
 	int un_sent;
 	int cnt_ctrl_ready =3D 0;
-	struct sctp_inpcb *inp, *inp_decr =3D NULL;
+	struct sctp_inpcb *inp =3D NULL, *inp_decr =3D NULL;
 	struct sctp_tcb *stcb =3D NULL;
 	struct sctp_nets *net =3D NULL;
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/netinet/sctp_pcb.c
--- a/head/sys/netinet/sctp_pcb.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/netinet/sctp_pcb.c	Fri Aug 10 14:19:25 2012 +0300
@@ -31,7 +31,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/netinet/sctp_pcb.c 238550 2012-07-17 13:03:47=
Z tuexen $");
+__FBSDID("$FreeBSD: head/sys/netinet/sctp_pcb.c 239052 2012-08-05 10:47:18=
Z tuexen $");
=20
 #include <netinet/sctp_os.h>
 #include <sys/proc.h>
@@ -2055,8 +2055,6 @@
 	struct sctp_nets *net;
 	struct sctp_tcb *stcb;
=20
-	*netp =3D NULL;
-	*inp_p =3D NULL;
 	SCTP_INP_INFO_RLOCK();
 	head =3D &SCTP_BASE_INFO(sctp_asochash)[SCTP_PCBHASH_ASOC(vtag,
 	    SCTP_BASE_INFO(hashasocmark))];
@@ -2310,10 +2308,9 @@
 	if (zero_address) {
 		stcb =3D sctp_findassoc_by_vtag(NULL, dst, ntohl(sh->v_tag), inp_p,
 		    netp, sh->src_port, sh->dest_port, 1, vrf_id, 0);
-		/*
-		 * SCTP_PRINTF("findassociation_ep_asconf: zero lookup
-		 * address finds stcb 0x%x\n", (uint32_t)stcb);
-		 */
+		if (stcb !=3D NULL) {
+			SCTP_INP_DECR_REF(*inp_p);
+		}
 	} else {
 		stcb =3D sctp_findassociation_ep_addr(inp_p,
 		    (struct sockaddr *)&remote_store, netp,
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/netinet/sctp_uio.h
--- a/head/sys/netinet/sctp_uio.h	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/netinet/sctp_uio.h	Fri Aug 10 14:19:25 2012 +0300
@@ -31,7 +31,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/netinet/sctp_uio.h 238501 2012-07-15 20:16:17=
Z tuexen $");
+__FBSDID("$FreeBSD: head/sys/netinet/sctp_uio.h 238790 2012-07-26 08:10:29=
Z tuexen $");
=20
 #ifndef _NETINET_SCTP_UIO_H_
 #define _NETINET_SCTP_UIO_H_
@@ -1124,12 +1124,8 @@
 #define SCTP_STAT_DECR_GAUGE32(_x) SCTP_STAT_DECR(_x)
=20
 union sctp_sockstore {
-#if defined(INET)
 	struct sockaddr_in sin;
-#endif
-#if defined(INET6)
 	struct sockaddr_in6 sin6;
-#endif
 	struct sockaddr sa;
 };
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/netinet/tcp_timer.c
--- a/head/sys/netinet/tcp_timer.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/netinet/tcp_timer.c	Fri Aug 10 14:19:25 2012 +0300
@@ -30,7 +30,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/netinet/tcp_timer.c 237263 2012-06-19 07:34:1=
3Z np $");
+__FBSDID("$FreeBSD: head/sys/netinet/tcp_timer.c 239075 2012-08-05 17:30:1=
7Z trociny $");
=20
 #include "opt_inet6.h"
 #include "opt_tcpdebug.h"
@@ -183,13 +183,18 @@
 		return;
 	}
 	INP_WLOCK(inp);
-	if ((inp->inp_flags & INP_DROPPED) || callout_pending(&tp->t_timers->tt_d=
elack)
-	    || !callout_active(&tp->t_timers->tt_delack)) {
+	if (callout_pending(&tp->t_timers->tt_delack) ||
+	    !callout_active(&tp->t_timers->tt_delack)) {
 		INP_WUNLOCK(inp);
 		CURVNET_RESTORE();
 		return;
 	}
 	callout_deactivate(&tp->t_timers->tt_delack);
+	if ((inp->inp_flags & INP_DROPPED) !=3D 0) {
+		INP_WUNLOCK(inp);
+		CURVNET_RESTORE();
+		return;
+	}
=20
 	tp->t_flags |=3D TF_ACKNOW;
 	TCPSTAT_INC(tcps_delack);
@@ -229,7 +234,7 @@
 	}
 	INP_WLOCK(inp);
 	tcp_free_sackholes(tp);
-	if ((inp->inp_flags & INP_DROPPED) || callout_pending(&tp->t_timers->tt_2=
msl) ||
+	if (callout_pending(&tp->t_timers->tt_2msl) ||
 	    !callout_active(&tp->t_timers->tt_2msl)) {
 		INP_WUNLOCK(tp->t_inpcb);
 		INP_INFO_WUNLOCK(&V_tcbinfo);
@@ -237,6 +242,12 @@
 		return;
 	}
 	callout_deactivate(&tp->t_timers->tt_2msl);
+	if ((inp->inp_flags & INP_DROPPED) !=3D 0) {
+		INP_WUNLOCK(inp);
+		INP_INFO_WUNLOCK(&V_tcbinfo);
+		CURVNET_RESTORE();
+		return;
+	}
 	/*
 	 * 2 MSL timeout in shutdown went off.  If we're closed but
 	 * still waiting for peer to close and connection has been idle
@@ -300,14 +311,20 @@
 		return;
 	}
 	INP_WLOCK(inp);
-	if ((inp->inp_flags & INP_DROPPED) || callout_pending(&tp->t_timers->tt_k=
eep)
-	    || !callout_active(&tp->t_timers->tt_keep)) {
+	if (callout_pending(&tp->t_timers->tt_keep) ||
+	    !callout_active(&tp->t_timers->tt_keep)) {
 		INP_WUNLOCK(inp);
 		INP_INFO_WUNLOCK(&V_tcbinfo);
 		CURVNET_RESTORE();
 		return;
 	}
 	callout_deactivate(&tp->t_timers->tt_keep);
+	if ((inp->inp_flags & INP_DROPPED) !=3D 0) {
+		INP_WUNLOCK(inp);
+		INP_INFO_WUNLOCK(&V_tcbinfo);
+		CURVNET_RESTORE();
+		return;
+	}
 	/*
 	 * Keep-alive timer went off; send something
 	 * or drop connection if idle for too long.
@@ -397,14 +414,20 @@
 		return;
 	}
 	INP_WLOCK(inp);
-	if ((inp->inp_flags & INP_DROPPED) || callout_pending(&tp->t_timers->tt_p=
ersist)
-	    || !callout_active(&tp->t_timers->tt_persist)) {
+	if (callout_pending(&tp->t_timers->tt_persist) ||
+	    !callout_active(&tp->t_timers->tt_persist)) {
 		INP_WUNLOCK(inp);
 		INP_INFO_WUNLOCK(&V_tcbinfo);
 		CURVNET_RESTORE();
 		return;
 	}
 	callout_deactivate(&tp->t_timers->tt_persist);
+	if ((inp->inp_flags & INP_DROPPED) !=3D 0) {
+		INP_WUNLOCK(inp);
+		INP_INFO_WUNLOCK(&V_tcbinfo);
+		CURVNET_RESTORE();
+		return;
+	}
 	/*
 	 * Persistance timer into zero window.
 	 * Force a byte to be output, if possible.
@@ -469,14 +492,20 @@
 		return;
 	}
 	INP_WLOCK(inp);
-	if ((inp->inp_flags & INP_DROPPED) || callout_pending(&tp->t_timers->tt_r=
exmt)
-	    || !callout_active(&tp->t_timers->tt_rexmt)) {
+	if (callout_pending(&tp->t_timers->tt_rexmt) ||
+	    !callout_active(&tp->t_timers->tt_rexmt)) {
 		INP_WUNLOCK(inp);
 		INP_INFO_RUNLOCK(&V_tcbinfo);
 		CURVNET_RESTORE();
 		return;
 	}
 	callout_deactivate(&tp->t_timers->tt_rexmt);
+	if ((inp->inp_flags & INP_DROPPED) !=3D 0) {
+		INP_WUNLOCK(inp);
+		INP_INFO_RUNLOCK(&V_tcbinfo);
+		CURVNET_RESTORE();
+		return;
+	}
 	tcp_free_sackholes(tp);
 	/*
 	 * Retransmission timer went off.  Message has not
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/netinet6/in6.c
--- a/head/sys/netinet6/in6.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/netinet6/in6.c	Fri Aug 10 14:19:25 2012 +0300
@@ -61,7 +61,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/netinet6/in6.c 238222 2012-07-08 08:49:37Z bz=
 $");
+__FBSDID("$FreeBSD: head/sys/netinet6/in6.c 238990 2012-08-02 13:57:49Z gl=
ebius $");
=20
 #include "opt_compat.h"
 #include "opt_inet.h"
@@ -257,10 +257,10 @@
=20
 #ifdef COMPAT_FREEBSD32
 struct in6_ndifreq32 {
-        char ifname[IFNAMSIZ];
-        uint32_t ifindex;
+	char ifname[IFNAMSIZ];
+	uint32_t ifindex;
 };
-#define	SIOCGDEFIFACE32_IN6     _IOWR('i', 86, struct in6_ndifreq32)
+#define	SIOCGDEFIFACE32_IN6	_IOWR('i', 86, struct in6_ndifreq32)
 #endif
=20
 int
@@ -284,7 +284,7 @@
 	switch (cmd) {
 	case SIOCGETSGCNT_IN6:
 	case SIOCGETMIFCNT_IN6:
-		/*=09
+		/*
 		 * XXX mrt_ioctl has a 3rd, unused, FIB argument in route.c.
 		 * We cannot see how that would be needed, so do not adjust the
 		 * KPI blindly; more likely should clean up the IPv4 variant.
@@ -485,7 +485,7 @@
 		}
=20
 		if (td !=3D NULL) {
-			error =3D priv_check(td, (cmd =3D=3D SIOCDIFADDR_IN6) ?=20
+			error =3D priv_check(td, (cmd =3D=3D SIOCDIFADDR_IN6) ?
 			    PRIV_NET_DELIFADDR : PRIV_NET_ADDIFADDR);
 			if (error)
 				goto out;
@@ -1365,7 +1365,7 @@
 		bzero(&sin6, sizeof(sin6));
 		sin6.sin6_len =3D sizeof(sin6);
 		sin6.sin6_family =3D AF_INET6;
-		memcpy(&sin6.sin6_addr, &satosin6(ifa0->ifa_addr)->sin6_addr,=20
+		memcpy(&sin6.sin6_addr, &satosin6(ifa0->ifa_addr)->sin6_addr,
 		    sizeof(sin6.sin6_addr));
 		error =3D in6_setscope(&sin6.sin6_addr, ifa0->ifa_ifp, NULL);
 		if (error !=3D 0)
@@ -1374,16 +1374,17 @@
=20
 	rt =3D in6_rtalloc1((struct sockaddr *)&mltaddr, 0, 0UL, RT_DEFAULT_FIB);
 	if (rt !=3D NULL && rt->rt_gateway !=3D NULL &&
-	    (memcmp(&satosin6(rt->rt_gateway)->sin6_addr,=20
+	    (memcmp(&satosin6(rt->rt_gateway)->sin6_addr,
 		    &ia->ia_addr.sin6_addr,
 		    sizeof(ia->ia_addr.sin6_addr)) =3D=3D 0)) {
-		/*=20
+		/*
 		 * If no more IPv6 address exists on this interface then
 		 * remove the multicast address route.
 		 */
 		if (ifa0 =3D=3D NULL) {
-			memcpy(&mltaddr.sin6_addr, &satosin6(rt_key(rt))->sin6_addr,=20
-			       sizeof(mltaddr.sin6_addr));
+			memcpy(&mltaddr.sin6_addr,
+			    &satosin6(rt_key(rt))->sin6_addr,
+			    sizeof(mltaddr.sin6_addr));
 			RTFREE_LOCKED(rt);
 			error =3D in6_rtrequest(RTM_DELETE,
 			    (struct sockaddr *)&mltaddr,
@@ -1415,16 +1416,17 @@
=20
 	rt =3D in6_rtalloc1((struct sockaddr *)&mltaddr, 0, 0UL, RT_DEFAULT_FIB);
 	if (rt !=3D NULL && rt->rt_gateway !=3D NULL &&
-	    (memcmp(&satosin6(rt->rt_gateway)->sin6_addr,=20
+	    (memcmp(&satosin6(rt->rt_gateway)->sin6_addr,
 		    &ia->ia_addr.sin6_addr,
 		    sizeof(ia->ia_addr.sin6_addr)) =3D=3D 0)) {
-		/*=20
+		/*
 		 * If no more IPv6 address exists on this interface then
 		 * remove the multicast address route.
 		 */
 		if (ifa0 =3D=3D NULL) {
-			memcpy(&mltaddr.sin6_addr, &satosin6(rt_key(rt))->sin6_addr,=20
-			       sizeof(mltaddr.sin6_addr));
+			memcpy(&mltaddr.sin6_addr,
+			    &satosin6(rt_key(rt))->sin6_addr,
+			    sizeof(mltaddr.sin6_addr));
=20
 			RTFREE_LOCKED(rt);
 			error =3D in6_rtrequest(RTM_DELETE,
@@ -1471,8 +1473,7 @@
 	TAILQ_FOREACH(ifa0, &ifp->if_addrhead, ifa_link) {
 		if ((ifa0->ifa_addr->sa_family !=3D AF_INET6) ||
 		    memcmp(&satosin6(ifa0->ifa_addr)->sin6_addr,
-			   &ia->ia_addr.sin6_addr,=20
-			   sizeof(struct in6_addr)) =3D=3D 0)
+		    &ia->ia_addr.sin6_addr, sizeof(struct in6_addr)) =3D=3D 0)
 			continue;
 		else
 			break;
@@ -1483,12 +1484,12 @@
=20
 	/*
 	 * Remove the loopback route to the interface address.
-	 * The check for the current setting of "nd6_useloopback"=20
+	 * The check for the current setting of "nd6_useloopback"
 	 * is not needed.
 	 */
 	if (ia->ia_flags & IFA_RTSELF) {
 		error =3D ifa_del_loopback_route((struct ifaddr *)ia,
-				       (struct sockaddr *)&ia->ia_addr);
+		    (struct sockaddr *)&ia->ia_addr);
 		if (error =3D=3D 0)
 			ia->ia_flags &=3D ~IFA_RTSELF;
 	}
@@ -1890,7 +1891,7 @@
 	 * Special case:
 	 * If a new destination address is specified for a point-to-point
 	 * interface, install a route to the destination as an interface
-	 * direct route.=20
+	 * direct route.
 	 * XXX: the logic below rejects assigning multiple addresses on a p2p
 	 * interface that share the same destination.
 	 */
@@ -1914,7 +1915,7 @@
 	 */
 	if (!(ia->ia_flags & IFA_RTSELF) && V_nd6_useloopback) {
 		error =3D ifa_add_loopback_route((struct ifaddr *)ia,
-				       (struct sockaddr *)&ia->ia_addr);
+		    (struct sockaddr *)&ia->ia_addr);
 		if (error =3D=3D 0)
 			ia->ia_flags |=3D IFA_RTSELF;
 	}
@@ -1941,7 +1942,7 @@
 			continue;
 		if (IN6_IS_ADDR_LINKLOCAL(IFA_IN6(ifa))) {
 			if ((((struct in6_ifaddr *)ifa)->ia6_flags &
-			     ignoreflags) !=3D 0)
+			    ignoreflags) !=3D 0)
 				continue;
 			ifa_ref(ifa);
 			break;
@@ -2108,7 +2109,7 @@
 	IN6_IFADDR_RLOCK();
 	TAILQ_FOREACH(ia, &V_in6_ifaddrhead, ia_link) {
 		if (IN6_ARE_ADDR_EQUAL(&ia->ia_addr.sin6_addr,
-				       &sa6->sin6_addr) &&
+		    &sa6->sin6_addr) &&
 		    (ia->ia6_flags & IN6_IFF_DEPRECATED) !=3D 0) {
 			IN6_IFADDR_RUNLOCK();
 			return (1); /* true */
@@ -2379,7 +2380,7 @@
 			maxmtu =3D IN6_LINKMTU(ifp);
 	}
 	IFNET_RUNLOCK_NOSLEEP();
-	if (maxmtu)	     /* update only when maxmtu is positive */
+	if (maxmtu)	/* update only when maxmtu is positive */
 		V_in6_maxmtu =3D maxmtu;
 }
=20
@@ -2469,8 +2470,7 @@
 {
 	struct in6_llentry *lle;
=20
-	lle =3D malloc(sizeof(struct in6_llentry), M_LLTABLE,
-	    M_DONTWAIT | M_ZERO);
+	lle =3D malloc(sizeof(struct in6_llentry), M_LLTABLE, M_NOWAIT | M_ZERO);
 	if (lle =3D=3D NULL)		/* NB: caller generates msg */
 		return NULL;
=20
@@ -2481,46 +2481,43 @@
 	callout_init_rw(&lle->base.ln_timer_ch, &lle->base.lle_lock,
 	    CALLOUT_RETURNUNLOCKED);
=20
-	return &lle->base;
+	return (&lle->base);
 }
=20
 static void
-in6_lltable_prefix_free(struct lltable *llt,=20
-			const struct sockaddr *prefix,
-			const struct sockaddr *mask,
-			u_int flags)
+in6_lltable_prefix_free(struct lltable *llt, const struct sockaddr *prefix,
+    const struct sockaddr *mask, u_int flags)
 {
 	const struct sockaddr_in6 *pfx =3D (const struct sockaddr_in6 *)prefix;
 	const struct sockaddr_in6 *msk =3D (const struct sockaddr_in6 *)mask;
 	struct llentry *lle, *next;
-	register int i;
+	int i;
=20
 	/*
-	 * (flags & LLE_STATIC) means deleting all entries=20
-	 * including static ND6 entries
+	 * (flags & LLE_STATIC) means deleting all entries
+	 * including static ND6 entries.
 	 */
-	for (i=3D0; i < LLTBL_HASHTBL_SIZE; i++) {
+	IF_AFDATA_WLOCK(llt->llt_ifp);
+	for (i =3D 0; i < LLTBL_HASHTBL_SIZE; i++) {
 		LIST_FOREACH_SAFE(lle, &llt->lle_head[i], lle_next, next) {
 			if (IN6_ARE_MASKED_ADDR_EQUAL(
-				    &((struct sockaddr_in6 *)L3_ADDR(lle))->sin6_addr,=20
-				    &pfx->sin6_addr,=20
-				    &msk->sin6_addr) &&
-			    ((flags & LLE_STATIC) || !(lle->la_flags & LLE_STATIC))) {
-				int canceled;
-
-				canceled =3D callout_drain(&lle->la_timer);
+			    &satosin6(L3_ADDR(lle))->sin6_addr,
+			    &pfx->sin6_addr, &msk->sin6_addr) &&
+			    ((flags & LLE_STATIC) ||
+			    !(lle->la_flags & LLE_STATIC))) {
 				LLE_WLOCK(lle);
-				if (canceled)
+				if (callout_stop(&lle->la_timer))
 					LLE_REMREF(lle);
 				llentry_free(lle);
 			}
 		}
 	}
+	IF_AFDATA_WUNLOCK(llt->llt_ifp);
 }
=20
 static int
-in6_lltable_rtcheck(struct ifnet *ifp,=20
-		    u_int flags,=20
+in6_lltable_rtcheck(struct ifnet *ifp,
+		    u_int flags,
 		    const struct sockaddr *l3addr)
 {
 	struct rtentry *rt;
@@ -2535,8 +2532,8 @@
 	    RT_DEFAULT_FIB);
 	if (rt =3D=3D NULL || (rt->rt_flags & RTF_GATEWAY) || rt->rt_ifp !=3D ifp=
) {
 		struct ifaddr *ifa;
-		/*=20
-		 * Create an ND6 cache for an IPv6 neighbor=20
+		/*
+		 * Create an ND6 cache for an IPv6 neighbor
 		 * that is not covered by our own prefix.
 		 */
 		/* XXX ifaof_ifpforaddr should take a const param */
@@ -2577,8 +2574,8 @@
 		struct sockaddr_in6 *sa6 =3D (struct sockaddr_in6 *)L3_ADDR(lle);
 		if (lle->la_flags & LLE_DELETED)
 			continue;
-		if (bcmp(&sa6->sin6_addr, &sin6->sin6_addr,=20
-			 sizeof(struct in6_addr)) =3D=3D 0)
+		if (bcmp(&sa6->sin6_addr, &sin6->sin6_addr,
+		    sizeof(struct in6_addr)) =3D=3D 0)
 			break;
 	}
=20
@@ -2607,15 +2604,16 @@
=20
 		lle->lle_tbl  =3D llt;
 		lle->lle_head =3D lleh;
+		lle->la_flags |=3D LLE_LINKED;
 		LIST_INSERT_HEAD(lleh, lle, lle_next);
 	} else if (flags & LLE_DELETE) {
 		if (!(lle->la_flags & LLE_IFADDR) || (flags & LLE_IFADDR)) {
 			LLE_WLOCK(lle);
-			lle->la_flags =3D LLE_DELETED;
+			lle->la_flags |=3D LLE_DELETED;
 			LLE_WUNLOCK(lle);
 #ifdef DIAGNOSTIC
-			log(LOG_INFO, "ifaddr cache =3D %p  is deleted\n", lle);=09
-#endif=09
+			log(LOG_INFO, "ifaddr cache =3D %p  is deleted\n", lle);
+#endif
 		}
 		lle =3D (void *)-1;
 	}
@@ -2801,8 +2799,7 @@
 	struct sockaddr_in *sin_p;
 	struct sockaddr_in6 *sin6_p;
=20
-	sin6_p =3D malloc(sizeof *sin6_p, M_SONAME,
-	       M_WAITOK);
+	sin6_p =3D malloc(sizeof *sin6_p, M_SONAME, M_WAITOK);
 	sin_p =3D (struct sockaddr_in *)*nam;
 	in6_sin_2_v4mapsin6(sin_p, sin6_p);
 	free(*nam, M_SONAME);
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/netinet6/ip6_ipsec.c
--- a/head/sys/netinet6/ip6_ipsec.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/netinet6/ip6_ipsec.c	Fri Aug 10 14:19:25 2012 +0300
@@ -28,7 +28,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/netinet6/ip6_ipsec.c 236170 2012-05-28 09:30:=
13Z bz $");
+__FBSDID("$FreeBSD: head/sys/netinet6/ip6_ipsec.c 238935 2012-07-31 05:44:=
03Z bz $");
=20
 #include "opt_inet.h"
 #include "opt_inet6.h"
@@ -263,7 +263,7 @@
 			    mtag->m_tag_id !=3D PACKET_TAG_IPSEC_OUT_CRYPTO_NEEDED)
 				continue;
 			/*
-			 * Check if policy has an SA associated with it.
+			 * Check if policy has no SA associated with it.
 			 * This can happen when an SP has yet to acquire
 			 * an SA; e.g. on first reference.  If it occurs,
 			 * then we let ipsec4_process_packet do its thing.
@@ -291,16 +291,16 @@
 		/*
 		 * Do delayed checksums now because we send before
 		 * this is done in the normal processing path.
-		 * XXX-BZ CSUM_DELAY_DATA_IPV6?
+		 * For IPv6 we do delayed checksums in ip6_output.c.
 		 */
+#ifdef INET
 		if ((*m)->m_pkthdr.csum_flags & CSUM_DELAY_DATA) {
 			ipseclog((LOG_DEBUG,
 			    "%s: we do not support IPv4 over IPv6", __func__));
-#ifdef INET
 			in_delayed_cksum(*m);
-#endif
 			(*m)->m_pkthdr.csum_flags &=3D ~CSUM_DELAY_DATA;
 		}
+#endif
=20
 		/*
 		 * Preserve KAME behaviour: ENOENT can be returned
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/netinet6/ip6_output.c
--- a/head/sys/netinet6/ip6_output.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/netinet6/ip6_output.c	Fri Aug 10 14:19:25 2012 +0300
@@ -61,7 +61,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/netinet6/ip6_output.c 238092 2012-07-04 07:37=
:53Z glebius $");
+__FBSDID("$FreeBSD: head/sys/netinet6/ip6_output.c 238960 2012-07-31 23:34=
:06Z bz $");
=20
 #include "opt_inet.h"
 #include "opt_inet6.h"
@@ -195,8 +195,9 @@
 	offset +=3D m->m_pkthdr.csum_data;	/* checksum offset */
=20
 	if (offset + sizeof(u_short) > m->m_len) {
-		printf("%s: delayed m_pullup, m->len: %d off: %d\n",
-		    __func__, m->m_len, offset);
+		printf("%s: delayed m_pullup, m->len: %d plen %u off %u "
+		    "csum_flags=3D0x%04x\n", __func__, m->m_len, plen, offset,
+		    m->m_pkthdr.csum_flags);
 		/*
 		 * XXX this should not happen, but if it does, the correct
 		 * behavior may be to insert the checksum in the appropriate
@@ -294,17 +295,31 @@
 		MAKE_EXTHDR(opt->ip6po_dest2, &exthdrs.ip6e_dest2);
 	}
=20
+#ifdef IPSEC
 	/*
 	 * IPSec checking which handles several cases.
 	 * FAST IPSEC: We re-injected the packet.
 	 */
-#ifdef IPSEC
 	switch(ip6_ipsec_output(&m, inp, &flags, &error, &ifp, &sp))
 	{
 	case 1:                 /* Bad packet */
 		goto freehdrs;
 	case -1:                /* Do IPSec */
 		needipsec =3D 1;
+		/*
+		 * Do delayed checksums now, as we may send before returning.
+		 */
+		if (m->m_pkthdr.csum_flags & CSUM_DELAY_DATA_IPV6) {
+			plen =3D m->m_pkthdr.len - sizeof(*ip6);
+			in6_delayed_cksum(m, plen, sizeof(struct ip6_hdr));
+			m->m_pkthdr.csum_flags &=3D ~CSUM_DELAY_DATA_IPV6;
+		}
+#ifdef SCTP
+		if (m->m_pkthdr.csum_flags & CSUM_SCTP_IPV6) {
+			sctp_delayed_cksum(m, sizeof(struct ip6_hdr));
+			m->m_pkthdr.csum_flags &=3D ~CSUM_SCTP_IPV6;
+		}
+#endif
 	case 0:                 /* No IPSec */
 	default:
 		break;
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/nfsclient/nfs_bio.c
--- a/head/sys/nfsclient/nfs_bio.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/nfsclient/nfs_bio.c	Fri Aug 10 14:19:25 2012 +0300
@@ -33,7 +33,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/nfsclient/nfs_bio.c 235332 2012-05-12 12:02:5=
1Z rmacklem $");
+__FBSDID("$FreeBSD: head/sys/nfsclient/nfs_bio.c 239065 2012-08-05 14:11:4=
2Z kib $");
=20
 #include "opt_kdtrace.h"
=20
@@ -49,6 +49,7 @@
 #include <sys/vnode.h>
=20
 #include <vm/vm.h>
+#include <vm/vm_param.h>
 #include <vm/vm_extern.h>
 #include <vm/vm_page.h>
 #include <vm/vm_object.h>
@@ -217,36 +218,8 @@
 			 */
 			;
 		}
-		if (i !=3D ap->a_reqpage) {
-			/*
-			 * Whether or not to leave the page activated is up in
-			 * the air, but we should put the page on a page queue
-			 * somewhere (it already is in the object).  Result:
-			 * It appears that emperical results show that
-			 * deactivating pages is best.
-			 */
-
-			/*
-			 * Just in case someone was asking for this page we
-			 * now tell them that it is ok to use.
-			 */
-			if (!error) {
-				if (m->oflags & VPO_WANTED) {
-					vm_page_lock(m);
-					vm_page_activate(m);
-					vm_page_unlock(m);
-				} else {
-					vm_page_lock(m);
-					vm_page_deactivate(m);
-					vm_page_unlock(m);
-				}
-				vm_page_wakeup(m);
-			} else {
-				vm_page_lock(m);
-				vm_page_free(m);
-				vm_page_unlock(m);
-			}
-		}
+		if (i !=3D ap->a_reqpage)
+			vm_page_readahead_finish(m, error);
 	}
 	VM_OBJECT_UNLOCK(object);
 	return (0);
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/ofed/include/linux/gfp.h
--- a/head/sys/ofed/include/linux/gfp.h	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/ofed/include/linux/gfp.h	Fri Aug 10 14:19:25 2012 +0300
@@ -34,6 +34,7 @@
=20
 #include <linux/page.h>
=20
+#include <vm/vm_param.h>
 #include <vm/vm_object.h>
 #include <vm/vm_extern.h>
 #include <vm/vm_kern.h>
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/powerpc/conf/GENERIC
--- a/head/sys/powerpc/conf/GENERIC	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/powerpc/conf/GENERIC	Fri Aug 10 14:19:25 2012 +0300
@@ -16,7 +16,7 @@
 # If you are in doubt as to the purpose or necessity of a line, check firs=
t=20
 # in NOTES.
 #
-# $FreeBSD: head/sys/powerpc/conf/GENERIC 238034 2012-07-02 21:25:24Z marc=
el $
+# $FreeBSD: head/sys/powerpc/conf/GENERIC 239027 2012-08-04 03:05:01Z jhib=
bits $
=20
 cpu		AIM
 ident		GENERIC
@@ -197,6 +197,7 @@
 device		smu		# Apple System Management Unit
 device		windtunnel	# Apple G4 MDD fan controller
 device		atibl		# ATI-based backlight driver for PowerBooks/iBooks
+device		nvbl		# nVidia-based backlight driver for PowerBooks/iBooks
=20
 # ADB support
 device		adb
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/powerpc/conf/GENERIC64
--- a/head/sys/powerpc/conf/GENERIC64	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/powerpc/conf/GENERIC64	Fri Aug 10 14:19:25 2012 +0300
@@ -16,7 +16,7 @@
 # If you are in doubt as to the purpose or necessity of a line, check firs=
t=20
 # in NOTES.
 #
-# $FreeBSD: head/sys/powerpc/conf/GENERIC64 238034 2012-07-02 21:25:24Z ma=
rcel $
+# $FreeBSD: head/sys/powerpc/conf/GENERIC64 239027 2012-08-04 03:05:01Z jh=
ibbits $
=20
 cpu		AIM
 ident		GENERIC
@@ -194,6 +194,7 @@
 device		powermac_nvram	# Open Firmware configuration NVRAM
 device		smu		# Apple System Management Unit
 device		atibl		# ATI-based backlight driver for PowerBooks/iBooks
+device		nvbl		# nVidia-based backlight driver for PowerBooks/iBooks
=20
 # ADB support
 device		adb
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/powerpc/powermac/nvbl.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/head/sys/powerpc/powermac/nvbl.c	Fri Aug 10 14:19:25 2012 +0300
@@ -0,0 +1,197 @@
+/*-
+ * Copyright (c) 2012 Justin Hibbits
+ * 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 WARRANTI=
ES
+ * 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 <sys/cdefs.h>
+__FBSDID("$FreeBSD: head/sys/powerpc/powermac/nvbl.c 239027 2012-08-04 03:=
05:01Z jhibbits $");
+
+#include <sys/param.h>
+#include <sys/bus.h>
+#include <sys/systm.h>
+#include <sys/module.h>
+#include <sys/kernel.h>
+#include <sys/rman.h>
+#include <sys/sysctl.h>
+
+#include <machine/bus.h>
+
+#include <dev/ofw/openfirm.h>
+
+#define NVIDIA_BRIGHT_MIN     (0x0ec)
+#define NVIDIA_BRIGHT_MAX     (0x538)
+#define NVIDIA_BRIGHT_SCALE   ((NVIDIA_BRIGHT_MAX - NVIDIA_BRIGHT_MIN)/100)
+/* nVidia's MMIO registers are at PCI BAR[0] */
+#define NVIDIA_MMIO_PMC       (0x0)
+#define  NVIDIA_PMC_OFF         (NVIDIA_MMIO_PMC + 0x10f0)
+#define   NVIDIA_PMC_BL_SHIFT    (16)
+#define   NVIDIA_PMC_BL_EN       (1 << 31)
+
+
+struct nvbl_softc {
+	device_t	 dev;
+	struct resource *sc_memr;
+};
+
+static void nvbl_identify(driver_t *driver, device_t parent);
+static int nvbl_probe(device_t dev);
+static int nvbl_attach(device_t dev);
+static int nvbl_setlevel(struct nvbl_softc *sc, int newlevel);
+static int nvbl_getlevel(struct nvbl_softc *sc);
+static int nvbl_sysctl(SYSCTL_HANDLER_ARGS);
+
+static device_method_t nvbl_methods[] =3D {
+	/* Device interface */
+	DEVMETHOD(device_identify, nvbl_identify),
+	DEVMETHOD(device_probe, nvbl_probe),
+	DEVMETHOD(device_attach, nvbl_attach),
+	{0, 0},
+};
+
+static driver_t	nvbl_driver =3D {
+	"backlight",
+	nvbl_methods,
+	sizeof(struct nvbl_softc)
+};
+
+static devclass_t nvbl_devclass;
+
+DRIVER_MODULE(nvbl, vgapci, nvbl_driver, nvbl_devclass, 0, 0);
+
+static void
+nvbl_identify(driver_t *driver, device_t parent)
+{
+	if (device_find_child(parent, "backlight", -1) =3D=3D NULL)
+		device_add_child(parent, "backlight", -1);
+}
+
+static int
+nvbl_probe(device_t dev)
+{
+	char		control[8];
+	phandle_t	handle;
+
+	handle =3D OF_finddevice("mac-io/backlight");
+
+	if (handle <=3D 0)
+		return (ENXIO);
+
+	if (OF_getprop(handle, "backlight-control", &control, sizeof(control)) < =
0)
+		return (ENXIO);
+
+	if (strcmp(control, "mnca") !=3D 0)
+		return (ENXIO);
+
+	device_set_desc(dev, "PowerBook backlight for nVidia graphics");
+
+	return (0);
+}
+
+static int
+nvbl_attach(device_t dev)
+{
+	struct nvbl_softc	*sc;
+	struct sysctl_ctx_list *ctx;
+	struct sysctl_oid *tree;
+	int			 rid;
+
+	sc =3D device_get_softc(dev);
+
+	rid =3D 0x10;	/* BAR[0], for the MMIO register */
+	sc->sc_memr =3D bus_alloc_resource_any(dev, SYS_RES_MEMORY, &rid,
+			RF_ACTIVE | RF_SHAREABLE);
+	if (sc->sc_memr =3D=3D NULL) {
+		device_printf(dev, "Could not alloc mem resource!\n");
+		return (ENXIO);
+	}
+
+	/* Turn on big-endian mode */
+	if (!(bus_read_stream_4(sc->sc_memr, NVIDIA_MMIO_PMC + 4) & 0x01000001)) {
+		bus_write_stream_4(sc->sc_memr, NVIDIA_MMIO_PMC + 4, 0x01000001);
+		mb();
+	}
+
+	ctx =3D device_get_sysctl_ctx(dev);
+	tree =3D device_get_sysctl_tree(dev);
+
+	SYSCTL_ADD_PROC(ctx, SYSCTL_CHILDREN(tree), OID_AUTO,
+			"level", CTLTYPE_INT | CTLFLAG_RW, sc, 0,
+			nvbl_sysctl, "I", "Backlight level (0-100)");
+
+	return (0);
+}
+
+static int
+nvbl_setlevel(struct nvbl_softc *sc, int newlevel)
+{
+	uint32_t pmc_reg;
+
+	if (newlevel > 100)
+		newlevel =3D 100;
+
+	if (newlevel < 0)
+		newlevel =3D 0;
+
+	if (newlevel > 0)
+		newlevel =3D (newlevel * NVIDIA_BRIGHT_SCALE) + NVIDIA_BRIGHT_MIN;
+
+	pmc_reg =3D bus_read_stream_4(sc->sc_memr, NVIDIA_PMC_OFF) & 0xffff;
+	pmc_reg |=3D NVIDIA_PMC_BL_EN | (newlevel << NVIDIA_PMC_BL_SHIFT);
+	bus_write_stream_4(sc->sc_memr, NVIDIA_PMC_OFF, pmc_reg);
+
+	return (0);
+}
+
+static int
+nvbl_getlevel(struct nvbl_softc *sc)
+{
+	uint16_t level;
+
+	level =3D bus_read_stream_2(sc->sc_memr, NVIDIA_PMC_OFF) & 0x7fff;
+
+	if (level  < NVIDIA_BRIGHT_MIN)
+		return 0;
+
+	level =3D (level - NVIDIA_BRIGHT_MIN) / NVIDIA_BRIGHT_SCALE;
+
+	return (level);
+}
+
+static int
+nvbl_sysctl(SYSCTL_HANDLER_ARGS)
+{
+	struct nvbl_softc *sc;
+	int newlevel, error;
+
+	sc =3D arg1;
+
+	newlevel =3D nvbl_getlevel(sc);
+
+	error =3D sysctl_handle_int(oidp, &newlevel, 0, req);
+
+	if (error || !req->newptr)
+		return (error);
+
+	return (nvbl_setlevel(sc, newlevel));
+}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/powerpc/powerpc/busdma_machde=
p.c
--- a/head/sys/powerpc/powerpc/busdma_machdep.c	Mon Jul 30 11:44:18 2012 +0=
300
+++ b/head/sys/powerpc/powerpc/busdma_machdep.c	Fri Aug 10 14:19:25 2012 +0=
300
@@ -29,7 +29,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/powerpc/powerpc/busdma_machdep.c 232356 2012-=
03-01 19:58:34Z jhb $");
+__FBSDID("$FreeBSD: head/sys/powerpc/powerpc/busdma_machdep.c 239008 2012-=
08-03 13:50:29Z jhb $");
=20
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -46,6 +46,8 @@
 #include <sys/sysctl.h>
=20
 #include <vm/vm.h>
+#include <vm/vm_extern.h>
+#include <vm/vm_kern.h>
 #include <vm/vm_page.h>
 #include <vm/vm_map.h>
=20
@@ -130,6 +132,7 @@
 	bus_dmamap_callback_t *callback;
 	void		      *callback_arg;
 	STAILQ_ENTRY(bus_dmamap) links;
+	int		       contigalloc;
 };
=20
 static STAILQ_HEAD(, bus_dmamap) bounce_map_waitinglist;
@@ -489,6 +492,7 @@
 bus_dmamem_alloc(bus_dma_tag_t dmat, void** vaddr, int flags,
 		 bus_dmamap_t *mapp)
 {
+	vm_memattr_t attr;
 	int mflags;
=20
 	if (flags & BUS_DMA_NOWAIT)
@@ -500,6 +504,12 @@
=20
 	if (flags & BUS_DMA_ZERO)
 		mflags |=3D M_ZERO;
+#ifdef NOTYET
+	if (flags & BUS_DMA_NOCACHE)
+		attr =3D VM_MEMATTR_UNCACHEABLE;
+	else
+#endif
+		attr =3D VM_MEMATTR_DEFAULT;
=20
 	/*=20
 	 * XXX:
@@ -511,7 +521,8 @@
 	 */
 	if ((dmat->maxsize <=3D PAGE_SIZE) &&
 	   (dmat->alignment < dmat->maxsize) &&
-	    dmat->lowaddr >=3D ptoa((vm_paddr_t)Maxmem)) {
+	    dmat->lowaddr >=3D ptoa((vm_paddr_t)Maxmem) &&
+	    attr =3D=3D VM_MEMATTR_DEFAULT) {
 		*vaddr =3D malloc(dmat->maxsize, M_DEVBUF, mflags);
 	} else {
 		/*
@@ -520,9 +531,10 @@
 		 *     multi-seg allocations yet though.
 		 * XXX Certain AGP hardware does.
 		 */
-		*vaddr =3D contigmalloc(dmat->maxsize, M_DEVBUF, mflags,
-		    0ul, dmat->lowaddr, dmat->alignment? dmat->alignment : 1ul,
-		    dmat->boundary);
+		*vaddr =3D (void *)kmem_alloc_contig(kernel_map, dmat->maxsize,
+		    mflags, 0ul, dmat->lowaddr, dmat->alignment ?
+		    dmat->alignment : 1ul, dmat->boundary, attr);
+		(*mapp)->contigalloc =3D 1;
 	}
 	if (*vaddr =3D=3D NULL) {
 		CTR4(KTR_BUSDMA, "%s: tag %p tag flags 0x%x error %d",
@@ -531,11 +543,6 @@
 	} else if (vtophys(*vaddr) & (dmat->alignment - 1)) {
 		printf("bus_dmamem_alloc failed to align memory properly.\n");
 	}
-#ifdef NOTYET
-	if (flags & BUS_DMA_NOCACHE)
-		pmap_change_attr((vm_offset_t)*vaddr, dmat->maxsize,
-		    VM_MEMATTR_UNCACHEABLE);
-#endif
 	CTR4(KTR_BUSDMA, "%s: tag %p tag flags 0x%x error %d",
 	    __func__, dmat, dmat->flags, 0);
 	return (0);
@@ -548,18 +555,12 @@
 void
 bus_dmamem_free(bus_dma_tag_t dmat, void *vaddr, bus_dmamap_t map)
 {
+
+	if (!map->contigalloc)
+		free(vaddr, M_DEVBUF);
+	else
+		kmem_free(kernel_map, (vm_offset_t)vaddr, dmat->maxsize);
 	bus_dmamap_destroy(dmat, map);
-
-#ifdef NOTYET
-	pmap_change_attr((vm_offset_t)vaddr, dmat->maxsize, VM_MEMATTR_DEFAULT);
-#endif
-	if ((dmat->maxsize <=3D PAGE_SIZE) &&
-	   (dmat->alignment < dmat->maxsize) &&
-	    dmat->lowaddr >=3D ptoa((vm_paddr_t)Maxmem))
-		free(vaddr, M_DEVBUF);
-	else {
-		contigfree(vaddr, dmat->maxsize, M_DEVBUF);
-	}
 	CTR3(KTR_BUSDMA, "%s: tag %p flags 0x%x", __func__, dmat, dmat->flags);
 }
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/sparc64/include/pmap.h
--- a/head/sys/sparc64/include/pmap.h	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/sparc64/include/pmap.h	Fri Aug 10 14:19:25 2012 +0300
@@ -33,7 +33,7 @@
  *	from: hp300: @(#)pmap.h 7.2 (Berkeley) 12/16/90
  *	from: @(#)pmap.h        7.4 (Berkeley) 5/12/91
  *	from: FreeBSD: src/sys/i386/include/pmap.h,v 1.70 2000/11/30
- * $FreeBSD: head/sys/sparc64/include/pmap.h 237168 2012-06-16 18:56:19Z a=
lc $
+ * $FreeBSD: head/sys/sparc64/include/pmap.h 239079 2012-08-05 22:03:13Z m=
arius $
  */
=20
 #ifndef	_MACHINE_PMAP_H_
@@ -68,6 +68,11 @@
 	struct	pmap_statistics pm_stats;
 };
=20
+struct tte_list_lock {
+	struct rwlock lock;
+	char padding[CACHE_LINE_SIZE - sizeof(struct rwlock)];
+};
+
 #define	PMAP_LOCK(pmap)		mtx_lock(&(pmap)->pm_mtx)
 #define	PMAP_LOCK_ASSERT(pmap, type)					\
 				mtx_assert(&(pmap)->pm_mtx, (type))
@@ -103,7 +108,8 @@
=20
 extern	struct pmap kernel_pmap_store;
 #define	kernel_pmap	(&kernel_pmap_store)
-extern	struct rwlock tte_list_global_lock;
+extern	struct tte_list_lock tte_list_global;
+#define	tte_list_global_lock	tte_list_global.lock
 extern	vm_paddr_t phys_avail[];
 extern	vm_offset_t virtual_avail;
 extern	vm_offset_t virtual_end;
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/sparc64/sparc64/pmap.c
--- a/head/sys/sparc64/sparc64/pmap.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/sparc64/sparc64/pmap.c	Fri Aug 10 14:19:25 2012 +0300
@@ -38,7 +38,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/sparc64/sparc64/pmap.c 237623 2012-06-27 03:4=
5:25Z alc $");
+__FBSDID("$FreeBSD: head/sys/sparc64/sparc64/pmap.c 239079 2012-08-05 22:0=
3:13Z marius $");
=20
 /*
  * Manages physical address maps.
@@ -135,9 +135,11 @@
 struct pmap kernel_pmap_store;
=20
 /*
- * Global tte list lock
+ * Isolate the global TTE list lock from data and other locks to prevent
+ * false sharing within the cache (see also the declaration of struct
+ * tte_list_lock).
  */
-struct rwlock tte_list_global_lock;
+struct tte_list_lock tte_list_global __aligned(CACHE_LINE_SIZE);
=20
 /*
  * Allocate physical memory for use in pmap_bootstrap.
@@ -672,7 +674,7 @@
 		pm->pm_context[i] =3D TLB_CTX_KERNEL;
 	CPU_FILL(&pm->pm_active);
=20
- 	/*
+	/*
 	 * Initialize the global tte list lock, which is more commonly
 	 * known as the pmap pv global lock.
 	 */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/sys/bus.h
--- a/head/sys/sys/bus.h	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/sys/bus.h	Fri Aug 10 14:19:25 2012 +0300
@@ -23,7 +23,7 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: head/sys/sys/bus.h 234152 2012-04-11 20:57:41Z jhb $
+ * $FreeBSD: head/sys/sys/bus.h 239046 2012-08-05 06:15:12Z andreast $
  */
=20
 #ifndef _SYS_BUS_H_
@@ -560,7 +560,7 @@
  * is for drivers that wish to have a generic form and a specialized form,
  * like is done with the pci bus and the acpi pci bus.  BUS_PROBE_HOOVER is
  * for those busses that implement a generic device place-holder for devic=
es on
- * the bus that have no more specific river for them (aka ugen).
+ * the bus that have no more specific driver for them (aka ugen).
  * BUS_PROBE_NOWILDCARD or lower means that the device isn't really bidding
  * for a device node, but accepts only devices that its parent has told it
  * use this driver.
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/sys/fcntl.h
--- a/head/sys/sys/fcntl.h	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/sys/fcntl.h	Fri Aug 10 14:19:25 2012 +0300
@@ -32,7 +32,7 @@
  * SUCH DAMAGE.
  *
  *	@(#)fcntl.h	8.3 (Berkeley) 1/21/94
- * $FreeBSD: head/sys/sys/fcntl.h 238667 2012-07-21 13:02:11Z kib $
+ * $FreeBSD: head/sys/sys/fcntl.h 238834 2012-07-27 10:41:10Z kib $
  */
=20
 #ifndef _SYS_FCNTL_H_
@@ -232,6 +232,9 @@
 #if __BSD_VISIBLE || __POSIX_VISIBLE >=3D 200809
 #define	F_DUPFD_CLOEXEC	17		/* Like F_DUPFD, but FD_CLOEXEC is set */
 #endif
+#if __BSD_VISIBLE
+#define	F_DUP2FD_CLOEXEC 18		/* Like F_DUP2FD, but FD_CLOEXEC is set */
+#endif
=20
 /* file descriptor flags (F_GETFD, F_SETFD) */
 #define	FD_CLOEXEC	1		/* close-on-exec flag */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/sys/pipe.h
--- a/head/sys/sys/pipe.h	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/sys/pipe.h	Fri Aug 10 14:19:25 2012 +0300
@@ -18,7 +18,7 @@
  * 5. Modifications may be freely made to this file if the above conditions
  *    are met.
  *
- * $FreeBSD: head/sys/sys/pipe.h 232641 2012-03-07 07:31:50Z kib $
+ * $FreeBSD: head/sys/sys/pipe.h 238936 2012-07-31 05:48:35Z davidxu $
  */
=20
 #ifndef _SYS_PIPE_H_
@@ -96,7 +96,6 @@
 #define PIPE_DIRECTW	0x400	/* Pipe direct write active. */
 #define PIPE_DIRECTOK	0x800	/* Direct mode ok. */
 #define PIPE_NAMED	0x1000	/* Is a named pipe. */
-#define PIPE_SAMEWGEN	0x2000	/* same write generation for named pipes. */
=20
 /*
  * Per-pipe data structure.
@@ -115,6 +114,7 @@
 	u_int	pipe_state;		/* pipe status info */
 	int	pipe_busy;		/* busy flag, mostly to handle rundown sanely */
 	int	pipe_present;		/* still present? */
+	int	pipe_wgen;		/* writer generation for named pipe */
 	ino_t	pipe_ino;		/* fake inode for stat(2) */
 };
=20
@@ -143,5 +143,5 @@
=20
 void	pipe_dtor(struct pipe *dpipe);
 int	pipe_named_ctor(struct pipe **ppipe, struct thread *td);
-
+void	pipeselwakeup(struct pipe *cpipe);
 #endif /* !_SYS_PIPE_H_ */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/sys/refcount.h
--- a/head/sys/sys/refcount.h	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/sys/refcount.h	Fri Aug 10 14:19:25 2012 +0300
@@ -26,12 +26,13 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD$
+ * $FreeBSD: head/sys/sys/refcount.h 238828 2012-07-27 09:16:48Z glebius $
  */
=20
 #ifndef __SYS_REFCOUNT_H__
 #define __SYS_REFCOUNT_H__
=20
+#include <sys/limits.h>
 #include <machine/atomic.h>
=20
 #ifdef _KERNEL
@@ -51,6 +52,7 @@
 refcount_acquire(volatile u_int *count)
 {
=20
+	KASSERT(*count < UINT_MAX, ("refcount %p overflowed", count));
 	atomic_add_acq_int(count, 1);=09
 }
=20
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/ufs/ffs/ffs_vnops.c
--- a/head/sys/ufs/ffs/ffs_vnops.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/ufs/ffs/ffs_vnops.c	Fri Aug 10 14:19:25 2012 +0300
@@ -62,7 +62,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/ufs/ffs/ffs_vnops.c 237366 2012-06-21 09:20:0=
7Z kib $");
+__FBSDID("$FreeBSD: head/sys/ufs/ffs/ffs_vnops.c 239065 2012-08-05 14:11:4=
2Z kib $");
=20
 #include <sys/param.h>
 #include <sys/bio.h>
@@ -80,6 +80,7 @@
 #include <sys/vnode.h>
=20
 #include <vm/vm.h>
+#include <vm/vm_param.h>
 #include <vm/vm_extern.h>
 #include <vm/vm_object.h>
 #include <vm/vm_page.h>
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/vm/device_pager.c
--- a/head/sys/vm/device_pager.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/vm/device_pager.c	Fri Aug 10 14:19:25 2012 +0300
@@ -35,7 +35,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/vm/device_pager.c 235603 2012-05-18 10:23:47Z=
 kib $");
+__FBSDID("$FreeBSD: head/sys/vm/device_pager.c 239065 2012-08-05 14:11:42Z=
 kib $");
=20
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -47,6 +47,7 @@
 #include <sys/sx.h>
=20
 #include <vm/vm.h>
+#include <vm/vm_param.h>
 #include <vm/vm_object.h>
 #include <vm/vm_page.h>
 #include <vm/vm_pager.h>
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/vm/sg_pager.c
--- a/head/sys/vm/sg_pager.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/vm/sg_pager.c	Fri Aug 10 14:19:25 2012 +0300
@@ -26,7 +26,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
+__FBSDID("$FreeBSD: head/sys/vm/sg_pager.c 239065 2012-08-05 14:11:42Z kib=
 $");
=20
 /*
  * This pager manages OBJT_SG objects.  These objects are backed by
@@ -38,6 +38,7 @@
 #include <sys/mutex.h>
 #include <sys/sglist.h>
 #include <vm/vm.h>
+#include <vm/vm_param.h>
 #include <vm/vm_object.h>
 #include <vm/vm_page.h>
 #include <vm/vm_pager.h>
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/vm/vm_page.c
--- a/head/sys/vm/vm_page.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/vm/vm_page.c	Fri Aug 10 14:19:25 2012 +0300
@@ -77,7 +77,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/vm/vm_page.c 238543 2012-07-17 02:36:59Z alc =
$");
+__FBSDID("$FreeBSD: head/sys/vm/vm_page.c 239040 2012-08-04 18:16:43Z kib =
$");
=20
 #include "opt_vm.h"
=20
@@ -450,63 +450,6 @@
 	return (vaddr);
 }
=20
-
-CTASSERT(offsetof(struct vm_page, aflags) % sizeof(uint32_t) =3D=3D 0);
-
-void
-vm_page_aflag_set(vm_page_t m, uint8_t bits)
-{
-	uint32_t *addr, val;
-
-	/*
-	 * The PGA_WRITEABLE flag can only be set if the page is managed and
-	 * VPO_BUSY.  Currently, this flag is only set by pmap_enter().
-	 */
-	KASSERT((bits & PGA_WRITEABLE) =3D=3D 0 ||
-	    (m->oflags & (VPO_UNMANAGED | VPO_BUSY)) =3D=3D VPO_BUSY,
-	    ("PGA_WRITEABLE and !VPO_BUSY"));
-
-	/*
-	 * We want to use atomic updates for m->aflags, which is a
-	 * byte wide.  Not all architectures provide atomic operations
-	 * on the single-byte destination.  Punt and access the whole
-	 * 4-byte word with an atomic update.  Parallel non-atomic
-	 * updates to the fields included in the update by proximity
-	 * are handled properly by atomics.
-	 */
-	addr =3D (void *)&m->aflags;
-	MPASS(((uintptr_t)addr & (sizeof(uint32_t) - 1)) =3D=3D 0);
-	val =3D bits;
-#if BYTE_ORDER =3D=3D BIG_ENDIAN
-	val <<=3D 24;
-#endif
-	atomic_set_32(addr, val);
-}=20
-
-void
-vm_page_aflag_clear(vm_page_t m, uint8_t bits)
-{
-	uint32_t *addr, val;
-
-	/*
-	 * The PGA_REFERENCED flag can only be cleared if the object
-	 * containing the page is locked.
-	 */
-	KASSERT((bits & PGA_REFERENCED) =3D=3D 0 || VM_OBJECT_LOCKED(m->object),
-	    ("PGA_REFERENCED and !VM_OBJECT_LOCKED"));
-
-	/*
-	 * See the comment in vm_page_aflag_set().
-	 */
-	addr =3D (void *)&m->aflags;
-	MPASS(((uintptr_t)addr & (sizeof(uint32_t) - 1)) =3D=3D 0);
-	val =3D bits;
-#if BYTE_ORDER =3D=3D BIG_ENDIAN
-	val <<=3D 24;
-#endif
-	atomic_clear_32(addr, val);
-}
-
 void
 vm_page_reference(vm_page_t m)
 {
@@ -752,6 +695,39 @@
 }
=20
 /*
+ * Unbusy and handle the page queueing for a page from the VOP_GETPAGES()
+ * array which is not the request page.
+ */
+void
+vm_page_readahead_finish(vm_page_t m, int error)
+{
+
+	if (error =3D=3D 0) {
+		/*
+		 * Since the page is not the requested page, whether
+		 * it should be activated or deactivated is not
+		 * obvious.  Empirical results have shown that
+		 * deactivating the page is usually the best choice,
+		 * unless the page is wanted by another thread.
+		 */
+		if (m->oflags & VPO_WANTED) {
+			vm_page_lock(m);
+			vm_page_activate(m);
+			vm_page_unlock(m);
+		} else {
+			vm_page_lock(m);
+			vm_page_deactivate(m);
+			vm_page_unlock(m);
+		}
+		vm_page_wakeup(m);
+	} else {
+		vm_page_lock(m);
+		vm_page_free(m);
+		vm_page_unlock(m);
+	}
+}
+
+/*
  *	vm_page_sleep:
  *
  *	Sleep and release the page and page queues locks.
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/vm/vm_page.h
--- a/head/sys/vm/vm_page.h	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/vm/vm_page.h	Fri Aug 10 14:19:25 2012 +0300
@@ -57,7 +57,7 @@
  * any improvements or extensions that they make and grant Carnegie the
  * rights to redistribute these changes.
  *
- * $FreeBSD: head/sys/vm/vm_page.h 237346 2012-06-20 23:25:47Z alc $
+ * $FreeBSD: head/sys/vm/vm_page.h 239065 2012-08-05 14:11:42Z kib $
  */
=20
 /*
@@ -239,13 +239,14 @@
 #define	vm_page_queue_free_mtx	vm_page_queue_free_lock.data
=20
 /*
- * These are the flags defined for vm_page.
- *
- * aflags are updated by atomic accesses.  Use the vm_page_aflag_set()
- * and vm_page_aflag_clear() functions to set and clear the flags.
+ * The vm_page's aflags are updated using atomic operations.  To set or cl=
ear
+ * these flags, the functions vm_page_aflag_set() and vm_page_aflag_clear()
+ * must be used.  Neither these flags nor these functions are part of the =
KBI.
  *
  * PGA_REFERENCED may be cleared only if the object containing the page is
- * locked.  It is set by both the MI and MD VM layers.
+ * locked.  It is set by both the MI and MD VM layers.  However, kernel
+ * loadable modules should not directly set this flag.  They should call
+ * vm_page_reference() instead.
  *
  * PGA_WRITEABLE is set exclusively on managed pages by pmap_enter().  Whe=
n it
  * does so, the page must be VPO_BUSY.  The MI VM layer must never access =
this
@@ -281,7 +282,9 @@
=20
 #ifdef _KERNEL
=20
-#include <vm/vm_param.h>
+#include <sys/systm.h>
+
+#include <machine/atomic.h>
=20
 /*
  * Each pageable resident page falls into one of five lists:
@@ -310,7 +313,6 @@
  *
  */
=20
-struct vnode;
 extern int vm_page_zero_count;
=20
 extern vm_page_t vm_page_array;		/* First resident page in table */
@@ -350,8 +352,6 @@
 #define	VM_ALLOC_COUNT_SHIFT	16
 #define	VM_ALLOC_COUNT(count)	((count) << VM_ALLOC_COUNT_SHIFT)
=20
-void vm_page_aflag_set(vm_page_t m, uint8_t bits);
-void vm_page_aflag_clear(vm_page_t m, uint8_t bits);
 void vm_page_busy(vm_page_t m);
 void vm_page_flash(vm_page_t m);
 void vm_page_io_start(vm_page_t m);
@@ -388,6 +388,7 @@
 int vm_page_pa_tryrelock(pmap_t, vm_paddr_t, vm_paddr_t *);
 vm_page_t vm_page_prev(vm_page_t m);
 void vm_page_putfake(vm_page_t m);
+void vm_page_readahead_finish(vm_page_t m, int error);
 void vm_page_reference(vm_page_t m);
 void vm_page_remove (vm_page_t);
 void vm_page_rename (vm_page_t, vm_object_t, vm_pindex_t);
@@ -429,6 +430,75 @@
 #endif
=20
 /*
+ * We want to use atomic updates for the aflags field, which is 8 bits wid=
e.
+ * However, not all architectures support atomic operations on 8-bit
+ * destinations.  In order that we can easily use a 32-bit operation, we
+ * require that the aflags field be 32-bit aligned.
+ */
+CTASSERT(offsetof(struct vm_page, aflags) % sizeof(uint32_t) =3D=3D 0);
+
+/*
+ *	Clear the given bits in the specified page.
+ */
+static inline void
+vm_page_aflag_clear(vm_page_t m, uint8_t bits)
+{
+	uint32_t *addr, val;
+
+	/*
+	 * The PGA_REFERENCED flag can only be cleared if the object
+	 * containing the page is locked.
+	 */
+	if ((bits & PGA_REFERENCED) !=3D 0)
+		VM_PAGE_OBJECT_LOCK_ASSERT(m);
+
+	/*
+	 * Access the whole 32-bit word containing the aflags field with an
+	 * atomic update.  Parallel non-atomic updates to the other fields
+	 * within this word are handled properly by the atomic update.
+	 */
+	addr =3D (void *)&m->aflags;
+	KASSERT(((uintptr_t)addr & (sizeof(uint32_t) - 1)) =3D=3D 0,
+	    ("vm_page_aflag_clear: aflags is misaligned"));
+	val =3D bits;
+#if BYTE_ORDER =3D=3D BIG_ENDIAN
+	val <<=3D 24;
+#endif
+	atomic_clear_32(addr, val);
+}
+
+/*
+ *	Set the given bits in the specified page.
+ */
+static inline void
+vm_page_aflag_set(vm_page_t m, uint8_t bits)
+{
+	uint32_t *addr, val;
+
+	/*
+	 * The PGA_WRITEABLE flag can only be set if the page is managed and
+	 * VPO_BUSY.  Currently, this flag is only set by pmap_enter().
+	 */
+	KASSERT((bits & PGA_WRITEABLE) =3D=3D 0 ||
+	    (m->oflags & (VPO_UNMANAGED | VPO_BUSY)) =3D=3D VPO_BUSY,
+	    ("vm_page_aflag_set: PGA_WRITEABLE and !VPO_BUSY"));
+
+	/*
+	 * Access the whole 32-bit word containing the aflags field with an
+	 * atomic update.  Parallel non-atomic updates to the other fields
+	 * within this word are handled properly by the atomic update.
+	 */
+	addr =3D (void *)&m->aflags;
+	KASSERT(((uintptr_t)addr & (sizeof(uint32_t) - 1)) =3D=3D 0,
+	    ("vm_page_aflag_set: aflags is misaligned"));
+	val =3D bits;
+#if BYTE_ORDER =3D=3D BIG_ENDIAN
+	val <<=3D 24;
+#endif
+	atomic_set_32(addr, val);
+}=20
+
+/*
  *	vm_page_dirty:
  *
  *	Set all bits in the page's dirty field.
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/vm/vm_pageout.c
--- a/head/sys/vm/vm_pageout.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/vm/vm_pageout.c	Fri Aug 10 14:19:25 2012 +0300
@@ -73,7 +73,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/vm/vm_pageout.c 238732 2012-07-24 02:35:30Z a=
lc $");
+__FBSDID("$FreeBSD: head/sys/vm/vm_pageout.c 239121 2012-08-07 04:48:14Z a=
lc $");
=20
 #include "opt_vm.h"
 #include <sys/param.h>
@@ -586,23 +586,14 @@
 			continue;
 		}
 		object =3D m->object;
-		if (!VM_OBJECT_TRYLOCK(object) &&
+		if ((!VM_OBJECT_TRYLOCK(object) &&
 		    (!vm_pageout_fallback_object_lock(m, &next) ||
-		    m->hold_count !=3D 0)) {
+		    m->hold_count !=3D 0)) || (m->oflags & VPO_BUSY) !=3D 0 ||
+		    m->busy !=3D 0) {
 			vm_page_unlock(m);
 			VM_OBJECT_UNLOCK(object);
 			continue;
 		}
-		if ((m->oflags & VPO_BUSY) !=3D 0 || m->busy !=3D 0) {
-			if (tries =3D=3D 0) {
-				vm_page_unlock(m);
-				VM_OBJECT_UNLOCK(object);
-				continue;
-			}
-			vm_page_sleep(m, "vpctw0");
-			VM_OBJECT_UNLOCK(object);
-			return (FALSE);
-		}
 		vm_page_test_dirty(m);
 		if (m->dirty =3D=3D 0)
 			pmap_remove_all(m);
@@ -889,6 +880,12 @@
 	 */
 	uma_reclaim();
=20
+	/*
+	 * The addl_page_shortage is the the number of temporarily
+	 * stuck pages in the inactive queue.  In other words, the
+	 * number of pages from cnt.v_inactive_count that should be
+	 * discounted in setting the target for the active queue scan.
+	 */
 	addl_page_shortage =3D atomic_readandclear_int(&vm_pageout_deficit);
=20
 	/*
@@ -945,38 +942,31 @@
 		    ("Unmanaged page %p cannot be in inactive queue", m));
=20
 		/*
-		 * Lock the page.
+		 * The page or object lock acquisitions fail if the
+		 * page was removed from the queue or moved to a
+		 * different position within the queue.  In either
+		 * case, addl_page_shortage should not be incremented.
 		 */
 		if (!vm_pageout_page_lock(m, &next)) {
 			vm_page_unlock(m);
-			addl_page_shortage++;
+			continue;
+		}
+		object =3D m->object;
+		if (!VM_OBJECT_TRYLOCK(object) &&
+		    !vm_pageout_fallback_object_lock(m, &next)) {
+			vm_page_unlock(m);
+			VM_OBJECT_UNLOCK(object);
 			continue;
 		}
=20
 		/*
-		 * A held page may be undergoing I/O, so skip it.
+		 * Don't mess with busy pages, keep them at at the
+		 * front of the queue, most likely they are being
+		 * paged out.  Increment addl_page_shortage for busy
+		 * pages, because they may leave the inactive queue
+		 * shortly after page scan is finished.
 		 */
-		if (m->hold_count) {
-			vm_page_unlock(m);
-			vm_page_requeue(m);
-			addl_page_shortage++;
-			continue;
-		}
-
-		/*
-		 * Don't mess with busy pages, keep in the front of the
-		 * queue, most likely are being paged out.
-		 */
-		object =3D m->object;
-		if (!VM_OBJECT_TRYLOCK(object) &&
-		    (!vm_pageout_fallback_object_lock(m, &next) ||
-		    m->hold_count !=3D 0)) {
-			VM_OBJECT_UNLOCK(object);
-			vm_page_unlock(m);
-			addl_page_shortage++;
-			continue;
-		}
-		if (m->busy || (m->oflags & VPO_BUSY)) {
+		if (m->busy !=3D 0 || (m->oflags & VPO_BUSY) !=3D 0) {
 			vm_page_unlock(m);
 			VM_OBJECT_UNLOCK(object);
 			addl_page_shortage++;
@@ -1036,6 +1026,21 @@
 			goto relock_queues;
 		}
=20
+		if (m->hold_count !=3D 0) {
+			vm_page_unlock(m);
+			VM_OBJECT_UNLOCK(object);
+
+			/*
+			 * Held pages are essentially stuck in the
+			 * queue.  So, they ought to be discounted
+			 * from cnt.v_inactive_count.  See the
+			 * calculation of the page_shortage for the
+			 * loop over the active queue below.
+			 */
+			addl_page_shortage++;
+			goto relock_queues;
+		}
+
 		/*
 		 * If the upper level VM system does not believe that the page
 		 * is fully dirty, but it is mapped for write access, then we
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/vm/vnode_pager.c
--- a/head/sys/vm/vnode_pager.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/vm/vnode_pager.c	Fri Aug 10 14:19:25 2012 +0300
@@ -51,7 +51,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/vm/vnode_pager.c 237172 2012-06-16 21:39:00Z =
attilio $");
+__FBSDID("$FreeBSD: head/sys/vm/vnode_pager.c 239065 2012-08-05 14:11:42Z =
kib $");
=20
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -68,6 +68,7 @@
 #include <machine/atomic.h>
=20
 #include <vm/vm.h>
+#include <vm/vm_param.h>
 #include <vm/vm_object.h>
 #include <vm/vm_page.h>
 #include <vm/vm_pager.h>
@@ -985,37 +986,8 @@
 			    mt));
 		}
 	=09
-		if (i !=3D reqpage) {
-
-			/*
-			 * whether or not to leave the page activated is up in
-			 * the air, but we should put the page on a page queue
-			 * somewhere. (it already is in the object). Result:
-			 * It appears that empirical results show that
-			 * deactivating pages is best.
-			 */
-
-			/*
-			 * just in case someone was asking for this page we
-			 * now tell them that it is ok to use
-			 */
-			if (!error) {
-				if (mt->oflags & VPO_WANTED) {
-					vm_page_lock(mt);
-					vm_page_activate(mt);
-					vm_page_unlock(mt);
-				} else {
-					vm_page_lock(mt);
-					vm_page_deactivate(mt);
-					vm_page_unlock(mt);
-				}
-				vm_page_wakeup(mt);
-			} else {
-				vm_page_lock(mt);
-				vm_page_free(mt);
-				vm_page_unlock(mt);
-			}
-		}
+		if (i !=3D reqpage)
+			vm_page_readahead_finish(mt, error);
 	}
 	VM_OBJECT_UNLOCK(object);
 	if (error) {
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/x86/x86/busdma_machdep.c
--- a/head/sys/x86/x86/busdma_machdep.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/x86/x86/busdma_machdep.c	Fri Aug 10 14:19:25 2012 +0300
@@ -25,7 +25,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/x86/x86/busdma_machdep.c 233036 2012-03-16 16=
:12:10Z jhb $");
+__FBSDID("$FreeBSD: head/sys/x86/x86/busdma_machdep.c 239020 2012-08-03 18=
:40:44Z jhb $");
=20
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -42,6 +42,8 @@
 #include <sys/sysctl.h>
=20
 #include <vm/vm.h>
+#include <vm/vm_extern.h>
+#include <vm/vm_kern.h>
 #include <vm/vm_page.h>
 #include <vm/vm_map.h>
=20
@@ -131,7 +133,7 @@
=20
 static STAILQ_HEAD(, bus_dmamap) bounce_map_waitinglist;
 static STAILQ_HEAD(, bus_dmamap) bounce_map_callbacklist;
-static struct bus_dmamap nobounce_dmamap;
+static struct bus_dmamap nobounce_dmamap, contig_dmamap;
=20
 static void init_bounce_pages(void *dummy);
 static int alloc_bounce_zone(bus_dma_tag_t dmat);
@@ -465,7 +467,7 @@
 int
 bus_dmamap_destroy(bus_dma_tag_t dmat, bus_dmamap_t map)
 {
-	if (map !=3D NULL && map !=3D &nobounce_dmamap) {
+	if (map !=3D NULL && map !=3D &nobounce_dmamap && map !=3D &contig_dmamap=
) {
 		if (STAILQ_FIRST(&map->bpages) !=3D NULL) {
 			CTR3(KTR_BUSDMA, "%s: tag %p error %d",
 			    __func__, dmat, EBUSY);
@@ -490,6 +492,7 @@
 bus_dmamem_alloc(bus_dma_tag_t dmat, void** vaddr, int flags,
 		 bus_dmamap_t *mapp)
 {
+	vm_memattr_t attr;
 	int mflags;
=20
 	if (flags & BUS_DMA_NOWAIT)
@@ -512,6 +515,10 @@
 	}
 	if (flags & BUS_DMA_ZERO)
 		mflags |=3D M_ZERO;
+	if (flags & BUS_DMA_NOCACHE)
+		attr =3D VM_MEMATTR_UNCACHEABLE;
+	else
+		attr =3D VM_MEMATTR_DEFAULT;
=20
 	/*=20
 	 * XXX:
@@ -523,7 +530,8 @@
 	 */
 	if ((dmat->maxsize <=3D PAGE_SIZE) &&
 	   (dmat->alignment < dmat->maxsize) &&
-	    dmat->lowaddr >=3D ptoa((vm_paddr_t)Maxmem)) {
+	    dmat->lowaddr >=3D ptoa((vm_paddr_t)Maxmem) &&
+	    attr =3D=3D VM_MEMATTR_DEFAULT) {
 		*vaddr =3D malloc(dmat->maxsize, M_DEVBUF, mflags);
 	} else {
 		/*
@@ -532,9 +540,10 @@
 		 *     multi-seg allocations yet though.
 		 * XXX Certain AGP hardware does.
 		 */
-		*vaddr =3D contigmalloc(dmat->maxsize, M_DEVBUF, mflags,
-		    0ul, dmat->lowaddr, dmat->alignment? dmat->alignment : 1ul,
-		    dmat->boundary);
+		*vaddr =3D (void *)kmem_alloc_contig(kernel_map, dmat->maxsize,
+		    mflags, 0ul, dmat->lowaddr, dmat->alignment ?
+		    dmat->alignment : 1ul, dmat->boundary, attr);
+		*mapp =3D &contig_dmamap;
 	}
 	if (*vaddr =3D=3D NULL) {
 		CTR4(KTR_BUSDMA, "%s: tag %p tag flags 0x%x error %d",
@@ -543,9 +552,6 @@
 	} else if (vtophys(*vaddr) & (dmat->alignment - 1)) {
 		printf("bus_dmamem_alloc failed to align memory properly.\n");
 	}
-	if (flags & BUS_DMA_NOCACHE)
-		pmap_change_attr((vm_offset_t)*vaddr, dmat->maxsize,
-		    PAT_UNCACHEABLE);
 	CTR4(KTR_BUSDMA, "%s: tag %p tag flags 0x%x error %d",
 	    __func__, dmat, dmat->flags, 0);
 	return (0);
@@ -560,18 +566,15 @@
 {
 	/*
 	 * dmamem does not need to be bounced, so the map should be
-	 * NULL
+	 * NULL if malloc() was used and contig_dmamap if
+	 * kmem_alloc_contig() was used.
 	 */
-	if (map !=3D NULL)
+	if (!(map =3D=3D NULL || map =3D=3D &contig_dmamap))
 		panic("bus_dmamem_free: Invalid map freed\n");
-	pmap_change_attr((vm_offset_t)vaddr, dmat->maxsize, PAT_WRITE_BACK);
-	if ((dmat->maxsize <=3D PAGE_SIZE) &&
-	   (dmat->alignment < dmat->maxsize) &&
-	    dmat->lowaddr >=3D ptoa((vm_paddr_t)Maxmem))
+	if (map =3D=3D NULL)
 		free(vaddr, M_DEVBUF);
-	else {
-		contigfree(vaddr, dmat->maxsize, M_DEVBUF);
-	}
+	else
+		kmem_free(kernel_map, (vm_offset_t)vaddr, dmat->maxsize);
 	CTR3(KTR_BUSDMA, "%s: tag %p flags 0x%x", __func__, dmat, dmat->flags);
 }
=20
@@ -662,7 +665,7 @@
 	vm_offset_t vaddr;
 	int seg, error;
=20
-	if (map =3D=3D NULL)
+	if (map =3D=3D NULL || map =3D=3D &contig_dmamap)
 		map =3D &nobounce_dmamap;
=20
 	if ((dmat->flags & BUS_DMA_COULD_BOUNCE) !=3D 0) {
@@ -1139,7 +1142,7 @@
 	struct bounce_page *bpage;
=20
 	KASSERT(dmat->bounce_zone !=3D NULL, ("no bounce zone in dma tag"));
-	KASSERT(map !=3D NULL && map !=3D &nobounce_dmamap,
+	KASSERT(map !=3D NULL && map !=3D &nobounce_dmamap && map !=3D &contig_dm=
amap,
 	    ("add_bounce_page: bad map %p", map));
=20
 	bz =3D dmat->bounce_zone;
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/x86/x86/local_apic.c
--- a/head/sys/x86/x86/local_apic.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/x86/x86/local_apic.c	Fri Aug 10 14:19:25 2012 +0300
@@ -32,7 +32,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/x86/x86/local_apic.c 232232 2012-02-27 17:33:=
16Z jhb $");
+__FBSDID("$FreeBSD: head/sys/x86/x86/local_apic.c 239013 2012-08-03 15:19:=
59Z mav $");
=20
 #include "opt_atpic.h"
 #include "opt_hwpmc_hooks.h"
@@ -119,6 +119,7 @@
 	u_long *la_timer_count;
 	u_long la_timer_period;
 	u_int la_timer_mode;
+	uint32_t lvt_timer_cache;
 	/* Include IDT_SYSCALL to make indexing easier. */
 	int la_ioint_irqs[APIC_NUM_IOINTS + 1];
 } static lapics[MAX_APIC_ID + 1];
@@ -160,9 +161,11 @@
=20
 static void	lapic_enable(void);
 static void	lapic_resume(struct pic *pic);
-static void	lapic_timer_oneshot(u_int count, int enable_int);
-static void	lapic_timer_periodic(u_int count, int enable_int);
-static void	lapic_timer_stop(void);
+static void	lapic_timer_oneshot(struct lapic *,
+		    u_int count, int enable_int);
+static void	lapic_timer_periodic(struct lapic *,
+		    u_int count, int enable_int);
+static void	lapic_timer_stop(struct lapic *);
 static void	lapic_timer_set_divisor(u_int divisor);
 static uint32_t	lvt_mode(struct lapic *la, u_int pin, uint32_t value);
 static int	lapic_et_start(struct eventtimer *et,
@@ -370,7 +373,8 @@
 		lapic->lvt_pcint =3D lvt_mode(la, LVT_PMC, lapic->lvt_pcint);
=20
 	/* Program timer LVT and setup handler. */
-	lapic->lvt_timer =3D lvt_mode(la, LVT_TIMER, lapic->lvt_timer);
+	la->lvt_timer_cache =3D lapic->lvt_timer =3D
+	    lvt_mode(la, LVT_TIMER, lapic->lvt_timer);
 	if (boot) {
 		snprintf(buf, sizeof(buf), "cpu%d:timer", PCPU_GET(cpuid));
 		intrcnt_add(buf, &la->la_timer_count);
@@ -382,9 +386,9 @@
 		    lapic_id()));
 		lapic_timer_set_divisor(lapic_timer_divisor);
 		if (la->la_timer_mode =3D=3D 1)
-			lapic_timer_periodic(la->la_timer_period, 1);
+			lapic_timer_periodic(la, la->la_timer_period, 1);
 		else
-			lapic_timer_oneshot(la->la_timer_period, 1);
+			lapic_timer_oneshot(la, la->la_timer_period, 1);
 	}
=20
 	/* Program error LVT and clear any existing errors. */
@@ -489,13 +493,14 @@
 	struct lapic *la;
 	u_long value;
=20
+	la =3D &lapics[PCPU_GET(apic_id)];
 	if (et->et_frequency =3D=3D 0) {
 		/* Start off with a divisor of 2 (power on reset default). */
 		lapic_timer_divisor =3D 2;
 		/* Try to calibrate the local APIC timer. */
 		do {
 			lapic_timer_set_divisor(lapic_timer_divisor);
-			lapic_timer_oneshot(APIC_TIMER_MAX_COUNT, 0);
+			lapic_timer_oneshot(la, APIC_TIMER_MAX_COUNT, 0);
 			DELAY(1000000);
 			value =3D APIC_TIMER_MAX_COUNT - lapic->ccr_timer;
 			if (value !=3D APIC_TIMER_MAX_COUNT)
@@ -515,22 +520,22 @@
 		et->et_max_period.frac =3D
 		    ((0xfffffffeLLU << 32) / et->et_frequency) << 32;
 	}
-	lapic_timer_set_divisor(lapic_timer_divisor);
-	la =3D &lapics[lapic_id()];
+	if (la->la_timer_mode =3D=3D 0)
+		lapic_timer_set_divisor(lapic_timer_divisor);
 	if (period !=3D NULL) {
 		la->la_timer_mode =3D 1;
 		la->la_timer_period =3D
 		    (et->et_frequency * (period->frac >> 32)) >> 32;
 		if (period->sec !=3D 0)
 			la->la_timer_period +=3D et->et_frequency * period->sec;
-		lapic_timer_periodic(la->la_timer_period, 1);
+		lapic_timer_periodic(la, la->la_timer_period, 1);
 	} else {
 		la->la_timer_mode =3D 2;
 		la->la_timer_period =3D
 		    (et->et_frequency * (first->frac >> 32)) >> 32;
 		if (first->sec !=3D 0)
 			la->la_timer_period +=3D et->et_frequency * first->sec;
-		lapic_timer_oneshot(la->la_timer_period, 1);
+		lapic_timer_oneshot(la, la->la_timer_period, 1);
 	}
 	return (0);
 }
@@ -538,10 +543,10 @@
 static int
 lapic_et_stop(struct eventtimer *et)
 {
-	struct lapic *la =3D &lapics[lapic_id()];
+	struct lapic *la =3D &lapics[PCPU_GET(apic_id)];
=20
 	la->la_timer_mode =3D 0;
-	lapic_timer_stop();
+	lapic_timer_stop(la);
 	return (0);
 }
=20
@@ -835,11 +840,11 @@
 }
=20
 static void
-lapic_timer_oneshot(u_int count, int enable_int)
+lapic_timer_oneshot(struct lapic *la, u_int count, int enable_int)
 {
 	u_int32_t value;
=20
-	value =3D lapic->lvt_timer;
+	value =3D la->lvt_timer_cache;
 	value &=3D ~APIC_LVTT_TM;
 	value |=3D APIC_LVTT_TM_ONE_SHOT;
 	if (enable_int)
@@ -849,11 +854,11 @@
 }
=20
 static void
-lapic_timer_periodic(u_int count, int enable_int)
+lapic_timer_periodic(struct lapic *la, u_int count, int enable_int)
 {
 	u_int32_t value;
=20
-	value =3D lapic->lvt_timer;
+	value =3D la->lvt_timer_cache;
 	value &=3D ~APIC_LVTT_TM;
 	value |=3D APIC_LVTT_TM_PERIODIC;
 	if (enable_int)
@@ -863,11 +868,11 @@
 }
=20
 static void
-lapic_timer_stop(void)
+lapic_timer_stop(struct lapic *la)
 {
 	u_int32_t value;
=20
-	value =3D lapic->lvt_timer;
+	value =3D la->lvt_timer_cache;
 	value &=3D ~APIC_LVTT_TM;
 	value |=3D APIC_LVT_M;
 	lapic->lvt_timer =3D value;
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/sys/x86/x86/tsc.c
--- a/head/sys/x86/x86/tsc.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/sys/x86/x86/tsc.c	Fri Aug 10 14:19:25 2012 +0300
@@ -25,7 +25,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/sys/x86/x86/tsc.c 238755 2012-07-24 22:10:11Z jim=
harris $");
+__FBSDID("$FreeBSD: head/sys/x86/x86/tsc.c 239133 2012-08-07 23:16:11Z jim=
harris $");
=20
 #include "opt_compat.h"
 #include "opt_clock.h"
@@ -82,7 +82,11 @@
 static void tsc_freq_changing(void *arg, const struct cf_level *level,
     int *status);
 static unsigned tsc_get_timecount(struct timecounter *tc);
-static unsigned tsc_get_timecount_low(struct timecounter *tc);
+static inline unsigned tsc_get_timecount_low(struct timecounter *tc);
+static unsigned tsc_get_timecount_lfence(struct timecounter *tc);
+static unsigned tsc_get_timecount_low_lfence(struct timecounter *tc);
+static unsigned tsc_get_timecount_mfence(struct timecounter *tc);
+static unsigned tsc_get_timecount_low_mfence(struct timecounter *tc);
 static void tsc_levels_changed(void *arg, int unit);
=20
 static struct timecounter tsc_timecounter =3D {
@@ -262,6 +266,10 @@
 		    (vm_guest =3D=3D VM_GUEST_NO &&
 		    CPUID_TO_FAMILY(cpu_id) >=3D 0x10))
 			tsc_is_invariant =3D 1;
+		if (cpu_feature & CPUID_SSE2) {
+			tsc_timecounter.tc_get_timecount =3D
+			    tsc_get_timecount_mfence;
+		}
 		break;
 	case CPU_VENDOR_INTEL:
 		if ((amd_pminfo & AMDPM_TSC_INVARIANT) !=3D 0 ||
@@ -271,6 +279,10 @@
 		    (CPUID_TO_FAMILY(cpu_id) =3D=3D 0xf &&
 		    CPUID_TO_MODEL(cpu_id) >=3D 0x3))))
 			tsc_is_invariant =3D 1;
+		if (cpu_feature & CPUID_SSE2) {
+			tsc_timecounter.tc_get_timecount =3D
+			    tsc_get_timecount_lfence;
+		}
 		break;
 	case CPU_VENDOR_CENTAUR:
 		if (vm_guest =3D=3D VM_GUEST_NO &&
@@ -278,6 +290,10 @@
 		    CPUID_TO_MODEL(cpu_id) >=3D 0xf &&
 		    (rdmsr(0x1203) & 0x100000000ULL) =3D=3D 0)
 			tsc_is_invariant =3D 1;
+		if (cpu_feature & CPUID_SSE2) {
+			tsc_timecounter.tc_get_timecount =3D
+			    tsc_get_timecount_lfence;
+		}
 		break;
 	}
=20
@@ -328,16 +344,30 @@
=20
 #ifdef SMP
=20
-/* rmb is required here because rdtsc is not a serializing instruction. */
-#define	TSC_READ(x)			\
-static void				\
-tsc_read_##x(void *arg)			\
-{					\
-	uint32_t *tsc =3D arg;		\
-	u_int cpu =3D PCPU_GET(cpuid);	\
-					\
-	rmb();				\
-	tsc[cpu * 3 + x] =3D rdtsc32();	\
+/*
+ * RDTSC is not a serializing instruction, and does not drain
+ * instruction stream, so we need to drain the stream before executing
+ * it.  It could be fixed by use of RDTSCP, except the instruction is
+ * not available everywhere.
+ *
+ * Use CPUID for draining in the boot-time SMP constistency test.  The
+ * timecounters use MFENCE for AMD CPUs, and LFENCE for others (Intel
+ * and VIA) when SSE2 is present, and nothing on older machines which
+ * also do not issue RDTSC prematurely.  There, testing for SSE2 and
+ * vendor is too cumbersome, and we learn about TSC presence from CPUID.
+ *
+ * Do not use do_cpuid(), since we do not need CPUID results, which
+ * have to be written into memory with do_cpuid().
+ */
+#define	TSC_READ(x)							\
+static void								\
+tsc_read_##x(void *arg)							\
+{									\
+	uint64_t *tsc =3D arg;						\
+	u_int cpu =3D PCPU_GET(cpuid);					\
+									\
+	__asm __volatile("cpuid" : : : "eax", "ebx", "ecx", "edx");	\
+	tsc[cpu * 3 + x] =3D rdtsc();					\
 }
 TSC_READ(0)
 TSC_READ(1)
@@ -349,8 +379,8 @@
 static void
 comp_smp_tsc(void *arg)
 {
-	uint32_t *tsc;
-	int32_t d1, d2;
+	uint64_t *tsc;
+	int64_t d1, d2;
 	u_int cpu =3D PCPU_GET(cpuid);
 	u_int i, j, size;
=20
@@ -371,7 +401,7 @@
 static int
 test_smp_tsc(void)
 {
-	uint32_t *data, *tsc;
+	uint64_t *data, *tsc;
 	u_int i, size;
=20
 	if (!smp_tsc && !tsc_is_invariant)
@@ -487,7 +517,16 @@
 	for (shift =3D 0; shift < 31 && (tsc_freq >> shift) > max_freq; shift++)
 		;
 	if (shift > 0) {
-		tsc_timecounter.tc_get_timecount =3D tsc_get_timecount_low;
+		if (cpu_feature & CPUID_SSE2) {
+			if (cpu_vendor_id =3D=3D CPU_VENDOR_AMD) {
+				tsc_timecounter.tc_get_timecount =3D
+				    tsc_get_timecount_low_mfence;
+			} else {
+				tsc_timecounter.tc_get_timecount =3D
+				    tsc_get_timecount_low_lfence;
+			}
+		} else
+			tsc_timecounter.tc_get_timecount =3D tsc_get_timecount_low;
 		tsc_timecounter.tc_name =3D "TSC-low";
 		if (bootverbose)
 			printf("TSC timecounter discards lower %d bit(s)\n",
@@ -599,16 +638,48 @@
 	return (rdtsc32());
 }
=20
-static u_int
+static inline u_int
 tsc_get_timecount_low(struct timecounter *tc)
 {
 	uint32_t rv;
=20
 	__asm __volatile("rdtsc; shrd %%cl, %%edx, %0"
-	: "=3Da" (rv) : "c" ((int)(intptr_t)tc->tc_priv) : "edx");
+	    : "=3Da" (rv) : "c" ((int)(intptr_t)tc->tc_priv) : "edx");
 	return (rv);
 }
=20
+static u_int
+tsc_get_timecount_lfence(struct timecounter *tc __unused)
+{
+
+	lfence();
+	return (rdtsc32());
+}
+
+static u_int
+tsc_get_timecount_low_lfence(struct timecounter *tc)
+{
+
+	lfence();
+	return (tsc_get_timecount_low(tc));
+}
+
+static u_int
+tsc_get_timecount_mfence(struct timecounter *tc __unused)
+{
+
+	mfence();
+	return (rdtsc32());
+}
+
+static u_int
+tsc_get_timecount_low_mfence(struct timecounter *tc)
+{
+
+	mfence();
+	return (tsc_get_timecount_low(tc));
+}
+
 uint32_t
 cpu_fill_vdso_timehands(struct vdso_timehands *vdso_th)
 {
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/tools/regression/lib/libc/gen/Mak=
efile
--- a/head/tools/regression/lib/libc/gen/Makefile	Mon Jul 30 11:44:18 2012 =
+0300
+++ b/head/tools/regression/lib/libc/gen/Makefile	Fri Aug 10 14:19:25 2012 =
+0300
@@ -1,7 +1,7 @@
-# $FreeBSD: head/tools/regression/lib/libc/gen/Makefile 231984 2012-02-21 =
23:46:41Z jilles $
+# $FreeBSD: head/tools/regression/lib/libc/gen/Makefile 239160 2012-08-09 =
22:05:40Z jilles $
=20
 TESTS=3D	test-arc4random test-fmtcheck test-fmtmsg test-fnmatch \
-	test-fpclassify test-posix_spawn test-wordexp
+	test-fpclassify test-ftw test-posix_spawn test-wordexp
=20
 .PHONY: tests
 tests: ${TESTS}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/tools/regression/lib/libc/gen/tes=
t-ftw.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/head/tools/regression/lib/libc/gen/test-ftw.c	Fri Aug 10 14:19:25 201=
2 +0300
@@ -0,0 +1,141 @@
+/*-
+ * Copyright (c) 2012 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 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 PURP=
OSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENT=
IAL
+ * 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, STR=
ICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY W=
AY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+/*
+ * Limited test program for nftw() as specified by IEEE Std. 1003.1-2008.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD: head/tools/regression/lib/libc/gen/test-ftw.c 239160 2=
012-08-09 22:05:40Z jilles $");
+
+#include <sys/wait.h>
+
+#include <assert.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <ftw.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <spawn.h>
+
+extern char **environ;
+
+static char dir[] =3D "/tmp/testftw.XXXXXXXXXX";
+static int failures;
+static int ftwflags;
+
+static void
+cleanup(int ustatus __unused)
+{
+	int error, status;
+	pid_t pid, waitres;
+	const char *myargs[5];
+
+	err_set_exit(NULL);
+	myargs[0] =3D "rm";
+	myargs[1] =3D "-rf";
+	myargs[2] =3D "--";
+	myargs[3] =3D dir;
+	myargs[4] =3D NULL;
+	error =3D posix_spawnp(&pid, myargs[0], NULL, NULL,
+	    __DECONST(char **, myargs), environ);
+	if (error !=3D 0)
+		warn("posix_spawnp rm");
+	else {
+		waitres =3D waitpid(pid, &status, 0);
+		if (waitres !=3D pid)
+			warnx("waitpid rm failed");
+		else if (status !=3D 0)
+			warnx("rm failed");
+	}
+}
+
+static int
+cb(const char *path, const struct stat *st, int type, struct FTW *f)
+{
+
+	switch (type) {
+	case FTW_D:
+		if ((ftwflags & FTW_DEPTH) =3D=3D 0)
+			return (0);
+		break;
+	case FTW_DP:
+		if ((ftwflags & FTW_DEPTH) !=3D 0)
+			return (0);
+		break;
+	case FTW_SL:
+		if ((ftwflags & FTW_PHYS) !=3D 0)
+			return (0);
+		break;
+	}
+	warnx("unexpected path=3D%s type=3D%d f.level=3D%d\n",
+	    path, type, f->level);
+	failures++;
+	return (0);
+}
+
+int
+main(int argc, char *argv[])
+{
+	int fd;
+
+	if (!mkdtemp(dir))
+		err(2, "mkdtemp");
+
+	err_set_exit(cleanup);
+
+	fd =3D open(dir, O_DIRECTORY | O_RDONLY);
+	if (fd =3D=3D -1)
+		err(2, "open %s", dir);
+
+	if (mkdirat(fd, "d1", 0777) =3D=3D -1)
+		err(2, "mkdirat d1");
+
+	if (symlinkat(dir, fd, "d1/looper") =3D=3D -1)
+		err(2, "symlinkat looper");
+
+	ftwflags =3D FTW_PHYS;
+	if (nftw(dir, cb, 10, ftwflags) =3D=3D -1)
+		err(2, "nftw FTW_PHYS");
+	ftwflags =3D FTW_PHYS | FTW_DEPTH;
+	if (nftw(dir, cb, 10, ftwflags) =3D=3D -1)
+		err(2, "nftw FTW_PHYS | FTW_DEPTH");
+	ftwflags =3D 0;
+	if (nftw(dir, cb, 10, ftwflags) =3D=3D -1)
+		err(2, "nftw 0");
+	ftwflags =3D FTW_DEPTH;
+	if (nftw(dir, cb, 10, ftwflags) =3D=3D -1)
+		err(2, "nftw FTW_DEPTH");
+
+	close(fd);
+
+	printf("PASS nftw()\n");
+
+	cleanup(failures !=3D 0);
+
+	return (failures !=3D 0);
+}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/tools/tools/ath/ath_prom_read/Mak=
efile
--- a/head/tools/tools/ath/ath_prom_read/Makefile	Mon Jul 30 11:44:18 2012 =
+0300
+++ b/head/tools/tools/ath/ath_prom_read/Makefile	Fri Aug 10 14:19:25 2012 =
+0300
@@ -1,4 +1,4 @@
-# $FreeBSD: head/tools/tools/ath/ath_prom_read/Makefile 217739 2011-01-22 =
23:44:56Z adrian $
+# $FreeBSD: head/tools/tools/ath/ath_prom_read/Makefile 239161 2012-08-09 =
23:04:20Z adrian $
=20
 PROG=3D	ath_prom_read
=20
@@ -20,3 +20,4 @@
 	echo 'typedef void *HAL_SOFTC;' >ah_osdep.h
 	echo 'typedef int HAL_BUS_TAG;' >>ah_osdep.h
 	echo 'typedef void *HAL_BUS_HANDLE;' >>ah_osdep.h
+	echo 'typedef uint32_t HAL_DMA_ADDR;' >>ah_osdep.h
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/tools/tools/ath/athaggrstats/Make=
file
--- a/head/tools/tools/ath/athaggrstats/Makefile	Mon Jul 30 11:44:18 2012 +=
0300
+++ b/head/tools/tools/ath/athaggrstats/Makefile	Fri Aug 10 14:19:25 2012 +=
0300
@@ -1,4 +1,4 @@
-# $FreeBSD: head/tools/tools/ath/athaggrstats/Makefile 236834 2012-06-10 0=
6:44:04Z adrian $
+# $FreeBSD: head/tools/tools/ath/athaggrstats/Makefile 239161 2012-08-09 2=
3:04:20Z adrian $
=20
 .PATH:	${.CURDIR}/../../../../sys/dev/ath/ath_hal
=20
@@ -22,5 +22,6 @@
 	echo 'typedef void *HAL_SOFTC;' >ah_osdep.h
 	echo 'typedef int HAL_BUS_TAG;' >>ah_osdep.h
 	echo 'typedef void *HAL_BUS_HANDLE;' >>ah_osdep.h
+	echo 'typedef uint32_t HAL_DMA_ADDR;' >>ah_osdep.h
=20
 .include <bsd.prog.mk>
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/tools/tools/ath/athratestats/main=
.c
--- a/head/tools/tools/ath/athratestats/main.c	Mon Jul 30 11:44:18 2012 +03=
00
+++ b/head/tools/tools/ath/athratestats/main.c	Fri Aug 10 14:19:25 2012 +03=
00
@@ -26,7 +26,7 @@
  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
  * THE POSSIBILITY OF SUCH DAMAGES.
  *
- * $FreeBSD: head/tools/tools/ath/athratestats/main.c 238646 2012-07-20 06=
:11:26Z adrian $
+ * $FreeBSD: head/tools/tools/ath/athratestats/main.c 238893 2012-07-30 01=
:42:22Z adrian $
  */
=20
 #include "opt_ah.h"
@@ -170,69 +170,14 @@
 		err(1, "ioctl");
 }
=20
-int
-main(int argc, char *argv[])
+static int
+rate_node_stats(struct ath_ratestats *r, struct ether_addr *e)
 {
-	struct ath_ratestats r;
-	struct ether_addr *e;
-	uint8_t *buf;
 	struct ath_rateioctl_tlv *av;
 	struct sample_node *sn =3D NULL;
 	struct ath_rateioctl_rt *rt =3D NULL;
-	char const *ifname =3D NULL, *macaddr =3D NULL;
-	int c;
-	int do_all =3D 0;
-
-	ifname =3D getenv("ATH");
-	if (ifname =3D=3D NULL)
-		ifname =3D "ath0";
-
-	while ((c =3D getopt(argc, argv, "ahi:m:")) !=3D -1) {
-		switch (c) {
-		case 'a':
-			do_all =3D 1;
-			break;
-		case 'i':
-			ifname =3D optarg;
-			break;
-		case 'm':
-			macaddr =3D optarg;
-			break;
-		=09
-		default:
-			errx(1,
-			    "usage: %s [-h] [-i ifname] [-a] [-m macaddr]\n",
-			    argv[0]);
-			/* NOTREACHED */
-		}
-	}
-
-	buf =3D calloc(1, STATS_BUF_SIZE);
-	if (buf =3D=3D NULL)
-		err(1, "calloc");
-
-	bzero(&r, sizeof(r));
-	r.s =3D socket(AF_INET, SOCK_DGRAM, 0);
-	if (r.s < 0) {
-		err(1, "socket");
-	}
-	/* XXX error check */
-	ath_setifname(&r, ifname);
-
-	if (macaddr =3D=3D NULL) {
-		errx(1, "%s: macaddress wasn't supplied and no -a given\n",
-		    argv[0]);
-		/* NOTREACHED */
-	}
-	e =3D ether_aton(macaddr);
-	if (e =3D=3D NULL)
-		err(1, "ether_aton");
-
-	r.re.buf =3D buf;
-	r.re.len =3D STATS_BUF_SIZE;
-
-	ath_setsta(&r, e->octet);
-	ath_rate_ioctl(&r);
+	int error =3D 0;
+	uint8_t *buf =3D r->re.buf;
=20
 	/*
 	 * For now, hard-code the TLV order and contents.  Ew!
@@ -275,6 +220,87 @@
 	    sizeof(struct ath_rateioctl_rt) +
 	    sizeof(struct ath_rateioctl_tlv));
=20
-	ath_sample_stats(&r, rt, sn);
+	ath_sample_stats(r, rt, sn);
 }
=20
+
+int
+main(int argc, char *argv[])
+{
+	char const *ifname =3D NULL, *macaddr =3D NULL;
+	int c;
+	int do_all =3D 0;
+	struct ether_addr *e;
+	struct ath_ratestats r;
+	uint8_t *buf;
+
+	ifname =3D getenv("ATH");
+	if (ifname =3D=3D NULL)
+		ifname =3D "ath0";
+
+	while ((c =3D getopt(argc, argv, "ahi:m:")) !=3D -1) {
+		switch (c) {
+		case 'a':
+			do_all =3D 1;
+			break;
+		case 'i':
+			ifname =3D optarg;
+			break;
+		case 'm':
+			macaddr =3D optarg;
+			break;
+		=09
+		default:
+			errx(1,
+			    "usage: %s [-h] [-i ifname] [-a] [-m macaddr]\n",
+			    argv[0]);
+			/* NOTREACHED */
+		}
+	}
+
+	if (macaddr =3D=3D NULL) {
+		errx(1, "%s: macaddress wasn't supplied and no -a given\n",
+		    argv[0]);
+		/* NOTREACHED */
+	}
+	e =3D ether_aton(macaddr);
+	if (e =3D=3D NULL)
+		err(1, "ether_aton");
+
+	bzero(&r, sizeof(r));
+
+	/*
+	 * Persistent buffer for each lookup
+	 */
+	buf =3D malloc(STATS_BUF_SIZE);
+	if (buf =3D=3D NULL)
+		err(1, "calloc");
+
+	r.re.buf =3D buf;
+	r.re.len =3D STATS_BUF_SIZE;
+
+	r.s =3D socket(AF_INET, SOCK_DGRAM, 0);
+	if (r.s < 0) {
+		err(1, "socket");
+	}
+	/* XXX error check */
+	ath_setifname(&r, ifname);
+
+	/* Zero the buffer before it's passed in */
+	memset(buf, '\0', STATS_BUF_SIZE);
+
+	/*
+	 * Set the station address for this lookup.
+	 */
+	ath_setsta(&r, e->octet);
+
+	/*
+	 * Fetch the data from the driver.
+	 */
+	ath_rate_ioctl(&r);
+
+	/*
+	 * Decode and parse statistics.
+	 */
+	rate_node_stats(&r, e);
+}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/tools/tools/ath/athstats/Makefile
--- a/head/tools/tools/ath/athstats/Makefile	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/tools/tools/ath/athstats/Makefile	Fri Aug 10 14:19:25 2012 +0300
@@ -1,4 +1,4 @@
-# $FreeBSD: head/tools/tools/ath/athstats/Makefile 217738 2011-01-22 23:37=
:42Z adrian $
+# $FreeBSD: head/tools/tools/ath/athstats/Makefile 239161 2012-08-09 23:04=
:20Z adrian $
=20
 .PATH:	${.CURDIR}/../../../../sys/dev/ath/ath_hal
=20
@@ -22,5 +22,6 @@
 	echo 'typedef void *HAL_SOFTC;' >ah_osdep.h
 	echo 'typedef int HAL_BUS_TAG;' >>ah_osdep.h
 	echo 'typedef void *HAL_BUS_HANDLE;' >>ah_osdep.h
+	echo 'typedef uint32_t HAL_DMA_ADDR;' >>ah_osdep.h
=20
 .include <bsd.prog.mk>
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/tools/tools/ath/common/ah_osdep.h
--- a/head/tools/tools/ath/common/ah_osdep.h	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/tools/tools/ath/common/ah_osdep.h	Fri Aug 10 14:19:25 2012 +0300
@@ -26,7 +26,7 @@
  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
  * THE POSSIBILITY OF SUCH DAMAGES.
  *
- * $FreeBSD: head/tools/tools/ath/common/ah_osdep.h 185743 2008-12-07 19:1=
7:33Z sam $
+ * $FreeBSD: head/tools/tools/ath/common/ah_osdep.h 239162 2012-08-09 23:0=
8:22Z adrian $
  */
 #ifndef _ATH_AH_OSDEP_H_
 #define _ATH_AH_OSDEP_H_
@@ -41,6 +41,7 @@
 typedef void *HAL_SOFTC;
 typedef int HAL_BUS_TAG;
 typedef void *HAL_BUS_HANDLE;
+typedef uint32_t HAL_DMA_ADDR;
=20
 #define	OS_DELAY(_n)	DELAY(_n)
 #define	OS_INLINE	__inline
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/tools/tools/bootparttest/Makefile
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/head/tools/tools/bootparttest/Makefile	Fri Aug 10 14:19:25 2012 +0300
@@ -0,0 +1,19 @@
+# $FreeBSD: head/tools/tools/bootparttest/Makefile 239070 2012-08-05 15:40=
:16Z ae $
+
+.PATH:		${.CURDIR}/../../../sys/boot/common
+
+BINDIR?=3D	/usr/bin
+
+PROG=3D		bootparttest
+NO_MAN=3D
+
+SRCS=3D		bootparttest.c crc32.c malloc.c part.c
+
+CFLAGS=3D		-I${.CURDIR}/../../../sys/boot/common -I. \
+		-DLOADER_GPT_SUPPORT -DLOADER_MBR_SUPPORT -DPART_DEBUG
+
+DPADD+=3D		${LIBGEOM} ${LIBUTIL}
+LDADD+=3D		${LIBGEOM} ${LIBUTIL}
+LDFLAGS+=3D	-lgeom -lutil
+
+.include <bsd.prog.mk>
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/tools/tools/bootparttest/bootpart=
test.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/head/tools/tools/bootparttest/bootparttest.c	Fri Aug 10 14:19:25 2012=
 +0300
@@ -0,0 +1,172 @@
+/*-
+ * Copyright (c) 2012 Andrey V. Elsukov <ae at FreeBSD.org>
+ * 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 PURP=
OSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENT=
IAL
+ * 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, STR=
ICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY W=
AY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD: head/tools/tools/bootparttest/bootparttest.c 239087 20=
12-08-06 08:39:29Z ae $");
+
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#include <err.h>
+#include <fcntl.h>
+#include <libgeom.h>
+#include <libutil.h>
+#include <part.h>
+#include <stdio.h>
+#include <unistd.h>
+
+struct disk {
+	const char	*name;
+	uint64_t	mediasize;
+	uint16_t	sectorsize;
+
+	int		fd;
+	int		file;
+	off_t		offset;
+};
+
+static int
+diskread(void *arg, void *buf, size_t blocks, off_t offset)
+{
+	struct disk *dp;
+
+	dp =3D (struct disk *)arg;
+	printf("%s: read %d blocks from the offset %jd [+%jd]\n", dp->name,
+	    blocks, offset, dp->offset);
+	if (offset >=3D dp->mediasize / dp->sectorsize)
+		return (-1);
+
+	return (pread(dp->fd, buf, blocks * dp->sectorsize,
+	    (offset + dp->offset) * dp->sectorsize) !=3D blocks * dp->sectorsize);
+}
+
+static const char*
+ptable_type2str(const struct ptable *table)
+{
+
+	switch (ptable_gettype(table)) {
+	case PTABLE_NONE:
+		return ("None");
+	case PTABLE_BSD:
+		return ("BSD");
+	case PTABLE_MBR:
+		return ("MBR");
+	case PTABLE_GPT:
+		return ("GPT");
+	case PTABLE_VTOC8:
+		return ("VTOC8");
+	};
+	return ("Unknown");
+}
+
+#define	PWIDTH	35
+static void
+ptable_print(void *arg, const char *pname, const struct ptable_entry *part)
+{
+	struct ptable *table;
+	struct disk *dp, bsd;
+	char line[80], size[6];
+
+	dp =3D (struct disk *)arg;
+	sprintf(line, "  %s%s: %s", dp->file ? "disk0": dp->name, pname,
+	    parttype2str(part->type));
+	humanize_number(size, sizeof(size),
+	    (part->end - part->start + 1) * dp->sectorsize, "",
+	    HN_AUTOSCALE, HN_B | HN_NOSPACE | HN_DECIMAL);
+	printf("%-*s%s\n", PWIDTH, line, size);
+	if (part->type =3D=3D PART_FREEBSD) {
+		sprintf(line, "%s%s", dp->file ? "disk0": dp->name, pname);
+		bsd.name =3D line;
+		bsd.fd =3D dp->fd;
+		bsd.file =3D 0;	/* to use dp->name in the next sprintf */
+		bsd.offset =3D dp->offset + part->start;
+		bsd.sectorsize =3D dp->sectorsize;
+		bsd.mediasize =3D (part->end - part->start + 1) * dp->sectorsize;
+		table =3D ptable_open(&bsd, bsd.mediasize / bsd.sectorsize,
+		    bsd.sectorsize, diskread);
+		if (table =3D=3D NULL)
+			return;
+		ptable_iterate(table, &bsd, ptable_print);
+		ptable_close(table);
+	}
+}
+#undef PWIDTH
+
+static void
+inspect_disk(struct disk *dp)
+{
+	struct ptable *table;
+
+	table =3D ptable_open(dp, dp->mediasize / dp->sectorsize,
+	    dp->sectorsize, diskread);
+	if (table =3D=3D NULL) {
+		printf("ptable_open failed\n");
+		return;
+	}
+	printf("Partition table detected: %s\n", ptable_type2str(table));
+	ptable_iterate(table, dp, ptable_print);
+	ptable_close(table);
+}
+
+int
+main(int argc, char **argv)
+{
+	struct stat sb;
+	struct disk d;
+
+	if (argc < 2)
+		errx(1, "Usage: %s <GEOM provider name> | "
+		    "<disk image file name>", argv[0]);
+	d.name =3D argv[1];
+	if (stat(d.name, &sb) =3D=3D 0 && S_ISREG(sb.st_mode)) {
+		d.fd =3D open(d.name, O_RDONLY);
+		if (d.fd < 0)
+			err(1, "open %s", d.name);
+		d.mediasize =3D sb.st_size;
+		d.sectorsize =3D 512;
+		d.file =3D 1;
+	} else {
+		d.fd =3D g_open(d.name, 0);
+		if (d.fd < 0)
+			err(1, "g_open %s", d.name);
+		d.mediasize =3D g_mediasize(d.fd);
+		d.sectorsize =3D g_sectorsize(d.fd);
+		d.file =3D 0;
+	}
+	d.offset =3D 0;
+	printf("%s \"%s\" opened\n", d.file ? "Disk image": "GEOM provider",
+	    d.name);
+	printf("Mediasize: %ju Bytes (%ju sectors)\nSectorsize: %u Bytes\n",
+	    d.mediasize, d.mediasize / d.sectorsize, d.sectorsize);
+
+	inspect_disk(&d);
+
+	if (d.file)
+		close(d.fd);
+	else
+		g_close(d.fd);
+	return (0);
+}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/tools/tools/bootparttest/malloc.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/head/tools/tools/bootparttest/malloc.c	Fri Aug 10 14:19:25 2012 +0300
@@ -0,0 +1,44 @@
+/*-
+ * Copyright (c) 2012 Andrey V. Elsukov <ae at FreeBSD.org>
+ * 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 PURP=
OSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENT=
IAL
+ * 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, STR=
ICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY W=
AY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD: head/tools/tools/bootparttest/malloc.c 239070 2012-08-=
05 15:40:16Z ae $");
+
+#include <stdlib.h>
+
+void*
+Malloc(size_t size, const char *file, int line)
+{
+
+	return (malloc(size));
+}
+
+void
+Free(void *ptr, const char *file, int line)
+{
+
+	return (free(ptr));
+}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/tools/tools/netmap/pkt-gen.c
--- a/head/tools/tools/netmap/pkt-gen.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/tools/tools/netmap/pkt-gen.c	Fri Aug 10 14:19:25 2012 +0300
@@ -24,7 +24,7 @@
  */
=20
 /*
- * $FreeBSD: head/tools/tools/netmap/pkt-gen.c 238175 2012-07-06 17:03:43Z=
 emaste $
+ * $FreeBSD: head/tools/tools/netmap/pkt-gen.c 239145 2012-08-08 19:15:01Z=
 emaste $
  * $Id: pkt-gen.c 10967 2012-05-03 11:29:23Z luigi $
  *
  * Example program to show how to build a multithreaded packet
@@ -468,13 +468,14 @@
 sender_body(void *data)
 {
 	struct targ *targ =3D (struct targ *) data;
-
 	struct pollfd fds[1];
 	struct netmap_if *nifp =3D targ->nifp;
 	struct netmap_ring *txring;
 	int i, pkts_per_td =3D targ->g->npackets / targ->g->nthreads, sent =3D 0;
 	int continuous =3D 0;
 	int options =3D targ->g->options | OPT_COPY;
+	int retval;
+
 D("start");
 	if (pkts_per_td =3D=3D 0) {
 		continuous =3D 1;
@@ -508,10 +509,14 @@
 		/*
 		 * wait for available room in the send queue(s)
 		 */
-		if (poll(fds, 1, 2000) <=3D 0) {
+		if ((retval =3D poll(fds, 1, 2000)) <=3D 0) {
 			if (targ->cancel)
 				break;
-			D("poll error/timeout on queue %d\n", targ->me);
+			if (retval =3D=3D 0)
+				D("poll timeout on queue %d\n", targ->me);
+			else
+				D("poll error on queue %d: %s\n", targ->me,
+				    strerror(errno));
 			goto quit;
 		}
 		/*
@@ -1076,7 +1081,7 @@
 		pps =3D toc.tv_sec* 1000000 + toc.tv_usec;
 		if (pps < 10000)
 			continue;
-		pps =3D (my_count - prev)*1000000 / pps;
+		pps =3D ((my_count - prev) * 1000000 + pps / 2) / pps;
 		D("%" PRIu64 " pps", pps);
 		prev =3D my_count;
 		toc =3D now;
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/usr.bin/calendar/calendars/calend=
ar.freebsd
--- a/head/usr.bin/calendar/calendars/calendar.freebsd	Mon Jul 30 11:44:18 =
2012 +0300
+++ b/head/usr.bin/calendar/calendars/calendar.freebsd	Fri Aug 10 14:19:25 =
2012 +0300
@@ -1,7 +1,7 @@
 /*
  * FreeBSD
  *
- * $FreeBSD: head/usr.bin/calendar/calendars/calendar.freebsd 238058 2012-=
07-03 07:28:57Z zeising $
+ * $FreeBSD: head/usr.bin/calendar/calendars/calendar.freebsd 238976 2012-=
08-01 17:48:38Z bdrewery $
  */
=20
 #ifndef _calendar_freebsd_
@@ -285,6 +285,7 @@
 09/18	Matthew Fleming <mdf at FreeBSD.org> born in Cleveland, Ohio, United St=
ates, 1975
 09/20	Kevin Lo <kevlo at FreeBSD.org> born in Taipei, Taiwan, Republic of Chi=
na, 1972
 09/21	Gleb Kurtsou <gleb at FreeBSD.org> born in Minsk, Belarus, 1984
+09/22	Bryan Drewery <bdrewery at FreeBSD.org> born in San Diego, California, =
United States, 1984
 09/27	Neil Blakey-Milner <nbm at FreeBSD.org> born in Port Elizabeth, South A=
frica, 1978
 09/27	Renato Botelho <garga at FreeBSD.org> born in Araras, Sao Paulo, Brazil=
, 1979
 09/28	Greg Lehey <grog at FreeBSD.org> born in Melbourne, Victoria, Australia=
, 1948
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/usr.bin/cpio/Makefile
--- a/head/usr.bin/cpio/Makefile	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/usr.bin/cpio/Makefile	Fri Aug 10 14:19:25 2012 +0300
@@ -1,4 +1,4 @@
-# $FreeBSD: head/usr.bin/cpio/Makefile 232153 2012-02-25 10:58:02Z mm $
+# $FreeBSD: head/usr.bin/cpio/Makefile 238856 2012-07-28 06:38:44Z mm $
=20
 .include <bsd.own.mk>
=20
@@ -6,13 +6,13 @@
 LIBARCHIVECONFDIR=3D	${.CURDIR}/../../lib/libarchive
=20
 PROG=3D	bsdcpio
-BSDCPIO_VERSION_STRING=3D	3.0.3
+BSDCPIO_VERSION_STRING=3D	3.0.4
=20
 .PATH:	${LIBARCHIVEDIR}/cpio
 SRCS=3D	cpio.c cmdline.c
=20
 .PATH:	${LIBARCHIVEDIR}/libarchive_fe
-SRCS+=3D	err.c line_reader.c matching.c pathmatch.c
+SRCS+=3D	err.c line_reader.c
=20
 CFLAGS+=3D -DBSDCPIO_VERSION_STRING=3D\"${BSDCPIO_VERSION_STRING}\"
 CFLAGS+=3D -DPLATFORM_CONFIG_H=3D\"${LIBARCHIVECONFDIR}/config_freebsd.h\"
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/usr.bin/cpio/test/Makefile
--- a/head/usr.bin/cpio/test/Makefile	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/usr.bin/cpio/test/Makefile	Fri Aug 10 14:19:25 2012 +0300
@@ -1,4 +1,4 @@
-# $FreeBSD: head/usr.bin/cpio/test/Makefile 232153 2012-02-25 10:58:02Z mm=
 $
+# $FreeBSD: head/usr.bin/cpio/test/Makefile 238856 2012-07-28 06:38:44Z mm=
 $
=20
 LIBARCHIVEDIR=3D	${.CURDIR}/../../../contrib/libarchive
=20
@@ -6,7 +6,7 @@
 CPIO_SRCS=3D cmdline.c
=20
 .PATH:	${LIBARCHIVEDIR}/libarchive_fe
-CPIO_SRCS+=3D err.c pathmatch.c
+CPIO_SRCS+=3D err.c
=20
 .PATH:	${LIBARCHIVEDIR}/cpio/test
 TESTS=3D	\
@@ -35,8 +35,7 @@
 	test_option_z.c				\
 	test_owner_parse.c			\
 	test_passthrough_dotdot.c		\
-	test_passthrough_reverse.c		\
-	test_pathmatch.c
+	test_passthrough_reverse.c
=20
 # Build the test program
 SRCS=3D list.h					\
@@ -50,8 +49,8 @@
=20
 PROG=3Dbsdcpio_test
 DPADD=3D${LIBARCHIVE} ${LIBBZ2} ${LIBZ} ${LIBLZMA}
-CFLAGS+=3D	-DPLATFORM_CONFIG_H=3D\"${.CURDIR}/../config_freebsd.h\"
-CFLAGS+=3D	-I${.CURDIR}/..
+CFLAGS+=3D	-DPLATFORM_CONFIG_H=3D\"${.CURDIR}/../../../lib/libarchive/conf=
ig_freebsd.h\"
+CFLAGS+=3D	-I${.CURDIR}/../../../lib/libarchive -I${.OBJDIR}
 LDADD=3D -larchive -lz -lbz2 -llzma
 #CFLAGS+=3D -static -g -O2 -Wall
 CFLAGS+=3D -g -O2 -Wall
@@ -74,6 +73,6 @@
 	rm -f ${CLEANFILES}
 	rm -f *~
 	-chmod -R +w /tmp/bsdcpio_test.*
-	rm -rf /tmp/bsdcpio_test
+	rm -rf /tmp/bsdcpio_test.*
=20
 .include <bsd.prog.mk>
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/usr.bin/du/du.c
--- a/head/usr.bin/du/du.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/usr.bin/du/du.c	Fri Aug 10 14:19:25 2012 +0300
@@ -42,7 +42,7 @@
 #endif
 #endif /* not lint */
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/usr.bin/du/du.c 238602 2012-07-18 19:28:22Z des $=
");
+__FBSDID("$FreeBSD: head/usr.bin/du/du.c 238817 2012-07-26 20:41:36Z plukn=
et $");
=20
 #include <sys/param.h>
 #include <sys/queue.h>
@@ -493,7 +493,7 @@
 usage(void)
 {
 	(void)fprintf(stderr,
-		"usage: du [-Aclnx] [-H | -L | -P] [-h | -k | -m ] "
+		"usage: du [-Aclnx] [-H | -L | -P] [-g | -h | -k | -m] "
 		"[-a | -s | -d depth] [-B blocksize] [-I mask] "
 		"[-t threshold] [file ...]\n");
 	exit(EX_USAGE);
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/usr.bin/find/extern.h
--- a/head/usr.bin/find/extern.h	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/usr.bin/find/extern.h	Fri Aug 10 14:19:25 2012 +0300
@@ -27,7 +27,7 @@
  * SUCH DAMAGE.
  *
  *	@(#)extern.h	8.3 (Berkeley) 4/16/94
- *	$FreeBSD$
+ *	$FreeBSD: head/usr.bin/find/extern.h 238780 2012-07-25 21:59:10Z jilles=
 $
  */
=20
 #include <sys/cdefs.h>
@@ -58,6 +58,7 @@
 creat_f	c_follow;
 creat_f	c_fstype;
 creat_f	c_group;
+creat_f	c_ignore_readdir_race;
 creat_f	c_inum;
 creat_f	c_links;
 creat_f	c_ls;
@@ -111,7 +112,8 @@
 exec_f	f_type;
 exec_f	f_user;
=20
-extern int ftsoptions, isdeprecated, isdepth, isoutput, issort, isxargs;
+extern int ftsoptions, ignore_readdir_race, isdeprecated, isdepth, isoutpu=
t;
+extern int issort, isxargs;
 extern int mindepth, maxdepth;
 extern int regexp_flags;
 extern time_t now;
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/usr.bin/find/find.1
--- a/head/usr.bin/find/find.1	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/usr.bin/find/find.1	Fri Aug 10 14:19:25 2012 +0300
@@ -29,9 +29,9 @@
 .\" SUCH DAMAGE.
 .\"
 .\"	@(#)find.1	8.7 (Berkeley) 5/9/95
-.\" $FreeBSD: head/usr.bin/find/find.1 237035 2012-06-13 21:53:40Z jilles $
+.\" $FreeBSD: head/usr.bin/find/find.1 238780 2012-07-25 21:59:10Z jilles $
 .\"
-.Dd June 13, 2012
+.Dd July 25, 2012
 .Dt FIND 1
 .Os
 .Sh NAME
@@ -470,7 +470,9 @@
 .Ar gname
 is treated as a group ID.
 .It Ic -ignore_readdir_race
-This option is for GNU find compatibility and is ignored.
+Ignore errors because a file or a directory is deleted
+after reading the name from a directory.
+This option does not affect errors occurring on starting points.
 .It Ic -ilname Ar pattern
 Like
 .Ic -lname ,
@@ -618,7 +620,9 @@
 .It Ic -nogroup
 True if the file belongs to an unknown group.
 .It Ic -noignore_readdir_race
-This option is for GNU find compatibility and is ignored.
+Turn off the effect of
+.Ic -ignore_readdir_race .
+This is default behaviour.
 .It Ic -noleaf
 This option is for GNU find compatibility.
 In GNU find it disables an optimization not relevant to
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/usr.bin/find/find.c
--- a/head/usr.bin/find/find.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/usr.bin/find/find.c	Fri Aug 10 14:19:25 2012 +0300
@@ -38,7 +38,7 @@
 #endif /* not lint */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
+__FBSDID("$FreeBSD: head/usr.bin/find/find.c 238780 2012-07-25 21:59:10Z j=
illes $");
=20
 #include <sys/types.h>
 #include <sys/stat.h>
@@ -197,8 +197,12 @@
 				continue;
 			break;
 		case FTS_DNR:
+		case FTS_NS:
+			if (ignore_readdir_race &&
+			    entry->fts_errno =3D=3D ENOENT && entry->fts_level > 0)
+				continue;
+			/* FALLTHROUGH */
 		case FTS_ERR:
-		case FTS_NS:
 			(void)fflush(stdout);
 			warnx("%s: %s",
 			    entry->fts_path, strerror(entry->fts_errno));
@@ -228,7 +232,7 @@
 		for (p =3D plan; p && (p->execute)(p, entry); p =3D p->next);
 	}
 	finish_execplus();
-	if (errno)
+	if (errno && (!ignore_readdir_race || errno !=3D ENOENT))
 		err(1, "fts_read");
 	return (rval);
 }
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/usr.bin/find/function.c
--- a/head/usr.bin/find/function.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/usr.bin/find/function.c	Fri Aug 10 14:19:25 2012 +0300
@@ -37,7 +37,7 @@
 #endif /* not lint */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/usr.bin/find/function.c 223035 2011-06-13 05:22:0=
7Z avatar $");
+__FBSDID("$FreeBSD: head/usr.bin/find/function.c 238780 2012-07-25 21:59:1=
0Z jilles $");
=20
 #include <sys/param.h>
 #include <sys/ucred.h>
@@ -975,6 +975,25 @@
 }
=20
 /*
+ * -ignore_readdir_race functions --
+ *
+ *	Always true. Ignore errors which occur if a file or a directory
+ *	in a starting point gets deleted between reading the name and calling
+ *	stat on it while find is traversing the starting point.
+ */
+
+PLAN *
+c_ignore_readdir_race(OPTION *option, char ***argvp __unused)
+{
+	if (strcmp(option->name, "-ignore_readdir_race") =3D=3D 0)
+		ignore_readdir_race =3D 1;
+	else
+		ignore_readdir_race =3D 0;
+
+	return palloc(option);
+}
+
+/*
  * -inum n functions --
  *
  *	True if the file has inode # n.
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/usr.bin/find/main.c
--- a/head/usr.bin/find/main.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/usr.bin/find/main.c	Fri Aug 10 14:19:25 2012 +0300
@@ -43,7 +43,7 @@
 #endif /* not lint */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/usr.bin/find/main.c 228394 2011-12-10 18:11:06Z e=
d $");
+__FBSDID("$FreeBSD: head/usr.bin/find/main.c 238948 2012-07-31 16:55:41Z j=
illes $");
=20
 #include <sys/types.h>
 #include <sys/stat.h>
@@ -64,6 +64,7 @@
 time_t now;			/* time find was run */
 int dotfd;			/* starting directory */
 int ftsoptions;			/* options for the ftsopen(3) call */
+int ignore_readdir_race;	/* ignore readdir race */
 int isdeprecated;		/* using deprecated syntax */
 int isdepth;			/* do directories on post-order visit */
 int isoutput;			/* user specified output operator */
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/usr.bin/find/option.c
--- a/head/usr.bin/find/option.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/usr.bin/find/option.c	Fri Aug 10 14:19:25 2012 +0300
@@ -37,7 +37,7 @@
 #endif /* not lint */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/usr.bin/find/option.c 222390 2011-05-27 22:14:49Z=
 jilles $");
+__FBSDID("$FreeBSD: head/usr.bin/find/option.c 238780 2012-07-25 21:59:10Z=
 jilles $");
=20
 #include <sys/types.h>
 #include <sys/stat.h>
@@ -88,7 +88,7 @@
 	{ "-fstype",	c_fstype,	f_fstype,	0 },
 	{ "-gid",	c_group,	f_group,	0 },
 	{ "-group",	c_group,	f_group,	0 },
-	{ "-ignore_readdir_race",c_simple, f_always_true,0 },
+	{ "-ignore_readdir_race",c_ignore_readdir_race, f_always_true,0 },
 	{ "-ilname",	c_name,		f_name,		F_LINK | F_IGNCASE },
 	{ "-iname",	c_name,		f_name,		F_IGNCASE },
 	{ "-inum",	c_inum,		f_inum,		0 },
@@ -127,7 +127,7 @@
 	{ "-newermm",	c_newer,	f_newer,	0 },
 	{ "-newermt",	c_newer,	f_newer,	F_TIME2_T },
 	{ "-nogroup",	c_nogroup,	f_nogroup,	0 },
-	{ "-noignore_readdir_race",c_simple, f_always_true,0 },
+	{ "-noignore_readdir_race",c_ignore_readdir_race, f_always_true,0 },
 	{ "-noleaf",	c_simple,	f_always_true,	0 },
 	{ "-not",	c_simple,	f_not,		0 },
 	{ "-nouser",	c_nouser,	f_nouser,	0 },
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/usr.bin/make/var.c
--- a/head/usr.bin/make/var.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/usr.bin/make/var.c	Fri Aug 10 14:19:25 2012 +0300
@@ -40,7 +40,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/usr.bin/make/var.c 236346 2012-05-31 00:36:56Z ob=
rien $");
+__FBSDID("$FreeBSD: head/usr.bin/make/var.c 239071 2012-08-05 15:55:36Z di=
m $");
=20
 /**
  * var.c --
@@ -1765,7 +1765,7 @@
 				if ((vp->ptr[0] =3D=3D 's') &&
 				    (vp->ptr[1] =3D=3D 'h') &&
 				    (vp->ptr[2] =3D=3D endc || vp->ptr[2] =3D=3D ':')) {
-					const char	*error;
+					const char	*error =3D NULL;
=20
 					if (vp->execute) {
 						newStr =3D Buf_Peel(
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/usr.bin/script/script.1
--- a/head/usr.bin/script/script.1	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/usr.bin/script/script.1	Fri Aug 10 14:19:25 2012 +0300
@@ -26,9 +26,9 @@
 .\" SUCH DAMAGE.
 .\"
 .\"	@(#)script.1	8.1 (Berkeley) 6/6/93
-.\" $FreeBSD: head/usr.bin/script/script.1 225857 2011-09-29 02:29:32Z gjb=
 $
+.\" $FreeBSD: head/usr.bin/script/script.1 238897 2012-07-30 08:06:00Z bri=
an $
 .\"
-.Dd September 28, 2011
+.Dd July 30, 2012
 .Dt SCRIPT 1
 .Os
 .Sh NAME
@@ -36,7 +36,7 @@
 .Nd make typescript of terminal session
 .Sh SYNOPSIS
 .Nm
-.Op Fl akq
+.Op Fl adkpqr
 .Op Fl t Ar time
 .Op Ar file Op Ar command ...
 .Sh DESCRIPTION
@@ -72,10 +72,20 @@
 or
 .Pa typescript ,
 retaining the prior contents.
+.It Fl d
+When playing back a session with the
+.Fl p
+flag, don't sleep between records when playing back a timestamped session.
 .It Fl k
 Log keys sent to the program as well as output.
+.It Fl p
+Play back a session recorded with the
+.Fl r
+flag in real time.
 .It Fl q
-Run in quiet mode, omit the start and stop status messages.
+Run in quiet mode, omit the start, stop and command status messages.
+.It Fl r
+Record a session with input, output, and timestamping.
 .It Fl t Ar time
 Specify the interval at which the script output file will be flushed
 to disk, in seconds.
@@ -151,6 +161,16 @@
 .Nm
 command appeared in
 .Bx 3.0 .
+.Pp
+The
+.Fl d ,
+.Fl p
+and
+.Fl r
+options first appeared in
+.Nx 2.0
+and were ported to
+.Fx 10 .
 .Sh BUGS
 The
 .Nm
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/usr.bin/script/script.c
--- a/head/usr.bin/script/script.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/usr.bin/script/script.c	Fri Aug 10 14:19:25 2012 +0300
@@ -29,7 +29,7 @@
=20
 #include <sys/cdefs.h>
=20
-__FBSDID("$FreeBSD: head/usr.bin/script/script.c 226403 2011-10-15 19:08:2=
2Z trociny $");
+__FBSDID("$FreeBSD: head/usr.bin/script/script.c 238896 2012-07-30 07:13:0=
6Z brian $");
=20
 #ifndef lint
 static const char copyright[] =3D
@@ -46,6 +46,9 @@
 #include <sys/stat.h>
 #include <sys/ioctl.h>
 #include <sys/time.h>
+#include <sys/uio.h>
+#include <sys/endian.h>
+#include <sys/param.h>
=20
 #include <err.h>
 #include <errno.h>
@@ -59,11 +62,21 @@
 #include <termios.h>
 #include <unistd.h>
=20
+#define DEF_BUF 65536
+
+struct stamp {
+	uint64_t scr_len;	/* amount of data */
+	uint64_t scr_sec;	/* time it arrived in seconds... */
+	uint32_t scr_usec;	/* ...and microseconds */
+	uint32_t scr_direction; /* 'i', 'o', etc (also indicates endianness) */
+};
+
 static FILE *fscript;
 static int master, slave;
 static int child;
 static const char *fname;
 static int qflg, ttyflg;
+static int usesleep, rawout;
=20
 static struct termios tt;
=20
@@ -71,6 +84,9 @@
 static void doshell(char **);
 static void fail(void);
 static void finish(void);
+static void record(FILE *, char *, size_t, int);
+static void consume(FILE *, off_t, char *, int);
+static void playback(FILE *) __dead2;
 static void usage(void);
=20
 int
@@ -79,7 +95,7 @@
 	int cc;
 	struct termios rtt, stt;
 	struct winsize win;
-	int aflg, kflg, ch, n;
+	int aflg, kflg, pflg, ch, n;
 	struct timeval tv, *tvp;
 	time_t tvec, start;
 	char obuf[BUFSIZ];
@@ -87,18 +103,31 @@
 	fd_set rfd;
 	int flushtime =3D 30;
 	int readstdin;
+	int k;
=20
-	aflg =3D kflg =3D 0;
-	while ((ch =3D getopt(argc, argv, "aqkt:")) !=3D -1)
+	aflg =3D kflg =3D pflg =3D 0;
+	usesleep =3D 1;
+	rawout =3D 0;
+
+	while ((ch =3D getopt(argc, argv, "adkpqrt:")) !=3D -1)
 		switch(ch) {
 		case 'a':
 			aflg =3D 1;
 			break;
+		case 'd':
+			usesleep =3D 0;
+			break;
+		case 'k':
+			kflg =3D 1;
+			break;
+		case 'p':
+			pflg =3D 1;
+			break;
 		case 'q':
 			qflg =3D 1;
 			break;
-		case 'k':
-			kflg =3D 1;
+		case 'r':
+			rawout =3D 1;
 			break;
 		case 't':
 			flushtime =3D atoi(optarg);
@@ -119,9 +148,12 @@
 	} else
 		fname =3D "typescript";
=20
-	if ((fscript =3D fopen(fname, aflg ? "a" : "w")) =3D=3D NULL)
+	if ((fscript =3D fopen(fname, pflg ? "r" : aflg ? "a" : "w")) =3D=3D NULL)
 		err(1, "%s", fname);
=20
+	if (pflg)
+		playback(fscript);
+
 	if ((ttyflg =3D isatty(STDIN_FILENO)) !=3D 0) {
 		if (tcgetattr(STDIN_FILENO, &tt) =3D=3D -1)
 			err(1, "tcgetattr");
@@ -134,10 +166,23 @@
 			err(1, "openpty");
 	}
=20
+	if (rawout)
+		record(fscript, NULL, 0, 's');
+
 	if (!qflg) {
 		tvec =3D time(NULL);
 		(void)printf("Script started, output file is %s\n", fname);
-		(void)fprintf(fscript, "Script started on %s", ctime(&tvec));
+		if (!rawout) {
+			(void)fprintf(fscript, "Script started on %s",
+				      ctime(&tvec));
+			if (argv[0]) {
+				fprintf(fscript, "command: ");
+				for (k =3D 0 ; argv[k] ; ++k)
+					fprintf(fscript, "%s%s", k ? " " : "",
+						argv[k]);
+				fprintf(fscript, "\n");
+			}
+		}
 		fflush(fscript);
 	}
 	if (ttyflg) {
@@ -163,15 +208,12 @@
 		FD_SET(master, &rfd);
 		if (readstdin)
 			FD_SET(STDIN_FILENO, &rfd);
-		if (!readstdin && ttyflg) {
-			tv.tv_sec =3D 1;
+		if ((!readstdin && ttyflg) || flushtime > 0) {
+			tv.tv_sec =3D !readstdin && ttyflg ? 1 :
+			    flushtime - (tvec - start);
 			tv.tv_usec =3D 0;
 			tvp =3D &tv;
 			readstdin =3D 1;
-		} else if (flushtime > 0) {
-			tv.tv_sec =3D flushtime - (tvec - start);
-			tv.tv_usec =3D 0;
-			tvp =3D &tv;
 		} else {
 			tvp =3D NULL;
 		}
@@ -190,6 +232,8 @@
 				readstdin =3D 0;
 			}
 			if (cc > 0) {
+				if (rawout)
+					record(fscript, ibuf, cc, 'i');
 				(void)write(master, ibuf, cc);
 				if (kflg && tcgetattr(master, &stt) >=3D 0 &&
 				    ((stt.c_lflag & ECHO) =3D=3D 0)) {
@@ -202,7 +246,10 @@
 			if (cc <=3D 0)
 				break;
 			(void)write(STDOUT_FILENO, obuf, cc);
-			(void)fwrite(obuf, 1, cc, fscript);
+			if (rawout)
+				record(fscript, obuf, cc, 'o');
+			else
+				(void)fwrite(obuf, 1, cc, fscript);
 		}
 		tvec =3D time(0);
 		if (tvec - start >=3D flushtime) {
@@ -218,7 +265,7 @@
 usage(void)
 {
 	(void)fprintf(stderr,
-	    "usage: script [-akq] [-t time] [file [command ...]]\n");
+	    "usage: script [-adkpqr] [-t time] [file [command ...]]\n");
 	exit(1);
 }
=20
@@ -242,17 +289,11 @@
 doshell(char **av)
 {
 	const char *shell;
-	int k;
=20
 	shell =3D getenv("SHELL");
 	if (shell =3D=3D NULL)
 		shell =3D _PATH_BSHELL;
=20
-	if (av[0])
-		for (k =3D 0 ; av[k] ; ++k)
-			fprintf(fscript, "%s%s", k ? " " : "", av[k]);
-		fprintf(fscript, "\r\n");
-
 	(void)close(master);
 	(void)fclose(fscript);
 	login_tty(slave);
@@ -282,11 +323,144 @@
 	if (ttyflg)
 		(void)tcsetattr(STDIN_FILENO, TCSAFLUSH, &tt);
 	tvec =3D time(NULL);
+	if (rawout)
+		record(fscript, NULL, 0, 'e');
 	if (!qflg) {
-		(void)fprintf(fscript,"\nScript done on %s", ctime(&tvec));
+		if (!rawout)
+			(void)fprintf(fscript,"\nScript done on %s",
+				      ctime(&tvec));
 		(void)printf("\nScript done, output file is %s\n", fname);
 	}
 	(void)fclose(fscript);
 	(void)close(master);
 	exit(eno);
 }
+
+static void
+record(FILE *fp, char *buf, size_t cc, int direction)
+{
+	struct iovec iov[2];
+	struct stamp stamp;
+	struct timeval tv;
+
+	(void)gettimeofday(&tv, NULL);
+	stamp.scr_len =3D cc;
+	stamp.scr_sec =3D tv.tv_sec;
+	stamp.scr_usec =3D tv.tv_usec;
+	stamp.scr_direction =3D direction;
+	iov[0].iov_len =3D sizeof(stamp);
+	iov[0].iov_base =3D &stamp;
+	iov[1].iov_len =3D cc;
+	iov[1].iov_base =3D buf;
+	if (writev(fileno(fp), &iov[0], 2) =3D=3D -1)
+		err(1, "writev");
+}
+
+static void
+consume(FILE *fp, off_t len, char *buf, int reg)
+{
+	size_t l;
+
+	if (reg) {
+		if (fseeko(fp, len, SEEK_CUR) =3D=3D -1)
+			err(1, NULL);
+	}
+	else {
+		while (len > 0) {
+			l =3D MIN(DEF_BUF, len);
+			if (fread(buf, sizeof(char), l, fp) !=3D l)
+				err(1, "cannot read buffer");
+			len -=3D l;
+		}
+	}
+}
+
+#define swapstamp(stamp) do { \
+	if (stamp.scr_direction > 0xff) { \
+		stamp.scr_len =3D bswap64(stamp.scr_len); \
+		stamp.scr_sec =3D bswap64(stamp.scr_sec); \
+		stamp.scr_usec =3D bswap32(stamp.scr_usec); \
+		stamp.scr_direction =3D bswap32(stamp.scr_direction); \
+	} \
+} while (0/*CONSTCOND*/)
+
+static void
+playback(FILE *fp)
+{
+	struct timespec tsi, tso;
+	struct stamp stamp;
+	struct stat pst;
+	char buf[DEF_BUF];
+	off_t nread, save_len;
+	size_t l;
+	time_t tclock;
+	int reg;
+
+	if (fstat(fileno(fp), &pst) =3D=3D -1)
+		err(1, "fstat failed");
+
+	reg =3D S_ISREG(pst.st_mode);
+
+	for (nread =3D 0; !reg || nread < pst.st_size; nread +=3D save_len) {
+		if (fread(&stamp, sizeof(stamp), 1, fp) !=3D 1) {
+			if (reg)
+				err(1, "reading playback header");
+			else
+				break;
+		}
+		swapstamp(stamp);
+		save_len =3D sizeof(stamp);
+
+		if (reg && stamp.scr_len >
+		    (uint64_t)(pst.st_size - save_len) - nread)
+			errx(1, "invalid stamp");
+
+		save_len +=3D stamp.scr_len;
+		tclock =3D stamp.scr_sec;
+		tso.tv_sec =3D stamp.scr_sec;
+		tso.tv_nsec =3D stamp.scr_usec * 1000;
+
+		switch (stamp.scr_direction) {
+		case 's':
+			if (!qflg)
+			    (void)printf("Script started on %s",
+				ctime(&tclock));
+			tsi =3D tso;
+			(void)consume(fp, stamp.scr_len, buf, reg);
+			break;
+		case 'e':
+			if (!qflg)
+				(void)printf("\nScript done on %s",
+				    ctime(&tclock));
+			(void)consume(fp, stamp.scr_len, buf, reg);
+			break;
+		case 'i':
+			/* throw input away */
+			(void)consume(fp, stamp.scr_len, buf, reg);
+			break;
+		case 'o':
+			tsi.tv_sec =3D tso.tv_sec - tsi.tv_sec;
+			tsi.tv_nsec =3D tso.tv_nsec - tsi.tv_nsec;
+			if (tsi.tv_nsec < 0) {
+				tsi.tv_sec -=3D 1;
+				tsi.tv_nsec +=3D 1000000000;
+			}
+			if (usesleep)
+				(void)nanosleep(&tsi, NULL);
+			tsi =3D tso;
+			while (stamp.scr_len > 0) {
+				l =3D MIN(DEF_BUF, stamp.scr_len);
+				if (fread(buf, sizeof(char), l, fp) !=3D l)
+					err(1, "cannot read buffer");
+
+				(void)write(STDOUT_FILENO, buf, l);
+				stamp.scr_len -=3D l;
+			}
+			break;
+		default:
+			errx(1, "invalid direction");
+		}
+	}
+	(void)fclose(fp);
+	exit(0);
+}
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/usr.bin/tar/Makefile
--- a/head/usr.bin/tar/Makefile	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/usr.bin/tar/Makefile	Fri Aug 10 14:19:25 2012 +0300
@@ -1,26 +1,22 @@
-# $FreeBSD: head/usr.bin/tar/Makefile 232153 2012-02-25 10:58:02Z mm $
+# $FreeBSD: head/usr.bin/tar/Makefile 238856 2012-07-28 06:38:44Z mm $
 .include <bsd.own.mk>
=20
 LIBARCHIVEDIR=3D	${.CURDIR}/../../contrib/libarchive
=20
 PROG=3D	bsdtar
-BSDTAR_VERSION_STRING=3D	3.0.3
+BSDTAR_VERSION_STRING=3D	3.0.4
=20
 .PATH: ${LIBARCHIVEDIR}/tar
 SRCS=3D	bsdtar.c	\
 	cmdline.c	\
-	getdate.c	\
 	read.c		\
 	subst.c		\
-	tree.c		\
 	util.c		\
 	write.c
=20
 .PATH: ${LIBARCHIVEDIR}/libarchive_fe
 SRCS+=3D	err.c		\
-	line_reader.c	\
-	matching.c	\
-	pathmatch.c
+	line_reader.c
=20
 DPADD=3D	${LIBARCHIVE} ${LIBBZ2} ${LIBZ} ${LIBLZMA} ${LIBBSDXML}
 LDADD=3D	-larchive -lbz2 -lz -llzma -lbsdxml
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/usr.bin/tar/test/Makefile
--- a/head/usr.bin/tar/test/Makefile	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/usr.bin/tar/test/Makefile	Fri Aug 10 14:19:25 2012 +0300
@@ -1,19 +1,14 @@
-# $FreeBSD: head/usr.bin/tar/test/Makefile 232153 2012-02-25 10:58:02Z mm $
+# $FreeBSD: head/usr.bin/tar/test/Makefile 238856 2012-07-28 06:38:44Z mm $
=20
 LIBARCHIVEDIR=3D	${.CURDIR}/../../../contrib/libarchive
=20
-.PATH: ${LIBARCHIVEDIR}/tar
-# Some tar sources are pulled in for white-box tests
-TAR_SRCS=3D						\
-	getdate.c
-
 .PATH: ${LIBARCHIVEDIR}/tar/test
 TESTS=3D	\
 	test_0.c				\
 	test_basic.c				\
 	test_copy.c				\
 	test_empty_mtree.c			\
-	test_getdate.c				\
+	test_format_newc.c			\
 	test_help.c				\
 	test_option_C_upper.c			\
 	test_option_H_upper.c			\
@@ -28,6 +23,7 @@
 	test_option_k.c				\
 	test_option_keep_newer_files.c		\
 	test_option_n.c				\
+	test_option_nodump.c			\
 	test_option_newer_than.c		\
 	test_option_q.c				\
 	test_option_r.c				\
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/usr.sbin/ctladm/ctladm.c
--- a/head/usr.sbin/ctladm/ctladm.c	Mon Jul 30 11:44:18 2012 +0300
+++ b/head/usr.sbin/ctladm/ctladm.c	Fri Aug 10 14:19:25 2012 +0300
@@ -41,7 +41,7 @@
  */
=20
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: head/usr.sbin/ctladm/ctladm.c 237255 2012-06-19 06:10:=
24Z eadler $");
+__FBSDID("$FreeBSD: head/usr.sbin/ctladm/ctladm.c 239074 2012-08-05 17:23:=
47Z dim $");
=20
 #include <sys/ioctl.h>
 #include <sys/types.h>
@@ -1026,7 +1026,7 @@
 cctl_error_inject(int fd, uint32_t target, uint32_t lun, int argc, char **=
argv,=20
 		  char *combinedopt)
 {
-	int retval;
+	int retval =3D 0;
 	struct ctl_error_desc err_desc;
 	uint64_t lba =3D 0;
 	uint32_t len =3D 0;
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/usr.sbin/portsnap/portsnap/portsn=
ap.8
--- a/head/usr.sbin/portsnap/portsnap/portsnap.8	Mon Jul 30 11:44:18 2012 +=
0300
+++ b/head/usr.sbin/portsnap/portsnap/portsnap.8	Fri Aug 10 14:19:25 2012 +=
0300
@@ -23,9 +23,9 @@
 .\" IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 .\" POSSIBILITY OF SUCH DAMAGE.
 .\"
-.\" $FreeBSD$
+.\" $FreeBSD: head/usr.sbin/portsnap/portsnap/portsnap.8 239078 2012-08-05=
 21:13:21Z eadler $
 .\"
-.Dd September 15, 2008
+.Dd August 5, 2012
 .Dt PORTSNAP 8
 .Os FreeBSD
 .Sh NAME
@@ -110,6 +110,12 @@
 .Ar sysutils/port
 would extract sysutils/portsman, sysutils/portsnap,
 sysutils/portupgrade, etc.)
+.It Fl Fl interactive
+override auto-detection of calling process.
+Only use this when calling portsnap from an
+.Sy interactive, non-terminal application.
+(Cron jobs are particularly bad since they cause
+load spikes on the Portsnap mirrors.)
 .El
 .Sh COMMANDS
 The
diff -r 6b68d37bb4dc -r 2d798fd21d78 head/usr.sbin/portsnap/portsnap/portsn=
ap.sh
--- a/head/usr.sbin/portsnap/portsnap/portsnap.sh	Mon Jul 30 11:44:18 2012 =
+0300
+++ b/head/usr.sbin/portsnap/portsnap/portsnap.sh	Fri Aug 10 14:19:25 2012 =
+0300
@@ -25,7 +25,7 @@
 # IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 # POSSIBILITY OF SUCH DAMAGE.
=20
-# $FreeBSD: head/usr.sbin/portsnap/portsnap/portsnap.sh 235208 2012-05-09 =
21:56:10Z eadler $
+# $FreeBSD: head/usr.sbin/portsnap/portsnap/portsnap.sh 239078 2012-08-05 =
21:13:21Z eadler $
=20
 #### Usage function -- called from command-line handling code.
=20
@@ -48,6 +48,9 @@
                   (default: /usr/ports/)
   -s server    -- Server from which to fetch updates.
                   (default: portsnap.FreeBSD.org)
+  --interactive -- interactive: override auto-detection of calling process
+                  (use this when calling portsnap from an interactive, non-
+                  terminal application AND NEVER ELSE).
   path         -- Extract only parts of the tree starting with the given
                   string.  (extract command only)
 Commands:
@@ -84,6 +87,7 @@
 	SERVERNAME=3D""
 	REFUSE=3D""
 	LOCALDESC=3D""
+	INTERACTIVE=3D""
 }
=20
 # Parse the command line
@@ -103,6 +107,9 @@
 			XARGST=3D"-t"
 			DDSTATS=3D".."
 			;;
+		--interactive)
+			INTERACTIVE=3D"YES"
+			;;
 		-f)
 			if [ $# -eq 1 ]; then usage; fi
 			if [ ! -z "${CONFFILE}" ]; then usage; fi
@@ -228,6 +235,13 @@
 			eval ${X}=3D${__}
 		fi
 	done
+	if [ -z "${INTERACTIVE}" ]; then
+		if [ -t 0 ]; then
+			INTERACTIVE=3D"YES"
+		else
+			INTERACTIVE=3D"NO"
+		fi
+	fi
 }
=20
 # Perform sanity checks and set some final parameters
@@ -1023,10 +1037,10 @@
 # Fetch command.  Make sure that we're being called
 # interactively, then run fetch_check_params and fetch_run
 cmd_fetch() {
-	if [ ! -t 0 ]; then
+	if [ "${INTERACTIVE}" !=3D "YES" ]; then
 		echo -n "`basename $0` fetch should not "
 		echo "be run non-interactively."
-		echo "Run `basename $0` cron instead."
+		echo "Run `basename $0` cron instead"
 		exit 1
 	fi
 	fetch_check_params
@@ -1069,7 +1083,7 @@
 # whether stdin is a terminal; then run 'update' or
 # 'extract' depending on whether ${PORTSDIR} exists.
 cmd_alfred() {
-	if [ -t 0 ]; then
+	if [ "${INTERACTIVE}" =3D "YES" ]; then
 		cmd_fetch
 	else
 		cmd_cron



More information about the Zrouter-src-freebsd mailing list