[net.micro.amiga] Screen Grabber to IFF file, and arbitrary IFF Decoder!

dillon@CORY.BERKELEY.EDU (Matt Dillon) (10/18/86)

	Here are two quick programs I wrote:

	(1) Grab an active Screen and write it to a file in IFF	 -IFFENCODE
	(2) Decode arbitrary IFF files (e.g. see the format of)	 -IFFDUMP

	The routine to grab the highest screen in IFFENCODE.C was taken
from a similar program Carolyn from amiga wrote and posted (same thing, but
it dumped the image to printer).

	Since the programs require my library to compile, I've also included
the uuencoded binaries.  Have Fun!

	I tried to dump Dave Wecker's HAM pictures... the dump worked fine,
but every VIEWing program I have either refuses to open an interlace HAM
display, or runs out of memory because it keeps a second copy of the picture
around (96K pics!).  

	The decoder program is useful to get the general layout of IFF
files.  It decodes any IFF file down to the CHUNK name and size.  It will
print additional information only for CHUNK types it knows about...
admittedly I did not spend much time making the latter complete.

	Tell me what ya' think.


				-Matt





#! /bin/sh
# This is a shell archive, meaning:
# 1. Remove everything above the #! /bin/sh line.
# 2. Save the resulting text in a file.
# 3. Execute the file with /bin/sh (not csh) to create:
#	iff.h
#	iffdump.c
#	iffencode.c
#	iffdump.uue
#	iffencode.uue
# This archive created: Sat Oct 18 01:10:22 1986
export PATH; PATH=/bin:/usr/bin:$PATH
echo shar: "extracting 'iff.h'" '(2414 characters)'
if test -f 'iff.h'
then
	echo shar: "will not over-write existing file 'iff.h'"
else
cat << \!Funky!Stuff! > 'iff.h'

/*
 * IFF.H
 *
 * Chunk:
 *       char id[4]
 *       long  cksize;
 *       uchar ckdata[cksize];
 *       [0 pad to word boundry]
 *
 * Property = Chunk
 * FORM     = Chunk / data = formtype + N-subchunks
 *
 * CAT      = Chunk / data = type + list of chunks: FORM LIST or CAT
 * LIST     = Chunk / data = type + N-Props + N(FORM LIST CAT)
 * PROP     = Chunk / data = formtype + property
 *
 *
 * ILBM  =  FORM(ILBM): BMHD [CMAP][GRAB][DEST][SPRT][CAMG][CRNG+][BODY]
 *
 */

#include <exec/types.h>


#define MAKEID(a,b,c,d) ((a)<<24 | (b)<<16 | (c)<<8 | (d))

#define IFF_FORM     MAKEID('F','O','R','M')
#define IFF_LIST     MAKEID('L','I','S','T')
#define IFF_PROP     MAKEID('P','R','O','P')
#define IFF_CAT      MAKEID('C','A','T',' ')
#define IFF_FILLER   MAKEID(' ',' ',' ',' ')

#define TYPE_ILBM    MAKEID('I','L','B','M')
#define TYPE_FTXT    MAKEID('F','T','X','T')


#define ILBM_BMHD    MAKEID('B','M','H','D')    /* PROP                */
#define ILBM_CMAP    MAKEID('C','M','A','P')    /* PROP                */
#define ILBM_GRAB    MAKEID('G','R','A','B')    /* PROP                */
#define ILBM_DEST    MAKEID('D','E','S','T')    /* PROP merging        */
#define ILBM_SPRT    MAKEID('S','P','R','T')    /* PROP body is sprite */
#define ILBM_CAMG    MAKEID('C','A','M','G')    /* PROP VP mode        */
#define ILBM_CRNG    MAKEID('C','R','N','G')    /* PROP color cycling  */
#define ILBM_BODY    MAKEID('B','O','D','Y')    /* bit mapped body     */



/* STRUCTURES */


typedef struct {
   long id;
   long cksize;
} CHUNK;


#define MA_NONE          0    /* masking */
#define MA_HASMASK       1
#define MA_HASTRANSCOLOR 2
#define MA_LASSO         3

#define CP_NONE          0    /* compression */
#define CP_BYTERUN1      1

typedef struct {
   UWORD w, h;
   WORD  x, y;
   UBYTE planes;
   UBYTE masking;
   UBYTE compression;
   UBYTE pad1;
   UWORD transparent_color;
   UBYTE xaspect, yaspect;
   WORD  pagewidth, pageheight;
} X_BMHD;

typedef UBYTE X_CMAP[3];      /* each map entry is 3 bytes  */

typedef UWORD X_GRAB[2];      /* grab entry x, y            */

typedef struct {
   UBYTE depth;
   UBYTE pad1;
   UWORD p_pick;
   UWORD p_onoff;
   UWORD p_mask;
} X_DEST;

typedef UWORD X_SPRT;         /* precedence               */

typedef struct {
   ULONG vpmodes;
} X_CAMG;

typedef struct {
   WORD  pad1;
   WORD  rate;
   WORD  active;
   UBYTE low, high;
} X_CRNG;

!Funky!Stuff!
fi  # end of overwriting check
echo shar: "extracting 'iffdump.c'" '(6933 characters)'
if test -f 'iffdump.c'
then
	echo shar: "will not over-write existing file 'iffdump.c'"
else
cat << \!Funky!Stuff! > 'iffdump.c'

/*
 * DECODE IFF formatted files    V1.00
 *
 *	COMPILE W/ASTARTUP.OBJ and MY.LIB
 *
 * iffdump [-vV] file
 *
 * -v    :  display a little more information (only for forms and types
 *          the program knows about)
 * -V    :  display additional hex dump of all sections
 *
 *
 * NOTE:  The '-v' flag could use *a lot* of expansion... Since I haven't
 *        got the latest IFF documentation.
 *
 *
 * NOTE:  This program does almost no format checking (e.g. PROP's only
 *        within LIST's, etc...), it is meant to display the format of
 *        valid IFF files.
 */

#include "iff.h"
#include <graphics/view.h>


#define MODE_V1   0x01
#define MODE_V2   0x02

extern char *tabstr(), *ltos();

union {
   X_BMHD bmhd;
   X_CMAP cmap[64];
   X_GRAB grab;
   X_DEST dest;
   X_SPRT sprt;
   X_CAMG camg;
   X_CRNG crng;
} U;

int Modes;

main(ac, av)
char *av[];
{
   int i, j;
   char *str;
   long fi;
   long endpos;

   for (j = 0, i = 1; i < ac; ++i) {
      str = av[i];
      if (*str == '-') {
         while (*++str) {
            switch(*str) {
            case 'v':
               Modes |= MODE_V1;
               break;
            case 'V':
               Modes |= MODE_V2;
               break;
            default:
               printf ("'%lc' bad option\n", *str);
            }
         }
      } else {
         if (j) {
            puts("May specify only one file");
            exit(1);
         }
         j = i;
      }
   }
   if (j == 0) {
      puts ("IFFDUMP [-vV] file");
      puts ("(c)1986 Matthew Dillon.  Public Domain V1.00");
      puts ("");
      puts ("-v   show detail on things the prog. knows about");
      puts ("-V   show hex dump");
      exit(1);
   }
   fi = xopen(av[j], "r", 8192);
   if (fi == NULL) {
      puts ("could not open file");
      exit(1);
   }
   endpos = xseek(fi, 0, 1);
   xseek(fi, 0, -1);
   iffdecode(fi, 0, endpos);
   xclose(fi);
   if (checkbreak())
      puts ("*BREAK*");
}


iffdecode(fi, tab, endpos)
{
   long chunk[2];
   long curpos, bytes, curend;
   long data;
   char ok;
   char count = 0;

   for (;;) {
      curpos = xseek(fi, 0, 0);
      if (curpos == endpos)
         return(1);
      if (count++ && tab == 0) {
         puts ("Warning: Garbage after IFF-EOF");
         return (0);
      }
      if (curpos + 8 > endpos) {
         puts ("Error: Premature End Of File in header");
         return(0);
      }
      xread(fi, chunk, 8);
      curpos += 8;
      bytes = chunk[1];
      curend = curpos + bytes;
      printf ("%sCHUNK %s (%8ld)", tabstr(tab), ltos(chunk[0]), bytes);
      if (curend > endpos) {
         puts ("\nError: Premature End Of File within chunk");
         return(0);
      }

      ok = 0;
      switch(chunk[0]) {
      case IFF_FILLER:
         printf ("A filler chunk\n");
         if (Modes & MODE_V2)
            hexdump(fi, curpos, bytes, tab);
         break;
      case IFF_FORM:
      case IFF_LIST:
      case IFF_CAT:
      case IFF_PROP:
         xread(fi, &data, 4);
         curpos += 4;
         bytes  -= 4;
         printf ("TYPE %s\n", ltos(data));
         if (checkbreak())
            break;
         iffdecode(fi, tab + 4, curend);
         if (checkbreak())
            break;
         break;
      default:
         ok = 1;
         break;
      }
      if (ok) {
         puts ("");
         if (Modes & MODE_V1)
            decode_sub(fi, tab, chunk[0], bytes);
         if (Modes & MODE_V2)
            hexdump(fi, curpos, bytes, tab);
      }
      if (curend & 1) {
         printf ("%s(Filler Byte)\n", tabstr(tab));
         ++curend;
      }
      xseek(fi, curend, -1);
      if (checkbreak())
         break;
   }
}



