home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / misc / volume27 / dmake / part03 < prev    next >
Encoding:
Text File  |  1992-01-29  |  40.0 KB  |  1,323 lines

  1. Newsgroups: comp.sources.misc
  2. From: dvadura@plg.waterloo.edu (Dennis Vadura)
  3. Subject:  v27i104:  dmake - dmake Version 3.8, Part03/41
  4. Message-ID: <1992Jan28.030958.6726@sparky.imd.sterling.com>
  5. X-Md4-Signature: 9e359ca55bce5ecd2338ef226e7cab20
  6. Date: Tue, 28 Jan 1992 03:09:58 GMT
  7. Approved: kent@sparky.imd.sterling.com
  8.  
  9. Submitted-by: dvadura@plg.waterloo.edu (Dennis Vadura)
  10. Posting-number: Volume 27, Issue 104
  11. Archive-name: dmake/part03
  12. Environment: Atari-ST, Coherent, Mac, MSDOS, OS/2, UNIX
  13. Supersedes: dmake: Volume 19, Issue 22-58
  14.  
  15. ---- Cut Here and feed the following to sh ----
  16. # this is dmake.shar.03 (part 3 of a multipart archive)
  17. # do not concatenate these parts, unpack them in order with /bin/sh
  18. # file dmake/dbug/dbug/dbug.c continued
  19. #
  20. if test ! -r _shar_seq_.tmp; then
  21.     echo 'Please unpack part 1 first!'
  22.     exit 1
  23. fi
  24. (read Scheck
  25.  if test "$Scheck" != 3; then
  26.     echo Please unpack part "$Scheck" next!
  27.     exit 1
  28.  else
  29.     exit 0
  30.  fi
  31. ) < _shar_seq_.tmp || exit 1
  32. if test -f _shar_wnt_.tmp; then
  33. sed 's/^X//' << 'SHAR_EOF' >> 'dmake/dbug/dbug/dbug.c' &&
  34. X *    profiling is enabled, FALSE otherwise.
  35. X *
  36. X */
  37. X
  38. LOCAL BOOLEAN DoProfile ()
  39. {
  40. X    REGISTER BOOLEAN profile;
  41. X
  42. X    profile = FALSE;
  43. X    if (PROFILING) {
  44. X    if (stack -> level <= stack -> maxdepth) {
  45. X        if (InList (stack -> p_functions, func)) {
  46. X        if (InList (stack -> processes, _db_process_)) {
  47. X            profile = TRUE;
  48. X        }
  49. X        }
  50. X    }
  51. X    }
  52. X    return (profile);
  53. }
  54. X
  55. X
  56. /*
  57. X *  FUNCTION
  58. X *
  59. X *    _db_keyword_    test keyword for member of keyword list
  60. X *
  61. X *  SYNOPSIS
  62. X *
  63. X *    BOOLEAN _db_keyword_ (keyword)
  64. X *    char *keyword;
  65. X *
  66. X *  DESCRIPTION
  67. X *
  68. X *    Test a keyword to determine if it is in the currently active
  69. X *    keyword list.  As with the function list, a keyword is accepted
  70. X *    if the list is null, otherwise it must match one of the list
  71. X *    members.  When debugging is not on, no keywords are accepted.
  72. X *    After the maximum trace level is exceeded, no keywords are
  73. X *    accepted (this behavior subject to change).  Additionally,
  74. X *    the current function and process must be accepted based on
  75. X *    their respective lists.
  76. X *
  77. X *    Returns TRUE if keyword accepted, FALSE otherwise.
  78. X *
  79. X */
  80. X
  81. BOOLEAN _db_keyword_ (keyword)
  82. char *keyword;
  83. {
  84. X    REGISTER BOOLEAN accept;
  85. X
  86. X    if (!init_done) {
  87. X    _db_push_ ("");
  88. X    }
  89. X    accept = FALSE;
  90. X    if (DEBUGGING) {
  91. X    if (stack -> level <= stack -> maxdepth) {
  92. X        if (InList (stack -> functions, func)) {
  93. X        if (InList (stack -> keywords, keyword)) {
  94. X            if (InList (stack -> processes, _db_process_)) {
  95. X            accept = TRUE;
  96. X            }
  97. X        }
  98. X        }
  99. X    }
  100. X    }
  101. X    return (accept);
  102. }
  103. X
  104. X
  105. /*
  106. X *  FUNCTION
  107. X *
  108. X *    Indent    indent a line to the given indentation level
  109. X *
  110. X *  SYNOPSIS
  111. X *
  112. X *    LOCAL VOID Indent (indent)
  113. X *    int indent;
  114. X *
  115. X *  DESCRIPTION
  116. X *
  117. X *    Indent a line to the given level.  Note that this is
  118. X *    a simple minded but portable implementation.
  119. X *    There are better ways.
  120. X *
  121. X *    Also, the indent must be scaled by the compile time option
  122. X *    of character positions per nesting level.
  123. X *
  124. X */
  125. X
  126. LOCAL VOID Indent (indent)
  127. int indent;
  128. {
  129. X    REGISTER int count;
  130. X    AUTO char buffer[PRINTBUF];
  131. X
  132. X    indent *= INDENT;
  133. X    for (count = 0; (count < (indent - INDENT)) && (count < (PRINTBUF - 1)); count++) {
  134. X    if ((count % INDENT) == 0) {
  135. X        buffer[count] = '|';
  136. X    } else {
  137. X        buffer[count] = ' ';
  138. X    }
  139. X    }
  140. X    buffer[count] = EOS;
  141. X    (VOID) fprintf (_db_fp_, buffer);
  142. X    (VOID) fflush (_db_fp_);
  143. }
  144. X
  145. X
  146. /*
  147. X *  FUNCTION
  148. X *
  149. X *    FreeList    free all memory associated with a linked list
  150. X *
  151. X *  SYNOPSIS
  152. X *
  153. X *    LOCAL VOID FreeList (linkp)
  154. X *    struct link *linkp;
  155. X *
  156. X *  DESCRIPTION
  157. X *
  158. X *    Given pointer to the head of a linked list, frees all
  159. X *    memory held by the list and the members of the list.
  160. X *
  161. X */
  162. X
  163. LOCAL VOID FreeList (linkp)
  164. struct link *linkp;
  165. {
  166. X    REGISTER struct link *old;
  167. X
  168. X    while (linkp != NULL) {
  169. X    old = linkp;
  170. X    linkp = linkp -> next_link;
  171. X    if (old -> string != NULL) {
  172. X        free (old -> string);
  173. X    }
  174. X    free ((char *) old);
  175. X    }
  176. }
  177. X
  178. X
  179. /*
  180. X *  FUNCTION
  181. X *
  182. X *    StrDup   make a duplicate of a string in new memory
  183. X *
  184. X *  SYNOPSIS
  185. X *
  186. X *    LOCAL char *StrDup (string)
  187. X *    char *string;
  188. X *
  189. X *  DESCRIPTION
  190. X *
  191. X *    Given pointer to a string, allocates sufficient memory to make
  192. X *    a duplicate copy, and copies the string to the newly allocated
  193. X *    memory.  Failure to allocated sufficient memory is immediately
  194. X *    fatal.
  195. X *
  196. X */
  197. X
  198. X
  199. LOCAL char *StrDup (string)
  200. char *string;
  201. {
  202. X    REGISTER char *new;
  203. X
  204. X    new = DbugMalloc (strlen (string) + 1);
  205. X    (VOID) strcpy (new, string);
  206. X    return (new);
  207. }
  208. X
  209. X
  210. /*
  211. X *  FUNCTION
  212. X *
  213. X *    DoPrefix    print debugger line prefix prior to indentation
  214. X *
  215. X *  SYNOPSIS
  216. X *
  217. X *    LOCAL VOID DoPrefix (_line_)
  218. X *    int _line_;
  219. X *
  220. X *  DESCRIPTION
  221. X *
  222. X *    Print prefix common to all debugger output lines, prior to
  223. X *    doing indentation if necessary.  Print such information as
  224. X *    current process name, current source file name and line number,
  225. X *    and current function nesting depth.
  226. X *
  227. X */
  228. X  
  229. LOCAL VOID DoPrefix (_line_)
  230. int _line_;
  231. {
  232. X    lineno++;
  233. X    if (stack -> flags & NUMBER_ON) {
  234. X    (VOID) fprintf (_db_fp_, "%5d: ", lineno);
  235. X    }
  236. X    if (stack -> flags & PROCESS_ON) {
  237. X    (VOID) fprintf (_db_fp_, "%s: ", _db_process_);
  238. X    }
  239. X    if (stack -> flags & FILE_ON) {
  240. X    (VOID) fprintf (_db_fp_, "%14s: ", file);
  241. X    }
  242. X    if (stack -> flags & LINE_ON) {
  243. X    (VOID) fprintf (_db_fp_, "%5d: ", _line_);
  244. X    }
  245. X    if (stack -> flags & DEPTH_ON) {
  246. X    (VOID) fprintf (_db_fp_, "%4d: ", stack -> level);
  247. X    }
  248. X    (VOID) fflush (_db_fp_);
  249. }
  250. X
  251. X
  252. /*
  253. X *  FUNCTION
  254. X *
  255. X *    OpenFile    open new output stream for debugger output
  256. X *
  257. X *  SYNOPSIS
  258. X *
  259. X *    LOCAL VOID OpenFile (name)
  260. X *    char *name;
  261. X *
  262. X *  DESCRIPTION
  263. X *
  264. X *    Given name of a new file (or "-" for stdout) opens the file
  265. X *    and sets the output stream to the new file.
  266. X *
  267. X */
  268. X
  269. LOCAL VOID OpenFile (name)
  270. char *name;
  271. {
  272. X    REGISTER FILE *fp;
  273. X    REGISTER BOOLEAN newfile;
  274. X
  275. X    if (name != NULL) {
  276. X    if (strcmp (name, "-") == 0) {
  277. X        _db_fp_ = stdout;
  278. X        stack -> out_file = _db_fp_;
  279. X    } else {
  280. X        if (!Writable (name)) {
  281. X        (VOID) fprintf (_db_fp_, ERR_OPEN, _db_process_, name);
  282. X        perror ("");
  283. X        (VOID) fflush (_db_fp_);
  284. X        (VOID) XDelay (stack -> delay);
  285. X        } else {
  286. X        if (EXISTS (name)) {
  287. X            newfile = FALSE;
  288. X        } else {
  289. X            newfile = TRUE;
  290. X        }
  291. X        fp = fopen (name, "a");
  292. X        if (fp == NULL) {
  293. X             (VOID) fprintf (_db_fp_, ERR_OPEN, _db_process_, name);
  294. X            perror ("");
  295. X            (VOID) fflush (_db_fp_);
  296. X            (VOID) XDelay (stack -> delay);
  297. X        } else {
  298. X            _db_fp_ = fp;
  299. X            stack -> out_file = fp;
  300. X            if (newfile) {
  301. X            ChangeOwner (name);
  302. X            }
  303. X        }
  304. X        }
  305. X    }
  306. X    }
  307. }
  308. X
  309. X
  310. /*
  311. X *  FUNCTION
  312. X *
  313. X *    OpenProfile    open new output stream for profiler output
  314. X *
  315. X *  SYNOPSIS
  316. X *
  317. X *    LOCAL VOID OpenProfile (name)
  318. X *    char *name;
  319. X *
  320. X *  DESCRIPTION
  321. X *
  322. X *    Given name of a new file, opens the file
  323. X *    and sets the profiler output stream to the new file.
  324. X *
  325. X *    It is currently unclear whether the prefered behavior is
  326. X *    to truncate any existing file, or simply append to it.
  327. X *    The latter behavior would be desirable for collecting
  328. X *    accumulated runtime history over a number of separate
  329. X *    runs.  It might take some changes to the analyzer program
  330. X *    though, and the notes that Binayak sent with the profiling
  331. X *    diffs indicated that append was the normal mode, but this
  332. X *    does not appear to agree with the actual code. I haven't
  333. X *    investigated at this time [fnf; 24-Jul-87].
  334. X */
  335. X
  336. LOCAL VOID OpenProfile (name)
  337. char *name;
  338. {
  339. X    REGISTER FILE *fp;
  340. X    REGISTER BOOLEAN newfile;
  341. X
  342. X    if (name != NULL) {
  343. X    if (!Writable (name)) {
  344. X        (VOID) fprintf (_db_fp_, ERR_OPEN, _db_process_, name);
  345. X        perror ("");
  346. X        (VOID) fflush (_db_fp_);
  347. X        (VOID) XDelay (stack -> delay);
  348. X    } else {
  349. X        if (EXISTS (name)) {
  350. X        newfile = FALSE;
  351. X        } else {
  352. X        newfile = TRUE;
  353. X        }
  354. X        fp = fopen (name, "w");
  355. X        if (fp == NULL) {
  356. X        (VOID) fprintf (_db_fp_, ERR_OPEN, _db_process_, name);
  357. X        perror ("");
  358. X        (VOID) fflush (_db_fp_);
  359. X        (VOID) XDelay (stack -> delay);
  360. X        } else {
  361. X        _db_pfp_ = fp;
  362. X        stack -> prof_file = fp;
  363. X        if (newfile) {
  364. X            ChangeOwner (name);
  365. X        }
  366. X        }
  367. X    }
  368. X    }
  369. }
  370. X
  371. X
  372. /*
  373. X *  FUNCTION
  374. X *
  375. X *    CloseFile    close the debug output stream
  376. X *
  377. X *  SYNOPSIS
  378. X *
  379. X *    LOCAL VOID CloseFile (fp)
  380. X *    FILE *fp;
  381. X *
  382. X *  DESCRIPTION
  383. X *
  384. X *    Closes the debug output stream unless it is standard output
  385. X *    or standard error.
  386. X *
  387. X */
  388. X
  389. LOCAL VOID CloseFile (fp)
  390. FILE *fp;
  391. {
  392. X    if (fp != stderr && fp != stdout) {
  393. X    if (fclose (fp) == EOF) {
  394. X        (VOID) fprintf (stderr, ERR_CLOSE, _db_process_);
  395. X        perror ("");
  396. X        (VOID) fflush (stderr);
  397. X        (VOID) XDelay (stack -> delay);
  398. X    }
  399. X    }
  400. }
  401. X
  402. X
  403. /*
  404. X *  FUNCTION
  405. X *
  406. X *    DbugExit    print error message and exit
  407. X *
  408. X *  SYNOPSIS
  409. X *
  410. X *    LOCAL VOID DbugExit (why)
  411. X *    char *why;
  412. X *
  413. X *  DESCRIPTION
  414. X *
  415. X *    Prints error message using current process name, the reason for
  416. X *    aborting (typically out of memory), and exits with status 1.
  417. X *    This should probably be changed to use a status code
  418. X *    defined in the user's debugger include file.
  419. X *
  420. X */
  421. LOCAL VOID DbugExit (why)
  422. char *why;
  423. {
  424. X    (VOID) fprintf (stderr, ERR_ABORT, _db_process_, why);
  425. X    (VOID) fflush (stderr);
  426. X    (VOID) XDelay (stack -> delay);
  427. X    exit (1);
  428. }
  429. X
  430. X
  431. /*
  432. X *  FUNCTION
  433. X *
  434. X *    DbugMalloc    allocate memory for debugger runtime support
  435. X *
  436. X *  SYNOPSIS
  437. X *
  438. X *    LOCAL char *DbugMalloc (size)
  439. X *    int size;
  440. X *
  441. X *  DESCRIPTION
  442. X *
  443. X *    Allocate more memory for debugger runtime support functions.
  444. X *    Failure to to allocate the requested number of bytes is
  445. X *    immediately fatal to the current process.  This may be
  446. X *    rather unfriendly behavior.  It might be better to simply
  447. X *    print a warning message, freeze the current debugger state,
  448. X *    and continue execution.
  449. X *
  450. X */
  451. LOCAL char *DbugMalloc (size)
  452. int size;
  453. {
  454. X    register char *new;
  455. X
  456. X    new = malloc ( size );
  457. X    if (new == NULL) {
  458. X    DbugExit ("out of memory");
  459. X    }
  460. X    return (new);
  461. }
  462. X
  463. X
  464. /*
  465. X *    This function may be eliminated when strtok is available
  466. X *    in the runtime environment (missing from BSD4.1).
  467. X */
  468. X
  469. LOCAL char *strtok (s1, s2)
  470. char *s1, *s2;
  471. {
  472. X    static char *end = NULL;
  473. X    REGISTER char *rtnval;
  474. X
  475. X    rtnval = NULL;
  476. X    if (s2 != NULL) {
  477. X    if (s1 != NULL) {
  478. X        end = s1;
  479. X        rtnval = strtok ((char *) NULL, s2);
  480. X    } else if (end != NULL) {
  481. X        if (*end != EOS) {
  482. X        rtnval = end;
  483. X        while (*end != *s2 && *end != EOS) {end++;}
  484. X        if (*end != EOS) {
  485. X            *end++ = EOS;
  486. X        }
  487. X        }
  488. X    }
  489. X    }
  490. X    return (rtnval);
  491. }
  492. X
  493. X
  494. /*
  495. X *  FUNCTION
  496. X *
  497. X *    BaseName    strip leading pathname components from name
  498. X *
  499. X *  SYNOPSIS
  500. X *
  501. X *    LOCAL char *BaseName (pathname)
  502. X *    char *pathname;
  503. X *
  504. X *  DESCRIPTION
  505. X *
  506. X *    Given pointer to a complete pathname, locates the base file
  507. X *    name at the end of the pathname and returns a pointer to
  508. X *    it.
  509. X *
  510. X */
  511. X
  512. LOCAL char *BaseName (pathname)
  513. char *pathname;
  514. {
  515. X    register char *base;
  516. X
  517. X    base = strrchr (pathname, '/');
  518. X    if (base++ == NULL) {
  519. X    base = pathname;
  520. X    }
  521. X    return (base);
  522. }
  523. X
  524. X
  525. /*
  526. X *  FUNCTION
  527. X *
  528. X *    Writable    test to see if a pathname is writable/creatable
  529. X *
  530. X *  SYNOPSIS
  531. X *
  532. X *    LOCAL BOOLEAN Writable (pathname)
  533. X *    char *pathname;
  534. X *
  535. X *  DESCRIPTION
  536. X *
  537. X *    Because the debugger might be linked in with a program that
  538. X *    runs with the set-uid-bit (suid) set, we have to be careful
  539. X *    about opening a user named file for debug output.  This consists
  540. X *    of checking the file for write access with the real user id,
  541. X *    or checking the directory where the file will be created.
  542. X *
  543. X *    Returns TRUE if the user would normally be allowed write or
  544. X *    create access to the named file.  Returns FALSE otherwise.
  545. X *
  546. X */
  547. X
  548. LOCAL BOOLEAN Writable (pathname)
  549. char *pathname;
  550. {
  551. X    REGISTER BOOLEAN granted;
  552. #ifdef unix
  553. X    REGISTER char *lastslash;
  554. #endif
  555. X
  556. #ifndef unix
  557. X    granted = TRUE;
  558. #else
  559. X    granted = FALSE;
  560. X    if (EXISTS (pathname)) {
  561. X    if (WRITABLE (pathname)) {
  562. X        granted = TRUE;
  563. X    }
  564. X    } else {
  565. X    lastslash = strrchr (pathname, '/');
  566. X    if (lastslash != NULL) {
  567. X        *lastslash = EOS;
  568. X    } else {
  569. X        pathname = ".";
  570. X    }
  571. X    if (WRITABLE (pathname)) {
  572. X        granted = TRUE;
  573. X    }
  574. X    if (lastslash != NULL) {
  575. X        *lastslash = '/';
  576. X    }
  577. X    }
  578. #endif
  579. X    return (granted);
  580. }
  581. X
  582. X
  583. /*
  584. X *    This function may be eliminated when strrchr is available
  585. X *    in the runtime environment (missing from BSD4.1).
  586. X *    Alternately, you can use rindex() on BSD systems.
  587. X */
  588. X
  589. LOCAL char *strrchr (s, c)
  590. char *s;
  591. char c;
  592. {
  593. X    REGISTER char *scan;
  594. X
  595. X    for (scan = s; *scan != EOS; scan++) {;}
  596. X    while (scan > s && *--scan != c) {;}
  597. X    if (*scan != c) {
  598. X    scan = NULL;
  599. X    }
  600. X    return (scan);
  601. }
  602. X
  603. X
  604. /*
  605. X *  FUNCTION
  606. X *
  607. X *    ChangeOwner    change owner to real user for suid programs
  608. X *
  609. X *  SYNOPSIS
  610. X *
  611. X *    LOCAL VOID ChangeOwner (pathname)
  612. X *
  613. X *  DESCRIPTION
  614. X *
  615. X *    For unix systems, change the owner of the newly created debug
  616. X *    file to the real owner.  This is strictly for the benefit of
  617. X *    programs that are running with the set-user-id bit set.
  618. X *
  619. X *    Note that at this point, the fact that pathname represents
  620. X *    a newly created file has already been established.  If the
  621. X *    program that the debugger is linked to is not running with
  622. X *    the suid bit set, then this operation is redundant (but
  623. X *    harmless).
  624. X *
  625. X */
  626. X
  627. LOCAL VOID ChangeOwner (pathname)
  628. char *pathname;
  629. {
  630. #ifdef unix
  631. X    if (chown (pathname, getuid (), getgid ()) == -1) {
  632. X    (VOID) fprintf (stderr, ERR_CHOWN, _db_process_, pathname);
  633. X    perror ("");
  634. X    (VOID) fflush (stderr);
  635. X    (VOID) XDelay (stack -> delay);
  636. X    }
  637. #endif
  638. }
  639. X
  640. X
  641. /*
  642. X *  FUNCTION
  643. X *
  644. X *    _db_setjmp_    save debugger environment
  645. X *
  646. X *  SYNOPSIS
  647. X *
  648. X *    VOID _db_setjmp_ ()
  649. X *
  650. X *  DESCRIPTION
  651. X *
  652. X *    Invoked as part of the user's DBUG_SETJMP macro to save
  653. X *    the debugger environment in parallel with saving the user's
  654. X *    environment.
  655. X *
  656. X */
  657. X
  658. VOID _db_setjmp_ ()
  659. {
  660. X   jmplevel = stack -> level;
  661. X   jmpfunc = func;
  662. X   jmpfile = file;
  663. }
  664. X
  665. X
  666. /*
  667. X *  FUNCTION
  668. X *
  669. X *    _db_longjmp_    restore previously saved debugger environment
  670. X *
  671. X *  SYNOPSIS
  672. X *
  673. X *    VOID _db_longjmp_ ()
  674. X *
  675. X *  DESCRIPTION
  676. X *
  677. X *    Invoked as part of the user's DBUG_LONGJMP macro to restore
  678. X *    the debugger environment in parallel with restoring the user's
  679. X *    previously saved environment.
  680. X *
  681. X */
  682. X
  683. VOID _db_longjmp_ ()
  684. {
  685. X    stack -> level = jmplevel;
  686. X    if (jmpfunc) {
  687. X    func = jmpfunc;
  688. X    }
  689. X    if (jmpfile) {
  690. X    file = jmpfile;
  691. X    }
  692. }
  693. X
  694. X
  695. /*
  696. X *  FUNCTION
  697. X *
  698. X *    DelayArg   convert D flag argument to appropriate value
  699. X *
  700. X *  SYNOPSIS
  701. X *
  702. X *    LOCAL int DelayArg (value)
  703. X *    int value;
  704. X *
  705. X *  DESCRIPTION
  706. X *
  707. X *    Converts delay argument, given in tenths of a second, to the
  708. X *    appropriate numerical argument used by the system to delay
  709. X *    that that many tenths of a second.  For example, on the
  710. X *    AMIGA, there is a system call "Delay()" which takes an
  711. X *    argument in ticks (50 per second).  On unix, the sleep
  712. X *    command takes seconds.  Thus a value of "10", for one
  713. X *    second of delay, gets converted to 50 on the amiga, and 1
  714. X *    on unix.  Other systems will need to use a timing loop.
  715. X *
  716. X */
  717. X
  718. LOCAL int DelayArg (value)
  719. int value;
  720. {
  721. X    int delayarg = 0;
  722. X    
  723. #ifdef unix
  724. X    delayarg = value / 10;        /* Delay is in seconds for sleep () */
  725. #endif
  726. #ifdef AMIGA
  727. X    delayarg = (HZ * value) / 10;    /* Delay in ticks for XDelay () */
  728. #endif
  729. X    return (delayarg);
  730. }
  731. X
  732. X
  733. /*
  734. X *    A dummy delay stub for systems that do not support delays.
  735. X *    With a little work, this can be turned into a timing loop.
  736. X */
  737. X
  738. #ifndef unix
  739. #ifndef AMIGA
  740. XXDelay ()
  741. {
  742. }
  743. #endif
  744. #endif
  745. X
  746. X
  747. /*
  748. X *  FUNCTION
  749. X *
  750. X *    perror    perror simulation for systems that don't have it
  751. X *
  752. X *  SYNOPSIS
  753. X *
  754. X *    LOCAL VOID perror (s)
  755. X *    char *s;
  756. X *
  757. X *  DESCRIPTION
  758. X *
  759. X *    Perror produces a message on the standard error stream which
  760. X *    provides more information about the library or system error
  761. X *    just encountered.  The argument string s is printed, followed
  762. X *    by a ':', a blank, and then a message and a newline.
  763. X *
  764. X *    An undocumented feature of the unix perror is that if the string
  765. X *    's' is a null string (NOT a NULL pointer!), then the ':' and
  766. X *    blank are not printed.
  767. X *
  768. X *    This version just complains about an "unknown system error".
  769. X *
  770. X */
  771. X
  772. #if !unix && !(AMIGA || LATTICE || __TURBOC__ )
  773. LOCAL VOID perror (s)
  774. #if __STDC__
  775. const char *s;
  776. #else
  777. char *s;
  778. #endif
  779. {
  780. X    if (s && *s != EOS) {
  781. X    (VOID) fprintf (stderr, "%s: ", s);
  782. X    }
  783. X    (VOID) fprintf (stderr, "<unknown system error>\n");
  784. }
  785. #endif    /* !unix && !(AMIGA && LATTICE) */
  786. X
  787. /*
  788. X * Here we need the definitions of the clock routine.  Add your
  789. X * own for whatever system that you have.
  790. X */
  791. X
  792. #if unix
  793. X
  794. # include <sys/param.h>
  795. # if BSD4_3 || sun
  796. X
  797. /*
  798. X * Definition of the Clock() routine for 4.3 BSD.
  799. X */
  800. X
  801. #include <sys/time.h>
  802. #include <sys/resource.h>
  803. X
  804. /*
  805. X * Returns the user time in milliseconds used by this process so
  806. X * far.
  807. X */
  808. X
  809. LOCAL unsigned long Clock ()
  810. {
  811. X    struct rusage ru;
  812. X
  813. X    (VOID) getrusage (RUSAGE_SELF, &ru);
  814. X    return ((ru.ru_utime.tv_sec * 1000) + (ru.ru_utime.tv_usec / 1000));
  815. }
  816. X
  817. #else
  818. X
  819. LOCAL unsigned long Clock ()
  820. {
  821. X    return (0);
  822. }
  823. X
  824. # endif
  825. X
  826. #else
  827. X
  828. #if AMIGA
  829. X
  830. struct DateStamp {        /* Yes, this is a hack, but doing it right */
  831. X    long ds_Days;        /* is incredibly ugly without splitting this */
  832. X    long ds_Minute;        /* off into a separate file */
  833. X    long ds_Tick;
  834. };
  835. X
  836. static int first_clock = TRUE;
  837. static struct DateStamp begin;
  838. static struct DateStamp elapsed;
  839. X
  840. LOCAL unsigned long Clock ()
  841. {
  842. X    register struct DateStamp *now;
  843. X    register unsigned long millisec = 0;
  844. X    extern VOID *AllocMem ();
  845. X
  846. X    now = (struct DateStamp *) AllocMem ((long) sizeof (struct DateStamp), 0L);
  847. X    if (now != NULL) {
  848. X    if (first_clock == TRUE) {
  849. X        first_clock = FALSE;
  850. X        (VOID) DateStamp (now);
  851. X        begin = *now;
  852. X    }
  853. X    (VOID) DateStamp (now);
  854. X    millisec = 24 * 3600 * (1000 / HZ) * (now -> ds_Days - begin.ds_Days);
  855. X    millisec += 60 * (1000 / HZ) * (now -> ds_Minute - begin.ds_Minute);
  856. X    millisec += (1000 / HZ) * (now -> ds_Tick - begin.ds_Tick);
  857. X    (VOID) FreeMem (now, (long) sizeof (struct DateStamp));
  858. X    }
  859. X    return (millisec);
  860. }
  861. X
  862. #else
  863. X
  864. LOCAL unsigned long Clock ()
  865. {
  866. X    return (0);
  867. }
  868. X
  869. #endif    /* AMIGA */
  870. X
  871. #endif    /* unix */
  872. X
  873. #ifdef AMIGA
  874. XXDelay(x)
  875. int x;
  876. {
  877. X    if (x) Delay(x);    /* fix Delay bug in AmigaDOS */
  878. }
  879. #endif
  880. X
  881. SHAR_EOF
  882. chmod 0640 dmake/dbug/dbug/dbug.c ||
  883. echo 'restore of dmake/dbug/dbug/dbug.c failed'
  884. Wc_c="`wc -c < 'dmake/dbug/dbug/dbug.c'`"
  885. test 44504 -eq "$Wc_c" ||
  886.     echo 'dmake/dbug/dbug/dbug.c: original size 44504, current size' "$Wc_c"
  887. rm -f _shar_wnt_.tmp
  888. fi
  889. # ============= dmake/dbug/dbug/dbug.h ==============
  890. if test -f 'dmake/dbug/dbug/dbug.h' -a X"$1" != X"-c"; then
  891.     echo 'x - skipping dmake/dbug/dbug/dbug.h (File already exists)'
  892.     rm -f _shar_wnt_.tmp
  893. else
  894. > _shar_wnt_.tmp
  895. sed 's/^X//' << 'SHAR_EOF' > 'dmake/dbug/dbug/dbug.h' &&
  896. /******************************************************************************
  897. X *                                          *
  898. X *                               N O T I C E                      *
  899. X *                                          *
  900. X *                  Copyright Abandoned, 1987, Fred Fish              *
  901. X *                                          *
  902. X *                                          *
  903. X *    This previously copyrighted work has been placed into the  public     *
  904. X *    domain  by  the  author  and  may be freely used for any purpose,     *
  905. X *    private or commercial.                              *
  906. X *                                          *
  907. X *    Because of the number of inquiries I was receiving about the  use     *
  908. X *    of this product in commercially developed works I have decided to     *
  909. X *    simply make it public domain to further its unrestricted use.   I     *
  910. X *    specifically  would  be  most happy to see this material become a     *
  911. X *    part of the standard Unix distributions by AT&T and the  Berkeley     *
  912. X *    Computer  Science  Research Group, and a standard part of the GNU     *
  913. X *    system from the Free Software Foundation.                  *
  914. X *                                          *
  915. X *    I would appreciate it, as a courtesy, if this notice is  left  in     *
  916. X *    all copies and derivative works.  Thank you.                  *
  917. X *                                          *
  918. X *    The author makes no warranty of any kind  with  respect  to  this     *
  919. X *    product  and  explicitly disclaims any implied warranties of mer-     *
  920. X *    chantability or fitness for any particular purpose.              *
  921. X *                                          *
  922. X ******************************************************************************
  923. X */
  924. X
  925. X
  926. /*
  927. X *  FILE
  928. X *
  929. X *    dbug.h    user include file for programs using the dbug package
  930. X *
  931. X *  SYNOPSIS
  932. X *
  933. X *    #include <local/dbug.h>
  934. X *
  935. X *  SCCS ID
  936. X *
  937. X *    @(#)dbug.h    1.11 9/5/87
  938. X *
  939. X *  DESCRIPTION
  940. X *
  941. X *    Programs which use the dbug package must include this file.
  942. X *    It contains the appropriate macros to call support routines
  943. X *    in the dbug runtime library.
  944. X *
  945. X *    To disable compilation of the macro expansions define the
  946. X *    preprocessor symbol "DBUG_OFF".  This will result in null
  947. X *    macros expansions so that the resulting code will be smaller
  948. X *    and faster.  (The difference may be smaller than you think
  949. X *    so this step is recommended only when absolutely necessary).
  950. X *    In general, tradeoffs between space and efficiency are
  951. X *    decided in favor of efficiency since space is seldom a
  952. X *    problem on the new machines).
  953. X *
  954. X *    All externally visible symbol names follow the pattern
  955. X *    "_db_xxx..xx_" to minimize the possibility of a dbug package
  956. X *    symbol colliding with a user defined symbol.
  957. X *    
  958. X *    The DBUG_<N> style macros are obsolete and should not be used
  959. X *    in new code.  Macros to map them to instances of DBUG_PRINT
  960. X *    are provided for compatibility with older code.  They may go
  961. X *    away completely in subsequent releases.
  962. X *
  963. X *  AUTHOR
  964. X *
  965. X *    Fred Fish
  966. X *    (Currently employed by Motorola Computer Division, Tempe, Az.)
  967. X *    hao!noao!mcdsun!fnf
  968. X *    (602) 438-3614
  969. X *
  970. X */
  971. X
  972. X
  973. /*
  974. X *    Internally used dbug variables which must be global.
  975. X */
  976. X
  977. #ifndef DBUG_OFF
  978. X    extern int _db_on_;            /* TRUE if debug currently enabled */
  979. X    extern FILE *_db_fp_;        /* Current debug output stream */
  980. X    extern char *_db_process_;        /* Name of current process */
  981. X    extern int _db_keyword_ ();        /* Accept/reject keyword */
  982. X    extern void _db_push_ ();        /* Push state, set up new state */
  983. X    extern void _db_pop_ ();        /* Pop previous debug state */
  984. X    extern void _db_enter_ ();        /* New user function entered */
  985. X    extern void _db_return_ ();        /* User function return */
  986. X    extern void _db_pargs_ ();        /* Remember args for line */
  987. X    extern void _db_doprnt_ ();        /* Print debug output */
  988. X    extern void _db_setjmp_ ();        /* Save debugger environment */
  989. X    extern void _db_longjmp_ ();    /* Restore debugger environment */
  990. # endif
  991. X
  992. X
  993. /*
  994. X *    These macros provide a user interface into functions in the
  995. X *    dbug runtime support library.  They isolate users from changes
  996. X *    in the MACROS and/or runtime support.
  997. X *
  998. X *    The symbols "__LINE__" and "__FILE__" are expanded by the
  999. X *    preprocessor to the current source file line number and file
  1000. X *    name respectively.
  1001. X *
  1002. X *    WARNING ---  Because the DBUG_ENTER macro allocates space on
  1003. X *    the user function's stack, it must precede any executable
  1004. X *    statements in the user function.
  1005. X *
  1006. X */
  1007. X
  1008. # ifdef DBUG_OFF
  1009. #    define DBUG_ENTER(a1)
  1010. #    define DBUG_MALLOC(a1)
  1011. #    define DBUG_RETURN(a1) return(a1)
  1012. #    define DBUG_VOID_RETURN return
  1013. #    define DBUG_EXECUTE(keyword,a1)
  1014. #    define DBUG_PRINT(keyword,arglist)
  1015. #    define DBUG_2(keyword,format)        /* Obsolete */
  1016. #    define DBUG_3(keyword,format,a1)        /* Obsolete */
  1017. #    define DBUG_4(keyword,format,a1,a2)    /* Obsolete */
  1018. #    define DBUG_5(keyword,format,a1,a2,a3)    /* Obsolete */
  1019. #    define DBUG_PUSH(a1)
  1020. #    define DBUG_POP()
  1021. #    define DBUG_PROCESS(a1)
  1022. #    define DBUG_FILE (stderr)
  1023. #    define DBUG_SETJMP setjmp
  1024. #    define DBUG_LONGJMP longjmp
  1025. # else
  1026. #    define DBUG_ENTER(a) \
  1027. X    auto char *_db_func_, *_db_file_; \
  1028. X    int _db_level_; \
  1029. X    _db_enter_ (a,__FILE__,__LINE__,&_db_func_,&_db_file_,&_db_level_)
  1030. #    define DBUG_MALLOC(a) \
  1031. X    auto char *_db_func_, *_db_file_; \
  1032. X    int _db_level_; \
  1033. X    malloc_init();\
  1034. X    _db_enter_ (a,__FILE__,__LINE__,&_db_func_,&_db_file_,&_db_level_)
  1035. #    define DBUG_LEAVE \
  1036. X    (_db_return_ (__LINE__, &_db_func_, &_db_file_, &_db_level_))
  1037. #    define DBUG_RETURN(a1) return (DBUG_LEAVE, (a1))
  1038. /*   define DBUG_RETURN(a1) {DBUG_LEAVE; return(a1);}  Alternate form */
  1039. #    define DBUG_VOID_RETURN DBUG_LEAVE; return
  1040. #    define DBUG_EXECUTE(keyword,a1) \
  1041. X    {if (_db_on_) {if (_db_keyword_ (keyword)) { a1 }}}
  1042. #    define DBUG_PRINT(keyword,arglist) \
  1043. X    {if (_db_on_) {_db_pargs_(__LINE__,keyword); _db_doprnt_ arglist;}}
  1044. #    define DBUG_2(keyword,format) \
  1045. X    DBUG_PRINT(keyword,(format))        /* Obsolete */
  1046. #    define DBUG_3(keyword,format,a1) \
  1047. X    DBUG_PRINT(keyword,(format,a1))        /* Obsolete */
  1048. #    define DBUG_4(keyword,format,a1,a2) \
  1049. X    DBUG_PRINT(keyword,(format,a1,a2))    /* Obsolete */
  1050. #    define DBUG_5(keyword,format,a1,a2,a3) \
  1051. X    DBUG_PRINT(keyword,(format,a1,a2,a3))    /* Obsolete */
  1052. #    define DBUG_PUSH(a1) _db_push_ (a1)
  1053. #    define DBUG_POP() _db_pop_ ()
  1054. #    define DBUG_PROCESS(a1) (_db_process_ = a1)
  1055. #    define DBUG_FILE (_db_fp_)
  1056. #    define DBUG_SETJMP(a1) (_db_setjmp_ (), setjmp (a1))
  1057. #    define DBUG_LONGJMP(a1,a2) (_db_longjmp_ (), longjmp (a1, a2))
  1058. # endif
  1059. X
  1060. SHAR_EOF
  1061. chmod 0640 dmake/dbug/dbug/dbug.h ||
  1062. echo 'restore of dmake/dbug/dbug/dbug.h failed'
  1063. Wc_c="`wc -c < 'dmake/dbug/dbug/dbug.h'`"
  1064. test 6259 -eq "$Wc_c" ||
  1065.     echo 'dmake/dbug/dbug/dbug.h: original size 6259, current size' "$Wc_c"
  1066. rm -f _shar_wnt_.tmp
  1067. fi
  1068. # ============= dmake/dbug/dbug/dbug.uue ==============
  1069. if test -f 'dmake/dbug/dbug/dbug.uue' -a X"$1" != X"-c"; then
  1070.     echo 'x - skipping dmake/dbug/dbug/dbug.uue (File already exists)'
  1071.     rm -f _shar_wnt_.tmp
  1072. else
  1073. > _shar_wnt_.tmp
  1074. sed 's/^X//' << 'SHAR_EOF' > 'dmake/dbug/dbug/dbug.uue' &&
  1075. begin 650 dbug.Z
  1076. M'YV,"@*"&$BPH,&#" T2 2$$1!401P0FG&AP" @H<MZ<D1.F#0@B9<34.7,F
  1077. MC9LS%\.,61/F3!F)%&/*!"$F#\R9. <:D5.&# @C:>:@"4@481($1Y,Z0;"T
  1078. M*14$3Z-*03"UZA,$5[,20;"U:Q4$7\,.03"V;%2H4),B19H5*]:F3)D6C1F$
  1079. M39LW<^B *&.GC)P\(.!DW-@1!!F^9=B\@=.FC!N]CNVDR>BF\6,0=][(H8,&
  1080. M,(@W9A0@Y%QFH)N.I06_D7QX#H@Y;QJ_UJP7M.&0(TN>!&%&91HV:>CD<3&P
  1081. MRIPZ8=BPL3D:35 0=,*L*>.:]$ SFCU^-C,PS$#5A+7?<3X&S<#G(,:$@1-&
  1082. M#)O2VT4?'//F<4;E)E'NQ5-F3!TZ:=0WD&V?D29'8(-QU(9K8;CA4QEX=&12
  1083. M?M"A\1)")M'AUVELO!:=AML5:.&!$/;W'X7@*3@'<2!08>$<I0D'!W4#AH90
  1084. MBAVY=L=O'8I1&D]F^,633W2\ 4(8KD&HH1P<WB8227ZY-H=)8\1HH7P&'?:D
  1085. M2P<^Y\8;>K&W68C6E>@?@+OAV :+1438!ASON19?<^C)"!^!6N;FUWENC,%&
  1086. M'8<-9%T8"!!J*!D((*JH& @PZNB1#KZ&P!R33JIHHHDZVFBC3NHIQQQ8%J0:
  1087. M:SUA%IQYUH4%%EAP-:564E@@$.NL&^ 0 P*WYKI!#I_-R!&:*,V11UYEK#D7
  1088. M14^X49IMUJGF7K$,S@';&&F$H:%/.W)V6U^*P8%B@CF&2I!)W;DQ4&23U6>9
  1089. M7J9J"\(9;[SATWY+-MDIE)^"\!QGUHH[T&'<+E:JFG)J&"ET1H* 1AA]#00<
  1090. M'72\-^"!('S)9[W)^:NO&WG)4<>ZU@;H!HLM.B<G>G4<E]QRIH'9'8)O/.L1
  1091. M=@>2IC' B0E\X)1]EF:AOG.P\-F!UCI<!I+L"O5&'6S,ZZ/0&P/8AK6),7=0
  1092. M;VW\5BW%V9I7(7P9;IC<T&<TF(8>(=<G-!G6>M=Q'6/040=/06O<H$_TV?=&
  1093. MAV8H=@>9/ZM)4QD4WNL2&20GP2YZ86@,HQP!IDR0L^]IQYMF TT=]FD]?P=N
  1094. M&XU]"O5X"8?!D\9UN '<="P7J3##I1U7'F\2 F=Z<)YU+>C/,(<WD(_Y::SY
  1095. M8V&8U!/4=Y&1AAEI'#]T8+25ZGJ#8(ZXEQN24;8NBXIK_%QRL!T)L\Q"(V8N
  1096. MS5]OF[.O0H_G6/J]*^B]G'?U-:_KD%Z?O;J.Z:6[=X))0]8 U##,I0YK6C/=
  1097. MS7"#+Z%ASGP5,U*>\.6"8TTD6>FKWIX6YB"A?2%1'Q3#!^OP091\SUP0Z@B<
  1098. M[L2=_$5-;&Q8X);\PB(A]"<,*2M-<$# DSC483(T"AN3QF:2MX$,0 *R3>-N
  1099. M]#FAW4U?=)!3REH"'S*\@4819-=A9G0P 4'*,W.8$;4RAA#UL$<,6@,0%@ED
  1100. MG?V8"(GFTE^Z*M,_J.WP>VRX0QB&93<[%(\-[9'8$W>DG'/QYTQ@BV.#/(,N
  1101. M[?5O=T7[FL8$!T48L8$[A.R0F?ZCPY$-) GF"@,9E ='H?&L2E $VI$T1I\W
  1102. MO0=$@5$)2UPR$-V)[S5B7%X:QC"0'%),B+VI$M2.I)Q)?DY.F"&/UW)X'G9E
  1103. M\G?P&54:#C,O6TXI:X"4@PQS0R$SMB>-S5O10%STG'*:2RBF@T-ZZD,'CN0%
  1104. M80,RD 4)\H5ZVO.>-RE(#(A3!2<D 0NJ]$X[15DLTZTA1$&@@@FHP)#$=(@)
  1105. M[=&,M303S@H216,YD4D+0! #$+3@HA=%"!&$4(4C..1Q(&A"@Y#3H8S&Y EQ
  1106. MB]F>9) #H<4@!SBP04BOEAW7V$:(32IB.S_6O[29RWT\V8M*O(:S;NWI=:!J
  1107. M#N$H]H8[N$%H*6,IR^+D&F\^2V@T\\A/'P-#P]%08Z!\S<>F]A>A^4@]S/P@
  1108. M&4(XPA(&U%Q '=L$N91*:;:&E?69$K'Z!!B59$1:O?)+R';32/X])FB0\LE;
  1109. M<0BC5 :ECW\,9(R,M#+U.35?._0K%O,F6(.-P3.&Q4M4#])9@FTL?7- C1P=
  1110. M^1B+8K0@+BJ-7.F* !(B "7L60D5]?4FO-"H/BQS&W#.@ :]A+$, W-,<H3S
  1111. M&3=H;)/ BE^.A":C7:X,,&V FWFX6J$&<10&@?%+E1[C1 ?9#03)HXYSSY8:
  1112. MZ;)!.%#KKGJ4XYD8H!>>()#!?WVU7CJ03 A6RU(9F.>&PKDME\SCI44$4P;5
  1113. M5$E:F!-6&\2P-YI4#W#4*8UZK(L0'_&P)W"3GI'TX!<CZ<YBY6F02US3PQ\.
  1114. M25 ):R-LYE8EP![&MC+)[77VYK?" >>=JKRE#W=YT($<!W2F\TR(=G>A^:SG
  1115. MFP\+9XVH/)#=-JJNOXVE<%W"IJ6FY\IH?!A@1CPX[SDH#:S1*F"D^RR?8$YY
  1116. ML:WSD?1B':G!QSO:U<YE,82]-TQG7C21\G.I988\% Y^1X*#:@)(M8&T<FH'
  1117. M XZR[":',Q#UL1;-B9':]$:108<CJ'P-&JI:.#.D+FZF!L%[N&5I=M[GM@GI
  1118. M6U4+0JZ7.;E8:6@!8>! GN\2!-/*HA@(4A8\EYKD,,2#(SR?[5T0*2LO%-HB
  1119. M9T*-$R,]X3]P^$_Z_/BGXW)G90XDFAO 6 <QP(A=H(':=!*,D[QVR(^0T^R*
  1120. M\DD1(S%!@#L\$JP#BV-?+UJ7O/PUNZ9<,=20 =<(<76?X+AOB!?$WP#7B\0'
  1121. M;JZ!HG)ZN.R/+DMU[>QJ&PW<GHF_VY,8I<YN:70(MUXT71K=[5@.J&2>Q!HN
  1122. MF\A:W" TK]C'?"2'E,MDY3YJZ=%F]QEPBUO6QJOEJ4PCVRG[1PX\><S/1961
  1123. M"U=<U!=)F7DP!X?%7*RLABM<7BH-X)55=>L$P:ZI=2>2W^B%7'O-]H)Q>-^O
  1124. M=QL$4N@)$./&Y7L-R.E):^?1M(._M3O(= ]W*<QE/A 4Y,6*_TG!Q'Q]FL;,
  1125. M2^=E8)&0#],;IM$![H>/N;@[MO@D.YYM<IB7D# ' LO3X3!83P')<HOZ$RN/
  1126. M)QR';W\X&!2//*>5*]00RYY=8<= NS8VRNB7Y#"U#EWZB4$?TN"EW78[O&&:
  1127. MJ9=Y[_/6MUU&T;;S=*E& ^Q1D*;_(R0UJ7'VI%(WL%3]R(HIT0-<4X[B5*?O
  1128. M!P4((( $6!54016O@A1-@  +V( )F 1G$14/: 4(0($66 0(@($:^!%<T8%$
  1129. MH($9F(%"@  C6(*J$A9'@  IN((KJ((J^("MPA0MN((M@A91 8(:6!9D019(
  1130. M@  ]^(,QZ$]KD111@ !%>(0G"!8XF(%3@ !-^(3O9Q"@A#$=(E0><T2FAD<\
  1131. M(4J%13O8M#6UUC-P<'JC821W\4YJ$CJ0=4HZ='>ND57&9AW,\REZD7<GH3$:
  1132. M4AX-YD/P\1ZFHRR(@UMYX"W[M1S#) (!=!EKIR'K,@<B0!"F4V4&441^<2U\
  1133. M EM+@W,B)B^E431")%\H\GV/Q5T_0Q^',3\GAGR_42I/A%W.$UF%1S>F5SB3
  1134. M]W2#=A IE#6 ^%KF92V,.(;P=!A+HHLU-R)6DAH9(3- 8W0$(606AF))54Y+
  1135. M$C)],3I3YW)>$QR*Q7V.EAC*<X<(<1=)!8OPI1EW@GA0\T0*(S"NQE^%=W.H
  1136. MQ"Q7PD0Q4SFJA&?TT1<WYB,T<XQ-IWIZ\5:Q02-%8B391$M%LD!CTRY>0WL4
  1137. M)AE+,P<LLS&/8XD>0C6-:!K0121&XB,:PQ/UTQ,L A2>EE0==4+[H4(2(X_[
  1138. M,H@LY#D9!V>26!!VB!)YB 9[6 >AMU,Y,0)4\B>!P@.7%R N@ 8^P&\Q,3RU
  1139. M9SIG, 9.U&EVD *]ER%'TFECL /CMS 'H@),:0=;T 58Z5)[T'M<ER'<@0(B
  1140. MT)5;  -=  (]  (E0 9<X 8B\)1GX)5LF0)AB7\@\ (J0)8%H0(#$7CO9!MJ
  1141. M I@$H0(O@)@(8I:U)P(]\)96I"QNV0-S*0)ZV7M]$(5\B1 D.3>E$0.,61 8
  1142. M$9,- Q);0B%4,'PY^1(@)1-%T!>/(6?I>#!PZ(Y'8@9+ HD+YX=(]AJ(P1$Q
  1143. MA"'32''YQ3N44RQ25TB#<SFIXQ-/1!]8UQ_7PB)!0(8'P1G/47890HJEH2QW
  1144. M,)&4N!FETIB7<9&,V#_TDS+LXI$(<1C3)77;1A#)LBQB )&2 QM_(FW[8B37
  1145. M!"> <1BO=(QM8#?*44-EH!O)]H8JXXY65"'?PQME\#=^]H:/\1M?XQD+TQ=X
  1146. MF# \,2.15"87FE3/B%C!"1A^)C[@21,C 3UP\(9P4$$((60PDC<^<8:U<9^1
  1147. M(R5[<R("TI^ST1BK]C>&$12:164:4XMT #6$8R"[DQ$CX34ZEHFH9(J;"#J/
  1148. M%$QIE <LP$I;*&U*9'CX5BW/ D\F-@?94AZEDD0' AIFD&Z)ACH\HQ]M9!$(
  1149. M4F%=1QVP470$\9E))0-WE9*NM"SG5DS-P1,QPIIIP(<5AY2=>1 ;-0/MYWX:
  1150. M,U(E=5+TMU(+^:@% 5-%LG\T95/_YWXNY9-] I2E(92W1Y1&Z:@30943Y)8@
  1151. M  -8V7M*B0),Z915>9=2Z6R7D:M[F1,QMI5J"9:]-Y:=Z9?F20=GF990*:LE
  1152. M@ >7:9=1"0**R9C+4WL3I'F)R*R/J99L":UR29?4NI9=D)G)^I>/*IB )U\A
  1153. M<ICKNIBENCRD]Q%%$'^,V:W-&IF&41^E$9F7B:X9-0+.MSR:R9F<VJ=I4)*E
  1154. M(0.CJ1 ,]!%&6J:KJ8>+JI.@\IHQ401F=I.M"57-)">BY$?$,V/E,B]X-K(-
  1155. M$ATSIC&V1#=BQ"[X0P9YT'F[! )V("4?<K,J04!&94I4NHFGB!"KX1<6(DI"
  1156. M WRQX2V )&TU!D2-6#Y(0JB]!"-0 Z\'L85LDV:XPZ1T, 8D\P3ZR$Q3UD84
  1157. M5J)[.AO[*3(:LV0KL55'0P;5823)N2 ,.1L\)K3PH;58ACLG*SS%0SPFT;?4
  1158. ME4SO U^SN$(#,0((P+B.FP8( +F2:P8(0+F6>RF*4@8(H+F<:[F56[E.E@<;
  1159. MMC<B.XZNXYX'07K&8V<4\YP+MKJ_,[7SXD4'%V&"XI)R@B<,M$!3,B2B]S/P
  1160. MJ+=G9BXF-C6!(I$+VUPL(XX_$K>:I3$UH5;!<:3,%VVF)H^EX;B-V[B2&[F1
  1161. MZ[F7BRF9N[GDNV"?:[F[^FE1!$]3\[6H,H\'4;T[ZT5L5(J<Z%;B]B5ZT5D3
  1162. M]J%YBF'YXG9W@(<FLWN\@UR>\;0@^4B70S$Z%AV/%WO%L2IA$80/."NR(BL$
  1163. M,03&A*=OX'68\QSH8QTG, (GD!Y:V;-[,CV2=C1=TG$_,X=Y 5A_T@97]3M/
  1164. M!T$0*B<P BT.DP;3 8EQ5)5H-%!_(<21=Q"ILX6P<1IE>F(=8WXB0S)^"A^2
  1165. MBI*YJ+@LN5H&,45D1JD:F[ )L5$T,*FD>A"6*G\H57_W)\8#X:DR=2"AZG\Y
  1166. M=<8]^9. DJI#^09%>92V&KA+:974VJL9197 FI6F8ZW%&JPX@:P#.RYF4*\?
  1167. MB*^=J:_?"I7F*J[3NJMX>:Z,/!,C$'=O%GWXYY>CR:Z$"7V!=LKR^LCG$<D+
  1168. M9J^4S)>6C);\.IG_:IET*; ]*<K*0\HXL9FNZL95# (S\+!-8([M*DI'BA$>
  1169. M#,('8AQ4!,;47,UV[,8&L5$U8,9A7!!IC*D'PL:;*L9P#*K]=U-U_'Y&@ #K
  1170. MW,Y)V$]QT10Z:!8VF!9#R!9ND15!6(,1:(!5$00( - "/<]DL81%  (&C<&S
  1171. M(M !'= -R( ,2( #.(!,@  5?=$&C; #<04UQR,7.29N*FLNW&"[$5%/UT9>
  1172. M!4YK!,P$T49>)D*]95=B-DOP$;W+-J<O\Y\2HXO4%&C)M$M#449+RTG5$<,]
  1173. M2U%C$Z9"MV$T1!!I-32X5W"# S%^L4!WP3$#!4MMM''<YW&ET1@QUF!ST :D
  1174. MN)V? S3>,ZCK4BK -S=3PBW#H1,+"YH@4,;[\C-*R=6Q1C,$+,)'G6\=HB;H
  1175. M-Z^GFL<@H*K*P\>MZE+*.G\'XEI*PS0^P4P\H!C[]0)D\"1];*VM?,>%'2@B
  1176. MD-DC490B,,SA",BX*LB<3,@Y8<A6^<DR,:R*C,G&*I:,R1,E02POK!>R>%]"
  1177. MDP9X -LYH20;$C6T$U. 77LIX$1%D@;*7:N=F<9?4 1.0 5%( 6/.3R8*=PX
  1178. M(=U0( 5/, 1%, 53$,AW::Z\K'[H@P+ +:LQL /Z@@>'O:N\9 (FP,E; -Q=
  1179. MD,G\>@(M< +P#=PKL *:Y\B<BJ;!,3NI?=[ZO04Q<*X@8.!NK!Z55<(GH ,/
  1180. M2Q'>7053@ 2U9P(+[I4-+@/GFM[8_#M;N ;<[5*;V9DMSI?K'>#RS0/T+>,#
  1181. M7N 9#G\E]07?G035?<EGX(A"@Y9J&9=M^98E(.3Q7:[ZG0(FSI>]K1=O&4Q%
  1182. MDMRXVMSF+>)X4.(KGE&U+ )QN<E1_N0Y\>+X)]U24 144 52X 2U!P-D3A'"
  1183. MG.,44<PT0.=&\-?5TB$8H1$*DE*!2W/7G!!"U@8(8.B(;BB%4BC=*[EN@ "/
  1184. M'NF\\6K\*2<P&UAI\,3H S->YV#K!EA0=C!01YF]PGU,J;XB>S"D$4?(=R*[
  1185. MX7-,E"$4(H=ZGM3<L73F\25NT *+(6VGOCT\>>($L5$VP,W!3A#?[-B ;G_C
  1186. MG+#E/%/G/*H:_1.349B%R@9"H[^[9"5%TUG8:U8'HM>!Q6E@H];]4YZ2 6AG
  1187. M^[]I"U^I)4[C9#+]2B/ZNT >IW$9X1'6P;=<2UW?;J6P.#73X1HIZQ[-QEJ%
  1188. M%*NJV+2FUDYPMN=+^1KY(3'K_L%ZFF&BRV'87JD>R!4E2((D^,XSJ((?5/((
  1189. M\ 5MD17MS,[LO/+M#%::<6'I,S5CD!'[P1X<(S)SVYSVIQRZ9]H@4!?AH^T?
  1190. M]S-X/"5)U$)M=+11S1NK^"_BFRF;XBAUT%M6/Q*_E?5GX ((P/5>CP8( /9B
  1191. MKS%FD._I8]ECP_1[ GI%"GQ5'M>U)V3ZB/1X]=D]H3'&J$I]YJYSGX5QU$:B
  1192. MK1_!^R]!X? B 4<WLWV:D0>ZUXSRSO9Y$QU%1$P=8AVJVV 4U\"2])X,Q%<T
  1193. M?UCMHTR4_SH-(X?9P8%=X?$@;X(4#!8C?P0F7_(*+2NSCP5>W_5=?_M>K_M=
  1194. M7_NU#V0Q(62IWQ4?S_HG^/JQ?_(&'801"!4&[<]4X>XU;R0F$59%731[M<(+
  1195. MXS\^ SO7158WEC[B;BZ=5RJ(?NB'KNB&TNB1&^F0#NG<HQ?A]4XF9AWZ"!@R
  1196. MC)T&(0+8I5F/&'3DXAWC[T2ZN2>==1A^8CI&E>I);!#\J,R+)")[TO]E2G._
  1197. M6QK#K_K%+_(NN(+)S^,378 ':!7YC!4$+=XAJ(%/Z(1.^(1.Z(32;_.W:! N
  1198. MD6S&ED-VICJ 41^HY"L^[3K5?_J W_E5C1#C433EGSZ"HT>N81+>=V@,^;NE
  1199. M,?RJ7_PB[X(KF/P\/M$$^,Y/Z(1.^(,^Z(/2GQ'"(R\C5]0B-C=95X>=OR>+
  1200. M6!K1&UN2\>IFRQ/XR<4%L8A_=C#OEETJ.J'H61IB(+O5E3Z1?Q\> CG@>!#L
  1201. M(2VLZ!K!P2"=IKZ_6QK#K_K%+_(NN(+)S^,378 '6!4P&,],T?P,)?TVGV0Y
  1202. M=#]O8$Q4"3_DAK$A@NOINRZ:/QY +3Y4CM15R,4%<;I7*G,B&>^E,?RJ7_PB
  1203. M[X(KF/Q? /UI'H(:V/QKWOIL?H!5L<^?GV,.53"\D_W:U!PARCO.MV76<759
  1204. MIW&4;FH+XQH^\CY;J*;0Z5X(P1-RPR0,@K/)H9, AM(KTVJ4/L4$41<M5;\A
  1205. M!KC3KR,>;6+MR#(0 B>!6RKD<ASN5@9\J(C4J?/,.*-&PDR6W_E^X9W'7>40
  1206. M3TGH81+>=V@N.W7><7V1$G3?'E883N=4CM0=T@(C0 8ZH!<=!:C'K#%"!E_H
  1207. MG^B+OO[>Z^CO+^F3/G&QIK1GT& L5C"\(P(M, )DH -T\(@> CFOCB3=L4WX
  1208. M$H;MU&$> CDGT5X^P1[20I _D_U$TVFHKC%H208Z0 >8*=4N#4)?%M-AQD.I
  1209. MDZ)J)6FT,1!0BB98E.Y(*E(=/U*K'_*M7U(NN(+)S^,338#O_(1.Z(0_Z(,^
  1210. M*/T9\;O;:3H XA_9Y"&0PUA.'"?_2'EE'QL$7!K#K_K%+_(NN(+)S^,378 '
  1211. M6!4P&,],T?P,]?DN-G4D3 8GW#<M 8MT%B?70>EL.QJH5CBV1,)T<,)]TQ*_
  1212. M6QI4CM1\0^E96-2.P4HK(SUH@*C0(4#4T3Y3-RB=ANH@( (Q4)<#(0(R4)<G
  1213. M.Q B, ,B(*,'X01@ A_\(K,_X]U2X.,,%1T#GY)QTSH(0 <(0 <(0 =W@ !W
  1214. M@ !W@ "9@0!O@ !O@ "<U6FHWCZG0L"QTQ_U 9V=IKX1'U9%$\4E'2E'!F\M
  1215. MU*W/BQ#DAK&:YQA^8EP^02YBTC\O$A3,*%(1&_GWX2&0<Q)=A>G6?DMJ+P?'
  1216. M"1\BT (C4)=D3V1559XV#6CTH1CG5&&F0S4^<62JG/U$TVFH+J,'P;&SD_U$
  1217. MTVGJ&U 2?Q(2,ZPJ3#%]TQ)#IAQ5=?<E5ECFTNLB,S;7!YQB0C4^<62J_.OJ
  1218. M&7*,=K,)*57O(I/G TA;/Q!3,)""ND(,PA,8WLW"[E$@< /&_G[)OL::VE)N
  1219. M_.QR'.WI#/0XT0(C0 8Z0 <Z\ 9TW@(C0 8L8!(L ',Z\*;#HP-&H -,@)1.
  1220. M ";PP2_L\I [.I%T]AXHV_E/U;,Z;VGF!4V)GV?O(5DH:K]ZTR%1O!LBT (C
  1221. M( + 3Q&C][J8?[W<0>O(#?'C;TH9OS?T!9U<7! BX 0A4)>J5!*RF6@8GN-.
  1222. M$ *RZN:"Z00MT%&"Z0(N0!R *IBBJ3'%O,UW71I4CM0M-?ZU)/K$M4(9N<,&
  1223. M"B^0PQG:T=:?(I/+03). ";PP2]\)N]>XC+*XG6WLQP$7!H^\DYZA*()\Z#'
  1224. M7>5[GNJRAW6T9Z/!H?/=<3H8<@;35RK(-Z#+,=@#B\=!N<=]W'N-C5*0O6J2
  1225. M?=.IBO9L@-F:;92<W7NFZB>&'=J:C0:E/9670>5(W2$H0&XZR=HX@=N%OR=4
  1226. M26XZV>4((>$N)=W4;=W8C994CM1LL-V,Z=U2X.,,A98,1@9U^9@,YA-Q>=Q5
  1227. MON=UB;/)H9-.WN4QD:TH0&XZ"0(^P%$X+L;DII/6.N6UWB$H0&XZZ5$<%><S
  1228. M8>;JY]U2X.,,A9917I>/&>6J%)=UB;/)H9-.WN4Q@>9JSN9NC@+DII-Q/A%S
  1229. M+NP'4<PU0.<%D>?(#?%&0.ELV\T)49]'0@8DR[*E87D#Z>Z H;_KE/-1'7"P
  1230. MH7D QFS@F)V\\])@IA_!1=/G43#;WTQ.UD[U<083Z1CT,3=4Y!KMN!R.,U1Q
  1231. M YIX(R\4HCL(7%VET3]'_$3^NA^A)8J+0V*X:&:3/G%3/!!-D+@2 R&A)8I1
  1232. M9$KB=21)8CHLPQ-RPR1<7!"N0QUFU(FR%B]P(#13 Q@FED-D@+^086:R8Q[<
  1233. M>9X*3!T$#!]D2R"]*&D906D@,ORJ7_PB[X(KF/Q? /UI'H(:V/QKWOIL?H!5
  1234. ML<^8,_RJ7_PB[X(KF/Q?8($56($ICQ4/./Q<D?Q? /UI'H(:V/QKWOIL?H!5
  1235. M$82 ._WH1^=C# (X8.SOE^QKK*DMY<;/+L?1GLY 3P4=^4--4WA4CM0M14E>
  1236. M!&CO;,'W_$\9/"NA2RQD#>I,VXF1HFD'I3O6<7T.@N&H-P:\Q.O'7>40/SPN
  1237. MP$M4CM1LX *\U )-\R1(*60BT )-\R2/^.L,K'QL4#"\HQ@$Y< )HVE-UFLV
  1238. M@Q ><Z&R<1R21AOE2 9,0R,C_#,O#6; )4M4Q":'Y.HV";\&0>5('=AG_3_K
  1239. M%.IVQAVF3WT83N?'7>40WU& *JEE7 -(Z1+)1C5%O2R(IVI55?=.S[ @8 .#
  1240. MG5&BZ5(.ZU(ZY5(R<.<N%0,"-NV<6LPZ)>S'7>40WU& *JEE7 .#[IF4'FNS
  1241. MUG*GYANOCAYT]AY.XQGL(2V%8S.</T,U\S,G0 <GW#<M\5J6'[&1?Q\> CDG
  1242. M,9)SG50W@(KPHZ0#$>6M9O;P<WT'(P)4CM0=\E$(,0)TH -&(JDR( +H9\V4
  1243. M*NS9# *\\E&4*E+Q!\[+WL9N_.QR'.WI?.PRP0<$X0-4CM3#F5%\0!!\0! ^
  1244. M0.5(/9P9Q0<$P0<$P0-4CM3#F5%\0! \0.5(/9P9Y; NQ0<$X0-4CM3#F5%\
  1245. M0!!\0! ^0.5(/9P9Q0<$P0<$P0<$X0-4CM3#F5%\0!!\0!!\0! \0.5(/9P9
  1246. MQ0<$P0<$P0-4CM3#F5%\0! \0.5(/9P9I5,NQ0/#,^V<6LPW0.<%0>5(W2$M
  1247. M, )TH -&(JD.V\T)P;&STS]'[#J8PQ-RPR2\8?;>,?ZJ1&WJ88DUH3$GX ,G
  1248. MK/GPTS]'##U428XGP ,GK/GP R&A)8I+"EANH"QQ4RK1JX\ LE\T83H[+\#N
  1249. M[KZ%PYV/)=6H:Q!',R4L@QW/:;CG5&&F0S62!1@'61IX!L$7!OP404[5@6K+
  1250. M@G@;HSSJH2'7SV=YKT>ISB?!L>>LU%D 1N5(S3=F?ZNNT^H@(@,AL-R7HQQ5
  1251. M52K1NT0',:<2T]:?(I-G5DBN0^5(7?E&TNH@$@,A\+OP,3S&Y.>%\35QI*2Q
  1252. M2!VF-V04(P,A<+*6MC+2 [\&0>5(W5+CWQUETVNVI&/]41_S\NMU-! S(*,'
  1253. MD>?(#?%GIASE&1R6U$)M_2DRV3I&TNH@(@,A (LQ$ )=*E7FPA-RPR2E$OGW
  1254. MP;Z!&_I _8^49__)H9.:/P,A8#>1 B':B#C3[@1@PNU\EO=>8H;64AX4TC]'
  1255. MS)V7(0+#XP./V, $O+=E(#=, CU4*0(\H-V# U>5531])D#^./RJ7_PB[X(K
  1256. MF/S3'8(:R/SU;-TAJ('0+P6 ._V8@20GME2E0B[#PUVH1B%ZY!KZ>SV:Y1-Y
  1257. M4 8&YM3Z7Q!ZE+NJ@UJZ^51M]/D),_RJ7_PB[X(KF/P\/M$$^,Y/Z(1.^(,^
  1258. MZ(.UA"2&5&J[P2_Z7Q >1R&3)1MT]AZ!6#+EY$I:QB]\]C.__DA'IO\%$=E-
  1259. M TV>8_'24IY(<BZF,Y%( CW2DND2PX:C;Z4=7"7?2*>\D_^6UED -ORJ7_PB
  1260. M[X(KF/P\/M$$^,Y/Z(1.^(,^Z(/G@4QZVC][OAQN)AE3\L2N@[E2KRDB<?6]
  1261. M=09:'V8HH)U=95XFEAER<&A5N321$KWCF5U+E)W%4G8<<<0#,?RJ7_PB[X(K
  1262. MF/P\/M$$^,Y/Z(1.^(,^Z(,H@  H@  H@ "XNNB&(@<(( <(( <(T&E:_UMV
  1263. M@ !V@ !V@ !>B0!;@ !;@  .CBNX@BM=@ !=@ !=@ #GB@ I@  I@ ":=QY8
  1264. MJCQ4,Y'=H9M/A:0BU?$CM?HAW_HEY8(KF/S3'8(:R/SU;-TAJ('0+P4H@  H
  1265. M@  H@ !HB0 B@  B@  B</Z)ONCK[[V._OZ1+@((( ((( ((@)D(D ((D ((
  1266. MH'F?S\?=+.P>=5[&_G[)OL::VE)N_.QR'.WI#/3U*6M(DT5EX)VGIA++@G@1
  1267. M1'W&UDIK]'3U0<#P\7J0MQ=8IQDL,@54XH]4CM2!?=;=ZAK!P<4%$>75!5L0
  1268. M#'MVAHY?$XU%'4VJE>E;6B,$?(X .2!_SSO#.+@M!3RO/@<UWQ%ZIB_<T6>9
  1269. MX3B*ER-5^9TN(RQ]@@:405^!6#*28_F=OR?]V30XYK*0 R+!X5.(5UVP!<&P
  1270. M9V>(1Y$:@K0X6RWI<P)O< )D#T@H,:PJS*<#X01@ A_\PBX6 P(G\ 8G3%QP
  1271. MHF7P0WI\I_\%87MW WGG@G6:L=R^=@)O<,)W:S&_KI["UR Z>S>0EZ3H"(O>
  1272. M<0)O<,+_HTB=IKZ9<S0<4[7EV4;EG\0& 7J)XP)% #4B0.5(W2$M, )TH -O
  1273. MP **<09L+ZDR\(B8L31-@QF0 R(V,QJHMBR(]UHBH!AG 'HB@*!P55D$\LX6
  1274. M?,__E,&S<A[F;KWU8>]_!%F!QJ!RQD.I0SNZ;;A'!3G9Y3J7!W,?:2W6PR_G
  1275. M='M"0HI+PUP[K$KZ*SX!)!ND-4W;R+:$ML."ND+H9\W6;,W'+NP;%0,=]5&4
  1276. M*E+Q!\[+WL9N_.QR'.WIC)3O_(1.Z(0�(ICQ4NS\ZH[X'%'_*M7U(NN(+)
  1277. MS^,378 '6!4P&,],T?P,]= -R- #O8-E ?W@G<]8,>V%/GQF,]8WK6(P0P8I
  1278. M!@*("#F/80:/F!=YL)*(=QY<7!#6,?RJ7_PB[X(KF/P\/M$%>(!5 8/QS!3-
  1279. MSU"?S\?33@6<I1R[9DG4>;W<H:2\8?:U>[.?CQ?'.9,$D?_=T6GJ"T\GBOH>
  1280. M6/PAW_HEY8(KF/P\/M$%>(!5 8/QS!3-SU"?3_T, @(O#68H,6^9$7LR>A!7
  1281. M8"$P_!SSEAD2O!X@"EHPW(F=IKY0AV3U"Q\G0 8G0/: I!^7"(DT&;$$$?GW
  1282. M01!1?!+#A"3C,L0B\%$(,0)DP +SEAFQ%P,L,&^9$7LRP (NX (NH -T4)?_
  1283. M2'EE'QN%)YV7_F;@>!"?GS#/06?O$8@E4QJDQW?^8R$P[!<ZY!H6<P)D<,)]
  1284. MTQ(;0\";J#<=$L6[ :1TMI*(QQMF/_JH[X'%'_*M7U(NN(+)S^,378 '6!4P
  1285. M&,],T?Q4 +C3WZA!-HC>Q5].Y-//9&(>8R[U(4QW:S'SEAFQQ\4%4;O-0P;Y
  1286. ME3#"Z!?$6$O;#P+SEAFQQR!)-25GT& 1MK(-3, B-C=9%R;):(\H8!WSEAFQ
  1287. MQR D"CEDY1.]UD:?_P9)BG@_K"R-7S+OTRQG_4PFYC&A5#8FT3Y39S.<W[OE
  1288. M.6^9$7N0!6"Y&'75-9&U>[/=P<0$ 1INMB3R!?P40:/]41_0V6GJ"T_>,?RJ
  1289. M7_PB[X(KF/P\/M$%>(!5 8/QS!3-SU"?3_T,<I$1G,0&8<D>D@<[%U:1%,6O
  1290. MKH[^^CS,F[X9F9"QSEZC[QA^8EP^02YBTC\O\ASAPR]\9B%K1F34*9/+ ;W]
  1291. M,9 &-_'P\?FETVGJ:\#H@1Y#BK.W\[P(87],G2^&"3F/<6Z=ANI5&3MU(&G1
  1292. M$XA!SP;ADT7PP2_Z7Q 6<_/ 02WL IY!EV0*S(I\]C/.!V(-W+Z.X_ G89T,
  1293. MXNY4W:;<D1=Y\![<E1G/PQF(^AK5UR'#K_K%+_(NN(+)S^,378 '6!4P&,],
  1294. MT?Q4 +C37[K1!"2*5:8@-Z<[G5IWZQUH,!*E$5;]@A!1?!(C.==)A0.J5E5%
  1295. MO2R(I_FDQW<RBVJ>GL0*IMG63,W"GLT<!:@?1:DB%7_@O.QM[,;/+L?1GL['
  1296. M+A-\ (F=-@<Z@-\D+JO'[%)\0! ^0.5(/9P9Q0<$P0<$P6!DH -.'RF22N5(
  1297. M/9P9Q0<$P0<$X0-4CM3#F5%\0!!\0!!\0! ,1@8ZX/21 JA4CM3#F5%\0!!\
  1298. M0!!\0! ^0.5(/9P9Q0<$P0<$P0<$P0<$P6!DH -.'RD=1>5(/9P9Q0<$P0<$
  1299. MP0<$P0<$$>4Z ,6FITJBZ5)\0!!\0!!\0! \0.5(/9P9Q0<$P0<$P0<$$>4Z
  1300. M ,6FITH.ZU)\0!!\0! \0.5(/9P9Q0<$P0<$$>4Z ,6FITHZY5)\0! \0.5(
  1301. M/9P9I5,NQ0/#,^V<6LPX0.<%0>5(W2$M, )DH -TH -&<LS=3.@_HZ2\8?;6
  1302. M,?RJ7_PB[X(KF/P\/M$%>(!5 8/QS!3-SU#2;_-))K_EF9"G[;Z%Y]7_2'DC
  1303. M',.4[O<_/3O6\?EOD*1C<'7P?@468BXU>1YR0F?O0090<_@M([.H5@;'.9,$
  1304. MH:0?O;Y%8QWOH9ONWFDFT3ZG G,;\WQ&!?P400425"R!E=6QDQC4>;W<4;LW
  1305. M^_EXH?E*VJ41-]?CR"NJ5E4%PSM17DL6 L.E0>5('=AG?8N36&B'=K>6'[&1
  1306. M?Q\> CF[(0(M, )DP )1K@-O( *#G5%4CM1LH -0;'HZ ,6FITJBZ5)4CM1L
  1307. MH -0;'HZ ,6FITH.ZU)4CM1LH -0;'HZ ,6FITHZY5)4CM1LH -0;'HZ ,6F
  1308. MITHR<.<N)0-W#O2<6LPY0.?'7>40WP(C0 8L$.4Z8"1W3JG"GLT<):D?1:DB
  1309. M%7_@O.QM[,;/+L?1GLY KSBJ!!N-4:&WT;M'"F!TX_"$EW:O?C=XB&I_QG$%
  1310. MPUDAQV@W._[/<V2J//[[-J/R_CUC@'Q'9B'8,G5M= )F<,*\ 4CZ,:PJ_$M_
  1311. M#[\*]B1AV$X=YB&0<Q)4/-?CZ%_G43 'C'@@1O:U'MAG;;AQY#%Q9$LH;6L=
  1312. MYB&0\^HB\%$(,0)DH -O2N5(S08Z8 0ZP 0Z\ 8B\+NE<0)&<,)]TQ+7HV_+
  1313. SHAR_EOF
  1314. true || echo 'restore of dmake/dbug/dbug/dbug.uue failed'
  1315. fi
  1316. echo 'End of part 3, continue with part 4'
  1317. echo 4 > _shar_seq_.tmp
  1318. exit 0
  1319. exit 0 # Just in case...
  1320.