[comp.sources.amiga] v91i100: virt alpha - virtual device driver, Part01/04

amiga-request@ab20.larc.nasa.gov (Amiga Sources/Binaries Moderator) (05/08/91)

Submitted-by: grahamw@cpsc.ucalgary.ca (William Graham)
Posting-number: Volume 91, Issue 100
Archive-name: devices/virt-alpha/part01

[ includes uuencoded executables  ...tad ]

	The Virtual Device is simply another path on your system, like RAM:
(except its called VIR:)....you can copy files to and from it like a RAM disk,
and like a RAM disk all files are lost when you power off.  But what you
can also do, which you cannot do with a RAM disk is not copy a file, but just
aquire a virtual reference to that files real location.  This way the VIR:
device can appear to have hundreds of megabytes of files online, but in fact
it actually goes out and retrieves them from where they are really stored
(sometimes prompting you to insert a disk).  So it acts as a *transparent*
disk manager as well.  You can access VIR: from anywhere, from SID, from DPAINT,
from anyplace you can access any other device (like RAM:, DF0: etc...).

	This is only an Alpha Version, there is no load save facility (although
I have a version here which is struggling to do that).  I will be upgrading.

	What I want at this point is to get feedback, inspiration, suggestions,
and any assistance that you may be willing to provide.

#!/bin/sh
# This is a shell archive.  Remove anything before this line, then unpack
# it by saving it into a file and typing "sh file".  To overwrite existing
# files, type "sh file -c".  You can also feed this as standard input via
# unshar, or by typing "sh <file", e.g..  If this archive is complete, you
# will see the following message at the end:
#		"End of archive 1 (of 4)."
# Contents:  bset.asm coal.s coal.uu executeme learn.uu makefile
#   mountlist.vir readme readme.2 virt_nice.uu virtual.uu
# Wrapped by tadguy@ab20 on Tue May  7 20:50:16 1991
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'bset.asm' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'bset.asm'\"
else
echo shar: Extracting \"'bset.asm'\" \(4775 characters\)
sed "s/^X//" >'bset.asm' <<'END_OF_FILE'
X
X;BSET.ASM
X;BZERO.ASM
X;
X;   Uses longword operations if data is aligned on a longword boundry
X;   and the size is a mulitple of 4.  Otherwise, uses byte operations.
X
X	xdef  _bset
X	xdef  _bzero
X
X_bzero
X	clr.l	D1
X	bra	begin
X_bset
X	move.b	15(A7),D1	;12(A7)-> msb . . lsb	(D1 = data)
Xbegin
X	move.l	4(A7),A0	;A0 = address
X	move.l	8(A7),D0	;D0 = byte count
X	andi.b	#3,11(A7)	;byte count on long word boundry?
X	bne	drop
X	andi.b	#3,7(A7)	;address on longword boundry?
X	bne	drop
X	bra	lwb
Xloop	move.b	D1,(A0)+	;BYTE SET LOOP
Xdrop	dbf.w	D0,loop 	;remember, only effects lower word
X	sub.l	#$10000,D0	;for buffers >65535
X	bpl	loop		;branch to loop because D0.W now is FFFF
X	rts
X
Xlwb	lsr.l	#2,D0		;byte count / 4 (longword chunks)
X	tst.l	D1		;BZERO
X	beq	dropl
X	move.b	D1,14(A7)	;15(A7) already contains the byte
X	move.w	14(A7),D1	;D1 0..15 set
X	swap	D1
X	move.w	14(A7),D1	;D1 16..31 set
X	bra	dropl
X
Xloopl	move.l	D1,(A0)+	;BYTE SET LOOP
Xdropl	dbf.w	D0,loopl	;remember, only effects lower word
X	sub.l	#$10000,D0	;for buffers >65535
X	bpl	loopl		;branch to loop because D0.W now is FFFF
X	rts
X
X
X
X;/*
X; *  The assembly tag for the DOS process:  CNOP causes alignment problems
X; *  with the Aztec assembler for some reason.  I assume then, that the
X; *  alignment is unknown.  Since the BCPL conversion basically zero's the
X; *  lower two bits of the address the actual code may start anywhere around
X; *  the label....  Sigh....  (see CreatProc() above).
X; */
X
X	xref	_debugmain
X	xdef	_debugproc
X
X	cnop	0,2
X	nop
X	nop
X	nop
X_debugproc:
X	nop
X	nop
X	movem.l D2-D7/A2-A6,-(sp)
X	jsr	_debugmain
X	movem.l (sp)+,D2-D7/A2-A6
X	rts
X
X
X
X
X	xdef	_FindHandler		; Find Handler of (A1) Name
X	xref	_DOSBase
X
X
X_FindHandler
X	move.l	4(a7),a1		; a1 = handler name to find
X	move.l	8(a7),a0		; a0 = dosbase
X	movem.l	d2-d7/a2-a6,-(a7)
X	move.l	44+12(a7),a4		; a4 = ptr to copy of vir_volumeID stuff
X	bsr	Find100
X	movem.l	(a7)+,d2-d7/a2-a6
X	rts
XFind100
X					; A0 = DosBase
X					; A1 = Named Handler to Find
X					; Capitalize
X	move.l	a1,a3			; (stash a1, next trashes a1)
X
X;
X; don't capitalize because
X; we're looking for the exact same
X; instance of device as
X; what we had before
X;
X; later on we can make it less specific when we support keys
X;
X					; A1 = Capitalize
X;2$	move.b	(a1)+,d0		; Parse User Input Chars
X;	beq.s	3$
X;	bmi.s	3$			; (some error, try contain error)
X;	cmp.b	#':',d0			; Allow ':' (or 0)
X;	beq.s	3$
X;	cmp.b	#' ',d0			; (some error, try contain error)
X;	bcs.s	3$
X;	cmp.b	#'a',d0			; Ignore if <a
X;	bcs.s	2$
X;	cmp.b	#'z',d0			; Ignore if >z
X;	bcc.s	2$
X;	sub.b	#32,-1(a1)		; Change to UpperCase
X;	bra.s	2$
X;3$	;clr.b	-1(a0)			; terminate
X
XFind200
X	move.l	34(a0),a0		; dl_root->struct RootNode
X	move.l	24(a0),a0		; rn_info->struct DosInfo
X	add.l	a0,a0			; BPTR -> APTR
X	add.l	a0,a0
X	move.l	4(a0),d0		; dl_DevInfo->struct DevicList
X					; Goto Next Device/Handler if Any
X0$	add.l	d0,d0			; BPTR -> APTR
X	beq.s	3$			; End Device/Handler List?
X	add.l	d0,d0
X	move.l	d0,a0
X	move.l	(a0),d0			; (Stash Next Device/Handler)
X	cmp.l	#2,4(a0)
X	bne.s	0$			; dl_Type == 2 != Handler?
X
X
X; (this being an extra picky robust check might be overkill, for example does
X;  a revalidation change the datestamp (and thus volume ID)?)
X; there should be a "be-stupid" option for cases like this, or intentional cases.
X
X					; this little section deviates from a
X					;   normal "findhandler"
X	;------------------		; Check if diskkeys match:
X
X	;move.l	16(a0),vir_VolID(a4)	; Volume->VolDays
X	;move.l	20(a0),vir_VolID+4(a4)
X	;move.l	24(a0),vir_VolID+8(a4)
X	;move.l	4(a0),vir_VolType(a4)	; Volume->Type (must == 2!)
X	;move.l	64(a0),vir_VolDiskType(a4)	; Volume->DiskType
X	;
X	;STRUCT	vir_VolID,ds_SIZEOF	; Volume DateStamp Positive ID
X	;LONG	vir_VolType		; Volume Type
X	;LONG	vir_VolDiskType		; Volume Disk Type 'NDOS'...
X
X	move.l	(a4),d1			; read vir_VolID
X	cmp.l	16(a0),d1		; compare to device VolID
X	bne.s	0$
X	move.l	4(a4),d1
X	cmp.l	20(a0),d1
X	bne.s	0$
X	move.l	8(a4),d1
X	cmp.l	24(a0),d1
X	bne.s	0$
X
X	move.l	12(a4),d1		; read vir_VolType
X	cmp.l	4(a0),d1		; compare to device VolType
X	bne.s	0$
X
X	move.l	16(a4),d1		; read vir_VolType
X	cmp.l	64(a0),d1		; compare to device VolType
X	bne.s	0$
X
X	;-------------------
X					; now check if names match (they should)
X					; (as per a normal findhandler search)
X	move.l	40(a0),d1
X	beq.s	0$			; dl_Name?
X	add.l	d1,d1
X	add.l	d1,d1
X	move.l	d1,a2			; (don't trash a0)
X	moveq	#0,d1
X	move.b	(a2)+,d1		; BSTR STRLEN > 0?
X	beq.s	0$
X	move.l	a3,a1			; Compare Handler Names
X	bra.s	2$
X1$	cmp.b	(a1)+,(a2)+
X	bne.s	0$
X2$	dbf	d1,1$
X	cmp.b	#':',(a1)		; Both Terminated?
X	beq.s	4$
X	tst.b	(a1)			; Permit ':' or 0 on Search String
X	bne.s	0$
X4$	move.l	a0,d0			; D0/A0 = Handler Node (C wants d0)
X	moveq	#1,d1			; Success (C doesn't need this but)
X	rts
X3$	moveq	#0,d0			; Failure (C wants D0=0 - just in case)
X	rts
END_OF_FILE
if test 4775 -ne `wc -c <'bset.asm'`; then
    echo shar: \"'bset.asm'\" unpacked with wrong size!
fi
# end of 'bset.asm'
fi
if test -f 'coal.s' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'coal.s'\"
else
echo shar: Extracting \"'coal.s'\" \(9828 characters\)
sed "s/^X//" >'coal.s' <<'END_OF_FILE'
X;********************************************************************
X;
X; NAME	: coal 1.0
X;
X; TEMPLATE	: coal <dir name> <dir name>
X;
X; DESCRIPTION	: coalesce duplicate files to point to single virtual reference
X;
X; AUTHOR	: Anselm Hook, from code from Stuart Mitchell's 'DU'
X;			(where Stuart got it from he's not saying....)
X;
X; DATE	: 20-3-91
X;
X; NOTES 	: 1) this thing requires the ARP shared library (v39.0+)
X;
X;********************************************************************
X
XARG_SOURCE	= 0
XARG_DEST	= 4
XARG_MERGE	= 8
XARG_DELETE	= 12
XARG_REAL	= 16
X
X
X;	STRUCTURE FileInfoBlock,0
X;	LONG	fib_DiskKey		; start of file on media
X;	LONG	fib_DirEntryType	; < 0 = file, > 0 = directory
X;	STRUCT	fib_FileName,108	; name
X;	LONG	fib_Protection		; sparwed
X;	LONG	fib_EntryType		; ???
X;	LONG	fib_Size		; byte size
X;	LONG	fib_NumBlocks		; block size
X;	STRUCT	fib_DateStamp,ds_SIZEOF	; last date
X;	STRUCT	fib_Comment,80		; null terminated comments
X;	STRUCT	fib_padding,36		; unused
X;	LABEL	fib_SIZEOF
X
X
X
X		section du,code
X
X		opt	d+,c- ;o+
X
X		incdir	"include:"
X
X		include "arpbase.i"
X		include "libraries/dos_lib.i"
X		include "libraries/dos.i"
X		include "exec/memory.i"
X
Xap_Flags = $10
X
X_LVOOpenLibrary 	equ	-$228
X_LVOCloseLibrary	equ	-$19e
X
XCALL		macro	(name)
X		jsr	_LVO\1(a6)
X		endm
X
Xstash1		macro	(name)
X		movem.l	d0-d7/a0-a6,stash10
X		endm
Xstash2		macro	(name)
X		movem.l	d0-d7/a0-a6,stash20
X		endm
Xunstash2		macro	(name)
X		movem.l	stash20,d0-d7/a0-a6
X		endm
Xunstash1		macro	(name)
X		movem.l	stash10,d0-d7/a0-a6
X		endm
X
X	move.l	a7,thestack
X	bra	start
Xthestack	dc.l	0
Xstash10	dcb.l	16,0
Xstash20	dcb.l	16,0
X
Xr_anchor	equr	a2
Xr_finfo 	equr	a3
Xr_current_arg	equr	a4
Xr_fpath	equr	a5
Xr_flags	equr	d1
Xr_files 	equr	d2
Xr_dirs	equr	d3
Xr_size	equr	d4
Xr_blocks	equr	d5
Xr_num_arg	equr	d6
Xr_zero	equr	d7
X
X; bitdefs for dir scan - should really be picked up from ArpBase.i ...
X
XDIDDIR	equ	3
XDODIR	equ	2
X
X;********************************************************************
X
Xstart:	move.l	d0,d2			; cache command line
X	move.l	a0,a2
X
X	moveq.l #0,r_zero
X
X; open ARP library
X
X	move.l	4.w,a6
X	lea	arplib(pc),a1
X	move.l	r_zero,d0
X	CALL	OpenLibrary
X	tst.l	d0
X	beq	exit
X	move.l	d0,a6
X
X; parse command line
X
X	move.l	a2,a0			; string
X	move.l	d2,d0			; length
X	lea	help(pc),a1
X	lea	args(pc),a2             ; pointer to arg array
X	lea	tplate(pc),a3
X	CALL	GADS
X	move.l	d0,r_num_arg		; count
X
X	tst.l	d0
X	bmi	closearp2		; tell user about failure etc
X
X;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
X; AH - code to check every file against every other file
X
X	move.l	args+ARG_SOURCE,r_current_arg	; src arg
X	bsr	find_first
X	beq	closearp
X	stash1
X0$	move.l	args+ARG_DEST,r_current_arg	; dest arg
X	bsr	find_first		; re-loop entire dest
X	beq	closearp
X	stash2
X1$	bsr	issame_coal
X	unstash2
X	bsr	find_next		; loop till exhausted
X	stash2
X	bne	1$
X	;bsr	print
X	unstash1
X	bsr	find_next
X	stash1
X	bne	0$
X	bsr	print
X	bra	closearp
X
Xissame_coal	unstash1
X	movem.l	r_finfo/r_fpath,-(a7)
X	unstash2
X	move.l	r_finfo,r_anchor
X	move.l	r_fpath,r_current_arg
X	movem.l	(a7)+,r_finfo/r_fpath
X					; now if r_anchor == r_finfo we have a match!
X
X					; not actually same file?
X	move.l	fib_DiskKey(r_finfo),r_size
X	move.l	fib_DiskKey(r_anchor),r_blocks
X	cmp.l	r_size,r_blocks
X	beq	1$
X					; both same size?
X	move.l	fib_Size(r_finfo),r_size
X	move.l	fib_Size(r_anchor),r_blocks
X	cmp.l	r_size,r_blocks	
X	bne	1$
X					; are both virtual files?
X					; (secretively imbedded in FIB)
X
X	;/* fib_Padding == fib_Reserved depending on your includes!! */
X
X	move.l	fib_Comment+72(r_finfo),r_size
X	move.l	fib_Comment+72(r_anchor),r_blocks
X	cmp.l	r_size,r_blocks
X	bne	1$
X	cmp.l	#'VIRT',r_blocks
X	bne.s	1$
X					; checksums match?
X					; (secretively imbedded in FIB)
X	move.l	fib_Comment+76(r_finfo),r_size
X	move.l	fib_Comment+76(r_anchor),r_blocks
X	cmp.l	r_size,r_blocks
X	bne	1$
X
X	move.l	r_fpath,matchfiles+4	; name of file
X	move.l	r_current_arg,matchfiles ; name of other file
X
X					; 1) DELETE DUPLICATE REFERENCE
X	tst.l	args+ARG_DELETE
X	beq	5$
X	lea	matchfiles(pc),a1	; address ptrs to args
X	lea	matchfmt100(pc),a0	; format string
X	bsr	myprintf
X	move.l	r_current_arg,d1	; delete dest ref
X	CALL	DeleteFile
X	bra.s	7$
X					; 2) OR MERGE DUPLICATE REFERENCE
X5$	tst.l	args+ARG_MERGE
X	beq.s	7$
X	lea	matchfiles(pc),a1	; address ptrs to args
X	lea	matchfmt150(pc),a0	; format string
X	bsr	myprintf
X					; 3) DELETE REAL
X7$	tst.l	args+ARG_REAL
X	beq.s	8$
X	lea	matchfiles(pc),a1	; address ptrs to args
X	lea	matchfmt200(pc),a0	; format string
X	bsr	myprintf
X	rts
X8$	;tst.l	args+ARG_REAL		; if all 0 just give stats
X	;bne.s	1$
X	tst.l	args+ARG_MERGE
X	bne.s	1$
X	tst.l	args+ARG_DELETE
X	bne.s	1$
X	lea	matchfiles(pc),a1
X	lea	matchfmt(pc),a0
X	bsr	myprintf
X1$	rts
X
Xmatchfiles	dc.l	0,0
Xmatchfmt	dc.b	"File %s and %s are the same",10,0
Xmatchfmt100	dc.b	"Retaining %s, killing duplicate %s",10,0
Xmatchfmt150	dc.b	"Copying duplicate %s to %s",10,0
Xmatchfmt200	dc.b	"Deleting *REAL* %s",10,0
X	even
X
Xcoalesce
X	rts
X
X;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
X
X
X;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
X; allocate memory for AnchorPath structure - note this is freed automatically
Xfind_first	move.l	#ap_SIZEOF+512,d0
X	move.l	#MEMF_PUBLIC|MEMF_CLEAR,d1
X	CALL	ArpAllocMem
X	tst.l	d0
X	beq	closearp
X	move.l	d0,r_anchor
X	move.b	#%00100001,ap_Flags(r_anchor)   ; DOWILD|DODOT
X	lea	ap_Info(r_anchor),r_finfo	; the FIB
X
X	; (ap_Flags and ap_Length overlap...I must have old docs!)
X	move.w	#512,ap_Length+2(r_anchor)	; 512 bytes for path name
X	lea	ap_Buf(r_anchor),r_fpath	; the file path name
X
Xinit_regs:	move.l	r_zero,r_files		; zero results
X	move.l	r_zero,r_dirs
X	move.l	r_zero,r_size
X	move.l	r_zero,r_blocks
X					; find first file/directory
X	move.l	r_current_arg,d0
X	move.l	r_anchor,a0
X	CALL	FindFirst
X	tst.l	d0
X	bne.s	no_files
X					; loop around in directory until all subdirectories/files exhausted
X					; first check if CNTL-C pressed
Xdu_loop:	move.l	r_zero,a1
X	CALL	CheckAbort
X	tst.l	d0
X	bne	break_pressed
X	move.b	ap_Flags(r_anchor),r_flags
X					; if DirEntryType <0 then we have a file
X	move.l	fib_DirEntryType(r_finfo),d0
X	blt.s	do_file
Xdo_dir: 	;tst.l	args+ARG_ALL		; Do Sub Dirs?
X	;beq.s	exit_dir
X
X	btst	#DIDDIR,r_flags		; DIDDIR bit set
X	beq.s	enter_dir		; no ... enter dir
X					; have just popped out of a directory, mark as finished & increment count
Xexit_dir:	bclr	#DIDDIR,r_flags
X	addq.l	#1,r_dirs
X	bra.s	find_next
X					; found a new directory, so enter it at next FindNext
Xenter_dir:	bset	#DODIR,r_flags
X	bra.s	find_next
X					; this ones a file, so increment count & size
Xdo_file:	addq.l	#1,r_files
X	add.l	fib_Size(r_finfo),r_size
X	add.l	fib_NumBlocks(r_finfo),r_blocks
X	moveq	#1,d0			; found a file! AH
X	rts
X					; find next file
Xfind_next:	move.b	r_flags,ap_Flags(r_anchor)   ; set directory handling
X	move.l	r_anchor,a0
X	CALL	FindNext
X	tst.l	d0
X	beq.s	du_loop 		; if zero then got something
X					; directory exhausted
X	bsr.s	free_anchor		; free mem
X	moveq	#0,d0			; failure AH
X	rts
X
X;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
X
X
X; print out results
X
Xprint:	movem.l r_files/r_dirs/r_size/r_blocks,files	 ; flush results
X
X	move.l	r_current_arg,a0     ; print directory name
X	bsr	myprintf
X	lea	fmt(pc),a0		; format string
X	lea	files(pc),a1		; address ptrs to args
X	bsr	myprintf
X
X	rts
X
X;; and do it all again;;  don't bother AH
X;
X;end_loop:	subq.l	#1,r_num_arg		; decrement arg count
X;	bra.s	main_loop		; and do next arg
X
X
X
X;********************************************************************
X; handle case when directory/file doesn't exist...
X
Xno_files:	move.l	r_current_arg,a0
X	bsr	myprintf
X	lea	not_exist(pc),a1
X	CALL	Puts
X	bsr.s	free_anchor		; free mem
X
X	moveq	#0,d0			; failure AH
X	rts
X
X	;bra.s   end_loop
X
X;********************************************************************
X
Xmyprintf	;tst.l	args+ARG_QUIET
X	;bne.s	1$
X	jmp	_LVOPrintf(a6)
X;1$	rts
X
X;********************************************************************
X; called if CNTL-C detected
X; NB: 1	- call to CheckAbort sets up a1 to point to break string
X;     2 - drop through to end of program
X
Xbreak_pressed:	; a1 = 0
X	CALL	Puts			; output "***BREAK"
X	bsr.s	free_anchor		; free mem
X	;bra.s	closearp
X
X;*******************************************************************
X; exit program - close ARP & return to DOS - call frees resources
X
Xclosearp:	move.l	a6,a1
X	move.l	4.w,a6
X	CALL	CloseLibrary
X	move.l	thestack(pc),a7
X
X	; system should exit before hitting this line...but
X
Xexit:	move.l	r_zero,d0
X	rts
X
X
Xclosearp2	move.l	args(pc),a1
X	CALL	PUTS
X	bra	closearp
X
X;********************************************************************
X; free anchorpath
X
Xfree_anchor:	move.l	r_anchor,a0		; free anchor
X	jmp	_LVOFreeAnchorChain(a6)
X
X;********************************************************************
X; data
X
Xfiles	dc.l	0
Xdirs	dc.l	0
Xsize	dc.l	0
Xblocks	dc.l	0
X	even
Xfmt	dc.b	" -- %ld files, %ld directories : %ld bytes (%ld blocks)",$0a,0
X	even
Xarplib	dc.b	"arp.library",0
X	even
Xargs	dc.l	0,0,0,0,0		; was char *args[] now is x args
X	even
Xhelp	dc.b	"FROM TO [MERGE/KILLREF/KILLREAL]",0
X	even
Xtplate	dc.b	'FROM,TO,MERGE/S,KILLREF/S,KILLREAL/S'
X	even
Xnot_exist	dc.b	" -- directory does not exist",0
X	end
X
X
X;*	- should not detect itself (using diskkey?) (vir fixed too)
X;*	- should use checksum (in comment field?) to determine duplc.
X;	- should print out full path name (lock file using fib?)
X;	- should do one of these things if duplicate found:
X;		connect reference to same dest
X;		delete duplicate reference
X;		delete real copy, and connect reference to same dest
X;		delete real copy, delete reference
X
X;		copy "file of name a" to "file of name b"
X;		delete "file of name b"
X;		extract real destination, delete that....
X
X
X;	lea	comm2(pc),a0
X;	move.l	a0,d1
X;	clr.l	d2
X;	clr.l	d3
X;	jmp	LVOExecute(a6)
X;comm2:	dc.b	'copy >nil: :dpaint :kodak',0
END_OF_FILE
if test 9828 -ne `wc -c <'coal.s'`; then
    echo shar: \"'coal.s'\" unpacked with wrong size!