decode_sub(fi, tab, name, bytes)
{
   int i, j;

   tab += 4;
   switch (name) {
   case ILBM_BMHD:
      cs(sizeof(U.bmhd), bytes);
      xread(fi, &U.bmhd, sizeof(U.bmhd));
      printf ("%s width= %-4ld\n", tabstr(tab), U.bmhd.w);
      printf ("%sheight= %-4ld\n", tabstr(tab), U.bmhd.h);
      printf ("%splanes= %-4ld\n", tabstr(tab), U.bmhd.planes);
      printf ("%s     x= %-4ld\n", tabstr(tab), U.bmhd.x);
      printf ("%s     y= %-4ld\n", tabstr(tab), U.bmhd.y);
      printf ("%s  mask= x%-2lx\n",tabstr(tab), U.bmhd.masking);
      printf ("%s  comp= x%-2lx\n",tabstr(tab), U.bmhd.compression);
      printf ("%stcolor= %-2ld\n", tabstr(tab), U.bmhd.transparent_color);
      printf ("%sxaspct= %-2ld\n", tabstr(tab), U.bmhd.xaspect);
      printf ("%syaspct= %-2ld\n", tabstr(tab), U.bmhd.yaspect);
      printf ("%s pagew= %-4ld\n", tabstr(tab), U.bmhd.pagewidth);
      printf ("%s pageh= %-4ld\n", tabstr(tab), U.bmhd.pageheight);
      break;
   case ILBM_CMAP:
      if (bytes % 3) {
         puts ("Expected multiples of 3 bytes for colormap");
         break;
      }
      if (bytes > 32*3) {
         puts ("Color map is larger than 32 entries");
         break;
      }
      xread(fi, &U.cmap, bytes);
      j = bytes/3;
      for (i = 0; i < j; ++i) {
         printf ("%scolor %2ld   %2lx %2lx %2lx\n",
            tabstr(tab), i, U.cmap[i][0], U.cmap[i][1], U.cmap[i][2]);
      }
      break;
   case ILBM_GRAB:
   case ILBM_DEST:
   case ILBM_SPRT:
      puts ("");
      break;
   case ILBM_CAMG:
      xread(fi, &U.camg, sizeof(U.camg));
      i = U.camg.vpmodes;
      printf ("%sVP MODES = %8lx (", tabstr(tab), i);
      if (i & HIRES)
         printf("HIRES ");
      if (i & SPRITES)
         printf("SPRITES ");
      if (i & VP_HIDE)
         printf("VP_HIDE ");
      if (i & HAM)
         printf ("HAM ");
      if (i & DUALPF)
         printf ("DUALPF ");
      if (i & GENLOCK_AUDIO)
         printf ("GENLOCK_AUDIO ");
      if (i & EXTRA_HALFBRITE)
         printf ("EXTRA_HALFBRITE ");
      if (i & PFBA)
         printf ("PFBA ");
      if (i & LACE)
         printf ("LACE ");
      if (i & GENLOCK_VIDEO)
         printf ("GENLOCK_VIDEO ");
      puts (")");
      break;
   case ILBM_CRNG:
   case ILBM_BODY:
      break;
   }
}



hexdump(fi, curpos, bytes, tab)
{
   long pos;
   UBYTE ch;

   pos = 0;
   xseek(fi, curpos, -1);
   while (bytes) {
      xread(fi, &ch, 1);
      if ((pos & 15) == 0) {
         if (checkbreak())
            break;
         printf("\n%s%5lx     ", tabstr(tab+4), pos);
      }
      printf ("%2lx ", ch);
      ++pos;
      --bytes;
   }
   puts("");
}



cs(shouldbe, actual)
{
   if (shouldbe != actual)
      printf ("Expected %ld bytes, got %ld\n", shouldbe, actual);
}


char *
tabstr(tab)
{
   static char space[128];
   static int lasttab;
   static int init = 1;

   if (init) {
      bset(space + 1, 127, ' ');
      init = 0;
   }
   if (tab != lasttab) {
      space[lasttab] = ' ';
      space[lasttab = tab] = '\0';
   }
   return (space);
}

char *
ltos(data)
unsigned long data;
{
   static char buf[5];

   buf[0] = (data >> 24) & 0xFF;
   buf[1] = (data >> 16) & 0xFF;
   buf[2] = (data >> 8 ) & 0xFF;
   buf[3] = data & 0xFF;
   return(buf);
}


!Funky!Stuff!
fi  # end of overwriting check
echo shar: "extracting 'iffencode.c'" '(7906 characters)'
if test -f 'iffencode.c'
then
	echo shar: "will not over-write existing file 'iffencode.c'"
else
cat << \!Funky!Stuff! > 'iffencode.c'

/*
 * IFFENCODE
 *
 *		COMPILE W/ASTARTUP.OBJ and MY.LIB
 *
 * Grabs the highest screen and dumps it to a file in IFF.
 *
 * Screen-Finding routine taken from Carolyn's Printer Dump source.
 *
 *
 */

#include <exec/types.h>
#include <exec/memory.h>
#include <libraries/dos.h>
#include <graphics/gfxbase.h>
#include <graphics/rastport.h>
#include <graphics/gfx.h>
#include <graphics/view.h>

#include <intuition/intuition.h>
#include <intuition/intuitionbase.h>

#define FLAG_NOCOMP  0x01
#define FLAG_NOLACE  0x02
#define FLAG_DEBUG   0x04

typedef struct IntuitionBase  IBASE;
typedef struct GfxBase        GFXBASE;
typedef struct Window         WIN;
typedef struct Screen         SCR;
typedef struct ViewPort       VP;
typedef struct RastPort       RP;
typedef struct ColorMap       CM;
typedef struct BitMap         BM;

IBASE    *IntuitionBase;
GFXBASE  *GfxBase;

main(ac, av)
char *av[];
{
   char notdone = 1;
   char buf[80];
   char flags = 0;
   int i;
   VP *vp;
   RP *rp;
   CM *cm;

   for (i = 1; i < ac; ++i) {
      if (strcmp(av[i], "NOLACE") == 0)
         flags |= FLAG_NOLACE;
      else if (strcmp(av[i], "NOCOMP") == 0)
         flags |= FLAG_NOCOMP;
      else if (strcmp(av[i], "DEBUG") == 0)
         flags |= FLAG_DEBUG;
      else {
         puts ("iffencode [NOLACE][NOCOMP]");
         puts ("(c)1986 Matthew Dillon.  Public Domain V1.00");
         puts ("");
         puts ("NOLACE  -save only top half of screen if in interlace");
         puts ("NOCOMP  -do NOT use BYTERUN1 compression");
         exit(1);
      }
   }

   if ((IntuitionBase=(IBASE *)OpenLibrary("intuition.library",0)) == NULL)
      cleanexit("Can't open Intuition.\n");
   if ((GfxBase=(GFXBASE *)OpenLibrary("graphics.library",0)) == NULL)
      cleanexit("Can't open Graphics.\nn");

   do_imopts(&vp, &cm, &rp);

   while(notdone) {
      printf("\nSELECT: <W>rite, <N>ewImage, <Q>uit ?");
      switch (getch()) {
      case 'W':
         printf ("\nWrite to file (leave blank to abort):");
         gets(buf);
         if (buf[0]) {
            long fi = xopen(buf, "w", 8192);
            if (fi) {
               xasync(fi, 1);
               do_write(flags, vp, cm, rp, fi);
               xclose(fi);
               if (checkbreak()) {
                  puts ("*BREAK*, file deleted");
                  resetbreak();
                  DeleteFile(buf);
               }
               puts ("done");
            } else {
               puts ("could not open file");
            }
         }
         break;
      case 'N':
         do_imopts(&vp, &cm, &rp);
         break;
      case 'Q':
         notdone = 0;
         break;
      }
   }
   cleanup();
}



do_imopts(r_vp, r_cm, r_rp)
VP **r_vp;
CM **r_cm;
RP **r_rp;
{
   puts  ("Move Screens so Screen to grab is highest.");
   printf("press <RET> when ready: ");
   getch();
   getPointers(r_vp, r_cm, r_rp);
}


getPointers(r_vp, r_cm, r_rp)
VP **r_vp;
CM **r_cm;
RP **r_rp;
{
   SCR *firstscreen, *nextscreen, *highscreen;
   int topEdge;

   Forbid();
   firstscreen  = IntuitionBase->FirstScreen;
   topEdge = 9999;
   nextscreen = highscreen = firstscreen;
   while(nextscreen) {
      if(nextscreen->TopEdge < topEdge) {
         topEdge = nextscreen->TopEdge;
         highscreen = nextscreen;
      }
      nextscreen = nextscreen->NextScreen;
   }
   Permit();

   *r_vp = &(highscreen->ViewPort);
   *r_cm = (*r_vp)->ColorMap;
   *r_rp = &(highscreen->RastPort);
}


