Fully synchronize sys/boot from FreeBSD-5.x, but add / to the module path
authorMatthew Dillon <dillon@dragonflybsd.org>
Mon, 10 Nov 2003 06:08:40 +0000 (06:08 +0000)
committerMatthew Dillon <dillon@dragonflybsd.org>
Mon, 10 Nov 2003 06:08:40 +0000 (06:08 +0000)
so /kernel will be found and loaded instead of /boot/kernel.  This will
give us all the capabilities of the FreeBSD-5 boot code including AMD64 and
ELF64 support.

As part of this work, rather then try to adjust ufs/fs.h and friends to get
UFS2 info I instead copied the fs.h and friends from FreeBSD-5 into the
sys/boot subtree

Additionally, import Peter Wemm's linker set improvements from FreeBSD-5.x.
They happen to be compatible with GCC 2.95.x and it allows very few changes
to be made to the boot code.

NOTE!  UFS2 support is not enabled by default as of this commit because it
causes boot2 to run over its limit by 88 bytes.

449 files changed:
sys/boot/Makefile
sys/boot/README
sys/boot/alpha/Makefile
sys/boot/alpha/Makefile.inc
sys/boot/alpha/boot1/Makefile
sys/boot/alpha/boot1/boot1.c
sys/boot/alpha/boot1/sys.c [deleted file]
sys/boot/alpha/cdboot/Makefile
sys/boot/alpha/cdboot/cdboot-4.0R.gz.uu [deleted file]
sys/boot/alpha/cdboot/version
sys/boot/alpha/common/Makefile.common
sys/boot/alpha/common/conf.c
sys/boot/alpha/common/main.c
sys/boot/alpha/libalpha/Makefile
sys/boot/alpha/libalpha/OSFpal.c
sys/boot/alpha/libalpha/alpha_copy.c
sys/boot/alpha/libalpha/alpha_module.c
sys/boot/alpha/libalpha/bbinfo.h
sys/boot/alpha/libalpha/bootinfo.c
sys/boot/alpha/libalpha/common.h
sys/boot/alpha/libalpha/delay.c
sys/boot/alpha/libalpha/devicename.c
sys/boot/alpha/libalpha/elf_freebsd.c
sys/boot/alpha/libalpha/getsecs.c
sys/boot/alpha/libalpha/libalpha.h
sys/boot/alpha/libalpha/pal.S
sys/boot/alpha/libalpha/prom.c
sys/boot/alpha/libalpha/prom_disp.S
sys/boot/alpha/libalpha/prom_swpal.S
sys/boot/alpha/libalpha/reboot.c
sys/boot/alpha/libalpha/srmdisk.c
sys/boot/alpha/libalpha/srmnet.c
sys/boot/alpha/libalpha/start.S
sys/boot/alpha/libalpha/time.c
sys/boot/alpha/loader/Makefile
sys/boot/alpha/loader/version
sys/boot/alpha/netboot/Makefile
sys/boot/alpha/netboot/version
sys/boot/arc/Makefile
sys/boot/arc/Makefile.inc
sys/boot/arc/include/arcfuncs.h
sys/boot/arc/include/arctypes.h
sys/boot/arc/include/libarc.h
sys/boot/arc/lib/Makefile
sys/boot/arc/lib/abort.c
sys/boot/arc/lib/arcconsole.c
sys/boot/arc/lib/arcdisk.c
sys/boot/arc/lib/arch/alpha/copy.c
sys/boot/arc/lib/arch/alpha/rpb.c
sys/boot/arc/lib/arch/alpha/setjmp.S
sys/boot/arc/lib/arch/alpha/start.S
sys/boot/arc/lib/bootinfo.c
sys/boot/arc/lib/delay.c
sys/boot/arc/lib/devicename.c
sys/boot/arc/lib/elf_freebsd.c
sys/boot/arc/lib/module.c
sys/boot/arc/lib/prom.c
sys/boot/arc/lib/setjmperr.c
sys/boot/arc/lib/time.c
sys/boot/arc/loader/Makefile
sys/boot/arc/loader/conf.c
sys/boot/arc/loader/main.c
sys/boot/arc/loader/version
sys/boot/common/Makefile.inc
sys/boot/common/bcache.c
sys/boot/common/boot.c
sys/boot/common/bootstrap.h
sys/boot/common/commands.c
sys/boot/common/console.c
sys/boot/common/dev_net.c
sys/boot/common/dev_net.h
sys/boot/common/devopen.c
sys/boot/common/dinode.h [new file with mode: 0644]
sys/boot/common/fs.h [new file with mode: 0644]
sys/boot/common/help.common
sys/boot/common/interp.c
sys/boot/common/interp_backslash.c
sys/boot/common/interp_forth.c
sys/boot/common/interp_parse.c
sys/boot/common/isapnp.c
sys/boot/common/isapnp.h
sys/boot/common/load.c
sys/boot/common/load_aout.c [deleted file]
sys/boot/common/load_elf.c
sys/boot/common/load_elf32.c [new file with mode: 0644]
sys/boot/common/load_elf64.c [new file with mode: 0644]
sys/boot/common/loader.8
sys/boot/common/ls.c
sys/boot/common/merge_help.awk
sys/boot/common/misc.c
sys/boot/common/module.c
sys/boot/common/newvers.sh
sys/boot/common/panic.c
sys/boot/common/pnp.c
sys/boot/common/pnpdata
sys/boot/common/ufsread.c [new file with mode: 0644]
sys/boot/efi/Makefile [new file with mode: 0644]
sys/boot/efi/Makefile.inc [new file with mode: 0644]
sys/boot/efi/include/README [new file with mode: 0644]
sys/boot/efi/include/efi.h [new file with mode: 0644]
sys/boot/efi/include/efi_nii.h [new file with mode: 0644]
sys/boot/efi/include/efiapi.h [new file with mode: 0644]
sys/boot/efi/include/eficon.h [new file with mode: 0644]
sys/boot/efi/include/efidebug.h [new file with mode: 0644]
sys/boot/efi/include/efidef.h [new file with mode: 0644]
sys/boot/efi/include/efidevp.h [new file with mode: 0644]
sys/boot/efi/include/efierr.h [new file with mode: 0644]
sys/boot/efi/include/efifpswa.h [new file with mode: 0644]
sys/boot/efi/include/efifs.h [new file with mode: 0644]
sys/boot/efi/include/efilib.h [copied from sys/boot/arc/lib/time.c with 73% similarity]
sys/boot/efi/include/efinet.h [new file with mode: 0644]
sys/boot/efi/include/efipart.h [new file with mode: 0644]
sys/boot/efi/include/efiprot.h [new file with mode: 0644]
sys/boot/efi/include/efipxebc.h [new file with mode: 0644]
sys/boot/efi/include/efiser.h [new file with mode: 0644]
sys/boot/efi/include/efistdarg.h [new file with mode: 0644]
sys/boot/efi/include/i386/efibind.h [new file with mode: 0644]
sys/boot/efi/include/i386/pe.h [new file with mode: 0644]
sys/boot/efi/include/ia64/efibind.h [new file with mode: 0644]
sys/boot/efi/include/ia64/pe.h [new file with mode: 0644]
sys/boot/efi/libefi/Makefile [new file with mode: 0644]
sys/boot/efi/libefi/arch/ia64/ldscript.ia64 [new file with mode: 0644]
sys/boot/efi/libefi/arch/ia64/start.S [new file with mode: 0644]
sys/boot/efi/libefi/bootinfo.c [copied from sys/boot/pc32/libi386/bootinfo.c with 60% similarity]
sys/boot/efi/libefi/copy.c [copied from sys/boot/alpha/libalpha/alpha_copy.c with 65% similarity]
sys/boot/efi/libefi/delay.c [copied from sys/boot/arc/lib/delay.c with 77% similarity]
sys/boot/efi/libefi/devicename.c [new file with mode: 0644]
sys/boot/efi/libefi/efi_console.c [copied from sys/boot/common/devopen.c with 53% similarity]
sys/boot/efi/libefi/efiboot.h [copied from sys/boot/alpha/libalpha/libalpha.h with 55% similarity]
sys/boot/efi/libefi/efifpswa.c [copied from sys/boot/pc32/libi386/i386_module.c with 61% similarity]
sys/boot/efi/libefi/efifs.c [new file with mode: 0644]
sys/boot/efi/libefi/efinet.c [new file with mode: 0644]
sys/boot/efi/libefi/elf_freebsd.c [copied from sys/boot/alpha/libalpha/elf_freebsd.c with 51% similarity]
sys/boot/efi/libefi/libefi.c [new file with mode: 0644]
sys/boot/efi/libefi/module.c [copied from sys/boot/common/dev_net.h with 81% similarity]
sys/boot/efi/libefi/time.c [new file with mode: 0644]
sys/boot/efi/loader/Makefile [new file with mode: 0644]
sys/boot/efi/loader/conf.c [copied from sys/boot/arc/loader/conf.c with 79% similarity]
sys/boot/efi/loader/main.c [new file with mode: 0644]
sys/boot/efi/loader/version [new file with mode: 0644]
sys/boot/ficl/Makefile
sys/boot/ficl/alpha/sysdep.c
sys/boot/ficl/alpha/sysdep.h
sys/boot/ficl/dict.c
sys/boot/ficl/ficl.c
sys/boot/ficl/ficl.h
sys/boot/ficl/fileaccess.c [new file with mode: 0644]
sys/boot/ficl/float.c [new file with mode: 0644]
sys/boot/ficl/i386/sysdep.c
sys/boot/ficl/i386/sysdep.h
sys/boot/ficl/ia64/sysdep.c [copied from sys/boot/ficl/alpha/sysdep.c with 91% similarity]
sys/boot/ficl/ia64/sysdep.h [copied from sys/boot/ficl/alpha/sysdep.h with 59% similarity]
sys/boot/ficl/loader.c
sys/boot/ficl/math64.c
sys/boot/ficl/math64.h
sys/boot/ficl/prefix.c [new file with mode: 0644]
sys/boot/ficl/search.c [new file with mode: 0644]
sys/boot/ficl/softwords/classes.fr
sys/boot/ficl/softwords/ficlclass.fr [new file with mode: 0644]
sys/boot/ficl/softwords/ficllocal.fr
sys/boot/ficl/softwords/fileaccess.fr [new file with mode: 0644]
sys/boot/ficl/softwords/forml.fr [new file with mode: 0644]
sys/boot/ficl/softwords/freebsd.fr
sys/boot/ficl/softwords/ifbrack.fr
sys/boot/ficl/softwords/jhlocal.fr
sys/boot/ficl/softwords/marker.fr
sys/boot/ficl/softwords/oo.fr
sys/boot/ficl/softwords/prefix.fr [new file with mode: 0644]
sys/boot/ficl/softwords/softcore.awk
sys/boot/ficl/softwords/softcore.fr
sys/boot/ficl/softwords/string.fr
sys/boot/ficl/sparc64/sysdep.c [copied from sys/boot/ficl/alpha/sysdep.c with 91% similarity]
sys/boot/ficl/sparc64/sysdep.h [copied from sys/boot/ficl/alpha/sysdep.h with 62% similarity]
sys/boot/ficl/stack.c
sys/boot/ficl/testmain.c
sys/boot/ficl/tools.c [new file with mode: 0644]
sys/boot/ficl/unix.c [new file with mode: 0644]
sys/boot/ficl/vm.c
sys/boot/ficl/words.c
sys/boot/forth/beastie.4th [new file with mode: 0644]
sys/boot/forth/frames.4th [new file with mode: 0644]
sys/boot/forth/fred.4th [new file with mode: 0644]
sys/boot/forth/loader.4th
sys/boot/forth/loader.4th.8
sys/boot/forth/loader.conf
sys/boot/forth/loader.conf.5
sys/boot/forth/loader.rc
sys/boot/forth/pnp.4th [new file with mode: 0644]
sys/boot/forth/screen.4th [new file with mode: 0644]
sys/boot/forth/support.4th
sys/boot/i386/Makefile
sys/boot/i386/Makefile.inc
sys/boot/i386/boot0/Makefile
sys/boot/i386/boot0/boot0.S
sys/boot/i386/boot0/boot0.s
sys/boot/i386/boot2/Makefile
sys/boot/i386/boot2/boot1.S
sys/boot/i386/boot2/boot1.s
sys/boot/i386/boot2/boot2.c
sys/boot/i386/boot2/lib.h
sys/boot/i386/boot2/sio.S
sys/boot/i386/boot2/sio.s
sys/boot/i386/btx/Makefile
sys/boot/i386/btx/Makefile.inc [new file with mode: 0644]
sys/boot/i386/btx/btx/Makefile
sys/boot/i386/btx/btx/btx.S
sys/boot/i386/btx/btx/btx.s
sys/boot/i386/btx/btxldr/Makefile
sys/boot/i386/btx/btxldr/btxldr.s
sys/boot/i386/btx/lib/Makefile
sys/boot/i386/btx/lib/btxcsu.S
sys/boot/i386/btx/lib/btxcsu.s
sys/boot/i386/btx/lib/btxsys.S
sys/boot/i386/btx/lib/btxsys.s
sys/boot/i386/btx/lib/btxv86.S
sys/boot/i386/btx/lib/btxv86.h
sys/boot/i386/btx/lib/btxv86.s
sys/boot/i386/cdboot/Makefile
sys/boot/i386/cdboot/cdboot.S
sys/boot/i386/cdboot/cdboot.s
sys/boot/i386/kgzldr/Makefile
sys/boot/i386/kgzldr/boot.c
sys/boot/i386/kgzldr/crt.s
sys/boot/i386/kgzldr/kgzldr.h
sys/boot/i386/kgzldr/lib.c
sys/boot/i386/kgzldr/sio.s
sys/boot/i386/kgzldr/start.s
sys/boot/i386/libi386/Makefile
sys/boot/i386/libi386/amd64_tramp.S [new file with mode: 0644]
sys/boot/i386/libi386/biosacpi.c [new file with mode: 0644]
sys/boot/i386/libi386/bioscd.c
sys/boot/i386/libi386/biosdisk.c
sys/boot/i386/libi386/biosmem.c
sys/boot/i386/libi386/biospci.c
sys/boot/i386/libi386/biospnp.c
sys/boot/i386/libi386/biossmap.c [new file with mode: 0644]
sys/boot/i386/libi386/bootinfo.c
sys/boot/i386/libi386/bootinfo32.c [copied from sys/boot/pc32/libi386/bootinfo.c with 51% similarity]
sys/boot/i386/libi386/bootinfo64.c [new file with mode: 0644]
sys/boot/i386/libi386/comconsole.c
sys/boot/i386/libi386/devicename.c
sys/boot/i386/libi386/elf32_freebsd.c [copied from sys/boot/i386/libi386/elf_freebsd.c with 67% similarity]
sys/boot/i386/libi386/elf64_freebsd.c [copied from sys/boot/i386/libi386/elf_freebsd.c with 52% similarity]
sys/boot/i386/libi386/gatea20.c
sys/boot/i386/libi386/i386_copy.c
sys/boot/i386/libi386/i386_module.c
sys/boot/i386/libi386/libi386.h
sys/boot/i386/libi386/nullconsole.c
sys/boot/i386/libi386/pread.c
sys/boot/i386/libi386/pxe.c
sys/boot/i386/libi386/pxe.h
sys/boot/i386/libi386/pxetramp.s
sys/boot/i386/libi386/time.c
sys/boot/i386/libi386/vidconsole.c
sys/boot/i386/loader/Makefile
sys/boot/i386/loader/conf.c
sys/boot/i386/loader/help.i386
sys/boot/i386/loader/loader.rc [new file with mode: 0644]
sys/boot/i386/loader/main.c
sys/boot/i386/loader/version
sys/boot/i386/mbr/Makefile
sys/boot/i386/mbr/mbr.s
sys/boot/i386/pxeldr/Makefile
sys/boot/i386/pxeldr/pxeboot.8
sys/boot/i386/pxeldr/pxeldr.S
sys/boot/i386/pxeldr/pxeldr.s
sys/boot/ia64/Makefile [new file with mode: 0644]
sys/boot/ia64/Makefile.inc [new file with mode: 0644]
sys/boot/ia64/libski/Makefile [new file with mode: 0644]
sys/boot/ia64/libski/acpi_stub.c [new file with mode: 0644]
sys/boot/ia64/libski/bootinfo.c [copied from sys/boot/pc32/libi386/bootinfo.c with 61% similarity]
sys/boot/ia64/libski/copy.c [copied from sys/boot/alpha/libalpha/alpha_copy.c with 72% similarity]
sys/boot/ia64/libski/delay.c [copied from sys/boot/common/dev_net.h with 84% similarity]
sys/boot/ia64/libski/devicename.c [new file with mode: 0644]
sys/boot/ia64/libski/efi_stub.c [new file with mode: 0644]
sys/boot/ia64/libski/elf_freebsd.c [copied from sys/boot/alpha/libalpha/elf_freebsd.c with 57% similarity]
sys/boot/ia64/libski/exit.c [copied from sys/boot/common/dev_net.h with 81% similarity]
sys/boot/ia64/libski/libski.h [new file with mode: 0644]
sys/boot/ia64/libski/module.c [copied from sys/boot/arc/lib/module.c with 80% similarity]
sys/boot/ia64/libski/pal_stub.S [copied from sys/boot/alpha/libalpha/alpha_copy.c with 51% similarity]
sys/boot/ia64/libski/sal_stub.c [new file with mode: 0644]
sys/boot/ia64/libski/skiconsole.c [copied from sys/boot/common/devopen.c with 60% similarity]
sys/boot/ia64/libski/skifs.c [new file with mode: 0644]
sys/boot/ia64/libski/ssc.c [copied from sys/boot/alpha/libalpha/alpha_copy.c with 59% similarity]
sys/boot/ia64/libski/time.c [new file with mode: 0644]
sys/boot/ia64/skiload/Makefile [new file with mode: 0644]
sys/boot/ia64/skiload/conf.c [copied from sys/boot/arc/loader/conf.c with 81% similarity]
sys/boot/ia64/skiload/ldscript.ia64 [new file with mode: 0644]
sys/boot/ia64/skiload/main.c [new file with mode: 0644]
sys/boot/ia64/skiload/skiload.cmd [new file with mode: 0644]
sys/boot/ia64/skiload/start.S [copied from sys/boot/pc98/boot2/probe_keyboard.c with 64% similarity]
sys/boot/ia64/skiload/version [new file with mode: 0644]
sys/boot/ofw/Makefile [new file with mode: 0644]
sys/boot/ofw/common/Makefile.inc [new file with mode: 0644]
sys/boot/ofw/common/main.c [new file with mode: 0644]
sys/boot/ofw/libofw/Makefile [new file with mode: 0644]
sys/boot/ofw/libofw/devicename.c [new file with mode: 0644]
sys/boot/ofw/libofw/elf_freebsd.c [copied from sys/boot/common/devopen.c with 52% similarity]
sys/boot/ofw/libofw/libofw.h [new file with mode: 0644]
sys/boot/ofw/libofw/ofw_console.c [new file with mode: 0644]
sys/boot/ofw/libofw/ofw_copy.c [new file with mode: 0644]
sys/boot/ofw/libofw/ofw_disk.c [new file with mode: 0644]
sys/boot/ofw/libofw/ofw_memory.c [new file with mode: 0644]
sys/boot/ofw/libofw/ofw_module.c [copied from sys/boot/arc/lib/module.c with 83% similarity]
sys/boot/ofw/libofw/ofw_net.c [new file with mode: 0644]
sys/boot/ofw/libofw/ofw_reboot.c [copied from sys/boot/common/dev_net.h with 73% similarity]
sys/boot/ofw/libofw/ofw_time.c [copied from sys/boot/alpha/libalpha/time.c with 65% similarity]
sys/boot/ofw/libofw/openfirm.c [new file with mode: 0644]
sys/boot/ofw/libofw/openfirm.h [new file with mode: 0644]
sys/boot/pc32/Makefile
sys/boot/pc32/Makefile.inc
sys/boot/pc32/boot0/Makefile
sys/boot/pc32/boot0/boot0.S
sys/boot/pc32/boot2/Makefile
sys/boot/pc32/boot2/boot1.S
sys/boot/pc32/boot2/boot2.c
sys/boot/pc32/boot2/lib.h
sys/boot/pc32/boot2/sio.S
sys/boot/pc32/btx/Makefile
sys/boot/pc32/btx/Makefile.inc [new file with mode: 0644]
sys/boot/pc32/btx/btx/Makefile
sys/boot/pc32/btx/btx/btx.S
sys/boot/pc32/btx/btxldr/Makefile
sys/boot/pc32/btx/lib/Makefile
sys/boot/pc32/btx/lib/btxcsu.S
sys/boot/pc32/btx/lib/btxsys.S
sys/boot/pc32/btx/lib/btxv86.S
sys/boot/pc32/btx/lib/btxv86.h
sys/boot/pc32/cdboot/Makefile
sys/boot/pc32/cdboot/cdboot.S
sys/boot/pc32/kgzldr/Makefile
sys/boot/pc32/kgzldr/boot.c
sys/boot/pc32/kgzldr/crt.s
sys/boot/pc32/kgzldr/kgzldr.h
sys/boot/pc32/kgzldr/lib.c
sys/boot/pc32/kgzldr/sio.s
sys/boot/pc32/kgzldr/start.s
sys/boot/pc32/libi386/Makefile
sys/boot/pc32/libi386/amd64_tramp.S [new file with mode: 0644]
sys/boot/pc32/libi386/biosacpi.c [new file with mode: 0644]
sys/boot/pc32/libi386/bioscd.c
sys/boot/pc32/libi386/biosdisk.c
sys/boot/pc32/libi386/biosmem.c
sys/boot/pc32/libi386/biospci.c
sys/boot/pc32/libi386/biospnp.c
sys/boot/pc32/libi386/biossmap.c [new file with mode: 0644]
sys/boot/pc32/libi386/bootinfo.c
sys/boot/pc32/libi386/bootinfo32.c [copied from sys/boot/pc32/libi386/bootinfo.c with 51% similarity]
sys/boot/pc32/libi386/bootinfo64.c [new file with mode: 0644]
sys/boot/pc32/libi386/comconsole.c
sys/boot/pc32/libi386/devicename.c
sys/boot/pc32/libi386/elf32_freebsd.c [moved from sys/boot/i386/libi386/aout_freebsd.c with 62% similarity]
sys/boot/pc32/libi386/elf64_freebsd.c [moved from sys/boot/i386/libi386/elf_freebsd.c with 52% similarity]
sys/boot/pc32/libi386/gatea20.c
sys/boot/pc32/libi386/i386_copy.c
sys/boot/pc32/libi386/i386_module.c
sys/boot/pc32/libi386/libi386.h
sys/boot/pc32/libi386/nullconsole.c
sys/boot/pc32/libi386/pread.c
sys/boot/pc32/libi386/pxe.c
sys/boot/pc32/libi386/pxe.h
sys/boot/pc32/libi386/pxetramp.s
sys/boot/pc32/libi386/time.c
sys/boot/pc32/libi386/vidconsole.c
sys/boot/pc32/loader/Makefile
sys/boot/pc32/loader/conf.c
sys/boot/pc32/loader/help.i386
sys/boot/pc32/loader/loader.rc [new file with mode: 0644]
sys/boot/pc32/loader/main.c
sys/boot/pc32/loader/version
sys/boot/pc32/mbr/Makefile
sys/boot/pc32/mbr/mbr.s
sys/boot/pc32/pxeldr/Makefile
sys/boot/pc32/pxeldr/pxeboot.8
sys/boot/pc32/pxeldr/pxeldr.S
sys/boot/pc98/Makefile
sys/boot/pc98/Makefile.inc
sys/boot/pc98/boot0.5/Makefile
sys/boot/pc98/boot0.5/boot.s
sys/boot/pc98/boot0.5/boot0.5.s
sys/boot/pc98/boot0.5/disk.s
sys/boot/pc98/boot0.5/selector.s
sys/boot/pc98/boot0.5/start.s
sys/boot/pc98/boot0.5/support.s
sys/boot/pc98/boot0.5/syscons.s
sys/boot/pc98/boot0/Makefile
sys/boot/pc98/boot0/boot0.s
sys/boot/pc98/boot2/Makefile
sys/boot/pc98/boot2/README.serial.98
sys/boot/pc98/boot2/asm.S
sys/boot/pc98/boot2/asm.h
sys/boot/pc98/boot2/bios.S
sys/boot/pc98/boot2/boot.c
sys/boot/pc98/boot2/boot.h
sys/boot/pc98/boot2/boot2.S
sys/boot/pc98/boot2/dinode.h [new file with mode: 0644]
sys/boot/pc98/boot2/disk.c
sys/boot/pc98/boot2/fs.h [new file with mode: 0644]
sys/boot/pc98/boot2/inode.h [new file with mode: 0644]
sys/boot/pc98/boot2/io.c
sys/boot/pc98/boot2/probe_keyboard.c
sys/boot/pc98/boot2/quota.h [new file with mode: 0644]
sys/boot/pc98/boot2/serial.S
sys/boot/pc98/boot2/serial_16550.S
sys/boot/pc98/boot2/serial_8251.S
sys/boot/pc98/boot2/start.S
sys/boot/pc98/boot2/sys.c
sys/boot/pc98/boot2/table.c
sys/boot/pc98/btx/Makefile
sys/boot/pc98/btx/btx/Makefile
sys/boot/pc98/btx/btx/btx.s
sys/boot/pc98/btx/btxldr/Makefile
sys/boot/pc98/btx/btxldr/btxldr.s
sys/boot/pc98/btx/lib/Makefile
sys/boot/pc98/btx/lib/btxcsu.s
sys/boot/pc98/btx/lib/btxsys.s
sys/boot/pc98/btx/lib/btxv86.h
sys/boot/pc98/btx/lib/btxv86.s
sys/boot/pc98/kgzldr/Makefile
sys/boot/pc98/kgzldr/crt.s
sys/boot/pc98/libpc98/Makefile
sys/boot/pc98/libpc98/biosdisk.c
sys/boot/pc98/libpc98/biosmem.c
sys/boot/pc98/libpc98/comconsole.c
sys/boot/pc98/libpc98/gatea20.c
sys/boot/pc98/libpc98/i386_module.c [copied from sys/boot/common/dev_net.h with 81% similarity]
sys/boot/pc98/libpc98/time.c
sys/boot/pc98/libpc98/vidconsole.c
sys/boot/pc98/loader/Makefile
sys/boot/pc98/loader/conf.c [copied from sys/boot/pc32/loader/conf.c with 90% similarity]
sys/boot/pc98/loader/help.pc98 [copied from sys/boot/pc32/loader/help.i386 with 94% similarity]
sys/boot/pc98/loader/main.c
sys/boot/powerpc/Makefile [new file with mode: 0644]
sys/boot/powerpc/loader/Makefile [new file with mode: 0644]
sys/boot/powerpc/loader/conf.c [copied from sys/boot/alpha/common/conf.c with 80% similarity]
sys/boot/powerpc/loader/help.ofw [new file with mode: 0644]
sys/boot/powerpc/loader/metadata.c [copied from sys/boot/pc32/libi386/bootinfo.c with 51% similarity]
sys/boot/powerpc/loader/start.c [new file with mode: 0644]
sys/boot/powerpc/loader/version [new file with mode: 0644]
sys/boot/sparc64/Makefile [new file with mode: 0644]
sys/boot/sparc64/boot1/Makefile [new file with mode: 0644]
sys/boot/sparc64/boot1/_start.S [new file with mode: 0644]
sys/boot/sparc64/boot1/boot1.c [new file with mode: 0644]
sys/boot/sparc64/loader/Makefile [new file with mode: 0644]
sys/boot/sparc64/loader/help.sparc64 [new file with mode: 0644]
sys/boot/sparc64/loader/locore.S [new file with mode: 0644]
sys/boot/sparc64/loader/main.c [new file with mode: 0644]
sys/boot/sparc64/loader/metadata.c [copied from sys/boot/pc32/libi386/bootinfo.c with 50% similarity]
sys/boot/sparc64/loader/version [new file with mode: 0644]

index 7c196ac..f3f587e 100644 (file)
@@ -1,15 +1,32 @@
-# $FreeBSD: src/sys/boot/Makefile,v 1.6.2.1 2002/07/17 14:23:14 ru Exp $
-# $DragonFly: src/sys/boot/Makefile,v 1.2 2003/06/17 04:28:16 dillon Exp $
+# $FreeBSD: src/sys/boot/Makefile,v 1.18 2003/08/16 02:48:20 obrien Exp $
+# $DragonFly: src/sys/boot/Makefile,v 1.3 2003/11/10 06:08:19 dillon Exp $
 
+.if ${MACHINE_ARCH} == "amd64"
+.MAKEFLAGS:  MACHINE_ARCH=i386 MACHINE=i386 REALLY_AMD64=true
+.endif
+
+.if !defined(NOFORTH) && ${MACHINE_ARCH} != "powerpc"
 # Build the add-in FORTH interpreter
 SUBDIR+=               ficl
+.endif
+
+# Build OpenFirmware library
+.if ${MACHINE_ARCH} == "powerpc" || ${MACHINE_ARCH} == "sparc64"
+SUBDIR+=               ofw
+.endif
 
 # Pick the machine-dependant subdir based on the target architecture.
 SUBDIR+=               ${MACHINE}
 
 # Build ARC / AlphaBIOS executable on the Alpha
-.if ${MACHINE_ARCH} == "alpha"
-SUBDIR+=               arc
+# (this is a WIP (work in progress))
+#.if ${MACHINE_ARCH} == "alpha"
+#SUBDIR+=              arc
+#.endif
+
+# Build EFI executable on ia64
+.if ${MACHINE_ARCH} == "ia64"
+SUBDIR+=               efi
 .endif
 
 .include <bsd.subdir.mk>
index cb301f5..2ededf5 100644 (file)
@@ -1,5 +1,5 @@
-$FreeBSD: src/sys/boot/README,v 1.2.2.1 2000/07/07 21:12:28 jhb Exp $
-$DragonFly: src/sys/boot/README,v 1.2 2003/06/17 04:28:16 dillon Exp $
+$FreeBSD: src/sys/boot/README,v 1.3 2000/05/01 20:26:17 peter Exp $
+$DragonFly: src/sys/boot/README,v 1.3 2003/11/10 06:08:19 dillon Exp $
 
        README file, for the boot config file setup.  This is meant
        to explain how to manage the loader configuration process.
index 05c72ce..d7b22a0 100644 (file)
@@ -1,5 +1,5 @@
 # $FreeBSD: src/sys/boot/alpha/Makefile,v 1.6 1999/11/03 20:19:30 dfr Exp $
-# $DragonFly: src/sys/boot/alpha/Attic/Makefile,v 1.2 2003/06/17 04:28:16 dillon Exp $
+# $DragonFly: src/sys/boot/alpha/Attic/Makefile,v 1.3 2003/11/10 06:08:22 dillon Exp $
 
 SUBDIR=                libalpha
 SUBDIR+=       boot1 loader cdboot netboot
index 0f362f4..cab4148 100644 (file)
@@ -1,5 +1,5 @@
-# $FreeBSD: src/sys/boot/alpha/Makefile.inc,v 1.5.6.1 2000/07/06 23:29:46 obrien Exp $
-# $DragonFly: src/sys/boot/alpha/Attic/Makefile.inc,v 1.2 2003/06/17 04:28:16 dillon Exp $
+# $FreeBSD: src/sys/boot/alpha/Makefile.inc,v 1.8 2000/10/27 09:36:34 dfr Exp $
+# $DragonFly: src/sys/boot/alpha/Attic/Makefile.inc,v 1.3 2003/11/10 06:08:22 dillon Exp $
 # Options used when building app-specific libalpha components
 PRIMARY_LOAD_ADDRESS=  0x20000000      # "Region 1 start"
 SECONDARY_LOAD_ADDRESS=        0x2000c000      # "Region 1 start" + 48k
index f1054c8..861e257 100644 (file)
@@ -1,20 +1,21 @@
 # $NetBSD: Makefile,v 1.15 1998/03/28 00:21:35 thorpej Exp $
-# $FreeBSD: src/sys/boot/alpha/boot1/Makefile,v 1.10.2.1 2001/03/04 05:12:40 obrien Exp $
-# $DragonFly: src/sys/boot/alpha/boot1/Attic/Makefile,v 1.2 2003/06/17 04:28:16 dillon Exp $
+# $FreeBSD: src/sys/boot/alpha/boot1/Makefile,v 1.16 2003/01/26 14:32:53 phk Exp $
+# $DragonFly: src/sys/boot/alpha/boot1/Attic/Makefile,v 1.3 2003/11/10 06:08:25 dillon Exp $
 
 .include <../Makefile.inc>
 
 PROG = boot1
+LINKS =        ${BINDIR}/${PROG} ${BINDIR}/boot
 
 .PATH:         ${.CURDIR}/../libalpha
 
-SRCS=          start.S boot1.c sys.c
-CFLAGS+=       -mno-fp-regs
+SRCS=          start.S boot1.c
+CFLAGS+=       -ffreestanding -mno-fp-regs
+CFLAGS+=       -DSECONDARY_LOAD_ADDRESS=${SECONDARY_LOAD_ADDRESS} -DMINIMAL
+CFLAGS+=       -DBOOT1
 CFLAGS+=       -I${.CURDIR}/../../common -I${.CURDIR}
 CFLAGS+=       -I${LIBSTANDDIR}
 CFLAGS+=       -I${.CURDIR}/..
-CFLAGS+=       -DSECONDARY_LOAD_ADDRESS=${SECONDARY_LOAD_ADDRESS} -DMINIMAL
-CFLAGS+=       -DBOOT1
 NOMAN=1
 STRIP=
 BINDIR?=       /boot
index 45aa784..e53c4cd 100644 (file)
@@ -1,7 +1,7 @@
 /*
- * $FreeBSD: src/sys/boot/alpha/boot1/boot1.c,v 1.7.2.1 2000/10/28 01:03:33 gallatin Exp $
- * $DragonFly: src/sys/boot/alpha/boot1/Attic/boot1.c,v 1.3 2003/08/27 11:42:33 rob Exp $
  * From        $NetBSD: bootxx.c,v 1.4 1997/09/06 14:08:29 drochner Exp $ 
+ * $FreeBSD$
+ * $DragonFly: src/sys/boot/alpha/boot1/Attic/boot1.c,v 1.4 2003/11/10 06:08:25 dillon Exp $
  */
 
 /*
 
 #include <string.h>
 #include <sys/param.h>
+#include <sys/dirent.h>
 
 #include <machine/prom.h>
 #include <machine/rpb.h>
 
 #define DEBUGxx
 
+void puts(const char *s);
+void puthex(u_long v);
+static int dskread(void *, u_int64_t, size_t);
+
+#define printf(...) \
+while (0)
+
+#define memcpy(dst, src, len) \
+bcopy(src, dst, len)
+
+#include "ufsread.c"
+
 extern end[];
 int errno;
 
 char *heap = (char*) end;
 
+void
+bcopy(const void *src, void *dst, size_t len) 
+{
+       const char *s;
+       char *d;
+                
+       for (d = dst, s = src; len; len--)
+               *d++ = *s++;
+}
+
 void
 putchar(int c)
 {
@@ -71,20 +94,6 @@ puts(const char *s)
        putchar(*s++);
 }
 
-void *
-malloc(size_t size)
-{
-    char *p = heap;
-    size = (size + 7) & ~7;
-    heap += size;
-    return p;
-}
-
-void
-free(void * p)
-{
-}
-
 void
 panic(const char *message, ...)
 {
@@ -125,6 +134,7 @@ puthex(u_long v)
     int digit;
     char hex[] = "0123456789abcdef";
 
+    puts("0x");
     if (!v) {
        puts("0");
        return;
@@ -139,11 +149,11 @@ puthex(u_long v)
 
 #endif
 
-void
-devread(char *buf, int block, size_t size)
+int
+dskread(void *buf, u_int64_t block, size_t size)
 {
 #ifdef DEBUG
-    puts("devread(");
+    puts("dskread(");
     puthex((u_long)buf);
     puts(",");
     puthex(block);
@@ -152,7 +162,8 @@ devread(char *buf, int block, size_t size)
     puts(")\n");
 #endif
 
-    prom_read(prom_fd, size, buf, block);
+    prom_read(prom_fd, size * DEV_BSIZE, buf, block);
+    return (0);
 }
 
 static inline void
@@ -190,17 +201,22 @@ getfilename(char *filename, const char *defname)
     return;
 }
 
+static struct dmadat __dmadat;
+
 static inline void
 loadfile(char *name, char *addr)
 {
     int n;
     char *p;
+    ino_t ino;
 
     puts("Loading ");
     puts(name);
     puts("\n");
 
-    if (openrd(name)) {
+    dmadat = &__dmadat;
+
+    if (devopen() || (ino = lookup(name)) == 0) {
        puts("Can't open file ");
        puts(name);
        puts("\n");
@@ -209,10 +225,16 @@ loadfile(char *name, char *addr)
 
     p = addr;
     do {
-       n = readit(p, 1024);
+           n = fsread(ino, p, VBLKSIZE);
+           if (n < 0) {
+               puts("Can't read file ");
+               puts(name);
+               puts("\n");
+               halt();
+           }
        p += n;
        twiddle();
-    } while (n > 0);
+    } while (n == VBLKSIZE);
 
     devclose();
 }
@@ -231,7 +253,7 @@ main()
     char *name = "/boot/loader";
     char *p;
     char filename[512];
-    void (*entry) (void);
+    void (*entry)(void);
     u_long start, freq;
     int        i;
 
diff --git a/sys/boot/alpha/boot1/sys.c b/sys/boot/alpha/boot1/sys.c
deleted file mode 100644 (file)
index 4e5e98d..0000000
+++ /dev/null
@@ -1,257 +0,0 @@
-/*
- * Mach Operating System
- * Copyright (c) 1992, 1991 Carnegie Mellon University
- * All Rights Reserved.
- *
- * Permission to use, copy, modify and distribute this software and its
- * documentation is hereby granted, provided that both the copyright
- * notice and this permission notice appear in all copies of the
- * software, derivative works or modified versions, and any portions
- * thereof, and that both notices appear in supporting documentation.
- *
- * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
- * CONDITION.  CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
- * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
- *
- * Carnegie Mellon requests users of this software to return to
- *
- *  Software Distribution Coordinator  or  Software.Distribution@CS.CMU.EDU
- *  School of Computer Science
- *  Carnegie Mellon University
- *  Pittsburgh PA 15213-3890
- *
- * any improvements or extensions that they make and grant Carnegie Mellon
- * the rights to redistribute these changes.
- *
- *     from: Mach, Revision 2.2  92/04/04  11:36:34  rpd
- *     fromL Id: sys.c,v 1.21 1997/06/09 05:10:56 bde Exp
- * $FreeBSD: src/sys/boot/alpha/boot1/sys.c,v 1.4.2.2 2002/01/19 02:16:09 iedowse Exp $
- * $DragonFly: src/sys/boot/alpha/boot1/Attic/sys.c,v 1.3 2003/08/07 21:16:44 dillon Exp $
- */
-
-#include <string.h>
-#include <sys/param.h>
-#include <sys/time.h>
-
-#include <vfs/ufs/fs.h>
-#include <vfs/ufs/quota.h>
-#include <vfs/ufs/inode.h>
-
-#include <sys/dirent.h>
-
-#define COMPAT_UFS
-
-struct fs *fs;
-struct inode inode;
-int boff = 0;
-
-/*
- * We use 4k `virtual' blocks for filesystem data, whatever the actual
- * filesystem block size. FFS blocks are always a multiple of 4k.
- */
-#define VBLKSIZE       4096
-#define VBLKMASK       (VBLKSIZE - 1)
-#define DBPERVBLK      (VBLKSIZE / DEV_BSIZE)
-#define IPERVBLK       (VBLKSIZE / sizeof(struct dinode))
-#define INDIRPERVBLK   (VBLKSIZE / sizeof(ufs_daddr_t))
-#define INO_TO_VBA(fs, x) (fsbtodb(fs, ino_to_fsba(fs, x)) + \
-    (ino_to_fsbo(fs, x) / IPERVBLK) * DBPERVBLK)
-#define INO_TO_VBO(fs, x) (ino_to_fsbo(fs, x) % IPERVBLK)
-#define FS_TO_VBA(fs, fsb, off) (fsbtodb(fs, fsb) + \
-    ((off) / VBLKSIZE) * DBPERVBLK)
-#define FS_TO_VBO(fs, fsb, off) ((off) & VBLKMASK)
-
-static char fsbuf[SBSIZE], iobuf[VBLKSIZE];
-ufs_daddr_t mapbuf[VBLKSIZE / sizeof(ufs_daddr_t)];
-static int mapblock;
-
-int poff;
-
-#ifdef RAWBOOT
-#define STARTBYTE      8192    /* Where on the media the kernel starts */
-#endif
-
-static int block_map(int file_block);
-static int find(char *path);
-
-int
-readit(char *buffer, int count)
-{
-    int logno, off, size;
-    int cnt2, fsblk, bnum2;
-    struct fs *fs_copy;
-    int n = 0;
-
-    if (poff + count > inode.i_size)
-       count = inode.i_size - poff;
-    while (count > 0 && poff < inode.i_size) {
-       fs_copy = fs;
-       off = blkoff(fs_copy, poff);
-       logno = lblkno(fs_copy, poff);
-       fsblk = block_map(logno);
-       cnt2 = blksize(fs_copy, &inode, logno) - (off & ~VBLKMASK);
-       if (cnt2 > VBLKSIZE)
-               cnt2 = VBLKSIZE;
-       size = cnt2;
-       bnum2 = FS_TO_VBA(fs_copy, fsblk, off) + boff;
-       off = FS_TO_VBO(fs_copy, fsblk, off);
-       if (    (!off)  && (size <= count)) {
-           devread(buffer, bnum2, cnt2);
-       } else {
-           size -= off;
-           if (size > count)
-               size = count;
-           devread(iobuf, bnum2, cnt2);
-           bcopy(iobuf+off, buffer, size);
-       }
-       buffer += size;
-       count -= size;
-       poff += size;
-       n += size;
-    }
-    return n;
-}
-
-static int
-find(char *path)
-{
-    char *rest, ch;
-    int block, blklen, fsboff, off, loc, ino = ROOTINO;
-    struct dirent *dp;
-    char list_only;
-
-    list_only = (path[0] == '?' && path[1] == '\0');
- loop:
-    devread(iobuf, INO_TO_VBA(fs, ino) + boff, VBLKSIZE);
-    bcopy((void *)&((struct dinode *)iobuf)[INO_TO_VBO(fs, ino)],
-         (void *)&inode.i_din,
-         sizeof (struct dinode));
-    if (!*path)
-       return 1;
-    while (*path == '/')
-       path++;
-    if (!inode.i_size || ((inode.i_mode&IFMT) != IFDIR))
-       return 0;
-    for (rest = path; (ch = *rest) && ch != '/'; rest++) ;
-    *rest = 0;
-    loc = 0;
-    do {
-       if (loc >= inode.i_size) {
-           if (list_only) {
-               putchar('\n');
-               return -1;
-           } else {
-               return 0;
-           }
-       }
-       if (!(off = (loc & VBLKMASK))) {
-           block = lblkno(fs, loc);
-           fsboff = blkoff(fs, loc);
-           blklen = blksize(fs, &inode, block) - fsboff;
-           if (blklen > VBLKSIZE)
-               blklen = VBLKSIZE;
-           devread(iobuf, FS_TO_VBA(fs, block_map(block), fsboff) + boff,
-               blklen);
-       }
-       dp = (struct dirent *)(iobuf + off);
-       loc += dp->d_reclen;
-       if (dp->d_fileno && list_only) {
-           puts(dp->d_name);
-           putchar(' ');
-       }
-    } while (!dp->d_fileno || strcmp(path, dp->d_name));
-    ino = dp->d_fileno;
-    *(path = rest) = ch;
-    goto loop;
-}
-
-
-static int
-block_map(int file_block)
-{
-       int bnum;
-       if (file_block < NDADDR)
-               return(inode.i_db[file_block]);
-       bnum = FS_TO_VBA(fs, inode.i_ib[0], sizeof(mapbuf[0]) *
-           ((file_block - NDADDR) % NINDIR(fs))) + boff;
-       if (bnum != mapblock) {
-               devread(mapbuf, bnum, VBLKSIZE);
-               mapblock = bnum;
-       }
-       return (mapbuf[(file_block - NDADDR) % INDIRPERVBLK]);
-}
-
-#ifdef COMPAT_UFS
-
-#define max(a, b)      ((a) > (b) ? (a) : (b))
-
-/*
- * Sanity checks for old file systems.
- *
- * XXX - goes away some day.
- */
-static void
-ffs_oldfscompat(fs)
-       struct fs *fs;
-{
-       int i;
-
-       fs->fs_npsect = max(fs->fs_npsect, fs->fs_nsect);       /* XXX */
-       fs->fs_interleave = max(fs->fs_interleave, 1);          /* XXX */
-       if (fs->fs_postblformat == FS_42POSTBLFMT)              /* XXX */
-               fs->fs_nrpos = 8;                               /* XXX */
-       if (fs->fs_inodefmt < FS_44INODEFMT) {                  /* XXX */
-               quad_t sizepb = fs->fs_bsize;                   /* XXX */
-                                                               /* XXX */
-               fs->fs_maxfilesize = fs->fs_bsize * NDADDR - 1; /* XXX */
-               for (i = 0; i < NIADDR; i++) {                  /* XXX */
-                       sizepb *= NINDIR(fs);                   /* XXX */
-                       fs->fs_maxfilesize += sizepb;           /* XXX */
-               }                                               /* XXX */
-               fs->fs_qbmask = ~fs->fs_bmask;                  /* XXX */
-               fs->fs_qfmask = ~fs->fs_fmask;                  /* XXX */
-       }                                                       /* XXX */
-}
-#endif
-
-int
-openrd(char *name)
-{
-    int ret;
-    char namecopy[128];
-
-    if (devopen())
-       return 1;
-
-    /*
-     * Load Filesystem info (mount the device).
-     */
-    devread((char *)(fs = (struct fs *)fsbuf), SBLOCK + boff, SBSIZE);
-
-#ifdef COMPAT_UFS
-    ffs_oldfscompat(fs);
-#endif
-
-    /*
-     * Find the actual FILE on the mounted device.
-     * Make a copy of the name since find() is destructive.
-     */
-    strcpy(namecopy, name);
-    ret = find(namecopy);
-    if (ret == 0)
-       return 1;
-    if (ret < 0)
-       return -1;
-    poff = 0;
-    return 0;
-}
-
-void
-bcopy(const void *src, void *dst, size_t len) 
-{
-       const char *s;
-       char *d;
-                
-       for (d = dst, s = src; len; len--)
-               *d++ = *s++;
-}
index ab9613d..5203f84 100644 (file)
@@ -1,5 +1,5 @@
-#      $FreeBSD: src/sys/boot/alpha/cdboot/Makefile,v 1.3.2.2 2001/08/01 20:52:58 mjacob Exp $
-#      $DragonFly: src/sys/boot/alpha/cdboot/Attic/Makefile,v 1.2 2003/06/17 04:28:16 dillon Exp $
+# $FreeBSD: src/sys/boot/alpha/cdboot/Makefile,v 1.7 2002/05/10 09:26:28 obrien Exp $
+# $DragonFly: src/sys/boot/alpha/cdboot/Attic/Makefile,v 1.3 2003/11/10 06:08:26 dillon Exp $
 
 BASE=          cdboot
 PROG=          ${BASE}
@@ -7,6 +7,6 @@ NOMAN=
 NEWVERSWHAT=   "SRM CD9660 boot" alpha
 LOAD_ADDRESS=  ${PRIMARY_LOAD_ADDRESS}
 
-CFLAGS+=       -DLOADER_CDROM_SUPPORT
+CFLAGS+=       -ffreestanding -DLOADER_CDROM_SUPPORT
 
-.include       <${.CURDIR}/../common/Makefile.common>
+.include <${.CURDIR}/../common/Makefile.common>
diff --git a/sys/boot/alpha/cdboot/cdboot-4.0R.gz.uu b/sys/boot/alpha/cdboot/cdboot-4.0R.gz.uu
deleted file mode 100644 (file)
index ba205fb..0000000
+++ /dev/null
@@ -1,1555 +0,0 @@
-$FreeBSD: src/sys/boot/alpha/cdboot/cdboot-4.0R.gz.uu,v 1.1.2.1 2000/11/27 02:16:39 obrien Exp $
-$DragonFly: src/sys/boot/alpha/cdboot/Attic/cdboot-4.0R.gz.uu,v 1.2 2003/06/17 04:28:16 dillon Exp $
-
-begin 555 cdboot
-M'XL("$LIUC@"`V-D8F]O="TT+C!2`,1]"WA4U;7P/I,SR>1%)C!`K$#.S`1-
-M0M2)C36W!7+.9&(F`358T'@K9()406F;MJCTOP))0$5>QEY4VOJ8B9.`C[9C
-MG1#:&@V/W^*KC6^NM3;8H+S$H`'1*O.OM?<Z,V<FDX"W_;X?OGPSLQ]KK[WW
-MVFNMO?;::S/FVYW"_GA^B;W'N>6NR9W^NV9TEII=[O[6%5N5RN_=G,+^<+X5
-M\O:U_FWKP3M6;)VEBK0OE1XG@W]2\Q<W5]"GG#_\/[,V%#`Y4KV7.8(ILD,U
-MP7<K<P9E>7]U(&5_9293!ACKOR@?TO&S,<VM:JE.56'VH+W;[F6RI)I<JAI(
-M\:BG(A5#V(ZQ/+-6%,@<OA8TR9IJ90Z_LU113:Q_-^8[2WUJ*O,=;$R[7M4F
-M.%49RKA805!R.3P(CS%/T`*_S9`^];Z@RJ1'%(NZIB`%8$JY?U<D^5'5/K'`
-M*\GG>=P3?`"W`?K0JC+F"*>X?&K@J^O5DTGPTC]Q;/OR>YQ-D?=@O!9T6]C,
-MKM<B#:];UDSNM"@5YWF;5VQ]EL9T&Y0;A-^':\3O+?!;6;MBZWNSQ.^U^)OE
-M.YBIPE%WUXJM?52O"=+3H;T=:V?`&.R'=NW!;!I7+=6AX6\K:]R:PGP?,JHS
-M'>NX%&W'VOE!O<P0],-W]^1.'^#PJEN4LT&Y>DASW3FC<T?K?)[W(N6=FM+C
-MK(,\ZYH9G>IJD;>;\MZ%O&;HIQ?R[[U:\F+>,Y37"WF^U?.#B"^VBV-I87:_
-MA3E"6>S]IR.1"@7F,62#[ZG0WUS;KLIFUN!8OGK%UI>N$C!N!QBFLEV5D8BC
-M1,MQ>%LFGN]-@SZKT!Z6EZ#\P34KMO[VIZ+\;-[FY,[E+2NV9LP1:>605@[E
-M3:S",5;NKQZ\8T6GO_FASN8[5VP]A^K9#/6^K!-I#-)<AGI-:V+U,JG>NY-[
-MG(501KE[1J>.RP;*ZX4\?^O\H.^N&;SOKCMF``TZPKTP'M#O</V=,X)Y\+EW
-MS8R@`I]YV">8WWJ@A?7+J/\`8SF,Z5:BC:7PFW&:6[`5:*RCC;WG1)I$^JN#
-MO$&B/RO-[[4T%V60I[KS'3G,>MX6P/]71'N3$![@_"?ZG06_+5`W#WC`[^;3
-M_$_J<2+\P4DQ^"&@R\]7BOQ]DV(X60F?9.LC9*B/Z\,*>6NA'9U6VR8A??=7
-MZ^E?K!+IRR'=`F//^/A\6CU6/E3]3?,X%?MGI_[-G10_+CH>C/YA^RXHTV=L
-MGRWHRF,KNQ3V<%>&/%B=)1^O#MT]HX.Q],Y,QCX8A'F0J(]#YR(?/-2][6Z<
-M2ZD3\[Y80?V'/#^O5_/4%I[?\E3H[A6`P[K+^X&>_%0NQ&%DAK?=_1"VT=YD
-MMKKK;,R-91Z@,AMXF:QPV]WSH4Q1>ZY+<;></+\V5[:[[[U4J2TM5=SWWJ;4
-M8KH$:Z;TI+VV#M;+1,)S-J^?$69L6C"%\X:2H`2?YS(VU$:XR]2W%ZG-/*BS
-M+2%O-^5]^8T>9R@A[QG*ZX_F[>_.8OF*#7AQ=+[A$\8$^"WG4_Y`NI`!V^[^
-M6S`2>41A[+)@HQEX-<@*"VL)P9B%D,\R-A7*-JJ?(<^.F\\%'3!7'3!7':[H
-MW,;35]TWD!<EG]]"]FP7U.LJ9Z>[5#9SNY<MV%['5FZO9P]O][%GM^?`_*^]
-M>SZN4[]4IB#?#XF^V8-9@#?.:QU;$,R3W9!G?Y3!G*V^[)\WI;#N\_>=P^<?
-MR_K_F-98:66^SYH38%E83B>TVPGM=D*[G=!N)[3;R=B/8O0/<+I)GHGVIFS5
-MVUI,;2V%,N>R596+V<KN)G:Z.P/Z'TC_9^6W`,>VNWLZ)/:(?3G07A.GQ]CX
-M"+J4VJTLXXIZMC)HE9M4+YL9S&6:]@537Q_'V$#+;6H-8Y=S^9HRJ%8YTU;#
-M[]:2G:P5Y*+3XX'/1LD!WPL\T*?I0&/4OVFAL82WWMZHL*1DL(H(5E$HPZ5J
-MBV&L`^EN[56@`Z`7^QB`FPE_V%_H.^3]H[(2^JRWMQK:$_2-^D$ECGD)MKN3
-M@<Q(<WK',:4_$FE0`N96#>?3"S"R6*6V19\G5CP;QV6,W*A*;)6],*$_F2Z?
-MYC30MPYK"E.&MMR]`F!<WZ[/\5CY:/4X]M/+;?*QZO&\?&R.GYP(.@*;$OXF
-MK,=T/G='*@5]]<3-%V/9,%>NRZURGY;+2C0-Y@CE>"!]FG:*QL0X3L^A;E+6
-MK$TF6F6L\:SPF43XY`S#9WX"/AEQ^$Q.P*<)QJY]O$_UX=S`IU2N>$Q,@S]U
-MH`[HC#%G&-H))EO/L#9Q37?`VNQH'D5^-$U(SK\S8>UF`.^VVO94%H)LVU,M
-M^J9.$/K2-J(+"VN%>5ZEZ&L5^<RYT-<LF/^`N1AT/F5`8A7V"3#/>IT8C]*@
-MO(>7D>7WJ]/E?U0COS+"LG#^%E^/YP'L(Y&*`:R#/(5HKCV7%5W!=3;Y2#7R
-M=\;<[84@]^XBN=<\7N?+]N!"<Y'FAK4$99Y2V$R_##QE,:<[)]>GQ-IQAA+'
-MUV70#USCAX\?RKUTP]C=0F,G0UF=A^O\.Q_Z%[J[!_!_*&CLIYOW$\>P2,W%
-M\<'U5*>`;K\`ZCE4H"?0OV6@GQ3H[U3HK^3.E0_#O'IX?V=1?]ML0H:GPO@G
-MCNT_@,9,(&.,_3/*`<[_;?'Z17H"_I,-_"*&?Y&&\R0S#=9+8_M>T#&@?/O%
-MMZJUW[S55XLZAH76RN"X'J<$-"\U*1XS]*F7="Q]+?6-$[IVK$V[=@#P7@N_
-M41XTP7PMA[';06W@?"/?8&Q-.\(Y1N.P=MSHNDRR?[S_X\ZLWP1FJ)H=<+>P
-MV4%3F:H:]>I`UU3U&Y"'^A?JH4U`#S^[EO2?L3W.#)`17M"1F];-Z(3ZG3L@
-M_SCA_`;DUQOXHX5E=9;.4;6QME9M&^B*SUU#_`_*`1$,@:YL-[;30.UL@/QS
-M(!]Y?8H!'O)?7">72L!W4$=DR@$KZ(&EI=A&"V^CD]KP`HPTP'7Q.M07#U7C
-MV#Y`>)9`WM%(9'=B^Q74?M98H8/"'N-$4S/H[NN$[FY/D`<XCMDX5J`KZGK1
-MK?\E8.S-A7T#X)4+>*G0MCJ/]#](A_)A?ROGSU&ZV0+IZ=#G4ZMQ'U#C=Z?B
-M.G<$L7\60[DF*"<EK(%$G2B1;QKYIRMW.'W@VD>9&HGD*X%YS`T\;"@PG[E1
-M=PQ<PMRP9H8*H.^!6YC;`6E65M-A@3[G`K\8"_4LH'NN74[T;T7=,Q_7_3#:
-M0MT/::>>TTX-IYV%-"=;H-Z8A/&UPAP@C_"UKMCJTOL/Y<Q4#N>FCN9&&H4O
-MQ/7?&N,/7J"-0M"K<IMH_P=Y_;1NQT"?D7X0!Q7P'83]T2-+1;FC.3W.5,B#
-M\7(@[2!^.G_HR\'^Q_9`P_8_D!\:13]-AS6:#?.!>`!]0I^T4"2RRAXP3]/&
-MXO@1S@,_$NWY`%X&X)C)5%@+AZMS;<]'Y\1)<S(]!VDK7W6!#`Z8->T%>9H'
-M9(5V]UR[!^D?>?ZI*K+_1.$5:UF05PY]=T&;K\J_KL(U]#SM,0Z.@3WONIZ.
-ML8;U"3).&T.\XPK0#2XV+]'LI:I;6;>B,X^OP_[JL:S!_=_R!1Z$]33!>G`,
-MMGFH>@?TZX;+B/^-01V7#>GX]1%^36/$VD2=`^4!ZKH6UGP`RY5"FU9J!^'_
-MBN!/1_AH2X&T6PE^(:3EL.83R&/'$3U9H9T)E&^!_$"7I/KG2:HD*YZ7RQ3/
-M`>`9QOFT`.V5LYGA7-N?*BWL>#?NQ?RG&UX?2;^I.XOUV98--)B$/I`N]G%]
-M+*/33+SF>_]'X'I=-M+<X6Y&M#&?:,.3+>8RFZDG^H2LZ\@PS!?2RW=8A:,-
-M8/ENH_FG.D6EBM:>?J@R,%[5=#WNTTC#D)/H3*]W%=7;EX7V`38P3<I0T_3Q
-MA')U4.;'9%L,0YE,H,-]L"^Q`B_'/>\[/Z/UGX5]2`_K:WXL\/E^6'/?OIGV
-M_SR_!O3Z65ROUT"GQSW#/MJKF\J8V\AK4#;C&(VE,2K/$GOW?6(/E$0'';Y>
-MD\W/8&:/LVZ$]8MS=.IN,0=?_I#L/YG(K]@`TEE/(G^#M3IX]XQ.M&4@+\PG
-M>MT`=3!/MP.E$W]:!NF9,#YFYOL<^=UC"?!P+=QOF%^I[/G*2$0K<>=HWM:)
-MU=[`+1ZUI4SU;(2Q20?X,NC!1OF:#CS!!'_&<4P%GM,^OD"UE]I5:;#"$TAI
-M5'?:5`_:#Q/+WL9M#44P-T4P-T73TT%'QGZT@7[72W02RA#TA753(%^O+P,>
-M7)_F,)V0YM3G,=I^X`%%A;VDYP3086+;@1-3U6M0[YR+Z0607L#3'S7@+@,_
-M;4_1U%TVGV<V4V&O,S`,CU3C>/P+^)2AG(1YQ3'6[=-?=WR-8XEC^",:PZ7I
-M9".#L3U(]#,.U@S2T":RRWBA#*X_7`-S:(V5\;1#/&TVI2F0=HK;487<0-OE
-M?*)=&?)0!J3KZQG*-',[Z)'J/."ECY(\?-?2XUP4R3^%NED_P'Z3^,\>"^JP
-M1Y/:;T))]%G._Z".[PSVFS&DQV;*GX"L_+0ZMI[V5M9Q_(YQ_/Z+\)L.,$$_
-M.X5K\*=&_H?E`=\:W?X-Y?S7,/6C2#[,Y]XX>W/@E@+U0]B_6>=BN@O272(=
-MYFX_I#/V43=C1^#O:#?JV:9E>RO=P_29P]4*\4WY5M&F/TW,)>A*\?1\7[&:
-M0[8[U#%ET'7CUA;0D17J(%T<(EASTX3=4-=3A\&\I5@=PV%.0WO6J##?()@L
-M3=@KLP"FE<,S]/V^0A7I%\OOI?)]J5@^.YS.[32'@%>I!Q+QZ.&T71+,X7O"
-MS*CNO)7TE0T"1N?Z2#Y/#U#Z,DB_$V1PC-\EUX-U6X(_0=YR_2]U9/F:0315
-MOGYRIP)]>N(FLG^:Q;K!M$Y*.TAI2#^_UVC_8Q9Z5B[TV44P?DGE=YC%>L2T
-M^R@M2&D(8QO!:(,T5L;4=*9HN<QWP$@_.LP[J/XB*"L!#MP&T^/D]E)<@UCF
-M=BJC0IE"JG<;I968A8[ZOY)_\LCR3U^?^E@JZX4L_(\?D/R74:[MK<Q;CSRK
-MG_.KA;>3_*<\7>;-)A[4+`N99P&99UTO]MI3J<XBR.LQK&?D58%Y"M^3!>8#
-M7^?[%_';QO<O"M>AK:!#(<V>2S0[248^AVUD=!KEH07:PW*Y5&XH1<BN=,/^
-M@ZV/[3]^E62]GP+]>3'TLY_.<D(`XS?CF9H-/,H*_7Q_"?4?TKW#Y/ES]E30
-M4?V@MZ,]KB0A']([SV/*!U;@L=C&GZB-V2EX=LB&TH&'Q>L;.G\4_/N;I%M-
-M@O+?8.Q@)`*\(*<HRN_&HRX/=9!V#A*>@R;4F]F03E,Z_OL@_<-(_H#%,'YF
-M@3N,J?+!%C:E<QM;T*E$&E['[[BNGR!Y]B#4]5-:)Z6MA;1ME!:@M&4F7"]'
-M8(_S>N58VQN5XVQO5BX#?3L7]"L+ZSV`<+$];"<5VDG4UW$^MD`^CM7M-%8*
-MP.P`O-^)/'>`07HG]<=";:$\LQ,M#DD]S@G,?P+WL(/KD(:%S'V*]OQO2#&9
-MNXQP[H6TY9%'#N`<8?H/*7T;I/\D"7Y8YOM49HV$NF-SM&Z#+O^E1-O0<-X7
-M&FG_*R7G?P?7B;5U!?7%`N6:6F8$TVUV;K_44HO40(I=0]M>4\N*CL4MN!>I
-MZ63LXLXTF%\+NPKV)>H'_01G.L'I9<`3;78-SPFTU&(.X_B(YSIGWA\UL>'X
-M(Z\)S6#N:2!'<$UETQQZH*Q_M=CW3`:>C'LGI-E+*+^`\7,RSJ.LI"M8F9#'
-M&2`;]ZT3-%Y$Y8<B,3E00&G]D1A_S:>TES&-U7;\(])P`FDJE]+#D)X79Q\3
-M;1^G=;@Y(MH&WL]IK(_;26JYG22/QK,I(NP_N,?::[!M]=,^IRXRG#84H_TW
-M8CB_G<?<J8R=1#[62W:4W#C\<CM[6U=L_9SP&SK=XS3!VD?XN,YQK]8&;0=H
-M+;T!^4W-?'\5M<=8$^RSH=-?KWTKP)=H;I:-T'X+M3_W+-IWG1[9/AK3`4`&
-MK8G97_KNY#04PO.6-*.]XT2U6HBRYLW+U?/XN<$J.]('[E]WK)O?N1=HXANZ
-M_/\*<`=\_>8L]3CP&X0O[+]2NTMR:7-2B]UH)_P6^1VL_2I&AU::XQMICI=^
-M%=/C_Y-D4_U7R"M\)PI)1EY'9=6O1N85KB3ZD17*]YX>W3Z%8Q2)/&?/&F&<
-M!H$_*"AOQU^!^N%0X+XK\%QD:%Z"_&)L?<<$PWBB+NB29CIT^]5/R8?B]B][
-MG-EHOY(6=*+N&C!K:*/DML00K!%<'W4Z_7\IUL=W.'V(N=A&<]%-Z[#D2S$7
-MJ&>]!;J^F`O-7YM:RWE=D637D`8DIGS$V$T=.@_&<4VE=@[^L\<YCOD/Z?:I
-M0M+?^OZ).J!?2^/MBSP[Y84ASY^>KN(Y*]JZGJ#T!R%]"&@"]U=,JG#X\/QJ
-M,>D__T0[MN^`D'O/1WU=AHBN?/\<71:H4@+]_W/T\_$LLC^B/1AYZ1]N)/^/
-M+W!<5]D#Z4LU)_D;U:3^0$.<_3`'C.RYQVA?N?<+8<-`OO@_!"/\!;?Q=)[/
-MU-=1C\IBZ@DLL\50_SVJO]90_P6JOPS2\`P`<6A'NQ1S>-Y#60+U=E"9NB_$
-M_#?;U*J1QF2T\T7K%\/E"])\_5TKMN;0G!S]7.B!$NQK0/8-(1VVK8O9<7Y-
-M?=CS.<[-X:2\>$3[W^<CSX]^3I<U(G]:-8P_>3E_ND*]C/.G1^S<1@QXKJ4U
-M\0GU*>]SG3]E<OZ$<_\=&M,O3V%_XWW.+@1XF?+[<?C7I+HUG,=R]I-.&_-]
-MP.T%M#X7TYB$3L7F];L$_\%32!=%05QCY8:SCC6G4->,]4=+G<7I;3FG%XW#
-MO8K@UAO@SB"X'L3;I9+?FYO[O;U%]%)"9913(Z^?YB3^0X.?C7:^!FOF+G%6
-MBWH2?(\[/W>GUFC\3(?M?UJ<[>ROSC/T=_-G`E^-E[,'/]7/^`UP)W"X*SK$
-M>,_2^+AQ>$7#X'D^HW'%<\A;%/5EN=@CX&,]+8B^=P%SB]9B4SU'H:W%M%][
-MA?BD_)G8>Q42_\&]T)]_0OSOI,BS0Q[60SD]D7C2RR<%O2#..KW@ODO01Q$_
-MZX8TKH?_\L>T_SG);31#R?"UWA6;OV.TQT79]RN2^]=!7?1[V&!3/#CF-:EW
-M(QVB?YU?VFSWH'^A:#=2K1C&I^"D&!\?X&\!?)"_;R);@X7RL&_H^X?TIJZ/
-M^?YEZ?K?B61[Z9']DT(GDNO?.*=H,S'QL9D6_#)2,1")--B-]87OIB;ZU:9X
-MT/;B8@NC_9D+L`/F#+0=#*!-0(R;\/<<A''[,&&_\;_1OP>'AI^O&^=YG.%\
-M/1%?]-DL-^`;'.+ZW`#R:[2[)N+\\;!]PIGQJQM*MC\8K`[,TS3TVP`]PO$9
-M[`T3\49;6QR^5CN>[P\@ORPTX#SXJ3C?-^+)]S-)>'Q2_\=/D^.7B$]N%!\[
-M][M#/0;7RY_I+&#QI_R\!<;G4+5^WI)L_/!,]^O('^NG(_,WU`TRN6[P">BE
-MXASH91A+"?0H!>1,_?K)'$_N_ZOO?S_I<=:13MI-:4]^(GQR=)Z6S7G:_`[8
-M'W*\O>NY;P2O\SC56?Z)&'>]S!`_^\M7BN+L]8DPT3?&N'Z<L?F]5_`%`=/)
-M87+[&8R?.]4$>N!"*.<D_H$^-8YA_&/@.+>W=N9N]E6A+6`<Y-O@#_F#3'*U
-M]_B9]>\X^_?QY/XYZ"^`_CE&7X!%Q\4>`63""87-!'R+P_`)8U<:%+;F6-ER
-M*IM*9;&_%BAOU!<4LK=4D=XM<]P/59_I7#W._WW0X'_,K%';KHM@A@:'^PG'
-M]1_R>\_"?S.':-'$^K]">'.A'[CW\ZY&ORHM?)#;Y7:66%A+20X+E*0-*I[G
-M4W=Z*W-:O*MM_9X]J2W>JIR`]P[XGBKO]LCR'3#/C262S:'^B35Z<YBC!&B@
-MY."85N^BM%;O@3&[O#>D[?*:Y:!'&^/P5J8N]$IRH2=%OL$#9:=;6/MT*#_=
-MBCZ'-K>J,:?W1ND?WC1Y/\!]?WH&WT_\W9[,IC*>VU1Z.A:W/)3@;U>$\P2R
-M2?D`]T9\_=/9RN*/:2_,Y:76(6PL%P#,$@X3^;WP"?@8]+TCU>>B'DJT4`)U
-MQW!:B-^/X3Z\G^R93#Y6?28_/37)_K'O&/`WVC_N@W7<U+IBZU/4;OB8.`OM
-MH_0G*/U!2-]+/.(WM)]="VE;X/?/]?4/OWNI3`>5601I.TAG\>OZ_S'N]S.$
-MZ:'U,7_\;93O@OQM5.>_*6T2I%F@#J;[#75^I>N_'^$Z[[_(RF;ZI>,5,)\S
-M0Y=)ZNM6VZ[H?JW^^[3_@[)6:8HC#_>QD+\8]@US]//OC]!^R(8@OQWR.ZM0
-M#L%XP/<@COT6XGN,N7D_;Z9^W@[U\B2Q-A>0_K48TOZ:(,_;:'SF4ST/E'G-
-M<%["]W\?C<S?<7UETO[/`CH/^I2W4GNGC@H;>8;!/[1F`NS!Y`LTE$^H&U:3
-M;'KY*/*:$@W/\U%_"Z3/TI!?I_,UT&#'WUE<OLWF=9$6"G7_YZ-D]Z!Z[>,5
-MOL_#^GK;&='[+J(^CDL>X5EW5.C06%><APC;J97R74>'\[0$VAZ5OPT>@3W\
-MZ3/SISIIRG;]+.,<D@5AJ)O#]XW]FA7DI=HB_+'1AM5'Z[H-RN!^<BW089VT
-MH',<G9/DT9PV'1'[VU_`VLT&^'PO*)WN'E.VM_*2A/5<#W0EN105/L/<EXZ?
-M:8JS[%9NX_=P^U6&;6]E8+R7^[5FR/^HQGU^)'(AE+LPZA/(\V"_FSG75Z6?
-M6?V3;"'O'@::+TM1T9_C!M+G]Q[6SZA1MJ9O1[W`@O:3Z\G^?1C7W)*G$,<L
-M5A2RLD/=*:SY1!;,C7Y>;F47=&7#;SR#P'4V%G@9GEN8::TM`AC/\W/GC[F=
-M_E(:Y]F0[I6$7WPZS/]W6/,!84\L\H,..G@-4U]OYFNMB*^7>V^A\U^HI\+:
-M]<+:Q7TLKMV%^OVG0\(?"?+;<Q@[!F4ZYYUN>#T+_2%'6+__17"?.81]+4)_
-M6`_J=5Y:RS?36#UX2.";DS!_RP%>';23Q6JX;^B-!&_I(:2!!KLY\;R)%74\
-M'ZDX@?!UN7L5M5%^"'UOFN/.$[-A;*QL0X=5_HBOD6HJFP5E3T4>.9%HNT@F
-M`WP)]J6^@\GW-SJ?_M8--/]0K@G2^F3F0=Y1KM/_0?(_@[9-93ZMW*"?##\C
-M+^!V5]/<Q'/NBU`?'4#_$VF9JJ48_"\D[G]A\(D9KW(_]?:N*U53N>I!7G,B
-MP??""O`1]S3"_>B'0HY9R<],HGEY`](S`'X&M2=Q?*4+ZW*DV@S0Z]LFIM6B
-M#]J;='X9_!#OM<7C#O,WI)"OVDM4[O8/Q5D4SM%[NO[_X6AGN"/[![L^'/G\
-M6[];P<__Z<R+0?DF2=C<6Z1X>ONNY#N0R;\7E>R$L;+/*5#MT`?LA^.DW1N8
-M.$N]6E(&!D&GT+C?NMUODF>H<Z3W!;W`'".O3I%3U.M8@U*7`%_/E^%3+\,8
-M\"_0K19*E5[TO6&L<KHH(^.]D9)=?,X*H$P!E/%0&<_TF0#;V)X%8)6-T![F
-M9T%^R2CYV9!?,$I^!N1/&B5?@7S;*/GID)\U2GXFY,M2HCU]"<S#$J\]]SPU
-M<)NB_A1M?G,3Z/VK*O4':!/\ZC+U9LQ?-CS_^Y1_/>1'X5UJ5W'_GNB_9!]_
-MGJK?^XG202GHH)<ZDY<_4:RF1OU3$O/.4^UO*]X46"L2JRG!M;J3:?'MSQVY
-M_;@ZA$-JLCJ``_+.X>GGJ94F)\@Z@#,WOFT9X#C'WP#C;N!'QG+4'LI)YXF;
-M5`G*.4_<H)J6Q;<AL<;H&C'.)]!QB9M5>ALE$`6R`VC6.3T=ZMX;Q_\2?-Z@
-M[W=#>RESXWW4VL=?I`;&3^.^:2U,'3;']MS+>)\<I;/5]F[@?]`>^DN:^/PY
-MH2^%:J!;47^"8P<T9>)]7!@="S.G"_%[;-QX&,H:QI__/EX<]0M-.G['SXN.
-M"]X7ES:?&6<\6TI!&,OT.1!XVZ%-^P/-WA16H<;E&_#'N<Q*P"<>U@CSN7GD
-M^42\TR$_ZN^W#'T+D\WQZN@<GS/:_-XWC8\?ZF,HRQ+]X^-AZ[QO.'],YG?8
-M=AKT<>8[D,B#D]4WR1EQ/K<CR9W`+3EN?MXWWNQ&>=%;-M5C]*=9`7KK:/8[
-M_PG9'9HG0UVK9\3[7_T]SK:SL`]XV93M=6SF=JO\"=>1O=SFL?]IE9U^VL=.
-M=W\.^E$=R+EOD\]M7K_0S3-!E_R$]1\X3\(S*FA7SG>@7ALB>3CX]QYG-I2K
-M!QA_3)@/QTFM)G")ROFK#.LN,$]5%\#WIZA<"N@SQG6*\YO!^9-/2_!='L@$
-M/3R2(NX7=@&,"K2/\OKIH$^DUZ(N\33L'_$^C@_Z!OQIR.B_@_0JX=T$!KH_
-MU&O#W[R^4??QP'K2U/8'Q'I"&ZB/+0AF,Q5X08/]>.21`R;Y2<TX]\)'ZZ/J
-MTZ!#_S?HPSBVNEW95.8;II^AOV'ZW'B\;P&\Z]F4,/J+9QKT?<03]=KOTV^]
-M_RMPG8.NFN5J!CI]%'U)@-:G):7U/<;];L)X)_KMUL(<X3C74'OU,(YCN,WW
-M2'4N\(X0T$>&C_3_OPF]=`)33[`-DSLWPO[XVH3YSX!Z1G]?W"\EZG>C^?L*
-M?5',SR:8'\:*H7_%^#D=<=H)8XYG+N/H/`;W8+\D^TC]WX3OH17F"^T].'87
-M2[-5]*%?TD#^OU"FZ*2]AH]K2HWZ`LQY%L.SDEK@2[7`EUZL$7RI>#J.Q1/C
-M%36SW%>5*=^DX5I(G-]*P!GO![38FJL*D8Y'H)6?`MX*^L##N`5AW#)U?0%^
-M+X'?:8;?/X7?*8;?J^`WZMB%M']O>K?'68'W/&"=HC[\#5J7]>^BCBSV,>,I
-MS?.NV"M/)7BGUL_H4-E,;G?#^^KXW0OTCG>S53:EO6X"<UO+Q%W\,/DL,H`A
-M[JY*894M:+]J@NH6?@7]U6/+5#?>79Q$^Z8W_AK#88CJ]_(T@>O'E/;D7\_L
-MOX5[JZ8D]K6FOR;7WW%^3JU?T1%_'HOG?.G1^R)_H?9+_BKN0G`[R0JW=B+A
-M_&(D?U!N_W@G\?QGL-HJ'\<]@#^PPL'7.^X?]I#/4"^4/\5MBC4P[K@'D,)X
-M+PQ^AUC"_;YX?][D[3<9VL<]6?M"FO]W$N]=C;#_>>?LX@/H=K`<DA\R\YVX
-M$O#[(N[^S)%JW<;C)[M&W_\(VZI4UHO^I[J-QW^4^X,<J\Z%-:&R!L<66)?3
-MJ,Z#4,<_WJ*NAS4"-!ETWJIX/S_M5"2ZKY`I5=@#YB71^]0.E"WW_8R?N2#=
-M'ER]8FL3[0OK`)9R*X/Z3,GC\$3^8LIW4?XIR+<:\GV4;Z5\OSE=19NHGE]/
-M^8/[*/^^<]0&O@>.W9_\N);L?_N$[4>O6T-UPU3W!+1MA*U1_F;(;SZ9XI49
-M&YP$XX5CT7+2Z3V'*?T@WTXL!GYPJ6'\RUM%3`H+*^*V\30Z?YZ]C]MS!WP;
-M)O,\Y!]YM$9=^Y`G5-A7`!Q<,Q<;X.GX3"9\9`.^609\QU/^P-N0?U+R-E^=
-MXIT$^8GZ+<?_:M#G!\_WV+BNJARH!YST_0_>V[>RBH)LF%,+\Y^HVR#LMQ\1
-M_#5O"UROBNYO&NS&^RE70MXLP^^U0%,39M/]C[>%O3:-J0>\&_!<[DBU;M<^
-MT$CGWV\+N\)%P&/+H5]_HE@O690NX?R6,177<Q^-[>!;XHX!CKT$LG#Q:C$'
-M6.9/^OG_6SC^6>%TX(61_`J0A_8JU(?P?KI=<JCVDW9ONFS7"EE)%^*G$GYC
-MR<_MUWK_WT(\C@)]'>-YXV#MV$!?1?\A%\#/Y/1W%/"L<.":POQMP!-N(3KT
-M<%SOX6?4.&YF&"_NQP5E'J18.@IOXQBW'YY/ZS'KK3/:B)/&*>#VKS=A+9\%
-M?]'OL"!_R9`_!5XSQ'5/D+U!!ZQ_L>9KD)\.!>Z[%L_TAS#^`M+?+60K6_1F
-M;*VJ,`:P;@9P+>KZ!U,J'-A?]*?K:X7U,9?X/]0KYVNCF-/;'/W^*^*.YXQ\
-MS(]4H^^I\0QQZ`V<U^*@WRRI2[G/=7$P4V[47`#+2K!F$JR];\3#LB;`VO8&
-MWH,6L*[%>218&<Q_((_5^@7=:+#'BZ<;R`N"CJ+FL>)P(;2;1^TJ.O][`WUL
-M!:PZ&'<O'_OB8#W()<"GPVKS:*)O#0XK6Q+%)P_J9=H:-86/2X5#`7P1;@;!
-M/?6Z3HM'JA7>EUC==U]'?WO1E_.@+PJUS\L#3<K$[W]+Z^[)U_G8=`C]"'7&
-M>%PV0'[F9I^&^HG]/@7F=F8H#_"2T7<?]%+$*WK_UX`7ZB=&O#R0AS`0+YG\
-M9NUQ_&ZF7Q\G7`.P7W98^#IZ@:^C1RD>U)>OB34B1_-?Y/EZ_*AW7Q-WLJW$
-MOWKT^U^0;J&T'906@C1%^I%V1KOR"/?#FEX3ZPOJ=>?!^E)@?14"_BY87^6P
-MOE187UY:7RB_Z]B"[4)^]W+Y/1`GOX]%Y7>(YL;Z6NR,QBB_W\(UI8B]X`6D
-MVPR\&KV/>0)C'[TR[/Z'.'MEBIC_B_3Y?U7<D<<]4&`BTK\RE,']?F8%80_I
-M7555H<R^S%[0;M;4JX#^03\/.B9<X6UIK@"=P%Y@O[3`BWFS(,^*>?<W>,?M
-MU?,</,^#>0;9;*&Y<KU*YS*LV&\'/H-^5G8>KT,YH6R<W&GTIU#7QLO7BW3_
-MQSXA7_,VQN2K2O/;UR=DUL_X?<X(\?]`54'".LZ6`UK^L/,+PFF>HMK0KH6^
-MSQN1[D6Y//9X!_"'$Y:-@J:<U.9UU.9UP^[/5`R3E]]-D)>U)"OR^NA\$^^$
-M$_Q,@O_E7P3\F@3X:8#?*2Z[CD5EZQC:+^[]BU@SNFP=_![1/Z4;9>OG-*Z;
-M_R)D*XZ[!//1VQ*3K8-4INDO0K8.4KN(YW[:[\S]"\;?P+W*S+#@"1\#[_^(
-MWPVU@3P;#S3F(MF)NA_(7]KO'JTVZ3(4_:6!QH->VO_\!?<_N$=JY7(T_GY/
-M3)[N)?KJ^S/W0S^@GU?\3O=__[/8!Z&<O9S60?#/0L["6MX*:QEXP`+@`1BO
-MYF'@`<^B?T&'U\`+^/J'.NI9R%<?F[)],9NY?3E;N;V9/;Q]+7MV>R_PNS88
-M&[3=^.%O&_SM@+\0_)E`_KX&^_`FX!<I((_+F9/38F.:'?3L2O2I4MO8P\%`
-M6@&7Q0>)K[72V.][I<?Y2U/"^1V,F\(<P;5L)<BL1G4+M,UC*C"'H//T_96[
-M#?YRC6D;M"W0ACNU0,32N411NV*Q=-!_;J@?V@68O.WKJ>WK7A'W2I;P^C.#
-M-:EV;1\O)];FM52N[!644S7!0D@/I,SAML4^*%=J=KBQW)54+@O*[:7^U5+:
-MJ9>%3Z?`<27@Z(3]P<*@&)/5:C:/)^/P%TLM&)>S<RWZ(\E.%<8SF"O/4=$_
-MRM^Z`O3=ZV/^?P#3V&<<JT!:L3I9P.I<S*8`C<_1=/WE;8KEN/1E<4?R":!A
-M8Y^MT"^]/07/;WG]8O?%YEHWMJT8VBY\&<>B*&@W%ZLH'_T`2\>EEN-2#.-4
-M&PRD.-02]#<@WO\;\OL\^)*P`^)^'_4LC*&J[Z]??@GO_Q1#>[7!(K-#1=T&
-M8V.!K%4SY87:.+QWJ_S=[F_]*FZ_#GRQICWE0C4#UO6+LN9!V$(O/@QK)!:O
-M:RG`+S(7:VB7^212<4*W.;Q-N,V&_!#TP\*:J4\+./U:F9WC@;082&O!\Y0A
-MO<\:]%GD+X!\30T!K>Y`G)EO(+Z,QF&8Y(5J(93'V&X[(*\]I57-`!X?WUZL
-M[`ZV(!PKOR",MKSE4*^<%=!::-$J(A5#.V`NI2$%RLP,2\<5#W[B.IH.M%7.
-MW/Y=5ZE>+)_!'+/'2.H!6-\P3\Y@IB1\-7&.JO3[7R_R>X5A66(#2`O87B$K
-MZ-3IJ9+H:=*+@I[0;ZB7Z'Z#;O^!O*'H?DW<+\3Y0'G^';*KO?L"M&/.4"]"
-MOR.J?[MN_X&\`:H?HKQ;*"\(>1NE&#_=1OD_H/PUD'^'(=]/^=^G_$4OX)W1
-MF4$<(^"3W2\FR*<M5/Y:*E_&RR\(XOAC^6<3RJ._,9Z[(X_"<9U./!#YU`P\
-M4WF[N<8/8RC)!:!/VOTHITLA/8V77Q`T\C6,$U0(Y>/C_7ZH(N^X#'@'8^=Q
-M_H9^X0C3+,M:'OL^T.R=L.86\7AA"JOBM*.P\Z#-%K4]35-Q/Y#'#G0K\)>>
-M*(]=_6H"'NK[0%,";Z1#)^P;'&@K'T!>8^)V]J/5A<P=T.EQNH$>=T-=Q\G&
-MFM:3E5[[2:T&;1%H-VYBZE`;C:V)QG;?GWJ<2+M>SN./@-[9?,C?^K<.O"<5
-M7=\<CP5\_X(QCU64T[`'@'J=8C_RP^@:7\OAK0RFV!IA+:P,!\SK-#P76$OM
-M#M"=.!^4:Z8]"^C_/.]OE.>!/..<(?WF,7N4_E?37;-)?T+ZS59OC.0/%?'R
-M,X.X/\?RB!OR4L6`V]'G!>]$OGE#)'\@L5\<;UG@G3+D$Y_'?1[1C_6\'WA7
-M)=%_!?OXHGR!)PMH,!QYY'/D*W7LX?!RZO-6ZM=2:!_D>V?B?N4VBMTSF_(3
-M]RL_HOP2R&\BF#\GF'G/B_D+03]01]T&<^/CO*62RVP\3TG&L]"?QR@3N=R&
-M=3&$L2*`QNHYG"F=YB@N+W%<9A,N_O^+.MOI;M!1@NM8,X]YEI5D/=GY_C4^
-M'J/>;@UOMXBWF\MI.[VSY7Y6FPE[1>2'$NF.9;RM*6&,5]8$[5GE-A7MV#B_
-M>>RFZ/QF03G15R,.+3S>4CW&FASOTS".#)YMH0_:&,(9??,4[IOG"$Y!_3WA
-M?I#]@>8:249<M6"@2U5Q?Q68IW%]"L\$]'P+ET,/![-AS9L-^F8L?V<'XA=(
-M7Z_)XJR7X-J#'_`SB5[`SU_U+8"KX_5-*%=/?L\N/%/M;;!+K'9JG+\<SCW`
-M,HE8AD'D3Q@OT,+>]Y_+^H_:Y_5J@;3]P$-0UFS57'>MV/IM\@_;MUN/6RQB
-M0I21O;%WMZ!%'M,(9,PXR,?Y?YGB6?EWQ^YR?DC^IAMVB_''_ID);P?'2\2$
-M>Y//0\S'2[]?-W<WRKN907%O83^'^1KEE>_F]^G/&'NS]PSV\\%=H%N<A?^C
-M?D]41;^V4>ZKC4FXKR;NBU[._2TD%HG;OZ']XOFX_;NXW^G?*.ZR5=`>:_:N
-MV%VVP_RNK8B1V3C1#KJ5QL_"\7>1I*F!&0H?XRT;9P3E!'Z$]JUR:6:X7)KB
-M^`/LFW2[?CJWY:*_^?Q@VT8]_D.%HD+9#4;\8/QOHIB".W;V.`$.OR=^'Z4%
-M(6WM1G%WO(W2VB#M)X2':^.*CBPY4PVD+-5^@/)T8V)\V&G^A7Q_,,V_LP[6
-MZ$2'^@[PG0P;VIX.5S=O%+$GM$6T_@'VU=QF>KAZ.>5]F_+R(.]*R/LVZS^P
-M%O@1XHITW*K;OWIU^A:^G[=3>C]/5S3K7(7'\_J`?.3V]L;60Q.T5<Y]646\
-MA.^3_238*V@?;63+82U-O)+HOQ?WVVP`\=#7AD)TW-2+]\1$?R7Y`A5M"I&(
-M=N%5.5JMU?9VY6)HZ^<3JVMAS]5N@W'`]FJHO3)LSS`_H\'Q$9QQ!*.<8`P^
-MA_<,W^;W#)TT9^\^A[$+V1#"0UZ)-C6<LP>X__&Q:A?`8B9A`_K-=63_A#KL
-MM*+<B;&#T#ZCS_]S>)>M5Q-K6-BE6\@NO^PY04/ZNO\KC?5USW&_U3.N[3KI
-MS/>GK,\EC[^$=U!PO6*\!)S_+\DVTO\LC,=<QN7,C83/R\_&YIZQXD[T^[74
-MD_WC6=TN'.'W4,?:7H^[T]+V+(^#*>)$;HS=J=U'=H2F9Y&&*3YVDAB3J3S^
-M(/!@J-NW&O0S:K?\6:(ULO>%:1Z49X4-S\I\GQO]L9?2NF#/"G]L[T8]SI;P
-MQPX3/OT]/<Z+H_'N\([VGLH=T.XBFK->R,]E[)01]CR"'>P1L-6-L7@X#Q/<
-MM9`W*8$?%;*9_EUC%2\;%+8^M(^S7K=B!GT4QKF+0?N3#?1M8_D.;.\_]/5/
-M[94G]*6%VK3UQ&21A^:2]8C8@N@[8B;?"*3)=VG\^I_I<2;>,4/:\X]@OPT]
-M,_+]@TPZ$^%W1X%7H-S.-MA'TN<RM^[SCS3X/=W^]PSBK6BZWS^>9\,:.8GR
-MPF$8#Z319\EWO/`90:-&/U_]?H'-<+]`T+"=T]*/*+;LT3^"7EV*]]`U+97B
-MO.TC>KN!RNS]8^P>PD?\'N.A,\:QY_>?_CCR_2?=1]??^E!'1AG&[TN(3U[F
-MX_BBOY<>*R"/+8VNK;(_XEP5PUHIYFOE4X[7D:1XJ2.=__]A]/C"?9&&U]&N
-MB6-]/8WU,W\0:RP=VD+<C?'P<)[13P9Y02*^:_Z`_M'Q?FN?C(+S6<6__4-R
-M_[%,/08VT-4*FD/Y#VCS.E(MR37`SS5M%=\O+M%B\93V5/9MC,4!^JT>_^7W
-M*"/V<!GQ2X*UX_?BSF.<_R.'.XOK[(RY+\0Z>P'>:\Q=B_!^1?!N-\"[D^`M
-M_GV2>+E0IG>CN&^_@>JJAKJW4=T22`N<4#2,QXMY^ZC.*JJ39:AS$]4YM4/<
-MOPQ\9>?Q^#%_!]7[,=5[8T>LWG54KW='K-^)_<5^VG,][L#;TU2L%T*9^\94
-M#\*\CF`V&V!6$\RE._`N0_]N(^YU5+[.4/X[5'ZZ`??W"/=M5,]-]?(,]2[0
-MYQ_2,FQNQ%E;0W$#IE#>P>[A_O=-9^%_'^H^\_W&,\5Y0!X0N$3E\<U0!UV[
-M:4:P&,8C$OF[?;"EIR.;Z"*F3U_!]6G&?L#?AM#WW<@?9R3$@\5UV+Q)Z-,W
-MD^S\<KNN3X\9ID^CG0!]W/!W,>C3$UCS`;3_)_J*8?P7Q'7YIEB\M"G#SLOP
-M7+:HLQG:/DH\H!G:ME$YC#DMXHD[>*QO_?[@==N%;U[@$C?&XQ#QR3?%8DR_
-MH.]_MZ.?#>!:SCRCZ4KJ*/>W![OB_9_J6F+WC>%[@GZ>WEG.7)!?%,8SDE5T
-M#_#)+A%;`.^G'=PHWDXYFWON_/RCZ]\;'Z2.XH-<D1`?9#'1P&%]_8>'QP?Y
-MYM6D_T*>&`<-]$SU@#&^K0_FH9#5=C)V$\S'NDX7>YS/R2*:$W\X%K?C2H*W
-M(2Q\`]`?M7Z3V!]Y*:^)YXDX7I64=AVV3^5F4IHWC/%YF@_DL>*.7![G$NFG
-MIAW;\@).&-N?L24<%XUPL1EP*2$XC+=7U#$8J3A1SFH[7J287I,HO__I,\</
-MB;O___1P^4DTU)$HS\NA71/@#I\8#V)H'/)WBIWS#::>P/O:<R7Q6T:_5+Q_
-M;O2/8H>Z#VY<@><]01>KX?8Y?(,#[W^G<SO1%$Z?"MJH@#[?)EM&UM-HWYL9
-M%._O'/YZ][]_-_K]TFRZMVT\FVZD.$B;?\?CJG,^H1KXQ*T&_;H/8_]#&:['
-M;D+9>X3+WC[]_N_OA,_G$JC#]7J#CUXW[;%*?B?.>K_)FN-T_A_1N636[X2>
-M["+XNI[<36T<?2IV'^O_D,_0OJ=$NT9_+"/L>H(=>DK`+DR`K=]?;C/`OIY@
-MW_Z4\/%`O?LT]6$QM7>1H3W!2[0.]"U!'>OOD?R#&;(J_%!P'JT-#J-_2`'`
-M.!G)'U*9.-OZC'PILY[2=>,E77BVA.?/=83_8`C/G]/#>%\S#_XPAHS"BD('
-M-_+W3)#6PG:SIKG@$V1\%^JCZTWHKROP_S/AORUT1A_8Y/Z?H='CYQOM3V/(
-MOPIC!!\&NLF,HQNQKW33N.>%\#Y]OO+CN'@28@^KG^%'ODOS_UL>JV8`SXQ2
-MXNQ3AZI%_')!U[I\>N:WZ(<S)2R)^`L@AR\(YT);5R?J[W3_3F6GN_$=B!0>
-M"T3#<X)@8+RB8IR>;T/]@QM%G``MM5*\]\?W%B6=8_&>K#'^SV^%WHUQ9`,G
-MEF#<+AX[!^DQ3'X*RF\%/2J;XO>$7^K[/\@_+[K^CG&?`HQ3MX'N)O;_AOL8
-M!:W"/QKFWP&\QDV\IB2,>0K3GH+^=Z8#':C<!GM!&/T(<']T:O6*H.A'?#_W
-MHAT7<-;E>9YASMXDW!;])K9?W4*T6_<;I*LC9_3=JQN!OJR_&9E_2;T5#HF5
-MGG<*UL,&&N/^7PO=0^>_4XWOE>"Y0>\C=HEMX';F=%NEIML]D#Z<>OR#7W,;
-MP9!U4RR>XU+J8_.O8W8+/+=I.MW`[P"TC_=I>%\U<,G":'Q^M`,(^7VT>AG)
-MB?=17IWE?HGW_]?)_<OU]Y5T687G(2B?\`T6/3X=(S^AJ70NNN=)P5_2*%:,
-M[D<TF?*#D'\,\I/OC4=8_T^>6;ZD4QSG+%CW5MOUW"[92_S+]:28+]!'NBSH
-M;W1_A;?H5J4&]-@J^/V4\-FKU)`WHV__5-K#GGH"?2PNX#%6\MCE7?^;^`%Y
-MS!HT\@LK8T&9^U$JXHS%7*I^$:D8&*D^P[CBY,>'=O&O6Y_O?Y\8W7\&=4@S
-MT?(]B??U$NZRG"-\*LF6=[AZK.W-.%O>GL?QS`'?'"GF=S>1!BZB^.=[%I#^
-M]SC&=A0V:;19H!WX/O(E6@-Y?P/ZP#R40;\ENED*Z8L!-\LF<:<\0+K87-X>
-MOU<TU+]1Z.5XCH=QA+'^(U2_Y''TCY@2SN8V">C;(*W1YE7P>?/42NHWUD,[
-MTTZRCPT]%F\#_R.EO_L8V<##P@8^E6AMSV,Q.^@V/./%]U/H3=-MCXGXQ@CG
-M,8*S^3$Q7O@.;B2BP#@KT;<-=+LFVR3L3"\3'-]C.G\X7(WI.GROGDYCJNK^
-M?X_QN^M#Y6RF?^=8Q2NQ$D_`/$T=0_!Y_!_"7WZ,XC39WJH\A39L@#.!X!_<
-M)L9Z.Y\?X7]R*=5[>=OH_M.]H^QOVK:-S']PK!;06"V&<M;-PL[T`LFRN=MB
-MX\U]?&&\;R)\R[>1K"`[W>V4KE#ZM_$N'=7%OLC4%[8-XVRI)Y"_E5*9Y'$1
-MSBY^>FCK\/LS4X&'YH&.GI7P/G(>[!^MH)]#7AAQ^COU<^E6Y$5B_\@,;T^]
-M3?FSMW(=+9K^*J67;>5O3T737Z+T25MC<O1Y2K-L-=HW8OYW@YWQ^.NZXV*J
-MU]<9C3/%X]:B7SKZ1JTE&W2H,Y$V$NR?D%_.!KOK6H0^:>)^[Z;MJ"_0'A//
-MI/F[IN6@9^#WKV`<RJ',V;R/YNJ,WS]+MA<KK<`C+*Q"R6,S0W5LRO9Z-G.[
-MCRW8OIBMW-[$'MZ^G#V['?9*VPLAW07IY9"N0KH7TG'^MFP2O@2KJ(\O=^`X
-MSX1Y6\#]>04][@?Y_7[U(-#>?;K]'\JU4=TF2FOKX'J]PP)SD4F^";=WB/>W
-MN?SK./O[!2YV(<:&!%WG='>RN%.VN%C>L7A3Z3RF_,<\WMS%^ON_08HW)^(S
-M!NM@S!+C>F.\N3JQMQS*NP=UF8^K\0WA`+WQ%0Z*.$HZ?7O9F,YZ&`\[Q?#<
-M'.3OP@WHZ>=2^NU!$?\W(^IG\!&//Y0KUVI8-I=5N`N!QAZ@V(VS@R(>))11
-MA0W^<AY_"/N$/.1R/?XWXB-GJ;J]NIOD0U:0SH3XWO%CSD?JR5=L\-$>YR+F
-M/Y!!>#0:SB=TO#\B//9`V2S`&].]:V!]4OJ3C^I\ZDBU]1[!CW3X;8]2C'L\
-M&P-=Q`OC=P[E+7M4/U.X7!N`_B2^+]+$K@CZ8,XS9$U-)S^NQ?`;W_P:A_?[
-M$^0W^OX&YMFYK]5B]L,@VN.YWX'9R>/:)MK>353^!/JVT%A^0;:3?>TTEG06
-MN(C&LK=]^%B:J3_!=M1[FS\RCL,$REO;KH_#X>@XO$W^2DO;\=V+V1KVUVYV
-MJ-#GL#'VV[`[J+87*E&?PW@^/Z1SZ\)V\8X!WNGR@FRN8RMC_B_M8GZ\%`^O
-MA?HR%,`U$-/?%G'_9[%77TYE^@+H8S>&Z_%]T-=U-.<[`LGCA":[\S!J_/O`
-MR.O?>GZ^(P1C^!7%VO-`V5[X_1\4)[4,?I<+GW[^SI8%QKP)<%]"^;9`\IC_
-MZ--3OO:A#IU7Q,>GDSK]?&\&^U:@\9D$:Z^?8L]B3.M[8O%Z;]#C/_DI=B+D
-M(PY>JM?F'_Y>`+Z?>0KXY+W?J'"DPOZK$,\G*1Z6#\KO:)T?E/@YL/W".3GV
-MVGLGGE];.OX\]QRYU)T+?_C=M"S^G'@0]UJL5$58I03+!K`.;HJ]OSZ-WFS\
-M\A%!#QA;)(N/Q0R*R7FH^A30E%V/__.(D*-HY]A,=7LAK1]@]@']?DSEGH2T
-M@S0/R6C"-YK]]Y'D^E$N\'O`B[^%5L_J.M`N4\]<81S;XT0/98^(M8CS4L^T
-MKKW\_>*%VG2T`6<OU-#>ZKCE6A73\B@-[16R-$U!_ZEIB?<K(/T"2-?O5T<(
-M7B[53>'Q9WQ:`7SB67;@OJ7X_LK0.51^'\F^IVCOOOEA?/<SMK[Z*/\QRE_V
-M,/*+6/Y>R@]0_MR'T7<@EH\\H7=3+);H`U2N!,JE`.[(XW9L$N_<GZ)WLZR0
-M%[6?KA5[B'+0.4*;9@2W`9WC7-XK:Q[]OL?/R2:T[Z&1[`ZQ,R&N_SV4/+XX
-MLS0H5E;$SU!P[W4N4S^23A4KL+?[TFJ[4K/*+BW7=I%VL52KXKYT%>FGOH>X
-M?;H=WX"'?#>^*0\TK^D^RF/ISE_Y0^+.D00P8!^.>Z2#V)XD*RI\ALXV?NW@
-M@TGN?P,<].5[@6+!IO,W=HK\]DL$;(O@$R6]3/*BGXV%VP;SU63Z9=N#9SX?
-MRZ1XN8OOB8^7B;QX'^GHZ$NOR27T]K*&;P#QF,B!2Q7N'X!E7^%Q@(5L>A&^
-MXW[PL?%VC!-\0+(^4\7IE^4K5?IY=<)X8+UG$`;"[5:T?V(,AS9_U03RD^@R
-MP/\=?%<F2MYTEJYB3.^2DRTU>%X7YQ]9JFCIK(+?CPJ82_#,CN/Y*-3%L[?/
-M(OD#DC50E<;]9X7L>9#Z:V+J@8"Y1N/[?VM[50:52<2W+5GY.C\OGZQ_:ZB\
-M/G9?4$QAOUG5SN8,;=C^YY<C^Q=E\C@"T[A?./8=Q]Z?<#YY(=EB'[R"Z/^7
-MXIU?'HOM'N'3=L=_DOS[)?KFL(&F>V9TZ'OV/Y-=K?"7L?WC?Y".:_ME[`W*
-M^GMBY_J_I[4V]`OQ?H$N'QZEM?_N+W2;4CK7%VXA>'M^@7JHRGV$A7U#^`;-
-MIS49_`7W&SM5=X_@8_KYPX9?B'>$4(Z8J.SR7PC[]'6&\4CJ#T1W!/$.8`Y3
-MA[P$6S]_<!E@'R'\)T':>`.=1^\O6<3>[CCY^@QMB>VOEUO$OFXLP=VWA;_/
-M^13FY0#-V-`^#KP(VWF5V@EOP?,UN^9'^:C[OVZ)[3W/IW';L`5]$?,5^S#_
-M!OYVD$.]9WYG$UOEV`=U'B<X]5O$_D1AT[J0?V)<JO)[Q%NPY:R&C\%$PK6$
-MXRIP>YQPRS/@828\Y"UH*QG9MRGI^=<#\?Q18:X.O<_7$*Y//A!K?QVUO^6!
-M6/L':+S7/)#\#?!1XY\_,)I_U:?5B(_"BF`O6_,[M>6AN/=7$$^\!^B%.=]#
-MN#*`%[B$J4[NH\T&7#"FY72O;#?M^=^]'\>I`L:I)(2\83+-6R'(@/$D"PYR
-MGGNH6CTM^(G^=D8AT6>(8+7=+_S)^'N#4.\=C(=(9;;J]H_[<:Y]!Q`^\DK@
-M&>$SQ]@F^^?](\L7E"L*F]6![U@%+E'=B%]&W'G0\6KC^;F+%>,]";<IJO]4
-MV#$-=59\GT9MF1]<P,?%P<=E0@(]\[)I=M2[^#L/+E;;?K%TL7;Q2:TV,,[M
-MUM]\^;G-X<'8XG?#N@J8LSAOU.M^`OS;Q3*"H_EPQ=E_[TN4W\>1)O@Y)?*F
-M;Q$]6NX3\:51C_1R>7WF=^C-907N7%L!Z""E)7M8J;>@M%FUL^:#H!.X\2Q+
-MCVV4I\>SP!A7AGA4>%_`7CJ;QUV3,.Y:KD=-8:M44YD_3G=_U-RHGL=\>'_6
-M;88ZV$X:M)/"WP"N!'B5(K[5B2K^WNT!E'$\+TG<3RBCQ_W,Y7>.F@\:VUO-
-MXXG>J+:_^7T>(PM]_R5HT\;C=L7C%;CE?&Y'15K$6*YF@).(.Y8Q<YO6U)*=
-M;&HT)AW.(_;CD\@CIZ01XJ1Q_?^_88]V%O8?/`=IXO=?3W?S&)W$RU>2CWPA
-MP&EF4\+<YLDB7$]0@)^?))\?"[;#%@0MS!&\RH;QBDV=$H\_T.!FEE6.9O9P
-MYWC;*Y7&]T;>^+F0#VY).;$8[=BG[`K>$9XI*4,3<*^,;XN"7#6#[ER(\:UI
-MS_P@U+L$8XRR6AB36IBW"K44ZO#OH`O@>.6X^K6W$^)=FVQU/-[43MCK2\Q=
-MDE)6I^UBE5['1$W$UX/V\P'.@^SPA4%VN.1)EG%!F+UXX1_9BR72YN]J\J#B
-M>3MU?VU5SG[O';9FSY]2]WLK<Z2:U?!];ZI4X\[96=L*W]]*W5E[6<Y.[YWP
-M?:)\X+(T^1\>BVRJFB`_?]DS@',/*RY)V7R-MLM4Z=4RQ1TQE9W>[F6GPW5L
-M2E<]>V^[#V,YW%_A==RJ\GP?6Q`"VACVAO$O#/S%S5:62'/W5NYFC=Y*-K,$
-MWY3%OMHGVF&M-'H\F+993W/PM"I,"^MI3IZF85J92,MA3K66PWV!PYW%X;X0
-M!W<VA_M"'-S+.=P7XN#J]K@QL$9=L!XC::A[:%7GX#H"6KJ>:.F9MA@MC96/
-M:E?95/?9T-.:-D%/OV$Q>GH<[_2XFK5FX'$8!VXGF\;?^K;?UE*3`;IS5IR^
-M*.[/_@_('`NW78KRZ)^O?\?[((&4*[0^/&\V7Z%MXFOSI0LM[*42*SM2DL<R
-M+\AG3Y2D#/JJWDI]J=:3\Y)WC<WG>3[U):\[YXBW%;[_*?6(5\O)K&F![WM3
-M,VNJ<IX`>O)Y)LA[+DN5=WGP#0"+;*Y2V,TE=FC79%ND[38M!%IQ`"TT`JV\
-M![3R'M#*Z7`]T,M(M)+X7G8V?Y_:GQ#C3N'\#&E)/Q<6[U/'T]HKL#X2TZZG
-MV,/()Y:1#LWNZ7$NQSMC_)Z8T/GNH[.[@4V8MR#8),[XP]=R.GN)TTC+I8I7
-M<BF>Y11?S<+>[_YWT3/*!"--XUW#Y=P'H3'T[Z)M;`-QSV,+P\UD!UQ%8W)T
-MH]#+Q@^+9UIA3TF(C[`\X3[6#PG&MHV<_W*X2RAM\\:SBSO4-HK^6;<Q)M\5
-M[MLUV*VW?26U4[(QV1L<=/X/>:'/SNY\(9O.V;V6E=L5=@5_O^A:T,LL[*:@
-M"6CS:N8[B+%X`NF-ZG=Q/YH6B=N/1M(<]A<L;L_=M]EK,/9'.D/]\TI/(.U'
-MVDZ0VUFVO94;Y`L\R$OJR`^Q:0.>;5T8K+$I()/&$`^IT)"'V.2CU:KE68>1
-MAZ@;!`^Y%'B(:M%EDC*`>OW%B?.'<?#-K9JX\U<<-+&+/"GR+!7K!=*X3C*D
-M6E:&\3?:G>$3UL6N2JO-XL8XAV-AG-$VDZ?O_];W.%7+@F"VW*XA//2)P3=7
-ML/XT<Z-F27P/T?)K.Y9C%KN"Y=BIF^UF/IZUP12FTEAJZE.P3KT`0^+GA8U=
-M9T,S=9:S.Y^T`LYM9S'_7LN4[>GD7U7'Y]\5K(?Q\%E$W'T+TPAG.\=9)KWH
-M*\/ZJ+<(F1!)TY1=%KNG]3;-.X8UJ/66E1@GPK\8QCH;]48N5S"&C#*`M/`*
-MG?<O6M?C]%HPSD%!<#'``KFB6ID<)U=L&&\O@29*H)[/,B7\#MK_B28L1!-O
-MQJW?58H/<-A#\S3&U:OIN&3(.RLS;,#"^=@?>5J_^P6?(?T=:!TVWO_`NAG<
-M/ZL8Y$ZQ5^8R:V=--L@LW<]"LGG0#ZKD_S(-]!X_Q;OVQ.L(H`^9V'/*'66*
-M)VMS0,WZ<7-5(.T>[5=HIYV+-IE%);O9(M"'"H#WJ9J1]YDP;;.>YB`^!VEA
-M/4WP/L:6A$RPEF3<7X$<<H(<PG09T\LJ8SI7G7B#S''K*NA/14'B>S(RJ_$[
-M;FWP6B!/`CD&\$(\[>0":.M1KJ-AFHGW6\#$_N4FZ3>>4:V]!\]W%I:`KEYB
-ME)\6PE.7EQ96$RK$^-X)<,\=83QQC]I\ST,`VU."X[;+Y`'8!1P6CMERR-O-
-M"KR)[6#?KI_C@[%9"&TN"64.[W^[M<RCY<*^^K4FM19Y0ZY^_^\N]"$L\N]L
-M4KPFW'>+N[W1<RND*YVFTD%?N<A\5--I!W46_3O&49K$^@_@6L+8!H&4`-KN
-M!W0ZY3(=U@RC->.Z"]?,2E@S3E@S#X,^MDD5^EC*&=?-T)UBW=3@'0"@;0L+
-M=,ELEE]B[VL8@PIQ%7,Z+50'^$@\=M7[W5#GC'<3F\Z2/S7=&2_?T+Z+^M]5
-MH.,E^D^_`FE&&3?E#/&G%587Q'T_?S]^ANI&^V\J4S_(U>]3S%/=&7CG/7H?
-MP;%]3-Q[Q0[@\78W?'+_1IP/N[E4Q=\ROY^1K\2]+\],02,^"FN",2WE-%8@
-M-2@F&$L+FQ/"NQ7(GY@*<XIT9QAK*!]*C^)3ZF?-#3#O[@*L&[\FYH2L[/C3
-M6?"7!W/O9:7<9I+X_I;UCMCX-IJM;OL#BM=ZQ_P@WHD/?<;<)L8^P!@',H^-
-M-C^8SBJ4<='X_^*=/_0+T^TG.([I7)ZJ)PL3QJN0QJN0QBO17I(][/ZC*6B,
-M/Y7'WV1[O[K00*-U:T:.`\OM'VN2G;\<C_J(7TAV9<L:8=,=P]1#^IT(M(\<
-MH_R#JV.^8&C'VT+I?:N%#B?1?"=_>V]D_Y0VJ(_C8#:,@[XN]/D:U?XW2GW>
-M_S/D6\^0/]@Z4K[`OZ\U1C^YW%]1^:"<E?+XY*>A[+BX^3_>#339[8*_<C8'
-M^9<_#63N:IOB0=L0PL>Z"I/X^7+A73#^=$=A<>MP'9;WOW7X^91,=RC0?\$+
-MGV8#+@GW+7A;&"\9YWL;S/>Z:O)_:<$X:.G<]NDU^-#WMZ"_TJ&SOK\3:DE^
-M_H>^M1G`:Z0R-<Y.U7[)96(_-_Z';KZ?D[F?[\`7@/]EP]XO4$Y@OU0]?@#@
-MI4*?\&RN[<X90?@.>\Q#W5XQ%D/[5L\(>GE:.N?]A:S!H1KZ)O.^I8>G,38@
-MQF9_-W[FL?V@[ZB?%TN'*\OQ7@GWG7*$[+F:QL^N/E/H[.H0/Y]"G,X5_L+!
-M24Q[2L"P^_>N%F^M79Q66XME7X5Y1_FS!=;3DS3/S<V(`Y^7L#CG.51](\#4
-M?6#CSZL.53=#WI<CK#M._\TQ^I!@S,>!_IJ#<@_TS%]$XN5%XOR9D/Y7C?9^
-MSO'J6R5!:\LDU,V+@C^!S_;[?'@VJ&1"&^MMJB>#^_4+>D/YQ=_*Z=;4&Z'L
-MWGOBW\HQL?=OCLF+(O]%$K[1=:2ZG"T)6NB,U<+?SRH*XMFJE=MJ:X*ZW@-R
-M/B0-VCT4<SL<&,_?OQC"><NF-=P+;>);.`*FD]O46^X'^6*U\[/(2:S2CWYL
-M@30']T,5]9RA'5#O/,EXWTC0@MCO%_EEPG5D/+'_6LGSH.]B&MZ3*V>/`0YW
-M^`LFMGAE^4[5>;+%J\G7JXUFI]J8AG]VU?&9'66?JLG`BB84>!U2BXKXM7X+
-M9!W3Q/?[5:^]&_Y@GU8`^04`)XTU#PC<IX9"@/MGB?X,UCW\31'L1QKUXW[#
-M>P*8;C+T[V7V]>8"]6LK<^KQS\,(+\4`;T<4WMVCP%N"=R_%.RV@PUN9A^\K
-MK:P@G%+F`[A+.%S9`+?]:\.UCPC7;("[@?M@GAW,D>!AC"0?E$TEN'C&V4GS
-M8J31;3!?+DX?1=#>_J<?)'ZBD!\.GM4.WKEBZP?:]VXVH?_S[?1&.^R!TOF<
-M%@6SZ3ZD#B,_P9Z\3IY5A?=JKXZ.%\:]&BO@VS0WRI\K"/[!_T*^5,-E%MH3
-ML@C/C`1ZL1C&2_TWT$NZ`5[)OY%>,@QP)_P;Z273`#>%VP#P#)_>Q_@:;22'
-MS_D5T%!E,`#K/-/`F_Q1>A$T"SIXZ-'3D01Y7Q/4YPW/7!+M,5\EZ.NGD\2Y
-M,/I]HWSH^]G(YZ^ZC,CB[R<_@O$TN*Q(X78<NS_P)N[MA6Z"=Z[0#UC$?SQ:
-MO1=TD=]6"=I;^C.,*27BK^$9'>+Y#5[^$<7'[N;C@O'JD&^WI`(=`0\7[P@U
-MJ/:T%F]Q*<;A7<=E-=K"8^M(Q)K<!W2^C-IB/Q-TKO/#LSEG'4D_Q?$)+1_9
-MO]_$?#`>TZ+ZV=QA^MFL((^OUL7?XQK2>0/6P?5L82_!/FD:WP_^$^I[$NUK
-M[(F@*-L",JZ%OS.&[Z2UV'H]^1@#ZI[)'3*+*+'WE18#G565[&)57IT.T:\"
-M]2_9U3SL_2C]3`_Y@<QC3L?G%T@#*IX)GE?:R^5:X#8?;_L`]^.?!GO%`-#W
-M+*+S:4#_3\"^Z"7J7TLH<%\S?U\#\F#O/*L#SX<+OFIX'7YWP>\N'!_C/,E)
-MZ/E,]&N]+:8?X3T!O!]LXG>%[5R/Q'E)B_)G%Z>;-J`71O32=^O(^R\^_[>.
-MK/^:0/]=S'6"BU$W\-OO580OU*4*CU5;QS(ZK5S_%K'JL#T?;Z^(KYU4OL],
-MY['6&.B0/YTCRDSG90X]70)_NDY<S_7>HK`/]%T+\WVHWT?&?88.6[X5[QFE
-M0YF,\-GXQ_'U?\OHZS^+;.:ZSMUDT+FQS;9;A-PJ8>H!+(-Q'?WF^#)+;\$U
-MF1&>#/JP#F<LC_\>*^.]!>]E9H3'0!G[R<8:]//SLF+HR[HNQ@X_K>]IL;^_
-MXOHTQIB-IQ>QWRF.[G<0[N`RL0_",3:F[UMVYG?.^?QC?1@?!=]O@?%QP?B4
-MP_BH,#Y>]FQ7'7NOJY[>7\&Q:F,+MC-VM,/"2OP8/]G%7NHH84\$ZH'6_6P!
-MS.&T8""%VY=A+*;Y4=^S`W]#ONV%WQCWTRXY>3Q']"WCNO:EFCJ4H@R<2M"U
-MQ[#WX_@7QE9<E^(;:&.GNYVE/HQ="C`N@C5^D=>>=H%WC+RS*J>L7\NV!K3`
-M-7X-X^E(@[U5)I?B@?48:OV6XL7WP')Y/&/Q'AC&)`S<HJKE\)GX?O.F6WMK
-M+OBQ7\L8]%=M2GVQY@+I<4WHT]-"?5#6:GNY,G?SRY5C;7^N'&?[2R6>=RQ?
-MLV+K[R\7<S#WISS68/LB-K.]B2WH7,Y6=O(SD3M6;.VE,JZ?XOE))L;_'H*Q
-M[(*Q?`KC)\/XAA@K`1ZT7[.RV<2#2J"_1[LPMB>,=UCXXQ^M_C+2X'@ZI7^W
-MCB_J;F\!?OIOU&E?,_Q.ISX,<IE<$HZUBW;(I:.T.Q/:G19M]RMH][Z4F#S&
-M^%\7IZA\?ARE*LS/@I'GY[-'Q?R8CU7OO$KQ.@`WU!E`UQG2\3OX;\#O!P;\
-M[-`&R*.0'B.3^SL!#9K@^ZXAM'&\7[W6H"_BWF*-X3>V/Y;YHO/T=7"!==-9
-MFQ*_GK?!>/TG^@3"FL%U$3`W\OB[=>SFH`KK*6!>R/U7<%T%4BKY^8-Q327N
-MM\7ZBL5+W88Q4`'?9+A86E=LO72>H,$GFWJ<;6Q*.'$-GUU[L?4L^K$`[[?`
-M.,3W(\O0#W,"7%TN)L+#NY=CN6^5/O]X/C5[E#%?"?V\.:Z?'YEB\X]T:6&S
-M`O@N(,XE\&$OQC"6V"IU'=IQ(7U;DO0B2/?SF*$?\W=OVEI6;/71V#7]"-^G
-M.,1CGMNE8AY3'L?`)->HV%^$YY1N@OZL#%MXGXM5I$&4H\^=KAA&?P=/Q]/;
-M#TUGR>^Z`WP]12KPG&%G%?I>8#O8)VFPTA/H=G*>W+)=]4J#3OY[HF&M]0];
-M:U^/!^%:^WE"O/U2WK;SLGNW*[6Y\&F22AUU>,=$+E5E+F>71N55X0_1;SXS
-M/#:.#WZ]]8Y\\,>&^=[TULZ:"UX-:%G\/%#T$^:?VTY:K]:\IC85Z'(:MZ]@
-M7/FI,#[[[GDHF&6(9SC%=);\C.1-%KO9C_2CR05<CB%LU"$UP-L$L@CWN[A?
-M@G(AG1];"(>6J^U>J4T!7;21[Q$>36E4#T56#2&.7#>^QL'7U3Y^-H;QN_Y1
-M#?N*A+9N#FH\]N[^IW&?F@5R#_U4L,_MU[C53R(-0VG</C@-]G:9G;FVZ[6Q
-MMD6PY[B9RZ9ZD$W:+#$GFY<*W6<RUWVR0->;!KI';,Z683YKT&"==>&^WF2@
-MI__M'.*:941'.&_FV+P%<`^5`K3;LEWA-&R2[$H6S2?ZG+0#;PF"7%^\YF]!
-M<1Z!=0(U_!U0F-_<A/N\B-MVZ>S6%\)!&!CO#O'0Y//XF.-:PW%7<(Y3,<:&
-MYG_1I7IE)OD#GTG\/5%==\@B?0?GR"U70EE3"/?6D!ZZ&>_CS#,!S\7S(F7(
-M\:JDRC!OF):)Y\O+@#^P=:H#\,#V\!VZL=#7%-FCQ?HS,_AS2>']0;ZZA>M8
-MR?LCX#1R.,>!)G0<[=R^%^N;F4U5-Z7N@;P@X+_>C_-@8D$UV5Q$YR&M4N7O
-MK8XWJ>WCFU7TY9S$>?YP&G+=A'>$2*<:QH.^'K]''O1C@_T3V\<]B!W]7@WK
-M$-\/XC)G6/R_@6K<1_([PB#+W%P7-87LI7Z06>(>R$F^QM>?-3TN@+%5V)%N
-M[.-B-C.$NME2^,3ZR!^MP!<ER>K0>62N2W%+MKY*?#-&[#-G@F[X,.Q;\MUX
-MKQ;ZT#G.]DJE;?,KE>-MKU;VP5[OH5HQE@.+Q7I--LY[(0_7P028EZ\B%8JX
-MTZ+Q]Y2'K]FOQ_O'`@\8!^.^&'1=Z%O[6EC#S09=UTS\Q`,X_*O\_?.X\]I,
-MLE,:<?_Z.L)RP%$F'/TW"ET(?>S3Z+X/[R.,ZSL)^H_0)X"'0C[N;_](.OUU
-M-^+^]LQ[I*^K7W%=@?M#'GDZ]&5D=QKU?23][KFK!#XOWS!<O\._>JZ;<;XX
-M]*_PZ\W1\^Y_;2[P[*DESI__?Z^+_`C@_"M]:HBK__5IZLJX^E\/?ZQ?\2_B
-M?]&_B'_^OXA_SK^`_VF8/Z3?'*+?K$48_V[!UD(VL\/%%G24LY4=*GNXP\N>
-MQ;A1'?7L=$<HB;V3VW^N'V[?TN,R\CO2_VQX'>TG:H)=9<OU^OER?'KS]<GM
-M+8NO'VYO4<YP/PCQ<XV`'^PY:E66T:GO-SPT%NQZM"/Q>RY:/2ONJL,XTTE]
-M&M#^:?7[@8^-Y./`[3\+>YP%M[+:WJM8;0I33J+=?16MY_]BZ@>L#>_<!H+T
-MGGIM:/PJ!?=PK;+3D\(:U(NE2G?@*^Y/.H3W3':R4J\LMZA,ED'NEY:8RA0W
-MGIWH:29,FQN?EH)IR^+39$S;')]FQK1P?%HJIKT1GY:&:4/Q:19,L]GCTM(Y
-M?O%I&1R_^+1,CE]\6A;'+SXMF^,7GS:&XQ>?EL/QBT_+M3G<SMR%*H[EKR,5
-M`VG,-V`<SUP81RR'>NKGL"<PI=XQVVYN55N^I:`_D=H*.H?]`8V?KZ*/$*ZO
-M`G.+:DHU0SG3J.44LZ2NC32<5"::O-"&)T8O;4'Q1F7S``/=R%36'+T[<\?$
-M\[VHGZ;`.HJ>U\*^)O[^$.Q9S%7X%MD`Z(-#,OD(Q-XW*BAQ7-*LHH\=?)\.
-M[86-^4=`=WK?8'\91L>)_AS\3I'!]]Y<JO;*=1[A[_V/ZL\2['MGBD^#\;TF
-MP1I(X7=)<3V5ENR"^4CVSOU.5NG%.<*]'?JK7<S]UF#]Q)U'B'KP.1W+89DO
-M8-SU]]7Q]P?P.XH7M`][KP]DO!]<QM3$]WEDF`_CG&"?\3YPK+W2DMT<7T^)
-MFWF\C=(B<0^'%4SGN`*-(0QL=PC:A73`K\"+^1P'O`<?A:$"#!5@^`B&,CV;
-MTV@,'X2)=\!B=>J@3AW4::(ZKNDG@7:-_3-1S$;N+P)U37P.1^Z/&'\7X.F"
-M\:^C\:^#\:_SZNWC?7(=_]*)Y_/X$R)>&HN_^P7T@?X%C*?'XGOQ]]<3?/&2
-M_VL#?-J\]E(OOR-G[\;X70[H3P7L&^9`WAR.4V*^!/EX9RZ'^882Z^,:+;T$
-MUCK++>EEN9!GB>9A'#)%4J-Z(H[#3A@'[/.[!ISU\2H:1G__?_"U),$7]QU(
-M=^\@W8TPUOS\Z[IX^9C'*NQY;2+.7%JED(E'OR?>/^6Q/FV[*E&N6U:OV%I-
-M.OW+W\,]9K[J:IL?M%^";\W@^7(%[GV^U/UCRD'.83YC;C_::'29.EH<,<2O
-M"6!C/;R7R>$:QA_SZ[Z7_'P59;R%J0=&B^>70C[ZET?C\V-^^H5U.>FU;1/3
-M:EGSBJV=UY+_PW_B/=TBJ%O$ZV:`WH"Q@0Z#+"GG,ESS.RY!OP4MA.?.`Y&*
-M+PO;1-P4O,L;IK,Y_W^*&'/E;2LZK'>NV/HM@K\6T@/C96Z?#TQ&>8JQAR3Q
-M'G:7Q.V[>8GOAUV2@?;LH<`E8]!N-60=_AZL(AOU?8Z/W8]["'S?54YRG^>=
-M2,4!!<I9VV)Q1.X@W`>N!1SG*1K*3XF-?+8:=_Y][?#W!_!<4/<_W40TMO9:
-M\E^!.3@G]@XQCR5<172V",I8VB:3_TL_CQNZ@'#S7HOZ(;Z5'A_/=G+<[TCU
-M.7'R,3%>A(A9<"6]7QUQ$_W70[_-Z>H1X`''(OD#)KFWTF3SJ/%QE_94SH\T
-MO([Y$H^3)/QD_TS]VU8__*[3F>+G<_JO/YOW0XX(_(&>VNM%>^50SSJ8XS%!
-MF<`\DYO'O)EO<HL86)*;Q[N9+[G1?A,8+[D5^'UE(GUU:9S^:J+Q]=WJ3*SW
-ME9O;N@-=;O7;\%N+YE_)R\^(\J-B&)]B&)_BZ1DLWX'KZ37";\LU/<[*Q/;2
-M9FE_AC$NOD35+%3^>2J_^!K<HXBTG90V]QKD2R+M&4I3(:V']!"]S2[**[@&
-MU]Z1ZD#*35H8:#B=Q_N*7^^/4]E35\.<IQ1K:(]Z3(<'=768?BK7A^4H/X4U
-M?V0WS]("Z27J@_C.$:L%^5SK;4S+J!7R&<8!WPZ`^FU4OPWJWTOUOZZ?">=_
-M5X\>/R:=WUO[I+JX5''SM_;*GJ\<%[V_7P+\K$3H<EUV%?D9ROMS0)=TL9DE
-M*;;G*W=Q?4J\&;-0JB%]H&8ZCEUQJ:IENGQ:-H]W^U&U_@8+KAT7K9W0/!&'
-MQ\38P7]$\H=,S'<"?:@%[XF]13-:#&-UA'7"^S]O9/Z/OD?IT'?Q'H#=C_:F
-M>L&KA[VCY((\46[_T_B6`/+S0'HMMR_7MV',YEG\'3_01<.)=0-=4Y%?`^SY
-MP;HV$<<=^WA_`GW7M^&YPJ*@::XOKC[:S27NXU403H3+VR=\A%^<%A)M%/`V
-M5ACCK]_U4!!Q!1R']0_*AQ#WP+SSR>Z&O*B@'6/33JXA_X^Y/<XI>$?L+C%>
-MV+Z)Q]7)5ZZ'=D8:._1-JE_#XU?ZA5^K(Z2V"A@>O(.4$%</<4`^@NUX@9]_
-MB\;)-#=!?X1R>/]DL$6\&3%2^\B#+HGBUPCY\>.+^Q,!HS%<:+R/EX`SZBR!
-M;`WESX!Q+I/AC_SOVTS$_HB.?VN4S@:P;ZJ0H>U<_E])\O^J'F<%U$/[S6#+
-M_*"86XP]-XV_YXCM&=L>-JY\;B3_:'&WC.O#=55R^X=_M8AKG1)W/Z&H(XV_
-M'2'L+QA;Z(=>TG_F]#@_2Q*[^DSZ6VC.F>-;Z7Y"8V"M8LR6;'R;G.(PC0'>
-M@F]UNIGO0ZFMN4KEM'N8;,;'HKY+WCD80R?1?T[<[?Z*[/<%<X2.@;2/\9&O
-M(;K/FH,\*B-L98>[H2W`[7'`ZW!W(?SQ]Z=HK/!NIAP7[_Q0=2&;UL'?MV89
-MG7H\<#N-6;B.QP,_Y6)%_`W>0J9UQ<7/9Y?#&!1WN?A[%<5A%ZOI`CYRP@P\
-M4K2I=<EQ\S,+RM[4A>^!Z#%M)Y!NY(6VI+IF'M<*X]9C__*I?R5U_`V1<**^
-M9V4O=DFN9HP#'CK#VP1)XUMQ^]^5,?^Y[\.<I>(^@;$@QESVM4T.IB2\9VGT
-ME</Z;5>.ZA]WL@YCBF&L>!AK$_?[.ER-L6%L\+<$\I+!_SKV06N2]G'L^F@.
-M!Z_0:>9P]0R*Y?UJM<A[XPIZ%X'!WI;!?@SV[+C7%?39S^WM>Z,QT0[S.^F/
-M$RUNN6*X/IA,?VZZ(MGZC51G$%S@SR=,K,&.<7OPK0LS]^T[%%T7+L+?Q&,Z
-M'ZK.8NKKB?&<1_/O&[Q\^/TB%[\7H`[@.RMXEZV0?@LZ=H3]JT4LXX"YB,N/
-M0N[CZ/A_Q%U]<%O5E;]/>D]2G`\KB1P,Y.,]24EL1PF28Y.TF/@]Z45^=@(X
-M!';26<`?2:AATED':)O=)6`G`<+N+,20H3L[6Y",XK!,_U`;Q3#;`>P`V^P,
-MVZ&[=+>SPTP<<-@"+2MW'),I`]ISSKM/>I+\D9"VFYDW5MZ['^>>^W7.O;]S
-M3L;R%W8?Y\'Q6U!^JT7\ZIB7?^OFWP[<4O`/=3=_M^>6<A_-L^%OA3GL'ZWO
-ML\G?V>W3R]_S2>[^78O=9G!>D<U@+>X#6<MF$-?N367XV5JR'US![;QW\G'U
-M\';B"_"V=>B935J;U\(\LHXHQA3U@:Q4!?J&9:M*\W\[VJG1WH#8;G4Y8:\0
-MYVS&J<8X)3);F;K&-E]D:DMMRO(?3G.KI-SLMN)R7>0S:&5*EE1-+(NG7JX3
-MAF?1<6C^;S//]9%_71++GYGBGD@QO,),37[)U$O<#U^9_K]M[O@H5JR["S!G
-MK)BVECUG->^;;T%;NJ2?:U9?5@`-`L7-K4M[:%\P]P/<(U2*T_J)R3/?V5@:
-MXUO_F<FOD3;33A+6@XN0-R%X%=U!>,BZ5!/*!=`?B*<NE6$6T/D^I#\NHYX`
-MZ_%G+0UEXV4=T%N7P6_KT=Z;O:&@/YI7'[LYY2`;*R6UU.:?>9OK$/I]2:D\
-M'K/'UJ_5G,Y/0-]/_M*O_9U8JZ.?F5>A[1KE4U+HWWH>R/56.UR\'=CV&EM9
-M[[2B/S298E[\"N-O<EYD6BF6YBES_"@_SDV+QR[L,>TE8X76O];IY?O2>8=K
-M(N[5)?-OTC[_UL\P_SQTME*;LF);>NWCW[!\'=82#SS$@T):.Q_>,JS8JK7<
-M!\K'Q(^+',N6,DQ<-O3_!9,GVH_M]KU.V/?M.'8S3=<,?)O]["`O_QE7;]^\
-MD/ACVAZ';>U]KZ6P-C#">Q;S%\M;;[.;+<7)T_R',GI`3IAI_^F%[T<?OYOL
-MT!0AK)H8("%ER0_M+87VA:>4MLB4UM9^^.!)+Y=]PBVE^/R2_=^6WPMK!.XW
-MHWSOGXS/C.W'?R.7$1?<VB<6@5Q['<BU"\6++:KP2*I=>/[$+N$KD*N^.J7#
-M8\"S'9YV>.Z`9Q<\=\'3"<\>>'K@V0=/+SP/P7,`GH?AN0;6MF7L4<WLKTV$
-M48N*6U2'SU`%BD=?T!NO.3X652(CT64<:X-X.A5]+\%O_U07X8/->$V_?86Q
-M#T]AG_Z-8)=7G0F!Y6"!VH+V^9/N\)CJGSIO)#\W\>B:>(\J^&IH[8;U>KR:
-MY:`>P<`TB/?L$W?IE>R<_V&>_T:@19D:;<.YH@/-HN\HT#S>8N6?Q\Y%S?RC
-M;6B+V0=K%-"`>IJLN-<:5=2.\^8]F--/MB+V_M7$1_+T-`K)Z$*6^`1I%L33
-M4<P;0-J=W>C??1+I*.:;F<?%$K]'.Q(#^(!VMG$;/S!/#/(X?3VJ:;\-O!;O
-M)%Z[<1X+T#_'S\8\PNNR>:>P*2&(YT'_QON`U=0?TO&$:N\3/&^B/L4ZA.?E
-M"/1+@?^?)[`,S(?GPTA_3-P#9<42)D[Q!O@]^A.SOV-I(5PH-^F,J+B>,V&+
-MK(GH;[PK:=:!8^A_6W*YYD"-,!;#&.37P_OEZ.]_X;R84RCL)YJX,F;R4QCT
-M1UC4RSH(RY7C>">T%9K$V,S"(WZ45P21:;@OF7JU$.LE'[<O^)?P^[YKPW+,
-M`V4T"36:?ZI_6P#ZVKK[7@[OUPJ>F-_]1)L(OX4PBV)=5`^,I;50C]+8IP9A
-M3=@*=$F^EV@L8#DNQ/7!>%B)YRK0W^X\#_PJZO:0QG"(>(;9H2+_L5SH#\*`
-M6N6C+]F@<%@MSK^&?#U/GW]OPL(U3^0ZQA6@>SGU<PCF3'\,\R>D#AG'\7=@
-M;+M\OXC%7&MBC&VGOC.$YU-_[D*<Z>Y7'.)=\'=[>A63_T<3-\:P3_O8/0G_
-M<(?1%5'I+%&8:-:E;$Z7Q*3>QUY/`\,U'(]H_X;T!AOE&/`:UDO$&G:E`M+N
-MV.'O=QH!Z=OJ$?9(6H1ONNMQFK^,!5-1%V+Q!N%]=]J17_^_`[0P#>\SL/^>
-M!;K]T"=]N&8,-QO=$=/7!M"61IL;''])Y_DHVJ,)$QVZX-L,W[:D`_GR-A$^
-M4R&\J(;VB^-,:":>8/L<D,<)8^U-7XC\(6`[,3_F\_+Y@QAPY*4F?M/$4'KK
-M\GF%;+-NSU-(NX'2'H'WM`9"&Q2W`N,*^Q5Y5D,\\]-:\@&,@?YM$HR%0:)1
-MS8__F.NO56S[$:@/;2Y%F&-N]@1?1_:J&)]&B3`JVRQOM$VD\LPU"GW35=C*
-MPS8Z//WZ,N#O$S?*1A#28UD".ZRCO+O,,Z4K[IJV0$2FLM#W)V*71=A+<%PX
-M6$RW<,DX]Q;!F!78N;P]WS<B<JP&QX7[K&&60;AIR#=8E.\BC->9YO,B^%8=
-M9C%<"W)?-4\FJQ+DEV&P4=8L/Z)H>]CGD_6Y?-ZH0KE^>ZS9O!^:S3YJ`?>]
-MAN=#\Z#M%;"/=M)>63&T%-89$^M>L)%K:C;E,)2G<,TNC+_73YLQ<-ZA&#BX
-M7V/\,RQC*91AG2M4@7SM^<K4KX6'9+1;G1S!^TN0O>W^]H6,C)ALC&](MKZO
-M\C1?YIH5I`WU`[OM7FJ+J?//AK7J+;%/[-TR-W]V<?^G/6S+\"(>!ZX2>#0/
-M9`V8&R<L7LE".:^\6TQ>B9Q7=Q:=3SU_^@!AT[9DBGF&<1%_VR(('?[TL8-#
-M+QW[X5`5M.NG7Q;.)'#=0_MDBW\)SIMU=OX=E[6U:(<*W["/0E/)5@9MF:[.
-M=O$I#=I'?E&.09U'H<Y>]OK0\[Q.B>J\+2'@>N(,J:,^54?_5U;]?;S^^>7]
-M-WD`ON$Y$M)#,:;GZ,?WF\Q^K"BS'RQ/FVXR]=NY\'6],\BGO9!_+']O&T[_
-M*O\[DGZ7?M=GSM+?C67^C4C^;YK=/K/"%CNPG?GHG"%,8^2A?!M^<Q/&'\=S
-MKK%3U4Q.X-[CR#9O)9]@YI[4RGT%IV76"?)OW^G+B;](\_^FRX]OBK0RH-7#
-MGCS!V,LG,)ZA2OC?CT^$V'W)7>S)5#OH7DEG/[>/K$TH4E#U1]#.'.TC:Q-^
-M(:BZ2+[#\1W*VT<><<CCEXX5VT<Z2^PC8;S+@\ZXBCJ2BO9DSH"*:WJ$SKX^
-M/@TT@#YW/^P]=6C;K'E9&\=A@L[.7H9Y^B2,Y="@-]L<_T58;I/9]J$:MF_(
-M!V.I"G7G_H,G_YO?%Q_X)NH>L[?17=)&J0S?7&@OXC=,S'6'?*A!T4T9-Y1^
-MW8;_JD99!?90+[R760@QJ1F!^SGWLGTHW[3B'F+)VAB_]"/T^X(8-JA?)7N(
-M]:%1MMY0W.N,2O'\UH4-"6V^MTO#O)9]1\^1NU.F#8^?VT&<)QL/#]N>VDKZ
-MW=;$:%@UGG:=;UTG=&F.;`?HW>JD"#(:XF1=G*:G2_!F`=B[!&^WCC*:D$4_
-M>:$TYA'AKX/G.63'NWD-O1?3>G4=QXN;I_E+7NX\_O\L7P^L/E8)[]LV:S];
-M,0H1*_V%8.&WBWE8:B^#_!R\:GZ"#L(^V"IB7\+_L>U/NSX$/N[6L']'PZ#_
-MP[L:WK_..?KWJ3]1_UI]5U'2=POHKTGCTE)\(?0?Q8D$61G3DJSGPKO84,8#
-M::W^^_55]M_?7D'_W?X'ZK\%O/\6V/K/BCF`]OP!J9_D.4QGV2NY81WR2P$5
-M_5UM(%V^>#VPTFZ0<'T,)7Y40O]-;&02\R;A>R6M+?>E5-9*]J6XEY.]E/,P
-MMR\MK#O.O'UI8;VI@;+L?$2=#S'G#\3Y_4?C:X$K6:\MNA:7T+701M>5K(>7
-MV,BX>5^T`?IG@PW#&<QC.!?A.7%#'_FO,.L?U02:%_]Z`OFG4-R6$-F:IJ$?
-M=Y74M^T/R,_-,_!S)>>GT?#_RT\OT/=UYA>VXY0EGY,?W>T)"R?;+>@<;Z(W
-M6?W`V&].+>9^;9*?=Y)LMVYQEX;[L3/<"7/ND<SZQH0V':_^@_OL6+ZQP*MV
-M\HW12G8ZE62G8[4!9="ZRV[#(8S/R^?GU^$#WA7N+XN7896#]AWW7_9ZU5'P
-MA_>UVG);6?XKZ\_FLOR73S_FO^$JZ5]UE?177@7]EFW-9C[6TN&YXR"VSW+_
-MVALNG$\CE@]]^+63[R*<P[;[OW#Y637&`!%M<4C09@#QQ[E<)*151DP,+)2'
-M>C[:NJ)]IOU."L_['1PCB^<O(F''86Y6!LV\A+.QQ1^!.?09^?8Q<<BYG#/D
-M;^Q41YC#D`6YW$[FCXP?)_WG!MO]]0#AKQ)";Z?.!NZF/LSEA`WME4*;Z6-K
-M3]K"`;YT*[__V5#`&+[(W[V_8?9[@2+['TB+YZS>@9M35=`7OQ2]<0GT<LM_
-MTIOH/ZDAH0Y6[5&52)>:_(%,&+Q+N8[)Y.F]='\NL'-^7+^3W]VKFKZS"OF2
-M5=%H?X,:)UQGU;V($QX7*09+H9\&JVZ`=.NH7+0;%BA_T)#N2,`8[O`[F3J%
-M>3WP^YD[%%UB(Q_E<N?D-9__S!"+_(&=DQ^_<<2H%C]JN1;TL+ZC!T_&MWUQ
-MOX.]LO;L>N"3^$4+`QWFK_B[#+QSX3N\&\+^FO@+'<^"&^FN<^P&/]0I@.R'
-M\6!POW+"[RI;?<'&'M61?4$?W!0#WNQ343=![#NV(TCC]<,6`;[C.\RO3-RK
-MVO$@RD0;Y7$2;N=1-3GO&<17C^,YWZ&I&,AP(ZKIOUF>3$HNVN^2"X^2O\@<
-M##A7&9XZ)S-QR78F.E5['V"[WLDUC\.Z<<E%O%LERY^[C=+]$GU)]=W(#+P7
-M\_-[,3M_%6DL-B*.QJ&//U(:$VJ_>!'VODAFMOOS]E!A?"^!^83GIS4PUCQ,
-M2:$O@YJ!UU+R@.G/P/\#M"W9RF,$UM-8$D2=[M/0)P/NGPJE(7\'*;P?"@^L
-M&*H>N)EBF6[DLL;[ZUX+P/O47'.`QO^ZF?V'5E!,"?D"QJD+<AQ3'Z2?3QB:
-M3UL0N_44]S_8LZZ`8S'EA+$W"SZ=/B4;OITZ/_];9V+!Y[HSI?L_3,LN#GE8
-MU8MA]MY0B$TF=K'W0"YH`#EJ5/63#-0`,M`:DH'D(OOHQD1`V,SO';J,_N_)
-MQHL@AQ\B/_,=:C4[H*)<OTDZ']66R>I:X;P*=0Q#'6FH[Q1CC6BO&?6R._E^
-MT@C[R<5AJ#^#V)3U0JF\U0#RUAIU.:S+/4=N3OFGA#9N0S_HGU+X;_^@90^R
-M.<)BC&V"M7B3@?=ERV!L7=,P%G5[SZO)[W]@GE=#&0*[4===]9!73^!\E"BN
-MC#R).MISKM$VI%N$;XRM`;EL#<AE<2Z7Q9O.V/C1<^1@JOA^/9@X`_KF<ZXS
-M;7C>@.7XIY*@YT7U?\3X`UE-U\07+5\(<:S#R?SJ<ZZWH<X+:O*_SM,=01[/
-M-UM[(*W9'H6W9R/B:1,2S'_@U<FYZ-G#Z<&U08%W'G[^O\!V7C];_0K=`=2H
-M4T1#$G2Y;W!=[@RT*Y@0F99O5Y-P.*;"^%*D4=6\>^TG?1+]Q02E,TAWZ`S9
-MB97S&^5@5\/(9:4)[.A45]KQJ;S.U>0_-FG`>$H%T4X1]5FW7\68V0%AKVKK
-MOSGKL/MN,.^3CZ>N+'\GV4=9^6^WT6OVC4'X`^0AIM%=0543OY4?,]8[JZ\?
-MMYWOJ+`.*M.4=VU9>;%IRBO,A5N`KN*Y$(2Y$`=],0[ZXAJN+ZYIPO8T1?IB
-M5AQ'P9O2I[YJGMP\@.</C1EKO<`QAO<XA[ZGTOWS8<B/\7>N9KW`.VJE+%XQ
-MGE?>1>>52>=F.JL40*[X8ZY;=KF,UO_5T^,[ZZ3::._`BKPOVV.HG_&U_F'(
-M8_\V=OC@R3W\6^?J8GEZ+OQQ>/7,Y]]XOCR_P1'-56Z3,:;H0N!/[\`/3UQO
-M^6ME;VBXQQQ][.!)'[=G&`L68F-;]F,6K@CODNSM>8'3_*,@8AD+W[`]8?[M
-M6-!JZZ<M??#^]UR>/P#OS^56C?<,F/AO)^&_N].=L)>CWRP<G\F%?HK1@W+K
-MEWJSG+M3"7J8#'W1>=HISE<#('N#/B)/9T_+?`YU%KTDC\_-!HK]V]>#;%)?
-MY8]ZV.TIJT[4'_!\=M>`&5NZJX/COP+85W9\(/JE15^7#Z0<8JS(#E6X0S;/
-M&Z",^JIN%<NYC9>SCY?#6#V,-RV*YRZYW*/HVQCFH&;L%KHH)@EC74TF+W\'
-M]=T^A'S^3\O_%91A\1+SD\_0&7!!1?A7_W3XV\6WXKBXS\+V$O;-U/\P7MB3
-M_`P_XR_4.5?_70FNO@C_Z)_9_@4QCTA7,]")=WRK6>>%ZYAZ(9NK2T$?JDEG
-M:[3"BM4+XP_CM9S@X_R2@KZG2OW-<\PCXMX@[3_PM.\H9HS=[T(]]GATE]_V
-MV>*(S]%^97K[AG^VX:.1MEO)Y^?'5XP/S\J%\=\#ZW@GM,D8,.TZ&(N2;<?-
-MO+_?DLVY['GBX,D1Z_Y/GEE77#RI1!=/*''0-Z909UA;PN]J\C?;3K&WDFXE
-MBG@6T>>`=;<]=3W()1[6C7&ZHAC/A^&9G;2?X[?\9!]4VG\.<0?P7B8L-JP3
-M^5@MT!\9C"V#L4G@;\;26T2Z(XJF+L">45C72_#_JVSZQZ0673*AQ>\BN^@P
-MQH5%^\))0:R']:(]A3(&Z;-9)8[XI;_GZ\6=]YB\.K*J>+U`FA304Y`F)V]W
-M(_HBAO),>T%_%.7SI/L0V5\=X^5IO+R&DO*2TB$;?R(9,WZ-!K1%,B;F90>\
-MVS'LH+C<L8P`=:+/R!K"?!Z&M'M4/.,(YLL(\#+Z2<[BY:G8;FS?44[/"DY/
-M:F4Q/4[.WW\#_EIUB517`,KI4O/G'VSB%:0+ZAN6BO2/`*<_D)DNC@..'S-_
-M>!C&T;#9#^%,`=_9GL(T3J+9C[B=<47:H>*8([\5D!;S+H9\.,XH[J04B-J_
-M0WG#U31VM"C\S939_ZZ8Z_[9C*F)V-T^Y!>KI3G5P]>6WA5HNX)^T6O)?Z?I
-MGZDV42=T@;S:2?Z/B_F!?`NC;HM\3"Q@_62C"+PC3*X';>/$;A5C#.&\JF`8
-M6VIW*IM[=/(`[1V?D#ZY%/9KI"/.Z?CU\NG/\>;"MZ<A7WJ`,++#+\'?B!2&
-ML:L,Y^U?EL_L'SQ!^11LD_82K:51FD,2Q^HNL&%K\<P2ZTD,W'T";948]V%C
-M8?MQ7_J0RQS+J2UU5"XC//G'+5\77_SN]7/;=RW@=_>(3:EF+Y]H9_M.[&+;
-MH2W=A)^I%[;Q^XE0JEY8IZ+-)NBSK3*K2UAX/`'D"_A_$M]C;!&\B^GWJ?K/
-M?;).Z:1:&(]UZ1J,8PCCN8:U93K9/O)UW4,^,<U]*X]_OQY]72\@7]>U4*85
-M.]7R!Z1:^._K7@LL%/])FR_>IQE(L]2MA>@."-L0HGL#O!/:Q?:=QO_7`OU_
-M;-KONFYVVA?S=`TVVH'OIX'OI]%VX/+LO,SSV6>9^MD::7%TR/GOZEXV,KF4
-MUM[](<$3C@M967=D61SU*8EBGQT++1&CT=BB_:!##8!,MD=7&M7HDJP:%R;,
-MV'F,]39Y?0*L0_M#2I6B+O8I4?1!@K9>^`WKWNIZP,"R]$7/&)*8`KDN3>^Q
-M[N0U6C2$\9&A/D7*QI`&-QL(O>F".BL'#!?4>:_[7<B?#;6XLO#_GT'^=YL6
-MP][F%85HO:01_4@7TH2T+:&[_X$0TO(VE!.'<I`VESB$>3-(;P6EV<_3#$":
-M_65I\.Q;I!C?#X;>@C0Q2(,\.`LZ:2[W;)Y&?#>^J-?8[>XU<KDWY+CK)\;;
-MXK_H'RU*&WO=:<,G+HDB_;F<;[U;N*![!-=6)]NKB^QQW2E^6Q?%HWHN=[S)
-MXA?R!?,@;W"ODK)]\84L,;Y1VAMMD!Z#LG:&ZJ6M43=[,,1`/S_CV@FT/0BZ
-M0$S7%SUF1%U;X;<.[;@C(TT`/X`G%9#_4FYCJ*&J'^3TG:&-55W14==&(UJY
-MTUA=E51-G;<A,Y5[8[*"]OM(R,UV0/F]H5%7!-+M(+VXRQTV8JY>'F?1I!?Y
-M_U/@R:CW_YB['N`HBRS?\R<D@4`&F4`\%OAF$B4K83.ZXN96_GR3!#(B5K)U
-M47.WJYE@/%.UG`RG<JF[8YD(N*R>9TAQ+JM;,HG#0.UZ9SS'X%EFQ<4KN;W=
-M6SRO[M!U-4"`R-^P!H@+)/=^W>_+?//-3!)<J^Z*2O7P=??KU]VOWWO]^O5K
-ML?+G/K%R?ZU8^4Y(K,3[']Y9%8&B68T!X6RM`G["J<MX28H.?28ZQ!B%B`ZG
-M,QUJ)CK<QG08(CILRT"'ZQ9C+G,(!N81\Y>@PW4F.MQFHL-7>+ROL]#A>:;#
-M-IIC:C._C>GP/:I_GNCP/-/A>XM!@Z!%18>A-'385@I<_I7@K"`X"1I[+PY\
-M%1V&N$P;E0FEE$FFPS::ZY"%#A6.B@[7$1VNL]#A*T2'KQ`=8JV?GP`=KAL=
-M%S>OT?\[.O01'=:6@L;>GN2C<K5,AS<3':YC.ES'=!B2=.B<E^&?M*>?K\X"
-M3?`9F#4^U,A(56E%?I6*QR7/P\SQL1#_4^]+Q']JJ##+U)N$=M9Y?OX*@X_!
-M1Z"3=,=L2<.A4NR7_;26L(8<-O/Z"97>G.6IP+J2_)1H"G"F((Z8&"`Y/+#7
-M17^%]%=<L%7'F\@E].>COW+DN7,J+HSL',QRS5_AI/%%'8PE:.H*C>,D6DL.
-M^$>07N>?=B/B04F]SCH^4O[/Z"D*L_QWN']1Z9)QN!'_>&E7K9C;72^6=@?%
-M_=W-XGO=(?%"=XOX&>FB<[M+Z+N/OI?3=YV^!^A[H;@_*GWIPTNDG^=D@3>.
-MCU87D)Z\'O=626Z%+?ZQM3.2WS>S8^^?5/^PK/_G7-]E??_#A#_T%Z,/+NX#
-M=-1T?1@+?Q>_KWB=]!%-]&$YX9#KQ)U"4]P+EL7A3/Z?UZ7>O[51'^W.SZI3
-MVU%]73!&.RG])_@'M\V)YCRQ(8ISUD*"?SW!Q=E>394ZQSL]O:=HMO.!2B%N
-M+_VYN#U@W'=>;=/9GJ0OQKG?WW+Y-Z?#'G"Y^M3(O(L.6I,'88?-LI'.?4M*
-M_*8V*AN:@/]G+8UW/8UUKG.0=,D+U;BG@CW#4\Y;5AP@^&\[72L"8FG<\ZU@
-MA;RK\4BQCC%ZO,Y352_CBF,_N5$+T]P&J2[.&;.=X6,VTO-KY?E^L`\VNMFX
-MQ\/ZTZ`+9[]F?^@[2RO$G8%&VP*V^2Y8/.76H'^K6!JU^31]JXS1+]]_+_VE
-M\`9P#R>`F/RO;?;WC2SKPYL(S=1VB/Y:Z"^+_H_S.L3M,^HA9F$>[.'K"'^N
-MK][+6ZD_[]#Z]FU+]E%]UI%X+\]&_3MC]F\D&@X13OWL-V<3;VG'DO(;M&:"
-MWVOD\UCDIAF+_GS$^++>GQQ_/#I-[2&^F<VEWDR\:>;]=TQV^I<3#GZ;\ZOZ
-MT(@G$J3R/2/+A@BG:&>!K@,WC^UP);[O)3B9Z[9&7J9\AWP[8AG-\=+X3^G_
-M>(?"O%_&&!MCZG?^(]7UD/PHU1=.OY&^+:4\;=3_X.^(?WNF/^''V?1YR%/$
-M\B,]^Q],_0D2?6Y+\B?-A-_ACLQY;^_"?>21$<_7OI7O63F-UK#+>:X:/A'@
-M886PJ<GXA&$_[`5FF^D<B_^>7<I\E=]&^:6+POY:OF\\&[8&GLNO3.LI4F?;
-MQOQ-69D\?\J7BM*X@]HUR[3C-!8+1T:.X=ZBG?`6%ISND?X*.ST*G][1O*<I
-M;QKNPMP<\7NR6^^`'P#\0F]3?J:14C'/V[9]?A6M<[E/GXW[S,;[/U,M^&9;
-M\:5Y]>F$[_WQ0K-_/\U7@I[/)-%SX=0O1L_P"53SI7QJGH;?RYRH7-\D!UZ9
-M;FH?XV.>,^O]V&F$CT/"2HQOQYQB_7/$CI+?$SXO+_%=S?\87M:WE&@<\PH]
-M82F-FWEN];R>HNQ1^XXQ7M;^).;WC>&)T*^M$_.RVZX-_I/I_8?,Y3MVC47O
-M06H?=Y\VN;U5]#N.F*M($0/I6>I?SA-7=RG\E>^L?)O368;[^*/Q3]MHW#$&
-MDRRTK4])T_\QZ-MH`V^&IF\CE1X_FCS>^DG0(_Q]T=]Y1(-YM/<&31AQ_.QR
-M;276*]J:9&DK-'DB_4FTET<PS7!!.WAO#3B8QWD/?;O=\C[@%+'OV!@\;-?D
-ME/=#Q^!W)&LFB[<\E\WK47SB66ZBM_':FS+A]CR1,OI>+WZVZQ-S?)XO&7X.
-M]>==,1'Z/TQZUEL>0_Z^,7H>G'E-O$YR_>^=>%<F.(C[5?"):6#;XYJ<GJ*I
-M8I[NMN`+^=:1VU<Y3<;8VN>WON<XU1?Q=^1&_:`IN_-7?FO,B4N2+DAGM=U%
-M=$%Z2NZ12M)QHV^[@U4X:\";+/ANHWI_1/\/BQ=VC9"@2MQW4O0:%G-C9II]
-M,]NZ/IZZ(Q.]FNFR(VNMC*>YD&2$C=;-;!E[;*?'S$_-ZP7R)-WZ7)P]\?6)
-MMCJR7O+W4[O`I2/W:"7T#YOP5SUR=5F?><VLI?^K,7C+H_K_/>I_D/N?D"UO
-M3AJO_PEY(L>?Q[DCZR[9_[NOJG4Y'OW.3[D/,3;]SAZYMO5^K>L#--]Z\03)
-M]HXJZ5M&^F@+C5U9UKE*Z#2X,XAX*4>OJ#@L'06]?MPE#?%XYTD?Q@[X=$N=
-M`+S8'*^ZHZ!3WL^3>77R?D57"W@YS8%1'M^:<8^F0-/E?!8$=?F..,'WDJQ`
-MN2);HYS3N2)XVCR_!HV/1]\?.;\8?8^,-&CPL?^4YAAXNPGOA2S+\5[>0HLL
-M?]298?\QACRWCFDECVDAI3[9EM*'?+*M!,WF.,?0A[(SZT,++/,S?[0=I9_X
-M+'V*.*Y-/VDQC4^+!5:=X]K'QZJ3@0_.9CW:JC]_;=$^?UKY;Y\X?['J=\=9
-M%AMT:?":^BO+DFBS[LK&)-JLO9+@/0GZ5/S'NE=;;/_#^,^B*XI/W&"BEQLL
-M]'+(]L7H90;QG#4F^EACF=.P[=KHPR7WK+@?D#Q'Y6/A-\9\7;R<T$^VBKG1
-M\7SWV\8X)U/G8DOC.007-J5"\4*\1,S=ZQ-+98R-4J&=>-%Q?:6'9/Z+6==7
-M_N;68-4AY\:J.=@GBYT:WJWS7/I^P"$\N)\]"/F-=P9>_+Q:__W(QL%LZ<N]
-M4U-E;+CO/H@8U"AS>:1A\(^SO7?*_.S'`VC'Z6RL?M[95%5,;>V@%.5^=)M&
-M9<0)Z`*SG4/4;XSE_5'"-TKX1@G?W83O;G4N=.F[PR/SO#^AOA42;I^1/!FO
-MCPO^G_5QHOV[`%FIXN=7&/>Q8!^SWE'`F8&6Y=(SQ:?M&NXIBHS:MX9?RW<.
-M5XOV)5%=''X5:8!2)^X7M"^)Z:+!V[)IP^Y_XWAWCU)=F_0O*HNCK$O41*J$
-MOVMHVWW1(=(7A^29\.J(W1>4,6?XO8;]<TG6*KH=IKW6V/Y-KF%S?&Z%GXWZ
-M36UVN<6Y5]&.F]J%O:DS5YUE>A%[S'W4[Q9E$;=X)N)P]E57NH.ZP]FD(RW*
-M:M*K*!7M/5&'<XN.>R0#VV"3/5P]@W@(?,DC?\W^;U>ICP3+17G:E@V[GVQF
-M_S?ZWK]M3@S?MO"W)OJ&-NW$2PBGKD,T1^:^AM+<+_=1'5>2?9'[Z![RM]"X
-MYDA[45G7/I'??4"4=1\4-=V'Q-KN7O%,=[]XN;N-ON^@[Q'ZOH>^=]'WU^F[
-M1M]M[M\!!M%069Q@1'V4WDICY@..+H_N(QSQNT34R!AE6?+-GK)(YYP;Y;F`
-MIV"^WT;?/`4>&6^MG.K37S1/^"/-5!=CWVP:>ZHS.$FHN,+X#A]FOUO#&8B.
-M%/X,%92*]@VTOZZD]#ZJGWE^[-L#]*U*Q@_"^.-.T0&:FT:FO\'+BOY"A%>(
-M^M#:71VP(Y;/W;KTXP$NCQ`N27F/J;PLREL#'WV[BL'ZX\=8_C/,`,&D/[RU
-M/9A'91OE^7]9-"3[Z^_"[W*"FT?T[12-\O_H3T"LC3K%ILQ]<M\QVJ<\AH.W
-MTIMH7NKI#^/KIO%U"GT(>?747@Z5^SKB!]/<`+[=O5H/B'Q^9YIDBAVV]2/5
-M!417:X3^ODW&%D$?EVE-1#OS&7>[^R:]5M3$:X$KM8&X/O<N;]#N>;RB&.<"
-M["L@X_@#CUIJZTE16>JH6Z>_8Z\,>->'`V[8=1%O)]<K?8&^S6U,HSJ3N1UJ
-M@\9F+?5#C4/Q#X,!N_M/1ON-_FA4+D#E7,(?I_J(L=F'/B&^V0]X+MR_[RE"
-M'N9-J)@(IO4$F3>\:V`<_G'P<[/_BEI;+EH;Q#_0-O'8&I():CRF$Y\#C<&N
-M:<1::2-^=X9CM6TF6(6,8Y!Q#'T._Q_`.KPW'7\;U__W<W-\B01^QEF11FNZ
-MA-:TC]8TX=GU%?`56G=8BVA7I]3F/D'Z<TWD*V+MZ#JYCO@8U8U1W1C5C6T-
-M;]C]_%_Q_F](T;B0,1F3\:VUG+^T#5T[?@9>F.,1&]ZS],HW>'K9WZRUCOT_
-MAC">Q&\6:9)WS!4J%HY/K;L^GYR7PWMUHA/X:2)%'W-$1<0A5E.=C?H,.6?$
-MFT4-]75M#.L`<Q;F.3MX2?55\:X$'P!_`P_(YO8<W)XFV_+'T\VE-?[C@%5N
-MIJDSWOTCWZ7T]%G_^(;=\_F.9A[W`>/K8ER1%C(O*LRX1H;']).2\O^BV?\M
-M6;X*U[+B0LPCC>>CAOY[4>%"<RO7#61^2#2"GZ_*:9?R/FJ?5+2J]9Z*`,;2
-M)OV%%(P'#/V?84#NX%Z)3<9=Z]U_T2(O?1.XOSAP(77\@+>+UP?A%XTH_'27
-MY#=K:8XKHCO$`_#Q7@795,A]H?&,A@E_AV@HAK]V6#3&VS9OV+V<\=Y,;:4;
-MVS']?R^,/[Y&VP:>^%V8!D^-UY3&>#HM>,XV]G^#R7AF',=](BB_Z\FIEC<@
-M?6G#2WIE^@3NZE)JX]3.*4`,X]R+?KOXVVV<?I/36SA=9$F_SNEB3F_E=`&G
-M4SDMYW0AI],YO9E3'Z?I_",D___,[/]GYO_Y,<3K'B)^=)7?:(E^-KK.Y)S8
-MY9LC\[0#1)OR_^XBFH.:N-8^)R9LR[SP6>QFGMI,=?$]W+HD1G06*R<]91;[
-M7:_ZS*#WLB[ZBZA8ZXDUVX78V+1V;.Z5BD8E7_9*?;N7YO6W3?S^@6P#Y2KT
-M'.9[AD[>Q[&9>W^GVBJEMC32R86KH;B-^)GQNY#H9@?1"_X?(=Z*=`^G790:
-M<O%AXH_&;X>TRQ:55D@;077@(>8_R",=,B[Y-9]-5M"^8Q/.G%Y[4/^JY*G$
-M`Z@^XBRBK&'C'2U7T"3?>[#"0#O*E[9W_TS$WB(^`WVE\W_FZ],)-PTZY/9C
-M?B%UI08]BW0BAS-*.NW+Q(.VE+XCM@2$>+%T$LG!Y2(6:+(]$7`ZM]">>M-B
-M[*7!-Z&?N]D^D[8/$\#-:<@KRD?_C//M3/!L\FY7<IU!JI.N#8,O[J9\S`_&
-MP.$F?NDDV2=Y3&,I[L]7BB:.18%X>_[%+N81A>WJC:1"42'?2;K=D/\#/44^
-MHJM[^3[J2P/8M^CO@[>$6^^+AC=O(/Z#MQ[L5+\HYI)\O2)&8QY#?$SHF4GG
-MGP/)_,;PT;3*1_"1B<K&T?NO`U\>?P_0>!RRJ3>CAM;S_8=S4@>)ZI37RWGG
-M.6^[S*N)_D1X2^UU=^O[A3=@&]A89>PQ$)NDG.JA3A_7"5*=\.8EDI^[:*WA
-M30_\W]>>>*_J`RY[ZSEE`]I#O.(CEO4:?2MAF+_F<GGGTLL=*?_.6OW7U1AA
-M_\=O--#^KR9._"8*>L);8O1[5XG4K6PQG..<^1OF?V=9+Q2Y,:(%N1_>MS5Q
-MYV8SY9OK?<+UUIPU=`(E[R&GFJD/@(&X(8"QG6'H9_%.DJ)UC?$"'[E>QNM7
-M>+D8_KL,/^^L86=(QFNC\?[5&8674>]?N-Y_G4G%*VC!ZV&&L>=,*EXE/'9=
-MM/ZL]8*&_[^E'GZGZM5JKY(NOISOC/7]L<3\N:@<_*="1!]7^'T6<694EHS.
-M:;VM=S_.\DC'[<)>0-HJ"%<GX[J(<7WG-..Z/=%'8R[7\)A%3BOXL&$L)EW>
-MMCT5GH?A/9H*+XFN[F68JZB<7;V=IEMI:QK#*CF=3%L!KNLR\'%[]-;U\.<Z
-M7.V?J>OF.;7+>'?H>W\*KA?Y3L&!4ZE]S^&V%AKT?RK1]RK9]U1X1QA>RZGT
-M?3=@%C+,VE.)ON=8^OYKAE5Z2O7=J)O+==VGQN^[L7Z6T?I!W+F`'(=/4_".
-M<UO[3J:.@[%N3K'-Z\<G$^.P2HY#*KP(PPN=3#\.!LS_9IB!DXEQL*[CIQE6
-M\<GD=?PNU\T[.?XX.*3-'GT_F8+K8PS_G4^3<85MK0YUMJ?6:3;NOWYJ[1^U
-MZ5ZN&^5SN/QWC/N_1GG"%>41&ZY>XG4JI8T:8_[3X/4=B5=JG0JN,]2?#J\5
-M*7C=9M!_?S)>)7+/D=#?P$<JI%Y20W1(\L[MU]^V>P,BC/U[13'V\-[U6F"1
-M?'LM0QFG*A,$S;A/I^`^@W%9;,'=Q_:7)DEKJ?6RN)XS33WHY$AAPT4=@A-#
-MG2'630Z>(%U'P8_:!G7]\?7PU3E273$3,,KD.P,&+$.?A<]UB;3O*?Z_:WAD
-M?[,X]ZK-?28%MX^-][]/)..V!N6WIY;_3^/\QU)^++D1&NO]F^.I]G'L;TBG
-MZ2:XW?7MZJW4-Q_D]7\\(3]L[N,2OQ*Y%DEGA7V;QWK'<35NT']K61_YZ:-\
-M_YWR9M*^Z#E)+_FQ%H+OYKU.D.$#;C_5>99UF("$IVQGVT*L_]"WH#BWMY[^
-M2-[%'+P?^Q'',7(SK&;H$X0+]DW-DLXKY5MW]7+<\FEL5;VGC/A'Q\:N1_09
-MKV<[2E"E4I<W<'$INZNT`^%W4-*[/ZXCSR239W%[:XZ9;4QJ+5W'-E38G$I(
-ME_:13@I=5)<V#[^\YYD^7\$`[5%>_!31(GV+C,Q3=C3PN%K>"R&.J-#`]^C_
-M-J]NSM.9-^JC=L*::+_L0W[LD:L-TD:,O"\+]A##_J4)MI$W0'E2QR;=?&1>
-MI2;OQFL/%!?M;0P@1OBF;L2G;QRU@T@;4IT\,TIKAPN9]=^CJ?85,_UCGT^_
-M8](^2#12\(B:L]>/RO67T6[FF^#][M`UMG_A+WG]?TGM#QQ);U]*M"]MAM(N
-M;."!]R]#S`^ZCK!<EK'4QL,ES?NO1]+O/[:VJ[U'`<D+_(8O-^8SW+YD5R.?
-M4<!O7(@[XBULFP!=(.Y((>W90\*[&S[[S[0HG_T<B>?E:H?4(1OCM288X)\$
-MEVVWGBC.HN!3K,FUV*!Y9U4%#/L9<-E*^]EP^P8J_TP4=VN+LS;IZ<YK;IB%
-MN`T/CO[?R*^RI,7?:`P(U\;B0H(1$D42[T;&N_9P3Y$#,<9H?3MD')=&$Z[^
-M^-9V]199R&0[W71I?B#4W@,[!O&FIBIO5J4>:D?LHDW139>^'W"*1OI6I6^Z
-MMS+02F6]68UZYOE+WGN8Z2=E7[U/"T*WHGVT7+OIS@<TR_LXH=[T]C43_<GS
-M1V4KUOH*T]E%+CR(=RL&<;;R37[#3EO#^G^O89-3/'H?R[,<MHD-?&+(L_P8
-M[&&08[.9-DA^R?/-+/DFF.+WVBB/\<=]IO67+??%B;4ZF6&D&P/=Q']"GV3>
-MOU&_NTF?Z`9<Z+,S6EC_89P[OR'//?H@2\OYW98`Z0V0,Z]OQ=E[3<0A=96@
-MKMX<(QV&UM,-A(\U'^>WZ>LH77J0;3_[/DZ,%]Z#E#HX\8.XX?_$^8A7D`D'
-M7>JU\JQ/GG53F:[WE9R2-E,[]<=I@\U4G:TN?UC!KOHX(2?K93_5N/R*<2O^
-M.'$N`/G2+.63U#7E&1%BN'0N46,&F?[OB#EXMZ;_@-J$C?87](<[::MHWI'6
-M<@H=OSF-?:U.Z@5IZ/'NA_2[8'LC';:9Z6HRZ6]X4_Z?O\O[O]\J7-$6=`CH
-M%S@_!8W]*>O\;TB=(@W\QQ[6W:Q[((_JQM.U]4-N*X_;JDW3UI]Q6SO3M(4^
-MSC:U8^TCX3"8+@^^[]Z;2_4ZFM<Z9:_N1]IY58-_11_\3;[-[;::VH5>E0Z'
-MR6/@`-UK)L-ZF'4FVG/*LW%U!ET3<?%OPB?BIM_02Z?P>1UT,V6?KBRMS*\,
-M;)[U4*"S(*SC[8\@SLHES_7'\9;W*J*Y='10.`8=3+?0`?@+YL;'<Q/ZS?AT
-M4)YA;B8Z+B66<?DB_7=(.[J"YV9X.O-!XW>.6!W)$8WR;!YQ.<I97]_U%VS_
-M^Y!DF7S'4^FMAGZ6*^&ILL]QV?H/$<-X[+/[T$3>/_TPO7ZESC\A5Q+\89J%
-M/]0R?ZA@N^<!DAVOMR^)Y="^Y`#'/.GZH*=HA<R#3#;.XM9&\T1E!'N++BJ/
-M/>4,Z@/\@IY;Q^O_@U3;HI)Q_LA4H9]6]E^OA+&G7?D6H?Z37+\\0WWX?N0+
-MO5_];B3^ND;'^T:`$S'!:6$X`X=2X:#L#BI[D.@TQOT\0.7R^!S+Z!_&H\W2
-MO]4,=\<A&0L&8Q;-I`]*^7<HO?R'?P#D___R]C30419)]C>9A"0$F>`D#*O"
-M-Y.H2>!TLA<TYZWDFR0PDZ!WXSW=Q[N3GR#+B\BM\>04O0,BHHL>>0_%TX`9
-MF"&3'WYT@TP(KL+R3U1.H_C#WOK6X`:/7XU><+,G9*ZJNSKSS6\FOG?'>[PD
-MW?UU57575U=U5U=9^-G'F6$[&-?/7P[-#]N?C8*7AWG%3'LQ\E,:\5/Z*>%G
-M@7?>*2]IE08>ITG$&<;]6OIKU`,-S]70^>]G(K=)HOV[XS.Q?Y<"_AKLWRXV
-MK]/-5G;.89L[\?U<+?M#)V,K@;;]7<Q4=F,CJVHI`]TGTZC=[64/MHPU3G6,
-M-2YQY$"9B8T-U*_QM#%V?>!Z=F%W`;O0Q=A[71@;QLNJN'VG&(LTS!E3".VO
-MY?&?IMAZ7L0[PWF@<^"_E8#C_C;`IPWP:0%\6@"?%L"G!?!IJ=7EX.'Z_Z?1
-MZR/R?N0`Z,08MP-]7?;^ZLYA&PO6>L3?%7Q-*^8^QWBZ7S32_>()>?\/\`J>
-MYOJK][!)<]E`WJ#,LF4OYG=JL?@DT?JV?QK;_^'=X/R3$G\3^A`N6U!IBNA_
-MI/OWWGCW[DGZZ7#_ET_BW]^;R,<-QP+S>]5D\]RPE2K*;)%CV&N`L3306$Z`
-MM@I;94/_E%,R__$G87?.J$]5HHVM\/<)O8<OQ?6)(/OOX^CQ.R5L+R_J/OC&
-M'W39`5EF0?\A^#W(X^Z%^X[\A.Y""\2]D5<A?RC$=Z><_X]#/I\FG3]-&K\O
-MUOG93=>&[SI-.AA(TW]%T)0HO[,I"?H,/*_8%!7C(L;"?87,?WIR=+BC/^0I
-M\FO%L4(8/`[7*/C'?3*^?8[^4\A'JO"9\B(?Y15KW*_)1CQCX;)-T#&;Z+CR
-MD?X.B/#&/(;K-7XWJ?"[M&]`_HCS&@O?&VP)[XP+DCB+B'G^\5'L_1GE/\I^
-MY"\3T&*B\WZD8Y*,__-1R)=(C4%'"M"!L:-2Z9X]N?.2B/A/'^[+6SN"?*\#
-MO/?^:@7([>M`!OY+&].TAQ++WZ&6Y3'@Q?(_<7\8'1_!O8''VVHU,O95'<!M
-MH+C5^=#6%5'W+-6E0YT64;>*ZB[V[,L#N^MJ*:^W^DRLS+$*[&@7[(6SJ$TW
-MM`&X+8QE!(S*%)M]]8JV6ZEN9\\PW,!Z)NH*J&Y]SS!<GA^]'N#6D#VWK"=Q
-MOG-.?T\X_7;>EV.K.$?]SFF!_LY(^Z]'Q"XM$'1@3+4`VNX8(VP.Z&P/D$_?
-ME0]@#Q)M.L-C@T7?K_9\$)Z?`..EX/A?VS]_EM0?T%=R.8S5'\D?HND#J3>,
-M''^S3M<_R%2;%^S=#/G^YX/PV(HQ]S]H8_HA.KY$KW'R'LS-B['&U`US>;RT
-M:W`L-MS0VO/,BK8#=$[?_S["R`R,86P@'>J.PKRS#7-;EX/N=/,*BG\);7J-
-M,_A9/K8YAN?E+XHVDZE-^_OX)D?],\8U1YO\+)V3KG]?S`G@,QSGJ\.PTC8(
-MXS7^"3K_AC;=ALDV@-$ZJ,RW88PO"^EM;@Y['MAQ&(_0T0`Z1X.)/=5@8;Z&
-M`\9YGF[C2D^/<;/GE'&_)\5\I`)LD(`)YL..]Z/R_I]P8/Q]FLWQ(L;#'V=S
-MH`UD^V<-8QXZ&JCL[_'\02E4[;A_PD]\OW\?O8\`^O\\A/'-,JP.-]:;;W9@
-M_=U4/YNIEW&<5/2-GCC+A?U;7Y[O0OQ59@-=U>;'<=#GGZ_[C]`['JQ3-]S9
-M:@'<.^BLQPWUP_J(<:6_@.6)NRBS58/?`W96$1!]+ASN\WKX!GV""*[7^G*9
-M2RG!6&RVCN!0F?7O]/!@K)\A6'TG]N7-UKTW0WBE`,_';2.PATA^E,*:JZ?[
-MFHX3(;EB8G:,R[^U9PW4DS_*^A,X?Y-;UX+<WD%P_A7*B@$.XE<*8Q*K_UKJ
-MWQVG_UKJWWZ"RR5>WP[E=Y#<L1#<;L,,F^2II^E,\,I[6+<2>"K/#SS4`#S4
-M`#S4`#S4`&/K`1[S`(]Y@,<\+I;2ZEH;NI\Z\![&C2U3$7>-V0(]AGD-V!?H
-MOAZ$UP'PUB+^1.OZ]T0NQ<AW5OW&).._PO?>)/)P:VQ>$\:%S8(U'QQ:99W#
-MJM?-8<]W=@>#UJM#7UC'P=K+P%B48?$CSCDS[*HCQ7BP(L6\1',K,T!/J9A6
-MSBI<-4H>O4G+^QE_@Z;,L*'O"I[]/R+C'[^+LF.*ELK81?S6.O%F$>/A/JN&
-M[XU38#U,@+K3]"Z7Q]<UOUN!,N"C(1&S=VOJPSS/JB_UEP[YCO63X/P^7^H_
-M.D[RG%/53?+=-^IK<UA1`/OI!YMG%_2!];'CZT;D9F7SUBV(D9^U_QW@KZNA
-M\?4:)N]I-\S88^%[72$_QSC[HI"9C\KWS^\@W1D!KR$D$W^AA&3B[TCNO`3M
-M++07R7:+T>^3VDGYM!3:>0WX!K3<WV&8!_;3H0JO`7DJ+X!V+\JR)O)ET-X1
-MLBR=J6<`5[Y^_UWN?^^$OQ?%>@O)DR9JPZ!--\G!FTGFX5W=E2$AUVR8&P1_
-M'V=U3,$S<Y"!^.;U>NA7RKY)_*Q=/3<1YA=AP'BUK@4\'J*[VJ9N$0<6:2H0
-M<IO+*Z1)RBR.FTYFU<(W_QWQ?AO6$G_W*,;&QK_!&./=L)>KM+[L\!VVD^.E
-M7VL'#$G$/SX>0[^"\2JE>[:>XR'YDMT_I1)Y5T7Y1GM]Q_%H'2;,_@M][X\9
-M_^KXL.X4L]Y]/'Y^$=S?$==QA&L^[POW^LPP7.\C7(U0#^MQ@-=#G6OU7'[N
-M@;I+0,9_/\;U`;Y7E\*<ODSEW5!NC'AOBKE0$\6UYO0?2QP?-XORLR(=OZ>S
-MH_N/Q:8C3^8_.89^E2$Z[/4A.E83OI8(.A91.1LNO\C+Y\GXMT?WY:7&H&^D
-M7*\CR>_U1X?WK]CS#_6^J^/+\2V4T&V5-^0XVS?,]==3#%RJ\T;Y_QT-Y]](
-MV^!9VK?2CTH^/-T5:2.LH#9]1R0OGNZ*M!66R?WOB*3G=)?4L_$<ND#8!JV,
-MN6$/K?(T@KQTTANG=4=PS`O]XGUJI+Z?./ZN^\C(^7VS@'\PWQ_*F?+<"LW`
-M<S;4^/'><_7C&NAA\[6\G`>TO-0:#7/$-X^K<*2R!0/U(!O;@>]N(-G8=WA?
-MGE5YWN'+J.$Q1=!N6$YMS/+^Z_!(<9(CYO]P_/C']N]KJKB\R366%P!_CR7=
-MY?[#(A<0[!F7ZV#/J`1]NY9T\G+:!TH/XSMRC=?/A/H%5'\'U5N0%N@?XQ\K
-MY@H'YG)+9^>[$N4-BOG^[5"(OY`7VD'V*H1GX%!B^\3$3'XU)T7#]\/UCS$7
-MZ@J1_%MW*'9\>XSM#_1?1?I^"?3-(?H,DG[XKCQ71;IX_'B1JVYT^06*E6\K
-M4*>\)\U:/AC,CEJ?X?7W[(FLQ[K!8/2Z#IO_@['S@R#?IK/"UEY86[^@/7#1
-M03RC+H1]K#!0G>8`VJHZ$\7SY^O_8/3^E<ZJP$:J\KB`IVZ1\2\.HFZ0$4AD
-M;\><_P/1_>_"LU4>=QOL.N"'OY#YWP\DMN>C^</MM^8X8.[L@<&@P1\]OO_7
-M]78_CU4.NHF)8H#^?]8KYI3R6.7R)^A97X%=]#7P.;;SVX'/[3D*QM5M$/'@
-M4=:Z/<7%4&]6RG\(E@WI\[_S;W*LVF"PIB&5J?\S&!3ML^UJ.?8#[<]#7YYX
-M\`5_6_?$D].8\P#OSI[ZN0W?L_2:6#GO7_;'!@#7;Y7*A.<?^Z/Y"_>1?LQG
-M,0*_<O[?'W]_D''9&5L*WVN7"K]W5`W"FOA6QK_<!WM9+M.VC5$=L/^>P7N8
-M26'QO*:H$W5_%RGG*[`/M(<L8,]^0_WLU/4#XW!F:NH2QQB>OTVT.R/?_U&[
-MJ:D8KQ]CE0>=B?82OO_MBR\?QS/U$M*SC_K/A[;><2KL;9C+OLCO2+,Z?A)!
-MCSY^8*%RK@)M*<3Q;>JC]VW1!\CZ/I2OC.2KS$>';7=1V\#;@A[1!G.@%`4B
-M:4HDAYEN?;`8ZT#4BQPXCRC6ZFRC;1:TGZ'P?"OQUTW8^?_;\?E#CB/JGUD\
-MWNPYKH?^U<-T__>6R/N"<@YUT&M!ES1CW@08<Y/,?_)6\OI`3/Y_2Q\_([%]
-M?PWAFPGXC@-\LXP#SK']93.W,.VDFTT.N-F\!H.Q>BYC7[>DLZ\[9<Z>LZ`7
-MGY#Z[UNX#]S*SX14W).-2J6%_;I3>:E^IOK8%%?-/7@'A7=(,UQ3)SY0-=98
-M,S.=/;S+Q/ZV">_U&+LED+6^?F8JJ[^,<=RZ5Z]HFTE]^W^#9QW?)&>+)S$^
-M(_$'7_^_B98?R*/I-#\FJ/>S0B_F9XV6):B?Y"343WK>C)]_2)ZO@OY[[@\@
-MK[P9&5H:K!L\`SU%>N.SY/.\%OH9"_H,\M-I:&N%M>?-4(;;]U#[)ZG]'&CO
-M945>WPTVGK,:O\/SK=5T;EOZ)O+F!6<W?;>4OE.A_!JR'_![@#DHOWV4OKVR
-M5WQ[@+Z=2]_V[8W%RXG/KSOVQM9O%"YWJUI2`+:1E6E&5C_PS!"7Z7X9'](W
-M:8VV9B"O,HO57Z3\5],.L9^Z8N7SFE"BE6/\\?SB>NUR<,L5V0;/IT1NVP=Y
-MCN*E""-"QTVDW_9WZ>)KTYV'/'__N&OD\_>.KL3\887]PEZ\P&'_7JEVYTXJ
-M=Z?9-=3U361/U76)\QS4]?>"KKM0*;-UD*[K))OCKBZ<KW/<;[P#W_0^$WI_
-M:.]"_J[:)?.@X-FHE?`W=\4^>PQ[_[<G>OU(7.ITN.1+^V>/P`7M@""M^YU[
-M8NM]7/_=D_C\0C%/QSC>@:&KR!M5+=CW/1,6.C)A'M/9DEW(NVZ@Z2[Y_@_A
-M@UZ<SLYU<3ST^]^>T?$OS_EDSBGW\9CTZH"?V7E.$T?N=$TQ*N6^,<4:[ID'
-MS&JEE`U1\]^97'Z8D-P..L5<?<?E\F*9_Q7ZN8;S03T?^QVZL3]*<UW9B3)A
-MFG<JYKM/O>#$F"L\SV^.UX'^]^@3F&5>XY#X.=*6.L0=E<C+=RW(:Q/(QFT$
-M<R"`^5-ZG5.!/V/U]PW/0WTIR7PJ<>R?0.+\A/JQ&82]Y`TZ$YT3P'E>T*+?
-MPZZ3[W\([S%L`1^KXS!6[3163])860)H'XNQ[-:-Y3]1_>!N(0-#8W.)C\U"
-M@G%J=[RQ9II^K/7T1H^WZ/-NZG,-]!D]UJ*__K"SD=CY"F/>_^V.OWZ_TM%=
-M0G2SW7S]-%C`/L0WGUY6V*'"[_'6;\\;B?(;"]T)[%5^OHTP_P0PO01S(L%<
-M]P;J',_Y,]FB:89[G](.LH6@8Q155L#/&L4&O^=59K+\GT6U4:9&M1GM_F1Z
-M(Y9]',+7:`CA>X'.JS[?%0/?$C4!+O'G9_VNZ/%+9W;`W=V"YS>(@]D0XM]W
-M"8<YNY!_Q3SF0'TCU1^B^E*.8Z'W8)WJ2AO.<0CR$/:&)Z3\YVVJO`?=FDNI
-M*ZNT/3:?]#M;)7S;,9*>COK12.?G'1V)SF\$?;?IZ'N1\%_>$:+O=JA?3_7/
-M2_H[\-T#YL$N\N;PO(#E#LS9ZN"Y:QU^7TH5Y8[3XUO.RZ\&R_IT;0,82Q'S
-MP*;+G%4I#NTBYOP;@7[,CY(*=&#<*L78YY3Y4%727]*,9YR8^Q?SKQ]D-[DF
-M\7SC?<Z)^/:I/Z@>9HM=UN):#?.W6[M4E^T5F`=6@^M=PW>.C'U9B;;:4[F*
-M2TEW\+>/2KK&?V*NW?SI]8#_XFD'H1\#]7V>R^0OG7+_MO\Z_OF2'-]'=>/_
-M4QK?P=?%^2'6+]/Q5Q'5GWI=\!?>S6+L)9/9YLB*.!]/9YG-I8^QV="NV?(4
-M]+U,O%EI@F__(7<AV)9_[1#GP=4@7]R=/RK_Y^O)YU]#632N?_Y,W[5^1P/H
-ME=-9_9EKP$X*X3O-Z[M=I;<B7SC@;XZWD?#N>TWX)\OVUW']8+7#D593@3GG
-MIH!M'TZ_6'^^U"+,)\[U>!-_$W')>1;ZG4@^$.M>P[L3-H"Z6'98/%?,^6=U
-M8%Y8G`<_S,-:FH=NTLG=K_&S\Y:^8-EEQM:UO!_<<CG>N4'DGLSEWVOQ]X=.
-M'5_L)'B].^6Z*_1F\75G&]8G0FOJ=%=H314.KZD_\35UKBO9,_YL8_;?U.?F
-M5_.<YG'DIWLG^GCU.S%G):ZSO(F+>"Y<?.,U"7/AP#CG/B3F+W^G>..%N5U.
-M+1%EIIVH`\-Z@?)8^EO_CECRZSMG=HE:CC"#P>)ICO'%_%X[.R(?A<+C["JW
-MN,<KU1GHFS9Q3#4#O?A#\EUY"?HVE*AAL>J_@_6;RK0SF1@3$]H>H[:U.Y+/
-M^QRV_^\(S2^^E7F2?)<M.R+SLL:Y_]P>^I[!WF%;2.M_>W+?=^B^1W_K[02_
-M<7O\O+!A[__TWX,]6H?Q-TAON!?JC`I3T3?I+/#K++P[)WYEQ*_V!'`X_V^/
-MGE]%IW.Z^)V5E9_#/TUW"Y]OVY>'Y3S?,=Z/4?F1;;'G*.']W[80?2YFXG`>
-MI/Z6;1O9OG1OBR_?$4<\XY]._>5O0YVVE^O+M:`OWTZ^^UG;4-8S?I^UMQG?
-M`)QWHMT_G]Y17VR/31?7_]KC[^_2CODL./^DQ&4"X=+8+G)PJJF*AKK)"X\S
-M%]ZW&DB_7]X^,K]S^I.`WZ6#_QWYE%D(/IY+/O4X[K5JX,>LKYZV^/=W>AY"
-MV"<)=E-;^#Q\,I?T_S8\FQ'ST-$L<GCMA>^.TGGCHC9IYY]WHJ\-UNVG.E>;
-MX$F$\R;!*6E#&F?#_JIY?FQ^Z?[6\/QBZ5"7"_\U5N=-[2^K-)1H87G,?9TW
-M<GU@@LAUHV$;A7UAP]QQ46US;M+P;MAP;V3YK1C[4_1QC^C#Q%:I*<S+]:L9
-MI&?(_GV7?ZL5HU]>1/]XKH1]%$%?DUA0O0GV(SU]UNQG-<QOA&\1;<5K-;2Y
-MMJ9\J5F+UVD\AU;*:0W]C;Z$?2N/MZWA.J6!;8$VKF&]#=\^Y'U;K>'^YTNY
-M2?L4]$N#,>UN_#L=ZO1XCDF`Y^]!]A>GGJU`.?""L7M6#\C_QV@N:UM@GV-3
-M5+T\X/S?$GO]8^PYY!$+KG_RA<EO$3PR!VQ.C?HUM8B[9"QOA/*/J.V@7\HX
-MS=$-ZW(-M>_U)[\/<?GO'QF_<01SC3^$GX7@U?G#\=M.;>=0V^+43`WQNY_:
-M:Z/$SY0$?M)_N*\YA%\_X='3'([?:BK?VSP\?G<C?B6$G[=Y=/C5-<?(?Z?#
-M;3_AYM+A]@[A4-(LQZBW`GGICU1^?7-R][!\_6\=>7P\A,.1K2$<V@E6Q];P
-M\;F#RANAW`+EDT"6>4&O6/R(T,?JM\IQ^\&)X_85M:_=^B/UGZWQY3/28"`:
-MEDK_-PY_+*?A<8)]T2?.8&7Y(U3^,93S-R(9*H^+TV/6*N5=T"#@WD5O.'?J
-MOL<W%S@7]=+_TR?@H6V.Y4]2^7)?_+/*L/W/EY@_;B.Z"GQB7'$.?D=E9BK+
-M+F%\#?T;P;[B39X_>KR)X><2K'9O"/Z;5/82E15/%_`?DOZ_HX#O'@'^]Z0K
-M%NC@;Y3T>R6O"?BS)?U;1D'_EL3P/R7X[5M"\)^0]%/9"[<S%\*?*ND?!7SW
-MEOCW"RDZ/`*$A\IA9G(^_BWAD05E8SE_BG(Y/P.;)=^*\MU4_OEFJ;^<<]:"
-MGCAS":W_S2+6!\9*$N_1+O!U<)GJ_5"?3?TAKTOXZS:/[EP^C/[-\==WBFY]
-M+Y/T;PZM[U62_LU21HER.3\#GO!U_ZBDWQ-.?ZJDWQ-)_WE.?Z>DWQ,M!U92
-MGVL]X7)@.977>>*/#:??$^*_JT-E-O1]K2&;L<0SLOU@\L0_?\<Q[`9[Y#XZ
-M\^EKVI>7Q>F[X"Q=$Y)O)YH$79GXMHK'"9P:P#;M_CM;NZ^@+]#%X7/TVDTK
-M6HULBPWOR)W$[^O@>Z^?^PSN3G17'G/^FT+TVYF]-=N<7X[^S+7DRV]OBF^G
-M<OIUWZ.O=#5]-_AJ<O9MSZNQ[0\<MS$T;CM?%>/3Z`_Y>K<WW]#:AV?AS<)>
-MO9=LK?I7A4\!CMUS,';K([XY"]\TTC=.^N:N5^7X6;T3F'H1[TEJ";8=^V.J
-MW\1]PL7;""OI(F:HP_Y-_`[0VHKVUU;BN\%-H3EIC&@CY>?'T*:4G>?W;'C/
-M/YMLN[<W)6<'<_MW4_CXGY?Q+S8E-_[N3>'R%\=]&]G^)9O$N*^-&,.Q>)Y,
-M8_@]V4_IFT)C".TN1H[+_41S[\9]>6LCZNZ3^L_&T?FW<?HWQM:O[*RJ!>]S
-MI?RNI/E<L%'L&2HK:D7?NI_+^&<;?YQ^9!H!OI2?^02_MS$<_FT$OYO*"ZC<
-M+N/?-L;'B]/?F-A_%^=S.LWGHD8I?\YQ^?,*R=6[&H7\'LMSQYYSBKP502??
-M_^G;@D9<5Q>Y[8S[DFOUBE9\SX]RZ$::/R/1P("7>XG>_E?D=[W<'_P_B:Y3
-MK_PO9]<>'561YF]"`DG`L<%&V96!3M`Q"3@V8W2R>UAR+P;3"0\;"!)YI7DG
-M$*!Y!^010H```<([,Z-C@DU$E[/;,QL5Y\`*([O+>IB=.(>SBPZN43,>'E$#
-M!H;=9<S65_6KOK<?]_:%/SCA5-VN^E[UU?=5?=]7\>-ZN/]SQ/I^4^K8NS@+
-MKCH2KF-G`L>R([J.I;Y$`XZG@6/^$;&'$/Q!N?Z/B+M0HPYV5^FX?P5\4@R_
-M;<)ONPZ'X_X+?'LYU/XU;S^$]G.'8]/$>$<9)?^'8^M/(P^W2OX?%K8+P5@)
-M&+VL+=59JLG]6%6*CK9MV_!&KM3_A\692>WKHE[%_X[#^<]A&;MUM4">LRR"
-M[KE[R+[^:CUD$M]B@'\RX`\<TN7+`_CK65N:,T^3YT&J4LCA3P'\_D/ZF8^$
-M4P.<Q7'@Y/[/H?CT?1+P)1T2]&UD;6XI_P>CZ7MEN[Z_MAX,I^]1T/?DP6CZ
-M/@2X7SEHG[[^@_'A_PO63OY!'7Y%RG\$_`ZFSPA^*1^."/B7`_X[!Z+A_Q)K
-M\?(!^_`'#UCK-Y('E?%[!'A0=4#7<>)M>X'C.>#H.T#YH!1;=[6@BL$LSP%/
-M`3:5]3^*\S'*>7`HVK'>_)W4CN?Z1]Q/9/?7-)[KPN1/RMU"\.C.?BEW;:&S
-MQM<E_JROM]NG-:56:-^8Q"78SG_9'^T_&?>];<"[;+]8.T2K&V@KWB_]MS9N
-M,\OZH2/VV_>?'/MC^V^2[O,QUY5]8B[J\[+U>PGMK?NL\[N"^Z+'-^KN\1BG
-M%N,G8OPS:/?'&=^[+S;\<M]^%N-D[I.TZBZH9.,[0"M'G/$[ZV/#GX3Q!V'\
-M\_4Z?6C\.V@/1K3?1'M#O?F\8>O?9/X>F/][Y+9Y(N:1_''76^/GB#$^U7OM
-MB?&_POA7]HKQ>V!\R9_6B/;?R/J?>^WA5[\WMGZ3^]P_2_G?*_9_KI/<+JV?
-MUZ7Q\S^)_UZA^_HJ>1K!T2#QWVMM?SGV6LM/L\1_CWY^48BQ+^ZAG'ZEW2A7
-MZR3^>VSBOR?V_BGWR8T2_SV45SU8W3E`'=TO1]6X;E)*1_6C.B`,SO6`4]VC
-MW\V=V;KAC7>D_.^Y/_NX<[<U?"]*^=]M#5\QX&O<C3.OA&O/$7Q[Y/K??7_P
-M>7='\Z^'87T\BWDS=^OZA>;U8U['[CCKOR[V^I/R,0CCGZ_3UQ^-7R+7?UV<
-M_->ZV.M/ZI>>&+^L3E]G-+Z*\;T1[7^+]MPZ>_+GJ#.Y/V0V@W$?:$?N:=LN
-M_?SL6\!V81>/P1BF*5D>7T(JCYE7E-01":PM,:>4;;(9'O;_$9'VQ._QKF/=
-M+O/[5?\NG3Z5AOW^#'[KW67N)_L5;\"GN`,]>*W+8"`R/Y?BHA/9/WD75?/(
-M$YZCR?-X;;^FMS>'WHVF>G=-DS>KWW7GM3>Q?JH30K^E__>F.D9\C,?9&(][
-MJNG^+KF:[@"[*/[AZ-OI*N7[4YSV!TFC\_T,GO1D>N/77GZ&?Z>.?Q;CQWGF
-ML[^Y`/O_3AOU3W9:G\\N`5]3=NKWI^7@:]<.V.N*B_NT+Z/]\@[[]D5PA[E_
-M(-?0.,!0LT.'P8.Y_#N$;ZLPOSK-J6G43["4H-\;@E'XW1-E_><=PGYS\#PI
-M"_V_P_Q^1\K^XX"OO5:'SR7SWVOU^QW2A_W0?K)6U(V)YY_4U\9>?ST,\R=C
-M_KFU8NW1_(K$OU8_HZ;Y;\KZA[6B!D.J,UV3?=?1-Q!]=N(+.K?'I\^G.(<[
-MMUVGSR7,%=P>3I\/9?W#[2+^@.D*U8Q.7/ZWQ[G_P]P>P]SO88X</H?KQ]3^
-M4:*K*,CZ/D'?@.WV]&/GMMC\,>+_JL1_F\Z?!HG_MG#^R/J4#=N@,Q.9SNRA
-MZ\Q[C9_Q;K.FSVK`EKE-I\\RP.#<9J"/(NBS'WUWMMJC3^O6^/29#!@"6W7Z
-M>#%/_=9P^HR2]3^WQMY3[I4^[JWFY].E./OL`QBJ(LY)!R7E9?AQ3GH"OE];
-MS>DA51'GG_VQ%L_5Z&<5E8$9S6_>%GG`Q(\RMC<?P'>OU-R#_U]C[9]]+^-?
-M:@1_R?=/D/)?0S:9B*>AW_@8'I^@KO<`WA>^'V:2ORSP.DK?_A[?=FPQSU]I
-MW1+;OY?G>CT!W_$M0@_X(V@\E=&X##2>!!JO9]_Z.8VOA6A\"CCYMHB\A,K`
-MWS5OODUQ3;VY/)V"C*E;#'X"_VY&<P'GP[40'X:##\XM,@8JB\=`N92109<R
-MD]=GB/3IS<[O6JMU_F2*?#Q.NRK0+EAM??]27QW-7Z+;2=2`\U?K=VV$2\UM
-MXWYF0_ZKS>\'.]EZ^Q'>*4BIUL]7*6^$>/-+QAL?>--1#OG?+.C?W2WDZ7G@
-M>7XSQ:%>+>C)<_%8/^[B-LX'_S>'YY-0_7<[]_O^S?;S8XAN"T&WW,WRW/?K
-M`JIE0NO%Q>#Y@]3_F^49KG[&-!2R>K=*OPM)4UP=8@P!MY_9O7VE_U<E:I.%
-M\L$-WU$]EO<A9R>JQ/URKC(L,`CTZ:,H7UVJT>E3R[X9Q-=J1T')ZR+O,`]]
-M%:SO$>1+R_&G,CG(490NBK7@]:<H7H[Y6P\A=M&-W[K9;[.QSFG>A]F\560_
-MH=_!<1#STGJA.D4:XVD"V7^;Q%E:.'ZB7LPEO_BF=1/5S)'CZ_#]A,'7`^/^
-ME/&:Z&0&:_)\,5;-IGL[/T^@_6^3]?G9.TO$V)F;Z.VKK(",9Z7SLL^6BKX^
-MFX3>ECIRWQS@O]':SJ7Y6S>:[R__MEB,<V*C6%ME$;HO/3DOPX/UY2P7WU:Q
-M;\LB]I<-H/7<C8;S?\#NW:B?4]*WR_%M[L;X_C3![]AH?'_:/+^Z#W#:#YPN
-M;3@]1%4&M30JKL9TR@%S)JE:3WJ_X/-C5$?M`?[6PO?O]G:^IOV`Q\L_U;@Y
-MXOPU_?;9PD3G%YKXG79LA:)&Y`]D\_R!,IX[4*ZIKU,=YZ)FJJ-=/Q7X;R#Y
-M=6E-GV9J0[C/5:[)G'BJN\IA<3=J37\YJCW$^D5^84=!KB&^],EY8JPD-I:#
-MC?W1+/!_O=`1;L.W&?CVTGJI/ZZ'SH<?1=^I]6*])G2YM+,I6:,3;KCRTY/3
-MM12EU/58@J92G@KEZ3(_LL.EO.\*^:.A>G-S-+W.W.NA.G/R=[>Z\^X2OAGW
-MB>\-K&_G>H'O(>";%`/?K_#ME9>C\?T,?1=>)EDK.N911@82^'L5(UOJNTMO
-M_<!]1LM@/.;Y],B!J.XN[6(^\]>)'&[F=RL9#.Z,$9%CG\?8_I?I_N(U355F
-M4@WMYJ?[KQKU=/+L423SF0Q.CS*S^<`:7U%`J3Y*<I$&N<@-P7LU-.8_8<R!
-M+UOJ&9Z#[[5Q_L37_[KX^3>T?J@V@9?IG`\K!`P-Z[`_*8N/]6'CI?$U,K3Q
-M82;K#SIG:V)]:(5:SZ=4RJUA^]"?J)X`Y<](?#8!G['K1`Y,'W>5=KL[[U::
-M6V5TUPII/&,^5ZKS,S;N8M!P,:>AB_.ZHT#0<#>GX7LO0?[7$@V_":/A;,QY
-M:6U\&JIQ[!.B7_U::__E>>B;LK5Z;.4$Z/3BM3S^,(/[+TXEG_O_Z,M=&]]_
-MX?HOSOP_POQ7*O7YAV..BY5B_L94UR@C#+*_I3+^_E%?:3U_3XF_8?Z^$O]*
-M'?]]`\7<_23^E3;QK[01_PN9;5^CW]]>`ERM:\+]^S^@_21K?RM9U4+P.=71
-MM.<F`KZ&-?;V)_^:^/"=!GSY!OB"@,,=`=];:!^P1M#NK0=43?!.P/<)^N^L
-MM@=?Z^KX\!T"?('5NH_6@'GJ5^OP4;O<7RM7`[Y>X?#]&OTE-N%SVX!O,>!+
-M6JW3SX=Y.E>%TV^JW/]741V<--6X_@B^G9+_J^S!5[\J/GRC`=_<53I\N9C'
-M&P'?3]">BV_[*H)N<]'N6F7_GH'@ZUP9'[X?`KYS*W7X')@ON#(<OC2T-ZP,
-MQ<=S^$:@O6KEO<'GM0'?K45B[,<,\%T!S(X(^+Y`^YT5@"]%P.<$?&TK[@V^
-MX`IK_?8?@*UVA0[;6<"P4L*0+.ZWOT/[]!7VSI^Y_*\PM\\_6PC[?X6PSWT1
-M]OG3/?,R!L`^'P8?I6WYZ2&^"/O\$&AS;KE^_E/"?/6LF[(.7'<!G3L\!-WW
-MBN$[+_MN\,W89]1<_RTWKR]@/&-;#SJJRW4Z+@6]ABV7\<VBO1SMSN6"]YF\
-M-F1ZLZB9G=7BI3-V1I_M^*YCV>DA7IGOQ_BP%NT70^W7>?L*M)]:9B^>F:__
-M9>;\60/^5"S#&6$$?V8R_CC`GW.PO57VK2>"/T^"/X\M"^?/V1OA_/E[?'?7
-M'\Z?=V^8\Z?5;X\_3O"GT:_SIQ?H5></YT^"E'^_-7\&X[NQ[+NFY#$\3YK;
-M=`SG$MCT;M;W`/QS(P]3Y/KWA_,P4:[_I?'S+SC^2V/4!S;$<8P'WL>7"IH2
-M;,,!V\&E\>TCOV%\K^+@]YPT;B[&]2XU/U_CZW^IQ?J'S]UGJ9`O-4*^WF#R
-ME2+7/^2K;0GS>R/7O]3_2\+E9FU(OH2\O6TB1U;VL7^).?S_"/C'+A'PYT;`
-MW\+@5P#_7=CM+O9M;@3\\^3^'P%_803\6^\#_N#BV/N3%[$4M['&:Q<+6??B
-M#CVS6M?/%=27HVJ-J:KV`T7I\N*^F^3@'7SC61Q^AN,JA?POUNM]2?FG7)-Z
-MR(]CL3@7,IY[]\5ONRJLS^FY_%>8KW^)XVG`&*B(QK%9XE\1K@,4P.?GOU&I
-MWN"=QM0QFK'^0N,#"XD>[49Z+,=XN17A]+@\$_ROB$V/L9A/J8BFQ^_PV_9%
-M]Y:GPOF_*+9^(+I(_5ZW2(]C(QWT.=I7+HJO'[PFX_<`?<=CK,R(.<ZCW;'(
-MW$_B]M_"V./WQ/C/8ISS"\/'#Z(]N-!Z_/H8XTL9V"3E?Z'4T6+LGZ&]>&%\
-M^KA-X*?Q%TC[)P+VS6CO*K=Q_EENSM]NZ*<3Y>'CEV/\@S;&]Y>'Y[=0;C#E
-MN-#^5XIQQI;'CH/@^)?'UC_\_J\,^)>+=2GCZL]"WKO*9#X3W271.S:?%_A^
-MKL>.3\&:N5`F8F5IK:4P.^)CP-52%E]_U)?I^/7EO._+\,L<170:+/E?%AL_
-M>F=#M8@C<<3IY_Y_F;G^(AH]#!I=6:#K)Y[_"]ZV+A!Q7\:[';IGJ01M@@OD
-MO<^U@B#YC\"I88$]^\*_(/;]6.<"[/\+##$JK/T3P)6[P.;YQP)S^?@OS-$Q
-M/]Q'^AGFN#A?KW]*^^@!X'9JOKW[7<[_^>;SOXOY*PSS$^WW8?YBUNYZI)>'
-MUX]@?U.HOHG4__-MGO_/CZU_>/XOYNF8)V@\X6%%)3],SG]Q7OSU&YP7>WRZ
-MLWT!X]1A_+[.!)77_T#[2AOC>^=9Y^_1>O[=#-C_\_0[3K[^0=\^\_0[5GEW
-MUPKY[9PKXM$IYES<7UV/NK^:#'OAW%R9P]C!ZZ+\5.J_N=:Y,I;VW]QH^GV`
-M^N*S_B?Z+CA*_\\UEZ_!$O^Y0K[<$?;C![WR,NX<%?9CQ6S8OW.$77$4-45(
-MSV^%CC@W1]"1[A=5T"0XA_P/$2/+XW_P;<.<\+5S3MY_S='C$O@9/\/1'1$+
-M\)Z4_SGQ]:M[CG7\Q#^`!BES]/B8-P%CUVS];HWN1?]ONFB_/-O^^4-PMCX_
-MT?RW.$=HF"UH=;Q:/S^JF1VNYSG_(W[_:_R^!+^7/F;CM@UO_!$R.V*V=5Q@
-MV/J?;1X?D*F,H7?1GOQW);N0[&\AVZ+F3Q5HU#I+S]NE^*%JM)]D[:DY+LV1
-M5*BUDG^.]L999%_V;K%[/N"?9>[_+`4MQL["NW81?LU3D)-ALX2LT7OL&4II
-MAH/U-8"7CEDB%H[O_6SO/@HX[_B8;HT8[U&,=]EG7[\'?=;ZR:\,#?@8_<J4
-M7<=2G9L8O=PJZ8\&-E\WUE"%3ZS/R'@=12D<-DHI],Q**,<=8=8(HCGQ*C%'
-M#=75VL+C6G>*=Z2>F1>*:_V6UR,3,5;T6_J&^L\ZU?RT)$WC^S:#*93_`SUZ
-MN?3T$(([/5G3?,K0EOO-?^'[7ZFU_7$;?G=9J6Y_T#GY>;G_E^I[(ZW=WZ`]
-MM]0H$]=#/'P+_!U02CSL3>^Q,!IZ&0V]A8*&[A&.'&54;WX7G37LMYPV;D8C
-MMV=V@A?UEKV<SO1=]C.J=JN[]);\1OZ>9+X7YCHQD\_58O==D3#YGQG+/GR"
-MV[^O`=>Q,RWLWYFQ[.?'^>_W2OUO\?O.&>;[QU[PYL*,</OYQC38OS.B[><2
-M@_V\'?2IFQ%N/Z>B?>6,^/K=.\,L?S>KV:5,.";L"H'O).`[<(9^SD&Y\J]"
-M%R3-N+?Z9=S_F1[;/O6`-L'I5"=2#7A_3N]`9[2D**Y`IE*XVZ5HK\KSL,68
-MOV;ZO>5/<_RG1^=_9V'NG.EB#43FT/\R1<^A7^W#_C<].H?^",;IF!:=0^^5
-M]O^TZ!SZCT#GEFEZ#OV`B&_D^JV?9NT?^Z>9VX_O2_T_3=J/R=Q^_!CM.=/B
-MVX\.B_'?P#@=4Y&STE^,?Q;M%Z?:L'^GFN?/T!Q[,%;M5%V/.2B6?;L^?\54
-MDJ'LH_R>S2_B=(^CSSO5W,[/53K?M99?JE5AX3\Z!X\RZK68_O]+L?<WF4-"
-M\4I7F"P=1$Q!(_O>I0QJZ<W?(AW:HC)<23\/7^TJ&L!LF"_P7>5+)'.#U3.,
-M#E]C?<Q]B7`M'/8!V_,2W#Y5['U9H;VO1^>F?,HW24QZ3I6Q);Z$1,0.)XX@
-M6%S*R.8494RSB\WU%.;J\U*T?6YW_VHML:AOS_!7E*'#SBI#/:D,KH2D]+!8
-M'9Z?P&BS5:[_$A'?)<_.-V']5:"=;"R2BW3POKB$X![Z8^K[2!G*Y2(#?;DE
-M]OQK1XEY_`JOX<?V?[+OB(=#0*_+4TX/<3,>YBHC6]*<__I<GQP7CU=1E:'-
-MI,<E+Y?B^Q-3=%ZN`ZX-4PB^<K:_,MO%K:K/L;^"ET,X+Q,[2_,3DZJU6'QT
-M*R,#[=UY76Q-!+Y@?PD^UM:<J\SD?'VO!.M_2FR_2S78UXXI)O4CG7F:](/?
-M!A_:7^1Q3DS^BB!_10SF;,A?-I>_U)P\+35IB&8W=CV>?/E?-,_/DGE8NP%?
-M_HOBO5&'HMRA=7*.KY.JJ'62U/E:?@\FCSV2YJI/*O1.??1[$G;MV];)UO8M
-M\8;LM>F`L7&R7FN(]-]XM-=.QAT,LX.EO&T''RLF4\W=M@)Z5]U8+Y9RK08:
-MSL.?[O\\U2@<)6H4ED;5*'SZ1I':U*-B5#]^3_8EV__;"RCV*<CVP<`4G'\;
-MYB(;+W(^LO<2F6W8].?1ZI?=>>W"]_F2C=->0++WUX#Y9+'N%]&:S9'XA]JO
-M<7_I68E_\;V_D\/W_V*#?]@M8J[387_E%%O[@5S^BXWO:XO?]\7ONR;%_WWK
-M).OW@_QLC?J4HD"?I`RUC/U_:/(P-5GQW?H>\>&W$:]7.TG/*_P8=U4K)^FY
-M(20K'Z!].FMO2BW7=B5EY8OQ:0^A\YOA*M4V:6/?7EF/^Y])='ZS2_/S./_-
-MS%_);O'@W4LZR_IOC)DRZ?[HWSHQW#__$.<D)R<*_YQ\R@?`X\#$:/^^?J*Y
-M_;$=L%5@+/(I;J*M9*+A3)W-^PK:U8GQSSW#^#\QMOW:`#PZ)^AG8X[`C.:N
-MJ_;S#[C],\'<?]^$.>HFQ,Z_24K3\V\NP/?T38C.OWE&ZK\)NEU/L/[5->O[
-M2HZ_!7Q3`%^'-S9\#QK@"P"^,]YH^$+\]X;G!S5=%7DIW9WA>4([\/U*KPW_
-MQVL._Q.`?QC@C\R]&9BFY]ZL!/R*5^;>Z/!_"MEJ?R&<OF>OZO?#A,^G5^_]
-M?KC^A6CY(Q_2!SWJ?T'XD%3;G&*B/V*VT_!'GBCB,87L+^G0/R%>/_^%>_>?
-M'#'F_R/.5U.[XI^OMHXW7[]'`->)\7J=25JKOT+[P?%Q_`<[_M]X:_]B->;*
-M'*_[%WUS5(W[_^CKP^'(1AY@-J=I/?HZQYG[%QS_<>;Y7Q3OO`>Q'L?'Z?L^
-MV0,E&+]^'/D#(QL3;N3E*YV#\\E68OY!4-H'S^.[LG$RKTN\0=<P"?[/.)PC
-M&]Y!_ESZO^-D/>GKH3/<G=CG!XP3^S#M>;0/3,<\RCBJ!2[KQ_3F=1VHOQC]
-M;6/-?868^F]L+/]`O$4O][L?8NR:L>'[72^T5[!V>J_>^+Z[K+/:R'`:C7/"
-M?/'=*PD)+I?^YDD;?P]\(&QQ5Q3\,^NL[+O.,>;ZY4'P]L(8Q)^P/?9A_N9(
-MUC&9ZR_/6T>`[HUCX,LPNXID\!OHJ-HQ/(8=ODP6E\%OT5?!^IR,)Y'GN^^"
-M/F/'1)_ONC"?>TSX^6XV?C-@C+W[L<XB>_9M`+">*0JW;P^C_7@1ZAJQM4?O
-MFUV2YQ]%@G:,7[=(3CN/BMRO,U+_%4F=V\'OILBV^=4Z^']%I!NS(_(HKH?5
-M6%B-<3*+]'?)/L;<SB)KFX?C7VA^/Y`&WY!D6-X/G2F4=Y+7^9TDU2O8`%X$
-M6%\_ANM#5"<SZ69!TY_SU`0F+]V,9TS_,!RRF0]25"1\D*(1J;*.2-)W'.\5
-MP'MZ87C-JG]!>WZA;ENW&?;O887W5U^5X^^QSI_\SQ<1_^$)KVW*[_\P_PE/
-M^!W)WZ#]H,<:+N[_>>+9UT5D_P92>8V+A<>D3DG!'&Z/X$<5^T?S-_T_9^<>
-M'%=]W?$K>6U60N#%"'OE8/GJ87MMR?;*ENT5EJV[DFRMC4.WE#*:%FR%>C)+
-MZM)M)TDW&1Z"$-@TB%E:,%O7IBM;V-L.TRP=A=&TF`CR$@V3;(A3=CK3=$L-
-ME8GB+(PA2GBHYW?O]^P]J\?NBC\TDGZ?<W^_<W[O]V]I2_>UYAWL>O=5L]83
-MU'B'N'^9Q0O>Y1A>JAN_H?%.Z]*VHC*OTAC3ZFLWY/O:*BZNH*Y(]/%<QI09
-M%Q_`/=KW*<<_?0NO'_#X_?L(H[G/BHMOT@^O([P`YNPK7$=(PCVW7YTO,]Y:
-M8JXA&*W=FD%CZ0&,I?5.C=IT-2:<-M<`%C^_']M?_'W>@%9CZO,P]!G8;ZV#
-M5+>K-W);-K^JM1Q0=?%S:`.,_7/7LM>@_]:\W\JC-VCZ6\I?'IL.\?FO_5:Y
-M4NNW:939W#X^8U)S]J?MUA[_)R!_89^UEXSML?S\I>EG!#*I?2J]:\QV5*7W
-M5^$>WU<ZO<W\OV_A\L=USV?A9^\^NPSJJOS?AO*_;_:]Q%1W4-D]@CY$S;ZY
-M]Q+S_ME<;^&]Q+?"/=-;WOQ:JK>T_FO@Y\.]A?IO@/['>N?JK^Y5/@)^J'>N
-M_A[>_SM+_T:XN\O4/]>S</]2Z7X9ZP<3/85[5";AGNI9Z(YXZV[H+;`AVL/C
-M64O_:7P?[BG>_PSV%(]?5<;/PZ_F'CN>U/S2KSG]>^;&;^:1^\Z=X_6/[L+X
-M5?EX`GZFNPOK]E?@/M9=7OS&NA>.7Z7[X_`OU%UX3B@*]V`WUB:NJ@ZH\$_#
-MW===YOZ?$N'?`_\F_87AA]A^/^YP7V:%_Q#;[R_S_(^_>/ZZG>WW%^:O(-OO
-M%V_)4%_CS5MAO]]*4RM/66N/04K3%4AS=YGZY8SB\;.>\[]1&#\ZYW_#UF^:
-M]*M&GHH;<_53\X?5T"]BE*=?T"@>?\N@A\<HC#\-[BYR'[ZFVN`[XYYPZ&8=
-M[P;/=948_W45#_]MM$O)KL+PLW"/=:FY/.N,FZH7?NK89(8_#1XN$7ZPJWC[
-M;Y9_^-7<9>\A4&WJM^!>TU78]O\C[__>>[YIC3;PUO"2:O5^'8UK]-97-/56
-M4KZO&N"^JNH'J'T7+3L&_._///#^<FH7&^AOM8]"W7%T-?E3['M]A]6/X._+
-MW1\3W%LX__A/F,?Q[;7RG5/3S;'2,:2GOK?TO>(%^7]/\?2]!W$UL4?,+U`^
-M4FGX*-AS>W"6L6I3MSS+^`#X8WOF3V.S_=\S__Q*F,9ZJI]Q&'X$2"ZD;1Q1
-M[M:;+VWF7L7/@WOVS)UK,>L_X?_D:?M^.<\?(O]W%C]?DNZ<;W]&J[G?8!?;
-MW[GP_HI8Y\+CZUU(RV.=]AO8:MYNN*:K,8M]>8]@?!?H5._Q;DQ0O_PC-1;.
-M8!RY!79XP*V[&IKYS@7SG=MBY2NW>_[Y81=T2^^VZG\7]M_^#GNGQW:7M_\V
-MMH#_TU@G#,-_-_Q_$_[WE^F_=W?I]QW^B_=_[%9Q9`Q7F?<%O]-SC?F&L<.P
-MWR]N-<>[_![>=Z#+:S=1^GAI[%2U29V_OR+7=UZ"3/*F3S>^"=]4WOC@7H1C
-MW,1U7(U9]]T/=P^Y5^?6]K)\&.ZNF^1]29?,=Z2_@;'CE0Y[[[;J$UVOY*C,
-M_P_XA8[YQQ-?@=^C'?9XXD7T\Q(=<\<3]T'^X0ZUSV'V>,(:-QR#S$!'^?%H
-MIG]'8?Y2^Y^4_5ZV'S:H?/#'R`<?^<XW47[[=CGY*^TKW;]?A[!&?&HLN=90
-M81D(*^:SZLWA-8U^OCLIC;+;Q?U_G[G_YE)"V_3\QC;=OX+^KJ[M]?,<T\<H
-MB[TDYU^FYH,J1I4<C==_>U7!_3WOF._!=V`,4.LK/?^0VU4\_RE;KH$MW]O%
-M^\"F"L[X_AQ\9)<U%E3Y,@.=8[NL_*IT4_-SW8BKR"YS3MJ<1U3OW:NS`S>#
-MW;%+Y9.[GS?G@LFO(>3'WET\UK3RX1L(HW77I]]_G=NY</W\$ZR3OK;3RD.H
-M?Z\HG2>0AC]&?RZY$_7O#MU0;XI3_.3K8?-.']0IW'Y'=I;9_RNBWSGHURKT
-MHWQFL([CT/%9Z.C8:=_/%X(>N1U*[P.)"E-7OZ'R5F6[038<2)6C7VK'_/7[
-M('2+[5#O^JE]2!M'K7ZR=1^7?">'ZX>C.PK7/(]`QT,[,+<YLN?LU)N+6Y]T
-M[2ALO[U:VXBN-8SX5VXUS+;<T6"VY;T(*]N^N/Y3JKV\]R\Z$1^#[7QOF?7^
-MQ3._C_%/NWUV@=^I^`W*U:%V:VYY^.,'\W7(&+?_2%M/NXHC^WZR@-B'R?63
-M(R\S9>[)_V_8/+5]<?=R%=B_O?3];<K.H[!S<'OA&0W>'Q#:;L6+VI?X%XBK
-MV[;;>Q9OU/0I=;^:>H^[SES[*)P#NP-],7T[ZAOJCSO-]81?Y=<3SL#>C[99
-M\:!K+:;[*;A?)/<.^3[UK/74]Z[I:DRA7Z9C7CBUK3#>E2X=T.7);98N5=K`
-M^PO=C?82QK.A;>JMH=:1:@I+U7$J_?^*TW^;6D.[>G3%K/E<LRZL/6JNLSP)
-M67V;=2_2ZU-43F;9_R=L?UMYZ6VV?VWSCP^L,^O^9_G\:6<0[7\;SC)J1_PI
-M:OL_05I&VQ9__[=9_[45G@\/4QM2`5O;V\K8_](V^_Y&_XAUSMX[&J3_G92^
-MW53OJ7Z#IC6:=PQWP/\+WM+^I[PEX@=G^OE\3"7\CGA5/&TTPS^XS'RG8O33
-MQ(_7*^/'LL>RI<&T91G"<WKGUFMF^[=UX?.I;W#[M]765;4/BZE_8UOGU\\)
-M_7Z!,$);Y]<O6$2_;W'[)_1S+E*_W):Y]1>W83_!FNIK6W!^BL*@MB.A[A&E
-M]FQ$W0UNA>L?46O<5EM?E8][;I\?VZ+F&;+?53*5],WTF3WF7>7J?U6?55%]
-MECM3>`8J@G0+;K'/<T_.DOESR+1NL=9'U=Y7Y7XWW&NW%)8Y[WSSOYM+WV_&
-M_<!O(CY>W&S5U=S7NQ-VCFSFNOU2?MQR"Y?_S59=>#N-)50=/PV_PN1^K>J[
-MH)X?_K@!_9>IOB3:N"^A[>C=S/>566]<&=3&+4$?XAC7?YO--N-9):?6BU5\
-MK./QWV9S#3I!XYDKV3.%=>.-D,FVGF_*G%&Z?'9(,_?P_RKOS_60>9%DTB3C
-MG%4?YVV@-'52FD[,"F,)OK^WU4K3V>W3AXBK.UJM=D^R*V"&R>ZD<!H3%>VZ
-MV@>=XG4^*WQ_8HEF3%DVJ/+J'RUVCYM1:O];2^G[P7^.M!QIL<_8I=&NQUH*
-MY][^'>Z1EM+WIYOEOV7A\RG_A[F1UA8>EUACW`%J(P)HZUPM_/;[.^;=>HKY
-MP:YL.M]4J6GFF]OF'2KF'7T'$B^'C8!*/Y=V8$3M*U7]8;D.JMZI'J_5>]5>
-MW)+GOS<5GY]0[]A;[R8>--/K]%*_\8IF7*FI?<!OC8\N]7UGYLC/DF2#^Z$[
-M1]Q4WPPO;32H/W11W9?/,B^0S-4D0_J?=M&W"2H[KX>-@R[M;NH'7NI3]_[]
-MVSZT_QO/-WU#W3=+<O'3ZGY`-?:W9/X%,AF2&9R5OW./VN&[$7Z561]5;TEK
-MU0==CNINUVW6V:AQ3G_R9],-Z@[X`UM4>#&EEW;@X/7MNE^%=QSAA4CNZ*SP
-M0L+>VKR]!\]6:<9EY5>4_%)^?!U^-),??R#'PR0S")E[(:.1S$&$H_R.4Q@+
-M^1_!MW^&;[_G.=^T>Y;_8<@<A4R"9+8)_Z-1RW\'_%??A.@;=7^HXN./S.4#
-MQ)>#]S\XE_<3OPI<^YK%:P0/$M=PC^I>Z.4DO6IFQ2_GE8#(*^J;-GQS80/F
-MATB&YTW_\_<P_[?!OA?8GG^8ZC,0]O6.]\S\5`^_HNR7.7=@^?5#^'5L@WHC
-MSN^?70ZZ9HZ8>[M\8M[V7_&-;T-YZ\NN#0N?W[@[I\XX6^/A$=1AV?56.^76
-M6D9")ZRX5>^*J?WX3NWFTZJL>?/Q]:=F?+W5B_IOO?VF&NO[./2-,J/^^H>?
-M'/E9GYE^+2/!$W;Z*>X1MCZ`;P^MY_:]Y>P4?>O+YZ^6D?X3=OXP9>A[7?`!
-MP:UWXB[UN?/YJV4D,`]WY?,7<5$^F#O-,&[.I_&S;/^ZN?;?PO:OFWL?O=F7
-M$?;V0/:.=6K^IR7Q<E`/T-@KJ^2FAVVY#LBUKRL]O^5:5WI\KN:#'6(^JP'M
-MRH5F:^U7]7&:D3_&F[GO8\W-K81[LKEP_Z,;[K%F:^S.\M5\_HG<AY<\YU]*
-MY>'[CLV]R[7$14>[1NU,;VOW\M[`0ZOZ`DO,,[Y-U.XTF>W.Q@J_4>WXWS[-
-M<;%OW8Z$,7R#[G^P-M'[[DS7E0I-?W]CQ9"?^I>_G9GI:JB@N'ZU4]\G]P9\
-M!F%_U+2(\5_3_/-/_=JF$17.\-*-QJO4%O+Y)15.!<)YLDF]GZ7NM7TG?U_\
-M>[?`_J8RY[^:BK3_&(.W-A7V,9Y'^M4V66MDZNT8'X7]MSS_VUC^^>YT8_'S
-MRS^`#LE&KC=N-MOC6W]MW9^@]!F"/@\WFO.\^;V32J=[H%/(U*GEVXN]?\G;
-M./_[5?GW?[#/Q]EHWR_[%>ASI<'NKQV%6[:!U[-G^OJI'7_F2UC_:RA\BS`*
-M^51#B?N/&HK?S[`?^H4:Q/V_\/NV!NM<646[UJWJIZPZ'P%]?`UEWO_2L'#Z
-MR??CFZ%'5K?UV`H]7B.WJTD/CJLZN(_JA6O>37`_J5MZGZ[Z9<_P#8:?S^,O
-MUXR+RA:U[L1CF+AZ7^>+F/_4"^.8PS^DJW*4_:YBO)_9`^;5%ZX#3?OUXO'_
-M-O+OY%K;[G<1%Q?([3HS_O7NI;A[<)KR?!W6'$?7EG'_\=KB]_=S^0FMM>XJ
-M_\)!K/^M+8R+*>ADK%WD^9<2X9]E^^O/-XVI^W40?J9>W+V,NV]_!!U>K"__
-M?I!8?8GW/]G^>E7N9OH\%`>O'D#^K[?C0*V1G4'XG8L(WU5?XOU/MG^-?7?Q
-MW9S^Y$8=`X-_@BLU(T[ZO0S]1M>4D?YK"LO?G/N_V?XUHOPC_-O66.7HNMI7
-M>I2\*BLK4%9\:ZRSD,LT;:JR_94>'I\]0>UD)?H9G'[F_G\^_R=T+NO\_XVD
-MPX>V_AE'_0LR_E9R_4]R&<?>D8!68=81+H07(_>LHWXT45G?2/SL=,61QACE
-MLX2!^0_SN\/T7:,:JP\YM<\-N;0'A]S:\%#<<?A4PG'_J:3CF5,IQTNG@O/(
-MC)',.,E,D$R:9"HHKIQ:XZC:B^>-VOTOYXW6W$PCM<=DP]E$Y=Y&UN4^Z'+Q
-M,[8N%/80A3U$80]1V.9<"(5[BL(]1>&:NE#80Q3V$(4]E)Y')J!5YOL$'R&>
-M!BF,9J2/BB^/UO!LEL+T:OY1I9=;N^M<39X?)F[:/$(RHVHN%6ZC6?K62[^M
-M;SYW3H,-.FQ0WZF^R>69KHO)RL-#*BPGZ:?2A\]\O`&=IE;;>2+GF-7_6;WP
-M_5GG\/USJZUZDNK(MU4=J?HY8X>0_JM+W'^P>N'W4548CR.,P&JK759G"U[F
-M\Y^K[?,DO";Z-Y!WKU;S'FK=OCIO[]^#?53'[4FU>4^E8D^"9>L6>?]S79'[
-MO^#G8W6X"TG=;P[=(W7V>[TJ_"]"=J!N<?6[MV[A\1W'X1[X[:@K/'^S@=/?
-MS6O4UMF*S-?O.Q>!GFDWWV]5G5^7[,!WHV[>ZV[9T`/WDVYKK,WG4-4WK9S_
-M\0W'^TZN_]RE]Y/.:[_;CG\-YWOKD/=JW:77+W*KYD\_M3]Y)H#^SZK"_;-C
-M%$82++5J_GV8*?#8JA+Y?]7"[Y_G[__'/HE>DAT?W),_`_%#]$-:S3"J4I]F
-M_22W<J[]O`_KT>NZ&G/#UGI?,^K1\9766O0DC4=])^ZD,?!,7X3L'4$Z)HA;
-MZX85YIFD+,EYA=P)R$7@3X:X1W`NO_W@:>*ZX'\-[@.?(.X6_"$N_^#CQ%W$
-M*[0'&A7_*OCT#18?(^X4W_\E>`8\15P3_`O@8^!)XM-_9_.[P./@">(YP?^(
-M[0>/$Y\4_%:V'SQ&/$M\"?0_R/:#1XEGQ/?=;#]QKTB'09)+"SD?Y'*UEC\1
-MXA.">\'3X&'BXX)[>/T7/$1\3.C)Z\,Q\`'B*?&]&SP,WD\\*;@+/`@>))X0
-MW`GN!0\0CPNN@;O`#>(QP:=Y_^/U%O<1CPJ>`T^#>XD/"CX)G@+W$(\(G@6/
-M@>O$PX)GP,/@;N(AP=/@07`7\0'!)\"]X$[B_8*/@[O`->)!P<?8_A46GT[L
-M.1L0/,7V@^>(&X(GV7[P2>(^P1-L/[B:P_2*_!%G^\&S]+U'?!]C^\$SQ'7!
-MHVP_>)JX6_!!MA]\@KA+\`C;?QWJ">).P<-L/_@8<4WP$-L/GB(^';?Y`-L/
-MGB2>$[R?[0=/$)\4/,CV@\>)9P4/L/W@,>(9P0VV'SQ*/"VXC^UW80\C\0G!
-MO6P_>(3XN."\?S@%'B8^)KC.]H.'B*<$=[/]X`/$DX*[V'[P?N*)N)U_G&P_
-M>)!X7'ROL?W@`>(QP:?1IN:6HWX@'A4\!YX&]Q$?%'P2/`7N)1X1/`L>`_<0
-M#PN>`0^#Z\1#@J?!@^!NX@."3X![P5W$^P4?!W>!.XD'!1]C^Z]%_:#*O^`I
-MMA]<S:L;@B?9?O#I?Z#R+WB"[0?/$?<*'F?[P2>)>T3ZQMA^<+4NH`L>9?O!
-ML_2]6_@_R/:#9XB[!(^P_=>@_B#N%/Z'V7[P">*:^#[$]H./$Y]^6I1_MA]\
-MC'A.\'ZV'SQ%?%+P(-L/GB2>?=K6+\#V@R>(9\3W!ML/'B>>%MS']M>@_B`^
-M(;B7[0>/$A\7W,/V@P\2'Q-<9_O!(\13@KO9?O`P\23Q2MCG8OO!0\03PGXG
-MVP^NUD?BPG^-[0<?H.]C@D]CWV#N:M0OQ*,B_!QX&CQ(?%#P2?`4>(!X1/`L
-M>`S<(!Y^VNZ'9L##X#[B(6%?FN]_`/<2'Q#Z3X![P3W$^P4?!W>!Z\2#@H^Q
-M_=6H7X@'!$^Q_>`NXH;@2;8?W*G*O^`)MA]<4^5?<+[?(@P^_0R5?\%C;#]X
-MCK@N>)3M!Y\D[A;Q-\CV@V>)N\3W$;:_"O4#<:?@8;8?/$U<$SS$]H-/$)\^
-M;H<_P/:#CQ//"=[/]H./$9\\+LH_VP^>(IX5/,#V@R>)9X[;^<M@^\$3Q-/B
-M>Q_;[T3]0'Q"<"_;#QXC/BZXA^T'CQ(?$UQG^\$'B:<$=[/]X!'B2<%=;#]X
-MF'A"Q)^3[0</$8^+[S6VWVG=<\SCH`&2BPFY#[#_=/(JU`/$HX)?!I\`#Q(?
-M%/QM\"1X@'A$\%^`1\$-XN'C=CWQ'[S_%=Q'/"3L_#%X`-Q+?$#X_P-P#[B'
-M>+_XGO?7.L%UXD'Q_0ML_S+4`\0#@O\SVP_N(FX(_\^R_>!.XC[!GV'[P37B
-M7L&/L_W@TZ>H'A#A/\[V@^>(ZX(_PO:#3Q)W"WX_VP^>)>X2X7^9[5^*>H"X
-M4WQ_#]L/GB:N"?YYMA]\@OCT4S8_S/:#CQ//"7X[VP\^1GSR*;L<W\+V@Z=.
-M%?;S]K/]X$GB6?']7K8?/$$\(\+?R?8[4`\03PN^A>T'CQ&?$'P]VP\>)3XN
-M>#W;#SY(?$SPE6P_>(1X2O!KV7[P,/&DX,O8?O`0\83@GV#OI!-\@'A<\`_`
-M)Y>@_!./"7X9?()X\-0:<Z[3$Z7Z"_-A*7(/D+M::U'N*^`>)W=#N6N6>PW<
-M!\G=1^Y:A>6^#.XA<O<*=PWN07+WD+L3_OP.^P=\Y*Z+<*_`72=WM]#S,MR=
-MRC[A/@GW7.7Y)J?0\TVX9\A=4_H,=JV_;NF[?3,S1QJW?>`_Z/W:?>>JH-LH
-MR4R?M&74]Z_C^SBQW$E+O[8/&@XJ]B.P>XE-"B;]YOT1_223)9E!Z/4BW`UR
-MSPCW%^#NJ43Y/$GUMTB_^SG]P2>(#PK^94[_BO--XR?M^$S`WS2YCPGW$W`?
-MJT!Y)/\B3]GU^5WP+TX\>\9N=Y(D%Q9R_9`+5UCW2[-<@N2,$W;]=`OD`@@O
-M3CPD_-D/[B$^*<*+D=R`D.N$G$9R3A%>E.3ZA=PVR&4T2EOAWR#)!86<!W(I
-M[?]YN_K@IHXD/\^6P!8A*`D?)KF8D;&##<((RDEY'<!/MHE%PN:\V21'71:0
-M;#TC+;*D2+*Q:T-B0W(X5U#%UE(77_B(36S@<JFLK\I\_+&;(KNI/?^1NG+=
-M;5UQ=UM90@@8PH<#CC$)Q-<]KY\T$I)Q<EOG*EEZ\^N9Z>GIZ>F19GKTO<`&
-M72O0N22Z?*+K!+H1B2Z,[93H9A.=&^@&)3H?T)5+=!:B*P<ZM]0O98;^0_IZ
-M*;W4T'](KX-T*^E-L:'_$S1O0ST.22]&Z#S'$.$JX,42/DQX/^'E@',)/T/X
-M'L`=$C\68_\/I!?O3XQ'$Z6[J3P.Y>5)Y7U"Y:F$YP%NE?"/">>$6P'/D?#?
-M$,X(SP&<2?@`X6>^HWD:\/&]"?Q]PD\1/KX/YC$)[S7.OQ`^`OBPA.\GO)WP
-M8<#/2/A>PMV$GP'\M(3O,MI/^&G`AR3\=:/]@`_M2\C[@Q]3_T/ZH)1^E-)'
-M[L"XWY?0BT.4?OH.S<=0SZ!4S\^IGI.$]P-^2L+K">\B_"C@)R7\;PEO);P;
-M\'X)?X[P]81W`7Y4PI\FO!SP/5)[8L0WA_3.?0F]"AKMI_+:H;QNJ;PGJ+SA
-MVS3_`MXEX:6$#Q(>!GR/A#]&^%'"?8!W[DWX'_F$=Q+N!KQ=RC^7<!_AZP%O
-ME?#["7<17@=X6,*G$5Y,N`MPGX1_9_S^3[@*N%O"QP@?_I;&\;[D=<95P@<)
-M=P"^7LI_GO"CA!<#7B?AGQK[/PGG@+OV)LK_3V/^)SP/<%7*_V^$NPBW`EXN
-MX7\@O)CP',`=$OZAT7["&>#%$G[<:/\W-*[?!OZDW[L^,-I/^`C@7,I_V&@_
-MX<.`Y^U-V.N#1OL![Y1_%P0ZJT2WE^C<0-<ET9W&\K8GZ/[>V/\,=#Z);@CH
-M1G8FZ-J)S@ITQ1+=(-#YI/):C/;?TN/:&G2G@*Y+H@L8OW_>TN/'&G0G@>[4
-MWTGSO^'_W=+O43;H^H$N1VKO>J(+`UV>1'<4Z#H[$W3&_A77+?W>W[B?`'3K
-M.Q)T-43';^GWMQIT74#'=B3H*HAN?%R_)S7N+R"=U*\.HAL"NE/2?-P)=.ZW
-M$^4]9O3_.-D7U!]);OE&_Q/>"OCXKZ3Q;^@_X>.O;SOR)J4]/R[.KMS&WZ+/
-M/5A9$'Y;_RVZHY;V?XRGVW^5^!/[O\8SQ+\W?57;C^LOVC<S?!-C%[!S1KQ?
-M_(W_UX1]<E/_C3_7=%:<VV6XOUN<^YA"_"?(VY]A_[6#Y1_/G?V'ZAQ6<MQB
-MNEZKL'=L8#=MD'X8>5M&]:^[B7O'V3E,!]K#R%LG80[BS<$V#@`VL.0%MS.;
-MJ;<6FR]5VY7+U4N4+ZLQ7SE;?1C/YV+<KW^B-=/H&.@*RQ]PL=4#1@QB$W/?
-M*C"?K<YB_%S!XZJZT%SM5%C[K87FSZL9M%_!_==I]D[7I6D_`SEWSV?JI/$_
-MQNY]_@[WJ-\/\IEINE%KA7Y[P'15Q)H*43OL8XDSU?H>%AW?3/A]8QCS_K-:
-MO+=@IND]9T_V>\Y<O*M"]..5VO_+^;#^KY/U2V&5MBS&OBEY@3L=YA&4XS<E
-MRL7JY>:OJI&G*N*I]6O<VY<_D`>RSV7\CK[G6-];\@#U[?-?)V)#F_&\$MO8
-M:Q+[V[R]J7V13O^R<(\OR"O+?+8VV_QY;7:96S5!GIXY[2J>Z]++.%<[Z?FW
-MT<SQ/W)%7UP7>W]JR,_H'C7.N>C[WE93>N?H#]O?4S?%^@L-_R>E_GS#__F!
-M]0_=2&\_</_-!=IG]/Z-Q/U0F/X9I>^]H?<?P[N?0-8_Z/SW)/7_*]5C3ZG_
-M(V/_TU^@_J'K/\Q^L8E-_Y$CV:R?P;-LI^POM#MGF"[79I&M2F>G7J.UWKKK
-M=]LIPR8I9*^F8IO2[G_Z:O+S,2CK&:!G3-P9/5'[R[D%+MRWCOS]#?'W_E>)
-M<6J?5^4JF%>/]\WUVEJX"_,\8'+6&'F>ICRM4I[%+:K+8EJW!O.!;'H[H([4
-M?,;Z797R+:6Z<C+4M8SRW"?EL4%=BFEI#6-KCV$_\!:WZ]YG8=+_83R!GTRS
-M5<'[\8SQKT8RGS_`.7@&Z,T<QK\>5Q84X-Y.0S[K1Q(QP49Z'SU<!NNSX5Z:
-M_^E,7=F($3MZHA;W\IYY8]N1%83EC>C[*TV,G7?MW'9DW3.T_AW1SV@Y.K8=
-MF4=IEZ\)VH$ZB5XE;.B:;D^0?@:E_>::B/$P,-2QJM<JXKJ`W[-]VY%_=M+^
-M1\"9B.,]A?M_K]V]_VZ6V+>:>QCWBSYF?/^CURG2;)16=BT1\_JO*(U?^W[[
-M1T>N)MV?=SR/O1S?2_S'JU.(_W!ULOA)NGW&&-D#5&;[5=U6S1`QLB_),;)M
-MN67M%`_[RW@L\`\HGKD+\B&]F+>E.QT96V>O8NM<'F4=W6]H7\E,ZYSL>:9.
-MY7SDR)7)XU_/);X'KR1\#`5X-.+0&/>\O$)]WWU%[_M4_S!C_U^Y=_R8,+/W
-MNME]AWTLT#<3\NIW:'XI[M`LK:;UWQ5=KEGB#)U^%N!U$;/:[9P'O+X[YW6U
-M8'F'BO=.F5@E[\DN4#^:[:ZQ@I]G8J]QY&=F6;<3XSPJH@RGO6J6$\JH%65@
-M>P]!&38H0QFIK.G)]HA[-*]/5([F@@^%-&:)IN<MKHK8CZ8L%?FWF175S>P#
-MF663_OQ=W>4,_3-[0=6_P)QB]`E3-G'LEY[I!4*?T%>78[NA+CU"NG3[2]0E
-M?])=9?IX7:!^G_-G8;!_;E;7:Q)W__3W]IC?4&>)N.'M:C;4;_2#$9]`^%Y`
-M@[+,!AKY;&./>3G&'Q^=#OZ8<7[#!#19@DZ^Y_0-5=QS:GXY?L_I-*:>.W3,
-MHZ>_X$FZ__0Q\T[5J%,NRZCS8Q'/W(%W!T'_.*!_SD/_7*@USD\-7;K;/M49
-M]W_06:'W+^&=M[D#Z>)/[KF4>?V%Y113G,M>*LLMREI[;"KG$Z<Q]WF0_VX?
-M"^\.LSV[&?OI@1P6/6!EOSH0QCG)M*+*!VUR9[@G$&1RGK&?[,YA+^^VLE_N
-MAK(.0%F0=\^!>/LOIN<_IV\#WAW<B['FS\#\-`1SSQ;:\[W_HA[;`=:NHSAW
-M.97*@M,T=_T[C=?6B[H]=^']`=1V[T6,<U32;?N'2A>\]^?TK>K%V#EXYL7!
-MUAXH9Q=/A.'E@Y<;7N-`B_>*P'O_>GC^0?N_A]/?O^TBWEXDW@:'<0U:R57!
-MS_>(?P/YQ+D0Z`]SROEG??[,?#^C&/_#]_8?#!\AIB1\A%:2LW48UUDE(H85
-MTC0#S1#1A(CF\H7$O3_H.UF9/SX'#EV8_'QA_P59?M;#T\!_&,?XZE7T_3_@
-MB?N,[X[O$P8\G-*^[-F?5'/VZH`5Y%W,5O?C>0`?6WT\S#8>;V6O'F]G!X]W
-ML@^/@Z]\4&4;#[K8JP?KV,&#Z]F'!XMAC5@PYG099]4?!)OS$-@B'_"TD,Z.
-MWCZ??$[]B/#5+8=OPUR&O)<0[W\\CVW/K#\8+R0;VIO#'.*L.G/H,4&,]LEX
-MQQ,%=^&B_>?3V!?HF]-M]/OG>?V<FQEX-9FXL_#Q=K5[%5/S8&SU9!<ZY\+\
-M%=<78=\\]NI9'K#I1?;?L2)X+P1?H=!5K]10+.*:E=OG;A:X$_!Z90VEKUEI
-M+NM6L?R>[%[U,MCB9!\N0_R_+X"_/HQ5HU1-3%CMZBRKN(M"UX\%/`OFUI[I
-M81'CJ,><796#<98=#.:'!O40I/?,<<?M]4V\KQK/1LKSWQ?W_GZDG'TG_(3[
-M83S,A/&0:[I:V_-"CW/[V,ZULUA!3<^J;N=TC+$$^C\,^C](^O]KZN?+YWZ[
-ML.=`K],8(Q>!YA31'"::P7/X7=PI,<XN`7Z2\(.$'SVGQX'['>B2S7RY^A/3
-M9VMFL/:O'>+^1=U?JU?6DJS7BONE5Z38@WFP7LR&-2'&T[=-YR[%C-]'5:K%
-MK/V+\=[?]BK,6Z.8BC"N+_0MSMOIR]TQS>T:G7AM].&4\BWPCFO.V:*\`W0.
-M'7W-*V*]]#E]5_"GS_7UDF*R0UT=]H]91[PNK_*FRV3J@+K>%'7-@+%U!?H-
-MYO@OED[25MEGQ=A,51/)=XFE?N\$?1K_[FG2\T^?3RU^59)N2/J0GY70AR74
-MEW\ZFZP/"[(2^E!`-"?/)O2!9R7TX6'"N\[BF?')^__[]L\OJ']6GM7[9X98
-M\]^[CZZDW`./\C_[W>3R5Z<P?S+Q_9KN<S\DVK+#_A';X;(M+Q;W<F),$Z7,
-M'?>E,::%?&>GPIQJ%=![E(5TW\K"E?@=79;(D_#3+F)\BS1Z@+8"ZJZ2_4.\
-M]T;V_PN9>OY1DG,V>PU\<U^\_FP3^(SLG;ON$>5*O8IWO*>6_0"4G5J^;;E:
-M]2"L!P[-86#+U*HDGQ1LF_!)Y[3';=RGT!=)]O],9O_0F-=_#OK53_JUG=99
-MY9"OQ[P8[?^H`GV,WVW(<NZ94P/K':=ZZ"U51=EB7^0*_WNQ,U?XWSPIMLBA
-M.84@!UM\W3(J;/'%#-^9Z7_3P+Y/.C[OH3]S*7^F[U>$_?]S.OG`&O"-#7T>
-M<XG3]A;HD6FQBG'7C!@%&"?"1_<P6/],L;OO<.<-G-,F:4^Z^H<^1?^I#GQ.
-MQ[$PJSO6RL+'VMF>8YVL_]@>-G2LBXT<&P'<J@R=L,(\R-IMO7D*^'3@NW!X
-M+U?J]JM*>+]+V;._3NG?OUX9VN]61O;[%.N!L.(XT&.R_:PXR['?D35RHAQ>
-ML$`]X8)7';S6P\L-+Q^\PO!JA5<[O(PY4M@_G;\CP%\?\-<'_/4!?WW`7Q_P
-MUP?\]0%O1X"/7<#'+N!C%_"Q"_C8!7SL`CYV`Q^[@8=='<`+`[W#LG6;NGH@
-MAVT$/^S5@3QV<*"8Y9]PL-4G'L&S[W/SGYD_=_4S=L8OO)L]O]K&W*/OFN=7
-M_T^9N^:TZ;6:1^%98>_P+*"UW=SARF8V_&UE%&.I=3S!7>_>JE:_@3EJ.L;$
-M`#J=1@%_R3V*O[L@S;>@@S^:7O",P*=O=V$])I.G=I_)6U,(=77!.]+]XQ,<
-M:-@%7#\^8AH'W<*SWAO!MWZU%_B&-43^$>#[B&[3;F[Y;F)!P7O0OWG`VXV)
-MB=^G:RMG'R:UUVR:7_O&V!%7#NL^8\[1/V\?F_Y,-E//E)O'J[>/+0(>U#,_
-M,M^J+IV23':FD4EMBDQV_D5D4CCSV^I]6;TUJ7*!-F:4S760"_YV\H@<#Y<Y
-MP+X[7/QQMWJ*M;NXPM4Y$JX(>YFP0=G"CN\`&[-#MS%FIWIU8M,YV:YB.IXK
-MQM_;5CRN5@$^%O<!:7[IV>JLPN]IG@1;GF3_6;6]BE7C_/&T/']@.>-0SK*4
-M^549J7S*#/X4WIUH&^MQ%<RSB7FG8%Z!>$?,%';7S&3MY_`[HD)SH;K"7%,U
-M37S_+=?W^Z3Y"GWF\8EW1E]_47TZF;]W^[/WZOAMP$UA]2D+E'TO_HWR)K--
-MAGUR_'=B_:"`O!X"7O/Z</_+=7$6VPWKF=TOT_EWH,T!VUA":XO1_\*U1>8_
-M"RN*VOES6HL_Z@\%>5'4PHHQI2A:8F$_UII"D;8*7A3P\BT65A\*Q1K]`8TU
-M-$<B7JV%!4(>+[ZO6_OLFI^R%65L&9*PB(9O/.;3>+0M&M.:*`7K:X]D<7Q_
-M3J3X@YM+2TLM],0;/5"ZU\9\GD!2=GPF?KLH?]07VLI]FB?,FZ.>S1K#CYC>
-M3[B`ZCU1C7MBO"ALY[%0V/C8'-6\V"8+T&W68MSKCV[A]8%0PQ;>X&G`:F.>
-M6)35BP?\#'36J%YND:.\E1<YRO1_KX#\+$5>'@I'.8?W^K:P)QK5]`>?/Z9_
-M:/)CFD7POT6+!+7`D_I;:2C@%5+E'HZ"Y:$(1YD">SH!,\3&'%1_@R>X*,9%
-MGD5%T45V(N1-(6\S%.`)1#2/MXU*(6I\$-06%@R)O)YZH)6JX)[F6*C)$_,W
-M>`*!-NYIC&D1X,FK!3QM#+$X'R[BHQZ*%+`HF,5"(=[D"4+6R.;F)BT(XC.R
-M;=)+>?:O&2J7RQ_C+ZT)0OD;H$OTAOB;FC2OWQ/3`FUV%`&6$X+NCP"+;;P1
-M4AI"35"ZEX<CH:9PK)3-K-*5A[]4%-W`_4&4<E1K"`6]15%0*.`PFDR#B<E_
-M"6UN:8R61N"AM"G4'(PU0A7`Z3(MUK"L$3J_'AXJBJ+&>/%J,:&DH'N!,!/_
-MQ)^/Y"**YF)8B<&P3/1$I%10&N/E12U2'P+5Q$0>1/&W0*'8*4(Y^:+*12B<
-M@#\:,YH.HA.*SOU1ODCD6PD:[6]8S5]:&6VNUS]O8/Z@5VO%7A8D\6*%$$5'
-M)97)*ED[\>V,DQI@A04:4[1T^>.HQ%"]&'$MGH@?J8JC)2*!=5'^5:)W#5C4
-M)5K6"#+ULJB&*FZ@^&C(LY_R;XV$H*N"S4WUT.VA1DF/FH,IN46"D7^0\FL-
-MOA"^GZ'G(,.!P-@X/8<K8A5":6/^)BW4K(\>O4V@-C&L250KQB$#LZ?IY5MC
-M>O[%BQ?SI]:N6P.BX%5K:M<^RR'%DI2\YMD:/5&+1$#<6#:J'^B.$#J,+!@Q
-M+?X&#1*BJ`;B]T4JOP7DQU4P3Z@Y%;RX.;@E&-H:++%0.X'):`@XJ];?*T27
-M0#]'FQM\G$`:XW)7BG2]*[F116>O28L*PTD5&=W.DK0VTD#/^*\4BFM$@_=\
-M6UC74=0JCZZF(#M#<>RZ@NHP2I(G#1HP]_HP9H6_\*,A"$>TV#86_\A"6X0(
-MD-NP)P+#03!L$1T:KX3C.#6ZRQ]L"#1[18^I,=E.AL):4$A%+TY_`<-!#2Q&
-M!4\J?K60<_O\.Q/=^7<FC/?4SYE>_0]/[76O<OZ_7NX,;1I*21^Y1]L=*6VR
-MPG,=O,*4OB<%'X07RAFG>IR/J2\LS%.*HY+F)/U!G].8!SYO0H74GRNX-*O1
-MM%>O-:*>Z;DM4\FQU1_S&7-G3.BS&#MWY222Y'DU#9VPX@9U<9.GK5YW(_P-
-MO-X?]$3:*F$HZW#0TZ2A&@IO!$=F3&N-K7*T%@5:.?-Z8A[C<WTT:GR,MC75
-MAP+152^)YR7B/UL2?VC=D*`(AH+:!ABF6J#1$"=^)&'"Q^\GRWMGR"#*U(P9
-M))E*-B5!IF%*Y`N`$P=^A,&9/]@82I5Z/*^_"<Q?!;H4FR.>)O0EP>*)ZK%!
-MX%,T^B-@V,)`96'INXAZ`.=[HU2M56N(\Q/5-'";4S!/I,$7W5J*4L!*A&&4
-MB(@M*B&`1127H#<`_DT,772=T>A=.81Y3"&BXE$Y0#/8$B:KSUU5AIK!SS?X
-M%M:;E(HOY=$M_G`8??/,N70&[LZ!RJA/@6BL<?*#\=])=CJ`2Q#A3/HC'&;A
-M2!LK9:6EZ#[!Q,F+&GA1N5<8;_PL/B!UV`,Z)Z;P92QNY*FU:.L9JHS\K,\H
-MX)^A!P^]B.\KH#.7+@5W[156U,!>$5/MLB?%7/?D,EV%HL)G2RBDF-'$0,)T
-MH#])[8!Y%5N'6L:C8:W!W^@'N8//X0^V>`)^KSYB<'BPK9Y($!R#"D-+!>LI
-MCGMS4*\W8'CV44HR_)XA0WXH5UHSQ%F.PB>B&X[[%V!L4`1<+.^$!I3H;@&X
-M6B`<IC]PA&!E0R06>0DAEBA)YH'01G`[]=Y(,^V2.Z3K^^9$\MV&)`YY0PBA
-M7\+104-7.(5,B!^+BV@O-_LC6A)H8?K#)M02]K_$/0EX'-5Y3[9E&]GF/DQ,
-MX$E">&5Y5[NR,2#+*]FRC0WR*5_XWMV9E1;MQ<ZN)1G3V)@C$$BXDD"@A)8>
-M29/T"DW;I$E-"21I("5)`VW3`$EZD#84IR'0I!';_WHSNV.+(76_K_OYS3__
-M_[_[O?]XQUA+88I$1@K2'\5$/I.BUN)2!ZT,SG.?$\1%:-6MDY5,%A81W3H.
-MLMJGYVMG%-:5B#3K%#0)=,U";_VBK8+MQ$E=V1`[D]8Q72PXY2*H9+!TX.`D
-MLD"'4HH9]/5=7GFX!.VT0=IUE(OHTZ@M*F7#@^507B\%FV`J!-VTNF3;*P97
-M[CL`D@Y"K]AI<]$:SVTQ](/G8*TOZ%%87=G4L7;B`+XT@]^8+)3*(+!-:J/G
-M%S6SU^0F!A5ICV7`_08O[6"FJ")#!R$"/@^F]^&X=^L:T6ORJ'EWE=ND8I%8
-M9)''`C6=A1Y;F\^@$BE78&99N*)CIPVBX=SIQK19XZRYQ$K>'@-Q@WKK51M6
-M8T4I+TZ:LJY:LB2J^E=&HS%6*[7N+C3'H4V/G%T>!H$QD@I>NP4][F0.DF=9
-M*)4@?V,?4L-V:D3E;1LU%NE:,$DUT=`X2"3ZW7-XHMIS9*)ZT<T3U2R$+T.X
-MZ"CXE!`>@S!PRT3U$0AO0!BX=:+Z8PCJ-O21JN0GG0GA+`AGR_R="6$&A--H
-M;QZ5IU*-$&9!F`9A-H2I$.9`F`+A=-I#4NH,"*:!O-5!NLB0G'(!A8@YH,:&
-MRL..MZAG`BH_"]1-(I^RC9[W\H2QDV@ENV@GS`)MX5T3U6?OAO9^$-I][T1U
-MY7T3U5_>#^\/3E3G/C11_02$XQ">>[ISSO>AECH<QB4#J&7=XQ03*3M.%A@D
-M"P:MQ\9I&&>GD2DWQ#4H@+)6^G_YD\VK.6W.G),O&A1,.WL(!+=0)-,*56M+
-M-2G!1/^`-Y=WUZPF"DV+'"BA#"[&C%@F*^DT2A%.9(CA`)I)93!9CK;;R+\0
-MME.&69X3A-0OO[H,6+#YYR(+EQ$J3:CN+Q3'2YFAX;*.7775Y6%X7*G7)4HC
-M>KF5A<KPG)DF<VFZS+&9,L^:9'[-D7F$\_$<"!=`F`?A$@BXR=@!81&$I1#Z
-M(0SB.@SWZB`<A?`XA*<@_!#G9H-ZU[\&7YCB"U-]89HO-/H"V0$)#35YF+A&
-MON9(6R^$T`PAAOLD$!(0CD!X$M-#!D<@-$`F#9!)`V32`!W8`)W7`,+8``+<
-M,!<"]'%#%`+^]<7]D[?1WR9_&Z;7C(\9(S-.9JS,>,T2?3!;VH*A@-.PDG12
-MI4P2Y\TX>"SD6AOQ=31,+5NF;M9&HS99'%]>8N`Z10WXLSD9VU\;HUU.J$(=
-MP\X5R^/U-%Z$&,55H^M\I:8*EJ?TW!R(RC_]-.BF9V!]_!704Q#TUT!'0=CX
-M=5B_/SM17?,<K&DA'.H,[_94`SK,BK:1P4M+).ULUMU\):^86,00[[54SI1)
-M&:#+G,U`'7CKBP@5-(0U.&Y0E0I9%-0::L)*%$%K&Q*LC8JPEBF6R!$A74&+
-M,8@!'DX.%/+FC?V@YTL5L%(91T,6Z"1#M/6K!SG^,+@^X-F"_BLE2+GA7IFE
-MP4FJH='ZH%(LDJ]`>S+A0CX[SKX];]=SX6`\LJ`1;<^,D&+E-8`9`J,R%=0H
-M@6L`L*&H`]E;\/!)RM?)<=E34R<L`5F9)HW?:MDXR[#'%'I6TBFB3SD/RALW
-MN3)#%;"&4,EBI=P)S0<@$<V.F]FMGZR&@.0R9>PAL^'F>A[L#H?:K/9))N([
-M3=TTS/5N/51)E*P8^5BT9UA+[O+(N@.\*+4<+`.X>,NY8Z""N!*R.MO(.8-T
-MH;;B0JA,-X@0+.2*!7+U?"ST;BI%LE"XX(B],[M+T5%(&:PB6$:[=`"Z0;LD
-M,T(6'IRD2XDAVN;%#I$(AF9;L$`)I7,H"]DLOA.4]<_K$]4SWP8_Z3C#VK`?
-M:*\(_SC`8_)^#.C/OXO@SV^R$'WCW<?]OPQ]/X%V0]GJS7>.MU_X18#/0XB^
-M5<.3]WM^[M&.PSL8LJG3&J?/F'F:G`_.FCWG]#/./.OL<Q@_][SS+YA[X7OF
-M7?1>QB^^1#>WM%[:=ME\^5ZF?4''PG"D,QICO&O1XLN77''E5=U+&>]9%N_M
-M6[ZB?^4JQE=?O6;M-=<.K%N_@?&-FS8/;MFZ;?N.ZQC?N6OWGKW[]B>2*:]F
-M6!NNARD[U!Z-F9(X=\S7RPO36W9Z:#A3O*'DE"L'1L?&#Q^Y^>@MM]YV^_OO
-MN.?>^^Y_X,,?^>B##WFYN`FN'\GF\@4OV4'R-%&AXPZRUH.;UVFKA!(&*[(F
-ME;3V@8Z%Z3TTWJW7=FX@;<!N=:X"*S>P9]2N[R[^W(LWOS2OGX["^)@`-P1I
-MT4U'HO+[QB]>>_OU+WWFI6WK!O7&Y0,@4`>ZS=)\P^#J26FH+=Q-A5(ECSL.
-MD.O&+2LV@_;O]OQ?23<(!A3T&JP(ZW(`99<"_]*V(.TRI?"8#$\NV+19N!S,
-MH2^.=%'$4O///O#"9:_.BIQECHI#H`<Y0CNL%T$M86A+J6["NA5V8SI3RHTF
-M2NZY!9T3U*Q;.RM.J=,II3K!SO#B%CSG+#TB*55<2Q%5<=LZI7"-&L[D\Z#)
-MBIM@?:!6H=:EM6D*C30LY=+9PF@]&;T1HDY2$,6"DO+]8.`=W;Q,1U5QD)+"
-M^_JM`P,JK^-`E%P]IURG07.=A'QB16S<'@3+@FM-MSXG8WI))ZDM%H/=LA*@
-M*JY).,/\'HX[N8H%=KFX>KNB?0!\PQ8`",=A;36BG$*Z#$K=AO28URHPF"'H
-MUX4:&=NA`DX[)MBV;M^JS9M7[5B[A:N("Y]*'LPJ+(!=MT5\#K"HNJ7-:5';
-M>?L+XVX](>XHY-VM)VL2<AULTZ"=RVR$F9)7Q:WY`:BQ(*M@V/E5JQ"/S"IT
-M%L%H%->F)=**$MC:84%@LDCO]O.NC$9OIEFU118X-0>8Q0&3,4AY&*J^$3</
-M-$DO"@W6/Y.OV-"J,/C9*]TA1EM+K<([%6!?4S1UZ`9"(0V4"J0&+TRMRA_(
-ME`IYM'OO-DEQ94$:L<E]&R@4BO*ZL>:]'_>U3$-QTPLR$@<).U9OX[6I[HI$
-M%\F,`16Z=OW:+6LWK!\4ER6LV?&NG89XE!OF"6ES[K0A.4J;PLE:+Y!3Q4VT
-MDV05%\P.%`6HBC0">J6D:9\`)1%/;>L;B:Y&5B*@MC.;<#2\H;;6[%A[/1VJ
-M74-V6BAF"R&9M.[4H\,X1T))FD.@>2D)1Z[`%,B>G$4[>R?E\&;)R7F]5D&'
-M>(,ND72T5ZW)Z%D8\?JL6DU>'>_`PR;RB]?ZI:J;Z;2EJ7BOTSO?7U8;EP;!
-M9=4P4(^#8UNNCPY+%/"-P6(J=^-464588;>JUKAJ==1\%5(+U().^(<;V1VJ
-MHUE1_=5"%<9]O%85:5&=BKC1'A5=IJ)Q%>M0L;#J:E9="U17I^KJ4UT6K(?@
-M68$'3B#5A5NK8')Z5$\KF+.XBB<+UKB*9_(J+LNH>$GU8H(^E<#M4)4`^U<$
-MD,T,Y?D)SBRZL$`#O8`WC%32'H(<4LTJM5"E^A3*:P<]'94:3I3HT4%/Q^T2
-M>*G@$]<>J4P.Q-F"<H:ANQ75&NN`LP86NV"];$\[]"H;E@<5[#39(29CAXNN
-MK,*->)7.4<>09A^VQ]0PWC+*J$P:5Q8VM.EZ-:)H^BB9]HHZ-^L,9])EE5N@
-M<HDQ!78=M]$A0+P\K'*A(%C%4#^:?6N%6V^J%%>E/E@)@JF'^LKN7PGO@7&&
-M(#Y.'`P^]J"3ZRS!"M$I5$H@D;11KFA0<'];T99D):(J/:H"U:AP0_#@`ZI'
-MXN7.0$6"J%!-JC&HURZU:_X>M0L[>8_:HR(AU9TOT)D?2!'?(U#%3&I$X4(:
-M*DG=52XH[$M;[59I7)RJ="I;<&B5!:OC-)VWI$?L<26A5^4<Q?>,'`5>7LIN
-M5JBDPIE%5R[AMT2V.)Q0G32ZMA4&VP>V3G72&'06(;^$9:'I".,B/YS,E'%*
-MP$#A(VR/E;%4W(K%,0C3[,$71O/TK/`3U]ZX51XFKR3,TZWV/86F5='I`<P0
-MG,6XX>"^46$AM/;M*@1=3"]680`5I@KUD>($3IDI[884]6A1EQCSB/@J:0DX
-M`JBX5B&9)2"M6Z$=M-7.]BA,O#J$DHIQ,&8$I`7F.NVA.#!VI?)P&*<"&A^\
-MTA=&MQ.W%8:,>9*$7BRG)I9KQ,@:UL:A-'49$$)5,M$<%7%4<MS&>D!Y$)'G
-M)6V@9^5)*2(@QRJ"$A2F:=CE:H,X35741J!K<<^8I@0Y)+2]HBP103MO@2!S
-M2>'1C,53FZJL'"/.0`]CFYQ*$<H:[5.CS6HL`L,,BIK5M0JATH"Q6HKCQ<G@
-M+=("CTP:'FPHX,4JT`.,`,!>PE`<`70P]/SSD!%.8)J6M=>ZXNB2DN],5Y1"
-M5K&=W.5)O+T#.73UP$'S2JCQ\<-Q/)/?4`$UD[`R8Y!13-YZ]*(KE`A>JJCP
-M0F:)-F;0_73/A&D'!RD+O3LH\/O>YU_[=.V^[#-7\_GI$P)?F:H(-JYA_&="
-MQS^N2^M?H<\5>%CHZD[&S>_!"N,[*O7T-;YX.WSXC9+O?H&OS.;\GQ>\*O`'
-MAC^'^4?7RKU-@>I,59?OH]<P_1Z!^,?'$>Z]EO&-`I5F^L."WRGPF-"_(_@S
-M)GX+T\\98'R*P,-"#PW4MP^<`,*[?71]*=,/"'VOX5_&]!<$?UK@8_.9WK:>
-M\5D"U6*F_V@#XV\*[-[$<)7`WG2JU^I-]NK>;*_3.ZJ^/<CTKPKLVUO??\4M
-M]?5]2/`C`@]G.'[35L;?$GK?"-,7"UT+/"9T.>/M)+M"FPW]*_%0DV[.JF@D
-MIM;!S%Z7*.FNJ.Z*=4>O[+Y\B;YZW1;`HU%U_<AP7])...4(JMJD8T5`<V"^
-MCVR7>MW&Y>R_@^$K`M6C`C\@\"Z&EQ!)J64[I)YW2[K[&1[[F,1_F*$6^)C`
-M:I7/-8]?Q^G;=S(TYQ\W[ZSOQY9=C%\@\'R!LP2^+?%_*O!E@=\2^,6=]>E.
-MDW.4_3.DP)DPM^5@%<]:M\SD\ZK-,[BM2"\*C$H&QU`>9O`Y"]+W"S0%/&8.
-M:@4>%M@G_%<D_72A[Q`X5_CWX-G9##Y'0_J8P"N%_SR`33/X;`KIPP)#PO]#
-MP6<*?+_`-<(_+N5/$_H6@><"V#J3S^>P_`ZAEP4NEO1?E?+G"-T2>*GP/R&X
-MR?\6@2N%_ZJ4;^JW6^!%PG\0QV$&GQ\B_9#`'N'_G8S/!4+/"EPH_#\3?+;`
-MNP0."/^_I/RI0M\L\&QI_^/2_E:AEP1V2?HO2_MG"3TIL$7XOR7X%($W"UPA
-M_'^2\F<(?:?`]PC_`6E_O]`/"NP6_M]*^\\1^O4"%PC_"<'-_+Q3X#7"?T/*
-M;Q3Z-H'GH_S*O,7V+Q+Z`8%+)/VSTOXSA)X6>)GP/RVXF=^W"5PM_!]+^:<)
-M?:_`BX7_B+0_)?1?$Q@7_C]*^^<)/2\P(OR_$/QT@1\4N%[XO_3)_R;AGR7C
-M?]0G_S<(C$GZO_+)?T)@L_!_4_`&@4<$+A?^#WSR?YW`"X5_GT_^QP5>)?QO
-M^>0_([!=^'\LN.G?.P2N%?Y_^N1_J\#SD#Z3S^9KY;\B\'))_]<^^;<%M@G_
-M]P0W\^M6@:N$_V\^^=\C\+W"_YA/_F\2N$SX_^"3_YS`L/`_+[BIW]T"UPG_
-M%S[Y-^6<(^/_E$_^'8&+)/TS/ODW\[15^+\CN,G_J,!^X?^+3_YW"9PG_(_X
-MY/]&@4N%_X)/_D<$=@C_<X*;^GU`X+7"?],G_]L%7C")_(\*O$+2?\,G_T,"
-MYPO_]P4W[;M=X-7"_P^?_.\3>(GP'_7)__L$]@K_)9_\%P1V"O]+@IOZ?4C@
-M!N&_?8KV_\D`^_\;`?;_^P'V_]X`^__-`/O_1P'V_R>G:/^_%F#_/QE@_W\4
-M8/\?"K#_?Q]@__\\P/[__!3M_],!]O^W`^S_/P?8_P\'V/_O!-C_/PFP_S\[
-M1?O_7(#]_TR`_7\MP/[_>H#]_UZ`_?]B@/V?.$7[_U2`_7\\P/[_,,#^WQ]@
-M_[\=8/\_&V#_?WJ*]O_K`?;_4P'V_]\#[/_#`?;_NP'V_PL!]O^_3]'^?R7`
-M_O]N@/W_UP#[_]$`^_]B@/W_TP#[_]8IVO^_";#_?Q!@_U\/L/\?#[#_+P?8
-M_[\,L/^X`;&QD>5S>R/?X1QL9'G:U<AW-C<U<O]<U\AW.K<VLOSN:>0[G)@>
-MQW='(]_]W-+(\K^[D>]Z;F[D]NULY+N@VQI9#QQKY/N?F'Z*E']$RK_0E#^7
-MRY]ARI_.Y2=,^9)^FBE_*I<?,^5'N?PYIOS97/Z3->6;WY/[O?T7_'U2\"F"
-M?TAP<V_VD.#3!4\+;MR=+?N]?1;:WQ)\MN#M@LMU(C5#\',%?VL?X^>9[U<$
-M/U_P%P6?*_A3@L\3_`G!+Q;\XX*'!;]=\![!'<%7"[Y'\#6"7ROX!E-_P;<+
-M?K[@.TR'"B[7E]3QO8SO%/QEP7<)_DW!=PO^!<'W"/XIP?>:?=J]OOW22>Y+
-M3Y7[P6?(GAW*#LH1SOTJ1*A"A"I$J$*$*D2H0H3J^_BK@RK].M7_^P]J@1>M
-M:N?GX98&;G](X*4,]\]G>&RY[*.V-M3UT['ULL\99OJ$S?%>M7W]>:WD)_`Q
-M@7T##/6ZAKI]S'?[HS5`]$2Z>VR>WXJGZ#HJ+\VZJ9MO-S3AR3P3K0I^&$34
-M&'\FU-&LEV),ODZA=4B/Y2.1L1C>KFG7=*0,6>)%`CQ5Y@L"E`#/",.4``\D
-M,3K!=JUW0=Y\Y62/>RT"8E*J<*E0YD0ZJ5.8*D6OD*Q+TYD6Q\-K"509C#(&
-M;&H$5C_:@_<H^#!+TV$6II`S<+VH2[MW!I)9S(FN;E!>U"+\`0,/Q;DDXCO(
-MSYL8W%Y.Z#68CO-;N"+N=U=0>CTAXH^1D@$(=_D8IFOJJ?RQ5CV-6]FTM.8[
-ML::H]AJ:3N#MD*9PS".52Q4;*]T3AXR6Z>@R;D,4\:B'NQ^2Z84R#4KX/YZX
-MHUIQ.RW*7T]1I'RF2/T8TN/>`-%M%YQ1-$\H7KF2&O'%@Y=VB8<7`3B>?"X+
-M\<HV?8PXJH<S0\.8(IU-#%'F%#NLX_@H02,J/3*C^$3X$`U@(F='(A'ZA/(0
-MUYPZDJY7\*L,/YYV:NS!"O25RZ#IM<P,--ULF^_0?R-CV5F\<F*7>GM;O/A4
-MIU2?1^#;`U@V\V)AO.)-;+[VX\:4(VXFR!4>NFU"71WU^'6#+JTU;97!,>WA
-MUIB42W5]2IA$8>XK3Q9J2_+'[Y4A-M(-T?MTA/O<JN2*_CG2I%W)J>O0%*:*
-M=7C$C+Y"XR>25\"\A&F=*IGY[5Y`HGYHXJDA1^2>`%.TF*X[9Y=:%<('H"W)
-M2A9O1M8GX.\JH07F%AF582Z,47)?6J^#>?Q,4>Y'F[[R*`^JE3^C%2`&=MGQ
-MYUC?@G?,%@:MX&N0VXZ*UXRZYM"=ALD240=3)>IN/M3G0%]EU&<`*L:[K\>1
-MZ+4^%NC`0<JG6XNTN+<HS!09B_!0BW:$%')[$I/4W+_`B!"'RRJ6[`.90L5,
-M8)R2=2WRAJ#F;@;5;31C88I"UL(K#Z:>M>602JI-!IEY@V/4ZG#&LNP\%@-O
-MJ">%4#L*)U0`<J+8H+/=C`[:I0))69AM:"KLR9+[+LJ/ZHJ7T/`V83C<HN5^
-MAZO%>V_2OUHF-[7H$S,Y]"MF<NADF9"B/"$?_I[YD$>+FLR@5"/ZG#>.8XP)
-M=.?196%/U4;UHG=YQ/HDE.PF3,41%VGSA72MRJ%T'NH:VZ;:,82VW6A4'+;?
-M6!V`IG%-)S4VWNV:FJ9P+V$^]&6Z9,'9+_.;"O28C/X42]'D5J7@ZF\2IR:C
-M127+_^GNWL.KJ`X$@%^A:J2NFVZM=5MV>U5VR]L`'QKI+MZB8&!!(UJ7@L@-
-M+\,[AH=13+VLK:`5B\4'/AFMCQ2MTO6%UL<5JB*%%A5JM,5>P=K4ZBZ*L+1%
-M=W/O_$Z2&X/:?OOUC_H'OYZ9\YXS9\[<S$S[Q7-LZZ6ON'+[J^#'5;+CBA:M
-M60H#O/@R5]2`XDXONN2U:T/_OW0;^K=.CQ]1Y9;<!N076=8,<R^8/:^JSN/.
-MS;5<F*QWR<X_(G1T\>6\[>-9R2XMDUOS4)M553O#K'IT_JIQ=)O)U87B0Q-8
-M[_8S;;[5O=M>EGN',>)J:%?KA-ZRQBX\1I8L/%+6YEI1>.._3^'UJWFM<5,?
-M\6IT]V3-U*JD&K:=>0M32)O*MSZ.UC9A:''^<5AE%:;I#Y42KWP*__9Q%]*E
-M=8%6N!7IU5'2[LF957,+Q<;)XGSVOY9)%?[MJ)TM69Q?>/^_I:'Y_UHN#.T:
-MV2YEFQ3QO57K@BCNL]95T;QI$P<GXT=@?5>BL-0N-#?^M$1AI=PKOU(N)/BG
-M.,FX+X]/AH=_DX7'.]M<.+O%<0K3>^'%S_S*+$3^^&O8?J]-]?'.^OKV.]O/
-MKT43;,L,.WMD\XE6/,]^TEFV:#E?_%A__M&_PGU'/CQWRI3\^R3Y&K:Y$C6G
-M+OQ3:%_AOC7?EN;SNCG/CI;T<46;9^KFJ2;^WUW:3Q^N8?V*9J,V<TJ<K#"M
-M=WRGT#H:_C^F^$+S\HT*+>J@57_JI-YN`MW?'/])YL%/LK;*C[!QTZ:._Q.6
-M+H5_NG@Y(Y^V:%P.KFW=-WQ8\;Y:<V;^GBX>W./RZXD_O_!"ZOT6/W3D&4,_
-MM@+YQ][__`H44N^W`F=6##WU(RO0[DB$WBB^4_OP^;K_D[=POK4;@?'Q[7CI
-MU_:^LH.UGPJU3]LV@SZ%,O,G9:_VB\*.,XTSCKN]9679G$TA9ASJ*)^.UIMA
-MALKGDW_(N3B6LZKMV12_=9!/$K\J5'1=*+Y]CT^*[O$`B`]'66&B:#F9=8[O
-M`K5+;5B%'PJ*][>>HO&74^+OFLY)3)HS,_\1H<*+(?.J"H^RSZF=EG^UY:_H
-MO]8W?%M>$XY?/VY]67ALV_CA[Q+AN\7A^\/A.\/AN\#A^[SA^[CA>[#A^ZKA
-M.ZGA>Z?ANZ7A>Z7A.Z7A>Z/ANZ#A>Y;A>VGA>V/A^U_A^U[AOUQOS]NN]3SN
-M"Y[/W>#W[W/]GGVHW[.7Q&9J.#GAN76_IW^="_PN_C?"A\7N?,_SZ/VE&Z1=
-M!RGW/<\#?\;SP%O$DU\T03UZ>V[;\^Z9$X2KE%L6ITL)ISXGW$/^)\7Q)Q\5
-M[\]-UI[^_KYB?_HX/J^?QFN/^-WWZO=;X_VK]6_F?OE=$&]?$MG.Y"GQ_NK?
-M2Z_<U,'R3SE.HX7G*?]8[7#<:I27GJB=\_7/'NW<1_F5[A&_K^>QT_KK0.6$
-MXW&KOX>\JSS]GIH6.R:,)^\C1(NE/X>#M=]QS-XD_4#C2KFI<NE[:&]G];G%
-M\39>DG/49U+L/RHW:;Q&]B=O,EZDBXS;7!_M'6#[..4\H)[:F:M5+^,^TSNV
-MSG&*QMK_5!S_Z/`^QF['[P/CUKAK#.-=?T4SU<??A:*$>APOWFG*U=][Y9]^
-M7/WL3[PL7"G^$X[S.N6_HI\/4,XARG4^[C0?I7K%X67:=Z+R<F?+=X;RG'\Y
-M?R]+Z<?TZ;8[GLEYL6_))SLE#I==II^<S]G7C=\P_B^T77^GQ$OHQ\1L]1'.
-M&3?IH=(;;]%T&L>1XQ0Y?[/Z)^'XYAROW*1PWJCG0MN?CMUX2#@OZ7Q+_%I_
-MFS\3@Y3WFO-&_^6FBJ^?(NG2L\4W?V9VJV<_UX>3U<>X3*M_H^.7"_WQ$^69
-M?U/A>.F?]`'RK5#.?&'MFSW9_-1+/L?*WSR;Z*G^CFMJD'8XWS/FA;3XV7_5
-M3^OURSOZR3R6-"XR/[-_@?*,ZXSRTN&X#U=>3^>]ZTGV7IX:>Z3CES,.<U_1
-M_O/D<X_RG&]15GGFG83K:E0FG7DCLTJ_3!7?\>\:YE/]D#C0_F?U;X\P;J0W
-M/A,W"W?1G^'\=QZGG^E4=%YF9B7"<PAQ.&S7OBA<=[=K7\@GG#^#]=N3^N5K
-MXN\TSLT#2>,A<MU+]A-?_NDAQH-V5YO7LN$ZZ^_MN:WJ61;&E7CFBX3WX#))
-M^:YV?(V3]-WJY;VBK.M[UO%?'^8OXRPS4#\X+IF5TKT46Z*^J?=M-S[*O??V
-MAOHT\E[>S3MX,Z_A%:SG7$YDFLL<SPR_R2NXA#6\B'4,XZ&:MZEWQ&7L;ORF
-MPSI2_$N\I[>`DSAV1/%[@(.$CV`YC^=&[P-NYG-\E'=Q!4_C8)9RE_?NWF03
-M'^!*+F$%1[$\I//>X"K>RP;6LYH#>2P_S?`^XU8^PDU\F`]R-9-]X_%4,2H.
-M#^`_L)0EG.Z]PM,YBN7\0+P]W,7?\I?<RN6\BHMX'JM8R1KE1,9%H_<9R[W'
-MV(-=>3#W5<;NY'8V<A.OXQP.9&<^[7W(=3R-HSB,5W%<B#_:^.(7;&\2OH.W
-M<#D7<S1/Y4D\@J]IYZ-<Q$K6A?NK9XU'[V.6\Q@>Q<^R"S]0W[W<S5W<P5]S
-M.W.<+I]S.9EICN5H5K(AK#LY[*S8(3R9Q_%([O9>Z2M<Q_NXDHLXD],Y@2-8
-MP1?5ZRD^$>K),<JO9-8Z;(7W3Z_G8E["^9S!,SF"7V%O=F4IZY6WD&/Y>>^M
-M=F(9?R'=5F:YBK<SXK*P;GK..)3/2([@R=S+.WDM+^8,5H;W:L>$=8#K,R_B
-M!(YDEDV<Y;W7:DYD3KT;N9D5VG&]>)<PO(^[4[S'A/M[G_9PSR/^<7SLJVP\
-MVWCFD[;?Q->EKV:=[94<<RFM(\]D90@KMYPUO)XCM>=FX0V>,TTOEB\KQ=ME
-M_S8.J8K]9_XM5XA_$VNXWOZ'>!WK.)[=W3=%TC7PT(G.5R:XVO[(\XZKK>OO
-MY7*F_&ZR7OQ&VQ.>;\R%\(OA_Q_+?,TR=F4)K^657,IO<PU+MTBW)=P7FO="
-M^=S&E[F%ZZ>$^TO](/WA(^)VK]"^(5.M7W@<^[,G#V4G-DJ_F=G07]S(-5S-
-M!MXGGXA7<SXGL()3SK6=XSB*I_"K/(8'LDD^&_D@%]F_@+GP?8A#N-+Z^\?6
-M_]^R#K_4.OHM]PE76-_?('R]=+O%?\K^1NO_]X65DWU"_OOXC/R#EXF_W/[7
-MY7^G\/?X!]L_4,XETB^5_K?V-[G/8/8-X3?"_;?XC)27>E.^3)18MQ^L'0<Y
-M?W:)]TZX;Y&>"69VJC=S_ZU^0?FE/R5__15ULK[L3.'H`(;MPLF$[?^K_."U
-MZO&V\AR7Z+N\2O\X;M%]XO^.6?5_EB^(_YC\;<_=H_TOB;?9_C7A/E^Z'XJ_
-M3?R<>JT2/XRSGZN/WP%35TN_ECOD^TOA#>+9GMJJ'K]2GG&54Z_<=N4^K%SF
-M-@H_+M]E\M.^;+UXK]FN'6GAG/9$RHU>E=]_BG<;]4/J(>D>U)X?A-_SI/.[
-M:<;^I'8F'E&?X"^4]XK\7J;S."&_S!;EORB_:X1O%O\[MC-G7DCXG26ZTG;'
-M-;5.^?+)&1^1OQ-DA=-A^_/R_Y'Z,&=>B1X5_T;QC)M(>='=MFMW]%/Q@YOL
-M9^(ZX3#>]7?Z)W3>9Y\6/^3_?>TSOK/":?-C\IOR,RZ3SJ.4\9+1?QGEIQ=I
-M9T:Z%;8+YRZVO8%WR5<X87_J&^KC=YSTM\6_7'D72:<?L\9=RGR=6\C_H'HE
-MC>NL^2+GN"2?4\YZAGE`_5/O"KM.Y(R'1!@7X;S27YO.B^>IM7R8]_`VWL#E
-M7,IO,</S6<M9G,0)',,S.)+#.8PG<2![\R@>P5*6\(\UUH5\F[_A-K[$%[B)
-MZ_@X'^;]O(<-O(,W\G+6<PZG\.L<SA,Y@-UX)$M9PO^9X_<:[N"KW,I-7,L?
-M\7XV\!8NYV6\F`OFA/^?).W@.:SD,*8XB'WY11[.PUC"3OS][-AWV,0=?)X;
-M^0P?XMV\E3?PN_P.+^>E7,2%G,_9K.94ICF>9_%TCN0P#N$@'L^![,N>[,YN
-M_!+_GJ7LPL[<-\M]*W?S7;[-)N[@-OZ</^,&/L-U?(QK^$-^GW?R>[R%UW`9
-ME_)2+F(]+^!\UG(&I_(<CN%9/).C.((5/(DG<A`'L"][L!N[\K,\B`=PWTS'
-M@;NXDV]R.W_%E[F9&_AC/LE'>#]7\P=<Q=NYDC?R&B[E8F9X(>LXES6LYF2>
-MP[,YEO_.K_$,CN(I',)_X0D\C@-8QC[LR2^S&X]B5WZ!G^?A_#N6\C"6\$!V
-MYOLS8O_`O=S#]_@._XMO\4W^AMOX(A_G[;R2B[F(%[*.TYCFR>S!SX3Z3O?[
-M-=?R+B[FA9S$?V,_]F0I?S?-WR$8\0+.915'<BA/8%]VXQ?95&V>YP.\FE=Q
-M,>LXB1,XFL-9P4$L9Q\F^3GN<?_^`ANX9J5Y.SQ7P@J6,<%2EK!)^B.%SQ>.
-MN)<[N8R;N9Z-K.9Y7,$LE_`;7,T&EJM'3C@E/$/X1'_W*V<?'L,C>!@_51O^
->?NYW1.NU2OF>SCK6O&M>J.WXO>G_`\5UG,-@Q@(`
-`
-end
index 75279a0..8924148 100644 (file)
@@ -1,9 +1,11 @@
-$FreeBSD: src/sys/boot/alpha/cdboot/version,v 1.2.2.1 2000/07/18 04:15:56 obrien Exp $
-$DragonFly: src/sys/boot/alpha/cdboot/Attic/version,v 1.2 2003/06/17 04:28:16 dillon Exp $
+$FreeBSD: src/sys/boot/alpha/cdboot/version,v 1.5 2001/12/11 00:49:33 jhb Exp $
+$DragonFly: src/sys/boot/alpha/cdboot/Attic/version,v 1.3 2003/11/10 06:08:26 dillon Exp $
 
 NOTE ANY CHANGES YOU MAKE TO THE BOOTBLOCKS HERE.  The format of this
 file is important.  Make sure the current version number is on line 6.
 
+1.2:   New calling conventions for fopen.
+1.1:   New semantics for finding the kernel, new boot.
 1.0:   Released working DEC Alpha version.
 0.1:   Initial i386 version, germinated from the NetBSD i386
        standalone, but enormously modified.
index 725f03e..a021085 100644 (file)
@@ -1,5 +1,5 @@
-# $FreeBSD: src/sys/boot/alpha/common/Makefile.common,v 1.4.2.5 2002/07/17 12:34:16 ru Exp $
-# $DragonFly: src/sys/boot/alpha/common/Attic/Makefile.common,v 1.2 2003/06/17 04:28:16 dillon Exp $
+# $FreeBSD$
+# $DragonFly: src/sys/boot/alpha/common/Attic/Makefile.common,v 1.3 2003/11/10 06:08:29 dillon Exp $
 #
 # Common Alpha loader build rules
 
@@ -11,15 +11,17 @@ SRCS+=              main.c conf.c
 SRCS+=         dev_net.c
 .endif
 
+.if !defined(NOFORTH)
 # Enable BootForth
 BOOT_FORTH=    yes
-CFLAGS+=       -I${.CURDIR}/../../ficl -I${.CURDIR}/../../ficl/alpha
 CFLAGS+=       -DBOOT_FORTH
+CFLAGS+=       -I${.CURDIR}/../../ficl -I${.CURDIR}/../../ficl/alpha
 .if exists(${.OBJDIR}/../../ficl/libficl.a)
 LIBFICL=       ${.OBJDIR}/../../ficl/libficl.a
 .else
 LIBFICL=       ${.CURDIR}/../../ficl/libficl.a
 .endif
+.endif
 
 # Always add MI sources 
 .PATH:         ${.CURDIR}/../../common
@@ -42,20 +44,18 @@ STRIP=
 BINDIR?=       /boot
 INSTALLFLAGS?= -b
 
-all: ${BASE}
+all: ${BASE} ${BASE}.help
 
 vers.o: ${.CURDIR}/../../common/newvers.sh ${.CURDIR}/version
        sh ${.CURDIR}/../../common/newvers.sh ${.CURDIR}/version ${NEWVERSWHAT}
        ${CC} -c vers.c
 
-${BASE}: ${BASE}.sym ${BASE}.help
-       objcopy -O binary ${BASE}.sym ${BASE}
-
-${BASE}.sym: ${OBJS} ${LIBSTAND} ${LIBFICL} ${LIBALPHA} ${CRT} vers.o setdef0.o setdef1.o
+${BASE}: ${OBJS} ${LIBSTAND} ${LIBFICL} ${LIBALPHA} ${CRT} vers.o
        ${LD} -o ${BASE}.sym -M -e start -N -Ttext ${LOAD_ADDRESS} \
-       ${CRT} setdef0.o ${OBJS} setdef1.o vers.o \
+       ${CRT} ${OBJS} vers.o \
        -L${DESTDIR}${LIBDIR} ${LIBSTAND} ${LIBALPHA} ${LIBFICL} ${LIBSTAND} \
        >${.OBJDIR}/${BASE}.list
+       objcopy -O binary ${BASE}.sym ${BASE}
 
 CLEANFILES+=   ${BASE}.help
 ${BASE}.help: help.common help.alpha
@@ -86,10 +86,6 @@ beforeinstall:
 start.o:       ${.CURDIR}/../libalpha/start.S
        ${CC} -c ${CFLAGS} $<
 
-setdef0.o: setdefs.h
-
-setdef1.o: setdefs.h
-
 machine:
        ln -sf ${.CURDIR}/../../../alpha/include machine
 
@@ -97,9 +93,4 @@ CLEANFILES+=  machine
 
 .include <bsd.prog.mk>
 
-.ORDER: setdefs.h setdef0.c setdef1.c
-setdefs.h setdef0.c setdef1.c: ${OBJS}
-       @echo Generating linker sets
-       @gensetdefs ${OBJS}
-
 beforedepend ${OBJS}: machine
index 7598e98..55ad522 100644 (file)
@@ -23,8 +23,8 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- *     $FreeBSD: src/sys/boot/alpha/common/conf.c,v 1.1.2.1 2000/05/04 13:50:47 ps Exp $
- *     $DragonFly: src/sys/boot/alpha/common/Attic/conf.c,v 1.2 2003/06/17 04:28:16 dillon Exp $
+ *     $FreeBSD: src/sys/boot/alpha/common/conf.c,v 1.4 2002/12/19 19:34:58 jake Exp $
+ *     $DragonFly: src/sys/boot/alpha/common/Attic/conf.c,v 1.3 2003/11/10 06:08:29 dillon Exp $
  */
 
 #include <stand.h>
@@ -66,7 +66,7 @@ struct fs_ops *file_system[] = {
 #ifdef LOADER_NET_SUPPORT
     &nfs_fsops,
 #endif
-    &zipfs_fsops,
+    &gzipfs_fsops,
     NULL
 };
 
@@ -82,9 +82,9 @@ struct netif_driver *netif_drivers[] = {
  * Sort formats so that those that can detect based on arguments
  * rather than reading the file go first.
  */
-extern struct module_format alpha_elf;
+extern struct file_format alpha_elf;
 
-struct module_format *module_formats[] = {
+struct file_format *file_formats[] = {
     &alpha_elf,
     NULL
 };
index 566e812..9cc6023 100644 (file)
@@ -24,8 +24,8 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: src/sys/boot/alpha/common/main.c,v 1.11.2.2 2001/03/04 05:14:50 obrien Exp $
- * $DragonFly: src/sys/boot/alpha/common/Attic/main.c,v 1.2 2003/06/17 04:28:16 dillon Exp $
+ * $FreeBSD: src/sys/boot/alpha/common/main.c,v 1.13 2000/10/25 23:36:01 dfr Exp $
+ * $DragonFly: src/sys/boot/alpha/common/Attic/main.c,v 1.3 2003/11/10 06:08:29 dillon Exp $
  */
 
 
index 2fc47a9..c6c9756 100644 (file)
@@ -1,9 +1,10 @@
-# $FreeBSD: src/sys/boot/alpha/libalpha/Makefile,v 1.7.2.2 2002/07/19 18:46:28 ru Exp $
-# $DragonFly: src/sys/boot/alpha/libalpha/Attic/Makefile,v 1.2 2003/06/17 04:28:16 dillon Exp $
+# $FreeBSD: src/sys/boot/alpha/libalpha/Makefile,v 1.13 2002/05/13 10:53:24 ru Exp $
+# $DragonFly: src/sys/boot/alpha/libalpha/Attic/Makefile,v 1.3 2003/11/10 06:08:29 dillon Exp $
 
 LIB=           alpha
 INTERNALLIB=   true
 
+CFLAGS+=       -ffreestanding
 #CFLAGS+=      -DDISK_DEBUG
 #CPPFLAGS+=    -DNO_DISKLABEL
 #CPPFLAGS+=    -DSAVE_MEMORY
index 5fdbedd..9c1d245 100644 (file)
@@ -1,7 +1,7 @@
 /*
- * $FreeBSD: src/sys/boot/alpha/libalpha/OSFpal.c,v 1.2.2.1 2000/07/07 00:20:49 obrien Exp $
- * $DragonFly: src/sys/boot/alpha/libalpha/Attic/OSFpal.c,v 1.2 2003/06/17 04:28:16 dillon Exp $
  * From        $NetBSD: OSFpal.c,v 1.5 1998/06/24 01:33:19 ross Exp $ 
+ * $FreeBSD: src/sys/boot/alpha/libalpha/OSFpal.c,v 1.3 2000/06/03 08:24:37 dfr Exp $
+ * $DragonFly: src/sys/boot/alpha/libalpha/Attic/OSFpal.c,v 1.3 2003/11/10 06:08:29 dillon Exp $
  */
 
 /*
index 54b952e..af12987 100644 (file)
@@ -23,8 +23,8 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: src/sys/boot/alpha/libalpha/alpha_copy.c,v 1.4.2.1 2000/12/28 13:12:24 ps Exp $
- * $DragonFly: src/sys/boot/alpha/libalpha/Attic/alpha_copy.c,v 1.2 2003/06/17 04:28:16 dillon Exp $
+ * $FreeBSD: src/sys/boot/alpha/libalpha/alpha_copy.c,v 1.5 2000/08/03 09:49:44 jhb Exp $
+ * $DragonFly: src/sys/boot/alpha/libalpha/Attic/alpha_copy.c,v 1.3 2003/11/10 06:08:29 dillon Exp $
  */
 /*
  * MD primitives supporting placement of module data 
index e5cd2a6..9f8e4ff 100644 (file)
@@ -24,7 +24,7 @@
  * SUCH DAMAGE.
  *
  * $FreeBSD: src/sys/boot/alpha/libalpha/alpha_module.c,v 1.3 1999/08/28 00:39:26 peter Exp $
- * $DragonFly: src/sys/boot/alpha/libalpha/Attic/alpha_module.c,v 1.2 2003/06/17 04:28:16 dillon Exp $
+ * $DragonFly: src/sys/boot/alpha/libalpha/Attic/alpha_module.c,v 1.3 2003/11/10 06:08:29 dillon Exp $
  */
 
 /*
index fe4be74..c5116f4 100644 (file)
@@ -1,7 +1,7 @@
 /* 
- * $FreeBSD: src/sys/boot/alpha/libalpha/bbinfo.h,v 1.2 1999/08/28 00:39:26 peter Exp $
- * $DragonFly: src/sys/boot/alpha/libalpha/Attic/bbinfo.h,v 1.2 2003/06/17 04:28:16 dillon Exp $
  * From $NetBSD: bbinfo.h,v 1.2 1997/04/06 08:40:57 cgd Exp $ 
+ * $FreeBSD: src/sys/boot/alpha/libalpha/bbinfo.h,v 1.2 1999/08/28 00:39:26 peter Exp $
+ * $DragonFly: src/sys/boot/alpha/libalpha/Attic/bbinfo.h,v 1.3 2003/11/10 06:08:29 dillon Exp $
  */
 
 /*
index aa1b3a2..f9040e0 100644 (file)
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: src/sys/boot/alpha/libalpha/bootinfo.c,v 1.9.2.1 2001/03/04 05:20:26 obrien Exp $
- * $DragonFly: src/sys/boot/alpha/libalpha/Attic/bootinfo.c,v 1.2 2003/06/17 04:28:16 dillon Exp $
+ * $FreeBSD$
+ * $DragonFly: src/sys/boot/alpha/libalpha/Attic/bootinfo.c,v 1.3 2003/11/10 06:08:29 dillon Exp $
  */
 
 #include <stand.h>
 #include <string.h>
 #include <sys/param.h>
-#include <sys/reboot.h>
 #include <sys/linker.h>
 #include <machine/elf.h>
 #include <machine/prom.h>
@@ -126,19 +125,19 @@ bi_copyenv(vm_offset_t addr)
 vm_offset_t
 bi_copymodules(vm_offset_t addr)
 {
-    struct loaded_module       *mp;
-    struct module_metadata     *md;
+    struct preloaded_file      *fp;
+    struct file_metadata       *md;
 
     /* start with the first module on the list, should be the kernel */
-    for (mp = mod_findmodule(NULL, NULL); mp != NULL; mp = mp->m_next) {
-
-       MOD_NAME(addr, mp->m_name);     /* this field must come first */
-       MOD_TYPE(addr, mp->m_type);
-       if (mp->m_args)
-           MOD_ARGS(addr, mp->m_args);
-       MOD_ADDR(addr, mp->m_addr);
-       MOD_SIZE(addr, mp->m_size);
-       for (md = mp->m_metadata; md != NULL; md = md->md_next)
+    for (fp = file_findfile(NULL, NULL); fp != NULL; fp = fp->f_next) {
+
+       MOD_NAME(addr, fp->f_name);     /* this field must come first */
+       MOD_TYPE(addr, fp->f_type);
+       if (fp->f_args)
+           MOD_ARGS(addr, fp->f_args);
+       MOD_ADDR(addr, fp->f_addr);
+       MOD_SIZE(addr, fp->f_size);
+       for (md = fp->f_metadata; md != NULL; md = md->md_next)
            if (!(md->md_type & MODINFOMD_NOCOPY))
                MOD_METADATA(addr, md);
     }
@@ -154,16 +153,16 @@ bi_copymodules(vm_offset_t addr)
  */
 int
 bi_load(struct bootinfo_v1 *bi, vm_offset_t *ffp_save,
-       struct loaded_module *mp)
+       struct preloaded_file *fp)
 {
     char                       *rootdevname;
     struct alpha_devdesc       *rootdev;
-    struct loaded_module       *xp;
+    struct preloaded_file      *xp;
     vm_offset_t                        addr, bootinfo_addr;
     u_int                      pad;
     char                       *kernelname;
     vm_offset_t                        ssym, esym;
-    struct module_metadata     *md;
+    struct file_metadata       *md;
 
     /* 
      * Allow the environment variable 'rootdev' to override the supplied device 
@@ -182,9 +181,9 @@ bi_load(struct bootinfo_v1 *bi, vm_offset_t *ffp_save,
     free(rootdev);
 
     ssym = esym = 0;
-    if ((md = mod_findmetadata(mp, MODINFOMD_SSYM)) != NULL)
+    if ((md = file_findmetadata(fp, MODINFOMD_SSYM)) != NULL)
        ssym = *((vm_offset_t *)&(md->md_data));
-    if ((md = mod_findmetadata(mp, MODINFOMD_ESYM)) != NULL)
+    if ((md = file_findmetadata(fp, MODINFOMD_ESYM)) != NULL)
        esym = *((vm_offset_t *)&(md->md_data));
     if (ssym == 0 || esym == 0)
        ssym = esym = 0;                /* sanity */
@@ -194,9 +193,9 @@ bi_load(struct bootinfo_v1 *bi, vm_offset_t *ffp_save,
 
     /* find the last module in the chain */
     addr = 0;
-    for (xp = mod_findmodule(NULL, NULL); xp != NULL; xp = xp->m_next) {
-       if (addr < (xp->m_addr + xp->m_size))
-           addr = xp->m_addr + xp->m_size;
+    for (xp = file_findfile(NULL, NULL); xp != NULL; xp = xp->f_next) {
+       if (addr < (xp->f_addr + xp->f_size))
+           addr = xp->f_addr + xp->f_size;
     }
     /* pad to a page boundary */
     pad = (u_int)addr & PAGE_MASK;
index 7a208fc..00404dd 100644 (file)
@@ -1,12 +1,12 @@
 /*
- * $FreeBSD: src/sys/boot/alpha/libalpha/common.h,v 1.2 1999/08/28 00:39:26 peter Exp $
- * $DragonFly: src/sys/boot/alpha/libalpha/Attic/common.h,v 1.3 2003/08/27 11:42:33 rob Exp $
  * From: $NetBSD: common.h,v 1.2 1998/01/05 07:02:48 perry Exp $       
+ * $FreeBSD: src/sys/boot/alpha/libalpha/common.h,v 1.3 2002/06/29 02:32:32 peter Exp $
+ * $DragonFly: src/sys/boot/alpha/libalpha/Attic/common.h,v 1.4 2003/11/10 06:08:29 dillon Exp $
  */
 
-int prom_open (char*, int);
-void OSFpal (void);
-void halt (void);
-u_int64_t prom_dispatch (int, ...);
-int cpu_number (void);
-void switch_palcode (void);
+int prom_open(char*, int);
+void OSFpal(void);
+void halt(void);
+u_int64_t prom_dispatch(int, ...);
+int cpu_number(void);
+void switch_palcode(void);
index c2ba409..67f8971 100644 (file)
@@ -24,7 +24,7 @@
  * SUCH DAMAGE.
  *
  * $FreeBSD: src/sys/boot/alpha/libalpha/delay.c,v 1.2 1999/08/28 00:39:27 peter Exp $
- * $DragonFly: src/sys/boot/alpha/libalpha/Attic/delay.c,v 1.2 2003/06/17 04:28:16 dillon Exp $
+ * $DragonFly: src/sys/boot/alpha/libalpha/Attic/delay.c,v 1.3 2003/11/10 06:08:29 dillon Exp $
  */
 
 #include <stand.h>
index 705e4a8..b1848ae 100644 (file)
@@ -24,7 +24,7 @@
  * SUCH DAMAGE.
  *
  * $FreeBSD: src/sys/boot/alpha/libalpha/devicename.c,v 1.4 1999/08/28 00:39:27 peter Exp $
- * $DragonFly: src/sys/boot/alpha/libalpha/Attic/devicename.c,v 1.2 2003/06/17 04:28:16 dillon Exp $
+ * $DragonFly: src/sys/boot/alpha/libalpha/Attic/devicename.c,v 1.3 2003/11/10 06:08:29 dillon Exp $
  */
 
 #include <stand.h>
index e666644..a821f42 100644 (file)
@@ -1,6 +1,8 @@
-/* $FreeBSD: src/sys/boot/alpha/libalpha/elf_freebsd.c,v 1.8.2.2 2001/03/04 05:21:25 obrien Exp $ */
-/* $DragonFly: src/sys/boot/alpha/libalpha/Attic/elf_freebsd.c,v 1.2 2003/06/17 04:28:16 dillon Exp $ */
-/* $NetBSD: loadfile.c,v 1.10 1998/06/25 06:45:46 ross Exp $ */
+/*
+ * $NetBSD: loadfile.c,v 1.10 1998/06/25 06:45:46 ross Exp $
+ * $FreeBSD: src/sys/boot/alpha/libalpha/elf_freebsd.c,v 1.12 2003/05/01 03:56:28 peter Exp $
+ * $DragonFly: src/sys/boot/alpha/libalpha/Attic/elf_freebsd.c,v 1.3 2003/11/10 06:08:29 dillon Exp $
+ */
 
 /*-
  * Copyright (c) 1997 The NetBSD Foundation, Inc.
 
 #define _KERNEL
 
-static int     elf_exec(struct loaded_module *amp);
+static int     elf64_exec(struct preloaded_file *afp);
 int            bi_load(struct bootinfo_v1 *, vm_offset_t *,
-                       struct loaded_module *);
+                       struct preloaded_file *);
 
-struct module_format alpha_elf = { elf_loadmodule, elf_exec };
+struct file_format alpha_elf = { elf64_loadfile, elf64_exec };
 
 vm_offset_t ffp_save, ptbr_save;
 
 static int
-elf_exec(struct loaded_module *mp)
+elf64_exec(struct preloaded_file *fp)
 {
     static struct bootinfo_v1  bootinfo_v1;
-    struct module_metadata     *md;
+    struct file_metadata       *md;
     Elf_Ehdr                   *hdr;
     int                                err;
     int                                flen;
 
-    if ((md = mod_findmetadata(mp, MODINFOMD_ELFHDR)) == NULL)
+    if ((md = file_findmetadata(fp, MODINFOMD_ELFHDR)) == NULL)
        return(EFTYPE);                 /* XXX actually EFUCKUP */
     hdr = (Elf_Ehdr *)&(md->md_data);
 
     /* XXX ffp_save does not appear to be used in the kernel.. */
     bzero(&bootinfo_v1, sizeof(bootinfo_v1));
-    err = bi_load(&bootinfo_v1, &ffp_save, mp);
+    err = bi_load(&bootinfo_v1, &ffp_save, fp);
     if (err)
        return(err);
 
@@ -132,8 +134,8 @@ elf_exec(struct loaded_module *mp)
     /*
      * Append the boot command flags.
      */
-    if (mp->m_args != NULL && *mp->m_args != '\0') {
-       const char *p = mp->m_args;
+    if (fp->f_args != NULL && *fp->f_args != '\0') {
+       const char *p = fp->f_args;
 
        do {
            if (*p == '-') {
@@ -149,7 +151,7 @@ elf_exec(struct loaded_module *mp)
        bootinfo_v1.boot_flags[flen] = '\0';
     }
 
-    printf("Entering %s at 0x%lx...\n", mp->m_name, hdr->e_entry);
+    printf("Entering %s at 0x%lx...\n", fp->f_name, hdr->e_entry);
     closeall();
     dev_cleanup();
     alpha_pal_imb();
index 8510719..8b74645 100644 (file)
@@ -1,7 +1,7 @@
 /*
- * $FreeBSD: src/sys/boot/alpha/libalpha/getsecs.c,v 1.2 1999/08/28 00:39:27 peter Exp $
- * $DragonFly: src/sys/boot/alpha/libalpha/Attic/getsecs.c,v 1.2 2003/06/17 04:28:16 dillon Exp $
  * From:       $NetBSD: getsecs.c,v 1.5 1998/01/05 07:02:49 perry Exp $        
+ * $FreeBSD: src/sys/boot/alpha/libalpha/getsecs.c,v 1.2 1999/08/28 00:39:27 peter Exp $
+ * $DragonFly: src/sys/boot/alpha/libalpha/Attic/getsecs.c,v 1.3 2003/11/10 06:08:30 dillon Exp $
  */
 
 #include <sys/param.h>
index 6072139..035428a 100644 (file)
@@ -1,5 +1,7 @@
-/* $FreeBSD: src/sys/boot/alpha/libalpha/libalpha.h,v 1.5.2.1 2000/12/28 13:12:24 ps Exp $ */
-/* $DragonFly: src/sys/boot/alpha/libalpha/Attic/libalpha.h,v 1.2 2003/06/17 04:28:16 dillon Exp $ */
+/*
+ * $FreeBSD: src/sys/boot/alpha/libalpha/libalpha.h,v 1.6 2000/08/03 09:49:44 jhb Exp $
+ * $DragonFly: src/sys/boot/alpha/libalpha/Attic/libalpha.h,v 1.3 2003/11/10 06:08:30 dillon Exp $
+ */
 
 /*
  * Copyright (c) 1996
index 15959a1..414983c 100644 (file)
@@ -1,7 +1,7 @@
 /*
- * $FreeBSD: src/sys/boot/alpha/libalpha/pal.S,v 1.2.2.1 2001/08/03 07:14:52 obrien Exp $
- * $DragonFly: src/sys/boot/alpha/libalpha/Attic/pal.S,v 1.2 2003/06/17 04:28:16 dillon Exp $
  * From: $NetBSD: pal.s,v 1.12 1998/02/27 03:44:53 thorpej Exp $ 
+ * $FreeBSD: src/sys/boot/alpha/libalpha/pal.S,v 1.3 2001/05/28 09:52:21 obrien Exp $
+ * $DragonFly: src/sys/boot/alpha/libalpha/Attic/pal.S,v 1.3 2003/11/10 06:08:30 dillon Exp $
  */
 
 /*
index 8b29a66..7c206b9 100644 (file)
@@ -1,6 +1,8 @@
-/* $FreeBSD: src/sys/boot/alpha/libalpha/prom.c,v 1.3 1999/08/28 00:39:28 peter Exp $ */
-/* $DragonFly: src/sys/boot/alpha/libalpha/Attic/prom.c,v 1.2 2003/06/17 04:28:16 dillon Exp $ */
-/* $NetBSD: prom.c,v 1.3 1997/09/06 14:03:58 drochner Exp $ */
+/*
+ * $NetBSD: prom.c,v 1.3 1997/09/06 14:03:58 drochner Exp $
+ * $FreeBSD: src/sys/boot/alpha/libalpha/prom.c,v 1.3 1999/08/28 00:39:28 peter Exp $
+ * $DragonFly: src/sys/boot/alpha/libalpha/Attic/prom.c,v 1.3 2003/11/10 06:08:30 dillon Exp $
+ */
 
 /*  
  * Mach Operating System
index a7a1c8d..1af6815 100644 (file)
@@ -1,7 +1,7 @@
 /* 
- * $FreeBSD: src/sys/boot/alpha/libalpha/prom_disp.S,v 1.2 1999/08/28 00:39:28 peter Exp $ 
- * $DragonFly: src/sys/boot/alpha/libalpha/Attic/prom_disp.S,v 1.2 2003/06/17 04:28:16 dillon Exp $ 
  * From: $NetBSD: prom_disp.S,v 1.2 1997/04/06 08:41:00 cgd Exp $ 
+ * $FreeBSD: src/sys/boot/alpha/libalpha/prom_disp.S,v 1.2 1999/08/28 00:39:28 peter Exp $ 
+ * $DragonFly: src/sys/boot/alpha/libalpha/Attic/prom_disp.S,v 1.3 2003/11/10 06:08:30 dillon Exp $
  */
 
 /*
index 44d7a1a..a314bd0 100644 (file)
@@ -1,7 +1,7 @@
 /* 
- * $FreeBSD: src/sys/boot/alpha/libalpha/prom_swpal.S,v 1.2 1999/08/28 00:39:29 peter Exp $
- * $DragonFly: src/sys/boot/alpha/libalpha/Attic/prom_swpal.S,v 1.2 2003/06/17 04:28:16 dillon Exp $
  * From: $NetBSD: prom_swpal.S,v 1.2 1997/04/06 08:41:01 cgd Exp $ 
+ * $FreeBSD: src/sys/boot/alpha/libalpha/prom_swpal.S,v 1.2 1999/08/28 00:39:29 peter Exp $
+ * $DragonFly: src/sys/boot/alpha/libalpha/Attic/prom_swpal.S,v 1.3 2003/11/10 06:08:30 dillon Exp $
  */
 
 /*
index 9baad2f..ace99df 100644 (file)
@@ -24,7 +24,7 @@
  * SUCH DAMAGE.
  *
  * $FreeBSD: src/sys/boot/alpha/libalpha/reboot.c,v 1.2 1999/08/28 00:39:29 peter Exp $
- * $DragonFly: src/sys/boot/alpha/libalpha/Attic/reboot.c,v 1.2 2003/06/17 04:28:16 dillon Exp $
+ * $DragonFly: src/sys/boot/alpha/libalpha/Attic/reboot.c,v 1.3 2003/11/10 06:08:30 dillon Exp $
  */
 
 #include <stand.h>
index 7f9f801..4773c12 100644 (file)
@@ -24,8 +24,8 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: src/sys/boot/alpha/libalpha/srmdisk.c,v 1.8.2.2 2001/08/01 20:52:03 mjacob Exp $
- * $DragonFly: src/sys/boot/alpha/libalpha/Attic/srmdisk.c,v 1.3 2003/11/09 02:22:29 dillon Exp $
+ * $FreeBSD$
+ * $DragonFly: src/sys/boot/alpha/libalpha/Attic/srmdisk.c,v 1.4 2003/11/10 06:08:30 dillon Exp $
  */
 
 /*
@@ -41,7 +41,6 @@
 #include <stand.h>
 
 #include <sys/disklabel.h>
-#include <sys/diskslice.h>
 
 #include <machine/stdarg.h>
 #include <machine/prom.h>
@@ -153,7 +152,7 @@ bd_print(int verbose)
 static int 
 bd_open(struct open_file *f, ...)
 {
-    __va_list                  args;
+    va_list                    args;
     struct alpha_devdesc       *dev;
     struct dos_partition       *dptr;
     struct open_disk           *od;
@@ -163,9 +162,9 @@ bd_open(struct open_file *f, ...)
     int                                unit, fd;
     prom_return_t              ret;
 
-    __va_start(args, f);
-    dev = __va_arg(args, struct alpha_devdesc*);
-    __va_end(args);
+    va_start(args, f);
+    dev = va_arg(args, struct alpha_devdesc*);
+    va_end(args);
 
     unit = dev->d_kind.srmdisk.unit;
     if (unit >= nbdinfo) {
index 66e4c4c..28c777f 100644 (file)
@@ -1,7 +1,7 @@
 /* 
- * $FreeBSD: src/sys/boot/alpha/libalpha/srmnet.c,v 1.4 1999/09/06 18:32:40 dfr Exp $
- * $DragonFly: src/sys/boot/alpha/libalpha/Attic/srmnet.c,v 1.2 2003/06/17 04:28:16 dillon Exp $
  * From: $NetBSD: if_prom.c,v 1.10 1997/09/06 14:08:33 drochner Exp $ 
+ * $FreeBSD: src/sys/boot/alpha/libalpha/srmnet.c,v 1.4 1999/09/06 18:32:40 dfr Exp $
+ * $DragonFly: src/sys/boot/alpha/libalpha/Attic/srmnet.c,v 1.3 2003/11/10 06:08:30 dillon Exp $
  */
 
 /*
index 88c769c..c69d699 100644 (file)
@@ -1,7 +1,7 @@
 /* 
- * $FreeBSD: src/sys/boot/alpha/libalpha/start.S,v 1.6.2.2 2001/03/04 05:23:01 obrien Exp $ 
- * $DragonFly: src/sys/boot/alpha/libalpha/Attic/start.S,v 1.2 2003/06/17 04:28:16 dillon Exp $ 
  * From: $NetBSD: start.S,v 1.4 1998/03/28 00:54:15 cgd Exp $ 
+ * $FreeBSD: src/sys/boot/alpha/libalpha/start.S,v 1.9 2001/03/04 04:38:14 obrien Exp $ 
+ * $DragonFly: src/sys/boot/alpha/libalpha/Attic/start.S,v 1.3 2003/11/10 06:08:30 dillon Exp $
  */
 
 /*  
index 08baf72..0142f20 100644 (file)
@@ -24,7 +24,7 @@
  * SUCH DAMAGE.
  *
  * $FreeBSD: src/sys/boot/alpha/libalpha/time.c,v 1.2 1999/08/28 00:39:30 peter Exp $
- * $DragonFly: src/sys/boot/alpha/libalpha/Attic/time.c,v 1.2 2003/06/17 04:28:16 dillon Exp $
+ * $DragonFly: src/sys/boot/alpha/libalpha/Attic/time.c,v 1.3 2003/11/10 06:08:30 dillon Exp $
  */
 
 #include <stand.h>
index 08b9e4c..a9474b8 100644 (file)
@@ -1,5 +1,5 @@
-# $FreeBSD: src/sys/boot/alpha/loader/Makefile,v 1.2.2.4 2000/10/30 10:02:47 obrien Exp $
-# $DragonFly: src/sys/boot/alpha/loader/Attic/Makefile,v 1.2 2003/06/17 04:28:16 dillon Exp $
+# $FreeBSD: src/sys/boot/alpha/loader/Makefile,v 1.7 2002/05/10 09:26:29 obrien Exp $
+# $DragonFly: src/sys/boot/alpha/loader/Attic/Makefile,v 1.3 2003/11/10 06:08:30 dillon Exp $
 
 BASE=          loader
 PROG=          ${BASE}
@@ -8,6 +8,6 @@ INSTALL_HELP=   yes
 LOAD_ADDRESS=  ${SECONDARY_LOAD_ADDRESS}
 
 # Only disk support
-CFLAGS+=       -DLOADER_DISK_SUPPORT   # -DLOADER_EXT2FS_SUPPORT
+CFLAGS+=       -ffreestanding -DLOADER_DISK_SUPPORT    # -DLOADER_EXT2FS_SUPPORT
 
 .include       <${.CURDIR}/../common/Makefile.common>
index f128ee2..45ace22 100644 (file)
@@ -1,9 +1,11 @@
-$FreeBSD: src/sys/boot/alpha/loader/version,v 1.2.2.2 2000/09/03 02:46:58 obrien Exp $
-$DragonFly: src/sys/boot/alpha/loader/Attic/version,v 1.2 2003/06/17 04:28:16 dillon Exp $
+$FreeBSD: src/sys/boot/alpha/loader/version,v 1.6 2001/12/11 00:49:33 jhb Exp $
+$DragonFly: src/sys/boot/alpha/loader/Attic/version,v 1.3 2003/11/10 06:08:30 dillon Exp $
 
 NOTE ANY CHANGES YOU MAKE TO THE BOOTBLOCKS HERE.  The format of this
 file is important.  Make sure the current version number is on line 6.
 
+1.2:   New calling conventions for fopen.
+1.1:   New semantics for finding the kernel, new boot.
 1.0:   Released working DEC Alpha version.
 0.3:   Set/getenv&cia, copyin/out.
 0.2:   FICL added to Alpha.
index 1d7afac..67edb4e 100644 (file)
@@ -1,6 +1,6 @@
-# $FreeBSD: src/sys/boot/alpha/netboot/Makefile,v 1.8.2.1 2000/07/06 23:29:47 obrien Exp $
-# $DragonFly: src/sys/boot/alpha/netboot/Attic/Makefile,v 1.2 2003/06/17 04:28:16 dillon Exp $
-#      $NetBSD: Makefile,v 1.12 1998/02/19 14:18:36 drochner Exp $
+# $NetBSD: Makefile,v 1.12 1998/02/19 14:18:36 drochner Exp $
+# $FreeBSD: src/sys/boot/alpha/netboot/Makefile,v 1.10 2002/05/10 09:26:29 obrien Exp $
+# $DragonFly: src/sys/boot/alpha/netboot/Attic/Makefile,v 1.3 2003/11/10 06:08:30 dillon Exp $
 
 BASE=          netboot
 PROG=          ${BASE}
@@ -8,7 +8,7 @@ NOMAN=
 NEWVERSWHAT=   "SRM net boot" alpha
 LOAD_ADDRESS=  ${PRIMARY_LOAD_ADDRESS}
 
-CFLAGS+=       -DLOADER_NET_SUPPORT
+CFLAGS+=       -ffreestanding -DLOADER_NET_SUPPORT
 
 .include       <${.CURDIR}/../common/Makefile.common>
 
index 0369510..6ad6dd5 100644 (file)
@@ -1,8 +1,13 @@
-$FreeBSD: src/sys/boot/alpha/netboot/version,v 1.2 1999/08/28 00:39:32 peter Exp $
-$DragonFly: src/sys/boot/alpha/netboot/Attic/version,v 1.2 2003/06/17 04:28:16 dillon Exp $
+$FreeBSD: src/sys/boot/alpha/netboot/version,v 1.3 2002/01/11 00:09:59 jhb Exp $
+$DragonFly: src/sys/boot/alpha/netboot/Attic/version,v 1.3 2003/11/10 06:08:30 dillon Exp $
 
 NOTE ANY CHANGES YOU MAKE TO THE BOOTBLOCKS HERE.  The format of this
 file is important.  Make sure the current version number is on line 6.
 
+1.2:   New calling conventions for fopen.
+1.1:   New semantics for finding the kernel, new boot.
+1.0:   Released working DEC Alpha version.
+0.3:   Set/getenv&cia, copyin/out.
+0.2:   FICL added to Alpha.
 0.1:   Initial i386 version, germinated from the NetBSD i386
        standalone, but enormously modified.
index d21d921..97864cb 100644 (file)
@@ -1,5 +1,5 @@
 # $FreeBSD: src/sys/boot/arc/Makefile,v 1.2 1999/08/28 00:39:33 peter Exp $
-# $DragonFly: src/sys/boot/arc/Attic/Makefile,v 1.2 2003/06/17 04:28:16 dillon Exp $
+# $DragonFly: src/sys/boot/arc/Attic/Makefile,v 1.3 2003/11/10 06:08:30 dillon Exp $
 
 SUBDIR=                lib
 SUBDIR+=       loader
index c041402..502d903 100644 (file)
@@ -1,5 +1,5 @@
-# $FreeBSD: src/sys/boot/arc/Makefile.inc,v 1.1.1.1.2.1 2000/07/06 23:29:47 obrien Exp $
-# $DragonFly: src/sys/boot/arc/Attic/Makefile.inc,v 1.2 2003/06/17 04:28:16 dillon Exp $
+# $FreeBSD: src/sys/boot/arc/Makefile.inc,v 1.2 2000/05/01 20:26:21 peter Exp $
+# $DragonFly: src/sys/boot/arc/Attic/Makefile.inc,v 1.3 2003/11/10 06:08:30 dillon Exp $
 # Options used when building app-specific libalpha components
 LOAD_ADDRESS=          0xffffffff80900000
 DPADD+=                        ${DESTDIR}/${LIBDIR}/libstand.a
index 36dadc6..1c4b2be 100644 (file)
@@ -24,8 +24,7 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  *
  * $FreeBSD: src/sys/boot/arc/include/arcfuncs.h,v 1.2 1999/08/28 00:39:34 peter Exp $
- * $DragonFly: src/sys/boot/arc/include/Attic/arcfuncs.h,v 1.2 2003/06/17 04:28:16 dillon Exp $
- *
+ * $DragonFly: src/sys/boot/arc/include/Attic/arcfuncs.h,v 1.3 2003/11/10 06:08:30 dillon Exp $
  */
 
 #ifdef __GNUC__
index 2eb02eb..5445bab 100644 (file)
@@ -24,8 +24,7 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  *
  * $FreeBSD: src/sys/boot/arc/include/arctypes.h,v 1.2 1999/08/28 00:39:34 peter Exp $
- * $DragonFly: src/sys/boot/arc/include/Attic/arctypes.h,v 1.2 2003/06/17 04:28:16 dillon Exp $
- *
+ * $DragonFly: src/sys/boot/arc/include/Attic/arctypes.h,v 1.3 2003/11/10 06:08:30 dillon Exp $
  */
 
 #ifndef _ARC_TYPES_H_
index b39180d..4f3acbd 100644 (file)
@@ -1,6 +1,3 @@
-/* $FreeBSD: src/sys/boot/arc/include/libarc.h,v 1.2 1999/08/28 00:39:34 peter Exp $ */
-/* $DragonFly: src/sys/boot/arc/include/Attic/libarc.h,v 1.2 2003/06/17 04:28:16 dillon Exp $ */
-
 /*
  * Copyright (c) 1996
  *     Matthias Drochner.  All rights reserved.
@@ -31,6 +28,8 @@
  * (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: src/sys/boot/arc/include/libarc.h,v 1.2 1999/08/28 00:39:34 peter Exp $
+ * $DragonFly: src/sys/boot/arc/include/Attic/libarc.h,v 1.3 2003/11/10 06:08:30 dillon Exp $
  */
 
 /*
index 529d177..209e763 100644 (file)
@@ -1,9 +1,10 @@
-# $FreeBSD: src/sys/boot/arc/lib/Makefile,v 1.4.2.1 2002/07/19 18:46:28 ru Exp $
-# $DragonFly: src/sys/boot/arc/lib/Attic/Makefile,v 1.2 2003/06/17 04:28:16 dillon Exp $
+# $FreeBSD: src/sys/boot/arc/lib/Makefile,v 1.9 2002/05/13 10:53:24 ru Exp $
+# $DragonFly: src/sys/boot/arc/lib/Attic/Makefile,v 1.3 2003/11/10 06:08:31 dillon Exp $
 
 LIB=           arc
 INTERNALLIB=   true
 
+CFLAGS+=       -ffreestanding
 .PATH:         ${.CURDIR}/arch/${MACHINE_ARCH}
 # XXX hack to pick up stand.h
 LIBSTANDDIR=   ${.CURDIR}/../../../../lib/libstand
index 62d2d3c..2672abc 100644 (file)
@@ -24,7 +24,7 @@
  * SUCH DAMAGE.
  *
  * $FreeBSD: src/sys/boot/arc/lib/abort.c,v 1.2 1999/08/28 00:39:35 peter Exp $
- * $DragonFly: src/sys/boot/arc/lib/Attic/abort.c,v 1.2 2003/06/17 04:28:16 dillon Exp $
+ * $DragonFly: src/sys/boot/arc/lib/Attic/abort.c,v 1.3 2003/11/10 06:08:31 dillon Exp $
  */
 
 #include <errno.h>
index 93fb969..fb2b59c 100644 (file)
@@ -1,6 +1,8 @@
-/* $FreeBSD: src/sys/boot/arc/lib/arcconsole.c,v 1.2 1999/08/28 00:39:36 peter Exp $ */
-/* $DragonFly: src/sys/boot/arc/lib/Attic/arcconsole.c,v 1.2 2003/06/17 04:28:16 dillon Exp $ */
-/* $NetBSD: prom.c,v 1.3 1997/09/06 14:03:58 drochner Exp $ */
+/*
+ * $NetBSD: prom.c,v 1.3 1997/09/06 14:03:58 drochner Exp $
+ * $FreeBSD: src/sys/boot/arc/lib/arcconsole.c,v 1.2 1999/08/28 00:39:36 peter Exp $
+ * $DragonFly: src/sys/boot/arc/lib/Attic/arcconsole.c,v 1.3 2003/11/10 06:08:31 dillon Exp $
+ */
 
 /*  
  * Mach Operating System
index a128ce4..2c792d5 100644 (file)
@@ -24,8 +24,8 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: src/sys/boot/arc/lib/arcdisk.c,v 1.3.2.1 2001/01/05 17:37:51 mjacob Exp $
- * $DragonFly: src/sys/boot/arc/lib/Attic/arcdisk.c,v 1.3 2003/11/09 02:22:30 dillon Exp $
+ * $FreeBSD$
+ * $DragonFly: src/sys/boot/arc/lib/Attic/arcdisk.c,v 1.4 2003/11/10 06:08:31 dillon Exp $
  */
 
 /*
@@ -40,8 +40,6 @@
 
 #include <stand.h>
 
-#include <sys/disklabel.h>
-#include <sys/diskslice.h>
 
 #include <machine/stdarg.h>
 
@@ -150,11 +148,11 @@ bd_open(struct open_file *f, ...)
     int                                error;
     int                                unit;
     u_int32_t                  fd;
-    __va_list                  ap;
+    va_list                    ap;
 
-    __va_start(ap, f);
-    dev = __va_arg(ap, struct arc_devdesc *);
-    __va_end(ap);
+    va_start(ap, f);
+    dev = va_arg(ap, struct arc_devdesc *);
+    va_end(ap);
 
     unit = dev->d_kind.arcdisk.unit;
     if (unit >= nbdinfo) {
index 2e471f8..7aa4d90 100644 (file)
@@ -24,7 +24,7 @@
  * SUCH DAMAGE.
  *
  * $FreeBSD: src/sys/boot/arc/lib/arch/alpha/copy.c,v 1.2 1999/08/28 00:39:40 peter Exp $
- * $DragonFly: src/sys/boot/arc/lib/arch/alpha/Attic/copy.c,v 1.2 2003/06/17 04:28:16 dillon Exp $
+ * $DragonFly: src/sys/boot/arc/lib/arch/alpha/Attic/copy.c,v 1.3 2003/11/10 06:08:31 dillon Exp $
  */
 /*
  * MD primitives supporting placement of module data 
index e9ad2fa..d86b0ba 100644 (file)
@@ -24,7 +24,7 @@
  * SUCH DAMAGE.
  *
  * $FreeBSD: src/sys/boot/arc/lib/arch/alpha/rpb.c,v 1.2 1999/08/28 00:39:40 peter Exp $
- * $DragonFly: src/sys/boot/arc/lib/arch/alpha/Attic/rpb.c,v 1.2 2003/06/17 04:28:16 dillon Exp $
+ * $DragonFly: src/sys/boot/arc/lib/arch/alpha/Attic/rpb.c,v 1.3 2003/11/10 06:08:31 dillon Exp $
  */
 
 #include <stand.h>
index 7b3e4ce..a229214 100644 (file)
@@ -1,5 +1,3 @@
-/* $FreeBSD: src/sys/boot/arc/lib/arch/alpha/setjmp.S,v 1.2 1999/08/28 00:39:40 peter Exp $ */
-/* $DragonFly: src/sys/boot/arc/lib/arch/alpha/Attic/setjmp.S,v 1.2 2003/06/17 04:28:16 dillon Exp $ */
 /*
  * Copyright (c) 1994, 1995, 1996 Carnegie-Mellon University.
  * All rights reserved.
@@ -25,6 +23,9 @@
  *
  * any improvements or extensions that they make and grant Carnegie the
  * rights to redistribute these changes.
+ *
+ * $FreeBSD: src/sys/boot/arc/lib/arch/alpha/setjmp.S,v 1.2 1999/08/28 00:39:40 peter Exp $
+ * $DragonFly: src/sys/boot/arc/lib/arch/alpha/Attic/setjmp.S,v 1.3 2003/11/10 06:08:31 dillon Exp $
  */
 
 #include <machine/asm.h>
index c69bdca..534f6b8 100644 (file)
@@ -24,8 +24,7 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  *
  * $FreeBSD: src/sys/boot/arc/lib/arch/alpha/start.S,v 1.2 1999/08/28 00:39:41 peter Exp $
- * $DragonFly: src/sys/boot/arc/lib/arch/alpha/Attic/start.S,v 1.2 2003/06/17 04:28:16 dillon Exp $
- *
+ * $DragonFly: src/sys/boot/arc/lib/arch/alpha/Attic/start.S,v 1.3 2003/11/10 06:08:31 dillon Exp $
  */
 
 /*
index 5213e8c..fd535f5 100644 (file)
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: src/sys/boot/arc/lib/bootinfo.c,v 1.2.2.1 2001/03/04 04:40:41 obrien Exp $
- * $DragonFly: src/sys/boot/arc/lib/Attic/bootinfo.c,v 1.2 2003/06/17 04:28:16 dillon Exp $
+ * $FreeBSD$
+ * $DragonFly: src/sys/boot/arc/lib/Attic/bootinfo.c,v 1.3 2003/11/10 06:08:31 dillon Exp $
  */
 
 #include <stand.h>
 #include <string.h>
 #include <sys/param.h>
-#include <sys/reboot.h>
 #include <sys/linker.h>
 #include <machine/elf.h>
 #include <machine/prom.h>
@@ -122,17 +121,17 @@ bi_copyenv(vm_offset_t addr)
 vm_offset_t
 bi_copymodules(vm_offset_t addr)
 {
-    struct loaded_module       *mp;
-    struct module_metadata     *md;
+    struct preloaded_file      *fp;
+    struct file_metadata       *md;
 
     /* start with the first module on the list, should be the kernel */
-    for (mp = mod_findmodule(NULL, NULL); mp != NULL; mp = mp->m_next) {
+    for (fp = file_findfile(NULL, NULL); fp != NULL; fp = fp->f_next) {
 
-       MOD_NAME(addr, mp->m_name);     /* this field must come first */
-       MOD_TYPE(addr, mp->m_type);
-       MOD_ADDR(addr, mp->m_addr);
-       MOD_SIZE(addr, mp->m_size);
-       for (md = mp->m_metadata; md != NULL; md = md->md_next)
+       MOD_NAME(addr, fp->f_name);     /* this field must come first */
+       MOD_TYPE(addr, fp->f_type);
+       MOD_ADDR(addr, fp->f_addr);
+       MOD_SIZE(addr, fp->f_size);
+       for (md = fp->f_metadata; md != NULL; md = md->md_next)
            if (!(md->md_type & MODINFOMD_NOCOPY))
                MOD_METADATA(addr, md);
     }
@@ -148,18 +147,18 @@ bi_copymodules(vm_offset_t addr)
  */
 int
 bi_load(struct bootinfo_v1 *bi, vm_offset_t *ffp_save,
-       struct loaded_module *mp)
+       struct preloaded_file *fp)
 {
-    struct loaded_module       *xp;
+    struct preloaded_file      *xp;
     vm_offset_t                        addr, bootinfo_addr;
     u_int                      pad;
     vm_offset_t                        ssym, esym;
-    struct module_metadata     *md;
+    struct file_metadata       *md;
 
     ssym = esym = 0;
-    if ((md = mod_findmetadata(mp, MODINFOMD_SSYM)) != NULL)
+    if ((md = file_findmetadata(fp, MODINFOMD_SSYM)) != NULL)
        ssym = *((vm_offset_t *)&(md->md_data));
-    if ((md = mod_findmetadata(mp, MODINFOMD_ESYM)) != NULL)
+    if ((md = file_findmetadata(fp, MODINFOMD_ESYM)) != NULL)
        esym = *((vm_offset_t *)&(md->md_data));
     if (ssym == 0 || esym == 0)
        ssym = esym = 0;                /* sanity */
@@ -169,9 +168,9 @@ bi_load(struct bootinfo_v1 *bi, vm_offset_t *ffp_save,
 
     /* find the last module in the chain */
     addr = 0;
-    for (xp = mod_findmodule(NULL, NULL); xp != NULL; xp = xp->m_next) {
-       if (addr < (xp->m_addr + xp->m_size))
-           addr = xp->m_addr + xp->m_size;
+    for (xp = file_findfile(NULL, NULL); xp != NULL; xp = xp->f_next) {
+       if (addr < (xp->f_addr + xp->f_size))
+           addr = xp->f_addr + xp->f_size;
     }
     /* pad to a page boundary */
     pad = (u_int)addr & PAGE_MASK;
index 7e4b229..4a0c830 100644 (file)
@@ -24,7 +24,7 @@
  * SUCH DAMAGE.
  *
  * $FreeBSD: src/sys/boot/arc/lib/delay.c,v 1.2 1999/08/28 00:39:37 peter Exp $
- * $DragonFly: src/sys/boot/arc/lib/Attic/delay.c,v 1.2 2003/06/17 04:28:16 dillon Exp $
+ * $DragonFly: src/sys/boot/arc/lib/Attic/delay.c,v 1.3 2003/11/10 06:08:31 dillon Exp $
  */
 
 #include <errno.h>
index fea257d..c785525 100644 (file)
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: src/sys/boot/arc/lib/devicename.c,v 1.2 1999/08/28 00:39:38 peter Exp $
- * $DragonFly: src/sys/boot/arc/lib/Attic/devicename.c,v 1.2 2003/06/17 04:28:16 dillon Exp $
+ * $FreeBSD$
+ * $DragonFly: src/sys/boot/arc/lib/Attic/devicename.c,v 1.3 2003/11/10 06:08:31 dillon Exp $
  */
 
 #include <stand.h>
 #include <string.h>
-#include <sys/disklabel.h>
 #include "bootstrap.h"
 #include "libarc.h"
 
index f856c64..19ca08d 100644 (file)
@@ -1,6 +1,8 @@
-/* $FreeBSD: src/sys/boot/arc/lib/elf_freebsd.c,v 1.2 1999/08/28 00:39:38 peter Exp $ */
-/* $DragonFly: src/sys/boot/arc/lib/Attic/elf_freebsd.c,v 1.2 2003/06/17 04:28:16 dillon Exp $ */
-/* $NetBSD: loadfile.c,v 1.10 1998/06/25 06:45:46 ross Exp $ */
+/*
+ * $NetBSD: loadfile.c,v 1.10 1998/06/25 06:45:46 ross Exp $
+ * $FreeBSD: src/sys/boot/arc/lib/elf_freebsd.c,v 1.4 2003/05/01 03:56:29 peter Exp $
+ * $DragonFly: src/sys/boot/arc/lib/Attic/elf_freebsd.c,v 1.3 2003/11/10 06:08:31 dillon Exp $
+ */
 
 /*-
  * Copyright (c) 1997 The NetBSD Foundation, Inc.
 
 #define _KERNEL
 
-static int     elf_exec(struct loaded_module *amp);
+static int     elf64_exec(struct preloaded_file *amp);
 int            bi_load(struct bootinfo_v1 *, vm_offset_t *,
-                       struct loaded_module *);
+                       struct preloaded_file *);
 
-struct module_format alpha_elf = { elf_loadmodule, elf_exec };
+struct file_format alpha_elf = { elf64_loadfile, elf64_exec };
 
 vm_offset_t ffp_save, ptbr_save;
 
 static int
-elf_exec(struct loaded_module *mp)
+elf64_exec(struct preloaded_file *fp)
 {
 #if 0
     static struct bootinfo_v1  bootinfo_v1;
-    struct module_metadata     *md;
+    struct file_metadata       *md;
     Elf_Ehdr                   *hdr;
     int                                err;
 
-    if ((md = mod_findmetadata(mp, MODINFOMD_ELFHDR)) == NULL)
+    if ((md = file_findmetadata(fp, MODINFOMD_ELFHDR)) == NULL)
        return(EFTYPE);                 /* XXX actually EFUCKUP */
     hdr = (Elf_Ehdr *)&(md->md_data);
 
     /* XXX ffp_save does not appear to be used in the kernel.. */
     bzero(&bootinfo_v1, sizeof(bootinfo_v1));
-    err = bi_load(&bootinfo_v1, &ffp_save, mp);
+    err = bi_load(&bootinfo_v1, &ffp_save, fp);
     if (err)
        return(err);
 
     /*
      * Fill in the bootinfo for the kernel.
      */
-    strncpy(bootinfo_v1.booted_kernel, mp->m_name,
+    strncpy(bootinfo_v1.booted_kernel, fp->f_name,
            sizeof(bootinfo_v1.booted_kernel));
     prom_getenv(PROM_E_BOOTED_OSFLAGS, bootinfo_v1.boot_flags,
                sizeof(bootinfo_v1.boot_flags));
@@ -131,7 +133,7 @@ elf_exec(struct loaded_module *mp)
     bootinfo_v1.cnputc = NULL;
     bootinfo_v1.cnpollc = NULL;
 
-    printf("Entering %s at 0x%lx...\n", mp->m_name, hdr->e_entry);
+    printf("Entering %s at 0x%lx...\n", fp->f_name, hdr->e_entry);
     exit(0);
     closeall();
     alpha_pal_imb();
index 50c9c14..686efce 100644 (file)
@@ -24,7 +24,7 @@
  * SUCH DAMAGE.
  *
  * $FreeBSD: src/sys/boot/arc/lib/module.c,v 1.2 1999/08/28 00:39:38 peter Exp $
- * $DragonFly: src/sys/boot/arc/lib/Attic/module.c,v 1.2 2003/06/17 04:28:16 dillon Exp $
+ * $DragonFly: src/sys/boot/arc/lib/Attic/module.c,v 1.3 2003/11/10 06:08:31 dillon Exp $
  */
 
 /*
index cfb46da..4b22c52 100644 (file)
@@ -24,8 +24,7 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  *
  * $FreeBSD: src/sys/boot/arc/lib/prom.c,v 1.2 1999/08/28 00:39:38 peter Exp $
- * $DragonFly: src/sys/boot/arc/lib/Attic/prom.c,v 1.2 2003/06/17 04:28:16 dillon Exp $
- *
+ * $DragonFly: src/sys/boot/arc/lib/Attic/prom.c,v 1.3 2003/11/10 06:08:31 dillon Exp $
  */
 
 #define        PROM_E_BOOTED_DEV       "XXX1"
index dd332cf..59c2bfa 100644 (file)
@@ -24,7 +24,7 @@
  * SUCH DAMAGE.
  *
  * $FreeBSD: src/sys/boot/arc/lib/setjmperr.c,v 1.2 1999/08/28 00:39:39 peter Exp $
- * $DragonFly: src/sys/boot/arc/lib/Attic/setjmperr.c,v 1.2 2003/06/17 04:28:16 dillon Exp $
+ * $DragonFly: src/sys/boot/arc/lib/Attic/setjmperr.c,v 1.3 2003/11/10 06:08:31 dillon Exp $
  */
 
 #include <errno.h>
index 56c48f7..b3b4907 100644 (file)
@@ -24,7 +24,7 @@
  * SUCH DAMAGE.
  *
  * $FreeBSD: src/sys/boot/arc/lib/time.c,v 1.2 1999/08/28 00:39:39 peter Exp $
- * $DragonFly: src/sys/boot/arc/lib/Attic/time.c,v 1.2 2003/06/17 04:28:16 dillon Exp $
+ * $DragonFly: src/sys/boot/arc/lib/Attic/time.c,v 1.3 2003/11/10 06:08:31 dillon Exp $
  */
 
 #include <errno.h>
index 1121087..0c3c2c0 100644 (file)
@@ -1,6 +1,6 @@
 #      $NetBSD: Makefile,v 1.12 1998/02/19 14:18:36 drochner Exp $
-# $FreeBSD: src/sys/boot/arc/loader/Makefile,v 1.4.2.1 2000/08/04 08:31:08 obrien Exp $
-# $DragonFly: src/sys/boot/arc/loader/Attic/Makefile,v 1.2 2003/06/17 04:28:16 dillon Exp $
+# $FreeBSD: src/sys/boot/arc/loader/Makefile,v 1.7 2002/05/10 09:26:30 obrien Exp $
+# $DragonFly: src/sys/boot/arc/loader/Attic/Makefile,v 1.3 2003/11/10 06:08:31 dillon Exp $
 
 BASE=          loader
 PROG=          ${BASE}.exe
@@ -15,7 +15,7 @@ SRCS+=                main.c conf.c
 # Always add MI sources 
 .PATH:         ${.CURDIR}/../../common
 .include       <${.CURDIR}/../../common/Makefile.inc>
-CFLAGS+=       -mno-fp-regs
+CFLAGS+=       -ffreestanding -mno-fp-regs
 CFLAGS+=       -I${.CURDIR}/../../common -I${.CURDIR}
 CFLAGS+=       -I${.CURDIR}/../../.. -I.
 CFLAGS+=       -DLOADER
@@ -43,9 +43,9 @@ vers.o: ${.CURDIR}/../../common/newvers.sh ${.CURDIR}/version
 ${BASE}.exe: ${BASE}.sym ${BASE}.help
        elf2exe ${BASE}.sym ${BASE}.exe
 
-${BASE}.sym: ${OBJS} ${LIBSTAND} ${LIBARC} ${CRT} vers.o setdef0.o setdef1.o
+${BASE}.sym: ${OBJS} ${LIBSTAND} ${LIBARC} ${CRT} vers.o
        ${LD} -o ${BASE}.sym -M -N -Ttext ${LOAD_ADDRESS} \
-       ${CRT} setdef0.o ${OBJS} setdef1.o vers.o -L${DESTDIR}${LIBDIR} \
+       ${CRT} ${OBJS} vers.o -L${DESTDIR}${LIBDIR} \
        ${LIBSTAND} ${LIBARC} ${LIBSTAND} >${.OBJDIR}/${BASE}.list
 
 ${BASE}.help: help.common help.alpha
@@ -64,18 +64,9 @@ beforeinstall:
 start.o:       ${.CURDIR}/../lib/arch/${MACHINE_ARCH}/start.S
        ${CC} -c ${CFLAGS} $<
 
-setdef0.o: setdefs.h
-
-setdef1.o: setdefs.h
-
 machine:
        ln -sf ${.CURDIR}/../../../alpha/include machine
 
 .include <bsd.prog.mk>
 
-.ORDER: setdefs.h setdef0.c setdef1.c
-setdefs.h setdef0.c setdef1.c: ${OBJS}
-       @echo Generating linker sets
-       @gensetdefs ${OBJS}
-
 beforedepend ${OBJS}: machine
index 32df1e7..7e7e65b 100644 (file)
@@ -1,7 +1,7 @@
 /*
- * $FreeBSD: src/sys/boot/arc/loader/conf.c,v 1.2 1999/08/28 00:39:42 peter Exp $
- * $DragonFly: src/sys/boot/arc/loader/Attic/conf.c,v 1.2 2003/06/17 04:28:16 dillon Exp $
  * From        $NetBSD: conf.c,v 1.2 1997/03/22 09:03:29 thorpej Exp $  
+ * $FreeBSD: src/sys/boot/arc/loader/conf.c,v 1.4 2002/12/19 19:34:58 jake Exp $
+ * $DragonFly: src/sys/boot/arc/loader/Attic/conf.c,v 1.3 2003/11/10 06:08:31 dillon Exp $
  */
 
 /*
@@ -56,7 +56,7 @@ struct devsw *devsw[] = {
 
 struct fs_ops *file_system[] = {
     &ufs_fsops,
-    &zipfs_fsops,
+    &gzipfs_fsops,
     NULL
 };
 
@@ -65,9 +65,9 @@ struct fs_ops *file_system[] = {
  * Sort formats so that those that can detect based on arguments
  * rather than reading the file go first.
  */
-extern struct module_format alpha_elf;
+extern struct file_format alpha_elf;
 
-struct module_format *module_formats[] = {
+struct file_format *file_formats[] = {
     &alpha_elf,
     NULL
 };
index 456bb9b..b85a385 100644 (file)
@@ -25,7 +25,7 @@
  * SUCH DAMAGE.
  *
  * $FreeBSD: src/sys/boot/arc/loader/main.c,v 1.3 1999/08/28 00:39:42 peter Exp $
- * $DragonFly: src/sys/boot/arc/loader/Attic/main.c,v 1.2 2003/06/17 04:28:16 dillon Exp $
+ * $DragonFly: src/sys/boot/arc/loader/Attic/main.c,v 1.3 2003/11/10 06:08:31 dillon Exp $
  */
 
 
index b253d90..484c9b5 100644 (file)
@@ -1,5 +1,5 @@
 $FreeBSD: src/sys/boot/arc/loader/version,v 1.2 1999/08/28 00:39:43 peter Exp $
-$DragonFly: src/sys/boot/arc/loader/Attic/version,v 1.2 2003/06/17 04:28:16 dillon Exp $
+$DragonFly: src/sys/boot/arc/loader/Attic/version,v 1.3 2003/11/10 06:08:31 dillon Exp $
 
 NOTE ANY CHANGES YOU MAKE TO THE BOOTBLOCKS HERE.  The format of this
 file is important.  Make sure the current version number is on line 6.
index 94a3a57..48747e7 100644 (file)
@@ -1,10 +1,24 @@
-# $FreeBSD: src/sys/boot/common/Makefile.inc,v 1.9.2.2 2001/04/25 11:24:01 ru Exp $
-# $DragonFly: src/sys/boot/common/Makefile.inc,v 1.2 2003/06/17 04:28:16 dillon Exp $
+# $FreeBSD: src/sys/boot/common/Makefile.inc,v 1.16 2003/06/26 03:51:57 peter Exp $
+# $DragonFly: src/sys/boot/common/Makefile.inc,v 1.3 2003/11/10 06:08:31 dillon Exp $
 
 SRCS+= bcache.c boot.c commands.c console.c devopen.c interp.c 
-SRCS+= interp_backslash.c interp_parse.c load_aout.c load_elf.c ls.c misc.c 
+SRCS+= interp_backslash.c interp_parse.c ls.c misc.c 
 SRCS+= module.c panic.c
 
+.if ${MACHINE_ARCH} == "i386" || ${MACHINE_ARCH} == "amd64"
+SRCS+= load_elf32.c load_elf64.c
+.endif
+.if ${MACHINE_ARCH} == "powerpc"
+SRCS+= load_elf32.c
+.endif
+.if ${MACHINE_ARCH} == "sparc64" || ${MACHINE_ARCH} == "ia64" || ${MACHINE_ARCH} == "alpha"
+SRCS+= load_elf64.c
+.endif
+
+.if defined(LOADER_NET_SUPPORT)
+SRCS+= dev_net.c
+.endif
+
 # Machine-independant ISA PnP
 .if HAVE_ISABUS
 SRCS+= isapnp.c
@@ -21,4 +35,3 @@ MAN+= ../forth/loader.4th.8
 .endif
 
 MAN+=  loader.8
-
index 20d3ba5..3d220ca 100644 (file)
@@ -23,8 +23,8 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: src/sys/boot/common/bcache.c,v 1.6.2.2 2000/12/28 13:12:31 ps Exp $
- * $DragonFly: src/sys/boot/common/bcache.c,v 1.2 2003/06/17 04:28:16 dillon Exp $
+ * $FreeBSD: src/sys/boot/common/bcache.c,v 1.12 2003/08/25 23:30:41 obrien Exp $
+ * $DragonFly: src/sys/boot/common/bcache.c,v 1.3 2003/11/10 06:08:31 dillon Exp $
  */
 
 /*
@@ -41,7 +41,7 @@
 
 #ifdef BCACHE_DEBUG
 #define BCACHE_TIMEOUT 10
-# define DEBUG(fmt, args...)   printf("%s: " fmt "\n" , __FUNCTION__ , ## args)
+# define DEBUG(fmt, args...)   printf("%s: " fmt "\n" , __func__ , ## args)
 #else
 #define BCACHE_TIMEOUT 2
 # define DEBUG(fmt, args...)
@@ -64,6 +64,7 @@ static u_int          bcache_hits, bcache_misses, bcache_ops, bcache_bypasses;
 static u_int           bcache_flushes;
 static u_int           bcache_bcount;
 
+static void    bcache_invalidate(daddr_t blkno);
 static void    bcache_insert(caddr_t buf, daddr_t blkno);
 static int     bcache_lookup(caddr_t buf, daddr_t blkno);
 
@@ -117,38 +118,52 @@ bcache_flush(void)
     }
 }
 
-/* 
- * Handle a transfer request; fill in parts of the request that can
- * be satisfied by the cache, use the supplied strategy routine to do
- * device I/O and then use the I/O results to populate the cache. 
- *
- * Requests larger than 1/2 the cache size will be bypassed and go
- * directly to the disk.  XXX tune this.
+/*
+ * Handle a write request; write directly to the disk, and populate the
+ * cache with the new values.
  */
-int
-bcache_strategy(void *devdata, int unit, int rw, daddr_t blk, size_t size,
+static int
+write_strategy(void *devdata, int unit, int rw, daddr_t blk, size_t size,
                char *buf, size_t *rsize)
 {
-    static int                 bcache_unit = -1;
     struct bcache_devdata      *dd = (struct bcache_devdata *)devdata;
-    int                                p_size, result;
-    daddr_t                    p_blk, i, j, nblk;
-    caddr_t                    p_buf;
+    daddr_t                    i, nblk;
+    int                                err;
 
-    bcache_ops++;
+    nblk = size / bcache_blksize;
 
-    if(bcache_unit != unit) {
-       bcache_flush();
-       bcache_unit = unit;
+    /* Invalidate the blocks being written */
+    for (i = 0; i < nblk; i++) {
+       bcache_invalidate(blk + i);
     }
 
-    /* bypass large requests, or when the cache is inactive */
-    if ((bcache_data == NULL) || ((size * 2 / bcache_blksize) > bcache_nblks)) {
-       DEBUG("bypass %d from %d", size / bcache_blksize, blk);
-       bcache_bypasses++;
-       return(dd->dv_strategy(dd->dv_devdata, rw, blk, size, buf, rsize));
+    /* Write the blocks */
+    err = dd->dv_strategy(dd->dv_devdata, rw, blk, size, buf, rsize);
+
+    /* Populate the block cache with the new data */
+    if (err == 0) {
+       for (i = 0; i < nblk; i++) {
+           bcache_insert(buf + (i * bcache_blksize),blk + i);
+       }
     }
 
+    return err;
+}
+
+/*
+ * Handle a read request; fill in parts of the request that can
+ * be satisfied by the cache, use the supplied strategy routine to do
+ * device I/O and then use the I/O results to populate the cache. 
+ */
+static int
+read_strategy(void *devdata, int unit, int rw, daddr_t blk, size_t size,
+               char *buf, size_t *rsize)
+{
+    struct bcache_devdata      *dd = (struct bcache_devdata *)devdata;
+    int                                p_size, result;
+    daddr_t                    p_blk, i, j, nblk;
+    caddr_t                    p_buf;
+
     nblk = size / bcache_blksize;
     result = 0;
 
@@ -202,6 +217,40 @@ bcache_strategy(void *devdata, int unit, int rw, daddr_t blk, size_t size,
     return(result);
 }
 
+/* 
+ * Requests larger than 1/2 the cache size will be bypassed and go
+ * directly to the disk.  XXX tune this.
+ */
+int
+bcache_strategy(void *devdata, int unit, int rw, daddr_t blk, size_t size,
+               char *buf, size_t *rsize)
+{
+    static int                 bcache_unit = -1;
+    struct bcache_devdata      *dd = (struct bcache_devdata *)devdata;
+
+    bcache_ops++;
+
+    if(bcache_unit != unit) {
+       bcache_flush();
+       bcache_unit = unit;
+    }
+
+    /* bypass large requests, or when the cache is inactive */
+    if ((bcache_data == NULL) || ((size * 2 / bcache_blksize) > bcache_nblks)) {
+       DEBUG("bypass %d from %d", size / bcache_blksize, blk);
+       bcache_bypasses++;
+       return(dd->dv_strategy(dd->dv_devdata, rw, blk, size, buf, rsize));
+    }
+
+    switch (rw) {
+    case F_READ:
+       return read_strategy(devdata, unit, rw, blk, size, buf, rsize);
+    case F_WRITE:
+       return write_strategy(devdata, unit, rw, blk, size, buf, rsize);
+    }
+    return -1;
+}
+
 
 /*
  * Insert a block into the cache.  Retire the oldest block to do so, if required.
@@ -262,6 +311,24 @@ bcache_lookup(caddr_t buf, daddr_t blkno)
     return(ENOENT);
 }
 
+/*
+ * Invalidate a block from the cache.
+ */
+static void
+bcache_invalidate(daddr_t blkno)
+{
+    u_int      i;
+    
+    for (i = 0; i < bcache_nblks; i++) {
+       if (bcache_ctl[i].bc_blkno == blkno) {
+           bcache_ctl[i].bc_count = -1;
+           bcache_ctl[i].bc_blkno = -1;
+           DEBUG("invalidate blk %d", blkno);
+           break;
+       }
+    }
+}
+
 COMMAND_SET(bcachestat, "bcachestat", "get disk block cache stats", command_bcache);
 
 static int
index 50d1cfe..4562f61 100644 (file)
@@ -23,8 +23,8 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: src/sys/boot/common/boot.c,v 1.15.2.5 2000/12/28 13:12:33 ps Exp $
- * $DragonFly: src/sys/boot/common/boot.c,v 1.2 2003/06/17 04:28:16 dillon Exp $
+ * $FreeBSD: src/sys/boot/common/boot.c,v 1.29 2003/08/25 23:30:41 obrien Exp $
+ * $DragonFly: src/sys/boot/common/boot.c,v 1.3 2003/11/10 06:08:31 dillon Exp $
  */
 
 /*
 #include "bootstrap.h"
 
 static char    *getbootfile(int try);
+static int     loadakernel(int try, int argc, char* argv[]);
 
 /* List of kernel names to try (may be overwritten by boot.config) XXX should move from here? */
-static const char *default_bootfiles = "kernel;kernel.old";
+static const char *default_bootfiles = "kernel";
 
 static int autoboot_tried;
 
@@ -51,9 +52,7 @@ COMMAND_SET(boot, "boot", "boot a file or loaded kernel", command_boot);
 static int
 command_boot(int argc, char *argv[])
 {
-    struct loaded_module       *km;
-    char                       *cp;
-    int                                try;
+    struct preloaded_file      *fp;
     
     /*
      * See if the user has specified an explicit kernel to boot.
@@ -61,13 +60,13 @@ command_boot(int argc, char *argv[])
     if ((argc > 1) && (argv[1][0] != '-')) {
        
        /* XXX maybe we should discard everything and start again? */
-       if (mod_findmodule(NULL, NULL) != NULL) {
+       if (file_findfile(NULL, NULL) != NULL) {
            sprintf(command_errbuf, "can't boot '%s', kernel module already loaded", argv[1]);
            return(CMD_ERROR);
        }
        
        /* find/load the kernel module */
-       if (mod_load(argv[1], argc - 2, argv + 2) != 0)
+       if (mod_loadkld(argv[1], argc - 2, argv + 2) != 0)
            return(CMD_ERROR);
        /* we have consumed all arguments */
        argc = 1;
@@ -76,22 +75,15 @@ command_boot(int argc, char *argv[])
     /*
      * See if there is a kernel module already loaded
      */
-    if (mod_findmodule(NULL, NULL) == NULL) {
-       for (try = 0; (cp = getbootfile(try)) != NULL; try++) {
-           if (mod_load(cp, argc - 1, argv + 1) != 0) {
-               printf("can't load '%s'\n", cp);
-           } else {
-               /* we have consumed all arguments */
-               argc = 1;
-               break;
-           }
-       }
-    }
+    if (file_findfile(NULL, NULL) == NULL)
+       if (loadakernel(0, argc - 1, argv + 1))
+           /* we have consumed all arguments */
+           argc = 1;
 
     /*
      * Loaded anything yet?
      */
-    if ((km = mod_findmodule(NULL, NULL)) == NULL) {
+    if ((fp = file_findfile(NULL, NULL)) == NULL) {
        command_errmsg = "no bootable kernel";
        return(CMD_ERROR);
     }
@@ -101,9 +93,9 @@ command_boot(int argc, char *argv[])
      * XXX should we merge arguments?  Hard to DWIM.
      */
     if (argc > 1) {
-       if (km->m_args != NULL) 
-           free(km->m_args);
-       km->m_args = unargv(argc - 1, argv + 1);
+       if (fp->f_args != NULL) 
+           free(fp->f_args);
+       fp->f_args = unargv(argc - 1, argv + 1);
     }
 
     /* Hook for platform-specific autoloading of modules */
@@ -111,7 +103,7 @@ command_boot(int argc, char *argv[])
        return(CMD_ERROR);
 
     /* Call the exec handler from the loader matching the kernel */
-    module_formats[km->m_loader]->l_exec(km);
+    file_formats[fp->f_loader]->l_exec(fp);
     return(CMD_ERROR);
 }
 
@@ -169,6 +161,7 @@ autoboot(int timeout, char *prompt)
     time_t     when, otime, ntime;
     int                c, yes;
     char       *argv[2], *cp, *ep;
+    char       *kernelname;
 
     autoboot_tried = 1;
 
@@ -183,11 +176,21 @@ autoboot(int timeout, char *prompt)
     if (timeout == -1)         /* all else fails */
        timeout = 10;
 
+    kernelname = getenv("kernelname");
+    if (kernelname == NULL) {
+       argv[0] = NULL;
+       loadakernel(0, 0, argv);
+       kernelname = getenv("kernelname");
+       if (kernelname == NULL) {
+           command_errmsg = "no valid kernel found";
+           return(CMD_ERROR);
+       }
+    }
+
     otime = time(NULL);
     when = otime + timeout;    /* when to boot */
     yes = 0;
 
-    /* XXX could try to work out what we might boot */
     printf("%s\n", (prompt == NULL) ? "Hit [Enter] to boot immediately, or any other key for command prompt." : prompt);
 
     for (;;) {
@@ -202,15 +205,16 @@ autoboot(int timeout, char *prompt)
            yes = 1;
            break;
        }
+       
        if (ntime != otime) {
            printf("\rBooting [%s] in %d second%s... ",
-                       getbootfile(0), (int)(when - ntime),
+                       kernelname, (int)(when - ntime),
                        (when-ntime)==1?"":"s");
            otime = ntime;
        }
     }
     if (yes)
-       printf("\rBooting [%s]...               ", getbootfile(0));
+       printf("\rBooting [%s]...               ", kernelname);
     putchar('\n');
     if (yes) {
        argv[0] = "boot";
@@ -227,7 +231,7 @@ static char *
 getbootfile(int try) 
 {
     static char *name = NULL;
-    char       *spec, *ep;
+    const char *spec, *ep;
     size_t     len;
     
     /* we use dynamic storage */
@@ -333,3 +337,17 @@ getrootmount(char *rootdev)
     close(fd);
     return(error);
 }
+
+static int
+loadakernel(int try, int argc, char* argv[])
+{
+    char *cp;
+
+       for (try = 0; (cp = getbootfile(try)) != NULL; try++)
+           if (mod_loadkld(cp, argc - 1, argv + 1) != 0)
+               printf("can't load '%s'\n", cp);
+           else
+               return 1;
+       return 0;
+}
+
index 8eb184b..fb76bb3 100644 (file)
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: src/sys/boot/common/bootstrap.h,v 1.24.2.4 2001/12/21 22:19:13 jhb Exp $
- * $DragonFly: src/sys/boot/common/bootstrap.h,v 1.2 2003/06/17 04:28:16 dillon Exp $
+ * $FreeBSD: src/sys/boot/common/bootstrap.h,v 1.38 2003/05/01 03:56:29 peter Exp $
+ * $DragonFly: src/sys/boot/common/bootstrap.h,v 1.3 2003/11/10 06:08:31 dillon Exp $
  */
 
 #include <sys/types.h>
 #include <sys/queue.h>
+#include <sys/linker_set.h>
 
 /*
  * Generic device specifier; architecture-dependant 
@@ -140,6 +141,10 @@ struct pnpinfo
     STAILQ_ENTRY(pnpinfo)      pi_link;
 };
 
+STAILQ_HEAD(pnpinfo_stql, pnpinfo);
+
+extern struct pnpinfo_stql pnp_devices;
+
 extern struct pnphandler       *pnphandlers[];         /* provided by MD code */
 
 void                   pnp_addident(struct pnpinfo *pi, char *ident);
@@ -156,103 +161,79 @@ char                     *pnp_eisaformat(u_int8_t *data);
 extern int                     isapnp_readport;
 
 /*
- * Module metadata header.
+ * Preloaded file metadata header.
  *
  * Metadata are allocated on our heap, and copied into kernel space
  * before executing the kernel.
  */
-struct module_metadata 
+struct file_metadata 
 {
     size_t                     md_size;
     u_int16_t                  md_type;
-    struct module_metadata     *md_next;
-    char                       md_data[0];     /* data are immediately appended */
+    struct file_metadata       *md_next;
+    char                       md_data[1];     /* data are immediately appended */
+};
+
+struct preloaded_file;
+struct mod_depend;
+
+struct kernel_module
+{
+    char                       *m_name;        /* module name */
+    int                                m_version;      /* module version */
+/*    char                     *m_args;*/      /* arguments for the module */
+    struct preloaded_file      *m_fp;
+    struct kernel_module       *m_next;
 };
 
 /*
- * Loaded module information.
+ * Preloaded file information. Depending on type, file can contain
+ * additional units called 'modules'.
  *
- * At least one module (the kernel) must be loaded in order to boot.
+ * At least one file (the kernel) must be loaded in order to boot.
  * The kernel is always loaded first.
  *
  * String fields (m_name, m_type) should be dynamically allocated.
  */
-struct loaded_module
+struct preloaded_file
 {
-    char                       *m_name;        /* module name */
-    char                       *m_type;        /* verbose module type, eg 'ELF kernel', 'pnptable', etc. */
-    char                       *m_args;        /* arguments for the module */
-    struct module_metadata     *m_metadata;    /* metadata that will be placed in the module directory */
-    int                                m_loader;       /* index of the loader that read the file */
-    vm_offset_t                        m_addr;         /* load address */
-    size_t                     m_size;         /* module size */
-    struct loaded_module       *m_next;        /* next module */
+    char                       *f_name;        /* file name */
+    char                       *f_type;        /* verbose file type, eg 'ELF kernel', 'pnptable', etc. */
+    char                       *f_args;        /* arguments for the file */
+    struct file_metadata       *f_metadata;    /* metadata that will be placed in the module directory */
+    int                                f_loader;       /* index of the loader that read the file */
+    vm_offset_t                        f_addr;         /* load address */
+    size_t                     f_size;         /* file size */
+    struct kernel_module       *f_modules;     /* list of modules if any */
+    struct preloaded_file      *f_next;        /* next file */
 };
 
-struct module_format
+struct file_format
 {
     /* Load function must return EFTYPE if it can't handle the module supplied */
-    int                (* l_load)(char *filename, vm_offset_t dest, struct loaded_module **result);
+    int                (* l_load)(char *filename, u_int64_t dest, struct preloaded_file **result);
     /* Only a loader that will load a kernel (first module) should have an exec handler */
-    int                (* l_exec)(struct loaded_module *mp);
+    int                (* l_exec)(struct preloaded_file *mp);
 };
-extern struct module_format    *module_formats[];      /* supplied by consumer */
-extern struct loaded_module    *loaded_modules;
-extern int                     mod_load(char *name, int argc, char *argv[]);
-extern int                     mod_loadobj(char *type, char *name);
-extern struct loaded_module    *mod_findmodule(char *name, char *type);
-extern void                    mod_addmetadata(struct loaded_module *mp, int type, size_t size, void *p);
-extern struct module_metadata  *mod_findmetadata(struct loaded_module *mp, int type);
-extern void                    mod_discard(struct loaded_module *mp);
-extern struct loaded_module    *mod_allocmodule(void);
-
-/* MI module loaders */
-extern int             aout_loadmodule(char *filename, vm_offset_t dest, struct loaded_module **result);
-extern vm_offset_t     aout_findsym(char *name, struct loaded_module *mp);
-extern int     elf_loadmodule(char *filename, vm_offset_t dest, struct loaded_module **result);
-
-#ifndef NEW_LINKER_SET
-#include <sys/linker_set.h>
-
-/* XXX just for conversion's sake, until we move to the new linker set code */
-
-#define SET_FOREACH(pvar, set)                         \
-           for ((char*) pvar = set.ls_items;                   \
-                (char*) pvar < (char*) &set.ls_items[set.ls_length];   \
-                pvar++)
 
-#else /* NEW_LINKER_SET */
+extern struct file_format      *file_formats[];        /* supplied by consumer */
+extern struct preloaded_file   *preloaded_files;
 
-/*
- * Private macros, not to be used outside this header file.
- */
-#define __MAKE_SET(set, sym)                                           \
-       static void *__CONCAT(__setentry,__LINE__)                      \
-       __attribute__((__section__("set_" #set),__unused__)) = &sym
-#define __SET_BEGIN(set)                                               \
-       ({ extern void *__CONCAT(__start_set_,set);                     \
-           &__CONCAT(__start_set_,set); })
-#define __SET_END(set)                                                 \
-       ({ extern void *__CONCAT(__stop_set_,set);                      \
-           &__CONCAT(__stop_set_,set); })
+int                    mod_load(char *name, struct mod_depend *verinfo, int argc, char *argv[]);
+int                    mod_loadkld(const char *name, int argc, char *argv[]);
 
-/*
- * Public macros.
- */
+struct preloaded_file *file_alloc(void);
+struct preloaded_file *file_findfile(char *name, char *type);
+struct file_metadata *file_findmetadata(struct preloaded_file *fp, int type);
+void file_discard(struct preloaded_file *fp);
+void file_addmetadata(struct preloaded_file *fp, int type, size_t size, void *p);
+int  file_addmodule(struct preloaded_file *fp, char *modname, int version,
+       struct kernel_module **newmp);
 
-/* Add an entry to a set. */
-#define DATA_SET(set, sym) __MAKE_SET(set, sym)
 
-/*
- * Iterate over all the elements of a set.
- *
- * Sets always contain addresses of things, and "pvar" points to words
- * containing those addresses.  Thus is must be declared as "type **pvar",
- * and the address of each set item is obtained inside the loop by "*pvar".
- */
-#define SET_FOREACH(pvar, set)                                         \
-       for (pvar = (__typeof__(pvar))__SET_BEGIN(set);                 \
-           pvar < (__typeof__(pvar))__SET_END(set); pvar++)
+/* MI module loaders */
+#ifdef __elfN
+int    __elfN(loadfile)(char *filename, u_int64_t dest, struct preloaded_file **result);
 #endif
 
 /*
@@ -270,7 +251,7 @@ struct bootblk_command
     static struct bootblk_command _cmd_ ## tag = { key, desc, func };  \
     DATA_SET(Xcommand_set, _cmd_ ## tag)
 
-extern struct linker_set Xcommand_set;
+SET_DECLARE(Xcommand_set, struct bootblk_command);
 
 /* 
  * The intention of the architecture switch is to provide a convenient
@@ -303,3 +284,5 @@ extern struct arch_switch archsw;
 void   delay(int delay);
 
 void   dev_cleanup(void);
+
+time_t time(time_t *tloc);
index 5ff5faa..68ac31b 100644 (file)
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: src/sys/boot/common/commands.c,v 1.13.2.3 2001/03/05 02:27:01 obrien Exp $
- * $DragonFly: src/sys/boot/common/commands.c,v 1.2 2003/06/17 04:28:16 dillon Exp $
+ * $FreeBSD: src/sys/boot/common/commands.c,v 1.19 2003/08/25 23:30:41 obrien Exp $
+ * $DragonFly: src/sys/boot/common/commands.c,v 1.3 2003/11/10 06:08:31 dillon Exp $
  */
 
 #include <stand.h>
 #include <string.h>
-#include <sys/reboot.h>
 
 #include "bootstrap.h"
 
@@ -470,7 +469,7 @@ command_lsdev(int argc, char *argv[])
     pager_open();
     for (i = 0; devsw[i] != NULL; i++) {
        if (devsw[i]->dv_print != NULL){
-           sprintf(line, "%s @ %p\n", devsw[i]->dv_name, devsw[i]->dv_print);
+           sprintf(line, "%s devices:\n", devsw[i]->dv_name);
            if (pager_output(line))
                    break;
            devsw[i]->dv_print(verbose);
index b2957f1..c64e1ee 100644 (file)
@@ -23,8 +23,8 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: src/sys/boot/common/console.c,v 1.5 1999/08/28 00:39:46 peter Exp $
- * $DragonFly: src/sys/boot/common/console.c,v 1.2 2003/06/17 04:28:16 dillon Exp $
+ * $FreeBSD: src/sys/boot/common/console.c,v 1.6 2003/08/25 23:30:41 obrien Exp $
+ * $DragonFly: src/sys/boot/common/console.c,v 1.3 2003/11/10 06:08:31 dillon Exp $
  */
 
 #include <stand.h>
index 3559417..728204a 100644 (file)
@@ -1,7 +1,5 @@
 /*     
- * $FreeBSD: src/sys/boot/common/dev_net.c,v 1.6.2.5 2001/03/04 04:44:42 obrien Exp $
- * $DragonFly: src/sys/boot/common/dev_net.c,v 1.3 2003/11/09 02:22:33 dillon Exp $
- * From: $NetBSD: dev_net.c,v 1.12 1997/12/10 20:38:37 gwr Exp $
+ * $NetBSD: dev_net.c,v 1.12 1997/12/10 20:38:37 gwr Exp $
  */
 
 /*-
  * 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: src/sys/boot/common/dev_net.c,v 1.13 2003/11/03 19:45:05 iedowse Exp $
+ * $DragonFly: src/sys/boot/common/dev_net.c,v 1.4 2003/11/10 06:08:31 dillon Exp $
  */
 
-/*
+/*-
  * This module implements a "raw device" interface suitable for
  * use by the stand-alone I/O library NFS code.  This interface
  * does not support any "block" access, and exists only for the
@@ -113,13 +114,13 @@ net_init(void)
 int
 net_open(struct open_file *f, ...)
 {
-    __va_list args;
+    va_list args;
     char *devname;             /* Device part of file name (or NULL). */
     int error = 0;
 
-    __va_start(args, f);
-    devname = __va_arg(args, char*);
-    __va_end(args);
+    va_start(args, f);
+    devname = va_arg(args, char*);
+    va_end(args);
 
     /* On first open, do netif open, mount, etc. */
     if (netdev_opens == 0) {
@@ -210,6 +211,7 @@ net_getparams(sock)
 {
     char buf[MAXHOSTNAMELEN];
     char temp[FNAME_SIZE];
+    struct iodesc *d;
     int i;
     n_long smask;
 
@@ -268,23 +270,33 @@ net_getparams(sock)
        return (EIO);
     }
  exit:
-    printf("net_open: server addr: %s\n", inet_ntoa(rootip));
-
     /*  
      * If present, strip the server's address off of the rootpath
      * before passing it along.  This allows us to be compatible with
      * the kernel's diskless (BOOTP_NFSROOT) booting conventions
      */
-
-    for(i=0; i<FNAME_SIZE; i++)
-           if(rootpath[i] == ':')
+    for (i = 0; rootpath[i] != '\0' && i < FNAME_SIZE; i++)
+           if (rootpath[i] == ':')
                    break;
-    if(i && i != FNAME_SIZE) {
-           i++;
+    if (i && i != FNAME_SIZE && rootpath[i] == ':') {
+           rootpath[i++] = '\0';
+           if (inet_addr(&rootpath[0]) != INADDR_NONE)
+                   rootip.s_addr = inet_addr(&rootpath[0]);
            bcopy(&rootpath[i], &temp[0], strlen(&rootpath[i])+1);
            bcopy(&temp[0], &rootpath[0], strlen(&rootpath[i])+1);          
     }
+    printf("net_open: server addr: %s\n", inet_ntoa(rootip));
     printf("net_open: server path: %s\n", rootpath);       
+
+    d = socktodesc(sock);
+    sprintf(temp, "%6D", d->myea, ":");
+    setenv("boot.netif.ip", inet_ntoa(myip), 1);
+    setenv("boot.netif.netmask", intoa(netmask), 1);
+    setenv("boot.netif.gateway", inet_ntoa(gateip), 1);
+    setenv("boot.netif.hwaddr", temp, 1);
+    setenv("boot.nfsroot.server", inet_ntoa(rootip), 1);
+    setenv("boot.nfsroot.path", rootpath, 1);
+
     return (0);
 }
 
index 803d405..aa4d8be 100644 (file)
@@ -24,7 +24,7 @@
  * SUCH DAMAGE.
  *
  * $FreeBSD: src/sys/boot/common/dev_net.h,v 1.2 1999/08/28 00:39:46 peter Exp $
- * $DragonFly: src/sys/boot/common/dev_net.h,v 1.2 2003/06/17 04:28:16 dillon Exp $
+ * $DragonFly: src/sys/boot/common/dev_net.h,v 1.3 2003/11/10 06:08:31 dillon Exp $
  */
 
 extern struct devsw netdev;
index 3490347..d9e4ce3 100644 (file)
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: src/sys/boot/common/devopen.c,v 1.3 1999/08/28 00:39:47 peter Exp $
- * $DragonFly: src/sys/boot/common/devopen.c,v 1.2 2003/06/17 04:28:16 dillon Exp $
+ * $FreeBSD: src/sys/boot/common/devopen.c,v 1.4 2003/08/25 23:30:41 obrien Exp $
+ * $DragonFly: src/sys/boot/common/devopen.c,v 1.3 2003/11/10 06:08:31 dillon Exp $
  */
 
-
 #include <stand.h>
 #include <string.h>
 
diff --git a/sys/boot/common/dinode.h b/sys/boot/common/dinode.h
new file mode 100644 (file)
index 0000000..07bde9c
--- /dev/null
@@ -0,0 +1,171 @@
+/*
+ * Copyright (c) 2002 Networks Associates Technology, Inc.
+ * All rights reserved.
+ *
+ * This software was developed for the FreeBSD Project by Marshall
+ * Kirk McKusick and Network Associates Laboratories, the Security
+ * Research Division of Network Associates, Inc. under DARPA/SPAWAR
+ * contract N66001-01-C-8035 ("CBOSS"), as part of the DARPA CHATS
+ * research program
+ *
+ * Copyright (c) 1982, 1989, 1993
+ *     The Regents of the University of California.  All rights reserved.
+ * (c) UNIX System Laboratories, Inc.
+ * All or some portions of this file are derived from material licensed
+ * to the University of California by American Telephone and Telegraph
+ * Co. or Unix System Laboratories, Inc. and are reproduced herein with
+ * the permission of UNIX System Laboratories, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The names of the authors may not be used to endorse or promote
+ *    products derived from this software without specific prior written
+ *    permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *     @(#)dinode.h    8.3 (Berkeley) 1/21/94
+ * $FreeBSD: src/sys/ufs/ufs/dinode.h,v 1.11 2002/07/16 22:36:00 mckusick Exp $
+ * $DragonFly: src/sys/boot/common/dinode.h,v 1.1 2003/11/10 06:08:31 dillon Exp $
+ */
+
+#ifndef _UFS_UFS_DINODE_H_
+#define        _UFS_UFS_DINODE_H_
+
+/*
+ * The root inode is the root of the filesystem.  Inode 0 can't be used for
+ * normal purposes and historically bad blocks were linked to inode 1, thus
+ * the root inode is 2.  (Inode 1 is no longer used for this purpose, however
+ * numerous dump tapes make this assumption, so we are stuck with it).
+ */
+#define        ROOTINO ((ino_t)2)
+
+/*
+ * The Whiteout inode# is a dummy non-zero inode number which will
+ * never be allocated to a real file.  It is used as a place holder
+ * in the directory entry which has been tagged as a DT_W entry.
+ * See the comments about ROOTINO above.
+ */
+#define        WINO    ((ino_t)1)
+
+/*
+ * The size of physical and logical block numbers and time fields in UFS.
+ */
+typedef        int32_t ufs1_daddr_t;
+typedef        int64_t ufs2_daddr_t;
+typedef int64_t ufs_lbn_t;
+typedef int64_t ufs_time_t;
+
+/* File permissions. */
+#define        IEXEC           0000100         /* Executable. */
+#define        IWRITE          0000200         /* Writeable. */
+#define        IREAD           0000400         /* Readable. */
+#define        ISVTX           0001000         /* Sticky bit. */
+#define        ISGID           0002000         /* Set-gid. */
+#define        ISUID           0004000         /* Set-uid. */
+
+/* File types. */
+#define        IFMT            0170000         /* Mask of file type. */
+#define        IFIFO           0010000         /* Named pipe (fifo). */
+#define        IFCHR           0020000         /* Character device. */
+#define        IFDIR           0040000         /* Directory file. */
+#define        IFBLK           0060000         /* Block device. */
+#define        IFREG           0100000         /* Regular file. */
+#define        IFLNK           0120000         /* Symbolic link. */
+#define        IFSOCK          0140000         /* UNIX domain socket. */
+#define        IFWHT           0160000         /* Whiteout. */
+
+/*
+ * A dinode contains all the meta-data associated with a UFS2 file.
+ * This structure defines the on-disk format of a dinode. Since
+ * this structure describes an on-disk structure, all its fields
+ * are defined by types with precise widths.
+ */
+
+#define        NXADDR  2                       /* External addresses in inode. */
+#define        NDADDR  12                      /* Direct addresses in inode. */
+#define        NIADDR  3                       /* Indirect addresses in inode. */
+
+struct ufs2_dinode {
+       u_int16_t       di_mode;        /*   0: IFMT, permissions; see below. */
+       int16_t         di_nlink;       /*   2: File link count. */
+       u_int32_t       di_uid;         /*   4: File owner. */
+       u_int32_t       di_gid;         /*   8: File group. */
+       u_int32_t       di_blksize;     /*  12: Inode blocksize. */
+       u_int64_t       di_size;        /*  16: File byte count. */
+       u_int64_t       di_blocks;      /*  24: Bytes actually held. */
+       ufs_time_t      di_atime;       /*  32: Last access time. */
+       ufs_time_t      di_mtime;       /*  40: Last modified time. */
+       ufs_time_t      di_ctime;       /*  48: Last inode change time. */
+       ufs_time_t      di_birthtime;   /*  56: Inode creation time. */
+       int32_t         di_mtimensec;   /*  64: Last modified time. */
+       int32_t         di_atimensec;   /*  68: Last access time. */
+       int32_t         di_ctimensec;   /*  72: Last inode change time. */
+       int32_t         di_birthnsec;   /*  76: Inode creation time. */
+       int32_t         di_gen;         /*  80: Generation number. */
+       u_int32_t       di_kernflags;   /*  84: Kernel flags. */
+       u_int32_t       di_flags;       /*  88: Status flags (chflags). */
+       int32_t         di_extsize;     /*  92: External attributes block. */
+       ufs2_daddr_t    di_extb[NXADDR];/*  96: External attributes block. */
+       ufs2_daddr_t    di_db[NDADDR];  /* 112: Direct disk blocks. */
+       ufs2_daddr_t    di_ib[NIADDR];  /* 208: Indirect disk blocks. */
+       int64_t         di_spare[3];    /* 232: Reserved; currently unused */
+};
+
+/*
+ * The di_db fields may be overlaid with other information for
+ * file types that do not have associated disk storage. Block
+ * and character devices overlay the first data block with their
+ * dev_t value. Short symbolic links place their path in the
+ * di_db area.
+ */
+#define        di_rdev di_db[0]
+
+/*
+ * A UFS1 dinode contains all the meta-data associated with a UFS1 file.
+ * This structure defines the on-disk format of a UFS1 dinode. Since
+ * this structure describes an on-disk structure, all its fields
+ * are defined by types with precise widths.
+ */
+struct ufs1_dinode {
+       u_int16_t       di_mode;        /*   0: IFMT, permissions; see below. */
+       int16_t         di_nlink;       /*   2: File link count. */
+       union {
+               u_int16_t oldids[2];    /*   4: Ffs: old user and group ids. */
+       } di_u;
+       u_int64_t       di_size;        /*   8: File byte count. */
+       int32_t         di_atime;       /*  16: Last access time. */
+       int32_t         di_atimensec;   /*  20: Last access time. */
+       int32_t         di_mtime;       /*  24: Last modified time. */
+       int32_t         di_mtimensec;   /*  28: Last modified time. */
+       int32_t         di_ctime;       /*  32: Last inode change time. */
+       int32_t         di_ctimensec;   /*  36: Last inode change time. */
+       ufs1_daddr_t    di_db[NDADDR];  /*  40: Direct disk blocks. */
+       ufs1_daddr_t    di_ib[NIADDR];  /*  88: Indirect disk blocks. */
+       u_int32_t       di_flags;       /* 100: Status flags (chflags). */
+       int32_t         di_blocks;      /* 104: Blocks actually held. */
+       int32_t         di_gen;         /* 108: Generation number. */
+       u_int32_t       di_uid;         /* 112: File owner. */
+       u_int32_t       di_gid;         /* 116: File group. */
+       int32_t         di_spare[2];    /* 120: Reserved; currently unused */
+};
+#define        di_ogid         di_u.oldids[1]
+#define        di_ouid         di_u.oldids[0]
+
+#endif /* _UFS_UFS_DINODE_H_ */
diff --git a/sys/boot/common/fs.h b/sys/boot/common/fs.h
new file mode 100644 (file)
index 0000000..0cdfbeb
--- /dev/null
@@ -0,0 +1,604 @@
+/*
+ * Copyright (c) 1982, 1986, 1993
+ *     The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ *     This product includes software developed by the University of
+ *     California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *     @(#)fs.h        8.13 (Berkeley) 3/21/95
+ * $FreeBSD$
+ * $DragonFly: src/sys/boot/common/fs.h,v 1.1 2003/11/10 06:08:31 dillon Exp $
+ */
+
+#ifndef _UFS_FFS_FS_H_
+#define _UFS_FFS_FS_H_
+
+/*
+ * Each disk drive contains some number of filesystems.
+ * A filesystem consists of a number of cylinder groups.
+ * Each cylinder group has inodes and data.
+ *
+ * A filesystem is described by its super-block, which in turn
+ * describes the cylinder groups.  The super-block is critical
+ * data and is replicated in each cylinder group to protect against
+ * catastrophic loss.  This is done at `newfs' time and the critical
+ * super-block data does not change, so the copies need not be
+ * referenced further unless disaster strikes.
+ *
+ * For filesystem fs, the offsets of the various blocks of interest
+ * are given in the super block as:
+ *     [fs->fs_sblkno]         Super-block
+ *     [fs->fs_cblkno]         Cylinder group block
+ *     [fs->fs_iblkno]         Inode blocks
+ *     [fs->fs_dblkno]         Data blocks
+ * The beginning of cylinder group cg in fs, is given by
+ * the ``cgbase(fs, cg)'' macro.
+ *
+ * Depending on the architecture and the media, the superblock may
+ * reside in any one of four places. For tiny media where every block 
+ * counts, it is placed at the very front of the partition. Historically,
+ * UFS1 placed it 8K from the front to leave room for the disk label and
+ * a small bootstrap. For UFS2 it got moved to 64K from the front to leave
+ * room for the disk label and a bigger bootstrap, and for really piggy
+ * systems we check at 256K from the front if the first three fail. In
+ * all cases the size of the superblock will be SBLOCKSIZE. All values are
+ * given in byte-offset form, so they do not imply a sector size. The
+ * SBLOCKSEARCH specifies the order in which the locations should be searched.
+ */
+#define SBLOCK_FLOPPY       0
+#define SBLOCK_UFS1      8192
+#define SBLOCK_UFS2     65536
+#define SBLOCK_PIGGY   262144
+#define SBLOCKSIZE       8192
+#define SBLOCKSEARCH \
+       { SBLOCK_UFS2, SBLOCK_UFS1, SBLOCK_FLOPPY, SBLOCK_PIGGY, -1 }
+
+/*
+ * Max number of fragments per block. This value is NOT tweakable.
+ */
+#define MAXFRAG        8
+
+/*
+ * Addresses stored in inodes are capable of addressing fragments
+ * of `blocks'. File system blocks of at most size MAXBSIZE can
+ * be optionally broken into 2, 4, or 8 pieces, each of which is
+ * addressable; these pieces may be DEV_BSIZE, or some multiple of
+ * a DEV_BSIZE unit.
+ *
+ * Large files consist of exclusively large data blocks.  To avoid
+ * undue wasted disk space, the last data block of a small file may be
+ * allocated as only as many fragments of a large block as are
+ * necessary.  The filesystem format retains only a single pointer
+ * to such a fragment, which is a piece of a single large block that
+ * has been divided.  The size of such a fragment is determinable from
+ * information in the inode, using the ``blksize(fs, ip, lbn)'' macro.
+ *
+ * The filesystem records space availability at the fragment level;
+ * to determine block availability, aligned fragments are examined.
+ */
+
+/*
+ * MINBSIZE is the smallest allowable block size.
+ * In order to insure that it is possible to create files of size
+ * 2^32 with only two levels of indirection, MINBSIZE is set to 4096.
+ * MINBSIZE must be big enough to hold a cylinder group block,
+ * thus changes to (struct cg) must keep its size within MINBSIZE.
+ * Note that super blocks are always of size SBSIZE,
+ * and that both SBSIZE and MAXBSIZE must be >= MINBSIZE.
+ */
+#define MINBSIZE       4096
+
+/*
+ * The path name on which the filesystem is mounted is maintained
+ * in fs_fsmnt. MAXMNTLEN defines the amount of space allocated in
+ * the super block for this name.
+ */
+#define MAXMNTLEN      468
+
+/*
+ * The volume name for this filesystem is maintained in fs_volname.
+ * MAXVOLLEN defines the length of the buffer allocated.
+ */
+#define MAXVOLLEN      32
+
+/*
+ * There is a 128-byte region in the superblock reserved for in-core
+ * pointers to summary information. Originally this included an array
+ * of pointers to blocks of struct csum; now there are just a few
+ * pointers and the remaining space is padded with fs_ocsp[].
+ *
+ * NOCSPTRS determines the size of this padding. One pointer (fs_csp)
+ * is taken away to point to a contiguous array of struct csum for
+ * all cylinder groups; a second (fs_maxcluster) points to an array
+ * of cluster sizes that is computed as cylinder groups are inspected,
+ * and the third points to an array that tracks the creation of new
+ * directories. A fourth pointer, fs_active, is used when creating
+ * snapshots; it points to a bitmap of cylinder groups for which the
+ * free-block bitmap has changed since the snapshot operation began.
+ */
+#define        NOCSPTRS        ((128 / sizeof(void *)) - 4)
+
+/*
+ * A summary of contiguous blocks of various sizes is maintained
+ * in each cylinder group. Normally this is set by the initial
+ * value of fs_maxcontig. To conserve space, a maximum summary size
+ * is set by FS_MAXCONTIG.
+ */
+#define FS_MAXCONTIG   16
+
+/*
+ * MINFREE gives the minimum acceptable percentage of filesystem
+ * blocks which may be free. If the freelist drops below this level
+ * only the superuser may continue to allocate blocks. This may
+ * be set to 0 if no reserve of free blocks is deemed necessary,
+ * however throughput drops by fifty percent if the filesystem
+ * is run at between 95% and 100% full; thus the minimum default
+ * value of fs_minfree is 5%. However, to get good clustering
+ * performance, 10% is a better choice. hence we use 10% as our
+ * default value. With 10% free space, fragmentation is not a
+ * problem, so we choose to optimize for time.
+ */
+#define MINFREE                8
+#define DEFAULTOPT     FS_OPTTIME
+
+/*
+ * Grigoriy Orlov <gluk@ptci.ru> has done some extensive work to fine
+ * tune the layout preferences for directories within a filesystem.
+ * His algorithm can be tuned by adjusting the following parameters
+ * which tell the system the average file size and the average number
+ * of files per directory. These defaults are well selected for typical
+ * filesystems, but may need to be tuned for odd cases like filesystems
+ * being used for sqiud caches or news spools.
+ */
+#define AVFILESIZ      16384   /* expected average file size */
+#define AFPDIR         64      /* expected number of files per directory */
+
+/*
+ * The maximum number of snapshot nodes that can be associated
+ * with each filesystem. This limit affects only the number of
+ * snapshot files that can be recorded within the superblock so
+ * that they can be found when the filesystem is mounted. However,
+ * maintaining too many will slow the filesystem performance, so
+ * having this limit is a good idea.
+ */
+#define FSMAXSNAP 20
+
+/*
+ * Used to identify special blocks in snapshots:
+ *
+ * BLK_NOCOPY - A block that was unallocated at the time the snapshot
+ *     was taken, hence does not need to be copied when written.
+ * BLK_SNAP - A block held by another snapshot that is not needed by this
+ *     snapshot. When the other snapshot is freed, the BLK_SNAP entries
+ *     are converted to BLK_NOCOPY. These are needed to allow fsck to
+ *     identify blocks that are in use by other snapshots (which are
+ *     expunged from this snapshot).
+ */
+#define BLK_NOCOPY ((ufs2_daddr_t)(1))
+#define BLK_SNAP ((ufs2_daddr_t)(2))
+
+/*
+ * Sysctl values for the fast filesystem.
+ */
+#define        FFS_ADJ_REFCNT           1      /* adjust inode reference count */
+#define        FFS_ADJ_BLKCNT           2      /* adjust inode used block count */
+#define        FFS_BLK_FREE             3      /* free range of blocks in map */
+#define        FFS_DIR_FREE             4      /* free specified dir inodes in map */
+#define        FFS_FILE_FREE            5      /* free specified file inodes in map */
+#define        FFS_SET_FLAGS            6      /* set filesystem flags */
+#define        FFS_MAXID                7      /* number of valid ffs ids */
+
+/*
+ * Command structure passed in to the filesystem to adjust filesystem values.
+ */
+#define        FFS_CMD_VERSION         0x19790518      /* version ID */
+struct fsck_cmd {
+       int32_t version;        /* version of command structure */
+       int32_t handle;         /* reference to filesystem to be changed */
+       int64_t value;          /* inode or block number to be affected */
+       int64_t size;           /* amount or range to be adjusted */
+       int64_t spare;          /* reserved for future use */
+};
+
+/*
+ * Per cylinder group information; summarized in blocks allocated
+ * from first cylinder group data blocks.  These blocks have to be
+ * read in from fs_csaddr (size fs_cssize) in addition to the
+ * super block.
+ */
+struct csum {
+       int32_t cs_ndir;                /* number of directories */
+       int32_t cs_nbfree;              /* number of free blocks */
+       int32_t cs_nifree;              /* number of free inodes */
+       int32_t cs_nffree;              /* number of free frags */
+};
+struct csum_total {
+       int64_t cs_ndir;                /* number of directories */
+       int64_t cs_nbfree;              /* number of free blocks */
+       int64_t cs_nifree;              /* number of free inodes */
+       int64_t cs_nffree;              /* number of free frags */
+       int64_t cs_numclusters;         /* number of free clusters */
+       int64_t cs_spare[3];            /* future expansion */
+};
+
+/*
+ * Super block for an FFS filesystem.
+ */
+struct fs {
+       int32_t  fs_firstfield;         /* historic filesystem linked list, */
+       int32_t  fs_unused_1;           /*     used for incore super blocks */
+       int32_t  fs_sblkno;             /* offset of super-block in filesys */
+       int32_t  fs_cblkno;             /* offset of cyl-block in filesys */
+       int32_t  fs_iblkno;             /* offset of inode-blocks in filesys */
+       int32_t  fs_dblkno;             /* offset of first data after cg */
+       int32_t  fs_old_cgoffset;       /* cylinder group offset in cylinder */
+       int32_t  fs_old_cgmask;         /* used to calc mod fs_ntrak */
+       int32_t  fs_old_time;           /* last time written */
+       int32_t  fs_old_size;           /* number of blocks in fs */
+       int32_t  fs_old_dsize;          /* number of data blocks in fs */
+       int32_t  fs_ncg;                /* number of cylinder groups */
+       int32_t  fs_bsize;              /* size of basic blocks in fs */
+       int32_t  fs_fsize;              /* size of frag blocks in fs */
+       int32_t  fs_frag;               /* number of frags in a block in fs */
+/* these are configuration parameters */
+       int32_t  fs_minfree;            /* minimum percentage of free blocks */
+       int32_t  fs_old_rotdelay;       /* num of ms for optimal next block */
+       int32_t  fs_old_rps;            /* disk revolutions per second */
+/* these fields can be computed from the others */
+       int32_t  fs_bmask;              /* ``blkoff'' calc of blk offsets */
+       int32_t  fs_fmask;              /* ``fragoff'' calc of frag offsets */
+       int32_t  fs_bshift;             /* ``lblkno'' calc of logical blkno */
+       int32_t  fs_fshift;             /* ``numfrags'' calc number of frags */
+/* these are configuration parameters */
+       int32_t  fs_maxcontig;          /* max number of contiguous blks */
+       int32_t  fs_maxbpg;             /* max number of blks per cyl group */
+/* these fields can be computed from the others */
+       int32_t  fs_fragshift;          /* block to frag shift */
+       int32_t  fs_fsbtodb;            /* fsbtodb and dbtofsb shift constant */
+       int32_t  fs_sbsize;             /* actual size of super block */
+       int32_t  fs_spare1[2];          /* old fs_csmask */
+                                       /* old fs_csshift */
+       int32_t  fs_nindir;             /* value of NINDIR */
+       int32_t  fs_inopb;              /* value of INOPB */
+       int32_t  fs_old_nspf;           /* value of NSPF */
+/* yet another configuration parameter */
+       int32_t  fs_optim;              /* optimization preference, see below */
+       int32_t  fs_old_npsect;         /* # sectors/track including spares */
+       int32_t  fs_old_interleave;     /* hardware sector interleave */
+       int32_t  fs_old_trackskew;      /* sector 0 skew, per track */
+       int32_t  fs_id[2];              /* unique filesystem id */
+/* sizes determined by number of cylinder groups and their sizes */
+       int32_t  fs_old_csaddr;         /* blk addr of cyl grp summary area */
+       int32_t  fs_cssize;             /* size of cyl grp summary area */
+       int32_t  fs_cgsize;             /* cylinder group size */
+       int32_t  fs_spare2;             /* old fs_ntrak */
+       int32_t  fs_old_nsect;          /* sectors per track */
+       int32_t  fs_old_spc;            /* sectors per cylinder */
+       int32_t  fs_old_ncyl;           /* cylinders in filesystem */
+       int32_t  fs_old_cpg;            /* cylinders per group */
+       int32_t  fs_ipg;                /* inodes per group */
+       int32_t  fs_fpg;                /* blocks per group * fs_frag */
+/* this data must be re-computed after crashes */
+       struct  csum fs_old_cstotal;    /* cylinder summary information */
+/* these fields are cleared at mount time */
+       int8_t   fs_fmod;               /* super block modified flag */
+       int8_t   fs_clean;              /* filesystem is clean flag */
+       int8_t   fs_ronly;              /* mounted read-only flag */
+       int8_t   fs_old_flags;          /* old FS_ flags */
+       u_char   fs_fsmnt[MAXMNTLEN];   /* name mounted on */
+       u_char   fs_volname[MAXVOLLEN]; /* volume name */
+       u_int64_t fs_swuid;             /* system-wide uid */
+       int32_t  fs_pad;                /* due to alignment of fs_swuid */
+/* these fields retain the current block allocation info */
+       int32_t  fs_cgrotor;            /* last cg searched */
+       void    *fs_ocsp[NOCSPTRS];     /* padding; was list of fs_cs buffers */
+       u_int8_t *fs_contigdirs;        /* # of contiguously allocated dirs */
+       struct  csum *fs_csp;           /* cg summary info buffer for fs_cs */
+       int32_t *fs_maxcluster;         /* max cluster in each cyl group */
+       u_int   *fs_active;             /* used by snapshots to track fs */
+       int32_t  fs_old_cpc;            /* cyl per cycle in postbl */
+       int32_t  fs_maxbsize;           /* maximum blocking factor permitted */
+       int64_t  fs_sparecon64[17];     /* old rotation block list head */
+       int64_t  fs_sblockloc;          /* byte offset of standard superblock */
+       struct  csum_total fs_cstotal;  /* cylinder summary information */
+       ufs_time_t fs_time;             /* last time written */
+       int64_t  fs_size;               /* number of blocks in fs */
+       int64_t  fs_dsize;              /* number of data blocks in fs */
+       ufs2_daddr_t fs_csaddr;         /* blk addr of cyl grp summary area */
+       int64_t  fs_pendingblocks;      /* blocks in process of being freed */
+       int32_t  fs_pendinginodes;      /* inodes in process of being freed */
+       int32_t  fs_snapinum[FSMAXSNAP];/* list of snapshot inode numbers */
+       int32_t  fs_avgfilesize;        /* expected average file size */
+       int32_t  fs_avgfpdir;           /* expected # of files per directory */
+       int32_t  fs_save_cgsize;        /* save real cg size to use fs_bsize */
+       int32_t  fs_sparecon32[26];     /* reserved for future constants */
+       int32_t  fs_flags;              /* see FS_ flags below */
+       int32_t  fs_contigsumsize;      /* size of cluster summary array */ 
+       int32_t  fs_maxsymlinklen;      /* max length of an internal symlink */
+       int32_t  fs_old_inodefmt;       /* format of on-disk inodes */
+       u_int64_t fs_maxfilesize;       /* maximum representable file size */
+       int64_t  fs_qbmask;             /* ~fs_bmask for use with 64-bit size */
+       int64_t  fs_qfmask;             /* ~fs_fmask for use with 64-bit size */
+       int32_t  fs_state;              /* validate fs_clean field */
+       int32_t  fs_old_postblformat;   /* format of positional layout tables */
+       int32_t  fs_old_nrpos;          /* number of rotational positions */
+       int32_t  fs_spare5[2];          /* old fs_postbloff */
+                                       /* old fs_rotbloff */
+       int32_t  fs_magic;              /* magic number */
+};
+
+/* Sanity checking. */
+#ifdef CTASSERT
+CTASSERT(sizeof(struct fs) == 1376);
+#endif
+
+/*
+ * Filesystem identification
+ */
+#define        FS_UFS1_MAGIC   0x011954        /* UFS1 fast filesystem magic number */
+#define        FS_UFS2_MAGIC   0x19540119      /* UFS2 fast filesystem magic number */
+#define        FS_OKAY         0x7c269d38      /* superblock checksum */
+#define FS_42INODEFMT  -1              /* 4.2BSD inode format */
+#define FS_44INODEFMT  2               /* 4.4BSD inode format */
+
+/*
+ * Preference for optimization.
+ */
+#define FS_OPTTIME     0       /* minimize allocation time */
+#define FS_OPTSPACE    1       /* minimize disk fragmentation */
+
+/*
+ * Filesystem flags.
+ *
+ * The FS_UNCLEAN flag is set by the kernel when the filesystem was
+ * mounted with fs_clean set to zero. The FS_DOSOFTDEP flag indicates
+ * that the filesystem should be managed by the soft updates code.
+ * Note that the FS_NEEDSFSCK flag is set and cleared only by the
+ * fsck utility. It is set when background fsck finds an unexpected
+ * inconsistency which requires a traditional foreground fsck to be
+ * run. Such inconsistencies should only be found after an uncorrectable
+ * disk error. A foreground fsck will clear the FS_NEEDSFSCK flag when
+ * it has successfully cleaned up the filesystem. The kernel uses this
+ * flag to enforce that inconsistent filesystems be mounted read-only.
+ * The FS_INDEXDIRS flag when set indicates that the kernel maintains
+ * on-disk auxiliary indexes (such as B-trees) for speeding directory
+ * accesses. Kernels that do not support auxiliary indicies clear the
+ * flag to indicate that the indicies need to be rebuilt (by fsck) before
+ * they can be used.
+ *
+ * FS_ACLS indicates that ACLs are administratively enabled for the
+ * file system, so they should be loaded from extended attributes,
+ * observed for access control purposes, and be administered by object
+ * owners.  FS_MULTILABEL indicates that the TrustedBSD MAC Framework
+ * should attempt to back MAC labels into extended attributes on the
+ * file system rather than maintain a single mount label for all
+ * objects.
+ */
+#define FS_UNCLEAN    0x01     /* filesystem not clean at mount */
+#define FS_DOSOFTDEP  0x02     /* filesystem using soft dependencies */
+#define FS_NEEDSFSCK  0x04     /* filesystem needs sync fsck before mount */
+#define FS_INDEXDIRS  0x08     /* kernel supports indexed directories */
+#define FS_ACLS       0x10     /* file system has ACLs enabled */
+#define FS_MULTILABEL 0x20     /* file system is MAC multi-label */
+#define FS_FLAGS_UPDATED 0x80  /* flags have been moved to new location */
+
+/*
+ * Macros to access bits in the fs_active array.
+ */
+#define        ACTIVECGNUM(fs, cg)     ((fs)->fs_active[(cg) / (NBBY * sizeof(int))])
+#define        ACTIVECGOFF(cg)         (1 << ((cg) % (NBBY * sizeof(int))))
+
+/*
+ * The size of a cylinder group is calculated by CGSIZE. The maximum size
+ * is limited by the fact that cylinder groups are at most one block.
+ * Its size is derived from the size of the maps maintained in the
+ * cylinder group and the (struct cg) size.
+ */
+#define CGSIZE(fs) \
+    /* base cg */      (sizeof(struct cg) + sizeof(int32_t) + \
+    /* old btotoff */  (fs)->fs_old_cpg * sizeof(int32_t) + \
+    /* old boff */     (fs)->fs_old_cpg * sizeof(u_int16_t) + \
+    /* inode map */    howmany((fs)->fs_ipg, NBBY) + \
+    /* block map */    howmany((fs)->fs_fpg, NBBY) +\
+    /* if present */   ((fs)->fs_contigsumsize <= 0 ? 0 : \
+    /* cluster sum */  (fs)->fs_contigsumsize * sizeof(int32_t) + \
+    /* cluster map */  howmany(fragstoblks(fs, (fs)->fs_fpg), NBBY)))
+
+/*
+ * The minimal number of cylinder groups that should be created.
+ */
+#define MINCYLGRPS     4
+
+/*
+ * Convert cylinder group to base address of its global summary info.
+ */
+#define fs_cs(fs, indx) fs_csp[indx]
+
+/*
+ * Cylinder group block for a filesystem.
+ */
+#define        CG_MAGIC        0x090255
+struct cg {
+       int32_t  cg_firstfield;         /* historic cyl groups linked list */
+       int32_t  cg_magic;              /* magic number */
+       int32_t  cg_old_time;           /* time last written */
+       int32_t  cg_cgx;                /* we are the cgx'th cylinder group */
+       int16_t  cg_old_ncyl;           /* number of cyl's this cg */
+       int16_t  cg_old_niblk;          /* number of inode blocks this cg */
+       int32_t  cg_ndblk;              /* number of data blocks this cg */
+       struct  csum cg_cs;             /* cylinder summary information */
+       int32_t  cg_rotor;              /* position of last used block */
+       int32_t  cg_frotor;             /* position of last used frag */
+       int32_t  cg_irotor;             /* position of last used inode */
+       int32_t  cg_frsum[MAXFRAG];     /* counts of available frags */
+       int32_t  cg_old_btotoff;        /* (int32) block totals per cylinder */
+       int32_t  cg_old_boff;           /* (u_int16) free block positions */
+       int32_t  cg_iusedoff;           /* (u_int8) used inode map */
+       int32_t  cg_freeoff;            /* (u_int8) free block map */
+       int32_t  cg_nextfreeoff;        /* (u_int8) next available space */
+       int32_t  cg_clustersumoff;      /* (u_int32) counts of avail clusters */
+       int32_t  cg_clusteroff;         /* (u_int8) free cluster map */
+       int32_t  cg_nclusterblks;       /* number of clusters this cg */
+       int32_t  cg_niblk;              /* number of inode blocks this cg */
+       int32_t  cg_initediblk;         /* last initialized inode */
+       int32_t  cg_sparecon32[3];      /* reserved for future use */
+       ufs_time_t cg_time;             /* time last written */
+       int64_t  cg_sparecon64[3];      /* reserved for future use */
+       u_int8_t cg_space[1];           /* space for cylinder group maps */
+/* actually longer */
+};
+
+/*
+ * Macros for access to cylinder group array structures
+ */
+#define cg_chkmagic(cgp) ((cgp)->cg_magic == CG_MAGIC)
+#define cg_inosused(cgp) \
+    ((u_int8_t *)((u_int8_t *)(cgp) + (cgp)->cg_iusedoff))
+#define cg_blksfree(cgp) \
+    ((u_int8_t *)((u_int8_t *)(cgp) + (cgp)->cg_freeoff))
+#define cg_clustersfree(cgp) \
+    ((u_int8_t *)((u_int8_t *)(cgp) + (cgp)->cg_clusteroff))
+#define cg_clustersum(cgp) \
+    ((int32_t *)((u_int8_t *)(cgp) + (cgp)->cg_clustersumoff))
+
+/*
+ * Turn filesystem block numbers into disk block addresses.
+ * This maps filesystem blocks to device size blocks.
+ */
+#define fsbtodb(fs, b) ((b) << (fs)->fs_fsbtodb)
+#define        dbtofsb(fs, b)  ((b) >> (fs)->fs_fsbtodb)
+
+/*
+ * Cylinder group macros to locate things in cylinder groups.
+ * They calc filesystem addresses of cylinder group data structures.
+ */
+#define        cgbase(fs, c)   (((ufs2_daddr_t)(fs)->fs_fpg) * (c))
+#define        cgdmin(fs, c)   (cgstart(fs, c) + (fs)->fs_dblkno)      /* 1st data */
+#define        cgimin(fs, c)   (cgstart(fs, c) + (fs)->fs_iblkno)      /* inode blk */
+#define        cgsblock(fs, c) (cgstart(fs, c) + (fs)->fs_sblkno)      /* super blk */
+#define        cgtod(fs, c)    (cgstart(fs, c) + (fs)->fs_cblkno)      /* cg block */
+#define cgstart(fs, c)                                                 \
+       ((fs)->fs_magic == FS_UFS2_MAGIC ? cgbase(fs, c) :              \
+       (cgbase(fs, c) + (fs)->fs_old_cgoffset * ((c) & ~((fs)->fs_old_cgmask))))
+
+/*
+ * Macros for handling inode numbers:
+ *     inode number to filesystem block offset.
+ *     inode number to cylinder group number.
+ *     inode number to filesystem block address.
+ */
+#define        ino_to_cg(fs, x)        ((x) / (fs)->fs_ipg)
+#define        ino_to_fsba(fs, x)                                              \
+       ((ufs2_daddr_t)(cgimin(fs, ino_to_cg(fs, x)) +                  \
+           (blkstofrags((fs), (((x) % (fs)->fs_ipg) / INOPB(fs))))))
+#define        ino_to_fsbo(fs, x)      ((x) % INOPB(fs))
+
+/*
+ * Give cylinder group number for a filesystem block.
+ * Give cylinder group block number for a filesystem block.
+ */
+#define        dtog(fs, d)     ((d) / (fs)->fs_fpg)
+#define        dtogd(fs, d)    ((d) % (fs)->fs_fpg)
+
+/*
+ * Extract the bits for a block from a map.
+ * Compute the cylinder and rotational position of a cyl block addr.
+ */
+#define blkmap(fs, map, loc) \
+    (((map)[(loc) / NBBY] >> ((loc) % NBBY)) & (0xff >> (NBBY - (fs)->fs_frag)))
+
+/*
+ * The following macros optimize certain frequently calculated
+ * quantities by using shifts and masks in place of divisions
+ * modulos and multiplications.
+ */
+#define blkoff(fs, loc)                /* calculates (loc % fs->fs_bsize) */ \
+       ((loc) & (fs)->fs_qbmask)
+#define fragoff(fs, loc)       /* calculates (loc % fs->fs_fsize) */ \
+       ((loc) & (fs)->fs_qfmask)
+#define lfragtosize(fs, frag)  /* calculates ((off_t)frag * fs->fs_fsize) */ \
+       (((off_t)(frag)) << (fs)->fs_fshift)
+#define lblktosize(fs, blk)    /* calculates ((off_t)blk * fs->fs_bsize) */ \
+       (((off_t)(blk)) << (fs)->fs_bshift)
+/* Use this only when `blk' is known to be small, e.g., < NDADDR. */
+#define smalllblktosize(fs, blk)    /* calculates (blk * fs->fs_bsize) */ \
+       ((blk) << (fs)->fs_bshift)
+#define lblkno(fs, loc)                /* calculates (loc / fs->fs_bsize) */ \
+       ((loc) >> (fs)->fs_bshift)
+#define numfrags(fs, loc)      /* calculates (loc / fs->fs_fsize) */ \
+       ((loc) >> (fs)->fs_fshift)
+#define blkroundup(fs, size)   /* calculates roundup(size, fs->fs_bsize) */ \
+       (((size) + (fs)->fs_qbmask) & (fs)->fs_bmask)
+#define fragroundup(fs, size)  /* calculates roundup(size, fs->fs_fsize) */ \
+       (((size) + (fs)->fs_qfmask) & (fs)->fs_fmask)
+#define fragstoblks(fs, frags) /* calculates (frags / fs->fs_frag) */ \
+       ((frags) >> (fs)->fs_fragshift)
+#define blkstofrags(fs, blks)  /* calculates (blks * fs->fs_frag) */ \
+       ((blks) << (fs)->fs_fragshift)
+#define fragnum(fs, fsb)       /* calculates (fsb % fs->fs_frag) */ \
+       ((fsb) & ((fs)->fs_frag - 1))
+#define blknum(fs, fsb)                /* calculates rounddown(fsb, fs->fs_frag) */ \
+       ((fsb) &~ ((fs)->fs_frag - 1))
+
+/*
+ * Determine the number of available frags given a
+ * percentage to hold in reserve.
+ */
+#define freespace(fs, percentreserved) \
+       (blkstofrags((fs), (fs)->fs_cstotal.cs_nbfree) + \
+       (fs)->fs_cstotal.cs_nffree - \
+       (((off_t)((fs)->fs_dsize)) * (percentreserved) / 100))
+
+/*
+ * Determining the size of a file block in the filesystem.
+ */
+#define blksize(fs, ip, lbn) \
+       (((lbn) >= NDADDR || (ip)->i_size >= smalllblktosize(fs, (lbn) + 1)) \
+           ? (fs)->fs_bsize \
+           : (fragroundup(fs, blkoff(fs, (ip)->i_size))))
+#define sblksize(fs, size, lbn) \
+       (((lbn) >= NDADDR || (size) >= ((lbn) + 1) << (fs)->fs_bshift) \
+         ? (fs)->fs_bsize \
+         : (fragroundup(fs, blkoff(fs, (size)))))
+
+
+/*
+ * Number of inodes in a secondary storage block/fragment.
+ */
+#define        INOPB(fs)       ((fs)->fs_inopb)
+#define        INOPF(fs)       ((fs)->fs_inopb >> (fs)->fs_fragshift)
+
+/*
+ * Number of indirects in a filesystem block.
+ */
+#define        NINDIR(fs)      ((fs)->fs_nindir)
+
+extern int inside[], around[];
+extern u_char *fragtbl[];
+
+#endif
index bc09c67..9032a09 100644 (file)
@@ -5,6 +5,7 @@
        ?
 
        The help command displays help on commands and their usage.
+       $DragonFly: src/sys/boot/common/help.common,v 1.2 2003/11/10 06:08:31 dillon Exp $
 
        In command help, a term enclosed with <...> indicates a value as
        described by the term.  A term enclosed with [...] is optional,
        Some commands may not be available.  Use the '?' command to list
        most available commands.
 
+       If needed, disable the use of ACPI with:
+
+       unset acpi_load
+       $hint.acpi.0.disabled="1"
+
 ################################################################################
 # Tautoboot DBoot after a delay
 
        Sets the default set of kernel boot filename(s). It may be overridden
        by setting the bootfile variable to a semicolon-separated list of
        filenames, each of which will be searched for in the module_path
-       directories. The default bootfile set is "kernel;kernel.old".
+       directories. The default bootfile set is "kernel".
 
 ################################################################################
 # Tset Sboot_askname DPrompt for root device
 
        Sets the list of directories which will be searched in for modules
        named in a load command or implicitly required by a dependency. The
-       default module_path is "/;/boot;/modules".
+       default module_path is "/boot/kernel;/boot/modules".
 
 ################################################################################
 # Tset Sprompt DSet the command prompt
                cannot be set below the default determined when the kernel
                was compiled.
 
+       set kern.ipc.nsfbufs=<value>            NSFBUFS
+
+               Set the number of sendfile buffers to be allocated.  This
+               overrides the value determined when the kernel was compiled.
+
        set kern.vm.kmem.size=<value>           VM_KMEM_SIZE
 
                Sets the size of kernel memory (bytes).  This overrides
-               completely the value determined when the kernel was
-               compiled.
+               the value determined when the kernel was compiled.
 
-       set machdep.pccard.pcic_irq=<value>
+       set machdep.disable_mtrrs=1
 
-               Overrides the IRQ normally assigned to a PCCARD controller.
-               Typically the first available interrupt will be allocated,
-               which may conflict with other hardware.  If this value is
-               set to 0, an interrupt will not be assigned and the
-               controller will operate in polled mode only.
+               Disable the use of i686 MTRRs (i386 only)
 
        set net.inet.tcp.tcbhashsize=<value>    TCBHASHSIZE
 
                Overrides the compile-time set value of TCBHASHSIZE or
                the preset default of 512.  Must be a power of 2.
 
+       hw.syscons.sc_no_suspend_vtswitch=<value>
+
+               Disable VT switching on suspend.
+
+               value is 0 (default) or non-zero to enable.
+
        set hw.physmem=<value>                  MAXMEM (i386 only)
 
                Limits the amount of physical memory space available to
                this option provides a hint as to the actual size of
                system memory (which will be tested before use).
 
+       set hw.pci.allow_unsupported_io_range=<value>
+
+               Allow the PCI Bridge to pass through an unsupported
+               memory range assigned by the BIOS.
+
+               value is 0 (default) or non-zero to enable.
+
+       set hw.pci.enable_io_modes=<value>
+
+               Enable PCI resources which are left off by some BIOSes
+               or are not enabled correctly by the device driver.
+
+               value is 1 (default), but this may cause problems with
+               some peripherals.  Set to 0 to disable.
+
 ################################################################################
 # Tshow DShow the values of variables
 
index 6ac6f47..7d72ae0 100644 (file)
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: src/sys/boot/common/interp.c,v 1.22.2.5 2001/03/04 04:46:18 obrien Exp $
- * $DragonFly: src/sys/boot/common/interp.c,v 1.2 2003/06/17 04:28:16 dillon Exp $
+ * $FreeBSD: src/sys/boot/common/interp.c,v 1.29 2003/08/25 23:30:41 obrien Exp $
+ * $DragonFly: src/sys/boot/common/interp.c,v 1.3 2003/11/10 06:08:31 dillon Exp $
  */
+
 /*
  * Simple commandline interpreter, toplevel and misc.
  *
@@ -119,7 +120,7 @@ interact(void)
     if (getenv("prompt") == NULL)
        setenv("prompt", "${interpret}", 1);
     if (getenv("interpret") == NULL)
-        setenv("interpret", "ok", 1);
+        setenv("interpret", "OK", 1);
     
 
     for (;;) {
index 1d4093a..fa5925b 100644 (file)
@@ -1,4 +1,4 @@
-/*
+/*-
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
  * are met:
  * Jordan K. Hubbard
  * 29 August 1998
  *
- * $FreeBSD: src/sys/boot/common/interp_backslash.c,v 1.4.2.1 2000/12/28 13:12:34 ps Exp $
- * $DragonFly: src/sys/boot/common/interp_backslash.c,v 1.2 2003/06/17 04:28:16 dillon Exp $
- *
  * Routine for doing backslash elimination.
+ *
+ * $FreeBSD: src/sys/boot/common/interp_backslash.c,v 1.6 2003/08/25 23:30:41 obrien Exp $
+ * $DragonFly: src/sys/boot/common/interp_backslash.c,v 1.3 2003/11/10 06:08:31 dillon Exp $
  */
 
 #include <stand.h>
index b6212b5..8dd78a1 100644 (file)
@@ -1,4 +1,4 @@
-/*
+/*-
  * Copyright (c) 1998 Michael Smith <msmith@freebsd.org>
  * All rights reserved.
  *
@@ -23,8 +23,8 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: src/sys/boot/common/interp_forth.c,v 1.15.2.2 2000/12/28 13:12:34 ps Exp $
- * $DragonFly: src/sys/boot/common/interp_forth.c,v 1.2 2003/06/17 04:28:16 dillon Exp $
+ * $FreeBSD: src/sys/boot/common/interp_forth.c,v 1.23 2003/08/25 23:30:41 obrien Exp $
+ * $DragonFly: src/sys/boot/common/interp_forth.c,v 1.3 2003/11/10 06:08:31 dillon Exp $
  */
 
 #include <sys/param.h>         /* to pick up __FreeBSD_version */
@@ -38,7 +38,7 @@ extern char bootprog_rev[];
 /* #define BFORTH_DEBUG */
 
 #ifdef BFORTH_DEBUG
-# define DEBUG(fmt, args...)   printf("%s: " fmt "\n" , __FUNCTION__ , ## args)
+# define DEBUG(fmt, args...)   printf("%s: " fmt "\n" , __func__ , ## args)
 #else
 # define DEBUG(fmt, args...)
 #endif
@@ -54,6 +54,7 @@ extern char bootprog_rev[];
  * BootForth   Interface to Ficl Forth interpreter.
  */
 
+FICL_SYSTEM *bf_sys;
 FICL_VM        *bf_vm;
 FICL_WORD *pInterp;
 
@@ -233,8 +234,8 @@ bf_init(void)
     char create_buf[41];       /* 31 characters-long builtins */
     int fd;
    
-    ficlInitSystem(10000);     /* Default dictionary ~4000 cells */
-    bf_vm = ficlNewVM();
+    bf_sys = ficlInitSystem(10000);    /* Default dictionary ~4000 cells */
+    bf_vm = ficlNewVM(bf_sys);
 
     /* Put all private definitions in a "builtins" vocabulary */
     ficlExec(bf_vm, "vocabulary builtins also builtins definitions");
@@ -244,7 +245,7 @@ bf_init(void)
 
     /* make all commands appear as Forth words */
     SET_FOREACH(cmdp, Xcommand_set) {
-       ficlBuild((*cmdp)->c_name, bf_command, FW_DEFAULT);
+       ficlBuild(bf_sys, (char *)(*cmdp)->c_name, bf_command, FW_DEFAULT);
        ficlExec(bf_vm, "forth definitions builtins");
        sprintf(create_buf, "builtin: %s", (*cmdp)->c_name);
        ficlExec(bf_vm, create_buf);
@@ -253,8 +254,8 @@ bf_init(void)
     ficlExec(bf_vm, "only forth definitions");
 
     /* Export some version numbers so that code can detect the loader/host version */
-    ficlSetEnv("FreeBSD_version", __FreeBSD_version);
-    ficlSetEnv("loader_version", 
+    ficlSetEnv(bf_sys, "FreeBSD_version", __FreeBSD_version);
+    ficlSetEnv(bf_sys, "loader_version", 
               (bootprog_rev[0] - '0') * 10 + (bootprog_rev[2] - '0'));
 
     /* try to load and run init file if present */
@@ -264,7 +265,7 @@ bf_init(void)
     }
 
     /* Do this last, so /boot/boot.4th can change it */
-    pInterp = ficlLookup("interpret");
+    pInterp = ficlLookup(bf_sys, "interpret");
 }
 
 /*
@@ -300,7 +301,7 @@ bf_run(char *line)
     
     if (result == VM_USEREXIT)
        panic("interpreter exit");
-    setenv("interpret", bf_vm->state ? "" : "ok", 1);
+    setenv("interpret", bf_vm->state ? "" : "OK", 1);
 
     return result;
 }
index f357b57..5fa2ddc 100644 (file)
@@ -1,4 +1,4 @@
-/*
+/*-
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
  * are met:
  * Jordan K. Hubbard
  * 29 August 1998
  *
- * $FreeBSD: src/sys/boot/common/interp_parse.c,v 1.8.2.1 2000/12/28 13:12:35 ps Exp $
- * $DragonFly: src/sys/boot/common/interp_parse.c,v 1.2 2003/06/17 04:28:16 dillon Exp $
- * 
  * The meat of the simple parser.
+ *
+ * $FreeBSD: src/sys/boot/common/interp_parse.c,v 1.10 2003/08/25 23:30:41 obrien Exp $
+ * $DragonFly: src/sys/boot/common/interp_parse.c,v 1.3 2003/11/10 06:08:31 dillon Exp $
  */
 
 #include <stand.h>
index 0a1e493..c20867c 100644 (file)
@@ -1,4 +1,4 @@
-/*
+/*-
  * Copyright (c) 1998, Michael Smith
  * Copyright (c) 1996, Sujal M. Patel
  * All rights reserved.
@@ -24,8 +24,8 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: src/sys/boot/common/isapnp.c,v 1.5.2.1 2000/12/28 13:12:35 ps Exp $
- * $DragonFly: src/sys/boot/common/isapnp.c,v 1.2 2003/06/17 04:28:16 dillon Exp $
+ * $FreeBSD: src/sys/boot/common/isapnp.c,v 1.7 2003/08/25 23:30:41 obrien Exp $
+ * $DragonFly: src/sys/boot/common/isapnp.c,v 1.3 2003/11/10 06:08:31 dillon Exp $
  */
 
 /*
index 9a82d57..f30c914 100644 (file)
@@ -29,8 +29,8 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: src/sys/boot/common/isapnp.h,v 1.5 1999/12/29 04:54:22 peter Exp $
- * $DragonFly: src/sys/boot/common/isapnp.h,v 1.3 2003/08/27 11:42:33 rob Exp $
+ * $FreeBSD: src/sys/boot/common/isapnp.h,v 1.7 2002/03/20 07:59:37 alfred Exp $
+ * $DragonFly: src/sys/boot/common/isapnp.h,v 1.4 2003/11/10 06:08:31 dillon Exp $
  */
 
 #ifndef _I386_ISA_PNP_H_
@@ -297,8 +297,6 @@ extern pnp_id pnp_devices[MAX_PNP_CARDS];
 extern struct pnp_cinfo pnp_ldn_overrides[MAX_PNP_LDN];
 extern int pnp_overrides_valid;
 
-extern struct linker_set pnpdevice_set;
-
 /*
  * these two functions are for use in drivers
  */
@@ -309,7 +307,7 @@ int enable_pnp_card(void);
 /*
  * used by autoconfigure to actually probe and attach drivers
  */
-void pnp_configure (void);
+void pnp_configure(void);
 
 #endif /* _KERNEL */
 
index 50f36cb..9646ef5 100644 (file)
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: src/sys/boot/common/load.c,v 1.2 1999/08/28 00:39:49 peter Exp $
- * $DragonFly: src/sys/boot/common/load.c,v 1.2 2003/06/17 04:28:16 dillon Exp $
+ * $FreeBSD: src/sys/boot/common/load.c,v 1.3 2003/08/25 23:30:41 obrien Exp $
+ * $DragonFly: src/sys/boot/common/load.c,v 1.3 2003/11/10 06:08:31 dillon Exp $
  */
-
 #include <stand.h>
 
 #define LOAD_TINYBUF   2048
diff --git a/sys/boot/common/load_aout.c b/sys/boot/common/load_aout.c
deleted file mode 100644 (file)
index 48447b3..0000000
+++ /dev/null
@@ -1,262 +0,0 @@
-/*-
- * Copyright (c) 1998 Michael Smith <msmith@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 PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $FreeBSD: src/sys/boot/common/load_aout.c,v 1.16.2.2 2000/12/28 13:12:35 ps Exp $
- * $DragonFly: src/sys/boot/common/Attic/load_aout.c,v 1.2 2003/06/17 04:28:16 dillon Exp $
- */
-
-#include <sys/param.h>
-#include <sys/exec.h>
-#include <sys/imgact_aout.h>
-#include <sys/reboot.h>
-#include <sys/linker.h>
-#include <string.h>
-#include <machine/bootinfo.h>
-#include <stand.h>
-#include <a.out.h>
-#define FREEBSD_AOUT
-#include <link.h>
-
-#include "bootstrap.h"
-
-static int             aout_loadimage(struct loaded_module *mp, int fd, vm_offset_t loadaddr, struct exec *ehdr, int kernel);
-
-#if 0
-static vm_offset_t     aout_findkldident(struct loaded_module *mp, struct exec *ehdr);
-static int             aout_fixupkldmod(struct loaded_module *mp, struct exec *ehdr);
-#endif
-
-const char     *aout_kerneltype = "a.out kernel";
-const char     *aout_moduletype = "a.out module";
-
-/*
- * Attempt to load the file (file) as an a.out module.  It will be stored at
- * (dest), and a pointer to a module structure describing the loaded object
- * will be saved in (result).
- */
-int
-aout_loadmodule(char *filename, vm_offset_t dest, struct loaded_module **result)
-{
-    struct loaded_module       *mp, *kmp;
-    struct exec                        ehdr;
-    int                                fd;
-    vm_offset_t                        addr;
-    int                                err, kernel;
-    u_int                      pad;
-    char                       *s;
-
-    mp = NULL;
-    
-    /*
-     * Open the image, read and validate the a.out header 
-     */
-    if (filename == NULL)      /* can't handle nameless */
-       return(EFTYPE);
-    if ((fd = open(filename, O_RDONLY)) == -1)
-       return(errno);
-    if (read(fd, &ehdr, sizeof(ehdr)) != sizeof(ehdr)) {
-       err = EFTYPE;           /* could be EIO, but may be small file */
-       goto oerr;
-    }
-    if (N_BADMAG(ehdr)) {
-       err = EFTYPE;
-       goto oerr;
-    }
-
-    /*
-     * Check to see what sort of module we are.
-     *
-     * XXX should check N_GETMID()
-     */
-    kmp = mod_findmodule(NULL, NULL);
-    if ((N_GETFLAG(ehdr)) & EX_DYNAMIC) {
-       /* Looks like a kld module */
-       if (kmp == NULL) {
-           printf("aout_loadmodule: can't load module before kernel\n");
-           err = EPERM;
-           goto oerr;
-       }
-       if (strcmp(aout_kerneltype, kmp->m_type)) {
-           printf("aout_loadmodule: can't load module with kernel type '%s'\n", kmp->m_type);
-           err = EPERM;
-           goto oerr;
-       }
-       /* Looks OK, got ahead */
-       kernel = 0;
-
-    } else if (N_GETFLAG(ehdr) == 0) {
-       /* Looks like a kernel */
-       if (kmp != NULL) {
-           printf("aout_loadmodule: kernel already loaded\n");
-           err = EPERM;
-           goto oerr;
-       }
-       /* 
-        * Calculate destination address based on kernel entrypoint     
-        * XXX this is i386-freebsd-aout specific
-        */
-       dest = ehdr.a_entry & 0x100000;
-       if (dest == 0) {
-           printf("aout_loadmodule: not a kernel (maybe static binary?)\n");
-           err = EPERM;
-           goto oerr;
-       }
-       kernel = 1;
-    } else {
-       err = EFTYPE;
-       goto oerr;
-    }
-
-    /* 
-     * Ok, we think we should handle this.
-     */
-    mp = mod_allocmodule();
-    if (kernel)
-       setenv("kernelname", filename, 1);
-    s = strrchr(filename, '/');
-    if (s)
-       mp->m_name = strdup(s + 1); 
-    else
-       mp->m_name = strdup(filename);
-    mp->m_type = strdup(kernel ? aout_kerneltype : aout_moduletype);
-
-    /* Page-align the load address */
-    addr = dest;
-    pad = (u_int)addr & PAGE_MASK;
-    if (pad != 0) {
-       pad = PAGE_SIZE - pad;
-       addr += pad;
-    }
-    mp->m_addr = addr;                                 /* save the aligned load address */
-    if (kernel)
-       printf("%s at %p\n", filename, (void *) addr);
-
-    mp->m_size = aout_loadimage(mp, fd, addr, &ehdr, kernel);
-    if (mp->m_size == 0)
-       goto ioerr;
-
-#if 0
-    /* Handle KLD module data */
-    if (!kernel && ((err = aout_fixupkldmod(mp, &ehdr)) != 0))
-       goto oerr;
-#endif
-
-    /* save exec header as metadata */
-    mod_addmetadata(mp, MODINFOMD_AOUTEXEC, sizeof(struct exec), &ehdr);
-
-    /* Load OK, return module pointer */
-    *result = (struct loaded_module *)mp;
-    err = 0;
-    goto out;
-    
- ioerr:
-    err = EIO;
- oerr:
-    mod_discard(mp);
- out:
-    close(fd);
-    return(err);
-}
-
-/*
- * With the file (fd) open on the image, and (ehdr) containing
- * the exec header, load the image at (addr)
- *
- * Fixup the a_bss field in (ehdr) to reflect the padding added to
- * align the symbol table.
- */
-static int
-aout_loadimage(struct loaded_module *mp, int fd, vm_offset_t loadaddr, struct exec *ehdr, int kernel)
-{
-    u_int              pad;
-    vm_offset_t                addr;
-    size_t             ss;
-    ssize_t            result;
-    vm_offset_t                ssym, esym;
-    
-    addr = loadaddr;
-    lseek(fd, (off_t)N_TXTOFF(*ehdr), SEEK_SET);
-
-    /* text segment */
-    printf("  text=0x%lx ", ehdr->a_text);
-    result = archsw.arch_readin(fd, addr, ehdr->a_text);
-    if (result < 0 || (size_t)result != ehdr->a_text)
-       return(0);
-    addr += ehdr->a_text;
-
-    /* data segment */
-    printf("data=0x%lx ", ehdr->a_data);
-    result = archsw.arch_readin(fd, addr, ehdr->a_data);
-    if (result < 0 || (size_t)result != ehdr->a_data)
-       return(0);
-    addr += ehdr->a_data;
-
-    /* For kernels, we pad the BSS to a page boundary */
-    if (kernel) {
-       pad = (u_int)ehdr->a_bss & PAGE_MASK;
-       if (pad != 0) {
-           pad = PAGE_SIZE - pad;
-           ehdr->a_bss += pad;
-       }
-    }
-    printf("bss=0x%lx ", ehdr->a_bss);
-    addr += ehdr->a_bss;
-
-    /* symbol table size */
-    ssym = esym = addr;
-    if(ehdr->a_syms!=NULL) {
-       archsw.arch_copyin(&ehdr->a_syms, addr, sizeof(ehdr->a_syms));
-       addr += sizeof(ehdr->a_syms);
-
-       /* symbol table */
-       printf("symbols=[0x%lx+0x%lx", (long)sizeof(ehdr->a_syms),ehdr->a_syms);
-       result = archsw.arch_readin(fd, addr, ehdr->a_syms);
-       if (result < 0 || (size_t)result != ehdr->a_syms)
-               return(0);
-       addr += ehdr->a_syms;
-
-       /* string table */
-       read(fd, &ss, sizeof(ss));
-       archsw.arch_copyin(&ss, addr, sizeof(ss));
-       addr += sizeof(ss);
-       ss -= sizeof(ss);
-       printf("+0x%lx+0x%x]", (long)sizeof(ss), ss);
-       result = archsw.arch_readin(fd, addr, ss);
-       if (result < 0 || (size_t)result != ss)
-               return(0);
-       addr += ss;
-       esym = addr;
-
-       mod_addmetadata(mp, MODINFOMD_SSYM, sizeof(ssym), &ssym);
-       mod_addmetadata(mp, MODINFOMD_ESYM, sizeof(esym), &esym);
-    } else {
-       printf("symbols=[none]");
-    }
-    printf("\n");
-
-    return(addr - loadaddr);
-}
-
-
index 4c9cf42..8f00df2 100644 (file)
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: src/sys/boot/common/load_elf.c,v 1.13.2.1 2000/12/28 13:12:35 ps Exp $
- * $DragonFly: src/sys/boot/common/load_elf.c,v 1.2 2003/06/17 04:28:16 dillon Exp $
+ * $FreeBSD: src/sys/boot/common/load_elf.c,v 1.29 2003/08/25 23:30:41 obrien Exp $
+ * $DragonFly: src/sys/boot/common/load_elf.c,v 1.3 2003/11/10 06:08:31 dillon Exp $
  */
 
 #include <sys/param.h>
 #include <sys/exec.h>
-#include <sys/reboot.h>
 #include <sys/linker.h>
+#include <sys/module.h>
 #include <string.h>
-#include <machine/bootinfo.h>
 #include <machine/elf.h>
 #include <stand.h>
 #define FREEBSD_ELF
 
 #include "bootstrap.h"
 
-static int     elf_loadimage(struct loaded_module *mp, int fd, vm_offset_t loadaddr, Elf_Ehdr *ehdr, int kernel, caddr_t firstpage, int firstlen);
+#define COPYOUT(s,d,l) archsw.arch_copyout((vm_offset_t)(s), d, l)
 
-char   *elf_kerneltype = "elf kernel";
-char   *elf_moduletype = "elf module";
+#if defined(__i386__) && __ELF_WORD_SIZE == 64
+#undef ELF_TARG_CLASS
+#undef ELF_TARG_MACH
+#define ELF_TARG_CLASS  ELFCLASS64
+#define ELF_TARG_MACH   EM_X86_64
+#endif
+
+typedef struct elf_file {
+    Elf_Phdr   *ph;
+    Elf_Ehdr   *ehdr;
+    Elf_Sym    *symtab;
+    Elf_Hashelt        *hashtab;
+    Elf_Hashelt        nbuckets;
+    Elf_Hashelt        nchains;
+    Elf_Hashelt        *buckets;
+    Elf_Hashelt        *chains;
+    Elf_Rela   *rela;
+    size_t     relasz;
+    char       *strtab;
+    size_t     strsz;
+    int                fd;
+    caddr_t    firstpage;
+    size_t     firstlen;
+    int                kernel;
+    u_int64_t  off;
+} *elf_file_t;
+
+static int __elfN(loadimage)(struct preloaded_file *mp, elf_file_t ef, u_int64_t loadaddr);
+static int __elfN(lookup_symbol)(struct preloaded_file *mp, elf_file_t ef, const char* name, Elf_Sym* sym);
+#ifdef __sparc__
+static void __elfN(reloc_ptr)(struct preloaded_file *mp, elf_file_t ef,
+    void *p, void *val, size_t len);
+#endif
+static int __elfN(parse_modmetadata)(struct preloaded_file *mp, elf_file_t ef);
+static char    *fake_modname(const char *name);
+
+const char     *__elfN(kerneltype) = "elf kernel";
+const char     *__elfN(moduletype) = "elf module";
 
 /*
  * Attempt to load the file (file) as an ELF module.  It will be stored at
@@ -52,35 +87,37 @@ char        *elf_moduletype = "elf module";
  * will be saved in (result).
  */
 int
-elf_loadmodule(char *filename, vm_offset_t dest, struct loaded_module **result)
+__elfN(loadfile)(char *filename, u_int64_t dest, struct preloaded_file **result)
 {
-    struct loaded_module       *mp, *kmp;
-    Elf_Ehdr                   *ehdr;
-    int                                fd;
-    int                                err, kernel;
+    struct preloaded_file      *fp, *kfp;
+    struct elf_file            ef;
+    Elf_Ehdr                   *ehdr;
+    int                                err;
     u_int                      pad;
-    char                       *s;
-    caddr_t                    firstpage;
-    int                                firstlen;
+    ssize_t                    bytes_read;
 
-    mp = NULL;
+    fp = NULL;
+    bzero(&ef, sizeof(struct elf_file));
     
     /*
      * Open the image, read and validate the ELF header 
      */
     if (filename == NULL)      /* can't handle nameless */
        return(EFTYPE);
-    if ((fd = open(filename, O_RDONLY)) == -1)
+    if ((ef.fd = open(filename, O_RDONLY)) == -1)
        return(errno);
-    firstpage = malloc(PAGE_SIZE);
-    if (firstpage == NULL)
+    ef.firstpage = malloc(PAGE_SIZE);
+    if (ef.firstpage == NULL) {
+       close(ef.fd);
        return(ENOMEM);
-    firstlen = read(fd, firstpage, PAGE_SIZE);
-    if (firstlen <= sizeof(ehdr)) {
+    }
+    bytes_read = read(ef.fd, ef.firstpage, PAGE_SIZE);
+    ef.firstlen = (size_t)bytes_read;
+    if (bytes_read < 0 || ef.firstlen <= sizeof(Elf_Ehdr)) {
        err = EFTYPE;           /* could be EIO, but may be small file */
        goto oerr;
     }
-    ehdr = (Elf_Ehdr *)firstpage;
+    ehdr = ef.ehdr = (Elf_Ehdr *)ef.firstpage;
 
     /* Is it ELF? */
     if (!IS_ELF(*ehdr)) {
@@ -100,21 +137,21 @@ elf_loadmodule(char *filename, vm_offset_t dest, struct loaded_module **result)
     /*
      * Check to see what sort of module we are.
      */
-    kmp = mod_findmodule(NULL, NULL);
+    kfp = file_findfile(NULL, NULL);
     if (ehdr->e_type == ET_DYN) {
        /* Looks like a kld module */
-       if (kmp == NULL) {
-           printf("elf_loadmodule: can't load module before kernel\n");
+       if (kfp == NULL) {
+           printf("elf" __XSTRING(__ELF_WORD_SIZE) "_loadfile: can't load module before kernel\n");
            err = EPERM;
            goto oerr;
        }
-       if (strcmp(elf_kerneltype, kmp->m_type)) {
-           printf("elf_loadmodule: can't load module with kernel type '%s'\n", kmp->m_type);
+       if (strcmp(__elfN(kerneltype), kfp->f_type)) {
+           printf("elf" __XSTRING(__ELF_WORD_SIZE) "_loadfile: can't load module with kernel type '%s'\n", kfp->f_type);
            err = EPERM;
            goto oerr;
        }
        /* Looks OK, got ahead */
-       kernel = 0;
+       ef.kernel = 0;
 
        /* Page-align the load address */
        pad = (u_int)dest & PAGE_MASK;
@@ -124,21 +161,21 @@ elf_loadmodule(char *filename, vm_offset_t dest, struct loaded_module **result)
        }
     } else if (ehdr->e_type == ET_EXEC) {
        /* Looks like a kernel */
-       if (kmp != NULL) {
-           printf("elf_loadmodule: kernel already loaded\n");
+       if (kfp != NULL) {
+           printf("elf" __XSTRING(__ELF_WORD_SIZE) "_loadfile: kernel already loaded\n");
            err = EPERM;
            goto oerr;
        }
        /* 
         * Calculate destination address based on kernel entrypoint     
         */
-       dest = (vm_offset_t) ehdr->e_entry;
+       dest = ehdr->e_entry;
        if (dest == 0) {
-           printf("elf_loadmodule: not a kernel (maybe static binary?)\n");
+           printf("elf" __XSTRING(__ELF_WORD_SIZE) "_loadfile: not a kernel (maybe static binary?)\n");
            err = EPERM;
            goto oerr;
        }
-       kernel = 1;
+       ef.kernel = 1;
 
     } else {
        err = EFTYPE;
@@ -148,48 +185,44 @@ elf_loadmodule(char *filename, vm_offset_t dest, struct loaded_module **result)
     /* 
      * Ok, we think we should handle this.
      */
-    mp = mod_allocmodule();
-    if (mp == NULL) {
-           printf("elf_loadmodule: cannot allocate module info\n");
+    fp = file_alloc();
+    if (fp == NULL) {
+           printf("elf" __XSTRING(__ELF_WORD_SIZE) "_loadfile: cannot allocate module info\n");
            err = EPERM;
            goto out;
     }
-    if (kernel)
+    if (ef.kernel)
        setenv("kernelname", filename, 1);
-    s = strrchr(filename, '/');
-    if (s)
-       mp->m_name = strdup(s + 1);
-    else
-       mp->m_name = strdup(filename);
-    mp->m_type = strdup(kernel ? elf_kerneltype : elf_moduletype);
+    fp->f_name = strdup(filename);
+    fp->f_type = strdup(ef.kernel ? __elfN(kerneltype) : __elfN(moduletype));
 
 #ifdef ELF_VERBOSE
-    if (kernel)
-       printf("%s entry at %p\n", filename, (void *) dest);
+    if (ef.kernel)
+       printf("%s entry at 0x%jx\n", filename, (uintmax_t)dest);
 #else
     printf("%s ", filename);
 #endif
 
-    mp->m_size = elf_loadimage(mp, fd, dest, ehdr, kernel, firstpage, firstlen);
-    if (mp->m_size == 0 || mp->m_addr == 0)
+    fp->f_size = __elfN(loadimage)(fp, &ef, dest);
+    if (fp->f_size == 0 || fp->f_addr == 0)
        goto ioerr;
 
     /* save exec header as metadata */
-    mod_addmetadata(mp, MODINFOMD_ELFHDR, sizeof(*ehdr), ehdr);
+    file_addmetadata(fp, MODINFOMD_ELFHDR, sizeof(*ehdr), ehdr);
 
     /* Load OK, return module pointer */
-    *result = (struct loaded_module *)mp;
+    *result = (struct preloaded_file *)fp;
     err = 0;
     goto out;
     
  ioerr:
     err = EIO;
  oerr:
-    mod_discard(mp);
+    file_discard(fp);
  out:
-    if (firstpage)
-       free(firstpage);
-    close(fd);
+    if (ef.firstpage)
+       free(ef.firstpage);
+    close(ef.fd);
     return(err);
 }
 
@@ -198,11 +231,12 @@ elf_loadmodule(char *filename, vm_offset_t dest, struct loaded_module **result)
  * the Elf header, load the image at (off)
  */
 static int
-elf_loadimage(struct loaded_module *mp, int fd, vm_offset_t off,
-             Elf_Ehdr *ehdr, int kernel, caddr_t firstpage, int firstlen)
+__elfN(loadimage)(struct preloaded_file *fp, elf_file_t ef, u_int64_t off)
 {
-    int        i, j;
-    Elf_Phdr   *phdr;
+    int        i;
+    u_int      j;
+    Elf_Ehdr   *ehdr;
+    Elf_Phdr   *phdr, *php;
     Elf_Shdr   *shdr;
     int                ret;
     vm_offset_t firstaddr;
@@ -211,34 +245,38 @@ elf_loadimage(struct loaded_module *mp, int fd, vm_offset_t off,
     size_t     resid, chunk;
     ssize_t    result;
     vm_offset_t        dest;
-    vm_offset_t        ssym, esym;
+    Elf_Addr   ssym, esym;
     Elf_Dyn    *dp;
+    Elf_Addr   adp;
     int                ndp;
-    char       *s;
-    char       *strtab;</