home *** CD-ROM | disk | FTP | other *** search
- Path: sparky!uunet!elroy.jpl.nasa.gov!ames!agate!dog.ee.lbl.gov!network.ucsd.edu!mvb.saic.com!vmsnet-sources
- From: goathunter@wkuvx1.bitnet
- Newsgroups: vmsnet.sources
- Subject: Zip v1.9 & UnZip v5.0, part 15/22
- Message-ID: <8009686@MVB.SAIC.COM>
- Date: Tue, 01 Sep 1992 22:53:17 GMT
- Organization: Western Kentucky University, Bowling Green, KY
- Lines: 1212
- Approved: Mark.Berryman@Mvb.Saic.Com
-
- Submitted-by: goathunter@wkuvx1.bitnet
- Posting-number: Volume 3, Issue 137
- Archive-name: zip_unzip/part15
-
- -+-+-+-+-+-+-+-+ START OF PART 15 -+-+-+-+-+-+-+-+
- X workspace`5B4`5D = 'R';
- X if (xattr & S_IWGRP) `7B
- X workspace`5B5`5D = 'W';
- X workspace`5B7`5D = 'D';
- X `7D
- X if (xattr & S_IXGRP)
- X workspace`5B6`5D = 'E';
- X if (xattr & S_IROTH)
- X workspace`5B8`5D = 'R';
- X if (xattr & S_IWOTH) `7B
- X workspace`5B9`5D = 'W';
- X workspace`5B11`5D = 'D';
- X `7D
- X if (xattr & S_IXOTH)
- X workspace`5B10`5D = 'E';
- X
- X *p++ = '(';
- X for (k = j = 0; j < 3; ++j) `7B /* loop over groups of permissi
- Vons */
- X for (i = 0; i < 4; ++i, ++k) /* loop over perms within a grou
- Vp */
- X if (workspace`5Bk`5D)
- X *p++ = workspace`5Bk`5D;
- X *p++ = ','; /* group separator */
- X if (j == 0)
- X while ((*p++ = *q++) != ','); /* system, owner perms are sam
- Ve */
- X `7D
- X *p-- = 0;
- X *p = ')'; /* overwrite last comma */
- X printf(" VMS file attributes (%06o octal): %s\n",
- X xattr, attribs);
- X
- X `7D else if ((hostnum != DOS_OS2_FAT_) && (hostnum != OS2_HPFS_)) `7B
- X /* assume Unix-like */
- X switch (xattr & S_IFMT) `7B
- X case S_IFREG: attribs`5B0`5D = '-'; break;
- X case S_IFLNK: attribs`5B0`5D = 'l'; break;
- X case S_IFBLK: attribs`5B0`5D = 'b'; break;
- X case S_IFCHR: attribs`5B0`5D = 'c'; break;
- X case S_IFIFO: attribs`5B0`5D = 'p'; break;
- X case S_IFSOCK: attribs`5B0`5D = 's'; break;
- X case S_IFDIR: attribs`5B0`5D = 'd'; break;
- X default: attribs`5B0`5D = '?'; break;
- X `7D
- X if (xattr & S_IRUSR) /* no read-permission: user */
- X attribs`5B1`5D = 'r';
- X else
- X attribs`5B1`5D = '-';
- X if (xattr & S_IWUSR) /* no write-permission: user */
- X attribs`5B2`5D = 'w';
- X else
- X attribs`5B2`5D = '-';
- X if (xattr & S_IXUSR) /* no execute-permission: user */
- X if (xattr & S_ISUID)
- X attribs`5B3`5D = 's';
- X else
- X attribs`5B3`5D = 'x';
- X else
- X if (xattr & S_ISUID)
- X attribs`5B3`5D = 'S'; /* undefined state */
- X else
- X attribs`5B3`5D = '-';
- X if (xattr & S_IRGRP) /* no read-permission: group */
- X attribs`5B4`5D = 'r';
- X else
- X attribs`5B4`5D = '-';
- X if (xattr & S_IWGRP) /* no write-permission: group */
- X attribs`5B5`5D = 'w';
- X else
- X attribs`5B5`5D = '-';
- X if (xattr & S_IXGRP) /* no execute-permission: group */
- X if (xattr & S_ISGID)
- X attribs`5B6`5D = 's';
- X else
- X attribs`5B6`5D = 'x';
- X else
- X if (xattr & S_ISGID) /* or could use S_ENFMT (same) */
- X attribs`5B6`5D = 'l';
- X else
- X attribs`5B6`5D = '-';
- X if (xattr & S_IROTH) /* no read-permission: other */
- X attribs`5B7`5D = 'r';
- X else
- X attribs`5B7`5D = '-';
- X if (xattr & S_IWOTH) /* no write-permission: other */
- X attribs`5B8`5D = 'w';
- X else
- X attribs`5B8`5D = '-';
- X if (xattr & S_IXOTH) /* no execute-permission: other */
- X if (xattr & S_ISVTX) /* "sticky bit" */
- X attribs`5B9`5D = 't';
- X else
- X attribs`5B9`5D = 'x';
- X else
- X if (xattr & S_ISVTX)
- X attribs`5B9`5D = 'T'; /* undefined state */
- X else
- X attribs`5B9`5D = '-';
- X attribs`5B10`5D = 0;
- X printf(" Unix file attributes (%06o octal): %s\n",
- X xattr, attribs);
- X
- X `7D /* endif (hostnum: external attributes format) */
- X
- X if ((xattr=(UWORD)(crec.external_file_attributes & 0xFF)) == 0)
- X printf(" MS-DOS file attributes (%02X hex): none\n
- V",
- X xattr);
- X else if (xattr == 1)
- X printf(
- X " MS-DOS file attributes (%02X hex): read-only\n
- V",
- X xattr);
- X else
- X printf(
- X " MS-DOS file attributes (%02X hex): %s%s%s%s%s%s
- V\n",
- X xattr, (xattr&1)?"rdo ":"", (xattr&2)?"hid ":"", (xattr&4)?"sys ":
- V"",
- X (xattr&8)?"lab ":"", (xattr&16)?"dir ":"", (xattr&32)?"arc":"");
- X printf(
- X " offset of local header from start of archive: %lu (%.8lXh) bytes
- V\n",
- X crec.relative_offset_local_header, crec.relative_offset_local_header);
- X
- X/*--------------------------------------------------------------------------
- V-
- X Skip the extra field, if any, and print the file comment, if any (the
- X filename has already been printed, above). That finishes up this file
- X entry...
- X --------------------------------------------------------------------------
- V-*/
- X
- X if (crec.extra_field_length > 0) `7B
- X/* #ifdef OS2 */
- X#if TRUE
- X ULONG ea_size;
- X if ((error = do_string(crec.extra_field_length, EXTRA_FIELD)) != 0)
- V `7B
- X error_in_archive = error;
- X if (error > 1) /* fatal: can't continue */
- X return (error);
- X `7D
- X if ((ea_size = SizeOfEAs(extra_field)) != 0)
- X printf("\n\
- X This file has %lu bytes of OS/2 EA's in the local extra field.\n\
- X (May not match OS/2 \"dir\" amount due to storage method.)\n\n",
- X ea_size);
- X else
- X printf("\n There is an unknown extra field (skipping).\n");
- X#else
- X printf("\n There is an extra field (skipping).\n");
- X SKIP_(crec.extra_field_length)
- X#endif
- X `7D else
- X printf("\n");
- X
- X if (!crec.file_comment_length)
- X printf(" There is no file comment.\n");
- X else `7B
- X printf("\
- X------------------------- file comment begins ----------------------------\n
- V");
- X if ((error = do_string(crec.file_comment_length, DISPLAY)) != 0) `7B
- X error_in_archive = error; /* might be warning */
- X if (error > 1) /* fatal */
- X return error;
- X `7D
- X printf("\n\
- X-------------------------- file comment ends -----------------------------\n
- V");
- X `7D
- X
- X return error_in_archive;
- X
- X`7D /* end function long_info() */
- X
- X
- X
- X
- X
- X/**************************/
- X/* Function SizeOfEAs() */
- X/**************************/
- X
- XULONG SizeOfEAs(extra_field) /* Author: Kai Uwe Rommel */
- X void *extra_field;
- X`7B
- X EAHEADER *pEAblock = (PEAHEADER) extra_field;
- X
- X if ( extra_field != NULL && pEAblock -> nID == EAID )
- X return pEAblock -> lSize;
- X
- X return 0L;
- X`7D
- X
- X
- X
- X
- X
- X/***************************/
- X/* Function short_info() */
- X/***************************/
- X
- Xint short_info() /* return PK-type error code */
- X`7B
- X int k, error, error_in_archive=0;
- X UWORD hostver, xattr;
- X char workspace`5B12`5D, attribs`5B16`5D;
- X static char impl`5B5`5D="i#:#", defl`5B5`5D="def#", unkn`5B8`5D;
- X static char dtype`5B5`5D="NXF?"; /* normal, maximum, fastest, undefin
- Ved */
- X static char *os`5BNUM_HOSTS+1`5D = `7B"dos", "ami", "vms", "unx", "cms
- V",
- X "atr", "os2", "mac", "zzz", "cpm", "???" `7D;
- X static char *method`5BNUM_METHODS+1`5D = `7B"stor", "shrk", "re:1", "r
- Ve:2",
- X "re:3", "re:4", impl, "tokn", defl, unkn`7D;
- X
- X
- X/*--------------------------------------------------------------------------
- V-
- X Print out various interesting things about the compressed file.
- X --------------------------------------------------------------------------
- V-*/
- X
- X methnum = MIN(crec.compression_method, NUM_METHODS);
- X hostnum = MIN(crec.version_made_by`5B1`5D, NUM_HOSTS);
- X hostver = crec.version_made_by`5B0`5D;
- X/*
- X extnum = MIN(crec.version_needed_to_extract`5B1`5D, NUM_HOSTS);
- X extver = crec.version_needed_to_extract`5B0`5D;
- X */
- X
- X if (methnum == IMPLODED) `7B
- X impl`5B1`5D = (crec.general_purpose_bit_flag & 2)? '8' : '4';
- X impl`5B3`5D = (crec.general_purpose_bit_flag & 4)? '3' : '2';
- X `7D else if (methnum == DEFLATED) `7B
- X UWORD dnum=(crec.general_purpose_bit_flag>>1) & 3;
- X defl`5B3`5D = dtype`5Bdnum`5D;
- X `7D else if (methnum == NUM_METHODS) `7B /* unknown */
- X sprintf(unkn, "u%03d", crec.compression_method);
- X `7D
- X
- X for (k = 0; k < 15; ++k)
- X attribs`5Bk`5D = ' ';
- X attribs`5B15`5D = 0;
- X
- X xattr = (UWORD) ((crec.external_file_attributes >> 16) & 0xFFFF);
- X switch (hostnum) `7B
- X case VMS_:
- X `7B char *p=attribs;
- X int i, j;
- X
- X for (k = 0; k < 12; ++k)
- X workspace`5Bk`5D = 0;
- X if (xattr & S_IRUSR)
- X workspace`5B0`5D = 'R';
- X if (xattr & S_IWUSR) `7B
- X workspace`5B1`5D = 'W';
- X workspace`5B3`5D = 'D';
- X `7D
- X if (xattr & S_IXUSR)
- X workspace`5B2`5D = 'E';
- X if (xattr & S_IRGRP)
- X workspace`5B4`5D = 'R';
- X if (xattr & S_IWGRP) `7B
- X workspace`5B5`5D = 'W';
- X workspace`5B7`5D = 'D';
- X `7D
- X if (xattr & S_IXGRP)
- X workspace`5B6`5D = 'E';
- X if (xattr & S_IROTH)
- X workspace`5B8`5D = 'R';
- X if (xattr & S_IWOTH) `7B
- X workspace`5B9`5D = 'W';
- X workspace`5B11`5D = 'D';
- X `7D
- X if (xattr & S_IXOTH)
- X workspace`5B10`5D = 'E';
- X
- X for (k = j = 0; j < 3; ++j) `7B /* groups of permissions
- V */
- X for (i = 0; i < 4; ++i, ++k) /* perms within a group */
- X if (workspace`5Bk`5D)
- X *p++ = workspace`5Bk`5D;
- X *p++ = ','; /* group separator */
- X `7D
- X *--p = ' '; /* overwrite last comma */
- X if ((p - attribs) < 12)
- X sprintf(&attribs`5B12`5D, "%d.%d", hostver/10, hostver%10)
- V;
- X `7D
- X break;
- X
- X case DOS_OS2_FAT_:
- X case OS2_HPFS_:
- X xattr = (UWORD) (crec.external_file_attributes & 0xFF);
- X sprintf(attribs, "%s,%s,%s,%s", (xattr&32)?"arc":"",
- X (xattr&2)?"hid":"", (xattr&1)?"rdo":"rw", (xattr&4)?"sys":"");
- X if ((k = strlen(attribs)) < 15)
- X attribs`5Bk`5D = ' '; /* overwrite '\0' */
- X if (k < 12)
- X sprintf(&attribs`5B12`5D, "%d.%d", hostver/10, hostver%10);
- X break;
- X
- X default: /* assume Unix-like */
- X switch (xattr & S_IFMT) `7B
- X case S_IFREG: attribs`5B0`5D = '-'; break;
- X case S_IFLNK: attribs`5B0`5D = 'l'; break;
- X case S_IFBLK: attribs`5B0`5D = 'b'; break;
- X case S_IFCHR: attribs`5B0`5D = 'c'; break;
- X case S_IFIFO: attribs`5B0`5D = 'p'; break;
- X case S_IFSOCK: attribs`5B0`5D = 's'; break;
- X case S_IFDIR: attribs`5B0`5D = 'd'; break;
- X default: attribs`5B0`5D = '?'; break;
- X `7D
- X if (xattr & S_IRUSR) /* no read-permission: user */
- X attribs`5B1`5D = 'r';
- X else
- X attribs`5B1`5D = '-';
- X if (xattr & S_IWUSR) /* no write-permission: user */
- X attribs`5B2`5D = 'w';
- X else
- X attribs`5B2`5D = '-';
- X if (xattr & S_IXUSR) /* no execute-permission: user */
- X if (xattr & S_ISUID)
- X attribs`5B3`5D = 's';
- X else
- X attribs`5B3`5D = 'x';
- X else
- X if (xattr & S_ISUID)
- X attribs`5B3`5D = 'S'; /* undefined state */
- X else
- X attribs`5B3`5D = '-';
- X if (xattr & S_IRGRP) /* no read-permission: group */
- X attribs`5B4`5D = 'r';
- X else
- X attribs`5B4`5D = '-';
- X if (xattr & S_IWGRP) /* no write-permission: group */
- X attribs`5B5`5D = 'w';
- X else
- X attribs`5B5`5D = '-';
- X if (xattr & S_IXGRP) /* no execute-permission: group */
- X if (xattr & S_ISGID)
- X attribs`5B6`5D = 's';
- X else
- X attribs`5B6`5D = 'x';
- X else
- X if (xattr & S_ISGID) /* or could use S_ENFMT (same) */
- X attribs`5B6`5D = 'l';
- X else
- X attribs`5B6`5D = '-';
- X if (xattr & S_IROTH) /* no read-permission: other */
- X attribs`5B7`5D = 'r';
- X else
- X attribs`5B7`5D = '-';
- X if (xattr & S_IWOTH) /* no write-permission: other */
- X attribs`5B8`5D = 'w';
- X else
- X attribs`5B8`5D = '-';
- X if (xattr & S_IXOTH) /* no execute-permission: other */
- X if (xattr & S_ISVTX) /* "sticky bit" */
- X attribs`5B9`5D = 't';
- X else
- X attribs`5B9`5D = 'x';
- X else
- X if (xattr & S_ISVTX)
- X attribs`5B9`5D = 'T'; /* undefined state */
- X else
- X attribs`5B9`5D = '-';
- X sprintf(&attribs`5B12`5D, "%d.%d", hostver/10, hostver%10);
- X break;
- X
- X `7D /* end switch (hostnum: external attributes format) */
- X
- X printf("%s %s %7lu %c%c", attribs, os`5Bhostnum`5D, crec.uncompressed_si
- Vze,
- X (crec.general_purpose_bit_flag & 1)?
- X ((crec.internal_file_attributes & 1)? 'T' : 'B') : /* encrypted */
- X ((crec.internal_file_attributes & 1)? 't' : 'b'), /* plaintext */
- X (crec.general_purpose_bit_flag & 8)? (crec.extra_field_length? 'X' : '
- Vl')
- X : (crec.extra_field_length? 'x' : '-
- V'));
- X if (lflag == 4) `7B
- X longint c = (longint) crec.compressed_size;
- X longint uc = (longint) crec.uncompressed_size;
- X
- X if (crec.general_purpose_bit_flag & 1)
- X c -= 12; /* if encrypted, don't count encryption header */
- X /* risk signed overflow if blindly multiply: */
- X printf("%3d%%", (uc==0)? 0 : ((uc>2000000L)?
- X ((int)((uc-c)/(uc/1000L))+5)/10 : ((int)((1000L*(uc-c))/uc)+5)/10)
- V );
- X `7D else if (lflag == 5)
- X printf(" %7lu", crec.compressed_size);
- X
- X printf(" %s %s %s\n", method`5Bmethnum`5D,
- X zipinfo_time(&crec.last_mod_file_date, &crec.last_mod_file_time),
- X filename);
- X
- X/*--------------------------------------------------------------------------
- V-
- X Skip the extra field and/or the file comment, if any (the filename has
- X already been printed, above). That finishes up this file entry...
- X --------------------------------------------------------------------------
- V-*/
- X
- X SKIP_(crec.extra_field_length)
- X SKIP_(crec.file_comment_length)
- X
- X return error_in_archive;
- X
- X`7D /* end function short_info() */
- X
- X
- X
- X
- X
- X/*****************************/
- X/* Function zipinfo_time() */
- X/*****************************/
- X
- Xchar *zipinfo_time(datez, timez)
- X UWORD *datez, *timez;
- X`7B
- X UWORD yr, mo, dy, hh, mm, ss;
- X static char d_t_str`5B21`5D;
- X static char *month`5B12`5D = `7B"Jan", "Feb", "Mar", "Apr", "May", "Ju
- Vn",
- X "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"`7D;
- X
- X
- X
- X/*--------------------------------------------------------------------------
- V-
- X Convert the file-modification date and time info to a string of the form
- V`20
- X "23 Feb 1990 17:15:00" or "23-Feb-91 17:15," depending on value of lflag
- V.
- X --------------------------------------------------------------------------
- V-*/
- X
- X yr = ((*datez >> 9) & 0x7f) + 80; /* dissect date */
- X mo = ((*datez >> 5) & 0x0f) - 1;
- X dy = *datez & 0x1f;
- X
- X hh = (*timez >> 11) & 0x1f; /* dissect time */
- X mm = (*timez >> 5) & 0x3f;
- X ss = (*timez & 0x1f) * 2;
- X
- X if ((lflag >= 3) && (lflag <= 5))
- X sprintf(d_t_str, "%2u-%s-%u %02u:%02u", dy, month`5Bmo`5D, yr, hh, m
- Vm);
- X else if (lflag > 9) /* verbose listing format */
- X sprintf(d_t_str, "%u %s %u %02u:%02u:%02u", dy, month`5Bmo`5D, yr+19
- V00,
- X hh, mm, ss);
- X
- X return d_t_str;
- X
- X`7D /* end function zipinfo_time() */
- X
- X
- X
- X
- X
- X/********************************/
- X/* Function open_input_file() */
- X/********************************/
- X
- Xint open_input_file() /* return 1 if open failed */
- X`7B
- X /*
- X * open the zipfile for reading and in BINARY mode to prevent cr/lf
- X * translation, which would corrupt the bitstreams
- X */
- X
- X#ifdef VMS
- X zipfd = open(zipfn, O_RDONLY, 0, "ctx=stm");
- X#else /* !VMS */
- X#ifdef UNIX
- X zipfd = open(zipfn, O_RDONLY);
- X#else /* !UNIX */
- X#ifdef MACOS
- X zipfd = open(zipfn, 0);
- X#else /* !MACOS */
- X zipfd = open(zipfn, O_RDONLY `7C O_BINARY);
- X#endif /* ?MACOS */
- X#endif /* ?UNIX */
- X#endif /* ?VMS */
- X if (zipfd < 1) `7B
- X fprintf(stderr, "error: can't open zipfile `5B %s `5D\n", zipfn);
- X return 1;
- X `7D
- X return 0;
- X
- X`7D /* end function open_input_file() */
- X
- X
- X
- X
- X
- X/************************/
- X/* Function readbuf() */
- X/************************/
- X
- Xint readbuf(buf, size) /* return number of bytes read into buf */
- X char *buf;
- X register unsigned size;
- X`7B
- X register int count;
- X int n;
- X
- X n = size;
- X while (size) `7B
- X if (incnt == 0) `7B
- X if ((incnt = read(zipfd, inbuf, INBUFSIZ)) <= 0)
- X return (n-size);
- X /* buffer ALWAYS starts on a block boundary: */
- X cur_zipfile_bufstart += INBUFSIZ;
- X inptr = inbuf;
- X `7D
- X count = MIN(size, (unsigned)incnt);
- X memcpy(buf, inptr, count);
- X buf += count;
- X inptr += count;
- X incnt -= count;
- X size -= count;
- X `7D
- X return n;
- X
- X`7D /* end function readbuf() */
- $ CALL UNPACK [.UNZIP50]ZIPINFO.C;1 471242085
- $ create 'f'
- X
- XZIPINFO(1) USER COMMANDS ZIPINFO(1)
- X
- XNAME
- X zipinfo - list detailed information about a ZIP archive file
- X
- XSYNOPSIS
- X zipinfo `5B-1smlvht`5D file`5B.zip`5D `5Bfilespec ...`5D
- X
- XARGUMENTS
- X file`5B.zip`5D Path of the ZIP archive. The suffix `60`60.zip'' is
- X applied if the file specified does not exist.
- X Note that self-extracting ZIP files are sup-
- X ported; just specify the `60`60.exe'' suffix your-
- X self.
- X
- X `5Bfilespec`5D An optional list of archive members to be pro-
- X cessed. Expressions may be used to match multi-
- X ple members; be sure to quote expressions that
- X contain characters interpreted by the Unix
- X shell. See PATTERN MATCHING (below) for more
- X details.
- X
- XOPTIONS
- X -1 list filenames only, one per line (useful for pipes)
- X -s list zipfile info in short Unix `60`60ls -l'' format:
- X default
- X -m list zipfile info in medium Unix `60`60ls -l'' format
- X -l list zipfile info in long Unix `60`60ls -l'' format
- X -v list zipfile information in verbose, multi-page format
- X -h list header line
- X -t list totals for files listed or for all files
- X
- XPATTERN MATCHING
- X All archive members are listed unless a filespec is provided
- X to specify a subset of the archive members. The filespec is
- X similar to an egrep expression, and may contain:
- X
- X * matches a sequence of 0 or more characters
- X ? matches exactly 1 character
- X \nnn matches the character having octal code nnn
- X `5B...`5D matches any single character found inside the brack-
- X ets; ranges are specified by a beginning character, a
- X hyphen, and an ending character. If an exclamation
- X point or a carat (`60!' or `60`5E') follows the left
- X bracket, then the range of characters matched is com-
- X plemented with respect to the ASCII character set
- X (that is, anything except the characters inside the
- X brackets is considered a match).
- X
- XDESCRIPTION
- X ZipInfo lists technical information about a ZIP archive,
- X including information file access permissions, encryption
- X status, type of compression, version and operating system of
- X compressing program, and the like. The default option is to
- X
- XInfo-ZIP Last change: 19 Aug 92 (v1.0) 1
- X
- XZIPINFO(1) USER COMMANDS ZIPINFO(1)
- X
- X list files in the following format:
- X
- X-rw-rwl--- 1.5 unx 2802 t- defX 11-Aug-91 13:48 perms.2660
- X
- X The last three fields are clearly the modification date and
- X time of the file, and its name. The case of the filename is
- X respected; thus files which come from MS-DOS PKZIP are
- X always capitalized. If the file was zipped with a stored
- X directory name, that is also displayed as part of the
- X filename.
- X
- X The second and third fields indicate that the file was
- X zipped under Unix with version 1.5 of Zip (a beta version).
- X Since it comes from Unix, the file permissions at the begin-
- X ning of the line are printed in Unix format. The
- X uncompressed file-size (2802 in this example) is the fourth
- X field.
- X
- X The fifth field consists of two characters, either of which
- X may take on several values. The first character may be
- X either `60t' or `60b', indicating that Zip believes the file to
- X be text or binary, respectively; but if the file is
- X encrypted, ZipInfo notes this fact by capitalizing the char-
- X acter (`60T' or `60B'). The second character may also take on
- X four values, depending on whether there is an extended local
- X header and/or an `60`60extra field'' associated with the file
- X (explained in PKWare's APPNOTE.TXT). If neither exists, the
- X character will be a hyphen (`60-'); if there is an extended
- X local header but no extra field, `60l'; if the reverse, `60x';
- X and if both exist, `60X'. Thus the file in this example is
- X (apparently) a text file, is not encrypted, and has neither
- X an extra field nor an extended local header associated with
- X it. The example below, on the other hand, is an encrypted
- X binary file with an extra field:
- X
- XRWD,R,R 0.9 vms 168 Bx shrk 9-Aug-91 19:15 perms.0644
- X
- X Extra fields are used by PKWare for authenticity verifica-
- X tion(?) and possibly other purposes, and by Info-ZIP's Zip
- X 1.6 and later to store OS/2, Macintosh and VMS file attri-
- X butes. This example presumably falls into the latter class,
- X then. Note that the file attributes are listed in VMS for-
- X mat. Other possibilities for the host operating system
- X include OS/2 with High Performance File System (HPFS), DOS
- X or OS/2 with File Allocation Table (FAT) file system, and
- X Macintosh, denoted as follows:
- X
- Xarc,,rw, 1.0 os2 5358 Tl i4:3 4-Dec-91 11:33 longfilename.hpfs
- Xarc,hid,rdo,sys dos 4096 b- i4:2 14-Jul-91 12:58 EA DATA. SF
- X--w------- 1.0 mac 17357 bx i8:2 4-May-92 04:02 unzip.macr
- X
- XInfo-ZIP Last change: 19 Aug 92 (v1.0) 2
- X
- XZIPINFO(1) USER COMMANDS ZIPINFO(1)
- X
- X File attributes in the first two cases are indicated in a
- X DOS-like format, where the file may or may not have its
- X archive bit set; may be hidden or not; may be read-write or
- X read-only; and may be a system file or not. If the attri-
- X butes are too long, the version number of the encoding
- X software is omitted. (The information is still available in
- X the verbose listing, however.) Interpretation of Macintosh
- X file attributes needs some work yet.
- X
- X Finally, the sixth field indicates the compression method
- X and possible sub-method used. There are six methods known
- X at present: storing (no compression), reducing, shrinking,
- X imploding, tokenizing, and deflating. In addition, there
- X are four levels of reducing (1 through 4); four types of
- X imploding (4K or 8K sliding dictionary, and 2 or 3 Shannon-
- X Fano trees); and three levels of deflating (fast, normal,
- X maximum compression). ZipInfo represents these methods and
- X their sub-methods as follows: `60`60stor''; `60`60re:1,'' `60`60re:2,'
- V'
- X etc.; `60`60shrk''; `60`60i4:2,'' `60`60i8:3,'' etc.; `60`60tokn''
- V; and
- X `60`60defF,'' `60`60defN,'' and `60`60defX.''
- X
- X The medium and long listings are almost identical to the
- X short format except that they add information on the file's
- X compression. The medium format indicates the file's
- X compression factor as a percentage:
- X
- X-rw-rwl--- 1.5 unx 2802 t- 81% defX 11-Aug-91 13:48 perms.2660
- X
- X In this example, the file has been compressed by more than a
- X factor of five; the compressed data are only 19% of the ori-
- X ginal size. The long format gives the compressed file's
- X size in bytes, instead:
- X
- X-rw-rwl--- 1.5 unx 2802 t- 538 defX 11-Aug-91 13:48 perms.2660
- X
- X In addition to individual file information, a default zip-
- X file listing also includes header and trailer lines:
- X
- XArchive: OS2.zip 5453 bytes 5 files
- X,,rw, 1.0 os2 730 b- i4:3 26-Jun-92 23:40 Contents
- X,,rw, 1.0 os2 3710 b- i4:3 26-Jun-92 23:33 makefile.os2
- X,,rw, 1.0 os2 8753 b- i8:3 26-Jun-92 15:29 os2unzip.c
- X,,rw, 1.0 os2 98 b- stor 21-Aug-91 15:34 unzip.def
- X,,rw, 1.0 os2 95 b- stor 21-Aug-91 17:51 zipinfo.def
- X5 files, 13386 bytes uncompressed, 4951 bytes compressed: 63%
- X
- X The header line gives the name of the archive, its total
- X size, and the total number of files; the trailer gives the
- X number of files listed, their total uncompressed size, and
- X their total compressed size (not including any of Zip's
- X internal overhead). If, however, one or more filespecs are
- X provided, the header and trailer lines are not listed. This
- X
- XInfo-ZIP Last change: 19 Aug 92 (v1.0) 3
- X
- XZIPINFO(1) USER COMMANDS ZIPINFO(1)
- X
- X behavior is also similar to that of Unix's `60`60ls -l''; it may
- X be overridden by specifying the -h and -t options expli-
- X citly. In such a case the listing format must also be
- X specified explicitly, since -h or -t (or both) in the
- X absence of other options implies that ONLY the header or
- X trailer line (or both) is listed. See the EXAMPLES section
- X below for a semi-intelligible translation of this nonsense.
- X
- X The verbose listing is self-explanatory. It also lists file
- X comments and the zipfile comment, if any, and the number of
- X bytes of OS/2 extended attributes stored. Note that the
- X latter number will in general NOT match the number given by
- X OS/2's `60`60dir'' command; OS/2 always reports the number of
- X bytes required in 16-bit format, whereas ZipInfo always
- X reports the 32-bit storage.
- X
- XENVIRONMENT OPTIONS
- X Modifying ZipInfo's default behavior via options placed in
- X an environment variable can be a bit complicated to explain,
- X due to ZipInfo's attempts to handle various defaults in an
- X intuitive, yet Unix-like, manner. Nevertheless, there is
- X some underlying logic. In brief, there are three `60`60priority
- X levels'' of options: the default options; environment
- X options, which can override or add to the defaults; and
- X explicit options given by the user, which can override or
- X add to either of the above.
- X
- X The default listing format, as noted above, corresponds
- X roughly to the "zipinfo -hst" command (except when indivi-
- X dual zipfile members are specified). A user who prefers the
- X long-listing format (-l) can make use of the ZIPINFO
- X environment variable to change this default:
- X
- X setenv ZIPINFO -l Unix C shell
- X
- X ZIPINFO=-l; export ZIPINFO Unix Bourne shell
- X
- X set ZIPINFO=-l OS/2 or MS-DOS
- X
- X define ZIPINFO_OPTS "-l" VMS (quotes for LOWERCASE)
- X
- X If, in addition, the user dislikes the trailer line,
- X ZipInfo's concept of `60`60negative options'' may be used to
- X override the default inclusion of the line. This is accom-
- X plished by preceding the undesired option with one or more
- X minuses: e.g., `60`60-l-t'' or `60`60--tl'', in this example. The
- X first hyphen is the regular switch character, but the one
- X before the `60t' is a minus sign. The dual use of hyphens may
- X seem a little awkward, but it's reasonably intuitive
- X nonetheless: simply ignore the first hyphen and go from
- X there. It is also consistent with the behavior of the Unix
- X command nice(1).
- X
- XInfo-ZIP Last change: 19 Aug 92 (v1.0) 4
- X
- XZIPINFO(1) USER COMMANDS ZIPINFO(1)
- X
- XEXAMPLES
- X To get a basic, short-format listing of the complete con-
- X tents of a ZIP archive `60`60storage.zip,'' with both header and
- X totals lines, use only the archive name as an argument to
- X zipinfo:
- X
- X zipinfo storage
- X
- X To produce a basic, long-format listing (not verbose),
- X including header and totals lines, use -l:
- X
- X zipinfo -l storage
- X
- X To list the complete contents of the archive without header
- X and totals lines, either negate the -h and -t options or
- X else specify the contents explicitly:
- X
- X zipinfo --h-t storage
- X
- X zipinfo storage \*
- X
- X (where the backslash is required only if the shell would
- X otherwise expand the `60*' wildcard, as in Unix when globbing
- X is turned on--double quotes around the asterisk would have
- X worked as well). To turn off the totals line by default,
- X use the environment variable (C shell is assumed here):
- X
- X setenv ZIPINFO --t
- X
- X zipinfo storage
- X
- X To get the full, short-format listing of the first example
- X again, given that the environment variable is set as in the
- X previous example, it is necessary to specify the -s option
- X explicitly, since the -t option by itself implies that ONLY
- X the footer line is to be printed:
- X
- X setenv ZIPINFO --t
- X
- X zipinfo -t storage `5Bonly totals line`5D
- X
- X zipinfo -st storage `5Bfull listing`5D
- X
- X The -s option, like -m and -l, includes headers and footers
- X by default, unless otherwise specified. Since the environ-
- X ment variable specified no footers and that has a higher
- X precedence than the default behavior of -s, an explicit -t
- X option was necessary to produce the full listing. Nothing
- X was indicated about the header, however, so the -s option
- X was sufficient. Note that both the -h and -t options, when
- X used by themselves or with each other, override any default
- X listing of member files; only the header and/or footer are
- X
- XInfo-ZIP Last change: 19 Aug 92 (v1.0) 5
- X
- XZIPINFO(1) USER COMMANDS ZIPINFO(1)
- X
- X printed. This behavior will be more useful when ZipInfo
- X accepts wildcards for the zipfile name; one may then summar-
- X ize the contents of all zipfiles with a single command.
- X
- X To list information on a single file within the archive, in
- X medium format, specify the filename explicitly:
- X
- X zipinfo -m storage unshrink.c
- X
- X The specification of any member file, as in this example,
- X will override the default header and totals lines; only the
- X single line of information about the requested file will be
- X printed. This is intuitively what one would expect when
- X requesting information about a single file. For multiple
- X files, it is often useful to know the total compressed and
- X uncompressed size; in such cases -t may be specified expli-
- X citly:
- X
- X zipinfo -mt storage "*.`5Bch`5D Mak\*
- X
- X Finally, to get maximal information about the ZIP archive,
- X use the verbose option. It is usually wise to pipe the out-
- X put into a filter such as more(1):
- X
- X zipinfo -v storage `7C more
- X
- XTIPS
- X The author finds it convenient to set up an alias `60`60ii'' for
- X ZipInfo on systems which allow aliases, or else to set up a
- X batch file `60`60ii.bat'' or to rename the executable to
- X `60`60ii.exe'' on systems such as MS-DOS which have no provision
- X for aliases. The `60`60ii'' usage parallels the common `60`60ll''
- X alias for long listings in Unix, and the similarity between
- X the outputs of the two commands was intentional.
- X
- XSEE ALSO
- X funzip(1), unzip(1), zip(1), zipcloak(1), zipnote(1),
- X zipsplit(1)
- X
- XAUTHOR
- X Greg Roelofs (also known as Cave Newt). ZipInfo is partly
- X based on S. H. Smith's unzip and contains pattern-matching
- X code by J. Kercheval, but mostly it was written from
- X scratch. The OS/2 extra-field code is by Kai Uwe Rommel.
- X
- XInfo-ZIP Last change: 19 Aug 92 (v1.0) 6
- X
- $ CALL UNPACK [.UNZIP50]ZIPINFO.DOC;1 1196901134
- $ create 'f'
- XSubject: Info-ZIP Rules (No Feelthy ...)
- X
- XIn discussions with Mark Adler (and others), I realized we in the Info-ZIP
- Xcommunity have been evolving a set of rules that maybe oughtta be
- Xdocumented, archived, and available to potential contributors.
- X
- XThe following appear to meet our requirements. Please observe these
- Xrules when submitting source, context diff, or other files to Info-ZIP.
- X
- X
- X1 - "NO FEELTHY TABS"
- X
- X Many editors and EMail systems either have no capability to use and/or
- Xdisplay the Ascii 9 TAB character correctly, or there are variable tab
- Xcolumns, or other horrors. (My MaxEMail offline email editor for one.)
- X
- X Bottom line: use spaces, not tabs.
- X
- X Related utility programs: Unix and MS-DOS : expand, unexpand.
- XMS-DOS: Buerg's TABS; Toad Hall's TOADSOFT. And some editors have the
- Xconversion built-in.
- X
- X Exceptions: The Unix Makefile. Some makes seem to require "real"
- Xtabs. If they need it there, fine. So don't fiddle the Makefile.
- X
- X
- X2 - "NO FEELTHY CRS"
- X
- X All source, documentation and other text files shall have Unix style
- Xline endings (LF, Ctrl-J), NOT the MS-DOS CR/LF or Mac CR line endings.
- X
- X Reason: "Real programmers" in any environment can convert back and
- Xforth between Unix and DOS/Mac style. MS-DOS Turbo C can use Unix or
- XMS-DOS line endings (donno about Mac Turbo C). Buerg's LIST file display
- Xutility for MS-DOS can use Unix or MS-DOS line endings. Unix utilities
- Xlike diff and patch die a horrible death (or produce horrible output) if
- Xtarget files have CRs.
- X
- X Related utilities: flip for Unix and MS-DOS.
- X
- X Exceptions: The zip archive README and zip.doc files, which Mark
- XAdler wants to leave in MSDOS for "unsophisticated" (read brain-dead) DOS
- Xusers. Also the batch files to compile under MS-DOS (where it requires
- Xthe CRs.)
- X
- X
- X3 - "NO FEELTHY HEX"
- X
- X We'll use uuencode/uudecode compatible converters to move binary files
- Xthrough our 7-bit EMail systems (xxencode on special request). Uuencoded
- Xfiles, if larger than +/- 32Kb, will be broken into smaller (< 32Kb)
- Xfiles (via David M. Read's UUXFER utility).
- X
- X Reason: to prevent sounds of gagging mailers from resounding
- Xthroughout the land. To be standard with the Uunet side of the world.
- XTo be relatively efficient in the binary->Ascii conversion. (Yeah, yeah,
- XI know, there's better conversions out there. But not as widely known.)
- X
- X Related utilities: uuencode, uudecode, uuxfer20, quux, others.
- XJust make sure they don't leave imbedded or trailing spaces. (E.g., they
- Xshould use the "`60" character in place of Ascii 32.) Else mailers are
- Xprone to truncate or whatever. Message me if you need one.
- X
- X
- X4 - "NO FEELTHY TARS"
- X
- X unzip will be available in .tar.Z (16-bit compressed tar), .arc (as
- Xavailable on Unix, SIMTEL20, PKPAK, etc., *NOT* the latest proprietary
- XSEA version), or .zip format. (If requesting we EMail you source,
- Xspecify desired format.) zip source will only be distributed in .zip
- Xarchives.
- X
- X Reason: For unzip development or use, anyone should have one of the
- Xspecified dearchivers. For zip development or use, you shouldn't be
- Xmessing with zip unless you can already unzip. (This protects the
- Xinnocent.)
- X
- X Related utilities: Unix: arc, tar, compress, zip, unzip. MS-DOS:
- XPKUNPAK, PKUNZIP, PAK, TAR, COMPRESS, and others.
- X
- X Exceptions: EMail me directly for any special circumstances or
- Xrequirements (zoo, BinHex, 12-bit compress, etc.)
- X
- X
- X5 - "NO FEELTHY FANCY_NAMES"
- X
- X Assume the worst: that someone on a brain-damaged DOS system has to
- Xwork with everything your magic fingers produced. Keep the file names
- Xunimaginative and within MS-DOS limits (e.g., ordinary A..Z, 1..9, "-$_!"
- Xtype characters, in the "filename.typ" 8-dot-3 format). MacUsers, giggle
- Xall you want, but no spaces.
- X
- X Reason: Compatibility with different file systems. MS-DOS is the
- Xmost limited.
- X
- X
- X6 - "NO FEELTHY GRAPHICS"
- X
- X Do all your editing in a plain-text ASCII editor. No WordPerfect,
- XWord, WordStar document mode, or other word processor files, thenkyew.
- XNo desktop publishing. No TIFFs, no GIFs, no imbedded pictures or dancing
- Xladies (too bad, Cave Newt).
- X
- X Reason: Compatibility with different consoles. My old XT clone is
- Xthe most limited!
- X
- X Related utilities: vi, ed, EDLIN, Turbo C editor, UED, EASYEDIT, cat
- Xor "COPY CON UNZIP.C"; various word processor -> text conversion utilities.
- X
- X
- X7 - "NO FEELTHY DASHES"
- X
- X Don't have repeated dashes (starting at the left margin) in any
- Xsource code or patches you try to EMail to me or Info-ZIP. Instead, be
- Xsure to always prefix them with a space, asterisk, comment, whatever, like
- Xthis:
- X#--------------- or
- X/*-------------- or even
- X --------------- (just indented)
- X
- X Reason: Most "undigestify" utilities (that break down newsletters
- Xinto their separate messages) use that "--------" (starting at the left
- Xmargin) as the symbol that it's hit the end of a message. I'd rather not
- Xhave your C source file broken up into a dozen separate untitled messages
- Xin my mail system, thank you. I'll be going through the unzip source Any
- XDay Now and changing anything like that by indenting, prefixing, whatever.
- X
- X
- X*-------------------*
- X
- XDavid Kirschbaum
- XInfo-ZIP Coordinator
- $ CALL UNPACK [.UNZIP50]ZIPRULES.;1 486630870
- $ create 'f'
- XEncoding of file DISK$USER99:`5BBERRYMAN`5DZIP19.ZIP;1
- X`7E`7E`7E`7E`7E`7E`7E`7E`7E`7E`7E`7E`7E`7E`7E`7E`7E`7E`7E`7E`7E`7E`7E`7E`7E`
- V7E`7E`7E`7E`7E`7E`7E`7E`7E`7E`7E`7E`7E`7E`7E
- X!@@QIM5R$T5TEIUN9(3VBU$TR%USA9TWZ%DT1$#KZ%DT;DCajm@C@5ag@DP@@Dah@efag@HB@@*4
- VICAb
- X@Dal@8IJc@B<??af@LA@@Hah@Hb@mPPM1ABA5DGan@H@TKM@ATc@m@@SAICYX/>fJN%Eb@D.b@0@
- V@<BP
- XX,f6d2%Ff(9BY/MVRMEA@V54TVA@@Eah@VU#K5@PRMQB@VYTPBE@@PAc@0@GHT@@4b@EXAc@mBPD
- VF4&2
- XQDF4&2A@I5$F@X%QHMT@@0B@T.@@4/#,@,mBPCPCPBGaf@I5DH@XEQAQU@@0Bag@T",@@NdJ/=8?
- V>J9,
- X)<6#?;+Db@I5$G@XETR=T@@mE@KU%UXf"XA8?A1@Tc@Laj@$TSW@mURQDUA@@E@00EEPPORA@8,)
- V<6#?
- X;+D4&UM=668@Q/3_EC:%:B((BG7"44Sd06mfSdQZ06,_mT4C42#,XC%(VRJ;8<+__C)$-S3gIN6"
- V<M3<
- X&7<Ff')?%AZEWd5Q#+#465N/I64R&@))MZ/I?@WM=9;N;LZ6'96g6g2f&M4<3O;,BJ0,235,';*X
- VZIdf
- Xd_UIfU$*Mf+@6C=VS%N2+(P4d:VGHSGEdX<Q?P$V)#:R".-!UA.25-"eUUC>LZH*:1+II$';-:Jm
- V42f8
- X7;f&.H;)(KAW/'7XeCAU><ES!)69d3@5+MgZ6JSH*A8E$%;VGdP2R_X<7PM;Y%54Z$<E@/84O!mE
- V9PA)
- XQ*%/Q:T4Q':47>.<)J)?.!AKN&C4JGm,3E35DmX76FPTS)6TJ_eXLQT)JFX?Y6@Hm@.V:BA>_G&(
- VCK")
- XWd'BGM;JAJ#4CCUgS/4,JT/LG?WR-C!H:ITT_/$W@M<W?RS4+=;gB0GU%&TN#&*mR5XM6C@#:%V&
- V*Z4g
- XM>Y_(<UJ5'3ITmeg*UG+ZgBIU9ZQQFB@#-PVQ.N&>=!::V$GQO3)@*27d51M!'fSMR)F)d#dUJ2%
- V4?%O
- XdH:<<JEXUf:gH;2-ffL13@W_TJRV#8,4:*.OCQ:_CTE2&F=FVZP*m9Q&&1OT1=2-G!8(4QT,B<)"
- VI!P&
- X&+%VW'R/Qd,I"*%df>fP_f181@1B2*54%FG6JR%GM=(5%?UTM)8Y"*-.A;J)1MD8:A+4@2E1DM$A
- VL1L5
- XH/Z2,QIM;VQL@ET052dE4BP'Z5)1$)"P:d_893%BUV;FmBXHH*WMHEAY)XPQX-##,S'7U+2=ZZQ:
- V.&.@
- X;E@G%7O969/AKA>A!G$TYPNKHR%e8N>!H0YTW_U=ADmgC@JDgR(/GBY.B&Q1fPDY-*_2fI_+I%D>
- VeTG%
- XgV2_I>$2I+D%'Zff+!4_TM#@EXKK#A%J5-OI)FU_,6W5$8Q4!D"d_mZf@GOWIAdL?JP#PU+7m2I4
- V"<>X
- XYOX>XC,C$)UR/Z#FSe+SS'BXS3MX"5-BPU>?'M8I6f0'(;g$1"JG?(<mNGDZVVLHBP38ZEPUGf="
- VTTN,
- XA@B'gmD2/J-GN9I>XR#JHFfN2YSL3Q@HPKNBU$A>U4V'ODO)RG$TIN$6gTPdXX7HD;327I7H#f'J
- V:G:2
- XRRIBTETSRSLK2JNL'L.@@'NZZA?$e=(Y2,4I3UP(_29X*;+.<45$G,6.U/K$VKQG7';f!mIM/&Z8
- VKG"*
- X5e'X*!*O/DSO>,-M&,$HUJe'dXfCJ_IL0BTHX,GL$=eR"&1U'STW6I#,:G7Q<F-MSO*VFDR'I4"9
- V$ZY%
- X6T<DC?<D65B1ACA.KO"V$*-Q)WHMf(U)JZ2Fg48JMW%E:2,UZ4RSO9$&0D&""X?R)=O<PdAT+gJ#
- VP.IF
- Xm3RJ6g/d5PU64H)@%-(G6T=*Q-M?,@/_Q'T7dEfFV*=E1"d+I0E)AR(GWCOS;!dfO<&K6#Y*D3OK
- VSH)W
- XgA0B3A@-+CR++1<G7#FG*C?8me*M$/7!&Q:.R/LL,<G(C&+9I)FLR4-"LT8Q51gI;3-#$F9&D,gF
- V*8IU
- XQJ?R-+Q.H/=+HO9G:YV&-)!>49768,2;I8*Ddd)7M9!K)*W2XI&XOC+08*CCLf)-VfY(2Y0HWDFW
- VOBS@
- XISR/,5XB1dm02$+(Z#?X7O-53:U;>II?GYf7IVGR3_C+;@A?C9K?RU#3ODJ+=J5_L=N!!7+T_Sg9
- V1/S2
- XdM>12BJ?R$4E8__1E4_6Ym?P@M8K6d>HL4WS/gR4mG<A,3U=+GJ=WTPWf9%WR7:5fAfU6TCL2Uf"
- VS"@H
- X@;=3MR4"1:We2?2YK)SWTPW;J)EE*>g<1"3NY1dVmJ9"d.9:/e;%%7>O7B/"*!VD2L@5Fd:U5.9S
- V7f5M
- X4<23W(S/X+PJ;W2/e'*N6KGd8!9%UAW9mY(*D=<7?:>*W3O0U'mO;/?192=17)/M?47UN?,7T>62
- V7g>7
- XU?G@5RCP@Ec@H@m@mIQFeU,5PS5c@ZGb@M@@/@DFf!IWZ/DFf!IWZ.LVRMEA@V54TVA@@Eah@VU#
- VK5@P
- XRMQB@VYTPBE@@PAag@GHT@@4b@EXAc@mBPDF4&2QDF4&2A@I5$F@X%QHMT@@0Baf@P/#,@,mBPCP
- VBP4F
- Xaf@I5DH@XEQAQU@@0Bag@T",@@*SUOS;R?J)NU=L-K=+Db@I5$G@XETR=T@@mEb@#JKe"XA8?A1@
- VTc@L
- Xaj@$TSW@mURQDUA@@Eag@PORA@(NU=L-K=+D4dU-=6D9@!?>>+X@D,+S76&"D=K!@JBZPU*WQ*TI
- V84A*
- X2d,f#U75N26K!@"?;7L6Nd;B'Nf_:V%D9fFOO3dO3$#'T@SmEW/8*3O:M8Q:-K%+$gO7-C4&m4)8
- V+$m*
- X7,J(-F_M4Y=!6fm2:mUV3W%NOJ',3*mM<0Z00;$>#PIGW<D-RHUI</9CWWmBL+Z;ER8%>mPdOZ=+
- VFK*U
- X7LVV0:GKP_$@H@97B$m"'m@+MRX9%?1"OAO?E'NH9=K+<:dY@>SQ1*5eGL1G.QYHEU)7Y,Y#TU9Y
- V;_fV
- X1OJ<AgP/B"R0@mRH8/2g:K327L@37+DACm-+5-R(BUL_"?mC@F<CTJ@ZUTHL_NTgeI0"B!$=%_>3
- V%3"B
- XBGe@f8'8W<#SF:f&*L<X0>3"B,Y@X06dZ5&;*T;CXEE0CV$5&RJE#%L=8I0R>fRL!:,BX+FdRfZ#
- V.#7*
- X=T"./;"/G6QfNLd9&fd9;mMR;FL-6*dd!FI2Hmm367DE!0DVKQW3EVCQI0Bm',FmMN+(G)QP3N<N
- VZ$68
- X1N(DJMVG:6R(7#DG@-+L@6-FB($%%A+-5W"%V(#d4d:d9AI)6KOB>R$U%+D1,)RUC<;+E0/<mYNE
- VUI"Y
- X6T>/f+8=8!mS74G0mNUL%BJ:/UFHDH-ULBB<*/S?5XH%0VEO>@395YD@#5e87%NKXMm"+d;fRBB*
- V!E)E
- XOB?2!'A_8&3?8U'_=YH)!MPZV&me(YVC'TCKWe3U'-8-/?2K>SF<RX:@_JS@N<D6,A:@LM7>)Rd7
- VfAY7
- XFP;1(JmEDWm&X)P?:gW#EgCmC_Ne,ON:B7Og$L<WFQ23@3JZ-&dAM9Se#PUX._FI&83,?34?@e8e
- V8T:$
- XF%"$Xe4%J?D6LO<T8$)1'K(+H,9AK?FG6NUU!Z81Of:)-"GWCZ4-19(!UX@@H@GW:UZ'OT!T0)_;
- V9'0(
- X@A+Z7W$0DKV%Vg>E'%VGX7H1:ff7CF1RG:FM+%.7P7)#MZN=_@DR3XH>WQm6BQ4;&G@!O8:WQZ9A
- VXR3H
- X,"W_@+&1X!KFE):m)VTOL0XFPT)ZZ/C&H&%GQF%(CFCI<M,:*161HPSge/KfRZ7EU7ECL':(G2,'
- V??7,
- X&3'e$%fQfN)D)-%8>7!L(S(fUCQ/XTQ9-BY+LH+FYL>7RR#@#KeI1+7?/g4D?_CP-4@DPAc@B@XW
- VZT$A
- XOB,OIDIb@49A@@PD@0K@!QWX2%6K-E6Z%YVZ,U&K3QWRMEA@V54TVA@@Eah@VU#K5@PRMQB@VYTP
- VBE@@
- XPAag@GHT@@4b@EXAc@mBPDF4&2QDF4&2A@I5$F@X%QHMT@@0Baf@m/#,@,mBPCPB0NGaf@I5DH@X
- VEQAQ
- XU@@0Bag@T",@@":>.XIZ?JI*;;"%(=+Db@I5$G@XETR=T@@mEb@#JKe"XA8?A1@Tc@Laj@$TSW@m
- VURQD
- XUA@@Eag@PORA@H*;;"%(=+D4Z%Q=&60@11_&;S1)Vg(Q*A-5'6PJR%E::2DE$VB/m*TTHXJV$F#R
- VLfR;
- XS?<E;8@U1d-S#GRN'?7=36'/3eI>P6g6VgAC7J*0U<CWSO&K$LL+eCYG_(mKIU8Re"L+"#1=@I@H
- Vmm?$
- XK7!IG+VK0P<&Q_XD(TSD81Z658FAg13J,(?V<YC>Q52KH_<O='%0Y_ERB?6"G.K81$P@B?:,I7GG
- V8OA=
- X/G=#Fg%V4;1(9!3VN=N4_:$$I?HJMNAV&DM38>T2FGg%NeOHLLP&'C3&FHK8%;UFZGQ?8mO=1O_C
- V-4gQ
- X-72VW0*!E_9;+0@<W<C#D43&MP#5Q:K4P.PYeT2KT/g*P,N+(VY%Q9'QBBP$B0F66"LIE*,"1HGV
- V3%*W
- X@90R=LP0Rd!'Z)'Z0'gJ_J,9:0JEMeUdQB%G)D+U*)3K%T+BP_d<@Z3e(:Id,Fd-7*A0@V>N!:,+
- V$AmY
- X_L6,!2!A*TY(G:'7%S-ZPSgROC;H&,*J%!L#WHH#J6K<Z.(TK:@&VA,Id78Zf1IG#JXN.g+K,#?!
- V%V#F
- X4g.;&(1#>9XEAff#dLM:=C1HA6ZB7TZf)_Pf*m-e:-&*Z<6Y22(Bf5"Me5698__JeA6P@@d_%;Ee
- V+K=/
- XJ;TAS')dRZG:'S+F(;+GO0I%FG:G"Q*-6O5,X4%1.RW'Q2g1'Z<"3/S9,&!V4T9<?DX=MT/*!(!Z
- Vd1=;
- XGd7=f'7m4mUW.??A*9F01:dFW9)_G9QT&M%FZ>WAEm0@2;"2=JVAC/-+G)C0e7AV>*H-W2ZBM6f(
- V5'D:
- X/AP-4@DPAc@B@(I!X#A.CUe6"Ab@PKb@0C@PQ+@H0.@DFf!IWZ/LGf:%Fe.0&d+%TSQ@mUMM%U@@
- VPAag
- X@mU58RM@$TS$@mUFE$PA@@Tag@0ABE@@G@@PAVaf@(@D!A-)eD!A-)e@PRM%A@VYDRCE@@,ah@;H
- VK@K(
- X@e@L@$Vc@$TSm@mUDEDUA@@Kag@PI2B@(*+(0Id2+$*."B',I/Rb@$TSg@mUPI5SA@@Vag@0I"Em
- V?GDC
- XPAb@0aj@PRMfA@VIEQTE@@Tah@=HE@m*."B',I/RPfM.$B@BCCDf/G&"7A/B.,d:'TIPmJ-SA1S/
- V)TEW
- XH.HI/<Xm1..XE6dC3&<4I/+d;-B!J"JX4Y2AW!GQR,PC*5#7_9,BM0"g6$,7IU%"TRe('EE":FO#
- V:_M<
- XJ)C<U"e=QgA@5RCP@Ec@H@@OE"MF1(YAI&Jb@m8Ab@O@@/@DFf!IWZ/LGf:%Fe.@'e*%TSQ@mUMM
- V%U@@
- XPAag@mU58RM@$TS$@mUFE$PA@@Tag@0ABE@@G@@PAVaf@(@D!A-)eD!A-)e@PRM)A@VYDRCE@@,a
- Vh@;H
- XK@K(@e@L@T<Ac@PRMAB@VQTPTE@@,ah@%HK@m"E)7-,I/RJV$g72&<JA@@PRM9A@VA%TOE@@XAag
- V@'HV
- X@>_PL@Ec@Caj@I54E@88Z@HmURQDUA@@Eag@PORA@(XQ:fKd2+D4H$A+mb0m!/''"f4AZ0W@O)"8
- VIGCO
- XHJg(+K3E(,J-Y"8S/+:e"GedEBM?P2W2_N.MASR7@82S3V->P2.4='!E@('#V8A_E5Q-/IAU94(&
- VO29B
- XY""M6WYN:F;YdEVFC"6K9FNCdBPIJG#:@)B6P/)=_R1!B+;F:XGY@Mdd;*O:5Bd:eT_Eg1X3TF?0
- V;dNU
- XXT2HL&8H2O,1"!LV<#ZG?9PKZ:.<UHV?G1S@TKM@ATc@m@@eUH6X0>"/<7Sc@FBc@A@;BPX4E&e)
- V=2e4
- X)WZ09&K,96ZI5TD@XUSSYE@@Tah@XUM.TC@I5DI@X%QAITb@Eag@emPA@0A@@TmEaf@J@QXPdJGQ
- VXPdJ
- XG@$TSY@mUF!4PA@@Kag@0N2B0BJ@G@C@MDc@I5DH@XEQAQU@@0Bag@T",@@":E.92&<JI*W8&Kd2
- V+Db@
- XI5$G@XETR=T@@mEag@e"XA8?A1@Tc@Laj@$TSW@mURQDUA@@Eag@PORA@H*W8&Kd2+D,XB19X2I3
- V$"IY
- XC4K_.R,$DKJSm4U%YA9%_I)B!UZY&S*1C!Y)E@"AHA2L_P,RO'<SJ1eJFH+XmZL%$e1%$BPF:AD#
- V$m)V
- XQIXJXI9WLLAA@TKM@ATc@PHF@H@B@mV!X#1!DZRNPAb@eHc@D@,K@!QWX2%6K3Q'g)A7e.0&d+%T
- VSQ@m
- XUMM%U@@PAag@mU58RM@$TS$@mUFE$PA@@Tag@0ABE@@G@@PAVaf@(@D!A-)eD!A-)e@PRM%A@VYD
- VRCE@
- X@,ah@;HK@K(@e@L@<Pc@$TSm@mUDEDUA@@Kag@PI2B@(Z//)Kd2+$*=>&.,I/Rb@$TSg@mUPI5SA
- V@@Va
- Xg@0I"Em?GDCPAb@0aj@PRMfA@VIEQTE@@Tah@=HE@m*=>&.,I/R0"ID'#I'LSJ&$MP/<9J1RR,(L
- VARWU
- X&ETeA9$YIPX&V&9$Z<PXVZAmX@RmL3GD+43I?$RL'"A2JF(&SIIWeI)@$!g@1HIX*UTB&BVR>ECS
- VP@@5
- XRCP@Ec@H@PNK*DFQ9BET+Oc@AJb@L@0.@DFf!IWZ/P7X.L&Y'%TSQ@mUMM%U@@PAag@mU58RM@$T
- VS$@m
- XUFE$PA@@Tag@0ABE@@M@@PAVaf@(@D!A-)eD!A-)e@PRM%A@VYDRCE@@,ah@;HK@K(@4@4@$af@$
- VTSm@
- XmUDEDUA@@Kag@PI2B@8(A<N-:W+$#F0;4*_-Rb@$TSg@mUPI5SA@@Vag@0I"Em?GDCPAb@0aj@PR
- VMfA@
- XVA6X@HmTDQU@@PAag@4#T@@NZ@/S+>5JA#I&XmKSXXT0PL@KXQ,T-J&RRN&L3K9eJM%T1#gfLDGC
- V238C
- XNDFXH"@<OHmTmIH_mQ&2@CFZmALX,Q@Y30(mQA4e@KLP$@KL4R(II!$;H'LS"V9&(M@7,J&(<L@X
- VX=BH
- XH/F0,_FeVOmT4W+_@GX/=6#)mL1@3L8FC"mTX#/N:-+.9)O.2@BV@ALCWGe>3_1@C&7EPA8X"OAH
- V_A@3
- XS@F8XV3"A.NdgPTDOe@QF$@e>K%@S3HCe@E3@X,@L09%J@,LNCE3@Z.H8)V(;.HX@FA9"e5*XB19
- VXe1U
- X7eLT_BAZ2W:*KBD+MAEC6E9d*EWe")'Z1LLPAXZ@3&1Ab@5RCP@Ec@H@m3gIQFWOd18_&Cb@G,b@
- VF@0.
- X@HVZ4M'K#%TSQ@mUMM%U@@PAag@mU58RM@$TS$@mUFE$PA@@Tag@0ABE@@1@@PAVaf@(@D!A-)eD
- V!A-)
- Xe@PRM%A@VYDRCE@@,ah@;HK@K(@DC<B$Cc@$TSm@mUDEDUA@@Kag@PI2B@(,I;Z+K=+$2&,+-.4/
- VRb@$
- XTSg@mUPI5SA@@Vag@0I"Em?GDCPAb@0aj@PRMfA@VIEQTE@@Tah@=HE@m2&,+-.4/RP-Z-?edd#D
- V>75_
- XE8e'!R%mN@H@d744G263$8:43We-=8GS';Z/1C%H(D'PQ*C$4JJ))?-__;"GDTRN135XM9!D9
- V"EK6
- XG_;.@8Yd7+'8(29KUYS&VKBNJT,;O<C;4G?3g"_IV=V1KS2%*H1%Y#'F+RD/Zm8W#3%UQ"?)L.(_
- VgY3e
- X1OG'%'/L*'8M1Y"dVHEWVNd&LWDW$HNYR)BL*HQAFHKgd9mg"K$*YYUUY%E",J1DUeQ-LQTW"A,T
- V$U$$
- XfWVRSe.@#L+(*N+.)&(ED4TI#D#!8F!W6S($IYU5*,QM5RQ=T0,*24:E1JI>"H/,X"H.RD'CV%"7
- VK1m2
- X&$U@V'&!5mmHL+XegS"L)'()XVYRVZ&LIBDGWK2*I9+(,FeKOQ$B9Y.*LM+N"WZLM<,N6)@A1Y#%
- V=(1)
- X$51YE2$A=:-=3:5;Yd7S,-PLJ+.Z0X1(%+)?Xg6UCBf%gTWS3B>S,(P.Pe'T1JO,(2&f+!#6%FX4
- +-+-+-+-+-+-+-+- END OF PART 15 +-+-+-+-+-+-+-+-
-