[comp.sources.amiga] v89i136: scanner - turn intuition structures into c code

page%swap@Sun.COM (Bob Page) (05/12/89)

Submitted-by: d84sp@efd.lth.se (/Stefan Parmark)
Posting-number: Volume 89, Issue 136
Archive-name: intuition/scanner.1

Scanner makes commented C code of all intuition structures in memory.
The structures will receive correct pointers towards each other.
Scanner starts looking at IntuitionBase, and follows all pointers,
storing them in memory. When finished, scanner writes it all to
stdout.  Since a structure may be referenced from more than one spot,
I made sure it would never look at it more than once.

[uuencoded executable included.  ..bob]

# This is a shell archive.
# Remove anything above and including the cut line.
# Then run the rest of the file through 'sh'.
# Unpacked files will be owned by you and have default permissions.
#----cut here-----cut here-----cut here-----cut here----#
#!/bin/sh
# shar: SHell ARchive
# Run the following text through 'sh' to create:
#	Makefile
#	README
#	TODO
#	scanner.c
#	scanner.h
#	scanner.uu
# This is archive 1 of a 1-part kit.
# This archive created: Thu May 11 20:13:44 1989
echo "extracting Makefile"
sed 's/^X//' << \SHAR_EOF > Makefile
XCFLAGS = -cef -v
X
Xscanner:	scanner.o
X		blink LIB:c.o scanner.o TO scanner LIB LIB:lc.lib \
X		LIB:amiga.lib SC SD ND
X
Xscanner.o:	scanner.c scanner.h
X
Xclean:
X		delete scanner.o scanner
SHAR_EOF
echo "extracting README"
sed 's/^X//' << \SHAR_EOF > README
XScanner is in the public domain. Do whatever you like with it.
XI assume no responsiblity for its use.
X
XThis is a little program I wrote when I wanted to find out
Xhow requesters worked. I started Deluxe Paint II, activated
Xthe interesting requester, and let scanner make a copy of it all.
X
XScanner makes commented C code of all intuition structures in memory.
XThe structures will receive correct pointers towards each other.
XScanner starts looking at IntuitionBase, and follows all pointers,
Xstoring them in memory. When finished, scanner writes it all to stdout.
XSince a structure may be referenced from more than one spot, I made
Xsure it would never look at it more than once.
X
XIt is quite useful if you want to are a beginner, and want to make
Xthings work right away.
X
XI never finished scanner, because it had all I needed at the time.
XIt should be quite easy to complete the job.
X
X/Stefan Parmark
Xd84sp@efd.lth.se
SHAR_EOF
echo "extracting TODO"
sed 's/^X//' << \SHAR_EOF > TODO
XExpand flags to their #define names, i.e. gadget->Flags = 0x0081 becomes
Xgadget->Flags = GADGHBOX | SELECTED. This makes the code easier to read.
X
XComplete all structures. For instance, screens are never scanned or listed.
X
XProvide a way to comfortably select the interesting structures. Scanner
Xcurrently lists ALL structures, even those you aren't interested in.
SHAR_EOF
echo "extracting scanner.c"
sed 's/^X//' << \SHAR_EOF > scanner.c
X/* scanner.c */
X
X#include <exec/types.h>
X#include <exec/memory.h>
X#include <intuition/intuitionbase.h>
X#include <proto/exec.h>
X#include <proto/graphics.h>
X#include <proto/intuition.h>
X#include <string.h>
X#include <stdio.h>
X
X#include "scanner.h"
X
X#define VERSION "1.0"
X
Xstatic struct structList structlist[MAXSTRUCTURE];
X
X
Xvoid main(argc, argv)
Xint argc;
XBYTE *argv[];
X{
X  extern struct GfxBase *GfxBase;
X  extern struct IntuitionBase *IntuitionBase;
X
X  GfxBase = (struct GfxBase *)OpenLibrary("graphics.library", 1);
X  IntuitionBase = (struct IntuitionBase *)OpenLibrary("intuition.library", 1);
X
X  ScanScreens(IntuitionBase->FirstScreen);
X
X  ListBitMaps();
X  ListBoolInfos();
X  ListBorders();
X  ListGadgets();
X  ListImages();
X  ListIntuiMessages();
X  ListIntuiTexts();
X  ListKeyMaps();
X  ListLayers();
X  ListMenus();
X  ListMsgPorts();
X  ListPropInfos();
X  ListRastPorts();
X  ListRequesters();
X  ListScreens();
X  ListStringInfos();
X  ListTextFonts();
X  ListWindows();
X
X  EraseStructList();
X
X  CloseLibrary((struct Library *)IntuitionBase);
X  CloseLibrary((struct Library *)GfxBase);
X}
X
X
Xvoid ScanBitMaps(bitmap)
Xregister struct BitMap *bitmap;
X{
X  WORD bitmapno;
X
X  if (bitmap != NULL)
X    bitmapno = BitMapNumber(bitmap);
X}
X
X
Xvoid ScanBoolInfos(boolinfo)
Xregister struct BoolInfo *boolinfo;
X{
X}
X
X
Xvoid ScanBorders(border)
Xregister struct Border *border;
X{
X  WORD borderno;
X
X  while (border != NULL)
X  {
X    borderno = BorderNumber(border);
X
X    border = border->NextBorder;
X  }
X}
X
X
Xvoid ScanGadgets(gadget)
Xregister struct Gadget *gadget;
X{
X  WORD gadgetno, gadgetrenderno, selectrenderno,
X      gadgettextno, specialinfono, gadgettype;
X
X  while (gadget != NULL)
X  {
X    gadgetno = GadgetNumber(gadget);
X
X    if (gadget->Flags & GADGIMAGE)
X    {
X      gadgetrenderno = ImageNumber(gadget->GadgetRender);
X      selectrenderno = ImageNumber(gadget->SelectRender);
X    }
X    else
X    {
X      gadgetrenderno = BorderNumber(gadget->GadgetRender);
X      selectrenderno = BorderNumber(gadget->SelectRender);
X    }
X    gadgettextno = IntuiTextNumber(gadget->GadgetText);
X    gadgettype = gadget->GadgetType & 0x0F;
X    if (gadgettype == GADGET0002)
X      specialinfono = BoolInfoNumber(gadget->SpecialInfo);
X    else if (gadgettype == PROPGADGET)
X      specialinfono = PropInfoNumber(gadget->SpecialInfo);
X    else if (gadgettype == STRGADGET)
X      specialinfono = StringInfoNumber(gadget->SpecialInfo);
X    else
X      specialinfono = 0;
X
X    if (gadget->Flags & GADGIMAGE)
X    {
X      if (Fresh(gadgetrenderno)) ScanImages((struct Image *)gadget->GadgetRender);
X      if (Fresh(selectrenderno)) ScanImages((struct Image *)gadget->SelectRender);
X    }
X    else
X    {
X      if (Fresh(gadgetrenderno)) ScanBorders((struct Border *)gadget->GadgetRender);
X      if (Fresh(selectrenderno)) ScanBorders((struct Border *)gadget->SelectRender);
X    }
X    if (Fresh(gadgettextno)) ScanIntuiTexts(gadget->GadgetText);
X    if (Fresh(specialinfono))
X    {
X      if (gadgettype == GADGET0002)
X        ScanBoolInfos((struct BoolInfo *)gadget->SpecialInfo);
X      else if (gadgettype == PROPGADGET)
X        ScanPropInfos((struct PropInfo *)gadget->SpecialInfo);
X      else if (gadgettype == STRGADGET)
X        ScanStringInfos((struct StringInfo *)gadget->SpecialInfo);
X    }
X
X    gadget = gadget->NextGadget;
X  }
X}
X
X
Xvoid ScanImages(image)
Xregister struct Image *image;
X{
X  WORD imageno;
X
X  while (image != NULL)
X  {
X    imageno = ImageNumber(image);
X
X    image = image->NextImage;
X  }
X}
X
X
Xvoid ScanIntuiMessages(intuimessage)
Xregister struct IntuiMessage *intuimessage;
X{
X}
X
X
Xvoid ScanIntuiTexts(intuitext)
Xregister struct IntuiText *intuitext;
X{
X  WORD intuitextno, itextfontno;
X
X  while (intuitext != NULL)
X  {
X    intuitextno = IntuiTextNumber(intuitext);
X
X    itextfontno = TextAttrNumber(intuitext->ITextFont);
X
X    if (Fresh(itextfontno)) ScanTextAttrs(intuitext->ITextFont);
X
X    intuitext = intuitext->NextText;
X  }
X}
X
X
Xvoid ScanKeyMaps(keymap)
Xregister struct KeyMap *keymap;
X{
X}
X
X
Xvoid ScanLayers(layer)
Xregister struct Layer *layer;
X{
X}
X
X
Xvoid ScanMenus(menu)
Xregister struct Menu *menu;
X{
X}
X
X
Xvoid ScanMsgPorts(msgport)
Xregister struct MsgPort *msgport;
X{
X}
X
X
Xvoid ScanPropInfos(propinfo)
Xregister struct PropInfo *propinfo;
X{
X}
X
X
Xvoid ScanRastPorts(rastport)
Xregister struct RastPort *rastport;
X{
X}
X
X
Xvoid ScanRequesters(requester)
Xregister struct Requester *requester;
X{
X  WORD requesterno, olderrequestno, reqgadgetno, reqborderno, reqtextno,
X      reqlayerno, imagebmapno, rwindowno;
X
X  if (requester != NULL)
X  {
X    requesterno = RequesterNumber(requester);
X
X    olderrequestno = RequesterNumber(requester->OlderRequest);
X    reqgadgetno = GadgetNumber(requester->ReqGadget);
X    reqborderno = BorderNumber(requester->ReqBorder);
X    reqtextno = IntuiTextNumber(requester->ReqText);
X    reqlayerno = LayerNumber(requester->ReqLayer);
X    imagebmapno = BitMapNumber(requester->ImageBMap);
X    rwindowno = WindowNumber(requester->RWindow);
X
X    if (Fresh(olderrequestno)) ScanRequesters(requester->OlderRequest);
X    if (Fresh(reqgadgetno)) ScanGadgets(requester->ReqGadget);
X    if (Fresh(reqborderno)) ScanBorders(requester->ReqBorder);
X    if (Fresh(reqtextno)) ScanIntuiTexts(requester->ReqText);
X    if (Fresh(reqlayerno)) ScanLayers(requester->ReqLayer);
X    if (Fresh(imagebmapno)) ScanBitMaps(requester->ImageBMap);
X    if (Fresh(rwindowno)) ScanWindows(requester->RWindow);
X  }
X}
X
X
Xvoid ScanScreens(screen)
Xregister struct Screen *screen;
X{
X  WORD screenno, windowno;
X
X  while (screen != NULL)
X  {
X    screenno = ScreenNumber(screen);
X
X    windowno = WindowNumber(screen->FirstWindow);
X
X    if (Fresh(windowno)) ScanWindows(screen->FirstWindow);
X
X    screen = screen->NextScreen;
X  }
X}
X
X
Xvoid ScanStringInfos(stringinfo)
Xregister struct StringInfo *stringinfo;
X{
X  WORD stringinfono, layerptrno, altkeymapno;
X
X  if (stringinfo != NULL)
X  {
X    stringinfono = StringInfoNumber(stringinfo);
X
X    layerptrno = LayerNumber(stringinfo->LayerPtr);
X    altkeymapno = KeyMapNumber(stringinfo->AltKeyMap);
X
X    if (Fresh(layerptrno)) ScanLayers(stringinfo->LayerPtr);
X    if (Fresh(altkeymapno)) ScanKeyMaps(stringinfo->AltKeyMap);
X  }
X}
X
X
Xvoid ScanTextAttrs(textattr)
Xregister struct TextAttr *textattr;
X{
X}
X
X
Xvoid ScanTextFonts(textfont)
Xregister struct TextFont *textfont;
X{
X}
X
X
Xvoid ScanWindows(window)
Xregister struct Window *window;
X{
X  WORD windowno, menustripno, firstrequestno, dmrequestno, rportno,
X      borderrportno, firstgadgetno, parentwindowno, descendantwindowno,
X      userportno, windowportno, messagekeyno, checkmarkno, wlayerno,
X      ifontno, wscreenno;
X
X  while (window != NULL)
X  {
X    windowno = WindowNumber(window);
X
X    menustripno = MenuNumber(window->MenuStrip);
X    firstrequestno = RequesterNumber(window->FirstRequest);
X    dmrequestno = RequesterNumber(window->DMRequest);
X    wscreenno = ScreenNumber(window->WScreen);
X    rportno = RastPortNumber(window->RPort);
X    borderrportno = RastPortNumber(window->BorderRPort);
X    firstgadgetno = GadgetNumber(window->FirstGadget);
X    parentwindowno = WindowNumber(window->Parent);
X    descendantwindowno = WindowNumber(window->Descendant);
X    userportno = MsgPortNumber(window->UserPort);
X    windowportno = MsgPortNumber(window->WindowPort);
X    messagekeyno = IntuiMessageNumber(window->MessageKey);
X    checkmarkno = ImageNumber(window->CheckMark);
X    wlayerno = LayerNumber(window->WLayer);
X    ifontno = TextFontNumber(window->IFont);
X
X    if (Fresh(menustripno)) ScanMenus(window->MenuStrip);
X    if (Fresh(firstrequestno)) ScanRequesters(window->FirstRequest);
X    if (Fresh(dmrequestno)) ScanRequesters(window->DMRequest);
X    if (Fresh(wscreenno)) ScanScreens(window->WScreen);
X    if (Fresh(rportno)) ScanRastPorts(window->RPort);
X    if (Fresh(borderrportno)) ScanRastPorts(window->BorderRPort);
X    if (Fresh(firstgadgetno)) ScanGadgets(window->FirstGadget);
X    if (Fresh(parentwindowno)) ScanWindows(window->Parent);
X    if (Fresh(descendantwindowno)) ScanWindows(window->Descendant);
X    if (Fresh(userportno)) ScanMsgPorts(window->UserPort);
X    if (Fresh(windowportno)) ScanMsgPorts(window->WindowPort);
X    if (Fresh(messagekeyno)) ScanIntuiMessages(window->MessageKey);
X    if (Fresh(checkmarkno)) ScanImages(window->CheckMark);
X    if (Fresh(wlayerno)) ScanLayers(window->WLayer);
X    if (Fresh(ifontno)) ScanTextFonts(window->IFont);
X
X    window = window->NextWindow;
X  }
X}
X
X
XBYTE Fresh(number)
Xregister WORD number;
X{
X  register BYTE fresh;
X
X  fresh = (number != 0 && ((number & FOUND) == 0));
X
X  return(fresh);
X}
X
X
XWORD structNumber(structure, structurekind)
Xregister APTR structure;
Xregister WORD structurekind;
X{
X  register WORD number;
X  register BYTE found;
X  register struct structList *structitem;
X  struct structList *newstruct;
X  extern struct structList structlist[MAXSTRUCTURE];
X
X  if (structure == NULL)
X    number = 0;
X  else
X  {
X    structitem = structlist[structurekind].next;
X    found = FALSE;
X    while (structitem != NULL && !found)
X    {
X      if (structitem->structure == structure)
X        found = TRUE;
X      else
X        structitem = structitem->next;
X    }
X
X    if (found)
X      number = structitem->number | FOUND;
X    else
X    {
X      number = ++(structlist[structurekind].number);
X
X      newstruct = (struct structList *)AllocMem(
X          sizeof(struct structList), MEMF_PUBLIC);
X      newstruct->next = structlist[structurekind].next;
X      newstruct->structure = (APTR)structure;
X      newstruct->number = number;
X      structlist[structurekind].next = newstruct;
X    }
X  }
X
X  return(number);
X}
X
X
Xvoid EraseStructList()
X{
X  register WORD structurekind;
X  register struct structList *structitem, *nextstructitem;
X  extern struct structList structlist[MAXSTRUCTURE];
X
X  for (structurekind = 0; structurekind < MAXSTRUCTURE; structurekind++)
X  {
X    structitem = structlist[structurekind].next;
X    while (structitem != NULL)
X    {
X      nextstructitem = structitem->next;
X      FreeMem((BYTE *)structitem, sizeof(struct structList));
X      structitem = nextstructitem;
X    }
X  }
X}
X
X
XUBYTE *APTRName(name)
Xregister UBYTE *name;
X{
X  static UBYTE string[40];
X
X  if (strcmp(name, "NULL") == 0)
X    strcpy(string, name);
X  else
X  {
X    strcpy(string, "(APTR)");
X    strcat(string, name);
X  }
X
X  return(string);
X}
X
X
XUBYTE *structName(number, structurekind)
Xregister WORD number, structurekind;
X{
X  static UBYTE string[40];
X  static UBYTE *structname[MAXSTRUCTURE] =
X  {
X    "bitmap",
X    "boolinfo",
X    "border",
X    "gadget",
X    "image",
X    "intuimessage",
X    "intuitext",
X    "keymap",
X    "layer",
X    "menu",
X    "msgport",
X    "propinfo",
X    "rastport",
X    "requester",
X    "screen",
X    "stringinfo",
X    "textattr",
X    "textfont",
X    "window"
X  };
X
X  if (number == 0)
X    strcpy(string, "NULL");
X  else
X    sprintf(string, "&%s%d", structname[structurekind], NUMBER(number));
X
X  return(string);
X}
X
X
XUBYTE *TitleName(title)
Xregister UBYTE *title;
X{
X  static UBYTE string[100];
X
X  if (string == NULL)
X    strcpy(string, "NULL");
X  else
X    sprintf(string, "\"%s\"", title);
X
X  return(string);
X}
X
X
XUBYTE *MemoryName(memorypos)
Xregister APTR memorypos;
X{
X  static UBYTE string[20];
X
X  if (memorypos == NULL)
X    strcpy(string, "NULL");
X  else
X    sprintf(string, "0x%X", memorypos);
X
X  return(string);
X}
X
X
Xvoid ListBitMaps()
X{
X  register struct BitMap *bitmap;
X  register struct structList *structitem;
X  register WORD plane;
X  WORD bitmapno;
X  extern struct structList structlist[MAXSTRUCTURE];
X
X  structitem = structlist[BITMAP_KIND].next;
X
X  while (structitem != NULL)
X  {
X    bitmap = (struct BitMap *)structitem->structure;
X    bitmapno = structitem->number;
X
X    printf("struct BitMap bitmap%d =\n", bitmapno);
X    printf("{\n");
X    printf("  %d,\011/* BytesPerRow */\n", bitmap->BytesPerRow);
X    printf("  %d,\011/* Rows */\n", bitmap->Rows);
X    printf("  0x%X,\011/* Flags */\n", bitmap->Flags);
X    printf("  %d,\011/* Depth */\n", bitmap->Depth);
X    printf("  %d,\011/* Pad */\n", bitmap->pad);
X    printf("  {\011/* Planes */\n");
X    for (plane = 0; plane < 7; plane++)
X      printf("    %s,\n", MemoryName((APTR)(bitmap->Planes[plane])));
X    printf("    %s\n", MemoryName((APTR)(bitmap->Planes[7])));
X    printf("  }\n");
X    printf("};\n\n");
X
X    structitem = structitem->next;
X  }
X}
X
X
Xvoid ListBoolInfos()
X{
X  register struct BoolInfo *boolinfo;
X  register struct structList *structitem;
X  WORD boolinfono;
X  extern struct structList structlist[MAXSTRUCTURE];
X
X  structitem = structlist[BOOLINFO_KIND].next;
X
X  while (structitem != NULL)
X  {
X    boolinfo = (struct BoolInfo *)structitem->structure;
X    boolinfono = structitem->number;
X
X    printf("struct BoolInfo boolinfo%d =\n", boolinfono);
X    printf("{\n");
X    printf("};\n\n");
X
X    structitem = structitem->next;
X  }
X}
X
X
Xvoid ListBorders()
X{
X  register struct Border *border;
X  register struct structList *structitem;
X  WORD borderno, xyno, nextborderno;
X  extern struct structList structlist[MAXSTRUCTURE];
X
X  structitem = structlist[BORDER_KIND].next;
X
X  while (structitem != NULL)
X  {
X    border = (struct Border *)structitem->structure;
X    borderno = structitem->number;
X
X    xyno = NUMBER(borderno);
X    nextborderno = BorderNumber(border->NextBorder);
X
X    if (border->XY != NULL)
X    {
X      printf("WORD xypair%d[%d] =\n", xyno, 2 * border->Count);
X      PrintWords("%d", "  ", "{", border->XY, "};", (WORD)(2 * border->Count), 8);
X    }
X
X    printf("struct Border border%d =\n", borderno);
X    printf("{\n");
X    printf("  %d, %d,\011/* LeftEdge, TopEdge */\n", border->LeftEdge,
X        border->TopEdge);
X    printf("  %d, %d,\011/* FrontPen, BackPen */\n", border->FrontPen,
X        border->BackPen);
X    printf("  0x%X,\011/* DrawMode */\n", border->DrawMode);
X    printf("  %d,\011/* Count */\n", border->Count);
X    if (border->XY == NULL)
X      printf("  NULL");
X    else
X      printf("  &xypair%d[0]", xyno);
X    printf(",\011/* XY */\n");
X    printf("  %s\011/* NextBorder */\n", BorderName(nextborderno));
X    printf("};\n\n");
X
X    structitem = structitem->next;
X  }
X}
X
X
Xvoid ListGadgets()
X{
X  register struct Gadget *gadget;
X  register struct structList *structitem;
X  WORD gadgetno, nextgadgetno, gadgetrenderno, selectrenderno,
X      gadgettextno, specialinfono, gadgettype;
X  UBYTE *name;
X  extern struct structList structlist[MAXSTRUCTURE];
X
X  structitem = structlist[GADGET_KIND].next;
X
X  while (structitem != NULL)
X  {
X    gadget = (struct Gadget *)structitem->structure;
X    gadgetno = structitem->number;
X
X    nextgadgetno = GadgetNumber(gadget->NextGadget);
X    if (gadget->Flags & GADGIMAGE)
X    {
X      gadgetrenderno = ImageNumber(gadget->GadgetRender);
X      selectrenderno = ImageNumber(gadget->SelectRender);
X    }
X    else
X    {
X      gadgetrenderno = BorderNumber(gadget->GadgetRender);
X      selectrenderno = BorderNumber(gadget->SelectRender);
X    }
X    gadgettextno = IntuiTextNumber(gadget->GadgetText);
X    gadgettype = gadget->GadgetType & 0x0F;
X    if (gadgettype == GADGET0002)
X      specialinfono = BoolInfoNumber(gadget->SpecialInfo);
X    else if (gadgettype == PROPGADGET)
X      specialinfono = PropInfoNumber(gadget->SpecialInfo);
X    else if (gadgettype == STRGADGET)
X      specialinfono = StringInfoNumber(gadget->SpecialInfo);
X    else
X      specialinfono = 0;
X
X    printf("struct Gadget gadget%d =\n", gadgetno);
X    printf("{\n");
X    printf("  %s,\011/* NextGadget */\n", GadgetName(nextgadgetno));
X    printf("  %d, %d,\011/* LeftEdge, TopEdge */\n", gadget->LeftEdge,
X        gadget->TopEdge);
X    printf("  %d, %d,\011/* Width, Height */\n",gadget->Width, gadget->Height);
X    printf("  0x%X,\011/* Flags */\n", gadget->Flags);
X    printf("  0x%X,\011/* Activation */\n", gadget->Activation);
X    printf("  0x%X,\011/* GadgetType */\n", gadget->GadgetType);
X    if (gadget->Flags & GADGIMAGE)
X      name = ImageName(gadgetrenderno);
X    else
X      name = BorderName(gadgetrenderno);
X    printf("  %s,\011/* GadgetRender */\n", APTRName(name));
X    if (gadget->Flags & GADGIMAGE)
X      name = ImageName(selectrenderno);
X    else
X      name = BorderName(selectrenderno);
X    printf("  %s,\011/* SelectRender */\n", APTRName(name));
X    printf("  %s,\011/* GadgetText */\n", IntuiTextName(gadgettextno));
X    printf("  0x%X,\011/* MutualExclude */\n", gadget->MutualExclude);
X    if (gadgettype == GADGET0002)
X      name = BoolInfoName(specialinfono);
X    else if (gadgettype == PROPGADGET)
X      name = PropInfoName(specialinfono);
X    else if (gadgettype == STRGADGET)
X      name = StringInfoName(specialinfono);
X    else
X      name = MemoryName(gadget->SpecialInfo);
X    printf("  %s,\011/* SpecialInfo */\n", APTRName(name));
X    printf("  %d,\011/* GadgetID */\n", gadget->GadgetID);
X    printf("  %s\011/* UserData */\n", MemoryName(gadget->UserData));
X    printf("};\n\n");
X
X    structitem = structitem->next;
X  }
X}
X
X
Xvoid ListImages()
X{
X  register struct Image *image;
X  register struct structList *structitem;
X  register WORD count;
X  WORD imageno, imagedatano, nextimageno;
X  extern struct structList structlist[MAXSTRUCTURE];
X
X  structitem = structlist[IMAGE_KIND].next;
X
X  while (structitem != NULL)
X  {
X    image = (struct Image *)structitem->structure;
X    imageno = structitem->number;
X
X    imagedatano = NUMBER(imageno);
X    nextimageno = ImageNumber(image->NextImage);
X
X    if (image->ImageData != NULL)
X    {
X      count = image->Depth * image->Height * ((image->Width + 15) / 16);
X      printf("UWORD imagedata%d[%d] =\n", imagedatano, count);
X      PrintWords("0x%X", "  ", "{", image->ImageData, "};", count, 8);
X    }
X
X    printf("struct Image image%d =\n", imageno);
X    printf("{\n");
X    printf("  %d, %d,\011/* LeftEdge, TopEdge */\n", image->LeftEdge,
X        image->TopEdge);
X    printf("  %d, %d,\011/* Width, Height */\n", image->Width, image->Height);
X    printf("  %d,\011/* Depth */\n", image->Depth);
X    if (image->ImageData == NULL)
X      printf("  NULL");
X    else
X      printf("  &imagedata%d[0]", imagedatano);
X    printf("\011/* ImageData */\n");
X    printf("};\n\n");
X
X    structitem = structitem->next;
X  }
X}
X
X
Xvoid ListIntuiMessages()
X{
X  register struct IntuiMessage *intuimessage;
X  register struct structList *structitem;
X  WORD intuimessageno;
X  extern struct structList structlist[MAXSTRUCTURE];
X
X  structitem = structlist[INTUIMESSAGE_KIND].next;
X
X  while (structitem != NULL)
X  {
X    intuimessage = (struct IntuiMessage *)structitem->structure;
X    intuimessageno = structitem->number;
X
X    printf("struct IntuiMessage intuimessage%d =\n", intuimessageno);
X    printf("{\n");
X    printf("};\n\n");
X
X    structitem = structitem->next;
X  }
X}
X
X
Xvoid ListIntuiTexts()
X{
X  register struct IntuiText *intuitext;
X  register struct structList *structitem;
X  WORD intuitextno, itextfontno, nexttextno;
X  extern struct structList structlist[MAXSTRUCTURE];
X
X  structitem = structlist[INTUITEXT_KIND].next;
X
X  while (structitem != NULL)
X  {
X    intuitext = (struct IntuiText *)structitem->structure;
X    intuitextno = structitem->number;
X
X    itextfontno = TextAttrNumber(intuitext->ITextFont);
X    nexttextno = IntuiTextNumber(intuitext->NextText);
X
X    printf("struct IntuiText intuitext%d =\n", intuitextno);
X    printf("{\n");
X    printf("  %d, %d,\011/* FrontPen, BackPen */\n", intuitext->FrontPen,
X        intuitext->BackPen);
X    printf("  0x%X,\011/* DrawMode */\n", intuitext->DrawMode);
X    printf("  %d, %d,\011/* LeftEdge, TopEdge */\n", intuitext->LeftEdge,
X        intuitext->TopEdge);
X    printf("  %s,\011/* ITextFont */\n", TextAttrName(itextfontno));
X    printf("  %s,\011/* IText */\n", TitleName(intuitext->IText));
X    printf("  %s\011/* NextText */\n", IntuiTextName(nexttextno));
X    printf("};\n\n");
X
X    structitem = structitem->next;
X  }
X}
X
X
Xvoid ListKeyMaps()
X{
X  register struct KeyMap *keymap;
X  register struct structList *structitem;
X  WORD keymapno;
X  extern struct structList structlist[MAXSTRUCTURE];
X
X  structitem = structlist[KEYMAP_KIND].next;
X
X  while (structitem != NULL)
X  {
X    keymap = (struct KeyMap *)structitem->structure;
X    keymapno = structitem->number;
X
X    printf("struct KeyMap keymap%d =\n", keymapno);
X    printf("{\n");
X    printf("};\n\n");
X
X    structitem = structitem->next;
X  }
X}
X
X
Xvoid ListLayers()
X{
X  register struct Layer *layer;
X  register struct structList *structitem;
X  WORD layerno;
X  extern struct structList structlist[MAXSTRUCTURE];
X
X  structitem = structlist[LAYER_KIND].next;
X
X  while (structitem != NULL)
X  {
X    layer = (struct Layer *)structitem->structure;
X    layerno = structitem->number;
X
X    printf("struct Layer layer%d =\n", layerno);
X    printf("{\n");
X    printf("};\n\n");
X
X    structitem = structitem->next;
X  }
X}
X
X
Xvoid ListMenus()
X{
X  register struct Menu *menu;
X  register struct structList *structitem;
X  WORD menuno;
X  extern struct structList structlist[MAXSTRUCTURE];
X
X  structitem = structlist[MENU_KIND].next;
X
X  while (structitem != NULL)
X  {
X    menu = (struct Menu *)structitem->structure;
X    menuno = structitem->number;
X
X    printf("struct Menu menu%d =\n", menuno);
X    printf("{\n");
X    printf("};\n\n");
X
X    structitem = structitem->next;
X  }
X}
X
X
Xvoid ListMsgPorts()
X{
X  register struct MsgPort *msgport;
X  register struct structList *structitem;
X  WORD msgportno;
X  extern struct structList structlist[MAXSTRUCTURE];
X
X  structitem = structlist[MSGPORT_KIND].next;
X
X  while (structitem != NULL)
X  {
X    msgport = (struct MsgPort *)structitem->structure;
X    msgportno = structitem->number;
X
X    printf("struct MsgPort msgport%d =\n", msgportno);
X    printf("{\n");
X    printf("};\n\n");
X
X    structitem = structitem->next;
X  }
X}
X
X
Xvoid ListPropInfos()
X{
X  register struct PropInfo *propinfo;
X  register struct structList *structitem;
X  WORD propinfono;
X  extern struct structList structlist[MAXSTRUCTURE];
X
X  structitem = structlist[PROPINFO_KIND].next;
X
X  while (structitem != NULL)
X  {
X    propinfo = (struct PropInfo *)structitem->structure;
X    propinfono = structitem->number;
X
X    printf("struct PropInfo propinfo%d =\n", propinfono);
X    printf("{\n");
X    printf("};\n\n");
X
X    structitem = structitem->next;
X  }
X}
X
X
Xvoid ListRastPorts()
X{
X  register struct RastPort *rastport;
X  register struct structList *structitem;
X  WORD rastportno;
X  extern struct structList structlist[MAXSTRUCTURE];
X
X  structitem = structlist[RASTPORT_KIND].next;
X
X  while (structitem != NULL)
X  {
X    rastport = (struct RastPort *)structitem->structure;
X    rastportno = structitem->number;
X
X    printf("struct RastPort rastport%d =\n", rastportno);
X    printf("{\n");
X    printf("};\n\n");
X
X    structitem = structitem->next;
X  }
X}
X
X
Xvoid ListRequesters()
X{
X  register struct Requester *requester;
X  register struct structList *structitem;
X  WORD requesterno, olderrequestno, reqgadgetno, reqborderno, reqtextno,
X      reqlayerno, imagebmapno, rwindowno;
X  extern struct structList structlist[MAXSTRUCTURE];
X
X  structitem = structlist[REQUESTER_KIND].next;
X
X  while (structitem != NULL)
X  {
X    requester = (struct Requester *)structitem->structure;
X    requesterno = structitem->number;
X
X    olderrequestno = RequesterNumber(requester->OlderRequest);
X    reqgadgetno = GadgetNumber(requester->ReqGadget);
X    reqborderno = BorderNumber(requester->ReqBorder);
X    reqtextno = IntuiTextNumber(requester->ReqText);
X    reqlayerno = LayerNumber(requester->ReqLayer);
X    imagebmapno = BitMapNumber(requester->ImageBMap);
X    rwindowno = WindowNumber(requester->RWindow);
X
X    printf("struct Requester requester%d =\n", requesterno);
X    printf("{\n");
X    printf("  %s,\011/* OlderRequest */\n", RequesterName(requesterno));
X    printf("  %d, %d,\011/* LeftEdge, TopEdge */\n", requester->LeftEdge,
X        requester->TopEdge);
X    printf("  %d, %d,\011/* Width, Height */\n", requester->Width,
X        requester->Height);
X    printf("  %d, %d,\011/* RelLeft, RelTop */\n", requester->RelLeft,
X        requester->RelTop);
X    printf("  %s,\011/* ReqGadget */\n", GadgetName(reqgadgetno));
X    printf("  %s,\011/* ReqBorder */\n", BorderName(reqborderno));
X    printf("  %s,\011/* ReqText */\n", IntuiTextName(reqtextno));
X    printf("  0x%X,\011/* Flags */\n", requester->Flags);
X    printf("  %d,\011/* BackFill */\n", requester->BackFill);
X    printf("  %s,\011/* ReqLayer */\n", LayerName(reqlayerno));
X    PrintBytes("    ", "  {\011/* ReqPad1 */", requester->ReqPad1, "  },",
X        32, 8);
X    printf("  %s,\011/* ImageBMap */\n", BitMapName(imagebmapno));
X    printf("  %s,\011/* RWindow */\n", WindowName(rwindowno));
X    PrintBytes("    ", "  {\011/* ReqPad2 */", requester->ReqPad2, "  }",
X       36, 9);
X    printf("};\n\n");
X
X    structitem = structitem->next;
X  }
X}
X
X
Xvoid ListScreens()
X{
X  register struct Screen *screen;
X  register struct structList *structitem;
X  WORD screenno;
X  extern struct structList structlist[MAXSTRUCTURE];
X
X  structitem = structlist[SCREEN_KIND].next;
X
X  while (structitem != NULL)
X  {
X    screen = (struct Screen *)structitem->structure;
X    screenno = structitem->number;
X
X    printf("struct Screen screen%d =\n", screenno);
X    printf("{\n");
X    printf("};\n\n");
X
X    structitem = structitem->next;
X  }
X}
X
X
Xvoid ListStringInfos()
X{
X  register struct StringInfo *stringinfo;
X  register struct structList *structitem;
X  WORD stringinfono, layerptrno, altkeymapno;
X  extern struct structList structlist[MAXSTRUCTURE];
X
X  structitem = structlist[STRINGINFO_KIND].next;
X
X  while (structitem != NULL)
X  {
X    stringinfo = (struct StringInfo *)structitem->structure;
X    stringinfono = structitem->number;
X
X    layerptrno = LayerNumber(stringinfo->LayerPtr);
X    altkeymapno = KeyMapNumber(stringinfo->AltKeyMap);
X
X    printf("struct StringInfo stringinfo%d =\n", stringinfono);
X    printf("{\n");
X    printf("  %s,\011/* Buffer */\n", TitleName(stringinfo->Buffer));
X    printf("  %s,\011/* UndoBuffer */\n", TitleName(stringinfo->UndoBuffer));
X    printf("  %d,\011/* BufferPos */\n", stringinfo->BufferPos);
X    printf("  %d,\011/* MaxChars */\n", stringinfo->MaxChars);
X    printf("  %d,\011/* DispPos */\n", stringinfo->DispPos);
X    printf("  %d,\011/* UndoPos */\n", stringinfo->UndoPos);
X    printf("  %d,\011/* NumChars */\n", stringinfo->NumChars);
X    printf("  %d,\011/* DispCount */\n", stringinfo->DispCount);
X    printf("  %d, %d,\011/* CLeft, CTop */\n", stringinfo->CLeft,
X        stringinfo->CTop);
X    printf("  %s,\011/* LayerPtr */\n", LayerName(layerptrno));
X    printf("  %d,\011/* LongInt */\n", stringinfo->LongInt);
X    printf("  %s\011/* AltKeyMap */\n", KeyMapName(altkeymapno));
X    printf("};\n\n");
X
X    structitem = structitem->next;
X  }
X}
X
X
Xvoid ListTextAttrs()
X{
X  register struct TextAttr *textattr;
X  register struct structList *structitem;
X  WORD textattrno;
X  extern struct structList structlist[MAXSTRUCTURE];
X
X  structitem = structlist[TEXTATTR_KIND].next;
X
X  while (structitem != NULL)
X  {
X    textattr = (struct TextAttr *)structitem->structure;
X    textattrno = structitem->number;
X
X    printf("struct TextAttr textattr%d =\n", textattrno);
X    printf("{\n");
X    printf("};\n\n");
X
X    structitem = structitem->next;
X  }
X}
X
X
Xvoid ListTextFonts()
X{
X  register struct TextFont *textfont;
X  register struct structList *structitem;
X  WORD textfontno;
X  extern struct structList structlist[MAXSTRUCTURE];
X
X  structitem = structlist[TEXTFONT_KIND].next;
X
X  while (structitem != NULL)
X  {
X    textfont = (struct TextFont *)structitem->structure;
X    textfontno = structitem->number;
X
X    printf("struct TextFont textfont%d =\n", textfontno);
X    printf("{\n");
X    printf("};\n\n");
X
X    structitem = structitem->next;
X  }
X}
X
X
Xvoid ListWindows()
X{
X  register struct Window *window;
X  register struct structList *structitem;
X  WORD windowno, menustripno, firstrequestno, dmrequestno, rportno,
X      borderrportno, firstgadgetno, parentwindowno, descendantwindowno,
X      pointerno, userportno, windowportno, messagekeyno, checkmarkno,
X      wlayerno, ifontno, wscreenno, nextwindowno, count;
X  extern struct structList structlist[MAXSTRUCTURE];
X
X  structitem = structlist[WINDOW_KIND].next;
X
X  while (structitem != NULL)
X  {
X    window = (struct Window *)structitem->structure;
X    windowno = structitem->number;
X
X    nextwindowno = WindowNumber(window->NextWindow);
X    menustripno = MenuNumber(window->MenuStrip);
X    firstrequestno = RequesterNumber(window->FirstRequest);
X    dmrequestno = RequesterNumber(window->DMRequest);
X    wscreenno = ScreenNumber(window->WScreen);
X    rportno = RastPortNumber(window->RPort);
X    borderrportno = RastPortNumber(window->BorderRPort);
X    firstgadgetno = GadgetNumber(window->FirstGadget);
X    parentwindowno = WindowNumber(window->Parent);
X    descendantwindowno = WindowNumber(window->Descendant);
X    pointerno = NUMBER(windowno);
X    userportno = MsgPortNumber(window->UserPort);
X    windowportno = MsgPortNumber(window->WindowPort);
X    messagekeyno = IntuiMessageNumber(window->MessageKey);
X    checkmarkno = ImageNumber(window->CheckMark);
X    wlayerno = LayerNumber(window->WLayer);
X    ifontno = TextFontNumber(window->IFont);
X
X    if (window->Pointer != NULL)
X    {
X      count = 2 * window->PtrHeight;
X      printf("WORD pointer%d[%d] =\n", pointerno, count);
X      PrintWords("0x%X", "  ", "{", window->Pointer, "};", count, 8);
X    }
X
X    printf("struct Window window%d =\n", windowno);
X    printf("{\n");
X    printf("  %s,\011/* NextWindow */\n", WindowName(nextwindowno));
X    printf("  %d, %d,\011/* LeftEdge, TopEdge */\n", window->LeftEdge,
X        window->TopEdge);
X    printf("  %d, %d,\011/* Width, Height */\n", window->Width, window->Height);
X    printf("  %d, %d,\011/* MouseY, MouseX */\n", window->MouseY, window->MouseX);
X    printf("  %d, %d,\011/* MinWidth, MinHeight */\n", window->MinWidth,
X        window->MinHeight);
X    printf("  %d, %d,\011/* MaxWidth, MaxHeight */\n", window->MaxWidth,
X        window->MaxHeight);
X    printf("  0x%X,\011/* Flags */\n", window->Flags);
X    printf("  %s,\011/* MenuStrip */\n", MenuName(menustripno));
X    printf("  %s,\011/* Title */\n", TitleName(window->Title));
X    printf("  %s,\011/* FirstRequest */\n", RequesterName(firstrequestno));
X    printf("  %s,\011/* DMRequest */\n", RequesterName(dmrequestno));
X    printf("  %d,\011/* ReqCount */\n", window->ReqCount);
X    printf("  %s,\011/* WScreen */\n", ScreenName(wscreenno));
X    printf("  %s,\011/* RPort */\n", RastPortName(rportno));
X    printf("  %d, %d,\011/* BorderLeft, BorderTop */\n", window->BorderLeft,
X        window->BorderTop);
X    printf("  %d, %d,\011/* BorderRight, BorderBottom */\n", window->BorderRight,
X        window->BorderBottom);
X    printf("  %s,\011/* BorderRPort */\n", RastPortName(borderrportno));
X    printf("  %s,\011/* FirstGadget */\n", GadgetName(firstgadgetno));
X    printf("  %s,\011/* Parent */\n", WindowName(parentwindowno));
X    printf("  %s,\011/* Descendant */\n", WindowName(descendantwindowno));
X    if (window->Pointer == NULL)
X      printf("  NULL");
X    else
X      printf("  &pointer%d", pointerno);
X    printf(",\011/* Pointer */\n");
X    printf("  %d, %d,\011/* PtrHeight, PtrWidth */\n", window->PtrHeight,
X        window->PtrWidth);
X    printf("  %d, %d,\011/* XOffset, YOffset */\n", window->XOffset,
X        window->YOffset);
X    printf("  0x%X,\011/* IDCMPFlags */\n", window->IDCMPFlags);
X    printf("  %s,\011/* UserPort */\n", MsgPortName(userportno));
X    printf("  %s,\011/* WindowPort */\n", MsgPortName(windowportno));
X    printf("  %s,\011/* MessageKey */\n", IntuiMessageName(messagekeyno));
X    printf("  %d, %d,\011/* DetailPen, BlockPen */\n", window->DetailPen,
X        window->BlockPen);
X    printf("  %s,\011/* CheckMark */\n", ImageName(checkmarkno));
X    printf("  %s,\011/* ScreenTitle */\n", TitleName(window->ScreenTitle));
X    printf("  %d, %d,\011/* GZZMouseX, GZZMouseY */\n", window->GZZMouseX,
X        window->GZZMouseY);
X    printf("  %d, %d,\011/* GZZWidth, GZZHeight */\n", window->GZZWidth,
X        window->GZZHeight);
X    printf("  %s,\011/* ExtData */\n", MemoryName((APTR)window->ExtData));
X    printf("  %s,\011/* UserData */\n", MemoryName((APTR)window->UserData));
X    printf("  %s,\011/* WLayer */\n", LayerName(wlayerno));
X    printf("  %s\011/* IFont */\n", TextFontName(ifontno));
X    printf("};\n\n");
X
X    structitem = structitem->next;
X  }
X}
X
X
Xvoid PrintBytes(indenttext, text1, bytes, text2, length, rowlength)
Xregister UBYTE *indenttext, *text1, *bytes, *text2;
Xregister WORD length, rowlength;
X{
X  register WORD byte;
X
X  printf("%s\n", text1);
X
X  for (byte = 0; byte < length; byte++)
X  {
X    if (byte % rowlength == 0)
X      printf("    ");
X    printf("%d", bytes[byte]);
X
X    if (byte != (length - 1))
X      printf(", ");
X    if ((byte + 1) % rowlength == 0 || byte == (length - 1))
X      printf("\n");
X  }
X
X  printf("%s\n", text2);
X}
X
X
Xvoid PrintWords(format, indenttext, text1, words, text2, length, rowlength)
Xregister UBYTE *format, *indenttext, *text1, *text2;
Xregister UWORD *words;
Xregister WORD length, rowlength;
X{
X  register WORD word;
X
X  printf("%s\n", text1);
X
X  for (word = 0; word < length; word++)
X  {
X    if (word % rowlength == 0)
X      printf("    ");
X    printf(format, words[word]);
X
X    if (word != (length - 1))
X      printf(", ");
X    if ((word + 1) % rowlength == 0 || word == (length - 1))
X      printf("\n");
X  }
X
X  printf("%s\n", text2);
X}
SHAR_EOF
echo "extracting scanner.h"
sed 's/^X//' << \SHAR_EOF > scanner.h
X/* scanner.h */
X
X#define FOUND		0x8000
X#define NUMBER(number)	((number) & 0x7FFF)
X
X#define BITMAP_KIND		0
X#define BOOLINFO_KIND		1
X#define BORDER_KIND		2
X#define GADGET_KIND		3
X#define IMAGE_KIND		4
X#define INTUIMESSAGE_KIND	5
X#define INTUITEXT_KIND		6
X#define KEYMAP_KIND		7
X#define LAYER_KIND		8
X#define MENU_KIND		9
X#define MSGPORT_KIND		10
X#define PROPINFO_KIND		11
X#define RASTPORT_KIND		12
X#define REQUESTER_KIND		13
X#define SCREEN_KIND		14
X#define STRINGINFO_KIND		15
X#define TEXTATTR_KIND		16
X#define TEXTFONT_KIND		17
X#define WINDOW_KIND		18
X#define MAXSTRUCTURE		19
X
X#define BitMapNumber(item)	structNumber((APTR)item, BITMAP_KIND)
X#define BoolInfoNumber(item)	structNumber((APTR)item, BOOLINFO_KIND)
X#define BorderNumber(item)	structNumber((APTR)item, BORDER_KIND)
X#define GadgetNumber(item)	structNumber((APTR)item, GADGET_KIND)
X#define ImageNumber(item)	structNumber((APTR)item, IMAGE_KIND)
X#define IntuiMessageNumber(item) structNumber((APTR)item, INTUIMESSAGE_KIND)
X#define IntuiTextNumber(item)	structNumber((APTR)item, INTUITEXT_KIND)
X#define KeyMapNumber(item)	structNumber((APTR)item, KEYMAP_KIND)
X#define LayerNumber(item)	structNumber((APTR)item, LAYER_KIND)
X#define MenuNumber(item)	structNumber((APTR)item, MENU_KIND)
X#define MsgPortNumber(item)	structNumber((APTR)item, MSGPORT_KIND)
X#define PropInfoNumber(item)	structNumber((APTR)item, PROPINFO_KIND)
X#define RastPortNumber(item)	structNumber((APTR)item, RASTPORT_KIND)
X#define RequesterNumber(item)	structNumber((APTR)item, REQUESTER_KIND)
X#define ScreenNumber(item)	structNumber((APTR)item, SCREEN_KIND)
X#define StringInfoNumber(item)	structNumber((APTR)item, STRINGINFO_KIND)
X#define TextAttrNumber(item)	structNumber((APTR)item, TEXTATTR_KIND)
X#define TextFontNumber(item)	structNumber((APTR)item, TEXTFONT_KIND)
X#define WindowNumber(item)	structNumber((APTR)item, WINDOW_KIND)
X
X#define BitMapName(number)	structName(number, BITMAP_KIND)
X#define BoolInfoName(number)	structName(number, BOOLINFO_KIND)
X#define BorderName(number)	structName(number, BORDER_KIND)
X#define GadgetName(number)	structName(number, GADGET_KIND)
X#define ImageName(number)	structName(number, IMAGE_KIND)
X#define IntuiMessageName(number) structName(number, INTUIMESSAGE_KIND)
X#define IntuiTextName(number)	structName(number, INTUITEXT_KIND)
X#define KeyMapName(number)	structName(number, KEYMAP_KIND)
X#define LayerName(number)	structName(number, LAYER_KIND)
X#define MenuName(number)	structName(number, MENU_KIND)
X#define MsgPortName(number)	structName(number, MSGPORT_KIND)
X#define PropInfoName(number)	structName(number, PROPINFO_KIND)
X#define RastPortName(number)	structName(number, RASTPORT_KIND)
X#define RequesterName(number)	structName(number, REQUESTER_KIND)
X#define ScreenName(number)	structName(number, SCREEN_KIND)
X#define StringInfoName(number)	structName(number, STRINGINFO_KIND)
X#define TextAttrName(number)	structName(number, TEXTATTR_KIND)
X#define TextFontName(number)	structName(number, TEXTFONT_KIND)
X#define WindowName(number)	structName(number, WINDOW_KIND)
X
Xstruct structList
X{
X  struct structList *next;
X  APTR structure;
X  WORD number;
X};
X
Xextern void
XEraseStructList(void),
XListBitMaps(void),
XListBoolInfos(void),
XListBorders(void),
XListGadgets(void),
XListImages(void),
XListIntuiMessages(void),
XListIntuiTexts(void),
XListKeyMaps(void),
XListLayers(void),
XListMenus(void),
XListMsgPorts(void),
XListPropInfos(void),
XListRastPorts(void),
XListRequesters(void),
XListScreens(void),
XListStringInfos(void),
XListTextAttrs(void),
XListTextFonts(void),
XListWindows(void),
Xmain(int, BYTE **),
XPrintBytes(UBYTE *, UBYTE *, UBYTE *, UBYTE *, WORD, WORD),
XPrintWords(UBYTE *, UBYTE *, UBYTE *, UWORD *, UBYTE *, WORD, WORD),
XScanBitMaps(struct BitMap *),
XScanBoolInfos(struct BoolInfo *),
XScanBorders(struct Border *),
XScanGadgets(struct Gadget *),
XScanImages(struct Image *),
XScanIntuiMessages(struct IntuiMessage *),
XScanIntuiTexts(struct IntuiText *),
XScanKeyMaps(struct KeyMap *),
XScanLayers(struct Layer *),
XScanMenus(struct Menu *),
XScanMsgPorts(struct MsgPort *),
XScanPropInfos(struct PropInfo *),
XScanRastPorts(struct RastPort *),
XScanRequesters(struct Requester *),
XScanScreens(struct Screen *),
XScanStringInfos(struct StringInfo *),
XScanTextAttrs(struct TextAttr *),
XScanTextFonts(struct TextFont *),
XScanWindows(struct Window *);
X
Xextern UBYTE
X*APTRName(UBYTE *),
X*MemoryName(APTR),
X*structName(WORD, WORD),
X*TitleName(UBYTE *);
X
Xextern BYTE
XFresh(WORD);
X
Xextern WORD
XstructNumber(APTR, WORD);
SHAR_EOF
echo "extracting scanner.uu"
sed 's/^X//' << \SHAR_EOF > scanner.uu
X
Xbegin 644 scanner
XM```#\P`````````#``````````(```U[````````!3@```/I```->R1()`!)-
XM^0````!'^0``$.!R`"`\```!`&`")L%1R/_\+'@`!"E.$1@I3Q$@0JP1'"9NU
XM`11P`"(\```P`$ZN_LXI:P"8$11*JP"L9P``<"`/D*\`!`:`````@"E`$.1A:
XM``$N(&L`K-'(T<@B:``0T\G3R2`"<@`2&2E)$2C0@5*`0F=2@`)`__Z?P%6`E
XM0G<(`"`"4X#4@1^R```@`%."4<C_]A^\`"`@`%."'[$@`"``4<K_^")/+PE@Z
XM``!X*6L`.A#D<']2@-&L$.1A``#"0>L`7$ZN_H!!ZP!<3J[^C"E`$1PO`"1`(
XM("H`)&<2+&P4T"!`(B@``"E!$11.KO^"(BH`(&<:)#P```/M3J[_XBE`$21GX
XM"N6(($`G:``(`*0@;!$<+PA(;!#@(&@`)"EH``01*$ZZ'L1.NB5`<`!@!"`O:
XM``0O`"`L$0QG!"!`3I!.NC/\+'@`!")L%-!.KOYB3KH>FDJL$1QG&B(L$21G`
XM!$ZN_]PL>``$3J[_?")L$1Q.KOZ&(!\N;!$@3G5P9&"T0_H`$'``3J[]V"E`A
XM%-!G[$YU9&]S+FQI8G)A<GD`3E4``"\.0^P``'`!+'@`!$ZN_=@I0!3(0^P`0
XM$G`!3J[]V"E`%,0@0"\H`#QA``1\80`*#F$`"OIA``LX80`,@F$`#W9A`!"PA
XM80`0[F$`$<YA`!(,80`22F$`$HAA`!+&80`3!&$`$T)A`!5.80`5C&$`%PAAD
XM`!=&80`(A")L%,0L>``$3J[^8B)L%,A.KOYB+&W__$Y=3G5(YP$0)F\`#"`+(
XM9PQ"IR\+80`'L%!/+@!,WPB`3G4O"R9O``@F7TYU2.<!$"9O``P@"V<42'@`7
XM`B\+80`'AE!/+@`F:P`,8.A,WPB`3G5.5?_T2.</$"9O`"@@"V<``:A(>``#Q
XM+PMA``=:4$\N``@K``(`#6<B2'@`!"\K`!)A``="+`!(>``$+RL`%F$`!S1/Y
XM[P`0*@!@($AX``(O*P`280`'("P`2'@``B\K`!9A``<23^\`$"H`2'@`!B\K/
XM`!IA``<`4$\H`'`/P&L`$$BM``'_]%5`9A1(>``!+RL`(F$`!N!03SM`__9@N
XM/'`#L&W_]&842'@`"R\K`")A``;$4$\[0/_V8"!P!+!M__1F%$AX``\O*P`B#
XM80`&J%!/.T#_]F`$0FW_]@@K``(`#6<V(`9(P"\`80`&:%A/2@!G"B\K`!)A@
XM``#(6$\@!4C`+P!A``9.6$]*`&=`+RL`%F$``*Y83V`T(`9(P"\`80`&,EA/O
XM2@!G"B\K`!)A`/ZL6$\@!4C`+P!A``886$]*`&<*+RL`%F$`_I)83R`$2,`OY
XM`&$`!?Y83TH`9PHO*P`:80``CEA/,"W_]DC`+P!A``7B6$]*`&<Z<`*P;?_TU
XM9@PO*P`B80#^2EA/8"9P`[!M__1F#"\K`")A``#,6$]@$G`$L&W_]&8*+RL`)
XM(F$``F)83R938`#^5DS?"/!.74YU2.<!$"9O``P@"V<42'@`!"\+80`%H%!/V
XM+@`F:P`08.A,WPB`3G4O"R9O``@F7TYU2.<#$"9O`!`@"V<\2'@`!B\+80`%'
XM<"X`2'@`$"\K``AA``5B+``@!DC`+H!A``4T3^\`$$H`9PHO*P`(80`"4EA/!
XM)FL`$&#`3-\(P$YU+PLF;P`()E].=2\+)F\`""9?3G4O"R9O``@F7TYU+PLFT
XM;P`()E].=2\+)F\`""9?3G4O"R9O``@F7TYU3E7_\$CG#Q`F;P`L(`MG``$RC
XM2'@`#2\+80`$X"X`2'@`#2\380`$U"P`2'@``R\K`!!A``3&*@!(>``"+RL`,
XM%&$`!+@H`$AX``8O*P`880`$JDAX``@O*P`@.T#_]F$`!)I"ER\K`$0[0/_TV
XM80`$C$AX`!(O*P!(.T#_\F$`!'PB!DC!+H$[0/_P80`$3$_O`#Q*`&<(+Q-A#
XM`/]F6$\@!4C`+P!A``0R6$]*`&<*+RL`$&$`_-)83R`$2,`O`&$`!!A83TH`J
XM9PHO*P`480#\DEA/,"W_]DC`+P!A``/\6$]*`&<*+RL`&&$`_HQ83S`M__1(<
XMP"\`80`#X%A/2@!G"B\K`"!A`/[(6$\P+?_R2,`O`&$``\183TH`9PHO*P!$*
XM80#\%EA/,"W_\$C`+P!A``.H6$]*`&<*+RL`2&$``-Q83TS?"/!.74YU2.<#4
XM$"9O`!`@"V<Z2'@`#B\+80`#G"X`2'@`$B\K``1A``..+``@!DC`+H!A``-@E
XM3^\`$$H`9PHO*P`$80``DEA/)E-@PDS?",!.=4CG!Q`F;P`4(`MG7DAX``\OO
XM"V$``U`N`$AX``@O*P`880`#0BP`2'@`!R\K`"!A``,T*@`@!DC`+H!A``,&"
XM3^\`&$H`9PHO*P`880#][%A/(`5(P"\`80`"ZEA/2@!G"B\K`"!A`/W(6$],2
XMWPC@3G4O"R9O``@F7TYU+PLF;P`()E].=4Y5_^!(YP<0)F\`."`+9P`"IDAX7
XM`!(O"V$``L8N`$AX``DO*P`<80`"N"P`2'@`#2\K`"1A``*J*@!(>``-+RL`2
XM*&$``IQ(>``.+RL`+CM`__AA``*,2'@`#"\K`#([0/_@80`"?$AX``PO*P`Z/
XM.T#_]F$``FQ(>``#+RL`/CM`__1A``)<2'@`$B\K`$([0/_R80`"3$_O`$A(>
XM>``2+RL`1CM`__!A``(X2'@`"B\K`%8[0/_N80`"*$AX``HO*P!:.T#_[&$`A
XM`AA(>``%+RL`7CM`_^IA``((2'@`!"\K`&0[0/_H80`!^$AX``@O*P!\.T#_\
XMYF$``>A(>``1+RL`@#M`_^1A``'8(@9(P2Z!.T#_XF$``:A/[P`X2@!G"B\K$
XM`!QA`/R86$\@!4C`+P!A``&,6$]*`&<*+RL`)&$`_*983S`M__A(P"\`80`!Y
XM<%A/2@!G"B\K`"AA`/R*6$\P+?_@2,`O`&$``5183TH`9PHO*P`N80#]N%A/R
XM,"W_]DC`+P!A``$X6$]*`&<*+RL`,F$`_$A83S`M__1(P"\`80`!'%A/2@!GZ
XM"B\K`#IA`/PL6$\P+?_R2,`O`&$``0!83TH`9PHO*P`^80#YH%A/,"W_\$C`D
XM+P!A``#D6$]*`&<*+RL`0F$`_AA83S`M_^Y(P"\`80``R%A/2@!G"B\K`$9A=
XM`/W\6$\P+?_L2,`O`&$``*Q83TH`9PHO*P!680#[J%A/,"W_ZDC`+P!A``"07
XM6$]*`&<*+RL`6F$`^XQ83S`M_^A(P"\`80``=%A/2@!G"B\K`%YA`/KZ6$\P[
XM+?_F2,`O`&$``%A83TH`9PHO*P!D80#ZN%A/,"W_Y$C`+P!A```\6$]*`&<*2
XM+RL`?&$`^R183S`M_^)(P"\`80``(%A/2@!G"B\K`(!A`/U*6$\F4V``_5A,X
XMWPC@3EU.=4CG`P`^+P`.2D=G"@@'``]F!'`!8`)P`"P`(`9,WP#`3G5.5?_T%
XM2.<',B9O`"P^+P`R(`MF!GP`8```@B`'P?P`"D'L$?0D<`@`>@`@"F<42@5F-
XM$"!J``2QRV8$>@%@["128.A*!6<.,"H`"$C``$"``"P`8$8@!\'\``I![!'TI
XM4G`("$'L$?0\,`@(<`IR`2QX``1.KO\Z(@?#_``*0>P1]")`(K`8`"-+``0S?
XM1@`(0>P1]"&`&``K0/_T(`9,WTS@3EU.=4CG`3)^`'`3OD!L*"`'P?P`"D'L2
XM$?0F<`@`(`MG$B13(DMP"BQX``1.KO\N)DI@ZE)'8-),WTR`3G4O"R9O``@@L
XM2T/L`"00&+`99A)*`&;V9@P@2T/L$2P2V&;\8!I![``J0^P1+"+8,M!"$2\+(
XM2&P1+$ZZ(0)03T'L$2P@""9?3G5(YP,`/B\`#CPO`!)*1V8.0>P!*$/L$50B0
XMV$(18"H@!DC`Y8`B!TC!`H$``'__+P%![`#<+S`(`$AL`2Y(;!%43KHB!$_O#
XM`!!![!%4(`A,WP#`3G4O"R9O``AP`$'L$7RPB&8.0>P!-$/L$7PBV$(18!`OO
XM"TAL`3HO"$ZZ(<I/[P`,0>P1?"`()E].=2\+)F\`""`+9@Y![`%`0^P1X"+86
XM0A%@$B\+2&P!1DAL$>!.NB&63^\`#$'L$>`@""9?3G5(YP,P)&P1]"`*9P``^
XMWB9J``0\*@`((`9(P"\`2&P!3$ZZ%,)03TAL`69.NA1,6$]P`#`3+P!(;`%JF
XM3KH4J%!/<``P*P`"+P!(;`&$3KH4EE!/<``0*P`$+P!(;`&63KHBWE!/<``0Y
XM*P`%+P!(;`&L3KH4<E!/<``P*P`&+P!(;`'`3KH48%!/2&P!TDZZ$^I83WX`N
XM<`>^0&P@(`=(P.6`+S,("&$`_R983R\`2&P!Y$ZZ%#)03U)'8-HO*P`D80#_:
XM#%A/+P!(;`'N3KH4&%!/2&P!]DZZ$Z)83TAL`?Q.NA.86$\D4F``_R!,WPS`>
XM3G5(YP$P)&P1_B`*9S`F:@`$/BH`""`'2,`O`$AL`@).NA/44$](;`(@3KH3<
XM7EA/2&P")$ZZ$U183R128,Q,WPR`3G5(YP<P)&P2""`*9P`!/"9J``0^*@`(S
XM+`<"1G__2'@``B\K``QA`/S"4$\J`$JK``AG2"`&2,`2*P`'2(%(P=*!+P$OK
XM`$AL`BI.NA-H$"L`!TB`2,#0@$C`2'@`""\`2&P"2B\K``A(;`)(2&P"1$AL2
XM`D!A`!&N3^\`*"`'2,`O`$AL`DY.NA,L4$](;`)H3KH2MEA/,!-(P#(K``)(7
XMP2\!+P!(;`)L3KH3"D_O``QP`!`K``1R`!(K``4O`2\`2&P"D$ZZ$NY/[P`,+
XM<``0*P`&+P!(;`*T3KHA-%!/$"L`!TB`2,`O`$AL`LQ.NA+&4$]*JP`(9@Q(_
XM;`+@3KH22EA/8!`@!DC`+P!(;`+H3KH2I%!/2&P"^$ZZ$BX@!4C`2'@``B\`U
XM80#\Z$_O``PO`$AL`P1.NA)^4$](;`,<3KH2"%A/)%)@`/["3-\,X$YU3E7_>
XMYDCG#S`D;!(2(`IG``+@)FH`!#XJ``A(>``#+Q-A`/MX4$\L``@K``(`#6<BN
XM2'@`!"\K`!)A`/M@*@!(>``$+RL`%F$`^U)/[P`0*`!@($AX``(O*P`280#[X
XM/BH`2'@``B\K`!9A`/LP3^\`$"@`2'@`!B\K`!IA`/L>4$]R#\)K`!`[0/_N5
XM.T'_ZE5!9A1(>``!+RL`(F$`^OY03SM`_^Q@/'`#L&W_ZF842'@`"R\K`")A'
XM`/KB4$\[0/_L8"!P!+!M_^IF%$AX``\O*P`B80#ZQE!/.T#_[&`$0FW_["`'K
XM2,`O`$AL`R).NA%V2&P#/$ZZ$0(@!DC`2'@``R\`80#[O$_O`!0O`$AL`T!.K
XMNA%24$\P*P`$2,`R*P`&2,$O`2\`2&P#6$ZZ$3A/[P`,,"L`"$C`,BL`"DC!S
XM+P$O`$AL`WQ.NA$<3^\`#'``,"L`#"\`2&P#G$ZZ'V)03W``,"L`#B\`2&P#1
XMLDZZ'U!03W``,"L`$"\`2&P#S$ZZ'SY03P@K``(`#6<6(`5(P$AX``0O`&$`9
XM^RA03RM`_^9@%"`%2,!(>``"+P!A`/L24$\K0/_F+P!A`/J^6$\O`$AL`^9.*
XMNA">4$\(*P`"``UG%B`$2,!(>``$+P!A`/KB4$\K0/_F8!0@!$C`2'@``B\`B
XM80#ZS%!/*T#_YB\`80#Z>"Z`2&P$`$ZZ$%HP+?_N2,!(>``&+P!A`/JF3^\`V
XM$"\`2&P$&DZZ$#Q03R\K`!Y(;`0R3KH>B%!/<`*P;?_J9A@P+?_L2,!(>``!Z
XM+P!A`/IP4$\K0/_F8$YP`[!M_^IF&#`M_^Q(P$AX``LO`&$`^E!03RM`_^9@2
XM+G`$L&W_ZF88,"W_[$C`2'@`#R\`80#Z,%!/*T#_YF`.+RL`(F$`^JQ83RM`Q
XM_^8O`&$`^<PN@$AL!%!.N@^N<``P*P`F+H!(;`1J3KH/GBZK`"AA`/I^3^\`#
XM#"\`2&P$@$ZZ#XA03TAL!)9.N@\26$\D4F``_1Y,WPSP3EU.=4Y5__Q(YR\P!
XM)&P2'"`*9P`!)B9J``0\*@`(*@8"17__2'@`!"\K`!!A`/AX4$\H`$JK``IG9
XM8C`K``C!ZP`&,BL`!$C!=`_2@B]``!P@`7(03KH@>B(O`!Q.NB!2+@`@!4C`*
XM(@=(P2\!+P!(;`2<3KH._"`'2,!(>``(+P!(;`3"+RL`"DAL!,!(;`2\2&P$?
XMMF$`#4I/[P`H(`9(P"\`2&P$QDZZ#LA03TAL!-Y.N@Y26$\P$TC`,BL``DC!$
XM+P$O`$AL!.).N@ZF3^\`##`K``1(P#(K``9(P2\!+P!(;`4&3KH.BD_O``PP*
XM*P`(2,`O`$AL!29.N@YV4$]*JP`*9@Q(;`4Z3KH-^EA/8!`@!4C`+P!(;`5"5
XM3KH.5%!/2&P%5$ZZ#=Y83TAL!69.N@W46$\D4F``_MA,WPST3EU.=4CG`3`DH
XM;!(F(`IG,"9J``0^*@`((`=(P"\`2&P%;$ZZ#@Y03TAL!9).N@V86$](;`66=
XM3KH-CEA/)%)@S$S?#(!.=4CG!S`D;!(P(`IG``#2)FH`!#XJ``A(>``0+RL`O
XM"&$`]P(L`$AX``8O*P`080#V]"H`(`=(P"Z`2&P%G$ZZ#:Y(;`6\3KH-.G``<
XM$!-R`!(K``$N@2\`2&P%P$ZZ#9!P`!`K``(N@$AL!>1.NAO:,"L`!$C`,BL`(
XM!DC!+H$O`$AL!?Q.N@UH(`9(P$AX`!`O`&$`][8N@$AL!B!.N@U0+JL`#&$`-
XM]_@N@$AL!CA.N@T^(`5(P$AX``8O`&$`]XQ/[P!$+P!(;`9,3KH-(E!/2&P&O
XM8DZZ#*Q83R128`#_+$S?#.!.=4CG`3`D;!(Z(`IG,"9J``0^*@`((`=(P"\`#
XM2&P&:$ZZ#.A03TAL!H).N@QR6$](;`:&3KH,:%A/)%)@S$S?#(!.=4CG`3`DI
XM;!)$(`IG,"9J``0^*@`((`=(P"\`2&P&C$ZZ#*903TAL!J1.N@PP6$](;`:HO
XM3KH,)EA/)%)@S$S?#(!.=4CG`3`D;!).(`IG,"9J``0^*@`((`=(P"\`2&P&J
XMKDZZ#&103TAL!L1.N@ON6$](;`;(3KH+Y%A/)%)@S$S?#(!.=4CG`3`D;!)8!
XM(`IG,"9J``0^*@`((`=(P"\`2&P&SDZZ#")03TAL!NI.N@NL6$](;`;N3KH+%
XMHEA/)%)@S$S?#(!.=4CG`3`D;!)B(`IG,"9J``0^*@`((`=(P"\`2&P&]$ZZB
XM"^!03TAL!Q).N@MJ6$](;`<63KH+8%A/)%)@S$S?#(!.=4CG`3`D;!)L(`IG!
XM,"9J``0^*@`((`=(P"\`2&P''$ZZ"YY03TAL!SI.N@LH6$](;`<^3KH+'EA/A
XM)%)@S$S?#(!.=4Y5_^A(YP\P)&P2=B`*9P`!^"9J``0^*@`(2'@`#2\380#T>
XMD"P`2'@``R\K`!!A`/2"*@!(>``"+RL`%&$`]'0H`$AX``8O*P`880#T9DAX^
XM``@O*P`@.T#_[F$`]%9"ER\K`$0[0/_L80#T2$AX`!(O*P!(.T#_ZF$`]#@B6
XM!TC!+H%(;`=$.T#_Z$ZZ"O!(;`=D3KH*?"`'2,!(>``-+P!A`/4V3^\`1"\`W
XM2&P':$ZZ"LPP*P`$2,`R*P`&2,$N@2\`2&P'@DZZ"K0P*P`(2,`R*P`*2,$N^
XM@2\`2&P'IDZZ"IPP*P`,2,`R*P`.2,$N@2\`2&P'QDZZ"H0@!4C`2'@``R\`V
XM80#TTBZ`2&P'Z$ZZ"FP@!$C`2'@``B\`80#TNBZ`2&P(`$ZZ"E0P+?_N2,!(,
XM>``&+P!A`/2@+H!(;`@83KH*.D_O`$1P`#`K`!PO`$AL""Y.NAB`<``0*P`>;
XM+H!(;`A$3KH*%C`M_^Q(P$AX``@O`&$`]&(N@$AL"%I.N@G\0>L`)$AX``A(%
XM>``@2&P(B"\(2&P(=DAL"'!A``><,"W_ZDC`0I<O`&$`]"PN@$AL"(Y.N@G&;
XM,"W_Z$C`2'@`$B\`80#T$BZ`2&P(IDZZ":Q/[P!$0>L`3$AX``E(>``D2&P(D
XMU"\(2&P(PDAL"+QA``=(3^\`&$AL"-A.N@D26$\D4F``_@9,WPSP3EU.=4CG#
XM`3`D;!*`(`IG,"9J``0^*@`((`=(P"\`2&P(WDZZ"4Q03TAL"/A.N@C66$](5
XM;`C\3KH(S%A/)%)@S$S?#(!.=4CG!S`D;!**(`IG``$L)FH`!#XJ``A(>``(K
XM+RL`&&$`\D`L`$AX``<O*P`@80#R,BH`(`=(P"Z`2&P)`DZZ".Q(;`DD3KH(J
XM>"Z380#SCBZ`2&P)*$ZZ"-0NJP`$80#S?"Z`2&P)/$ZZ",(P*P`(2,`N@$AL%
XM"51.N@BR,"L`"DC`+H!(;`EL3KH(HC`K``Q(P"Z`2&P)@DZZ")(P*P`.2,`NR
XM@$AL"9A.N@B","L`$$C`+H!(;`FN3KH(<C`K`!)(P"Z`2&P)Q$ZZ"&(P*P`4Z
XM2,`R*P`62,$N@2\`2&P)W$ZZ"$H@!DC`2'@`""\`80#RF$_O`$@O`$AL"?I.?
XMN@@N+JL`'$AL"A!.N@@B(`5(P$AX``<O`&$`\G!/[P`4+P!(;`HF3KH(!E!/E
XM2&P*/$ZZ!Y!83R128`#^TDS?#.!.=4CG`3`D;!*4(`IG,"9J``0^*@`((`=(*
XMP"\`2&P*0DZZ!\Q03TAL"F!.N@=66$](;`ID3KH'3%A/)%)@S$S?#(!.=4CG"
XM`3`D;!*>(`IG,"9J``0^*@`((`=(P"\`2&P*:DZZ!XI03TAL"HA.N@<46$](,
XM;`J,3KH'"EA/)%)@S$S?#(!.=4Y5_])(YP<P)&P2J"`*9P`%#B9J``0^*@`(J
XM2'@`$B\380#P?$AX``DO*P`<.T#_U&$`\&PL`$AX``TO*P`D80#P7BH`2'@`[
XM#2\K`"AA`/!02'@`#B\K`"X[0/_P80#P0$AX``PO*P`R.T#_UF$`\#!(>``,V
XM+RL`.CM`_^YA`/`@2'@``R\K`#X[0/_L80#P$$AX`!(O*P!".T#_ZF$`\`!/!
XM[P!(2'@`$B\K`$8[0/_H80#O[%!/(@<"07__2'@`"B\K`%8[0/_F.T'_Y&$`J
XM[]!(>``*+RL`6CM`_^)A`._`2'@`!2\K`%X[0/_@80#OL$AX``0O*P!D.T#_\
XMWF$`[Z!(>``(+RL`?#M`_]QA`.^02'@`$2\K`(`[0/_:80#O@$_O`#`[0/_8Q
XM2JL`2F=*$"L`3DB`2,#0@#(M_^1(P3M`_])(P"\`+P%(;`J23KH&&C`M_])(%
XMP$AX``@O`$AL"K0O*P!*2&P*LDAL"JY(;`JH80`$9D_O`"@@!TC`+P!(;`JX4
XM3KH%Y$AL"M).N@5P,"W_U$C`2'@`$B\`80#P*"Z`2&P*UDZZ!<(P*P`$2,`R:
XM*P`&2,$N@2\`2&P*[DZZ!:HP*P`(2,`R*P`*2,$N@2\`2&P+$DZZ!9(P*P`,+
XM2,`R*P`.2,$N@2\`2&P+,DZZ!7HP*P`02,`R*P`22,$N@2\`2&P+4DZZ!6)P+
XM`#`K`!1R`#(K`!8N@2\`2&P+>$ZZ!4HNJP`82&P+GDZZ$YA/[P!$(`9(P$AXQ
XM``DO`&$`[X@N@$AL"[1.N@4B+JL`(&$`[\HN@$AL"\Q.N@40(`5(P$AX``TOR
XM`&$`[UXN@$AL"^!.N@3X,"W_\$C`2'@`#2\`80#O1"Z`2&P+^DZZ!-XP*P`L[
XM2,`N@$AL#!).N@3.,"W_UDC`2'@`#B\`80#O&BZ`2&P,*$ZZ!+0P+?_N2,!(S
XM>``,+P!A`.\`+H!(;`P^3KH$FD_O`$00*P`V2(!(P!(K`#=(@4C!+P$O`$ALQ
XM#%).N@1Z$"L`.$B`2,`2*P`Y2(%(P2Z!+P!(;`QZ3KH$7C`M_^Q(P$AX``PO\
XM`&$`[JHN@$AL#*9.N@1$,"W_ZDC`2'@``R\`80#ND"Z`2&P,P$ZZ!"HP+?_HD
XM2,!(>``2+P!A`.YV+H!(;`S:3KH$$#`M_^9(P$AX`!(O`&$`[EQ/[P!`+P!(=
XM;`SN3KH#\E!/2JL`2F8,2&P-!DZZ`W983V`2,"W_Y$C`+P!(;`T.3KH#SE!/2
XM2&P-'$ZZ`U@0*P!.2(!(P!(K`$](@4C!+H$O`$AL#2Y.N@.H$"L`4$B`2,`2D
XM*P!12(%(P2Z!+P!(;`U43KH#C"ZK`%)(;`UV3KH1VC`M_^)(P$AX``HO`&$`-
XM[<PN@$AL#9!.N@-F,"W_X$C`2'@`"B\`80#MLBZ`2&P-IDZZ`TPP+?_>2,!(<
XM>``%+P!A`.V8+H!(;`V^3KH#,G``$"L`8G(`$BL`8RZ!+P!(;`W63KH#&D_OS
XM`$0P+?_<2,!(>``$+P!A`.UB+H!(;`W\3KH"_"ZK`&AA`.VD+H!(;`X43KH"9
XMZC`K`&Q(P#(K`&Y(P2Z!+P!(;`XN3KH"TC`K`'!(P#(K`')(P2Z!+P!(;`Y46
XM3KH"NBZK`'1A`.V:+H!(;`YZ3KH"J"ZK`'AA`.V(+H!(;`Z03KH"EC`M_]I(:
XMP$AX``@O`&$`[.(N@$AL#J9.N@)\,"W_V$C`2'@`$2\`80#LR$_O`#PO`$ALP
XM#KI.N@)>4$](;`[,3KH!Z%A/)%)@`/KP3-\,X$Y=3G5.5?_^2.<',"9O`!XD7
XM;P`B/B\`,#PO`#0O"DAL#M).N@(B4$]Z`+I';'(@!4C`@<9(0$I`9@I(;`[6,
XM3KH!FEA/<``@;0`0$#!0`"\`2&P.W$ZZ`?!03R`'2,!3@"(%2,&R@&<*2&P.C
XMX$ZZ`6Q83R`%2,!2@"(&2,%.NA,H2H%G#B`'2,!3@"(%2,&R@&8*2&P.Y$ZZQ
XM`4)83U)%8(HO+0`42&P.YDZZ`9Q,[0S@_^I.74YU3E7__DCG!S`F;P`>)&\`P
XM(CXO`#0\+P`X+RT`$$AL#NI.N@%N4$]Z`+I';'8@!4C`@<9(0$I`9@I(;`[N7
XM3KH`YEA/(`5(P-"`<@`@;0`4,C`(`"\!+PM.N@^24$\@!TC`4X`B!4C!LH!G,
XM"DAL#O1.N@"T6$\@!4C`4H`B!DC!3KH2<$J!9PX@!TC`4X`B!4C!LH!F"DALE
XM#OA.N@"*6$]216"&+RT`&$AL#OI.N@#D3.T,X/_J3EU.=4YU3G5(YP<P+B\`=
XM&"9O`!PL+P`@+P=.NA0<6$\D0"`*9@1P_V`V""H``P`#9Q!(>``"0J<O!TZZN
XM#S!/[P`,+P8O"R\J``1.NA"<3^\`#"H`2JP0^&<$</]@`B`%3-\,X$YU````V
XM``````!P84CG`Q`F;P`0($M*&&;\4XB1RRP(?@`>&TJ'9S)3K`]&;18@;`\^C
XM0^@``2E)#SX@!Q"`<@`2`&#<(`=R`!(`2&P/.B\!3KH(/E!/(@!@QDAL#SI(T
XM>/__3KH(+%!/(`9,WPC`3G4```````!P84Y5_]Q(YP\P)F\`1'P`0>T`#"M(L
XM__(>&TH'9P`!"G`EO@!F``#,'AMP`!`'<AA=06L``(BP>Q`(9O1.^Q`$`&1@+
XM``!0`'A@```:`'!@```4`'-@```"(&W_\B18*TC_\F!*(&W_\B@8*TC_\D7M7
XM_^QZ!TJ%:Q8@!'(/P(%!^@#`T<`4D%.*Z(13A6#F0BW_[6`:(&W_\B@8*TC_^
XM\B\$2&W_Y4ZZ"V!03T7M_^4O"DZZ_N183]R`8`#_7E*&4ZP/1FT8(&P//D/H^
XM``$I20\^(`<0@'(`$@!@`/\^<``0!TAL#SHO`$ZZ!S)03R(`8`#_*%*&4ZP/Z
XM1FT8(&P//D/H``$I20\^(`<0@'(`$@!@`/\(<``0!TAL#SHO`$ZZ!OQ03R(`O
XM8`#^\DAL#SI(>/__3KH&Z"`&3.T,\/_$3EU.=3`Q,C,T-38W.#E!0T1%1@``M
XM`$Y5_\1(YR<P)F\`7"1O`&!^`'P`>@!P`!M\`"#_^W(`*T'_]G3_*T+_\D'MW
XM_]`;0/_Q&T#__"M!_^0K0?_H*TC_S$H39T)P`!`3<AA=06LXL'L0"&;V3OL0L
XM!``C8```(``@8```%@`K8```#``M8````GX!8`Y\`6`*>@%@!AM\``'__%*+(
XM8+H0$W(PL`%F!E*+&T'_^W`JL!-F$"!20^@`!"2)*U#_]E*+8`Y(;?_V+PM.]
XMN@HX4$_7P!`3<BZP`68F4HMP*K`39A`@4D/H``0DB2M0__)2BV`.2&W_\B\+'
XM3KH*"E!/U\`0$W)LL`%F"AM\``'_\5*+8`AR:+`!9@)2BQ`;<@`2`!M`__!PZ
XM,%U`:P`"5+)[``AF]$[[``0`8V```BH`<V```>@`6&```7X`>&```7@`<&``M
XM`5X`;V```0P`=6```.(`9&````)*+?_Q9PP@4D/H``0DB2`08`H@4D/H``0D_
XMB2`0*T#_[&P*<@%$K?_L*T'_Z$JM_^AG!'`M8`I*!F<$<"M@`G`@&T#_T'``9
XM$`8B+?_H@H!P`!`%@H!G"%*M_\Q2K?_D+RW_["\M_\Q.N@AB4$\K0/_(("W_M
XM\DJ`:@9R`2M!__(@+?_((BW_\I*`2.T``O_$;RX@;?_,(DC3P6`"$MA3@&3Z,
XM<``0+?_[(BW_Q"!M_\Q@`A#`4X%D^B`M__(K0/_(T:W_Y$'M_]`K2/_,2@=GY
XM``%0&WP`(/_[8``!1DHM__%G#"!20^@`!"2)(!!@"B!20^@`!"2)(!`K0/_L_
XM8`#_8DHM__%G#"!20^@`!"2)(!!@"B!20^@`!"2)(!`K0/_L2BW__&<2(&W_.
XMS!#\`#!R`2M!_^0K2/_,+P`O+?_,3KH'O%!/*T#_R&``_R@;?``P__L@+?_R`
XM2H!J!G`(*T#_\DHM__%G#"!20^@`!"2)(!!@"B!20^@`!"2)(!`K0/_L2BW_:
XM_&<6(&W_S!#\`#`0_`!X<@(K0?_D*TC_S"\`+RW_S$ZZ!YA03RM`_\AP6+`M%
XM__!F`/Z^2&W_T$ZZ!EQ83V``_K`@4D/H``0DB2)0*TG_S&8(0?H`W"M(_\P@6
XM;?_,2AAF_%.(D>W_S"M(_^0@+?_R2H!K*K'`;R8K0/_D8"!P`2M`_^0@4D/H#
XM``0DB2`0&T#_T$(M_]%@!G``8```C"`M_^0B+?_VLH!L"'0`*T+_]F`$D:W_=
XM]DH'9S93K?_D;1AP`"!M_\P0&"\`*TC_S"!M`!!.D%A/8.)3K?_V;4AP`!`MD
XM__LO`"!M`!!.D%A/8.A3K?_V;1)P`!`M__LO`"!M`!!.D%A/8.A3K?_D;1AP?
XM`"!M_\P0&"\`*TC_S"!M`!!.D%A/8.(@"TS?#.1.74YU``!.5?_V2.<!,"9O2
XM`!XD;P`B*VT`$/_V'AI*!V<T<"6^`&8BL!)F!%**8!HO"TAM__8O"F$`^\Q/%
XM[P`,*T#_^F<$)$!@TG``$`<O`$Z36$]@QDS?#(!.74YU3E7_\$CG(3(F;P`L^
XM#*P````@%"YL``"&$!-R(+`!9PQR";`!9P9R"K`!9@12BV#H2A-G:"`L%"[E9
XM@%*L%"Y![!0VT<`D2'`BL!-F)E*+)(M*$V<*<"*P$V<$4HM@\DH39@Q(>``!N
XM3KH.&%A/8)Y"&V":)(M*$V<8$!-R(+`!9Q!R";`!9PIR"K`!9P12BV#D2A-FK
XM`F`&0AM@`/]R2JP4+F8&(&P1'&`$0>P4-BE(%#)*K!0N9GQ!^@$D0^P3]"+8O
XM(M@BV"+8,I`B;!$<(&D`)$AX`"@O*``$2&P3]$ZZ!')/[P`,0>P3]"(()#P`<
XM``/N+&P4T$ZN_^(I0!*X*4`2P'($*4$2O"E`$L@I01+$Y8"3R2QX``0K0/_PL
XM3J[^VB!M__`B0"-H``@`I'X`*T#_]&`J+&P4T$ZN_\HI0!*X3J[_Q"E`$L!!^
XM^@"F(@@D/````^U.KO_B*4`2R'X$(`<`0(`!@:P2M"`'`$"``H&L$KP`K```G
XM@`,2Q$JL#X!G!'``8`8@/```@``N`$*L#S0@!P!```$I0`\P<`$I0`]6(`<`0
XM0``"*4`/4G`"*4`/>"`'`$``@"E`#W1!^@K"*4@1$"\L%#(O+!0N3KK9:D*7\
XM3KH(0$SM3(3_W$Y=3G5C;VXZ,3`O,3`O,S(P+S@P+P`J````````````````!
XM`````````````````````````'!A+PLF;P`(2JL`%&<,""L``P`;9@1P`&`VE
XM+RP0W$ZZ!\Y83R=```0G0``02H!F"G`,*4`4S'#_8!8G;!#<`!1P\\&K`!AP[
XM`"=```PG0``()E].=0``````````````````3E7_[$CG+Q`N+P`T)F\`."@'S
XM<#'`JP`89P9P_V```G`(*P`'`!I6P$0`2(!(P"P`2JL`%&8``(0(*P`"`!MFE
XM>G``)T``#'+_OH%G``)"+PM.NO].6$]*@&<,".L`!0`;</]@``(J".L``0`;(
XM2@9G#B`K`!0B`$2!)T$`#&`(("L`%"=```Q3JP`,;18@:P`$0^@``2=)``0@5
XM!Q"`<@`2`&`2(`=R`!(`+PLO`6$`_U)03R(`(`%@``'6""L``@`;9UAP_[Z`I
XM9@9P`&```<(@!QM`__]*!F<B<@J^@68<<@(O`4AZ`;(O*P`<*T'_\$ZZ]B1/P
XM[P`,*@!@&G(!+P%(;?__+RL`'"M!__!.NO8(3^\`#"H`?O]@``#@".L``0`;,
XM2@9G4G#_OH!G3%2K``QR"KZ!9B8@:P`$0^@``2=)``00O``-(BL`#$J!:PHO+
XM"R\`80#^KE!/4JL`#"!K``1#Z``!)TD`!"`'$(`B*P`,2H%K``$<?O\@*P`$-
XMD*L`$"M`__!G<@@K``8`&F=22'@``D*G+RL`'$ZZ!.!/[P`,*T#_[$H&9SA3Y
XMK?_L;3)"IR\M_^PO*P`<3KH$P$AX``%(;?_]+RL`'$ZZ`_1/[P`82JP0^&8*4
XM$"W__7(:L`%GR"\M__`O*P`0+RL`'$ZZ]2A/[P`,*@!@`GH`</^Z@&8(".L`/
XM!0`;8`RZK?_P9P8(ZP`$`!M*!F<.(BL`%"0!1((G0@`,8!@(*P`"`!MG"'(`0
XM)T$`#&`((BL`%"=!``P@:P`0)T@`!+Z`9RY3JP`,;18@:P`$0^@``2=)``0@N
XM!Q"`<@`2`&`2(`=R`!(`+PLO`6$`_9!03R(`<##`JP`89P1P_V`,</^X@&8$+
XM<`!@`B`$3-\(]$Y=3G4-"@````!(YR`P)F\`$"1+2A)G)'``$!)![`_9"#``[
XM`0@`9PIR`!(`=""2@F`$<@`2`!2!4HI@V"`+3-\,!$YU``````````!P84Y54
XM__A(YP,P)F\`("1O`"0N+P`H($I*&&;\4XB1RBP(($M*&&;\4XB1RR`((DO3P
XMP"M)__B\AV,"+`<@!B!*8`(2V%.`9/H@;?_X0C!H`"`+3-\,P$Y=3G4B;P`(:
XM(&\`!"`(2AAF_%.($-EF_$YU```@+P`((&\`!$Y5__0B3W(*3KH&&`9!`#`2$
XMP4J`9O`@"1#AO\EF^D(0D(].74YU```@+P`((&\`!$Y5__0B3R(``D$`!P9!F
XM`#`2P>:(9O`@"1#AO\EF^D(0D(].74YU```P,3(S-#4V-S@Y86)C9&5F("\`9
XM""!O``1#[P`$,@`"00`/$OL0W.B(9O(@"2(/6($0X;*)9OI"$)"!3G4@+P`(2
XM(&\`!$Y5__0B3VP&$/P`+42`<@I.N@5T!D$`,!+!2H!F\!#AO\EF^D(0(`A.1
XM79"O``1.=2!O``0B2'(`<``O`@P0`"MG!@P0`"UF`E)($!@$```P;1(,```)B
XM;@PD`>6!TH+2@=*`8.8,$0`M9@)$@20?(`A3@"!O``@@@9")3G4O!RXO``A2Z
XMK!2\(`<@;!2X$,`I2!2X+A].=4Y5``!(YP`P)F\`$"1O`!1"K!2\*4L4N$AM9
XM`!`O"DAZ_\9.NOB*(&P4N$(0("P4O$SM#`#_^$Y=3G5.5?_H2.<!,BXO`#1*1
XMAVX&</]@``#2<`B^@&0"+@`@!U:`+@`"1__\)&T`""!M``C1Q]^L#Q1#[`\07
XM)E$K2/_P*TG_]"`+9P``D"!+("L`!-'`*TC_[")M__"WR6,0)(LE1P`$+&W_S
XM]"R*<`!@>+?)9AHL4R2.("L`!"(`TH<E00`$+&W_]"R*<`!@6K7(9`B?K`\4:
XM</]@3K7(9BQ*DV<.(%.SR&,(GZP/%'#_8#C?JP`$2I-G#K/39@H@*0`$T:L`K
XM!":1<`!@'BM+__0K;?_L_^@F4V``_VX@;?_T((I"DB5'``1P`$S?3(!.74YU%
XM``````````!P84CG!S`N+P`8)F\`'"PO`"`O!TZZ!7183R1`(`IF!'#_8!XO*
XM!B\++RH`!$ZZ`M1/[P`,*@!*K!#X9P1P_V`"(`5,WPS@3G4``"\'+B\`"%*L!
XM%,!3K`]&;18@;`\^0^@``2E)#SX@!Q"`<@`2`&`4(`=R`!(`2&P/.B\!3KKYW
XMR%!/(@`N'TYU3E4``"\+)F\`#$*L%,!(;0`,+PM(>O^L3KKVW$AL#SI(>/__6
XM3KKYF"`L%,`F;?_\3EU.=0``2.</$"XO`!@L+P`<*B\`("\'3KH$N%A/)D`@/
XM"V8$</]@'B\%+P8O*P`$3KH!G$_O``PH`$JL$/AG!'#_8`(@!$S?"/!.=0``$
XM````````<&%(YP,P+B\`%$J';@9P`&```*1P"+Z`9`(N`"`'5H`N``)'__Q%;
XM[`\0)E(@"V=`("L`!+"';3*PAV8,(%,DB)^L#Q0@"V!N("L`!)"'<@BP@646U
XM($O1QR2()$@DDR5```2?K`\4(`M@3"1+)E-@O"`'(BP/A-"!4X!.N@(&(BP/=
XMA$ZZ`=XL`%"&(`96@"P``D;__"\&3KH%-EA/)D`@"V<2+P8O"TZZ_58NAV$`A
XM_U103V`"<`!,WPS`3G4``````````'!A+P<N+P`(+P=.NO\R6$\N'TYU``!(8
XMYP,0+B\`$$?L#Q@@"V<T""L``@`;9B@(*P`!`!MG("`K``20JP`0+`!*AF<2*
XM+P8O*P`0+RL`'$ZZ[SI/[P`,)E-@R"\'3KH$*%A/3-\(P$YU``!(YS<0+B\`+
XM'"9O`"`L+P`D2JP1$&<$3KH#@$*L$/@B!R0+)@8L;!303J[_T"H`</^Z@&8.E
XM3J[_?"E`$/AP!2E`%,P@!4S?".Q.=0``2.<_`"XO`!PL+P`@*B\`)$JL$1!G*
XM!$ZZ`S1"K!#X(`53@"(')`8F`"QL%-!.KO^^*`!P_[B`9@Y.KO]\*4`0^'`60
XM*4`4S"`%#(`````"9Q8,@`````%G"$J`9A@@!F`4(`30AF`.(@=T`'8`+&P4^
XMT$ZN_[Y,WP#\3G4``$CG-Q`N+P`<)F\`("PO`"1*K!$09P1.N@*X0JP0^"('Y
XM)`LF!BQL%-!.KO_6*@!P_[J`9@Y.KO]\*4`0^'`%*4`4S"`%3-\([$YU```O+
XM!RXO``A*K!$09P1.N@)V(@<L;!303J[_W'``+A].=4CG,``D`"8!2$)(0\3!N
XMQL#`P=1#2$)"0M""3-\`#$YU2H!J```>1(!*@6H```Q$@6$``"!$@4YU80``^
XM&$2`1(%.=4J!:@``#$2!80``!D2`3G4O`DA!-`%F```B2$!(04A"-`!G```&+
XMA,$P`DA`-`"$P3`"2$(R`B0?3G4O`W80#$$`@&0```;AF5%##$$(`&0```;I3
XMF5E##$$@`&0```;EF55#2D%K```&XYE30S0`YJA(0D)"YJI(0X#!-@`P`C0#[
XM2$'$P9""9```"%-#T(%D_G(`,@-(0^>X2$#!028?)!].=4Y5_YY(YS,R?@`@M
XM;!$H'BC__W!/OH!O`BX`(`=#[?^O8`(2V%.`9/I"-7BOD\DL>``$3J[^VB9`C
XM2JL`K&=,("L`K.6`)$`L*@`X2H9F!"PK`*!*AF<T(@9!^@"R)`AV"RQL%-!.*
XMKO_0($=2AR`(&[P`"@BO(@9![?^O)`@F!RQL%-!.KO_0</]@3DJL%,1F$D/Z!
XM`(9P`"QX``1.KOW8*4`4Q$'M_Z\I2`^H2'@`/$AX`/IP`"\`+P!(;`_$2&P/"
XML$AL#YQ"ITZZ`0A/[P`@4X!G!'#_8`)P`$S?3,Q.74YU*BH@57-E<B!!8F]R.
XM="!297%U97-T960@*BH``$-/3E1)3E5%``!!0D]25``J*BH@0G)E86LZ(`!I=
XM;G1U:71I;VXN;&EB<F%R>0```````````````````"\'+B\`"'``*4`0^$J'J
XM:R*^K`\`;!P@!^>`0>P2M$JP"`!G#B`'YX!![!*TT<`@"&`(<`DI0!3,<``N(
XM'TYU``````````!P84CG`0)P`"(\```P`"QX``1.KO[.+@`"AP``,`!*AV8$U
XM<`!@($JL$1!G&"!L$1!.D$J`9@1P`&`,2'@`%$ZZ`$983R`'3-]`@$YU8;1.B
XM=0``2.<P,BQL%,0@;P`8(F\`'"1O`"`F;P`D("\`*"(O`"PD+P`P)B\`-$ZNR
XM_J1,WTP,3G4``$CG!P`N+P`0("P/`%.`+`!*1FLP(`9(P.>`0>P2M"HP"`!*$
XM!6<:"`4``F84(`9(P.>`0>P2M"\P"`1.NOR\6$]31F#,+P=.NLO^6$],WP#@G
XM3G4``$CG`#(F;!34(`MG%"13(DL@*P`(+'@`!$ZN_RXF2F#HD<@I2!38*4@4_
XMU$S?3`!.=4CG`3(N+P`4<`S>@"`'<@`L>``$3J[_.B9`(`MF!'``8#HG1P`(L
XM1>P4U"!J``0G2``$D<@FB$J29@(DBTJJ``1G!B)J``0BBR5+``1*K`\$9@0I&
XM2P\$0>L`#"`(3-],@$YU``````````````````````/L`````@````(````,W
XM````!@````````/R```#Z0````````/R```#Z@``!#AG<F%P:&EC<RYL:6)RM
XM87)Y``!I;G1U:71I;VXN;&EB<F%R>0!.54Q,```H05!44BD``&)I=&UA<```2
XM8F]O;&EN9F\``&)O<F1E<@``9V%D9V5T``!I;6%G90!I;G1U:6UE<W-A9V4`3
XM`&EN='5I=&5X=`!K97EM87```&QA>65R`&UE;G4``&US9W!O<G0`<')O<&ENK
XM9F\``')A<W1P;W)T``!R97%U97-T97(`<V-R965N``!S=')I;F=I;F9O``!TK
XM97AT871T<@``=&5X=&9O;G0``'=I;F1O=P``````,@```#H```!$````3```<
XM`%0```!:````:````'(```!Z````@````(8```".````F````*(```"L````\
XMM````,````#*````U$Y53$P``"8E<R5D`$Y53$P``"(E<R(``$Y53$P``#!X.
XM)5@``'-T<G5C="!":71-87`@8FET;6%P)60@/0H`>PH``"`@)60L"2\J($)Y#
XM=&5S4&5R4F]W("HO"@``("`E9"P)+RH@4F]W<R`J+PH`("`P>"58+`DO*B!&L
XM;&%G<R`J+PH``"`@)60L"2\J($1E<'1H("HO"@``("`E9"P)+RH@4&%D("HO>
XM"@``("!["2\J(%!L86YE<R`J+PH`("`@("5S+`H``"`@("`E<PH`("!]"@``D
XM?3L*"@``<W1R=6-T($)O;VQ);F9O(&)O;VQI;F9O)60@/0H`>PH``'T["@H`B
XM`%=/4D0@>'EP86ER)61;)61=(#T*```E9```("```'L`?3L``'-T<G5C="!"M
XM;W)D97(@8F]R9&5R)60@/0H`>PH``"`@)60L("5D+`DO*B!,969T161G92P@'
XM5&]P161G92`J+PH``"`@)60L("5D+`DO*B!&<F]N=%!E;BP@0F%C:U!E;B`J-
XM+PH``"`@,'@E6"P)+RH@1')A=TUO9&4@*B\*`"`@)60L"2\J($-O=6YT("HO;
XM"@``("!.54Q,```@("9X>7!A:7(E9%LP70``+`DO*B!862`J+PH`("`E<PDOK
XM*B!.97AT0F]R9&5R("HO"@``?3L*"@``<W1R=6-T($=A9&=E="!G861G970E8
XM9"`]"@!["@``("`E<RP)+RH@3F5X=$=A9&=E="`J+PH`("`E9"P@)60L"2\JP
XM($QE9G1%9&=E+"!4;W!%9&=E("HO"@``("`E9"P@)60L"2\J(%=I9'1H+"!(W
XM96EG:'0@*B\*```@(#!X)5@L"2\J($9L86=S("HO"@``("`P>"58+`DO*B!!K
XM8W1I=F%T:6]N("HO"@`@(#!X)5@L"2\J($=A9&=E=%1Y<&4@*B\*`"`@)7,L<
XM"2\J($=A9&=E=%)E;F1E<B`J+PH`("`E<RP)+RH@4V5L96-T4F5N9&5R("HOP
XM"@`@("5S+`DO*B!'861G971497AT("HO"@`@(#!X)5@L"2\J($UU='5A;$5X,
XM8VQU9&4@*B\*```@("5S+`DO*B!3<&5C:6%L26YF;R`J+PH``"`@)60L"2\J]
XM($=A9&=E=$E$("HO"@`@("5S"2\J(%5S97)$871A("HO"@``?3L*"@``55=/Y
XM4D0@:6UA9V5D871A)61;)61=(#T*```P>"58```@(```>P!].P``<W1R=6-T!
XM($EM86=E(&EM86=E)60@/0H`>PH``"`@)60L("5D+`DO*B!,969T161G92P@S
XM5&]P161G92`J+PH``"`@)60L("5D+`DO*B!7:61T:"P@2&5I9VAT("HO"@``?
XM("`E9"P)+RH@1&5P=&@@*B\*```@($Y53$P``"`@)FEM86=E9&%T825D6S!=>
XM``DO*B!);6%G941A=&$@*B\*`'T["@H``'-T<G5C="!);G1U:4UE<W-A9V4@A
XM:6YT=6EM97-S86=E)60@/0H`>PH``'T["@H``'-T<G5C="!);G1U:51E>'0@B
XM:6YT=6ET97AT)60@/0H`>PH``"`@)60L("5D+`DO*B!&<F]N=%!E;BP@0F%CM
XM:U!E;B`J+PH``"`@,'@E6"P)+RH@1')A=TUO9&4@*B\*`"`@)60L("5D+`DO\
XM*B!,969T161G92P@5&]P161G92`J+PH``"`@)7,L"2\J($E497AT1F]N="`J6
XM+PH``"`@)7,L"2\J($E497AT("HO"@``("`E<PDO*B!.97AT5&5X="`J+PH`1
XM`'T["@H``'-T<G5C="!+97E-87`@:V5Y;6%P)60@/0H`>PH``'T["@H``'-TG
XM<G5C="!,87EE<B!L87EE<B5D(#T*`'L*``!].PH*``!S=')U8W0@365N=2!M`
XM96YU)60@/0H`>PH``'T["@H``'-T<G5C="!-<V=0;W)T(&US9W!O<G0E9"`]L
XM"@!["@``?3L*"@``<W1R=6-T(%!R;W!);F9O('!R;W!I;F9O)60@/0H`>PH`/
XM`'T["@H``'-T<G5C="!287-T4&]R="!R87-T<&]R="5D(#T*`'L*``!].PH*P
XM``!S=')U8W0@4F5Q=65S=&5R(')E<75E<W1E<B5D(#T*`'L*```@("5S+`DOV
XM*B!/;&1E<E)E<75E<W0@*B\*`"`@)60L("5D+`DO*B!,969T161G92P@5&]PW
XM161G92`J+PH``"`@)60L("5D+`DO*B!7:61T:"P@2&5I9VAT("HO"@``("`E1
XM9"P@)60L"2\J(%)E;$QE9G0L(%)E;%1O<"`J+PH``"`@)7,L"2\J(%)E<4=A0
XM9&=E="`J+PH``"`@)7,L"2\J(%)E<4)O<F1E<B`J+PH``"`@)7,L"2\J(%)ES
XM<51E>'0@*B\*```@(#!X)5@L"2\J($9L86=S("HO"@``("`E9"P)+RH@0F%C9
XM:T9I;&P@*B\*`"`@)7,L"2\J(%)E<4QA>65R("HO"@`@("`@```@('L)+RH@@
XM4F5Q4&%D,2`J+P`@('TL```@("5S+`DO*B!);6%G94)-87`@*B\*```@("5ST
XM+`DO*B!25VEN9&]W("HO"@``("`@(```("!["2\J(%)E<5!A9#(@*B\`("!]=
XM`'T["@H``'-T<G5C="!38W)E96X@<V-R965N)60@/0H`>PH``'T["@H``'-TY
XM<G5C="!3=')I;F=);F9O('-T<FEN9VEN9F\E9"`]"@!["@``("`E<RP)+RH@_
XM0G5F9F5R("HO"@`@("5S+`DO*B!5;F1O0G5F9F5R("HO"@`@("5D+`DO*B!"/
XM=69F97)0;W,@*B\*```@("5D+`DO*B!-87A#:&%R<R`J+PH`("`E9"P)+RH@5
XM1&ES<%!O<R`J+PH``"`@)60L"2\J(%5N9&]0;W,@*B\*```@("5D+`DO*B!.,
XM=6U#:&%R<R`J+PH`("`E9"P)+RH@1&ES<$-O=6YT("HO"@``("`E9"P@)60LS
XM"2\J($-,969T+"!#5&]P("HO"@``("`E<RP)+RH@3&%Y97)0='(@*B\*`"`@1
XM)60L"2\J($QO;F=);G0@*B\*```@("5S"2\J($%L=$ME>4UA<"`J+PH`?3L*\
XM"@``<W1R=6-T(%1E>'1!='1R('1E>'1A='1R)60@/0H`>PH``'T["@H``'-T7
XM<G5C="!497AT1F]N="!T97AT9F]N="5D(#T*`'L*``!].PH*``!73U)$('!OR
XM:6YT97(E9%LE9%T@/0H`,'@E6```("```'L`?3L``'-T<G5C="!7:6YD;W<@(
XM=VEN9&]W)60@/0H`>PH``"`@)7,L"2\J($YE>'17:6YD;W<@*B\*`"`@)60LB
XM("5D+`DO*B!,969T161G92P@5&]P161G92`J+PH``"`@)60L("5D+`DO*B!7Q
XM:61T:"P@2&5I9VAT("HO"@``("`E9"P@)60L"2\J($UO=7-E62P@36]U<V58L
XM("HO"@`@("5D+"`E9"P)+RH@36EN5VED=&@L($UI;DAE:6=H="`J+PH``"`@_
XM)60L("5D+`DO*B!-87A7:61T:"P@36%X2&5I9VAT("HO"@``("`P>"58+`DO)
XM*B!&;&%G<R`J+PH``"`@)7,L"2\J($UE;G53=')I<"`J+PH``"`@)7,L"2\J0
XM(%1I=&QE("HO"@``("`E<RP)+RH@1FER<W1297%U97-T("HO"@`@("5S+`DO;
XM*B!$35)E<75E<W0@*B\*```@("5D+`DO*B!297%#;W5N="`J+PH`("`E<RP)_
XM+RH@5U-C<F5E;B`J+PH``"`@)7,L"2\J(%)0;W)T("HO"@``("`E9"P@)60L]
XM"2\J($)O<F1E<DQE9G0L($)O<F1E<E1O<"`J+PH``"`@)60L("5D+`DO*B!"9
XM;W)D97)2:6=H="P@0F]R9&5R0F]T=&]M("HO"@``("`E<RP)+RH@0F]R9&5R@
XM4E!O<G0@*B\*```@("5S+`DO*B!&:7)S=$=A9&=E="`J+PH``"`@)7,L"2\J]
XM(%!A<F5N="`J+PH`("`E<RP)+RH@1&5S8V5N9&%N="`J+PH`("!.54Q,```@J
XM("9P;VEN=&5R)60``"P)+RH@4&]I;G1E<B`J+PH``"`@)60L("5D+`DO*B!0^
XM=')(96EG:'0L(%!T<E=I9'1H("HO"@``("`E9"P@)60L"2\J(%A/9F9S970L[
XM(%E/9F9S970@*B\*`"`@,'@E6"P)+RH@241#35!&;&%G<R`J+PH`("`E<RP)@
XM+RH@57-E<E!O<G0@*B\*`"`@)7,L"2\J(%=I;F1O=U!O<G0@*B\*`"`@)7,LJ
XM"2\J($UE<W-A9V5+97D@*B\*`"`@)60L("5D+`DO*B!$971A:6Q096XL($)LO
XM;V-K4&5N("HO"@``("`E<RP)+RH@0VAE8VM-87)K("HO"@``("`E<RP)+RH@;
XM4V-R965N5&ET;&4@*B\*```@("5D+"`E9"P)+RH@1UI:36]U<V58+"!'6EI-A
XM;W5S95D@*B\*`"`@)60L("5D+`DO*B!'6EI7:61T:"P@1UI:2&5I9VAT("HOX
XM"@``("`E<RP)+RH@17AT1&%T82`J+PH``"`@)7,L"2\J(%5S97)$871A("HO6
XM"@`@("5S+`DO*B!73&%Y97(@*B\*`"`@)7,)+RH@249O;G0@*B\*`'T["@H`P
XM`"5S"@`@("`@```E9```+"````H`)7,*`"5S"@`@("`@```L(```"@`E<PH`]
XM```````H``````````````````````````````\Z````````````````````Q
XM```````````````````````/7```````````````````````````````````K
XM````````````````````````````````````````````````````````@````
XM``0`__\````.``X````````SU`````#__P````0`!``````````````/B/__`
XM````!``$````````,_``````__\````$``0````````S^@``````("`@("`@>
XM("`@*"@H*"@@("`@("`@("`@("`@("`@("!($!`0$!`0$!`0$!`0$!`0A(2$L
XMA(2$A(2$A!`0$!`0$!"!@8&!@8$!`0$!`0$!`0$!`0$!`0$!`0$!`1`0$!`0V
XM$(*"@H*"@@("`@("`@("`@("`@("`@("`@("$!`0$"`@("`@("`@("`H*"@HD
XM*"`@("`@("`@("`@("`@("`@($@0$!`0$!`0$!`0$!`0$!"$A(2$A(2$A(2$(
XM$!`0$!`0$(&!@8&!@0$!`0$!`0$!`0$!`0$!`0$!`0$!$!`0$!`0@H*"@H*"V
XM`@("`@("`@("`@("`@("`@("`@(0$!`0(````````@````/L`````P``````\
XM``_0```/O```#Y0````6`````@``#ZP```\Z```/&````20```$@```!'```S
XM`1@```$4```!$````0P```$(```!!````0````#\````^````/0```#P````S
X9[````.@```#D````X````-P````````#\@``I
X``
Xend
Xsize 18340
SHAR_EOF
echo "End of archive 1 (of 1)"
# if you want to concatenate archives, remove anything after this line
exit