rheffel@cs2.wsu.edu (05/30/89)
I have seen a lot of requests on the net asking how to apply the
patches from bugs.nosc.mil, vm1.nodak.edu, or BITNET's
listserv@ndsuvm1. So, I decided to write this little note to help
others. Believe me, the method I used is included in this file. I just
would like you to read some things that I think are important and
relevant first.
First, I want to express some very strong opinions. AST's MINIX
is a great for learning about operating systems. I started first on
VM/CMS, then moved to PC-DOS, subsequently UNIX. I have come to
appreciate UNIX thoroughly. The main drawback to UNIX is its
interface. For hackers like myself, the spartan interface is dandy.
But for everyone else, it is a major pain in the rear.
I would like to see UNIX become as dominant in the upper-end PCs
as DOS is on 8088/86 and 286 machines. However, I believe this will
not be the case. Why? The tools, such as Turbo[ Assembler, C, Pascal]
as well as end-user programs have such a nice rapport with the end-user
that will cause them to promote an operating system such as OS/2 PM or
WINDOWS-based DOS.
What do I think should be done about this situation?
First, I have been working on modifying MINIX so that a floppy
disk (5 1/4) or micro-disk (3 1/2) can be formatted from MINIX so it
can be used solely by MINIX (faster, since no boot, FAT, or DIR sectors
is necessary) or can be used by PC-DOS. The requirement that MINIX use
another operating system to format its diskettes defeats the purpose of
an OS.
I also believe that all programs should have a flag "?" or "-?"
that will display the syntax of the command. Of course, programs
expecting stdin will need to be re-written to accomodate this flag.
The ramifications extend further. What happens if the command is
sitting in the middle of a pipeline with the "?" flag activated?
Nevertheless, I am using in a personal capacity Allen Holub's
getargs() routine found in Dr. Dobb's Journal May 1985. I will write
such a routine from scratch at some point with some improvements and
place it in the public domain. But, I suggest that people look at the
article and the following source code:
/* getargs.h */
/* Typedefs and defines needed for getargs */
#define INTEGER 0
#define BOOLEAN 1
#define CHARACTER 2
#define STRING 3
#define PROC 4
typedef struct {
unsigned arg : 7;
unsigned type : 4;
int *variable;
char *errmsg;
} ARG;
/* GETARGS.C Command line argument processor for C programs */
/* (C) Copyright 1985, Allen I. Holub. All rights reserved. */
/* This program may be copied for personal, non-profit use only */
/* Dr. Dobb's Journal May 1985 */
#include <stdio.h>
#include "getargs.h"
typedef int (*PFI)();
static char *setarg( argp, linep)
ARG *argp;
char *linep;
{
/* Set an argument. */
/* argp points at the argument table entry corresponding to *linep. */
/* Return linep, updated to point past the argument being set */
++linep;
switch(argp->type) {
case INTEGER : *argp->variable = stoi(&linep);
break;
case BOOLEAN : *argp->variable = 1;
break;
case CHARACTER : *argp->variable = *linep++;
break;
case STRING : *(char **)argp->variable = linep;
linep = "";
break;
case PROC : (* (PFI)(argp->variable) )(linep);
linep = "";
break;
default : fprintf(stderr, "INTERNAL ERROR: BAD ARGUMENT TYPE\n");
break;
}
return(linep);
}
static ARG *findarg(c, tabp, tabsize)
int c, tabsize;
ARG *tabp;
{
/* Return pointer to argument table entry corresponding to c */
/* or 0 if c isn't in table. */
for (; --tabsize >= 0; tabp++)
if (tabp->arg == c)
return(tabp);
return(0);
}
static pr_usage(tabp, tabsize)
ARG *tabp;
int tabsize;
{
/* Print the argtab in the form: */
/* -<arg> <errmsg> (value is <*variable>) */
for (; --tabsize >= 0; tabp++)
switch(tabp->type) {
case INTEGER : fprintf(stderr, "-%c<num> %-40s (value is ",
tabp->arg, tabp->errmsg);
fprintf(stderr, "%-5d)\n", *(tabp->variable) );
break;
case BOOLEAN : fprintf(stderr, "-%c %-40s (value is ",
tabp->arg, tabp->errmsg);
fprintf(stderr, "%-5s)\n", *(tabp->variable) ? "TRUE" : "FALSE" );
break;
case CHARACTER : fprintf(stderr, "-%c<c> %-40s (value is ",
tabp->arg, tabp->errmsg);
fprintf(stderr, "%-5c)\n", *(tabp->variable) );
break;
case STRING : fprintf(stderr, "-%c<str> %-40s (value is ",
tabp->arg, tabp->errmsg);
fprintf(stderr, "<%s>)\n", *(char **)tabp->variable);
break;
case PROC : fprintf(stderr, "-%c<str> %-40s\n",
tabp->arg, tabp->errmsg);
break;
}
}
#define ERRMSG "Illegal argument <%c>. Legal arguments are:\n\n"
int getargs(argc, argv, tabp, tabsize)
int argc, tabsize;
char **argv;
ARG *tabp;
{
/* Process command line arguments. Stripping all command line switches */
/* out of argv. Return a new argc. If an error is found, exit(1) is */
/* called (getargs won't return) and a usage message is printed showing */
/* all arguments in the table. */
register int nargc;
register char **nargv, *p;
register ARG *argp;
nargc = 1;
for (nargv = ++argv; --argc > 0; argv++)
if (**argv != '-') {
*nargv++ = **argv;
nargc++;
} else {
p = (*argv) + 1;
while (*p)
if (argp = findarg(*p, tabp, tabsize) )
p = setarg(argp, p);
else {
fprintf(stderr, ERRMSG, *p);
pr_usage(tabp, tabsize);
exit(1);
}
}
return(nargc);
}
/* STOI.C More powerful version of atoi */
/* Copyright (C) 1985 by Allen Holub. All rights reserved. */
/* This program may be copied for personal, non-profit use only */
/* Dr. Dobb's Journal May 1985 */
#define islower(c) ('a' <= (c) && (c) <= 'z')
#define toupper(c) (islower(c) ? (c) - ('a' - 'A') : (c) )
int stoi(instr)
register char **instr;
{
/* Convert string to integer. If string starts with 0x it is */
/* interpreted as a hex number, else if it starts with a 0 it */
/* is octal, else it is decimal. Conversion stops on encountering */
/* the first character which is not a digit in the indicated radix */
/* *instr is updated to point past the end of the number */
register int num=0;
register char *str;
int sign=1;
str = *instr;
while (*str == ' ' || *str == '\t' || *str == '\n')
str++;
if (*str == '-') {
sign = -1;
str++;
}
if (*str == '0') {
++str;
if (*str == 'x' || *str == 'X') {
str++;
while( ('0' <= *str && *str <= '9') ||
('a' <= *str && *str <= 'f') ||
('A' <= *str && *str <= 'F') ) {
num *= 16;
num += ('0' <= *str && *str <= '9') ? *str - '0' : toupper(*str) - 'A' + 10;
str++;
}
} else
while ('0' <= *str && *str <= '7') {
num *= 8;
num += *str++ - '0';
}
} else
while ('0' <= *str && *str <= '9') {
num *= 10;
num += *str++ - '0';
}
*instr = str;
return( num * sign);
}
Furthermore, a graphical interface is now the de facto standard
(Menu Headers and pull-down menus). I know this means all that
overhead in terms of code and extra-time to do the programming. But,
end-users expect to be able to use software without having to RTFM. And
in the end, it will be free-market forces that decide whether UNIX will
grow in popularity or will be just a second-class OS used primarily by
DOD and universities. Clearly, the window system called X (I wish they
would simply call it X Windows) is out of the question under MINIX.
However, I did obtain mgr.tar.Z from bugs.nosc.mil and will be taking a
look at that later. This also may be too large for MINIX (I don't yet
know). If mgr is too complex or too code intensive, a simple menu
header and pop-down window scheme can be found in Al Steven's C
programming column of the Sept and Oct 88 issues of Dr. Dobb's Journal.
This interface is simple yet elegant. I also typed in this code, but I
made a mistake somewhere and can not seem to find it.
As of right now, I would like to see these authors (Allen Holub
and Al Stevens) donate these specific routines to the public domain. I
think that these routines together could be used to develop a
consistent interface that would be extremely easy to use both in a DOS
and UNIX (particularly MINIX) environment.
If you haven't caught the drift of this diatribe, let me state it
explicitly. I believe that no-one has a monopoly (copyright or patent)
on a user-interface. I am clearly dismayed by the look-and-feel
litigation trend in industry. My position is quite simply that a
screen (crt, monitor) is simply another data structure that is
fundamental to computer science. A consistent interface is necessary
across all hardware configurations. Let us briefly examine an analogy.
Road signs indicating hazards and driving conditions are pretty much
standardized internationally. This allows a traveller to proceed from
country to country without having to be licensed in every country. The
benefits are enormous. Looking at the other side of the coin, the best
example would be Great Britain and her former colonies. They drive on
the wrong side of the road, require cars with steering wheels in the
passenger's seat, etc. It takes time to learn to navigate in these
backward countries.
Even more importantly, I am outraged by the fact that file-formats
are proprietary as viewed by the courts in the SEAware vs. PKware case.
Files are just streams of meaningless information to be deciphered by a
program. This judgment is a serious detriment to the whole industry
unfortunately.
The only protection that should be accorded developers is for
their source code. Reverse-engineering is very common. Most cars
require a combustion engine (not solar or electric). But some car
manufacturers build a sports car like a Porche, others build a reliable
family car like a Chevy, and yet others build a funeral-box car like a
Yugo (I stay). Some applications are faster and more comfortable to
use but accomplish the same tasks as does another vendor's application.
The classic example is PKware's archiver versus SEAware's.
My last comment concerns the legal community. We are living in a
new age, the INFORMATION AGE. Most judges are not technologically
competent (having skills in EE and Computer Science). They simply do
not have the background to understand these issues. Yet, their
decisions will have very profound ramifications upon society. This
deficiency is highly disconcerting. What can be done about this
situation? I really don't know. Pray, I suppose. Apart from praying, I
hope that some of the giants (IBM, INTEL, Chips & Technologies,
Microsoft, ATT) will pressure law schools to accept students with
backgrounds in these areas and provide scholarships to individuals
willing to continue their education in this field. I hope that these
companies will also push legislation to increase judges salaries so
that they are equitable with those found in industry. Why should
anyone work for less than they could get elsewhere? Remember the
standing joke is that the biggest division at IBM is the legal division
and not the manufacturing division.
-------------------------------------------------------------------------------
Returning to the original subject matter dealing with MINIX PATCHES:
I confess that I was having difficulty upgrading from MINIX 1.2 to
1.3 using the upgrades found on the net. I found this particularly
annoying because I have used patch to upgrade the floppy device driver
to handle 3 and 1/2 inch drives and a few other utilities. But I was
at a complete loss when applying the diff patches to move from MINIX
ver 1.2 to ver 1.3. The following text documents how (and why I chose
a particular manner to accomplish this feat) I did it.
First, grab the following files from bugs.nosc.mil via ftp:
"patch", "d1.1-1.2.tar.Z", and "d1.2-1.3.tar.Z".
The following is a log of an ftp session that accomplishes the task at
hand.
ftp bugs.nosc.mil
Name (bugs.nosc.mil:rheffel): anonymous
Password (bugs.nosc.mil: anonymous): guest
cd pub/Minix/bin
type binary
get patch
cd ../d1.1-1.1
get d1.1-1.2.tar.Z
cd ../d1.2-1.3
get d1.2-1.3.tar.Z
close
quit
At this point, you will have copied in binary format 3 files from
the remote host. The files are: patch, the upgrade from ver 1.1 to
1.2, and the upgrade from ver 1.2 to 1.3. I strongly recommend that you
rename d1.1-1.2.tar.Z to d1112.trz and d1.2-1.3.tar.Z to d1213.trz.
Why should you rename the files. Remember that DOS allows only 3
characters for a file's extension. We will use *.trz under DOS as the
equivalent of UNIX's *.tar.Z.
Somehow, you must transfer the files down to your PC from your
local host. The files must be transfered in binary format just as
before. I am assuming that you are transferring these files to a PC-
DOS partition. Personally, I have not yet tried running kermit under
MINIX yet. The file mxkermit.tar.Z is available from bugs.nosc.mil. I
have read that the modem handling under MINIX is not quite stable yet
so that is the reason I assume that these files are being transferred
to a PC-DOS subdirectory.
If you have ftp on your PC, you can follow the same sequence as
above except for changing directory. If you don't have ftp, you can
use KERMIT. By typing "kermit -ix", you will invoke the kermit server
on the local host. It will transfer the file images (binary format).
Next type "get patch", "get d1112.trz", and "get d1213.trz".
At this point, you should now have these 3 files on your PC. But
first lets cover the aspect of getting the equivalent files from a
different remote host.
Note: You can get the equivalent files from vm1.nodak.edu on internet
or listserv@ndsuvm1 on BITNET. The major difference is that the files
are in ASCII format.
If you are dialing in to vm1.nodak.edu, I presume that you are on
internet and can get the files. The following is a transcript of such
a session.
ftp bugs.nosc.mil
Name (vm1.nodak.edu:rheffel): anonymous
Password (vm1.nodak.edu: anonymous): guest
cd MINIX
type ascii
get commands.patch
mget minix.*
close
quit
If you are on an IBM mainframe and are using BITNET, then you may
use the following command to retrieve one file at a time. Type "TELL
LISTSERV@NDSUVM1 GET MINIX 1112A". Admittedly, this process of asking
for one file at a time is painfully slow. If anyone knows of a better
method, please let me know. (I assume that REXX could be programmed to
expand a wildcard or a script file could be built).
Regardless of whether you accessed vm1.nodak.edu or
listserv@ndsuvm1, the naming convention on that remote host follows
IBM's standard convention. The files are MINIX.1112[A-D],
MINIX.1213[A-Z] and MINIX.1213[AA-AE]. The files to upgrade from 1.3
to 1.4 are found as MINIX.1314A-[F1-F2], and MINIX.1314A-[0-9].
After I had copied the files from the remote host to my local
host, I renamed the files as follows since DOS allows only 3 characters
for the extension. MINIX.1112[A-] was renamed to M1112.[A-],
MINIX.1213[A-Z] was changed to M1213.[A-Z], MINIX.1213[AA-AE] was
transformed to M1213.[AA-AE]. Do you get the picture. For those of you
unfamiliar with this notation, let us take a specific file and show you
what was done:
MINIX.1213AA was renamed to M1213.AA
This renaming scheme will work on both UNIX and IBM systems.
Then I downloaded the files to PC-DOS. This method prevented the
terminal emulation package from truncating the name to something
obscure. Another advantage from this new naming scheme is that it will
permit us to write a shell script to UNSHAR the files M1213.[A-W]
unattended.
-------------------------------------------------------------------------------
You will need to be able to uncompress files that end in *.Z. To
do this, you first must compile the compress command.
cc -i -o compress compress.c
The -i flag must be specified in order for this command to work.
Remember that you must always transfer compressed files (ending in *.Z)
in binary format.
The next step is to transfer the files from your DOS partition to
your MINIX partition. The type of file that you downloaded (binary or
ASCII format) will determine the switch settings on the dosread command
line.
If your file is a binary file (file is from bugs.nosc.mil), you
will want to type the following:
dosread c ver13/d1213.trz > d1213.tar.Z
dosread c ver13/patch > patch
If your file is an ASCII file, you will want to use the "-a" flag
as follows. Notice that I read the file patch from the DOS partition
as patchvm onto the MINIX partition. There is a good reason for doing
so, but will not be covered now. Please note that I demonstrate how to
read in the ASCII files m1213.* in the following command. Do not
however type this for each and every file. Use the Ralph Clark's
modified script included below to automatically read an entire DOS
directory (eg, dosrdall c vm1 [where the files are on c: drive ind
subdirectory \vm1]).
dosread -a c ver13/m1213.aa > m1213.aa
dosread -a c ver13/patch > patchvm
If you got your version of patch from vm1.nodak.edu or
listserv@ndsuvm1, you will need to do the following after you have read
in the file onto MINIX partition.
uudecode patchvm
compress -d patch.Z
As you noticed, the uncompressing of patch.Z created a file called
patch. Now you understand why it was desirable to read the file patch
from DOS to MINIX as patchvm and not as patch.
The above 2 steps are not necessary if you got your version of
patch from bugs.nosc.mil.
Regardless of where you obtained patch, remember to change its rwx
flags so that it is executable.
chmod 755 patch
I include Ralph Clark's script (which I have modified sligthly) to
allow you to read all the files from a PC-DOS subdirectory on a
particular drive.
Path: cod!nosc!ucsd!ames!amdahl!pyramid!prls!philabs!ttidca!clark
From: clark@ttidca.TTI.COM (Ralph Clark)
Newsgroups: comp.os.minix
Subject: my read-all-from-dos script (version 23)
Keywords: dosread
Message-ID: <2951@ttidca.TTI.COM>
Date: 24 Jul 88 06:45:23 GMT
Organization: Citicorp/TTI, Santa Monica
Lines: 20
Here's the one I've been using since the first time my fingers got tired
of backspacing to put the -a in the right place :
----------------cut me---------------
#/********************************************************************/
#/************ Modified version of Ralph Clark's DOSRDALL ************/
#/******************* modified by Rich Heffel ************************/
#/******************** handles only ASCII files **********************/
#dosrdall - read all files from DOS physical drive to current directory
echo "dosrdall [drive [directory]]"
getlf "to proceed, press RETURN"
for FILE in `dir $1 $2 | grep -v [a-z] | tr[A-Z] [a-z]`
do
echo $FILE
dosread -a $1 $2/$FILE > $FILE
done
----------------cut me---------------
The grep -v gets rid of the title and footer from dosdir, which have
lower case letters. I wish there were an option in dosread-write-dir to
suppress the noise and just give file names. This script needs addition
of a parameter to specify a dos subdirectory.
Remember to change the rwx flags to execute by typing:
chmod 755 dosrdall
#Ralph Clark (clark@ttidca.tti.com) {csun|philabs|psivax}!ttidca!clark
---
-------------------------------------------------------------------------------
The next major step is to apply the patches. The files from
vm1.nodak.edu and listserv@ndsuvm1 are in ASCII format already. The
files from bugs.nosc.mil are not and must be uncompressed and extracted
from the tape archive. How is this accomplished?
As an example, we will take the file d1.2-1.3.tar.Z which we had
renamed to d1213.trz previously. First, rename d1213.trz to
d1213.tar.Z.
mv d1213.trz d1213.tar.Z
compress -d d1213.tar.Z
This command unpacks (uncompresses) the file. Next, we must extract
the files from this newly created tar file.
tar vx d1213.tar
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
The file "diff.patch" that was extracted from bugs.nosc.mil's
d1213.tar (our renamed file) corresponds to vm1.nodak.edu's and
listserv@ndsuvm1's minix.1213[aa-ae] and minix.[x-z].
The question that remains is "How do we apply these patches?"
First, we must note that the patch command unfortunately uses the
subdirectory /tmp for scratch work and does not allow a flag to specify
another directory for scratch use. (The lack of this needed feature is
indicative of some of the drawback's of UNIX besides being a classic
example of poor programming technique. I confess that I too am guilty
of such poor practice.) Unfortunately, running patch requires more
than one floppy worth (mkfs /dev/fd0 360) of information. If you are
running a RAM DISK that means you probably do not have enough space,
and patch will choke.
The trick to overcome this is the following:
Normally, we mount our hard disk partition with the /usr file
system as follows. I will assume that /usr is on /dev/hd4, though this
need not be the case. In the file /etc/rc, we have a one-line command
that says "/etc/mount /dev/hd4 /usr".
Change this one-line command from "/etc/mount /dev/hd4 /usr" to
"/etc/mount /dev/hd4 /tmp". This change must be done in the file
/etc/rc. After you have applied the patches, you should change it back
to its original state.
Why must it be done in /etc/rc. Because if you try doing it after
you have logged in as "root", you will be notified that /tmp is busy.
Now logoff and reboot.
When you log in as "root", the file system will be found on /tmp.
If you are applying the file "diff.patch" from the tar.Z file from
bugs.nosc.mil, all you will need to do is to cd (change dir) to
subdirectory where the copy of the original 1.2 distribution is found
(usually /usr/minix/commands) and type the following.
patch < diff.patch
I presume that for those of you who are using vm1 or listserv's
patch and files, you would move the files m1213.[x-z] and m1213.[aa-ae]
to a newly created directory and cd to that directory. You could then
type the following:
for i in *
do echo $i; patch < $i
done
-------------------------------------------------------------------------------
Remember to change the file /etc/rc back to its original state and
to reboot.
Naturally, the next step should be to unshar all the files. This
refers to those files found on vm1 and listserv. The simplest way to
unshar the files is to write a simple script on the MINIX command line.
for i in m1213.*
do echo $i; sh < $i
done
If you have a PC, leave it unattended overnight. If you have an
AT or 386 machine, go out to dinner.
If you have any suggestions, please send them to me at the
following address:
rheffel@cs2.wsu.edu
I have include a uuencoded version of patch obtained from bugs.nosc.mil.
This is level 11 patch.
To get this version running, get it onto your MINIX partition using
dosread -a c patch > patch.ascii
Then uudecode the file.
uudecode patch.ascii
Remember to make it executable.
chmod 755 patch
Path: cod!nosc!helios.ee.lbl.gov!lll-tis!ames!mailrus!cornell!rochester!udel!mmdf
From: frank@morgan.com (Frank Wortner)
Newsgroups: comp.os.minix
Subject: Yet Another Patch Binary
Message-ID: <3961@louie.udel.EDU>
Date: 3 Sep 88 07:47:42 GMT
Sender: mmdf@udel.EDU
Lines: 704
I've posted several Minix patch binaries for the benefit of those who
can't compile the source for one reason or another. Unfortunately,
those binaries had a minor bug in them which seems to be related to
the C compiler and/or library used to create them. The bug caused
patch to print spurious messages about "skipping garbage" at the end
of a patch file. In almost all cases, there was no "garbage" for
patch to skip.
Since my last binary posting, I've recompiled patch with the 1.3 Minix
library, and the spurious message bug seems to have disappeared. If
anyone is using one of my previous binaries, try this one instead. It
should work just a bit better.
If you have the source, don't worry: I've made NO CHANGES. I just
recompiled and relinked with a newer (and more bug-free) library. You
should be able to do the same once you upgrade to Minix 1.3.
Frank
------------------------cut here -- valuable program below --------------------
begin 644 patch
M 0,@!" #08@ LA0 .X2 ! ")XXL/@\,"B<A T> !
MV*, %!34>@' (/$!E#H5U55B>6#[!I65S'V,?_'1NH +@N&U#_-KX2Z-5,
M6UO'1N@ (-^Z )]$(M>Z-'CQX? %@ _T;HZ^JX5 !0Z#M:6[AF %#H,UI;
MN'@ 4.@K6ENXB@!0Z"-:6XM.!(D.Z!J+3@:)#N8:Z%,%,<!0Z ]#6_\VPA;H
M,Q-;Z+84F G =0/IB@2#/DX '4+_S; %N@_05NC3@" /K( '4(N%0 4.AO
M#UN#/K@ W4&Z!4SZ58$N'@ 4.B'#UN /K( '4(_S; %NAD-5LQ]C'_Q@9&
M #H'QV8"<!U ^GJ D;'1O0 ,=&]@ Z'XRB4;PB5;R_S:H /\VI@#_=O+_
M=O#HC&$)P'T.BPZF (L6J ")3O")5O* /K( '0#Z:L!_W;V_W;TZ-4&6UN)
M1OR)5OZ#_@%T ^E0 8M&_@M&_'0#Z44!@#ZJ !T ^D[ >A%+I@)P'4=BT;V
M"T;T= /I* $QP%!04+@V 5#HS$"#Q CI%@&@K@"8,<D)P'4!08@.K@#_=O;_
M=O3H<P9;6XE&_(E6_HM&_@M&_'4IZ/@MF G =0\QP%!04+AT 5#HMT"#Q B@
MK@"8,<D)P'4!08@.K@#IQ0" /K '0]Z,@MF G =0\QP%!04+B0 5#HAT"#
MQ B@K@"8,<D)P'4!08@.K@ QP%!04+BL 5#H/$"#Q C&!K( >F! #' 4( ^
MK@ = :X) )0ZP2X+ )0@#ZN !T!K@> E#K!+@@ E"XW@%0Z%M @\0(@#[$
M%FYU2S' 4%!0N#0"4.A%0(/$"( ^Q!9Y= 7&!K( <=&_ QT;^ "@K@"8
M,<D)P'4!08@.K@#H(2V8"<!U#S' 4%!0N$@"4.C@/X/$"( ^L@ =2:+1OX+
M1OQU'H-&] O8 _W;V_W;T_W;R_W;PZ.%?"<!_ ^EJ_H ^L@ = [_-D
MZ#Y&6\<&0 /\VH@#_-J Z&XP65L!P1'3B4[XB5[Z@#ZR !T)>@N!T>
M/JP '4#Z=W],<!0_W;Z_W;X5KAD E#H,3^#Q KIQOV+1OX+1OQU)>@!!T>
M/JP '4#Z;#],<!0_W;Z_W;X5KA^ E#H!#^#Q KIF?W_=O[_=OSHXPA;6X ^
MK =0/IA/TQP%#_=OK_=OA6N)@"4.C8/H/$"HM&]@M&]'04,<!04/]V]O]V
M]+BR E#HO#Z#Q J+#J( "PZ@ '0M,<!0@SZ@ %U#8,^H@ =0:XV )0ZP2X
MV@)0_S:B /\VH "XP@)0Z(4^@\0*,<!04%"XW )0Z'8^@\0(Z0O]@#Y& !T
M*8 ^1 ="*+#N0:B0[H&HL.XAJ)#N8:,<!04%"XX )0Z$8^@\0(Z1$!@#ZR
M !U ^C:#.C8/X ^L@ =3+_-DX N%0 4.A*.EM;"<!]%,8&G !_S8^ +A4
M %#HIDY;6^L-_S8^ /\V3@#HETY;6_\V0@#HO$1;QP9" "?]U ^FN %^
MZH ^0!8 =67_-DX N$ 64.CP5UM;N"\ 4+A %E#H]UI;6XE&YH-^Y@!U!<=&
MYD 6_W;FZ/=76ST- 'X=BU[F@'\,+G44BU[FBT;F!0P ,<F*3PU1B<-8B >+
M7N;&1PT N!0#4+A %E#H9E=;6X ^L@ =!*X0!905E>X%@-0Z&(]@\0(ZQ"X
M0!905E>X2 -0Z% ]@\0(N$ 64+AX %#H:SE;6PG ?07&!IX ;@! %#H>#Y;
MZ T Z6O[_W;JZ @.6^EL756)Y>@Y#NAS,,<&V@P ,<&W P ,<&W@P ,<&
MX P ,<&2 (,^P!8 =!6 /D8 '4._S; %NA(5%O'!L 6 "#/DX '0.
M_S9. .@S5%O'!DX #'!J #'!J( #'!K@ "#/L0 '0._S;$ .@,
M5%O'!L0 #&!JX ,8&L@ Z!D @SY( )\#S' 4%!0N'H#4.BM/(/$".G)
M7%6)Y5!6Q@9 %@"+#N@:B0[D&HL.YAJ)#N(:@S[H&@!U ^FD7/\.Z!J#!N8:
M H,^Z!H =0/I!0*+'N8:BS>XJ@-05NA\3%M;"<!U ^EZ7( \+74&@'P! '4N
M@SY( )U#S' 4%!0N*P#4.@[/(/$"%;HH3M;BPY( /\&2 ")R]'CB8? %NFI
M 4:*!)A0Z9H!BQ[F&O]W NA[.UNC4 #_#N@:@P;F&@+IAP&+'N8:_W<"Z&$[
M6Z-2 /\.Z!J#!N8: NEM <<&N ! .ED 4: / !U#_\.Z!J#!N8: HL>YAJ+
M-U;H%4Q;"<!\ ^E# 3' 4%!6N,8#4.BN.X/$".DQ <8&N@ !1H \ '4/_P[H
M&H,&YAH"BQ[F&HLWB@28B<.*AT\3F*@#=0\QP%!04+C8 U#H=#N#Q A6N/P#
M4+C %5#HZ$:#Q 96N @$4+A %5#HV4:#Q 96N!0$4+C %%#HRD:#Q ;IR@#'
M!K@ P#IP0#&!JH >FY $: /#UU 496Z 576YFCI@")%J@ Z:( Q@:V 'I
MF@#'!K@ @#ID0#&!K >F) (L>YAK_=P+H8SI;HTX _P[H&H,&YAH"ZW!&
M@#P]=0%&5NB\5ENCM #K7XL>YAK_=P*X0!90Z+M46UO_#N@:@P;F&@+K1,8&
MK@ !ZSW&!JP .LVQ@:R 'K+^AJ/NLJC40!4.AZ5ENCI #K'8L>YAHQP%!0
M_S>X)@10Z(,Z@\0(ZP>[Q@!8Z<I7_P[H&H,&YAH"Z?']Z8E:58GE@^P6_S:B
M /\VH #H&RM96P'!$=.)3OR)7O[H&2N)1O2)5O:+#MH,BQ;<#"M._!M6_BM.
M]!M6]H/! 8/2 (E.\(E6\HM&_(M._BL&W@P;#N ,+0$ @]D 45#H#BM96P'!
M$=.)3NR)7NZ+1O8+1O1U"?]V_O]V_.F; ?]V[O]V[/]V_O]V_.@'6@G ?!*+
M1OR+3OXM 0"#V0")1NR)3N[_=O[_=OS_-MP,_S;:#.C@60G ?R3_=@;_=@0Q
MP%!0_W;^_W;\Z)X(@\0,F G = G_=O[_=OSI/0''1O@! ,=&^@ _W;Z_W;X
M_W;R_W;PZ)]9,<D)P'\!08A.Z_]V^O]V^/]V[O]V[.B&63')"<!_ 4&(3NJ
M?NL =%__=@;_=@3_=OK_=OC_=O[_=OSH-@B#Q R8"<!T0O<&I ! '0;,<!0
M_W;Z_W;X_S:B /\VH "X0 10Z.(X@\0,BT[XBU;ZB0Z@ (D6H@"+1OB+3OH#
M1OP33OY14.F< (!^Z@!U ^EV (M&^(M.^O?9]]B#V0#_=@;_=@114/]V_O]V
M_.C%!X/$#)@)P'10]P:D $ ="2+1OB+3OKWV??8@]D ,=)245#_-J( _S:@
M +AB!%#H:#B#Q R+1OB+3OKWV??8@]D HZ B0ZB (M&_(M._BM&^!M.^E%0
MZQV ?NH =0R ?NL =08QP%!0ZPN#1O@!@U;Z .G-_EA:Z6Y858GE@^P<5E?H
M.2F)1OB)5OK_-J( _S:@ .CT*%E; <$1TXE.](E>]O\VH@#_-J Z/<H65L!
MP1'3B4[PB5[RZ-LH T;T$U;V+0$ @]H B4;LB5;NZ. H T;P$U;R+0$ @]H
MB4;HB5;J@SZX 1U!KB$!%#K!+B*!%!>@SZX 1U!KB,!%#K!+B2!%!?N)H$
M4/\V0@#HX3U;6\=&_ QT;^ #_=O[_=OS_=OK_=OCHPU<)P'X#Z5 !_W;^
M_W;\Z+,H6UN84.DN ?]V[O]V[/]V]O]V].B=5PG ?1)6N*P$4/\V0@#HD#V#
MQ ;I$ &+1O2+3O8Y1NQU'3E.[G485O]V]O]V]+BV!%#_-D( Z&@]@\0*Z>@
M5O]V[O]V[/]V]O]V]+C"!%#_-D( Z$H]@\0.Z<H _W;J_W;H_W;R_W;PZ#)7
M"<!]$E>XT@10_S9" .@E/8/$!NFE (M&\(M.\CE&Z'4=.4[J=1A7_W;R_W;P
MN-P$4/\V0@#H_3R#Q KI?0!7_W;J_W;H_W;R_W;PN.@$4/\V0@#HWSR#Q [K
M8/]V_O]V_.C?)UM;4+CX!%#_-D( Z,,\@\0&ZT3_=O[_=OSHPR=;6U#_=O[_
M=OSHIB=;6YA0N/P$4/\V0@#HFCR#Q CK&S' 4%!0N (%4.@O-H/$".BD2NL'
MNQ8!6.F@4X-&_ OX Z9K^Z5]658GE@^P45L=&_ $ QT;^ #H_":)1OB)
M5OJX 0 QR0-&^!-.^HE&](E.]C'VB@ZZ (A.\>@ )XE&[(E6[HM&!(M.!BT!
M (/9 (E&!(E.!O]V]O]V].@1)UM;F#T] '01_W;V_W;TZ G6UN8/0H =0J#
M1O0!@U;V .O4_W;^_W;\_W;Z_W;XZ-]5"<!^ ^F, O]V_O]V_.C/)EM;F#TM
M '0#Z70 BT;\BT[^ T8$$TX&+0$ @]D 45#HC -;6X!^\0!T0 GV=1+_-D
MN$ 54.CH.UM;O@$ ZQ6#_@)U$/\V0 "XO !0Z-$[6UN^ P#_-D _W;^_W;\
MZ'XF6UM0Z+D[6UN#!MX, 8,6X P @T;\ 8-6_@#I8O__=O;_=O3_=N[_=NSH
M054)P'X#Z>X!_W;V_W;TZ#$F6UN8/2L =6J+1OR+3OX#1@033@8M 0"#V0!1
M4.CQ EM;@'[Q '0K@_X!=1+_-D N+P 4.A,.UM;O@, ZQ0)]G40_S9 +C
M%5#H-CM;6[X" /\V0 #_=O;_=O3HXR5;6U#H'CM;6X-&] O8 Z='^_W;V
M_W;TZ+8E6UN84/]V_O]V_.BI)5M;F%DYP71>,<!0_W;V_W;TZ+XE65L!P1'3
M4U'_=O[_=OSHK2596P'!$=-34;@J!5#H'C2#Q PQP%#_=O;_=O3H9B5;6YA0
M_W;^_W;\Z%DE6UN84+AR!5#H]S.#Q BX 0!0Z-($6_]V]O]V].@Z)5M;F#TA
M '0#Z= BT;\BT[^ T8$$TX&+0$ @]D 45#H]P%;6X!^\0!T$/\V0 "X0!50
MZ%<Z6UN^ 0#_=O[_=OSH]R1;6Y@](0!U+X!^\0!T%?\V0 #_=O[_=OSH[21;
M6U#H*#I;6X,&W@P!@Q;@# "#1OP!@U;^ .O @'[Q '00_S9 +B\ %#H 3I;
M6[X# /]V]O]V].BA)%M;F#TA '4?_S9 /]V]O]V].B=)%M;4.C8.5M;@T;T
M 8-6]@#KT(!^\0!U ^F#_?\V0 "XP!10Z+@Y6ULQ]NEQ_8-&_ OX @T;T
M 8-6]@#I7OW_=O;_=O3_=N[_=NSH/5,)P'X#Z:$ _W;V_W;TZ"TD6UN8/2L
M= /IC0"+1OR+3OX#1@033@8M 0"#V0!14.CJ %M;@'[Q '0K"?9U$O\V0 "X
MP!50Z$8Y6UN^ @#K%8/^ 740_S9 +B\ %#H+SE;6[X# /]V]O]V]/]V[O]V
M[.C)4@G ?S#_=O;_=O3HO"-;6Y@]*P!U'_\V0 #_=O;_=O3HN"-;6U#H\SA;
M6X-&] O8 Z[V ?O$ =!$)]G0-_S9 +C %%#HTCA;6^ER4E6)Y5:+=@2X
MD@505NA$.5M;HT @SY !U#S' 4%!6N)0%4.@J,H/$".E%4E6)Y5:+=@2X
MK@505N@7.5M;HT( @SY" !U#S' 4%!6N+ %4.C],8/$".D84E6)Y5!0BP[>
M#(L6X R)3OR)5O[_=O[_=OS_=@;_=@3H_U$)P'X/,<!04%"XR@50Z)@Q@\0(
M_W;^_W;\_W8&_W8$Z-U1"<!]%8-&_ OX _W;^_W;\Z&4 6UOKV(M._(M6
M_HD.W@R)%N ,Z:M158GE]P:D !=!TQP%#_-N ,_S;>#/\VW S_-MH,N/P%
M4.@W,8/$#(L.W P+#MH,= W_-MP,_S;:#.A5_UM;_S9 .C?-UO'!D #I
M6U%5B>504%;&1OT*,<!0_W8&_W8$Z%(K@\0&B<:*!)C_-D 4.AE0%M;4(I&
M_9A9.<%T T;KYNDB456)Y8/L#(M&#(M.#@4! (/1 (E&_(E._NBW(2M&#!M6
M#HE&](E6]HM&"(M."@-&!!-.!@-&#!-.#HE&^(E.^O]V_O]V_/]V]O]V].C=
M4 G ?@/IK0" /K8 '1*_W;^_W;\Z*XA6UM0_W;^_W;\Z,LA6UM0_W8*_W8(
M,<!04.BJ4#')"<!\ 4%1_W;Z_W;XZ)XJ@\0&4.AQ (/$!I@)P'5.,<!0ZV#_
M=O[_=OSH9"%;6U#_=O[_=OSH@2%;6U#_=@K_=@@QP%!0Z&!0,<D)P'P!05'_
M=OK_=OCH5"J#Q 90Z%A*@\0&"<!T!3' 4.L7@T;\ 8-6_@"#1O@!@U;Z .D]
M_[@! %!8Z1E058GE5HMV!E>+?@2#?@@ =0/IDP"*!)B)PXJ'3Q.8J AU ^EE
M (H%F(G#BH=/$YBH"'4&,<!0Z7( @WX( '09B@28B<.*AT\3F*@(= N / IT
M!D;_3@CKX8H%F(G#BH=/$YBH"'0(@#T*= -'Z^J /0IT!8 \"G63B@684(H$
MF%DQTCG!=0%"4NLAB?M'B@>8B?-&4(H'F%DYP70%,<!0ZPK_3@CI9/^X 0!0
M6.EH3U6)Y;AF %#HP4E;@#Z< !U"+A4 %#HLDE;@#Z> !U"+AX %#HHTE;
MN(H 4.B;25O_=@3H!$);Z2]/58GEQP80&P QP82&P QP8,&P QP8.&P
MQP8(&P QP8*&P QP8$&P QP8&&P QP8.!O__QP80!O__QP8 &P QP8"
M&P QP;^&@ Z=M.58GE5HMV! GV=!. / !T#KA*!E!6Z+L^6UL)P'59N$P&
M4+B* %#HDC5;6Z,,!H,^# 8 =1(QP%!0N(H 4+A.!E#H=2Z#Q C_-KH2N $
M4+C$%E#H1C2#Q 8)P'0/_S8,!KC$%E#HS31;6^O;_S8,!NCB-%N^B@"X: 90
M5N@\-5M;HPP&@SX,!@!U#S' 4%!6N&H&4.@B+H/$"(L># :XQ!I0_S?H&4);
M6XL.TAJ+%M0:B0X4&XD6%ALQP%"X 0!0,<!04.B?"(/$".@# .D*3E6)Y8,^
M&@8 =0Z+#B &T>%1Z!M#6Z,:!H,^' 8 =0Z+#B &T>%1Z 9#6Z,<!H,^'@8
M=0O_-B &Z/1"6Z,>!NG)356)Y8L.( ;1X8D.( ;1X5'_-AH&Z*!#6UNC&@:+
M#B &T>%1_S8<!NB-0UM;HQP&_S8@!O\V'@;H?4-;6Z,>!H,^&@8 =!&#/AP&
M '0*@SX>!@!T ^ER38 ^1 =0\QP%!04+B$!E#H/2V#Q C&!D8 >E4356)
MY8L._!H+#OH:=#/_-OP:_S;Z&O\V%AO_-A0;Z#Q-"<!\'( ^K = \QP%!0
M4+BJ!E#HSBR#Q @QP%#IOP& /JP '0/,<!04%"XL 90Z+(L@\0(Z*H!H[@
M@SZX !U-XL._!H+#OH:=!B /JP '0@,<!04%"XN 90Z(4L@\0(ZP\QP%!0
M4+C@!E#H="R#Q @QP%#I90& /JP '1,,<!0@SZX %U!KAZ!U#K'H,^N $
M=0:X8 =0ZQ&#/K@ G4&N$0'4.L$N%('4(L._!H+#OH:=0:X, =0ZP2X,@=0
MN!0'4.@;+(/$"(,^_AH ="F /JP '0B,<!0@S[^&@%U!KBL!U#K!+BN!U#_
M-OX:N(H'4.CK*X/$"/\V\!K_-NX:_S;T&O\V\AKHT0:#Q B#/L 6 '0#Z;X
M@#ZJ !T(3' 4%!0N+ '4.BU*X/$"/\V3 #H12M;H\ 6N $ 4.F: #' 4%!0
MN- '4.CJ*X/$"( ^Q!8*="N#/DP '0(_S9, .CA0ENXQ!90Z XK6Z-, #'
M4%"XQ!90Z.PM@\0&H\ 6@S[ %@!UAC' 4%!0N. '4.BB*X/$"( ^Q!9Y= /I
M;?^ /JP '0/,<!04%"X!@A0Z"PK@\0(N $ 4#' 4/\V3 #HHBV#Q :CP!;&
M!K( ;@! %#K!+@! %!8Z5%+58GE@^PJ5E?'1OP ,=&_@ QT;T___'1O;_
M_\9&[P#&1NX QD;M ,9&[ #'1N0 ,=&X@ QT;@ #'1MX ,=&W QT;:
M QP(,^P!8 =0% B$;7Q@9* QP%#_-OP:_S;Z&O\V# ;HR#*#Q B+#O8:
MBQ;X&H/I 8/: (D.%@:)%A@&BT;\BT[^B4;XB4[ZBD;NB$;OBD;LB$;M_S8,
M!NC=,UN)1OR)5O['1NH (,&%@8!@Q88!@#_-@P&N $4+C$%E#H1S"#Q 8)
MP'50@W[V 'PDBT[TBU;VB0[R&HD6]!J+3O"+5O*)#NX:B1;P&L=&V , Z?$"
MBT[\BU;^B0[R&HD6]!J+#A8&BQ88!HD.[AJ)%O :QT;8 #IRP*^Q!: /"!T
M"H \"70%@#Q8=2& / EU%KD( (M&ZIGW^8/J"/?: U;JB5;JZP/_1NI&Z]")
M]XH%F(G#BH=/$YBH!'4%@#TL=0-'Z^J*!)B)PXJ'3Q.8J 1T%8 ]9'0*@#UC
M= 6 /6%U!K@! %#K S' 4%B(1NZ#?O8 ?2> ?NX ="&+1OR+3OZ)1O2)3O:+
M#A8&BQ88!HE.\(E6\HM.ZHD._AJ ?NT =2&X! !0N!H(4%;HDT.#Q 8)P'4.
MC40$4.BX*%N)1N+II@"X! !0N" (4%;H<D.#Q 8)P'4.C40$4.B7*%N)1N#I
MA0"X!@!0N"8(4%;H44.#Q 8)P'4-C40&4.AV*%N)1N3K9;@' %"X+@A05N@Q
M0X/$!@G =5*-1 >)QXH%F(G#BH=/$YBH"'0#1^OO5^A#*%NCQ "+/L0 @#T
M=!&*!9B)PXJ'3Q.8J AU T?KZL8% (L>Q " /P!U#O\VQ #HW3];QP;$
M@SZX !T!X,^N #=3^#?O8 ?#FX-@A05NB<.%M;"<!U*XM.ZHD._AJ+3O2+
M5O:)#O(:B1;T&HM.\(M6\HD.[AJ)%O :QT;8 P#I#P&X" !0N#H(4%;H?T*#
MQ 8QR0G =0%!B$[L@SZX !T"H,^N != /I<@" ?NT =&RX! !0N$0(4%;H
M3T*#Q 8)P'59C40$4.A_1%L)PG4%Q@9* & / IT T;K^(M.ZHD._AJ+3OB+
M5OJ)#O(:B1;T&HL.%@:+%A@&@^D!@]H B0[N&HD6\!J ?/\J=0:X! !0ZP2X
M 0!0CT;8ZW.#/K@ '0*@SZX )T ^G\_(!^[P!U ^GS_+@" %"X2@A05NC)
M08/$!@G =!:X @!0N$X(4%;HMD&#Q 8)P'0#Z<K\BT[XBU;ZB0[R&HD6]!J+
M#A8&BQ88!H/I 8/: (D.[AJ)%O :BT[JB0[^&L=&V ( @'[7 '4#Z;T @W[D
M '05H$H F%#_-K0 _W;DZ'XI@\0&B4;>@W[B '05H$H F%#_-K0 _W;BZ&,I
M@\0&B4;<@W[@ '05H$H F%#_-K0 _W;@Z$@I@\0&B4;:@W[< '0R@W[: '0L
M_W;<Z/- 6U#_=MKHZT!;63G!?0S_=MSH+R9;H\ 6ZT#_=MKH(R9;H\ 6ZS2#
M?MP = S_=MSH$29;H\ 6ZR*#?MH = S_=MKH_R5;H\ 6ZQ"#?MX = K_=M[H
M[25;H\ 6@SY, !T#O\V3 #HICU;QP9, @S[ %@!T#O\VP!;HQB5;HTP
MZ:L @W[D '07N $ 4/\VM #_=N3HF"B#Q :C3 #IC@"#?N( =!2X 0!0_S:T
M /]VXNA[*(/$!HE&W(-^X !T%+@! %#_-K0 _W;@Z&$H@\0&B4;:@W[< '0R
M@W[: '0L_W;<Z Q 6U#_=MKH!$!;63G!?0S_=MSH2"5;HTP ZR[_=MKH/"5;
MHTP ZR*#?MP = S_=MSH*B5;HTP ZQ"#?MH = K_=MKH&"5;HTP @W[D '0'
M_W;DZ-,\6X-^X@!T!_]VXNC&/%N#?N = ?_=N#HN3Q;@W[> '0'_W;>Z*P\
M6X-^W !T!_]VW.B?/%N#?MH = ?_=MKHDCQ;BT;8Z7-%58GEBTX$BU8&B0[Z
M&HD6_!J+3@B+5@J)#O8:B1;X&NE3156)Y5!6@#ZL !U ^F) /\V_!K_-OH:
M_W8&_W8$Z#M%"<!]=#' 4/\V_!K_-OH:_S8,!N@"+8/$"#' 4%!0N%((4.B_
M)(/$"/\V# ;H-BY;4E#_=@;_=@3H $4)P'TH_S8,!K@ !%"XQ!90Z*8J@\0&
MB<8QP%!0N,064+B0"%#H@B2#Q CKP3' 4%!0N)0(4.AQ)(/$".L3,<!0_W8&
M_W8$_S8,!NB0+(/$"(M&"(M."BT! (/9 *,6!HD.& ;ID415B>6#["I65S'_
M@SX0!@!\5HL.(@:+%B0&.0X.!G48.180!G42BPXF!HL6* :)#@X&B180!NL8
MBPX.!HL6$ ;1X='2B<L#'AH&_S?H6CM;BPX.!HL6$ :#Z0&#V@")#@X&B180
M!NNCQP8B!O__QP8D!O__H2 &F:, &XD6 AN#/K@ 70*@SZX 1T ^E("_\V
M# ;H+BU;B4;VB5;XQT;R #'1O0 ,=&[@ QT;P #&1N4 QD;D <9&XP#'
M1MX ,=&X QT;6 #'1M@ /\V# :X 10N,064.A-$(/$!HE&_(,&%@8!
M@Q88!@"#?OP =!:X" !0N+ (4+C$%E#HI3V#Q 8)P'0:_S88!O\V%@;_=OC_
M=O;H /Z#Q @QP%#I Q#'!A(&9 #'!A0& "X 0 QR0,&%@83#A@&H^H:B0[L
M&O\V$ ;_-@X&_S8"&_\V !OH04,)P'P#Z:$'_S8,!NA=+%N)1O:)5OC_-@P&
MN $4+C$%E#HL ^#Q :)1OR#!A8& 8,6& 8 @W[\ '53BPX &XL6 ALK#@X&
M&Q80!E)1,<!0N 0 4.CK0@G ?0^XN@A0N,064.BE/%M;ZR2+1O0+1O)T#8!^
MY !T!\9&XP'I*@<QP%!04+B^"%#HC2*#Q B#!@X& 8,6$ 8 BQX.!@,>'@:*
M#L06B ^+#@X&BQ80!M'AT=*)RP,>&@;'!P H,06F%#I?P:X" !0N. (4+C$
M%E#H?SR#Q 8)P'4KBT;T"T;R= V ?N0 = ?&1N,!Z;H&,<!04/\V& ;_-A8&
MN.H(4.@6(H/$"HL.$ 8+#@X&="Z+1O0+1O)T#8!^Y !T!\9&XP'IA08QP%"X
MQ!90_S88!O\V%@:X$ E0Z-XA@\0*,?^XQ!90Z#\A6XL.#@:+%A &T>'1THG+
M QX:!HD'@#Y& !T'(L.#@:+%A &@^D!@]H B0X.!HD6$ 8QP%#I4PZ^Q!:
M/ !T$8H$F(G#BH=/$YBH!'4#1NOJ@#P =0/I%@ZX P!0N# )4%;HISN#Q 8)
MP'4*C40"4%;H43M;6U;HT#U;HQ ;B182&XH$F(G#BH=/$YBH!'0#1NOO@#PL
M=3J / !T$8H$F(G#BH=/$YBH!'4#1NOJ@#P =0/IN0U6Z) ]6RL&$!L;%A(;
M!0$ @]( HP@;B18*&^LPBPX2&PL.$!MT#L<&"!L! ,<&"AL .L8QP8(&P
MQP8*&P QP80&P$ QP82&P N 8 ,<D#!@@;$PX*&Z, &XD. ANA( :9_S8"
M&_\V !M24.C50 G ? 7H_?+KYJ$@!IFC !N)%@(;Z<8$@#[%%BUT ^FY HM&
M] M&\G5"BPX.!HL6$ :#Z0&#V@")RP,>'@:*!Y@QR3T* '4!08G(F;D! #';
M PX(&Q,>"AL!P1'3.0X.!G4).1X0!G4#Z<< @SX.!@%U28,^$ 8 =4*X 0 Q
MR0,&"!L3#@H;HPX&B0X0!K@! #') P8.!A,.$ :)1NJ)3NS'1N8! ,=&Z
MBPX(&XL6"AN)3NZ)5O#I=P"+1O0+1O)T-(!^Y !T!\9&XP'I; 2+1O*+3O0#
M!NH:$P[L&C'24E%0_S88!O\V%@:X- E0Z+D?@\0,ZSO_-NP:_S;J&O\V& ;_
M-A8&_S80!O\V#@;_-@H;_S8(&^B[/PG ?P:XJ@E0ZP2XM E0N'()4.A\'X/$
M#(L.#@:+%A &B4[RB5;T_S8,!NBX*%N)1MZ)5N"+#A8&BQ88!HE.VHE6W+C$
M%E#HM1Y;BPX.!HL6$ ;1X='2B<L#'AH&B0> /D8 '0<BPX.!HL6$ :#Z0&#
MV@")#@X&B180!C' 4.G)"XL>#@8#'AX&Q@<]OL06@#P =!&*!)B)PXJ'3Q.8
MJ 1U T;KZH \ '4#Z8$+5NA8.UNC#!N)%@X;B@28B<.*AT\3F*@$= -&Z^^
M/"QU.H \ '01B@28B<.*AT\3F*@$=0-&Z^J / !U ^E!"U;H&#M;*P8,&QL6
M#AL% 0"#T@"C!!N)%@8;ZS"+#@X;"PX,&W0.QP8$&P$ QP8&&P ZQC'!@0;
M #'!@8; #'!@P; 0#'!@X; "+#@X&BQ80!@,.!!L3%@8;B0X &XD6 AO_
M-@(;_S8 &[@! %"XH(90Z%<^"<!^'KC$%E#_-A@&_S86!O\V AO_-@ ;N+P)
M4.@.'H/$#*$@!IG_-@(;_S8 &U)0Z"0^"<!\!>A,\.OFBT;6BT[8.08$&W4)
M.0X&&W4#Z0X"QD;D .D' L9&Y " /L46"G44@#ZV !T#;CH"5"XQ190Z*LW
M6UN@Q1:8B<.*AT\3F*@(=2. /L46/G0<@#[%%CQT%8M&] M&\G0-@'[D '0'
MQD;C >D5 @G_?B&)^)E24/\V% ;_-A(&Z)H]"<!]"HGXF:,2!HD6% :_&/RX
MQA90Z,4<6XL.#@:+%A &T>'1THG+ QX:!HD'@#Y& !U ^EK 8L.#@:+%A &
M@^D!@]H B0X.!HD6$ 8QP%#IU@F+1O0+1O)T&H!^Y !T%(!^Y0!T!X,^N $
M=0?&1N,!Z8P!N,064.AA'%N+#@X&BQ80!M'AT=*)RP,>&@:)!X ^1@ =!R+
M#@X&BQ80!H/I 8/: (D.#@:)%A &,<!0Z74)N $ ,<D#!@@;$PX*&SD&#@9U
M"3D.$ 9U ^G2 (I&Y9A0_W;T_W;R,<!04.BX/%D)P'0$@<D! (A.Y4>+1O0+
M1O)U"(-&U@M@ BQX.!@,>'@;&!R#IE0"@Q1:8B<.*AT\3F*@(=16+1O0+
M1O)T#8!^Y !T!\9&XP'IT !'BT;T"T;R=0B#1M8!@U;8 +C&%E#HE!M;BPX.
M!HL6$ ;1X='2B<L#'AH&B0> /D8 '0]BPX.!HL6$ :#Z0&#V@")#@X&B180
M!C' 4.FH"(M&] M&\G4#Z8$(@'[D '4#Z7@(QD;C >MFNRH&6.DA.8L.#@:+
M%A &T>'1THG+ QX:!H,_ '0OBPX.!HL6$ ;1X='2B<L#'AH&_S?HO35;BPX.
M!HL6$ ;1X='2B<L#'AP&B0?I7OB+#@X&BQ80!M'AT=*)RP,>' ;'!P Z47X
M@SX0!@!\&XM&] M&\G43,<!04.BL#%)0N.P)4.A0&X/$"H!^XP!U ^FU (M.
MVHM6W(D.%@:)%A@&BPX.!HL6$ :#Z0&#V@")#@X&B180!O\V$ ;_-@X&_W;T
M_W;RZ#D["<!^,(L.#@:+%A &T>'1THG+ QX:!O\WZ"PR6XL.#@:+%A &@^D!
M@]H B0X.!HD6$ ;KNS' 4/]VX/]VWO\V# ;HTB*#Q C'1NH! ,=&[ N $
M,<D#1O(33O2)1N:)3NB+#@0;BQ8&&XE.[HE6\(L. !N+%@(;B0X.!HD6$ :#
M/K@ 75<BT;P"T;N=3'_-A(;_S80&S' 4+@! %#HF#H)P'X^BPX2!HL6% ;1
MX='2_W;8_W;64E'H?3H)P'XC@#ZL !T%KB@"E"X7 I0N!H*4+@0"E#H"!J#
MQ C'!K@ ! "+1O +1NYU ^GR!8M.YHM6Z(D.)@:)%B@&BT;NBT[P T;F$T[H
M+0$ @]D HR(&B0XD!HM&[HM.\"T! (/9 /]V\/]V[HE&[HE.\#' 4%#H!3H)
MP'\#Z<< _W;L_W;J_S80!O\V#@;H[3D)P'\6BU[J QX>!H _('0*@T;J 8-6
M[ #KU?]V[/]VZO\V$ ;_-@X&Z,(Y"<!^%C' 4%#_-NP:_S;J&KBR"E#H@1F#
MQ J+1NJ+3NS1X-'1B<,#'AH&BT;FBT[HT>#1T?\WB<,#'AH&CP>+7NH#'AX&
M,<"*!U"+7N8#'AX&6(@'BT;JBT[LT>#1T8G# QX<!HM&YHM.Z-'@T='_-XG#
M QX<!H\'@T;J 8-6[ "#1N8!@U;H .D3__]V[/]VZO\V$ ;_-@X&Z"8Y"<!_
M)HM&\HM.]#E&ZG4%.4[L=!:+7NH#'AX&@#\@= J#1NH!@U;L .O%]P:D $
M=0/IF 2X 0 QR0,&#@83#A &45#_=O3_=O+_=NC_=N;_=NS_=NJX\ I0Z/$>
M@\02Z6H$_S8,!NCF(5N)1NJ)5NS'!A(& #'!A0& #_-@P&N $4+C$%E#H
M+06#Q :)1OR#!A8& 8,6& 8 @W[\ '0/H,06F(G#BH=/$YBH!'4:_S88!O\V
M%@;_=NS_=NKHY_*#Q @QP%#IZ@2XQ!90Z*(T6Z,0&XD6$AN^Q!:*!)B)PXJ'
M3Q.8J 1T T;K[X \+'4L1E;H?#1;*P80&QL6$AL% 0"#T@"C"!N)%@H;B@28
MB<.*AT\3F*@$=!A&Z^^*!)@QR3UA '0!08G(F:,(&XD6"AN*!(A&^8!^^6%U
M"H,&$!L!@Q82&P!&5N@F-%N)1O*)5O2*!)B)PXJ'3Q.8J 1T T;K[X \+'4.
M1E;H!#1;B4;NB5;PZPR+1O*+3O2)1NZ)3O" ?OED=0B#1O(!@U;T +@! #')
M P8(&Q,."AL#1NX33O K1O(;3O0% 0"#T0"C#@:)#A &_S80!O\V#@:X 0!0
MN*"&4.A:-PG ?AZXQ!90_S88!O\V%@;_-A &_S8.!K@<"U#H$1>#Q RA( :9
M_S80!O\V#@924.@G-PG ? 7H3^GKYHM.\HM6](D.#!N)%@X;BT;NBT[P*T;R
M&T[T!0$ @]$ HP0;B0X&&XL."!N+%@H; PX0&Q,6$AN#Z0&#V@!24?\V$AO_
M-A ;N$@+4+C$%E#H)2*#Q RXQ!90Z 466XL>&@:)!X ^1@ =!+'!@X&___'
M!A &__\QP%#I,0.+'AX&Q@<JQT;V 0"+1O:94E#_-@H;_S8(&^B%-@G ?@/I
MK@#_-@P&N $4+C$%E#H @.#Q :)1OR#!A8& 8,6& 8 @W[\ '46,<!04/\V
M& ;_-A8&N%8+4.@<%H/$"H ^Q!8\=!8QP%!0_S88!O\V%@:XA M0Z/\5@\0*
MN,864.AB%5N+7O;1XP,>&@:)!X ^1@ =!*+1O9(F:,.!HD6$ 8QP%#IB0*+
M7O;1XP,>&@;_-^C?+UN+7O;1XP,>' :)!XM>]@,>'@;&!RW_1O;I.O^ ?OEC
M=5C_-@P&N $4+C$%E#H3@*#Q :)1OR#!A8& 8,6& 8 @W[\ '46,<!04/\V
M& ;_-A8&N*8+4.AH%8/$"H ^Q!8M=!8QP%!0_S88!O\V%@:XU M0Z$L5@\0*
M_W;P_W;N_W;T_W;RN/@+4+C$%E#HM""#Q RXQ!90Z)046XM>]M'C QX:!HD'
M@#Y& !T$HM&]DB9HPX&B180!C' 4.F[ 8M>]@,>'@;&!SW_1O:+1O:94E#_
M-A &_S8.!N@.-0G ?@/IK@#_-@P&N $4+C$%E#HBP&#Q :)1OR#!A8& 8,6
M& 8 @W[\ '46,<!04/\V& ;_-A8&N 8,4.BE%(/$"H ^Q!8^=!8QP%!0_S88
M!O\V%@:X- Q0Z(@4@\0*N,864.CK$UN+7O;1XP,>&@:)!X ^1@ =!*+1O9(
MF:,.!HD6$ 8QP%#I$@&+7O;1XP,>&@;_-^AH+EN+7O;1XP,>' :)!XM>]@,>
M'@;&!RO_1O;I.O^ /JX '07Z%4!F G =0\QP%!04+A6#%#HYQ.#Q CW!J0
M @!T;<=&^ BT;XF5)0_S80!O\V#@;H'30)P']3BT;XF3D&"!MU##D6"AMU
M!L9&]U[K!,9&]R"+7OC1XP,>&@:*1O>8_S>+7O@#'AX&4(H'F%#_=OBX? Q0
M_S:^$NC9&8/$#/\VOA+H!R=;_T;XZYBX 0 QR0,&#@83#A &45"A( :94E#H
MKC,)P'T7BPX.!HL6$ :#P0&#T@")RP,>'@;&!UZX 0!0ZQPQP%"XQ!90_S88
M!O\V%@:XB@Q0Z$T3@\0*,<!06.EC,U6)Y8/L!E97_W8(_W8&_W8$Z!(9@\0&
MB4;^,?^#/OX: '1*@W[^ '1$OL06.3[^&GXK@#P@= J / ET!8 \6'4<@#P)
M=1.Y!P")^)GW^8/J"/?: ?J)U^L!1T;KSX'^Q!9T"E:XQ!90Z,LL6UN+1O[I
M\#)5B>6#[!)65\9&\0"+#A ;BQ82&XE.]HE6^(L.#!N+%@X;B0X0&XD6$AN+
M3O:+5OB)#@P;B18.&XL.&@:)3OZ+#AP&B4[\BSX>!L<&&@8 ,<&' 8 ,<&
M'@8 .B(Y(,^&@8 = Z#/AP& '0'@SX>!@!U18,^&@8 =0C_-AH&Z(8I6XM.
M_HD.&@:#/AP& '4(_S8<!NAP*5N+3OR)#AP&@SX>!@!U"/\V'@;H6BE;B3X>
M!C' 4.G7 K@! #') P8(&Q,."AN)1O:)3OB+7O8!^X _"G4,QD;Q 8-&]@&#
M5O@ @SXD!@!\6O\V) ;_-B(&_W;X_W;VZ R"<!_'(L.#@:+%A &*T[V&U;X
M@\$!@]( B4[RB5;TZQ.+1O:+3OCWV??8@]D B4;RB4[TBT;RBT[T 08B!A$.
M) 8!!B8&$0XH!L=&\@ QT;T #_=OC_=O;_-A &_S8.!NB<,0G ?@/I@P"+
M1O:+3OC1X-'1B<,#7OZ+1O*+3O31X-'1_S>)PP,>&@:/!XM>]@'[,<"*!U"+
M7O(#'AX&6(@'BU[R QX>!H _*W4*BU[R QX>!L8'+8M&]HM.^-'@T=&)PP->
M_(M&\HM.]-'@T='_-XG# QX<!H\'@T;V 8-6^ "#1O(!@U;T .EE_X!^\0!T
M=;@! #') P8(&Q,."AN)1O:)3OB+1O:+3OC1X-'1B<,#7OZ+1O*+3O31X-'1
M_S>)PP,>&@:/!XM>]@'[,<"*!U"+7O(#'AX&6(@'BT;VBT[XT>#1T8G# U[\
MBT;RBT[TT>#1T?\WB<,#'AP&CP>#1O(!@U;T (L>'@;&!RJ+'AH&BS> / !T
M"X \+74#Q@0J1NOPQ@4]BU[^BS> / !T"X \*G4#Q@0M1NOPQT;V #'1O@
M /]V]/]V\O\V$ ;_-@X&Z$<P"<!^ ^F# (M&]HM.^-'@T=&)PP->_HM&\HM.
M]-'@T='_-XG# QX:!H\'BU[V ?LQP(H'4(M>\@,>'@98B >+7O(#'AX&@#\M
M=0J+7O(#'AX&Q@<KBT;VBT[XT>#1T8G# U[\BT;RBT[TT>#1T?\WB<,#'AP&
MCP>#1O8!@U;X (-&\@O0 Z67_BPX(&XL6"AN)3O:)5OB+#@0;BQ8&&XD.
M"!N)%@H;BT[VBU;XB0X$&XD6!AN#?OX =0?_=O[HDR9;@W[\ '4'_W;\Z(8F
M6PG_=057Z'TF6[@! %!8Z5PO58GEH1 ;BQ82&^E1+U6)Y:$(&XL6"AOI1"]5
MB>6A#!N+%@X;Z3<O58GEH00;BQ8&&^DJ+U6)Y:$.!HL6$ ;I'2]5B>6A$@:+
M%A0&Z1 O58GEBT8$BTX&T>#1T8G# QX<!HL'Z?@N58GEBUX$ QX>!HH',.3I
MYRY5B>6+1@2+3@;1X-'1B<,#'AH&BP?ISRY5B>6AZAJ+%NP:Z<(N58GE@^P*
M5E?&1OD @#ZR !U4;A4 %#H"2E;N%0 4/\VP!;H3PU;6X ^K =!2X5 !0
MN*H,4+C$%E#HY1F#Q ;K$KA4 %"XN@Q0N,064.C1&8/$!KC,#%"XQ!90Z"(2
M6UN)Q_\V# ;HB1=;B4;ZB5;\_S8,!K@ !%"XQ!90Z-SZ@\0&"<!U%_\V& ;_
M-A8&_W;\_W;ZZ+3H@\0(Z<D @P86!@&#%A@& +[$%HH$F(G#BH=/$YBH!'4%
M@#PL=0-&Z^J@Q!:8B<.*AT\3F*@$=!6 /&1T"H \8W0%@#QA=0:X 0!0ZP,Q
MP%!8B$;Y@'[Y '1A@#ZR !U"E>XQ!90Z!H46UN /&1U ^E8__\V# :X 10
MN,064.A"^H/$!@G =0/I/_^#!A8& 8,6& 8 @#ZR !U"E>XQ!90Z-X36UNX
MS@Q0N,064.AO'5M;"<!UN^D0__\V& ;_-A8&_W;\_W;ZZ.CG@\0(@#ZR !T
M ^E.+;C2#%!7Z%,36UNXU@Q05^A)$UM;5^A[(%M7Z!,26^B%#O\V3@"X5 !0
MZ/X(6UL)P'T4Q@:< '_-CX N%0 4.A:'5M;ZPW_-CX _S9. .A+'5M;N $
M4.CO#5OI\"Q5B>6 /D0 '0XQP8F&P QP8H&P @SXB&P!T"/\V(AOHY"-;
M@SXD&P!T"/\V)!OHU2-;QP8D&P QP8B&P ZU/&!D0 ?\VX@SHL2!;QP;B
M#/___S8>&^BL(UO_-B ;Z*0C6\<&(!L (L.(!N)#AX;QP;H#/__QP;J#/__
MBP[H#(L6Z@R)#N0,B1;F#,<&&!L .E:+%6)Y5:+=@16Z#0 6Y@)P'4%5NCO
M UN /JP '0?,<!0@#Y$ !T!K@0#5#K!+@2#5!6N.P,4.C2"X/$".D:+%6)
MY8/L"%97BWX$@#Y* !T/;C$&E!7Z' E6UL)P'TO@#ZL !T#S' 4%!7N!0-
M4.B9"X/$"+@! %!7Z% -6UNXM@%05^@Z'%M;4.C:'UNXQ!I05^@S)5M;"<!\
M ^D= ;@V#5!7N"P-4+C$%E#H#!>#Q BXQ!I0N,064.@,)5M;"<!]$;C$&E"X
MR!90Z/LD6UL)P'Q45[@Z#5"XQ!90Z-L6@\0&@#ZL !T#S' 4%!7N$0-4.@5
M"X/$"+C$%E#HN1!;"<!U$;C$&E!7Z+PD6UL)P'4#Z:8 ,<!04%>X>@U0Z!8+
M@\0(Z90 5[B:#5"XD U0N-@64.B#%H/$"+[8%KC$&E!6Z(,D6UL)P'T1OMT6
MN,0:4%;H<B1;6PG ?%!6N)X-4+C$%E#H4A:#Q : /JP '0/,<!04%>XJ U0
MZ(P*@\0(N,064.@P$%L)P'4.N,0:4%?H,R1;6PG =" QP%!05[C8#5#HD J#
MQ CK#S' 4%!7N.@-4.A_"H/$"(L.R!J)#CX @>$ \/?!_W]T#S' 4%!7N/@-
M4.A>"H/$"(L.TAJ+%M0:B0XF&XD6*!N /D8 '0.Z%C<Q@9& QP%#I_@&X
M @ QR0,&)AL3#B@;4.AK'UNC)!N#/B0; '4&,<!0Z=P!,<!05^B (EM;B4;^
M@W[^ 'T/,<!04%>X( Y0Z/8)@\0(_S8F&_\V)!O_=O[HLB*#Q :9.08F&W4&
M.18H&W05_W;^Z/X=6_\V)!OH_R!;,<!0Z8@!_W;^Z.D=6XL.*!L+#B8;=#N+
M#B8;BQ8H&X/I 8/: (G+ QXD&X _"G0BN H 4/\V)!O_-B@;_S8F&X,&)AL!
M@Q8H&P!865L!PUB(!XL>)AL#'B0;Q@< QT;X #'1OH (LV)!N / !T$( \
M"G4(@T;X 8-6^@!&Z^N+1OB+3OH% @"#T0#1X-'14.AX'ENC(AN#/B(; '4.
M_S8D&^A8(%LQP%#IX0#'1O@! ,=&^@ BT;XBT[ZT>#1T8G# QXB&XL.)!N)
M#XLV)!N / !T)8 \"G4=@T;X 8-6^@"+1OB+3OK1X-'1B<,#'B(;C40!B0=&
MZ]:+1OB+3OHM 0"#V0"CV@R)#MP,@S[$ !U ^ER /\V)!OH# 1;F G =4R
M/JH '0;@#ZL !T5S' 4%#_-L0 N#0.4.A7"(/$".M#,<!04/\VQ "X?@Y0
MZ)D(@\0(@#[$%GET*C' 4%!0N, .4.A:"(/$".L9@#ZL !T$C' 4%#_-L0
MN,H.4.@2"(/$"+@! %!8Z50H58GE@^P(5E<Q_\=&^@$ ,<"#/L0 '4!0(A&
M^<8&1 N/H.4/]V!.@+#UM;B<8)]G41,<!04/]V!+C\#E#H\P>#Q BXM@%0
MN&8 4.AN&%M;H^(,@S[B# !]$C' 4%"X9@!0N! /4.C*!X/$"%:X 10N,06
M4.B>#8/$!@G =#*#/L0 '07@'[Y '41N,064.@% UN8"<!T!,9&^0&XQ!90
MZ*PA6XG'.7[Z?<")?OKKNX,^Q =&N ?OD =4R /JH '0;@#ZL !T5S'
M4%#_-L0 N"0/4.@K!X/$".M#,<!04/\VQ "X;@]0Z&T'@\0(@#[$%GET*C'
M4%!0N+ /4.@N!X/$".L9@#ZL !T$C' 4%#_-L0 N+H/4.CF!H/$"#' 4%!0
M5N@.#X/$"+@ !)GW?OJ9HQH;B18<&XM.^HD.&!NX 010Z"T<6Z,>&[@!!%#H
M(AQ;HR ;@SX@&P!U#S' 4%!0N.H/4.C%!H/$"+\! (GXF5)0_S8<&_\V&AOH
M)"4)PG4FN $4/\V'AO_-N(,Z&TA@\0&/0 $?0\QP%!04+@,$%#HB :#Q B+
M1OI 5E")^)G_-AX;4E#_-AP;_S8:&^C@)%)0BT;ZF>BV)%L!PU/H/@R#Q 8)
MP'5'B?A(F:/:#(D6W R)^)E24/\V'!O_-AH;Z*XD"<)T++@ !%#_-AX;_S;B
M#.CW((/$!CT !'T5,<!04%"X+!!0Z!(&@\0(ZP1'Z4K_5NBA#%O_-N(,Z"P:
M6S' 4+AF %#H91Y;6Z/B#(,^X@P ?1(QP%!0N&8 4+A,$%#HUP6#Q CI\255
MB>6#[ A6BW8(_W8&_W8$,<!0N $ 4.CA)0G ?!7_=@;_=@3_-MP,_S;:#.C,
M)0G ?@>X8A!0Z?@ @#Y$ !T%8M&!(M.!M'@T=&)PP,>(AO_-^G< /]V!O]V
M!/\V'!O_-AH;Z-\CB4;\B5;^BT8$BTX&*T;\&T[^B4;XB4[ZBT;XBT[Z.0;D
M#'4+.0[F#'4%,?;I@0"+1OB+3OHY!N@,=0LY#NH,=06^ 0#K:HGST>/1XXM&
M^(M.^HF'Y R)C^8,,<!0_W;Z_W;X_S8<&_\V&AOH<B)24+@ !#'2Z$8C4E#_
M-N(,Z)L9@\0(B?/1X[@ !%#_MQX;_S;B#.B@'8/$!@G ?1(QP%!0N&8 4+AD
M$%#HO02#Q B)\]'CH1@;F?^W'AM24(M&_(M6_NCW(EL!PU-8Z;PD58GE4%!6
M5X,^Q =0>X 0!0Z7X _S;$ .B<'EN)QU?_-L0 _W8$Z*L>@\0&"<!U&(G[
M ?.*!YB)PXJ'3Q.8J AT!K@! %#K2HMV!( \ '0_B@28B<.*AT\3F*@(="Y7
M_S;$ (U$ 5#H:AZ#Q 8)P'4;B?A B<,!\XH'F(G#BH=/$YBH"'0&N $ 4.L&
M1NN\,<!06.DD)%6)Y8'L# )65[B $%#_=@;H"Q1;6PG = /IB #W!J0 ! !T
M$3' 4%#_=@2X@A!0Z*4#@\0(,<!0_W8$Z#D<6UN)QPG_?1$QP%!0_W8$N)@0
M4.BP X/$"+@ !%"XQ!905^AN'(/$!HF&_/V#OOS] 'XH_[;\_;C$%E"X 0!0
MZ%4>@\0&/0$ =,\QP%!04+C $%#H< .#Q CKOE?HEA=;,<!0Z3$"@SY2 !T
M'?\V4@"-A@#^4.A '5M;_W8&C88 _E#H 1U;6^LH_W8&C88 _E#H)!U;6X,^
M4 = ;_-E ZP2XUA!0C88 _E#HUQQ;6[C$&E#_=@;HFQQ;6PG ?0/I^ "+
M#L0:B8[X_8L.QAJ)CO;]C88 _HF&]/V-A@#^B<: / !T#X \+W4'C40!B8;T
M_4;K[+C$&E"-A@#^4.A4'%M;"<!\4(L.Q!HYCOC]=4:+#L8:.8[V_74\B[;T
M_8 \ '01B@28B<.*AT\3F*@"=0-&Z^J / !T"HH$F"T@ (@$Z[&+GO3]@\,!
M4_^V]/WH9!Q;6^N>C88 _E#HZ!Q;"<!\ NOQ]P:D 0 =!4QP%"-A@#^4/]V
M!KC8$%#H%P*#Q B-A@#^4/]V!NBW%EM;"<!]&C' 4/]V!/]V!KCJ$%#H\P&#
MQ BX__]0Z>< _W8&Z),<6PG ? +K\_<&I $ '03,<!0_W8&_W8$N!014.C$
M 8/$"/]V!O]V!.AF%EM;"<!\ ^FC +BV 5#_=@;H6Q);6XF&^/V#OOC] 'T:
M,<!0_W8$_W8&N"814.B( 8/$"+C__U#I? QP%#_=@3H%1I;6XG'"?]]$3'
M4%#_=@2X4!%0Z(P!@\0(N $4+C$%E!7Z$H:@\0&B8;\_8.^_/T ?BG_MOS]
MN,064/^V^/WH,1R#Q 8YAOS]=,XQP%!04+AX$5#H2P&#Q CKO5?H<15;_[;X
M_>AI%5O_=@3HMAM;,<!06.E+(56)Y8/L!E97N+8!4/]V!NBB$5M;B<8)]GT1
M,<!04/]V!KB.$5#H P&#Q @QP%#_=@3H:AE;6XG'"?]]$3' 4%#_=@2XJ!%0
MZ.$ @\0(N $4+C$%E!7Z)\9@\0&B4;Z@W[Z 'XF_W;ZN,064%;HC!N#Q 8Y
M1OITU3' 4%#_=@:XT!%0Z*4 @\0(Z\)7Z,L46U;HQA1;Z;,@58GE4%!65XM^
M! G_=0._ZA&)_HGS1H _ '0"Z_:)\"GX4.BT%5N)1OZ#?OX =1^ /D0 '0'
MQ@9& 'K(S' 4%!0N/ 14.A* (/$".L2BW;^B?M'B@>(!$:8"<!T NOQBT;^
MZ4T@58GE_W80_W8._W8,_W8*_W8(_W8&_W8$_S:^$N@[!H/$$/\VOA+H:1-;
MZ2(@58GE_W80_W8._W8,_W8*_W8(_W8&_W8$Z+C_@\0.N $ 4.B3T%OI^1]5
MB>6#[ 965[@" %#HH1-;B$;[_W80_W8._W8,_W8*_W8(_W8&_W8$N,064.@K
M"X/$$/\VOA+H Q-;N ( 4+@0$E#H!1A;6XG&"?9\-5;H7Q-;"<!T++C$%E#H
MEQE;4+C$%E!6Z$$:@\0&N $4+C$%E!6Z"X8@\0&B<=6Z(<36^M&,<!0Z"@3
M6PG =#/_-KH2Z*@26[C$%E#H6!E;4+C$%E QP%#H !J#Q :X 10N,064#'
M4.CK%X/$!HG'ZPC&!L06"K\! G_?P?&!L06 .L'B?O&A\06 (!^^P!U#S'
M4%!0N,064.B^_H/$".D%'U6)Y8-^! !U-[@! %!0Z,L76UNC*AN#/BH; 70&
MQP8J&SH3N $ 4+@" %#HKA=;6Z,L&X,^+!L!= ;'!BP;.A/_-BH;N $ 4.B1
M%UM;_S8L&[@" %#HA!=;6^FJ'E6)Y;@! %!0Z'076UNX 0!0N ( 4.AG%UM;
MZ8T>58GE@>PN 597BWX$C88 _XG&QX;2_@ @#T ="J /2]U&T>+AM+^_X;2
M_HG#T>.-AM;^ <.)-\8$ $;KVXG[1XH'B 1&Z]'&! "+GM+^T>.-AM;^ <.)
M-X!^!@!T!/^.TOZ#OM+^ 'T#Z1\>N!H24+C$%E#HYQ=;6[[$%L>&U/X (N&
MTOXYAM3^?RZ / !T T;K^,8$($:-A@#_4%;HO1=;6XN>U/[1XXV&UOX!PXL?
MQ@<O_X;4_NO(N,064.@K UOIQAU5B>6![,X 5E>#?@0 =08QP%#I5 '_=@3H
M^/Q;B4;^BW;^B@28B<.*AT\3F*@(= -&Z^^)]_<&I " '01_W8(_W8&5[@@
M$E#H+OV#Q BX"0!0N#024%?HAA>#Q 8)P'4&,<!0Z0(!@#P =""*!)B)PXJ'
M3Q.8J AU$H \+W4*_TX&? 6-1 &)QT;KV\8$ #E^_G0KBU[^@#\O="/&1?\
MN,0:4/]V_NB-%EM;"<!T#_<&R!H 0'0'QD7_+XM^_E?H4/Q;B<=7N#X24(V&
M,O]0Z%8(@\0&_W;^Z (46[C$&E!7Z%(66UL)P'P#Z7H @WX( '0#Z7$ N$82
M4(V&,O]0Z&066UNXQ!I0C88R_U#H)A9;6PG ?5&XQ!I0C88V_U#H%!9;6PG
M?3]7N%024+A*$E"-AC+_4.CO!X/$"+C$&E"-AC+_4.CN%5M;"<!]&;C$&E"-
MAC?_4.C<%5M;"<!]!U?H>1-;,?]76.E9'%6)Y3' 4+@+ %"X @!0N%@24.@D
M_(/$".E '%6)Y8/L"E97BWX&@#UR=04QP%#K#X ]=W4&N $ 4.L$N ( 4%Z#
M_@)T&(U&_%#H>Q1;"<!\#.BB#XE&^(-^^ !]!C' 4.G4 (-^^ !T ^F/ ,=&
M]BX?@7[V5A]S'XM>]H,_ '01BT;V+2X?N0( F??Y4.C8#UN#1O8"Z]J)\]'C
MC4;\ </_-^C##ULQP GV=0% ,<D)]G4!08G+T>.-3OP!RU#_-^@:#%M;,< )
M]G4!0(G#T>.-1OP!P_\WZ(X/6S' 4/]V!+AX$E"X=!)0N&P24.@2#(/$"KA_
M %#H,@Y;B?/1XXU&_ '#BQ_1XXM&^(F'+A\QP GV=0% B</1XXU&_ '#_S?H
M1 ];B?/1XXU&_ '#5_\WZ-(%6UM06.D>&U6)Y8/L"E97BUX$BS>X 0!0N (
M4.C=$UM;B4;XN $ 4+@# %#HS1-;6XE&]O]V!.AG 5N-1OQ0Z&$56XG'@___
M= J)\]'C.;\N'W7G@___=07'1OS___]V^+@" %#HE!-;6_]V]K@# %#HB!-;
M6XGST>/'ARX? "+1OSIGQI5B>6#[ 965^@Q#HG&"?9U(#' 4/]V!+B($E"X
MA!)0N'P24.@B"X/$"KA_ %#H0@U;"?9]"+@! %#H-@U;C4;^4.C9%%N)QSG^
M= >#__]T NOK@___=07'1O[__XM&_ND]&E6)Y5!05E>+=@2+1@8M 0")1@:#
M?@8 =AC_=@CHY@-;B<>#__]T"HGXB 1&@_\*==F#__]U"CEV!'4%,<!0ZP;&
M! #_=@18Z?,958GE5HMV!(U&"%#_=@96Z%P&@\0&]D0$0'0%5N@9#5M>B>Q=
MPU6)Y8U&!E#_=@3_-KP2Z#@&@\0&BQZ\$O9'!$!T"/\VO!+H[@Q;B>Q=PU6)
MY5:+=@2 / !T$8GS1HH'F/]V!E#HO0A;6^OJZ84958GE4%97BWX$,?:#_A1]
M&8GST>,YO[H2=0R)\]'CQX>Z$@ ZP-&Z^*#_A1\!KC__U#K*U?HD0Q;_S7H
M50U;]D4$('0-@WT& '0'_W4&Z$L06X/^ GX%5^A!$%LQP%!87UZ)[%W#58GE
M@^P(5E?'1O@ #'_B?O1XX._NA( = Z#_Q1\!C' 4.G9 $?KYXM>!HH'F%#I
M=@"!3O@" +BD 5#_=@3H1@E;6XE&^H-^^@!]8S' 4.FL (%.^ ( N $ 4/]V
M!.@0$5M;B4;Z@W[Z 'T&,<!0Z8P N ( 4#' 4%#_=OKH, V#Q CK*H%.^ $
M,<!0_W8$Z-X06UN)1OJ#?OH ?1$QP%#K6S' 4.M6NXP26.FB%;@* %#HC@U;
MB<8)]G4%,<!0ZSS'1 ( (M&^HD$BT;XB40$N $4.AK#5N)1 :#? 8 =0>!
M3 0$ .L%@4P$( "+1 :)1 B)^]'CB;>Z$E987UZ)[%W#58GE@^P*5HMV!%?'
M1OK__\=&_/__@60$Y__V1 0!=0/I[P"#?@H"? /IR "#? 8 =0/IOP#V1 0$
M= /IM@"+? *+1@:+3@B)1OJ)3OR#?@H =2VX 0!0,<!04/\TZ$L,@\0(B4;V
MB5;XB?B9*T;V&U;X T;Z$U;\B4;ZB5;\ZQ.)^)F+3@:+7@@IP1G3B4X&B5X(
M"?]^2(GXF?]V_/]V^E)0Z'X7"<!_-HM$!IG_=OS_=OI24(M$")E96RG!&=-3
M4>A?%PG ?!>+7OH#7 B)7 B+1 (K1OJ)1 (QP%#K:H-^"@%U#XGXF0-&!A-6
M"(E&!HE6"/]V"O]V"/]V!O\TZ*D+@\0(B4;ZB5;\QT0" #K(O9$! )T'%;H
M0@I;_W8*_W8(_W8&_S3H@ N#Q B)1OJ)5OR#?OK_=0R#?OS_=0:X__]0ZP,Q
MP%!8Z<P658GE@^P&5HMV!%<Q__9$! %T"8GX*T0"B<?K)O9$! )T%H-\!@!T
M$/9$! 1U"HM$""M$!HG'ZPJX__]0N/__4.M*N $ 4#' 4%#_-.@/"X/$"(E&
M_(E6_HM&_(M._BT (/9 '4%(<!T 4$)R7T(_W;^_W;\ZQ6)^)D#1OP35OZ)
M1OR)5O[_=O[_=OQ86E]>B>Q=PU6)Y5!6BW8$]D0$&'0'N/__4.F, /9$! %U
M![C__U#I?P"#? ( ?U'V1 0$=!6X 0!0C4;^4/\TZ*H.@\0&B40"ZQ*X 10
M_W0&_S3HE@Z#Q :)1 *#? ( ?QB#? ( =0>!3 0( .L%@4P$$ "X__]0ZRZ+
M1 :)1 B+1 )(B40"]D0$!'0)BT;^)?\ 4.L2BT0(B<.#PP&)7 B)PS' B@=0
M6.F4%56)Y5:+=@2#? 8 = WV1 0@= ?_= ;HD@Q;@60$F_^+1@:)1 :#? 8
M=06!3 0$ (M$!HE$",=$ @ 7HGL7<-5B>6#[ 965\=&^@ ,?^)^]'C@[^Z
M$@!T#H/_%'P&,<!0Z8T 1^OGBUX&B@>84.LK@4[Z @#K*X%.^@( N ( 4#'
M4%#_=@3HF@F#Q CK$X%.^@$ ZPPQP%#K5KOB$ECI(Q*X"@!0Z \*6XG&"?9U
M!3' 4.L\QT0" "+1@2)!(M&^HE$!+@ !%#H[ E;B40&@WP& '4'@4P$! #K
M!8%,!" BT0&B40(B?O1XXFWNA)66.F=%%6)Y8/L"E:+=@3'1O;__\=&^H(
MB7;\B7;^C48(4/]V!HU&]E#H\ "#Q :-1O90,<!0Z)H#6UN)\.EB%%6)Y5!0
M5E>+7@2#PPN)WHM&!C'2]W8(B=>#QS"#_SE^ X/'!TZ)^(@$BT8&,=+W=@B)
M1@:#?@8 ==6+7@0I\X/#"XG?B?-&,<"*!U"+7@18B ?_1@1/"?]UZHM&!.D!
M%%6)Y5!05E>+7@2#PPN)WHM&"IG_=@C_=@924.C"$HG'@\<P@_\Y?@.#QP=.
MB?B(!(M&"IG_=@C_=@924.BE$8E&!HE6"/]V"/]V!C' 4%#HP! )P'6YBUX$
M*?.#PPN)WXGS1C' B@=0BUX$6(@'_T8$3PG_=>J+1@3IA1-5B>6#["165XM>
M!O]&!HH'F(G'"?]U ^EK$X/_)70+_W8$5^B1 EM;Z]Z-1O2)QHU&](E&\,=&
MY BUX&@#\M=0;_1@;_1N3'1N(@ (M>!H _,'4(_T8&QT;B, #'1NH (M>
M!O]&!HH'F(G'@_\P? J#_SE_!8/O,.L.@_\J=1>+7@B#1@@"BS^X"@#W9NJ)
M1NH!?NKKRL=&Y@ QT;H "#_RYU.8M>!O]&!HH'F(G'@_\P? J#_SE_!8/O
M,.L.@_\J=1J+7@B#1@@"BS^X"@#W9NB)1N@!?NC_1N;KQ\=&X @_]L= 6#
M_TQU%O]&X(M>!H _ '0+BUX&_T8&B@>8B<=7Z1<!_T;@OQ ZP[_1N"_"@#K
M!O]&X+\( (-^X !T&8M>"(-&" 17_W<"_S=6Z$[^@\0(B<;IZ0"+7@B#1@@"
M5_\W5NC8_8/$!HG&Z=, _T;@@W[@ '0\BUX(@T8(!(L'BT\"B4;<B4[>@W[>
M 'T.Q@0M1O=>W/=>WH->W@"X"@!0_W;>_W;<5NCS_8/$"(G&Z8X BUX(@T8(
M HL'B4;L@W[L 'T'Q@0M1O=>[+@* %#_=NQ6Z&?]@\0&B<;K8\=&XB Q@0_
M1NM8QT;B( "+7@B#1@@"BP>(!$;K1<=&XB BUX(@T8( HL'B4;P@W[P '4%
MQT;P*A.#?N@ =07'1NC_?XMV\( \ '06_T[H?!%&Z_.)^(@$1NL'N_(26.F1
M#HGP*T;PB4;LBT;J*T;LB4;J@W[J 'T%QT;J "#?N0 =0/W7NJ#?NH ?3.+
M7O" /RUU&X-^XC!U%8M>\/]&\(H'F/]V!%#H1P!;6_].[/]V!/]VXN@Y %M;
M_T;J=?#_3NQ\%(M>\/]&\(H'F/]V!%#H'0!;6^OG@W[J '4#Z6']_W8$_W;B
MZ < 6UO_3NKKYU6)Y5!05HMV!E<Q__9$!!AT![C__U#IJP#V1 0"=0>X__]0
MZ9X ]D0$!'0;N $ 4(U&!%#_-.A&"X/$!HE&_L=$ @$ 1^M(QP9<)[Q5BT0(
MB<.#PP$QR8I.!%&)7 B)PUB(!XM$ D")1 *!? ( !'P>]D0$@'48_W0"_W0&
M_S3H_0J#Q :)1OZ+1 :)1 A'"?]T*X-^_@!^"(M&_CE$ G08@W[^ 'T'@4P$
M$ #K!8%,! @ N/__4.L+QT0" QP(I&!%!8Z08058GE5HMV!%>+?@:*!)A0
MB@6863G!= V*!)A0B@6862G!4>L.@#P =04QP%#K!$9'Z]E87UZ)[%W#58GE
M_W8$,<!0N P 4+@! %#HR0J#Q B)[%W#58GE_W8$_W8&N \ 4+@! %#HK@J#
MQ B)[%W#58GE_W8$_W8&N @ 4+@! %#HDPJ#Q B)[%W#58GEBT8$!4 ,<E1
M45%1_W8&4+@I %"X 0!0Z#(*@\00B>Q=PU6)Y?\V "-1@90_W8$Z$0 @\0&
MZ4(/58GE4%:-1@:)QHGS@\8"@S\ = +K]/\TC48&4/]V!.@< (/$!ND9#U6)
MY?\V #_=@;_=@3H!@"#Q ;I! ]5B>6![!0(5E?'AO+W #'AO#W "+1@:)
MAO[WBT8(B8;\]XN>_O>#AO[W H,_ '0&_X;R]^OLBY[\]X.&_/<"@S\ = ;_
MAO#WZ^R+AO#W X;R]]'@!08 C9X ^ '#B=Z+GO+W ?,#GO#WC48 .<-R#<<&
MA"<' +C__U#I)P&-A@#XB<>+AO+WB06#QP+'AO3W "+AO+W.8;T]WU6C88
M^(GQ*<&)CNSWBX;L]XD%@\<"BUX&@T8& HL'B8;V]XN>]O> /P!T(8N>]O?_
MAO;WB@>(!$:-1@ YQG+CQP:$)P< N/__4.F\ ,8$ $;_AO3WZZ#'!0 @\<"
MQX;T]P BX;P]SF&]/=]58V& /B)\2G!B8[L]XN&[/>)!8/' HM>"(-&" *+
M!XF&]O>+GO;W@#\ =""+GO;W_X;V]XH'B 1&C48 .<9RX\<&A"<' +C__U#K
M4,8$ $;_AO3WZZ''!0 @\<"C88 ^(GQ*<%!NP( B<B9]_O1X(F&[O<QP%"-
MA@#X4/]V!#' 4/^V[O?_=@3H#@E;4+@[ % QP%#H-0B#Q!!06.E9#56)Y5:+
M=@0QP%"X5B=05C' 4+@& %!6Z. (6U"X.P!0,<!0Z <(@\00Z2X-58GE@SY<
M)P!T!HL.7"?_T3' 4%!04%#_=@2X 0!0,<!0Z-T'@\00Z04-58GE,<!04%!0
M4/]V!+@! % QP%#HP >#Q!#IZ Q5B>505C'V@_X4?1J)\]'C@[^Z$@!T#(GS
MT>/_M[H2Z D 6T;KX5Z)[%W#58GE4%:+=@17]D0$!'4&]D0$ G4%,<!0ZS>#
M? ( ?P4QP%#K+/]T O]T!O\TZ#P'@\0&B<<Y? )U#L=$ @ BT0&B40(5^L)
M@4P$$ "X__]06%]>B>Q=PU6)Y3' 4%!04%!0N ( 4#' 4.@B!X/$$(GL7<-5
MB>7'!CX3"'2+3@2)#CH3N#8 4+@! %#HBP=;6PG ?04QP%#K!+@! %!8Z1L,
M58GE4%8QP%!0_W8&4%#_=@2X' !0N $ 4.C1!H/$$(G&B?!>B>Q=PU6)Y3'
M4%!04%#_=@2X!@!0N $ 4.BM!H/$$(GL7<-5B>6X!@!0Z/\#4.@% %M;Z<$+
M58GE,<!04%!0_W8&_W8$N"4 4#' 4.AZ!H/$$(GL7<-5B>56BW8&5XM^!#'
M4%974%;H*P=;4%?H)0=;4+@) %"X 0!0Z$L&@\007UZ)[%W#58GE4%:+3@2)
M#CH3BTX&B0Y $XM."(D.0A.+3@J)#CP3N!, 4+@! %#HH09;6XG&"?9T!XGP
MF5)0ZPC_-D(3_S9 $UA:7HGL7<-5B>505HL.8"<#3@2!P?\#@>$ _(G..39@
M)W<)5NB, EL)P'0%,<!0ZQR+'F GB7?^QT3^ #_-F GZ/\!6XDV8">X 0!0
M6.G;"E6)Y8/L#%97@WX$ '4%QT8$ @#'1O0 (-^] )R ^FB (M&!$ E_O\%
M @")1O:#/F(G '4BN 0 4.A= EN)QHGP0"7^_XG&@\8"B39B)XDV8"?'1/X
M ,=&_@ BS9>)PGV=$R+1/Z)1OJ+7O8!\XG?.7[Z<P+K,8M&^HU- CG!<P^+
M1OJ)1?Z)?/Z+!(D%B3R#?OX = F+!(M>_HD'ZP:+#(D.7B=6ZQV)=OZ+-.NP
M_W;VZ #_6PG =0+K!O]&].E5_S' 4%CI$ I5B>6#[ Q65XM&!D E_O\% @")
M1O:+7@2+1_Z)1OJ+1OHK1@2)1O3'1OX (LV7B<)]G0\.7;Z<P+K-3EV^G4I
MBUX$BT3^B4?^@W[^ '0)BP2+7OZ)!^L&BPR)#EXGBUX$BT?^B4;ZZP>)=OZ+
M-.O BU[V UX$B=\Y?OIR((M&^HU- CG!<Q&+1OJ)1?Z+7@2)?_Y7Z)$ 6_]V
M!.LG_W8&Z)/^6XG'"?]U!3' 4.L5_W;T5_]V!.@/ (/$!O]V!.AF %M76.E(
M"56)Y5:+=@97BWX$BT8(_TX("<!T"HG[1XH'B 1&Z^SI)@E5B>504%97BT8$
M]V8&B48$_W8$Z#;^6XG&"?9U!3' 4.L8B?>+1@2)P8/I 8E.! G = ;&!0!'
MZ^M66.GH"%6)Y5!05E<Q_XLV7B<)]G0-.78$<P+K!HGWBS3K[XM>!(DW"?]T
M!XM&!(D%ZP>+3@2)#EXG"?9T&(M>!#EW_G40BUX$BT3^B4?^BP2+7@2)!PG_
M=!B+1@0Y1?YU$(M>!(M'_HE%_HM>!(L'B07I> A5B>505C' 4%#_=@104%"X
M$0!0,<!0Z#,#@\00B<8)]G4-BPY($XD.,A,QP%#K!+C__U!8Z4((58GE4%!6
M5XL^,A.+7@0#'C(3B=Z#?@0 ?@HY]W8&N/__4.L05NBA_UL)P'4#5^L$N/__
M4%CI"0A5B>6#[ 965^@U (G'BW8$B?-&@#\ = +K]DY.@#Q8=1:Y"@")^)GW
M^8/",(@4B?B9]_F)Q^ODBT8$7UZ)[%W#58GE,<!04%!04%"X% !0,<!0Z(@"
M@\00B>Q=PU6)Y?]V!/]V!K@% %"X 0!0Z*D"@\0(B>Q=PU6)Y5!65XM^!#'
M4%!04%!0N"H 4+@! %#H2@*#Q!")Q@GV?!*+#CH3B0V+#CP3B4T",<!0ZP%6
M6%]>B>Q=PU6)Y5!6,<!04/]V!E#_=@C_=@2X P!0N $ 4.@) H/$$(G&B?!>
MB>Q=PU6)Y5!05HMV!E>+1@31X"T" (G#B[]D)XM&!-'@+0( B<.)MV0GBTX$
MB0XZ$X/^ 70$"?9U U;K!+CB6U"/!D03N# 4#' 4.@] EM;B4;^@W[^ 74#
MOP$ @W[^ 'T%_W;^ZP%76.G !E!345)65U4>!HGCBU\2B=A+ =N+GV0G_S8X
M$U#_TUB/!C@3!Q]=7UY:65M8CP8T$\]5B>505E>+?@0QP%#_=@974%!7Z!H"
M6U"X$@!0N $ 4.A 8/$$(G&B?!?7HGL7<-5B>505HMV!%>+?@:)=OZ / !T
M T;K^( ] '0*B?M'B@>(!$;K\<8$ (M&_E]>B>Q=PU6)Y5!6BW8$5XM^!HEV
M_H ] '0*B?M'B@>(!$;K\<8$ (M&_E]>B>Q=PU6)Y5!6BW8$5XGW@#P = -&
MZ_B)\"GX7UZ)[%W#58GE5HMV!%>+?@:#?@@ ?P4QP%#K+XGS1HH'F(G[1U"*
M!YA9.<%U$(!\_P!T!?]."'7C,<!0ZPV*1/^84(I%_YA9*<%16.F=!56)Y?]V
M!#' 4+@* %"X 0!0Z)D @\0(B>Q=PU6)Y5!65XM^!#' 4%!04%!0N < 4#'
M4.@[ (/$$(G&"?9\"@G_= :+#CH3B0V)\.E/!56)Y3' 4%#_=@90_W8(_W8$
MN 0 4+@! %#H!P"#Q!")[%W#58GEBTX(B0XZ$XM."HD./!.+3@R)#CX3BTX.
MB0Y $XM.$(D.0A.+3A*)#D03_W8&_W8$Z%4 6UN)[%W#58GE4%!65_]V"NB$
M %N)QXD^.A.+3@B)#CP3BTX*B0X^$[Y $X/_#G\4B?A/"<!T#8M>"O]&"HH'
MB 1&Z^S_=@;_=@3H" !;6U]>B>Q=PU6)Y5!6BTX&B0XX$[@V$U#_=@3HT0!;
M6XG&"?9T U;K&X,^.!, ?1"+#C@3]]F)#H0GN/__4.L$_S8X$UA>B>Q=PU6)
MY5!6BW8$5S'_B?-&@#\ = -'Z_6)^$!?7HGL7<-5B>6#[ 96BW8$5S'_QT;Z
M "*!)BCAB>#/H8G('0<@SZ&)PET%8,^AB<-= Z#/H8G"G0'@SZ&)PQU T;K
MU( \+74&1L=&^@$ B?-&B@>8+3 B4;\@W[\"G,,N H ]^>)QP-^_.OB@W[Z
M '0'B?CWV%#K 5=87UZ)[%W#N0$ ZPJY @#K!;D# .L 58GEBT8$BUX&S2!=
MPU6)Y8/L"%:+=@17QT;\ #'1OX #'_B@28B<.*AT\3F*@(= -&Z^^ /"UU
M!$:_ 0")\T:*!Y@M, ")1OJ#?OH*<RFX"@ QTO]V_O]V_.B+ 8E&_(E6_C'
MBT[\BU;^ T[Z$<*)3OR)5O[KQ0G_=!&+1OR+3O[WV??8@]D 45#K!O]V_O]V
M_%A:7UZ)[%W#58GE4%:+=@17,?^*!)A0BD8&F%DYP74"B?>)\T: /P!UZ8GX
M7UZ)[%W#6UE:6%:)YH=< EXYTW</<@8YR'<)= 2X___#,<##N $ PXL7BT\"
M@\,$27P4.P=U]HM? H7;=0>X% !0Z>0!_^.)T^OO5E>)YHM<!HM$")F)USG"
M=38ATGT$]]MT+C'2BTP*BT0,(<!]"/?8]]D9T/?7]_.1]_,A_WT']]GWV(/9
M (G*7UY;@\0(_^-2B<<QVR'_?0?WW_=<!AG?BT0*BU0,(=)]"??:]]@9VO=4
M_KD0 -'@T=+1TSG?=P=R"3E4!G8$XNWK""M4!AG[0.+C7^NE5E>)YHM<!HM$
M" G =1<QTHM,"HM$#/?SD??SB<I?7EN#Q C_XXG',=N+1 J+5 RY$ #1X-'2
MT=,YWW<'<@DY5 9V!.+MZ]0K5 89^T#BX^O*B>-2B<'W9P1:4(G0]V<"6@'"
MB<B)T?=G @'*6X/$!/_C5E>)YHM<!HM$")DYPG4Z(=)]!/?;=#(QTHM,"HM$
M#"' ?0;WV/?9&=#W\Y'W\S';@WP, 'T']]OWVH/; (G0B=I?7EN#Q C_XXG'
M,=LA_WT']]_W7 89WXM$"HM4#"'2?0;WVO?8&=JY$ #1X-'2T=,YWW<'<@DY
M5 9V!.+MZ[ K5 89^T#BX^NF5E>)YHM<!HM$" G =1LQTHM,"HM$#/?SD??S
M,=N)T(G:7UY;@\0(_^.)QS';BT0*BU0,N1 T>#1TM'3.=]W!W().50&=@3B
M[>O2*U0&&?M XN/KR.A9 .C# +@& +KZ$^LPN!( NA$4ZRBX% "Z*!3K(+@!
M +H_%.L8N ( NE84ZQ"X$@"Z;!3K"+@1 +J#%.L ,=N''K 4A=MT!5#_TUC#
MNQ8 4U*X @!0Z#L Z$/SB<*#^A5S$='BN] 3 =.+'X7;= 2)VNL>NZ$4N08
MB<*!X@< Q8P (@72]'ZT?K1^N+MNI,4ZZI5B>7'!HHG! "+7@2)'HPGBUX(
MB1Z.)XM>!HD>DB>XB"=0N $ 4+@! +N()[D# ,T@B>Q=P^C3\E]>B>Q=PUY?
MZ_A;65I85HGFAUP"7CG3?P]\!CG(=PET!+C__\,QP,.X 0## "1(96%D
M97(Z('!A=&-H+F,L=B R+C N,2XU(#@X+S V+S S(#$U.C Y.C,W(&QW86QL
M($QO8VME9" D *0! $ O=&UP+W!A=&-H;UA8
M6%A86 O=&UP+W!A=&-H:5A86%A86 O=&UP+W!A=&-H<EA86%A86 O=&UP
M+W!A=&-H<%A86%A86 @ 0 "] P
M "-E;'-E"@ #N!Q, 0@"$!D0 V@9& %('3@!Z!U( QP=3 -4'8@!J!F,
MG@9D *<&90!!!V8 2@=L &D';@!Q!V\ @@=P )L'<@"L!W, S@=V -P'> #A
M!QH,!P * -4+( #Q"R$ \0LJ +*P#Q"RT \0L] &L+3F]T(&5N;W5G:"!M
M96UO<GD@=&\@=')Y('-W87!P960@:'5N:R$@($%S<W5M:6YG('5N<W=A<'!E
M9"X* !,;W-T(&AU;FL@;VX@86QL;V,@97)R;W(A"@ 3&]S="!H=6YK(&]N
M(&%L;&]C(&5R<F]R(0H $EG;F]R:6YG('!R979I;W5S;'D@87!P;&EE9" H
M;W(@<F5V97)S960I('!A=&-H+@H )7-E=F5R<V5D("AO<B!P<F5V:6]U<VQY
M(&%P<&QI960I('!A=&-H(&1E=&5C=&5D(2 @)7,@+5(_(%MY72 %( 56YR
M $%S<W5M90 26=N;W)E !!<'!L>2!A;GEW87D_(%MN72 $QO<W0@:'5N
M:R!O;B!A;&QO8R!E<G)O<B$* !(=6YK(",E9"!I9VYO<F5D(&%T("5L9"X*
M $AU;FL@(R5D(&9A:6QE9"!A=" E;&0N"@ 2'5N:R C)60@<W5C8V5E9&5D
M(&%T("5L9 @=VET:"!F=7IZ("5L9 ("AO9F9S970@)6QD(&QI;F4E<RD
M <P N"@ "@I286X@;W5T(&]F(&UE;6]R>2!U<VEN9R!0;&%N($$M+71R
M>6EN9R!A9V%I;BXN+@H* ", )60@;W5T(&]F("5D(&AU;FMS(&EG;F]R960M
M+7-A=FEN9R!R96IE8W1S('1O("5S"@ E9"!O=70@;V8@)60@:'5N:W,@9F%I
M;&5D+2US879I;F<@<F5J96-T<R!T;R E<PH %EO=2!M87D@;F]T(&-H86YG
M92!T;R!A(&1I9F9E<F5N="!P871C:"!F:6QE+@H "L 5&]O(&UA;GD@9FEL
M92!A<F=U;65N=',N"@!#86XG="!C9"!T;R E<RX* !!<F=U;65N="!T;R M
M1"!N;W0@86X@:61E;G1I9FEE<BX* C:69D968@)7,* C:69N9&5F("5S
M"@ C96YD:68@+RH@)7,@*B\* !5;G)E8V]G;FEZ960@<W=I=&-H.B E<PH
M $]F9G-E="!C:&%N9VEN9R!F<F]M("5L9"!T;R E;&0* !/9F9S970@8VAA
M;F=I;F<@9G)O;2 E;&0@=&\@)6QD"@ ("HJ*BH @+2TM+0 @+2TM+2T
M "HJ*BHJ*BHJ*BHJ*BHJ*@H "HJ*B P)7,* J*BH@)6QD)7,* J*BH@
M)6QD+"5L9"5S"@ +2TM(# E<PH "TM+2 E;&0E<PH "TM+2 E;&0L)6QD
M)7,* E<P )6,@)7, 1F%T86P@:6YT97)N86P@97)R;W(@:6X@86)O<G1?
M:'5N:R@I+@H $]U="UO9BUS>6YC('!A=&-H+"!L:6YE<R E;&0L)6QD+2UM
M86YG;&5D('1E>'0@;W(@;&EN92!N=6UB97)S+"!M87EB93\* &]L9&-H87(@
M/2 G)6,G+"!N97=C:&%R(#T@)R5C)PH =P!P871C:#H@8V%N)W0@8W)E871E
M("5S+@H '< <&%T8V@Z(&-A;B=T(&-R96%T92 E<RX* !P871C:#H@;6ES
M;W)D97)E9"!H=6YK<R$@;W5T<'5T('=I;&P@8F4@9V%R8FQE9"X* &EL/25L
M9"!L9FP])6QD"@ /____\# 'T __________^3)@<
M"0!E)0H 924@ !\F(0"M)"H +B K *TD+0#N(2T =P!P871C:#H@8V%N)W0@
M8W)E871E("5S+@H '( <&%T8V@@9FEL92 E<R!N;W0@9F]U;F0* !P871C
M:#H@;W5T(&]F(&UE;6]R>2 H9W)O=U]H=6YK;6%X*0H &1O;F4* $AM;2XN
M+@ ("!)9VYO<FEN9R!T:&4@=')A:6QI;F<@9V%R8F%G92X*9&]N90H " @
M22!C86XG="!S965M('1O(&9I;F0@82!P871C:"!I;B!T:&5R92!A;GEW:&5R
M92X* @("5S;V]K<R!L:6ME("5S('1O(&UE+BXN"@ 3 !4:&4@;F5X="!P
M871C:"!L !A(&YO<FUA;"!D:69F &%N(&5D('-C<FEP= 82!N97<M<W1Y
M;&4@8V]N=&5X="!D:69F !A(&-O;G1E>'0@9&EF9@ *%!A=&-H(&ES(&EN
M9&5N=&5D("5D('-P86-E)7,N*0H <P!.;R!F:6QE('1O('!A=&-H+B @
M4VMI<'!I;F<N+BX* $9I;&4@=&\@<&%T8V@Z( !.;R!F:6QE(&9O=6YD+2US
M:VEP('1H:7,@<&%T8V@_(%MN72 %-K:7!P:6YG('!A=&-H+BXN"@ *BHJ
M( +2TM( 26YD97@Z !0<F5R97$Z "X* J*BHJ*BHJ*@ *BHJ(
M/" #X@ !4:&4@=&5X="!L96%D:6YG('5P('1O('1H:7,@=V%S.@HM+2TM
M+2TM+2TM+2TM+2TM+2TM+2TM+2TM+0H 'PE<P M+2TM+2TM+2TM+2TM+2TM
M+2TM+2TM+2TM+0H *BHJ*BHJ*BH " @"@!5;F5X<&5C=&5D(&5N9"!O9B!F
M:6QE(&EN('!A=&-H+@H *BHJ*BHJ*BH %5N97AP96-T960@96YD(&]F(&AU
M;FL@870@;&EN92 E;&0N"@ 56YE>'!E8W1E9" J*BH@870@;&EN92 E;&0Z
M("5S P+# 1'5P;&EC871E("(M+2TB(&%T(&QI;F4@)6QD+2UC:&5C:R!L
M:6YE(&YU;6)E<G,@870@;&EN92 E;&0N"@ E<R B+2TM(B!A="!L:6YE("5L
M9"TM8VAE8VL@;&EN92!N=6UB97)S(&%T(&QI;F4@)6QD+@H %!R96UA='5R
M90!/=F5R9'5E $AU;FL@=&]O(&QA<F=E("@E;&0@;&EN97,I(&%T(&QI;F4@
M)6QD.B E<P ( H $YO("TM+2!F;W5N9"!I;B!P871C:"!A="!L:6YE("5L
M9 H "5S"B5S"B5S"@ H1F%S8VEN871I;F<M+71H:7,@:7,@<F5A;&QY(&$@
M;F5W+7-T>6QE(&-O;G1E>'0@9&EF9B!B=70@=VET:&]U= !T:&4@=&5L;'1A
M;&4@97AT<F$@87-T97)I<VMS(&]N('1H92 J*BH@;&EN92!T:&%T('5S=6%L
M;'D@:6YD:6-A=&4 '1H92!N97<@<W1Y;&4N+BXI %)E<&QA8V5M96YT('1E
M>'0@;W(@;&EN92!N=6UB97)S(&UA;F=L960@:6X@:'5N:R!A="!L:6YE("5L
M9 H 9FEL;'-R8R E;&0L(&9I;&QD<W0@)6QD+"!R8B E;&0L(&4K,2 E;&0*
M !(=6YK('1O;R!L87)G92 H)6QD(&QI;F5S*2!A="!L:6YE("5L9#H@)7,
M "HJ*B E;&0L)6QD"@ 56YE>'!E8W1E9"!E;F0@;V8@9FEL92!I;B!P871C
M:"!A="!L:6YE("5L9"X* #P@97AP96-T960@870@;&EN92 E;&0@;V8@<&%T
M8V@N"@!5;F5X<&5C=&5D(&5N9"!O9B!F:6QE(&EN('!A=&-H(&%T(&QI;F4@
M)6QD+@H +2TM(&5X<&5C=&5D(&%T(&QI;F4@)6QD(&]F('!A=&-H+@H +2TM
M("5L9"PE;&0* !5;F5X<&5C=&5D(&5N9"!O9B!F:6QE(&EN('!A=&-H(&%T
M(&QI;F4@)6QD+@H /B!E>'!E8W1E9"!A="!L:6YE("5L9"!O9B!P871C:"X*
M $YO="!E;F]U9V@@;65M;W)Y('1O('-W87 @;F5X="!H=6YK(0H )3-D("5C
M("5C("5S !-86QF;W)M960@<&%T8V@@870@;&EN92 E;&0Z("5S "]U<W(O
M8FEN+V5D("5S O=7-R+V)I;B]E9" M("5S !W "X* !W"@ <0H
M _____________U!A=&-H:6YG(&9I;&4@)7,@=7-I;F<@4&QA;B E
M<RXN+@H $$ 0@ H0W)E871I;F<@9FEL92 E<RXN+BD* !20U,O)7,E<P
M+'8 &-O("UL("5S !#86XG="!F:6YD("5S+2UA='1E;7!T:6YG('1O(&-H
M96-K(&ET(&]U="!F<F]M(%)#4RX* !#86XG="!C:&5C:R!O=70@)7,N"@
M4T-#4R\E<R5S ',N !G970@+64@)7, 0V%N)W0@9FEN9" E<RTM871T96UP
M=&EN9R!T;R!G970@:70@9G)O;2!30T-3+@H 0V%N)W0@9V5T("5S+@H $-A
M;B=T(&9I;F0@)7,N"@ E<R!I<R!N;W0@82!N;W)M86P@9FEL92TM8V%N)W0@
M<&%T8V@N"@ 0V%N)W0@;W!E;B!F:6QE("5S"@!787)N:6YG.B!T:&ES(&9I
M;&4@9&]E<VXG="!A<'!E87(@=&\@8F4@=&AE("5S('9E<G-I;VXM+7!A=&-H
M:6YG(&%N>7=A>2X* %1H:7,@9FEL92!D;V5S;B=T(&%P<&5A<B!T;R!B92!T
M:&4@)7,@=F5R<VEO;BTM<&%T8V@@86YY=V%Y/R!;;ET@ $%B;W)T960N"@!'
M;V]D+B @5&AI<R!F:6QE(&%P<&5A<G,@=&\@8F4@=&AE("5S('9E<G-I;VXN
M"@!R $-A;B=T(&]P96X@9FEL92 E<PH 0V%N)W0@;W!E;B!F:6QE("5S"@!7
M87)N:6YG.B!T:&ES(&9I;&4@9&]E<VXG="!A<'!E87(@=&\@8F4@=&AE("5S
M('9E<G-I;VXM+7!A=&-H:6YG(&%N>7=A>2X* %1H:7,@9FEL92!D;V5S;B=T
M(&%P<&5A<B!T;R!B92!T:&4@)7,@=F5R<VEO;BTM<&%T8V@@86YY=V%Y/R!;
M;ET@ $%B;W)T960N"@!';V]D+B @5&AI<R!F:6QE(&%P<&5A<G,@=&\@8F4@
M=&AE("5S('9E<G-I;VXN"@!#86XG="!S965M('1O(&=E="!E;F]U9V@@;65M
M;W)Y+@H <&%T8V@Z(&-A;B=T('=R:71E('1E;7 @9FEL92X* !P871C:#H@
M8V%N)W0@=W)I=&4@=&5M<"!F:6QE+@H $-A;B=T(')E;W!E;B!F:6QE("5S
M"@ $5R<F]R(')E861I;F<@=&UP(&9I;&4@)7,N"@ M $UO=FEN9R E<R!T
M;R!S=&1O=70N"@!P871C:#H@:6YT97)N86P@97)R;W(L(&-A;B=T(')E;W!E
M;B E<PH <&%T8V@Z('=R:71E(&9A:6QE9 H 'X 36]V:6YG("5S('1O("5S
M+@H <&%T8V@Z(&-A;B=T(&)A8VMU<" E<RP@;W5T<'5T(&ES(&EN("5S"@
M36]V:6YG("5S('1O("5S+@H <&%T8V@Z(&-A;B=T(&-R96%T92 E<RP@;W5T
M<'5T(&ES(&EN("5S+@H <&%T8V@Z(&EN=&5R;F%L(&5R<F]R+"!C86XG="!R
M96]P96X@)7,* '!A=&-H.B!W<FET92!F86EL960* !P871C:#H@8V%N)W0@
M8W)E871E("5S+@H '!A=&-H.B!I;G1E<FYA;"!E<G)O<BP@8V%N)W0@<F5O
M<&5N("5S"@!P871C:#H@=W)I=&4@*"5S*2!F86EL960* $]O<', '!A=&-H
M.B!O=70@;V8@;65M;W)Y("AS879E<W1R*0H +V1E=B]T='D &UK9&ER &9E
M=&-H;F%M92 E<R E9" E9 H +V1E=B]N=6QL %)#4R\E<P +'8 %-#0U,O
M)7,E<P!S+@ )7,*4&%T8V@@;&5V96PZ("5D"@ O8FEN+W-H '-H M8P
M+V)I;B]S: !S: +6, "=* P!A -9)<@ )2G< MDD 0!6(U8C 0
M $( 5A]6'P( & "<$J82L!(
M IDT# &$ ATUR )]-=P" 3391#0!$ '%03P V4%4 +E!8
M "908P#L4&0 =%!E .%09@#A4&< X5!O #E0<P#_4'4 ,5!X "E0*&YU;&PI
M "@)P " @(" @(" @( @(" @(
M(" @(" @(" @(" @(" @(" @"! 0$! 0$! 0$! 0$! 0$ 0$! 0$! 0$! 00
M$! 0$! 004%!04%! 0$! 0$! 0$! 0$! 0$! 0$! 0$0$! 0$!!"0D)"0D("
M @(" @(" @(" @(" @(" @(" A 0$! @ /Q16% /H3
M "#%!$4$10H%$5R<F]R.B!$:79I<VEO;B!B>2 P( H
M26QL96=A;"!%32!I;G-T<G5C="=N"@!%<G(@:6X@14T@8V%S92!I;G-T<B *
M %9A<FEA8FQE(&]U="!O9B!R86YG90H 17)R(&EN($5-('-E="!I;G-T<B *
M $9L;V%T:6YG('!T(&YO="!I;7!L+@H 2&5A<"!O=F5R9FQO=R * $5-('1R
:87 @,# P,# P,"!O8W1A; H H">@)P !A
endrheffel@cs2.wsu.edu (05/30/89)
I have seen a lot of requests on the net asking how to apply the
patches from bugs.nosc.mil, vm1.nodak.edu, or BITNET's
listserv@ndsuvm1. So, I decided to write this little note to help
others.
First, I want to express some very strong opinions. AST's MINIX
is a great for learning about operating systems. I started first on
VM/CMS, then moved to PC-DOS, subsequently UNIX. I have come to
appreciate UNIX thoroughly. The main drawback to UNIX is its
interface. For hackers like myself, the spartan interface is dandy.
But for everyone else, it is a major pain in the rear.
I would like to see UNIX become as dominant in the upper-end PCs
as DOS is on 8088/86 and 286 machines. However, I believe this will
not be the case. Why? The tools, such as Turbo[ Assembler, C, Pascal]
as well as end-user programs have such a nice rapport with the end-user
that will cause them to promote an operating system such as OS/2 PM or
WINDOWS-based DOS.
What do I think should be done about this situation?
First, I have been working on modifying MINIX so that a floppy
disk (5 1/4) or micro-disk (3 1/2) can be formatted from MINIX so it
can be used solely by MINIX (faster, since no boot, FAT, or DIR sectors
is necessary) or can be used by PC-DOS. The requirement that MINIX use
another operating system to format its diskettes defeats the purpose of
an OS.
I also believe that all programs should have a flag "?" or "-?"
that will display the syntax of the command. Of course, programs
expecting stdin will need to be re-written to accomodate this flag.
The ramifications extend further. What happens if the command is
sitting in the middle of a pipeline with the "?" flag activated?
Nevertheless, I am using in a personal capacity Allen Holub's
getargs() routine found in Dr. Dobb's Journal May 1985. I will write
such a routine from scratch at some point with some improvements and
place it in the public domain. But, I suggest that people look at the
article and the following source code:
/* getargs.h */
/* Typedefs and defines needed for getargs */
#define INTEGER 0
#define BOOLEAN 1
#define CHARACTER 2
#define STRING 3
#define PROC 4
typedef struct {
unsigned arg : 7;
unsigned type : 4;
int *variable;
char *errmsg;
} ARG;
/* GETARGS.C Command line argument processor for C programs */
/* (C) Copyright 1985, Allen I. Holub. All rights reserved. */
/* This program may be copied for personal, non-profit use only */
/* Dr. Dobb's Journal May 1985 */
#include <stdio.h>
#include "getargs.h"
typedef int (*PFI)();
static char *setarg( argp, linep)
ARG *argp;
char *linep;
{
/* Set an argument. */
/* argp points at the argument table entry corresponding to *linep. */
/* Return linep, updated to point past the argument being set */
++linep;
switch(argp->type) {
case INTEGER : *argp->variable = stoi(&linep);
break;
case BOOLEAN : *argp->variable = 1;
break;
case CHARACTER : *argp->variable = *linep++;
break;
case STRING : *(char **)argp->variable = linep;
linep = "";
break;
case PROC : (* (PFI)(argp->variable) )(linep);
linep = "";
break;
default : fprintf(stderr, "INTERNAL ERROR: BAD ARGUMENT TYPE\n");
break;
}
return(linep);
}
static ARG *findarg(c, tabp, tabsize)
int c, tabsize;
ARG *tabp;
{
/* Return pointer to argument table entry corresponding to c */
/* or 0 if c isn't in table. */
for (; --tabsize >= 0; tabp++)
if (tabp->arg == c)
return(tabp);
return(0);
}
static pr_usage(tabp, tabsize)
ARG *tabp;
int tabsize;
{
/* Print the argtab in the form: */
/* -<arg> <errmsg> (value is <*variable>) */
for (; --tabsize >= 0; tabp++)
switch(tabp->type) {
case INTEGER : fprintf(stderr, "-%c<num> %-40s (value is ",
tabp->arg, tabp->errmsg);
fprintf(stderr, "%-5d)\n", *(tabp->variable) );
break;
case BOOLEAN : fprintf(stderr, "-%c %-40s (value is ",
tabp->arg, tabp->errmsg);
fprintf(stderr, "%-5s)\n", *(tabp->variable) ? "TRUE" : "FALSE" );
break;
case CHARACTER : fprintf(stderr, "-%c<c> %-40s (value is ",
tabp->arg, tabp->errmsg);
fprintf(stderr, "%-5c)\n", *(tabp->variable) );
break;
case STRING : fprintf(stderr, "-%c<str> %-40s (value is ",
tabp->arg, tabp->errmsg);
fprintf(stderr, "<%s>)\n", *(char **)tabp->variable);
break;
case PROC : fprintf(stderr, "-%c<str> %-40s\n",
tabp->arg, tabp->errmsg);
break;
}
}
#define ERRMSG "Illegal argument <%c>. Legal arguments are:\n\n"
int getargs(argc, argv, tabp, tabsize)
int argc, tabsize;
char **argv;
ARG *tabp;
{
/* Process command line arguments. Stripping all command line switches */
/* out of argv. Return a new argc. If an error is found, exit(1) is */
/* called (getargs won't return) and a usage message is printed showing */
/* all arguments in the table. */
register int nargc;
register char **nargv, *p;
register ARG *argp;
nargc = 1;
for (nargv = ++argv; --argc > 0; argv++)
if (**argv != '-') {
*nargv++ = **argv;
nargc++;
} else {
p = (*argv) + 1;
while (*p)
if (argp = findarg(*p, tabp, tabsize) )
p = setarg(argp, p);
else {
fprintf(stderr, ERRMSG, *p);
pr_usage(tabp, tabsize);
exit(1);
}
}
return(nargc);
}
/* STOI.C More powerful version of atoi */
/* Copyright (C) 1985 by Allen Holub. All rights reserved. */
/* This program may be copied for personal, non-profit use only */
/* Dr. Dobb's Journal May 1985 */
#define islower(c) ('a' <= (c) && (c) <= 'z')
#define toupper(c) (islower(c) ? (c) - ('a' - 'A') : (c) )
int stoi(instr)
register char **instr;
{
/* Convert string to integer. If string starts with 0x it is */
/* interpreted as a hex number, else if it starts with a 0 it */
/* is octal, else it is decimal. Conversion stops on encountering */
/* the first character which is not a digit in the indicated radix */
/* *instr is updated to point past the end of the number */
register int num=0;
register char *str;
int sign=1;
str = *instr;
while (*str == ' ' || *str == '\t' || *str == '\n')
str++;
if (*str == '-') {
sign = -1;
str++;
}
if (*str == '0') {
++str;
if (*str == 'x' || *str == 'X') {
str++;
while( ('0' <= *str && *str <= '9') ||
('a' <= *str && *str <= 'f') ||
('A' <= *str && *str <= 'F') ) {
num *= 16;
num += ('0' <= *str && *str <= '9') ? *str - '0' : toupper(*str) - 'A' + 10;
str++;
}
} else
while ('0' <= *str && *str <= '7') {
num *= 8;
num += *str++ - '0';
}
} else
while ('0' <= *str && *str <= '9') {
num *= 10;
num += *str++ - '0';
}
*instr = str;
return( num * sign);
}
Furthermore, a graphical interface is now the de facto standard
(Menu Headers and pull-down menus). I know this means all that
overhead in terms of code and extra-time to do the programming. But,
end-users expect to be able to use software without having to RTFM. And
in the end, it will be free-market forces that decide whether UNIX will
grow in popularity or will be just a second-class OS used primarily by
DOD and universities. Clearly, the window system called X (I wish they
would simply call it X Windows) is out of the question under MINIX.
However, I did obtain mgr.tar.Z from bugs.nosc.mil and will be taking a
look at that later. This also may be too large for MINIX (I don't yet
know). If mgr is too complex or too code intensive, a simple menu
header and pop-down window scheme can be found in Al Steven's C
programming column of the Sept and Oct 88 issues of Dr. Dobb's Journal.
This interface is simple yet elegant. I also typed in this code, but I
made a mistake somewhere and can not seem to find it.
As of right now, I would like to see these authors (Allen Holub
and Al Stevens) donate these specific routines to the public domain. I
think that these routines together could be used to develop a
consistent interface that would be extremely easy to use both in a DOS
and UNIX (particularly MINIX) environment.
If you haven't caught the drift of this diatribe, let me state it
explicitly. I believe that no-one has a monopoly (copyright or patent)
on a user-interface. I am clearly dismayed by the look-and-feel
litigation trend in industry. My position is quite simply that a
screen (crt, monitor) is simply another data structure that is
fundamental to computer science. A consistent interface is necessary
across all hardware configurations. Let us briefly examine an analogy.
Road signs indicating hazards and driving conditions are pretty much
standardized internationally. This allows a traveller to proceed from
country to country without having to be licensed in every country. The
benefits are enormous. Looking at the other side of the coin, the best
example would be Great Britain and her former colonies. They drive on
the wrong side of the road, require cars with steering wheels in the
passenger's seat, etc. It takes time to learn to navigate in these
backward countries.
Even more importantly, I am outraged by the fact that file-formats
are proprietary as viewed by the courts in the SEAware vs. PKware case.
Files are just streams of meaningless information to be deciphered by a
program. This judgment is a serious detriment to the whole industry
unfortunately.
The only protection that should be accorded developers is for
their source code. Reverse-engineering is very common. Most cars
require a combustion engine (not solar or electric). But some car
manufacturers build a sports car like a Porche, others build a reliable
family car like a Chevy, and yet others build a funeral-box car like a
Yugo (I stay). Some applications are faster and more comfortable to
use but accomplish the same tasks as does another vendor's application.
The classic example is PKware's archiver versus SEAware's.
My last comment concerns the legal community. We are living in a
new age, the INFORMATION AGE. Most judges are not technologically
competent (having skills in EE and Computer Science). They simply do
not have the background to understand these issues. Yet, their
decisions will have very profound ramifications upon society. This
deficiency is highly disconcerting. What can be done about this
situation? I really don't know. Pray, I suppose. Apart from praying, I
hope that some of the giants (IBM, INTEL, Chips & Technologies,
Microsoft, ATT) will pressure law schools to accept students with
backgrounds in these areas and provide scholarships to individuals
willing to continue their education in this field. I hope that these
companies will also push legislation to increase judges salaries so
that they are equitable with those found in industry. Why should
anyone work for less than they could get elsewhere? Remember the
standing joke is that the biggest division at IBM is the legal division
and not the manufacturing division.
-------------------------------------------------------------------------------
Returning to the original subject matter dealing with MINIX PATCHES:
I confess that I was having difficulty upgrading from MINIX 1.2 to
1.3 using the upgrades found on the net. I found this particularly
annoying because I have used patch to upgrade the floppy device driver
to handle 3 and 1/2 inch drives and a few other utilities. But I was
at a complete loss when applying the diff patches to move from MINIX
ver 1.2 to ver 1.3. The following text documents how (and why I chose
a particular manner to accomplish this feat) I did it.
First, grab the following files from bugs.nosc.mil via ftp:
"patch", "d1.1-1.2.tar.Z", and "d1.2-1.3.tar.Z".
The following is a log of an ftp session that accomplishes the task at
hand.
ftp bugs.nosc.mil
Name (bugs.nosc.mil:rheffel): anonymous
Password (bugs.nosc.mil: anonymous): guest
cd pub/Minix/bin
type binary
get patch
cd ../d1.1-1.1
get d1.1-1.2.tar.Z
cd ../d1.2-1.3
get d1.2-1.3.tar.Z
close
quit
At this point, you will have copied in binary format 3 files from
the remote host. The files are: patch, the upgrade from ver 1.1 to
1.2, and the upgrade from ver 1.2 to 1.3. I strongly recommend that you
rename d1.1-1.2.tar.Z to d1112.trz and d1.2-1.3.tar.Z to d1213.trz.
Why should you rename the files. Remember that DOS allows only 3
characters for a file's extension. We will use *.trz under DOS as the
equivalent of UNIX's *.tar.Z.
Somehow, you must transfer the files down to your PC from your
local host. The files must be transfered in binary format just as
before. I am assuming that you are transferring these files to a PC-
DOS partition. Personally, I have not yet tried running kermit under
MINIX yet. The file mxkermit.tar.Z is available from bugs.nosc.mil. I
have read that the modem handling under MINIX is not quite stable yet
so that is the reason I assume that these files are being transferred
to a PC-DOS subdirectory.
If you have ftp on your PC, you can follow the same sequence as
above except for changing directory. If you don't have ftp, you can
use KERMIT. By typing "kermit -ix", you will invoke the kermit server
on the local host. It will transfer the file images (binary format).
Next type "get patch", "get d1112.trz", and "get d1213.trz".
At this point, you should now have these 3 files on your PC. But
first lets cover the aspect of getting the equivalent files from a
different remote host.
Note: You can get the equivalent files from vm1.nodak.edu on internet
or listserv@ndsuvm1 on BITNET. The major difference is that the files
are in ASCII format.
If you are dialing in to vm1.nodak.edu, I presume that you are on
internet and can get the files. The following is a transcript of such
a session.
ftp bugs.nosc.mil
Name (vm1.nodak.edu:rheffel): anonymous
Password (vm1.nodak.edu: anonymous): guest
cd MINIX
type ascii
get commands.patch
mget minix.*
close
quit
If you are on an IBM mainframe and are using BITNET, then you may
use the following command to retrieve one file at a time. Type "TELL
LISTSERV@NDSUVM1 GET MINIX 1112A". Admittedly, this process of asking
for one file at a time is painfully slow. If anyone knows of a better
method, please let me know. (I assume that REXX could be programmed to
expand a wildcard or a script file could be built).
Regardless of whether you accessed vm1.nodak.edu or
listserv@ndsuvm1, the naming convention on that remote host follows
IBM's standard convention. The files are MINIX.1112[A-D],
MINIX.1213[A-Z] and MINIX.1213[AA-AE]. The files to upgrade from 1.3
to 1.4 are found as MINIX.1314A-[F1-F2], and MINIX.1314A-[0-9].
After I had copied the files from the remote host to my local
host, I renamed the files as follows since DOS allows only 3 characters
for the extension. MINIX.1112[A-] was renamed to M1112.[A-],
MINIX.1213[A-Z] was changed to M1213.[A-Z], MINIX.1213[AA-AE] was
transformed to M1213.[AA-AE]. Do you get the picture. For those of you
unfamiliar with this notation, let us take a specific file and show you
what was done:
MINIX.1213AA was renamed to M1213.AA
This renaming scheme will work on both UNIX and IBM systems.
Then I downloaded the files to PC-DOS. This method prevented the
terminal emulation package from truncating the name to something
obscure. Another advantage from this new naming scheme is that it will
permit us to write a shell script to UNSHAR the files M1213.[A-W]
unattended.
-------------------------------------------------------------------------------
You will need to be able to uncompress files that end in *.Z. To
do this, you first must compile the compress command.
cc -i -o compress compress.c
The -i flag must be specified in order for this command to work.
Remember that you must always transfer compressed files (ending in *.Z)
in binary format.
The next step is to transfer the files from your DOS partition to
your MINIX partition. The type of file that you downloaded (binary or
ASCII format) will determine the switch settings on the dosread command
line.
If your file is a binary file (file is from bugs.nosc.mil), you
will want to type the following:
dosread c ver13/d1213.trz > d1213.tar.Z
dosread c ver13/patch > patch
If your file is an ASCII file, you will want to use the "-a" flag
as follows. Notice that I read the file patch from the DOS partition
as patchvm onto the MINIX partition. There is a good reason for doing
so, but will not be covered now. Please note that I demonstrate how to
read in the ASCII files m1213.* in the following command. Do not
however type this for each and every file. Use the Ralph Clark's
modified script included below to automatically read an entire DOS
directory (eg, dosrdall c vm1 [where the files are on c: drive ind
subdirectory \vm1]).
dosread -a c ver13/m1213.aa > m1213.aa
dosread -a c ver13/patch > patchvm
If you got your version of patch from vm1.nodak.edu or
listserv@ndsuvm1, you will need to do the following after you have read
in the file onto MINIX partition.
uudecode patchvm
compress -d patch.Z
As you noticed, the uncompressing of patch.Z created a file called
patch. Now you understand why it was desirable to read the file patch
from DOS to MINIX as patchvm and not as patch.
The above 2 steps are not necessary if you got your version of
patch from bugs.nosc.mil.
Regardless of where you obtained patch, remember to change its rwx
flags so that it is executable.
chmod 755 patch
I include Ralph Clark's script (which I have modified sligthly) to
allow you to read all the files from a PC-DOS subdirectory on a
particular drive.
Path: cod!nosc!ucsd!ames!amdahl!pyramid!prls!philabs!ttidca!clark
From: clark@ttidca.TTI.COM (Ralph Clark)
Newsgroups: comp.os.minix
Subject: my read-all-from-dos script (version 23)
Keywords: dosread
Message-ID: <2951@ttidca.TTI.COM>
Date: 24 Jul 88 06:45:23 GMT
Organization: Citicorp/TTI, Santa Monica
Lines: 20
Here's the one I've been using since the first time my fingers got tired
of backspacing to put the -a in the right place :
----------------cut me---------------
#/********************************************************************/
#/************ Modified version of Ralph Clark's DOSRDALL ************/
#/******************* modified by Rich Heffel ************************/
#/******************** handles only ASCII files **********************/
#dosrdall - read all files from DOS physical drive to current directory
echo "dosrdall [drive [directory]]"
getlf "to proceed, press RETURN"
for FILE in `dir $1 $2 | grep -v [a-z] | tr[A-Z] [a-z]`
do
echo $FILE
dosread -a $1 $2/$FILE > $FILE
done
----------------cut me---------------
The grep -v gets rid of the title and footer from dosdir, which have
lower case letters. I wish there were an option in dosread-write-dir to
suppress the noise and just give file names. This script needs addition
of a parameter to specify a dos subdirectory.
Remember to change the rwx flags to execute by typing:
chmod 755 dosrdall
#Ralph Clark (clark@ttidca.tti.com) {csun|philabs|psivax}!ttidca!clark
---
-------------------------------------------------------------------------------
The next major step is to apply the patches. The files from
vm1.nodak.edu and listserv@ndsuvm1 are in ASCII format already. The
files from bugs.nosc.mil are not and must be uncompressed and extracted
from the tape archive. How is this accomplished?
As an example, we will take the file d1.2-1.3.tar.Z which we had
renamed to d1213.trz previously. First, rename d1213.trz to
d1213.tar.Z.
mv d1213.trz d1213.tar.Z
compress -d d1213.tar.Z
This command unpacks (uncompresses) the file. Next, we must extract
the files from this newly created tar file.
tar vx d1213.tar
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
The file "diff.patch" that was extracted from bugs.nosc.mil's
d1213.tar (our renamed file) corresponds to vm1.nodak.edu's and
listserv@ndsuvm1's minix.1213[aa-ae] and minix.[x-z].
The question that remains is "How do we apply these patches?"
First, we must note that the patch command unfortunately uses the
subdirectory /tmp for scratch work and does not allow a flag to specify
another directory for scratch use. (The lack of this needed feature is
indicative of some of the drawback's of UNIX besides being a classic
example of poor programming technique. I confess that I too am guilty
of such poor practice.) Unfortunately, running patch requires more
than one floppy worth (mkfs /dev/fd0 360) of information. If you are
running a RAM DISK that means you probably do not have enough space,
and patch will choke.
The trick to overcome this is the following:
Normally, we mount our hard disk partition with the /usr file
system as follows. I will assume that /usr is on /dev/hd4, though this
need not be the case. In the file /etc/rc, we have a one-line command
that says "/etc/mount /dev/hd4 /usr".
Change this one-line command from "/etc/mount /dev/hd4 /usr" to
"/etc/mount /dev/hd4 /tmp". This change must be done in the file
/etc/rc. After you have applied the patches, you should change it back
to its original state.
Why must it be done in /etc/rc. Because if you try doing it after
you have logged in as "root", you will be notified that /tmp is busy.
Now logoff and reboot.
When you log in as "root", the file system will be found on /tmp.
If you are applying the file "diff.patch" from the tar.Z file from
bugs.nosc.mil, all you will need to do is to cd (change dir) to
subdirectory where the copy of the original 1.2 distribution is found
(usually /usr/minix/commands) and type the following.
patch < diff.patch
I presume that for those of you who are using vm1 or listserv's
patch and files, you would move the files m1213.[x-z] and m1213.[aa-ae]
to a newly created directory and cd to that directory. You could then
type the following:
for i in *
do echo $i; patch < $i
done
-------------------------------------------------------------------------------
Remember to change the file /etc/rc back to its original state and
to reboot.
Naturally, the next step should be to unshar all the files. This
refers to those files found on vm1 and listserv. The simplest way to
unshar the files is to write a simple script on the MINIX command line.
for i in m1213.*
do echo $i; sh < $i
done
If you have a PC, leave it unattended overnight. If you have an
AT or 386 machine, go out to dinner.
If you have any suggestions, please send them to me at the
following address:
rheffel@cs2.wsu.edu
HELMER%SDNET.BITNET@vm1.nodak.edu (Guy Helmer) (05/30/89)
I have a few comments about Rich's comments on upgrading MINIX. Over the past five months, I have upgraded from Minix 1.1 to Minix 1.3. The upgrade from Minix 1.1 to Minix 1.2 is the worst software nightmare I have ever had. The 1.1 shell couldn't handle the shar files and patch (binary from NDSUVM1) couldn't handle the diff files. I spent many hours with BRIEF under PC-DOS extracting files from the shars by hand, and I spent even more quality time changing the diff files so patch could handle them without choking. I don't even remember how I got around the problem of space on the root file system. I do know that after I finally had 1.2 source on my machine, I spent plenty of time watching every little thing compile just in case the 1.1 compiler would abort and leave my file systems in a mess. The neat thing was I had 1.2 up and running, and then I trashed the hard disk and hard to start over from Minix 1.1 on floppies. The upgrade from 1.2 to 1.3 wasn't nearly as painful, and in fact hurt less than a final exam in an upper-level Electrical Engineering course :-). Even though sh would choke with "can't create pipe" after running into the 11th file in a shar and I still had to modify the patch files, the upgrade went much better than the previous upgrade. With the new compiler binaries (again, from NDSUVM1), I now have a working 1.3 system. Good luck to those that are still upgrading. Many thanks go to those who assembled Dr. Tannenbaum's postings into nice "little :-)" packages and put these packages out on the net for the rest of us. Now, to put in Bruce's patches and get a protected, fast-interrupting Minix... -- Guy Helmer BITNET: HELMER@SDNET Dakota State College AT&T: (605) 256-5315 Technical Services, Development Group (605) 256-6411 Madison, SD 57042 Opinions are mine, all mine.
henry@utzoo.uucp (Henry Spencer) (06/01/89)
In article <16461@louie.udel.EDU> rheffel@cs2.wsu.edu writes: > Nevertheless, I am using in a personal capacity Allen Holub's >getargs() routine found in Dr. Dobb's Journal May 1985. I will write >such a routine from scratch at some point with some improvements and >place it in the public domain... You might want to consider that Unix already has a standardized, widely- used option parser, with a public-domain implementation available: getopt. It's not as good in some ways, but programs written using it will be much more portable. -- You *can* understand sendmail, | Henry Spencer at U of Toronto Zoology but it's not worth it. -Collyer| uunet!attcan!utzoo!henry henry@zoo.toronto.edu
paula@bcsaic.UUCP (Paul Allen) (06/01/89)
When I upgraded from 1.1 to 1.3, I used my Sun to apply the patches. With no worries about memory, stack space, disk space or cpu horsepower, the patching went fairly smoothly. Compared to a real Unix environment, Minix is a considerable pain to try to do any real work on. (And applying all those diffs is *real* work. :-) If you are faced with the prospect of upgrading using Minix itself as the development environment, my heart goes out to you! Based on the fact that many posters to this group have reported success, I'm certain that your quest is not hopeless. Many attempted- upgraders have also reported frustration and confusion after spending many hours in the trying. I don't see much joy in your ordeal. Paul Allen -- ------------------------------------------------------------------------ Paul L. Allen | pallen@atc.boeing.com Boeing Advanced Technology Center | ...!uw-beaver!bcsaic!pallen