getch()
{
   char scr[80];
   if (gets(scr)) {
      if (scr[0] >= 'a' && scr[0] <= 'z')
         scr[0] = scr[0] - 'a' + 'A';
      return ((int)scr[0]);
   }
   return(' ');
}

cleanexit(errMsg)
char *errMsg;
{
   printf(errMsg);
   cleanup();
   exit(-1);
}

cleanup()
{
   if (IntuitionBase)     CloseLibrary(IntuitionBase);
   if (GfxBase)           CloseLibrary(GfxBase);
}


/*
 * Dump rastport in IFF.
 */


#include "iff.h"

do_write(flags, vp, cm, rp, fi)
VP *vp;
CM *cm;
RP *rp;
long fi;
{
   BM *bm = rp->BitMap;
   X_BMHD   x_bmhd;
   X_CMAP   x_cmap[32];
   X_CAMG   x_camg;
   int cme, i, j;

   x_bmhd.w = bm->BytesPerRow << 3;
   x_bmhd.h = bm->Rows;
   x_bmhd.x = x_bmhd.y = 0;
   x_bmhd.planes = bm->Depth;
   x_bmhd.masking= MA_NONE;
   x_bmhd.compression = (flags & FLAG_NOCOMP) ? CP_NONE : CP_BYTERUN1;
   x_bmhd.transparent_color = 0;
   x_bmhd.xaspect = 10;
   x_bmhd.yaspect = 11;
   x_bmhd.pagewidth = x_bmhd.w;
   x_bmhd.pageheight= x_bmhd.h;

   j = 1 << x_bmhd.planes;

   if (j == 64)
      j = 32;
   if (j > 32) {
      printf ("Illegal #colors/#planes: %ld/%ld\n", j, x_bmhd.planes);
      return(0);
   }

   {
      UWORD *w;
      for (i = 0, w = (UWORD *)cm->ColorTable; i < j; ++i, ++w) {
         x_cmap[i][0] = ((*w >> 8) & 0x0F) << 4;
         x_cmap[i][1] = ((*w >> 4) & 0x0F) << 4;
         x_cmap[i][2] = ((*w) & 0x0F) << 4;
      }
      cme = j;
   }

   x_camg.vpmodes = vp->Modes & (PFBA|DUALPF|HIRES|LACE|HAM);

   if ((flags & FLAG_NOLACE) && (x_camg.vpmodes & LACE)) {
      x_camg.vpmodes &= ~LACE;
      x_bmhd.h >>= 1;
      x_bmhd.pageheight = x_bmhd.h;
   }

   printf ("vpmode = (%ldx%ldx%ld) %8lx\n", x_bmhd.w, x_bmhd.h, x_bmhd.planes, x_camg.vpmodes);

   iff_chunk(fi, IFF_FORM);
   iff_type (fi, TYPE_ILBM);

      iff_chunk(fi, ILBM_BMHD);
      xwrite(fi, &x_bmhd, sizeof(x_bmhd));
      iff_chunk(fi, 0);

      iff_chunk(fi, ILBM_CMAP);
      xwrite(fi, &x_cmap, sizeof(X_CMAP) * cme);
      iff_chunk(fi, 0);

      iff_chunk(fi, ILBM_CAMG);
      xwrite(fi, &x_camg, sizeof(x_camg));
      iff_chunk(fi, 0);

      iff_chunk(fi, ILBM_BODY);
      for (i = 0; i < x_bmhd.h; ++i) {
         for (j = 0; j < x_bmhd.planes; ++j) {
            dumprow(fi, bm->Planes[j]+(i*bm->BytesPerRow), bm->BytesPerRow, flags);
            if (checkbreak())
               goto outall;
         }
      }
outall:
      iff_chunk(fi, 0);
   iff_chunk(fi, 0);
}


dumprow(fi, ptr, bytes, flags)
UBYTE *ptr;
{
   int i, j, k;            /* base, literal end, replicate end */
   UBYTE ch;

   if (flags & FLAG_NOCOMP)
      return(xwrite(fi, ptr, bytes));
   if (flags & FLAG_DEBUG)
      puts ("SCANLINE");
   i = j = k = 0;
   while (j < bytes) {
      if (checkbreak())
         return(0);
      for (k = j; k < bytes && ptr[j] == ptr[k]; ++k);
      if (k - j >= 3) {
         while (j - i >= 128) {
            ch = 127;
            xwrite(fi, &ch, 1);
            xwrite(fi, ptr + i, 128);
            i += 128;
         }
         if (j - i > 0) {
            ch = (j - i - 1);
            xwrite(fi, &ch, 1);
            xwrite(fi, ptr + i, j - i);
         }

         while (k - j >= 128) {
            ch = -127;
            xwrite(fi, &ch, 1);
            xwrite(fi, ptr + j, 1);
            j += 128;
         }

         if (k - j > 0) {
            ch = -(k - j - 1);
            xwrite(fi, &ch, 1);
            xwrite(fi, ptr + j, 1);
         }
         i = j = k;
      } else {
         j = k;
      }
   }
   /* NOTE: i=start  */
   while (bytes - i >= 128) {
      ch = 127;
      xwrite(fi, &ch, 1);
      xwrite(fi, ptr + i, 128);
      i += 128;
   }
   if (bytes - i > 0) {
      ch = (j - i - 1);
      xwrite(fi, &ch, 1);
      xwrite(fi, ptr + i, bytes - i);
   }
   /*
   if (xseek(fi, 0, 0) & 1) {
      ch = 0x80;
      xwrite(fi, &ch, 1);
   }
   */
   return (1);
}


iff_type(fi, type)
{
   xwrite(fi, &type, 4);
}

iff_chunk(fi, type)
{
   static long seeka[128];
   static int idx;
   long zero = 0;
   long bytes;
   long oldpos;

   if (type) {
      xwrite(fi, &type, 4);
      xwrite(fi, &zero, 4);
      seeka[idx++] = xseek(fi, 0, 0);
   } else {
      if (idx) {
         --idx;
         oldpos = xseek(fi, 0, 0);
         bytes = oldpos - seeka[idx];
         if (oldpos & 1) {
            xwrite(fi, &zero, 1);
            ++oldpos;
         }
         xseek(fi, seeka[idx] - 4, -1);
         xwrite(fi, &bytes, 4);
         xseek(fi, oldpos, -1);
      }
   }
}

!Funky!Stuff!
fi  # end of overwriting check
echo shar: "extracting 'iffdump.uue'" '(11748 characters)'
if test -f 'iffdump.uue'
then
	echo shar: "will not over-write existing file 'iffdump.uue'"