fi
# end of 'coal.s'
fi
if test -f 'coal.uu' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'coal.uu'\"
else
echo shar: Extracting \"'coal.uu'\" \(2599 characters\)
sed "s/^X//" >'coal.uu' <<'END_OF_FILE'
Xbegin 666 coal
XM```#\P`````````!``````````````$,```#Z0```0PCSP````I@``"&````?
XM`````````````````````````````````````````````````````````````
XM`````````````````````````````````````````````````````````````
XM````````````````````````````````````````````````````)``D2'X`.
XM+'@`!$/Z`Q(@!TZN_=A*@&<``J8L0"!*(`)#^@,<1?H#!$?Z`S9.KO\$+`!*4
XM@&L``HPH>0```[AA``&J9P`";$CY?_\````.*'D```.\80`!E&<``E9(^7__7
XM````3F$``#I,^7__````3F$``?!(^7__````3F8`_^9,^7__````#F$``=A(W
XM^7__````#F8`_[AA``'<8``"$DSY?_\````.2.<`%$SY?_\```!.)$LH34S?(
XM*``H*P``*BH``+J$9P``I"@K`'PJ*@!\NH1F``"6*"L`V"HJ`-BZA&8``(BZN
XMO%9)4E1F?B@K`-PJ*@#<NH1F``!R(\T```(`(\P```'\2KD```/$9P``%D/Z\
XM`%I!^@![80`!BB(,3J[_N&`42KD```/`9PQ#^@`^0?H`@V$``6Y*N0```\AG(
XM#D/Z`"I!^@"+80`!6DYU2KD```/`9A1*N0```\1F#$/Z``Q!^@`080`!/$YUK
XM``````````!&:6QE("5S(&%N9"`E<R!A<F4@=&AE('-A;64*`%)E=&%I;FEN&
XM9R`E<RP@:VEL;&EN9R!D=7!L:6-A=&4@)7,*`$-O<'EI;F<@9'5P;&EC871EF
XM("5S('1O("5S"@!$96QE=&EN9R`J4D5!3"H@)7,*``!.=2`\```#&"(\``$`<
XM`4ZN_GI*@&<``+(D0!5\`"$`$$?J`!0U?`(``!)+Z@$8)`<F!R@'*@<@#"!*D
XM3J[^2DJ`9F@B1TZN_O)*@&8``'82*@`0("L`!&T4"`$``V<("($``U*#8!0(+
XMP0`"8`Y2@MBK`'S:JP"`<`%.=15!`!`@2DZN_D1*@&>Z85QP`$YU2/D`/```C
XM`V(@3&$``"1!^@!>0_H`2F$``!A.=2!,80``$$/Z`.I.KO\082QP`$YU3N[_\
XM'$ZN_Q!A'B).+'@`!$ZN_F(N>OS`(`=.=2)Z`&9.KO\08`#_Y"!*3N[^/@``:
XM```````````````````@+2T@)6QD(&9I;&5S+"`E;&0@9&ER96-T;W)I97,@@
XM.B`E;&0@8GET97,@*"5L9"!B;&]C:W,I"@``87)P+FQI8G)A<GD`````````*
XM``````````````````!&4D]-(%1/(%M-15)'12]+24Q,4D5&+TM)3$Q214%,9
XM70``1E)/32Q43RQ-15)'12]3+$M)3$Q2148O4RQ+24Q,4D5!3"]3("TM(&1I:
XM<F5C=&]R>2!D;V5S(&YO="!E>&ES=``````#[````!,``````````@```,@`=
XM``#8````W@```.X```#Z```!!@```1(```$>```!,@```3X```&,```!D@``I
XM`9@```&V```!R@```>````'H```#"`````````/P`````49-5`````-R`````
XM`4%21U,```.X`````41)4E,```-F`````458250```-,`````4A%3%````/,(
XM`````5-)6D4```-J`````D9)3$53```````#8@````)04DE.5````````P0`9
XM```"4U1!4E0```````".`````D%24$Q)0@`````#K`````)"3$]#2U,`````)
XM`VX````"1$]?1$E2``````+.`````E103$%410`````#[@````)$3U]&24Q%E
XM`````N(````"1%5?3$]/4`````*X`````E-405-(,3``````#@````)35$%3#
XM2#(P`````$X````"0TQ/4T5!4E````,^`````D-/04Q%4T-%```"=@````)%4
XM6$E47T1)4@```M0````"34%40TA&350```($`````DU94%))3E1&```#-```7
XM``).3U]&24Q%4P```R`````"5$A%4U1!0TL````*`````T-,3U-%05)0,@``%
XM`````U`````#14Y415)?1$E2```````"W`````-&24Y$7TY%6%0```````+PD
XM`````TE.251?4D5'4P```````J0````#3D]47T5825-4```````$$@````-&L
XM24Y$7T9)4E-4``````)X`````TU!5$-(1DE,15,``````?P````#1E)%15]!A
XM3D-(3U(````#7`````-)4U-!345?0T]!3`````$N`````TU!5$-(1DU4,3`PS
XM`````B$````#34%40TA&350Q-3`````"10````--051#2$9-5#(P,`````)AC
X@````!$)214%+7U!215-3140```````,X`````````_)#1
X``
Xend
Xsize 1832
END_OF_FILE
if test 2599 -ne `wc -c <'coal.uu'`; then
    echo shar: \"'coal.uu'\" unpacked with wrong size!
fi
# end of 'coal.uu'
fi
if test -f 'executeme' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'executeme'\"
else
echo shar: Extracting \"'executeme'\" \(1392 characters\)
sed "s/^X//" >'executeme' <<'END_OF_FILE'
X; run this utility when you are in the same directory as the unpacked archive
X; (from whence presumably you got this "executeme" file....
X;
X
Xecho "you must have ARP LIBRARY!!! to fully exploit the virtual device"
Xecho "(the virtual device doesn't need it but learn and coalesce do)"
X
Xecho "hi there!  I'm now going to mount vir: onto your very own system"
Xecho "so hold on...it should only take a second or two!"
Xecho "note: you may want to edit the startup sequence a bit...when I'm done"
X
Xcopy mountlist.vir devs:			; the mount info for vir:
Xcopy virtual l:					; the silly handler for vir:
Xcopy learn c:					; the acquisition utility
Xcopy coal c:					; the sorting utility
X
X						; the proper startup junk
X
Xecho >ram:gumbyfile "Mount VIR: FROM DEVS:mountlist.vir"
Xjoin ram:gumbyfile s:startup-sequence as s:vir-start
Xrename s:startup-sequence as s:startup-before-vir
Xrename s:vir-start as s:startup-sequence
X
XMOUNT VIR: FROM DEVS:mountlist.vir
X
Xecho "now try do this:"
Xecho "      learn c:a#? vir:#?	"
Xecho "		;(learn all files starting with an "a" to the virtual device!)
Xecho "	    cd vir:
Xecho "      type a#? opt h"
Xecho "		; you should see what appear to be regular files on vir:"
Xecho "	    virtualoff
Xecho "	    type a#? opt h"
Xecho "		; you should see what appear to be small files on vir:"
Xecho "	    virtualon
Xecho "		; now copy all kinds of stuff to vir:, see how much fits!!!"
END_OF_FILE
if test 1392 -ne `wc -c <'executeme'`; then
    echo shar: \"'executeme'\" unpacked with wrong size!
fi
# end of 'executeme'
fi
if test -f 'learn.uu' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'learn.uu'\"
else
echo shar: Extracting \"'learn.uu'\" \(3856 characters\)
sed "s/^X//" >'learn.uu' <<'END_OF_FILE'
Xbegin 666 learn
XM```#\P`````````!``````````````*A```#Z0```J%(YX"`0_H*/'`?+'@`.
XM!$ZN_=A*@&8,4$\N/``#@#9.[O^4+$!,UP$!3^__^$/Z"7(D3T?Z"AM.KO\$X
XM2D!#^@EB;P`!]"PO``S0AGX`(#P```,<3J[^@"1`=&=*@&<``?PE?````/\`3
XM$#5\``W__A5\`"$`$"IO``29S"!-$!AG:+`\`"-F$!`89UZP/``_9@9"*/_^C
XM8`:P/``J9N`H2$(@(%<@"&8&0?H)OBZ(>O]R`'@`$!AG++`\`#IG\+`\`"]GT
XMZK`\`"IG$K`\`"-G!E*!4H1@WDH89@)32$J%:M(J`6#.2H5M+F`P(@UT_DZN\
XM_ZPB`&>L)@%!Z@`4)`A.KO^:2H!G"DJJ`!AM!#X\__\B`TZN_Z9X`'H`(!<@&
XM2DZN_DHF$F8"?`$D`&9,871#Z@,80>H!&'(`2JH`&&TF2J\`"&<``!H(*@`#J
XM`!-G"`BJ``,`$V`8".H``@`38!!*@V8,<@%P`$ZN_@)*@&<(($I.KOY$8+)PZ
XM9R0`M'P`Z&<J(FH#&$ZN_@A*0F<``+!!^@A1M'P`S6```*I.KO\0=`!@WD/Z5
XM__9.[O[R("H#&&<``(PF0&'L0>L`!B)($!AG#K`\`"]G]+`\`#IG[F#N+PE#?
XMZ@(8($U@!!`8$L!*$&;X(%\B!V8F(@QG,K`\`"]G"+`\`#IG`M#%$MAF_%-)8
XM($Q*$&<"DL02V&;\8!!P.K`I__]G!!+\`"\2V&;\0>L`!D/J`AAA``"((FH#G
XM&"51`QA.KOZD8`#_=$ZN_Q!P`$ZN_H9)^@>=3J[_?"0`(FH#&$ZN_@@@3")/=
XM3J[_''`48-Y)^@>.=&=@Y$GZ!W=83V#60?H']W``+PDB3R0`3J[_'%!/(DU.7
XMKOX@(A=.KO^X2?H'E6"X3J[_?$'Z!W@B;P`$8-1.KO]\0?H'5R)78,@O!4CG]
XM`-Q*AF8*(D]!^@>R3J[_'"(7=/Y.KO^L(@!G`/]T+P!!^@)B(CP````@3J[^L
XMMD'Z!J0@@")7T\G3R4'Z`?`B:0`0T\G3R2%I`!``1"%I`!0`2"%I`!@`3"%IG
XM``0`4"%I`$``5"`7(@!!Z@`4)`A.KO^:(A<N@$ZN_Z8@'V<`_Q(J*@"0;P#_<
XM"B(\``(``2\.+'@`!$ZN_R@L7^*(!(```!.((CP```/0L(%N`B`!NH!M`BH`-
XM(`5.KOZ`2H!G`/[P)D`B%R0\```#[4ZN_G1*@&<`_KXH22(O``0D/````^Y.M
XMKOYT(@!G`/[.*DE#^@7J0I%"J0`$D\E.KO[R2H!F`/Z^(A0D"R8%3J[_UDJ`U
XM;0#^X&<``$(F`)/)3J[^\DJ`9@#^G"(52.?PP"!"0_H%JDS1``9P`&`($!C4'
XM@.(X4H%1R__V2-$`!DS?`P\@`["J`)!F`/^B0?H`U"%Z!8``!"%Z!7X`%"%ZN
XM!7P`&"%Z!7H`'"%Z!7@`($/J`!0A?%9)4E0``"%I````)"%I``0`*"%I`'0`,
XM+"%I`'@`,"%I`'P`""%I`(``-"%I`(0`."%I`(@`/"%I`(P`0$'H`%@@.@44(
XM(CP```/_L(%K`B`!T<!"&$/I`)!P3A(99P80P5'(__A"&$/Z`$:1R28(MKP`4
XM``2H9`XB%20)3J[_T+"#9@#]XB)-3J[^("),3J[^(")+3J[^($I&9@Q!^@6J)
XM0^\`!$ZN_QQ,WSL`*A].=0``````````````````````````````````````_
XM`````````````````````````````````````````````````````````````
XM`````````````````````````````````````````````````````````````
XM`````````````````````````````````````````````````````````````
XM`````````````````````````````````````````````````````````````
XM`````````````````````````````````````````````````````````````
XM`````````````````````````````````````````````````````````````
XM`````````````````````````````````````````````````````````````
XM`````````````````````````````````````````````````````````````
XM`````````````````````````````````````````````````````````````
XM`````````````````````````````````````````````````````````````
XM`````````````````````````````````````````````````````````````
XM`````````````````````````````````````````````````````````````
XM`````````````````````````````````````````````````````````````
XM`````````````````````````````````````````````````````````````
XM`````````````````````````````````````````````````````````````
XM`````````````````````````````````````````````````````````````
XM`````````````````````````````````````````````````````````````
XM`````````````````````````````````````````````````````````````
XM`````````````````````````````````````````````````````````````
XM`````````````````````````````````````````````````````````````
XM`````````````````````````````````````````````````````````````
XM`````````````````````````````````````````````````````````````
XM`````````````````````````````````````````````````````````````
XM`````````````````````````````````````````````````````````````
XM`````````````````````````````````````````````````````````````
XM`````````````````````````````````````````````````````````````
XM````````````````````````````=7-A9V4Z($QE87)N("AW:6QD8V%R9',I/
XM(%M43UT@*'=I;&1C87)D<R!O<B!D:7(I(%M!3$Q=(%M154E%5%T`0V%N)W0@G
XM;W!E;B`E<PH`3W5T(&]F(&UE;6]R>0H`"D5R<F]R(')E861I;F<@)7,*``I%#
XM<G)O<B!W<FET:6YG("5S"@!$97-T:6YA=&EO;B!F:6QE("(E<R(@<F5M;W9E7
XM9`H`87)P+FQI8G)A<GD``$923TTL5$\O02Q!3$PO4RQ154E%5"]3``HE<PH`P
X<("`@)7,N+@!L96%R;G0@=&\@)7,*```````#\DPO/
X``
Xend
Xsize 2728
END_OF_FILE
if test 3856 -ne `wc -c <'learn.uu'`; then
    echo shar: \"'learn.uu'\" unpacked with wrong size!
fi
# end of 'learn.uu'
fi
if test -f 'makefile' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'makefile'\"
else
echo shar: Extracting \"'makefile'\" \(344 characters\)
sed "s/^X//" >'makefile' <<'END_OF_FILE'
Xexecute s:lattice
Xassign env: ram:
X;lc >errs -v -r -d -y -b0 virtual.c <- works?
Xlc >errs -ccw -v -y -r virtual.c
Xtype errs
Xgenim2 >errs2 bset.asm -L
Xtype errs2
X;genim2 >errs3 learn.asm
X;type errs3
X;genim2 >errs4 coal.s
X;type errs4
Xblink virtual.o bset.o LIBRARY lib:lc.lib lib:amiga.lib to virtual SC SD ADDSYM
Xcopy  virtual l:Virtual-Handler
END_OF_FILE
if test 344 -ne `wc -c <'makefile'`; then
    echo shar: \"'makefile'\" unpacked with wrong size!
fi
# end of 'makefile'
fi
if test -f 'mountlist.vir' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'mountlist.vir'\"
else
echo shar: Extracting \"'mountlist.vir'\" \(87 characters\)
sed "s/^X//" >'mountlist.vir' <<'END_OF_FILE'
X
XVIR:	   Handler = L:Virtual
X	   Stacksize = 20000
X	   Priority = 5
X	   GlobVec  = 1
X#
END_OF_FILE
if test 87 -ne `wc -c <'mountlist.vir'`; then
    echo shar: \"'mountlist.vir'\" unpacked with wrong size!
fi
# end of 'mountlist.vir'
fi
if test -f 'readme' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'readme'\"
else
echo shar: Extracting \"'readme'\" \(4020 characters\)
sed "s/^X//" >'readme' <<'END_OF_FILE'
X
X		THE VIRTUAL DEVICE BY ANSELM HOOK
X		---------------------------------
X
X	This file contains some quick info about the virtual device
X
XCOMPILING:
X----------
X
X	I compiled under Lattice 5.1, genim2, Blink 5.1, and used CED with
X	tab stops set to 8,8,8,8 for C code, and 16,8,8,8,8,8 for Machine code
X	To remake the virtual handler go "execute makefile"
X	To remake learn or coalesce go "genim2 learn.asm", "genim2 coal.s"
X	There are some bugs in lattice 5.1 discussed in the file "virtual.c"
X
X
XARCHIVE CONTENTS:
X-----------------
X
X	There should be enclosed in this archive:
X		virtual		- virtual-handler
X		readme		- some quick info (this file)
X		executeme	- install vir: ("execute executeme")
X		mountlist.vir	- mountlist junk
X		learn		- virtual file acquisition utility
X		coal		- virtual file coalescing utility
X		virt_nice.wp	- nice user document
X		virt_mean.wp	- project proposal selling document
X		virt_mine.doc   - development "process", read for amusement....
X		virtual.c	- source (tek folk please read header)
X		bset.asm	- findhandler + other crap
X		learn.asm	- source for acquisition
X		coal.s		- source for coalesce
X		makefile	- (pseudo makefile, just execute don't make!!!)
X
XGENERAL COMMENTS:
X-----------------
X
X	The virtual device is both an ordinary device driver and a virtual
Xdevice driver.
X
X	You can "copy" files, to have real instances....
X
X	You can "learn" files to have virtual instances....
X
X	* You can determine the difference by going to the backdoor mode (which
X	  is a secret command  "virtualoff" as typed right after "cd vir:" :-)
X
X	The real benefit of the virtual device is to copy up *EVERYTHING* in
Xyour software universe by virtual reference.
X
X	The device recognizes some secret commands:
X	Just "cd vir:" and type any of the following:
X
X		"virtualon"
X		"virtualoff"
X		"debugon"
X		"debugoff"
X
XCREDITS:
X--------
X
X1)	The Dos Handler is Matt Dillons Dos Handler (thanks oh unwitting Matt!).
X
X	There is a new layer of functionality added onto the DOS handler, this
X	comprises the major portion of my contribution.  Some bugs were fixed
X	also.  See "virtual.c" very bottom.
X
X2)	Learn is based on the arp-copy command as "resourced" by yours truly.
X
X3)	Coalesce is based on 'DU' by Stuart Mitchell
X
X	Everything else is by moi, Andy Hook.
X
X	"Well Gee Andy...what did U do????"
X
X	"Well John Doe, its like this you see:
X
X	 Christopher Columbus was sitting around a table with a group of men,
X	 and they get to talking, and the men say 'Christopher, we don't
X	 believe that you actually sailed to America'.  And Cristopher being the
X	 circumglobular guy that he is says 'You see this egg?  Try and make it
X	 stand up by itself without any outsides supports'.  So this egg gets
X	 passed around the table...and nobody can make it stand up no matter
X	 how hard they try (for more than a moment).  So Christopher gets the
X	 egg back, and he goes THWACK, smashing into the table.  One of the
X	 men says 'Gee I could have done that'.  To which Chistopher replies,
X	 'but you didnt'."
X
X	Anyway, if it crashes don't forget your moral obligation to flame as
X	many people who were (wittingly or unwittingly) involved in the project
X	as you feel merits the severity of your annoyance!
X
X
X							Anselm Hook
X							Spring 1991
XPS:
X---
X	This device is by no means complete, if you read the specs in the
X	"virtual.doc" you'll see where I'm trying to head with this idea,
X	I'd love to get some help from other programmers in the Amiga
X	Community.  I'd actually like to make it a community supported
X	project, like the ARP library; such that the responsibility for
X	its update passes beyond the scope of any single individual.  But
X	there is significant work to be done...for example virtual.c must
X	be rewritten completely in machine code.
X
XPPS:
X----
X	Help! Am trapped in computer game development sweatshop!
X	Anybody got anything more sane for me to do?
X
XPPPS:
X-----
X	Chek out my latest at a retailer near U:
X		"Sword of Sodan for the Sega Genesis"
X		(By Innerprise and EA)
X	(Its even got my picture on the inside cover!)
END_OF_FILE
if test 4020 -ne `wc -c <'readme'`; then
    echo shar: \"'readme'\" unpacked with wrong size!
fi
# end of 'readme'
fi
if test -f 'readme.2' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'readme.2'\"
else
echo shar: Extracting \"'readme.2'\" \(2434 characters\)
sed "s/^X//" >'readme.2' <<'END_OF_FILE'
XDate: Sun, 28 Apr 91 17:55:14 MDT
XFrom: grahamw@cpsc.ucalgary.ca (William Graham)
XSubject: amiga virtual device
X
XAnselm Hook asked me to submit his virtual device to comp.sys.amiga.
XHere is a short poster file which he wrote; a longer doc file is included
Xin the uuencoded .lzh archive which I'll send in my next mail message.
X
X-------------------------------------------------------------------------------
X
XA VIRTUAL DEVICE DRIVER FOR THE AMIGA
Xor "THE POOR MANS FLOPTICAL"
X
XALPHA APRIL 15th 1991
XBy Anselm Hook
X
X	Its amazing that the Amiga is 5 yrs old and yet still has the best
Xoperating system on the market.  We all know that the Amiga supports a true
Xmultitasking operating system.  But the real proof of the pudding is the
Xfact that its extensible.  The customer supported open architecture of the
XAmiga Enviroment makes it possible for me to extend the functionality of
Xthe entire system.  The Virtual Device is in this sense, made possible by
Xthe excellence and forethought that went into the design of the OS.
X
X	Matt Dillion wrote the original File System on which this one is
Xbased.
X
X	The Virtual Device is simply another path on your system, like RAM:
X(except its called VIR:)....you can copy files to and from it like a RAM disk,
Xand like a RAM disk all files are lost when you power off.  But what you
Xcan also do, which you cannot do with a RAM disk is not copy a file, but just
Xaquire a virtual reference to that files real location.  This way the VIR:
Xdevice can appear to have hundreds of megabytes of files online, but in fact
Xit actually goes out and retrieves them from where they are really stored
X(sometimes prompting you to insert a disk).  So it acts as a *transparent*
Xdisk manager as well.  You can access VIR: from anywhere, from SID, from DPAINT,
Xfrom anyplace you can access any other device (like RAM:, DF0: etc...).
X
X	This is only an Alpha Version, there is no load save facility (although
XI have a version here which is struggling to do that).  I will be upgrading.
X
X	What I want at this point is to get feedback, inspiration, suggestions,
Xand any assistance that you may be willing to provide.
X
X	I can be reached on the AMUC VBBS in Calgary.
X
X	Yours Truly
X
X	Anselm Hook
X	C/O The Computer Shop
X	3515 18th St Sw
X	Calgary Alberta Canada
X	T2T 4T9
X	FAX:  243 2684
X
X
X-------------------------------------------------------------------------------
X
X - William Graham - grahamw@cpsc.ucalgary.ca - VE6UUG -
END_OF_FILE
if test 2434 -ne `wc -c <'readme.2'`; then
    echo shar: \"'readme.2'\" unpacked with wrong size!
fi
# end of 'readme.2'
fi
if test -f 'virt_nice.uu' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'virt_nice.uu'\"
else
echo shar: Extracting \"'virt_nice.uu'\" \(14743 characters\)
sed "s/^X//" >'virt_nice.uu' <<'END_OF_FILE'
Xbegin 666 virt_nice.wp
XM@("RLPH*"0E6:7)T=6%L(%=O<FL@4W!A8V4@;W(@5FER='5A;"!7;W)K($)E3
XM;F-H"@K#`"HAPT$@4%)/2D5#5"!04D]03U-!3(,*PP`J(\-B>2!!;G-E;&T@!
XM2&]O:X,*PP`J)<-*=6QY(#(@,3DX-X,*PP`J)<-*86X@,B`Q.3DQ@PH*"4%RV
XM92!Y;W4@;VYE(&]F('1H;W-E('!E;W!L92!W:&\@:&%S(&UA<W-E<R!A;F0@*
XM;6%S<V5S(&]F#69L;W!P>7,_($%N9"!D;V5S;B=T(&MN;W>R(")Q=6ET92!FB
XM;W(@<W5R92*S('=H:6-H(&9L;W!P:65S#6-O;G1A:6X@9'5P;&EC871E<R!O@
XM<B!M;W)E(')E8V5N="!V97)S:6]N<R!O9B!F:6QE<S\*"@E)9B!Y;W4G<F4@-
XM;&EK92!M92!Y;W4@<')O8F%B;'D@<F5L>2!O;B!T:&4@LB)T:&EN9W,@86QWN
XM87ES#6=E="!B:6=G97(BLR!H=6UA;B!A>&EO;2!T;R!F:6YD('1H92!M;W-T^
XM(')E8V5N="!V97)S:6]N(&]F('-O;64-9FEL92!T:&%T('EO=2!A<F4@=V]R;
XM:VEN9R!O;BX@($%N9"!Y;W4@<')O8F%B;'D@87!P;'D@82"R(FET<R!F;W(->
XM<W5R92!I;B!T:&4@;F5X="!A<F-H:79E(K,@86QG;W)I=&AM('1O(&9I;F1IA
XM;F<@=&AA="!F:6QE+@H*"5=E;&P@=V4@86QL(&MN;W<@86)O=70@=&AE<V4@-
XM;&ET=&QE(&AU;6%N(&9O;&EB;&5S+B`@0G5T(%=H>0U)(&%S:RP@9&]N)W0@E
XM=V4@;&5T('1H92!C;VUP=71E<B!T86ME(&-A<F4@;V8@86QL('1H:7,_("!"8
XM>2!T:&ES#4D@;65A;B!N;W0@82!D:7-K(&UA;F%G97(@;W(@<V]M92!S=6-H(
XM('5N=V]R:V%B;&4@;V1D:71Y+"!B=70@80V4(G9I<G1U86PBE2!E;G9I<F]M`
XM96YT+"!A(&MI;F0@;V8@E")S=7!E<B!W;W)K8F5N8V@BE2!W:&5R90UE=F5R(
XM>71H:6YG(&%P<&5A<G,@=&\@8F4@=FES:6)L92!A="!O;F4@=&EM92P@LF5V6
XM96X@:68@:70@:6X-87)C:&EV9;,@;W(@;V9F(&]N('-O;64@9FQO<'!Y('-O!
XM;65W:&5R92X@($%N9"!Y;W5R(&UE;G1A;`UA;F=U:7-H(&ES(')E9'5C960@2
XM;65R96QY('1O(&9I;F1I;F<@=&AE(&-O<G)E8W0@9&ES:R`M(&%S(&%G<F5ES
XM9`UU<&]N(&)E='=E96X@=&AE(&-O;7!U=&5R(&%N9"!Y;W5R<V5L9B!B>2!SG
XM;VUE('-I;7!L92!N=6UB97)I;F<-<V-H96UE("T@<F%T:&5R('1H86X@=')Y1
XM:6YG('1O(&1E8VED92!I9B!T:&4@9&ES:R!Y;W4@9&ED(&9I;F0@:7,-<FEGT
XM:'0@869T97(@86QL+@H*"4YO=R!H;W!E9G5L;'D@>6]U)VQL(&%G<F5E('=I^
XM=&@@;64@=&AA="!A(%9I<G1U86P@5V]R:R!3<&%C90UW;W5L9"!B92!A(")C[
XM;V]L(&YE871O(B!T:&EN9R!T;R!H879E+"!A;F0@<')O8F%B;'D@9F%N=&%S[
XM=&EC86QL>0UU<V5F=6PN("!!;F0@<')O8F%B;'D@>6]U)VQL('-A>2`B9V5EK
XM('=H>2!D:61N)W0@<V]M96)O9'D@=&AI;FL-;V8@=&AA="!B969O<F4_(BX@'
XM($)U="!W:&%T(&%B;W5T(&%L;"!U<R!P;V]R('5N9F]R='5N871E(&UI<V9IN
XM=',-=VAO(&AA=F4@86QR96%D>2!B=7)I960@;W5R<V5L=F5S(&EN(&$@;6%S$
XM<VEV92!L86YD<VQI9&4@;V8@,R`Q+S(-:6YC:"!F;&]P<&EE<RP@8F5R;F]U)
XM;&QI<RP@<WEQ=65S=',@86YD('-U8VAL:6ME/R`@5VAA="!H;W!E(&ES#71H@
XM97)E(&9O<B!U<S\@($%R92!W92!F;W)C960@=&\@9FQI;F<@;W5T(&]U<B!W)
XM;VYD97)F=6P@<V]L=71I;VX-=&\@=&AE('EO=6YG97(@9V5N97)A=&EO;B!A#
XM;F0@97AC;&%I;2`B9V\@;VX@=VET:&]U="!M92$_(@H*"4QU8VMI;'D@<&5RS
XM:&%P<R!N;W0A("!)9B!W92!W97)E('9E<GD@9V]O9"!S;V9T=V%R90UD97-IH
XM9VYE<G,@=V4@=V]U;&0@;6%K92!O=7(@5FER='5A;"!7;W)K(%-P86-E(&ENG
XM('-U8V@@82!W87D@=&AA=`UI="!N;W0@;VYL>2!M86EN=&%I;F5D('1H:7,@%
XM<F5P<F5S96YT871I;VYA;"!E;G9I<F]M96YT+"!B=70-8V]U;&0@86-T=6%L\
XM;'D@=6YS;F%R92!T:&4@9V]R9&EA;B!K;F]T('=E)W9E('=O=6YD(&]U<G-E;
XM;'9E<PUI;G1O+@H*"51H92!H=6UB;&4@<V-H96UE('=H:6-H($D@<W5B;6ETO
XM(&9O<B!Y;W5R(&%P<')O=F%L(&AA<PUT:')E92!P87)T<RP@=&AE('9I<G1U-
XM86P@=V]R:W-P86-E($DG=F4@86QR96%D>2!M96YT:6]N960L('1H90UI9&5AY
XM(&]F(&$@(F9L870B('=O<FMS<&%C92!W:&EC:"!I(&)R:65F;'D@=&]U8VAEA
XM9"!U<&]N('=H96X@20UU<V5D('1H92!W;W)D(")A<F-H:79E(B!A8F]V92`HW
XM86YD('=I;&P@8VQA<FEF>2!L871E<BDL(&%N9`UF:6YA;&QY(&%N9"!M;W-TG
XM(&EM<&]R=&%N=&QY('1H92!I9&5A(&]F(&%U=&]M871I8R!C;VQL871I;VX@8
XM86YD#7-O<G1I;F<@=VAI8V@@22!W:6QL(&YO=R!G<F%C969U;&QY('-T97`@X
XM:6YT;RX*"@H*W&H```````#<C`E%86-H(&1I<VL@;W(@:&%R9&1R:79E(")K*
XM;F]W;B(@8GD@=&AE('-Y<W1E;2!W;W5L9"!H879E(&$-<&AY<VEC86P@;G5MO
XM8F5R(&%S<V]C:6%T960@=VET:"!I="X@(%1H:7,@;G5M8F5R('=O=6QD(&)ES
XM(&=I=F5N#6]U="!B>2!T:&4@3W!E<F%T:6YG('-Y<W1E;2!A;F0@=V]U;&0@&
XM8F4@=6YI<75E('1O(&5V97)Y(&1I<VL@86YD#65V97)Y(&EN<W1A;F-E(&]F,
XM('1H92!6:7)T=6%L(%-Y<W1E;2!I='-E;&8N("!&;W(@97AA;7!L92!I9B!T8
XM=V\-9G)I96YD<R!E86-H(&AA9"!A(&-O<'D@;V8@=&AE('9I<G1U86P@<WEST
XM=&5M(')U;FYI;F<L(&%N9"!T:&5Y#6)O=&@@<VAA<F5D(&%C8V5S<R!T;R!AG
XM(&)E<FYO=6QL:2P@=&AE(&)E<FYO=6QL:2!D:7-K<R!W;W5L9"!B90UK;F]WA
XM;B!B>2!D:69F97)E;G0@;G5M8F5R<R!O;B!E86-H('-Y<W1E;2X@(%1H92!NL
XM=6UB97(@=V]U;&0@8F4@80UC;VUP;W-I=&4@;V8@86X@86)S;VQU=&4@240@>
XM*'1H:7,@<&%R="!W;W5L9"!B92!S:&%R960@8GD@8F]T:`US>7-T96US*2!A7
XM;F0@82!S>7-T96T@<W!E8VEF:6,@240@*'!R;V)A8FQY('1H92!U<V5R<R!O0
XM<@UC;VUP=71E<G,@<&5R<V]N86P@;F%M92DN"@H)02!U<V5R(&-O=6QD(&%C5
XM8V5S<R!S;VUE(&UE9&EA(&1I<F5C=&QY+"!O<B!T:&4@=7-E<B!C;W5L9`US&
XM<&5C:69I8V%L;'D@87-K('1H96ER('-Y<W1E;2!T;R`B8V]N<W5M92(@=&AEG
XM(&UE9&EA.R!T;R!B=6EL9"!U<`UA(&UE;G1A;"!I;6%G92!O9B!T:&%T(&UE]
XM9&EA)W,@8V]N=&5N=',L(&%N9"!T;R!C:&5C:R!F;W(-<F5D=6YD86YC:65S?
XM(&%G86EN<W0@86YY(&]F(&ET<R!P<F5V:6]U<VQY(&5S=&%B;&ES:&5D(&UEP
XM;6]R:65S#2AR971A:6YE9"!I;B!A(&UE9V$M9&%T86)A<V4@<V]M97=H97)E3
XM(&EN("IA8W1I=F4J(&UE9&EA#7)E<V5R=F5S*2X*"@E7:&5N('1H92!S>7-T=
XM96T@8V]N<W5M97,@=&AE(&-O;G1E;G1S(&]F('-O;64@;65D:6$@*&QI:V4-Q
XM9&8P.B!D:#`Z(&1I,#HN+BXI(&ET(&1O97,@<V]M92!V97)Y('-P96-I86P@W
XM=&AI;F=S+B`@270@8V]L;&5C=',-86QL('1H92!S=7!E<F9I8VEA;"!I;F9O;
XM<FUA=&EO;B!A8F]U="!A(&9I;&4@=&AA="!I="!C86XL('1H90UF:6QE<R!N1
XM86UE+"!A;GD@8V]M;65N=',L(&%N>2!D871E<W1A;7`L('1H92!F:6QE('-I-
XM>F4L('!E<FAA<',-979E;B!T:&4@9FEL97,@<&AY<VEC86P@8FQO8VL@861D>
XM<F5S<V5S(&]N('1H92!M961I82P@=&AE(&UE9&EA#69R;VT@=VAE;F-E(&ET8
XM(&-A;64N("!!<R!W96QL(&ET(&)U:6QD<R!U<"!A('-E<FEE<R!O9B!C:&5CE
XM:W-U;7,-9F]R(&5V97)Y(#(U-B!B>71E<R!O<B!S;R`H9&5P96YD:6YG(&]N,
XM('1H92!F:6QE('-I>F4I(&%S('=E;&P@87,-82!V97)Y('5N:7%U92!E>'1R/
XM82UL;VYG(&UA<W1E<B!C:&5C:W-U;2!U<VEN9R!S;VUE(&MI;F0@;V8-=6YL.
XM:6ME;'DM=&\M8F4M<F5P96%T960@8WEC;&EC+7)E9'5N9&%N8WDM8VAE8VMSH
XM=6T@<V-H96UE("A#4D,I+@H*"4EF('1H92!M961I82!H87,@;F\@9FEL97,@G
XM*&9O<B!E>&%M<&QE(&$@9V%M92!L:6ME(%9/4E1%6"D-=&AE;B!I="!J=7-T+
XM(&MN;W=S('1H92!E;G1I<F4@9&ES:R!A<R!A('-I;F=L92!T:&EN9RP@86YDU
XM('!E<FAA<',-8G5I;&1S('5P('-O;64@;W)I9VEN86P@:6YF;W)M871I;VX@7
XM9F]R('1H92!E;G1I<F4@;65D:6$@87,@=V5L;"X*"@E!<R!W96QL('1H92!/:
XM<&5R871I;F<@4WES=&5M('=I;&P@871T96UP="!T;R!P97)F;W)M(&$-(G=HC
XM871I<R(@;VX@9FEL97,L('1R>6EN9R!T;R!P96YE=')A=&4@87)C:&EV97,LX
XM(&%N9"!D971E<FUI;F4-=&AE(&YA='5R92!O9B!P87)T:6-U;&%R(&9I;&5SL
XM("AS=6-H(&%S($E&1BP@3%I7+"!4249&+"!2249&+`U!3DE-+"!!4D,L(%I/*
XM3RP@5T%24"DN("!)="!W:6QL('1R96%T('1H92!C;VYT96YT<R!O9B!A;B!A5
XM<F-H:79E#6%S(&EN9&EV:61U86P@9FEL97,L(&AO=V5V97(@<VAO=6QD(')E0
XM=&%I;B!T:&4@<F5L871I;VYA;"!L:6YK86=E#71O('1H96ER(&]W;F5R+@H*,
XM"4]N8V4@:70@:&%S(&)U:6QT('5P(&%L;"!T:&4@:6YF;W)M871I;VX@86)O^
XM=70@=&AE(&9I;&5S(&ET#71H96X@<V5A<F-H97,@:71S(&UE9V$M9&%T86)A8
XM<V4@9F]R(&%N>2!D=7!L:6-A=&4@:6YS=&%N8V5S.R!A<PUV97)I9FEE9"!BV
XM>2!T:&4@;6%S=&5R(&-H96-K<W5M+@H*"4%D9&ET:6]N86QL>2!B>2!U<VEN\
XM9R!T:&4@<W5B(&-H96-K<W5M<R!I="!P97)F;W)M<R`@80UC;V%R<V4@(F1I=
XM9F9E<F5N8V4B(&]N(&%L;"!T:&4@9FQE9&=L:6YG(&9I;&5S+B`@5&AE(")D+
XM:69F(B!I<PUU<V5D('1O(&-H96-K(&9O<B!M;W)E+7)E8V5N="!F:6QE<R`H5
XM8F%S960@;VX@=&AE(&EN9F%M;W5S#2)T:&EN9W,@9W)O=R(@87AI;VTI(&%NR
XM9"!A<R!W96QL(&ET(&-H96-K<R!F;W(@;&EN:RUV:7)U<V5S+@H*"51H92!UN
XM<V5R(&-A;B!N;W<@96YT97(@:&ES(%9I<G1U86P@5V]R:R!3<&%C92!A;F0@[
XM<V5E('1H:7,-;65D:6$@<')E<V5N=&5D('1H97)E+B`@5&AE('5S97(@;6%Y9
XM(&5N=&5R('1H92!P87)T:6-U;&%R(&UE9&EA#6%N9"!S964@86QL('1H92!FS
XM:6QE<R!T:&5R96EN+B`@268@=&AE(&9I;&5S(&%R92!D=7!L:6-A=&5S(&]F(
XM#69I;&5S(&5L<V5W:&5R92!O;B!T:&4@<WES=&5M('1H96X@=&AE>2!W:6QLH
XM(&=R87!H:6-A;&QY(&9L87-H+`UO<B!W:&%T979E<BX*W&H```````#<C`E)V
XM9B!A(&9I;&4@:7,@;6]R92!R96-E;G0@;W(@870@;&5A<W0@<V]M96AO=R!RZ
XM96QA=&5D('1O#7-O;64@9FEL92!A;')E861Y(&EN('1H92!M96=A+61A=&%BP
XM87-E('1H96X@:70@86QS;R!A<'!R;W!R:6%T96QY#7-T86YD<R!O=70N"@H)=
XM3F]W(&-O;65S('1H92!F=6X@<&%R="$@(%1H92!U<V5R(&-A;B!M;W9E('1H2
XM92!F:6QE<R!A<F]U;F0-:6X@=&AE:7(@=FER='5A;"!E;G9I<F]M96YT+"!MH
XM86MI;F<@=&AE:7(@96YV:7)O;65N="!L;V]K#2IE>&%C=&QY*B!T:&4@=V%YO
XM('1H97D@=V%N="P@=VET:&]U="!A8W1U86QL>2!S:'5F9FQI;F<@9FEL97,-Y
XM87)O=6YD(&]N('1H92!P:'ES:6-A;"!M961I82X@665T('=H96X@82!F:6QE7
XM(&AA<R!T;R!E>&5C=71E+"!O<@UC86QL('5P;VX@<F5S;W5R8V5S('1H92!P6
XM<F]C97-S(&]F(&-O;FYE8W1I;F<@=&AE(&AU;6%N('5S97)S#6UE;G1A;"!L2
XM:6YK86=E<R!T;R!P:'ES:6-A;"!M961I82!L;V-A;&ET:65S(&ES(&AA;F1LN
XM960-9FQA=VQE<W-L>2!B>2!T:&4@;&]W(&QE=F5L<R!O9B!T:&4@;W!E<F%T6
XM:6YG('-Y<W1E;2X@(%!O<W-I8FQY"F%S:VEN9R!T:&4@=7-E<B!F;W(@82!CX
XM97)T86EN(&YU;6)E<F5D(&1I<VL@:68@=&AA="!I<R!R97%U:7)E9"X*"@E,4
XM970@;64@:G5S="!F:6YI<V@@=7`@=&AE(&ED96$@;V8@1FQA="!B969O<F4@Z
XM22!G;W1O#6=E;F5R86P@8V%V96%T<RX*"@E&;&%T(&UE86YS('1H870@979E+
XM<GET:&EN9R!I<R!P97)C96EV960@=&\@97AI<W0@870@=&AE('-A;64-;&5V8
XM96P@:6X@=&AE('9I<G1U86P@<W!A8V4L('1H92!U<V5R(&-A;B!O<&5R871E*
XM(&]N(&$@9FEL92P-<F5A9"]W<FET92]E9&ET+V1E;&5T92!R96=A<F1L97-SP
XM(&]F(&EF(&ET(&ES(&EN(&%R8VAI=F4@;W(@;F]T+B`-5&AE('-Y<W1E;2!M6
XM87D@;65N=&EO;B!T;R!T:&4@=7-E<B!T:&%T('1H92!F:6QE(&ES(&=O:6YG9
XM('1O(&)E#7)E+6%R8VAI=F5D('-O('1H870@=&AE('5S97(@8V%N(&%B;W)T>
XM('1H92!P<F]C961U<F4@:68@=&AE>2!A<F4-:6X@82!H=7)R>2`H86YD(&IUD
XM<W0@<W1O<F4@=&AE(&9I;&4@=6YC;VUP<F5S<V5D*2!;;V8@8V]U<G-E#69I3
XM;&5S('1H870@87)E(&YO="!N;W)M86QL>2!I;B!A<F-H:79E(')E;6%I;B!D%
XM9:EA<F-H:79E9%TN"@H)5&AE<F4@87)E('-O;64@8V%V96%T<SH*"@E7:&5N0
XM(&%D9&EN9R!A(&YE=R!D:7-K('EO=2!A;F0@=&AE(&-O;7!U=&5R(&UU<W0@&
XM86=R964@=&\@80IN=6UB97(@9F]R('1H870@9&ES:RP@=&AE(&-O;7!U=&5RZ
XM('=I;&P@<W5G9V5S="!A(&YU;6)E<BP@8F%S960-;VX@=&AE(&1A=&5S=&%MM
XM<"P@=6YI<75E('!R;W!E<G1I97,@;V8@=&AE(&1I<VLL('1H92!C;VUP=71E+
XM<G,-;F%M92!O<B!Y;W5R(&YA;64@86YD('-U8VAL:6ME+B`@66]U(&UU<W0@#
XM=&AE;B!P:'ES:6-A;&QY('=R:71E#75P;VX@=&AE(&1I<VL@=&AE(&YU;6)EO
XM<B!T;R!W:&EC:"!Y;W4@:&%V92!B;W1H(&%G<F5E9"X@($EN('1H:7,-87-P,
XM96-T('1H92!/<&5R871I;F<@<WES=&5M(&1O97,@86-T(&QI:V4@82!D:7-K?
XM(&UA;F%G97(@+2!B=70@=&\-<V%Y('1H870@:7,@=&\@9&5N>2!I=',@<F5AX
XM;"!A<'!L:6-A=&EO;BX*"@E4:&4@<')O8V5S<R!O9B!B=6EL9&EN9R!U<"!TG
XM:&4@;65G82UD871A8F%S92!I<R!P<F]B86)L>0UG;VEN9R!T;R!B92!P86ENS
XM9G5L;'D@<VQO=RP@8G5T('EO=2!P<F]B86)L>2!S:6UP;'D@8V%N)W0@979EK
XM;@UC;VYC96EV92!O9B!J=7-T(&AO=R!M=6-H('1I;64@>6]U('=A<W1E(&]TP
XM:&5R=VES92X@($%N9"!I;@UC;VUP87)I<V]N('1O('1H870@:70@:7,@8FQA3
XM>FEN9VQY(&9A<W0N"@H)5&AE('-Y<W1E;2!P<F]B86)L>2!W;W5L9"!F965L>
XM(&UO<W0@870@:&]M92!O;B!A(&AA<F0M9')I=F4L#69R;VT@=VAE;F-E(&ETI
XM<R!P<F]B:6YG('1E;G1A8VQE<R!C;W5L9"!S869E;'D@97AT96YD+B`@($1IE
XM<VL-=7-E<G,@=V]U;&0@8V5R=&%I;FQY(&AA=F4@=&\@:&%V92!A="!L96%S8
XM="!O;F4@9')I=F4@=VAE<F4@=&AE#6UA<W1E<BUD:7-K(&-O=6QD(&%L=V%Y2
XM<R!S:70@<W5C:"!T:&%T('1H92!M96=A+61A=&%B87-E(&-O=6QD(&)E#75P4
XM9&%T960@<V%F96QY+@H*"51H97)E(&ES;B=T(&%N>2!R96%S;VX@=VAY('1HR
XM92!M96=A+61A=&%B87-E(&-O=6QD;B=T(&)E#6)R;VME;B!U<"!I;G1O('-M5
XM86QL97(@<V5G;65N=',@*&]R(&1U<&QI8V%T92!I;G-T86YC97,@<W5C:"!A6
XM<PUI;B!A(&YE='=O<FLI+@H*"51H92!6:7)T=6%L(%=O<FL@4W!A8V4@<VAO7
XM=6QD(&)E(&%B;&4@=&\@86QL;W<@=&AE('5S97(@=&\-=V]R:R!W:71H(&%N`
XM>2!S<&5C:6%L(&9O<FUA="!I;B!A(&UO9'5L87(@=V%Y+"!T:&5R92!S:&]UC
XM;&0@8F4@86X-249&('9I97=E<B!O;B!T87`L(&5D:71O<G,@*&QI:V4@140LD
XM($-%1"P@2$5$+"!74"D@86YD('9A<FEO=7,-87)C97)S(&%N9"!D92UA<F-ER
XM<G,N"MQJ````````W(P)5&AE(%9I<G1U86P@5V]R:R!3<&%C92!E>&ES=',@K
XM870@82!L;W<@;&5V96P@;V8@=&AE(&1I<VL-;W!E<F%T:6YG('-Y<W1E;2X@*
XM($ET('=O=6QD('!H>7-I8V%L;'D@:G5S="!B92!A;F]T:&5R(%)!33H@;&EK"
XM90UD979I8V4L(&5X8V5P="!M=6-H(&UO<F4@;6%G:6-A;"X@(%1H97)E(&ESG
XM(&$@=FES:6)L92!F<F]N="!E;F0-:G5S="!U<V5D('1O('-A>2`B8V]N<W5M:
XM92(@<&]S<VEB;'D@:6YS:61E(&%N9"!A;&]N9R!W:71H(&$-=&]O;'-P86-EP
XM(&QI:V4@=&AE(").95A4(B!F96%T=7)E<RX*"@E4;R!R;W5N9"!O=70@=&AE7
XM('!A8VMA9V4@=&AE<F4@<VAO=6QD(&)E('-P96-I86P@<W5P<&]R="!F;W(-L
XM=&AI;F=S('1H870@87)E(&ER<FET871I;F<@8W5R<F5N=&QY+B`@4W5C:"!A=
XM<R!P<F]P97(@87)C:&EV86P-8F%C:W5P+"!W:&5R92!E86-H(&9L;W!P>2!OY
XM<B!M961I82!S=6)S970@;V8@86X@87)C:&EV92!C;VYT86EN<PUA(&AO;&]G4
XM<F%P:&EC(&EM86=E(&]F('1H92!C;VYT96YT<R!O9B!T:&4@96YT:7)E(&%RN
XM8VAI=F4@+2!S=6-H#71H870@=&AE(&5N=&ER92!A<F-H:79E(&ES;B=T(&QOW
XM<W0@9F]R(&QA8VL@;V8@9&ES:R`C,2$*"@E!<R!W96QL('1H92!E;G9I<F]M$
XM96YT('-H;W5L9"!B92!A8FQE('1O('1E;&P@>6]U('=H97)E('1H90HJ;&%RQ
XM9V5S="H@9FEL97,@87)E(&%N>7=H97)E("AH;W<@;V9T96X@:&%V92!Y;W4@>
XM<&EC:V5D('EO=7(@=V%Y#71H<F]U9V@@475A<G1E<B!"86-K('1R>6EN9R!T$
XM;R!F:6YD(&%N9"!D97-E;&5C="!T:&4@;&%R9V5S=`UF:6QE<S\I+@H*"4%NA
XM9"!O9B!C;W5R<V4@=VAE;B!Y;W4@8G5Y('EO=7(@1FQO<'1I8V%L(%)E860O!
XM5W)I=&4@*&]R#4AO;&]3=&]R92$I('EO=2!C86X@87-K('1H92!S>7-T96T@>
XM=&\@=')A;G-F97(@=&\@>6]U<B!N97<@<WES=&5M#6$@<F5A;"!C;W!Y(&]F+
XM(&5V97)Y=&AI;F<@=VAI8V@@<&5R9F5C=&QY(&UI;6EC<R!Y;W5R('9I<G1UQ
XM86P-8V]P>2X@(%1H96X@>6]U(&-A;B!M86ME(&%N(&5X=')E;65L>2!L87)G3
XM92!B;VYF:7)E(&%N9"!B=7)N(&%L;`UY;W5R(&]L9"!D:7-K(&=L965F=6QLC
XM>2P@=VET:&]U="!T:&4@<VQI9VAT97-T(&YA9V=I;F<@9&]U8G0N"@H)5&AI:
XM<R!S>7-T96T@:&%S('-O;64@=F5R>2!N:6-E(&%D=F%N=&%G97,L(&UO<W1L&
XM>2!J=7-T(&$-<F5C87`@;V8@=&AE('1H<F5E('!R:6UE(&9E871U<F5S.@K`&
XM"DH42L`*,2D@5FER='5A;"`M(&)L87-T('1H<F]U9V@@=&AE(&)O='1L96YE?
XM8VL@;V8@<&AY<VEC86P*("`@;65D:6$L('!H>7-I8V%L(&QO8V%L:71I97,N*
XM"@HR*2!/<F=A;FEZ871I;VYA;"`M('-O;'9E('EO=7(@:&%I<BUP=6QL:6YG"
XM(&1I<VL*("`@<V]R=&EN9R!A;F=U:7-H(&9O<F5V97(A"@HS*2!&;&%T("T@(
XM87)C:&EV97,@87)E(&IU<W0@86YO=&AE<B!F;W)M(&]F(&QO8V%L:71Y+`H@$
XM("!B<FEN9R!T:&4@9FEL92!C;VYT96YT<R!U<"!T;R!T:&4@=FER='5A;"!L=
XM979E;"!A<PH@("!W96QL+@H*P!1*"DK`"D$@8V]U<&QE(&]F(&]T:&5R(&9E'
XM871U<F5S.@H*"51H97)E(&ES('1H92!A<F-H:79A;"!B86-K=7`@87,@22!MJ
XM96YT:6]N960@8F5F;W)E+`UB87-I8V%L;'D@86YY=&AI;F<@8F5T=&5R('1HZ
XM86X@=VAA="!I<R!O=70@=&AE<F4@86QR96%D>2!W:6QL(&1O#79E<GD@=V5L7
XM;"X@($D@:6UA9VEN92!A(&MI;F0@;V8@875T;VUA=&5D(&)A8VMU<"!A<F-H1
XM:79A;"!S>7-T96T-=VET:"!A('-M87)T97(@9&ES:R!F;W)M870@;W)G86YIM
XM>F%T:6]N("AH;VQO9W)A<&AI8R!I;6%G92!O9@UD:7)E8W1O<GD@;V8@86QLU
XM(&1I<VMS(&]N(&5A8V@@9&ES:R!W:&5N('!O<W-I8FQE*2X*"@E4:&5R92!S)
XM:&]U;&0@8F4@82!F=6QL(&-O;7!L96UE;G0@;V8@3F]R=&]N(%5T:6QI=&EEI
XM<R!T>7!E#61I<VL@=&]O;',@=&\@9V\@=VET:"!T:&4@<&%C:V%G92X*"@E4?
XM:&5R92!I<R!T:&4@=&]O;'-P86-E(&]F(&-O=7)S92P@=VAI8V@@86QL;W=SB
XM(&%C8V5S<R!T;PUC;VUM;VYL>2!U<V5D('1O;VQS+"!A)VQA($YE6%0L(&%NM
XM9"!A8V-E<W,@=&\@<W!E8VEA;"!F=6YC=&EO;G,-:6X@=&AE('9I<G1U86P@_
XM9&5V:6-E+@H*"51H97)E('=I;&P@8F4@;65D:6$@8F%C:W5P+"!I93H@8V]P>
XM>7!R;W1E8W1E9"!M961I82!E=&,N+BX*W&H```````#<C`I3;VUE($UI;&1LQ
XM>2!496-H;FEC86P@0V]M;65N=',Z"@H)5&AE('-Y<W1E;2!C;VYS:7-T<R!OL
XM9B!T=V\@<&%R=',Z"@H@"3$I(&$@9&5V:6-E(&1R:79E<B!V:7-I8FQE('1O)
XM('1H92!#3$D@86YD(%=/4DM"14Y#2"!A<R!A"B`)("`@9&5V:6-E('9E<GD@M
XM;75C:"!L:6ME(%)!33H*"@DR*2!A(")T;V]L<W!A8V4B(&5X86-T;'D@;&EK-
XM92!O;B!T:&4@3F585"!W:&EC:"!P<F]G<F5S<V5S"@D@("!D;W=N('1H92!R`
XM:6=H="!O<B!L969T('-I9&4@;V8@=&AE('-C<F5E;B!A;F0@<W1O<F5S"@D@Y
XM("!W:&%T979E<B!F<F5Q=65N=&QY('5S960@<V-R:7!T<R!A;F0@97AE8W5T/
XM86)L97,@=&AA=`H)("`@=&AE('5S97(@=VES:&5S+@H*"51H92!T;V]L<W!AL
XM8V4@86QS;R!C;VYT86EN<R!T:&4@9V%D9V5T(")C;VYS=6UEJ6UE(B!W:&ECG
XM:`UT96QL<R!T:&4@<WES=&5M('1O(&%D9"!S;VUE(&UE9&EA('1O(&ET<R!I[
XM;G1E<FYA;"!M96=AJ61A=&%B87-E+@H*"45V97)Y=&AI;F<@22=V92!S86EDH
XM(&AE<F4@:&%S(&)E96X@06UI9V$@4W!E8VEF:6,@9F]R#6-L87)I='D@;V8@@
XM97AA;7!L92X@(%1H97)E(&ES(&YO(')E87-O;B!W:'D@=&AI<R!T;V]L(&-O3
XM=6QD(&YO=`UB92!M861E(&%V86EL86)L92!O;B!T:&4@36%C:6YT;W-H+"!)[
XM0DTL($%T87)I+"!.95A4+@H*02!L:71T;&4@8FET(&%B;W5T('1H92!A=71HU
XM;W(Z"@H)06YS96QM($AO;VL@:7,@82!R871H97(@;F]M861I8R!F<F5E+6QAC
XM;F-E('!R;V=R86UM97(@=VAO#6AA<R!B965N('%U:71E(&)U<VEL>2!O8V-U-
XM<&EE9"!S:6YC92`Q.3<X('=R:71I;F<@(FIU<W0@86)O=70-979E<GET:&EN?
XM9R!F<F]M($]I;"!0871C:"!3;V9T=V%R92!T;R!!<F-A9&4@1V%M97,B('1O/
XM('!R;W!O<V%L<PUV97)Y(&UU8V@@;&EK92!T:&ES(&]N92P@=&AA;FL@>6]U!
XM('9E<GD@;75C:"X*"@H*66]U<G,@5')U;'D*06YS96QM($AO;VL*"F]F(%-O1
X/9G1W87)E($%L8VAE;7D*V
X``
Xend
Xsize 10500
END_OF_FILE
if test 14743 -ne `wc -c <'virt_nice.uu'`; then
    echo shar: \"'virt_nice.uu'\" unpacked with wrong size!
fi
# end of 'virt_nice.uu'
fi
if test -f 'virtual.uu' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'virtual.uu'\"
else
echo shar: Extracting \"'virtual.uu'\" \(19321 characters\)
sed "s/^X//" >'virtual.uu' <<'END_OF_FILE'
Xbegin 666 virtual
XM```#\P`````````"``````````$```H;```!B@```^D```H;3E7Z0$CG/SI)(
XM^0````!P!"M`_NPY?``!!@J1R"E(``@I2``$<``I0`8&(&W^["E0!:PO`$ALX
XM``Q.NB?^*4`%L$*73KHGC"E`!:`@0-#\`%PNB$ZZ)[P@;`6@T/P`7"Z(3KHG@
XMFE!/($`F:``**T#_]DJL!;!G``"$(FP%L"!I`"(@*``8Y8!(>``L*T#^Z&$`X
XM$V183R1`("L`'.6`*4`%I"E*!:AR`B5!``0@;`6@(DC2_`!<)4D`""5\1$]3@
XM```@(FP%I"!I`"@E2``H(&W^Z"2H``0@"N2`(4``!"!L!:#0_`!<(FP%I"-(.
XM``AP_R=```QP`"=``!!@#D*K``PO"V$`$H)@`!'V+PMA`!)X6$]*;`8*9@1AK
XM`!EZ(&P%I"`H`"CE@'(`($`2$$AL!>XK0/[H.T'^YDZZ'9A(;`7Z3KH=D$AX.
XM`#I(;`6T3KH<8#E\``$%RDAL!>).NB6F2&P%UDZZ'6XP+?[F2,!2@$AX``$O+
XM`$ZZ)=0I0`7`(&W^Z%*(,"W^YDC`+H`O+`7`+PA.NB;`(&P%P#`M_N8B2-+`&
XM0A%(P"ZL!<`O`$AL`!AA`!FZ3^\`,!M\``'_]4HM__5G`!!@(&P%H-#\`%POM
XM"$ZZ)D)83R!L!:#0_`!<+PA.NB8>6$\K0/_V9](@0"9H``IP_R=```Q"JP`02
XM?@`O*P`(80`6YBZ`+RL`'"\K`!@O*P`4+RL`"$AL`"YA`!E.3^\`&"`K``A;1
XM@&<``*17@&<`#'13@&<`#Z1=@&<`#2I3@&<`"RI3@&<`#DQ3@&<`#XQ3@&<`#
XM#-Q3@&<`#X!3@&<`#3I3@&<`"\Q3@&<`"*Y3@&<`![A3@&<`"BQ3@&<`"AI3-
XM@&<`#U93@&<`#613@&<`"HA5@&<`#TAR,Y"!9P`#>%N`9P`$2`2````#BV<`U
XM#RQR"I"!9R!3@&<<4X!G&%.`9P`&'%.`9P`&?F``#PY"+?_U8``/"B\K`!AA]
XM`!12*T#^X)'(0JW^T$AM_O4O*P`<*TC^U"M(_MAA`!%*2&W^]4AL`%1A`!ADZ
XM2&P`6DAM_O5.NB!P3^\`'$J`9@HY?``!!@IA`!?X2&P`9$AM_O5.NB!24$]*[
XM@&8(0FP&"F$`%U9(;`!L2&W^]4ZZ(#A03TJ`9A!(;`!V80`8$EA/<`$I0```W
XM2&P`ADAM_O5.NB`64$]*@&8.2&P`DF$`%_!83T*L``!(;?[<2&W^]4AM_N!AK
XM`!/*3^\`#"M`_N1*@&<``:IR`2!`LF@`%F8(/CP`U&```CXT*``82D)J"#X\;
XM`,I@``(N#*L```/M``AF``%*4F@`&$JL``!G``&J0^@`(B\)80`0NDAX`E@O-
XM`$AM_'AA`!D@3^\`$"M`_'!F#DAL`*)A`!=H6$]@``%Z2&W\T$AL`,AA`!=6?
XM2&W\O"\L!;!(;?S03KH:#$_O`!0K0/QT2H!F'DAM_-!(;`#F80`7+E!//CP`!
XMS2!M_N13:``88``!H"!`+R@`"$AM_-!(;`#\80`7"B!M_'0K:``(_MA(>``P@
XM2&W\0"\+3KHCVD*M_%A(;?S03KH>VAM`^D!(>`'^2&W\T$AM^D%.NAZB0>WZI
XM0"`(Y(`K0/Q<+JW^V$AM_$!A`!?V3^\`+$J`9A`^/`#-(&W^Y%-H`!A@``$F9
XM2&P!%F$`%II83TJM_$QF$"XM_%`@;?[D4V@`&&```09(;`$J80`6>B`K`!3E<
XM@")`(&D`)"Z(2&P!.BM(_M1A`!9@4$]P`2M`_M!@;"!M_N0P*``82D!O!CX\]
XM`,I@6@RK```#[@`(9A`O"&$`$%!83R!M_N1"J``:4V@`&&`Z("W^X&8(/CP`\
XMTF```)H,JP```^X`"&8>+RW^W$AX__\O`&$`#XI/[P`,($!3:``8*T#^Y&`$+
XM/CP`S4I'9F@O/``!``%(>``@3KHAN"(K`!3E@2!!(4``)"!`(6W^Y``((FW^F
XMY-+\`"(NB2M`_LQA``[D4$\@;?[,(4``#$JM_M!F#)/)(4D`&"%)`!Q@#"%M+
XM_M@`&"%M_M0`'"\(2&P%[DZZ(9!03TAL!>YA``ZH6$]*@&8`"^)(;`7Z80`.$
XMF%A/2H!F``O20BW_]6``"\H@:P`4*V@`#/[@*VL`&/[<+"L`'"\++PA(;`%.O
XM*TC^Y&$`#-!/[P`,2H!F``N<2H9G``",2JW^X&<``(0@;?[D("@`%"!M_N`B.
XM*``,DH`J`;R%;"8B;?[@(&D`"-'`+P8O+?[<+PA.NB'43^\`#"!M_N3=J``4$
XM?`!@M")M_N`@:0`(T<`O!2\M_MPO"$ZZ(:Z<A=NM_MP@;?[@("@`#"!M_N319
XMJ``00J@`%"ZM_N!A``VZ3^\`#"M`_N!@`/]R(&W^Y"%M_N``#"`K`!R0AB=`&
XM``Q@``KT(&L`%"MH``S^X"MK`!C^W"MK`!S^V"\++PA(;`%4*TC^Y&$`"_A/8
XM[P`,2H!F``K$("W^V&<``:)*K?[@9P``Y"\`(&W^X"\H``Q(;`%:80`4+D_OS
XM``P@;?[D("@`%"!M_N`B*``,)`&4@$CM``3^U"8M_MBV@FQ&T(.R@&0,2&P!9
XM<&$`$_I83V`@(FW^X"!I``@B;?[DT>D`%"\#+P@O+?[<3KH@PD_O``P@+?[8X
XM(&W^Y-&H`!1"K?[88`#_=-""LH!D#$AL`7YA`!.T6$]@(")M_N`@:0`((FW^5
XMY-'I`!0O`B\(+RW^W$ZZ('Q/[P`,("W^U-&M_MR1K?[8(&W^X"`H``P@;?[DW
XMT:@`$$*H`!0O+?[@80`,?EA/*T#^X&``_Q!(>``!2'@`$$ZZ'S)(>``!+RW^0
XMV"M`_N!.NA\B3^\`$"!M_N`A0``(9V`@+?[8(4``#")M_N0@:0`(T:@`'M&IV
XM`!!"J0`4T:P&!B!I``A#Z``B+RW^X"\)3KH?*B!M_N`NJ``,2&P!C&$`$O(N:
XMK?[8(&W^X"\H``@O+?[<3KH?QD_O`!1"K?[88"1(>``0+PA.NA["+JW^V$AL?
XM`9QA`!*^3^\`#"!M_N1"J``48`A"K?[@8`#^6B`K`!R0K?[8)T``#"!M_N0AO
XM;?[@``Q@``D"(&L`%"MH``C^X"\++PA(;`'**TC^Y&$`"A(NK?[D3KH>K$AXK
XM`"`O+?[D3KH>6$_O`!0@;?[@4V@`&&P$0F@`&$AL!>YA``MX6$]*@&8`"+)("
XM;`7Z80`+:%A/2H!F``BB0BW_]6``")H@:P`4+PLO"$AL`=`K2/[D80`)L$_OG
XM``Q*@&8`"'P@;?[D("@`%"(H`!`D`=2`)T(`#"@K`!@@*P`<9@HB*``0TJ@`I
XM%-B!4X!F""!H``C8J``>2H1K#B)M_N0@:0`(N*@`'F,(/CP`VV``""YP`"!MV
XM_N0A0``4(4``$"!H``A#Z``B+PEA``K06$\K0/[@2JW^X&="(&W^Y"`H`!`@M
XM;?[@(B@`#"0!U("TA&,.)`24@")M_N0C0@`48!P@*``,(&W^Y-&H`!`O+?[@K
XM80`*;EA/*T#^X&"X(&W^Y"%M_N``#&``![8@*P`8Y8`O*P`4*T#^Y&$`#/18A
XM3RM`_N!R_R!`LF@`%F8(/CP`U&``!XQ#Z``B+PEA``I`6$\@;?[D(DC2_`#4:
XM0B@`TRM`_MPK2?[82I%G``""0^@`"'``$!$K0/[42JW^W&=&(&W^W"\H``Q.G
XMNAC&6$\B+?[4L(%F("!M_N30_``)+P$O"")M_MPO*0`,80`*!D_O``Q*@&80*
XM+RW^W&$`";983RM`_MQ@M"`M_MQG#B\`80`)HEA/*T#^W&`4(&W^X-#\`"(O5
XM"&$`":A83RM`_MQP`2!M_M@@@'[_*VW^W/[P2JW^\&8(/CP`Z&``!L8@*P`8;
XMY8`K0/[D2D=G""MM_O#^X&`H+RL`%&$`"_A83W(`(&W^Y!%!`-,100#4$4$`5
XMU1%!`-8100#7*T#^X'X`(&W^X#`H`!9(P")M_N0C0``$3>D`"2\H``PO#DZZ-
XM%_H@;?[@+J@`#$ZZ%]I03R!M_N010``((FW^X"%I`!H`=#`I`!9(P"%``'@@S
XMB2`I`!XA0`!\(CP```(`3KH9D"%``(!-Z`"$0>D`+BS8+-@LV"!M_N`@*``0?
XM9RX@;?[DT/P`D4AX`$$O`"\(3KH75"!M_N`NJ``03KH7;$_O``P@;?[D$4``A
XMD&`((&W^Y$(H`)!*K```9P`%SB!M_N`P*``62D!J``7`0^@`(B\)80`(=$AX%
XM`%@O`$AM_H1A`!#:2'@`6"\`2&P!UBM`_H!A``\B3^\`'$JM_H!F#DAL`>9A5
XM``\06$]@``5^("W^C"!M_N0A0`!\(CP```(`3KH8T"%``(!"*`#30^@`V"*\;
XM5DE25"-M_H@`!"M)_GQ@``5(("L`&.6`?O\K0/[P2D=G"B!M_O`K2/[D8`P@V
XM*P`4Y8`K0/[D($!^`$AX`"0O"$ZZ$.9P4B!M_N0A0``(("P&!N"`XH!2@"%`/
XM``PA0``0(7P```(``!0A?$1/4P``&"`L!:3D@"%``!Q(;`7Z80`'ED_O``P@\
XM;?[D(4``(&``!,@O*P`480`*$%A/*T#^Y'+_($"R:``69@@^/`#-8``$J#(HU
XM`!A*06H(/CP`RF``!)@B*``(9Q9(>/_^+P%A``D&4$_D@"=```Q@``1\/CP`1
XMS6``!'0O*P`480`)O"M`_N1(;?[U+RL`&&$`!L)"ETAM_O5(;?[D80`)RD_O3
XM`!0K0/[@2H!G7"!`2F@`&&8(0^P%M+")9@@^/`#*8``$*G(!LF@`%F860^@`M
XM(B\)80`&UEA/2H!G#CX\`-A@""\`80`'KEA/2D=F*B\M_N!A``@:(&W^Y-#\\
XM`"XNB$ZZ&0Y83V`02JW^Y&8&/CP`TF`$/CP`S4AL!>YA``:,6$]*@&8``\9(H
XM;`7Z80`&?%A/2H!F``.V0BW_]6```ZXO*P`480`(]BM`_N1(;?[U+RL`&&$`G
XM!?Q(;?[<2&W^]4AM_N1A``D"3^\`&"M`_N!G"#X\`,M@``-T("W^Y&8(/CP`\
XMTF```V8O+?[<2'@``2\`80`&<$AX__\O`"M`_N!A``?(3^\`%.2`)T``#&``'
XM`SPO*P`480`(A"M`_N1(;?[U+RL`&&$`!8HNJP`<2&W^]4AL`@1A``R@0I=(V
XM;?[U2&W^Y&$`"()/[P`<*T#^X&<V($`R*``82D%K#DI!9Q(B*P`<=/^R@F8(Z
XM/CP`RF```MPO*P`<+P!A``=04$_D@"=```Q@``+&2JW^Y&8(/CP`TF```K@^H
XM/`#-8``"L"\K`!1A``?X6$\K0/[D($`P*``82D!J"#X\`,I@``*02'C__B\(3
XM80`'!%!/Y(`G0``,8``">B`K`!3E@"\`80`'>$AL!>YA``4D4$]*@&8``EY(Y
XM;`7Z80`%%%A/2H!F``).0BW_]6```D8O*P`880`'CBM`_N!(;?[U+RL`'&$`'
XM!)1(;?[<2&W^]4AM_N!A``>:3^\`&"M`_N1G#"!`(6L`(``:8``""$JM_N!G&
XM"#X\`,U@``'Z/CP`TF```?(O*P`880`'.BM`_N!(;?[U+RL`'&$`!$!(;?[<X
XM2&W^]4AM_N!A``=&3^\`&"M`_N1G7DAM_O4O*P`@80`$&E!/(&W^Y"`H`!!G_
XM&"\`3KH3(E*`+H`@;?[D+R@`$$ZZ%Q903TAM_O5.NA,(4H!(>``!+P!.NA;H!
XM(&W^Y"%``!!(;?[U+P!.NA+^3^\`%&```6)*K?[@9P@^/`#-8``!5#X\`-)@0
XM``%,+RL`%&$`!I0K0/[@+JL`'&$`!H@K0/[<2&W^]2\K`!AA``..2&W^]4ZZD
XM$J`N@$AM_O5(;`(.80`*GD*72&W^]4AM_N!A``:`3^\`("M`_N1G``#B2&W^W
XM]2\K`"!A``-22&W^]4ZZ$F0N@$AM_O5(;`(D80`*8DAM_MA(;?[U2&W^W&$`K
XM!D)/[P`@2H!G"#X\`,M@``"V("W^W&<``)(@;?[DL<!F"#X\`,I@``">+RW^$
XMV$ZZ$A8N@"\M_MA(;`(R80`*%"!M_N#0_``N+HA.NA6>(&W^W-#\`"XNB$ZZ$
XM%9`NK?[D3KH6,"ZM_MA.NA'<4H!(>``!+P!.NA6\(&W^Y"%```PA;?[<``@NK
XMK?[8+R@`#$ZZ$<H@;?[<T/P`(BZM_N0O"$ZZ%<!/[P`<8!P^/`#28!9*K?[@<
XM9P8^/`#-8`H^/`#28`0^/`#1(`MG`._R2D=G("`'2,`O`$AL`D!A``EV4$]PG
XM`"=```P@!TC`)T``$&`.+RL`#$AL`DIA``E84$\O"V$``6Q83V``[[1(;`)6,
XM80`)0DAX`#).NA3F3KH4]BZL!:!A``&04$]*@&8J2&P%[F$``E)83TJ`9AQ(S
XM;`7Z80`"1%A/2H!F#DAL!=9A``(V6$]*@&<23KH4RDAL`G!A``CR6$]@`.\X>
XM(&P%I$*H``@B;`6P(&D`(B`H`!CE@"!`0^@`!"(H``3E@2M`_N@K0?[D*TG^N
XMX"`M_N1G&+"L!:AG$BM`_N`@;?[D(!#E@"M`_N1@XB!M_N0B;`6HL\AF$")M6
XM_N`BD"\(80`!0EA/8`I(;`*`80`(?%A/80`(*"\L!;!.NA4J3.U<_/H83EU."
XM=4Y5_]!(YP`X2?D`````)FT`""1M``Q*J@`89U9(>``P2&W_T"\M`!!.NA4@N
XM*VH`'/_D+HM(;`*H80`(*"ZJ`!A(;?_080`)6$_O`!1*@&8*2&P"MF$`"`Q8W
XM3R!M`!`A;?_<``PO"TAL`LIA``?V<`%@`G``3.T<`/_$3EU.=4Y5__A(YP`X#
XM2?D`````)FT`""!K``0D4R)L!:#2_`!<)TD`!"5+``J3R22))4D`!"\*+P@K$
XM2/_X3KH4)DSM'`#_[$Y=3G5(YP`H2?D`````(&P%H-#\`'0D;`6@(FH`<+/(E
XM5L!$`$B`2,!,WQ0`3G5(YP$82?D`````+B\`$%B'+SP``0`!+P=.NA,Z4$\F_
XM0":'0>L`!"`(3-\8@$YU2.<`&$GY`````"9O``Q9BR\3+PM.NA,H4$],WQ@`Z
XM3G5(YP`X2?D`````)F\`$"1O`!0@"^6`)D!!ZP`!<``0$R\`+PHO"$ZZ$^9/=
XM[P`,<``0$T(R``!,WQP`3G5(YP`82?D`````)F\`#"93(!-G`B`+3-\8`$YU\
XM2.<`&$GY`````"9O``Q!ZP`$(E.QR6<$(`E@`G``3-\8`$YU2.<!.$GY````?
XM`"9O`!0D;P`8/B\`'E-';11P((`S<`!R(((R<`"P`6?L<`!@`G`!3-\<@$YUT
XM3E7__$CG`3A)^0`````F;0`(+BT`#"\\``$``4AX`#I.NA(R)$!!ZP`B+HHO6
XM"$ZZ$FPE2P`(+JT`$$ZZ#BQ2@$AX``$O`$ZZ$@PE0``,+JT`$"\`3KH.)B`')
XM-4``%D*J`!I!Z@`B+HA.N@ER0>H`+BZ(3KH1F"!J``A#Z``N+HE.NA&*(`I,2
XM[1R`_^Q.74YU2.<`.$GY`````"9O`!`@*P`>D:P&!D'K`"(O"$ZZ$AI83R1`F
XM(`IG+B\J``PO*@`(+PI(;`+>80`%K"ZJ``PO*@`(3KH1F$AX`!`O"DZZ$8Y/9
XM[P`<8,!"JP`>0>L`+B\(3KH1&B!K``A#Z``N+HE.NA$,6$],WQP`3G5(YP`8Z
XM2?D`````)F\`#"\+3KH1F%A/("L`#&<4+P!.N@T^4H`N@"\K``Q.NA$V4$\@]
XM*P`09Q0O`$ZZ#212@"Z`+RL`$$ZZ$1Q03TAX`#HO"TZZ$1!03TS?&`!.=4Y5!
XM__A(YP$X2?D`````)FT`""XM``Q(>``480#]?EA/)$!P_[Z`9P)^_DAX``%(Y
XM>``,3KH0NBZ`2&P%^BM`__A.NA#<3^\`#"!M__@A2@`()(@E2P`$)4<`""!LN
XM!:#0_`!<)4@`#"`L!:3D@"5``!!P_KZ`9@92:P`88`8W?/__`!@@"DS?'(!.O
XM74YU2.<`.$GY`````"9O`!`D:P`$+Q-.NA"L2'@`#"\33KH06D_O``QP_K"K:
XM``AF!E-J`!A@!$)J`!@O"V$`_0!83TS?'`!.=4CG`#A)^0`````F;P`0(`OE8
XM@"1`(`IG""!J``0@"&`&0>P%M"`(3-\<`$YU3E7_\$CG(#A)^0`````F;0`(G
XM)&T`$"M3__Q"DR!M``Q*$&<``/)*K?_\9P``ZDAM__9(;0`,80``^%!/(&T`N
XM#!(0*T#_\G0ZL@)F#E*M``Q![`6T*TC__&#"<"\@;?_RL!!F$B!M__P@*``(.
XM9P``NBM`__Q@IG#_(&W__+!H`!9F!G``8```HD/H`"(O"6$`_+)83RM`__A*W
XMK?_X9U8@;?_X2F@`%F<\+R@`#$ZZ"U983S(M__9(P;"!9B@P+?_V2,`O`"\M$
XM__(@;?_X+R@`#&$`_)1/[P`,2H!G""MM__C__&`0+RW_^&$`_#Q83RM`__A@;
XMI$JM__AF`/\B(&T`#!`02@!F!":M__P@"F<$)*W_\G``8!(@"F<$)*W_\B!MQ
XM__PFJ``((`A,WQP$3EU.=4Y5__1(YP$X2?D`````)FT`""13?@`@2BM(__Q*D
XM$&<J<"^P$F8&4HI21V`>$!)G$G(OL`%G#'(ZL`%G!E**4D=@ZG`OL!)F`E**O
XM)HH@;0`,,(<@+?_\3-\<@$Y=3G5(YP$(2?D`````+B\`#"`'6X!G``"<5X!GC
XM``$F4X!G``%878!G``$J4X!G``$$4X!G``$V4X!G``%(4X!G``$*4X!G``%$@
XM4X!G``$.4X!G``#H4X!G``"T4X!G``"D4X!G``"\4X!G``"L4X!G``$B4X!GJ
XM``#L4X!G``"N58!G``#P<C.0@6=06X!G5@2````#BV<``01R"I"!9QY3@&<DS
XM4X!G*E.`9T13@&=*8```\D'L`OH@"&```.Y![`+^(`A@``#D0>P#!B`(8```N
XMVD'L`Q`@"&```-!![`,:(`A@``#&0>P#("`(8```O$'L`R8@"&```+)![`,L*
XM(`A@``"H0>P#,B`(8```GD'L`T`@"&```)1![`-,(`A@``"*0>P#4B`(8```<
XM@$'L`UP@"&!V0>P#9B`(8&Y![`-N(`A@9D'L`W@@"&!>0>P#?B`(8%9![`.&R
XM(`A@3D'L`Y`@"&!&0>P#G"`(8#Y![`.H(`A@-D'L`[`@"&`N0>P#N"`(8"9!Y
XM[`/$(`A@'D'L`]`@"&`60>P#WB`(8`Y![`/D(`A@!D'L`^P@"$S?$(!.=4CGN
XM`!A)^0````!"ITZZ#3!83R9`2JP`!&9H<``O`"\`3KH+5"E```@0*P`)2(!(7
XMP%*`0?H#5"((Y(%(>!``+P$O`$AL!`1.N@P*3^\`&$J`9R8O+``(3KH-)BZLA
XM``A.N@T*2&P$#&$``&Y(;`0V80``9D_O``Q@"B\L``A.N@GT6$],WQ@`3G5.&
XM5?_L+PQ)^0`````@+``$9S9";?_^2&W_["\`3KH,K"ZL``A.N@S0+JP`"$ZZ5
XM#+0NK``(3KH)M$*L``1(>``R3KH+N$_O``PH7TY=3G5.5?[\2.<'&$GY````"
XM`"XM``@L+0`,*BT`$$JL``1G=$IL!@IF;B\M`"PO+0`H+RT`)"\M`"`O+0`<>
XM+RT`&"\M`!0O!2\&+P=(;?\`3KH([$AM_P!.N@>><A70@2Z\``$``2\`3KH+:
XM>B9`2&W_`$ZZ!X12@#=``!)!ZP`42&W_`"\(3KH'A"Z++RP`!$ZZ"^Y/[P!$;
XM3-\8X$Y=3G5(YP$X2?D`````<``O`"\`3KH)\BE```1(>`/N2&P$3DZZ"G(D8
XM0$AL!@PO+``(3KH+L$_O`!@O+``$3KH+T"ZL``1.N@NT6$\F0#XK`!)*1V<J3
XM4T=!ZP`4(`=(P"\`+P@O"DZZ"F`@!TC`<A70@2Z`+PM.N@KH3^\`$&"Z+PI.R
XMN@HP+JP`!$ZZ"'A(;`8,+RP`"$ZZ"TQ/[P`,3-\<@$YU3E7_^$CG`#A)^0``Y
XM```F;0`()&T`#'``+P`O`$ZZ"4903RM`__AG."!3)T``!"%+``J3R2")(4D``
XM!"\(+PHK2/_\3KH*_"ZM__A.N@L@+JW_^$ZZ"P0NK?_X3KH(!'`!3.T<`/_LU
XM3EU.=4Y5__1(YP<X2?D`````)FT`""1M``PN+0`0*TO_^'H`+RH`#"\'2&P$1
XM:F$`_BY/[P`,2H=G0B`*9SXL*@`,OH9L%B\'+PLO*@`(3KH*]D_O``S:AWX`T
XM8-HO!B\++RH`"$ZZ"N">AMJ&U\8NBF$`]P)/[P`,)$!@NB!M__@,D%9)4E1G#
XM!'``8`PO!4AL!(YA`/W*(`5,[1S@_]Q.74YU0H%@```&$B\`#R!O``0@+P`((
XM`B\``P`+9@``$@(O``,`!V8```A@```4$,%1R/_\!(```0``:@#_\DYUY(A*2
XM@6<``!8?00`.,B\`#DA!,B\`#F````0@P5'(__P$@``!``!J`/_R3G5.<4YQ-
XM3G%.<4YQ2.<_/DZY```<!$S??/Q.=2)O``0@;P`(2.<_/BAO`#AA```(3-]\M
XM_$YU)DD@:``B(&@`&-'(T<@@*``$T(!G;M"`($`@$`RH`````@`$9NPB%+*H7
XM`!!FY"(L``2RJ``49MHB+``(LJ@`&&;0(BP`#+*H``1FQB(L`!"RJ`!`9KPBX
XM*``H9[;2@=*!)$%R`!(:9ZHB2V`$M0EFHE')__H,$0`Z9P1*$6:4(`AR`4YU&
XM<`!.=2!O``0@B%B00J@`!"%(``A.=0``3E7_Q$CG)S`F;0`()&T`#'X`?`!Z0
XM`'``&WP`(/_[<@`K0?_V=/\K0O_R0>W_T!M`__$;0/_\*T'_Y"M!_^@K2/_,#
XM$!-G+'(`$@`$00`@9Q1706<444%G"%5!9A9^`6`.?`%@"GH!8`8;?``!__Q2:
XMBV#0$!-R,+`!9@92BQM!__MP*K`39@P@4EB2*U#_]E*+8`Y(;?_V+PM.N@2^D
XM4$_7P!`3<BZP`68B4HMP*K`39@P@4EB2*U#_\E*+8`Y(;?_R+PM.N@244$_7G
XMP!`3<FRP`68*&WP``?_Q4HM@"')HL`%F`E*+$!MR`!(`&T#_\`1!`%!G``%LA
XM44%G``%Z!$$`"V<``@9306<D!$$`"V<``0Y306<``4Q706<``;9506<``.!7*
XM06<``4Y@``'T2BW_\6<((%)8DB`08`8@4EB2(!`K0/_L;`IR`42M_^PK0?_H.
XM("W_Z&<$<BU@"DH&9P1R*V`"<B`;0?_0<@`2!H"!<@`2!8"!9PA2K?_,4JW_K
XMY"\M_^PO+?_,3KH#-%!/*T#_R"`M__)*@&H&<@$K0?_R("W_R"(M__*2@$CM%
XM``+_Q&\T(&W_S-'!+P`O""\M_\Q.N@0X3^\`#'``$"W_^R(M_\0@;?_,8`(0P
XMP%.!9/H@+?_R*T#_R-&M_^1![?_0*TC_S$H'9P`!,!M\`"#_^V```29*+?_Q&
XM9P@@4EB2(!!@!B!26)(@$"M`_^Q@`/]D2BW_\6<((%)8DB`08`8@4EB2(!`K%
XM0/_L2BW__&<2(&W_S!#\`#!R`2M!_^0K2/_,+P`O+?_,3KH"F%!/*T#_R&``3
XM_S(@+?_R2H!J!G`(*T#_\AM\``'_\4HM__%G""!26)(@$&`&(%)8DB`0*T#_#
XM[$HM__QG%B!M_\P0_``P$/P`>'("*T'_Y"M(_\PO`"\M_\Q.N@)\4$\K0/_(A
XM""T`!?_P9P#^T$AM_]!.N@%(6$]@`/["(%)8DB)0*TG_S&8(0?H`V"M(_\P@F
XM;?_,2AAF_%.(D>W_S"M(_^0@+?_R2H!K)K'`;R(K0/_D8!QP`2M`_^0@4EB2V
XM(!`;0/_00BW_T6`&<`!@``",("W_Y"(M__:R@&P(=``K0O_V8`21K?_V2@=G:
XM-E.M_^1M&'``(&W_S!`8+P`K2/_,(&T`$$Z06$]@XE.M__9M2'``$"W_^R\`?
XM(&T`$$Z06$]@Z%.M__9M$G``$"W_^R\`(&T`$$Z06$]@Z%.M_^1M&'``(&W_"
XMS!`8+P`K2/_,(&T`$$Z06$]@XB`+3-\,Y$Y=3G4``$Y5__1(YP$P)FT`""1M;
XM``PK;0`0__8>&DH'9S1P);X`9B*P$F8$4HI@&B\+2&W_]B\*80#\%$_O``PKM
XM0/_Z9P0D0&#2<``0!R\`3I-83V#&3-\,@$Y=3G5(YR`P)F\`$"1+$!)G)'(`U
XM$@!![`2="#```1@`9PIR`!(`=""2@F`$<@`2`!2!4HI@V"`+3-\,!$YU````(
XM``````!P82)O``@@;P`$("\`#"((8`00V6<(4X!D^&`&0AA3@&3Z(`%.=2!O1
XM``0@"$H89OQ32)'`(`A.=0``(F\`""!O``0@"!#99OQ.=2!O``0B;P`($ABRQ
XM&68(2@%F]G``3G5N!'#_3G5P`4YU("\`""!O``1.5?_T(D]R"DZZ`<0&00`PJ
XM$L%*@&;P(`D0X;_)9OI"$)"/3EU.=0``("\`""!O``1.5?_T(D\B``)!``<&W
XM00`P$L'FB&;P(`D0X;_)9OI"$)"/3EU.=0``,#$R,S0U-C<X.6%B8V1E9B`O:
XM``@@;P`$0^\`!#(``D$`#Q+[$-SHB&;R(`DB#UB!$.&RB6;Z0A"0@4YU(&\`*
XM!")(<@!P`"\"#!``*V<&#!``+68"4D@0&`0``#!M$@P```EN#"0!Y8'2@M*!<
XMTH!@Y@P1`"UF`D2!)!\@"%.`(&\`"""!D(E.=2\'+B\`"%*L!B0@!R!L!B`0-
XMP"E(!B`N'TYU3E4``$CG`#`F;0`()&T`#$*L!B0I2P8@2&T`$"\*2'K_QDZZ@
XM_=8@;`8@0A`@+`8D3.T,`/_X3EU.=2!O``0B;P`(("\`#&\6L\AE#-'`T\`3F
XM(%.`9OI.=1+84X!F^DYU``!(YP`2)F\`#$JK``IG"B)++'@`!$ZN_I@7?`#_!
XM``AP_R=``!1P`!`K``\L>``$3J[^L")+<").KO\N3-](`$YU2H!J```>1(!*\
XM@6H```Q$@6$``"!$@4YU80``&$2`1(%.=4J!:@``#$2!80``!D2`3G4O`DA!X
XM-`%F```B2$!(04A"-`!G```&A,$P`DA`-`"$P3`"2$(R`B0?3G4O`W80#$$`L
XM@&0```;AF5%##$$(`&0```;IF5E##$$@`&0```;EF55#2D%K```&XYE30S0`$
XMYJA(0D)"YJI(0X#!-@`P`C0#2$'$P9""9```"%-#T(%D_G(`,@-(0^>X2$#!&
XM028?)!].=4CG`S(F;P`8+B\`''#_+'@`!$ZN_K9\`!P`</^\@&8$<`!@9G`B2
XM(CP``0`!3J[_.B1`(`IF""`&3J[^L&!*)4L`"B`'%4``"15\``0`"$(J``X@!
XM!A5```^3R4ZN_MHE0``0(`MG"")*3J[^GF`:0>H`&"5(`!1!Z@`4)4@`'$*J?
XM`!@5?``"`"`@"DS?3,!.=4CG(`(L>0``!;!,[P`&``Q.KO_B3-]`!$YU```OE
XM#BQY```%L"(O``A.KO_<+%].=4CG,`(L>0``!;!,[P`.`!!.KO_03-]`#$YU_
XM``!(YS@"+'D```6P3.\`'@`43J[_=DS?0!Q.=0``+PXL>0``!;`B+P`(3J[_6
XM0"Q?3G4O#BQY```%L"(O``A.KO\Z+%].=2\.+'D```6L3J[_?"Q?3G4O#BQY[
XM```%K$ZN_W8L7TYU+PXL>0``!:Q,[P`#``A.KO\Z+%].=0``+PXL>0``!:PB!
XM;P`(("\`#$ZN_RXL7TYU+PXL>0``!:Q,[P,```A.KO\0+%].=0``+PXL>0``=
XM!:Q,[P,```A.KO\*+%].=0``+PXL>0``!:PB;P`(3J[_!"Q?3G4O#BQY```%J
XMK"!O``A.KO[^+%].=2\.+'D```6L(F\`"$ZN_MHL7TYU+PXL>0``!:Q,[P,`H
XM``A.KOZ2+%].=0``+PXL>0``!:P@;P`(3J[^C"Q?3G4O#BQY```%K"!O``A.8
XMKOZ`+%].=2\.+'D```6L(F\`"$ZN_F(L7TYU+PXL>0``!:PB;P`(("\`#$ZN3
XM_=@L7TYU+PXL>0``!:Q,[P,```@@+P`03J[]D"Q?3G4``````^P````!````B
XM````'B0````N`````0``*%0``"@\```H*```*!0``"@````GZ```)]0``"?`V
XM```GK```)Y0``"=\```G9```)TP``"<\```G+```)Q@``"<$```FZ@``)LX`3
XM`":X```FG@``'1@``!RN```<"@``&W(``!LB```:F```&.P``!B2```78@``J
XM%S(``!;L```69```%@0``!6*```4_@``%,0``!2@```4A```%$@``!0H```3?
XM^@``$]```!..```3$`````H````````#\`````)?<W1R;F-P>0``(S@````$Q
XM7V-R96%T97)A;69I;&4`````%/0````#7T%L;&]C365M```````G2`````)?W
XM<W1R8W!Y````(W`````"7T=E=$AE860``!2:````!%]#;&]S94QI8G)A<GD`'
XM`````"@D`````E]!9&1486EL```GD`````-?9V5T;&]C:V9I;&4``!<L````E
XM`U]A;F1Y8V]D90``````$P8````"7T-O<'E-96T``"A0`````E]S=&-U;%]DD
XM```CH`````)?061D2&5A9```)W@````"7T-81#,S`````"5$`````5]?<&8`B
XM`"*<`````U]F<F5E<F%M9FEL90``%?X````"7U)E;4AE860``">\`````E]N>
XM8V-M<``````4O@````)?7W!F;70`````'N0````#7W)A;75N;&]C:P`````6R
XMY@````-?<V5A<F-H<&%T:````!=8`````E]D;W-F<F5E```4(@````)?<W1C$
XM;%]O````(]`````"7U!E<FUI=````"<X`````E]#6$0R,@`````E=@````)?^
XM<W!R:6YT9@``)*(````"7VUO=FUE;0```"3<`````E]S=&-I7V\````CT```3
XM``1?<F5T=7)N<&%C:V5T```````3A`````)?4F5M;W9E````)Z@````#7W-EJ
XM;F1P86-K970````<I`````)?5W)I=&4`````)L@````"7TYE=TQI<W0``![0Y
XM`````U]D96)U9W!R;V,`````'AH````#7V1B=6YI;FET```````;&@````)?J
XM1F]R8FED````)R@````#7V1O<V%L;&]C```````3]`````)?8G-E=```````N
XM';(````"7T1E;&%Y`````"<4`````U]M>7)E861S;VUE````'0X````#7T1EH
XM;&5T95!O<G0````E!`````-?1&%T95-T86UP`````"<``````E]?0UA$,C(`'
XM```E=@````-?9G)E961A=&$``````!6$`````E]B>F5R;P`````=K`````-?`
XM3W!E;DQI8G)A<GD``"@X`````E]#;&]S90`````FM`````)?<W1C9%]I````/
XM)#P````#7V1B<')I;G1F```````;:`````)?9&)I;FET````&I(````"7VYOC
XM;F%M90```````````E]S=')U<'(````B]`````)?<W1C:5]H````)!`````$;
XM7W!A8VME='-Q=65U960`````$\H````"7T=E=$US9P```"?\`````E]&<F5E>
XM365M```G8`````)?<W1C;&5N````(UP````#7W1Y<&5T;W-T<@`````8Y@``M
XM``)?8G1O<P``````%$(````#7T-R96%T95!R;V,````FY`````)?<W1C;%]HA
XM````)!`````#7T9I;F1487-K```````GT`````-?3F5X=$YO9&4``````!1^Z
XM`````U]786ET4&]R=```````*!`````"7W-T<FQE;@```"-<`````E]R86UL9
XM;V-K```66@````)?<W1C=5]D````(Z`````"7W-T<F-M<````".``````U]&8
XM:6YD2&%N9&QE<@``'BX````"7U]#6$0S,P```"5$`````E]/<&5N```````F,
XMF`````-?9&5B=6=M86EN`````!P$`````E]0=71-<V<````GY`````-?0W)E.
XM871E4&]R=````"8(````!%]G971P871H96QE;65N=````!B(`````````_(`<
XM``/J```!B@````$``````````&1O<RYL:6)R87)Y`%)/3U0@3D%-13H@)6QDV
XM("<E<R<*``!086-K970Z("4S;&0@)3`X;'@@)3`X;'@@)3`X;'@@)3$P<R``6
XM`"<E<R<@`&1E8G5G;V9F``!D96)U9V]N`'9I<G1U86QO;@!6:7)T=6%L(&ESS
XM(&]N"@``=FER='5A;&]F9@``5FER='5A;"!I<R!O9F8*`&YO="!V:7)T=6%L)
XM(&9I;&4L('1R96%T:6YG(&%S(&YO<FUA;`H`=FER='5A;#H@;F%M92!T;R!F<
XM:6YD(&ES("5S"@``9&5V:6-E("5S(&YO="!F;W5N9`H``&1E=FEC92`E<R!W7
XM87,@9F]U;F0@)6QX"@``,#`Q.B!P86-K970@<V5N="$*```P,#(Z(&YO(&5RK
XM<F]R"@``9FEL92!H86YD;&4@:7,@)6QD"@!R96%D``!W<FET90!&14XZ("5LO
XM9"`@;&5F=#H@)6QD"@``4$%.24,A($%74C`*``!004Y)0R$@05=2,0H``$Y%<
XM5T9%3CH@*"5L9"D*``!.15=&14XZ("HJ*BHJ*B!5;F%B;&4@=&\@86QL;V-AY
XM=&4@8G5F9F5R("5L9`H`8VQO<V4`<V5E:P``8V]O;&\@)6QD("5L9`H``&5X]
XM86UI;F4Z(&9I;&4@:7,@;F]T('9I<G1U86P``"<E<R<@)6QD(``*4D5.04U%U
XM("<E<R<@*"5L9"D@(```5$\@)R5S)R`H)6QD*0!214X@)R5S)R`E;&0``$522
XM4CTE;&0*``!215,])3`V;'@*``!#86X@=V4@<F5M;W9E(&]U<G-E;'9E<S\@1
XM`"`N+B`@;F]T('EE="$*```J*BHJ4$%.24,Z(%5N86)L92!T;R!F:6YD('9OW
XM;'5M92!N;V1E"@``86-C97-S:6YG("5S"@!(;VQY(%-H:70@0F%T;6%N(0H`G
XM`&%C8V5S<VEN9R!D;VYE("5S"@``1E)%12!&14XZ("4P.&QX("4P.&QX("5L@
XM9`H``$1)10!/4$5.+5)7`$]014XM3TQ$``!/4$5.+4Y%5P``4D5!1```5U))=
XM5$4`0TQ/4T4`4T5%2P``15A!34E.12!.15A4``!%6$%-24Y%($]"2@!)3D9/+
XM``!$25-+($E.1D\`4$%214Y41$E2`$1%3$5410``0U)%051%1$E2`$Q/0TL`/
XM`$154$Q/0TL`1E)%14Q/0TL``%-%5%!23U1%0U0``%-%5$-/34U%3E0``%)%`
XM3D%-10``24Y(24))5`!214Y!344@1$E32P!-3U)%($-!0TA%``!704E4($9/\
XM4B!#2$%2`$9,55-(`%)!5TU/1$4`+2TM+2TM+2TM54Y+3D]73BTM+2TM+2T`A
XM1$567T1"``!$96)U9V=E<B!R=6YN:6YG(%8Q+C$P+"`R($YO=F5M8F5R(#$YF
XM.#<*``!7;W)K<R!W:71H(%=/4DM"14Y#2"$*``!C;VXZ,"\P+S8T,"\Q,#`O:
XM9&5B=6=W:6YD;W<`<F5A9'-O;64@;&5F="P@9F5N+3YB>71E<R`E;&0@)6QD[
XM"@``=&]T86P@:7,@)6QD"@``("`@("`@("`@*"@H*"@@("`@("`@("`@("`@1
XM("`@("!($!`0$!`0$!`0$!`0$!`0A(2$A(2$A(2$A!`0$!`0$!"!@8&!@8$!W
XM`0$!`0$!`0$!`0$!`0$!`0$!`1`0$!`0$(*"@H*"@@("`@("`@("`@("`@(";
XM`@("`@("$!`0$"`@("`@("`@("`H*"@H*"`@("`@("`@("`@("`@("`@($@0L
XM$!`0$!`0$!`0$!`0$!"$A(2$A(2$A(2$$!`0$!`0$(&!@8&!@0$!`0$!`0$!&
XM`0$!`0$!`0$!`0$!$!`0$!`0@H*"@H*"`@("`@("`@("`@("`@("`@("`@(0P
XM$!`0(```````````````````````````````````````````````````````0
XM`````````````````````````````````````````````````````````````
XM`````````````````````````````````````````````````````````````
XM``````````````/P`````U]$0D1I<V%B;&4`````!@H````"7U)&4F]O=```\
XM``6T`````E]$8F%C:P``````"`````)?1&]S3F]D90``!:0````#7T1U;6UY;
XM37-G```````&#`````)?4WES0F%S90``!:P````"7T1B<&]R=``````$````5
XM`E]$979,:7-T```%J`````)?3$-"87-E````!?H````"7U]C='EP90````2<X
XM`````E]&2$)A<V4````%[@````)?5FER='5A;``````````"7T1O<U!R;V,``
XM``6@`````U]4;W1A;$)Y=&5S````!@8````"7T1/4T)A<V4```6P````````5
X"`_*@5
X``
Xend
Xsize 13772
END_OF_FILE
if test 19321 -ne `wc -c <'virtual.uu'`; then
    echo shar: \"'virtual.uu'\" unpacked with wrong size!
fi
# end of 'virtual.uu'
fi
echo shar: End of archive 1 \(of 4\).
cp /dev/null ark1isdone
MISSING=""
for I in 1 2 3 4 ; do
    if test ! -f ark${I}isdone ; then
	MISSING="${MISSING} ${I}"
    fi
done
if test "${MISSING}" = "" ; then
    echo You have unpacked all 4 archives.
    rm -f ark[1-9]isdone
else
    echo You still need to unpack the following archives:
    echo "        " ${MISSING}
fi
##  End of shell archive.
exit 0
-- 
Mail submissions (sources or binaries) to <amiga@uunet.uu.net>.
Mail comments to the moderator at <amiga-request@uunet.uu.net>.
Post requests for sources, and general discussion to comp.sys.amiga.misc.