else
cat << \!Funky!Stuff! > 'iffdump.uue'
begin 644 iffdump
M```#\P`````````.``````````T```!Q````;@```%0````&````VP````8`
M```,```#NP```!0````(````*0```!(````1````$0```^D```!Q(\\````<
M(\`````D(\@````H0KD````@+'D````$(\X````$D\E.KO[:*$!*K`"L9P``
MJ&$``6P@;`"LT<C1R"!H`!#1R-'(2.<@,$7Y````K$?Y````+'0!<``0&";*
M8`(4V%'(__Q"&B`Y````)"!Y````*!(84X!O'@P!`"!O]%*")LI@"A(84X`,
M`0`@;P04P6#R0AI@W$(:0IL@`DS?#`1(>0```"PO`$ZY````:"/`````$$ZY
M````>"/`````%"/`````&$ZY`````'``+GD````<3G5A``#&80``L"/`````
M($*G+P`D0"`J`"1G$"QY````""!`(B@``$ZN_X(B*@`@9R@D/````^U.KO_B
M(\`````0(\`````4(\`````89PKEB"!`*6@`"`"D3KD`````<`!@!"`O``0N
M>0```!PO`"QY````!"`Y````"&<"(D!.KOYB2KD````@9PY.KO]\(GD````@
M3J[^AB`?3G5(YP$&+CP``X`'+'@`!$ZN_Y1,WV"`<&1@L$'L`%Q.KOZ`0>P`
M7$ZN_HQ.=4*Y````"$/Y```!K"`\````'DZN_=@CP`````AGMDYU``````/L
M````&@````$```&Z```!J@```:0```%J```!7@```5````%"```!(@```1P`
M``$6````]@```.0```#4````Q@```,````"T````I@```'(```!L````5```
M`$X````@````%`````X````(`````@````(````'```!-````,P````"````
M"@```*X```"Z`````````_`````"97AI=#(```````%``````G!A<FU%>&ET
M````F@````)W86ET;7-G`````9`````"9&]M86EN``````$R`````F1O8V]N
M<P`````!!`````1F<F]M5V]R:V)E;F-H````````V@````-E>&ET5&]$3U,`
M``````%R`````F9R;VU#3$D`````-`````)?97AI=````````3P````";W!E
M;D1/4P````&B`````C8D-S4R````````E@````)S=&%R='5P```````````"
M-20W-3(```````"2`````C0D-S4R````````B`````(S)#<U,@```````'8`
M```",B0W-3(```````!B`````C$D-S4X```````!6`````(Q)#<U,@``````
M`&0````";F]$3U,```````%V`````````_(```/J````;@`!````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````9&]S+FQI8G)A<GD````#\`````)697)2978`````````
M```"7T1/4T)A<V4````(`````E]S=&1I;@``````$`````-D;W-#;61,96X`
M```````D`````VEN:71I86Q34````````!P````#9&]S0VUD0G5F````````
M*`````-A<F=V07)R87D````````L`````E]E<G)N;P``````#`````)?4WES
M0F%S90````0````"1$]33F%M90````&L`````V%R9W9"=69F97(``````*P`
M```"7W-T9&]U=``````4`````E]S=&1E<G(`````&`````-R971U<FY-<V<`
M```````@`````````_(```/K````5````_(```/I````!B!O``0B+P`,("\`
M"&<```@0P5.`9OI.=0```_(```/J````VR<E;&,G(&)A9"!O<'1I;VX*`$UA
M>2!S<&5C:69Y(&]N;'D@;VYE(&9I;&4`249&1%5-4"!;+79672!F:6QE`"AC
M*3$Y.#8@36%T=&AE=R!$:6QL;VXN("!0=6)L:6,@1&]M86EN(%8Q+C`P```M
M=B`@('-H;W<@9&5T86EL(&]N('1H:6YG<R!T:&4@<')O9RX@:VYO=W,@86)O
M=70`+58@("!S:&]W(&AE>"!D=6UP`'(`8V]U;&0@;F]T(&]P96X@9FEL90`J
M0E)%04LJ`%=A<FYI;F<Z($=A<F)A9V4@869T97(@249&+45/1@!%<G)O<CH@
M4')E;6%T=7)E($5N9"!/9B!&:6QE(&EN(&AE861E<@`E<T-(54Y+("5S("@E
M.&QD*0`*17)R;W(Z(%!R96UA='5R92!%;F0@3V8@1FEL92!W:71H:6X@8VAU
M;FL`02!F:6QL97(@8VAU;FL*`%194$4@)7,*```E<RA&:6QL97(@0GET92D*
M`"5S('=I9'1H/2`E+31L9`H`)7-H96EG:'0]("4M-&QD"@`E<W!L86YE<ST@
M)2TT;&0*`"5S("`@("!X/2`E+31L9`H`)7,@("`@('D]("4M-&QD"@`E<R`@
M;6%S:ST@>"4M,FQX"@`E<R`@8V]M<#T@>"4M,FQX"@`E<W1C;VQO<CT@)2TR
M;&0*`"5S>&%S<&-T/2`E+3)L9`H`)7-Y87-P8W0]("4M,FQD"@`E<R!P86=E
M=ST@)2TT;&0*`"5S('!A9V5H/2`E+31L9`H`17AP96-T960@;75L=&EP;&5S
M(&]F(#,@8GET97,@9F]R(&-O;&]R;6%P`$-O;&]R(&UA<"!I<R!L87)G97(@
M=&AA;B`S,B!E;G1R:65S`"5S8V]L;W(@)3)L9"`@("4R;'@@)3)L>"`E,FQX
M"@``)7-64"!-3T1%4R`]("4X;'@@*`!(25)%4R``4U!2251%4R``5E!?2$E$
M12``2$%-(`!$54%,4$8@`$=%3DQ/0TM?055$24\@`$585%)!7TA!3$9"4DE4
M12``4$9"02``3$%#12``1T5.3$]#2U]6241%3R``*0`*)7,E-6QX("`@("``
M)3)L>"```$5X<&5C=&5D("5L9"!B>71E<RP@9V]T("5L9`H``````0``"@``
M`````_(```/I````!B!O``1*&&;\D>\`!)'\`````2`(3G4``````_(```/I
M````#"!O``0B;P`(("\`#&<``!ZSR&<``!AO```.T<#3P!,@4X!F^DYU$MA3
M@&;Z3G4``````_(```/I```#NTY6_^Q"KO_X<`$M0/_\("[__+"N``AL``"<
MY8`@;@`,T<`M4/_T(&[_]!`0#```+694(&[_]%*(+4C_]$H09VP0$$B`2,`,
M@````%9G$@R`````=F84"/D``````,-@T@CY``$```##8,@@;O_T$!!(@$C`
M+P!(>0````!.N0````!0CV"L2J[_^&<:2'D````23KD```M06(]P`2\`3KD`
M``$\6(\M;O_\__A2KO_\8`#_7$JN__AF4DAY````+$ZY```+4%B/2'D````_
M3KD```M06(](>0```&Q.N0``"U!8CTAY````;4ZY```+4%B/2'D```">3KD`
M``M06(]P`2\`3KD```$\6(\@+O_XY8`@;@`,T<`O/```(`!(>0```+$O$$ZY
M```-S$_O``PM0/_P2H!F&DAY````LTZY```+4%B/<`$O`$ZY```!/%B/<`$O
M`$*G+R[_\$ZY```*-$_O``QR_R\!0J<O+O_P+4#_[$ZY```*-$_O``PO+O_L
M0J<O+O_P82Q/[P`,+R[_\$ZY```*Z%B/3KD```PD2H!G#DAY````QTZY```+
M4%B/3EY.=4Y6_^)"+O_F<``O`"\`+RX`"$ZY```*-$_O``PM0/_TL*X`$&8&
M<`%.7DYU$"[_YE(N_^9*`&<:2JX`#&842'D```#/3KD```M06(]P`$Y>3G4@
M+O_T4("PK@`0;Q1(>0```.Y.N0``"U!8CW``3EY.=7`(+P!(;O_X+RX`"$ZY
M```+M$_O``P@+O_T4(`B+O_\+4#_]-"!+RX`#"U`_^PM0?_P80`''EB/+R[_
M^"]```1A``=P6(\O+O_P+P`O+P`(2'D```$53KD`````3^\`$"`N_^RPK@`0
M;Q1(>0```2=.N0``"U!8CW``3EY.=4(N_^<@+O_X<B@$@0````AK``#.L+L8
M"&;P3OL8!E!23U!@``!60T%4(&```$Y,25-48```1D9/4DU@```^("`@(&``
M``)(>0```5).N0````!8CP@Y``$```##9P``B"\N``PO+O_P+R[_]"\N``AA
M``623^\`$&!L<`0O`$AN_^@O+@`(3KD```NT3^\`#%BN__19KO_P+R[_Z&$`
M!I98CR\`2'D```%B3KD`````4(].N0``#"1*@&8J("X`#%B`+R[_["\`+RX`
M"&$`_D)/[P`,3KD```PD2H!G"&`&'7P``?_G2B[_YV=02'D```%K3KD```M0
M6(\(.0``````PV<6+R[_\"\N__@O+@`,+RX`"&%T3^\`$`@Y``$```##9Q@O
M+@`,+R[_\"\N__0O+@`(80`$SD_O`!`(+@``_^]G'B\N``QA``6*6(\O`$AY
M```!;$ZY`````%"/4J[_['#_+P`O+O_L+RX`"$ZY```*-$_O``Q.N0``#"1*
M@&<`_99.<4Y>3G5.5O_T2.<@`%BN``P@+@`0<D`$@0````AK``18L+L8"&;P
M3OL8!D)/1%E@``1&0U).1V``!#Y#04U'8``#"E-04E1@``+P1$535&```NA'
M4D%"8``"X$--05!@``'\0DU(1&````(O+@`4<!0O`&$`!+)0CW`4+P!(>0``
M```O+@`(3KD```NT3^\`#"\N``QA``2X6(]R`#(Y`````"\!+P!(>0```7U.
MN0````!/[P`,+RX`#&$`!))8CW(`,CD````"+P$O`$AY```!CDZY`````$_O
M``PO+@`,80`$;%B/<@`2.0````@O`2\`2'D```&?3KD`````3^\`#"\N``QA
M``1&6(\R.0````1(P2\!+P!(>0```;!.N0````!/[P`,+RX`#&$`!"!8CS(Y
M````!DC!+P$O`$AY```!P4ZY`````$_O``PO+@`,80`#^EB/<@`2.0````DO
M`2\`2'D```'23KD`````3^\`#"\N``QA``/46(]R`!(Y````"B\!+P!(>0``
M`>1.N0````!/[P`,+RX`#&$``ZY8CW(`,CD````,+P$O`$AY```!]DZY````
M`$_O``PO+@`,80`#B%B/<@`2.0````XO`2\`2'D```('3KD`````3^\`#"\N
M``QA``-B6(]R`!(Y````#R\!+P!(>0```AA.N0````!/[P`,+RX`#&$``SQ8
MCS(Y````$$C!+P$O`$AY```"*4ZY`````$_O``PO+@`,80`#%EB/,CD````2
M2,$O`2\`2'D```(Z3KD`````3^\`#&```AP@+@`4<@-.N0````!*@6<22'D`
M``)+3KD```M06(]@``'Z#*X```!@`!1O$DAY```"=DZY```+4%B/8``!WB\N
M`!1(>0`````O+@`(3KD```NT3^\`#"`N`!1R`TZY`````$*N__PM0/_X("[_
M_+"N__AL``&F+RX`#&$``G98CR]```0@+O_\<@-.N0`````@0-'\`````'(`
M$A`@0-'\`````'0`%"@``2!`T?P`````<``0*``"+P`O`B\!+R[__"\O`!1(
M>0```II.N0````!/[P`84J[__&".2'D```*Y3KD```M06(]@``$N<`0O`$AY
M`````"\N``A.N0``"[1/[P`,+7D`````__PO+@`,80`!WEB/+R[__"\`2'D`
M``*Z3KD`````3^\`#`@N``?__F<.2'D```+.3KD`````6(\(+@`&__YG#DAY
M```"U4ZY`````%B/""X`!?_^9PY(>0```MY.N0````!8CP@N``/__F<.2'D`
M``+G3KD`````6(\(+@`"__YG#DAY```"[$ZY`````%B/""X``/_^9PY(>0``
M`O1.N0````!8CP@N``?__V<.2'D```,#3KD`````6(\(+@`&__]G#DAY```#
M%$ZY`````%B/""X``O__9PY(>0```QI.N0````!8CP@N``'__V<.2'D```,@
M3KD`````6(](>0```R].N0``"U!8CTYQ3-\`!$Y>3G5.5O_Z0J[__'#_+P`O
M+@`,+RX`"$ZY```*-$_O``Q*K@`09W)P`2\`2&[_^R\N``A.N0``"[1/[P`,
M("[__`*`````#TJ`9BY.N0``#"1*@&9$("X`%%B`+P!A``!T6(\O+O_\+P!(
M>0```S%.N0````!/[P`,<``0+O_[+P!(>0```SY.N0````!0CU*N__Q3K@`0
M8(A(>0```T1.N0``"U!8CTY>3G5.5@``("X`""(N``RR@&<4+P$O`$AY```#
M14ZY`````$_O``Q.7DYU3E8``$JY```#8F<><"`O`'!_+P!(>0```,5.N0``
M``!/[P`,0KD```-B(#D```%$(BX`"+*`9QP@0-'\````Q!"\`"`@02/(```!
M1-'\````Q$(00?D```#$(`A.7DYU3E8``'`8(BX`"."I`H$```#_$\$```%(
M<!`B+@`(X*D"@0```/\3P0```4D@+@`(X(@"@````/\3P````4H@+@`(`H``
M``#_$\````%+0?D```%((`A.7DYU3E;_^$CG#P0J;@`(+BX`#"PN`!`,A@``
M``%L4"H'2H9F!-JM`!P@+0`,T(60K0`<*`!M&+BM`!!N$BM$``PK10`<(`5,
MWR#P3EY.=2\-3KD```V46(]P_R\`+P4O+0`(3KD```"(3^\`#&`>+PU.N0``
M#918CW`"+P`O!R\M``A.N0```(A/[P`,<``O`"\`+RT`"$ZY````B$_O``PK
M0``<*T``&"`M`!Q,WR#P3EY.=0``3E8``$CG``0J;@`(N_P`````9TPO#4ZY
M```,U%B/2JT`!&<,(&T`!$*G+PU.D%"/2JT`"&<,+RT`"$ZY````'%B/+RT`
M%"\M`").N0```!A0CW`J+P`O#4ZY````&%"/3-\@`$Y>3G5.5O_X2.<#`$ZY
M````>"X`+RX`"$ZY`````%B/+``O!B\N``@O!TZY````3$_O``RPAF8D<`$O
M`$AY```#:"\'3KD```!,3^\`#$J`9PIP`4S?`,!.7DYU<`!,WP#`3EY.=0``
M3E;_^$CG!PPJ;@`(*&X`#"XN`!!Z`"`M`!"0K0`,+`"\AV\"+`=*AF<F(&T`
M(M'M``PO!B\,+PA.N0````!/[P`,V<:>AMJ&W:T`'-VM``Q*AV<0+PU.N0``
M#$18CTJ`9P)@LB`%3-\PX$Y>3G4``'``+P`O`$ZY````,%"/`H```!``5L%$
M`4B!2,$@`4YU3E;_^$CG`P0J;@`(+"T`""\-3KD```V46(\@+0`8(BT`'+*`
M9Q*2@$*G+P$O!DZY````B$_O``PO+0`4+RT`(B\&3KD````P3^\`#"X`2H=N
M)"`M`!PK0``8<O\O`2\`+P9.N0```(A/[P`,<`!,WR#`3EY.=2`'*T``$"(M
M`!S2@"M!`!AP`4S?(,!.7DYU3E;_]$CG!P0J;@`(>@$0+0`@"````&<``)0@
M+0`<D*T`#"X`("T`&+"'9RQ*K0`$9PX@;0`$<`,O`"\-3I!0CR`'D*T`&$*G
M+P`O+0`(3KD```"(3^\`#$J59Q0@;0`$<`0O`"\-3I!0CRPM``Q@&"\M``PO
M+0`B+RT`"$ZY````3$_O``PL`"`M``RPAF<(>@!*AFH"?``@!]"&*T``&!`M
M`"`"`/_^&T``('``*T``$"M```P@!4S?(.!.7DYU3E;__$CG`0`O+@`(80#_
M,EB/+@`@;@`(2J@`!&<.(F@`!'`#+P`O"$Z14(\@!TS?`(!.7DYU``!.5O_T
M2.<#'"IN``@H;@`,?``,K@````$`$&P&<`$M0``0+SP``0``<"HO`$ZY````
M`%"/)D"W_`````!G``#6$!0,``!R9A8N/````^T0+``!#```*V8&+CP```/M
M$!0,``!W9C@N/````^X0+``!#```*V8H+SP```/M+PU.N0````!0CRP`2H9G
M$G`!+P!"IR\&3KD```"(3^\`#$J&9@XO!R\-3KD`````4(\L`$J&9T@G1@`(
M("X`$"=``!1"IR\`3KD`````4(\G0``B2H!G''``+P`O`"\&3KD```"(3^\`
M#"=``!PG0``88"0O!DZY````'%B/3G%P*B\`+PM.N0```!A0CW``3-\XP$Y>
M3G4@"TS?.,!.7DYU``````/L`````P````````%,```!!@```*`````C````
M`@``"BH```HD```*%```"@(```GN```)T```"<@```G"```)M@``":8```F0
M```'D```!WP```<V```'*```!QP```;,```&:@``!D0```8@```%^@``!=0`
M``6N```%B```!6````4Z```%%@``!/````3*```$J@```\0```.D```"_@``
M`&0```!:`````0````,```F6````-0````0```N*```)H```"8````EH```)
M0@``"2H```D2```(E```"(8```AP```(6@``"$0```@N```(&```"`(```?L
M```'U@``!\````>H```'9@``!U````:V```&F@``!G8```90```&*@``!@0`
M``7>```%N```!9(```5L```%1@``!2````3Z```$U````_@```.4```#3```
M`NX```*4```">@```A8```'V```!I@```3H```$@````]````.8```#8````
MR@```+P```".````>`````$````%```+9@````$````&```+[@```"@````'
M```,6```#`P```L````*I```"H0```C<```'A@``!M8```2T```#+@```C8`
M``CT```$(````WP```-:```!G````90```C````$%@```<H```%V```!7@``
M`2@```E(```(F@``!VP```:\```&H````YH```*:```"'````?P```&L```!
M0````/H```#L````W@```-````#"````E````"`````)```);@``"3````D8
M```(C```"'8```A@```(2@``"#0```@>```("```!_(```?<```'Q@``!ZX`
M``=6```&?```!E8```8P```&"@``!>0```6^```%F```!7(```5,```%)@``
M!0````3:```#_@```U(```+T```"@````'X````1````"@``#L````ZJ```.
M8@``#G0```Y,```-4@``#20```R(```,J```#'0```N2```+>```"UH```LD
M```*R@``"K8```J6````!@````L```[0```.D@``#?H```PL```+0@``"S0`
M```"````#```!N8```:0`````0````T```<4`````````_(```/I````%$CG
M`#HH;P`4(&\`&")O`!Q%^@`Z3^__="9/+'D````$3J[]]G#_2AM7R/_\1H!G
M$B\`2&\`!$A43KD```!,3^\`#$_O`(Q,WUP`3G46P$YU```#[`````$````*
M````.@````````/P`````G-C7W!U=```````3`````-S='5F9D-H87(`````
M``!,`````G!S7V5M<'1Y````0@````)?7V1O<')N=``````````"<'-?<VEZ
M90`````F`````W!S7V-O;6UO;@```````#`````````#\@```^D````(+P(D
M+P`(2&\`#"\"+SD````43KD`````3^\`#"0?3G4```/L`````0````$````.
M`````0````@````4`````````_`````"7W!R:6YT9@```````````2Y,-```
M```"`````2Y,,P```````````2Y,,@`````&`````2Y,,0`````<````````
M`_(```/I````*4CG(`(L>0````A,[P`&``Q.KO_B3-]`!$YU```O#BQY````
M""(O``A.KO_<+%].=4CG,`(L>0````A,[P`.`!!.KO_63-]`#$YU``!(YS`"
M+'D````(3.\`#@`03J[_T$S?0`Q.=0``+PXL>0````A.KO_*+%].=2\.+'D`
M```(3J[_Q"Q?3G5(YS`"+'D````(3.\`#@`03J[_ODS?0`Q.=0`````#[```
M``<````!````C@```'P```!L````4@```#8````@````!@````````/P````
M`E]3965K````````B`````)?3W5T<'5T`````'@````"7TEN<'5T``````!H
M`````E]7<FET90``````3`````)?4F5A9````````#`````"7T-L;W-E````
M```<`````E]/<&5N``````````````````/R```#Z0```!(O#BQY````!$SO
M``,`"$ZN_SHL7TYU```O#BQY````!")O``@@+P`,3J[_+BQ?3G4O#BQY````
M!$SO``,`"$ZN_LXL7TYU``````/L`````P````$````T````'`````0`````
M```#\`````-?4V5T4VEG;F%L```````P`````E]&<F5E365M````&`````-?
M06QL;V--96T``````````````````_(```/I````$4CG/``J`6<R:@)$@2@`
M9RAJ`D2`0H)V'^.`XY*T@64$E(%2@%'+__(B`KF%:@)$@+.$:@A$@6`$0H%"
M@$S?`#Q.=0`````#\@```^D````12.=X`"@`LX1*@&<P:@)$@"0`2H%F!$*`
M8")J`D2!)@#&P4A"Q,%(0D)"UH)(0<#!2$!"0-"#2H1J`D2`3-\`'DYU````
#``/R
`
end
!Funky!Stuff!
fi  # end of overwriting check
echo shar: "extracting 'iffencode.uue'" '(13498 characters)'
if test -f 'iffencode.uue'
then
	echo shar: "will not over-write existing file 'iffencode.uue'"
else
cat << \!Funky!Stuff! > 'iffencode.uue'
begin 644 iffencode
M```#\P`````````/``````````X```!Q````;@```(,```"'````!@````P`
M``1G````%`````@````%````.0```"X```!.````#````!$```/I````<2//
M````'"/`````)"/(````*$*Y````("QY````!"/.````!)/)3J[^VBA`2JP`
MK&<``*AA``%L(&P`K-'(T<@@:``0T<C1R$CG(#!%^0```*Q'^0```"QT`7``
M$!@FRF`"%-A1R/_\0AH@.0```"0@>0```"@2&%.`;QX,`0`@;_12@B;*8`H2
M&%.`#`$`(&\$%,%@\D(:8-Q"&D*;(`),WPP$2'D````L+P!.N0```&@CP```
M`!!.N0```'@CP````!0CP````!A.N0````!P`"YY````'$YU80``QF$``+`C
MP````"!"IR\`)$`@*@`D9Q`L>0````@@0"(H``!.KO^"(BH`(&<H)#P```/M
M3J[_XB/`````$"/`````%"/`````&&<*Y8@@0"EH``@`I$ZY`````'``8`0@
M+P`$+GD````<+P`L>0````0@.0````AG`B)`3J[^8DJY````(&<.3J[_?")Y
M````($ZN_H8@'TYU2.<!!BX\``.`!RQX``1.KO^43-]@@'!D8+!![`!<3J[^
M@$'L`%Q.KOZ,3G5"N0````A#^0```:P@/````!Y.KOW8(\`````(9[9.=0``
M```#[````!H````!```!N@```:H```&D```!:@```5X```%0```!0@```2(`
M``$<```!%@```/8```#D````U````,8```#`````M````*8```!R````;```
M`%0```!.````(````!0````.````"`````(````"````!@```30```#,````
M`@````L```"N````N@````````/P`````F5X:70R```````!0`````)P87)M
M17AI=````)H````"=V%I=&US9P````&0`````F1O;6%I;@`````!,@````)D
M;V-O;G,``````00````$9G)O;5=O<FMB96YC:````````-H````#97AI=%1O
M1$]3```````!<@````)F<F]M0TQ)`````#0````"7V5X:70```````$\````
M`F]P96Y$3U,````!H@````(V)#<U,@```````)8````"<W1A<G1U<```````
M`````C4D-S4R````````D@````(T)#<U,@```````(@````",R0W-3(`````
M``!V`````C(D-S4R````````8@````(Q)#<U.````````5@````",20W-3(`
M``````!D`````FYO1$]3```````!=@````````/R```#Z@```&X``0``````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M`````````````````````&1O<RYL:6)R87)Y`````_`````"5F5R4F5V````
M`````````E]$3U-"87-E````"`````)?<W1D:6X``````!`````#9&]S0VUD
M3&5N````````)`````-I;FET:6%L4U`````````<`````V1O<T-M9$)U9@``
M`````"@````#87)G=D%R<F%Y````````+`````)?97)R;F\```````P````"
M7U-Y<T)A<V4````$`````D1/4TYA;64````!K`````-A<F=V0G5F9F5R````
M``"L`````E]S=&1O=70`````%`````)?<W1D97)R`````!@````#<F5T=7)N
M37-G````````(`````````/R```#ZP```(,```/R```#Z@```(=.3TQ!0T4`
M3D]#3TU0`$1%0E5'`&EF9F5N8V]D92!;3D],04-%75M.3T-/35!=`"AC*3$Y
M.#8@36%T=&AE=R!$:6QL;VXN("!0=6)L:6,@1&]M86EN(%8Q+C`P``!.3TQ!
M0T4@("US879E(&]N;'D@=&]P(&AA;&8@;V8@<V-R965N(&EF(&EN(&EN=&5R
M;&%C90!.3T-/35`@("UD;R!.3U0@=7-E($)95$5254XQ(&-O;7!R97-S:6]N
M`&EN='5I=&EO;BYL:6)R87)Y`$-A;B=T(&]P96X@26YT=6ET:6]N+@H`9W)A
M<&AI8W,N;&EB<F%R>0!#86XG="!O<&5N($=R87!H:6-S+@IN``I314Q%0U0Z
M(#Q7/G)I=&4L(#Q./F5W26UA9V4L(#Q1/G5I="`_``I7<FET92!T;R!F:6QE
M("AL96%V92!B;&%N:R!T;R!A8F]R="DZ`'<`*D)214%+*BP@9FEL92!D96QE
M=&5D`&1O;F4`8V]U;&0@;F]T(&]P96X@9FEL90!-;W9E(%-C<F5E;G,@<V\@
M4V-R965N('1O(&=R86(@:7,@:&EG:&5S="X`<')E<W,@/%)%5#X@=VAE;B!R
M96%D>3H@`$EL;&5G86P@(V-O;&]R<R\C<&QA;F5S.B`E;&0O)6QD"@!V<&UO
M9&4@/2`H)6QD>"5L9'@E;&0I("4X;'@*`%-#04Y,24Y%``H```````/R```#
MZ0````8@;P`$2AAF_)'O``21_`````$@"$YU``````/R```#Z0````P@;P`$
M(F\`""`O``QG```>L\AG```8;P``#M'`T\`3(%.`9OI.=1+84X!F^DYU````
M``/R```#Z0``!&=.5O^:'7P``?__0B[_KG`!+4#_JB`N_ZJPK@`(;```TN6`
M(&X`#-'`2'D`````+Q!.N0``$4A0CTJ`9@H([@`!_ZY@``"D("[_JN6`(&X`
M#-'`2'D````'+Q!.N0``$4A0CTJ`9@@([@``_ZY@>B`N_ZKE@"!N``S1P$AY
M````#B\03KD``!%(4(]*@&8(".X``O^N8%)(>0```!1.N0``#@A8CTAY````
M+TZY```."%B/2'D```!<3KD```X(6(](>0```%U.N0``#@A8CTAY````DTZY
M```."%B/<`$O`$ZY```!/%B/4J[_JF``_R9"ITAY````O$ZY```!(%"/(\``
M````2H!F#$AY````SF$``F!8CT*G2'D```#E3KD```$@4(\CP`````1*@&8,
M2'D```#V80`".EB/2&[_HDAN_YY(;O^F80`!+D_O``Q*+O__9P`!&DAY```!
M#4ZY`````%B/80`!R`R`````46<``/8,@````$YG``#6#(````!79LI(>0``
M`31.N0````!8CTAN_Z].N0``#:!8CTHN_Z]GJB\\```@`$AY```!6TAN_Z].
MN0``$"A/[P`,+4#_FDJ`9WAR`2\!+P!.N0``"ZQ0CQ`N_ZY(@$C`+R[_FB\N
M_Z(O+O^>+R[_IB\`80`!T$_O`!0O+O^:3KD```M$6(].N0``#H!*@&<@2'D`
M``%=3KD```X(6(].N0``#FQ(;O^O3KD```"D6(](>0```7-.N0``#@A8CV``
M_Q)(>0```7A.N0``#@A8CV``_P!(;O^B2&[_GDAN_Z9A&$_O``Q@`/[J0B[_
M_V``_N)A``$B3EY.=4Y6``!(>0```8Q.N0``#@A8CTAY```!MTZY`````%B/
M80``EB\N`!`O+@`,+RX`"&$(3^\`#$Y>3G5.5O_P3KD`````(GD`````(&D`
M/"U\```G#__P+4C_^"U(__0M2/_\2J[_^&<B(&[_^#`H``I(P+"N__!L""U`
M__`M2/_T(&[_^"U0__A@V$ZY````$"!N__30_``L(FX`""*((FX`#"*H``0@
M;O_TT/P`5")N`!`BB$Y>3G5.5O^P2&[_L$ZY```-H%B/2H!G*!`N_[`,``!A
M;1(,``!Z;@P$``!A!@``01U`_[`0+O^P2(!(P$Y>3G5P($Y>3G5.5@``+RX`
M"$ZY`````%B/81!P_R\`3KD```$\6(].7DYU2KD`````9PXO.0````!.N0``
M`0Q8CTJY````!&<.+SD````$3KD```$,6(].=4Y6_VA(YR``(&X`%"UH``3_
M_"!N__PP$.=`/4#_Z#UH``+_ZG``/4#_[CU`_^P=:``%__!"+O_Q""X````+
M9P1P`&`"<`$=0/_R0F[_]!U\``K_]AU\``O_]SUN_^C_^#UN_^K_^G``$"[_
M\'(!X:$M0?]X#($```!`9@9P("U`_W@@+O]X#(`````@;R1R`!(N__`O`2\`
M2'D```'03KD`````3^\`#'``3-\`!$Y>3G5"KO]\(&X`$"UH``3_="`N_WRP
MKO]X;$YR`TZY`````'(`(&[_=#(0+T$`#.")`H$````/Z8$=@0B((B\`#.B)
M`H$````/Z8$=@0B)(B\`#`*!````#^F!'8$(BE*N_WQ4KO]T8*@M;O]X_X!P
M`"!N``PP*``@`H```(Q$+4#_A`@N``$`"V<<"````F<6"(```BU`_X0P+O_J
MXD@]0/_J/4#_^G``,"[_Z'(`,B[_ZG0`%"[_\"\N_X0O`B\!+P!(>0```?).
MN0````!/[P`4+SQ&3U)-+RX`&&$`!!10CR\\24Q"32\N`!AA``/F4(\O/$)-
M2$0O+@`880`#]%"/<!0O`$AN_^@O+@`83KD```^83^\`#$*G+RX`&&$``])0
MCR\\0TU!4"\N`!AA``/"4(\@+O^`<@-.N0`````O`$AN_X@O+@`83KD```^8
M3^\`#$*G+RX`&&$``Y90CR\\0T%-1R\N`!AA``.&4(]P!"\`2&[_A"\N`!A.
MN0``#YA/[P`,0J<O+@`880`#9%"/+SQ"3T19+RX`&&$``U10CT*N_WQP`#`N
M_^HB+O]\LH!D8$*N_WAP`!`N__`B+O]XLH!D2.6!(&[__%"(T<%P`")N__PP
M$2]```@B+O]\3KD`````(E#3P"\N``@O+P`,+PDO+@`883I/[P`03KD```Z`
M2H!F#%*N_WA@JE*N_WQ@DD*G+RX`&&$``M90CT*G+RX`&&$``LI0CTS?``1.
M7DYU3E;_\@@N````%V<:+RX`$"\N``PO+@`(3KD```^83^\`#$Y>3G4(+@`"
M`!=G#DAY```"#TZY```."%B/<``M0/_\+4#_^"U`__0@+O_XL*X`$&P``:!.
MN0``#H!*@&<&<`!.7DYU+6[_^/_T("[_]+"N`!!L'"!N``S1[O_X(FX`#-/`
M$!`2$;`!9@92KO_T8-H@+O_TD*[_^`R``````VT``4@@+O_XD*[__`R`````
M@&U$'7P`?__S<`$O`$AN__,O+@`(3KD```^83^\`#"!N``S1[O_\+SP```"`
M+P@O+@`(3KD```^83^\`#`:N````@/_\8*P@+O_XD*[__$J`;SY3@!U`__-P
M`2\`2&[_\R\N``A.N0``#YA/[P`,("[__"!N``S1P"(N__B2@"\!+P@O+@`(
M3KD```^83^\`#"`N__20KO_X#(````"`;4(=?`"!__-P`2\`2&[_\R\N``A.
MN0``#YA/[P`,(&X`#-'N__AP`2\`+P@O+@`(3KD```^83^\`#`:N````@/_X
M8*X@+O_TD*[_^$J`;SI3@$2`'4#_\W`!+P!(;O_S+RX`"$ZY```/F$_O``P@
M;@`,T>[_^'`!+P`O""\N``A.N0``#YA/[P`,("[_]"U`__PM0/_X8`#^8BUN
M__3_^&``_E@@+@`0D*[__`R`````@&U$'7P`?__S<`$O`$AN__,O+@`(3KD`
M``^83^\`#"!N``S1[O_\+SP```"`+P@O+@`(3KD```^83^\`#`:N````@/_\
M8*P@+O_\(BX`$)*`2H%O1"(N__B2@%.!'4'_\W`!+P!(;O_S+RX`"$ZY```/
MF$_O``P@+O_\(&X`#-'`(BX`$)*`+P$O""\N``A.N0``#YA/[P`,<`%.7DYU
M3E8``'`$+P!(;@`,+RX`"$ZY```/F$_O``Q.7DYU3E;_\$*N__Q*K@`,9V1P
M!"\`2&X`#"\N``A.N0``#YA/[P`,<`0O`$AN__PO+@`(3KD```^83^\`#"`Y
M```"".6`4KD```((($#1_`````AP`"\`+P`O+@`(+T@`#$ZY```*D$_O``P@
M;P``((!@``"V2KD```((9P``K%.Y```""'``+P`O`"\N``A.N0``"I!/[P`,
M(CD```((Y8$@0='\````""U`__20D"U`__@(+@``__=G&G`!+P!(;O_\+RX`
M"$ZY```/F$_O``Q2KO_T(#D```((Y8`@0-'\````""`068!R_R\!+P`O+@`(
M3KD```J03^\`#'`$+P!(;O_X+RX`"$ZY```/F$_O``QP_R\`+R[_]"\N``A.
MN0``"I!/[P`,3EY.=0``3E;_^$CG#P0J;@`(+BX`#"PN`!`,A@````%L4"H'
M2H9F!-JM`!P@+0`,T(60K0`<*`!M&+BM`!!N$BM$``PK10`<(`5,WR#P3EY.
M=2\-3KD```]@6(]P_R\`+P4O+0`(3KD```"(3^\`#&`>+PU.N0``#V!8CW`"
M+P`O!R\M``A.N0```(A/[P`,<``O`"\`+RT`"$ZY````B$_O``PK0``<*T``
M&"`M`!Q,WR#P3EY.=0``3E8``$CG``0J;@`(N_P`````9TPO#4ZY```.H%B/
M2JT`!&<,(&T`!$*G+PU.D%"/2JT`"&<,+RT`"$ZY````'%B/+RT`%"\M`").
MN0```#A0CW`J+P`O#4ZY````.%"/3-\@`$Y>3G5.5O_\2.<!!"IN``@@+@`,
M!(#_____;0``\`R`````!FP``.;E@$[["`)@```68```)&```%Q@``#08```
MJF```+9*E5;`1`!(@$C`3-\@@$Y>3G5*E6<N+PUA``"V6(\O%4ZY````G%B/
M+RT`%"\M`"9.N0```#A0CW``*H`K0``F*T``!'`!3-\@@$Y>3G5*E69(<``O
M`"\`3KD`````4(\N`$J'9RI"IR\M`!1.N0```"!0CRM``"9*@&84+P=.N0``
M`)Q8CW``3-\@@$Y>3G4JAT'Z_RHK2``$<`%,WR"`3EY.=2\-82A8CW`!3-\@
M@$Y>3G4O#6$``&A8CW`!3-\@@$Y>3G5P`$S?((!.7DYU3E8``$CG``0J;@`(
M2I5G.!`M`"`(```!9RXO%4ZY````^%B/+Q5.N0```.18CW)$+P$O`$ZY````
M.%"/$"T`(`(`__T;0``@3-\@`$Y>3G5.5O_P2.<`/"IN``@@+0`(Y8`D0"\\
M``$``'!$+P!.N0```"!0CR9`($O0_``4(`@G0``*)TL`%"=5`!AP5R=``!P@
M2]#\`"@H2"BJ`"0I;0`B``0I;0`,``@O#6$`_U)8CR\++RH`"$ZY````S%"/
M$"T`(`````(;0``@(&T`(BMM`"8`(BM(`"9,WSP`3EY.=4Y6__A(YP,$*FX`
M"'X`3KD```!H+``@3=''<`$O`"\(+P9.N0```#!/[P`,2H!G&E*'(`=3@"!-
MT<`0$`P```UG"`P```IFSDYQ2H=G#B`'4X`@3='`0A`@36`"D<@@"$S?(,!.
M7DYU3E;_^$CG`P!.N0```'@N`"\N``A.N0````!8CRP`+P8O+@`(+P=.N0``
M`$Q/[P`,L(9F)'`!+P!(>0```A@O!TZY````3$_O``Q*@&<*<`%,WP#`3EY.
M=7``3-\`P$Y>3G4``"\\```0`$*G3KD```!D4(].=0``<``O`"\`3KD```!D
M4(\"@```$`!6P40!2(%(P2`!3G5.5O_T2.<'!"IN``AZ`1`M`"`(````9P``
ME"`M`!R0K0`,+@`@+0`8L(=G+$JM``1G#B!M``1P`R\`+PU.D%"/(`>0K0`8
M0J<O`"\M``A.N0```(A/[P`,2I5G%"!M``1P!"\`+PU.D%"/+"T`#&`8+RT`
M#"\M`"(O+0`(3KD```!,3^\`#"P`("T`#+"&9PAZ`$J&:@)\`"`'T(8K0``8
M$"T`(`(`__X;0``@<``K0``0*T``#"`%3-\@X$Y>3G5.5O_\2.<!`"\N``AA
M`/\R6(\N`"!N``A*J``$9PXB:``$<`,O`"\(3I%0CR`'3-\`@$Y>3G4``$Y6
M__Q(YP,,*FX`""AN``PN+@`0("T`%)"M``RPAVT"(`<L`"!M`"+1[0`,+P8O
M""\,3KD`````3^\`#)Z&V<;=K0`<(`8B+0`,T($K0``,(BT`$+*`;`0K0``0
M$"T`(`````$;0``@2H=G&B\-3KD```Z@6(\L`$J&9IAP`$S?,,!.7DYU<`%,
MWS#`3EY.=4Y6__1(YP,<*FX`""AN``Q\``RN`````0`0;`9P`2U``!`O/``!
M``!P*B\`3KD````@4(\F0+?\`````&<``-80%`P``')F%BX\```#[1`L``$,
M```K9@8N/````^T0%`P``'=F."X\```#[A`L``$,```K9B@O/````^TO#4ZY
M`````%"/+`!*AF<2<`$O`$*G+P9.N0```(A/[P`,2H9F#B\'+PU.N0````!0
MCRP`2H9G2"=&``@@+@`0)T``%$*G+P!.N0```"!0CR=``")*@&<<<``O`"\`
M+P9.N0```(A/[P`,)T``'"=``!A@)"\&3KD````<6(].<7`J+P`O"TZY````
M.%"/<`!,WSC`3EY.=2`+3-\XP$Y>3G4``$Y6``!(YP`,*FX`""AN``Q*%6<N
M2A1G*A`5$A2P`60*</],WS``3EY.=1`5$A2P`6,*<`%,WS``3EY.=5*-4HQ@
MSA`5$A2P`6;.<`!,WS``3EY.=0```^P````"`````````XH```#B````$```
M``(```I"```*.```"@8```G\```)X@``"=@```FP```)J```":````.T```#
MK````YX```.6```"O@```2@```$"````&`````,```Y"```&U@``!38```1<
M```"C````GX```)"```",````A````&N```!B````5H```$R```!&@```0P`
M``#T````T````,(```"T````I@```)@```!\````5````"H````!````!```
M#AX````!````!0``#\P````S````!@``$`@```M<```+````"N````J"```*
M5@``"?(```G$```*;```"BH```F6```)@```"5@```DX```)%@``"-P```B^
M```(>```"%P```@H```(#```!^````>^```'C```!VX```;````%\```!;X`
M``6"```"'@``!OX```9R```"!@```?X```'0```!N````SH```&:```&W```
M`H0```)(```"-@```A8```#6````R````+H```"L````G@```(0```!<````
M,@````8````(```%/```!&(```-\```"D@```8X```%@`````P````H```Q(
M```,;@``#!`````1````"P``$1P``!$&```0O@``$-```!"H```/'@``#O``
M``Y*```.,```#A(```W$```-L```"X````LF```+$@``"O(```(H````%```
M``P``!$L```0[@``$%8```Z(```.=@``#7@```SF```,W```#2X```Q<```,
M]```#"````N>```+D````[H```.D```#!````K@```$@````^@````$````-
M```&5`````(````.```%K@``!)`````````#\@```^D````42.<`.BAO`!0@
M;P`8(F\`'$7Z`#I/[_]T)D\L>0````1.KOWV</]*&U?(__Q&@&<2+P!(;P`$
M2%1.N0```$Q/[P`,3^\`C$S?7`!.=1;`3G4```/L`````0````L````Z````
M`````_`````"<V-?<'5T``````!,`````W-T=69F0VAA<@```````$P````"
M<'-?96UP='D```!"`````E]?9&]P<FYT``````````)P<U]S:7IE`````"8`
M```#<'-?8V]M;6]N````````,`````````/R```#Z0````@O`B0O``A(;P`,
M+P(O.0```!1.N0````!/[P`,)!].=0```^P````!`````0````X````!````
M!P```!0````````#\`````)?<')I;G1F```````````!+DPT``````(````!
M+DPS```````````!+DPR``````8````!+DPQ`````!P````````#\@```^D`
M```%(&\`!""(6)!"J``$(4@`"$YU``````/P`````E].97=,:7-T````````
M``````/R```#Z0```#E(YS\@*"\`(!8O`"<O//____].N0```'PJ`"P%=/^T
MA5B/9@9P`&```&XO/``!``%(>``B3KD````@)$#/BDJ'SXI0CV8.+P9.N0``
M`)!P`%B/8$(E1``*%4,`"15\``0`"$(J``X51@`/0J=.N0```%`E0``02H18
MCV<,+PI.N0```*18CV`,2&H`%$ZY`````%B/(`I,WP3\3G5(YR`@)&\`#$JJ
M``IG"B\*3KD```"X6(\5?`#_``AT_R5"`!1T`!0J``\O`DZY````D$AX`"(O
M"DZY````.$_O``Q,WP0$3G4```/L`````0````D```".````"`````P````V
M````%````&X```#*````2@```(````"N````U@````````/P`````2Y,.0``
M```,`````2Y,.``````J`````2Y,-P````!4`````2Y,-@````"(`````2Y,
M-0````!\`````2Y,-`````"4`````2Y,,P````!&`````2Y,,@`````D````
M`2Y,,0````"6`````2Y,,3<```"@`````2Y,,38```"<`````2Y,,34```"D
M`````2Y,,30```"J`````2Y,,3,```"T`````2Y,,3(```#>`````2Y,,3$`
M```$`````2Y,,3```````````U]$96QE=&50;W)T`````)P````#7T-R96%T
M95!O<G0```````````````/R```#Z0```"Y(YR`"+'D````(3.\`!@`,3J[_
MXDS?0`1.=0``+PXL>0````@B+P`(3J[_W"Q?3G5(YS`"+'D````(3.\`#@`0
M3J[_UDS?0`Q.=0``2.<P`BQY````"$SO``X`$$ZN_]!,WT`,3G4``"\.+'D`
M```(3J[_RBQ?3G4O#BQY````"$ZN_\0L7TYU2.<P`BQY````"$SO``X`$$ZN
M_[Y,WT`,3G4``"\.+'D````((B\`"$ZN_[@L7TYU```#[`````@````!````
MJ````(X```!\````;````%(````V````(`````8````````#\`````-?1&5L
M971E1FEL90````"D`````E]3965K````````B`````)?3W5T<'5T`````'@`
M```"7TEN<'5T``````!H`````E]7<FET90``````3`````)?4F5A9```````
M`#`````"7T-L;W-E```````<`````E]/<&5N``````````````````/R```#
MZ0```$XO#BQY````!$ZN_WPL7TYU+PXL>0````1.KO]V+%].=2\.+'D````$
M3.\``P`(3J[_.BQ?3G4``"\.+'D````$(F\`""`O``Q.KO\N+%].=2\.+'D`
M```$(F\`"$ZN_MHL7TYU+PXL>0````1,[P`#``A.KO[.+%].=0``+PXL>0``
M``0@+P`(3J[^MBQ?3G4O#BQY````!"`O``A.KOZP+%].=2\.+'D````$(F\`
M"$ZN_IXL7TYU+PXL>0````0B;P`(3J[^F"Q?3G4O#BQY````!$SO`P``"$ZN
M_I(L7TYU```O#BQY````!"!O``A.KOZ,+%].=2\.+'D````$(&\`"$ZN_H`L
M7TYU+PXL>0````0B;P`(3J[^8BQ?3G4O#BQY````!")O``@@+P`,3J[]V"Q?
M3G4```/L````#P````$```$D```!$````/P```#H````T````+P```"H````
ME````(````!H````5````#P````D````%`````0````````#\`````-?3W!E
M;DQI8G)A<GD```$@````!%]#;&]S94QI8G)A<GD```````$,`````U]786ET
M4&]R=````````/@````"7T=E=$US9P````#D`````E]0=71-<V<`````S```
M``)?4F5M4&]R=````+@````"7T%D9%!O<G0```"D`````U]&<F5E4VEG;F%L
M`````)`````#7T%L;&]C4VEG;F%L````?`````-?4V5T4VEG;F%L``````!D
M`````U]&:6YD5&%S:P```````%`````"7T9R965-96T````X`````U]!;&QO
M8TUE;0```````"`````"7U!E<FUI=``````0`````E]&;W)B:60`````````
M``````/R```#Z0````Q(YW``)`!G($J!9@1"@&`8)@#&P4A"Q,%(0D)"UH)(
M0<#!2$!"0-"#3-\`#DYU``````/R```#Z0```!%(YW@`*`"SA$J`9S!J`D2`
M)`!*@68$0H!@(FH"1($F`,;!2$+$P4A"0D+6@DA!P,%(0$)`T(-*A&H"1(!,
+WP`>3G4``````_("
`
end
!Funky!Stuff!
fi  # end of overwriting check
exit 0
#	End of shell archive