\documentclass{book}
%\newcommand{\VolumeName}{Volume 2: Axiom Users Guide}
%\input{bookheader.tex}
\pagenumbering{arabic}
\mainmatter
\setcounter{chapter}{0} % Chapter 1

\usepackage{makeidx}
\makeindex
\begin{document}
\begin{verbatim}
\start
Date: Wed, 1 Apr 2009 07:42:59 -0600
From: Tim Daly
To: list
Subject: 20090331.01.tpd.patch (download.html add ubuntu, fedora7 binaries)

The Axiom binary download page has been updated with 2 new binaries
for the March 2009 Axiom release... the Ubuntu 32 bit binary and
the Fedora 7 binary

\start
Date: Wed, 1 Apr 2009 08:05:10 -0600
From: Tim Daly
To: list
Subject: 20090401.01.tpd.patch (bookvol0 add Richard Jenks bio)

Added to Book Volume 0: Axiom Jenks and Sutor


+----------------------------------------------------------------------------+
|                      Richard Dimick Jenks                                  |
|           Axiom Developer and Computer Algebra Pioneer                     |
|                                                                            |
|                                                                            |
| Richard D. Jenks was born on November 16, 1937 in Dixon, Illinois,         |
| where he grew up. During his childhood he learned to play the organ        |
| and sang in the church choir thereby developing a life-long passion        |
| for music.                                                                 |
|                                                                            |
| He received his PhD in mathematics from the University of Illinois at      |
| Urbana-Champaign in 1966. The title of his dissertation was                |
| ``Quadratic Differential Systems for Mathematical Models" and was          |
| written under the supervision of Donald Gilles. After completing his       |
| PhD, he was a post-doctoral fellow at Brookhaven National Laboratory       |
| on Long Island. In 1968 he joined IBM Research where he worked until       |
| his retirement in 2002.                                                    |
|                                                                            |
| At IBM he was a principal architect of the Scratchpad system, one of       |
| the earliest computer algebra systems(1971). Dick always believed that     |
| natural user interfaces were essential and developed a user-friendly       |
| rule-based system for Scratchpad. Although this rule-based approach        |
| was easy to use, as algorithms for computer algebra became more            |
| complicated, he began to understand that an abstract data type             |
| approach would give sophisticated algorithm development considerably       |
| more leverage. In 1977 he began the Axiom development (originally          |
| called Scratchpad II) with the design of MODLISP, a merger of Lisp         |
| with types (modes). In 1980, with the help of many others, he              |
| completed an initial prototype design based on categories and domains      |
| that were intended to be natural for mathematically sophisticated          |
| users.                                                                     |
|                                                                            |
| During this period many researchers in computer algebra visited IBM        |
| Research in Yorktown Heights and contributed to the development of the     |
| Axiom system. All this activity made the computer algebra group at IBM     |
| one of the leading centers for research in this area and Dick was          |
| always there to organize the visits and provide a stimulating and          |
| pleasant working environment for everyone. He had a good perspective       |
| on the most important research directions and worked to attract            |
| world-renowned experts to visit and interact with his group. He was an     |
| ideal manager for whom to work, one who always put the project and the     |
| needs of the group members first. It was a joy to work in such a           |
| vibrant and stimulating environment.                                       |
|                                                                            |
| After many years of development, a decision was made to rename             |
| Scratchpad II to Axiom and to release it as a product. Dick and Robert     |
| Sutor were the primary authors of the book Axiom: The Scientific           |
| Computation System. In the foreword of the book, written by David and      |
| Gregory Chudnovsky, it is stated that ``The Scratchpad system took its     |
| time to blossom into the beautiful Axiom product. There is no rival to     |
| this powerful environment in its scope and, most importantly, in its       |
| structure and organization.'' Axiom was recently made available as         |
| free software. See http://savannah.nongnu.org/projects/axiom.              |
|                                                                            |
| Dick was active in service to the computer algebra community as            |
| well. Here are some highlights. He served as Chair of ACM SIGSAM           |
| (1979-81) and Conference Co-chair (with J. A. van Hulzen) of EUROSAM       |
| '84, a precursor of the ISSAC meetings. Dick also had a long period of     |
| service on the editorial board of the Journal of Symbolic                  |
| Computation. At ISSAC '95 in Montreal, Dick was elected to the initial     |
| ISSAC Steering Committee and was elected as the second Chair of the        |
| Committee in 1997. He, along with David Chudnovsky, organized the          |
| highly successful meetings on Computers and Mathematics that were held     |
| at Stanford in 1986 and MIT in 1989.                                       |
|                                                                            |
| Dick had many interests outside of his professional pursuits including     |
| reading, travel, physical fitness, and especially music. Dick was an       |
| accomplished pianist, organist, and vocalist. At one point he was the      |
| organist and choirmaster of the Church of the Holy Communion in            |
| Mahopac, NY. In the 1980s and 1990s, he sang in choral groups under        |
| the direction of Dr. Dennis Keene that performed at Lincoln Center in      |
| New York city.                                                             |
|                                                                            |
| Especially important to him was his family: his eldest son Doug and        |
| his wife Patricia, his son Daniel and his wife Mercedes, a daughter        |
| Susan, his brother Albert and his wife Barbara, his sister Diane           |
| Alabaster and her husband Harold, his grandchildren Douglas, Valerie,      |
| Ryan, and Daniel Richard, and step-granddaughter Danielle. His             |
| longtime companion, Barbara Gatje, shared his love for music,              |
| traveling, Point O'Woods, and life in general.                             |
|                                                                            |
| On December 30, 2003, Dick Jenks died at the age of 66, after an           |
| extended and courageous battle with multiple system                        |
| atrophy. Personally, Dick was warm, generous, and outgoing with many       |
| friends. He will be missed for his technical accomplishments, his          |
| artist talents, and most of all for his positive, gentle, charming         |
| spirit.                                                                    |
|                                                                            |
| Prepared by Bob Caviness, Barry Trager, and Patrizia Gianni with           |
| contributions from Barbara Gatje, James H. Griesmer, Tony Hearn,           |
| Manuel Bronstein, and Erich Kaltofen.                                      |
|                                                                            |
+----------------------------------------------------------------------------+

\start
Date: Fri, 3 Apr 2009 05:34:23 +0200
From: Michael Becker
To: list
Subject: axiom-mar2009 release : search with '*' does not work.

        hi,

        Entering 'cat*' in the input area of 'Glossary' gives:
        'no glossary items match d*' .


        Browsing with wildcards does not work too.


        Browsing with 'eigenMatrix' works only when clicking on =
'Operations'.

\start
Date: Fri, 3 Apr 2009 00:25:26 -0500
From: Tim Daly
To: Michael Becker
Subject: Re: axiom-mar2009 release : search with '*' does not work.

Michael,

Thanks for the bug report. I'll look into it. -- Tim

\start
Date: Fri, 3 Apr 2009 05:21:53 -0600
From: Tim Daly
To: list
Subject: 20090403.01.tpd.patch (remove gcl-2.6.7, gcl-2.6.8pre binaries)

Older versions of GCL were removed. -- Tim

\start
Date: 03 Apr 2009 06:42:26 -0500
From: Gabriel Dos Reis
To: list
Subject: PLMMS 2009: First Call for Paper


		  The ACM SIGSAM 2009 International
		Workshop on Programming Languages for
		    Mechanized Mathematics Systems
			      PLMMS 2009

		   Munich, Germany; August 21, 2009
		     http://plmms09.cse.tamu.edu/

			   CALL FOR PAPERS


The ACM SIGSAM 2009 International Workshop on Programming Languages
for Mechanized Mathematics Systems will be co-located with TPHOLs 2009.

General Information

The scope of this workshop is at the intersection of programming
languages (PL) and mechanized mathematics systems (MMS). The latter
category subsumes present-day computer algebra systems (CAS),
interactive proof assistants (PA), and automated theorem provers
(ATP), all heading towards fully integrated mechanized mathematical
assistants. Areas of interest include all aspects of PL and MMS that
meet in the following topics, but not limited to:

  * Dedicated input languages for MMS: covers all aspects of languages
    intended for the user to deploy or extend the system, both
    algorithmic and declarative ones. Typical examples are tactic
    definition languages such as Ltac in Coq, mathematical proof
    languages as in Mizar or Isar, or specialized programming
    languages built into CA systems.

  * Mathematical modeling languages used for programming: covers the
    relation of logical descriptions vs. algorithmic content. For
    instance the logic of ACL2 extends a version of Lisp, that of Coq
    is close to Haskell, and some portions of HOL are similar to ML
    and Haskell, while Maple tries to do both simultaneously. Such
    mathematical languages offer rich specification capabilities,
    which are rarely available in regular programming languages. How
    can programming benefit from mathematical concepts, without
    limiting mathematics to the computational world view?

  * Programming languages with mathematical specifications: covers
    advanced mathematical concepts in programming languages that
    improve the expressive power of functional specifications, type
    systems, module systems etc. Programming languages with dependent
    types are of particular interest here, as is intentionality vs
    extensionality.

  * Language elements for program verification: covers specific means
    built into a language to facilitate correctness proofs using
    MMS. For example, logical annotations within programs may be
    turned into verification conditions to be solved in a proof
    assistant eventually. How need MMS and PL to be improved to make
    this work conveniently and in a mathematically appealing way?

These issues have a very colorful history. Many PL innovations first
appeared in either CA or proof systems first, before migrating into
more mainstream programming languages.  This workshop is an
opportunity  to present the latest innovations in MMS design that may
be relevant to future programming languages, or conversely novel PL
principles that improve upon implementation and deployment of MMS.
Why are all the languages of mainstream CA systems untyped?  Why
are the (strongly typed) proof assistants so much harder to use than
a typical CAS?  What forms of polymorphism exist in mathematics?
What forms of dependent types may be used in mathematical modeling?
How can MMS regain the upper hand on issues of "genericity" and
"modularity"?  What are the biggest barriers to using a more
mainstream language as a host language for a CAS or PA/ATP?

PLMMS 2007 was held as a satellite event of, and PLMMS 2008 was
a CICM 2008 workshop.

Submission Details

  * Submission deadline: May 11, 2009 (Apia, Samoa time)
  * Author Notification:  June 22, 2009
  * Final Papers Due: July 10, 2009
  * Workshop: August 21, 2009

   Submitted papers should be in portable document format (PDF),
   formatted using the ACM SIGPLAN style guidelines
   (http://www.acm.org/sigs/sigplan/authorInformation.htm). The length
   is restricted to 10 pages, and the font size 9pt. Each submission
   must adhere to SIGPLAN's republication policy, as explained on the
   web. Violation risks summary rejection of the offending submission.

  Papers are exclusively submitted via EasyChair

          http://www.easychair.org/conferences?conf=plmms09

   We expect that at least one author of each accepted paper attends
   PLMMS 2009 and presents her or his paper.

   Accepted papers will appear in the ACM Digital Library.

Links

  * http://plmms09.cse.tamu.edu/, the PLMMS 2009 workshop web site
  * http://tphols.in.tum.de/, the THOPLs 2009 conference web site

Program Committee

  * Clemens Ballarin, aicas GmbH
  * Gabriel Dos Reis, Texas A&M University (Co-Chair)
  * Jean-Christophe Filli=E2tre, CNRS Universit=E9 Paris Sud
  * Predrag Janinic, University of Belgrade
  * Jaakko J=E4rvi, Texas A&M University
  * Florina Piroi, Johannes Kepler University
  * Laurent Th=E9ry, INRIA Sophia Antipolis (Co-Chair)
  * Makarius Wenzel, Technische Universit=E4t M=FCnchen

\start
Date: Fri, 3 Apr 2009 09:58:30 -0600
From: Tim Daly
To: list
Subject: 20090403.02.tpd.patch (bookvol5 collect top level loop code)

The strategy is to do a depth-first collection of functions and move
them into the interpreter or compiler documents. This is the start
of the second layer of that collection for the top level loop.

\start
Date: Sat, 4 Apr 2009 13:54:06 -0700 (PDT)
From: Cliff Yapp
To: list
Subject: REDUCE open source?

Just saw the note on the Maxima list from David Billinghurst about a
sourceforge project for Reduce:

http://reduce-algebra.sourceforge.net/

It looks like this may be the (formerly?) commercial REDUCE, based on
their history blurb.  If so, it's probably worth calling some
attention to - if nothing else as a source for ideas/algorithms.  It's
sourceforge page lists the BSD license.

\start
Date: Sat, 4 Apr 2009 16:54:53 -0500
From: Tim Daly
To: Cliff Yapp
Subject: Re: REDUCE open source?

Thanks for the pointer.
Actually, Tony Hearn gave us the sources a few years ago although
we have not been distributing them.

\start
Date: Sat, 04 Apr 2009 17:56:12 -0400
From: William Sit
To: list
Subject: Dr. Kovacic died April 1

Dear Friends of Jerry Kovacic:

It is with great sadness that I am passing on the news that
Jerry Kovacic died of brain cancer at around 2:30 pm on
April 1, 2009. He was 67.

Jerry is well known for his eponymous algorithm for solving
linear second order differential equations, which was
implemented in Scratchpad (Axiom). His early work in the
late 1960's on the inverse problem for differential Galois
theory paved the way for a complete solution of this
difficult problem. He has been a visiting scholar at the
Department of Mathematics at The City College of The City
University New York since his retirement from a software
company, and he has made significant contributions to a
modernized treatment of differential algebraic geometry. For
the last few years, Jerry was an organizer for the Kolchin
Seminar in Differential Algebra, and until a month ago,
despite his fight with brain cancer, he continued to attend
the Kolchin
Seminar at the Graduate Center, CUNY, and participated in
discussions. 

We will miss him dearly.

\start
Date: Sat, 4 Apr 2009 17:29:35 -0600
From: Tim Daly
To: list
Subject: 20090404.01.tpd.patch (bookvol0 fix cross references)

Book Volume 0: Axiom Jensk and Sutor has been reviewed to correct
missing cross references (based on an observation by Ralf). The 
updated pdf is at:

http://axiom-developer.org/axiom-website/documentation.html

Several new domains are going to be added as part of the next update.

====================================================================
diff --git a/books/bookvol0.pamphlet b/books/bookvol0.pamphlet
index 08a195a..3487c16 100644
--- a/books/bookvol0.pamphlet
+++ b/books/bookvol0.pamphlet
@@ -13,6 +13,38 @@
 \setcounter{topnumber}{50}
 \setcounter{bottomnumber}{50}
 
+
+%%
+%% sechead consolidates standard page indexing
+%% it replaces the \section tag for domains so we
+%% create proper cross references and index entries
+%%
+\newcommand{\domainhead}[1]{% e.g. \domainhead{domain}
+\section{#1}
+\label{#1}%
+\index{{#1}}}%
+
+%%
+%% domainref consolidates standard page indexing
+%% it replaces the \ref tag for domain
+%%
+\newcommand{\domainref}[1]{% e.g. \domainref{domain}
+{\tt #1}{ \ref{#1} on page~\pageref{#1}}}
+
+%%
+%% sectionref consolidates standard page indexing
+%% it replaces the \ref tag for labels
+%%
+\newcommand{\sectionref}[1]{% e.g. \sectionref{domain}
+{section~\ref{#1} on page~\pageref{#1}}}
+
+%%
+%% figureref consolidates standard page indexing
+%% it replaces the \ref tag for labels
+%%
+\newcommand{\figureref}[1]{% e.g. \sectionref{domain}
+{figure~\ref{#1} on page~\pageref{#1}}}
+
 % spadcommands are the actual text that you type at the axiom prompt
 \newcommand{\spadcommand}[1]%
 {\begin{flushleft}{\tt #1}\end{flushleft}\vskip .1cm }
@@ -568,8 +600,8 @@ As another example of a HyperDoc facility, suppose that you want to
 compute the roots of $x^{49} - 49x^4 + 9$ to 49 digits (as in our
 previous example) and you don't know how to tell Axiom to do this.
 The ``basic command'' facility of HyperDoc leads the way.  Through the
-series of HyperDoc windows shown in Figure \ref{fig-intro-br} on
-page~\pageref{fig-intro-br} and the specified mouse clicks, you and
+series of HyperDoc windows shown in \figureref{fig-intro-br} 
+and the specified mouse clicks, you and
 HyperDoc generate the correct command to issue to compute the answer.
 
 \subsection{Interactive Programming }
@@ -3737,7 +3769,7 @@ examples on-line, execute Axiom expressions, and generate
 graphics.  If you are in a graphical windowing environment, it is
 usually started automatically when Axiom begins.  If it is not
 running, issue {\tt )hd} to start it.  We discuss the basics of
-HyperDoc in Chapter \ref{ugHyper} on page~\pageref{ugHyper}.  
+HyperDoc in \sectionref{ugHyper}.
 
 To interrupt an Axiom computation, hold down the \index{interrupt} 
 {\bf Ctrl} (control) key and press {\bf c}.  This brings you back to 
@@ -3913,7 +3945,7 @@ $$
 \label{ugIntroTypes}
 Everything in Axiom has a type.  The type determines what operations
 you can perform on an object and how the object can be used.
-Chapter~\ref{ugTypes} on page~\pageref{ugTypes} is dedicated to the
+The \sectionref{ugTypes} is dedicated to the
 interactive use of types.  Several of the final chapters discuss how
 types are built and how they are organized in the Axiom library.
 
@@ -3971,8 +4003,8 @@ refers to a value.  To {\sl assign} a value to a variable,
 \index{variable!naming} the operator ``{\tt :=}'' \index{assignment}
 is used.\footnote{Axiom actually has two forms of assignment: 
 {\it immediate} assignment, as discussed here, and {\it delayed
-assignment}.  See Section \ref{ugLangAssign} on page~\pageref{ugLangAssign}
-for details.}  A variable initially has no restrictions on the kinds
+assignment}.  See \sectionref{ugLangAssign} for details.}  
+A variable initially has no restrictions on the kinds
 of \index{declaration} values to which it can refer.
 
 This assignment gives the value $4$ (an integer) to
@@ -4092,7 +4124,7 @@ such trouble spots.
 Objects of one type can usually be ``converted'' to objects of several
 other types.  To {\sl convert} an object to a new type, use the ``{\tt ::}'' 
 infix operator.\footnote{Conversion is discussed in detail in
-\ref{ugTypesConvert} on page~\pageref{ugTypesConvert}.}  For example,
+\sectionref{ugTypesConvert}.}  For example,
 to display an object, it is necessary to convert the object to type
 {\tt OutputForm}.
 
@@ -4180,7 +4212,7 @@ operations are provided for efficiency reasons.
 \subsection{Some Predefined Macros}
 \label{ugIntroMacros}
 Axiom provides several macros for your convenience.\footnote{See
-\ref{ugUserMacros} on page~\pageref{ugUserMacros} for a discussion on
+\sectionref{ugUserMacros} for a discussion on
 how to write your own macros.}  Macros are names
 \index{macro!predefined} (or forms) that expand to larger expressions
 for commonly used values.
@@ -4229,9 +4261,9 @@ is the same as if you had entered
 \end{verbatim}
 
 Axiom statements in an input file
-(see Section \ref{ugInOutIn} on page~\pageref{ugInOutIn}),
+(see \sectionref{ugInOutIn})
 can use indentation to indicate the program structure .
-(see Section \ref{ugLangBlocks} on page~\pageref{ugLangBlocks}).
+(see \sectionref{ugLangBlocks}).
 
 \subsection{Comments}
 \label{ugIntroComments}
@@ -4524,8 +4556,8 @@ $$
 \returnType{Type: IntegerMod 6}
 
 Inversion is not available if the modulus is not a prime number.
-Modular arithmetic and prime fields are discussed in Section
-\ref{ugxProblemFinitePrime} on page~\pageref{ugxProblemFinitePrime}.
+Modular arithmetic and prime fields are discussed in 
+\sectionref{ugxProblemFinitePrime}.
 
 \spadcommand{1/y}
 \begin{verbatim}
@@ -4647,8 +4679,8 @@ data structures are particularly useful for interactive computation
 and others are useful for building applications.  The data structures
 of Axiom are organized into {\sl category hierarchies}.
 
-A {\it list} \footnote{Lists are discussed in Section \ref{ListXmpPage} on
-page~\pageref{ListXmpPage}} is the most commonly used data structure in
+A {\it list} \footnote{\domainref{List}} 
+is the most commonly used data structure in
 Axiom for holding objects all of the same type. The name {\it list} is
 short for ``linked-list of nodes.'' Each node consists of a value
 (\spadfunFrom{first}{List}) and a link (\spadfunFrom{rest}{List}) that
@@ -4720,8 +4752,7 @@ $$
 A {\it stream} is a structure that (potentially) has an infinite
 number of distinct elements. Think of a stream as an
 ``infinite list'' where elements are computed successively.
-\footnote{Streams are discussed in Section{StreamXmpPage} on
-page~\pageref{StreamXmpPage}}
+\footnote{\domainref{Stream}}
 
 Create an infinite stream of factored integers.  Only a certain number
 of initial elements are computed and displayed.
@@ -4753,13 +4784,11 @@ For example, {\bf first} and {\bf rest} are used to access
 elements and successive nodes of a stream.
 
 A {\it one-dimensional array} is another data structure used to hold
-objects of the same type \footnote{OnedimensionalArray is discussed in
-Section \ref{OneDimensionalArrayXmpPage} on
-page~\pageref{OneDimensionalArrayXmpPage}}. Unlike lists,
-one-dimensional arrays are inflexible---they are
-\index{array!one-dimensional} implemented using a fixed block of
-storage.  Their advantage is that they give quick and equal access
-time to any element.
+objects of the same type \footnote{\domainref{OneDimensionalArray}}.  
+Unlike lists, one-dimensional
+arrays are inflexible---they are \index{array!one-dimensional}
+implemented using a fixed block of storage.  Their advantage is that
+they give quick and equal access time to any element.
 
 A simple way to create a one-dimensional array is to apply the
 operation {\bf oneDimensionalArray} to a list of elements.
@@ -4816,9 +4845,8 @@ $$
 $$
 \returnType{Type: Bits}
 
-A {\it flexible array} \footnote{FlexibleArray is discussed in Section
-\ref{FlexibleArrayXmpPage} on page~\pageref{FlexibleArrayXmpPage}} is
-a cross between a list \index{array!flexible} and a one-dimensional
+A {\it flexible array} \footnote{\domainref{FlexibleArray}}
+is a cross between a list \index{array!flexible} and a one-dimensional
 array. Like a one-dimensional array, a flexible array occupies a fixed
 block of storage.  Its block of storage, however, has room to expand.
 When it gets full, it grows (a new, larger block of storage is
@@ -4845,8 +4873,8 @@ $$
 Flexible arrays are used to implement ``heaps.'' A {\it heap} is an
 example of a data structure called a {\it priority queue}, where
 elements are ordered with respect to one another. A heap
-\footnote{Heap is discussed in Section \ref{HeapXmpPage} on
-page~\pageref{HeapXmpPage}} is organized so as to optimize insertion
+\footnote{\domainref{Heap}}
+is organized so as to optimize insertion
 and extraction of maximum elements.  The {\bf extract!} operation
 returns the maximum element of the heap, after destructively removing
 that element and reorganizing the heap so that the next maximum
@@ -4876,10 +4904,10 @@ $$
 A {\it binary tree} is a ``tree'' with at most two branches
 \index{tree} per node: it is either empty, or else is a node
 consisting of a value, and a left and right subtree (again, binary
-trees). \footnote{BinarySearchTrees are discussed in Section 
-\ref{BinarySearchTreeXmpPage} on page~\pageref{BinarySearchTreeXmpPage}}
+trees). \footnote{\domainref{BinarySearchTree}}
 Examples of binary tree types are {\tt BinarySearchTree}, 
 {\tt PendantTree}, {\tt TournamentTree}, and {\tt BalancedBinaryTree}.
+\footnote{\domainref{BalancedBinaryTree}}
 
 A {\it binary search tree} is a binary tree such that,
 \index{tree!binary search} for each node, the value of the node is
@@ -4910,8 +4938,8 @@ $$
 \returnType{Type: List Integer}
 
 A {\it set} is a collection of elements where duplication and order is
-irrelevant. \footnote{Sets are discussed in Section \ref{SetXmpPage}
-on page~\pageref{SetXmpPage}} Sets are always finite and have no
+irrelevant. \footnote{\domainref{Set}} 
+Sets are always finite and have no
 corresponding structure like streams for infinite collections.
 
 Create sets using braces ``\{`` and ``\}'' rather than brackets.
@@ -4925,8 +4953,7 @@ $$
 \returnType{Type: Set Fraction Integer}
 
 A {\it multiset} is a set that keeps track of the number of duplicate
-values. \footnote{Multisets are discussed in Section
-\ref{MultisetXmpPage} on page~\pageref{MultisetXmpPage}}
+values. \footnote{\domainref{Multiset}}
 
 For all the primes $p$ between 2 and 1000, find the
 distribution of $p \bmod 5$.
@@ -4984,8 +5011,8 @@ $$
 \returnType{Type: Table(Integer,Integer)}
 
 A {\it record} is an example of an inhomogeneous collection of
-objects.\footnote{See \ref{ugTypesRecords} on
-page~\pageref{ugTypesRecords} for details.}  A record consists of a
+objects.\footnote{See \sectionref{ugTypesRecords} for details.}  
+A record consists of a
 set of named {\it selectors} that can be used to access its
 components.  \index{Record@{\sf Record}}
 
@@ -5014,8 +5041,8 @@ $$
 \returnType{Type: Record(age: Integer,salary: Float)}
 
 A {\it union} is a data structure used when objects have multiple
-types.\footnote{See \ref{ugTypesUnions} on
-page~\pageref{ugTypesUnions} for details.}  \index{Union@{\sf Union}}
+types.\footnote{See \sectionref{ugTypesUnions} for details.}  
+\index{Union@{\sf Union}}
 
 Let $dog$ be either an integer or a string value.
 \spadcommand{dog: Union(licenseNumber: Integer, name: String)}
@@ -5029,8 +5056,8 @@ $$
 \returnType{Type: Union(name: String,...)}
 
 All told, there are over forty different data structures in Axiom.
-Using the domain constructors described in Chapter \ref{ugDomains} on
-page~\pageref{ugDomains}, you can add your own data structure or
+Using the domain constructors described in \sectionref{ugDomains},
+you can add your own data structure or
 extend an existing one.  Choosing the right data structure for your
 application may be the key to obtaining good performance.
 
@@ -5052,12 +5079,12 @@ algebraic operations are available for matrices but not for arrays.
 Because of this, we limit our discussion here to {\tt Matrix}, that
 can be regarded as an extension of {\tt TwoDimensionalArray}. See {\tt
 TwoDimensionalArray} for more information about arrays.  For more
-information about Axiom's linear algebra facilities, see {\tt Matrix},
-{\tt Permanent}, {\tt SquareMatrix}, {\tt Vector}, see Section
-\ref{ugProblemEigen} on page~\pageref{ugProblemEigen} (computation of
-eigenvalues and eigenvectors), and Section \ref{ugProblemLinPolEqn} on
-page~\pageref{ugProblemLinPolEqn} (solution of linear and polynomial
-equations).
+information about Axiom's linear algebra facilities, see 
+\domainref{Matrix}, \domainref{Permanent}, \domainref{SquareMatrix}, 
+\domainref{Vector}, \domainref{TwoDimensionalArray}, 
+\sectionref{ugProblemEigen} (computation of eigenvalues and eigenvectors), 
+and \sectionref{ugProblemLinPolEqn} 
+(solution of linear and polynomial equations).
 
 You can create a matrix from a list of lists, \index{matrix!creating}
 where each of the inner lists represents a row of the matrix.
@@ -5072,8 +5099,8 @@ $$
 $$
 \returnType{Type: Matrix Integer}
 
-The ``collections'' construct (see \ref{ugLangIts} on
-page~\pageref{ugLangIts}) is useful for creating matrices whose
+The ``collections'' construct (see \sectionref{ugLangIts}) 
+is useful for creating matrices whose
 entries are given by formulas.  \index{matrix!Hilbert}
 \spadcommand{matrix([ [1/(i + j - x) for i in 1..4] for j in 1..4])}
 $$
@@ -5163,7 +5190,7 @@ write some Axiom programs to tackle your application.
 Axiom allows you to write functions interactively,
 \index{function} thereby effectively extending the system library.
 Here we give a few simple examples, leaving the details to
-Chapter \ref{ugUser} on page~\pageref{ugUser}.
+\sectionref{ugUser}.
 
 We begin by looking at several ways that you can define the
 ``factorial'' function in Axiom.  The first way is to give a
@@ -5251,7 +5278,7 @@ $$
 
 You are not limited to one-line functions in Axiom.  If you place your
 function definitions in {\bf .input} files \index{file!input} (see
-\ref{ugInOutIn} on page~\pageref{ugInOutIn}), you can have multi-line
+\sectionref{ugInOutIn}), you can have multi-line
 functions that use indentation for grouping.
 
 Given $n$ elements, {\bf diagonalMatrix} creates an
@@ -5513,7 +5540,7 @@ expression $f$ as a real variable $x$ tends to a limit
 value $a$, enter {\tt limit(f, x=a)}.  Use
 {\bf complexLimit} if the variable is complex.  Additional
 information and examples of limits are in 
-Section \ref{ugProblemLimits} on page~\pageref{ugProblemLimits}.
+\sectionref{ugProblemLimits}.
 
 You can take limits of functions with parameters.
 \index{limit!of function with parameters}
@@ -5584,8 +5611,7 @@ Axiom tries to compute and display the first ten elements of a series.
 Use {\tt )set streams calculate} to change the default value to
 something else.  For the purposes of this document, we have used this
 system command to display fewer than ten terms.  For more information
-about working with series, see \ref{ugProblemSeries} on
-page~\pageref{ugProblemSeries}.
+about working with series, see \sectionref{ugProblemSeries}.
 
 You can convert a functional expression to a power series by using the
 operation {\bf series}.  In this example, {\tt sin(a*x)} is
@@ -6183,7 +6209,7 @@ $$
 \returnType{Type: Union(Expression Integer,...)}
 
 More examples of Axiom's integration capabilities are discussed in
-Section \ref{ugProblemIntegration} on page~\pageref{ugProblemIntegration}.
+\sectionref{ugProblemIntegration}.
 
 \section{Differential Equations}
 \label{ugIntroDiffEqns}
@@ -6742,7 +6768,7 @@ display options set from the 3D Control Panel.
 The PostScript output was produced by clicking on the
 {\bf save} 3D Control Panel button and then
 clicking on the {\bf PS} button.
-See Section \ref{ugProblemNumeric} on page~\pageref{ugProblemNumeric}
+See \sectionref{ugProblemNumeric}
 for more details and examples of Axiom's numeric and graphics capabilities.
 
 \spadgraph{draw((x,y) +-> real atan complex(x,y), -\%pi..\%pi, -\%pi..\%pi, colorFunction == (x,y) +-> argument atan complex(x,y))}
@@ -6756,11 +6782,11 @@ for more details and examples of Axiom's numeric and graphics capabilities.
 
 An exhibit of Axiom images is given later.  For a description of the
 commands and programs that produced these figures, see
-\ref{ugAppGraphics} on page~\pageref{ugAppGraphics}.  PostScript
+\sectionref{ugAppGraphics}.  PostScript
 \index{PostScript} output is available so that Axiom images can be
 printed.\footnote{PostScript is a trademark of Adobe Systems
-Incorporated, registered in the United States.}  See \ref{ugGraph} on
-page~\pageref{ugGraph} for more examples and details about using
+Incorporated, registered in the United States.}  See \sectionref{ugGraph}
+for more examples and details about using
 Axiom's graphics facilities.
 
 This concludes your tour of Axiom.
@@ -7128,9 +7154,8 @@ prevents the system from building meaningless domains such as
 {\tt Polynomial(Boolean)} and then wrongfully applying algorithms that
 presume that the ring axioms hold.
 
-Enough on categories. To learn more about them, see Chapter
-\ref{ugCategories} on page~\pageref{ugCategories}.  
-We now return to our discussion of domains.
+Enough on categories. To learn more about them, see 
+\sectionref{ugCategories}. We now return to our discussion of domains.
 
 Domains {\it export} a set of operations to make them available for
 system-wide use.  {\tt Integer}, for example, exports the operations
@@ -7171,7 +7196,7 @@ over a domain $R$ to polynomials over $S$.  To convert an object from
 {\tt Polynomial(Integer)} to {\tt Polynomial(Float)}, Axiom builds the
 package {\tt PolynomialFunctions2(Integer,Float)} in order to create
 the required conversion function.  (This happens ``behind the scenes''
-for you: see \ref{ugTypesConvert} on page~\pageref{ugTypesConvert}
+for you: see \sectionref{ugTypesConvert}
 for details on how to convert objects.)
 
 Axiom categories, domains and packages and all their contained
@@ -7183,8 +7208,8 @@ domains and their functions and how to write your own functions.
 \section{Writing Types and Modes}
 \label{ugTypesWriting}
 
-We have already seen in the last section \ref{ugTypesBasic} on
-page~\pageref{ugTypesBasic} several examples of types.  Most of these
+We have already seen in the last section \sectionref{ugTypesBasic}
+several examples of types.  Most of these
 examples had either no arguments (for example, {\tt Integer}) or one
 argument (for example, {\tt Polynomial (Integer)}).  In this section
 we give details about writing arbitrary types.  We then define modes
@@ -7197,12 +7222,12 @@ you declare variables.
 \returnType{Type: Void}
 
 You need to do so when you declare functions 
-(See Section \ref{ugTypesDeclare} on page~\pageref{ugTypesDeclare}),
+(See \sectionref{ugTypesDeclare})
 \spadcommand{f : Integer -> String}
 \returnType{Type: Void}
 
 You need to do so when you convert an object from one type to another
-(See Section \ref{ugTypesConvert} on page~\pageref{ugTypesConvert}).
+(See \sectionref{ugTypesConvert}).
 \spadcommand{factor(2 :: Complex(Integer))}
 $$
 -{i \  {{\left( 1+i 
@@ -7218,7 +7243,7 @@ $$
 \returnType{Type: Boolean}
 
 You need to do so when you give computation target type information
-(See Section \ref{ugTypesPkgCall} on page~\pageref{ugTypesPkgCall}).
+(See \sectionref{ugTypesPkgCall})
 \spadcommand{(2 = 3)@Boolean}
 $$
 {\tt false} 
@@ -7279,7 +7304,7 @@ $$
 \returnType{Type: Complex Fraction Integer}
 
 If you supply computation target type information 
-(See Section \ref{ugTypesPkgCall} on page~\pageref{ugTypesPkgCall}) 
+(See \sectionref{ugTypesPkgCall})
 then you should enclose the argument in parentheses.
 \spadcommand{(2/3)@Fraction(Polynomial(Integer))}
 $$
@@ -7336,9 +7361,8 @@ and {\tt SquareMatrix(?, ?)} are all
 invalid.  The question mark must take the place of a domain, not data.
 This rules out, for example, the two {\tt SquareMatrix} expressions.
 
-Modes can be used for declarations (See Section \ref{ugTypesDeclare}
-on page~\pageref{ugTypesDeclare}) and conversions (Section
-\ref{ugTypesConvert} on page~\pageref{ugTypesConvert}).  However, you
+Modes can be used for declarations (See \sectionref{ugTypesDeclare})
+and conversions (\sectionref{ugTypesConvert}).  However, you
 cannot use a mode for package calling or giving target type information.
 
 \subsection{Abbreviations}
@@ -7395,7 +7419,7 @@ abbreviations.  For a specific constructor, use {\tt )abbreviation
 query}.  \index{abbreviation} You can also use the {\tt )what} system
 command to see the names and abbreviations of constructors.
 \index{what} For more information about {\tt )what}, see
-\ref{ugSysCmdwhat} on page~\pageref{ugSysCmdwhat}.
+\sectionref{ugSysCmdwhat}.
 
 {\tt )abbreviation query} can be abbreviated (no pun intended) to 
 {\tt )abb q}.
@@ -7463,10 +7487,8 @@ For multiple variables, the syntax is
 You can always combine a declaration with an assignment.  When you do,
 it is equivalent to first giving a declaration statement, then giving
 an assignment.  For more information on assignment, see
-Section \ref{ugIntroAssign} on page~\pageref{ugIntroAssign} and 
-Section \ref{ugLangAssign} on page~\pageref{ugLangAssign}.  
-To see how to declare your own functions, 
-see \ref{ugUserDeclare} on page~\pageref{ugUserDeclare}.
+\sectionref{ugIntroAssign} and \sectionref{ugLangAssign}.
+To see how to declare your own functions, see \sectionref{ugUserDeclare}.
 
 This declares one variable to have a type.
 \spadcommand{a : Integer}
@@ -7567,8 +7589,8 @@ $$
 \returnType{Type: Complex Polynomial Integer}
 
 This is a polynomial with complex integer coefficients.  The objects
-are convertible from one to the other.  See \ref{ugTypesConvert} on
-page~\pageref{ugTypesConvert} for more information.
+are convertible from one to the other.  See \sectionref{ugTypesConvert}
+for more information.
 
 \spadcommand{g : POLY COMPLEX ? := (x + y*\%i)**2}
 $$
@@ -7923,7 +7945,7 @@ $$
 \subsection{Unions With Selectors}
 \label{ugTypesUnionsWSel}
 
-Like records (\ref{ugTypesRecords} on page~\pageref{ugTypesRecords}),
+Like records (\sectionref{ugTypesRecords}), 
 you can write {\tt Union} types \index{selector!union} with selectors.
 \index{union!selector}
 
@@ -7953,7 +7975,7 @@ integer {\it and} a float {\it and} a string.  An object of type
 {\it or} a float {\it or} a string.
 
 Here is a version of the {\bf sayBranch} function (cf.
-\ref{ugTypesUnionsWOSel} on page~\pageref{ugTypesUnionsWOSel}) that
+\sectionref{ugTypesUnionsWOSel}) that
 works with a union with selectors.  It displays a message stating in
 which branch of the {\tt Union} the object lies.
 
@@ -8177,7 +8199,7 @@ multiplication, whereas {\tt SquareMatrix} does not. That is because
 {\tt Fraction} requires that its argument belong to the category 
 {\tt IntegralDomain} and \index{category} {\tt Complex} requires that its
 argument belong to {\tt CommutativeRing}. 
-See \ref{ugTypesBasic} on page~\pageref{ugTypesBasic} for a
+See \sectionref{ugTypesBasic} for a
 brief discussion of categories. The {\tt Integer} level did not move
 anywhere because it does not allow any arguments.  We also did not
 move the {\tt SquareMatrix} part anywhere, but we could have.
@@ -8464,7 +8486,7 @@ your having to qualify it with type information.  Nevertheless, there
 are times when you need to help it along by providing hints (or even
 orders!) to get Axiom to do what you want.
 
-We saw in \ref{ugTypesDeclare} on page~\pageref{ugTypesDeclare} that
+We saw in \sectionref{ugTypesDeclare} that
 declarations using types and modes control the type of the results
 produced.  For example, we can either produce a complex object with
 polynomial real and imaginary parts or a polynomial with complex
@@ -8526,8 +8548,7 @@ $$ fun\ (\ arg_1, arg_2, \ldots, arg_N\ )\$type$$
 For example, to call the ``minimum'' function from {\rm DoubleFloat} on two
 integers, you could write {\bf min}(4,89){\tt DoubleFloat}. Another use of
 package calling is to tell AXIOM to use a library function rather than a
-function you defined. We discuss this in 
-Section \ref{ugUserUse} on page~\pageref{ugUserUse}.
+function you defined. We discuss this in \sectionref{ugUserUse}.
 
 Sometimes rather than specifying where an operation comes from, you
 just want to say what type the result should be. We say that you provide a
@@ -8764,8 +8785,8 @@ Every \index{constructor!exposed} domain and package in the Axiom
 library \index{constructor!hidden} is \index{exposed!constructor}
 either exposed (meaning that you can use its operations without doing
 anything special) or it is {\it hidden} (meaning you have to either
-package call (see \ref{ugTypesPkgCall} on
-page~\pageref{ugTypesPkgCall}) the operations it contains or
+package call (see \sectionref{ugTypesPkgCall})
+the operations it contains or
 explicitly expose it to use the operations).  The initial exposure
 status for a constructor is set in the file {\bf exposed.lsp} (see the
 {\it Installer's Note} \index{exposed.lsp @{\bf exposed.lsp}} for
@@ -8834,8 +8855,8 @@ you should issue {\tt )set expose add group basic} to restore your default
 environment.  \index{set expose add group}
 
 It is more likely that you would want to expose or hide individual
-constructors.  In \ref{ugUserTriangle} on
-page~\pageref{ugUserTriangle} we use several operations from 
+constructors.  In \sectionref{ugUserTriangle}
+we use several operations from 
 {\tt OutputForm}, a domain usually hidden.  To avoid package calling every
 operation from {\tt OutputForm}, we expose the domain and let Axiom
 conclude that those operations should be used.  Use {\tt )set expose
@@ -8883,7 +8904,7 @@ Hide {\tt OutputForm} so we don't run into problems with any later examples!
 \end{verbatim}
 
 Finally, exposure is done on a frame-by-frame basis.  A {\it frame}
-(see \ref{ugSysCmdframe} on page~\pageref{ugSysCmdframe})
+(see \sectionref{ugSysCmdframe})
 \index{frame!exposure and} is one of possibly several logical Axiom
 workspaces within a physical one, each having its own environment (for
 example, variables and function definitions).  If you have several
@@ -8901,8 +8922,7 @@ To conclude this chapter, we introduce you to some system commands
 that you can use for getting more information about domains, packages,
 categories, and operations.  The most powerful Axiom facility for
 getting information about constructors and operations is the Browse
-component of HyperDoc.  This is discussed in Chapter 
-\ref{ugBrowse} on page~\pageref{ugBrowse}.
+component of HyperDoc.  This is discussed in \sectionref{ugBrowse}.
 
 Use the {\tt )what} system command to see lists of system objects
 whose name contain a particular substring (uppercase or lowercase is
@@ -9017,9 +9037,8 @@ So if {\tt D1} is a commutative ring (such as the integers or floats) and
 called {\bf complex} that takes two elements of {\tt D1} and creates an
 element of {\tt D}.  The primary example of a constructor implementing
 domains belonging to {\tt ComplexCategory} is {\tt Complex}.  See
-\ref{Complex} on page~\pageref{Complex} for more information on that and see
-\ref{ugUserDeclare} on page~\pageref{ugUserDeclare}
-for more information on function types.
+\domainref{Complex} for more information on that and see
+\sectionref{ugUserDeclare} for more information on function types.
 
 \setcounter{chapter}{2}
 
@@ -9083,9 +9102,8 @@ top-level menu.
 \label{ugHyperKeys}
 
 The following keyboard definitions are in effect throughout HyperDoc.
-See \ref{ugHyperScroll} on page~\pageref{ugHyperScroll} and 
-\ref{ugHyperInput} on page~\pageref{ugHyperInput} for some contextual key
-definitions.
+See \sectionref{ugHyperScroll} and \sectionref{ugHyperInput}
+for some contextual key definitions.
 
 \begin{description}
 \item[F1] Display the main help page.
@@ -9131,7 +9149,7 @@ To move up or down one screen at a time, use the \fbox{\bf PageUp} and
 region up and down one page each time you press them.
 
 If the HyperDoc page does not contain an input area (see
-\ref{ugHyperInput} on page~\pageref{ugHyperInput}), you can also use
+\sectionref{ugHyperInput}, you can also use
 the \fbox{\bf Home} and \fbox{$\uparrow$} and \fbox{$\downarrow$}
 arrow keys to navigate.  When you press the \fbox{\bf Home} key, the
 screen is positioned at the very top of the page.  Use the
@@ -9417,8 +9435,7 @@ file is in your home directory or in the directory you specified with
 \index{cd} {\tt {)cd}}.\\
 }
 
-In \ref{ugLangBlocks} on page~\pageref{ugLangBlocks} 
-we discuss using indentation in input files to
+In \sectionref{ugLangBlocks} we discuss using indentation in input files to
 group statements into {\it blocks.}
 
 \section{The .axiom.input File}
@@ -10112,7 +10129,7 @@ $$
 \returnType{Type: PositiveInteger}
 
 There is no syntactic form for multiple delayed assignments.  See the
-discussion in section \ref{ugUserDelay} on page~\pageref{ugUserDelay}
+discussion in \sectionref{ugUserDelay}
 about how Axiom differentiates between delayed assignments and user
 functions of no arguments.
 
@@ -10239,7 +10256,7 @@ $$
 \returnType{Type: Polynomial Float}
 
 Blocks can be used in the clauses of {\tt if-then-else} expressions 
-(see \ref{ugLangIf} on page~\pageref{ugLangIf}).
+(see \sectionref{ugLangIf}).
 
 \spadcommand{if h > 3.1 then 1.0 else (z := cos(h); max(z,0.5))}
 $$
@@ -10325,8 +10342,8 @@ An {\tt if-then-else} expression always returns a value.  If the
 {\tt else} clause is missing then the entire expression returns the unique
 value of {\tt Void}.  If both clauses are present, the type of the
 value returned by {\tt if} is obtained by resolving the types of the
-values of the two clauses.  See \ref{ugTypesResolve} on
-page~\pageref{ugTypesResolve} for more information.
+values of the two clauses.  See \sectionref{ugTypesResolve} 
+for more information.
 
 The predicate must evaluate to, or be convertible to, an object of
 type {\tt Boolean}: {\tt true} or {\tt false}.  By default, the equal
@@ -10347,8 +10364,7 @@ predicate and equality testing is performed.  \index{Boolean} Thus you
 need not qualify the ``{\tt =}'' in any way.  In other contexts you
 may need to tell Axiom that you want to test for equality rather than
 create an equation.  In those cases, use ``{\tt @}'' and a target type
-of {\tt Boolean}.  See section \ref{ugTypesPkgCall} on
-page~\pageref{ugTypesPkgCall} for more information.
+of {\tt Boolean}.  See \sectionref{ugTypesPkgCall} for more information.
 
 The compound symbol meaning ``not equal'' in Axiom is
 \index{inequality testing} ``{$\sim =$}''.  \index{\_notequal@$\sim =$} 
@@ -10450,8 +10466,8 @@ following message:
 \end{center}
 
 It is still possible that Axiom can evaluate the loop but in {\it
-interpret-code mode}.  See section \ref{ugUserCompInt} on
-page~\pageref{ugUserCompInt} where this is discussed in terms
+interpret-code mode}.  See \sectionref{ugUserCompInt} 
+where this is discussed in terms
 \index{panic!avoiding} of compiling versus interpreting functions.
 
 \subsection{return in Loops}
@@ -10510,7 +10526,7 @@ f() ==
 \returnType{Type: Void}
 
 When we try {\bf f} again we get what we wanted.  See
-\ref{ugUserBlocks} on page~\pageref{ugUserBlocks} for more information.
+\sectionref{ugUserBlocks} for more information.
 
 \spadcommand{f()}
 \begin{verbatim}
@@ -10531,7 +10547,7 @@ always return the unique value of {\tt Void}., you cannot return a
 value with {\tt break}.  That is, {\tt break} takes no argument.
 
 This example is a modification of the last example in the previous
-section \ref{ugLangLoopsReturn} on page~\pageref{ugLangLoopsReturn}.
+\sectionref{ugLangLoopsReturn}.
 Instead of using {\tt return}, we'll use {\tt break}.
 
 \begin{verbatim}
@@ -10721,8 +10737,7 @@ $$
 Scan the rows looking for the first negative element.  We remark that
 you can reformulate this example in a better, more concise form by
 using a {\tt for} clause with {\tt repeat}.  See
-\ref{ugLangLoopsForIn} on page~\pageref{ugLangLoopsForIn} for more
-information.
+\sectionref{ugLangLoopsForIn} for more information.
 
 \begin{verbatim}
 repeat
@@ -11008,8 +11023,7 @@ for i in 1..5 repeat
 \end{verbatim}
 \returnType{Type: Void}
 
-See section \ref{SegmentXmpPage} on page~\pageref{SegmentXmpPage} for
-more information about segments.
+See \domainref{Segment}.
 
 \subsection{for i in n..m by s repeat}
 \label{ugLangLoopsForInNMS}
@@ -11175,8 +11189,7 @@ for i in 1..50 repeat
 \subsection{Parallel Iteration}
 \label{ugLangLoopsPar}
 
-The last example of the previous section 
-\ref{ugLangLoopsForInPred} on page~\pageref{ugLangLoopsForInPred}
+The last example of the previous \sectionref{ugLangLoopsForInPred}
 gives an example of {\it nested iteration}: a loop is contained
 \index{iteration!nested} in another loop.  \index{iteration!parallel}
 Sometimes you want to iterate across two lists in parallel, or perhaps
@@ -11320,7 +11333,7 @@ or any {\tt for} clause to the left.
 \label{ugLangIts}
 
 All of what we did for loops in 
-\ref{ugLangLoops} on page~\pageref{ugLangLoops} \index{iteration}
+\sectionref{ugLangLoops} \index{iteration}
 can be transformed into expressions that create lists
 \index{list!created by iterator} and streams.  \index{stream!created
 by iterator} The {\tt repeat}, {\tt break} or {\tt iterate} words are not used but
@@ -11563,9 +11576,7 @@ $$
 $$
 \returnType{Type: List List List PositiveInteger}
 
-See List 
-(section \ref{ListXmpPage} on page~\pageref{ListXmpPage}) and Stream 
-(section \ref{StreamXmpPage} on page~\pageref{StreamXmpPage})
+See \domainref{List} and \domainref{Stream} 
 for more information on creating and
 manipulating lists and streams, respectively.
 
@@ -11793,7 +11804,7 @@ $$
 
 This is an unnamed function that does the same thing, using the
 ``maps-to'' syntax {\tt +->} that we discuss in 
-section \ref{ugUserAnon} on page~\pageref{ugUserAnon}.
+\sectionref{ugUserAnon}.
 \spadcommand{(x +-> if x < 0 then -x else x)(-8)}
 $$
 8 
@@ -11803,8 +11814,8 @@ $$
 Functions can be used alone or serve as the building blocks for larger
 programs.  Usually they return a value that you might want to use in
 the next stage of a computation, but not always (for example, see
-\ref{ExitXmpPage} on page~\pageref{ExitXmpPage} and \ref{VoidXmpPage}
-on page~\pageref{VoidXmpPage}).  They may also read data from your
+\domainref{Exit} and \domainref{Void}.
+They may also read data from your
 keyboard, move information from one place to another, or format and
 display results on your screen.
 
@@ -11975,8 +11986,7 @@ number of arguments that you choose.
 If you define a function in the workspace that has the same name and
 number of arguments as one in the library, then your definition takes
 precedence.  In fact, to get the library function you must
-{\sl package-call} it 
-(see section \ref{ugTypesPkgCall} on page~\pageref{ugTypesPkgCall}).
+{\sl package-call} it (see \sectionref{ugTypesPkgCall}).
 
 To use a function in Axiom, you apply it to its arguments.  Most
 functions are applied by entering the name of the function followed by
@@ -12020,7 +12030,7 @@ be written as $2*x\ {\tt \&D} x$ returning $2$.
 
 Every function in Axiom is identified by a {\it name} and 
 {\it type}. (An exception is an ``anonymous function'' discussed in
-\ref{ugUserAnon} on page~\pageref{ugUserAnon}.)  
+\sectionref{ugUserAnon}.)
 The type of a function is always a mapping of the
 form \spadsig{Source}{Target} where {\tt Source} and {\tt Target} are types.
 To enter a type from the keyboard, enter the arrow by using a hyphen
@@ -12039,7 +12049,7 @@ are all done with the same function name but with different functions.
 \section{Declaring the Type of Functions}
 \label{ugUserDeclare}
 
-In \ref{ugTypesDeclare} on page~\pageref{ugTypesDeclare} we discussed
+In \sectionref{ugTypesDeclare} we discussed
 how to declare a variable to restrict the kind of values that can be
 assigned to it.  In this section we show how to declare a variable
 that refers to function objects.
@@ -12102,7 +12112,7 @@ h(): POLY INT == ...
 A current restriction on function declarations is that they must
 involve fully specified types (that is, cannot include modes involving
 explicit or implicit ``{\tt ?}'').  For more information on declaring
-things in general, see \ref{ugTypesDeclare} on page~\pageref{ugTypesDeclare}.
+things in general, see \sectionref{ugTypesDeclare}.
 
 \section{One-Line Functions}
 \label{ugUserOne}
@@ -12280,17 +12290,16 @@ Here $x+1$ for $x = "axiom"$ makes no sense.
       or "$" to specify which version of the function you need.
 \end{verbatim}
 
-As you will see in Chapter \ref{ugCategories} on
-page~\pageref{ugCategories}, Axiom has a formal idea of categories for
-what ``makes sense.''
+As you will see in \sectionref{ugCategories}, 
+Axiom has a formal idea of categories for what ``makes sense.''
 
 \section{Functions vs. Operations}
 \label{ugUserDecOpers}
 
 A function is an object that you can create, manipulate, pass to, and
 return from functions (for some interesting examples of library
-functions that manipulate functions, see \ref{MappingPackage1XmpPage}
-on page~\pageref{MappingPackage1XmpPage}).  Yet, we often seem to use
+functions that manipulate functions, see \domainref{MappingPackage1}.
+Yet, we often seem to use
 the term {\it operation} and {\it function} interchangeably in Axiom.  What
 is the distinction?
 
@@ -12313,21 +12322,19 @@ excluding the value; thus an operation has a name and a type.  An
 operation is what domains and packages export.  Thus {\tt Ring}
 exports one operation ``{\tt +}''.  Every ring also exports this
 operation.  Also, the author of every ring in the system is obliged
-under contract (see \ref{ugPackagesAbstract} on
-page~\pageref{ugPackagesAbstract}) to provide an implementation for
-this operation.
+under contract (see \sectionref{ugPackagesAbstract} 
+to provide an implementation for this operation.
 
 This chapter is all about functions---how you create them
-interactively and how you apply them to meet your needs.  In Chapter
-\ref{ugPackages} on page~\pageref{ugPackages} you will learn how to
-create them for the Axiom library.  Then in Chapter \ref{ugCategories}
-on page~\pageref{ugCategories}, you will learn about categories and
-exported operations.
+interactively and how you apply them to meet your needs.  In 
+\sectionref{ugPackages} you will learn how to
+create them for the Axiom library.  Then in \sectionref{ugCategories},
+you will learn about categories and exported operations.
 
 \section{Delayed Assignments vs. Functions with No Arguments}
 \label{ugUserDelay}
 
-In \ref{ugLangAssign} on page~\pageref{ugLangAssign} we discussed the
+In \sectionref{ugLangAssign} we discussed the
 difference between immediate and \index{function!with no arguments}
 delayed assignments.  In this section we show the difference between
 delayed assignments and functions of no arguments.
@@ -12405,8 +12412,7 @@ $$
 \returnType{Type: Float}
 
 If you want the library operation, we have to package-call it
-(see \ref{ugTypesPkgCall} on page~\pageref{ugTypesPkgCall}
-for more information).
+(see \sectionref{ugTypesPkgCall} for more information).
 \spadcommand{sin(4.3)\$Float}
 $$
 -{0.9161659367 4945498404} 
@@ -12484,7 +12490,7 @@ creating an object of type {\tt Fraction(Integer)}.
 {\tt Fraction(Integer)} are found in either domain.
 \item Axiom resolves
 \index{resolve}
-(see \ref{ugTypesResolve} on page~\pageref{ugTypesResolve})
+(see \sectionref{ugTypesResolve})
 the types and gets {\tt Polynomial (Fraction (Integer))}.
 \item The $x$ and the $2/3$ are converted to objects of this
 type and {\tt +} is applied, yielding the answer, an object of type
@@ -12565,7 +12571,7 @@ Cannot compile conversion for types involving local variables.
 
 Sometimes you can help a function to compile by using an extra
 conversion or by using $pretend$.  \index{pretend} See
-\ref{ugTypesSubdomains} on page~\pageref{ugTypesSubdomains} for details.
+\sectionref{ugTypesSubdomains} for details.
 
 When a function is compilable, you have the choice of whether it is
 compiled to Common Lisp and then interpreted by the Common Lisp
@@ -12863,10 +12869,10 @@ $$
 
 We have already seen some examples of \index{function!predicate}
 predicates \index{predicate!in function definition}
-(\ref{ugUserPieceBasic} on page~\pageref{ugUserPieceBasic}).
+(\sectionref{ugUserPieceBasic}.
 Predicates are {\tt Boolean}-valued expressions and Axiom uses them
-for filtering collections (see \ref{ugLangIts} on
-page~\pageref{ugLangIts}) and for placing constraints on function
+for filtering collections (see \sectionref{ugLangIts}
+and for placing constraints on function
 arguments.  In this section we discuss their latter usage.
 
 The simplest use of a predicate is one you don't see at all.
@@ -13019,8 +13025,7 @@ highly unlikely that a function with no arguments should be cached.\\
 }
 
 You should also be careful about caching functions that depend on free
-variables.  See \ref{ugUserFreeLocal} on
-page~\pageref{ugUserFreeLocal} for an example.
+variables.  See \sectionref{ugUserFreeLocal} for an example.
 
 \section{Recurrence Relations}
 \label{ugUserRecur}
@@ -13107,11 +13112,10 @@ The transformations that Axiom uses for {\bf fib} caches the last two
 values. For a more general $k$-th order recurrence relation, Axiom
 caches the last $k$ values.  If, after computing a value for {\bf
 fib}, you ask for some larger value, Axiom picks up the cached values
-and continues computing from there.  See \ref{ugUserFreeLocal} on
-page~\pageref{ugUserFreeLocal} for an example of a function definition
-that has this same behavior.  Also see \ref{ugUserCache} on
-page~\pageref{ugUserCache} for a more general discussion of how you
-can cache function values.
+and continues computing from there.  See \sectionref{ugUserFreeLocal}
+for an example of a function definition
+that has this same behavior.  Also see \sectionref{ugUserCache} 
+for a more general discussion of how you can cache function values.
 
 Recurrence relations can be used for defining recurrence relations
 involving polynomials, rational functions, or anything you like.
@@ -13154,8 +13158,7 @@ workspace.  There are several versions, depending on how many
 arguments the function has.  The first argument to {\bf function} is
 always the expression to be converted into the function body, and the
 second is always the name to be used for the function.  For more
-information, see section \ref{MakeFunctionXmpPage} on
-page~\pageref{MakeFunctionXmpPage}.
+information, see \domainref{MakeFunction}.
 
 Start with a simple example of a polynomial in three variables.
 \spadcommand{p := -x + y**2 - z**3}
@@ -13329,7 +13332,7 @@ for {\tt Integer}, {\tt Float}, {\tt String}, {\tt Complex},
 
 You need not restrict yourself to functions that only fit on one line
 or are written in a piece-wise manner.  The body of the function can
-be a block, as discussed in \ref{ugLangBlocks} on page~\pageref{ugLangBlocks}.
+be a block, as discussed in \sectionref{ugLangBlocks}.
 
 Here is a short function that swaps two elements of a list, array or vector.
 \begin{verbatim}
@@ -13654,7 +13657,7 @@ in your functions.  No declaration is needed for this situation, but
 be sure to initialize their values.
 
 Be careful if you use free variables and you cache the value of your
-function (see \ref{ugUserCache} on page~\pageref{ugUserCache}).
+function (see \sectionref{ugUserCache}).
 Caching {\it only} checks if the values of the function arguments are
 the same as in a function call previously seen.  It does not check if
 any of the free variables on which the function depends have changed
@@ -13756,7 +13759,7 @@ To conclude this section, we give an iterative definition of
 \index{Fibonacci numbers} a function that computes Fibonacci numbers.
 This definition approximates the definition into which Axiom
 transforms the recurrence relation definition of {\bf fib} in
-\ref{ugUserRecur} on page~\pageref{ugUserRecur}.
+\sectionref{ugUserRecur}.
 
 Global variables {\tt past} and {\tt present} are used to hold the last
 computed Fibonacci numbers.
@@ -14175,7 +14178,7 @@ seen before.
 
 To make these output operations available, we have to {\it expose} the
 domain {\tt OutputForm}.  \index{OutputForm} See 
-\ref{ugTypesExpose} on page~\pageref{ugTypesExpose}
+\sectionref{ugTypesExpose}
 for more information about exposing domains and packages.
 \spadcommand{)set expose add constructor OutputForm}
 \begin{verbatim}
@@ -14902,7 +14905,7 @@ The general format for drawing a function defined by a formula $f(x)$ is:
 
 where $a..b$ defines the range of $x$, and where {\it options}
 prescribes zero or more options as described in
-\ref{ugGraphTwoDOptions} on page~\pageref{ugGraphTwoDOptions}.  An
+\sectionref{ugGraphTwoDOptions}.  An
 example of an option is $curveColor == bright red().$ An alternative
 format involving functions $f$ and $g$ is also available.\\
 }
@@ -14979,7 +14982,7 @@ parametric formulas $x = f(t)$ and $y = g(t)$ is:
 
 where $a..b$ defines the range of the independent variable $t$, and
 where {\it options} prescribes zero or more options as described in
-\ref{ugGraphThreeDOptions} on page~\pageref{ugGraphThreeDOptions}.  An
+\sectionref{ugGraphThreeDOptions}.  An
 example of an option is $curveColor == bright red().$\\ }
 
 Here's an example:
@@ -15063,7 +15066,7 @@ independent variables of $p$.  A {\tt range} option is always given to
 designate a bounding rectangular region of the plane
 $a \leq x \leq b, c \leq y \leq d$.
 Zero or more additional options as described in
-\ref{ugGraphTwoDOptions} on page~\pageref{ugGraphTwoDOptions} may be given.\\
+\sectionref{ugGraphTwoDOptions} may be given.\\
 }
 
 We require that the polynomial has rational or integral coefficients.
@@ -15144,8 +15147,8 @@ specified, clipping applies to the y-axis.
 
 Option {\tt curveColor} sets the color of the graph curves or lines to
 be the \index{graphics!2D options!curve color} indicated palette color
-\index{curve!color} (see \ref{ugGraphColor} on page~\pageref{ugGraphColor} and
-\ref{ugGraphColorPalette} on page~\pageref{ugGraphColorPalette}).  
+\index{curve!color} (see \sectionref{ugGraphColor} and
+\sectionref{ugGraphColorPalette}).  
 \index{color!curve}
 
 \spadgraph{draw(sin(x),x=-\%pi..\%pi, curveColor == bright red())}
@@ -15155,8 +15158,7 @@ be the \index{graphics!2D options!curve color} indicated palette color
 
 Option {\tt pointColor} sets the color of the graph points to the
 indicated \index{graphics!2D options!point color} palette color (see
-\ref{ugGraphColor} on page~\pageref{ugGraphColor} and 
-\ref{ugGraphColorPalette} on page~\pageref{ugGraphColorPalette}).
+\sectionref{ugGraphColor} and \sectionref{ugGraphColorPalette}).
 \index{color!point}
 \spadgraph{draw(sin(x),x=-\%pi..\%pi, pointColor == pastel yellow())}
 
@@ -15189,7 +15191,7 @@ Option $coordinates$ indicates the coordinate system in which the
 graph \index{graphics!2D options!coordinates} is plotted.  The default
 is to use the Cartesian coordinate system.
 \index{Cartesian!coordinate system} For more details, see
-\ref{ugGraphCoord} on page~\pageref{ugGraphCoord} 
+\sectionref{ugGraphCoord}
 {or {\tt CoordinateSystems}.}
 \index{coordinate system!Cartesian}
 
@@ -16126,10 +16128,10 @@ plotData2D("file.data", "2D Data Plot")
 \subsection{Addendum: Appending a Graph to a Viewport Window Containing a Graph}
 \label{ugGraphTwoDappend}
 
-This section demonstrates how to append a two-di\-men\-sion\-al graph to a viewport
-already containing other graphs.
-The default {\bf draw} command places a graph into the first
-{\tt GraphImage} slot position of the {\tt TwoDimensionalViewport}.
+This section demonstrates how to append a two-di\-men\-sion\-al graph
+to a viewport already containing other graphs.  The default {\bf draw}
+command places a graph into the first {\tt GraphImage} slot position
+of the {\tt TwoDimensionalViewport}.
 
 This graph is in the first slot in its viewport.
 
@@ -16194,8 +16196,7 @@ of two variables $x$ and $y$ is:
 \end{center}
 where $a..b$ and $c..d$ define the range of $x$
 and $y$, and where {\it options} prescribes zero or more
-options as described in \ref{ugGraphThreeDOptions} 
-on page~\pageref{ugGraphThreeDOptions}.
+options as described in \sectionref{ugGraphThreeDOptions}.
 An example of an option is $title == "Title of Graph".$
 An alternative format involving a function $f$ is also
 available.\\
@@ -16250,8 +16251,7 @@ $z = h(t)$ is:
 \end{center}
 where $a..b$ defines the range of the independent variable
 $t$, and where {\it options} prescribes zero or more options
-as described in \ref{ugGraphThreeDOptions} 
-on page~\pageref{ugGraphThreeDOptions}.
+as described in \sectionref{ugGraphThreeDOptions}.
 An example of an option is $title == "Title of Graph".$
 An alternative format involving functions $f$, $g$ and
 $h$ is also available.\\
@@ -16324,7 +16324,7 @@ and $z = h(u,v)$ is:
 where $a..b$ and $c..d$ define the range of the
 independent variables $u$ and $v$, and where
 {\it options} prescribes zero or more options as described in
-\ref{ugGraphThreeDOptions} on page~\pageref{ugGraphThreeDOptions}.
+\sectionref{ugGraphThreeDOptions}.
 An example of an option is $title == "Title of Graph".$
 An alternative format involving functions $f$, $g$ and
 $h$ is also available.\\
@@ -16337,7 +16337,7 @@ The values of the functions supplied to {\bf surface} are
 \index{parabolic cylindrical coordinate system}
 interpreted in coordinates as given by a {\tt coordinates} option,
 here as parabolic cylindrical coordinates (see
-\ref{ugGraphCoord} on page~\pageref{ugGraphCoord}).
+\sectionref{ugGraphCoord}.
 
 \spadgraph{draw(surface(u*cos(v), u*sin(v), v*cos(u)), u=-4..4, v=0..\%pi, coordinates== parabolicCylindrical)}
 
@@ -16481,7 +16481,7 @@ Normally the Cartesian coordinate system is used.
 \index{Cartesian!coordinate system}
 To change this, use the {\tt coordinates} option.
 \index{coordinate system!Cartesian}
-For details, see \ref{ugGraphCoord} on page~\pageref{ugGraphCoord}.
+For details, see \sectionref{ugGraphCoord}.
 
 \spadcommand{m(u:DFLOAT,v:DFLOAT):DFLOAT == 1 }
 \begin{verbatim}
@@ -17913,16 +17913,15 @@ operations defined on these types and the related complex types.
 \index{numeric operations}
 %
 As we mentioned in Chapter 
-\ref{ugIntro} on page~\pageref{ugIntro}, the {\tt Float} type is a software
+\sectionref{ugIntro}, the {\tt Float} type is a software
 implementation of floating-point numbers in which the exponent and the
 \index{floating-point number}
 significand may have any number of digits.
 \index{number!floating-point}
-See 
-\ref{FloatXmpPage} on page~\pageref{FloatXmpPage} 
+See \domainref{Float}
 for detailed information about this domain.
-The {\tt DoubleFloat} (see \ref{DoubleFloatXmpPage} on 
-page~\pageref{DoubleFloatXmpPage}) is usually a hardware implementation 
+The \domainref{DoubleFloat}
+is usually a hardware implementation 
 of floating point numbers, corresponding to machine double
 precision.
 The types {\tt Complex Float} and {\tt Complex DoubleFloat} are
@@ -18590,8 +18589,7 @@ $$
 
 Convert this to have coefficients in the finite
 field with $19^3$ elements.
-See \ref{ugProblemFinite} on page~\pageref{ugProblemFinite} 
-for more information about finite fields.
+See \sectionref{ugProblemFinite} for more information about finite fields.
 
 \spadcommand{factor(u :: POLY FFX(PF 19,3)) }
 $$
@@ -18783,10 +18781,9 @@ In this section we show you how to work with one root or all roots
 of a polynomial.
 These roots are represented symbolically (as opposed to being
 numeric approximations).
-See \ref{ugxProblemOnePol} on page~\pageref{ugxProblemOnePol} and 
-\ref{ugxProblemPolSys} on page~\pageref{ugxProblemPolSys} for
-information about solving for the roots of one or more
-polynomials.
+See \sectionref{ugxProblemOnePol} and 
+\sectionref{ugxProblemPolSys} for
+information about solving for the roots of one or more polynomials.
 
 \subsection{Using a Single Root of a Polynomial}
 \label{ugxProblemSymRootOne}
@@ -18945,7 +18942,7 @@ $$
 
 Corresponding to the pair of operations
 {\bf rootOf}/{\bf zeroOf} in
-\ref{ugxProblemOnePol} on page~\pageref{ugxProblemOnePol}, there is
+\sectionref{ugxProblemOnePol}, there is
 an operation {\bf zerosOf} that, like {\bf rootsOf},
 computes all the roots
 of a given polynomial, but which expresses some of them in terms of
@@ -19278,7 +19275,7 @@ systems of linear equations, finding the roots of polynomials and
 \index{linear equation}
 solving systems of polynomial equations.
 For a discussion of the solution of differential equations, see
-\ref{ugProblemDEQ} on page~\pageref{ugProblemDEQ}.
+\sectionref{ugProblemDEQ}.
 
 \subsection{Solution of Systems of Linear Equations}
 \label{ugxProblemLinSys}
@@ -19591,8 +19588,7 @@ to {\bf solve} for single equations.
 Instead of a polynomial equation, one has to give a list of
 equations and instead of a single variable to solve for, a list of
 variables.
-For solutions of single equations see 
-\ref{ugxProblemOnePol} on page~\pageref{ugxProblemOnePol}.
+For solutions of single equations see \sectionref{ugxProblemOnePol}.
 
 Use the operation {\bf solve} if you want implicitly presented
 solutions.
@@ -20143,8 +20139,7 @@ $$
 Sometimes {\bf integrate} can involve symbolic algebraic numbers
 such as those returned by \spadfunFrom{rootOf}{Expression}.
 To see how to work with these strange generated symbols (such as
-$\%\%a0$), see 
-\ref{ugxProblemSymRootAll} on page~\pageref{ugxProblemSymRootAll}.
+$\%\%a0$), see \sectionref{ugxProblemSymRootAll}.
 
 Definite integration is the process of computing the area between
 \index{integration!definite}
@@ -20257,8 +20252,7 @@ can also use {\bf taylor}, {\bf laurent} and {\bf puiseux} in
 situations where you know what kind of exponents are involved.
 
 For information about solving differential equations in terms of
-power series, see 
-\ref{ugxProblemDEQSeries} on page~\pageref{ugxProblemDEQSeries}.
+power series, see \sectionref{ugxProblemDEQSeries}.
 
 \subsection{Creation of Power Series}
 \label{ugxProblemSeriesCreate}
@@ -20353,8 +20347,7 @@ $$
 
 You can also convert an expression into a series expansion.  This
 expression creates the series expansion of $1/log(y)$ about $y = 1$.
-For details and more examples, see \ref{ugxProblemSeriesConversions} 
-on page~\pageref{ugxProblemSeriesConversions}.
+For details and more examples, see \sectionref{ugxProblemSeriesConversions}.
 
 \spadcommand{series(1/log(y),y = 1)}
 $$
@@ -20382,10 +20375,9 @@ $$
 
 You can create power series with more general coefficients.  You
 normally accomplish this via a type declaration (see 
-\ref{ugTypesDeclare} on page~\pageref{ugTypesDeclare}).  
-See \ref{ugxProblemSeriesFunctions} on 
-page~\pageref{ugxProblemSeriesFunctions} for some warnings about working with 
-declared series.
+\sectionref{ugTypesDeclare}).
+See \sectionref{ugxProblemSeriesFunctions} 
+for some warnings about working with declared series.
 
 We declare that $y$ is a one-variable Taylor series
 \index{series!Taylor} ({\tt UTS} is the abbreviation for 
@@ -20426,7 +20418,7 @@ $$
 
 You can also create a power series by giving an explicit formula for
 its $n$-th coefficient.  For details and more examples, see
-\ref{ugxProblemSeriesFormula} on page~\pageref{ugxProblemSeriesFormula}.
+\sectionref{ugxProblemSeriesFormula}.
 
 To create a series about $w = 0$ whose $n$-th Taylor coefficient is
 $1/n!$, you can evaluate this expression.  This is the Taylor
@@ -21133,8 +21125,7 @@ functions by giving formulas for their coefficients.  You can also
 compute such series expansions directly simply by specifying the
 function and the point about which the series is to be expanded.
 \index{GenerateUnivariatePowerSeries} See
-\ref{ugxProblemSeriesConversions} on 
-page~\pageref{ugxProblemSeriesConversions} for more information.
+\sectionref{ugxProblemSeriesConversions} for more information.
 
 Consider the Taylor expansion of $e^x$ \index{series!Taylor}
 about $x = 0$:
@@ -21177,8 +21168,7 @@ specifies that the series is to be expanded in powers of $(x - 0)$,
 that is, in powers of $x$.  Since we did not specify an initial
 degree, the first term in the series was the term of degree 0 (the
 constant term).  Note that the formula was given as an anonymous
-function.  These are discussed in \ref{ugUserAnon} on 
-page~\pageref{ugUserAnon}.
+function.  These are discussed in \sectionref{ugUserAnon}.
 
 Consider the Taylor expansion of $log x$ about $x = 1$:
 
@@ -21344,8 +21334,8 @@ finite object.
 In general this is the zero-equivalence problem and is undecidable.\\
 }
 
-As we discussed in \ref{ugxProblemSeriesConversions} on 
-page~\pageref{ugxProblemSeriesConversions}, you can also use
+As we discussed in \sectionref{ugxProblemSeriesConversions},
+you can also use
 the operations {\bf taylor}, {\bf laurent} and {\bf puiseux} instead
 of {\bf series} if you know ahead of time what kind of exponents a
 series has.  You can't go wrong using {\bf series}, though.
@@ -21633,7 +21623,7 @@ when integrating factors can be found just by integration.
 \end{itemize}
 
 For a discussion of the solution of systems of linear and polynomial
-equations, see \ref{ugProblemLinPolEqn} on page~\pageref{ugProblemLinPolEqn}.
+equations, see \sectionref{ugProblemLinPolEqn}.
 
 \subsection{Closed-Form Solutions of Linear Differential Equations}
 \label{ugxProblemLDEQClosed}
@@ -22189,8 +22179,7 @@ different representations of extensions and different extensions of a
 single field.  Finally, note that you usually need to package-call
 operations from finite fields if the operations do not take as an
 argument an object of the field.  See 
-\ref{ugTypesPkgCall} on page~\pageref{ugTypesPkgCall} for more
-information on package-calling.
+\sectionref{ugTypesPkgCall} for more information on package-calling.
 
 \subsection{Modular Arithmetic and Prime Fields}
 \label{ugxProblemFinitePrime}
@@ -22526,9 +22515,8 @@ representation that performs arithmetic with univariate (one-variable)
 polynomials modulo an irreducible polynomial.  This polynomial may be
 given explicitly by you or automatically generated.  The ground field
 may be the prime field or one you specify.  See
-\ref{ugxProblemFiniteExtensionFinite} on 
-page~\pageref{ugxProblemFiniteExtensionFinite} for general information about
-finite field extensions.
+\sectionref{ugxProblemFiniteExtensionFinite} 
+for general information about finite field extensions.
 
 For {\tt FiniteField} (abbreviation {\tt FF}) you provide a prime
 number $p$ and an extension degree $n$.  This degree can be 1.
@@ -22700,7 +22688,7 @@ cyclic multiplicative group).  Multiplication (and hence
 exponentiation) using this representation is easy.  To do addition, we
 consider our primitive element as the root of a primitive polynomial
 (an irreducible polynomial whose roots are all primitive).  See
-\ref{ugxProblemFiniteUtility} on page~\pageref{ugxProblemFiniteUtility} 
+\sectionref{ugxProblemFiniteUtility}
 for examples of how to compute such a polynomial.
 
 To use {\tt FiniteFieldCyclicGroup} you provide a prime number and an
@@ -22778,8 +22766,7 @@ polynomial.
 \returnType{Type: Domain}
 
 We use a utility operation to generate an irreducible primitive
-polynomial (see 
-\ref{ugxProblemFiniteUtility} on page~\pageref{ugxProblemFiniteUtility}).  
+polynomial (see \sectionref{ugxProblemFiniteUtility}).
 The polynomial has one variable that is ``anonymous'': 
 it displays as a question mark.
 
@@ -22900,8 +22887,7 @@ The degree of the extension is the degree of the polynomial.
 \returnType{Type: Domain}
 
 We use a utility operation to generate an irreducible normal
-polynomial (see 
-\ref{ugxProblemFiniteUtility} on page~\pageref{ugxProblemFiniteUtility}).  
+polynomial (see \sectionref{ugxProblemFiniteUtility}).  p
 The polynomial has
 one variable that is ``anonymous'': it displays as a question mark.
 
@@ -23039,8 +23025,7 @@ $$
 
 There are also conversions available for the situation, when $K_m$ and
 $K_n$ are represented in different ways (see
-\ref{ugxProblemFiniteExtensionFinite} on 
-page~\pageref{ugxProblemFiniteExtensionFinite}).  For example let's choose
+\sectionref{ugxProblemFiniteExtensionFinite}).  For example let's choose
 $K_m$ where the representation is 0 plus the cyclic multiplicative
 group and $K_n$ with a normal basis representation.
 
@@ -24715,8 +24700,8 @@ In this chapter we show examples of many of the most commonly used
 AXIOM domains and packages. The sections are organized by constructor
 names.
 
-\section{AssociationList}
-\label{AssociationListXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{AssociationList}
 
 The {\tt AssociationList} constructor provides a general structure for
 associative storage.  This type provides association lists in which
@@ -24863,13 +24848,11 @@ $$
 \returnType{Type: 
 AssociationList(String,Record(monthsOld: Integer,gender: String))}
 
-For more information about tables, 
-see \ref{TableXmpPage} on page~\pageref{TableXmpPage}.
-For more information about lists, 
-see \ref{ListXmpPage} on page~\pageref{ListXmpPage}.
+For more information about tables, see \domainref{Table}.
+For more information about lists, see \domainref{List}.
 
-\section{BalancedBinaryTree}
-\label{BalancedBinaryTreeXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{BalancedBinaryTree}
 
 {\tt BalancedBinaryTrees(S)} is the domain of balanced binary trees
 with elements of type {\tt S} at the nodes.  A binary tree is either
@@ -25004,14 +24987,13 @@ $$
 $$
 \returnType{Type: PositiveInteger}
 
-\section{BasicOperator}
-\label{BasicOperatorXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{BasicOperator}
 
 A basic operator is an object that can be symbolically applied to a
 list of arguments from a set, the result being a kernel over that set
 or an expression.  In addition to this section, please see
-\ref{ExpressionXmpPage} on page~\pageref{ExpressionXmpPage} and 
-\ref{KernelXmpPage} on page~\pageref{KernelXmpPage} for additional
+\domainref{Expression} and \domainref{Kernel} for additional
 information and examples.
 
 You create an object of type {\tt BasicOperator} by using the
@@ -25058,8 +25040,7 @@ $$
 \returnType{Type: Union(Record(particular: Expression Integer,
 basis: List Expression Integer),...)}
 
-See \ref{ugProblemDEQPage} on page~\pageref{ugProblemDEQPage} 
-in Section \ref{ugProblemDEQNumber} on page~\pageref{ugProblemDEQNumber}
+See \sectionref{ugProblemDEQPage}
 for this kind of use of {\tt BasicOperator}.
 
 Use the single argument form of \spadfunFrom{operator}{BasicOperator}
@@ -25194,17 +25175,15 @@ table()
 $$
 \returnType{Type: AssociationList(String,None)}
 
-\section{BinaryExpansion}
-\label{BinaryExpansionXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{BinaryExpansion}
 
 All rational numbers have repeating binary expansions.  Operations to
 access the individual bits of a binary expansion can be obtained by
 converting the value to {\tt RadixExpansion(2)}.  More examples of
 expansions are available in 
-\ref{DecimalExpansionXmpPage} on page~\pageref{DecimalExpansionXmpPage},
-\ref{HexadecimalExpansionXmpPage} on 
-page~\pageref{HexadecimalExpansionXmpPage}, and 
-\ref{RadixExpansionXmpPage} on page~\pageref{RadixExpansionXmpPage}.
+\domainref{DecimalExpansion}, \domainref{HexadecimalExpansion}, and
+\domainref{RadixExpansion}.
 
 The expansion (of type {\tt BinaryExpansion}) of a rational number
 is returned by the \spadfunFrom{binary}{BinaryExpansion} operation.
@@ -25303,8 +25282,8 @@ x+{1.{\overline {01}}}
 $$
 \returnType{Type: Polynomial BinaryExpansion}
 
-\section{BinarySearchTree}
-\label{BinarySearchTreeXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{BinarySearchTree}
 
 {\tt BinarySearchTree(R)} is the domain of binary trees with elements
 of type {\tt R}, ordered across the nodes of the tree.  A non-empty
@@ -25439,8 +25418,8 @@ $$
 $$
 \returnType{Type: Boolean}
 
-\section{CardinalNumber}
-\label{CardinalNumberXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{CardinalNumber}
 
 The {\tt CardinalNumber} domain can be used for values indicating the
 cardinality of sets, both finite and infinite.  For example, the
@@ -25653,8 +25632,8 @@ Aleph \left({2} \right)
 $$
 \returnType{Type: CardinalNumber}
 
-\section{CartesianTensor}
-\label{CartesianTensorXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{CartesianTensor}
 
 {\tt CartesianTensor(i0,dim,R)} provides Cartesian tensors with
 components belonging to a commutative ring {\tt R}.  Tensors can be
@@ -26535,13 +26514,13 @@ polynomial or expression type for the components.  In this case, it is
 up to the user to satisfy any constraints which arise on the basis of
 this interpretation.
 
-\section{Character}
-\label{CharacterXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{Character}
+
 The members of the domain {\tt Character} are values
 representing letters, numerals and other text elements.
 For more information on related topics, see
-\ref{CharacterClassXmpPage} on page~\pageref{CharacterClassXmpPage} and 
-\ref{StringXmpPage} on page~\pageref{StringXmpPage}.
+\domainref{CharacterClass} and \domainref{String}.
 
 Characters can be obtained using {\tt String} notation.
 
@@ -26667,8 +26646,9 @@ $$
 $$
 \returnType{Type: List Boolean}
 
-\section{CharacterClass}
-\label{CharacterClassXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{CharacterClass}
+
 The {\tt CharacterClass} domain allows classes of characters to be
 defined and manipulated efficiently.
  
@@ -26781,11 +26761,11 @@ $$
 \returnType{Type: CharacterClass}
  
 For more information on related topics, see 
-\ref{CharacterXmpPage} on page~\pageref{CharacterXmpPage} and
-\ref{StringXmpPage} on page~\pageref{StringXmpPage}.
+\domainref{Character} and \domainref{String}.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{CliffordAlgebra}
 
-\section{CliffordAlgebra}
-\label{CliffordAlgebraXmpPage}
 \noindent
 
 {\tt CliffordAlgebra(n,K,Q)} defines a vector space of dimension $2^n$
@@ -26860,7 +26840,7 @@ c+{d \  {e \sb {1}}}
 $$
 \returnType{Type: CliffordAlgebra(1,Fraction Polynomial Integer,MATRIX)}
 
-See \ref{ComplexXmpPage} on page~\pageref{ComplexXmpPage} 
+See \domainref{Complex}
 for examples of Axiom's constructor implementing complex numbers.
 
 \spadcommand{x * y }
@@ -26965,7 +26945,7 @@ $$
 $$
 \returnType{Type: CliffordAlgebra(2,Fraction Polynomial Integer,MATRIX)}
 
-See \ref{QuaternionXmpPage} on page~\pageref{QuaternionXmpPage} 
+See \domainref{Quaternion}
 for examples of Axiom's constructor implementing quaternions.
 
 \spadcommand{y * x }
@@ -27151,15 +27131,15 @@ $$
 $$
 \returnType{Type: CliffordAlgebra(4,Fraction Integer,MATRIX)}
 
-\section{Complex}
-\label{ComplexXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{Complex}
 
 The {\tt Complex} constructor implements complex objects over a
 commutative ring {\tt R}.  Typically, the ring {\tt R} is {\tt Integer}, 
 {\tt Fraction Integer}, {\tt Float} or {\tt DoubleFloat}.
 {\tt R} can also be a symbolic type, like {\tt Polynomial Integer}.
 For more information about the numerical and graphical aspects of
-complex numbers, see \ref{ugProblemNumeric} on page~\pageref{ugProblemNumeric}.
+complex numbers, see \sectionref{ugProblemNumeric}.
 
 Complex objects are created by the \spadfunFrom{complex}{Complex} operation.
 
@@ -27203,9 +27183,7 @@ $$
 $$
 \returnType{Type: Complex Fraction Integer}
 
-Use a conversion (\ref{ugTypesConvertPage} on 
-page~\pageref{ugTypesConvertPage} in Section 
-\ref{ugTypesConvertNumber} on page~\pageref{ugTypesConvertNumber}) 
+Use a conversion (see \sectionref{ugTypesConvertPage})
 to view the last object as a fraction of complex integers.
 
 \spadcommand{\% :: Fraction Complex Integer }
@@ -27291,8 +27269,8 @@ $$
 $$
 \returnType{Type: Factored Complex Integer}
 
-\section{ContinuedFraction}
-\label{ContinuedFractionXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{ContinuedFraction}
 
 Continued fractions have been a fascinating and useful tool in
 mathematics for well over three hundred years.  Axiom implements
@@ -27300,7 +27278,7 @@ continued fractions for fractions of any Euclidean domain.  In
 practice, this usually means rational numbers.  In this section we
 demonstrate some of the operations available for manipulating both
 finite and infinite continued fractions.  It may be helpful if you
-review \ref{StreamXmpPage} on page~\pageref{StreamXmpPage} to remind 
+review \domainref{Stream} to remind 
 yourself of some of the operations with streams.
 
 The {\tt ContinuedFraction} domain is a field and therefore you can
@@ -27662,8 +27640,8 @@ $$
 $$
 \returnType{Type: Stream Float}
 
-\section{CycleIndicators}
-\label{CycleIndicatorsXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{CycleIndicators}
 
 This section is based upon the paper J. H. Redfield, ``The Theory of
 Group-Reduced Distributions'', American J. Math.,49 (1927) 433-455,
@@ -28294,8 +28272,8 @@ The smallest is
 3
 \end{verbatim}
 
-\section{DeRhamComplex}
-\label{DeRhamComplexXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{DeRhamComplex}
 
 The domain constructor {\tt DeRhamComplex} creates the class of
 differential forms of arbitrary degree over a coefficient ring.  The
@@ -28520,8 +28498,7 @@ $$
 $$
 \returnType{Type: DeRhamComplex(Integer,[x,y,z])}
 
-Now we define some ``basic operators'' (see 
-\ref{OperatorXmpPage} on page~\pageref{OperatorXmpPage}).
+Now we define some ``basic operators'' (see \domainref{Operator}).
 
 \spadcommand{a : BOP := operator('a) }
 $$
@@ -28748,17 +28725,15 @@ a
 $$
 \returnType{Type: Expression Integer}
 
-\section{DecimalExpansion}
-\label{DecimalExpansionXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{DecimalExpansion}
 
 All rationals have repeating decimal expansions.  Operations to access
 the individual digits of a decimal expansion can be obtained by
 converting the value to {\tt RadixExpansion(10)}.  More examples of
 expansions are available in 
-\ref{BinaryExpansionXmpPage} on page~\pageref{BinaryExpansionXmpPage},
-\ref{HexadecimalExpansionXmpPage} on 
-page~\pageref{HexadecimalExpansionXmpPage}, and 
-\ref{RadixExpansionXmpPage} on page~\pageref{RadixExpansionXmpPage}.
+\domainref{BinaryExpansion}, \domainref{HexadecimalExpansion}, and
+\domainref{RadixExpansion}.
 
 The operation \spadfunFrom{decimal}{DecimalExpansion} is used to create
 this expansion of type {\tt DecimalExpansion}.
@@ -28849,8 +28824,8 @@ x+{1.{\overline 3}}
 $$
 \returnType{Type: Polynomial DecimalExpansion}
 
-\section{DistributedMultivariatePolynomial}
-\label{DistributedMultivariatePolynomialXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{DistributedMultivariatePolynomial}
 
 \hyphenation{Homo-gen-eous-Dis-tributed-Multi-var-i-ate-Pol-y-nomial}
 
@@ -29013,18 +28988,13 @@ Gr\"{o}bner basis calculations which can be very
 sensitive to term ordering.
 
 For more information on related topics, see
-\ref{ugIntroVariablesPage} on page~\pageref{ugIntroVariablesPage} in Section 
-\ref{ugIntroVariablesNumber} on page~\pageref{ugIntroVariablesNumber},
-\ref{ugTypesConvertPage} on page~\pageref{ugTypesConvertPage} in Section 
-\ref{ugTypesConvertNumber} on page~\pageref{ugTypesConvertNumber},
-\ref{PolynomialXmpPage} on page~\pageref{PolynomialXmpPage},
-\ref{UnivariatePolynomialXmpPage} on 
-page~\pageref{UnivariatePolynomialXmpPage}, and
-\ref{MultivariatePolynomialXmpPage} on 
-page~\pageref{MultivariatePolynomialXmpPage}.
-
-\section{DoubleFloat}
-\label{DoubleFloatXmpPage}
+\sectionref{ugIntroVariablesPage},
+\sectionref{ugTypesConvertPage},
+\domainref{Polynomial}, \domainref{UnivariatePolynomial}, and
+\domainref{MultivariatePolynomial}.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{DoubleFloat}
 
 Axiom provides two kinds of floating point numbers.  The domain 
 {\tt Float} (abbreviation {\tt FLOAT}) implements a model of arbitrary
@@ -29126,20 +29096,17 @@ $$
 By far, the most common usage of {\tt DoubleFloat} is for functions to
 be graphed.  For more information about Axiom's numerical and
 graphical facilities, see Section
-\ref{ugGraph} on page~\pageref{ugGraph}, 
-\ref{ugProblemNumeric} on page~\pageref{ugProblemNumeric}, and 
-\ref{FloatXmpPage} on page~\pageref{FloatXmpPage}.
+\sectionref{ugGraph}, \sectionref{ugProblemNumeric}, and \domainref{Float}.
 
-\section{EqTable} 
-\label{EqTableXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{EqTable} 
 
 The {\tt EqTable} domain provides tables where the keys are compared
 using \spadfunFrom{eq?}{EqTable}.  Keys are considered equal only if
 they are the same instance of a structure.  This is useful if the keys
 are themselves updatable structures.  Otherwise, all operations are
 the same as for type {\tt Table}.  See 
-\ref{TableXmpPage} on page~\pageref{TableXmpPage} for general
-information about tables.
+\domainref{Table} for general information about tables.
 
 The operation \spadfunFrom{table}{EqTable} is here used to create a table
 where the keys are lists of integers.
@@ -29190,8 +29157,8 @@ $$
 $$
 \returnType{Type: PositiveInteger}
 
-\section{Equation}
-\label{EquationXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{Equation}
 
 The {\tt Equation} domain provides equations as mathematical objects.
 These are used, for example, as the input to various
@@ -29291,8 +29258,8 @@ $$
 $$
 \returnType{Type: Boolean}
 
-\section{Exit}
-\label{ExitXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{Exit}
 
 A function that does not return directly to its caller has {\tt Exit}
 as its return type.  The operation {\tt error} is an example of one
@@ -29353,14 +29320,11 @@ $$
 $$
 \returnType{Type: NonNegativeInteger}
 
-For functions which return no value at all, use {\tt Void}.  See
-\ref{ugUserPage} on page~\pageref{ugUserPage} in Section 
-\ref{ugUserNumber} on page~\pageref{ugUserNumber} and 
-\ref{VoidXmpPage} on page~\pageref{VoidXmpPage} for
-more information.
+For functions which return no value at all, use {\tt Void}. 
+\domainref{Void} for more information.
 
-\section{Expression}
-\label{ExpressionXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{Expression}
 
 {\tt Expression} is a constructor that creates domains whose objects
 can have very general symbolic forms.  Here are some examples:
@@ -29450,8 +29414,7 @@ that have category {\tt Field}.  Thus you can invert any non-zero
 expression and you shouldn't expect an operation like {\tt factor} to
 give you much information.  You can imagine expressions as being
 represented as quotients of ``multivariate'' polynomials where the
-``variables'' are kernels (see 
-\ref{KernelXmpPage} on page~\pageref{KernelXmpPage}).  A kernel can
+``variables'' are kernels (see \domainref{Kernel}.  A kernel can
 either be a symbol such as {\tt x} or a symbolic function application
 like {\tt sin(x + 4)}.  The second example is actually a nested kernel
 since the argument to {\tt sin} contains the kernel {\tt x}.
@@ -29464,8 +29427,7 @@ $$
 
 Actually, the argument to {\tt sin} is an expression, and so the
 structure of {\tt Expression} is recursive.  
-\ref{KernelXmpPage} on page~\pageref{KernelXmpPage}
-demonstrates how to extract the kernels in an expression.
+\domainref{Kernel} demonstrates how to extract the kernels in an expression.
 
 Use the HyperDoc Browse facility to see what operations are applicable
 to expression.  At the time of this writing, there were 262 operations
@@ -29510,9 +29472,7 @@ $$
 $$
 \returnType{Type: Expression Integer}
 
-See 
-\ref{ugIntroCalcDerivPage} on page~\pageref{ugIntroCalcDerivPage} in Section 
-\ref{ugIntroCalcDerivNumber} on page~\pageref{ugIntroCalcDerivNumber}
+See \sectionref{ugIntroCalcDerivPage}
 for more examples of expressions and derivatives.
 
 \spadcommand{D(e, [x, y], [1, 2]) }
@@ -29551,18 +29511,12 @@ $$
 \returnType{Type: Expression Integer}
 
 See 
-\ref{ugIntroCalcLimitsPage} on page~\pageref{ugIntroCalcLimitsPage} in Section
-\ref{ugIntroCalcLimitsNumber} on page~\pageref{ugIntroCalcLimitsNumber} and 
-\ref{ugIntroSeriesPage} on page~\pageref{ugIntroSeriesPage} in Section
-\ref{ugIntroSeriesNumber} on page~\pageref{ugIntroSeriesNumber} 
-for more examples of expressions and
+\sectionref{ugIntroCalcLimitsPage} and 
+\sectionref{ugIntroSeriesPage} for more examples of expressions and
 calculus.  Differential equations involving expressions are discussed
-in \ref{ugProblemDEQPage} on page~\pageref{ugProblemDEQPage} in Section 
-\ref{ugProblemDEQNumber} on page~\pageref{ugProblemDEQNumber}.
+in \sectionref{ugProblemDEQPage} on page~\pageref{ugProblemDEQPage}.
 Chapter 8 has many advanced examples: see
-\ref{ugProblemIntegrationPage} on page~\pageref{ugProblemIntegrationPage} 
-in Section
-\ref{ugProblemIntegrationNumber} on page~\pageref{ugProblemIntegrationNumber} 
+\sectionref{ugProblemIntegrationPage}
 for a discussion of Axiom's integration facilities.
 
 When an expression involves no ``symbol kernels'' (for example, 
@@ -29654,12 +29608,11 @@ $$
 $$
 \returnType{Type: Expression Integer}
 
-See \ref{ugUserRulesPage} on page~\pageref{ugUserRulesPage} in Section 
-\ref{ugUserRulesNumber} on page~\pageref{ugUserRulesNumber} for
+See \sectionref{ugUserRulesPage} for
 examples of how to write your own rewrite rules for expressions.
 
-\section{Factored}
-\label{FactoredXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{Factored}
 
 {\tt Factored} creates a domain whose objects are kept in factored
 form as long as possible.  Thus certain operations like
@@ -29906,9 +29859,7 @@ $$
 \returnType{Type: Boolean}
 
 Another way to get the zero and one factored objects is to use
-package calling (see 
-\ref{ugTypesPkgCallPage} on page~\pageref{ugTypesPkgCallPage} in Section 
-\ref{ugTypesPkgCallNumber} on page~\pageref{ugTypesPkgCallNumber}).
+package calling (see \sectionref{ugTypesPkgCallPage}).
 
 \spadcommand{0\$Factored(Integer)}
 $$
@@ -29925,10 +29876,8 @@ $$
 \subsection{Creating New Factored Objects}
 
 The \spadfunFrom{map}{Factored} operation is used to iterate across
-the unit and bases of a factored object.  See
-\ref{FactoredFunctionsTwoXmpPage} on 
-page~\pageref{FactoredFunctionsTwoXmpPage} for a discussion of
-\spadfunFrom{map}{Factored}.
+the unit and bases of a factored object.  See \domainref{FactoredFunctions2}
+for a discussion of \spadfunFrom{map}{Factored}.
 
 The following four operations take a base and an exponent and create a
 factored object.  They differ in handling the flag component.
@@ -30040,8 +29989,8 @@ $$
 $$
 \returnType{Type: PositiveInteger}
 
-\section{FactoredFunctions2}
-\label{FactoredFunctions2XmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{FactoredFunctions2}
 
 The {\tt FactoredFunctions2} package implements one operation,
 \spadfunFrom{map}{FactoredFunctions2}, for applying an operation to every
@@ -30100,12 +30049,10 @@ $$
 \returnType{Type: Union("nil",...)}
 
 For more information about factored objects and their use, see
-\ref{FactoredXmpPage} on page~\pageref{FactoredXmpPage} and 
-\ref{ugProblemGaloisPage} on page~\pageref{ugProblemGaloisPage} in Section 
-\ref{ugProblemGaloisNumber} on page~\pageref{ugProblemGaloisNumber}.
+\domainref{Factored} and \sectionref{ugProblemGaloisPage}.
 
-\section{File}
-\label{FileXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{File}
 
 The {\tt File(S)} domain provides a basic interface to read and
 write values of type {\tt S} in files.
@@ -30225,13 +30172,11 @@ be represented in a file.  In particular, delayed values containing
 compiled functions cannot be saved.
 
 For more information on related topics, see 
-\ref{TextFileXmpPage} on page~\pageref{TextFileXmpPage},
-\ref{KeyedAccessFileXmpPage} on page~\pageref{KeyedAccessFileXmpPage}, 
-\ref{LibraryXmpPage} on page~\pageref{LibraryXmpPage}, and
-\ref{FileNameXmpPage} on page~\pageref{FileNameXmpPage}.
+\domainref{TextFile}, \domainref{KeyedAccessFile}, 
+\domainref{Library}, and \domainref{FileName}.
 
-\section{FileName}
-\label{FileNameXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{FileName}
  
 The {\tt FileName} domain provides an interface to the computer's file
 system.  Functions are provided to manipulate file names and to test
@@ -30390,8 +30335,8 @@ $$
 $$
 \returnType{Type: FileName}
 
-\section{FlexibleArray}
-\label{FlexibleArrayXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{FlexibleArray}
 
 The {\tt FlexibleArray} domain constructor creates one-dimensional
 arrays of elements of the same type.  Flexible arrays are an attempt
@@ -30404,8 +30349,7 @@ the new block.
 
 Flexible arrays have available most of the operations provided by 
 {\tt OneDimensionalArray} (see 
-\ref{OneDimensionalArrayXmpPage} on page~\pageref{OneDimensionalArrayXmpPage} 
-and \ref{VectorXmpPage} on page~\pageref{VectorXmpPage}).  
+\domainref{OneDimensionalArray} and \domainref{Vector}.
 Since flexible arrays are also of category 
 {\tt ExtensibleLinearAggregate}, they have operations {\tt concat!}, 
 {\tt delete!}, {\tt insert!}, {\tt merge!}, {\tt remove!}, 
@@ -30575,8 +30519,8 @@ $$
 $$
 \returnType{Type: Boolean}
 
-\section{Float}
-\label{FloatXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{Float}
 
 Axiom provides two kinds of floating point numbers.  The domain 
 {\tt Float} (abbreviation {\tt FLOAT}) implements a model of arbitrary
@@ -30593,10 +30537,8 @@ Arbitrary-precision floating-point arithmetic typically takes twenty
 to two hundred times more time than hardware floating point.
 
 For more information about Axiom's numeric and graphic facilities, see
-\ref{ugGraphPage} on page~\pageref{ugGraphPage} in Section 
-\ref{ugGraphNumber} on page~\pageref{ugGraphNumber},
-\ref{ugProblemNumeric} on page~\pageref{ugProblemNumeric}, and 
-\ref{DoubleFloatXmpPage} on page~\pageref{DoubleFloatXmpPage}.
+\sectionref{ugGraphPage}, \sectionref{ugProblemNumeric}, and
+\domainref{DoubleFloat}.
 
 \subsection{Introduction to Float}
 
@@ -30633,9 +30575,7 @@ $$
 
 \subsection{Conversion Functions}
 
-You can use conversion (\ref{ugTypesConvertPage} on
-page~\pageref{ugTypesConvertPage} in Section
-\ref{ugTypesConvertNumber} on page~\pageref{ugTypesConvertNumber}) to
+You can use conversion (\sectionref{ugTypesConvertPage} to
 go back and forth between {\tt Integer}, {\tt Fraction Integer} and
 {\tt Float}, as appropriate.
 
@@ -30975,8 +30915,8 @@ $$
 $$
 \returnType{Type: PositiveInteger}
 
-\section{Fraction}
-\label{FractionXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{Fraction}
 
 The {\tt Fraction} domain implements quotients.  The elements must
 belong to a domain of category {\tt IntegralDomain}: multiplication
@@ -31028,7 +30968,7 @@ Operations like \spadfunFrom{max}{Fraction},
 \spadfunFrom{positive?}{Fraction} and \spadfunFrom{zero?}{Fraction}
 are all available if they are provided for the numerators and
 denominators.  
-See \ref{IntegerXmpPage} on page~\pageref{IntegerXmpPage} for examples.
+See \domainref{Integer} for examples.
 
 Don't expect a useful answer from \spadfunFrom{factor}{Fraction},
 \spadfunFrom{gcd}{Fraction} or \spadfunFrom{lcm}{Fraction} if you apply
@@ -31068,10 +31008,8 @@ $$
 \returnType{Type: ContinuedFraction Integer}
 
 Use {\tt partialFraction} to create a partial fraction.
-See 
-\ref{ContinuedFractionXmpPage} on page~\pageref{ContinuedFractionXmpPage} 
-and \ref{PartialFractionXmpPage} on page~\pageref{PartialFractionXmpPage} for
-additional information and examples.
+See \domainref{ContinuedFraction} and and \domainref{PartialFraction}
+for additional information and examples.
 
 \spadcommand{partialFraction(7,12)}
 $$
@@ -31088,9 +31026,7 @@ $$
 $$
 \returnType{Type: Complex Fraction Integer}
 
-Conversion is discussed in detail in 
-Section~\ref{ugTypesConvertPage} 
-on page~\pageref{ugTypesConvertPage}.
+Conversion is discussed in detail in \sectionref{ugTypesConvertPage}.
 
 \spadcommand{g :: FRAC COMPLEX INT }
 $$
@@ -31098,8 +31034,8 @@ $$
 $$
 \returnType{Type: Fraction Complex Integer}
 
-\section{FullPartialFractionExpansion}
-\label{FullPartialFractionExpansionXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{FullPartialFractionExpansion}
 
 The domain {\tt FullPartialFractionExpansion} implements
 factor-free conversion of quotients to full partial fractions.
@@ -31414,17 +31350,15 @@ $$
 For more information, see the paper: Bronstein, M and Salvy, B.
 ``Full Partial Fraction Decomposition of Rational Functions,'' 
 {\it Proceedings of ISSAC'93, Kiev}, ACM Press.  Also see
-\ref{PartialFractionXmpPage} on page~\pageref{PartialFractionXmpPage} 
-for standard partial fraction decompositions.
+\domainref{PartialFraction} for standard partial fraction decompositions.
 
-\section{GeneralSparseTable}
-\label{GeneralSparseTableXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{GeneralSparseTable}
 
 Sometimes when working with tables there is a natural value to use as
 the entry in all but a few cases.  The {\tt GeneralSparseTable}
 constructor can be used to provide any table type with a default value
-for entries.  See \ref{TableXmpPage} on page~\pageref{TableXmpPage} 
-for general information about tables.  
+for entries.  See \domainref{Table} for general information about tables.  
 
 Suppose we launched a fund-raising campaign to raise fifty thousand dollars.
 To record the contributions, we want a table with strings as keys
@@ -31480,8 +31414,8 @@ So the project is cancelled and we can delete the data base:
 
 \spadcommand{)system rm -r kaf*.sdata }
 
-\section{GroebnerFactorizationPackage}
-\label{GroebnerFactorizationPackageXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{GroebnerFactorizationPackage}
 
 Solving systems of polynomial equations with the Gr\"{o}bner basis
 algorithm can often be very time consuming because, in general, the
@@ -31678,14 +31612,13 @@ calculation does not terminate in a reasonable time.  See the source
 code for {\tt GroebnerFactorizationPackage} in {\bf groebf.input} 
 for more details about the algorithms used.
 
-\section{Heap}
-\label{HeapXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{Heap}
 
 The domain {\tt Heap(S)} implements a priority queue of objects of
 type {\tt S} such that the operation {\tt extract!} removes and
 returns the maximum element.  The implementation represents heaps as
-flexible arrays (see 
-\ref{FlexibleArrayXmpPage} on page~\pageref{FlexibleArrayXmpPage}).  
+flexible arrays (see \domainref{FlexibleArray}.)
 The representation and algorithms give complexity of $O(\log(n))$ 
 for insertion and extractions, and $O(n)$ for construction.
 
@@ -31764,8 +31697,8 @@ $$
 $$
 \returnType{Type: List Integer}
 
-\section{HexadecimalExpansion}
-\label{HexadecimalExpansionXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{HexadecimalExpansion}
 
 All rationals have repeating hexadecimal expansions.  The operation
 \spadfunFrom{hex}{HexadecimalExpansion} returns these expansions of
@@ -31773,9 +31706,8 @@ type {\tt HexadecimalExpansion}.  Operations to access the individual
 numerals of a hexadecimal expansion can be obtained by converting the
 value to {\tt RadixExpansion(16)}.  More examples of expansions are
 available in the 
-\ref{DecimalExpansionXmpPage} on page~\pageref{DecimalExpansionXmpPage},
-\ref{BinaryExpansionXmpPage} on page~\pageref{BinaryExpansionXmpPage}, and 
-\ref{RadixExpansionXmpPage} on page~\pageref{RadixExpansionXmpPage}.
+\domainref{DecimalExpansion}, \domainref{BinaryExpansion}, and
+\domainref{RadixExpansion}.
 
 This is a hexadecimal expansion of a rational number.
 
@@ -31853,22 +31785,17 @@ x+{1.{\overline 5}}
 $$
 \returnType{Type: Polynomial HexadecimalExpansion}
 
-\section{Integer}
-\label{IntegerXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{Integer}
 
 Axiom provides many operations for manipulating arbitrary precision
 integers.  In this section we will show some of those that come from
 {\tt Integer} itself plus some that are implemented in other packages.
 More examples of using integers are in the following sections:
-\ref{ugIntroNumbersPage} on page~\pageref{ugIntroNumbersPage} in section 
-\ref{ugIntroNumbersNumber} on page~\pageref{ugIntroNumbersNumber}
-\ref{IntegerNumberTheoryFunctionsXmpPage} on 
-page~\pageref{IntegerNumberTheoryFunctionsXmpPage},
-\ref{DecimalExpansionXmpPage} on page~\pageref{DecimalExpansionXmpPage}, 
-\ref{BinaryExpansionXmpPage} on page~\pageref{BinaryExpansionXmpPage},
-\ref{HexadecimalExpansionXmpPage} on 
-page~\pageref{HexadecimalExpansionXmpPage}, and 
-\ref{RadixExpansionXmpPage} on page~\pageref{RadixExpansionXmpPage}.
+\sectionref{ugIntroNumbersPage},
+\domainref{IntegerNumberTheoryFunctions},
+\domainref{DecimalExpansion}, \domainref{BinaryExpansion}, 
+\domainref{HexadecimalExpansion}, and \domainref{RadixExpansion}.
 
 \subsection{Basic Functions}
 
@@ -32077,7 +32004,7 @@ $$
 
 The infix operator ``/'' is {\it not} used to compute the quotient of
 integers.  Rather, it is used to create rational numbers as described
-in \ref{FractionXmpPage} on page~\pageref{FractionXmpPage}.
+in \domainref{Fraction}.
 
 \spadcommand{13 / 4}
 $$
@@ -32105,9 +32032,7 @@ $$
 
 One integer is evenly divisible by another if the remainder is zero.
 The operation \spadfunFrom{exquo}{Integer} can also be used.  See
-\ref{ugTypesUnionsPage} on page~\pageref{ugTypesUnionsPage} in Section 
-\ref{ugTypesUnionsNumber} on page~\pageref{ugTypesUnionsNumber} for an
-example.
+\sectionref{ugTypesUnionsPage} for an example.
 
 \spadcommand{zero?(167604736446952 rem 2003644)}
 $$
@@ -32132,8 +32057,7 @@ $$
 $$
 \returnType{Type: PositiveInteger}
 
-Records are discussed in detail in Section 
-\ref{ugTypesRecords} on page~\pageref{ugTypesRecords}.
+Records are discussed in detail in \sectionref{ugTypesRecords}.
 
 \spadcommand{d.remainder }
 $$
@@ -32145,7 +32069,7 @@ $$
 
 Use the operation \spadfunFrom{factor}{Integer} to factor integers.
 It returns an object of type {\tt Factored Integer}.
-See \ref{FactoredXmpPage} on page~\pageref{FactoredXmpPage} 
+See \domainref{Factored} 
 for a discussion of the manipulation of factored objects.
 
 \spadcommand{factor 102400}
@@ -32201,7 +32125,7 @@ $$
 
 You might sometimes want to see the factorization of an integer
 when it is considered a {\it Gaussian integer}.
-See \ref{ComplexXmpPage} on page~\pageref{ComplexXmpPage} for more details.
+See \domainref{Complex} for more details.
 
 \spadcommand{factor(2 :: Complex Integer)}
 $$
@@ -32214,8 +32138,8 @@ $$
 \subsection{Some Number Theoretic Functions}
 
 Axiom provides several number theoretic operations for integers.
-More examples are in \ref{IntegerNumberTheoryFunctionsXmpPage} on 
-page~\pageref{IntegerNumberTheoryFunctionsXmpPage}.
+More examples are in \domainref{IntegerNumberTheoryFunctions}.
+
 
 The operation \spadfunFrom{fibonacci}{IntegerNumberTheoryFunctions}
 computes the Fibonacci numbers.  The algorithm has running time
@@ -32312,8 +32236,8 @@ $$
 $$
 \returnType{Type: RomanNumeral}
 
-\section{IntegerLinearDependence}
-\label{IntegerLinearDependenceXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{IntegerLinearDependence}
 
 The elements $v_1, \dots,v_n$ of a module {\tt M} over a ring {\tt R}
 are said to be {\it linearly dependent over {\tt R}} if there exist
@@ -32417,8 +32341,8 @@ $$
 $$
 \returnType{Type: Union(Vector Fraction Integer,...)}
 
-\section{IntegerNumberTheoryFunctions}
-\label{IntegerNumberTheoryFunctionsXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{IntegerNumberTheoryFunctions}
 
 The {\tt IntegerNumberTheoryFunctions} package contains a variety of
 operations of interest to number theorists.  Many of these operations
@@ -32641,16 +32565,16 @@ $$
 $$
 \returnType{Type: PositiveInteger}
 
-\section{Kernel}
-\label{KernelXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{Kernel}
 
 A {\it kernel} is a symbolic function application (such as {\tt sin(x+ y)}) 
 or a symbol (such as {\tt x}).  More precisely, a non-symbol
 kernel over a set {\it S} is an operator applied to a given list of
 arguments from {\it S}.  The operator has type {\tt BasicOperator}
-(see \ref{BasicOperatorXmpPage} on page~\pageref{BasicOperatorXmpPage}) 
+(see \domainref{BasicOperator}
 and the kernel object is usually part of an expression object (see 
-\ref{ExpressionXmpPage} on page~\pageref{ExpressionXmpPage}).
+\domainref{Expression}.
 
 Kernels are created implicitly for you when you create expressions.
 
@@ -32862,12 +32786,11 @@ $$
 Conceptually, an object of type {\tt Expression} can be thought of a
 quotient of multivariate polynomials, where the ``variables'' are
 kernels.  The arguments of the kernels are again expressions and so
-the structure recurses.  See \ref{ExpressionXmpPage} on 
-page~\pageref{ExpressionXmpPage} for examples of
+the structure recurses.  See \domainref{Expression} for examples of
 using kernels to take apart expression objects.
 
-\section{KeyedAccessFile}
-\label{KeyedAccessFileXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{KeyedAccessFile}
 
 The domain {\tt KeyedAccessFile(S)} provides files which can be used
 as associative tables.  Data values are stored in these files and can
@@ -33050,12 +32973,10 @@ $$
 \spadcommand{)system rm -r /tmp/editor.year}
 
 For more information on related topics, see 
-\ref{FileXmpPage} on page~\pageref{FileXmpPage},
-\ref{TextFileXmpPage} on page~\pageref{TextFileXmpPage}, and 
-\ref{LibraryXmpPage} on page~\pageref{LibraryXmpPage}.
+\domainref{File}, \domainref{TextFile}, and \domainref{Library}.
 
-\section{LexTriangularPackage}
-\label{LexTriangularPackageXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{LexTriangularPackage}
 
 The {\tt LexTriangularPackage} package constructor provides an
 implementation of the {\em lexTriangular} algorithm (D. Lazard
@@ -36874,8 +36795,8 @@ to the indeterminate {\bf f}, the second to {\bf e} and so on.  See
 {\tt ZeroDimensionalSolvePackage} to learn more about the 
 \spadfunFrom{realSolve}{ZeroDimensionalSolvePackage} operation.
 
-\section{LazardSetSolvingPackage}
-\label{LazardSetSolvingPackageXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{LazardSetSolvingPackage}
 
 The {\tt LazardSetSolvingPackage} package constructor solves
 polynomial systems by means of Lazard triangular sets.  However one
@@ -38156,8 +38077,8 @@ zero-dimensional regular chains.  Moreover, each of them is normalized
 components may be investigated further with the 
 {\tt ZeroDimensionalSolvePackage} package constructor.
 
-\section{Library}
-\label{LibraryXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{Library}
  
 The {\tt Library} domain provides a simple way to store Axiom values
 in a file.  This domain is similar to {\tt KeyedAccessFile} but fewer
@@ -38225,12 +38146,10 @@ file system.
 \spadcommand{)system rm -rf /tmp/Neat.stuff  }
  
 For more information on related topics, see 
-\ref{FileXmpPage} on page~\pageref{FileXmpPage},
-\ref{TextFileXmpPage} on page~\pageref{TextFileXmpPage}, and 
-\ref{KeyedAccessFileXmpPage} on page~\pageref{KeyedAccessFileXmpPage}.
+\domainref{File}, \domainref{TextFile}, and \domainref{KeyedAccessFile}.
 
-\section{LieExponentials}
-\label{LieExponentialsXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{LieExponentials}
 
 \spadcommand{ a: Symbol := 'a }
 $$
@@ -38360,8 +38279,9 @@ $$
 $$
 \returnType{Type: LieExponentials(Symbol,Fraction Integer,3)}
 
-\section{LiePolynomial}
-\label{LiePolynomialXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{LiePolynomial}
+
 Declaration of domains
 
 \spadcommand{RN    := Fraction Integer }
@@ -38604,8 +38524,8 @@ $$
 $$
 \returnType{Type: LiePolynomial(Symbol,Fraction Integer)}
 
-\section{LinearOrdinaryDifferentialOperator}
-\label{LinearOrdinaryDifferentialOperatorXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{LinearOrdinaryDifferentialOperator}
 
 {\tt LinearOrdinaryDifferentialOperator(A, diff)} is the domain of
 linear ordinary differential operators with coefficients in a ring
@@ -38959,8 +38879,8 @@ $$
 $$
 \returnType{Type: List List Equation Fraction Polynomial Integer}
 
-\section{LinearOrdinaryDifferentialOperator1}
-\label{LinearOrdinaryDifferentialOperator1XmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{LinearOrdinaryDifferentialOperator1}
 
 {\tt LinearOrdinaryDifferentialOperator1(A)} is the domain of linear
 ordinary differential operators with coefficients in the differential ring
@@ -39232,8 +39152,8 @@ $$
 \returnType{Type: 
 LinearOrdinaryDifferentialOperator1 Fraction UnivariatePolynomial(x,Integer)}
 
-\section{LinearOrdinaryDifferentialOperator2}
-\label{LinearOrdinaryDifferentialOperator2XmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{LinearOrdinaryDifferentialOperator2}
 
 {\tt LinearOrdinaryDifferentialOperator2(A, M)} is the domain of
 linear ordinary differential operators with coefficients in the
@@ -39650,8 +39570,8 @@ SquareMatrix(3,
 UnivariatePolynomial(x,Integer)),
 UnivariatePolynomial(x,Integer))}
 
-\section{List}
-\label{ListXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{List}
 
 A \index{list} is a finite collection of elements in a specified
 order that can contain duplicates.  A list is a convenient structure
@@ -40023,12 +39943,10 @@ $$
 \returnType{Type: Stream Integer}
 
 What is created in this case is a {\tt Stream} which is a
-generalization of a list.  See 
-\ref{StreamXmpPage} on page~\pageref{StreamXmpPage} for more
-information.
+generalization of a list.  See \domainref{Stream} for more information.
 
-\section{LyndonWord}
-\label{LyndonWordXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{LyndonWord}
 
 Initialisations
 
@@ -40273,8 +40191,8 @@ $$
 $$
 \returnType{Type: LyndonWord Symbol}
 
-\section{Magma}
-\label{MagmaXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{Magma}
 
 Initialisations
 
@@ -40447,8 +40365,8 @@ $$
 $$
 \returnType{Type: Boolean}
 
-\section{MakeFunction}
-\label{MakeFunctionXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{MakeFunction}
 
 It is sometimes useful to be able to define a function given by
 the result of a calculation.
@@ -40675,12 +40593,10 @@ $$
 $$
 \returnType{Type: SquareMatrix(2,Integer)}
 
-For more information, see 
-\ref{ugUserMakePage} on page~\pageref{ugUserMakePage} in Section 
-\ref{ugUserMakeNumber} on page~\pageref{ugUserMakeNumber}.
+For more information, see \sectionref{ugUserMakePage}.
 
-\section{MappingPackage1}
-\label{MappingPackage1XmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{MappingPackage1}
 
 Function are objects of type {\tt Mapping}.  In this section we
 demonstrate some library operations from the packages 
@@ -40950,8 +40866,8 @@ $$
 $$
 \returnType{Type: List Integer}
 
-\section{Matrix}
-\label{MatrixXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{Matrix}
 
 The {\tt Matrix} domain provides arithmetic operations on matrices
 and standard functions from linear algebra.
@@ -41482,20 +41398,14 @@ $$
 \returnType{Type: Matrix Integer}
 
 For more information on related topics, see 
-\ref{ugIntroTwoDimPage} on page~\pageref{ugIntroTwoDimPage} in Section 
-\ref{ugIntroTwoDimNumber} on page~\pageref{ugIntroTwoDimNumber}, 
-\ref{ugProblemEigenPage} on page~\pageref{ugProblemEigenPage} in Section
-\ref{ugProblemEigenNumber} on page~\pageref{ugProblemEigenNumber}, 
-\ref{ugxFloatHilbertPage} on page~\pageref{ugxFloatHilbertPage} in Section
-\ref{ugxFloatHilbertNumber} on page~\pageref{ugxFloatHilbertNumber}, 
-\ref{PermanentXmpPage} on page~\pageref{PermanentXmpPage},
-\ref{VectorXmpPage} on page~\pageref{VectorXmpPage}, 
-\ref{OneDimensionalArrayXmpPage} on page~\pageref{OneDimensionalArrayXmpPage},
-and
-\ref{TwoDimensionalArrayXmpPage} on page~\pageref{TwoDimensionalArrayXmpPage}.
+\sectionref{ugIntroTwoDimPage}, 
+\sectionref{ugProblemEigenPage},
+\sectionref{ugxFloatHilbertPage},
+\domainref{Permanent}, \domainref{Vector}, \domainref{OneDimensionalArray},
+and \domainref{TwoDimensionalArray}.
 
-\section{Multiset}
-\label{MultisetXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{Multiset}
 
 The domain {\tt Multiset(R)} is similar to {\tt Set(R)} except that
 multiplicities (counts of duplications) are maintained and displayed.
@@ -41631,8 +41541,8 @@ $$
 $$
 \returnType{Type: List Boolean}
 
-\section{MultivariatePolynomial}
-\label{MultivariatePolynomialXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{MultivariatePolynomial}
 
 The domain constructor {\tt MultivariatePolynomial} is similar to {\tt
 Polynomial} except that it specifies the variables to be used.  {\tt
@@ -41789,14 +41699,11 @@ in the manipulation and display of expressions via its conversion
 facility.
 
 For more information on related topics, see
-\ref{PolynomialXmpPage} on page~\pageref{PolynomialXmpPage},
-\ref{UnivariatePolynomialXmpPage} on 
-page~\pageref{UnivariatePolynomialXmpPage}, and
-\ref{DistributedMultivariatePolynomialXmpPage} on 
-page~\pageref{DistributedMultivariatePolynomialXmpPage}.
+\domainref{Polynomial}, \domainref{UnivariatePolynomial}, and 
+\domainref{DistributedMultivariatePolynomial}.
 
-\section{None}
-\label{NoneXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{None}
 
 The {\tt None} domain is not very useful for interactive work but it
 is provided nevertheless for completeness of the Axiom type system.
@@ -41830,14 +41737,13 @@ $$
 $$
 \returnType{Type: List NonNegativeInteger}
 
-\section{Octonion}
-\label{OctonionXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{Octonion}
 
 The Octonions, also called the Cayley-Dixon algebra, defined over a
 commutative ring are an eight-dimensional non-associative algebra.
 Their construction from quaternions is similar to the construction
-of quaternions from complex numbers (see 
-\ref{QuaternionXmpPage} on page~\pageref{QuaternionXmpPage}).
+of quaternions from complex numbers (see \domainref{Quaternion}).
 
 As {\tt Octonion} creates an eight-dimensional algebra, you have to
 give eight components to construct an octonion.
@@ -41963,8 +41869,8 @@ $$
 $$
 \returnType{Type: Polynomial Integer}
 
-\section{OneDimensionalArray}
-\label{OneDimensionalArrayXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{OneDimensionalArray}
 
 The {\tt OneDimensionalArray} domain is used for storing data in a
 one-dimensional indexed data structure.  Such an array is a
@@ -41973,8 +41879,7 @@ belong to the same Axiom domain.  Each array has a fixed length
 specified by the user and arrays are not extensible.  The indexing of
 one-dimensional arrays is one-based.  This means that the ``first''
 element of an array is given the index {\tt 1}.  See also
-\ref{VectorXmpPage} on page~\pageref{VectorXmpPage} and 
-\ref{FlexibleArrayXmpPage} on page~\pageref{FlexibleArrayXmpPage}.
+\domainref{Vector} and \domainref{FlexibleArray}.
 
 To create a one-dimensional array, apply the operation 
 {\tt oneDimensionalArray} to a list.
@@ -42072,8 +41977,8 @@ $$
 $$
 \returnType{Type: OneDimensionalArray Integer}
 
-\section{Operator}
-\label{OperatorXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{Operator}
 
 Given any ring {\tt R}, the ring of the {\tt Integer}-linear operators
 over {\tt R} is called {\tt Operator(R)}.  To create an operator over
@@ -42354,8 +42259,8 @@ $$
 $$
 \returnType{Type: Polynomial Fraction Integer}
 
-\section{OrderedVariableList}
-\label{OrderedVariableListXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{OrderedVariableList}
 
 The domain {\tt OrderedVariableList} provides symbols which are
 restricted to a particular list and have a definite ordering. Those
@@ -42406,8 +42311,8 @@ $$
 $$
 \returnType{Type: Boolean}
 
-\section{OrderlyDifferentialPolynomial}
-\label{OrderlyDifferentialPolynomialXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{OrderlyDifferentialPolynomial}
 
 Many systems of differential equations may be transformed to
 equivalent systems of ordinary differential equations where the
@@ -42820,8 +42725,8 @@ $$
 $$
 \returnType{Type: OrderlyDifferentialPolynomial Fraction Integer}
 
-\section{PartialFraction}
-\label{PartialFractionXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{PartialFraction}
 
 A {\it partial fraction} is a decomposition of a quotient into a sum
 of quotients where the denominators of the summands are powers of
@@ -42909,8 +42814,7 @@ $$
 $$
 \returnType{Type: PartialFraction Integer}
 
-Given two gaussian integers (see 
-\ref{ComplexXmpPage} on page~\pageref{ComplexXmpPage}), you can
+Given two gaussian integers (see \domainref{Complex}), you can
 decompose their quotient into a partial fraction.
 
 \spadcommand{partialFraction(1,- 13 + 14 * \%i) }
@@ -42939,8 +42843,7 @@ The polynomials in this object have type
 {\tt UnivariatePolynomial(x, Fraction Integer)}.
 
 We use the \spadfunFrom{primeFactor}{Factored} operation (see
-\ref{FactoredXmpPage} on page~\pageref{FactoredXmpPage}) 
-to create the denominator in factored form directly.
+\domainref{Factored}) to create the denominator in factored form directly.
 
 \spadcommand{u : FR UP(x, FRAC INT) := reduce(*,[primeFactor(x+i,i) for i in 1..4]) }
 $$
@@ -42995,12 +42898,11 @@ $$
 $$
 \returnType{Type: PartialFraction UnivariatePolynomial(x,Fraction Integer)}
 
-All see \ref{FullPartialFractionExpansionXmpPage} on 
-page~\pageref{FullPartialFractionExpansionXmpPage} for examples of
+All see \domainref{FullPartialFractionExpansion} for examples of
 factor-free conversion of quotients to full partial fractions.
 
-\section{Permanent}
-\label{PermanentXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{Permanent}
 
 The package {\tt Permanent} provides the function
 \spadfunFrom{permanent}{Permanent} for square matrices.  The
@@ -43061,8 +42963,8 @@ $$
 $$
 \returnType{Type: List NonNegativeInteger}
 
-\section{Polynomial}
-\label{PolynomialXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{Polynomial}
 
 The domain constructor {\tt Polynomial} (abbreviation: {\tt POLY})
 provides polynomials with an arbitrary number of unspecified
@@ -43117,8 +43019,7 @@ the representation unless you are working on an advanced application
 where it is critical.  The polynomial types created from {\tt
 DistributedMultivariatePolynomial} and 
 {\tt NewDistributedMultivariatePolynomial} (discussed in
-\ref{DistributedMultivariatePolynomialXmpPage} on 
-page~\pageref{DistributedMultivariatePolynomialXmpPage}) are stored and
+\domainref{DistributedMultivariatePolynomial}) are stored and
 displayed in a non-recursive manner.
 
 You see a ``flat'' display of the above polynomial by converting to
@@ -43144,8 +43045,8 @@ $$
 $$
 \returnType{Type: Polynomial Integer}
 
-See \ref{FactoredXmpPage} on page~\pageref{FactoredXmpPage} 
-to see how to create objects in factored form directly.
+See \domainref{Factored} to see how to create objects in 
+factored form directly.
 
 \spadcommand{q := (y-1) * x * (z+5) }
 $$
@@ -43173,9 +43074,7 @@ to think of solving problems in general ways.  Axiom facilities for
 factoring polynomials created with {\tt Polynomial} are currently
 restricted to the integer and rational number coefficient cases.
 There are more complete facilities for factoring univariate
-polynomials: see \ref{ugProblemFactorPage} on 
-page~\pageref{ugProblemFactorPage} in Section \ref{ugProblemFactorNumber} 
-on page~\pageref{ugProblemFactorNumber}.
+polynomials: see \sectionref{ugProblemFactorPage}.
 
 The standard arithmetic operations are available for polynomials.
 
@@ -43585,23 +43484,17 @@ $$
 \returnType{Type: Polynomial Float}
 
 For more information on related topics, see
-\ref{UnivariatePolynomialXmpPage} on 
-page~\pageref{UnivariatePolynomialXmpPage}, 
-\ref{MultivariatePolynomialXmpPage} on 
-page~\pageref{MultivariatePolynomialXmpPage}, and
-\ref{DistributedMultivariatePolynomialXmpPage} on 
-page~\pageref{DistributedMultivariatePolynomialXmpPage}.  You can also issue
+\domainref{UnivariatePolynomial}, \domainref{MultivariatePolynomial}, and
+\domainref{DistributedMultivariatePolynomial}.  You can also issue
 the system command {\tt )show Polynomial} to display the full list
 of operations defined by {\tt Polynomial}.
 
-\section{Quaternion}
-\label{QuaternionXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{Quaternion}
 
 The domain constructor {\tt Quaternion} implements quaternions over
 commutative rings.  For information on related topics, see
-%\menuxmpref{CliffordAlgebra} 
-\ref{ComplexXmpPage} on page~\pageref{ComplexXmpPage} and
-\ref{OctonionXmpPage} on page~\pageref{OctonionXmpPage}.  
+\domainref{Complex} and \domainref{Octonion}.
 You can also issue the system command
 {\tt )show Quaternion} to display the full list of operations
 defined by {\tt Quaternion}.
@@ -43701,8 +43594,8 @@ $$
 $$
 \returnType{Type: Quaternion Fraction Integer}
 
-\section{RadixExpansion}
-\label{RadixExpansionXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{RadixExpansion}
 
 It possible to expand numbers in general bases.
 
@@ -43849,13 +43742,11 @@ $$
 \returnType{Type: Fraction Integer}
 
 More examples of expansions are available in
-\ref{DecimalExpansionXmpPage} on page~\pageref{DecimalExpansionXmpPage}, 
-\ref{BinaryExpansionXmpPage} on page~\pageref{BinaryExpansionXmpPage}, and
-\ref{HexadecimalExpansionXmpPage} on 
-page~\pageref{HexadecimalExpansionXmpPage}.
+\domainref{DecimalExpansion}, \domainref{BinaryExpansion}, and
+\domainref{HexadecimalExpansion}.
 
-\section{RealClosure}
-\label{RealClosureXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{RealClosure}
 
 The Real Closure 1.0 package provided by Renaud Rioboo
 (Renaud Rioboo) consists of different packages, categories and
@@ -44627,8 +44518,8 @@ $$
 $$
 \returnType{Type: Boolean}
 
-\section{RegularTriangularSet}
-\label{RegularTriangularSetXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{RegularTriangularSet}
 
 The {\tt RegularTriangularSet} domain constructor implements regular
 triangular sets.  These particular triangular sets were introduced by
@@ -45928,8 +45819,8 @@ solve your favorite system with {\tt zeroSetSplit}.  There exist more
 options at the development level that are not currently available in
 this public version.  
 
-\section{RomanNumeral}
-\label{RomanNumeralXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{RomanNumeral}
 
 The Roman numeral package was added to Axiom in MCMLXXXVI for use in
 denoting higher order derivatives.
@@ -46058,8 +45949,8 @@ $$
 Issue the system command {\tt )show RomanNumeral} to display the full
 list of operations defined by {\tt RomanNumeral}.
 
-\section{Segment}
-\label{SegmentXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{Segment}
 
 The {\tt Segment} domain provides a generalized interval type.
 
@@ -46095,7 +45986,7 @@ An increment can be specified using the ``{\tt by}'' construct.
 
 \spadcommand{t := 10..3 by -2 }
 $$
-{{10}..3} \mbox{\rm by\ } -2 
+{{10}..3} \mbox{\rm\ by\ } -2 
 $$
 \returnType{Type: Segment PositiveInteger}
 
@@ -46162,11 +46053,10 @@ $$
 \returnType{Type: List Integer}
 
 For more information on related topics, see
-\ref{SegmentBindingXmpPage} on page~\pageref{SegmentBindingXmpPage} and 
-\ref{UniversalSegmentXmpPage} on page~\pageref{UniversalSegmentXmpPage}.
+\domainref{SegmentBinding} and \domainref{UniversalSegment}.
 
-\section{SegmentBinding}
-\label{SegmentBindingXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{SegmentBinding}
 
 The {\tt SegmentBinding} type is used to indicate a range for a named
 symbol.
@@ -46216,11 +46106,10 @@ $$
 \returnType{Type: Segment Fraction Integer}
 
 For more information on related topics, see
-\ref{SegmentXmpPage} on page~\pageref{SegmentXmpPage} and 
-\ref{UniversalSegmentXmpPage} on page~\pageref{UniversalSegmentXmpPage}.
+\domainref{Segment} and \domainref{UniversalSegment}.
 
-\section{Set}
-\label{SetXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{Set}
 
 The {\tt Set} domain allows one to represent explicit finite sets of values.
 These are similar to lists, but duplicate elements are not allowed.
@@ -46416,11 +46305,10 @@ $$
 $$
 \returnType{Type: Set PositiveInteger}
 
-For more information about lists, see \ref{ListXmpPage} on 
-page~\pageref{ListXmpPage}.
+For more information about lists, see \domainref{List}.
 
-\section{SingleInteger}
-\label{SingleIntegerXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{SingleInteger}
 
 The {\tt SingleInteger} domain is intended to provide support in Axiom
 for machine integer arithmetic.  It is generally much faster than
@@ -46451,8 +46339,7 @@ $$
 
 To avoid confusion with {\tt Integer}, which is the default type for
 integers, you usually need to work with declared variables
-(\ref{ugTypesDeclarePage} on page~\pageref{ugTypesDeclarePage} in Section 
-\ref{ugTypesDeclareNumber} on page~\pageref{ugTypesDeclareNumber})
+(\sectionref{ugTypesDeclarePage}).
 \ldots
 
 \spadcommand{a := 1234 :: SingleInteger }
@@ -46461,9 +46348,7 @@ $$
 $$
 \returnType{Type: SingleInteger}
 
-or use package calling
-(\ref{ugTypesPkgCallPage} on page~\pageref{ugTypesPkgCallPage} in Section 
-\ref{ugTypesPkgCallNumber} on page~\pageref{ugTypesPkgCallNumber}).
+or use package calling (\sectionref{ugTypesPkgCallPage}).
 
 \spadcommand{b := 124\$SingleInteger }
 $$
@@ -46540,12 +46425,10 @@ $$
 
 Many other operations are available for small integers, including many
 of those provided for {\tt Integer}.  To see the other operations, use
-the Browse HyperDoc facility (\ref{ugBrowsePage} on 
-page~\pageref{ugBrowsePage} in Section
-\ref{ugBrowseNumber} on page~\pageref{ugBrowseNumber}).
+the Browse HyperDoc facility (\sectionref{ugBrowsePage})
 
-\section{SparseTable}
-\label{SparseTableXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{SparseTable}
 
 The {\tt SparseTable} domain provides a general purpose table type
 with default entries.
@@ -46613,15 +46496,13 @@ If a specific table representation is required, the
 {\tt GeneralSparseTable} constructor should be used.  The domain 
 {\tt SparseTable(K, E, dflt)} is equivalent to 
 {\tt GeneralSparseTable(K,E,Table(K,E), dflt)}.  
-For more information, see 
-\ref{TableXmpPage} on page~\pageref{TableXmpPage} and 
-\ref{GeneralSparseTableXmpPage} on page~\pageref{GeneralSparseTableXmpPage}.
+For more information, see \domainref{Table} and \domainref{GeneralSparseTable}.
 
-\section{SquareMatrix}
-\label{SquareMatrixXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{SquareMatrix}
  
 The top level matrix type in Axiom is {\tt Matrix} (see
-\ref{MatrixXmpPage} on page~\pageref{MatrixXmpPage}), which provides
+\domainref{Matrix}, which provides
 basic arithmetic and linear algebra functions.  However, since the
 matrices can be of any size it is not true that any pair can be added
 or multiplied.  Thus {\tt Matrix} has little algebraic structure.
@@ -46736,16 +46617,11 @@ $$
 \returnType{Type: SquareMatrix(2,Polynomial Complex Integer)}
  
 For more information on related topics, see
-\ref{ugTypesWritingModesPage} on
-page~\pageref{ugTypesWritingModesPage} in Section
-\ref{ugTypesWritingModesNumber} on
-page~\pageref{ugTypesWritingModesNumber}, \ref{ugTypesExposePage} on
-page~\pageref{ugTypesExposePage} in Section \ref{ugTypesExposeNumber}
-on page~\pageref{ugTypesExposeNumber}, and \ref{MatrixXmpPage} on
-page~\pageref{MatrixXmpPage}.
+\sectionref{ugTypesWritingModesPage}, \sectionref{ugTypesExposePage},
+and \domainref{Matrix}.
 
-\section{SquareFreeRegularTriangularSet}
-\label{SquareFreeRegularTriangularSetXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{SquareFreeRegularTriangularSet}
 
 The {\tt SquareFreeRegularTriangularSet} domain constructor implements
 square-free regular triangular sets.  See the 
@@ -47137,8 +47013,8 @@ OrderedVariableList [x,y,z,t],
 NewSparseMultivariatePolynomial(Integer,
 OrderedVariableList [x,y,z,t])))}
 
-\section{Stream}
-\label{StreamXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{Stream}
 
 A {\tt Stream} object is represented as a list whose last element
 contains the wherewithal to create the next element, should it ever be
@@ -47259,24 +47135,18 @@ $$
 
 The packages {\tt StreamFunctions1}, {\tt StreamFunctions2} and 
 {\tt StreamFunctions3} export some useful stream manipulation operations.
-For more information, see \ref{ugLangItsPage} on
-page~\pageref{ugLangItsPage} in Section \ref{ugLangItsNumber} on
-page~\pageref{ugLangItsNumber}, \ref{ugProblemSeriesPage} on
-page~\pageref{ugProblemSeriesPage} in Section
-\ref{ugProblemSeriesNumber} on page~\pageref{ugProblemSeriesNumber},
-\ref{ContinuedFractionXmpPage} on
-page~\pageref{ContinuedFractionXmpPage}, and \ref{ListXmpPage} on
-page~\pageref{ListXmpPage}.
-
-\section{String}
-\label{StringXmpPage}
+For more information, see \sectionref{ugLangItsPage},
+\sectionref{ugProblemSeriesPage},
+\domainref{ContinuedFraction}, and \domainref{List}.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{String}
 
 The type {\tt String} provides character strings.  Character strings
 provide all the operations for a one-dimensional array of characters,
 plus additional operations for manipulating text.  For more
 information on related topics, see 
-\ref{CharacterXmpPage} on page~\pageref{CharacterXmpPage} and
-\ref{CharacterClassXmpPage} on page~\pageref{CharacterClassXmpPage}.  
+\domainref{Character} and \domainref{CharacterClass}.
 You can also issue the system command
 {\tt )show String} to display the full list of operations defined
 by {\tt String}.
@@ -47565,13 +47435,13 @@ $$
 $$
 \returnType{Type: PositiveInteger}
 
-\section{StringTable}
-\label{StringTableXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{StringTable}
 
 This domain provides a table type in which the keys are known to be
 strings so special techniques can be used.  Other than performance,
 the type {\tt StringTable(S)} should behave exactly the same way as
-{\tt Table(String,S)}.  See \ref{TableXmpPage} on page~\pageref{TableXmpPage}
+{\tt Table(String,S)}.  See \domainref{Table}
 for general information about tables.
 
 This creates a new table whose keys are strings.
@@ -47602,8 +47472,8 @@ for s in split("My name is Ian Watt.",char " ")
 \end{verbatim}
 \returnType{Void}
 
-\section{Symbol}
-\label{SymbolXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{Symbol}
  
 Symbols are one of the basic types manipulated by Axiom.  The 
 {\tt Symbol} domain provides ways to create symbols of many varieties.
@@ -47871,8 +47741,8 @@ presup: List OutputForm,
 presub: List OutputForm,
 args: List OutputForm)}
 
-\section{Table}
-\label{TableXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{Table}
 
 The {\tt Table} constructor provides a general structure for
 associative storage.  This type provides hash tables in which data
@@ -48047,30 +47917,26 @@ This allows new entries to be appended onto the front of the list
 to cover up old entries.
 This is useful when table entries need to be stacked or when
 frequent list traversals are required.
-See \ref{AssociationListXmpPage} on page~\pageref{AssociationListXmpPage} 
-for more information.
+See \domainref{AssociationList} for more information.
 \item {\tt EqTable} gives tables in which keys are considered
 equal only when they are in fact the same instance of a structure.
-See \ref{EqTableXmpPage} on page~\pageref{EqTableXmpPage} for more information.
+See \domainref{EqTable} for more information.
 \item {\tt StringTable} should be used when the keys are known to
 be strings.
-See \ref{StringTableXmpPage} on page~\pageref{StringTableXmpPage} 
-for more information.
+See \domainref{StringTable} for more information.
 \item {\tt SparseTable} provides tables with default
 entries, so
 lookup never fails.  The {\tt GeneralSparseTable} constructor
 can be used to make any table type behave this way.
-See \ref{SparseTableXmpPage} on page~\pageref{SparseTableXmpPage} 
-for more information.
+See \domainref{SparseTable} for more information.
 \item {\tt KeyedAccessFile} allows values to be saved in a file,
 accessed as a table.
-See \ref{KeyedAccessFileXmpPage} on page~\pageref{KeyedAccessFileXmpPage} 
-for more information.
+See \domainref{KeyedAccessFile} for more information.
 \end{list}
 \noindent
 
-\section{TextFile}
-\label{TextFileXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{TextFile}
 
 The domain {\tt TextFile} allows Axiom to read and write
 character data and exchange text with other programs.
@@ -48161,19 +48027,16 @@ Finally, clean up.
 \spadcommand{)system rm /tmp/MOTD}
 
 For more information on related topics,  see
-\ref{FileXmpPage} on page~\pageref{FileXmpPage},
-\ref{KeyedAccessFileXmpPage} on page~\pageref{KeyedAccessFileXmpPage}, and
-\ref{LibraryXmpPage} on page~\pageref{LibraryXmpPage}.
+\domainref{File}, \domainref{KeyedAccessFile}, and \domainref{Library}.
 
-\section{TwoDimensionalArray}
-\label{TwoDimensionalArrayXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{TwoDimensionalArray}
 
 The {\tt TwoDimensionalArray} domain is used for storing data in a
 two dimensional data structure indexed by row and by column.  Such an array
 is a homogeneous data structure in that all the entries of the array
 must belong to the same Axiom domain (although see
-\ref{ugTypesAnyNonePage} on page~\pageref{ugTypesAnyNonePage} in Section 
-\ref{ugTypesAnyNoneNumber} on page~\pageref{ugTypesAnyNoneNumber}).  Each
+\sectionref{ugTypesAnyNonePage}. Each
 array has a fixed number of rows and columns specified by the user and
 arrays are not extensible.  In Axiom, the indexing of two-dimensional
 arrays is one-based.  This means that both the ``first'' row of an
@@ -48434,11 +48297,10 @@ $$
 For more information about the operations available for {\tt
 TwoDimensionalArray}, issue {\tt )show TwoDimensionalArray}.  For
 information on related topics, see 
-\ref{MatrixXmpPage} on page~\pageref{MatrixXmpPage} and
-\ref{OneDimensionalArrayXmpPage} on page~\pageref{OneDimensionalArrayXmpPage}.
+\domainref{Matrix} and \domainref{OneDimensionalArray}.
 
-\section{UnivariatePolynomial}
-\label{UnivariatePolynomialXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{UnivariatePolynomial}
 
 The domain constructor {\tt UnivariatePolynomial} (abbreviated {\tt
 UP}) creates domains of univariate polynomials in a specified
@@ -48824,23 +48686,18 @@ $$
 $$
 \returnType{Type: UnivariatePolynomial(b1,Fraction Polynomial Integer)}
 
-See \ref{ugProblemFactorPage} on page~\pageref{ugProblemFactorPage} in Section
-\ref{ugProblemFactorNumber} on page~\pageref{ugProblemFactorNumber}
+See \sectionref{ugProblemFactorPage} 
 for a discussion of the factorization facilities
 in Axiom for univariate polynomials.
 For more information on related topics, see
-\ref{ugIntroVariablesPage} on page~\pageref{ugIntroVariablesPage} in Section 
-\ref{ugIntroVariablesNumber} on page~\pageref{ugIntroVariablesNumber},
-\ref{ugTypesConvertPage} on page~\pageref{ugTypesConvertPage} in Section 
-\ref{ugTypesConvertNumber} on page~\pageref{ugTypesConvertNumber},
-\ref{PolynomialXmpPage} on page~\pageref{PolynomialXmpPage},
-\ref{MultivariatePolynomialXmpPage} on 
-page~\pageref{MultivariatePolynomialXmpPage}, and
-\ref{DistributedMultivariatePolynomialXmpPage} on 
-page~\pageref{DistributedMultivariatePolynomialXmpPage}.
-
-\section{UnivariateSkewPolynomial}
-\label{UnivariateSkewPolynomial}
+\sectionref{ugIntroVariablesPage},
+\sectionref{ugTypesConvertPage},
+\domainref{Polynomial}, \domainref{MultivariatePolynomial}, and
+\domainref{DistributedMultivariatePolynomial}.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{UnivariateSkewPolynomial}
+
 Skew or Ore polynomial rings provide a unified framework to
 compute with differential and difference equations.
 
@@ -49313,9 +49170,8 @@ $$
 \right]}
 $$
 
-
-\section{UniversalSegment}
-\label{UniversalSegmentXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{UniversalSegment}
 
 The {\tt UniversalSegment} domain generalizes {\tt Segment}
 by allowing segments without a ``hi'' end point.
@@ -49328,7 +49184,7 @@ $$
 
 \spadcommand{nevens := (0..) by -2 }
 $$
-{0..} \mbox{\rm by\ } -2 
+{0..} \mbox{\rm\ by\ } -2 
 $$
 \returnType{Type: UniversalSegment NonNegativeInteger}
 
@@ -49393,13 +49249,11 @@ $$
 \returnType{Type: Stream Integer}
 
 For more information on related topics, see 
-\ref{SegmentXmpPage} on page~\pageref{SegmentXmpPage},
-\ref{SegmentBindingXmpPage} on page~\pageref{SegmentBindingXmpPage}, 
-\ref{ListXmpPage} on page~\pageref{ListXmpPage}, and
-\ref{StreamXmpPage} on page~\pageref{StreamXmpPage}.
+\domainref{Segment}, \domainref{SegmentBinding}, \domainref{List}, and
+\domainref{Stream}.
 
-\section{Vector}
-\label{VectorXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{Vector}
 
 The {\tt Vector} domain is used for storing data in a one-dimensional
 indexed data structure.  A vector is a homogeneous data structure in
@@ -49409,8 +49263,7 @@ are not extensible.  This domain is similar to the
 {\tt OneDimensionalArray} domain, except that when the components of a 
 {\tt Vector} belong to a {\tt Ring}, arithmetic operations are provided.
 For more examples of operations that are defined for both {\tt Vector}
-and {\tt OneDimensionalArray}, see 
-\ref{OneDimensionalArrayXmpPage} on page~\pageref{OneDimensionalArrayXmpPage}.
+and {\tt OneDimensionalArray}, see \domainref{OneDimensionalArray}.
 
 As with the {\tt OneDimensionalArray} domain, a {\tt Vector} can
 be created by calling the operation \spadfunFrom{new}{Vector}, its components
@@ -49533,17 +49386,13 @@ $$
 \returnType{Type: Vector Integer}
 
 For more information about other aggregate domains, see the following:
-\ref{ListXmpPage} on page~\pageref{ListXmpPage}, 
-\ref{MatrixXmpPage} on page~\pageref{MatrixXmpPage},
-\ref{OneDimensionalArrayXmpPage} on page~\pageref{OneDimensionalArrayXmpPage},
-\ref{SetXmpPage} on page~\pageref{SetXmpPage},
-\ref{TableXmpPage} on page~\pageref{TableXmpPage}, and 
-\ref{TwoDimensionalArrayXmpPage} on page~\pageref{TwoDimensionalArrayXmpPage}.
+\domainref{List}, \domainref{Matrix}, \domainref{OneDimensionalArray},
+\domainref{Set}, \domainref{Table}, and \domainref{TwoDimensionalArray}.
 Issue the system command {\tt )show Vector} to display the full list of
 operations defined by {\tt Vector}.
 
-\section{Void}
-\label{VoidXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{Void}
 
 When an expression is not in a value context, it is given type 
 {\tt Void}.  For example, in the expression 
@@ -49588,8 +49437,8 @@ Once a value has been converted to {\tt Void}, it cannot be recovered.
 Cannot convert from type Void to PositiveInteger for value "()"
 \end{verbatim}
 
-\section{WuWenTsunTriangularSet}
-\label{WuWenTsunTriangularSetXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{WuWenTsunTriangularSet}
 
 The {\tt WuWenTsunTriangularSet} domain constructor implements the
 characteristic set method of Wu Wen Tsun.  This algorithm computes a
@@ -49838,8 +49687,8 @@ Note that the way of understanding triangular decompositions
 is detailed in the example of the {\tt RegularTriangularSet}
 constructor.
 
-\section{XPBWPolynomial}
-\label{XPBWPolynomialXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{XPBWPolynomial}
 
 Initialisations
 
@@ -50698,8 +50547,8 @@ $$
 $$
 \returnType{Type: XRecursivePolynomial(Symbol,Fraction Integer)}
 
-\section{XPolynomial}
-\label{XPolynomialXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{XPolynomial}
 
 The {\tt XPolynomial} domain constructor implements multivariate
 polynomials whose set of variables is {\tt Symbol}.  These variables
@@ -50884,8 +50733,8 @@ $$
 $$
 \returnType{Type: XPolynomial Integer}
 
-\section{XPolynomialRing}
-\label{XPolynomialRingXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{XPolynomialRing}
 
 The {\tt XPolynomialRing} domain constructor implements generalized
 polynomials with coefficients from an arbitrary {\tt Ring} (not
@@ -51199,8 +51048,8 @@ $$
 $$
 \returnType{Type: XPolynomialRing(SquareMatrix(2,Fraction Integer),OrderedFreeMonoid Symbol)}
 
-\section{ZeroDimensionalSolvePackage}
-\label{ZeroDimensionalSolvePackageXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{ZeroDimensionalSolvePackage}
 
 The {\tt ZeroDimensionalSolvePackage} package constructor provides
 operations for computing symbolically the complex or real roots of
@@ -54613,8 +54462,7 @@ There are many other things you can do.
 In fact, most everything you can do interactively using the
 three-di\-men\-sion\-al control panel (such as translating, zooming, resizing,
 coloring, perspective and lighting selections) can also be done
-directly by operations (see Chapter 
-\ref{ugGraph} on page~\pageref{ugGraph} for more details).
+directly by operations (see \sectionref{ugGraph} for more details).
 
 When you are done experimenting, say $reset(vp)$ to restore the
 picture to its original position and settings.
@@ -54720,15 +54568,14 @@ drawRibbons(flist, xrange) ==
 \end{figure}
 
 Here are some remarks on the syntax used in the {\bf drawRibbons} function
-(consult Chapter \ref{ugUser} on page~\pageref{ugUser} for more details).
+(consult \sectionref{ugUser} for more details).
 Unlike most other programming languages which use semicolons,
 parentheses, or {\it begin}--{\it end} brackets to delineate the
 structure of programs, the structure of an Axiom program is
 determined by indentation.
 The first line of the function definition always begins in column 1.
 All other lines of the function are indented with respect to the first
-line and form a {\it pile} (see \ref{ugLangBlocks} on 
-page~\pageref{ugLangBlocks}).
+line and form a {\it pile} (see \sectionref{ugLangBlocks}).
 
 The definition of {\bf drawRibbons}
 consists of a pile of expressions to be executed one after
@@ -55178,7 +55025,7 @@ We draw the complex valued function, again considering the
 $(x,y)$-plane as the complex plane, using $r$ as the
 height (or $z$-coordinate) and $\theta$ as the color.
 This is a standard plot---we learned how to do this in
-Chapter \ref{ugGraph} on page~\pageref{ugGraph}---
+\sectionref{ugGraph} ---
 but here we write a new program to illustrate
 the creation of polygon meshes, or grids.
 
@@ -55256,7 +55103,7 @@ Draw it with an odd number of steps to avoid the pole.
 \section{Functions Producing Functions}
 \label{ugIntProgFunctions}
 
-In \ref{ugUserMake} on page~\pageref{ugUserMake}, 
+In \sectionref{ugUserMake},
 you learned how to use the operation
 {\bf function} to create a function from symbolic formulas.
 Here we introduce a similar operation which not only
@@ -55456,11 +55303,10 @@ set-Imag-Steps
 set-Clip-Value
 }
 
-% Here and throughout the book we should use the terminology
-% "type of a function", rather than talking about source and target.
-% This is how the brave new world of SMWATT regards them. A function
-% is just an object that has a mapping type.
-%
+Here and throughout the book we should use the terminology
+"type of a function", rather than talking about source and target.
+A function is just an object that has a mapping type.
+
 \chapter{Packages}
 \label{ugPackages}
 
@@ -55472,14 +55318,14 @@ special functions to symbolic facilities for
 differential equations, symbolic integration, and limits.
 \index{package!constructor}
 
-In Chapter \ref{ugIntProg} on page~\pageref{ugIntProg}, 
+In \sectionref{ugIntProg},
 we developed several useful functions for drawing
 vector fields and complex functions.
 We now show you how you can add these functions to the
 Axiom library to make them available for general use.
 
-The way we created the functions in Chapter \ref{ugIntProg} 
-on page~\pageref{ugIntProg} is typical of how
+The way we created the functions in \sectionref{ugIntProg} 
+is typical of how
 you, as an advanced Axiom user, may interact with Axiom.
 You have an application.
 You go to your editor and create an input file defining some
@@ -55551,17 +55397,15 @@ DrawComplex(): Exports == Implementation where Type definition begins here
 \label{ugPackagesNames}
 %
 Each package has a name and an abbreviation.
-For a package of the complex draw functions from Chapter 
-\ref{ugIntProg} on page~\pageref{ugIntProg},
-we choose the name {\tt DrawComplex}
+For a package of the complex draw functions from
+\sectionref{ugIntProg}, we choose the name {\tt DrawComplex}
 and
 \index{abbreviation!constructor}
 abbreviation {\tt DRAWCX}.\footnote{An abbreviation can be any string
 of
 \index{constructor!abbreviation}
 between two and seven capital letters and digits, beginning with a letter.
-See \ref{ugTypesWritingAbbr} on page~\pageref{ugTypesWritingAbbr} 
-for more information.}
+See \sectionref{ugTypesWritingAbbr} for more information.}
 To be sure that you have not chosen a name or abbreviation already used by
 the system, issue the system command {\tt )show} for both the name and
 the abbreviation.
@@ -55585,8 +55429,7 @@ The macros are only usable from their point of definition until the
 end of the file.
 
 Consider the definition of
-{\tt DrawComplex} in 
-Figure \ref{fig-pak-cdraw} on page~\pageref{fig-pak-cdraw}.
+{\tt DrawComplex} in \figureref{fig-pak-cdraw}.
 After the macro
 \index{macro}
 definition
@@ -55661,8 +55504,7 @@ As an author of a package, you must ensure that
 the {\tt Implementation} part provides a function for each
 operation in the {\tt Exports} part.\footnote{The {\tt DrawComplex}
 package enhances the facility
-described in  Chapter 
-\ref{ugIntProgCompFuns} on page~\pageref{ugIntProgCompFuns} by allowing a
+described in \sectionref{ugIntProgCompFuns} by allowing a
 complex function to have
 arrows emanating from the surface to indicate the direction of the
 complex argument.}
@@ -55847,19 +55689,16 @@ The power of packages becomes evident when packages have parameters.
 Usually these parameters are domains and the exported operations have types
 involving these parameters.
 
-In Chapter \ref{ugTypes} on page~\pageref{ugTypes}, 
-you learned that categories denote classes of domains.
-Although we cover this notion in detail in the next
-chapter, we now give you a sneak preview of its usefulness.
+In \sectionref{ugTypes}, you learned that categories denote classes of
+domains.  Although we cover this notion in detail in the next chapter,
+we now give you a sneak preview of its usefulness.
 
-In \ref{ugUserBlocks} on page~\pageref{ugUserBlocks}, 
-we defined functions $bubbleSort(m)$ and
-$insertionSort(m)$ to sort a list of integers.
-If you look at the code for these functions, you see that they may be
-used to sort {\it any} structure $m$ with the right properties.
-Also, the functions can be used to sort lists of {\it any} elements---not
-just integers.
-Let us now recall the code for $bubbleSort$.
+In \sectionref{ugUserBlocks}, we defined functions $bubbleSort(m)$ and
+$insertionSort(m)$ to sort a list of integers.  If you look at the
+code for these functions, you see that they may be used to sort {\it
+any} structure $m$ with the right properties.  Also, the functions can
+be used to sort lists of {\it any} elements---not just integers.  Let
+us now recall the code for $bubbleSort$.
 
 \begin{verbatim}
 bubbleSort(m) ==
@@ -55881,8 +55720,7 @@ by your telling Axiom that $m$ has
 the ``attribute'' {\bf finiteAggregate}.
 An {\it attribute} is a property
 that a domain either has or does not have.
-As we show later in 
-\ref{ugCategoriesAttributes} on page~\pageref{ugCategoriesAttributes},
+As we show later in \sectionref{ugCategoriesAttributes},
 programs can query domains as to the presence or absence of an attribute.
 
 The operation {\bf swap} swaps elements of $m$.
@@ -56007,8 +55845,7 @@ corresponding two-argument functions with the operation
       insertionSort!(m) == insertionSort!(m,<$S)
 \end{verbatim}
 
-In \ref{ugUserBlocks} on page~\pageref{ugUserBlocks}, 
-we give an alternative definition of
+In \sectionref{ugUserBlocks}, we give an alternative definition of
 {\bf bubbleSort} using \spadfunFrom{first}{List} and
 \spadfunFrom{rest}{List} that is more efficient for a list (for
 which access to any element requires traversing the list from its
@@ -56189,7 +56026,7 @@ The third expression of the {\tt and} requires {\tt D1 has
 IndexedAggregate(Integer, D2) with} two attributes.
 So the interpreter searches for an {\tt IndexedAggregate}
 among the ancestors of {\tt List (Integer)} (see
-\ref{ugCategoriesHier} on page~\pageref{ugCategoriesHier}).
+\sectionref{ugCategoriesHier}).
 It finds one: {\tt IndexedAggregate(Integer, Integer)}.
 The interpreter tries defining $D2$ as {\tt Integer}.
 After substituting for $D1$ and $D2$, the predicate
@@ -56227,8 +56064,7 @@ how they are defined in Axiom, and how you can extend the
 system to include new categories of your own.
 
 We assume that you have read the introductory material on domains
-and categories in \ref{ugTypesBasicDomainCons} on 
-page~\pageref{ugTypesBasicDomainCons}.
+and categories in \sectionref{ugTypesBasicDomainCons}.
 There you learned that the notion of packages covered in the
 previous chapter are special cases of domains.
 While this is in fact the case, it is useful here to regard domains
@@ -56306,8 +56142,7 @@ All parts of a category definition are then indented with respect to this
 \index{indentation}
 first line.
 
-In Chapter \ref{ugTypes} on page~\pageref{ugTypes}, 
-we talked about {\tt Ring} as denoting the
+In \sectionref{ugTypes}, we talked about {\tt Ring} as denoting the
 class of all domains that are rings, in short, the class of all
 rings.
 While this is the usual naming convention in Axiom, it is also
@@ -56559,8 +56394,7 @@ operations $*$ and $**$.
 
 We actually omitted the last \index{category!defaults} part of the
 definition of \index{default definitions} {\tt SemiGroup} in
-\ref{ugCategoriesHier} on page~\pageref{ugCategoriesHier}.  Here now
-is its complete Axiom definition.
+\sectionref{ugCategoriesHier}.  Here now is its complete Axiom definition.
 
 \begin{verbatim}
 SemiGroup(): Category == SetCategory with
@@ -56764,9 +56598,8 @@ have commutative multiplication?
 \spadcommand{Matrix Integer has commutative("*")}
 
 Attributes are used to conditionally export and define operations for
-a domain (see \ref{ugDomainsAssertions} on
-page~\pageref{ugDomainsAssertions}).  Attributes can also be asserted
-in a category definition.
+a domain (see \sectionref{ugDomainsAssertions}.
+Attributes can also be asserted in a category definition.
 
 After mentioning category {\tt Ring} many times in this book,
 it is high time that we show you its definition:
@@ -56914,18 +56747,18 @@ if R has IntegerNumberSystem then
 \end{verbatim}
 
 Here the predicate used is identical to the predicate in the {\tt
-Exports} part.  This need not be the case.  See \ref{ugPackagesConds}
-on page~\pageref{ugPackagesConds} for a more complicated example.
+Exports} part.  This need not be the case.  See \sectionref{ugPackagesConds}
+for a more complicated example.
 
 \section{Anonymous Categories}
 \label{ugCategoriesAndPackages}
 
 The part of a category to the right of a {\tt with} is also regarded
 as a category---an ``anonymous category.''  Thus you have already seen
-a category definition \index{category!anonymous} in Chapter
-\ref{ugPackages} on page~\pageref{ugPackages}.  The {\tt Exports} part
-of the package {\tt DrawComplex} (\ref{ugPackagesAbstract} on
-page~\pageref{ugPackagesAbstract}) is an anonymous category.  This is
+a category definition \index{category!anonymous} in 
+\sectionref{ugPackages}.  The {\tt Exports} part
+of the package {\tt DrawComplex} (\sectionref{ugPackagesAbstract})
+is an anonymous category.  This is
 not necessary.  We could, instead, give this category a name:
 
 %
@@ -56994,7 +56827,7 @@ element of the domain.
 If no exported operations mention {\tt \$}, then evidently there is
 nothing of interest to do with the objects of the domain.  You might
 then say that a package is a ``boring'' domain!  But, as you saw in
-Chapter \ref{ugPackages} on page~\pageref{ugPackages}, packages are a
+\sectionref{ugPackages}, packages are a
 very useful notion indeed.  The exported operations of a package
 depend solely on the parameters to the package constructor and other
 explicit domains.
@@ -57035,7 +56868,7 @@ A recommended format for the definition of a domain is:\newline
 Note: The brackets {\tt [ ]} here denote optionality.
 
 A complete domain constructor definition for {\tt QuadraticForm} is
-shown in Figure \ref{fig-quadform} on page~\pageref{fig-quadform}.
+shown in \figureref{fig-quadform}.
 Interestingly, this little domain illustrates all the new concepts you
 need to learn.
 
@@ -57111,8 +56944,7 @@ means that membership in a category does not depend on the values of
 the parameters to the domain constructor.  This part thus defines the
 link between the domains and the category hierarchies given on the
 inside covers of this book.  As described in
-\ref{ugCategoriesCorrectness} on
-page~\pageref{ugCategoriesCorrectness}, it is this link that makes it
+\sectionref{ugCategoriesCorrectness}, it is this link that makes it
 possible for you to pass objects of the domains as arguments to other
 operations in Axiom.
 
@@ -57129,8 +56961,7 @@ groups, it is possible to pass quadratic forms to algorithms that
 only assume arguments to have these abelian group
 properties.
 
-In \ref{ugCategoriesConditionals} on
-page~\pageref{ugCategoriesConditionals}, you saw that {\tt
+In \sectionref{ugCategoriesConditionals}, you saw that {\tt
 Fraction(R)}, a member of {\tt QuotientFieldCategory(R)}, is a member
 of {\tt OrderedSet} if $R$ is a member of {\tt OrderedSet}.  Likewise,
 from the {\tt Exports} part of the definition of {\tt ModMonic(R, S)},
@@ -57255,8 +57086,7 @@ The $Rep$ for quadratic forms is {\tt SquareMatrix(n, K)}.
 This means that all objects of the domain are required to be
 $n$ by $n$ matrices with elements from {\bf K}.
 
-The code for {\tt quadraticForm} in Figure \ref{fig-quadform}
-on page \pageref{fig-quadform}
+The code for {\tt quadraticForm} in \figureref{fig-quadform}
 checks that the matrix is symmetric and then converts it to
 {\tt \$}, which means, as usual, ``this domain.'' Such explicit
 conversions \index{conversion} are generally required by the
@@ -57266,13 +57096,11 @@ this function essentially does nothing.
 The {\frenchspacing\tt m :: \$} on line 28 coerces $m$ to a
 quadratic form.
 In fact, the quadratic form you created in step (3) of
-\ref{ugDomainsDemo} on page~\pageref{ugDomainsDemo} 
-is just the matrix you passed it in
+\sectionref{ugDomainsDemo} is just the matrix you passed it in
 disguise!
 Without seeing this definition, you would not know that.
 Nor can you take advantage of this fact now that you do know!
-When we try in the next step of \ref{ugDomainsDemo} on 
-page~\pageref{ugDomainsDemo} to regard
+When we try in the next step of \sectionref{ugDomainsDemo} to regard
 $q$ as a matrix by asking for {\bf nrows}, the number of
 its rows, Axiom gives you an error message saying, in
 effect, ``Good try, but this won't work!''
@@ -57348,8 +57176,7 @@ of polynomial implementation is used.
 Within a given domain, however, you define (at most) one
 representation.\footnote{You can make that representation a
 {\tt Union} type, however.
-See \ref{ugTypesUnions} on page~\pageref{ugTypesUnions} 
-for examples of unions.}
+See \sectionref{ugTypesUnions} for examples of unions.}
 If you want to have multiple representations (that is, several
 domains, each with its own representation), use a category to
 describe the {\tt Exports}, then define separate domains for each
@@ -57362,8 +57189,7 @@ representation.
 The capsule part of {\tt Implementation} defines functions that
 implement the operations exported by the domain---usually only
 some of the operations.
-In our demo in \ref{ugDomainsDemo} on page~\pageref{ugDomainsDemo}, 
-we asked for the value of
+In our demo in \sectionref{ugDomainsDemo}, we asked for the value of
 $3*q-q+q$.
 Where do the operations {\tt *}, {\tt +}, and
 {\tt -} come from?
@@ -57386,8 +57212,7 @@ So do $*$, $+$ and $-$ (from QuadraticForm) come from
 \section{Defaults}
 \label{ugDomainsDefaults}
 %
-In Chapter \ref{ugPackages} on page~\pageref{ugPackages}, 
-we saw that categories can provide
+In \sectionref{ugPackages}, we saw that categories can provide
 default implementations for their operations.
 How and when are they used?
 When Axiom finds that {\tt QuadraticForm(2, Fraction
@@ -57424,8 +57249,7 @@ Let's apply this search strategy for our example $3*q-q+q$.
 The scalar multiplication comes first.
 Axiom finds a default implementation in
 {\tt AbelianGroup\&}.
-Remember from \ref{ugCategoriesDefaults} on 
-page~\pageref{ugCategoriesDefaults} that
+Remember from \sectionref{ugCategoriesDefaults} that
 {\tt SemiGroup} provides a default definition for
 $x^n$ by repeated squaring?
 {\tt AbelianGroup} similarly provides a definition for
@@ -57570,8 +57394,7 @@ e_i \  e_j & = & -e_j \  e_i & \hbox{for } i \neq j
 \end{array}
 $$
 
-Now look at the snapshot of its definition given in Figure
-\ref{fig-clifalg} on page~\pageref{fig-clifalg}.
+Now look at the snapshot of its definition given in \figureref{fig-clifalg}.
 Lines 9-10 show part of the definitions of the
 {\tt Exports}.  A Clifford algebra over a field $K$ is asserted to be
 a ring, an algebra over $K$, and a vector space over $K$.  Its
@@ -58160,7 +57983,7 @@ First enter the search string {\tt Matrix} into the input area and
 click on {\bf Constructors}.
 What you get is the {\it constructor page} for {\tt Matrix}.
 We show and describe this page in detail in
-\ref{ugBrowseDomain} on page~\pageref{ugBrowseDomain}.
+\sectionref{ugBrowseDomain}.
 By convention, Axiom does a case-insensitive search for a
 match.
 Thus {\tt matrix} is just as good as {\tt Matrix}, has the same
@@ -58168,8 +57991,7 @@ effect as {\tt MaTrix}, and so on.
 We recommend that you generally use small letters for names
 however.
 A search string with only capital letters has a special meaning
-(see \ref{ugBrowseCapitalizationConvention} on 
-page~\pageref{ugBrowseCapitalizationConvention}).
+(see \sectionref{ugBrowseCapitalizationConvention}).
 
 
 Click on \UpBitmap{} to return to the Browse front page.
@@ -58192,12 +58014,6 @@ the string ``{\tt matrix}.''
 \caption{Table of exposed constructors matching {\tt *matrix*} .}
 \end{figure}
 
-%% Following para replaced 1995oct30 MGR
-%These are all the exposed constructors in
-%Axiom.
-%To see how to get all exposed and unexposed constructors in
-%Axiom, skip to the section entitled {\bf Exposure} in
-%\ref{ugBrowseOptions} on page~\pageref{ugBrowseOptions}.
 All constructors containing the string are listed, whether
 exposed or unexposed.
 You can hide the names of the unexposed constructors by clicking
@@ -58220,8 +58036,7 @@ Below the table is a {\it Views} panel.
 This panel contains buttons that let you view constructors in different
 ways.
 To learn about views of constructors, skip to
-\ref{ugBrowseViewsOfConstructors} on 
-page~\pageref{ugBrowseViewsOfConstructors}.
+\sectionref{ugBrowseViewsOfConstructors}.
 
 Click on \UpBitmap{} to return to the Browse front page.
 
@@ -58244,7 +58059,7 @@ the operations in Axiom of that name.
 At the bottom of an operation page is another kind of {\it Views} panel,
 one for operation pages.
 To learn more about these views, skip to
-\ref{ugBrowseViewsOfOperations} on page~\pageref{ugBrowseViewsOfOperations}.
+\sectionref{ugBrowseViewsOfOperations}.
 
 Click on \UpBitmap{} to return to the Browse front page.
 
@@ -58285,10 +58100,7 @@ matrix} as a part of their name.
 \end{figure}
 
 The summary gives you all the names under a heading when the number of
-entries is less than 10. % "less than 10." replaces the following:
-			 % sufficiently small%\footnote{See
-%\ref{ugBrowseOptions} to see how you can change this.}.
-%% MGR 1995oct31
+entries is less than 10. 
 
 Click on \UpBitmap{} to return to the Browse front page.
 
@@ -58409,7 +58221,7 @@ below.
 If you click on an operation name, you bring up a description
 page for the operations.
 For a detailed description of these pages, skip to
-\ref{ugBrowseViewsOfOperations} on page~\pageref{ugBrowseViewsOfOperations}.
+\sectionref{ugBrowseViewsOfOperations}.
 
 \subsubsection{Attributes}
 
@@ -59039,8 +58851,6 @@ with a {\it Views} panel at the bottom and the message to {\bf
 Select a view below}.
 To get the descriptions of all these operations as mentioned
 above, select the {\bf description} button.}
-%See the discussion of {\bf threshold} in
-%\ref{ugBrowseOptions}.} %% Removed MGR 1995oct31
 
 \begin{figure}[htbp]
 \begin{picture}(324,180)%(-54,0)
@@ -59106,73 +58916,6 @@ For example, for the category default package
 {\tt MATCAT-} since the corresponding category
 {\tt MatrixCategory} has abbreviation {\tt MATCAT}.
 
-%% *********************************************************************
-%\subsection{Browse Options}
-%\label{ugBrowseOptions}
-%% *********************************************************************
-%
-%You can set two options for using Browse: exposure and threshold.
-%
-%% *********************************************************************
-%\subsubsection{Exposure}
-%% *********************************************************************
-%
-%By default, the only constructors, operations, and attributes
-%shown by Browse are those from exposed constructors.
-%To change this, you can issue
-%\index{set hyperdoc browse exposure}
-%\begin{verbatim}
-%)set hyperdoc browse exposure on
-%\end{verbatim}
-%After you make this setting, you will see
-%both exposed and unexposed constructs.
-%By definition, an operation or attribute is exposed only if it is
-%exported from an exposed constructor.
-%Unexposed items are generally marked by Browse with an asterisk.
-%For more information on exposure, see \ref{ugTypesExpose}.
-%
-%With this setting, try the following experiment.
-%Starting with the main Browse page, enter {\tt *matrix*} into the
-%input area and click on {\bf Constructors}.
-%The result is the following table. %% This line  should be texonly. MGR
-%
-%\begin{figure}[htbp]
-%\begin{picture}(324,180)%(-54,0)
-%\hspace*{\baseLeftSkip}\special{psfile=ps/h-consearch2.ps}
-%\end{picture}
-%\caption{Table of all constructors matching {\tt *matrix*} .}
-%\end{figure}
-%
-%
-%% *********************************************************************
-%\subsubsection{Threshold}
-%% *********************************************************************
-%
-%For General, Documentation or Complete searches, a summary is presented
-%of all matches.
-%When the number of items of a given kind is less than a number called
-%{\bf threshold}, Axiom presents a table of names with the heading
-%for that kind.
-%
-%Also, when an operation name is chosen and there are less than {\bf
-%threshold} distinct operations, the operations are initially shown in
-%{\bf description} mode.
-%
-%The default value of {\bf threshold} is 10.
-%To change its value to say 5, issue
-%\index{set hyperdoc browse threshold}
-%\begin{verbatim}
-%)set hyperdoc browse threshold 5
-%\end{verbatim}
-%Notice that the headings in
-%the summary are active.
-%If you click on a heading, you bring up a separate page for those
-%entries.
-%%
-%% Above section removed by MGR, 1995oct30, as these two options do
-%% not exist.
-
-
 \setcounter{chapter}{14} % Chapter 15 
 
 \chapter{What's New in Axiom Version 2.0}
@@ -59284,7 +59027,7 @@ general, the correspondence to Axiom types is as follows.
 \end{itemize}
 (Exceptionally, for NAG EXTERNAL parameters -- ASPs in link parlance
 -- REAL and COMPLEX correspond to {\tt MachineFloat} and {\tt MachineComplex},
-respectively; see \ref{aspSection} on page~\pageref{aspSection}.)
+respectively; see \sectionref{aspSection}.)
 
 The correspondence for aggregates is as follows.
 \begin{itemize}
@@ -59298,8 +59041,7 @@ The correspondence for aggregates is as follows.
 Higher-dimensional arrays are not currently needed for the Nag Library.
 
 Arguments which are Fortran FUNCTIONs or SUBROUTINEs correspond
-to special ASP domains in Axiom. See \ref{aspSection} on 
-page~\pageref{aspSection}.
+to special ASP domains in Axiom. See \sectionref{aspSection}.
 
 % ----------------------------------------------------------------------
 \subsubsection{Classification of NAG parameters}
@@ -59472,7 +59214,7 @@ retractions from appropriate instantiations of {\tt Expression},
 \index{FortranCode}
 {\tt FortranCode} allows us to build arbitrarily complex ASPs via a
 kind of pseudo-code.  It is described fully in
-\ref{generalFortran} on page~\pageref{generalFortran}.
+\sectionref{generalFortran}.
 
 Every ASP exports two {\bf coerce} functions: one from
 {\tt FortranCode} and one from {\tt List FortranCode}.  There
@@ -59947,7 +59689,7 @@ by the {\tt nagd} daemon process which may run on a different host.
 The {\tt nagman} local agent is started by default whenever you
 start Axiom. The {\tt nagd} server must be started separately.
 Instructions for installing and running the server are supplied
-in \ref{nugNagd} on page~\pageref{nugNagd}. 
+in \sectionref{nugNagd}.
 Use the {\tt )set naglink host} system command
 to point your local agent to a server in your network.
 
@@ -59998,8 +59740,7 @@ the resulting program on the numeric part of the RPC stream.
 The {\tt leave} keyword has been replaced by the
 {\tt break} keyword for compatibility with the new Axiom
 extension language.
-See section \ref{ugLangLoopsBreak} on page~\pageref{ugLangLoopsBreak}
-for more information.
+See \sectionref{ugLangLoopsBreak} for more information.
 
 Curly braces are no longer used to create sets. Instead, use
 {\bf set} followed by a bracketed expression. For example,
@@ -60007,7 +59748,7 @@ Curly braces are no longer used to create sets. Instead, use
 \spadcommand{set [1,2,3,4]}
 
 Curly braces are now used to enclose a block (see section
-\ref{ugLangBlocks} on page~\pageref{ugLangBlocks}
+\sectionref{ugLangBlocks} 
 for more information). For compatibility, a block can still be 
 enclosed by parentheses as well.
 
@@ -60161,31 +59902,24 @@ HyperDoc.
 A section has been added to the graphics chapter, describing
 how to build two-di\-men\-sion\-al graphs from lists of points. An example is
 given showing how to read the points from a file.
-See section \ref{ugGraphTwoDbuild} on page~\pageref{ugGraphTwoDbuild}
-for details.
+See \sectionref{ugGraphTwoDbuild} for details.
 
 A further section has been added to that same chapter, describing
 how to add a two-di\-men\-sion\-al graph to a viewport which already
 contains other graphs.
-See section
-\ref{ugGraphTwoDappend} on page~\pageref{ugGraphTwoDappend}
-for details.
+See \sectionref{ugGraphTwoDappend} for details.
 
 Chapter 3 
 and the on-line HyperDoc help have been unified.
 
 An explanation of operation names ending in ``?'' and ``!'' has
 been added to the first chapter. 
-See the
-end of the section
-\ref{ugIntroCallFun} on page~\pageref{ugIntroCallFun}
-for details.
+See the end of the \sectionref{ugIntroCallFun} for details.
 
 An expanded explanation of using predicates has
 been added to the sixth chapter. See the
-example involving {\bf evenRule} in the middle of the section
-\ref{ugUserRules} on page~\pageref{ugUserRules}
-for details.
+example involving {\bf evenRule} in the middle of the 
+\sectionref{ugUserRules} for details.
 
 Documentation for the {\tt )compile}, {\tt )library} and
 {\tt )load} commands has been greatly changed. This reflects
@@ -60237,7 +59971,7 @@ are available at {\tt interpreter} level.
 The default user-level is {\tt interpreter}.
 \index{user-level}
 In addition to the {\tt )set} command (discussed in 
-\ref{ugSysCmdset} on page~\pageref{ugSysCmdset})
+\sectionref{ugSysCmdset}
 you can use the HyperDoc settings facility to change the {\it user-level.}
 
 
@@ -60899,9 +60633,7 @@ The sequence of commands
 will call the compiler, edit, and then call the compiler again
 on the file {\bf matrix.spad.}
 If you do not specify a {\it directory,} the working current
-directory (see 
-\ref{ugSysCmdcd} on page~\pageref{ugSysCmdcd})
-is searched for the file.
+directory (see \sectionref{ugSysCmdcd} is searched for the file.
 If the file is not found, the standard system directories are searched.
 
 If you do not give any options, all constructors within a file are
@@ -60930,8 +60662,7 @@ completely different.
 
 The {\tt )vartrace} option causes the compiler to generate
 extra code for the constructor to support conditional tracing of
-variable assignments. (see 
-\ref{ugSysCmdtrace} on page~\pageref{ugSysCmdtrace}). Without
+variable assignments. (see \sectionref{ugSysCmdtrace}). Without
 this option, this code is suppressed and one cannot use
 the {\tt )vars} option for the trace command.
 
@@ -61355,21 +61086,16 @@ Thus {\tt \%\%(-1)} is also the previous step,
 {\tt \%\%(-2)}, is the  step before that, and so on.
 If an invalid step number is given, Axiom will signal an error.
 
-The {\it environment} information can either be saved in a file or entirely in
-memory (the default).
-Each frame 
-(\ref{ugSysCmdframe} on page~\pageref{ugSysCmdframe})
-has its own history database.
-When it is kept in a file, some of it may also be kept in memory for
-efficiency.
-When the information is saved in a file, the name of the file is
-of the form {\bf FRAME.axh} where ``{\bf FRAME}'' is the name of the
-current frame.
-The history file is placed in the current working directory
-(see \ref{ugSysCmdcd} on page~\pageref{ugSysCmdcd}).
-Note that these history database files are not text files (in fact,
-they are directories themselves), and so are not in human-readable
-format.
+The {\it environment} information can either be saved in a file or
+entirely in memory (the default).  Each frame
+(\sectionref{ugSysCmdframe}) has its own history database.  When it is
+kept in a file, some of it may also be kept in memory for efficiency.
+When the information is saved in a file, the name of the file is of
+the form {\bf FRAME.axh} where ``{\bf FRAME}'' is the name of the
+current frame.  The history file is placed in the current working
+directory (see \sectionref{ugSysCmdcd}).  Note that these history
+database files are not text files (in fact, they are directories
+themselves), and so are not in human-readable format.
 
 The options to the {\tt )history} command are as follows:
 
@@ -61426,16 +61152,14 @@ would clear the current workspace and load the contents of the named
 saved session. If no saved session name is specified, the system looks
 for a file called {\bf last.axh}.
 
-\item[{\tt )save} {\it savedHistoryName}]
-is used to save  a snapshot of the environment in a file.
-This file is placed in the current working directory
-(see \ref{ugSysCmdcd} on page~\pageref{ugSysCmdcd}).
-Use {\tt )history )restore} to restore the environment to the state
-preserved in the file.
-This option also creates an input file containing all the lines of input
-since you created the workspace frame (for example, by starting your
-Axiom session) or last did a {\tt )clear all} or
-{\tt )clear completely}.
+\item[{\tt )save} {\it savedHistoryName}] is used to save a snapshot
+of the environment in a file.  This file is placed in the current
+working directory (see \sectionref{ugSysCmdcd}).  Use {\tt )history
+)restore} to restore the environment to the state preserved in the
+file.  This option also creates an input file containing all the lines
+of input since you created the workspace frame (for example, by
+starting your Axiom session) or last did a {\tt )clear all} or {\tt
+)clear completely}.
 
 \item[{\tt )show} \lanb{}{\it n}\ranb{} \lanb{}{\tt both}\ranb{}]
 can show previous input lines and output results.
@@ -61614,74 +61338,6 @@ command may be used to  drop out  of Axiom  into Common Lisp.
 
 This command is obsolete. Use {\tt )library} instead.
 
-%% BEGIN OBSOLETE
-
-% The {\tt )load} command is used to bring in the compiled library code
-% for constructors and update internal system tables with information
-% about the constructors.
-% This command is usually only used by Axiom library developers.
-%
-% The abbreviation of a constructor serves as part of the name of the
-% directory in which the compiled code is stored (see
-% \ref{ugSysCmdabbreviation} for a discussion of defining and querying
-% abbreviations).
-% The abbreviation is used in the {\tt )load} command.
-% For example, to load the constructors {\tt Integer},
-% {\tt NonNegativeInteger} and {\tt List} which have
-% abbreviations {\tt INT}, {\tt NNI} and {\tt LIST},
-% respectively, issue the command
-% \begin{verbatim}
-% )load INT NNI LIST
-% \end{verbatim}
-% To load constructors only if they have not already been
-% loaded (that is., load {\it conditionally}), use the {\tt )cond}
-% option:
-% \begin{verbatim}
-% )load INT NNI LIST )cond
-% \end{verbatim}
-% To query whether particular constructors have been loaded, use the
-% {\tt )query} option:
-% \begin{verbatim}
-% )load I NNI L )query
-% \end{verbatim}
-% When constructors are loaded from Axiom system directories, some
-% checks and updates are not performed because it is assumed that the system
-% knows about these constructors.
-% To force these checks and updates to occur, add the {\tt )update}
-% option to the command:
-% \begin{verbatim}
-% )load INT NNI LIST )update
-% )load INT NNI LIST )cond )update
-% \end{verbatim}
-% The only time it is really necessary to use the {\tt )load} command is
-% when a new constructor has been compiled or an existing constructor has
-% been modified and then compiled.
-% If an {\tt )abbreviate} command has been issued for a constructor, it
-% will be automatically loaded when needed.
-% In particular, any constructor that comes with the Axiom system
-% will be automatically loaded.
-%
-% If you write several interdependent constructors it is important that
-% they all get loaded when needed.
-% To accomplish this, either load them manually or issue
-% {\tt )abbreviate} commands for each of the constructors so that they
-% will be automatically loaded when needed.
-%
-% Constructors are automatically exposed in the frame in which you load
-% them unless you use the {\tt )noexpose} option.
-% \begin{verbatim}
-% )load MATCAT- )noexpose
-% \end{verbatim}
-% See \ref{ugTypesExpose}
-% for more information about constructor exposure.
-%
-% \par\noindent{\bf Also See:}
-% {\tt )abbreviation} \index{ugSysCmdabbreviation} and
-% {\tt )compile} \index{ugSysCmdcompile}.
-
-%% END OBSOLETE
-
-
 \section{)trace}
 \index{ugSysCmdltrace}
 
@@ -61845,8 +61501,7 @@ The command
 will read the contents of the file {\bf matrix.input} into
 Axiom.
 The ``.input'' file extension is optional.
-See \ref{ugInOutIn} on page~\pageref{ugInOutIn} 
-for more information about {\bf .input} files.
+See \sectionref{ugInOutIn} for more information about {\bf .input} files.
 
 This command remembers the previous file you edited, read or compiled.
 If you do not specify a file name, the previous file will be read.
@@ -62369,23 +62024,16 @@ causes a Common Lisp break loop to be entered after
 the assignment to any of the listed variables in the traced
 function.
 
-\item[{\tt )vars}]
-causes the display of the value of any variable after it is
-assigned in the traced function.
-Note that library code must
-have been compiled (see \ref{ugSysCmdcompile} on 
-page~\pageref{ugSysCmdcompile})
-using the {\tt )vartrace} option in order
-to support this option.
-
-\item[{\tt )vars} {\it var1 \lanb{}... varN\ranb{}}]
-causes the display of the value of any of the specified variables
-after they are assigned in the traced function.
-Note that library code must
-have been compiled (see \ref{ugSysCmdcompile} on 
-page~\pageref{ugSysCmdcompile})
-using the {\tt )vartrace} option in order
-to support this option.
+\item[{\tt )vars}] causes the display of the value of any variable
+after it is assigned in the traced function.  Note that library code
+must have been compiled (see \sectionref{ugSysCmdcompile} using the
+{\tt )vartrace} option in order to support this option.
+
+\item[{\tt )vars} {\it var1 \lanb{}... varN\ranb{}}] causes the
+display of the value of any of the specified variables after they are
+assigned in the traced function.  Note that library code must have
+been compiled (see \sectionref{ugSysCmdcompile} using the {\tt
+)vartrace} option in order to support this option.
 
 \item[{\tt )within} {\it executingFunction}]
 causes the display of trace information only if the traced
@@ -62607,8 +62255,7 @@ The command synonym  {\tt )apropos} is equivalent to
 
 This is a listing of all categories in the Axiom library at the
 time this book was produced.
-Use the Browse facility (described in Chapter 
-\ref{ugBrowse} on page~\pageref{ugBrowse})
+Use the Browse facility (described in \sectionref{ugBrowse})
 to get more information about these constructors.
 
 This sample entry will help you read the following table:
@@ -63081,8 +62728,7 @@ $\hbox{{\rm op}}_{j}$ & is an operation exported by the category.
 
 This is a listing of all domains in the Axiom library at the
 time this book was produced.
-Use the Browse facility (described in Chapter 
-\ref{ugBrowse} on page~\pageref{ugBrowse})
+Use the Browse facility (described in \sectionref{ugBrowse})
 to get more information about these constructors.
 
 This sample entry will help you read the following table:
@@ -64323,8 +63969,7 @@ $\hbox{{\rm op}}_{j}$ & is an operation exported by the domain.
 
 This is a listing of all packages in the Axiom library at the
 time this book was produced.
-Use the Browse facility (described in Chapter 
-\ref{ugBrowse} on page~\pageref{ugBrowse})
+Use the Browse facility (described in \sectionref{ugBrowse})
 to get more information about these constructors.
 
 This sample entry will help you read the following table:
@@ -65642,7 +65287,7 @@ Additionally, the plane curve function takes
 a second parameter: the current parameter of {\it spaceCurve}.
 This allows the plane curve to change shape
 as it goes around the space curve.
-See \ref{ugFimagesFive} for an example of this.
+See \sectionref{ugFimagesFive} for an example of this.
 %
 \begin{verbatim}
 ntubeDraw: (ThreeCurve,TwoCurve,S,S) -> VIEW3D
diff --git a/changelog b/changelog
index 559c761..be24ef0 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,5 @@
+20090404 tpd src/axiom-website/patches.html 20090404.01.tpd.patch	
+20090404 tpd books/bookvol0 fix cross references
 20090403 tpd src/axiom-website/patches.html 20090403.02.tpd.patch	
 20090403 tpd src/input/Makefile add unittest3
 20090403 tpd src/input/unittest3.input unit test top level loop variables
diff --git a/src/axiom-website/patches.html b/src/axiom-website/patches.html
index b90f94a..782bc59 100644
--- a/src/axiom-website/patches.html
+++ b/src/axiom-website/patches.html
@@ -1042,5 +1042,7 @@ download.html add more binaries<br/>
 remove gcl-2.6.7, gcl-2.6.8pre<br/>
 <a href="patches/20090403.02.tpd.patch">20090403.02.tpd.patch</a>
 bookvol5 collect top level loop code<br/>
+<a href="patches/20090404.01.tpd.patch">20090404.01.tpd.patch</a>
+bookvol0 fix cross references<br/>
  </body>
 </html>

\start
Date: Sat, 4 Apr 2009 23:02:56 -0600
From: Tim Daly
To: Ralf Hemmecke
Subject: 20090404.02.tpd.patch (bookvol0 add domain examples)

Book Volume 0: Axiom Jenks and Sutor was updated

The following domain and package examples were added:
   ApplicationProgramInterface 
   ArrayStack
   Dequeue
   EuclideanGroebnerBasisPackage
   GeneralDistributedMultivariatePolynomial
   GroebnerPackage
   HomogeneousDistributedMultivariatePolynomial
   NottinghamGroup
   Permutation
   RealSolvePackage
   TwoDimensionalViewport


The TwoDimensionalViewport example shows how to add multiple graphs
to a single 2D viewport.

Book Volume 10.3: Axiom Domains was updated
   NottinghamGroup documentation was updated
   Permutation documentation and examples were updated
   PlaneAlgebraicCurvePlot examples were updated


Book Volume 10.4: Axiom Packages was updated
   LazardSetSolvingPackage was unittested and a help file created

The patch is too large to post. See
http://axiom-developer.org/axiom-website/patches.html#latest

\start
Date: Sun, 5 Apr 2009 15:57:22 -0500
From: Tim Daly
To: list
Subject: Full Axiom on Windows

You can now run a complete Axiom system on native windows.

The approximate steps are:


A) set up an X server on windows:
 1) visit http://gears.aset.psu.edu/hpc/guides/xming
 2) download Xming
 3) install it in windows
 4) launch it

B) download axiom ubuntu image
 1) http://axiom-developer.org/axiom-website/downloads.html
 2) download ubuntu binary as axiom-ubuntu-nov2008-bin.tgz
 3) move axiom tgz image to C:\

C) set up Portable_Ubuntu on windows:
 1) visit http://lifehacker.com/5195999/portable-ubuntu-runs-ubuntu-inside-windows
 2) download Portable Ubuntu
 3) install it (it created c:\Portable_Ubuntu directory)
 4) cd Portable_Ubuntu
 5) run_portable_ubuntu (its a bat file)

D) enable root access
 1) in the ubuntu menu bar Applications->Terminal
 2) sudo passwd root (the default root passwd is 123456)

E) install axiom into /etc (the only place with room in my install)
 0) su -
 1) cd /etc
 2) tar -zxf /mnt/C/axiom-ubuntu-nov2008-bin.tgz
 3) cd axiom
 4) export AXIOM=`pwd`/mnt/ubuntu
 5) export PATH=$AXIOM/bin:$PATH
 6) axiom

For me, axiom starts, hyperdoc pops up, and I can run graphics.

\start
Date: Sun, 5 Apr 2009 16:23:56 -0500
From: Tim Daly
To: list
Subject: Full Axiom on Windows (missing step)

You need to export the DISPLAY variable in portable ubuntu. Do:

So more detailed steps are:

A) set up an X server on windows:
 1) visit http://gears.aset.psu.edu/hpc/guies/xming
 2) download Xming
 3) install it in windows
 4) launch it

B) download axiom ubuntu image
 1) http://axiom-developer.org/axiom-website/downloads.html
 2) download ubuntu as axiom-ubuntu-nov2008-bin.tgz
 3) move axiom tgz image to C:\

C) set up Portable_Ubuntu on windows
 1) visit http://lifehacker.com/5195999/portable-ubuntu-runs-ubuntu-inside-windows
 2) download Portable_Ubuntu
 3) install it (it created c:\Portable_Ubuntu directory)
 4) cd Portable_Ubuntu
 5) run_portable_ubuntu (it is a bat file)

D) enable root access
 1) in the ubuntu menu bar Applications->Accessories->Terminal
 2) sudo passwd root (the default root password is 123456)

D+) find your window IP address
 0) open a windows cmd window
 1) type ipconfig
 2) write down your IP address (e.g. 192.168.1.105) 

E) install axiom into /etc (the only place with room in my install)
 0) su -
 1) cd /etc
 2) tar -zxf /mnt/C/axiom-ubuntu-nov2008-bin.tgz
 3) cd axiom
 4) export DISPLAY=192.168.1.105:0.0 
 5) export AXIOM=`pwd`/mnt/ubuntu
 6) export PATH=$AXIOM/bin:$PATH
 7) axiom

\start
Date: Sun, 5 Apr 2009 16:57:06 -0500
From: Tim Daly
To: list
Subject: 20090405.01.tpd.patch (index.html axiom on windows instructions)

The axiom-developer main page now includes the windows instructions.

===================================================================
diff --git a/changelog b/changelog
index 0e692a6..c0df1e5 100644
--- a/changelog
+++ b/changelog
@@ -1,4 +1,6 @@
-20090404 tpd src/axiom-website/patches.html 20090404.02.tpd.patch	
+20090405 tpd src/axiom-website/patches.html 20090405.01.tpd.patch
+20090405 tpd src/axiom-website/index.html Axiom on Windows instructions
+20090404 tpd src/axiom-website/patches.html 20090404.02.tpd.patch
 20090404 tpd books/bookvol10.4 additional package unit tests
 20090404 tpd books/bookvol10.3 additional domain unit tests
 20090404 tpd books/bookvol0 add domain examples
diff --git a/src/axiom-website/index.html b/src/axiom-website/index.html
index 0bce186..0e140dd 100644
--- a/src/axiom-website/index.html
+++ b/src/axiom-website/index.html
@@ -91,7 +91,56 @@
    </div>
   <br>
   <hr>
-DOCUMENTATION:
+<h1>Axiom on Windows:</h1>
+You can now run Axiom on a Windows box. Basically all Axiom needs
+to run is an X server and a linux install. This detailed set of 
+steps shows you how to set up an X server on windows (Step A),
+get a copy of Axiom (Step B), set up ubuntu (Step C), set up
+the minor details (Step D, E), and start Axiom (Step F).
+
+The steps are very simple and are laid out in detail here:
+<pre>
+
+A) set up an X server on windows:
+ 1) visit http://gears.aset.psu.edu/hpc/guies/xming
+ 2) download Xming
+ 3) install it in windows
+ 4) launch it
+
+B) download axiom ubuntu image
+ 1) http://axiom-developer.org/axiom-website/downloads.html
+ 2) download ubuntu as axiom-ubuntu-nov2008-bin.tgz
+ 3) move axiom tgz image to C:\
+
+C) set up Portable_Ubuntu on windows
+ 1) visit http://lifehacker.com/5195999/portable-ubuntu-runs-ubuntu-inside-windows
+ 2) download Portable_Ubuntu
+ 3) install it (it created c:\Portable_Ubuntu directory)
+ 4) cd Portable_Ubuntu
+ 5) run_portable_ubuntu (it is a bat file)
+
+D) enable root access
+ 1) in the ubuntu menu bar Applications->Accessories->Terminal
+ 2) sudo passwd root (the default root password is 123456)
+
+E) find your window IP address
+ 0) open a windows cmd window
+ 1) type ipconfig
+ 2) write down your IP address (e.g. 192.168.1.105) 
+
+F) install axiom into /etc (the only place with room in my install)
+ 0) su -
+ 1) cd /etc
+ 2) tar -zxf /mnt/C/axiom-ubuntu-nov2008-bin.tgz
+ 3) cd axiom
+ 4) export DISPLAY=192.168.1.105:0.0 
+ 5) export AXIOM=`pwd`/mnt/ubuntu
+ 6) export PATH=$AXIOM/bin:$PATH
+ 7) axiom
+</pre>
+
+  <hr>
+<h2>DOCUMENTATION:</h2>
 <ul>
  <li>Books
   <ul>
diff --git a/src/axiom-website/patches.html b/src/axiom-website/patches.html
index cd448e8..4a16a91 100644
--- a/src/axiom-website/patches.html
+++ b/src/axiom-website/patches.html
@@ -1046,5 +1046,7 @@ bookvol5 collect top level loop code<br/>
 bookvol0 fix cross references<br/>
 <a href="patches/20090404.02.tpd.patch">20090404.02.tpd.patch</a>
 bookvol0 document additional domains<br/>
+<a href="patches/20090405.01.tpd.patch">20090405.01.tpd.patch</a>
+index.html Axiom on Windows instructions<br/>
  </body>
 </html>

\start
Date: Sun, 5 Apr 2009 19:11:20 -0500
From: Tim Daly
To: list
Subject: 20090405.02.tpd.patch (index.html Axiom on Windows as html)

Rewrite the instructions to build Axiom on Windows using html so
the page uses hyperlinks.
=======================================================================
diff --git a/changelog b/changelog
index c0df1e5..2a04732 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,5 @@
+20090405 tpd src/axiom-website/patches.html 20090405.02.tpd.patch
+20090405 tpd src/axiom-website/index.html Axiom on Windows as html
 20090405 tpd src/axiom-website/patches.html 20090405.01.tpd.patch
 20090405 tpd src/axiom-website/index.html Axiom on Windows instructions
 20090404 tpd src/axiom-website/patches.html 20090404.02.tpd.patch
diff --git a/src/axiom-website/index.html b/src/axiom-website/index.html
index 0e140dd..f25b84b 100644
--- a/src/axiom-website/index.html
+++ b/src/axiom-website/index.html
@@ -99,46 +99,86 @@ get a copy of Axiom (Step B), set up ubuntu (Step C), set up
 the minor details (Step D, E), and start Axiom (Step F).
 
 The steps are very simple and are laid out in detail here:
-<pre>
-
-A) set up an X server on windows:
- 1) visit http://gears.aset.psu.edu/hpc/guies/xming
- 2) download Xming
- 3) install it in windows
- 4) launch it
-
-B) download axiom ubuntu image
- 1) http://axiom-developer.org/axiom-website/downloads.html
- 2) download ubuntu as axiom-ubuntu-nov2008-bin.tgz
- 3) move axiom tgz image to C:\
-
-C) set up Portable_Ubuntu on windows
- 1) visit http://lifehacker.com/5195999/portable-ubuntu-runs-ubuntu-inside-windows
- 2) download Portable_Ubuntu
- 3) install it (it created c:\Portable_Ubuntu directory)
- 4) cd Portable_Ubuntu
- 5) run_portable_ubuntu (it is a bat file)
-
-D) enable root access
- 1) in the ubuntu menu bar Applications->Accessories->Terminal
- 2) sudo passwd root (the default root password is 123456)
+<ol>
+ <li> set up an X server on windows:</li>
+  <ol>
+   <li> visit <a href="http://gears.aset.psu.edu/hpc/guides/xming">
+                 http://gears.aset.psu.edu/hpc/guides/xming</a>
+   </li>
+   <li> download Xming</li>
+   <li> install it in windows</li>
+   <li> launch it</li>
+  </ol>
+ <li> download axiom ubuntu image</li>
+  <ol>
+   <li> visit 
+     <a href="http://axiom-developer.org/axiom-website/download.html">
+        http://axiom-developer.org/axiom-website/downloads.html</a>
+   </li>
+   <li> download 
+     <a href="http://axiom-developer.org/axiom-website/downloads/axiom-ubuntu-nov2008-bin.tgz">
+        ubuntu as axiom-ubuntu-nov2008-bin.tgz</a>
+   </li>
+   <li> save axiom tgz image to C:\</li>
+  </ol>
+ <li> set up Portable_Ubuntu on windows</li>
+  <ol>
+   <li> download 
+<a href="http://downloads.sourceforge.net/portableubuntu/Portable_Ubuntu.exe">
+       Portable_Ubuntu</a>
+   </li>
+   <li> run the exe to install it (it created c:\Portable_Ubuntu directory)
+   </li>
+   <li> cd Portable_Ubuntu</li>
+   <li> run_portable_ubuntu (it is a bat file)</li>
+  </ol>
+ <li> enable root access in ubuntu</li>
+  <ol>
+   <li> in the ubuntu menu bar Applications->Accessories->Terminal</li>
+   <li> sudo passwd root (the default root password is 123456)</li>
+   <li> choose and set a new password</li>
+  </ol>
+ <li> find your window IP address</li>
+  <ol>
+   <li> open a windows cmd window (Start->Accessories->Command Prompt)</li>
+   <li> type ipconfig</li>
+   <li> write down your IP address (e.g. 192.168.1.105) </li>
+  </ol>
+ <li> install axiom into /etc (the only place with room in my install)</li>
+  <ol>
+   <li> su -   (become root in ubunut)</li>
+   <li> cd /etc</li>
+   <li> tar -zxf /mnt/C/axiom-ubuntu-nov2008-bin.tgz</li>
+  </ol>
+ <li> test starting axiom</li>
+  <ol>
+   <li> cd axiom</li>
+   <li> export DISPLAY=192.168.1.105:0.0 </li>
+   <li> export AXIOM=`pwd`/mnt/ubuntu</li>
+   <li> export PATH=$AXIOM/bin:$PATH</li>
+   <li> axiom</li>
+  </ol>
+ </ol>
 
-E) find your window IP address
- 0) open a windows cmd window
- 1) type ipconfig
- 2) write down your IP address (e.g. 192.168.1.105) 
+Now you can start Axiom anytime. Most of these steps can be put into
+shell scripts on Ubuntu and bat files in Windows.
+ <ol>
+  <li> launch Xming (if you don't plan to draw or use hyperdoc, skip this)
+  <li> cd Portable_Ubuntu
+  <li> run_portable_ubuntu
+  <li> cd /etc/axiom
+  <li> export DISPLAY=192.168.1.105:0.0 
+  <li> export AXIOM=`pwd`/mnt/ubuntu
+  <li> export PATH=$AXIOM/bin:$PATH
+  <li> axiom
+ </ol>
 
-F) install axiom into /etc (the only place with room in my install)
- 0) su -
- 1) cd /etc
- 2) tar -zxf /mnt/C/axiom-ubuntu-nov2008-bin.tgz
- 3) cd axiom
- 4) export DISPLAY=192.168.1.105:0.0 
- 5) export AXIOM=`pwd`/mnt/ubuntu
- 6) export PATH=$AXIOM/bin:$PATH
- 7) axiom
-</pre>
+  <hr>
+<h1>Axiom on Other Systems:</h1>
 
+Axiom runs on many other systems. Visit the 
+<a href="http://axiom-developer.org/axiom-website/download.html">download</a>
+link to see available binary and source distributions.
   <hr>
 <h2>DOCUMENTATION:</h2>
 <ul>
@@ -159,6 +199,10 @@ F) install axiom into /etc (the only place with room in my install)
  <li>Literate Documents
   <ul>
    <li>
+<a href="http://axiom-developer.org/axiom-website/documentation.html">
+ documentation</a>
+   </li>
+   <li>
     <a href="axiom-website/dhmatrix.spad.pdf">dhmatrix.spad.pdf</a>
    </li>
   </ul>
diff --git a/src/axiom-website/patches.html b/src/axiom-website/patches.html
index 4a16a91..faaa6d8 100644
--- a/src/axiom-website/patches.html
+++ b/src/axiom-website/patches.html
@@ -1048,5 +1048,7 @@ bookvol0 fix cross references<br/>
 bookvol0 document additional domains<br/>
 <a href="patches/20090405.01.tpd.patch">20090405.01.tpd.patch</a>
 index.html Axiom on Windows instructions<br/>
+<a href="patches/20090405.02.tpd.patch">20090405.02.tpd.patch</a>
+index.html Axiom on Windows as html<br/>
  </body>
 </html>

\start
Date: Mon, 6 Apr 2009 05:00:56 -0500
From: Tim Daly
To: list
Subject: 20090406.01.tpd.patch (bookvol5 add )set debug)

Axiom now has a new )set debug command.

This top level command will collect all of the internal debugging 
flags so that they can be found, become easier to use, and become
better documented.

===================================================================
diff --git a/books/bookvol0.pamphlet b/books/bookvol0.pamphlet
index c7c47e5..2a5d851 100644
--- a/books/bookvol0.pamphlet
+++ b/books/bookvol0.pamphlet
@@ -43874,7 +43874,7 @@ $$
 \returnType{Type: List NonNegativeInteger}
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\domainhead{Permuation}
+\domainhead{Permutation}
 
 
 We represent a permutation as two lists of equal length representing preimages
diff --git a/books/bookvol5.pamphlet b/books/bookvol5.pamphlet
index 1697c27..8db7069 100644
--- a/books/bookvol5.pamphlet
+++ b/books/bookvol5.pamphlet
@@ -6239,7 +6239,81 @@ These commands are restricted to keep the user from causing damage.
    (|nobreak| |break| |query| |resume| |fastlinks|)
    |nobreak|)         ; needed to avoid possible startup looping
 @
-\section{Variables Used}
+\section{debug}
+\begin{verbatim}
+                  Current Values of debug Variables                   
+
+Variable     Description                           Current Value
+-----------------------------------------------------------------
+lambdatype   Show type information for #1 syntax     off
+dalymode     Interpret leading open paren as lisp    off
+
+\end{verbatim}
+<<debug>>=
+   (|debug|
+    "debug options"
+    |interpreter|
+    TREE
+    |novar|
+    (
+<<debuglambdatype>>
+<<debugdalymode>>
+    ))
+@
+\section{debug lambda type}
+\begin{verbatim}
+---------------------- The lambdatype Option ----------------------
+
+ Description: Show type information for #1 syntax
+
+\end{verbatim}
+\defdollar{lambdatype}
+<<initvars>>=
+(defvar $lambdatype nil "show type information for #1 syntax")
+
+@
+<<debuglambdatype>>=
+      (|lambdatype|
+       "show type information for #1 syntax"
+       |interpreter|
+       LITERALS
+       $lambdatype
+       (|on| |off|)
+       |off|)
+@
+\section{debug dalymode}
+The \verb|$dalymode| variable is used in a case statement in 
+intloopReadConsole. This variable can be set to any non-nil
+value. When not nil the interpreter will send any line that begins
+with an ``('' to be sent to the underlying lisp. This is useful
+for debugging Axiom. The normal value of this variable is NIL.
+
+This variable was created as an alternative to prefixing every lisp
+command with )lisp. When doing a lot of debugging this is tedious
+and error prone. This variable was created to shortcut that process.
+Clearly it breaks some semantics of the language accepted by the
+interpreter as parens are used for grouping expressions.
+
+\begin{verbatim}
+---------------------- The dalymode Option ----------------------
+
+ Description: Interpret leading open paren as lisp
+
+\end{verbatim}
+\defdollar{dalymode}
+<<initvars>>=
+(defvar $dalymode nil "Interpret leading open paren as lisp")
+
+@
+<<debugdalymode>>=
+      (|dalymode|
+       "Interpret leading open paren as lisp"
+       |interpreter|
+       LITERALS
+       $dalymode
+       (|on| |off|)
+       |off|)
+@
 \section{compiler}
 \begin{verbatim}
                   Current Values of  compiler  Variables                   
@@ -10498,6 +10572,7 @@ prettyprint  prettyprint BOOT func's as they compile    off
 (defvar |$setOptions| '(
 <<breakmode>>
 <<compiler>>
+<<debug>>
 <<expose>>
 <<functions>>
 <<fortran>>
@@ -15608,19 +15683,6 @@ the value of the AXIOM shell variable.
 The \verb|$currentLine| line is set to NIL in restart.
 It is used in removeUndoLines in the undo mechanism.
 
-\subsection{\$dalymode}
-The \verb|$dalymode| variable is used in a case statement in 
-intloopReadConsole. This variable can be set to any non-nil
-value. When not nil the interpreter will send any line that begins
-with an ``('' to be sent to the underlying lisp. This is useful
-for debugging Axiom. The normal value of this variable is NIL.
-
-This variable was created as an alternative to prefixing every lisp
-command with )lisp. When doing a lot of debugging this is tedious
-and error prone. This variable was created to shortcut that process.
-Clearly it breaks some semantics of the language accepted by the
-interpreter as parens are used for grouping expressions.
-
 \subsection{\$defaultMsgDatabaseName}
 The \verb|$defaultMsgDatabaseName| is the absolute path to the 
 s2-us.msgs file which contains all of the english language
diff --git a/changelog b/changelog
index 2a04732..367608e 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,10 @@
+20090406 tpd src/axiom-website/patches.html 20090406.01.tpd.patch
+20090406 tpd src/interp/setq.lisp move $dalymode flag to bookvol5
+20090406 tpd src/input/unittest3.input unit test )set debug
+20090406 tpd books/bookvol5 add )set debug
+20090406 tpd src/input/unittest2.input fix unittests
+20090406 tpd src/algebra/Makefile fix LazardSetSolvingPackage typo
+20090406 tpd books/bookvol0 fix spelling typo
 20090405 tpd src/axiom-website/patches.html 20090405.02.tpd.patch
 20090405 tpd src/axiom-website/index.html Axiom on Windows as html
 20090405 tpd src/axiom-website/patches.html 20090405.01.tpd.patch
diff --git a/src/algebra/Makefile.pamphlet b/src/algebra/Makefile.pamphlet
index bde991e..d826254 100644
--- a/src/algebra/Makefile.pamphlet
+++ b/src/algebra/Makefile.pamphlet
@@ -17056,15 +17056,15 @@ ${HELP}/KeyedAccessFile.help: ${BOOKS}/bookvol10.3.pamphlet
             >${INPUT}/KeyedAccessFile.input
 	@echo "KeyedAccessFile (KAFILE)" >>${HELPFILE}
 
-${HELP}/LazardSetSolvingPackage.help: ${BOOKS}/bookvol10.3.pamphlet
+${HELP}/LazardSetSolvingPackage.help: ${BOOKS}/bookvol10.4.pamphlet
 	@echo 7042 create LazardSetSolvingPackage.help from \
-              ${BOOKS}/bookvol10.3.pamphlet
+              ${BOOKS}/bookvol10.4.pamphlet
 	@${TANGLE} -R"LazardSetSolvingPackage.help" \
-           ${BOOKS}/bookvol10.3.pamphlet \
+           ${BOOKS}/bookvol10.4.pamphlet \
            >${HELP}/LazardSetSolvingPackage.help
 	@cp ${HELP}/LazardSetSolvingPackage.help ${HELP}/LAZM3PK.help
 	@${TANGLE} -R"LazardSetSolvingPackage.input" \
-            ${BOOKS}/bookvol10.3.pamphlet \
+            ${BOOKS}/bookvol10.4.pamphlet \
             >${INPUT}/LazardSetSolvingPackage.input
 	@echo "LazardSetSolvingPackage (LAZM3PK)" >>${HELPFILE}
 
diff --git a/src/axiom-website/patches.html b/src/axiom-website/patches.html
index faaa6d8..d000ddd 100644
--- a/src/axiom-website/patches.html
+++ b/src/axiom-website/patches.html
@@ -1050,5 +1050,7 @@ bookvol0 document additional domains<br/>
 index.html Axiom on Windows instructions<br/>
 <a href="patches/20090405.02.tpd.patch">20090405.02.tpd.patch</a>
 index.html Axiom on Windows as html<br/>
+<a href="patches/20090406.01.tpd.patch">20090406.01.tpd.patch</a>
+bookvol5 add )set debug<br/>
  </body>
 </html>
diff --git a/src/input/unittest2.input.pamphlet b/src/input/unittest2.input.pamphlet
index 9c225f7..69266c9 100644
--- a/src/input/unittest2.input.pamphlet
+++ b/src/input/unittest2.input.pamphlet
@@ -1337,7 +1337,7 @@ Unit test the user level commands
 --S 213 of 237
 )lisp (identity |$setOptions|)
 --R 
---RValue = ((|breakmode| "execute break processing on error" |interpreter| LITERALS |$BreakMode| (|nobreak| |break| |query| |resume| |fastlinks|) |nobreak|) (|compiler| "Library compiler options" |interpreter| TREE |novar| ((|output| "library in which to place compiled code" |interpreter| FUNCTION |setOutputLibrary| NIL |htSetOutputLibrary|) (|input| "controls libraries from which to load compiled code" |interpreter| FUNCTION |setInputLibrary| NIL |htSetInputLibrary|) (|args| "arguments for compiling AXIOM code" |interpreter| FUNCTION |setAsharpArgs| (("enter compiler options " STRING |$asharpCmdlineFlags| |chkDirectory| "-O -Fasy -Fao -Flsp -laxiom -Mno-AXL__W__WillObsolete -DAxiom -Y $AXIOM/algebra")) NIL))) (|expose| "control interpreter constructor exposure" |interpreter| FUNCTION |setExpose| NIL |htSetExpose|) (|functions| "some interpreter function options" |interpreter| TREE |novar| ((|cache| "number of function results to cache" |interpreter| FUNCTION |setFunctionsC!
ache| NIL |htSetCache|) (|compile| "compile, don't just define function bodies" |interpreter| LITERALS |$compileDontDefineFunctions| (|on| |off|) |on|) (|recurrence| "specially compile recurrence relations" |interpreter| LITERALS |$compileRecurrence| (|on| |off|) |on|))) (|fortran| "view and set options for FORTRAN output" |interpreter| TREE |novar| ((|ints2floats| "where sensible, coerce integers to reals" |interpreter| LITERALS |$fortInts2Floats| (|on| |off|) |on|) (|fortindent| "the number of characters indented" |interpreter| INTEGER |$fortIndent| (0 NIL) 6) (|fortlength| "the number of characters on a line" |interpreter| INTEGER |$fortLength| (1 NIL) 72) (|typedecs| "print type and dimension lines" |interpreter| LITERALS |$printFortranDecs| (|on| |off|) |on|) (|defaulttype| "default generic type for FORTRAN object" |interpreter| LITERALS |$defaultFortranType| (REAL INTEGER COMPLEX LOGICAL CHARACTER) REAL) (|precision| "precision of generated FORTRAN objects" |interprete!
r| LITERALS |$fortranPrecision| (|single| |double|) |double|)!
 (|intrinsic| "whether to use INTRINSIC FORTRAN functions" |interpreter| LITERALS |$useIntrinsicFunctions| (|on| |off|) |off|) (|explength| "character limit for FORTRAN expressions" |interpreter| INTEGER |$maximumFortranExpressionLength| (0 NIL) 1320) (|segment| "split long FORTRAN expressions" |interpreter| LITERALS |$fortranSegment| (|on| |off|) |on|) (|optlevel| "FORTRAN optimisation level" |interpreter| INTEGER |$fortranOptimizationLevel| (0 2) 0) (|startindex| "starting index for FORTRAN arrays" |interpreter| INTEGER |$fortranArrayStartingIndex| (0 1) 1) (|calling| "options for external FORTRAN calls" |interpreter| TREE |novar| ((|tempfile| "set location of temporary data files" |interpreter| FUNCTION |setFortTmpDir| (("enter directory name for which you have write-permission" DIRECTORY |$fortranTmpDir| |chkDirectory| "/tmp/")) NIL) (|directory| "set location of generated FORTRAN files" |interpreter| FUNCTION |setFortDir| (("enter directory name for which you have write!
-permission" DIRECTORY |$fortranDirectory| |chkDirectory| "./")) NIL) (|linker| "linker arguments (e.g. libraries to search)" |interpreter| FUNCTION |setLinkerArgs| (("enter linker arguments " STRING |$fortranLibraries| |chkDirectory| "-lxlf")) NIL))))) (|kernel| "library functions built into the kernel for efficiency" |interpreter| TREE |novar| ((|warn| "warn when re-definition is attempted" |interpreter| FUNCTION |protectedSymbolsWarning| NIL |htSetKernelWarn|) (|protect| "prevent re-definition of kernel functions" |interpreter| FUNCTION |protectSymbols| NIL |htSetKernelProtect|))) (|hyperdoc| "options in using HyperDoc" |interpreter| TREE |novar| ((|fullscreen| "use full screen for this facility" |interpreter| LITERALS |$fullScreenSysVars| (|on| |off|) |off|) (|mathwidth| "screen width for history output" |interpreter| INTEGER |$historyDisplayWidth| (0 NIL) 120))) (|help| "view and set some help options" |interpreter| TREE |novar| ((|fullscreen| "use fullscreen facility, !
if possible" |interpreter| LITERALS |$useFullScreenHelp| (|on!
| |off|) |off|))) (|history| "save workspace values in a history file" |interpreter| LITERALS |$HiFiAccess| (|on| |off|) |on|) (|messages| "show messages for various system features" |interpreter| TREE |novar| ((|any| "print the internal type of objects of domain Any" |interpreter| LITERALS |$printAnyIfTrue| (|on| |off|) |on|) (|autoload| "print file auto-load messages" |interpreter| LITERALS |$printLoadMsgs| (|on| |off|) |on|) (|bottomup| "display bottom up modemap selection" |development| LITERALS |$reportBottomUpFlag| (|on| |off|) |off|) (|coercion| "display datatype coercion messages" |development| LITERALS |$reportCoerceIfTrue| (|on| |off|) |off|) (|dropmap| "display old map defn when replaced" |interpreter| LITERALS |$displayDroppedMap| (|on| |off|) |off|) (|expose| "warning for unexposed functions" |interpreter| LITERALS |$giveExposureWarning| (|on| |off|) |off|) (|file| "print msgs also to SPADMSG LISTING" |development| LITERALS |$printMsgsToFile| (|on| |off|) |off|)!
 (|frame| "display messages about frames" |interpreter| LITERALS |$frameMessages| (|on| |off|) |off|) (|highlighting| "use highlighting in system messages" |interpreter| LITERALS |$highlightAllowed| (|on| |off|) |off|) (|instant| "present instantiation summary" |development| LITERALS |$reportInstantiations| (|on| |off|) |off|) (|insteach| "present instantiation info" |development| LITERALS |$reportEachInstantiation| (|on| |off|) |off|) (|interponly| "say when function code is interpreted" |interpreter| LITERALS |$reportInterpOnly| (|on| |off|) |on|) (|naglink| "show NAGLink messages" |interpreter| LITERALS |$nagMessages| (|on| |off|) |on|) (|number| "display message number with message" |interpreter| LITERALS |$displayMsgNumber| (|on| |off|) |off|) (|prompt| "set type of input prompt to display" |interpreter| LITERALS |$inputPromptType| (|none| |frame| |plain| |step| |verbose|) |step|) (|selection| "display function selection msgs" |interpreter| LITERALS |$reportBottomUpFlag!
| (|on| |off|) |off|) (|set| "show )set setting after assignm!
ent" |interpreter| LITERALS |$displaySetValue| (|on| |off|) |off|) (|startup| "display messages on start-up" |interpreter| LITERALS |$displayStartMsgs| (|on| |off|) |on|) (|summary| "print statistics after computation" |interpreter| LITERALS |$printStatisticsSummaryIfTrue| (|on| |off|) |off|) (|testing| "print system testing header" |development| LITERALS |$testingSystem| (|on| |off|) |off|) (|time| "print timings after computation" |interpreter| LITERALS |$printTimeIfTrue| (|on| |off| |long|) |off|) (|type| "print type after computation" |interpreter| LITERALS |$printTypeIfTrue| (|on| |off|) |on|) (|void| "print Void value when it occurs" |interpreter| LITERALS |$printVoidIfTrue| (|on| |off|) |off|))) (|naglink| "options for NAGLink" |interpreter| TREE |novar| ((|host| "internet address of host for NAGLink" |interpreter| FUNCTION |setNagHost| (("enter host name" DIRECTORY |$nagHost| |chkDirectory| "localhost")) NIL) (|persistence| "number of (fortran) functions to remember"!
 |interpreter| FUNCTION |setFortPers| (("Requested remote storage (for asps):" INTEGER |$fortPersistence| (0 NIL) 10)) NIL) (|messages| "show NAGLink messages" |interpreter| LITERALS |$nagMessages| (|on| |off|) |on|) (|double| "enforce DOUBLE PRECISION ASPs" |interpreter| LITERALS |$nagEnforceDouble| (|on| |off|) |on|))) (|output| "view and set some output options" |interpreter| TREE |novar| ((|abbreviate| "abbreviate type names" |interpreter| LITERALS |$abbreviateTypes| (|on| |off|) |off|) (|algebra| "display output in algebraic form" |interpreter| FUNCTION |setOutputAlgebra| (("display output in algebraic form" LITERALS |$algebraFormat| (|off| |on|) |on|) (BREAK $ALGEBRAFORMAT) ("where algebra printing goes (enter {em console} or a pathname)?" FILENAME |$algebraOutputFile| |chkOutputFileName| "console")) NIL) (|characters| "choose special output character set" |interpreter| FUNCTION |setOutputCharacters| NIL |htSetOutputCharacters|) (|fortran| "create output in FORTRAN for!
mat" |interpreter| FUNCTION |setOutputFortran| (("create outp!
ut in FORTRAN format" LITERALS |$fortranFormat| (|off| |on|) |off|) (|break| |$fortranFormat|) ("where FORTRAN output goes (enter {em console} or a a pathname)" FILENAME |$fortranOutputFile| |chkOutputFileName| "console")) NIL) (|fraction| "how fractions are formatted" |interpreter| LITERALS |$fractionDisplayType| (|vertical| |horizontal|) |vertical|) (|length| "line length of output displays" |interpreter| INTEGER $LINELENGTH (10 245) 77) (|mathml| "create output in MathML style" |interpreter| FUNCTION |setOutputMathml| (("create output in MathML format" LITERALS |$mathmlFormat| (|off| |on|) |off|) (|break| |$mathmlFormat|) ("where MathML output goes (enter {em console} or a pathname)" FILENAME |$mathmlOutputFile| |chkOutputFileName| "console")) NIL) (|openmath| "create output in OpenMath style" |interpreter| FUNCTION |setOutputOpenMath| (("create output in OpenMath format" LITERALS |$openMathFormat| (|off| |on|) |off|) (|break| |$openMathFormat|) ("where TeX output goes (e!
nter {em console} or a pathname)" FILENAME |$openMathOutputFile| |chkOutputFileName| "console")) NIL) (|script| "display output in SCRIPT formula format" |interpreter| FUNCTION |setOutputFormula| (("display output in SCRIPT format" LITERALS |$formulaFormat| (|off| |on|) |off|) (|break| |$formulaFormat|) ("where script output goes (enter {em console} or a a pathname)" FILENAME |$formulaOutputFile| |chkOutputFileName| "console")) NIL) (|scripts| "show subscripts,... linearly" |interpreter| LITERALS |$linearFormatScripts| (|on| |off|) |off|) (|showeditor| "view output of )show in editor" |interpreter| LITERALS |$useEditorForShowOutput| (|on| |off|) |off|) (|tex| "create output in TeX style" |interpreter| FUNCTION |setOutputTex| (("create output in TeX format" LITERALS |$texFormat| (|off| |on|) |off|) (|break| |$texFormat|) ("where TeX output goes (enter {em console} or a pathname)" FILENAME |$texOutputFile| |chkOutputFileName| "console")) NIL))) (|quit| "protected or unprotecte!
d quit" |interpreter| LITERALS |$quitCommandType| (|protected!
| |unprotected|) |protected|) (|streams| "set some options for working with streams" |interpreter| TREE |novar| ((|calculate| "specify number of elements to calculate" |interpreter| FUNCTION |setStreamsCalculate| (("number of initial stream elements you want calculated" INTEGER |$streamCount| (0 NIL) 10)) NIL) (|showall| "display all stream elements computed" |interpreter| LITERALS |$streamsShowAll| (|on| |off|) |off|))) (|system| "set some system development variables" |development| TREE |novar| ((|functioncode| "show gen. LISP for functions when compiled" |development| LITERALS |$reportCompilation| (|on| |off|) |off|) (|optimization| "show optimized LISP code" |development| LITERALS |$reportOptimization| (|on| |off|) |off|) (|prettyprint| "prettyprint BOOT func's as they compile" |development| LITERALS $PRETTYPRINT (|on| |off|) |on|))) (|userlevel| "operation access level of system user" |interpreter| LITERALS |$UserLevel| (|interpreter| |compiler| |development|) |developm!
ent|))
+--RValue = ((|breakmode| "execute break processing on error" |interpreter| LITERALS |$BreakMode| (|nobreak| |break| |query| |resume| |fastlinks|) |nobreak|) (|compiler| "Library compiler options" |interpreter| TREE |novar| ((|output| "library in which to place compiled code" |interpreter| FUNCTION |setOutputLibrary| NIL |htSetOutputLibrary|) (|input| "controls libraries from which to load compiled code" |interpreter| FUNCTION |setInputLibrary| NIL |htSetInputLibrary|) (|args| "arguments for compiling AXIOM code" |interpreter| FUNCTION |setAsharpArgs| (("enter compiler options " STRING |$asharpCmdlineFlags| |chkDirectory| "-O -Fasy -Fao -Flsp -laxiom -Mno-AXL__W__WillObsolete -DAxiom -Y $AXIOM/algebra")) NIL))) (|debug| "debug options" |interpreter| TREE |novar| ((|lambdatype| "show type information for #1 syntax" |interpreter| LITERALS $LAMBDATYPE (|on| |off|) |off|) (|dalymode| "Interpret leading open paren as lisp" |interpreter| LITERALS $DALYMODE (|on| |off|) |off|))) (|!
expose| "control interpreter constructor exposure" |interpreter| FUNCTION |setExpose| NIL |htSetExpose|) (|functions| "some interpreter function options" |interpreter| TREE |novar| ((|cache| "number of function results to cache" |interpreter| FUNCTION |setFunctionsCache| NIL |htSetCache|) (|compile| "compile, don't just define function bodies" |interpreter| LITERALS |$compileDontDefineFunctions| (|on| |off|) |on|) (|recurrence| "specially compile recurrence relations" |interpreter| LITERALS |$compileRecurrence| (|on| |off|) |on|))) (|fortran| "view and set options for FORTRAN output" |interpreter| TREE |novar| ((|ints2floats| "where sensible, coerce integers to reals" |interpreter| LITERALS |$fortInts2Floats| (|on| |off|) |on|) (|fortindent| "the number of characters indented" |interpreter| INTEGER |$fortIndent| (0 NIL) 6) (|fortlength| "the number of characters on a line" |interpreter| INTEGER |$fortLength| (1 NIL) 72) (|typedecs| "print type and dimension lines" |interpret!
er| LITERALS |$printFortranDecs| (|on| |off|) |on|) (|default!
type| "default generic type for FORTRAN object" |interpreter| LITERALS |$defaultFortranType| (REAL INTEGER COMPLEX LOGICAL CHARACTER) REAL) (|precision| "precision of generated FORTRAN objects" |interpreter| LITERALS |$fortranPrecision| (|single| |double|) |double|) (|intrinsic| "whether to use INTRINSIC FORTRAN functions" |interpreter| LITERALS |$useIntrinsicFunctions| (|on| |off|) |off|) (|explength| "character limit for FORTRAN expressions" |interpreter| INTEGER |$maximumFortranExpressionLength| (0 NIL) 1320) (|segment| "split long FORTRAN expressions" |interpreter| LITERALS |$fortranSegment| (|on| |off|) |on|) (|optlevel| "FORTRAN optimisation level" |interpreter| INTEGER |$fortranOptimizationLevel| (0 2) 0) (|startindex| "starting index for FORTRAN arrays" |interpreter| INTEGER |$fortranArrayStartingIndex| (0 1) 1) (|calling| "options for external FORTRAN calls" |interpreter| TREE |novar| ((|tempfile| "set location of temporary data files" |interpreter| FUNCTION |setFor!
tTmpDir| (("enter directory name for which you have write-permission" DIRECTORY |$fortranTmpDir| |chkDirectory| "/tmp/")) NIL) (|directory| "set location of generated FORTRAN files" |interpreter| FUNCTION |setFortDir| (("enter directory name for which you have write-permission" DIRECTORY |$fortranDirectory| |chkDirectory| "./")) NIL) (|linker| "linker arguments (e.g. libraries to search)" |interpreter| FUNCTION |setLinkerArgs| (("enter linker arguments " STRING |$fortranLibraries| |chkDirectory| "-lxlf")) NIL))))) (|kernel| "library functions built into the kernel for efficiency" |interpreter| TREE |novar| ((|warn| "warn when re-definition is attempted" |interpreter| FUNCTION |protectedSymbolsWarning| NIL |htSetKernelWarn|) (|protect| "prevent re-definition of kernel functions" |interpreter| FUNCTION |protectSymbols| NIL |htSetKernelProtect|))) (|hyperdoc| "options in using HyperDoc" |interpreter| TREE |novar| ((|fullscreen| "use full screen for this facility" |interpreter| !
LITERALS |$fullScreenSysVars| (|on| |off|) |off|) (|mathwidth!
| "screen width for history output" |interpreter| INTEGER |$historyDisplayWidth| (0 NIL) 120))) (|help| "view and set some help options" |interpreter| TREE |novar| ((|fullscreen| "use fullscreen facility, if possible" |interpreter| LITERALS |$useFullScreenHelp| (|on| |off|) |off|))) (|history| "save workspace values in a history file" |interpreter| LITERALS |$HiFiAccess| (|on| |off|) |on|) (|messages| "show messages for various system features" |interpreter| TREE |novar| ((|any| "print the internal type of objects of domain Any" |interpreter| LITERALS |$printAnyIfTrue| (|on| |off|) |on|) (|autoload| "print file auto-load messages" |interpreter| LITERALS |$printLoadMsgs| (|on| |off|) |on|) (|bottomup| "display bottom up modemap selection" |development| LITERALS |$reportBottomUpFlag| (|on| |off|) |off|) (|coercion| "display datatype coercion messages" |development| LITERALS |$reportCoerceIfTrue| (|on| |off|) |off|) (|dropmap| "display old map defn when replaced" |interpreter| !
LITERALS |$displayDroppedMap| (|on| |off|) |off|) (|expose| "warning for unexposed functions" |interpreter| LITERALS |$giveExposureWarning| (|on| |off|) |off|) (|file| "print msgs also to SPADMSG LISTING" |development| LITERALS |$printMsgsToFile| (|on| |off|) |off|) (|frame| "display messages about frames" |interpreter| LITERALS |$frameMessages| (|on| |off|) |off|) (|highlighting| "use highlighting in system messages" |interpreter| LITERALS |$highlightAllowed| (|on| |off|) |off|) (|instant| "present instantiation summary" |development| LITERALS |$reportInstantiations| (|on| |off|) |off|) (|insteach| "present instantiation info" |development| LITERALS |$reportEachInstantiation| (|on| |off|) |off|) (|interponly| "say when function code is interpreted" |interpreter| LITERALS |$reportInterpOnly| (|on| |off|) |on|) (|naglink| "show NAGLink messages" |interpreter| LITERALS |$nagMessages| (|on| |off|) |on|) (|number| "display message number with message" |interpreter| LITERALS |$di!
splayMsgNumber| (|on| |off|) |off|) (|prompt| "set type of in!
put prompt to display" |interpreter| LITERALS |$inputPromptType| (|none| |frame| |plain| |step| |verbose|) |step|) (|selection| "display function selection msgs" |interpreter| LITERALS |$reportBottomUpFlag| (|on| |off|) |off|) (|set| "show )set setting after assignment" |interpreter| LITERALS |$displaySetValue| (|on| |off|) |off|) (|startup| "display messages on start-up" |interpreter| LITERALS |$displayStartMsgs| (|on| |off|) |on|) (|summary| "print statistics after computation" |interpreter| LITERALS |$printStatisticsSummaryIfTrue| (|on| |off|) |off|) (|testing| "print system testing header" |development| LITERALS |$testingSystem| (|on| |off|) |off|) (|time| "print timings after computation" |interpreter| LITERALS |$printTimeIfTrue| (|on| |off| |long|) |off|) (|type| "print type after computation" |interpreter| LITERALS |$printTypeIfTrue| (|on| |off|) |on|) (|void| "print Void value when it occurs" |interpreter| LITERALS |$printVoidIfTrue| (|on| |off|) |off|))) (|naglink| !
"options for NAGLink" |interpreter| TREE |novar| ((|host| "internet address of host for NAGLink" |interpreter| FUNCTION |setNagHost| (("enter host name" DIRECTORY |$nagHost| |chkDirectory| "localhost")) NIL) (|persistence| "number of (fortran) functions to remember" |interpreter| FUNCTION |setFortPers| (("Requested remote storage (for asps):" INTEGER |$fortPersistence| (0 NIL) 10)) NIL) (|messages| "show NAGLink messages" |interpreter| LITERALS |$nagMessages| (|on| |off|) |on|) (|double| "enforce DOUBLE PRECISION ASPs" |interpreter| LITERALS |$nagEnforceDouble| (|on| |off|) |on|))) (|output| "view and set some output options" |interpreter| TREE |novar| ((|abbreviate| "abbreviate type names" |interpreter| LITERALS |$abbreviateTypes| (|on| |off|) |off|) (|algebra| "display output in algebraic form" |interpreter| FUNCTION |setOutputAlgebra| (("display output in algebraic form" LITERALS |$algebraFormat| (|off| |on|) |on|) (BREAK $ALGEBRAFORMAT) ("where algebra printing goes (ent!
er {em console} or a pathname)?" FILENAME |$algebraOutputFile!
| |chkOutputFileName| "console")) NIL) (|characters| "choose special output character set" |interpreter| FUNCTION |setOutputCharacters| NIL |htSetOutputCharacters|) (|fortran| "create output in FORTRAN format" |interpreter| FUNCTION |setOutputFortran| (("create output in FORTRAN format" LITERALS |$fortranFormat| (|off| |on|) |off|) (|break| |$fortranFormat|) ("where FORTRAN output goes (enter {em console} or a a pathname)" FILENAME |$fortranOutputFile| |chkOutputFileName| "console")) NIL) (|fraction| "how fractions are formatted" |interpreter| LITERALS |$fractionDisplayType| (|vertical| |horizontal|) |vertical|) (|length| "line length of output displays" |interpreter| INTEGER $LINELENGTH (10 245) 77) (|mathml| "create output in MathML style" |interpreter| FUNCTION |setOutputMathml| (("create output in MathML format" LITERALS |$mathmlFormat| (|off| |on|) |off|) (|break| |$mathmlFormat|) ("where MathML output goes (enter {em console} or a pathname)" FILENAME |$mathmlOutputFile!
| |chkOutputFileName| "console")) NIL) (|openmath| "create output in OpenMath style" |interpreter| FUNCTION |setOutputOpenMath| (("create output in OpenMath format" LITERALS |$openMathFormat| (|off| |on|) |off|) (|break| |$openMathFormat|) ("where TeX output goes (enter {em console} or a pathname)" FILENAME |$openMathOutputFile| |chkOutputFileName| "console")) NIL) (|script| "display output in SCRIPT formula format" |interpreter| FUNCTION |setOutputFormula| (("display output in SCRIPT format" LITERALS |$formulaFormat| (|off| |on|) |off|) (|break| |$formulaFormat|) ("where script output goes (enter {em console} or a a pathname)" FILENAME |$formulaOutputFile| |chkOutputFileName| "console")) NIL) (|scripts| "show subscripts,... linearly" |interpreter| LITERALS |$linearFormatScripts| (|on| |off|) |off|) (|showeditor| "view output of )show in editor" |interpreter| LITERALS |$useEditorForShowOutput| (|on| |off|) |off|) (|tex| "create output in TeX style" |interpreter| FUNCTION |se!
tOutputTex| (("create output in TeX format" LITERALS |$texFor!
mat| (|off| |on|) |off|) (|break| |$texFormat|) ("where TeX output goes (enter {em console} or a pathname)" FILENAME |$texOutputFile| |chkOutputFileName| "console")) NIL))) (|quit| "protected or unprotected quit" |interpreter| LITERALS |$quitCommandType| (|protected| |unprotected|) |protected|) (|streams| "set some options for working with streams" |interpreter| TREE |novar| ((|calculate| "specify number of elements to calculate" |interpreter| FUNCTION |setStreamsCalculate| (("number of initial stream elements you want calculated" INTEGER |$streamCount| (0 NIL) 10)) NIL) (|showall| "display all stream elements computed" |interpreter| LITERALS |$streamsShowAll| (|on| |off|) |off|))) (|system| "set some system development variables" |development| TREE |novar| ((|functioncode| "show gen. LISP for functions when compiled" |development| LITERALS |$reportCompilation| (|on| |off|) |off|) (|optimization| "show optimized LISP code" |development| LITERALS |$reportOptimization| (|on| |!
off|) |off|) (|prettyprint| "prettyprint BOOT func's as they compile" |development| LITERALS $PRETTYPRINT (|on| |off|) |on|))) (|userlevel| "operation access level of system user" |interpreter| LITERALS |$UserLevel| (|interpreter| |compiler| |development|) |development|))
 --E 213
 
 --S 214 of 237
diff --git a/src/input/unittest3.input.pamphlet b/src/input/unittest3.input.pamphlet
index 528e348..22e0c14 100644
--- a/src/input/unittest3.input.pamphlet
+++ b/src/input/unittest3.input.pamphlet
@@ -17,77 +17,166 @@ Unit test the user level commands
 )set mes auto off
 )clear all
 
---S 1 of 11
+--S 1 of 19
 )lisp (identity |$inputPromptType|)
 --R 
 --RValue = |step|
 --E 1
 
---S 2 of 11
+--S 2 of 19
 )lisp (setq |$inputPromptType| '|none|)
 --R 
 --RValue = |none|
 --E 2
 
---S 3 of 11
+--S 3 of 19
 1
 --R   (1)  1
 --R                                                        Type: PositiveInteger
 --E 3
 
---S 4 of 11
+--S 4 of 19
 )lisp (setq |$inputPromptType| '|plain|)
 --RValue = |plain|
 --E 4
 
---S 5 of 11
+--S 5 of 19
 2
 --R
 --R   (2)  2
 --R                                                        Type: PositiveInteger
 --E 5
 
---S 6 of 11
+--S 6 of 19
 )lisp (setq |$inputPromptType| '|step|)
 --R 
 --RValue = |step|
 --E 6
 
---S 7 of 11
+--S 7 of 19
 2
 --R
 --R   (3)  2
 --R                                                        Type: PositiveInteger
 --E 7
 
---S 8 of 11
+--S 8 of 19
 )lisp (setq |$inputPromptType| '|frame|)
 --R 
 --RValue = |frame|
 --E 8
 
---S 9 of 11
+--S 9 of 19
 2
 --R
 --R   (4)  2
 --R                                                        Type: PositiveInteger
 --E 9
 
---S 10 of 11
+--S 10 of 19
 )lisp (setq |$inputPromptType| t)
 --R 
 --RValue = T
 --E 10
 
---S 11 of 11
+--S 11 of 19
 2
 --R
 --R   (5)  2
 --R                                                        Type: PositiveInteger
 --E 11
 
+--S 12 of 19
+)set debug
+--R                    Current Values of  debug  Variables                    
+--R
+--RVariable     Description                                Current Value
+--R-----------------------------------------------------------------------------
+--Rlambdatype   show type information for #1 syntax        off 
+--Rdalymode     Interpret leading open paren as lisp       off 
+--R
+--E 12
+
+--S 13 of 19
+)set debug lambdatype 
+--R-------------------------- The lambdatype Option --------------------------
+--R
+--R Description: show type information for #1 syntax
+--R
+--R The lambdatype option may be followed by any one of the following:
+--R
+--R    on
+--R -> off 
+--R
+--R The current setting is indicated.
+--R
+--E 13
+
+--S 14 of 19
+)set debug lambdatype on
+--E 14
+
+--S 15 of 19
+)set debug lambdatype
+--R-------------------------- The lambdatype Option --------------------------
+--R
+--R Description: show type information for #1 syntax
+--R
+--R The lambdatype option may be followed by any one of the following:
+--R
+--R -> on 
+--R    off
+--R
+--R The current setting is indicated.
+--R
+--E 15
+
+--S 16 of 19
+)set debug dalymode
+--R--------------------------- The dalymode Option ---------------------------
+--R
+--R Description: Interpret leading open paren as lisp
+--R
+--R The dalymode option may be followed by any one of the following:
+--R
+--R    on
+--R -> off 
+--R
+--R The current setting is indicated.
+--R
+--E 16
+
+--S 17 of 19
+)set debug dalymode on
+--E 17
+
+--S 18 of 19
+)set debug dalymode
+--R--------------------------- The dalymode Option ---------------------------
+--R
+--R Description: Interpret leading open paren as lisp
+--R
+--R The dalymode option may be followed by any one of the following:
+--R
+--R -> on 
+--R    off
+--R
+--R The current setting is indicated.
+--R
+--E 18
+
+--S 19 of 19
+)set debug
+--R                    Current Values of  debug  Variables                    
+--R
+--RVariable     Description                                Current Value
+--R-----------------------------------------------------------------------------
+--Rlambdatype   show type information for #1 syntax        on 
+--Rdalymode     Interpret leading open paren as lisp       on 
+--R
+--E 19
+
 )spool
- 
 )lisp (bye)
  
 @
diff --git a/src/interp/setq.lisp.pamphlet b/src/interp/setq.lisp.pamphlet
index 577d012..cb5d56f 100644
--- a/src/interp/setq.lisp.pamphlet
+++ b/src/interp/setq.lisp.pamphlet
@@ -112,7 +112,6 @@
 (setq |$NonNullStream| "NonNullStream")
 (setq |$NullStream| "NullStream")
 (setq |$domPvar| nil)
-(defvar $dalymode nil "if true then leading paren implies lisp cmd")
 (setq |$Newline| #\Newline)
 
\start
Date: Mon, 6 Apr 2009 23:09:48 -0500
From: Tim Daly
To: list
Subject: check algebra in lisp

Lisp is good at manipulating lisp. You can use it to skip over
gensyms and linebreaks, comments, and all kinds of other noise,
including knowing that 'asdf and '|ASDF| are equal.

Here is the algebra check program I use. 
It does not require perl, awk, sed, and other tools.

=======================================================================
;;; check is a lisp-based regression test function that complains if
;;; the newly compiled algebra differs from the reference algebra.
;;;
;;; To use it, just invoke the check function
;;; (Note that the directories are hardcoded since they rarely change)
;;; (Note that you must compile this file due to recursion depth)


;;; In this example, the API and NOTTING domains are new and are not in
;;; the reference algebra. The ASTACK, DEQUEUE, FLOAT, and STACK domains
;;; have added missing functions in the latest release. The 
;;;     --- is the new directory function
;;;     +++ is the reference directory function
;;; check exits on first failure.

;  
;  (check)
;  
;  WARNING: /research/reference/int/algebra/API.nrlib/code.lsp does not exist
;  FAILED API
;  
;  FAILED #p/research/test/int/algebra/ASTACK.nrlib
;   ASTACK;pop!;$S;10 ---m
;   ASTACK;pop!;$S;10 +++r
;  
;  FAILED #p/research/test/int/algebra/DEQUEUE.nrlib
;   DEQUEUE;bottom!;$S;1 ---COND
;   DEQUEUE;bottom!;$S;1 +++SPADCALL
;  
;  FAILED #p/research/test/int/algebra/FLOAT.nrlib
;   FLOAT;fixed ---l
;   FLOAT;fixed +++G1898
;  
;  WARNING: /research/reference/int/algebra/NOTTING.nrlib/code.lsp does not exist
;  FAILED NOTTING
;  
;  FAILED #p/research/test/int/algebra/STACK.nrlib
;   Stack ---Stack
;   Stack +++STACK;parts;$L;15




;;; gensymp is a simple predicate to recognize gensyms
(defun gensymp (x) (and (symbolp x) (null (symbol-package x))))



;;; a global variable used to remember which function we are in
(defvar fn nil)



;;; same? takes 2 s-expressions, a and b, and recursively compares them.
;;; 
;;; samep is true until a miscompare.
;;; pn is the pathname for printing.
;;; 
;;; it remembers entry into a function by recognizing (defun ...
;;; it remembers entry into a (makeprop ....
;;;
;;; it is robust in the presence of cyclic structures because
;;; it remembers the address of every pair. if the same address
;;; is seen again it will be found in the hashtable and skipped
;;; since we will have already walked the substructure.
;;;
;;; if samep is ever nil then a compare failed and we immediately exit
;;; if a and b are gensyms, we claim they are equal
;;; if a and b are list structures, we recursively walk them
;;;    if the walk fails, we complain and throw out
;;; if a and b are vectors, we recursively walk them
;;; otherwise, we compare a and b for equality
;;; 
(defun same? (a b samep pn)
 (let ((cycle? (gethash a cycle)))
 (declare (special fn))
 (when (and (consp a) (eq (car a) 'defun)) (setq fn (cadr a)))
 (when (and (consp a) (eq (car a) 'makeprop)) 
   (setq fn (list 'makeprop (cadadr a))))
 (if cycle?
  t
  (cond
   ((null samep) nil)
   ((and (gensymp a) (gensymp b)) t)
   ((and (consp a) (consp b))
    (setf (gethash a cycle) a)
    (setq samep 
     (and (same? (car a) (car b) samep pn)
          (same? (cdr a) (cdr b) samep pn)))
    (when (and (not samep) (not (same? (car a) (car b) t pn)))
      (format t "~%FAILED ~a~% ~a ---~a~% ~a +++~a~%" pn fn (car a) fn (car b))
      (throw 'different nil))
    (when (not samep)
      (format t "~%FAILED ~a~% ~a ---~a~% ~a +++~a~%" pn fn (cdr a) fn (cdr b))
      (throw 'different nil))
    samep)
   ((and (vectorp a) (vectorp b))
     (let ((result t) place)
      (dotimes (i (length a))
       (when result
        (setq result (same? (aref a i) (aref b i) t pn)))) 
      result))
   ((setq samep (equal a b)))))))



;;; init is a trivial file-read function and returns a list of all
;;; s-expressions in the file
;;;
(defun init (path)
 (with-open-file (in path)
  (do ((a (read in nil :done) (read in nil :done)) (c nil))
      ((eq a :done) (reverse c))
   (push a c))))



;;; check has hardcoded paths to your build int/algebra directory
;;; and your reference/int/algebra directory.
;;; 
;;; check walks the new int/algebra directory and for each nrlib it:
;;;   reads the code.lsp file (if there)
;;;   reads the reference/int/algebra code.lsp file
;;;   resets the hash table and fn variables
;;;   compares the two code.lsp files
;;; 
(defun check ()
 (let (local flocal reference freference)
 (declare (special cycle fn))
 (dolist (pn (directory (truename "/research/test/int/algebra/*.nrlib")))
  (setq reference
   (concatenate 'string "/research/reference/int/algebra/"
     (pathname-name pn) ".nrlib/code.lsp"))
  (if (probe-file reference)
     (setq freference (init reference))
     (progn
      (format t "~%WARNING: ~a does not exist~%" reference)
      (setq freference nil)))
  (setq local
   (concatenate 'string "/research/test/int/algebra/"
     (pathname-name pn) ".nrlib/code.lsp"))
  (if (probe-file local)
     (setq flocal (init local))
     (format t "WARNING: ~a does not exist~%" local))
  (setq cycle (make-hash-table :test #'equal))
  (setq fn 'unknown)
  (catch 'different
   (if (same? freference flocal t pn)
    (format nil "same ~a~%" (pathname-name pn))
    (format t "FAILED ~a~%" (pathname-name pn)))))))



\start
Date: Wed, 8 Apr 2009 01:34:52 -0500
From: Tim Daly
To: list
Subject: 20090407.01.tpd.patch (src/doc remove unused files)

src/doc/book is an old copy of books/bookvol0.
src/doc/bookvol1 is an old copy of books/bookvol1.
src/doc/bookvol4 is an old copy of books/bookvol4.

\start
Date: Wed, 08 Apr 2009 18:53:14 +0400
From: Igor Pashev
To: list
Subject: Is the anybody here?

\start
Date: Wed, 8 Apr 2009 12:18:51 -0400
From: Tim Daly
To: Igor Pashev
Subject: Re: Is the anybody here?

well, there are an average of more than 1 post per day over the last
few years so the answer is likely "yes". -- Tim

\start
Date: Wed, 08 Apr 2009 19:32:08 +0400
From: Igor Pashev
To: list
Subject: Re: Is the anybody here?

Alexey Beshenov:
> Sure! :-)
> 
> I think you should post your bug report.
> 

Coming soon ;-)

\start
Date: Wed, 08 Apr 2009 19:48:19 +0400
From: Igor Pashev
To: list
Subject: Building Axiom on Slackware

I'm trying to build Axiom from sources on Slackware
(using recent GIT version):

# echo 0 > /proc/sys/kernel/randomize_va_space
# export AXIOM=`pwd`/mnt/linux
# export PATH=$AXIOM/bin:$PATH
# make

I get this error after about a year of my tries :-)

## SKIP ##
compiling VECTOR.lsp to VECTOR.o
=====================================
=== algebra bootstrap complete ======
=====================================
make[3]: *** No rule to make target
`/tmp/axiom/mnt/linux/algebra/AHYP.o', needed by `src'.  Stop.
make[3]: Leaving directory `/tmp/axiom/src/algebra'
make[2]: *** [algebradir] Error 2
make[2]: Leaving directory `/tmp/axiom/src'
make[1]: *** [srcdir] Error 2
make[1]: Leaving directory `/tmp/axiom'
make: *** [all] Error 2


===========================================================
As far as I know, the issue is this rule in file "src/algebra/Makefile":
${OUT}/%.o: ${MID}/%.nrlib/code.o
	@ echo copying $*.nrlib to $*.o
	@ cp ${MID}/$*.nrlib/code.o ${OUT}/$*.

I think so because when I remove "${MID}/%.nrlib/code.o",
'make' finds this rule but, of cause,
fails not finding "${MID}/AHYP.nrlib/code.o"

Also in some my project I had similar trouble trying
to connect a target in one directory with a prerequisite in another.

Looking at other linux distributions (Debian, ALT-Linux), I
found there are no such problems and no specific patches.


==========================================================
I'm using:
Slackware 12.2.0
GNU Make 3.81
GNU Awk 3.1.6

Build log is very long and starts with:
1 making a linux system, PART=cprogs SUBPART=everything
2 Environment SPAD=/tmp/axiom/mnt/linux SYS=linux SPD=/tmp/axiom
LSP=/tmp/axiom/lsp GCLDIR=/tmp/axiom/lsp/gcl-2.6.8pre3
SRC=/tmp/axiom/src INT=/tmp/axiom/int OBJ=/tmp/axiom/obj
MNT=/tmp/axiom/mnt ZIPS=/tmp/axiom/zips TMP=/tmp/axiom/obj/tmp
SPADBIN=/tmp/axiom/mnt/linux/bin INC=/tmp/axiom/src/include
CCLBASE=/tmp/axiom/obj/linux/ccl/ccllisp PART=cprogs SUBPART=everything
NOISE=-o /tmp/axiom/obj/tmp/trace GCLVERSION=gcl-2.6.8pre3
TANGLE=/tmp/axiom/mnt/linux/bin/lib/notangle VERSION=Axiom (March 2009)
PATCH=patch DOCUMENT=/tmp/axiom/mnt/linux/bin/document
WEAVE=/tmp/axiom/mnt/linux/bin/lib/noweave UNCOMPRESS=gunzip

\start
Date: Wed, 08 Apr 2009 21:57:32 +0400
From: Igor Pashev
To: list
Subject: Re: Building Axiom on Slackware

Ok, also building FriCAS fails:

.............
30b running find-algebra-files
(cd ./algebra; \
	  . ../scripts/find-algebra-files) \
	    > algebra/tmp-extract-spad.mk
./../config/move-if-change \
	   algebra/tmp-extract-spad.mk algebra/extract-spad.mk
cd algebra && make
make[2]: Entering directory `/tmp/fricas-svn/src/algebra'
if [ -f use_lisp ] ; then \
          make BUILD_WAY=use_lisp stamp-alg ; \
	else \
	  make BUILD_WAY=normal stamp ; \
	fi
make[3]: Entering directory `/tmp/fricas-svn/src/algebra'
make[3]: *** No rule to make target `A1AGG.spad', needed by `stamp-db'.
 Stop.
make[3]: Leaving directory `/tmp/fricas-svn/src/algebra'
make[2]: *** [all-ax] Error 2
make[2]: Leaving directory `/tmp/fricas-svn/src/algebra'
make[1]: *** [all-algebra] Error 2
make[1]: Leaving directory `/tmp/fricas-svn/src'
make: *** [all-src] Error 2

\start
Date: Wed, 8 Apr 2009 16:36:38 -0400
From: Tim Daly
To: Igor Pashev
Subject: Re: Building Axiom on Slackware recognized.
Cc: list

> I'm trying to build Axiom from sources on Slackware
> (using recent GIT version):
> 
> # echo 0 > /proc/sys/kernel/randomize_va_space
> # export AXIOM=`pwd`/mnt/linux
> # export PATH=$AXIOM/bin:$PATH
> # make
> 
> I get this error after about a year of my tries :-)

Igor,

slackware is not one of the platforms I have in my build list
so I don't guarantee it will work there....

I will build a slackware machine and see if I can reproduce your problem.

\start
Date: Wed, 8 Apr 2009 20:52:44 -0400
From: Stephen Wilson
To: Igor Pashev
Subject: Re: Building Axiom on Slackware

On Wed, Apr 08, 2009 at 07:48:19PM +0400, Igor Pashev wrote:
> I get this error after about a year of my tries :-)
>
> ## SKIP ##
> compiling VECTOR.lsp to VECTOR.o
> =====================================
> === algebra bootstrap complete ======
> =====================================
> make[3]: *** No rule to make target
> `/tmp/axiom/mnt/linux/algebra/AHYP.o', needed by `src'.  Stop.
> make[3]: Leaving directory `/tmp/axiom/src/algebra'
> make[2]: *** [algebradir] Error 2
> make[2]: Leaving directory `/tmp/axiom/src'
> make[1]: *** [srcdir] Error 2
> make[1]: Leaving directory `/tmp/axiom'
> make: *** [all] Error 2

No idea what this can be.  I have been building Axiom on Slackware for years and
have never had a problem.  A fresh Git checkout seems to progress well for me
(on Slackware 12.1.0).  This almost looks like lack of disk space perhaps, or
some other local idiosyncrasy.

> ===========================================================
> As far as I know, the issue is this rule in file "src/algebra/Makefile":
> ${OUT}/%.o: ${MID}/%.nrlib/code.o
> 	@ echo copying $*.nrlib to $*.o
> 	@ cp ${MID}/$*.nrlib/code.o ${OUT}/$*.
>
> I think so because when I remove "${MID}/%.nrlib/code.o",
> 'make' finds this rule but, of cause,
> fails not finding "${MID}/AHYP.nrlib/code.o"
>
> Also in some my project I had similar trouble trying
> to connect a target in one directory with a prerequisite in another.
>
> Looking at other linux distributions (Debian, ALT-Linux), I
> found there are no such problems and no specific patches.
>
>
> ==========================================================
> I'm using:
> Slackware 12.2.0
> GNU Make 3.81
> GNU Awk 3.1.6
>
> Build log is very long and starts with:
> 1 making a linux system, PART=cprogs SUBPART=everything
> 2 Environment SPAD=/tmp/axiom/mnt/linux SYS=linux SPD=/tmp/axiom
> LSP=/tmp/axiom/lsp GCLDIR=/tmp/axiom/lsp/gcl-2.6.8pre3
> SRC=/tmp/axiom/src INT=/tmp/axiom/int OBJ=/tmp/axiom/obj
> MNT=/tmp/axiom/mnt ZIPS=/tmp/axiom/zips TMP=/tmp/axiom/obj/tmp
> SPADBIN=/tmp/axiom/mnt/linux/bin INC=/tmp/axiom/src/include
> CCLBASE=/tmp/axiom/obj/linux/ccl/ccllisp PART=cprogs SUBPART=everything
> NOISE=-o /tmp/axiom/obj/tmp/trace GCLVERSION=gcl-2.6.8pre3
> TANGLE=/tmp/axiom/mnt/linux/bin/lib/notangle VERSION=Axiom (March 2009)
> PATCH=patch DOCUMENT=/tmp/axiom/mnt/linux/bin/document
> WEAVE=/tmp/axiom/mnt/linux/bin/lib/noweave UNCOMPRESS=gunzip

\start
Date: Thu, 9 Apr 2009 14:04:42 +0200
From: Hans-Georg Pabst
To: list
Subject: build process: INSTALL replaced by DESTDIR - documentation update?

DQo8YnI+PGZvbnQgc2l6ZT0yIGZhY2U9InNhbnMtc2VyaWYiPkRlYXIgYWxsLDwvZm9udD4NCjxw
Pjxmb250IHNpemU9MiBmYWNlPSJzYW5zLXNlcmlmIj5JJ20gbmV3IHRvIEF4aW9tLiBJIGhhdmUg
dHJpZWQgdG8gYnVpbGQNCmFuZCBpbnN0YWxsIEF4aW9tIE1hcmNoIDIwMDkgb24gU3VTRSBMaW51
eCBFbnRlcnByaXNlIFNlcnZlciA5LiBCdWlsZCB3ZW50DQp3ZWxsIChzb21lIG9mIHRoZSByZWdy
ZXNzaW9uIHRlc3RzIGZhaWxlZCkuIEJ1dCBJIGhhZCBwcm9ibGVtcyB0byBpbnN0YWxsDQpBeGlv
bSBpbiBhIHBsYWNlIGRpZmZlcmVudCBmcm9tIHRoZSBkZWZhdWx0IHBsYWNlICgvdXNyL2xvY2Fs
L2F4aW9tKS4gVGhlcmUNCmlzIGEgY29uZnVzaW5nIHJlYWRtZSwgd2hpY2ggbWVudGlvbnMgdGhl
IG1ha2UgdmFyaWFibGVzIElOU1RBTEwgYW5kIENPTU1BTkQNCnRvIGJlIHVzZWQgZm9yIHRoaXMg
cHVycG9zZS4gQnV0IHRoaXMgZG9lc24ndCB3b3JrLiBBIGxvb2sgaW50byBNYWtlZmlsZQ0KbGVk
IG1lIHRvIERFU1RESVIsIHdoaWNoIGRpZCB3b3JrLjwvZm9udD4NCjxwPjxmb250IHNpemU9MiBm
YWNlPSJzYW5zLXNlcmlmIj5JIHRoaW5rLCB0aGUgcmVhZG1lIHNob3VsZCBiZSB1cGRhdGVkDQpp
biBvcmRlciB0byBhdm9pZCBjb25mdXNpb24uIEl0IHNob3VsZCBhbHNvIGJlIGNsYXJpZmllZCB3
aGV0aGVyIERFU1RESVI9L3NvbWUvZGlyDQpoYXMgdG8gYmUgc3BlY2lmaWVkIGZvciB0aGUgd2hv
bGUgYnVpbGQgcHJvY2VzcyBvciBvbmx5IGZvciB0aGUgZmluYWwgaW5zdGFsbGF0aW9uDQpzdGVw
IChtYWtlIERFU1RESVI9L3NvbWUvZGlyIGluc3RhbGwpLjwvZm9udD4NCjxwPg0KPHA+PGZvbnQg
c2l6ZT0yIGZhY2U9InNhbnMtc2VyaWYiPkJlc3QgUmVnYXJkcyw8L2ZvbnQ+DQo8cD48Zm9udCBz
aXplPTIgZmFjZT0ic2Fucy1zZXJpZiI+SEFOUy1HRU9SRyBQQUJTVDxicj4NCkFwcGxpY2F0aW9u
IE1hbmFnZXI8YnI+DQpDU0M8YnI+DQo8YnI+DQpHbG9iYWwgT3V0c291cmNpbmcgU2VydmljZXMg
fCBtb2JpbGU6ICs0MS43OS4zMDkuMDU0NyB8IG9mZmljZTogKzQxLjU4LjIwMC44MjM2DQp8IGhw
YWJzdEBjc2MuY29tIHwgd3d3LmNzYy5jb208YnI+DQo8YnI+DQpDU0Mg4oCiIFRoaXMgaXMgYSBQ
UklWQVRFIG1lc3NhZ2UuIElmIHlvdSBhcmUgbm90IHRoZSBpbnRlbmRlZCByZWNpcGllbnQsDQpw
bGVhc2UgZGVsZXRlIHdpdGhvdXQgY29weWluZyBhbmQga2luZGx5IGFkdmlzZSB1cyBieSBlLW1h
aWwgb2YgdGhlIG1pc3Rha2UNCmluIGRlbGl2ZXJ5LiAmbmJzcDtOT1RFOiBSZWdhcmRsZXNzIG9m
IGNvbnRlbnQsIHRoaXMgZS1tYWlsIHNoYWxsIG5vdCBvcGVyYXRlDQp0byBiaW5kIENTQyB0byBh
bnkgb3JkZXIgb3Igb3RoZXIgY29udHJhY3QgdW5sZXNzIHB1cnN1YW50IHRvIGV4cGxpY2l0DQp3
cml0dGVuIGFncmVlbWVudCBvciBnb3Zlcm5tZW50IGluaXRpYXRpdmUgZXhwcmVzc2x5IHBlcm1p
dHRpbmcgdGhlIHVzZQ0Kb2YgZS1tYWlsIGZvciBzdWNoIHB1cnBvc2Ug4oCiIENTQyBTd2l0emVy
bGFuZCBHbWJIIOKAoiBSZWdpc3RlcmVkIE9mZmljZToNCkdyb3NzbWF0dHN0cmFzc2UgOSwgODkw
MiBVcmRvcmYsIFN3aXR6ZXJsYW5kIOKAoiBSZWdpc3RlcmVkIGluIFN3aXR6ZXJsYW5kDQpObzog
Q0gtNjYwLTA4NjE5OTctODxicj4NCjwvZm9udD4NCg==

\start
Date: Thu, 9 Apr 2009 09:45:01 -0400
From: Tim Daly
To: Hans-Georg Pabst
Subject: Re: build process: INSTALL replaced by DESTDIR - documentation update?

re: DESTDIR documentation, I agree and I will document it better.

By the way, your mailer sends out a UUENCODED-html document rather
than ASCII text so your message arrives as a block, which UUDECODES
to html.

\start
Date: Thu, 9 Apr 2009 07:59:21 -0700 (PDT)
From: Tim Daly
To: list
Subject: Re: OpenAxiom-1.2.1 released

On Apr 5, 7:18am, ferrat <brat...@yahoo.com> wrote:
> I installed Axiom but can't graph because at the end there is an error me=
ssage about something in the /root directory.
>
> Then I tried OpenAxiom and this version works, so I'm staying with OpenAx=
iom.
>
> What's the difference between Axiom and OpenAxiom?

One of the fundamental problems with forking is that people can be
confused about the original projects and the forks. It is important
that this does not happen. The Axiom project is the original project.
OpenAxiom is a fork started around the September 2007 time frame.

Could you post the error on http://savannah.nongnu.org/mail/?group=axiom
mailing list? I'd be happy to fix the problem if I knew what it might
be.

\start
Date: Thu, 09 Apr 2009 18:01:36 +0200
From: Ralf Hemmecke
To: list
Subject: re: OpenAxiom-1.2.1 released

> One of the fundamental problems with forking is that people can be
> confused about the original projects and the forks. It is important
> that this does not happen. The Axiom project is the original project.
> OpenAxiom is a fork started around the September 2007 time frame.

Right and that is clearly stated on

http://axiom-wiki.newsynthesis.org/AboutAxiom

It is a bit hard to clearly describe differences between the forks, 
because for the end user it is currently nearly invisible.

People should look at the respective websites of the original Axiom 
project and the forks or ask at the respective developers lists.

\start
Date: Thu, 9 Apr 2009 13:52:36 -0400
From: Tim Daly
To: Ralf Hemmecke
Subject: re: OpenAxiom-1.2.1 released

> It is a bit hard to clearly describe differences between the forks, 
> because for the end user it is currently nearly invisible.

Ralf,

I'm not sure that this is true anymore.

Axiom has been concentrating heavily on documentation and the
results are visible primarily to the end user. 

Axiom now has approximate 300 help files, 250 of which are algebra.
These are listed from the )help command.

Axiom now has examples for thousands of functions, so when a user does
  )d op map
he sees examples, such as:

  Examples of map from StreamFunctions2
  m:=[i for i in 1..]
  f(i:PositiveInteger):PositiveInteger==i**2
  map(f,m)

Axiom now has 19 documents defined, of which 9 are fully populated
and are being expanded continuously. All of the documentation is
hyperlinked for easy navigation. There is a combined table of contents.

Axiom has several full graphs of the algebra in various forms so
a user can navigate the graph and hyperlink directly into the 
document containing the associated algebra.

Axiom has one video on youtube which has been viewed 1168 times.
A second one is "in process" to be released shortly.
A whole series is planned.

Axiom has included a new
  )set debug
command that will expose various debugging tools to the end user.

Axiom's website focus is on end user issues, including building
easy-to-download binaries.

Axiom has a new firefox browser front end that incorporates about
80 percent of the existing hyperdoc pages as well as dozens of
new content pages.

All of these changes are end-user visible, and only on Axiom.
I think the end user can see these differences directly.

\start
Date: Thu, 9 Apr 2009 12:17:51 -0500
From: Tim Daly
To: Stephen Wilson, Igor Pashev
Subject: 20090409.01.tpd.patch (src/algebra/Makefile egrep -> grep -E)

Fix the system build so it no longer requires egrep, 
as reported by a Igor.

Igor, the slackware build is in process but I probably won't have a
binary available until the weekend as I have a business trip.

Tim

=======================================================================
diff --git a/changelog b/changelog
index e6e1ddb..8457c12 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,5 @@
+20090409 tpd src/axiom-website/patches.html 20090409.01.tpd.patch
+20090409 tpd src/algebra/Makefile move egrep to grep -E
 20090408 tpd src/axiom-website/patches.html 20090408.01.tpd.patch
 20090408 tpd src/interp/Makefile move help to bookvol5
 20090408 tpd src/doc/spadhelp removed, move help to bookvol5
diff --git a/src/algebra/Makefile.pamphlet b/src/algebra/Makefile.pamphlet
index 53608a2..4da2584 100644
--- a/src/algebra/Makefile.pamphlet
+++ b/src/algebra/Makefile.pamphlet
@@ -16055,12 +16055,12 @@ the same at compile time, namely the "domain", "category", and
 \subsection{Finding the algebra code}
 Step 1 is to scan all of the algebra pamphlet files for the
 chunk names which contain the string "domain", "package", or
-"category". This is done using egrep (same as grep -E, which
+"category". This is done using grep -E (same as egrep, which
 means that the pattern is an extended regular expression) because
 extended regular expressions allows the use of alternatives
 written as (domain|package|category). Thus the command
 \begin{verbatim}
- egrep '@<<(domain|package|category) .*>>=' *.spad.pamphlet 
+ grep -E '@<<(domain|package|category) .*>>=' *.spad.pamphlet 
 \end{verbatim}
 will scan the algebra files looking for special chunknames.
 Axiom's chunk names are written in a stylized form so that each
@@ -16069,7 +16069,7 @@ in zerodim.spad.pamphlet the LexTriangularPackage chunkname is:
 \begin{verbatim}
 @<<package LEXTRIPK LexTriangularPackage>>
 \end{verbatim}
-so this egrep will generate an output line, prefixed by the filename
+so this grep will generate an output line, prefixed by the filename
 that looks like:
 \begin{verbatim}
 zerodim.spad.pamphlet:@<<package LEXTRIPK LexTriangularPackage>>=
@@ -16083,7 +16083,7 @@ Step 2 is an [[awk]] command line.
 
 <<findSpadFiles>>=
 
-egrep '@<<(domain|package|category) .*>>=' *.spad.pamphlet | sort | uniq | \
+grep -E '@<<(domain|package|category) .*>>=' *.spad.pamphlet | sort | uniq | \
 awk -F: '{
   chunk=substr($2,3,length($2)-5);
   split(chunk,part," ");
@@ -16094,11 +16094,11 @@ awk -F: '{
 }'
 
 @
-[awk] processes each line of the [[egrep]] output. 
+[awk] processes each line of the [[grep]] output. 
 
 The awk script uses [[-F:]] which is a flag that says that a [[:]] is
 the field separator. As a result the \$1 and \$2 in the awk script
-refer to the parts of the egrep output that come before and after the
+refer to the parts of the grep output that come before and after the
 [[:]] respectively.
 
 The variable [[chunk]] is assigned the actual chunk name minus
@@ -16142,11 +16142,11 @@ This output, which can consist of many lines per input file is piped
 into [[awk]].
 
 \subsection{Write the Makefile stanzas for the bootstrap files}
-For each of the above output lines we run an [[egrep]] command:
+For each of the above output lines we run an [[grep]] command:
 
 <<findBootstrapFiles>>=
 
-egrep '@<<.*BOOTSTRAP>>=' *.spad.pamphlet | sort | uniq | \
+grep -E '@<<.*BOOTSTRAP>>=' *.spad.pamphlet | sort | uniq | \
 awk -F: '{
   chunk=substr($2,3,length($2)-5);
   split(chunk,part," ");
diff --git a/src/axiom-website/patches.html b/src/axiom-website/patches.html
index 0d6084e..5b9c3c7 100644
--- a/src/axiom-website/patches.html
+++ b/src/axiom-website/patches.html
@@ -1056,5 +1056,7 @@ bookvol5 add )set debug<br/>
 src/doc remove unused files<br/>
 <a href="patches/20090408.01.tpd.patch">20090408.01.tpd.patch</a>
 bookvol5 collect help files<br/>
+<a href="patches/20090409.01.tpd.patch">20090409.01.tpd.patch</a>
+src/algebra/Makefile egrep -> grep -E<br/>
  </body>
 </html>

\start
Date: Thu, 09 Apr 2009 21:25:01 +0400
From: Aleksej Saushev
To: list
Subject: Re: OpenAxiom-1.2.1 released

Tim Daly writes:

> On Apr 5, 7:18am, ferrat <brat...@yahoo.com> wrote:

>> I installed Axiom but can't graph because at the end there is an
   error message about something in the /root directory.

>> Then I tried OpenAxiom and this version works, so I'm staying with OpenAxiom.
>>
>> What's the difference between Axiom and OpenAxiom?
>
> One of the fundamental problems with forking is that people can be
> confused about the original projects and the forks. It is important
> that this does not happen. The Axiom project is the original project.
> OpenAxiom is a fork started around the September 2007 time frame.

As I understand it, you could easily prevent forking by pushing Axiom to
user more actively, it could have the functionality of OpenAxiom or FriCAS,
but it has lost the momentum. From user point of view the confusion is
of no importance as long as one of forks works and another one does not.

\start
Date: Thu, 09 Apr 2009 23:12:58 +0400
From: Igor Pashev
To: list
Subject: Re: Building Axiom on Slackware

After fixing egrep issue
the build goes on and fails with:

make[3]: Entering directory `/tmp/axiom-200903111016460400/obj/linux/graph'
1 making target directories for bookvol8
2 making /tmp/axiom-200903111016460400/mnt/linux/lib/viewman from
/tmp/axiom-200903111016460400/books/bookvol8.pamphlet
gcc: /usr/X11R6/lib/libXpm.a: No such file or directory
make[3]: *** [/tmp/axiom-200903111016460400/mnt/linux/lib/viewman] Error 1
make[3]: Leaving directory `/tmp/axiom-200903111016460400/obj/linux/graph'



Slackware doesn.t have static library libXpm.a:

# ls /usr/X11R6/lib/libXpm.* -lh
-rwxr-xr-x 1 root root 881 2007-09-16 03:50 /usr/X11R6/lib/libXpm.la
lrwxrwxrwx 1 root root  16 2008-06-29 21:27 /usr/X11R6/lib/libXpm.so ->
libXpm.so.4.11.0
lrwxrwxrwx 1 root root  16 2008-06-29 21:27 /usr/X11R6/lib/libXpm.so.4
-> libXpm.so.4.11.0
-rwxr-xr-x 1 root root 60K 2007-09-16 03:50 /usr/X11R6/lib/libXpm.so.4.11.0

\start
Date: Fri, 10 Apr 2009 06:17:26 +0200
From: Michael Becker
To: list
Subject: axiom-mar2009 release : lib/SPADEDIT: No such file or directory

    When I try to read  e.g 'bookvol10.2.spad.pamphlet' i get the =
following
    error message:


sh: /usr_local/axiom0309/mnt/opensuse/lib/SPADEDIT: No such file or =
directory

\start
Date: 08 Apr 2009 17:04:40 +0200
From: Martin Rubey
To: Igor Pashev
Subject: Re: Is the anybody here?

Why do you ask?

\start
Date: Fri, 10 Apr 2009 12:38:17 -0500
From: Tim Daly
To: list
Subject: Re: OpenAxiom-1.2.1 released

> As I understand it, you could easily prevent forking by pushing Axiom to
> user more actively, it could have the functionality of OpenAxiom or FriCAS,
> but it has lost the momentum. From user point of view the confusion is
> of no importance as long as one of fors works and another one does not.

Aleksej,

As I understand it, one fundamental difference between OpenAxiom and Axiom
lies in the project goals related to the boot language. Approximately half
of the Axiom internals is written directly in common lisp. The other half
is written in a "syntactic sugar language", called boot, which compiles to
common lisp.

The Axiom project had, since it was released as open source, the
stated goal of removing the boot language code. Indeed, this was a
goal I had while working on Axiom before it was ever released from IBM
in the late 80s.

The OpenAxiom project has the exact opposite goal of writing everything
in boot and developing boot as a language.

Given that the goals of OpenAxiom are directly opposed to the stated
project goals of Axiom, how do you see that this difference should be
resolved?

\start
Date: Fri, 10 Apr 2009 16:22:29 -0500
From: Gabriel Dos Reis
To: Tim Daly
Subject: re: OpenAxiom-1.2.1 released

On Fri, Apr 10, 2009 at 12:38 PM,  Tim Daly wrote:
>> As I understand it, you could easily prevent forking by pushing Axiom to
>> user more actively, it could have the functionality of OpenAxiom or FriCAS,
>> but it has lost the momentum. From user point of view the confusion is
>> of no importance as long as one of fors works and another one does not.
>
> Aleksej,
>
> As I understand it, one fundamental difference between OpenAxiom and Axiom
> lies in the project goals related to the boot language. Approximately half
> of the Axiom internals is written directly in common lisp. The other half
> is written in a "syntactic sugar language", called boot, which compiles to
> common lisp.
>
> The Axiom project had, since it was released as open source, the
> stated goal of removing the boot language code. Indeed, this was a
> goal I had while working on Axiom before it was ever released from IBM
> in the late 80s.
>
> The OpenAxiom project has the exact opposite goal of writing everything
> in boot and developing boot as a language.

Tim is almost right -- OpenAxiom aims to move away from Lisp as implementation
language.  That goal of OpenAxiom is in line with the original AXIOM project
(which led to A#, then Aldor).  I have it from first hand the original project
wasn't meant to be written entirely in Lisp.  However, that was an issue of
occasional debate.  I suspect that will continue for the foreseeable future.
By the way, the Boot in OpenAxiom is inaccurately described as
a syntactic sugar for Common Lisp.

>
> Given that the goals of OpenAxiom are directly opposed to the stated
> project goals of Axiom, how do you see that this difference should be
> resolved?

\start
Date: Sat, 11 Apr 2009 01:22:49 -0400
From: Tim Daly
To: Igor Pashev
Subject: Re: Building Axiom on Slackware recognized.

> Slackware doesn.t have static library libXpm.a:
> 
> # ls /usr/X11R6/lib/libXpm.* -lh
> -rwxr-xr-x 1 root root 881 2007-09-16 03:50 /usr/X11R6/lib/libXpm.la
> lrwxrwxrwx 1 root root  16 2008-06-29 21:27 /usr/X11R6/lib/libXpm.so ->
> libXpm.so.4.11.0
> lrwxrwxrwx 1 root root  16 2008-06-29 21:27 /usr/X11R6/lib/libXpm.so.4
> -> libXpm.so.4.11.0
> -rwxr-xr-x 1 root root 60K 2007-09-16 03:50 /usr/X11R6/lib/libXpm.so.4.11.0

I have found the sources and am able to build the missing file.
http://axiom-developer.org/axiom-website/Xpm.tgz
contains the Xpm sources and you can buid libXpm.a from there.

\start
Date: Fri, 10 Apr 2009 23:45:26 -0500
From: Tim Daly
To: list
Subject: 20090410.02.tpd.patch (bookvol5 add more interpreter code)

Pick up more interpreter code from other files, translate them to lisp,
and move them to bookvol5
=======================================================================
diff --git a/books/bookvol5.pamphlet b/books/bookvol5.pamphlet
index beb7755..66f7caa 100644
--- a/books/bookvol5.pamphlet
+++ b/books/bookvol5.pamphlet
@@ -851,6 +851,110 @@ this is what the current code does so I won't change it.
 
 @
 
+\defdollar{frameAlist}
+<<initvars>>=
+(defvar |$frameAlist| nil) 
+
+@
+\defdollar{frameNumber}
+<<initvars>>=
+(defvar |$frameNumber| 0) 
+
+@
+\defdollar{currentFrameNum}
+<<initvars>>=
+(defvar |$currentFrameNum| 0) 
+
+@
+\defdollar{EndServerSession}
+<<initvars>>=
+(defvar |$EndServerSession| nil) 
+
+@
+\defdollar{NeedToSignalSessionManager}
+<<initvars>>=
+(defvar |$NeedToSignalSessionManager| nil) 
+
+@
+\defdollar{sockBufferLength}
+<<initvars>>=
+(defvar |$sockBufferLength| 9217) 
+
+@
+
+\defun{serverReadLine}{serverReadLine}
+<<defun serverReadLine>>=
+(defun |serverReadLine| (stream)
+ "used in place of READ-LINE in a scratchpad server system."
+ (let (in-stream *eof* l framename currentframe form stringbuf line)
+ (declare (special in-stream *eof* |$SpadServer| |$EndServerSession|
+     |$NeedToSignalSessionManager| |$SessionManager| |$EndOfOutput|
+     |$CallInterp| |$CreateFrame| |$frameAlist| |$frameNumber|
+     |$currentFrameNum| |$CreateFrameAnswer| |$SwitchFrames| |$EndSession|
+     |$EndServerSession| |$LispCommand| |$sockBufferLength| |$MenuServer|
+     |$QuietSpadCommand| |$SpadCommand| |$NonSmanSession| |$KillLispSystem|))
+  (force-output)
+  (if (or (null |$SpadServer|) (null (is-console stream)))
+   (|read-line| stream)
+   (progn
+    (setq in-stream stream)
+    (setq *eof* nil)
+    (setq line
+     (do ()
+         ((null (and (null |$EndServerSession|) (null *eof*))) nil)
+         (when |$NeedToSignalSessionManager|
+          (|sockSendInt| |$SessionManager| |$EndOfOutput|))
+      (setq |$NeedToSignalSessionManager| nil)
+      (case  (|serverSwitch|)
+       (|$CallInterp|
+        (setq l (|read-line| stream))
+        (setq |$NeedToSignalSessionManager| t)
+        (return l))
+       (|$CreateFrame|
+        (setq framename (gentemp "frame"))
+        (|addNewInterpreterFrame| framename)
+        (setq |$frameAlist|
+         (cons (cons |$frameNumber| framename) |$frameAlist|))
+        (setq |$currentFrameNum| |$frameNumber|)
+        (|sockSendInt| |$SessionManager| |$CreateFrameAnswer|)
+        (|sockSendInt| |$SessionManager| |$frameNumber|)
+        (setq |$frameNumber| (plus |$frameNumber| 1))
+        (|sockSendString| |$SessionManager| (mkprompt)))
+       (|$SwitchFrames|
+        (setq |$currentFrameNum| (|sockGetInt| |$SessionManager|))
+        (setq currentframe (lassoc |$currentFrameNum| |$frameAlist|))
+        (|changeToNamedInterpreterFrame| currentframe))
+       (|$EndSession|
+        (setq |$EndServerSession| t))
+       (|$LispCommand|
+        (setq |$NeedToSignalSessionManager| t)
+        (setq stringbuf (make-string |$sockBufferLength|))
+        (|sockGetString| |$MenuServer| stringbuf |$sockBufferLength|)
+        (setq form
+         (|unescapeStringsInForm| (read-from-string stringbuf)))
+        (|protectedEVAL| form))
+       (|$QuietSpadCommand|
+        (setq |$NeedToSignalSessionManager| t)
+        (|executeQuietCommand|))
+       (|$SpadCommand|
+        (setq |$NeedToSignalSessionManager| t)
+        (setq stringbuf (make-string 512))
+        (|sockGetString| |$MenuServer| stringbuf 512)
+        (catch '|coerceFailure|
+         (catch '|top_level|
+          (catch 'spad_reader
+           (|parseAndInterpret| stringbuf))))
+        (princ (mkprompt))
+        (finish-output))
+       (|$NonSmanSession| (setq |$SpadServer| nil))
+       (|$KillLispSystem| (bye))
+       (t nil))))
+    (cond
+     (line line)
+     (t '||))))))
+
+@
+
 \defun{intloopInclude}{Include a file into the stream}
 <<defun intloopInclude>>=
 (defun |intloopInclude| (name n)
@@ -894,6 +998,295 @@ this is what the current code does so I won't change it.
 
 @
 
+\defun{incLude}{incLude}
+<<defun incLude>>=
+(defun |incLude| (eb ss ln ufos states) 
+ (|Delay| (function |incLude1|) (list eb ss ln ufos states)))
+
+@
+
+\defmacro{Rest}
+<<defmacro Rest>>=
+(defmacro |Rest| (s)
+ "used in incLude1 for parsing; s is not used."
+ '(|incLude| eb (cdr ss) lno ufos states))
+
+@
+
+\defvar{Top}
+<<initvars>>=
+(defvar |Top| 1 "used in incLude1 for parsing")
+
+@
+\defvar{IfSkipToEnd}
+<<initvars>>=
+(defvar |IfSkipToEnd| 10 "used in incLude1 for parsing")
+
+@
+\defvar{IfKeepPart}
+<<initvars>>=
+(defvar |IfKeepPart| 11 "used in incLude1 for parsing")
+
+@
+\defvar{IfSkipPart}
+<<initvars>>=
+(defvar |IfSkipPart| 12 "used in incLude1 for parsing")
+
+@
+\defvar{ElseifSkipToEnd}
+<<initvars>>=
+(defvar |ElseifSkipToEnd| 20 "used in incLude1 for parsing")
+
+@
+\defvar{ElseifKeepPart}
+<<initvars>>=
+(defvar |ElseifKeepPart| 21 "used in incLude1 for parsing")
+
+@
+\defvar{ElseifSkipPart}
+<<initvars>>=
+(defvar |ElseifSkipPart| 22 "used in incLude1 for parsing")
+
+@
+\defvar{ElseSkipToEnd}
+<<initvars>>=
+(defvar |ElseSkipToEnd| 30 "used in incLude1 for parsing")
+
+@
+\defvar{ElseKeepPart}
+<<initvars>>=
+(defvar |ElseKeepPart| 31 "used in incLude1 for parsing")
+
+@
+
+\defvar{Top?}
+<<defun Top?>>=
+(defun |Top?| (|st|)
+ "used in incLude1 for parsing"
+ (eql (quotient |st| 10) 0))
+
+@
+\defvar{If?}
+<<defun If?>>=
+(defun |If?| (|st|)
+ "used in incLude1 for parsing"
+ (eql (quotient |st| 10) 1))
+
+@
+\defvar{Elseif?}
+<<defun Elseif?>>=
+(defun |Elseif?| (|st|)
+ "used in incLude1 for parsing"
+ (eql (quotient |st| 10) 2))
+
+@
+\defvar{Else?}
+<<defun Else?>>=
+(defun |Else?| (|st|)
+ "used in incLude1 for parsing"
+ (eql (quotient |st| 10) 3))
+
+@
+\defvar{SkipEnd?}
+<<defun SkipEnd?>>=
+(defun |SkipEnd?| (|st|)
+ "used in incLude1 for parsing"
+ (eql (remainder |st| 10) 0))
+
+@
+\defvar{KeepPart?}
+<<defun KeepPart?>>=
+(defun |KeepPart?| (|st|)
+ "used in incLude1 for parsing"
+ (eql (remainder |st| 10) 1))
+
+@
+\defvar{SkipPart?}
+<<defun SkipPart?>>=
+(defun |SkipPart?| (|st|)
+ "used in incLude1 for parsing"
+ (eql (remainder |st| 10) 2))
+
+@
+\defvar{Skipping?}
+<<defun Skipping?>>=
+(defun |Skipping?| (|st|)
+ "used in incLude1 for parsing"
+ (null (|KeepPart?| |st|)))
+
+@
+
+\defun{incLude1}{incLude1}
+<<defun incLude1>>=
+(defun |incLude1| (&rest z)
+(let (pred s1 n tail head includee fn1 info str state lno states ufos ln ss eb)
+  (setq eb (car z))
+  (setq ss (cadr . (z)))
+  (setq ln (caddr . (z)))
+  (setq ufos (cadddr . (z)))
+  (setq states (car (cddddr . (z))))
+  (setq lno (+ ln 1))
+  (setq state (elt states 0))
+  (cond
+   ((|StreamNull| ss)
+     (cond
+      ((null (|Top?| state))
+       (cons (|xlPrematureEOF| eb ")--premature end" lno ufos)
+             |StreamNil|))
+      (t |StreamNil|)))
+   (t
+    (progn
+     (setq str (expand-tabs (car ss)))
+     (setq info (|incClassify| str))
+     (cond
+      ((null (elt info 0))
+       (cond
+        ((|Skipping?| state)
+         (cons (|xlSkip| eb str lno (elt ufos 0)) (|Rest| |s|)))
+        (t
+         (cons (|xlOK| eb str lno (elt ufos 0)) (|Rest| |s|)))))
+      ((equal (elt info 2) "other")
+       (cond
+        ((|Skipping?| state)
+         (cons (|xlSkip| eb str lno (elt ufos 0)) (|Rest| |s|)))
+        (t
+         (cons
+          (|xlOK1| eb str (concat ")command" str) lno (elt ufos 0))
+          (|Rest| |s|)))))
+      ((equal (elt info 2) "say")
+       (cond
+        ((|Skipping?| state)
+         (cons (|xlSkip| eb str lno (elt ufos 0)) (|Rest| |s|)))
+        (t
+         (progn
+          (setq str (|incCommandTail| str info))
+          (cons (|xlSay| eb str lno ufos str)
+           (cons (|xlOK| eb str lno (ELT ufos 0)) (|Rest| |s|)))))))
+      ((equal (elt info 2) "include")
+       (cond
+        ((|Skipping?| state)
+         (cons (|xlSkip| eb str lno (elt ufos 0)) (|Rest| |s|)))
+        (t
+         (progn
+          (setq fn1 (|inclFname| str info))
+          (cond
+           ((null fn1)
+            (cons (|xlNoSuchFile| eb str lno ufos |fn|) (|Rest| |s|)))
+           ((null (probe-file fn1))
+            (cons (|xlCannotRead| eb str lno ufos fn1) (|Rest| |s|)))
+           ((|incActive?| fn1 ufos)
+            (cons (|xlFileCycle| eb str lno ufos fn1) (|Rest| |s|)))
+           (t
+            (progn
+             (setq includee
+              (|incLude| (+ eb (elt info 1))
+                         (|incFileInput| fn1)
+                         0
+                         (cons fn1 ufos)
+                         (cons |Top| states)))
+             (cons (|xlOK| eb str lno (elt ufos 0))
+                   (|incAppend| includee (|Rest| |s|))))))))))
+      ((equal (elt info 2) "console")
+       (cond
+        ((|Skipping?| state)
+         (cons (|xlSkip| eb str lno (elt ufos 0)) (|Rest| |s|)))
+        (t
+         (progn
+          (setq head
+           (|incLude| (+ eb (elt info 1))
+                      (|incConsoleInput|)
+                      0
+                      (cons "console" ufos)
+                      (cons |Top| states)))
+          (setq tail (|Rest| |s|))
+          (setq n (|incNConsoles| ufos))
+          (cond
+           ((< 0 n)
+            (setq head
+             (cons (|xlConActive| eb str lno ufos n) head))
+            (setq tail
+             (cons (|xlConStill| eb str lno ufos n) tail))))
+          (setq head (cons (|xlConsole| eb str lno ufos) head))
+          (cons (|xlOK| eb str lno (elt ufos 0))
+                (|incAppend| head tail))))))
+      ((equal (elt info 2) "fin")
+       (cond
+        ((|Skipping?| state)
+         (cons (|xlSkippingFin| eb str lno ufos) (|Rest| |s|)))
+        ((null (|Top?| state))
+         (cons (|xlPrematureFin| eb str lno ufos) |StreamNil|))
+        (t
+         (cons (|xlOK| eb str lno (elt ufos 0)) |StreamNil|))))
+      ((equal (elt info 2) "assert")
+       (cond
+        ((|Skipping?| state)
+         (cons (|xlSkippingFin| eb str lno ufos) (|Rest| |s|)))
+        (t
+         (progn
+          (|assertCond| str info)
+          (cons (|xlOK| eb str lno (elt ufos 0))
+                (|incAppend| includee (|Rest| |s|)))))))
+      ((equal (elt info 2) "if")
+       (progn
+        (setq s1
+         (cond
+          ((|Skipping?| state) |IfSkipToEnd|)
+          (t
+           (cond
+            ((|ifCond| str info) |IfKeepPart|)
+            (t |IfSkipPart|)))))
+        (cons (|xlOK| eb str lno (elt ufos 0))
+              (|incLude| eb (cdr ss) lno ufos (cons s1 states)))))
+      ((equal (elt info 2) "elseif")
+       (cond
+        ((and (null (|If?| state)) (null (|Elseif?| state)))
+         (cons (|xlIfSyntax| eb str lno ufos info states)
+               |StreamNil|))
+        (t
+         (cond
+          ((or (|SkipEnd?| state) 
+               (|KeepPart?| state)
+               (|SkipPart?| state))
+           (setq s1
+            (cond
+             ((|SkipPart?| state)
+              (setq pred (|ifCond| str info))
+              (cond
+               (pred |ElseifKeepPart|)
+               (t |ElseifSkipPart|)))
+             (t |ElseifSkipToEnd|)))
+           (cons (|xlOK| eb str lno (elt ufos 0))
+                 (|incLude| eb (cdr ss) lno ufos (cons s1 (cdr states)))))
+          (t
+           (cons (|xlIfBug| eb str lno ufos) |StreamNil|))))))
+      ((equal (elt info 2) "else")
+       (cond
+        ((and (null (|If?| state)) (null (|Elseif?| state)))
+         (cons (|xlIfSyntax| eb str lno ufos info states)
+               |StreamNil|))
+        (t
+         (cond
+          ((or (|SkipEnd?| state) 
+               (|KeepPart?| state) 
+               (|SkipPart?| state))
+            (setq s1
+             (cond ((|SkipPart?| state) |ElseKeepPart|) (t |ElseSkipToEnd|)))
+            (cons (|xlOK| eb str lno (elt ufos 0))
+                  (|incLude| eb (cdr ss) lno ufos (cons s1 (cdr states)))))
+          (t
+           (cons (|xlIfBug| eb str lno ufos) |StreamNil|))))))
+      ((equal (elt info 2) "endif")
+       (cond
+        ((|Top?| state)
+         (cons (|xlIfSyntax| eb str lno ufos info states)
+               |StreamNil|))
+        (t
+         (cons (|xlOK| eb str lno (elt ufos 0))
+               (|incLude| eb (cdr ss) lno ufos (cdr states))))))
+      (t (cons (|xlCmdBug| eb str lno ufos) |StreamNil|))))))))
+
+@
+
 \defun{incRgen}{incRgen}
 Note that incRgen1 recursively calls this function.
 <<defun incRgen>>=
@@ -6228,9 +6621,9 @@ Also used in the output routines.
       (|sayMSG| (list "   [" |ind| "] " (car vec)))
       (progn
        (|sayMSG| (list "   [" |ind| "] "))
-       (do ((tmp0 l (cdr tmp0)) (|ln| nil))
-           ((or (atom tmp0) (progn (setq |ln| (car tmp0)) nil)) nil)
-         (|sayMSG| (list "      " |ln|))))))))
+       (do ((tmp0 l (cdr tmp0)) (ln nil))
+           ((or (atom tmp0) (progn (setq ln (car tmp0)) nil)) nil)
+         (|sayMSG| (list "      " ln))))))))
 
 @
 \defun{showInOut}{showInOut}
@@ -16598,17 +16991,17 @@ $traceletflag
 \begin{verbatim}
 currenttime
 error
-|incLude|
 |incRenumber|
 |incRgen1|
 |insertpile|
-|ncloopEchoParse|
-|ncloopProcess|
+|intloopEchoParse|
+|intloopProcess|
 |intloopProcessString|
 |intnplisp|
 |lineoftoks|
+|ncloopEchoParse|
+|ncloopProcess|
 |resetStackLimits|
-|serverReadLine|
 |shoeread-line|
 stringimage
 \end{verbatim}
@@ -16620,6 +17013,7 @@ stringimage
 
 <<defmacro funfind>>
 <<defmacro identp>>
+<<defmacro Rest>>
 
 <<defun abbQuery>>
 <<defun abbreviations>>
@@ -16702,6 +17096,8 @@ stringimage
 
 <<defun edit>>
 <<defun editSpad2Cmd>>
+<<defun Else?>>
+<<defun Elseif?>>
 <<defun emptyInterpreterFrame>>
 <<defun eofp>>
 
@@ -16749,8 +17145,11 @@ stringimage
 <<defun history>>
 <<defun historySpad2Cmd>>
 
+<<defun If?>>
 <<defun importFromFrame>>
 <<defun incBiteOff>>
+<<defun incLude>>
+<<defun incLude1>>
 <<defun incFileName>>
 <<defun incRgen>>
 <<defun incRgen1>>
@@ -16774,6 +17173,8 @@ stringimage
 <<defun isTraceGensym>>
 <<defun isUncompiledMap>>
 
+<<defun KeepPart?>>
+
 <<defun lassocSub>>
 <<defun leaveScratchpad>>
 <<defun letPrint>>
@@ -16864,6 +17265,7 @@ stringimage
 <<defun ScanOrPairVec,ScanOrInner>>
 <<defun selectOption>>
 <<defun selectOptionLC>>
+<<defun serverReadLine>>
 <<defun set>>
 <<defun set1>>
 <<defun setAsharpArgs>>
@@ -16898,6 +17300,9 @@ stringimage
 <<defun showInOut>>
 <<defun showInput>>
 <<defun shut>>
+<<defun SkipEnd?>>
+<<defun SkipPart?>>
+<<defun Skipping?>>
 <<defun spad>>
 <<defun spadClosure?>>
 <<defun SpadInterpretStream>>
@@ -16919,6 +17324,7 @@ stringimage
 <<defun summary>>
 
 <<defun ?t>>
+<<defun Top?>>
 <<defun trace>>
 <<defun trace1>>
 <<defun traceDomainConstructor>>
diff --git a/changelog b/changelog
index 2278c93..678a43a 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,7 @@
+20090410 tpd src/axiom-website/patches.html 20090410.02.tpd.patch
+20090410 tpd src/interp/server.boot move interpreter code into bookvol5
+20090410 tpd src/interp/incl.boot move interpreter code into bookvol5
+20090410 tpd books/bookvol5 move more interpreter code
 20090410 tpd src/axiom-website/patches.html 20090410.01.tpd.patch
 20090410 tpd src/input/mappkg1.input removed, moved to algebra books
 20090410 tpd src/input/parabola.input fix regress format
diff --git a/src/axiom-website/patches.html b/src/axiom-website/patches.html
index 96c30db..c91f8b2 100644
--- a/src/axiom-website/patches.html
+++ b/src/axiom-website/patches.html
@@ -1060,5 +1060,7 @@ bookvol5 collect help files<br/>
 src/algebra/Makefile egrep -> grep -E<br/>
 <a href="patches/20090410.01.tpd.patch">20090410.01.tpd.patch</a>
 fix regress format<br/>
+<a href="patches/20090410.02.tpd.patch">20090410.02.tpd.patch</a>
+bookvol5 add more interpreter code<br/>
  </body>
 </html>
diff --git a/src/interp/incl.boot.pamphlet b/src/interp/incl.boot.pamphlet
index bac8b6f..89c4a56 100644
--- a/src/interp/incl.boot.pamphlet
+++ b/src/interp/incl.boot.pamphlet
@@ -144,25 +144,6 @@ incNConsoles ufos==
         a:=MEMBER('"console",ufos)
         if a then 1+incNConsoles CDR a else 0
  
-Top            := 01
-IfSkipToEnd    := 10
-IfKeepPart     := 11
-IfSkipPart     := 12
-ElseifSkipToEnd:= 20
-ElseifKeepPart := 21
-ElseifSkipPart := 22
-ElseSkipToEnd  := 30
-ElseKeepPart   := 31
- 
-Top?     (st) == QUOTIENT(st,10) = 0
-If?      (st) == QUOTIENT(st,10) = 1
-Elseif?  (st) == QUOTIENT(st,10) = 2
-Else?    (st) == QUOTIENT(st,10) = 3
-SkipEnd? (st) == REMAINDER(st,10) = 0
-KeepPart?(st) == REMAINDER(st,10) = 1
-SkipPart?(st) == REMAINDER(st,10) = 2
-Skipping?(st) == not KeepPart? st
- 
         --% Message Handling
 incHandleMessage(xl) ==
           xl.1.1 = "none" =>
@@ -251,135 +232,7 @@ xlIfSyntax(eb, str, lno,ufos,info,sts) ==
  
         --% This is it
  
-incLude(eb, ss, ln, ufos, states) ==
-       Delay(function incLude1,[eb, ss, ln, ufos, states])
- 
-Rest s==>incLude (eb,CDR ss,lno,ufos,states)
- 
-incLude1 (:z) ==
-            [eb, ss, ln, ufos, states]:=z
-            lno       := ln+1
-            state     := states.0
- 
-            StreamNull ss =>
-                not Top? state =>
-                    cons(xlPrematureEOF(eb,
-                     '")--premature end",  lno,ufos), StreamNil)
-                StreamNil
- 
-            str  :=  EXPAND_-TABS CAR ss
-            info :=  incClassify str
- 
-            not info.0 =>
-                Skipping? state => cons(xlSkip(eb,str,lno,ufos.0), Rest s)
-                cons(xlOK(eb, str, lno, ufos.0),Rest s)
- 
-            info.2 = '"other" =>
-                Skipping? state => cons(xlSkip(eb,str,lno,ufos.0), Rest s)
-                cons(xlOK1(eb, str,CONCAT('")command",str), lno, ufos.0),
-                                          Rest s)
- 
-            info.2 = '"say" =>
-                Skipping? state => cons(xlSkip(eb,str,lno,ufos.0), Rest s)
-                str := incCommandTail(str, info)
-                cons(xlSay(eb, str, lno, ufos, str),
-                     cons(xlOK(eb,str,lno,ufos.0), Rest s))
- 
-            info.2 = '"include" =>
-                Skipping? state =>
-                     cons(xlSkip(eb,str,lno,ufos.0), Rest s)
-                fn1 := inclFname(str, info)
-                not fn1 =>
-                    cons(xlNoSuchFile(eb, str, lno,ufos,fn),Rest s)
-                not PROBE_-FILE fn1 =>
-                    cons(xlCannotRead(eb, str, lno,ufos,fn1),Rest s)
-                incActive?(fn1,ufos) =>
-                    cons(xlFileCycle (eb, str, lno,ufos,fn1),Rest s)
-                Includee  :=
-                  incLude(eb+info.1,incFileInput fn1,0,
-                            cons(fn1,ufos), cons(Top,states))
-                cons(
-                    xlOK(eb,str,lno,ufos.0),
-                          incAppend(Includee, Rest s))
- 
-            info.2 = '"console" =>
-                Skipping? state => cons(xlSkip(eb,str,lno,ufos.0), Rest s)
-                Head :=
-                 incLude(eb+info.1,incConsoleInput(),0,
-                     cons('"console",ufos),cons(Top,states) )
-                Tail := Rest s
- 
-                n := incNConsoles ufos
-                if n > 0 then
-                   Head := cons(xlConActive(eb, str, lno,ufos,n),Head)
-                   Tail :=
-                       cons(xlConStill (eb, str, lno,ufos,n),Tail)
- 
-                Head := cons (xlConsole(eb, str, lno,ufos), Head)
-                cons(xlOK(eb,str,lno,ufos.0),incAppend(Head,Tail))
- 
-            info.2 = '"fin" =>
-                Skipping? state =>
-                    cons(xlSkippingFin(eb, str, lno,ufos), Rest s)
-                not Top? state  =>
-                    cons(xlPrematureFin(eb, str, lno,ufos), StreamNil)
-                cons(xlOK(eb,str,lno,ufos.0), StreamNil)
- 
-            info.2 = '"assert" =>
-                Skipping? state =>
-                    cons(xlSkippingFin(eb, str, lno,ufos), Rest s)
-                assertCond(str, info)
-                cons(xlOK(eb,str,lno,ufos.0), incAppend(Includee, Rest s))
- 
-            info.2 = '"if" =>
-                s1 :=
-                    Skipping? state => IfSkipToEnd
-                    if ifCond(str,info) then IfKeepPart else IfSkipPart
-                cons(xlOK(eb,str,lno,ufos.0),
-                      incLude(eb,CDR ss,lno,ufos,cons(s1,states)))
-            info.2 = '"elseif" =>
-                not If? state and not Elseif? state =>
-                    cons(xlIfSyntax(eb, str,lno,ufos,info,states),
-                            StreamNil)
- 
-                if SkipEnd? state or KeepPart? state or SkipPart? state
-                then
-                     s1:=if SkipPart? state
-                         then
-                            pred := ifCond(str,info)
-                            if pred
-                            then ElseifKeepPart
-                            else ElseifSkipPart
-                         else ElseifSkipToEnd
-                     cons(xlOK(eb,str,lno,ufos.0),
-                        incLude(eb,CDR ss,lno,ufos,cons(s1,rest states)))
-                else
-                    cons(xlIfBug(eb, str, lno,ufos), StreamNil)
- 
-            info.2 = '"else" =>
-                not If? state and not Elseif? state =>
-                    cons(xlIfSyntax(eb, str,lno,ufos,info,states),
-                           StreamNil)
-                if SkipEnd? state or KeepPart? state or SkipPart? state
-                then
-                      s1 :=if SkipPart? state
-                           then ElseKeepPart
-                           else ElseSkipToEnd
-                      cons(xlOK(eb,str,lno,ufos.0),
-                        incLude(eb,CDR ss,lno,ufos,cons(s1,rest states)))
-                else
-                    cons(xlIfBug(eb, str, lno,ufos), StreamNil)
- 
-            info.2 = '"endif" =>
-                Top? state =>
-                    cons(xlIfSyntax(eb, str,lno,ufos,info,states),
-                        StreamNil)
-                cons(xlOK(eb,str,lno,ufos.0),
-                         incLude(eb,CDR ss,lno,ufos,rest states))
- 
-            cons(xlCmdBug(eb, str, lno,ufos), StreamNil)
- 
---% Message handling for the source includer
+ --% Message handling for the source includer
 --  SMW June 88
  
 inclHandleError(pos, [key, args]) ==
diff --git a/src/interp/server.boot.pamphlet b/src/interp/server.boot.pamphlet
index 901d4ba..b243c3e 100644
--- a/src/interp/server.boot.pamphlet
+++ b/src/interp/server.boot.pamphlet
@@ -50,70 +50,6 @@
 
 -- Assoc list of interpreter frame names and unique integer identifiers
 
-SETANDFILEQ($frameAlist, nil)
-SETANDFILEQ($frameNumber, 0)
-SETANDFILEQ($currentFrameNum, 0)
-SETANDFILEQ($EndServerSession, false)
-SETANDFILEQ($NeedToSignalSessionManager, false)
-SETANDFILEQ($sockBufferLength, 9217)
-
-serverReadLine(stream) ==
--- used in place of READ-LINE in a scratchpad server system.
-  FORCE_-OUTPUT()
-  not $SpadServer or not IS_-CONSOLE stream =>
-    READ_-LINE(stream)
-  IN_-STREAM: fluid := stream
-  _*EOF_*: fluid := NIL
-  line :=
-   while not $EndServerSession and not _*EOF_* repeat
-    if $NeedToSignalSessionManager then
-      sockSendInt($SessionManager, $EndOfOutput)
-    $NeedToSignalSessionManager := false
-    action := serverSwitch()
-    action = $CallInterp =>
-      l := READ_-LINE(stream)
-      $NeedToSignalSessionManager := true
-      return l
-    action = $CreateFrame =>
-      frameName := GENTEMP('"frame")
-      addNewInterpreterFrame(frameName)
-      $frameAlist := [[$frameNumber,:frameName], :$frameAlist]
-      $currentFrameNum := $frameNumber
-      sockSendInt($SessionManager, $CreateFrameAnswer)
-      sockSendInt($SessionManager, $frameNumber)
-      $frameNumber := $frameNumber + 1
-      sockSendString($SessionManager, MKPROMPT())
-    action = $SwitchFrames =>
-      $currentFrameNum := sockGetInt($SessionManager)
-      currentFrame := LASSOC($currentFrameNum, $frameAlist)
-      changeToNamedInterpreterFrame currentFrame
-    action = $EndSession =>
-      $EndServerSession := true
-    action = $LispCommand =>
-      $NeedToSignalSessionManager := true
-      stringBuf := MAKE_-STRING $sockBufferLength
-      sockGetString($MenuServer, stringBuf, $sockBufferLength)
-      form := unescapeStringsInForm READ_-FROM_-STRING stringBuf
-      protectedEVAL form
-    action = $QuietSpadCommand =>
-      $NeedToSignalSessionManager := true
-      executeQuietCommand()
-    action = $SpadCommand =>
-      $NeedToSignalSessionManager := true
-      stringBuf := MAKE_-STRING 512
-      sockGetString($MenuServer, stringBuf, 512)
-      CATCH('coerceFailure,CATCH('top__level, CATCH('SPAD__READER,
-        parseAndInterpret stringBuf)))
-      PRINC MKPROMPT()
-      FINISH_-OUTPUT()
-    action = $NonSmanSession =>
-      $SpadServer := nil
-    action = $KillLispSystem => 
-      BYE()
-    NIL
-  line => line
-  ""
-
 parseAndInterpret str ==
   $InteractiveMode :fluid := true
   $BOOT: fluid := NIL

\start
Date: Fri, 10 Apr 2009 23:54:23 -0500
From: Tim Daly
To: list
Subject: 20090410.03.tpd.patch (faq 50: Cannot find libXpm.a)

The libXpm.a static library is not shipped with a lot of distributions.
The sources have been uploaded to 
http://axiom-developer.org/axiom-website/Xpm.tgz
from which the libXpm.a library can be built.
===================================================================
diff --git a/changelog b/changelog
index 678a43a..5793186 100644
--- a/changelog
+++ b/changelog
@@ -1,4 +1,5 @@
-20090410 tpd src/axiom-website/patches.html 20090410.02.tpd.patch
+20090410 tpd src/axiom-website/patches.html 20090410.03.tpd.patch
+20090410 tpd faq 50: Cannot find libXpm.a
 20090410 tpd src/interp/server.boot move interpreter code into bookvol5
 20090410 tpd src/interp/incl.boot move interpreter code into bookvol5
 20090410 tpd books/bookvol5 move more interpreter code
diff --git a/faq b/faq
index ab9f125..fdf0ddb 100644
--- a/faq
+++ b/faq
@@ -48,6 +48,7 @@ FAQ 46: Axiom trademark information
 FAQ 47: Axiom won't build on Fedora 9 (SELinux)
 FAQ 48: Getting Axiom sources from git
 FAQ 49: How do I get the lastest GCL?
+FAQ 50: Cannot find libXpm.a
 
 ===================================================================
 FAQ 0: How do I use Axiom?
@@ -1819,4 +1820,13 @@ GCLVERSION=gcl-2.6.8pre3
 and rename them using the new GCLVERSION prefix
 
 7) In the axiom top level directory type:
-make
\ No newline at end of file
+make
+
+===================================================================
+FAQ 50: Cannot find libXpm.a
+===================================================================
+
+The static library is missing from some distributions.
+The source code to build this library is available at:
+ http://axiom-developer.org/axiom-website/Xpm.tgz
+
diff --git a/src/axiom-website/patches.html b/src/axiom-website/patches.html
index c91f8b2..fadb4e8 100644
--- a/src/axiom-website/patches.html
+++ b/src/axiom-website/patches.html
@@ -1062,5 +1062,7 @@ src/algebra/Makefile egrep -> grep -E<br/>
 fix regress format<br/>
 <a href="patches/20090410.02.tpd.patch">20090410.02.tpd.patch</a>
 bookvol5 add more interpreter code<br/>
+<a href="patches/20090410.03.tpd.patch">20090410.03.tpd.patch</a>
+faq 50: Cannot find libXpm.a<br/>
  </body>
 </html>

\start
Date: Fri, 10 Apr 2009 22:26:53 -0700
From: Scott Morrison
To: Gabriel Dos Reis
Subject: re: OpenAxiom-1.2.1 released

As Dick Jenks explained it to me when I joined the Axiom project in 1984,
the Boot language was intended as a boot-strap step to eventually implement
the entire system in the Spad language.  The idea was first to convert to a
language that was syntactically similar to Spad, then convert it to actually
use Spad.  Of course the second step never happened.  That's why the
language was named Boot.
While Boot does have the semantics of Lisp, to me, the distinguishing
feature is it's very nice syntax for list pattern matching.  You can do the
same things in Lisp, but the syntactic elegance of Boot for pattern matching
is undeniable.  It was so nice that we got away without real structured data
throughout the entire project.  I love the syntax:

On Fri, Apr 10, 2009 at 2:22 PM, Gabriel Dos Reis <
Gabriel Dos Reis> wrote:

> On Fri, Apr 10, 2009 at 12:38 PM,  Tim Daly wrote:
> >> As I understand it, you could easily prevent forking by pushing Axiom to
> >> user more actively, it could have the functionality of OpenAxiom or
> FriCAS,
> >> but it has lost the momentum. From user point of view the confusion is
> >> of no importance as long as one of fors works and another one does not.
> >
> > Aleksej,
> >
> > As I understand it, one fundamental difference between OpenAxiom and
> Axiom
> > lies in the project goals related to the boot language. Approximately
> half
> > of the Axiom internals is written directly in common lisp. The other half
> > is written in a "syntactic sugar language", called boot, which compiles
> to
> > common lisp.
> >
> > The Axiom project had, since it was released as open source, the
> > stated goal of removing the boot language code. Indeed, this was a
> > goal I had while working on Axiom before it was ever released from IBM
> > in the late 80s.
> >
> > The OpenAxiom project has the exact opposite goal of writing everything
> > in boot and developing boot as a language.
>
> Tim is almost right -- OpenAxiom aims to move away from Lisp as
> implementation
> language.  That goal of OpenAxiom is in line with the original AXIOM
> project
> (which led to A#, then Aldor).  I have it from first hand the original
> project
> wasn't meant to be written entirely in Lisp.  However, that was an issue of
> occasional debate.  I suspect that will continue for the foreseeable
> future.
> By the way, the Boot in OpenAxiom is inaccurately described as
> a syntactic sugar for Common Lisp.
>
> >
> > Given that the goals of OpenAxiom are directly opposed to the stated
> > project goals of Axiom, how do you see that this difference should be
> > resolved?

\start
Date: Sat, 11 Apr 2009 03:37:26 -0400
From: Tim Daly
To: Scott Morrison
Subject: re: OpenAxiom-1.2.1 released
Cc: list

> As Dick Jenks explained it to me when I joined the Axiom project in 1984,
> the Boot language was intended as a boot-strap step to eventually implement
> the entire system in the Spad language.  The idea was first to convert to a
> language that was syntactically similar to Spad, then convert it to actually
> use Spad.  Of course the second step never happened.  That's why the
> language was named Boot.
> While Boot does have the semantics of Lisp, to me, the distinguishing
> feature is it's very nice syntax for list pattern matching.  You can do the
> same things in Lisp, but the syntactic elegance of Boot for pattern matching
> is undeniable.  It was so nice that we got away without real structured data
> throughout the entire project.  I love the syntax:

Yes, and Dick was one of the authors of the Boot language.
Dick also used Meta, another language which has since been removed.

Boot's lack of data structures causes obscurity

The lack of structured data is the cause of so MANY of the random
$-variables with undescribed contents. I am trying to untangle the
contents of the Frame structure so I can explain it. I'm trying to
collect and manage the global state scattered in hundreds of $-variables.

There is a general )set data structure hidden in |$setOptions|
which could easily be a domain-specific language (DSL) if implemented
in lisp. I will eventually write a simple DSL to make this data structure
obvious and trivial to extend and maintain. But boot makes it impossible
to use these structures or DSLs, making the whole subsystem obscure.

Boot needlessly complicates the build process

Since boot was written in boot we had a situation where we needed a
running Axiom in order to build Axiom. This was also true of the
algebra in that you needed a running system to build a running system.
That was fine at IBM as we always had a running Axiom.

While we worked together at IBM I created a version of Scratchpad
that was a pure lisp implementation. It greatly simplified the build
process since we didn't need to build Meta or Boot. But Dick was quite
pleased with the "recursively defined" aspects and hated lisp syntax.
Thus, my pure lisp version died, greatly complicating my build work.
(Indeed, that's why there are .clisp, .lsp, and .lisp files in int.)

When the system was released to me I did not have permission to
distribute NAG's system and therefore did not have a way to bootstrap.
I needed to rearchitect the system so boot and the algebra could be
built without a running system. It took nearly a year of work to 
construct a version of Axiom that builds from scratch. Boot made 
part of that process painful.

This whole process makes the system build needlessly complicated.  One
of the CLEARLY STATED GOALS of the free version of Axiom was the goal
of rewriting boot into lisp and removing boot from the world.

Boot is a bad idea.

Boot adds nothing to the system but python-like syntax. We might as
well retarget boot to BE python-compatible so we would have people who
knew the language. There are NO active Axiom developers who have
developed new code in boot. Boot is a dead language, specified only by
its single implementation. It is not even a complete language as there
are many things implemented directly in lisp that you can't say in
boot. It is a syntactic-sugar, restricted subset of a real language.

Boot is yet-another-of-the-thousands of lisp-without-parens languages.
Every one of these lisp-without-parens languages misses the
fundamental point of the parens, which is that programs are data.

Boot takes away the source of the immense power of lisp to self-modify.
Boot takes away lisp's ability to build domain-specific languages in macros.
Boot takes away CLOS, data structures, and other tools.
Boot takes away "to the metal" optimizations.
Boot takes away the ability to debug in the language you write.

You add a boot-to-lisp translation which requires code to maintain.
You add a boot-to-lisp translation which complicates the build process.
You add a boot language which requires documentation and explanations.
You maintain an unspecified language nobody speaks.

Why?

The Common Lisp future of Axiom

Once boot goes away then Makefiles go away since I can use lisp to
build lisp.  The whole build process becomes....

  fire up a lisp image
  load code
  execute

(Well, there is noweb but Axiom can now read TeX files with tex-chunks
so noweb will disappear as soon as I finish removing boot. Thus the
sources will be literate lisp files as pure latex readable by Axiom)

So Axiom will be very simple to build and rather more simple to
understand since I'm literate documenting it as I go.  Axiom will be
easier to maintain since Common Lisp is a language with a published
standard used by people.

Back in the late 80s I set out to remove boot from Axiom.
It is a clearly stated goal of the Axiom project.
It is happening as I write this.

\start
Date: Sat, 11 Apr 2009 15:31:39 +0400
From: Aleksej Saushev
To: list
Subject: Re: OpenAxiom-1.2.1 released

  Hello!

Tim Daly writes:

>> As I understand it, you could easily prevent forking by pushing Axiom to
>> user more actively, it could have the functionality of OpenAxiom or FriCAS,
>> but it has lost the momentum. From user point of view the confusion is
>> of no importance as long as one of fors works and another one does not.
>
> Aleksej,
>
> As I understand it, one fundamental difference between OpenAxiom and Axiom
> lies in the project goals related to the boot language. Approximately half
> of the Axiom internals is written directly in common lisp. The other half
> is written in a "syntactic sugar language", called boot, which compiles to
> common lisp.
>
> The Axiom project had, since it was released as open source, the
> stated goal of removing the boot language code. Indeed, this was a
> goal I had while working on Axiom before it was ever released from IBM
> in the late 80s.
>
> The OpenAxiom project has the exact opposite goal of writing everything
> in boot and developing boot as a language.

Alright, now that becomes more clear. What is common between Axiom and
OpenAxiom then? Do they implement the same high level language?
Do they have the same mathematical library?

> Given that the goals of OpenAxiom are directly opposed to the stated
> project goals of Axiom, how do you see that this difference should be
> resolved?

I repeat, that from user point of view the difference between projects
is that one builds and another does not. While I can build FriCAS and
OpenAxiom, I cannot boast it with Axiom. And the impression from my side
is that you handle build problems ad hoc (cf. Slackware build problems):
each linux-based system gets its own configuration file with quite
uncommon content.

What should be done, if I happen to need Axiom on HP-UX, is unknown.

At the same time FriCAS and OpenAxiom use portable Common Lisp
implementations (GCL is far from being portable), they are packager
friendly (they don't ship bundled publicly accessible software),
and they use well-established configure-make build process.

I remember you stated "it should simply work" as one of arguments in
favour of shipping gcl and other software bundled. In practice it works
quite the opposite way: I have to patch CLISP in order to make it not
fail on fragile shell code, I have to patch ECL in order to install
libraries properly on Darwin, I have to patch noweb in order to make it
behave (it uses hardcoded prefix and wrong icon program). Sometimes
these patches are done by other people and look magic to me. All these
customizations are to be reused, but Axiom doesn't do that.

In short Axiom doesn't build and doesn't play nice, when I'm going to
fix build problems myself.

And from my user point of view, Axiom should adopt either FriCAS' or
OpenAxiom's build system, whatever is closer, or develop similar one,
if Axiom is meant to be used by non-programmers. I believe you know
that there're enough engineers who are not and do not wish to be
programmers or system administrators.

Note, that I'm not interested in your political agenda, like to Boot or
not to Boot, or to tangle or not to tangle. I'm interested in real world
applications, those used by real life engineers, researchers or students.
As for now I can offer them OpenAxiom and FriCAS, but not Axiom, because
of severe maintainance problems. I'd like to change that but it seems to
contradict your political views, and I'm not ready to maintain substantial
patches.

\start
Date: Sat, 11 Apr 2009 15:03:14 +0200
From: Gregory Vanuxem
To: Tim Daly, list
Subject: Re: 20090410.03.tpd.patch (faq 50: Cannot find	libXpm.a)

Dear Timothy

Frankly I think it would be better to use the shared lib by default.
Don't know what you think but a lot of distributions ship only the
shared lib and I would be surprised if that will not continue.

Regards,

Greg

Le vendredi 10 avril 2009 =E0 23:54 -0500, Tim Daly a
=E9crit :
> The libXpm.a static library is not shipped with a lot of distributions.
> The sources have been uploaded to
> http://axiom-developer.org/axiom-website/Xpm.tgz
> from which the libXpm.a library can be built.
> =========================
==========================
==================
> diff --git a/changelog b/changelog
> index 678a43a..5793186 100644
> --- a/changelog
> +++ b/changelog
> @@ -1,4 +1,5 @@
> -20090410 tpd src/axiom-website/patches.html 20090410.02.tpd.patch
> +20090410 tpd src/axiom-website/patches.html 20090410.03.tpd.patch
> +20090410 tpd faq 50: Cannot find libXpm.a
>  20090410 tpd src/interp/server.boot move interpreter code into bookvol=
5
>  20090410 tpd src/interp/incl.boot move interpreter code into bookvol5
>  20090410 tpd books/bookvol5 move more interpreter code
> diff --git a/faq b/faq
> index ab9f125..fdf0ddb 100644
> --- a/faq
> +++ b/faq
> @@ -48,6 +48,7 @@ FAQ 46: Axiom trademark information
>  FAQ 47: Axiom won't build on Fedora 9 (SELinux)
>  FAQ 48: Getting Axiom sources from git
>  FAQ 49: How do I get the lastest GCL?
> +FAQ 50: Cannot find libXpm.a
> 
>  =========================
==========================
==================
>  FAQ 0: How do I use Axiom?
> @@ -1819,4 +1820,13 @@ GCLVERSION=gcl-2.6.8pre3
>  and rename them using the new GCLVERSION prefix
> 
>  7) In the axiom top level directory type:
> -make
> \ No newline at end of file
> +make
> +
> +=========================
==========================
==================
> +FAQ 50: Cannot find libXpm.a
> +=========================
==========================
==================
> +
> +The static library is missing from some distributions.
> +The source code to build this library is available at:
> + http://axiom-developer.org/axiom-website/Xpm.tgz
> +
> diff --git a/src/axiom-website/patches.html b/src/axiom-website/patches=
.html
> index c91f8b2..fadb4e8 100644
> --- a/src/axiom-website/patches.html
> +++ b/src/axiom-website/patches.html
> @@ -1062,5 +1062,7 @@ src/algebra/Makefile egrep -> grep -E<br/>
>  fix regress format<br/>
>  <a href="patches/20090410.02.tpd.patch">20090410.02.tpd.patch</a>
>  bookvol5 add more interpreter code<br/>
> +<a href="patches/20090410.03.tpd.patch">20090410.03.tpd.patch</a>
> +faq 50: Cannot find libXpm.a<br/>
>   </body>
>  </html>

\start
Date: Sat, 11 Apr 2009 09:16:14 -0500
From: Gabriel Dos Reis
To: Scott Morrison
Subject: re: OpenAxiom-1.2.1 released

On Sat, Apr 11, 2009 at 12:26 AM, Scott Morrison
Scott Morrison wrote:

> As Dick Jenks explained it to me when I joined the Axiom project in
> 1984, the Boot language was intended as a boot-strap step to
> eventually impleme= nt the entire system in the Spad
> language. The idea was first to convert to a language that was
> syntactically similar to Spad, then convert it to actually use
> Spad. Of course the second step never happened. That's why the
> language was named Boot.  While Boot does have the semantics of
> Lisp, to me, the distinguishing feature is it's very nice syntax for
> list pattern matching. You can do the same things in Lisp, but
> the syntactic elegance of Boot for pattern matching is
> undeniable. It was so nice that we got away without real
> structured data throughout the entire project. I love the
> syntax:

I couldn't agree more.   I think Boot was a real master piece --
just look at the size of the parser and translator.  Yes, definitely
the pattern matching syntax is really nice.

\start
Date: Sat, 11 Apr 2009 09:23:39 -0500
From: Gabriel Dos Reis
To: Aleksej Saushev
Subject: re: OpenAxiom-1.2.1 released

On Sat, Apr 11, 2009 at 6:31 AM, Aleksej Saushev wrote:

> And from my user point of view, Axiom should adopt either FriCAS' or
> OpenAxiom's build system, whatever is closer, or develop similar one,

A while ago, I rewrote Axiom's build system to use Autoconf
and restructured the Makefiles so that people -- most of the time
-- just say

     configure && make && make install

That work is in the build-improvements branch.
That is the branch that both OpenAxiom and FriCAS use
as common basis.  The work is still there for Axiom
to benefit from.

\start
Date: Sat, 11 Apr 2009 09:31:33 -0500
From: Gabriel Dos Reis
To: Tim Daly
Subject: re: OpenAxiom-1.2.1 released

On Sat, Apr 11, 2009 at 2:37 AM, Tim Daly wrote:

> Since boot was written in boot we had a situation where we needed a
> running Axiom in order to build Axiom. This was also true of the
> algebra in that you needed a running system to build a running system.

A data point: OpenAxiom has more codes written in Boot than any
other in the AXIOM-family.  Yet, it does not need a running
OpenAxiom system to build the entire compiler.

I suspect we had this sort of discussion before...

\start
Date: Sat, 11 Apr 2009 10:32:52 -0700
From: Scott Morrison
To: Tim Daly
Subject: re: OpenAxiom-1.2.1 released

I actually sent that email prematurely last night, hence it ended with
a colon.  I said that Boot's pattern matching allowed us to get by
without structured data for the whole project.  I meant to follow that
up, with "but that's not a good thing."  The interpreter exposes it's
internal representation in a very bad way.  If you want to change the
data structures the interpreter uses, you need to find all the places
in the code which use pattern matching to destruct data, and change
them.  I did this several times and it is no fun at all.

Any modern language uses structured data to hide those sorts of
implementation details.  Tim's project to rewrite the system in CL is
a very good thing if he replaces Boot pattern matching with structured
data.  The important issue is hiding implementation details.  To me
the language used is secondary.  If Tim wants to use CL, that's fine
with me.  If other projects do the same thing with Boot, that would be
good too.

Tim's point about the heavy use of global variables in Boot is a valid
point.  That makes the code hard to understand and change.  But to me
that's not a language issue, but an implementation choice.  Any good
rewrite of the interpreter would remove those.  That could be done in
Boot or CL.  If Tim likes CL, and he does that work to add structured
data, I think Axiom would be much easier to maintain.

-- Scott

On Sat, Apr 11, 2009 at 12:37 AM, Tim Daly wrote:

> > As Dick Jenks explained it to me when I joined the Axiom project in 1984,
>
> Back in the late 80s I set out to remove boot from Axiom.
> It is a clearly stated goal of the Axiom project.
> It is happening as I write this.

\start
Date: Sat, 11 Apr 2009 15:06:14 -0400
From: Tim Daly
To: Igor Pashev
Subject: Re: Building Axiom on Slackware

> >> Slackware doesn.t have static library libXpm.a:
> >>
> > 
> > I have found the sources and am able to build the missing file.
> > http://axiom-developer.org/axiom-website/Xpm.tgz
> > contains the Xpm sources and you can buid libXpm.a from there.
> > 
> > Tim
> > 
> 
> Not a graceful way.
> 
> libXpm is part of X from X.Org Foundation,
> so this library should be just recompiled
> to make static and shared libs.
> 
> Or, the best way, I think, switch Axiom to shared libraries;
> how difficult is it?

You can find the libXpm libraries online. Don't use the sources I
provide. I thought I was being helpful and saving some effort by
caching the sources locally. 

libXpm is used to display pixmaps.  This functionality is part of the
graphics subsystem.  If you feel that you would rather simply rewrite
the code to not use the libXpm package or use the shared library, I'd
be happy to include your diff-Naur patch.

I'm in the process of rewriting graphics to use Firefox canvas
elements.  Axiom's Firefox front end does not use X at all so the
problem won't exist eventually.

\start
Date: Sat, 11 Apr 2009 15:15:53 -0400
From: Tim Daly
To: Aleksej Saushev
Subject: re: OpenAxiom-1.2.1 released

> > The OpenAxiom project has the exact opposite goal of writing everything
> > in boot and developing boot as a language.
> 
> Alright, now that becomes more clear. 

> What is common between Axiom and OpenAxiom then? 

You have the sources. Do
  diff -r --brief axiom openaxiom
and you'll see that they are almost nowhere the same.

> Do they have the same mathematical library?

No. Almost, but no. And that changes more every week.

I scan the commit logs of both FriCAS and OpenAxiom to pick up
changes.  You'll see Waldek mentioned in several Axiom patches from
FriCAS.  Those are patches that Waldek wrote for FriCAS that I
understood enough to apply. If I can't understand the reason for a
change then I can't pick up the change.

Axiom has algebra changes. I do not see the same patches being
applied to OpenAxiom or FriCAS.

\start
Date: Sat, 11 Apr 2009 15:49:14 -0400
From: Tim Daly
To: Aleksej Saushev
Subject: re: OpenAxiom-1.2.1 released

> > Given that the goals of OpenAxiom are directly opposed to the stated
> > project goals of Axiom, how do you see that this difference should be
> > resolved?
> 
> I repeat, that from user point of view the difference between projects
> is that one builds and another does not. While I can build FriCAS and
> OpenAxiom, I cannot boast it with Axiom. And the impression from my side
> is that you handle build problems ad hoc (cf. Slackware build problems):
> each linux-based system gets its own configuration file with quite
> uncommon content.

So you didn't see the grep/egrep bug that caused FriCAS not to build?

> What should be done, if I happen to need Axiom on HP-UX, is unknown.

There is no claim that Axiom runs on HP-UX. It might. It might not.

...[snip]...

> And from my user point of view, Axiom should adopt either FriCAS' or
> OpenAxiom's build system, whatever is closer, or develop similar one,

Please post a diff-Naur patch.


...[snip]...


You clearly believe that Axiom should adopt the "standard autoconf"
method of building. 

I clearly believe that Makefiles should go away. I believe I will
be able to build Axiom in a portable, unified way using only 
Common Lisp, Latex, and a browser. I'm 

 * rewriting system-dependent subsystems like hyperdoc and graphics
   into Firefox, thus we don't need libXpm
 * simplifying the internals like removing boot so we don't need to
   depend on pre-stages to build, thus we don't need Makefiles
 * unifying the concepts so that Axiom reads and understand latex-style 
   chunks, thus we don't need noweb
 * documenting everything using latex books, thus we don't need hundreds
   of tiny .h, .c, .boot, .lisp, and other 1960s development techniques

Axiom is about 1 million "things of code". It used to exist in thousands
of files, in dozens of subdirectories, with multiple system prerequisites
and complicated dependencies between the code parts. Autoconf is the
"right way" to manage that pile. That's a 1990s "solution" to a 1960
constraint of 4k memory limitations. Believe me, I was there.

Axiom will eventually be 30 books written in Latex and Common Lisp.
You will need a Latex and a standard Common Lisp and a standard browser.

For the moment, as a temporary measure, things that will go away like
GCL's snapshots, noweb, or libXpm are "supported" in "ad-hoc" ways.

\start
Date: Sat, 11 Apr 2009 15:54:13 -0400
From: Tim Daly
To: Aleksej Saushev
Subject: re: OpenAxiom-1.2.1 released

> Note, that I'm not interested in your political agenda, like to Boot or
> not to Boot, or to tangle or not to tangle. I'm interested in real world
> applications, those used by real life engineers, researchers or students.
> As for now I can offer them OpenAxiom and FriCAS, but not Axiom, because
> of severe maintainance problems. I'd like to change that but it seems to
> contradict your political views, and I'm not ready to maintain substantial
> patches.

FriCAS made the same points. The "30 year horizon" and the "noweb/gclweb"
issues were the fundamental reason why that fork happened.

You strongly disagree with Axiom's project goals.
Thus I think you might consider not using Axiom at all.

\start
Date: Sat, 11 Apr 2009 15:56:26 -0400
From: Tim Daly
To: Gregory Vanuxem
Subject: Re: 20090410.03.tpd.patch (faq 50: Cannot find	libXpm.a)

> Frankly I think it would be better to use the shared lib by default.
> Don't know what you think but a lot of distributions ship only the
> shared lib and I would be surprised if that will not continue.

Greg,

I did consider using the shared library but was unable to make it work.
There appears to be some sort of versioning issue I don't understand.
If you can figure it out and post a patch, I'll include it.

\start
Date: Sun, 12 Apr 2009 01:39:45 +0400
From: Igor Pashev
To: list
Subject: [Fwd: Re: Building Axiom on Slackware]

> As I mentioned to Greg, I spent 2 days trying to use the libXpm
> shared libraries and failed. If you can figure it out please post
> a diff-Naur patch and I'll include it.

Quite simple :-)

diff --git a/Makefile.pamphlet b/Makefile.pamphlet
index 5304ddf..672d982 100644
--- a/Makefile.pamphlet
+++ b/Makefile.pamphlet
@@ -1238,7 +1238,7 @@ PLF=LINUXplatform
 # C compiler flags
 CCF="-O2 -fno-strength-reduce -Wall -D_GNU_SOURCE -D${PLF}
-I/usr/X11/include"
 # Loader flags
-LDF=" -L/usr/X11R6/lib ${XLIB}/libXpm.a "
+LDF=" -L/usr/X11R6/lib ${XLIB}/libXpm.so "
 # C compiler to use
 CC=gcc
 AWK=gawk

\start
Date: Sat, 11 Apr 2009 18:29:27 -0400
From: Stephen Wilson
To: Igor Pashev
Subject: Re: [Fwd: Re: Building Axiom on Slackware]

Actually, a patch for this problem was posted a year ago (and even long before
counting the build-improvements branch).  I was (mistakenly) under the
impression it was applied:

http://lists.nongnu.org/archive/html/axiom-developer/2008-05/msg00000.html

On Sun, Apr 12, 2009 at 01:39:45AM +0400, Igor Pashev wrote:
>  # Loader flags
> -LDF=" -L/usr/X11R6/lib ${XLIB}/libXpm.a "
> +LDF=" -L/usr/X11R6/lib ${XLIB}/libXpm.so "

LDF should likely be set as in the link above so that either the static or
dynamic lib can be used (preference to shared libs IIRC):

   LDF=" -L${XLIB} -lXpm"

\start
Date: Sat, 11 Apr 2009 21:43:17 -0400
From: Tim Daly
To: Stephen Wilson
Subject: Re: [Fwd: Re: Building Axiom on Slackware]

> Actually, a patch for this problem was posted a year ago (and even long before
> counting the build-improvements branch).  I was (mistakenly) under the
> impression it was applied:
> 
> http://lists.nongnu.org/archive/html/axiom-developer/2008-05/msg00000.html
> 
> On Sun, Apr 12, 2009 at 01:39:45AM +0400, Igor Pashev wrote:
> >  # Loader flags
> > -LDF=" -L/usr/X11R6/lib ${XLIB}/libXpm.a "
> > +LDF=" -L/usr/X11R6/lib ${XLIB}/libXpm.so "
> 
> LDF should likely be set as in the link above so that either the static or
> dynamic lib can be used (preference to shared libs IIRC):
> 
>    LDF=" -L${XLIB} -lXpm"
> 

Steven, Igor,

I MAY BE WRONG, but as I recall, when I applied that patch it failed
to build on several systems.

Did either of you test it? How? On what system does it work?

\start
Date: Sat, 11 Apr 2009 20:18:37 -0500
From: Gabriel Dos Reis
To: Tim Daly
Subject: Re: [Fwd: Re: Building Axiom on Slackware]
Cc: Stephen Wilson

On Sat, Apr 11, 2009 at 8:43 PM, Tim Daly wrote:
>> Actually, a patch for this problem was posted a year ago (and even long =
before
>> counting the build-improvements branch). I was (mistakenly) under the
>> impression it was applied:
>>
>> http://lists.nongnu.org/archive/html/axiom-developer/2008-05/msg00000.ht=
ml
>>
>> On Sun, Apr 12, 2009 at 01:39:45AM +0400, Igor Pashev wrote:
>> > # Loader flags
>> > -LDF=" -L/usr/X11R6/lib ${XLIB}/libXpm.a "
>> > +LDF=" -L/usr/X11R6/lib ${XLIB}/libXpm.so "
>>
>> LDF should likely be set as in the link above so that either the static =
or
>> dynamic lib can be used (preference to shared libs IIRC):
>>
>>  LDF=" -L${XLIB} -lXpm"
>>
>
> Steven, Igor,
>
> I MAY BE WRONG, but as I recall, when I applied that patch it failed
> to build on several systems.
>
> Did either of you test it? How? On what system does it work?

As Stephen mentioned, a patch was applied to
build-improvements -- picked up by both OpenAxiom
and FriCAS.  And as far as I can tell, it works on the many
platforms those systems build.  Solution?  Don't hardcode
XLIB.  Get it deduced for you for free by tools that are
specifically designed to solve that kind of problem.
Stephen';s suggestion is correct for 99.9% of the platforms.

\start
Date: Sat, 11 Apr 2009 22:50:03 -0400
From: Tim Daly
To: Gabriel Dos Reis
Subject: Re: [Fwd: Re: Building Axiom on Slackware]
Cc: Stephen Wilson

> >> Actually, a patch for this problem was posted a year ago (and even long before
> >> counting the build-improvements branch). I was (mistakenly) under the
> >> impression it was applied:
> >>
> >> http://lists.nongnu.org/archive/html/axiom-developer/2008-05/msg00000.html
> >>
> >> On Sun, Apr 12, 2009 at 01:39:45AM +0400, Igor Pashev wrote:
> >> > # Loader flags
> >> > -LDF=" -L/usr/X11R6/lib ${XLIB}/libXpm.a "
> >> > +LDF=" -L/usr/X11R6/lib ${XLIB}/libXpm.so "
> >>
> >> LDF should likely be set as in the link above so that either the static or
> >> dynamic lib can be used (preference to shared libs IIRC):
> >>
> >>  LDF=" -L${XLIB} -lXpm"
> >>
> >
> > Steven, Igor,
> >
> > I MAY BE WRONG, but as I recall, when I applied that patch it failed
> > to build on several systems.
> >
> > Did either of you test it? How? On what system does it work?
> 
> As Stephen mentioned, a patch was applied to
> build-improvements -- picked up by both OpenAxiom
> and FriCAS.  And as far as I can tell, it works on the many
> platforms those systems build.  Solution?  Don't hardcode
> XLIB.  Get it deduced for you for free by tools that are
> specifically designed to solve that kind of problem.
> Stephen';s suggestion is correct for 99.9% of the platforms.
> 

Gaby,

Sigh.

I await your diff-Naur patch for autoconf builds of the Axiom trunk.
If you recall, I've asked for this since you first did autoconf.
That never happened. Please include the patch with your next autoconf
advertisement.

You'll admit that autoconf would have failed if libXpm was not in the
list of things to check. Exactly this kind of failure happpened with
egrep last week. FriCAS, as I recall, did NOT use autoconf to fix it.

Do we really need to relive the whole debate? I certainly don't. 
If people think autoconf is vital, there are now alternatives.
It seems like a "solved problem" to me. 

Can we please stick to the simple question at hand, which is,
did anyone actually TEST the patch and confirm that it works on slackware?
It seems like a standard of public programming to actually test a patch.

And, if the fix is so trivial, did anyone consider simply (re-)posting the
patch rather than open a diatribe about how Axiom fails everywhere?
I don't remember a public crucifiction of FriCAS for the egrep bug
despite the fact that autoconf can detect it but did not.

All systems have bugs.
Find it, fix it, TEST it, post the fix, move on.

\start
Date: Sat, 11 Apr 2009 21:36:04 -0500
From: Gabriel Dos Reis
To: Tim Daly
Subject: Re: [Fwd: Re: Building Axiom on Slackware]
Cc: Stephen Wilson

On Sat, Apr 11, 2009 at 9:50 PM, Tim Daly wrote:

> I await your diff-Naur patch for autoconf builds of the Axiom trunk.
> If you recall, I've asked for this since you first did autoconf.
> That never happened. Please include the patch with your next autoconf
> advertisement.

Well, I'm not advertising anything.  You asked for solution; I
suggested one that works -- which others beside me
have been using (e.g. FriCAS).  You are very welcome to dismiss
it under the name of diff --Naur or whatever.  The work is the
in the build-improvements branch; you are of course entirely
entitled to dismiss it -- it only appears curious that you would
complain of missing patch.

> You'll admit that autoconf would have failed if libXpm was not in the
> list of things to check. Exactly this kind of failure happpened with
> egrep last week. FriCAS, as I recall, did NOT use autoconf to fix it.

Everybody has his/her theology.  Putting aside the fact that I do
not see what egrep has to do with libXpm.so, I would have
reused AC_PROG_EGREP if the issue was reported to me.
But, by no means I do not claim it is superior to solutions that
do not exist yet.   It certainly solves the problem in a very scalable
way -- I do not need to keep a personal list of which platforms
has the right grep.  I just know the Autoconf macro has
been tested by thousands of thousands of system builders, thousands
of thousands times.  So, I do not need to reinvent my own
surely inferior hack.

> Do we really need to relive the whole debate? I certainly don't.
> If people think autoconf is vital, there are now alternatives.
> It seems like a "solved problem" to me.

I'm sorry for having -- for a second -- thought you were genuinely
looking for solution that has been tested to work (the Xpm problem).

Please, continue your regularly scheduled work and ignore
my suggestion (which Stephen reproduced) that happens to work
for OpenAxiom and FriCAS in the real world on real systems
(including the one you are talking about.)

\start
Date: Sat, 11 Apr 2009 23:51:07 -0400
From: Tim Daly
To: Gabriel Dos Reis
Subject: Re: [Fwd: Re: Building Axiom on Slackware]
Cc: Stephen Wilson

> Please, continue your regularly scheduled work and ignore
> my suggestion (which Stephen reproduced) that happens to work
> for OpenAxiom and FriCAS in the real world on real systems
> (including the one you are talking about.)

Gaby,

So far I've discussed the problem on and off list.
I've searched for the libXpm.a for slackware.
I've found, built, tested, and then tar-gziped the sources.
I've posted the result and updated the faq.
I've set up a new machine with a slackware 12.2 image.
I am planning to add slackware, like I did vector, to the supported systems.
I am rebuilding all of the currently supported systems to test the patch.

All I asked was, did anyone test the patch.
My recollection, possibly wrong, was that the patch failed for some systems.
Please test an Axiom build on slackware and let me know if it works for you.

This hardly constitutes ignoring the problem.
It does constitute ignoring autoconf, which was not the posted patch.

Please try to stay on topic.

\start
Date: Sat, 11 Apr 2009 22:18:59 -0500
From: Gabriel Dos Reis
To: Tim Daly
Subject: Re: [Fwd: Re: Building Axiom on Slackware]
Cc: Stephen Wilson

On Sat, Apr 11, 2009 at 10:51 PM, Tim Daly wrote:
>
> All I asked was, did anyone test the patch.

Yes.  It succeeds on one , and failed on another one -- the one it failed
one was one you did not anticipate (a 64-bit machine that has its
libs in a slightly different place) in the long list of special Makefiles.

> My recollection, possibly wrong, was that the patch failed for some systems.
> Please test an Axiom build on slackware and let me know if it works for you.
>
> This hardly constitutes ignoring the problem.
> It does constitute ignoring autoconf, which was not the posted patch.
>
> Please try to stay on topic.

Oh, don't worry; I'm staying on topic -- I'm just going to refrain
from suggesting anything that might look like a scalable solution
that has actually been tested and known to work everywhere
we know of.

\start
Date: Sun, 12 Apr 2009 00:18:08 -0400
From: Tim Daly
To: Gabriel Dos Reis
Subject: Re: [Fwd: Re: Building Axiom on Slackware]
Cc: Stephen Wilson

> > All I asked was, did anyone test the patch.
> 
> Yes.  It succeeds on one , and failed on another one -- the one it failed
> one was one you did not anticipate (a 64-bit machine that has its
> libs in a slightly different place) in the long list of special Makefiles.

Excellent. Which systems were these?

\start
Date: Sat, 11 Apr 2009 22:41:16 -0500
From: Gabriel Dos Reis
To: Tim Daly
Subject: Re: [Fwd: Re: Building Axiom on Slackware]
Cc: Stephen Wilson

On Sat, Apr 11, 2009 at 11:18 PM, Tim Daly wrote:
>> > All I asked was, did anyone test the patch.
>>
>> Yes. It succeeds on one , and failed on another one -- the one it fai=
led
>> one was one you did not anticipate (a 64-bit machine that has its
>> libs in a slightly different place) in the long list of special Makefile=
s.
>
> Excellent. Which systems were these?

As you know, my primary machines run openSUSE.

\start
Date: Sun, 12 Apr 2009 00:35:04 -0400
From: Tim Daly
To: Gabriel Dos Reis
Subject: Re: [Fwd: Re: Building Axiom on Slackware]
Cc: Stephen Wilson

> >> > All I asked was, did anyone test the patch.
> >>
> >> Yes. It succeeds on one , and failed on another one -- the one it failed
> >> one was one you did not anticipate (a 64-bit machine that has its
> >> libs in a slightly different place) in the long list of special Makefiles.
> >
> > Excellent. Which systems were these?
> 
> As you know, my primary machines run openSUSE.

So.... openSUSE 32 bit worked. openSUSE 64 did not. 
Ok, I'll do an openSUSE 64 build.

\start
Date: Sun, 12 Apr 2009 10:58:31 +0400
From: Aleksej Saushev
To: list
Subject: Re: OpenAxiom-1.2.1 released

Tim Daly writes:

>> > Given that the goals of OpenAxiom are directly opposed to the stated
>> > project goals of Axiom, how do you see that this difference should be
>> > resolved?
>> 
>> I repeat, that from user point of view the difference between projects
>> is that one builds and another does not. While I can build FriCAS and
>> OpenAxiom, I cannot boast it with Axiom. And the impression from my side
>> is that you handle build problems ad hoc (cf. Slackware build problems):
>> each linux-based system gets its own configuration file with quite
>> uncommon content.
>
> So you didn't see the grep/egrep bug that caused FriCAS not to build?
>
>> What should be done, if I happen to need Axiom on HP-UX, is unknown.
>
> There is no claim that Axiom runs on HP-UX. It might. It might not.
>
> ...[snip]...
>
>> And from my user point of view, Axiom should adopt either FriCAS' or
>> OpenAxiom's build system, whatever is closer, or develop similar one,
>
> Please post a diff-Naur patch.

I'm not going to do any work, that is rejected before planning stage.
It is a mere waste of time, I'm not going to live forever or wait forever,
even 5 years is too much.

> You clearly believe that Axiom should adopt the "standard autoconf"
> method of building. 
>
> I clearly believe that Makefiles should go away. I believe I will
> be able to build Axiom in a portable, unified way using only 
> Common Lisp, Latex, and a browser. I'm 
>
>  * rewriting system-dependent subsystems like hyperdoc and graphics
>    into Firefox, thus we don't need libXpm

Which is asking for maintainance nightmare, since:
a) Firefox doesn't work everywhere where libXpm works;
b) Firefox is harder to fix.

>  * simplifying the internals like removing boot so we don't need to
>    depend on pre-stages to build, thus we don't need Makefiles
>  * unifying the concepts so that Axiom reads and understand latex-style 
>    chunks, thus we don't need noweb
>  * documenting everything using latex books, thus we don't need hundreds
>    of tiny .h, .c, .boot, .lisp, and other 1960s development techniques
>
> Axiom is about 1 million "things of code". It used to exist in thousands
> of files, in dozens of subdirectories, with multiple system prerequisites
> and complicated dependencies between the code parts. Autoconf is the
> "right way" to manage that pile. That's a 1990s "solution" to a 1960
> constraint of 4k memory limitations. Believe me, I was there.
>
> Axiom will eventually be 30 books written in Latex and Common Lisp.
> You will need a Latex and a standard Common Lisp and a standard browser.

"Standard browser." Does it mean, it will work in Lynx? w3m? Which one?

> For the moment, as a temporary measure, things that will go away like
> GCL's snapshots, noweb, or libXpm are "supported" in "ad-hoc" ways.

While I agree with some points, other points are simply asking for nightmare.
Autoconf may be bad, but what is there now is even worse. And what is going
to be is hardly any better.

Again, my points:

1. Axiom doesn't work.
- Because Axiom is bound to GCL (which is a piece of s... that doesn't work,
contrary to libXpm and autoconf).
- Because Axiom's build system is maintained ad hoc, even to build it
on another linux distribution you need to contact the author and wait
until he sets up another system.

2. Axiom relies on bundled software to build, which is maintainance
nightmare already.

3. Some goals, like depending on Firefox, are asking for maintainance nightmare.

>From user point of view, you have little understanding of real user needs,
even those, who are ready to try little known CAS.

To port FriCAS and OpenAxiom to Dragonfly the only thing I had to change
was OS name pattern, "*bsd*" to "*bsd*|*dragonfly*" in autoconf script.

To build OpenAxiom on FreeBSD I had to dig out some minor differences in pty
headers and libraries, with help from Gabriel I made it. Graphics (libXpm)
worked fine right off the box.

At the same time I had Firefox broken for about a year, and heard similar
complains even from Ubuntu users (thanks to Firefox' sensitivity to libraries).

_That_ is real experience.

\start
Date: Sun, 12 Apr 2009 06:16:47 -0400
From: Tim Daly
To: Aleksej Saushev
Subject: re: OpenAxiom-1.2.1 released

> I'm not going to do any work, that is rejected before planning stage.
> It is a mere waste of time, I'm not going to live forever or wait forever,
> even 5 years is too much.

...[snip]...

Axiom is a long term project. The theme is the 30 year horizon.  The
point is to make the code live despite the fact that the authors are
dead.  Just two weeks ago we lost yet another Axiom contributor.

A great deal of thought went into the design decisions and project goals.  
All of those thoughts have been documented many times in this forum.

> While I agree with some points, other points are simply asking for nightmare.
> Autoconf may be bad, but what is there now is even worse. And what is going
> to be is hardly any better.

...[snip]...

What is there now is being simplified with each iteration.
A large number of Makefiles are gone. Whole subdirectories are gone.
The whole Makefile superstructure will disappear.
Code is being re-structured, refactored, and documented.
End user documentation is improving with each release.

Exactly the points you raise are the reason FriCAS exists.
FriCAS developers removed the literate form of files in many cases.
FriCAS developers use autoconf and traditional code handling.
FriCAS developers "want it now", not 30 years from now.

If you REALLY want it now, I suggest you switch to Sage.
Sage is moving very fast, builds everywhere with a single "make",
(although not autoconf), has a huge number of active authors,
and is released every week or so. They don't want lisp at all.
But they bundle everything under the sun.

I applaud your desire to use a computer algebra system.
However, the project goals of Axiom clearly don't meet your needs.

<begin indignation rant>

P.S. As for that "piece of shit" GCL.... GCL was developed under
contract to IBM specifically for Axiom. I'm one of its (minor)
authors.  Bill Schelter, the author, was one of the finest programmers
I've known.  His death in 2000 is what caused me to call NAG about
Axiom.  What body of work have you personally authored that so
outshines GCL that you feel qualified to disparage Bill's work? What
body of patches have you submitted to GCL that improves it?  His code
is still used 9 years after his death and generates more efficient
code for Axiom than any other lisp distribution.

Bill sat at my office desk when he visited IBM to work. I once saw him
complain about something Emacs did that was failing. He stopped work,
downloaded the Emacs sources, found the problem, rebuilt Emacs, tested
it, posted a patch, and went back to the GCL task. He has patches in
Emacs, written, tested, and posted in the late 80s. He did open source
work before anyone knew what it was, quietly, efficiently, and correctly.

Bill is unable to defend himself against your remarks but I am.

You seem to be stopped by trivial build problems. 
You refuse to consider posting even minor patches. 
You feel qualified to disparage work you don't personally understand.  
You feel that wasting your time to help other people is a bad tradeoff. 
You feel that the project goals should be redefined to suit your opinions. 
You have no sense of vision beyond your own wants and needs. 
Frankly, I'm not as impressed with you as you seem to be with yourself.

Be that as it may, the Axiom mailing list is NOT the place to lightly
disparage Bill's work. He was a great programmer and I feel a need to
defend his reputation.

<end indignation rant>

\start
Date: Sun, 12 Apr 2009 08:39:01 -0400
From: Tim Daly
To: Tim Daly
Subject: Re: [Fwd: Re: Building Axiom on Slackware]
Cc: Stephen Wilson

On slackware 12.2 I applied your patch to use the Xpm shared library.
I built Axiom from scratch using the shared library.
When I started Axiom the Hyperdoc browser shows a blank page.

I downloaded and built the libXpm.a from the sources I posted.
I rebuilt Axiom from scratch using the static library.
When I started Axiom the Hyperdoc browser works normally.
Graphics also works.

My recommendation is that you build using the libXpm.a on slackware.

\start
Date: Sun, 12 Apr 2009 17:50:18 +0400
From: Aleksej Saushev
To: list
Subject: Re: OpenAxiom-1.2.1 released

Tim Daly writes:

>> I'm not going to do any work, that is rejected before planning stage.
>> It is a mere waste of time, I'm not going to live forever or wait forever,
>> even 5 years is too much.
>
> ...[snip]...
>
> Axiom is a long term project. The theme is the 30 year horizon.  The
> point is to make the code live despite the fact that the authors are
> dead.  Just two weeks ago we lost yet another Axiom contributor.

Any other active developer to stay when we lose you?
Judging from commit messages you're the single developer.

> A great deal of thought went into the design decisions and project goals.  
> All of those thoughts have been documented many times in this forum.

Sure, but who are other developers who share most of your views?  Who
is going to fix bugs and to develop Axiom (pretty little used) after
you die?

>> While I agree with some points, other points are simply asking for nightmare.
>> Autoconf may be bad, but what is there now is even worse. And what is going
>> to be is hardly any better.
>
> ...[snip]...
>
> What is there now is being simplified with each iteration.
> A large number of Makefiles are gone. Whole subdirectories are gone.
> The whole Makefile superstructure will disappear.
> Code is being re-structured, refactored, and documented.
> End user documentation is improving with each release.

Does Axiom build with CLISP or ECL on NetBSD as is right now?
It is 15 to 25% of all BSD users by different estimations.

> Exactly the points you raise are the reason FriCAS exists.
> FriCAS developers removed the literate form of files in many cases.
> FriCAS developers use autoconf and traditional code handling.
> FriCAS developers "want it now", not 30 years from now.
>
> If you REALLY want it now, I suggest you switch to Sage.
> Sage is moving very fast, builds everywhere with a single "make",
> (although not autoconf), has a huge number of active authors,
> and is released every week or so. They don't want lisp at all.
> But they bundle everything under the sun.

Do you know any impressions of Sage by real people? All those I know
prefer using individual components of Sage rather than Sage itself.

> I applaud your desire to use a computer algebra system.
> However, the project goals of Axiom clearly don't meet your needs.

This is simply delusion. I object several points of Axiom, which proved
to be wrong in practice, and you declare "project goals ... don't meet."

Was you ever told that you're idealist? that you live in ivory tower?
Honestly, this is the impression of you. I don't talk about your
professional skills those you start complaining of, I only assert that
you seem to lack understanding of target audience needs.

> <begin indignation rant>
>
> P.S. As for that "piece of shit" GCL.... GCL was developed under
> contract to IBM specifically for Axiom. I'm one of its (minor)
> authors.  Bill Schelter, the author, was one of the finest programmers
> I've known.  His death in 2000 is what caused me to call NAG about
> Axiom.  What body of work have you personally authored that so
> outshines GCL that you feel qualified to disparage Bill's work? What
> body of patches have you submitted to GCL that improves it?  His code
> is still used 9 years after his death and generates more efficient
> code for Axiom than any other lisp distribution.
>
> Bill sat at my office desk when he visited IBM to work. I once saw him
> complain about something Emacs did that was failing. He stopped work,
> downloaded the Emacs sources, found the problem, rebuilt Emacs, tested
> it, posted a patch, and went back to the GCL task. He has patches in
> Emacs, written, tested, and posted in the late 80s. He did open source
> work before anyone knew what it was, quietly, efficiently, and correctly.
>
> Bill is unable to defend himself against your remarks but I am.
>
> You seem to be stopped by trivial build problems. 

I have no time to fix "trivial" build problems. You made them not so
trivial, as do other developers.

> You refuse to consider posting even minor patches. 

I do not have much time to invest into problems that should be solved already,
exactly those problems that all other active "PanAxiom" developers consider
to be solved at the first place.

> You feel qualified to disparage work you don't personally understand.

I'm trained to understand real world, I am not a mathematician.

> You feel that wasting your time to help other people is a bad tradeoff. 

Who told you that? How many people did you help lately?

> You feel that the project goals should be redefined to suit your opinions. 

This opinion is based on real world experience. If you have facts to
support your views bring them here.

> You have no sense of vision beyond your own wants and needs. 
> Frankly, I'm not as impressed with you as you seem to be with yourself.
>
> Be that as it may, the Axiom mailing list is NOT the place to lightly
> disparage Bill's work. He was a great programmer and I feel a need to
> defend his reputation.

Like anyone attacks Bill at all.

Look, it is 2009 now, not 1989. GCL is outdated, not quite standard,
the least portable of all open source Common Lisp implementations,
one of the least supported ones too. Until quite recently, noone
answered messages on GCL lists for two years at least. Most projects
have time schedule shorter.

What of these has to do with Bill?
He died in 2000 by your own words, but everything of mentioned above
happens after.

And there're many things that changed in the real world in that time
since 2000: we saw significant glibc changes, we saw significant changes
in NetBSD and FreeBSD projects, which brought them to desktop usage,
same happens to Solaris as we talk now. How is it reflected in GCL releases?
When did the last one happen? 2004? I don't even remember now.

You accuse me in disparaging Bill's work as if he died last week.
Now come and charge me with AI winter of 70s. Get real, wake up.

All I say is that project goals should be adjusted if you want to
receive any acceptance outside yourself and (maybe your) friends.
You have some really nice ideas, but other ones are simply awful.

> <end indignation rant>

\start
Date: 12 Apr 2009 17:10:24 +0200
From: Martin Rubey
To: Aleksej Saushev
Subject: re: OpenAxiom-1.2.1 released

Aleksej Saushev writes:


> > Exactly the points you raise are the reason FriCAS exists.
> > FriCAS developers removed the literate form of files in many
> > cases.

This is a half-lie.  In many instances a substantial amount of
"literal" (i.e., LaTeX) documentation was added to FriCAS.  I do not
know whether Axiom or OpenAxiom picked it up, but I do know that I
wrote this documentation.

It is true however that FriCAS uses LaTeX only for the mathematical
part of the code, i.e., the spad files.

\start
Date: Sun, 12 Apr 2009 12:04:32 -0400
From: Stephen Wilson
To: Tim Daly
Subject: Re: [Fwd: Re: Building Axiom on Slackware]

Hi Tim,

On Sun, Apr 12, 2009 at 08:39:01AM -0400, root wrote:
> On slackware 12.2 I applied your patch to use the Xpm shared library.
> I built Axiom from scratch using the shared library.
> When I started Axiom the Hyperdoc browser shows a blank page.

Too strange! ;) Works fine for me on Slackware 12.1.0, which uses the same xpm
library version as 12.2.0.  I have also been using this patch on slackware
distros back to versions which provided a static lib.

This seems doubly strange in that linking the dynamic lib works for other
distros (the fedora 10 makefile, for example).

Perhaps when I upgrade a slackware machine I will revisit this issue.

\start
Date: Sun, 12 Apr 2009 13:58:29 -0500
From: Gabriel Dos Reis
To: Martin Rubey
Subject: re: OpenAxiom-1.2.1 released

On Sun, Apr 12, 2009 at 10:10 AM, Martin Rubey
Martin Rubey wrote:
> Aleksej Saushev writes:

> It is true however that FriCAS uses LaTeX only for the mathematical
> part of the code, i.e., the spad files.

This is the case for OpenAxiom.

\start
Date: Sun, 12 Apr 2009 16:20:29 -0400
From: Tim Daly
To: Stephen Wilson
Subject: Re: [Fwd: Re: Building Axiom on Slackware]

> > On slackware 12.2 I applied your patch to use the Xpm shared library.
> > I built Axiom from scratch using the shared library.
> > When I started Axiom the Hyperdoc browser shows a blank page.
> 
> Too strange! ;) Works fine for me on Slackware 12.1.0, which uses the same xpm
> library version as 12.2.0.  I have also been using this patch on slackware
> distros back to versions which provided a static lib.
> 
> This seems doubly strange in that linking the dynamic lib works for other
> distros (the fedora 10 makefile, for example).
> 
> Perhaps when I upgrade a slackware machine I will revisit this issue.

Ok. It is entirely possible I made some mistake.
I'll nuke the slackware install and rebuild it from scratch.
This time I'll install everything and see if that changes the behavior.

\start
Date: Sun, 12 Apr 2009 16:25:12 -0400
From: Tim Daly
To: Stephen Wilson
Subject: Re: [Fwd: Re: Building Axiom on Slackware]

> > On slackware 12.2 I applied your patch to use the Xpm shared library.
> > I built Axiom from scratch using the shared library.
> > When I started Axiom the Hyperdoc browser shows a blank page.
> 
> Too strange! ;) Works fine for me on Slackware 12.1.0, which uses the same xpm
> library version as 12.2.0.  I have also been using this patch on slackware
> distros back to versions which provided a static lib.
> 
> This seems doubly strange in that linking the dynamic lib works for other
> distros (the fedora 10 makefile, for example).
> 
> Perhaps when I upgrade a slackware machine I will revisit this issue.

I've uploaded the binary for slackware (static library version, it will
take me a while to construct the shared library version again).
Could you please test it on your machine?

http://axiom-developer.org/axiom-website/downloads/axiom-slackware-mar2009-bin.tgz

\start
Date: Sun, 12 Apr 2009 17:10:33 -0400
From: Stephen Wilson
To: Tim Daly
Subject: Re: [Fwd: Re: Building Axiom on Slackware]

On Sun, Apr 12, 2009 at 04:25:12PM -0400, root wrote:
> I've uploaded the binary for slackware (static library version, it will
> take me a while to construct the shared library version again).
> Could you please test it on your machine?

I upgraded to 12.2.0.  The binary works fine on the new 12.2.0 -- but I am
confused:

   > ldd axiom/mnt/slackware/bin/hypertex
     ...
     libXpm.so.4 => /usr/lib/libXpm.so.4 (0xb7f75000)
     ...

   > objdump -x axiom/mnt/slackware/bin/hypertex | grep Xpm
       NEEDED                libXpm.so.4
     00000000        F *UND*  00000000              XpmWriteFileFromImage
     00000000        F *UND*  00000000              XpmReadFileToImage

Looks like everything was built using a shared libXpm.

I will let you know how my local build finishes up.

\start
Date: Sun, 12 Apr 2009 17:36:40 -0400
From: Stephen Wilson
To: Tim Daly
Subject: Re: [Fwd: Re: Building Axiom on Slackware]

On Sun, Apr 12, 2009 at 05:10:33PM -0400, Stephen Wilson wrote:
> I upgraded to 12.2.0.  The binary works fine on the new 12.2.0

Well, the binary does have a problem.  Looks like GCL was built with a bad path
perhaps?  For example:

  (1) -> )fin
  BOOT> (defun foo ())

  FOO

  BOOT>(compile 'foo)
  cc1: error: /root/axiom/mnt/slackware/bin/..h: Permission denied

  Correctable error: (SYSTEM "gcc -c -Wall -DVOL=volatile -fsigned-char -pipe
  -I/root/axiom/mnt/slackware/bin/../h -O3 -fomit-frame-pointer
  -c \"/tmp/gazonk4.c\" -o \"/tmp/gazonk4.o\" -q") returned a non-zero value 0.

Regardless, a fresh build is clearly in order.

\start
Date: Sun, 12 Apr 2009 21:01:37 -0400
From: Tim Daly
To: Stephen Wilson
Subject: Re: [Fwd: Re: Building Axiom on Slackware]

Well, just for superstition I did a rebuild of Axiom using shared
libraries before I did a complete slackware install. The Hyperdoc
home page still showed up blank.

Next I completely reformatted the machine, did a slackware install
but this time I let it install everything from the DVD (4.2 Gigs),
refetched Axiom sources, added your patch, and did an Axiom build.

This one appears to work with the shared library.
Please test it on your install:

http://axiom-developer.org/axiom-website/downloads/axiom-slackware-mar2009-bin.tgz

I'll rebuild all of the other platforms and see if or where it succeeds.

\start
Date: Sun, 12 Apr 2009 21:03:47 -0400
From: Tim Daly
To: Stephen Wilson
Subject: Re: [Fwd: Re: Building Axiom on Slackware]

> perhaps?  For example:
> 
>   (1) -> )fin
>   BOOT> (defun foo ())
> 
>   FOO
> 
>   BOOT>(compile 'foo)
>   cc1: error: /root/axiom/mnt/slackware/bin/..h: Permission denied
> 
>   Correctable error: (SYSTEM "gcc -c -Wall -DVOL=volatile -fsigned-char -pipe
>   -I/root/axiom/mnt/slackware/bin/../h -O3 -fomit-frame-pointer
>   -c \"/tmp/gazonk4.c\" -o \"/tmp/gazonk4.o\" -q") returned a non-zero value 0.
> 

This is new behavior and clearly a bug.
I've added it to the bug list as bug 7191.

\start
Date: Sun, 12 Apr 2009 19:31:59 -0500
From: Tim Daly
To: list
Subject: 20090412.01.tpd.patch (bookvol5 fix event chain)

The translation assumed that CASE was possible but the arguments
used the values, not the symbol names.
===================================================================
diff --git a/books/bookvol5.pamphlet b/books/bookvol5.pamphlet
index 66f7caa..438b94c 100644
--- a/books/bookvol5.pamphlet
+++ b/books/bookvol5.pamphlet
@@ -548,13 +548,23 @@ The system commands are handled by the function kept in the ``hook''
 variable \verb|$systemCommandFunction| which
 has the default function \verb|InterpExecuteSpadSystemCommand|.
 Thus, when a system command is entered this function is called.
+
+The \verb|$promptMsg| variable is set to the constant S2CTP023. This 
+constant points to a message in src/doc/msgs/s2-us.msgs. This message
+does nothing but print the argument value.
+\defdollar{promptMsg}
+<<initvars>>=
+(defvar |$promptMsg| 'S2CTP023)
+
+@
+
 <<defun SpadInterpretStream>>=
 (defun |SpadInterpretStream| (str source interactive?) 
- (let (|$promptMsg| |$shoeReadLineFunction| |$systemCommandFunction| 
+ (let (|$promptMsg| |$systemCommandFunction| 
        |$ncMsgList| |$erMsgToss| |$lastPos| |$inclAssertions| 
        |$okToExecuteMachineCode| |$newcompErrorCount| |$newcompMode| 
        |$libQuiet| |$fn|)
-  (declare (special |$promptMsg| |$shoeReadLineFunction| 
+  (declare (special |$promptMsg| 
             |$systemCommandFunction| |$ncMsgList| |$erMsgToss| |$lastPos| 
             |$inclAssertions| |$okToExecuteMachineCode| |$newcompErrorCount| 
             |$newcompMode| |$libQuiet| |$fn| |$nopos|))
@@ -568,7 +578,6 @@ Thus, when a system command is entered this function is called.
   (setq |$erMsgToss| nil) 
   (setq |$ncMsgList| nil) 
   (setq |$systemCommandFunction| #'|InterpExecuteSpadSystemCommand|) 
-  (setq |$shoeReadLineFunction| #'|serverReadLine|) 
   (setq |$promptMsg| 's2ctp023) 
   (if interactive? 
    (progn 
@@ -905,12 +914,13 @@ this is what the current code does so I won't change it.
          (when |$NeedToSignalSessionManager|
           (|sockSendInt| |$SessionManager| |$EndOfOutput|))
       (setq |$NeedToSignalSessionManager| nil)
-      (case  (|serverSwitch|)
-       (|$CallInterp|
+      (setq action (|serverSwitch|))
+      (cond 
+       ((= action |$CallInterp|)
         (setq l (|read-line| stream))
         (setq |$NeedToSignalSessionManager| t)
         (return l))
-       (|$CreateFrame|
+       ((= action |$CreateFrame|)
         (setq framename (gentemp "frame"))
         (|addNewInterpreterFrame| framename)
         (setq |$frameAlist|
@@ -920,23 +930,23 @@ this is what the current code does so I won't change it.
         (|sockSendInt| |$SessionManager| |$frameNumber|)
         (setq |$frameNumber| (plus |$frameNumber| 1))
         (|sockSendString| |$SessionManager| (mkprompt)))
-       (|$SwitchFrames|
+       ((= action |$SwitchFrames|)
         (setq |$currentFrameNum| (|sockGetInt| |$SessionManager|))
         (setq currentframe (lassoc |$currentFrameNum| |$frameAlist|))
         (|changeToNamedInterpreterFrame| currentframe))
-       (|$EndSession|
+       ((= action |$EndSession|)
         (setq |$EndServerSession| t))
-       (|$LispCommand|
+       ((= action |$LispCommand|)
         (setq |$NeedToSignalSessionManager| t)
         (setq stringbuf (make-string |$sockBufferLength|))
         (|sockGetString| |$MenuServer| stringbuf |$sockBufferLength|)
         (setq form
          (|unescapeStringsInForm| (read-from-string stringbuf)))
         (|protectedEVAL| form))
-       (|$QuietSpadCommand|
+       ((= action |$QuietSpadCommand|)
         (setq |$NeedToSignalSessionManager| t)
         (|executeQuietCommand|))
-       (|$SpadCommand|
+       ((= action |$SpadCommand|)
         (setq |$NeedToSignalSessionManager| t)
         (setq stringbuf (make-string 512))
         (|sockGetString| |$MenuServer| stringbuf 512)
@@ -946,8 +956,8 @@ this is what the current code does so I won't change it.
            (|parseAndInterpret| stringbuf))))
         (princ (mkprompt))
         (finish-output))
-       (|$NonSmanSession| (setq |$SpadServer| nil))
-       (|$KillLispSystem| (bye))
+       ((= action |$NonSmanSession|) (setq |$SpadServer| nil))
+       ((= action |$KillLispSystem|) (bye))
        (t nil))))
     (cond
      (line line)
@@ -16468,7 +16478,7 @@ o )library
 @
 \chapter{The Spad Server Mechanism}
 <<initvars>>=
-(defvar $openServerIfTrue t "t means try starting an open server")
+(defvar $openServerIfTrue nil "t means try starting an open server")
 
 @
 <<initvars>>=
@@ -16960,7 +16970,6 @@ $relative-library-directory-list
 |$seen|
 |$SessionManager|
 |$setOptions|
-|$shoeReadLineFunction|
 |$slamFlag|
 /sourcefiles
 |$sourceFiles|
@@ -17496,11 +17505,9 @@ curoutstream                 & ncIntLoop           & \\
                              & recordFrame         & recordFrame \\
 \$printLoadMsgs              & restart             & \\
 \$PrintCompilerMessageIfTrue & spad                & \\
-\$promptMsg                  & SpadInterpretStream & \\
 \$relative-directory-list    &                     & reroot \\
 \$relative-library-directory-list &                & reroot \\
 \$reportUndo                 & initvars            & diffAlist \\
-\$shoeReadLineFunction       & SpadInterpretStream & \\
 \$spad                       & ncTopLevel          & \\
 \$spadroot                   & reroot              & initroot \\
                              &                     & make-absolute-filename \\
@@ -17792,11 +17799,6 @@ will be used as an open server, probably for OpenMath use.
 
 If an open server is not requested then this variable to NIL
 
-\subsection{\$promptMsg}
-The \verb|$promptMsg| variable is set to the constant S2CTP023. This 
-constant points to a message in src/doc/msgs/s2-us.msgs. This message
-does nothing but print the argument value.
-
 \subsection{\$relative-directory-list}
 The \verb|$relative-directory-list| is used in reroot to create 
 \verb|$directory-list| which is a list of absolute directory names.
@@ -17814,10 +17816,6 @@ to T then we call reportUndo.
 
 It is part of the undo mechanism.
 
-\subsection{\$shoeReadLineFunction}
-The \verb|$shoeReadLineFunction| is set in SpadInterpretStream
-to point to the serverReadLine 
-
 \subsection{\$spadroot}
 The \verb|$spadroot| variable is the internal name for the AXIOM
 shell variable. 
diff --git a/changelog b/changelog
index 5793186..2c5fbac 100644
--- a/changelog
+++ b/changelog
@@ -1,5 +1,8 @@
+20090412 tpd src/axiom-website/patches.html 20090412.01.tpd.patch
+20090412 tpd books/bookvol5 fix event comparison case chain bug
 20090410 tpd src/axiom-website/patches.html 20090410.03.tpd.patch
 20090410 tpd faq 50: Cannot find libXpm.a
+20090410 tpd src/axiom-website/patches.html 20090410.02.tpd.patch
 20090410 tpd src/interp/server.boot move interpreter code into bookvol5
 20090410 tpd src/interp/incl.boot move interpreter code into bookvol5
 20090410 tpd books/bookvol5 move more interpreter code
diff --git a/src/axiom-website/patches.html b/src/axiom-website/patches.html
index fadb4e8..66d6ce3 100644
--- a/src/axiom-website/patches.html
+++ b/src/axiom-website/patches.html
@@ -1064,5 +1064,7 @@ fix regress format<br/>
 bookvol5 add more interpreter code<br/>
 <a href="patches/20090410.03.tpd.patch">20090410.03.tpd.patch</a>
 faq 50: Cannot find libXpm.a<br/>
+<a href="patches/20090412.01.tpd.patch">20090412.01.tpd.patch</a>
+bookvol5 fix event comparison case chain bug<br/>
  </body>
 </html>

\start
Date: Sun, 12 Apr 2009 18:17:42 -0700 (PDT)
From: Cliff Yapp
To: list
Subject: Re: OpenAxiom-1.2.1 released

On Sunday 12 April 2009 09:50:18 Aleksej Saushev wrote:
>
> > I applaud your desire to use a computer algebra system.
> > However, the project goals of Axiom clearly don't meet your needs.
>
> This is simply delusion. I object several points of Axiom, which proved
> to be wrong in practice, and you declare "project goals ... don't meet."
>
> Was you ever told that you're idealist?

Personally, that's one of the things I admire about Tim and the Axiom
project - idealism.

> that you live in ivory tower?
> Honestly, this is the impression of you. I don't talk about your
> professional skills those you start complaining of, I only assert that
> you seem to lack understanding of target audience needs.

I don't presume to speak for Tim or the Axiom project, but I always
had the impression that the goal was to CREATE the target audience -
to reshape the approach the world takes to computer algebra and this
type of software, using Axiom to lead by example.  In my opinion, this
is something to be respected.  There is of course a risk that this
type of experiment will not succeed in attracting the support required
for long term viability, but I personally don't see that as a reason
to avoid performing the experiment.  In any case, the literate nature
of the work should help preserve its value for the long term, by
making it easier for someone else to use the knowledge embodied in
Axiom.

If you look into the email archives around the time of the forks, you
will see that the arguments at the time sound similar to the points
you are raising now.  The forks were not undertaken lightly.  The
goals of OpenAxiom and Fricas (as I understand it, the project devs of
course can speak to this much better) are very much along the more
immediately practical lines you are suggesting.  I certainly recommend
both projects - I have a great deal of respect for the teams working
on them.  They have been and are making exciting progress.

\start
Date: Sun, 12 Apr 2009 22:02:09 -0400
From: Stephen Wilson
To: Tim Daly
Subject: Re: [Fwd: Re: Building Axiom on Slackware]

On Sun, Apr 12, 2009 at 09:03:47PM -0400, root wrote:
> This is new behavior and clearly a bug.
> I've added it to the bug list as bug 7191.

Looks like it has been an issue before.  See the short thread starting at:

 http://lists.nongnu.org/archive/html/axiom-developer/2007-10/msg00010.html

A brief read of the GCL docs concerning si:*lib-directory* and
si:*system-directory* indicate to me that one course of action would be to set
si:*system-directory* to the value of $AXIOM/bin at runtime, instead of at build
time as currently done in interp/Makefile.pamphlet in the savesys stanza:

   @ echo '#+:akcl (setq si::*system-directory* "${SPAD}/bin/")' \
               >> ${OUT}/makeint.lisp

For example, the following works:

  (1) -> )fin
  BOOT>(defun foo ())

  FOO

  BOOT>(setq si::*system-directory*
             (concatenate 'string (getenv "AXIOM") "/bin"))

  "/home/steve/tmp/axiom/mnt/slackware/bin"

  BOOT>(compile 'foo)

  #<compiled-function FOO>

Perhaps extending boot::restart with logic similar to the above is a reasonable
path forward?

\start
Date: Sun, 12 Apr 2009 23:30:28 -0400
From: Stephen Wilson
To: Tim Daly
Subject: Re: [Fwd: Re: Building Axiom on Slackware]

On Sun, Apr 12, 2009 at 09:01:37PM -0400, root wrote:
> This one appears to work with the shared library.
> Please test it on your install:
>
> http://axiom-developer.org/axiom-website/downloads/axiom-slackware-mar2009-bin.tgz

Looks good here, aside from the system-directory issue.

In addition, my local build on 12.2.0 finished and seems fine.

\start
Date: Mon, 13 Apr 2009 00:32:34 -0400
From: Tim Daly
To: Stephen Wilson
Subject: Re: [Fwd: Re: Building Axiom on Slackware]

Thanks for the test and the bug fix for directories.
That fix is queued behind 2 other changes in the change queue.

\start
Date: Mon, 13 Apr 2009 05:50:32 +0200
From: Michael Becker
To: list
Subject: axiom-mar2009 release : )edit filename does not work


    hi,

    Hyperdoc states, that the command ')edit /tmp/xyz.txt'  uses the
    value of the shell variable EDITOR but:


                       AXIOM Computer Algebra System
                         Version: Axiom (March 2009)
               Timestamp: Tuesday March 31, 2009 at 17:30:37
....
....
(1) -> )system echo $EDITOR
vi) ->
(1) -> )edit /tmp/xyz.txt
sh: /usr_local/axiom0309/mnt/opensuse/lib/SPADEDIT: No such file or =
directory

\start
Date: Mon, 13 Apr 2009 01:49:53 -0400
From: Tim Daly
To: Michael Becker
Subject: Re: axiom-mar2009 release : )edit filename does not work

Michael,

Thanks. I can reproduce that. Its a missing script and I'll add it.

You can put this in your $AXIOM/lib subdirectory, do a chmod +x SPADEDIT
and it will work:

=====================================================================
#!/bin/sh
# this script is invoked by the spad )edit command
# can be replaced by users favorite editor
# optional second argument should be character offset in file

thefile=$1
if [ ! -f $1 ] ; then 
  thefile=$AXIOM/../../src/algebra/$1
else
  thefile=$1
fi


if [ $# = 2 ] ; then
	START=`grep -n \^$2\( $thefile | awk -F: '{print $1}'`
else
	START=1
fi

if [ ! "$EDITOR" ] ; then
	EDITOR=vi
fi

if [ "$DISPLAY" ] ; then
	if [ "$EDITOR" = "emacs" ] ; then
		emacs  +$START $thefile &
	elif [ "$EDITOR" = "vi" ] ; then
		xterm -e vi +$START $thefile &
        else
		xterm -e $EDITOR $thefile &
	fi
else
	$EDITOR $thefile
fi

\start
Date: Mon, 13 Apr 2009 09:48:05 -0500
From: Tim Daly
To: list
Subject: 20090413.01.tpd.patch (bookvol12 add Gelernter's observations)

David Gelernter made several observations about the way we currently
are limited by the desktop metaphor. These have a bearing on my thoughts
about the Crystal interface, which were recorded in bookvol12: Axiom Crystal

========================================================================
diff --git a/books/bookvol12.pamphlet b/books/bookvol12.pamphlet
index 5fed721..123cb31 100644
--- a/books/bookvol12.pamphlet
+++ b/books/bookvol12.pamphlet
@@ -299,6 +299,83 @@ November 10, 2003 ((iHy))
 \pagenumbering{arabic}
 \setcounter{chapter}{0} % Chapter 1
 \chapter{Axiom Crystal Design}
+\section{Book presentation}
+In the book "Science at the Edge" by John Brockman
+(ISBN 978-1-4027-5450-0),
+in the chapter "The second coming -- A manifesto" by David Gelernter,
+David talks about the way we interact with computers. This has some
+bearing on the crystal notion.
+
+\subsection{Book spines}
+David points out that we currently have a "desktop metaphor" which
+allows us to view our computer interactions as though we were moving
+things around on a desktop, typically folders and documents. There are
+several limitations of this metaphor.
+
+The first is that there is a limited amount of space on the desktop.
+He proposes the idea of a landscape where the computer is just a moving
+window. This gives much more real estate to hold information.
+
+The lack of desktop space leads to the icon idea to capture a small
+representation of a document or folder. There are limitations to how
+representative such a tiny image can be of the original. A book spine
+is an excellent representation of the contents of a book but a tiny
+picture of a folder, not so much.
+
+If I look at this idea in terms of the Crystal concept I can
+see two parallels. The first idea (desktop/icon) vs (landscape/book)
+is related to the organization of Axiom. There is an ongoing effort
+to organize the whole of the system into some small number of books.
+The whole system is then somewhat similar to an encyclopedia where
+there is a shelf of related information. 
+
+Currently the algebra books are on the order of 5000 pages of raw
+material. They will likely grow many times that size as literate
+information is added. One website representation would show the
+Axiom books as book-spines where the algebra section could be
+broken up (visually, not actually) as encyclopedia-like images.
+Thus, you would find the algebra "books" from A-C, D-F, etc.
+
+\subsection{Linking information}
+
+A second idea from the book is the limitations of the hierarchical
+file system idea. Why does a particular file have to have a name?
+Why does a particular file only live in one folder?
+
+For the first question, he comments that if you had 3 dogs it is reasonable
+to name them. But if you have 10,000 cows it probably is not. Some
+information can be anonymous.
+
+For the second question, he asks why doesn't a folder "grab" the 
+information so that a particular file might not reside in multiple
+folders. Unix has this idea embodied in links but Windows doesn't
+support the idea.
+
+He suggests that it might be reasonable to have the folders be active
+so that a particular piece of information, say a travel receipt, might
+be "grabbed" by the taxes folder and the travel expense folder.
+
+Crystal's view of this is somewhat different. Information isn't named.
+It resides in "the problem" floating in space. The naming of information
+is related to the view. 
+
+So if we take a problem in space, say all of your financial information
+and wrap a crystal around it we can view it in multiple ways, each of
+which represents a "facet". Moving between these views corresponds to
+rotating the crystal to view "the problem" through a different facet.
+
+So, in a financial crystal, you might have a taxes facet, a travel
+expense facet, an assets facet, a checkbook facet, etc. A travel
+receipt from a business trip which was added to "the problem' would
+show up in all of these facets in different ways. It is up to the
+facet to organize this piece of information into its proper place
+based on the intent of the facet.
+
+"The problem" just is. The meaning of the problem, the division of the
+problem into parts, the naming of the parts, the organization of the
+parts, indeed, the very idea that a problem has parts is a function of
+the facet, not a function of the problem.
+
 \chapter{Experiments}
 \section{Hide/Show a div element}
 Here we demonstrate the ability to hide or show a named div element.
diff --git a/changelog b/changelog
index 2c5fbac..e358c2b 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,5 @@
+20090412 tpd src/axiom-website/patches.html 20090413.01.tpd.patch
+20090413 tpd books/bookvol12 add Gelernter's observations
 20090412 tpd src/axiom-website/patches.html 20090412.01.tpd.patch
 20090412 tpd books/bookvol5 fix event comparison case chain bug
 20090410 tpd src/axiom-website/patches.html 20090410.03.tpd.patch
diff --git a/src/axiom-website/patches.html b/src/axiom-website/patches.html
index 66d6ce3..f292865 100644
--- a/src/axiom-website/patches.html
+++ b/src/axiom-website/patches.html
@@ -1066,5 +1066,7 @@ bookvol5 add more interpreter code<br/>
 faq 50: Cannot find libXpm.a<br/>
 <a href="patches/20090412.01.tpd.patch">20090412.01.tpd.patch</a>
 bookvol5 fix event comparison case chain bug<br/>
+<a href="patches/20090413.01.tpd.patch">20090413.01.tpd.patch</a>
+bookvol12 add Gelernter's observations<br/>
  </body>
 </html>

\start
Date: Mon, 13 Apr 2009 17:35:05 -0500
From: Tim Daly
To: list
Subject: 20090413.02.tpd.patch (bookvol5 add more interpreter code)

More of the top level reading code was added.
The hypertex.boot file was removed and added to bookvol5.
Constants were moved from sockio.lisp

=======================================================================
diff --git a/books/bookvol5.pamphlet b/books/bookvol5.pamphlet
index 438b94c..73cb801 100644
--- a/books/bookvol5.pamphlet
+++ b/books/bookvol5.pamphlet
@@ -75,6 +75,27 @@
 \index{\${#1}!defvar}}
 
 %%
+%% defconst marks a constant definition and adds it to the index
+%%
+\newcommand{\defconstant}[1]{% e.g. \defconst{varname}
+\subsection{defconstant \${#1}}%
+\label{#1}%
+\index{#1}%
+\index{defconstant!#1}%
+\index{#1!defconstant}}
+
+
+%%
+%% defdollar marks a var definition (with leading $) and adds it to the index
+%%
+\newcommand{\defdollarconstant}[1]{% e.g. \defdollarconstant{functionname}
+\subsection{defconstant \${#1}}%
+\label{#1}%
+\index{\${#1}}%
+\index{defconstant!\${#1}}%
+\index{\${#1}!defconstant}}
+
+%%
 %% pagehead consolidates standard page indexing
 %%
 \newcommand{\pagehead}[2]{% e.g. \pagehead{name}{abb}
@@ -891,6 +912,163 @@ this is what the current code does so I won't change it.
 
 @
 
+\section{Session Manager communication constants}
+These constants appear twice, the second one is for the boot language.
+\defdollarconstant{SessionManager}
+<<initconsts>>=
+(defconstant SessionManager 1)
+(defconstant |$SessionManager| SessionManager)
+
+@
+\defdollarconstant{ViewportServer}
+<<initconsts>>=
+(defconstant ViewportServer 2)
+(defconstant |$ViewportServer| ViewportServer)
+
+@
+\defdollarconstant{MenuServer}
+<<initconsts>>=
+(defconstant MenuServer 3)
+(defconstant |$MenuServer| MenuServer)
+
+@
+\defdollarconstant{SessionIO}
+<<initconsts>>=
+(defconstant SessionIO 4)
+(defconstant |$SessionIO| SessionIO)
+
+@
+\defdollarconstant{MessageServer}
+<<initconsts>>=
+(defconstant MessageServer 5)
+(defconstant |$MessageServer| MessageServer)
+
+@
+\defdollarconstant{InterpWindow}
+<<initconsts>>=
+(defconstant InterpWindow 6)
+(defconstant |$InterpWindow| InterpWindow)
+
+@
+\defdollarconstant{KillSpad}
+<<initconsts>>=
+(defconstant KillSpad 7)
+(defconstant |$KillSpad| KillSpad)
+
+@
+\defdollarconstant{DebugWindow}
+<<initconsts>>=
+(defconstant DebugWindow 8)
+(defconstant |$DebugWindow| DebugWindow)
+
+@
+\defdollarconstant{NAGLinkServer}
+<<initconsts>>=
+(defconstant NAGLinkServer 8)
+(defconstant |$NAGLinkServer| NAGLinkServer)
+
+@
+\defdollarconstant{Forker}
+<<initconsts>>=
+(defconstant Forker 9)
+(defconstant |$Forker| Forker)
+
+@
+
+\section{Session Manager action requests}
+These constants are used to communicate to the session manager.
+They appear to only be used to initialize the boot dollar variables.
+\defdollarconstant{CreateFrame}
+<<initconsts>>=
+(defconstant CreateFrame 1)
+(defconstant |$CreateFrame| CreateFrame)
+
+@
+\defdollarconstant{SwitchFrames}
+<<initconsts>>=
+(defconstant SwitchFrames 2)
+(defconstant |$SwitchFrames| SwitchFrames)
+
+@
+\defdollarconstant{EndOfOutput}
+<<initconsts>>=
+(defconstant EndOfOutput 3)
+(defconstant |$EndOfOutput| EndOfOutput)
+
+@
+\defdollarconstant{CallInterp}
+<<initconsts>>=
+(defconstant CallInterp 4)
+(defconstant |$CallInterp| CallInterp)
+
+@
+\defdollarconstant{EndSession}
+<<initconsts>>=
+(defconstant EndSession 5)
+(defconstant |$EndSession| EndSession)
+
+@
+\defdollarconstant{LispCommand}
+<<initconsts>>=
+(defconstant LispCommand 6)
+(defconstant |$LispCommand| LispCommand)
+
+@
+\defdollarconstant{SpadCommand}
+<<initconsts>>=
+(defconstant SpadCommand 7)
+(defconstant |$SpadCommand| SpadCommand)
+
+@
+\defdollarconstant{SendXEventToHyperTeX}
+<<initconsts>>=
+(defconstant SendXEventToHyperTeX 8)
+(defconstant |$SendXEventToHyperTeX| SendXEventToHyperTeX)
+
+@
+\defdollarconstant{QuietSpadCommand}
+<<initconsts>>=
+(defconstant QuietSpadCommand 9)
+(defconstant |$QuietSpadCommand| QuietSpadCommand)
+
+@
+\defdollarconstant{CloseClient}
+<<initconsts>>=
+(defconstant CloseClient 10)
+(defconstant |$CloseClient| CloseClient)
+
+@
+\defdollarconstant{QueryClients}
+<<initconsts>>=
+(defconstant QueryClients 11)
+(defconstant |$QueryClients| QueryClients)
+
+@
+\defdollarconstant{QuerySpad}
+<<initconsts>>=
+(defconstant QuerySpad 12)
+(defconstant |$QuerySpad| QuerySpad)
+
+@
+\defdollarconstant{NonSmanSession}
+<<initconsts>>=
+(defconstant NonSmanSession 13)
+(defconstant |$NonSmanSession| NonSmanSession)
+
+@
+\defdollarconstant{KillLispSystem}
+<<initconsts>>=
+(defconstant KillLispSystem 14)
+(defconstant |$KillLispSystem| KillLispSystem)
+
+@
+\defdollarconstant{CreateFrameAnswer}
+<<initconsts>>=
+(defconstant CreateFrameAnswer 50)
+(defconstant |$CreateFrameAnswer| CreateFrameAnswer)
+
+@
+
 \defun{serverReadLine}{serverReadLine}
 <<defun serverReadLine>>=
 (defun |serverReadLine| (stream)
@@ -16968,7 +17146,6 @@ $newspad
 $relative-directory-list
 $relative-library-directory-list
 |$seen|
-|$SessionManager|
 |$setOptions|
 |$slamFlag|
 /sourcefiles
@@ -17015,9 +17192,190 @@ error
 stringimage
 \end{verbatim}
 
+\chapter{Hypertex Service Handling}
+\defdollarconstant{LinkToPage}
+<<defconsts>>=
+(defconstant |$LinkToPage| 96) 
+
+@
+\defdollarconstant{StartPage}
+<<defconsts>>=
+(defconstant |$StartPage| 97) 
+
+@
+\defdollarconstant{SendLine}
+<<defconsts>>=
+(defconstant |$SendLine| 98) 
+
+@
+\defdollarconstant{EndOfPage}
+<<defconsts>>=
+(defconstant |$EndOfPage| 99) 
+
+@
+\defdollarconstant{PopUpPage}
+<<defconsts>>=
+(defconstant |$PopUpPage| 95) 
+
+@
+\defdollarconstant{PopUpNamedPage}
+<<defconsts>>=
+(defconstant |$PopUpNamedPage| 94) 
+
+@
+\defdollarconstant{KillPage}
+<<defconsts>>=
+(defconstant |$KillPage| 93) 
+
+@
+\defdollarconstant{ReplacePage}
+<<defconsts>>=
+(defconstant |$ReplacePage| 92) 
+
+@
+\defdollarconstant{ReplaceNamedPage}
+<<defconsts>>=
+(defconstant |$ReplaceNamedPage| 91) 
+
+@
+\defdollarconstant{SpadError}
+<<defconsts>>=
+(defconstant |$SpadError| 90) 
+
+@
+\defdollarconstant{PageStuff}
+<<defconsts>>=
+(defconstant |$PageStuff| 100) 
+
+@
+\defun{issueHT}{Issue a line of HyperTex}
+<<defun issueHT>>=
+(defun |issueHT| (line)
+ "Issue a line of HyperTex"
+ (declare (special |$MenuServer| |$SendLine|))
+ (|sockSendInt| |$MenuServer| |$SendLine|)
+ (|sockSendString| |$MenuServer| line))
+
+@
+\defun{endHTPage}{Mark the end of a hyperdoc page}
+<<defun endHTPage>>=
+(defun |endHTPage| ()
+ "Mark the end of a hyperdoc page"
+ (declare (special |$MenuServer| |$EndOfPage|))
+ (|sockSendInt| |$MenuServer| |$EndOfPage|))
+
+@
+\defun{testPage}{Generate a Hyperdoc Test Page from Lisp}
+<<defun testPage>>=
+(defun |testPage| ()
+ "Generate a Hyperdoc Test Page from Lisp"
+ (|startHTPage| 50) 
+ (|issueHT| "\\page{TestPage}{Test Page generated from Lisp} ")
+ (|issueHT| "\\horizontalline\\beginscroll\\beginitems ")
+ (|issueHT| "\\item \\downlink{Quayle Jokes}{ChickenPage} \\space{2} ")
+ (|issueHT| "The misadventures of the White House bellboy. ")
+ (|issueHT| "\\enditems\\endscroll\\autobuttons ")
+ (|endHTPage|))
+
+@
+\defun{replaceNamedHTPage}{Replace a current hypertex page}
+<<defun replaceNamedHTPage>>=
+(defun |replaceNamedHTPage| (window name)
+ "Replace a current hypertex page"
+ (declare (special |$MenuServer| |$PageStuff| |$currentFrameNum|
+    |$ReplaceNamedPage|))
+ (|sockSendInt| |$MenuServer| |$PageStuff|)
+ (|sockSendInt| |$MenuServer| |$currentFrameNum|)
+ (|sockSendInt| |$MenuServer| |$ReplaceNamedPage|)
+ (|sockSendInt| |$MenuServer| window)
+ (|sockSendString| |$MenuServer| name))
+
+@
+\defun{startHTPopUpPage}{Start up a form page from spad}
+<<defun startHTPopUpPage>>=
+(defun |startHTPopUpPage| (cols)
+ "Start up a form page from spad"
+ (declare (special |$MenuServer| |$PageStuff| |$currentFrameNum| |$PopUpPage|))
+ (|sockSendInt| |$MenuServer| |$PageStuff|)
+ (|sockSendInt| |$MenuServer| |$currentFrameNum|)
+ (|sockSendInt| |$MenuServer| |$PopUpPage|)
+ (|sockSendInt| |$MenuServer| cols)
+ (|sockGetInt| |$MenuServer|))
+
+@
+\defun{startHTPage}{Start a page from spad}
+<<defun startHTPage>>=
+(defun |startHTPage| (cols)
+ "Start a page from spad.  Using the spcified number of columns"
+ (declare (special |$MenuServer| |$PageStuff| |$currentFrameNum| |$StartPage|))
+ (|sockSendInt| |$MenuServer| |$PageStuff|)
+ (|sockSendInt| |$MenuServer| |$currentFrameNum|)
+ (|sockSendInt| |$MenuServer| |$StartPage|)
+ (|sockSendInt| |$MenuServer| cols))
+
+@
+\defun{startReplaceHTPage}{Start a replace page sequence}
+<<defun startReplaceHTPage>>=
+(defun |startReplaceHTPage| (w)
+ "Start a replace page sequence"
+ (declare (special |$MenuServer| |$PageStuff| |$currentFrameNum| 
+    |$ReplacePage|))
+ (|sockSendInt| |$MenuServer| |$PageStuff|)
+ (|sockSendInt| |$MenuServer| |$currentFrameNum|)
+ (|sockSendInt| |$MenuServer| |$ReplacePage|)
+ (|sockSendInt| |$MenuServer| w))
+
+@
+\defun{killHTPage}{Kill a hyperdoc page}
+<<defun killHTPage>>=
+(defun |killHTPage| (w)
+ "Kill a hyperdoc page"
+ (declare (special |$MenuServer| |$PageStuff| |$currentFrameNum| |$KillPage|))
+ (|sockSendInt| |$MenuServer| |$PageStuff|)
+ (|sockSendInt| |$MenuServer| |$currentFrameNum|)
+ (|sockSendInt| |$MenuServer| |$KillPage|)
+ (|sockSendInt| |$MenuServer| w))
+
+@
+\defun{linkToHTPage}{Link to hyperdoc page}
+<<defun linkToHTPage>>=
+(defun |linkToHTPage| (name)
+ "Link to hyperdoc page"
+ (declare (special |$MenuServer| |$PageStuff| |$currentFrameNum| 
+    |$LinkToPage|))
+ (|sockSendInt| |$MenuServer| |$PageStuff|)
+ (|sockSendInt| |$MenuServer| |$currentFrameNum|)
+ (|sockSendInt| |$MenuServer| |$LinkToPage|)
+ (|sockSendString| |$MenuServer| name))
+
+@
+\defun{popUpNamedHTPage}{Pop up a named hyperdoc page}
+<<defun popUpNamedHTPage>>=
+(defun |popUpNamedHTPage| (name cols)
+ "Pop up a named hyperdoc page"
+ (declare (special |$MenuServer| |$PageStuff| |$currentFrameNum|
+    |$PopUpNamedPage|))
+ (|sockSendInt| |$MenuServer| |$PageStuff|)
+ (|sockSendInt| |$MenuServer| |$currentFrameNum|)
+ (|sockSendInt| |$MenuServer| |$PopUpNamedPage|)
+ (|sockSendInt| |$MenuServer| cols)
+ (|sockSendString| |$MenuServer| name)
+ (|sockGetInt| |$MenuServer|))
+
+@
+\defun{sendHTErrorSignal}{Send hyperdoc an error signal}
+<<defun sendHTErrorSignal>>=
+(defun |sendHTErrorSignal| ()
+ "Send hyperdoc an error signal"
+ (declare (special |$MenuServer| |$SpadError|))
+ (|sockSendInt| |$MenuServer| |$SpadError|))
+
+@
+
 \chapter{The Interpreter}
 <<Interpreter>>=
 (in-package "BOOT")
+<<initconsts>>
 <<initvars>>
 
 <<defmacro funfind>>
@@ -17108,6 +17466,7 @@ stringimage
 <<defun Else?>>
 <<defun Elseif?>>
 <<defun emptyInterpreterFrame>>
+<<defun endHTPage>>
 <<defun eofp>>
 
 <<defun fetchOutput>>
@@ -17179,16 +17538,19 @@ stringimage
 <<defun isListOfIdentifiers>>
 <<defun isListOfIdentifiersOrStrings>>
 <<defun isSubForRedundantMapName>>
+<<defun issueHT>>
 <<defun isTraceGensym>>
 <<defun isUncompiledMap>>
 
 <<defun KeepPart?>>
+<<defun killHTPage>>
 
 <<defun lassocSub>>
 <<defun leaveScratchpad>>
 <<defun letPrint>>
 <<defun letPrint2>>
 <<defun letPrint3>>
+<<defun linkToHTPage>>
 <<defun listConstructorAbbreviations>>
 <<defun loadExposureGroupData>>
 
@@ -17224,6 +17586,7 @@ stringimage
 <<defun orderBySlotNumber>>
 
 <<defun pcounters>>
+<<defun popUpNamedHTPage>>
 <<defun pquit>>
 <<defun pquitSpad2Cmd>>
 <<defun previousInterpreterFrame>>
@@ -17250,6 +17613,7 @@ stringimage
 <<defun removeOption>>
 <<defun removeTracedMapSigs>>
 <<defun removeUndoLines>>
+<<defun replaceNamedHTPage>>
 <<defun reportSpadTrace>>
 <<defun reportUndo>>
 <<defun reroot>>
@@ -17274,6 +17638,7 @@ stringimage
 <<defun ScanOrPairVec,ScanOrInner>>
 <<defun selectOption>>
 <<defun selectOptionLC>>
+<<defun sendHTErrorSignal>>
 <<defun serverReadLine>>
 <<defun set>>
 <<defun set1>>
@@ -17327,12 +17692,16 @@ stringimage
 <<defun spadTrace,isTraceable>>
 <<defun spadUntrace>>
 <<defun stackTraceOptionError>>
+<<defun startHTPage>>
+<<defun startHTPopUpPage>>
+<<defun startReplaceHTPage>>
 <<defun statisticsInitialization>>
 <<defun stupidIsSpadFunction>>
 <<defun subTypes>>
 <<defun summary>>
 
 <<defun ?t>>
+<<defun testPage>>
 <<defun Top?>>
 <<defun trace>>
 <<defun trace1>>
diff --git a/changelog b/changelog
index e358c2b..7e397cc 100644
--- a/changelog
+++ b/changelog
@@ -1,4 +1,12 @@
-20090412 tpd src/axiom-website/patches.html 20090413.01.tpd.patch
+20090413 tpd src/axiom-website/patches.html 20090413.02.tpd.patch
+20090413 tpd src/interp/sockio.lisp move interpreter code to bookvol5
+20090413 tpd src/interp/hypertex.boot move interpreter code to bookvol5
+20090413 tpd src/interp/debugsys.lisp remove sockio, hypertex
+20090413 tpd src/interp/Makefile move interpreter code to bookvol5
+20090413 tpd src/input/unittest2.input remove obsolete test
+20090413 tpd src/input/r20bugs.input fix changed output
+20090413 tpd books/bookvol5 move interpreter code to bookvol5
+20090413 tpd src/axiom-website/patches.html 20090413.01.tpd.patch
 20090413 tpd books/bookvol12 add Gelernter's observations
 20090412 tpd src/axiom-website/patches.html 20090412.01.tpd.patch
 20090412 tpd books/bookvol5 fix event comparison case chain bug
diff --git a/src/axiom-website/patches.html b/src/axiom-website/patches.html
index f292865..cfe2bc4 100644
--- a/src/axiom-website/patches.html
+++ b/src/axiom-website/patches.html
@@ -1068,5 +1068,7 @@ faq 50: Cannot find libXpm.a<br/>
 bookvol5 fix event comparison case chain bug<br/>
 <a href="patches/20090413.01.tpd.patch">20090413.01.tpd.patch</a>
 bookvol12 add Gelernter's observations<br/>
+<a href="patches/20090413.02.tpd.patch">20090413.02.tpd.patch</a>
+bookvol15 add more interpreter code<br/>
  </body>
 </html>
diff --git a/src/input/r20bugs.input.pamphlet b/src/input/r20bugs.input.pamphlet
index 93b9926..829d2a5 100644
--- a/src/input/r20bugs.input.pamphlet
+++ b/src/input/r20bugs.input.pamphlet
@@ -197,8 +197,7 @@ positiveRemainder(-1::SINT,-5::SINT)
 complexRoots([u**2-v+1,v**2-4],[u,v],0.01)
 --R 
 --R
---R   (1)
---R   [[1.732421875 %i,- 2.0],[- 1.732421875 %i,- 2.0],[- 1.0,2.0],[1.0,2.0]]
+--R   (1)  [[1.73046875 %i,- 2.0],[- 1.73046875 %i,- 2.0],[- 1.0,2.0],[1.0,2.0]]
 --R                                                Type: List List Complex Float
 --E 17
 
diff --git a/src/input/unittest2.input.pamphlet b/src/input/unittest2.input.pamphlet
index 69266c9..d83558f 100644
--- a/src/input/unittest2.input.pamphlet
+++ b/src/input/unittest2.input.pamphlet
@@ -1340,10 +1340,10 @@ Unit test the user level commands
 --RValue = ((|breakmode| "execute break processing on error" |interpreter| LITERALS |$BreakMode| (|nobreak| |break| |query| |resume| |fastlinks|) |nobreak|) (|compiler| "Library compiler options" |interpreter| TREE |novar| ((|output| "library in which to place compiled code" |interpreter| FUNCTION |setOutputLibrary| NIL |htSetOutputLibrary|) (|input| "controls libraries from which to load compiled code" |interpreter| FUNCTION |setInputLibrary| NIL |htSetInputLibrary|) (|args| "arguments for compiling AXIOM code" |interpreter| FUNCTION |setAsharpArgs| (("enter compiler options " STRING |$asharpCmdlineFlags| |chkDirectory| "-O -Fasy -Fao -Flsp -laxiom -Mno-AXL__W__WillObsolete -DAxiom -Y $AXIOM/algebra")) NIL))) (|debug| "debug options" |interpreter| TREE |novar| ((|lambdatype| "show type information for #1 syntax" |interpreter| LITERALS $LAMBDATYPE (|on| |off|) |off|) (|dalymode| "Interpret leading open paren as lisp" |interpreter| LITERALS $DALYMODE (|on| |off|) |off|))) (|!
expose| "control interpreter constructor exposure" |interpreter| FUNCTION |setExpose| NIL |htSetExpose|) (|functions| "some interpreter function options" |interpreter| TREE |novar| ((|cache| "number of function results to cache" |interpreter| FUNCTION |setFunctionsCache| NIL |htSetCache|) (|compile| "compile, don't just define function bodies" |interpreter| LITERALS |$compileDontDefineFunctions| (|on| |off|) |on|) (|recurrence| "specially compile recurrence relations" |interpreter| LITERALS |$compileRecurrence| (|on| |off|) |on|))) (|fortran| "view and set options for FORTRAN output" |interpreter| TREE |novar| ((|ints2floats| "where sensible, coerce integers to reals" |interpreter| LITERALS |$fortInts2Floats| (|on| |off|) |on|) (|fortindent| "the number of characters indented" |interpreter| INTEGER |$fortIndent| (0 NIL) 6) (|fortlength| "the number of characters on a line" |interpreter| INTEGER |$fortLength| (1 NIL) 72) (|typedecs| "print type and dimension lines" |interpret!
er| LITERALS |$printFortranDecs| (|on| |off|) |on|) (|default!
type| "default generic type for FORTRAN object" |interpreter| LITERALS |$defaultFortranType| (REAL INTEGER COMPLEX LOGICAL CHARACTER) REAL) (|precision| "precision of generated FORTRAN objects" |interpreter| LITERALS |$fortranPrecision| (|single| |double|) |double|) (|intrinsic| "whether to use INTRINSIC FORTRAN functions" |interpreter| LITERALS |$useIntrinsicFunctions| (|on| |off|) |off|) (|explength| "character limit for FORTRAN expressions" |interpreter| INTEGER |$maximumFortranExpressionLength| (0 NIL) 1320) (|segment| "split long FORTRAN expressions" |interpreter| LITERALS |$fortranSegment| (|on| |off|) |on|) (|optlevel| "FORTRAN optimisation level" |interpreter| INTEGER |$fortranOptimizationLevel| (0 2) 0) (|startindex| "starting index for FORTRAN arrays" |interpreter| INTEGER |$fortranArrayStartingIndex| (0 1) 1) (|calling| "options for external FORTRAN calls" |interpreter| TREE |novar| ((|tempfile| "set location of temporary data files" |interpreter| FUNCTION |setFor!
tTmpDir| (("enter directory name for which you have write-permission" DIRECTORY |$fortranTmpDir| |chkDirectory| "/tmp/")) NIL) (|directory| "set location of generated FORTRAN files" |interpreter| FUNCTION |setFortDir| (("enter directory name for which you have write-permission" DIRECTORY |$fortranDirectory| |chkDirectory| "./")) NIL) (|linker| "linker arguments (e.g. libraries to search)" |interpreter| FUNCTION |setLinkerArgs| (("enter linker arguments " STRING |$fortranLibraries| |chkDirectory| "-lxlf")) NIL))))) (|kernel| "library functions built into the kernel for efficiency" |interpreter| TREE |novar| ((|warn| "warn when re-definition is attempted" |interpreter| FUNCTION |protectedSymbolsWarning| NIL |htSetKernelWarn|) (|protect| "prevent re-definition of kernel functions" |interpreter| FUNCTION |protectSymbols| NIL |htSetKernelProtect|))) (|hyperdoc| "options in using HyperDoc" |interpreter| TREE |novar| ((|fullscreen| "use full screen for this facility" |interpreter| !
LITERALS |$fullScreenSysVars| (|on| |off|) |off|) (|mathwidth!
| "screen width for history output" |interpreter| INTEGER |$historyDisplayWidth| (0 NIL) 120))) (|help| "view and set some help options" |interpreter| TREE |novar| ((|fullscreen| "use fullscreen facility, if possible" |interpreter| LITERALS |$useFullScreenHelp| (|on| |off|) |off|))) (|history| "save workspace values in a history file" |interpreter| LITERALS |$HiFiAccess| (|on| |off|) |on|) (|messages| "show messages for various system features" |interpreter| TREE |novar| ((|any| "print the internal type of objects of domain Any" |interpreter| LITERALS |$printAnyIfTrue| (|on| |off|) |on|) (|autoload| "print file auto-load messages" |interpreter| LITERALS |$printLoadMsgs| (|on| |off|) |on|) (|bottomup| "display bottom up modemap selection" |development| LITERALS |$reportBottomUpFlag| (|on| |off|) |off|) (|coercion| "display datatype coercion messages" |development| LITERALS |$reportCoerceIfTrue| (|on| |off|) |off|) (|dropmap| "display old map defn when replaced" |interpreter| !
LITERALS |$displayDroppedMap| (|on| |off|) |off|) (|expose| "warning for unexposed functions" |interpreter| LITERALS |$giveExposureWarning| (|on| |off|) |off|) (|file| "print msgs also to SPADMSG LISTING" |development| LITERALS |$printMsgsToFile| (|on| |off|) |off|) (|frame| "display messages about frames" |interpreter| LITERALS |$frameMessages| (|on| |off|) |off|) (|highlighting| "use highlighting in system messages" |interpreter| LITERALS |$highlightAllowed| (|on| |off|) |off|) (|instant| "present instantiation summary" |development| LITERALS |$reportInstantiations| (|on| |off|) |off|) (|insteach| "present instantiation info" |development| LITERALS |$reportEachInstantiation| (|on| |off|) |off|) (|interponly| "say when function code is interpreted" |interpreter| LITERALS |$reportInterpOnly| (|on| |off|) |on|) (|naglink| "show NAGLink messages" |interpreter| LITERALS |$nagMessages| (|on| |off|) |on|) (|number| "display message number with message" |interpreter| LITERALS |$di!
splayMsgNumber| (|on| |off|) |off|) (|prompt| "set type of in!
put prompt to display" |interpreter| LITERALS |$inputPromptType| (|none| |frame| |plain| |step| |verbose|) |step|) (|selection| "display function selection msgs" |interpreter| LITERALS |$reportBottomUpFlag| (|on| |off|) |off|) (|set| "show )set setting after assignment" |interpreter| LITERALS |$displaySetValue| (|on| |off|) |off|) (|startup| "display messages on start-up" |interpreter| LITERALS |$displayStartMsgs| (|on| |off|) |on|) (|summary| "print statistics after computation" |interpreter| LITERALS |$printStatisticsSummaryIfTrue| (|on| |off|) |off|) (|testing| "print system testing header" |development| LITERALS |$testingSystem| (|on| |off|) |off|) (|time| "print timings after computation" |interpreter| LITERALS |$printTimeIfTrue| (|on| |off| |long|) |off|) (|type| "print type after computation" |interpreter| LITERALS |$printTypeIfTrue| (|on| |off|) |on|) (|void| "print Void value when it occurs" |interpreter| LITERALS |$printVoidIfTrue| (|on| |off|) |off|))) (|naglink| !
"options for NAGLink" |interpreter| TREE |novar| ((|host| "internet address of host for NAGLink" |interpreter| FUNCTION |setNagHost| (("enter host name" DIRECTORY |$nagHost| |chkDirectory| "localhost")) NIL) (|persistence| "number of (fortran) functions to remember" |interpreter| FUNCTION |setFortPers| (("Requested remote storage (for asps):" INTEGER |$fortPersistence| (0 NIL) 10)) NIL) (|messages| "show NAGLink messages" |interpreter| LITERALS |$nagMessages| (|on| |off|) |on|) (|double| "enforce DOUBLE PRECISION ASPs" |interpreter| LITERALS |$nagEnforceDouble| (|on| |off|) |on|))) (|output| "view and set some output options" |interpreter| TREE |novar| ((|abbreviate| "abbreviate type names" |interpreter| LITERALS |$abbreviateTypes| (|on| |off|) |off|) (|algebra| "display output in algebraic form" |interpreter| FUNCTION |setOutputAlgebra| (("display output in algebraic form" LITERALS |$algebraFormat| (|off| |on|) |on|) (BREAK $ALGEBRAFORMAT) ("where algebra printing goes (ent!
er {em console} or a pathname)?" FILENAME |$algebraOutputFile!
| |chkOutputFileName| "console")) NIL) (|characters| "choose special output character set" |interpreter| FUNCTION |setOutputCharacters| NIL |htSetOutputCharacters|) (|fortran| "create output in FORTRAN format" |interpreter| FUNCTION |setOutputFortran| (("create output in FORTRAN format" LITERALS |$fortranFormat| (|off| |on|) |off|) (|break| |$fortranFormat|) ("where FORTRAN output goes (enter {em console} or a a pathname)" FILENAME |$fortranOutputFile| |chkOutputFileName| "console")) NIL) (|fraction| "how fractions are formatted" |interpreter| LITERALS |$fractionDisplayType| (|vertical| |horizontal|) |vertical|) (|length| "line length of output displays" |interpreter| INTEGER $LINELENGTH (10 245) 77) (|mathml| "create output in MathML style" |interpreter| FUNCTION |setOutputMathml| (("create output in MathML format" LITERALS |$mathmlFormat| (|off| |on|) |off|) (|break| |$mathmlFormat|) ("where MathML output goes (enter {em console} or a pathname)" FILENAME |$mathmlOutputFile!
| |chkOutputFileName| "console")) NIL) (|openmath| "create output in OpenMath style" |interpreter| FUNCTION |setOutputOpenMath| (("create output in OpenMath format" LITERALS |$openMathFormat| (|off| |on|) |off|) (|break| |$openMathFormat|) ("where TeX output goes (enter {em console} or a pathname)" FILENAME |$openMathOutputFile| |chkOutputFileName| "console")) NIL) (|script| "display output in SCRIPT formula format" |interpreter| FUNCTION |setOutputFormula| (("display output in SCRIPT format" LITERALS |$formulaFormat| (|off| |on|) |off|) (|break| |$formulaFormat|) ("where script output goes (enter {em console} or a a pathname)" FILENAME |$formulaOutputFile| |chkOutputFileName| "console")) NIL) (|scripts| "show subscripts,... linearly" |interpreter| LITERALS |$linearFormatScripts| (|on| |off|) |off|) (|showeditor| "view output of )show in editor" |interpreter| LITERALS |$useEditorForShowOutput| (|on| |off|) |off|) (|tex| "create output in TeX style" |interpreter| FUNCTION |se!
tOutputTex| (("create output in TeX format" LITERALS |$texFor!
mat| (|off| |on|) |off|) (|break| |$texFormat|) ("where TeX output goes (enter {em console} or a pathname)" FILENAME |$texOutputFile| |chkOutputFileName| "console")) NIL))) (|quit| "protected or unprotected quit" |interpreter| LITERALS |$quitCommandType| (|protected| |unprotected|) |protected|) (|streams| "set some options for working with streams" |interpreter| TREE |novar| ((|calculate| "specify number of elements to calculate" |interpreter| FUNCTION |setStreamsCalculate| (("number of initial stream elements you want calculated" INTEGER |$streamCount| (0 NIL) 10)) NIL) (|showall| "display all stream elements computed" |interpreter| LITERALS |$streamsShowAll| (|on| |off|) |off|))) (|system| "set some system development variables" |development| TREE |novar| ((|functioncode| "show gen. LISP for functions when compiled" |development| LITERALS |$reportCompilation| (|on| |off|) |off|) (|optimization| "show optimized LISP code" |development| LITERALS |$reportOptimization| (|on| |!
off|) |off|) (|prettyprint| "prettyprint BOOT func's as they compile" |development| LITERALS $PRETTYPRINT (|on| |off|) |on|))) (|userlevel| "operation access level of system user" |interpreter| LITERALS |$UserLevel| (|interpreter| |compiler| |development|) |development|))
 --E 213
 
---S 214 of 237
-)lisp (identity |$shoeReadLineFunction|)
+--S 214 of 237 obsolete |$shoeReadLineFunction|
+)lisp nil
 --R 
---RValue = #<compiled-function |serverReadLine|>
+--RValue = NIL
 --E 214
 
 --S 215 of 237
diff --git a/src/interp/Makefile.pamphlet b/src/interp/Makefile.pamphlet
index 7c48134..a7c0ab4 100644
--- a/src/interp/Makefile.pamphlet
+++ b/src/interp/Makefile.pamphlet
@@ -211,7 +211,7 @@ OBJS= ${OUT}/vmlisp.${O}      ${OUT}/hash.${O} \
       ${OUT}/g-timer.${O}     ${OUT}/g-util.${O} \
       ${OUT}/gclweb.${O}      ${OUT}/ggreater.${O}    \
       ${OUT}/http.${O} \
-      ${OUT}/hypertex.${O}    ${OUT}/i-analy.${O} \
+      ${OUT}/i-analy.${O} \
       ${OUT}/i-code.${O}      ${OUT}/i-coerce.${O} \
       ${OUT}/i-coerfn.${O}    ${OUT}/i-eval.${O} \
       ${OUT}/i-funsel.${O}    ${OUT}/bookvol5.${O} \
@@ -478,7 +478,7 @@ DOCFILES=${DOC}/alql.boot.dvi \
 	 ${DOC}/g-util.boot.dvi ${DOC}/hashcode.boot.dvi \
 	 ${DOC}/hash.lisp.dvi ${DOC}/htcheck.boot.dvi \
 	 ${DOC}/ht-root.boot.dvi ${DOC}/htsetvar.boot.dvi \
-	 ${DOC}/ht-util.boot.dvi ${DOC}/hypertex.boot.dvi \
+	 ${DOC}/ht-util.boot.dvi \
 	 ${DOC}/i-analy.boot.dvi ${DOC}/i-code.boot.dvi \
 	 ${DOC}/i-coerce.boot.dvi ${DOC}/i-coerfn.boot.dvi \
 	 ${DOC}/i-eval.boot.dvi ${DOC}/i-funsel.boot.dvi \
@@ -4070,50 +4070,6 @@ ${MID}/http.lisp: ${IN}/http.lisp
 
 @
 
-\subsection{hypertex.boot}
-<<hypertex.o (OUT from MID)>>=
-${OUT}/hypertex.${O}: ${MID}/hypertex.clisp 
-	@ echo 276 making ${OUT}/hypertex.${O} from ${MID}/hypertex.clisp
-	@ (cd ${MID} ; \
-	  if [ -z "${NOISE}" ] ; then \
-	   echo '(progn  (compile-file "${MID}/hypertex.clisp"' \
-             ':output-file "${OUT}/hypertex.${O}") (${BYE}))' | ${DEPSYS} ; \
-	  else \
-	   echo '(progn  (compile-file "${MID}/hypertex.clisp"' \
-             ':output-file "${OUT}/hypertex.${O}") (${BYE}))' | ${DEPSYS} \
-             >${TMP}/trace ; \
-	  fi )
-
-@
-<<hypertex.clisp (MID from IN)>>=
-${MID}/hypertex.clisp: ${IN}/hypertex.boot.pamphlet
-	@ echo 277 making ${MID}/hypertex.clisp \
-                   from ${IN}/hypertex.boot.pamphlet
-	@ (cd ${MID} ; \
-	  ${TANGLE} ${IN}/hypertex.boot.pamphlet >hypertex.boot ; \
-	  if [ -z "${NOISE}" ] ; then \
-	   echo '(progn (boottran::boottocl "hypertex.boot") (${BYE}))' \
-                | ${DEPSYS} ; \
-	  else \
-	   echo '(progn (boottran::boottocl "hypertex.boot") (${BYE}))' \
-                | ${DEPSYS} >${TMP}/trace ; \
-	  fi ; \
-	  rm hypertex.boot )
-
-@
-<<hypertex.boot.dvi (DOC from IN)>>=
-${DOC}/hypertex.boot.dvi: ${IN}/hypertex.boot.pamphlet 
-	@echo 278 making ${DOC}/hypertex.boot.dvi \
-                  from ${IN}/hypertex.boot.pamphlet
-	@(cd ${DOC} ; \
-	cp ${IN}/hypertex.boot.pamphlet ${DOC} ; \
-	${DOCUMENT} ${NOISE} hypertex.boot ; \
-	rm -f ${DOC}/hypertex.boot.pamphlet ; \
-	rm -f ${DOC}/hypertex.boot.tex ; \
-	rm -f ${DOC}/hypertex.boot )
-
-@
-
 \subsection{i-analy.boot}
 <<i-analy.o (OUT from MID)>>=
 ${OUT}/i-analy.${O}: ${MID}/i-analy.clisp 
@@ -8753,10 +8709,6 @@ clean:
 <<ht-util.clisp (MID from IN)>>
 <<ht-util.boot.dvi (DOC from IN)>>
 
-<<hypertex.o (OUT from MID)>>
-<<hypertex.clisp (MID from IN)>>
-<<hypertex.boot.dvi (DOC from IN)>>
-
 <<i-analy.o (OUT from MID)>>
 <<i-analy.clisp (MID from IN)>>
 <<i-analy.boot.dvi (DOC from IN)>>
diff --git a/src/interp/debugsys.lisp.pamphlet b/src/interp/debugsys.lisp.pamphlet
index 8b9f7e9..9bfa8e2 100644
--- a/src/interp/debugsys.lisp.pamphlet
+++ b/src/interp/debugsys.lisp.pamphlet
@@ -117,7 +117,6 @@ loaded by hand we need to establish a value.
       (thesymb "/int/interp/g-util.clisp")
       (thesymb "/int/interp/gclweb.lisp")
       (thesymb "/int/interp/ggreater.lisp")
-      (thesymb "/int/interp/hypertex.clisp")
       (thesymb "/int/interp/i-analy.clisp")
       (thesymb "/int/interp/i-code.clisp")
       (thesymb "/int/interp/i-coerce.clisp")
diff --git a/src/interp/hypertex.boot.pamphlet b/src/interp/hypertex.boot.pamphlet
index 8f43b8c..24e6ece 100644
--- a/src/interp/hypertex.boot.pamphlet
+++ b/src/interp/hypertex.boot.pamphlet
@@ -48,7 +48,6 @@
 
 -- HyperTex Spad interface
 
-SETANDFILEQ($SendXEventToHyperTeX, 8)
 SETANDFILEQ($LinkToPage, 96)
 SETANDFILEQ($StartPage, 97)
 SETANDFILEQ($SendLine, 98)
diff --git a/src/interp/sockio.lisp.pamphlet b/src/interp/sockio.lisp.pamphlet
index 2eb437e..39d84df 100644
--- a/src/interp/sockio.lisp.pamphlet
+++ b/src/interp/sockio.lisp.pamphlet
@@ -50,25 +50,6 @@
 
 (in-package "BOOT")
 
-#+(and :Lucid (not :ibm/370))
-(progn
-  (system:define-foreign-function :c 'open_server :fixnum)
-  (system:define-foreign-function :c 'sock_get_int :fixnum)
-  (system:define-foreign-function :c 'sock_send_int :fixnum)
-  (system:define-foreign-function :c 'sock_get_string_buf :fixnum)
-  (system:define-foreign-function :c 'sock_send_string_len :fixnum)
-  (system:define-foreign-function :c 'sock_get_float :single)
-  (system:define-foreign-function :c 'sock_send_float :fixnum)
-  (system:define-foreign-function :c 'sock_send_wakeup :fixnum)
-  (system:define-foreign-function :c 'server_switch :fixnum)
-  (system:define-foreign-function :c 'flush_stdout :fixnum)
-  (system:define-foreign-function :c 'sock_send_signal :fixnum)
-  (system:define-foreign-function :c 'print_line :fixnum)
-  (system:define-foreign-function :c 'plus_infininty :single)
-  (system:define-foreign-function :c 'minus_infinity :single)
-  (system:define-foreign-function :c 'NANQ :single)
-)
-
 @
 This was changed as of GCL-2.6.8pre2. It used to read:
 \begin{verbatim}
@@ -163,91 +144,8 @@ resolve the problem
 (defun |printLine| (str)
   (print_line str))
 
-;; Socket types.  This list must be consistent with the one in com.h
-
-(defconstant SessionManager     1)
-(defconstant ViewportServer     2)
-(defconstant MenuServer         3)
-(defconstant SessionIO          4)
-(defconstant MessageServer      5)
-(defconstant InterpWindow       6)
-(defconstant KillSpad		7)
-(defconstant DebugWindow	8)
-(defconstant NAGLinkServer      8)
-(defconstant Forker		9)
-
-;; same constants for use in BOOT
-(defconstant |$SessionManager|  SessionManager)
-(defconstant |$ViewportServer|  ViewportServer)
-(defconstant |$MenuServer|      MenuServer)
-(defconstant |$SessionIO|       SessionIO)
-(defconstant |$MessageServer|   MessageServer)
-(defconstant |$InterpWindow|    InterpWindow)
-(defconstant |$KillSpad|	KillSpad)
-(defconstant |$DebugWindow|     DebugWindow)
-(defconstant |$NAGLinkServer|   NAGLinkServer)
-(defconstant |$Forker|		Forker)
-
-;; Session Manager action requests
-
-(defconstant CreateFrame        1)
-(defconstant SwitchFrames       2)
-(defconstant EndOfOutput        3)
-(defconstant CallInterp         4)
-(defconstant EndSession         5)
-(defconstant LispCommand        6)
-(defconstant SpadCommand        7)
-(defconstant SendXEventToHyperTeX 8)
-(defconstant QuietSpadCommand   9)
-(defconstant CloseClient        10)
-(defconstant QueryClients       11)
-(defconstant QuerySpad		12)
-(defconstant NonSmanSession	13)
-(defconstant KillLispSystem     14)
-
-(defconstant CreateFrameAnswer  50)
-
-(defconstant |$CreateFrame|     CreateFrame)
-(defconstant |$SwitchFrames|    SwitchFrames)
-(defconstant |$EndOfOutput|     EndOfOutput)
-(defconstant |$CallInterp|      CallInterp)
-(defconstant |$EndSession|      EndSession)
-(defconstant |$LispCommand|     LispCommand)
-(defconstant |$SpadCommand|     SpadCommand)
-(defconstant |$SendXEventToHyperTeX| SendXEventToHyperTeX)
-(defconstant |$QuietSpadCommand| QuietSpadCommand)
-(defconstant |$CloseClient|     CloseClient)
-(defconstant |$QueryClients|    QueryClients)
-(defconstant |$QuerySpad|	QuerySpad)
-(defconstant |$NonSmanSession|	NonSmanSession)
-(defconstant |$KillLispSystem|  KillLispSystem)
-
-(defconstant |$CreateFrameAnswer|  CreateFrameAnswer)
-
-;; signal types (from /usr/include/sys/signal.h)
-#+(and :Lucid (not :ibm/370))
-(progn 
-  (defconstant	SIGUSR1	16)	;; user defined signal 1
-  (defconstant	SIGUSR2	17)	;; user defined signal 2
-  )
-
-#+:RIOS
-(progn 
-  (defconstant	SIGUSR1	30)	;; user defined signal 1
-  (defconstant	SIGUSR2	31)	;; user defined signal 2
-  )
-
-#+:IBMPS2
-(progn
-  (defconstant	SIGUSR1	30)	;; user defined signal 1
-  (defconstant	SIGUSR2	31)	;; user defined signal 2
-  )
-
 (setq |$NaNvalue| (NANQ))
-#-:ccl
-  (setq |$plusInfinity| (* 1.1  MOST-POSITIVE-LONG-FLOAT))
-#+:ccl
-  (setq |$plusInfinity| MOST-POSITIVE-LONG-FLOAT)
+(setq |$plusInfinity| (* 1.1  MOST-POSITIVE-LONG-FLOAT))
 (setq |$minusInfinity| (- |$plusInfinity|))
 
 @

\start
Date: Mon, 13 Apr 2009 19:41:49 -0500
From: Tim Daly
To: list, Stephen Wilson
Subject: 20090413.03.tpd.patch (bookvol5 fix 7191, set *system-directory*)

The si::*system-directory* variable is set dynamically on startup.
This fixes bug 7191, found and fixed by Stephen Wilson that lisp compiles fail.
=========================================================================
diff --git a/books/bookvol5.pamphlet b/books/bookvol5.pamphlet
index 73cb801..495be02 100644
--- a/books/bookvol5.pamphlet
+++ b/books/bookvol5.pamphlet
@@ -447,6 +447,8 @@ information is initialized.
 #+:akcl (setq compiler::*compile-verbose* nil)
 #+:akcl (setq compiler::*suppress-compiler-warnings* t)
 #+:akcl (setq compiler::*suppress-compiler-notes* t)
+#+:akcl (setq si::*system-directory*
+         (concatenate 'string (getenviron "AXIOM") "/bin"))
   (in-package "BOOT")
   (initroot)
 #+:akcl
diff --git a/changelog b/changelog
index 7e397cc..598e64e 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,5 @@
+20090413 tpd src/axiom-website/patches.html 20090413.03.tpd.patch
+20090413 tpd books/bookvol5 fix 7191, set *system-directory* dynamically
 20090413 tpd src/axiom-website/patches.html 20090413.02.tpd.patch
 20090413 tpd src/interp/sockio.lisp move interpreter code to bookvol5
 20090413 tpd src/interp/hypertex.boot move interpreter code to bookvol5
diff --git a/src/axiom-website/patches.html b/src/axiom-website/patches.html
index cfe2bc4..81c435f 100644
--- a/src/axiom-website/patches.html
+++ b/src/axiom-website/patches.html
@@ -1070,5 +1070,7 @@ bookvol5 fix event comparison case chain bug<br/>
 bookvol12 add Gelernter's observations<br/>
 <a href="patches/20090413.02.tpd.patch">20090413.02.tpd.patch</a>
 bookvol15 add more interpreter code<br/>
+<a href="patches/20090413.03.tpd.patch">20090413.03.tpd.patch</a>
+bookvol5 fix 7191, set *system-directory* dynamically<br/>
  </body>
 </html>

\start
Date: Mon, 13 Apr 2009 20:02:06 -0500
From: Tim Daly
To: list
Subject: 20090413.04.tpd.patch (download.html add slackware)

The Slackware 12.2 binary and sources have been added to the website
===================================================================
diff --git a/src/axiom-website/download.html b/src/axiom-website/download.html
index 20ff072..aa9a4be 100644
--- a/src/axiom-website/download.html
+++ b/src/axiom-website/download.html
@@ -1076,6 +1076,52 @@
       </font>
      </td>
     </tr>
+
+    <tr>
+     <td align="left">
+      <font face="Helvetica, Arial, sans-serif" size="+1">
+       slackware
+      </font>
+     </td>
+     <!--td align="center">
+      <font face="Helvetica, Arial, sans-serif" size="+1">
+      </font>
+     </td-->
+     <td align="center">
+      <font face="Helvetica, Arial, sans-serif" size="+1">
+      </font>
+     </td>
+     <td align="center">
+      <font face="Helvetica, Arial, sans-serif" size="+1">
+      </font>
+     </td>
+     <td align="center">
+      <font face="Helvetica, Arial, sans-serif" size="+1">
+      </font>
+     </td>
+     <td align="center">
+      <font face="Helvetica, Arial, sans-serif" size="+1">
+      </font>
+     </td>
+     <td align="center">
+      <font face="Helvetica, Arial, sans-serif" size="+1">
+      </font>
+     </td>
+     <td align="center">
+      <font face="Helvetica, Arial, sans-serif" size="+1">
+      </font>
+     </td>
+     <td align="center">
+      <font face="Helvetica, Arial, sans-serif" size="+1">
+      </font>
+     </td>
+     <td align="center">
+      <font face="Helvetica, Arial, sans-serif" size="+1">
+      <a href="downloads/axiom-slackware-mar2009-src.tgz">src</a>
+      <a href="downloads/axiom-slackware-mar2009-bin.tgz">bin</a>
+      </font>
+     </td>
+    </tr>
    </tbody>
   </table>
 
diff --git a/src/axiom-website/patches.html b/src/axiom-website/patches.html
index 81c435f..adbaaff 100644
--- a/src/axiom-website/patches.html
+++ b/src/axiom-website/patches.html
@@ -1072,5 +1072,7 @@ bookvol12 add Gelernter's observations<br/>
 bookvol15 add more interpreter code<br/>
 <a href="patches/20090413.03.tpd.patch">20090413.03.tpd.patch</a>
 bookvol5 fix 7191, set *system-directory* dynamically<br/>
+<a href="patches/20090413.04.tpd.patch">20090413.04.tpd.patch</a>
+download.html add slackware to downloads<br/>
  </body>
 </html>

\start
Date: Mon, 13 Apr 2009 23:05:20 -0500
From: Tim Daly
To: list
Subject: 20090414.01.tpd.patch (src/scripts/Makefile add SPADEDIT for )edit)

Fix bug 7192, mentioned by Michael Becker, that the top level command
 )edit filename
does not work. This is due to the missing shell script SPADEDIT which
this patch includes.
======================================================================
diff --git a/changelog b/changelog
index 598e64e..865a39d 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,7 @@
+20090414 tpd src/axiom-website/patches.html 20090414.01.tpd.patch
+20090414 tpd src/scripts/Makefile fix 7192, add SPADEDIT for )edit
+20090413 tpd src/axiom-website/patches.html 20090413.04.tpd.patch
+20090413 tpd src/axiom-website/download.html add slackware
 20090413 tpd src/axiom-website/patches.html 20090413.03.tpd.patch
 20090413 tpd books/bookvol5 fix 7191, set *system-directory* dynamically
 20090413 tpd src/axiom-website/patches.html 20090413.02.tpd.patch
diff --git a/src/axiom-website/patches.html b/src/axiom-website/patches.html
index adbaaff..232874d 100644
--- a/src/axiom-website/patches.html
+++ b/src/axiom-website/patches.html
@@ -1074,5 +1074,7 @@ bookvol15 add more interpreter code<br/>
 bookvol5 fix 7191, set *system-directory* dynamically<br/>
 <a href="patches/20090413.04.tpd.patch">20090413.04.tpd.patch</a>
 download.html add slackware to downloads<br/>
+<a href="patches/20090414.01.tpd.patch">20090414.01.tpd.patch</a>
+src/scripts/Makefile fix 7192, add SPADEDIT for )edit<br/>
  </body>
 </html>
diff --git a/src/scripts/Makefile.pamphlet b/src/scripts/Makefile.pamphlet
index 53ee617..3dca6f1 100644
--- a/src/scripts/Makefile.pamphlet
+++ b/src/scripts/Makefile.pamphlet
@@ -15,14 +15,21 @@ exist in the bin subdirectory. We depend on the ``document''
 script to exist and prevent duplicate copying.
 <<*>>=
 OUT=${MNT}/${SYS}/bin
+OUT1=${MNT}/${SYS}/lib
 
-all: ${OUT}/document
+all: ${OUT}/document ${OUT1}/SPADEDIT
 
 ${OUT}/document:
 	@echo 1 making ${SRC}/scripts
 	@cp -pr * ${OUT}
 	@mkdir -p ${OUT}/tex
 	@rm -f ${OUT}/Makefile*
+	@rm -f ${OUT}/SPADEDIT
+
+${OUT1}/SPADEDIT:
+	@echo 2 making ${OUT1}/SPADEDIT from ${SRC}/scripts/SPADEDIT
+	@mkdir -p ${OUT1}
+	@cp ${SRC}/scripts/SPADEDIT ${OUT1}/SPADEDIT
 
 clean:
 	@echo 2 cleaning ${SRC}/scripts

\start
Date: Mon, 13 Apr 2009 23:14:07 -0500
From: Tim Daly
To: list
Subject: 20090414.02.tpd.patch (src/scripts/SPADEDIT fix 7192)

It helps to actually ADD the file that fixes the failure
which I forgot to include in the last posted patch.
======================================================================
diff --git a/changelog b/changelog
index 865a39d..4613afe 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,5 @@
+20090414 tpd src/axiom-website/patches.html 20090414.02.tpd.patch
+20090414 tpd src/scripts/SPADEDIT fix 7192, add SPADEDIT for )edit
 20090414 tpd src/axiom-website/patches.html 20090414.01.tpd.patch
 20090414 tpd src/scripts/Makefile fix 7192, add SPADEDIT for )edit
 20090413 tpd src/axiom-website/patches.html 20090413.04.tpd.patch
diff --git a/src/axiom-website/patches.html b/src/axiom-website/patches.html
index 232874d..eab02e1 100644
--- a/src/axiom-website/patches.html
+++ b/src/axiom-website/patches.html
@@ -1076,5 +1076,7 @@ bookvol5 fix 7191, set *system-directory* dynamically<br/>
 download.html add slackware to downloads<br/>
 <a href="patches/20090414.01.tpd.patch">20090414.01.tpd.patch</a>
 src/scripts/Makefile fix 7192, add SPADEDIT for )edit<br/>
+<a href="patches/20090414.02.tpd.patch">20090414.02.tpd.patch</a>
+src/scripts/SPADEDIT fix 7192, add SPADEDIT for )edit<br/>
  </body>
 </html>
diff --git a/src/scripts/SPADEDIT b/src/scripts/SPADEDIT
new file mode 100755
index 0000000..8b3b4b1
--- /dev/null
+++ b/src/scripts/SPADEDIT
@@ -0,0 +1,34 @@
+#!/bin/sh
+# this script is invoked by the spad )edit command
+# can be replaced by users favorite editor
+# optional second argument should be character offset in file
+
+thefile=$1
+if [ ! -f $1 ] ; then 
+  thefile=$AXIOM/../../src/algebra/$1
+else
+  thefile=$1
+fi
+
+
+if [ $# = 2 ] ; then
+	START=`grep -n \^$2\( $thefile | awk -F: '{print $1}'`
+else
+	START=1
+fi
+
+if [ ! "$EDITOR" ] ; then
+	EDITOR=vi
+fi
+
+if [ "$DISPLAY" ] ; then
+	if [ "$EDITOR" = "emacs" ] ; then
+		emacs  +$START $thefile &
+	elif [ "$EDITOR" = "vi" ] ; then
+		xterm -e vi +$START $thefile &
+        else
+		xterm -e $EDITOR $thefile &
+	fi
+else
+	$EDITOR $thefile
+fi

\start
Date: Mon, 13 Apr 2009 23:29:59 -0500
From: Tim Daly
To: list
Subject: 20090414.03.tpd.patch (readme Add Michael Becker to credits)

Modify readme to add Michael Becker to credits
========================================================================
diff --git a/books/bookvol5.pamphlet b/books/bookvol5.pamphlet
index 495be02..96ae01e 100644
--- a/books/bookvol5.pamphlet
+++ b/books/bookvol5.pamphlet
@@ -261,8 +261,8 @@ of effort. We would like to acknowledge and thank the following people:
 "Richard Anderson       George Andrews         S.J. Atkins"
 "Henry Baker            Stephen Balzac         Yurij Baransky"
 "David R. Barton        Gerald Baumgartner     Gilbert Baumslag"
-"Jay Belanger           David Bindel           Fred Blair"
-"Vladimir Bondarenko    Mark Botch"
+"Michael Becker         Jay Belanger           David Bindel"
+"Fred Blair             Vladimir Bondarenko    Mark Botch"
 "Alexandre Bouyer       Peter A. Broadbery     Martin Brock"
 "Manuel Bronstein       Stephen Buchwald       Florian Bundschuh"
 "Luanne Burns           William Burge"
diff --git a/changelog b/changelog
index 4613afe..3d30a6b 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,7 @@
+20090414 tpd src/axiom-website/patches.html 20090414.03.tpd.patch
+20090414 tpd readme add Michael Becker
+20090414 tpd books/bookvol5 add Michael Becker
+20090414 mxb Michael Becker <coconet.de>
 20090414 tpd src/axiom-website/patches.html 20090414.02.tpd.patch
 20090414 tpd src/scripts/SPADEDIT fix 7192, add SPADEDIT for )edit
 20090414 tpd src/axiom-website/patches.html 20090414.01.tpd.patch
diff --git a/readme b/readme
index d01e42e..6e6c9b9 100644
--- a/readme
+++ b/readme
@@ -192,8 +192,8 @@ at the axiom command prompt will prettyprint the list.
 "Richard Anderson       George Andrews         S.J. Atkins"
 "Henry Baker            Stephen Balzac         Yurij Baransky"
 "David R. Barton        Gerald Baumgartner     Gilbert Baumslag"
-"Jay Belanger           David Bindel           Fred Blair"
-"Vladimir Bondarenko    Mark Botch"
+"Michael Becker         Jay Belanger           David Bindel"
+"Fred Blair             Vladimir Bondarenko    Mark Botch"
 "Alexandre Bouyer       Peter A. Broadbery     Martin Brock"
 "Manuel Bronstein       Stephen Buchwald       Florian Bundschuh"
 "Luanne Burns           William Burge"
diff --git a/src/axiom-website/patches.html b/src/axiom-website/patches.html
index eab02e1..49ac879 100644
--- a/src/axiom-website/patches.html
+++ b/src/axiom-website/patches.html
@@ -1078,5 +1078,7 @@ download.html add slackware to downloads<br/>
 src/scripts/Makefile fix 7192, add SPADEDIT for )edit<br/>
 <a href="patches/20090414.02.tpd.patch">20090414.02.tpd.patch</a>
 src/scripts/SPADEDIT fix 7192, add SPADEDIT for )edit<br/>
+<a href="patches/20090414.03.tpd.patch">20090414.03.tpd.patch</a>
+readme add Michael Becker<br/>
  </body>
 </html>

\start
Date: Mon, 13 Apr 2009 23:42:25 -0500
From: Tim Daly
To: list
Subject: 20090414.04.tpd.patch (Makefile add Makefile.slackware chunk)

Makefile.pamphlet now has the Makefile.slackware chunk ported from 
slackware changes.
====================================================================
diff --git a/Makefile.pamphlet b/Makefile.pamphlet
index 5304ddf..2a56392 100644
--- a/Makefile.pamphlet
+++ b/Makefile.pamphlet
@@ -1215,6 +1215,51 @@ all: rootdirs noweb srcsetup lspdir srcdir
 <<clean>>
 
 @
+<<Makefile.slackware>>=
+# System dependent Makefile for the Intel/Slackware platform
+# Platform variable
+PLF=LINUXplatform
+# C compiler flags
+CCF="-O2 -fno-strength-reduce -Wall -D_GNU_SOURCE -D${PLF} -I/usr/X11/include"
+# Loader flags, use the shared version of libXpm
+LDF=" -L/usr/lib -lXpm "
+# C compiler to use
+CC=gcc 
+AWK=gawk
+RANLIB=ranlib
+TOUCH=touch
+TAR=tar
+AXIOMXLROOT=${AXIOM}/compiler
+O=o
+BYE=bye
+LISP=lsp
+DAASE=${SRC}/share
+# where the libXpm.a library lives
+XLIB=/usr/lib
+<<GCLOPTS-LOCBFD>>
+<<SRCDIRS>>
+PATCH=patch
+
+ENV=PLF=${PLF} CCF=${CCF} LDF=${LDF} CC=${CC} AWK=${AWK} RANLIB=${RANLIB} \
+    TOUCH=${TOUCH} TAR=${TAR} AXIOMXLROOT=${AXIOMXLROOT} O=${O} BYE=${BYE} \
+    LISP=${LISP} DAASE=${DAASE} XLIB=${XLIB} GCLOPTS=${GCLOPTS} \
+    SRCDIRS=${SRCDIRS} PATCH=${PATCH}
+
+all: rootdirs noweb srcsetup lspdir srcdir
+	@echo 45 Makefile.slackware called
+	@echo 46 Environment : ${ENV} 
+	@echo 47 finished system build on `date` | tee >lastBuildDate
+
+<<rootdirs>>
+<<noweb>>
+<<literate commands>>
+<<srcsetup>>
+<<src>>
+<<lsp>>
+<<document>>
+<<clean>>
+
+@
 \subsection{Makefile.linux}
 Annoyingly enough it seems that GCL uses a default extension of .lsp
 rather than .lisp so we add the [[LISP]] variable here. We need to
diff --git a/changelog b/changelog
index 3d30a6b..5ffeca9 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,5 @@
+20090414 tpd src/axiom-website/patches.html 20090414.04.tpd.patch
+20090414 tpd Makefile add Makefile.slackware chunk
 20090414 tpd src/axiom-website/patches.html 20090414.03.tpd.patch
 20090414 tpd readme add Michael Becker
 20090414 tpd books/bookvol5 add Michael Becker
diff --git a/src/axiom-website/patches.html b/src/axiom-website/patches.html
index 49ac879..b6869fc 100644
--- a/src/axiom-website/patches.html
+++ b/src/axiom-website/patches.html
@@ -1080,5 +1080,7 @@ src/scripts/Makefile fix 7192, add SPADEDIT for )edit<br/>
 src/scripts/SPADEDIT fix 7192, add SPADEDIT for )edit<br/>
 <a href="patches/20090414.03.tpd.patch">20090414.03.tpd.patch</a>
 readme add Michael Becker<br/>
+<a href="patches/20090414.04.tpd.patch">20090414.04.tpd.patch</a>
+Makefile add Makefile.slackware chunk<br/>
  </body>
 </html>

\start
Date: Tue, 14 Apr 2009 00:06:42 -0500
From: Tim Daly
To: list
Subject: 20090414.05.tpd.patch (Makefile report regression failures)

The make process now greps the int/input/*.regress files for failures
at the end of the make.
======================================================================
diff --git a/Makefile.pamphlet b/Makefile.pamphlet
index 2a56392..5db418b 100644
--- a/Makefile.pamphlet
+++ b/Makefile.pamphlet
@@ -824,6 +824,7 @@ all: rootdirs noweb srcsetup lspdir srcdir
 	@echo 24 Makefile.axposf1v3 called
 	@echo 25 Environment : ${ENV} 
 	@echo 26 finished system build on `date` | tee >lastBuildDate
+	@- grep "result FAILED" int/input/*.regress
 
 <<rootdirs>>
 <<noweb>>
@@ -870,6 +871,7 @@ all: rootdirs noweb srcsetup lspdir srcdir
 	@echo 27 Makefile.axposf1v4 called
 	@echo 28 Environment : ${ENV} 
 	@echo 29 finished system build on `date` | tee >lastBuildDate
+	@- grep "result FAILED" int/input/*.regress
 
 <<rootdirs>>
 <<noweb>>
@@ -916,6 +918,7 @@ all: rootdirs noweb srcsetup lspdir srcdir
 	@echo 30 Makefile.hp10 called
 	@echo 31 Environment : ${ENV} 
 	@echo 32 finished system build on `date` | tee >lastBuildDate
+	@- grep "result FAILED" int/input/*.regress
 
 <<rootdirs>>
 <<noweb>>
@@ -962,6 +965,7 @@ all: rootdirs noweb srcsetup lspdir srcdir
 	@echo 33 Makefile.hp11 called
 	@echo 34 Environment : ${ENV} 
 	@echo 35 finished system build on `date` | tee >lastBuildDate
+	@- grep "result FAILED" int/input/*.regress
 
 <<rootdirs>>
 <<noweb>>
@@ -1008,6 +1012,7 @@ all: rootdirs noweb srcsetup lspdir srcdir
 	@echo 36 Makefile.hp9 called
 	@echo 37 Environment : ${ENV} 
 	@echo 38 finished system build on `date` | tee >lastBuildDate
+	@- grep "result FAILED" int/input/*.regress
 
 <<rootdirs>>
 <<noweb>>
@@ -1054,6 +1059,7 @@ all: rootdirs noweb srcsetup lspdir srcdir
 	@echo 39 Makefile.irixmips1 called
 	@echo 40 Environment : ${ENV} 
 	@echo 41 finished system build on `date` | tee >lastBuildDate
+	@- grep "result FAILED" int/input/*.regress
 
 <<rootdirs>>
 <<noweb>>
@@ -1099,6 +1105,7 @@ all: rootdirs noweb srcsetup lspdir srcdir
 	@echo 42 Makefile.irixmips3 called
 	@echo 43 Environment : ${ENV} 
 	@echo 44 finished system build on `date` | tee >lastBuildDate
+	@- grep "result FAILED" int/input/*.regress
 
 <<rootdirs>>
 <<noweb>>
@@ -1151,6 +1158,7 @@ all: rootdirs noweb srcsetup lspdir srcdir
 	@echo 45 Makefile.FreeBSD called
 	@echo 46 Environment : ${ENV} 
 	@echo 47 finished system build on `date` | tee >lastBuildDate
+	@- grep "result FAILED" int/input/*.regress
 
 <<rootdirs>>
 <<noweb>>
@@ -1204,6 +1212,7 @@ all: rootdirs noweb srcsetup lspdir srcdir
 	@echo 45 Makefile.windows called
 	@echo 46 Environment : ${ENV} 
 	@echo 47 finished system build on `date` | tee >lastBuildDate
+	@- grep "result FAILED" int/input/*.regress
 
 <<rootdirs>>
 <<noweb>>
@@ -1249,6 +1258,7 @@ all: rootdirs noweb srcsetup lspdir srcdir
 	@echo 45 Makefile.slackware called
 	@echo 46 Environment : ${ENV} 
 	@echo 47 finished system build on `date` | tee >lastBuildDate
+	@- grep "result FAILED" int/input/*.regress
 
 <<rootdirs>>
 <<noweb>>
@@ -1310,6 +1320,7 @@ all: rootdirs noweb srcsetup lspdir srcdir
 	@echo 45 Makefile.linux called
 	@echo 46 Environment : ${ENV} 
 	@echo 47 finished system build on `date` | tee >lastBuildDate
+	@- grep "result FAILED" int/input/*.regress
 
 <<rootdirs>>
 <<noweb>>
@@ -1371,6 +1382,7 @@ all: rootdirs noweb srcsetup lspdir srcdir
 	@echo 45 Makefile.linux called
 	@echo 46 Environment : ${ENV} 
 	@echo 47 finished system build on `date` | tee >lastBuildDate
+	@- grep "result FAILED" int/input/*.regress
 
 <<rootdirs>>
 <<noweb>>
@@ -1417,6 +1429,7 @@ all: rootdirs noweb srcsetup lspdir srcdir
 	@echo 45 Makefile.linux called
 	@echo 46 Environment : ${ENV} 
 	@echo 47 finished system build on `date` | tee >lastBuildDate
+	@- grep "result FAILED" int/input/*.regress
 
 <<rootdirs>>
 <<noweb>>
@@ -1463,6 +1476,7 @@ all: rootdirs noweb srcsetup lspdir srcdir
 	@echo 45 Makefile.linux called
 	@echo 46 Environment : ${ENV} 
 	@echo 47 finished system build on `date` | tee >lastBuildDate
+	@- grep "result FAILED" int/input/*.regress
 
 <<rootdirs>>
 <<noweb>>
@@ -1509,6 +1523,7 @@ all: rootdirs noweb srcsetup lspdir srcdir
 	@echo 45 Makefile.linux called
 	@echo 46 Environment : ${ENV} 
 	@echo 47 finished system build on `date` | tee >lastBuildDate
+	@- grep "result FAILED" int/input/*.regress
 
 <<rootdirs>>
 <<noweb>>
@@ -1558,6 +1573,7 @@ all: rootdirs noweb srcsetup lspdir srcdir
 	@echo 45 Makefile.linux called
 	@echo 46 Environment : ${ENV} 
 	@echo 47 finished system build on `date` | tee >lastBuildDate
+	@- grep "result FAILED" int/input/*.regress
 
 <<rootdirs>>
 <<noweb>>
@@ -1604,6 +1620,7 @@ all: rootdirs noweb srcsetup lspdir srcdir
 	@echo 45 Makefile.linux called
 	@echo 46 Environment : ${ENV} 
 	@echo 47 finished system build on `date` | tee >lastBuildDate
+	@- grep "result FAILED" int/input/*.regress
 
 <<rootdirs>>
 <<noweb>>
@@ -1650,6 +1667,7 @@ all: rootdirs noweb srcsetup lspdir srcdir
 	@echo 45 Makefile.linux called
 	@echo 46 Environment : ${ENV} 
 	@echo 47 finished system build on `date` | tee >lastBuildDate
+	@- grep "result FAILED" int/input/*.regress
 
 <<rootdirs>>
 <<noweb>>
@@ -1696,6 +1714,7 @@ all: rootdirs noweb srcsetup lspdir srcdir
 	@echo 45 Makefile.linux called
 	@echo 46 Environment : ${ENV} 
 	@echo 47 finished system build on `date` | tee >lastBuildDate
+	@- grep "result FAILED" int/input/*.regress
 
 <<rootdirs>>
 <<noweb>>
@@ -1753,6 +1772,7 @@ all: rootdirs noweb srcsetup lspdir srcdir
 	@echo 45 Makefile.linux called
 	@echo 46 Environment : ${ENV} 
 	@echo 47 finished system build on `date` | tee >lastBuildDate
+	@- grep "result FAILED" int/input/*.regress
 
 <<rootdirs>>
 <<noweb>>
@@ -1828,6 +1848,7 @@ all: rootdirs noweb srcsetup lspdir srcdir
 	@echo 45 Makefile.linux called
 	@echo 46 Environment : ${ENV} 
 	@echo 47 finished system build on `date` | tee >lastBuildDate
+	@- grep "result FAILED" int/input/*.regress
 
 <<rootdirs>>
 <<noweb>>
@@ -1903,6 +1924,7 @@ all: rootdirs noweb srcsetup lspdir srcdir
 	@echo 45 Makefile.linux called
 	@echo 46 Environment : ${ENV} 
 	@echo 47 finished system build on `date` | tee >lastBuildDate
+	@- grep "result FAILED" int/input/*.regress
 
 <<rootdirs>>
 <<noweb>>
@@ -1978,6 +2000,7 @@ all: rootdirs noweb srcsetup lspdir srcdir
 	@echo 45 Makefile.linux called
 	@echo 46 Environment : ${ENV} 
 	@echo 47 finished system build on `date` | tee >lastBuildDate
+	@- grep "result FAILED" int/input/*.regress
 
 <<rootdirs>>
 <<noweb>>
@@ -2027,6 +2050,7 @@ all: rootdirs noweb srcsetup lspdir srcdir
 	@echo 45 Makefile.linux called
 	@echo 46 Environment : ${ENV} 
 	@echo 47 finished system build on `date` | tee >lastBuildDate
+	@- grep "result FAILED" int/input/*.regress
 
 <<rootdirs>>
 <<noweb>>
@@ -2102,6 +2126,7 @@ all: rootdirs noweb srcsetup lspdir srcdir
 	@echo 45 Makefile.linux called
 	@echo 46 Environment : ${ENV} 
 	@echo 47 finished system build on `date` | tee >lastBuildDate
+	@- grep "result FAILED" int/input/*.regress
 
 <<rootdirs>>
 <<noweb>>
@@ -2177,6 +2202,7 @@ all: rootdirs noweb srcsetup lspdir srcdir
 	@echo 45 Makefile.linux called
 	@echo 46 Environment : ${ENV} 
 	@echo 47 finished system build on `date` | tee >lastBuildDate
+	@- grep "result FAILED" int/input/*.regress
 
 <<rootdirs>>
 <<noweb>>
@@ -2233,6 +2259,7 @@ all: rootdirs noweb srcsetup lspdir srcdir
 	@echo 45 Makefile.linux called
 	@echo 46 Environment : ${ENV} 
 	@echo 47 finished system build on `date` | tee >lastBuildDate
+	@- grep "result FAILED" int/input/*.regress
 
 <<rootdirs>>
 <<noweb>>
@@ -2284,6 +2311,7 @@ all: rootdirs noweb srcsetup lspdir srcdir
 	@echo 45 Makefile.linux called
 	@echo 46 Environment : ${ENV} 
 	@echo 47 finished system build on `date` | tee >lastBuildDate
+	@- grep "result FAILED" int/input/*.regress
 
 <<rootdirs>>
 <<noweb>>
@@ -2331,6 +2359,7 @@ all: rootdirs noweb srcsetup lspdir srcdir
 	@echo 45 Makefile.linux called
 	@echo 46 Environment : ${ENV} 
 	@echo 47 finished system build on `date` | tee >lastBuildDate
+	@- grep "result FAILED" int/input/*.regress
 
 <<rootdirs>>
 <<noweb>>
@@ -2378,6 +2407,7 @@ all: rootdirs noweb srcsetup lspdir srcdir
 	@echo 48 Makefile.linuxglibc called
 	@echo 49 Environment : ${ENV} 
 	@echo 50 finished system build on `date` | tee >lastBuildDate
+	@- grep "result FAILED" int/input/*.regress
 
 <<rootdirs>>
 <<noweb>>
@@ -2424,6 +2454,7 @@ all: rootdirs noweb srcsetup lspdir srcdir
 	@echo 51 Makefile.linuxglibc2.1 called
 	@echo 52 Environment : ${ENV} 
 	@echo 53 finished system build on `date` | tee >lastBuildDate
+	@- grep "result FAILED" int/input/*.regress
 
 <<rootdirs>>
 <<noweb>>
@@ -2475,6 +2506,7 @@ all: rootdirs noweb srcsetup lspdir srcdir
 	@echo 45 Makefile.linux called
 	@echo 46 Environment : ${ENV} 
 	@echo 47 finished system build on `date` | tee >lastBuildDate
+	@- grep "result FAILED" int/input/*.regress
 
 <<rootdirs>>
 <<noweb>>
@@ -2521,6 +2553,7 @@ all: rootdirs noweb srcsetup lspdir srcdir
 	@echo 54 Makefile.rs6000aix3 called
 	@echo 55 Environment : ${ENV} 
 	@echo 56 finished system build on `date` | tee >lastBuildDate
+	@- grep "result FAILED" int/input/*.regress
 
 <<rootdirs>>
 <<noweb>>
@@ -2567,6 +2600,7 @@ all: rootdirs noweb srcsetup lspdir srcdir
 	@echo 57 Makefile.rs6000aix4 called
 	@echo 58 Environment : ${ENV} 
 	@echo 59 finished system build on `date` | tee >lastBuildDate
+	@- grep "result FAILED" int/input/*.regress
 
 <<rootdirs>>
 <<noweb>>
@@ -2613,6 +2647,7 @@ all: rootdirs noweb srcsetup lspdir srcdir
 	@echo 60 Makefile.rs6000aix4.1 called
 	@echo 61 Environment : ${ENV} 
 	@echo 62 finished system build on `date` | tee >lastBuildDate
+	@- grep "result FAILED" int/input/*.regress
 
 <<rootdirs>>
 <<noweb>>
@@ -2659,6 +2694,7 @@ all: rootdirs noweb srcsetup lspdir srcdir
 	@echo 63 Makefile.rs6000aix4.3 called
 	@echo 64 Environment : ${ENV} 
 	@echo 65 finished system build on `date` | tee >lastBuildDate
+	@- grep "result FAILED" int/input/*.regress
 
 <<rootdirs>>
 <<noweb>>
@@ -2706,6 +2742,7 @@ all: rootdirs noweb srcsetup lspdir srcdir
 	@echo 66 Makefile.sun4os55c called
 	@echo 67 Environment : ${ENV} 
 	@echo 68 finished system build on `date` | tee >lastBuildDate
+	@- grep "result FAILED" int/input/*.regress
 
 <<rootdirs>>
 <<noweb>>
@@ -2752,6 +2789,7 @@ all: rootdirs noweb srcsetup lspdir srcdir
 	@echo 69 Makefile.sun4os55g called
 	@echo 70 Environment : ${ENV} 
 	@echo 71 finished system build on `date` | tee >lastBuildDate
+	@- grep "result FAILED" int/input/*.regress
 
 <<rootdirs>>
 <<noweb>>
@@ -2799,6 +2837,7 @@ all: rootdirs noweb srcsetup lspdir srcdir
 	@echo 72 Makefile.sun4os58c called
 	@echo 73 Environment : ${ENV} 
 	@echo 74 finished system build on `date` | tee >lastBuildDate
+	@- grep "result FAILED" int/input/*.regress
 
 <<rootdirs>>
 <<noweb>>
@@ -2845,6 +2884,7 @@ all: rootdirs noweb srcsetup lspdir srcdir
 	@echo 75 Makefile.sung called
 	@echo 76 Environment : ${ENV} 
 	@echo 77 finished system build on `date` | tee >lastBuildDate
+	@- grep "result FAILED" int/input/*.regress
 
 <<rootdirs>>
 <<noweb>>
@@ -2908,6 +2948,7 @@ all: rootdirs noweb srcsetup lspdir srcdir
 	@echo 45 Makefile.linux called
 	@echo 46 Environment : ${ENV} 
 	@echo 47 finished system build on `date` | tee >lastBuildDate
+	@- grep "result FAILED" int/input/*.regress
 
 <<rootdirs>>
 <<noweb>>
diff --git a/changelog b/changelog
index 5ffeca9..af22f17 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,5 @@
+20090414 tpd src/axiom-website/patches.html 20090414.05.tpd.patch
+20090414 tpd Makefile report regression failures
 20090414 tpd src/axiom-website/patches.html 20090414.04.tpd.patch
 20090414 tpd Makefile add Makefile.slackware chunk
 20090414 tpd src/axiom-website/patches.html 20090414.03.tpd.patch
diff --git a/src/axiom-website/patches.html b/src/axiom-website/patches.html
index b6869fc..0e3f6ef 100644
--- a/src/axiom-website/patches.html
+++ b/src/axiom-website/patches.html
@@ -1082,5 +1082,7 @@ src/scripts/SPADEDIT fix 7192, add SPADEDIT for )edit<br/>
 readme add Michael Becker<br/>
 <a href="patches/20090414.04.tpd.patch">20090414.04.tpd.patch</a>
 Makefile add Makefile.slackware chunk<br/>
+<a href="patches/20090414.05.tpd.patch">20090414.05.tpd.patch</a>
+Makefile report regression failures<br/>
  </body>
 </html>

\start
Date: Tue, 14 Apr 2009 23:50:54 +0200
From: Michael Becker
To: list
Subject: axiom-mar2009 release :   draw problem


    hi,


    i tried to draw a surface, typing 'z' instead of 'y' :

         draw(surface(x,x*x,y),x=0..5,z=0..3)

    axiom (and open-axiom/gcl) responds with


    ...
    ...
    Loading /usr_local/axiom0309/mnt/opensuse/algebra/PALETTE.o for
      domain Palette

Unrecoverable error: Segmentation violation..

\start
Date: Tue, 14 Apr 2009 19:17:50 -0400
From: Tim Daly
To: Michael Becker
Subject: Re: axiom-mar2009 release :   draw problem 

>     i tried to draw a surface, typing 'z' instead of 'y' :
> 
>          draw(surface(x,x*x,y),x=0..5,z=0..3)
> 
>     axiom (and open-axiom/gcl) responds with
> 
> 
>     ...
>     ...
>     Loading /usr_local/axiom0309/mnt/opensuse/algebra/PALETTE.o for 
>       domain Palette 
> 
OK. this is bug 7195

With my kind of luck it is probably related to libXpm :-)

It is unusual for the interpreter to exit this way.
It usually will happen if there has already been at least one other
error that occurs. The exit happens on the second error.

\start
Date: Tue, 14 Apr 2009 19:55:45 -0500
From: Tim Daly
To: list
Subject: 20090414.06.tpd.patch (bookvol10.4 add Bezier package)

A new Bezier package has been added. It does linear, quadratic, and
cubic bezier curves as a function of t. Thanks to Barry Trager for
the syntax help.
===================================================================
diff --git a/books/bookvol10.4.pamphlet b/books/bookvol10.4.pamphlet
index 2e1056b..fb1fa99 100644
--- a/books/bookvol10.4.pamphlet
+++ b/books/bookvol10.4.pamphlet
@@ -3676,13 +3676,14 @@ difference(getDomains 'IndexedAggregate,getDomains 'Collection)
 
 --S 3 of 5
 credits()
+--R 
 --RAn alphabetical listing of contributors to AXIOM:
 --RCyril Alberga          Roy Adler              Christian Aistleitner
 --RRichard Anderson       George Andrews         S.J. Atkins
 --RHenry Baker            Stephen Balzac         Yurij Baransky
 --RDavid R. Barton        Gerald Baumgartner     Gilbert Baumslag
---RJay Belanger           David Bindel           Fred Blair
---RVladimir Bondarenko    Mark Botch
+--RMichael Becker         Jay Belanger           David Bindel
+--RFred Blair             Vladimir Bondarenko    Mark Botch
 --RAlexandre Bouyer       Peter A. Broadbery     Martin Brock
 --RManuel Bronstein       Stephen Buchwald       Florian Bundschuh
 --RLuanne Burns           William Burge
@@ -5113,6 +5114,193 @@ BasicOperatorFunctions1(A:SetCategory): Exports == Implementation where
 
 @
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{package BEZIER Bezier}
+<<Bezier.input>>=
+)set break resume
+)sys rm -f Bezier.output
+)spool Bezier.output
+)set message test on
+)set message auto off
+)clear all
+--S 1
+n:=linearBezier([2.0,2.0],[4.0,4.0])
+--R
+--I   (1)  theMap(BEZIER;linearBezier;2LM;1!0,707)
+--R                                                  Type: (Float -> List Float)
+--E 1
+
+--S 2
+[n(t/10.0) for t in 0..10 by 1]
+--R
+--R   (2)
+--R   [[2.0,2.0], [2.2,2.2], [2.4,2.4], [2.6,2.6], [2.8,2.8], [3.0,3.0],
+--R    [3.2,3.2], [3.4,3.4], [3.6,3.6], [3.8,3.8], [4.0,4.0]]
+--R                                                        Type: List List Float
+--E 2
+
+--S 3
+n:=quadraticBezier([2.0,2.0],[4.0,4.0],[6.0,2.0])
+--R
+--I   (3)  theMap(BEZIER;quadraticBezier;3LM;2!0,291)
+--R                                                  Type: (Float -> List Float)
+--E 3
+
+--S 4
+[n(t/10.0) for t in 0..10 by 1]
+--R
+--R   (4)
+--R   [[2.0,2.0], [2.4,2.36], [2.8,2.64], [3.2,2.84], [3.6,2.96], [4.0,3.0],
+--R    [4.4,2.96], [4.8,2.84], [5.2,2.64], [5.6,2.36], [6.0,2.0]]
+--R                                                        Type: List List Float
+--E 4
+
+--S 5
+n:=cubicBezier([2.0,2.0],[2.0,4.0],[6.0,4.0],[6.0,2.0])
+--R
+--I   (5)  theMap(BEZIER;cubicBezier;4LM;3!0,915)
+--R                                                  Type: (Float -> List Float)
+--E 5
+
+--S 6
+[n(t/10.0) for t in 0..10 by 1]
+--R
+--R   (6)
+--R   [[2.0,2.0], [2.112,2.54], [2.416,2.96], [2.864,3.26], [3.408,3.44],
+--R    [4.0,3.5], [4.592,3.44], [5.136,3.26], [5.584,2.96], [5.888,2.54],
+--R    [6.0,2.0]]
+--R                                                        Type: List List Float
+--E 6
+
+@
+<<Bezier.help>>=
+====================================================================
+Bezier Curve examples
+====================================================================
+
+A linear Bezier curve is a simple interpolation between the 
+starting point and the ending point based on a parameter t.
+
+Given a start point a=[x1,y1] and an endpoint b=[x2,y2]
+f(t) == [(1-t)*x1 + t*x2, (1-t)*y1 + t*y2]
+
+n:=linearBezier([2.0,2.0],[4.0,4.0])
+   theMap(BEZIER;linearBezier;2LM;1!0,707)
+
+[n(t/10.0) for t in 0..10 by 1]
+   [[2.0,2.0], [2.2,2.2], [2.4,2.4], [2.6,2.6], [2.8,2.8], [3.0,3.0],
+    [3.2,3.2], [3.4,3.4], [3.6,3.6], [3.8,3.8], [4.0,4.0]]
+
+
+A quadratic Bezier curve is a simple interpolation between the 
+starting point, a middle point, and the ending point based on 
+a parameter t.
+
+Given a start point a=[x1,y1], a middle point b=[x2,y2], 
+and an endpoint c=[x3,y3]
+
+f(t) == [(1-t)^2 x1 + 2t(1-t) x2 + t^2 x3,
+         (1-t)^2 y1 + 2t(1-t) y2 + t^2 y3]
+
+n:=quadraticBezier([2.0,2.0],[4.0,4.0],[6.0,2.0])
+   theMap(BEZIER;quadraticBezier;3LM;2!0,291)
+
+[n(t/10.0) for t in 0..10 by 1]
+   [[2.0,2.0], [2.4,2.36], [2.8,2.64], [3.2,2.84], [3.6,2.96], [4.0,3.0],
+    [4.4,2.96], [4.8,2.84], [5.2,2.64], [5.6,2.36], [6.0,2.0]]
+
+A cubic Bezier curve is a simple interpolation between the 
+starting point, a left-middle point,, a right-middle point,
+and the ending point based on a parameter t.
+
+Given a start point a=[x1,y1], the left-middle point b=[x2,y2],
+the right-middle point c=[x3,y3] and an endpoint d=[x4,y4]
+
+f(t) == [(1-t)^3 x1 + 3t(1-t)^2 x2 + 3t^2 (1-t) x3 + t^3 x4,
+         (1-t)^3 y1 + 3t(1-t)^2 y2 + 3t^2 (1-t) y3 + t^3 y4]
+
+n:=cubicBezier([2.0,2.0],[2.0,4.0],[6.0,4.0],[6.0,2.0])
+   theMap(BEZIER;cubicBezier;4LM;3!0,915)
+
+[n(t/10.0) for t in 0..10 by 1]
+   [[2.0,2.0], [2.112,2.54], [2.416,2.96], [2.864,3.26], [3.408,3.44],
+    [4.0,3.5], [4.592,3.44], [5.136,3.26], [5.584,2.96], [5.888,2.54],
+    [6.0,2.0]]
+
+See Also:
+o )show Bezier
+
+@
+\pagehead{Bezier}{BEZIER}
+\pagepic{ps/v104bezier.ps}{BEZIER}{1.00}
+
+{\bf Exports:}\\
+\begin{tabular}{llll}
+\cross{BEZIER}{bezoutDiscriminant} &
+\cross{BEZIER}{bezoutMatrix} &
+\cross{BEZIER}{bezoutResultant} &
+\cross{BEZIER}{sylvesterMatrix} 
+\end{tabular}
+
+<<package BEZIER Bezier>>=
+)abbrev package BEZIER Bezier
+++ Author: Timothy Daly
+++ Date Created: 14 April 2009
+++ Description: Provide linear, quadratic, and cubic spline bezier curves
+Bezier(R:Ring): with
+   linearBezier: (x:List R,y:List R) -> Mapping(List R,R)
+   ++ A linear Bezier curve is a simple interpolation between the 
+   ++ starting point and the ending point based on a parameter t.
+   ++ Given a start point a=[x1,y1] and an endpoint b=[x2,y2]
+   ++ f(t) == [(1-t)*x1 + t*x2, (1-t)*y1 + t*y2]
+   ++
+   ++X n:=linearBezier([2.0,2.0],[4.0,4.0])
+   ++X [n(t/10.0) for t in 0..10 by 1]
+   quadraticBezier: (x:List R,y:List R,z:List R) -> Mapping(List R,R)
+   ++ A quadratic Bezier curve is a simple interpolation between the 
+   ++ starting point, a middle point, and the ending point based on 
+   ++ a parameter t.
+   ++ Given a start point a=[x1,y1], a middle point b=[x2,y2], 
+   ++ and an endpoint c=[x3,y3]
+   ++ f(t) == [(1-t)^2 x1 + 2t(1-t) x2 + t^2 x3,
+   ++          (1-t)^2 y1 + 2t(1-t) y2 + t^2 y3]
+   ++
+   ++X n:=quadraticBezier([2.0,2.0],[4.0,4.0],[6.0,2.0])
+   ++X [n(t/10.0) for t in 0..10 by 1]
+   cubicBezier: (w:List R,x:List R,y:List R,z:List R) -> Mapping(List R,R)
+   ++ A cubic Bezier curve is a simple interpolation between the 
+   ++ starting point, a left-middle point,, a right-middle point,
+   ++ and the ending point based on a parameter t.
+   ++ Given a start point a=[x1,y1], the left-middle point b=[x2,y2],
+   ++ the right-middle point c=[x3,y3] and an endpoint d=[x4,y4]
+   ++ f(t) == [(1-t)^3 x1 + 3t(1-t)^2 x2 + 3t^2 (1-t) x3 + t^3 x4,
+   ++          (1-t)^3 y1 + 3t(1-t)^2 y2 + 3t^2 (1-t) y3 + t^3 y4]
+   ++
+   ++X n:=cubicBezier([2.0,2.0],[2.0,4.0],[6.0,4.0],[6.0,2.0])
+   ++X [n(t/10.0) for t in 0..10 by 1]
+ == add
+   linearBezier(a,b) == 
+    [(1-#1)*(a.1) + #1*(b.1), (1-#1)*(a.2) + #1*(b.2)]
+
+   quadraticBezier(a,b,c) == 
+    [(1-#1)**2*(a.1) + 2*#1*(1-#1)*(b.1) + (#1)**2*(c.1),
+     (1-#1)**2*(a.2) + 2*#1*(1-#1)*(b.2) + (#1)**2*(c.2)]
+
+   cubicBezier(a,b,c,d) == 
+    [(1-#1)**3*(a.1) + 3*(#1)*(1-#1)**2*(b.1) 
+        + 3*(#1)**2*(1-#1)*(c.1) + (#1)**3*(d.1),
+     (1-#1)**3*(a.2) + 3*(#1)*(1-#1)**2*(b.2)
+        + 3*(#1)**2*(1-#1)*(c.2) + (#1)**3*(d.2)]
+     
+@
+<<BEZIER.dotabb>>=
+"BEZIER" [color="#FF4488",href="bookvol10.4.pdf#nameddest=BEZIER"]
+"LMODULE" [color="#4488FF",href="bookvol10.2.pdf#nameddest=LMODULE"]
+"SGROUP" [color="#4488FF",href="bookvol10.2.pdf#nameddest=SGROUP"]
+"BEZIER" -> "LMODULE"
+"BEZIER" -> "SGROUP"
+
+@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 \section{package BEZOUT BezoutMatrix}
 \pagehead{BezoutMatrix}{BEZOUT}
 \pagepic{ps/v104bezoutmatrix.ps}{BEZOUT}{1.00}
diff --git a/books/ps/v104bezier.ps b/books/ps/v104bezier.ps
new file mode 100644
index 0000000..9d3ce7a
--- /dev/null
+++ b/books/ps/v104bezier.ps
@@ -0,0 +1,326 @@
+%!PS-Adobe-2.0
+%%Creator: Graphviz version 2.16.1 (Mon Jul  7 18:20:33 UTC 2008)
+%%For: (root) root
+%%Title: pic
+%%Pages: (atend)
+%%BoundingBox: (atend)
+%%EndComments
+save
+%%BeginProlog
+/DotDict 200 dict def
+DotDict begin
+
+/setupLatin1 {
+mark
+/EncodingVector 256 array def
+ EncodingVector 0
+
+ISOLatin1Encoding 0 255 getinterval putinterval
+EncodingVector 45 /hyphen put
+
+% Set up ISO Latin 1 character encoding
+/starnetISO {
+        dup dup findfont dup length dict begin
+        { 1 index /FID ne { def }{ pop pop } ifelse
+        } forall
+        /Encoding EncodingVector def
+        currentdict end definefont
+} def
+/Times-Roman starnetISO def
+/Times-Italic starnetISO def
+/Times-Bold starnetISO def
+/Times-BoldItalic starnetISO def
+/Helvetica starnetISO def
+/Helvetica-Oblique starnetISO def
+/Helvetica-Bold starnetISO def
+/Helvetica-BoldOblique starnetISO def
+/Courier starnetISO def
+/Courier-Oblique starnetISO def
+/Courier-Bold starnetISO def
+/Courier-BoldOblique starnetISO def
+cleartomark
+} bind def
+
+%%BeginResource: procset graphviz 0 0
+/coord-font-family /Times-Roman def
+/default-font-family /Times-Roman def
+/coordfont coord-font-family findfont 8 scalefont def
+
+/InvScaleFactor 1.0 def
+/set_scale {
+       dup 1 exch div /InvScaleFactor exch def
+       scale
+} bind def
+
+% styles
+/solid { [] 0 setdash } bind def
+/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def
+/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def
+/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def
+/bold { 2 setlinewidth } bind def
+/filled { } bind def
+/unfilled { } bind def
+/rounded { } bind def
+/diagonals { } bind def
+
+% hooks for setting color 
+/nodecolor { sethsbcolor } bind def
+/edgecolor { sethsbcolor } bind def
+/graphcolor { sethsbcolor } bind def
+/nopcolor {pop pop pop} bind def
+
+/beginpage {	% i j npages
+	/npages exch def
+	/j exch def
+	/i exch def
+	/str 10 string def
+	npages 1 gt {
+		gsave
+			coordfont setfont
+			0 0 moveto
+			(\() show i str cvs show (,) show j str cvs show (\)) show
+		grestore
+	} if
+} bind def
+
+/set_font {
+	findfont exch
+	scalefont setfont
+} def
+
+% draw text fitted to its expected width
+/alignedtext {			% width text
+	/text exch def
+	/width exch def
+	gsave
+		width 0 gt {
+			[] 0 setdash
+			text stringwidth pop width exch sub text length div 0 text ashow
+		} if
+	grestore
+} def
+
+/boxprim {				% xcorner ycorner xsize ysize
+		4 2 roll
+		moveto
+		2 copy
+		exch 0 rlineto
+		0 exch rlineto
+		pop neg 0 rlineto
+		closepath
+} bind def
+
+/ellipse_path {
+	/ry exch def
+	/rx exch def
+	/y exch def
+	/x exch def
+	matrix currentmatrix
+	newpath
+	x y translate
+	rx ry scale
+	0 0 1 0 360 arc
+	setmatrix
+} bind def
+
+/endpage { showpage } bind def
+/showpage { } def
+
+/layercolorseq
+	[	% layer color sequence - darkest to lightest
+		[0 0 0]
+		[.2 .8 .8]
+		[.4 .8 .8]
+		[.6 .8 .8]
+		[.8 .8 .8]
+	]
+def
+
+/layerlen layercolorseq length def
+
+/setlayer {/maxlayer exch def /curlayer exch def
+	layercolorseq curlayer 1 sub layerlen mod get
+	aload pop sethsbcolor
+	/nodecolor {nopcolor} def
+	/edgecolor {nopcolor} def
+	/graphcolor {nopcolor} def
+} bind def
+
+/onlayer { curlayer ne {invis} if } def
+
+/onlayers {
+	/myupper exch def
+	/mylower exch def
+	curlayer mylower lt
+	curlayer myupper gt
+	or
+	{invis} if
+} def
+
+/curlayer 0 def
+
+%%EndResource
+%%EndProlog
+%%BeginSetup
+14 default-font-family set_font
+1 setmiterlimit
+% /arrowlength 10 def
+% /arrowwidth 5 def
+
+% make sure pdfmark is harmless for PS-interpreters other than Distiller
+/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse
+% make '<<' and '>>' safe on PS Level 1 devices
+/languagelevel where {pop languagelevel}{1} ifelse
+2 lt {
+    userdict (<<) cvn ([) cvn load put
+    userdict (>>) cvn ([) cvn load put
+} if
+
+%%EndSetup
+setupLatin1
+%%Page: 1 1
+%%PageBoundingBox: 36 36 218 152
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 182 116 boxprim clip newpath
+1 1 set_scale 0 rotate 40 40 translate
+0.167 0.600 1.000 graphcolor
+newpath -4 -4 moveto
+-4 716 lineto
+536 716 lineto
+536 -4 lineto
+closepath fill
+1 setlinewidth
+0.167 0.600 1.000 graphcolor
+newpath -4 -4 moveto
+-4 716 lineto
+536 716 lineto
+536 -4 lineto
+closepath stroke
+% BEZIER
+gsave
+[ /Rect [ 58 72 122 108 ]
+  /Border [ 0 0 0 ]
+  /Action << /Subtype /URI /URI (bookvol10.4.pdf#nameddest=BEZIER) >>
+  /Subtype /Link
+/ANN pdfmark
+0.939 0.733 1.000 nodecolor
+newpath 122 108 moveto
+58 108 lineto
+58 72 lineto
+122 72 lineto
+closepath fill
+1 setlinewidth
+filled
+0.939 0.733 1.000 nodecolor
+newpath 122 108 moveto
+58 108 lineto
+58 72 lineto
+122 72 lineto
+closepath stroke
+0.000 0.000 0.000 nodecolor
+14.00 /Times-Roman set_font
+65.5 85.9 moveto 49 (BEZIER) alignedtext
+grestore
+% LMODULE
+gsave
+[ /Rect [ 0 0 84 36 ]
+  /Border [ 0 0 0 ]
+  /Action << /Subtype /URI /URI (bookvol10.2.pdf#nameddest=LMODULE) >>
+  /Subtype /Link
+/ANN pdfmark
+0.606 0.733 1.000 nodecolor
+newpath 84 36 moveto
+2.63123e-14 36 lineto
+5.2458e-15 1.06581e-14 lineto
+84 0 lineto
+closepath fill
+1 setlinewidth
+filled
+0.606 0.733 1.000 nodecolor
+newpath 84 36 moveto
+2.63123e-14 36 lineto
+5.2458e-15 1.06581e-14 lineto
+84 0 lineto
+closepath stroke
+0.000 0.000 0.000 nodecolor
+14.00 /Times-Roman set_font
+7.5 13.9 moveto 69 (LMODULE) alignedtext
+grestore
+% BEZIER->LMODULE
+gsave
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 78 72 moveto
+73 64 66 54 60 44 curveto
+stroke
+0.000 0.000 0.000 edgecolor
+newpath 62.8 41.9 moveto
+54 36 lineto
+57.2 46.1 lineto
+closepath fill
+1 setlinewidth
+solid
+0.000 0.000 0.000 edgecolor
+newpath 62.8 41.9 moveto
+54 36 lineto
+57.2 46.1 lineto
+closepath stroke
+grestore
+% SGROUP
+gsave
+[ /Rect [ 102 0 174 36 ]
+  /Border [ 0 0 0 ]
+  /Action << /Subtype /URI /URI (bookvol10.2.pdf#nameddest=SGROUP) >>
+  /Subtype /Link
+/ANN pdfmark
+0.606 0.733 1.000 nodecolor
+newpath 174 36 moveto
+102 36 lineto
+102 1.06581e-14 lineto
+174 0 lineto
+closepath fill
+1 setlinewidth
+filled
+0.606 0.733 1.000 nodecolor
+newpath 174 36 moveto
+102 36 lineto
+102 1.06581e-14 lineto
+174 0 lineto
+closepath stroke
+0.000 0.000 0.000 nodecolor
+14.00 /Times-Roman set_font
+110 13.9 moveto 56 (SGROUP) alignedtext
+grestore
+% BEZIER->SGROUP
+gsave
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 102 72 moveto
+107 64 114 54 120 44 curveto
+stroke
+0.000 0.000 0.000 edgecolor
+newpath 122.8 46.1 moveto
+126 36 lineto
+117.2 41.9 lineto
+closepath fill
+1 setlinewidth
+solid
+0.000 0.000 0.000 edgecolor
+newpath 122.8 46.1 moveto
+126 36 lineto
+117.2 41.9 lineto
+closepath stroke
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+%%Pages: 1
+%%BoundingBox: 36 36 218 152
+end
+restore
+%%EOF
diff --git a/changelog b/changelog
index af22f17..fd00320 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,9 @@
+20090414 tpd src/axiom-website/patches.html 20090414.06.tpd.patch
+20090414 tpd src/input/unittest3.input add Bezier package
+20090414 tpd src/input/unittest2.input add Bezier package
+20090414 tpd src/algebra/exposed.lsp add Bezier package
+20090414 tpd src/algebra/Makefile add Bezier package
+20090414 tpd books/bookvol10.4 add Bezier package
 20090414 tpd src/axiom-website/patches.html 20090414.05.tpd.patch
 20090414 tpd Makefile report regression failures
 20090414 tpd src/axiom-website/patches.html 20090414.04.tpd.patch
diff --git a/src/algebra/Makefile.pamphlet b/src/algebra/Makefile.pamphlet
index 4da2584..f454c55 100644
--- a/src/algebra/Makefile.pamphlet
+++ b/src/algebra/Makefile.pamphlet
@@ -790,8 +790,8 @@ OASGP PDRING
 <<layer2>>=
 
 LAYER2=\
-  ${OUT}/API.o      ${OUT}/ASP29.o    \
-  ${OUT}/ATRIG.o    ${OUT}/ATRIG-.o   ${OUT}/BMODULE.o  ${OUT}/CACHSET.o  \
+  ${OUT}/API.o      ${OUT}/ASP29.o    ${OUT}/ATRIG.o    ${OUT}/ATRIG-.o   \
+  ${OUT}/BEZIER.o   ${OUT}/BMODULE.o  ${OUT}/CACHSET.o  \
   ${OUT}/CHARNZ.o   ${OUT}/CHARZ.o    ${OUT}/DVARCAT.o  ${OUT}/DVARCAT-.o \
   ${OUT}/ELEMFUN.o  ${OUT}/ELEMFUN-.o ${OUT}/ESTOOLS2.o ${OUT}/EVALAB.o   \
   ${OUT}/EVALAB-.o  ${OUT}/FAMONC.o   ${OUT}/FCOMP.o    ${OUT}/FEVALAB.o  \
@@ -869,6 +869,11 @@ LAYER2=\
 /*"ATRIG-" -> {"SETCAT"; "BASTYPE"; "KOERCE"; "SGROUP"; "MONOID"}*/
 "ATRIG-" -> "LMODULE/SGROUP"
 
+"BEZIER" [color="#FF4488",href="bookvol10.4.pdf#nameddest=BEZIER"]
+/*"BEZIER" -> {"RING"; "RNG"; "ABELGRP"; "CABMON"; "ABELMON"; "ABELSG"}*/
+/*"BEZIER" -> {"SETCAT"; "BASTYPE"; "KOERCE" "SGROUP"; "MONOID"; "LMODULE"} */
+"BEZIER" -> "LMODULE/SGROUP"
+
 "BMODULE" [color="#4488FF",href="bookvol10.2.pdf#nameddest=BMODULE"]
 /*"BMODULE" -> {"RING"; "RNG"; "ABELGRP"; "CABMON"; "ABELMON"; "ABELSG"}*/
 /*"BMODULE" -> {"SETCAT"; "BASTYPE"; "KOERCE"; "SGROUP"; "MONOID"}*/
@@ -16435,7 +16440,8 @@ SPADHELP=\
  ${HELP}/ApplicationProgramInterface.help \
  ${HELP}/ArrayStack.help \
  ${HELP}/AssociationList.help        ${HELP}/BalancedBinaryTree.help \
- ${HELP}/BasicOperator.help          ${HELP}/BinaryExpansion.help \
+ ${HELP}/BasicOperator.help          ${HELP}/Bezier.help \
+ ${HELP}/BinaryExpansion.help \
  ${HELP}/BinarySearchTree.help       ${HELP}/CardinalNumber.help \
  ${HELP}/CartesianTensor.help        ${HELP}/Character.help \
  ${HELP}/CharacterClass.help         ${HELP}/CliffordAlgebra.help \
@@ -16525,7 +16531,8 @@ REGRESS=\
  ApplicationProgramInterface.regress \
  ArrayStack.regress \
  AssociationList.regress        BalancedBinaryTree.regress \
- BasicOperator.regress          BinaryExpansion.regress \
+ BasicOperator.regress          Bezier.regress \
+ BinaryExpansion.regress \
  BinarySearchTree.regress       CardinalNumber.regress \
  CartesianTensor.regress        Character.regress \
  CharacterClass.regress         CliffordAlgebra.regress \
@@ -16659,6 +16666,15 @@ ${HELP}/BasicOperator.help: ${BOOKS}/bookvol10.3.pamphlet
             >${INPUT}/BasicOperator.input
 	@echo "BasicOperator (BOP)" >>${HELPFILE}
 
+${HELP}/Bezier.help: ${BOOKS}/bookvol10.4.pamphlet
+	@echo 7004 create Bezier.help from ${BOOKS}/bookvol10.4.pamphlet
+	@${TANGLE} -R"Bezier.help" ${BOOKS}/bookvol10.4.pamphlet \
+            >${HELP}/Bezier.help
+	@cp ${HELP}/Bezier.help ${HELP}/BEZIER.help
+	@${TANGLE} -R"Bezier.input" ${BOOKS}/bookvol10.4.pamphlet \
+            >${INPUT}/Bezier.input
+	@echo "Bezier (BEZIER)" >>${HELPFILE}
+
 ${HELP}/BinaryExpansion.help: ${BOOKS}/bookvol10.3.pamphlet
 	@echo 7004 create BinaryExpansion.help from \
             ${BOOKS}/bookvol10.3.pamphlet
diff --git a/src/algebra/exposed.lsp.pamphlet b/src/algebra/exposed.lsp.pamphlet
index cc850fc..915404d 100644
--- a/src/algebra/exposed.lsp.pamphlet
+++ b/src/algebra/exposed.lsp.pamphlet
@@ -67,6 +67,7 @@
   (|BalancedBinaryTree| . BBTREE)
   (|BasicOperator| . BOP)
   (|BasicOperatorFunctions1| . BOP1)
+  (|Bezier| . BEZIER)
   (|BinaryExpansion| . BINARY)
   (|BinaryFile| . BINFILE)
   (|BinarySearchTree| . BSTREE)
diff --git a/src/axiom-website/patches.html b/src/axiom-website/patches.html
index 0e3f6ef..ef0541a 100644
--- a/src/axiom-website/patches.html
+++ b/src/axiom-website/patches.html
@@ -1084,5 +1084,7 @@ readme add Michael Becker<br/>
 Makefile add Makefile.slackware chunk<br/>
 <a href="patches/20090414.05.tpd.patch">20090414.05.tpd.patch</a>
 Makefile report regression failures<br/>
+<a href="patches/20090414.06.tpd.patch">20090414.06.tpd.patch</a>
+bookvol10.4 add Bezier package<br/>
  </body>
 </html>
diff --git a/src/input/unittest2.input.pamphlet b/src/input/unittest2.input.pamphlet
index d83558f..09899d6 100644
--- a/src/input/unittest2.input.pamphlet
+++ b/src/input/unittest2.input.pamphlet
@@ -98,7 +98,7 @@ Unit test the user level commands
 --S 13 of 237
 )lisp (identity credits)
 --R 
---RValue = ("An alphabetical listing of contributors to AXIOM:" "Cyril Alberga          Roy Adler              Christian Aistleitner" "Richard Anderson       George Andrews         S.J. Atkins" "Henry Baker            Stephen Balzac         Yurij Baransky" "David R. Barton        Gerald Baumgartner     Gilbert Baumslag" "Jay Belanger           David Bindel           Fred Blair" "Vladimir Bondarenko    Mark Botch" "Alexandre Bouyer       Peter A. Broadbery     Martin Brock" "Manuel Bronstein       Stephen Buchwald       Florian Bundschuh" "Luanne Burns           William Burge" "Quentin Carpent        Robert Caviness        Bruce Char" "Ondrej Certik          Cheekai Chin           David V. Chudnovsky" "Gregory V. Chudnovsky  Josh Cohen             Christophe Conil" "Don Coppersmith        George Corliss         Robert Corless" "Gary Cornell           Meino Cramer           Claire Di Crescenzo" "David Cyganski" "Timothy Daly Sr.       Timothy Daly Jr.       James H. Davenport!
" "Didier Deshommes       Michael Dewar" "Jean Della Dora        Gabriel Dos Reis       Claire DiCrescendo" "Sam Dooley             Lionel Ducos           Martin Dunstan" "Brian Dupee            Dominique Duval" "Robert Edwards         Heow Eide-Goodman      Lars Erickson" "Richard Fateman        Bertfried Fauser       Stuart Feldman" "Brian Ford             Albrecht Fortenbacher  George Frances" "Constantine Frangos    Timothy Freeman        Korrinn Fu" "Marc Gaetano           Rudiger Gebauer        Kathy Gerber" "Patricia Gianni        Samantha Goldrich      Holger Gollan" "Teresa Gomez-Diaz      Laureano Gonzalez-Vega Stephen Gortler" "Johannes Grabmeier     Matt Grayson           Klaus Ebbe Grue" "James Griesmer         Vladimir Grinberg      Oswald Gschnitzer" "Jocelyn Guidry" "Steve Hague            Satoshi Hamaguchi      Mike Hansen" "Richard Harke          Vilya Harvey           Martin Hassner" "Arthur S. Hathaway     Dan Hatton             Waldek Hebisch" "Karl Hegb!
loom          Ralf Hemmecke          Henderson" "Antoine Hers!
en         Gernot Hueber" "Pietro Iglio" "Alejandro Jakubi       Richard Jenks" "Kai Kaminski           Grant Keady            Tony Kennedy" "Paul Kosinski          Klaus Kusche           Bernhard Kutzler" "Tim Lahey              Larry Lambe            Franz Lehner" "Frederic Lehobey       Michel Levaud          Howard Levy" "Liu Xiaojun            Rudiger Loos           Michael Lucks" "Richard Luczak" "Camm Maguire           Francois Maltey        Alasdair McAndrew" "Bob McElrath           Michael McGettrick     Ian Meikle" "David Mentre           Victor S. Miller       Gerard Milmeister" "Mohammed Mobarak       H. Michael Moeller     Michael Monagan" "Marc Moreno-Maza       Scott Morrison         Joel Moses" "Mark Murray" "William Naylor         C. Andrew Neff         John Nelder" "Godfrey Nolan          Arthur Norman          Jinzhong Niu" "Michael O'Connor       Summat Oemrawsingh     Kostas Oikonomou" "Humberto Ortiz-Zuazaga" "Julian A. Padget       Bill Page           !
   Susan Pelzel" "Michel Petitot         Didier Pinchon         Ayal Pinkus" "Jose Alfredo Portes" "Claude Quitte" "Arthur C. Ralfs        Norman Ramsey          Anatoly Raportirenko" "Michael Richardson     Renaud Rioboo          Jean Rivlin" "Nicolas Robidoux       Simon Robinson         Raymond Rogers" "Michael Rothstein      Martin Rubey" "Philip Santas          Alfred Scheerhorn      William Schelter" "Gerhard Schneider      Martin Schoenert       Marshall Schor" "Frithjof Schulze       Fritz Schwarz          Nick Simicich" "William Sit            Elena Smirnova         Jonathan Steinbach" Fabio Stumbo           Christine Sundaresan   Robert Sutor" "Moss E. Sweedler       Eugene Surowitz" "Max Tegmark            James Thatcher         Balbir Thomas" "Mike Thomas            Dylan Thurston         Barry Trager" "Themos T. Tsikas" "Gregory Vanuxem" "Bernhard Wall          Stephen Watt           Jaap Weel" "Juergen Weiss          M. Weller              Mark Wegman" "James !
Wen              Thorsten Werther       Michael Wester" "John!
 M. Wiley          Berhard Will           Clifton J. Williamson" "Stephen Wilson         Shmuel Winograd        Robert Wisbauer" "Sandra Wityak          Waldemar Wiwianka      Knut Wolf" "Clifford Yapp          David Yun" "Vadim Zhytnikov        Richard Zippel         Evelyn Zoernack" "Bruno Zuercher         Dan Zwillinger")
+--RValue = ("An alphabetical listing of contributors to AXIOM:" "Cyril Alberga          Roy Adler              Christian Aistleitner" "Richard Anderson       George Andrews         S.J. Atkins" "Henry Baker            Stephen Balzac         Yurij Baransky" "David R. Barton        Gerald Baumgartner     Gilbert Baumslag" "Michael Becker         Jay Belanger           David Bindel" "Fred Blair             Vladimir Bondarenko    Mark Botch" "Alexandre Bouyer       Peter A. Broadbery     Martin Brock" "Manuel Bronstein       Stephen Buchwald       Florian Bundschuh" "Luanne Burns           William Burge" "Quentin Carpent        Robert Caviness        Bruce Char" "Ondrej Certik          Cheekai Chin           David V. Chudnovsky" "Gregory V. Chudnovsky  Josh Cohen             Christophe Conil" "Don Coppersmith        George Corliss         Robert Corless" "Gary Cornell           Meino Cramer           Claire Di Crescenzo" "David Cyganski" "Timothy Daly Sr.       Timothy Daly Jr.!
       James H. Davenport" "Didier Deshommes       Michael Dewar" "Jean Della Dora        Gabriel Dos Reis       Claire DiCrescendo" "Sam Dooley             Lionel Ducos           Martin Dunstan" "Brian Dupee            Dominique Duval" "Robert Edwards         Heow Eide-Goodman      Lars Erickson" "Richard Fateman        Bertfried Fauser       Stuart Feldman" "Brian Ford             Albrecht Fortenbacher  George Frances" "Constantine Frangos    Timothy Freeman        Korrinn Fu" "Marc Gaetano           Rudiger Gebauer        Kathy Gerber" "Patricia Gianni        Samantha Goldrich      Holger Gollan" "Teresa Gomez-Diaz      Laureano Gonzalez-Vega Stephen Gortler" "Johannes Grabmeier     Matt Grayson           Klaus Ebbe Grue" "James Griesmer         Vladimir Grinberg      Oswald Gschnitzer" "Jocelyn Guidry" "Steve Hague            Satoshi Hamaguchi      Mike Hansen" "Richard Harke          Vilya Harvey           Martin Hassner" "Arthur S. Hathaway     Dan Hatton             W!
aldek Hebisch" "Karl Hegbloom          Ralf Hemmecke         !
 Henderson" "Antoine Hersen         Gernot Hueber" "Pietro Iglio" "Alejandro Jakubi       Richard Jenks" "Kai Kaminski           Grant Keady            Tony Kennedy" "Paul Kosinski          Klaus Kusche           Bernhard Kutzler" "Tim Lahey              Larry Lambe            Franz Lehner" "Frederic Lehobey       Michel Levaud          Howard Levy" "Liu Xiaojun            Rudiger Loos           Michael Lucks" "Richard Luczak" "Camm Maguire           Francois Maltey        Alasdair McAndrew" "Bob McElrath           Michael McGettrick     Ian Meikle" "David Mentre           Victor S. Miller       Gerard Milmeister" "Mohammed Mobarak       H. Michael Moeller     Michael Monagan" "Marc Moreno-Maza       Scott Morrison         Joel Moses" "Mark Murray" "William Naylor         C. Andrew Neff         John Nelder" "Godfrey Nolan          Arthur Norman          Jinzhong Niu" "Michael O'Connor       Summat Oemrawsingh     Kostas Oikonomou" "Humberto Ortiz-Zuazaga" "Julian A. Padget  !
     Bill Page              Susan Pelzel" "Michel Petitot         Didier Pinchon         Ayal Pinkus" "Jose Alfredo Portes" "Claude Quitte" "Arthur C. Ralfs        Norman Ramsey          Anatoly Raportirenko" "Michael Richardson     Renaud Rioboo          Jean Rivlin" "Nicolas Robidoux       Simon Robinson         Raymond Rogers" "Michael Rothstein      Martin Rubey" "Philip Santas          Alfred Scheerhorn      William Schelter" "Gerhard Schneider      Martin Schoenert       Marshall Schor" "Frithjof Schulze       Fritz Schwarz          Nick Simicich" "William Sit            Elena Smirnova         Jonathan Steinbach" Fabio Stumbo           Christine Sundaresan   Robert Sutor" "Moss E. Sweedler       Eugene Surowitz" "Max Tegmark            James Thatcher         Balbir Thomas" "Mike Thomas            Dylan Thurston         Barry Trager" "Themos T. Tsikas" "Gregory Vanuxem" "Bernhard Wall          Stephen Watt           Jaap Weel" "Juergen Weiss          M. Weller         !
     Mark Wegman" "James Wen              Thorsten Werther   !
    Michael Wester" "John M. Wiley          Berhard Will           Clifton J. Williamson" "Stephen Wilson         Shmuel Winograd        Robert Wisbauer" "Sandra Wityak          Waldemar Wiwianka      Knut Wolf" "Clifford Yapp          David Yun" "Vadim Zhytnikov        Richard Zippel         Evelyn Zoernack" "Bruno Zuercher         Dan Zwillinger")
 --E 13
 
 --S 14 of 237
@@ -969,7 +969,7 @@ Unit test the user level commands
 --S 155 of 237
 )lisp (identity |$globalExposureGroupAlist|)
 --R 
---RValue = ((|basic| (|AlgebraicManipulations| . ALGMANIP) (|AlgebraicNumber| . AN) (|AlgFactor| . ALGFACT) (|AlgebraicMultFact| . ALGMFACT) (|AlgebraPackage| . ALGPKG) (|AlgebraGivenByStructuralConstants| . ALGSC) (|Any| . ANY) (|AnyFunctions1| . ANY1) (|ApplicationProgramInterface| . API) (|ArrayStack| . ASTACK) (|AssociatedJordanAlgebra| . JORDAN) (|AssociatedLieAlgebra| . LIE) (|AttachPredicates| . PMPRED) (|AxiomServer| . AXSERV) (|BalancedBinaryTree| . BBTREE) (|BasicOperator| . BOP) (|BasicOperatorFunctions1| . BOP1) (|BinaryExpansion| . BINARY) (|BinaryFile| . BINFILE) (|BinarySearchTree| . BSTREE) (|BinaryTournament| . BTOURN) (|BinaryTree| . BTREE) (|Bits| . BITS) (|Boolean| . BOOLEAN) (|CardinalNumber| . CARD) (|CartesianTensor| . CARTEN) (|CartesianTensorFunctions2| . CARTEN2) (|Character| . CHAR) (|CharacterClass| . CCLASS) (|CharacteristicPolynomialPackage| . CHARPOL) (|CliffordAlgebra| . CLIF) (|Color| . COLOR) (|CommonDenominator| . CDEN) (|Commutator| . COM!
M) (|Complex| . COMPLEX) (|ComplexFactorization| . COMPFACT) (|ComplexFunctions2| . COMPLEX2) (|ComplexRootPackage| . CMPLXRT) (|ComplexTrigonometricManipulations| . CTRIGMNP) (|ContinuedFraction| . CONTFRAC) (|CoordinateSystems| . COORDSYS) (|CRApackage| . CRAPACK) (|CycleIndicators| . CYCLES) (|Database| . DBASE) (|DataList| . DLIST) (|DecimalExpansion| . DECIMAL) (|DenavitHartenbergMatrix| . DHMATRIX) (|Dequeue| . DEQUEUE) (|DiophantineSolutionPackage| . DIOSP) (|DirectProductFunctions2| . DIRPROD2) (|DisplayPackage| . DISPLAY) (|DistinctDegreeFactorize| . DDFACT) (|DoubleFloat| . DFLOAT) (|DoubleFloatSpecialFunctions| . DFSFUN) (|DrawComplex| . DRAWCX) (|DrawNumericHack| . DRAWHACK) (|DrawOption| . DROPT) (|EigenPackage| . EP) (|ElementaryFunctionDefiniteIntegration| . DEFINTEF) (|ElementaryFunctionLODESolver| . LODEEF) (|ElementaryFunctionODESolver| . ODEEF) (|ElementaryFunctionSign| . SIGNEF) (|ElementaryFunctionStructurePackage| . EFSTRUC) (|Equation| . EQ) (|Equation!
Functions2| . EQ2) (|ErrorFunctions| . ERROR) (|EuclideanGroe!
bnerBasisPackage| . GBEUCLID) (|Exit| . EXIT) (|Expression| . EXPR) (|ExpressionFunctions2| . EXPR2) (|ExpressionSolve| . EXPRSOL) (|ExpressionSpaceFunctions2| . ES2) (|ExpressionSpaceODESolver| . EXPRODE) (|ExpressionToOpenMath| . OMEXPR) (|ExpressionToUnivariatePowerSeries| . EXPR2UPS) (|Factored| . FR) (|FactoredFunctions2| . FR2) (|File| . FILE) (|FileName| . FNAME) (|FiniteAbelianMonoidRingFunctions2| . FAMR2) (|FiniteDivisorFunctions2| . FDIV2) (|FiniteField| . FF) (|FiniteFieldCyclicGroup| . FFCG) (|FiniteFieldPolynomialPackage2| . FFPOLY2) (|FiniteFieldNormalBasis| . FFNB) (|FiniteFieldHomomorphisms| . FFHOM) (|FiniteLinearAggregateFunctions2| . FLAGG2) (|FiniteLinearAggregateSort| . FLASORT) (|FiniteSetAggregateFunctions2| . FSAGG2) (|FlexibleArray| . FARRAY) (|Float| . FLOAT) (|FloatingRealPackage| . FLOATRP) (|FloatingComplexPackage| . FLOATCP) (|FourierSeries| . FSERIES) (|Fraction| . FRAC) (|FractionalIdealFunctions2| . FRIDEAL2) (|FractionFreeFastGaussian| . FF!
FG) (|FractionFreeFastGaussianFractions| . FFFGF) (|FractionFunctions2| . FRAC2) (|FreeNilpotentLie| . FNLA) (|FullPartialFractionExpansion| . FPARFRAC) (|FunctionFieldCategoryFunctions2| . FFCAT2) (|FunctionSpaceAssertions| . PMASSFS) (|FunctionSpaceAttachPredicates| . PMPREDFS) (|FunctionSpaceComplexIntegration| . FSCINT) (|FunctionSpaceFunctions2| . FS2) (|FunctionSpaceIntegration| . FSINT) (|FunctionSpacePrimitiveElement| . FSPRMELT) (|FunctionSpaceSum| . SUMFS) (|GaussianFactorizationPackage| . GAUSSFAC) (|GeneralUnivariatePowerSeries| . GSERIES) (|GenerateUnivariatePowerSeries| . GENUPS) (|GraphicsDefaults| . GRDEF) (|GroebnerPackage| . GB) (|GroebnerFactorizationPackage| . GBF) (|Guess| . GUESS) (|GuessAlgebraicNumber| . GUESSAN) (|GuessFinite| . GUESSF) (|GuessFiniteFunctions| . GUESSF1) (|GuessInteger| . GUESSINT) (|GuessOption| . GOPT) (|GuessOptionFunctions0| . GOPT0) (|GuessPolynomial| . GUESSP) (|GuessUnivariatePolynomial| . GUESSUP) (|HallBasis| . HB) (|Heap| .!
 HEAP) (|HexadecimalExpansion| . HEXADEC) (|IndexCard| . ICAR!
D) (|IdealDecompositionPackage| . IDECOMP) (|InfiniteProductCharacteristicZero| . INFPROD0) (|InfiniteProductFiniteField| . INPRODFF) (|InfiniteProductPrimeField| . INPRODPF) (|InfiniteTuple| . ITUPLE) (|InfiniteTupleFunctions2| . ITFUN2) (|InfiniteTupleFunctions3| . ITFUN3) (|Infinity| . INFINITY) (|Integer| . INT) (|IntegerCombinatoricFunctions| . COMBINAT) (|IntegerLinearDependence| . ZLINDEP) (|IntegerNumberTheoryFunctions| . INTHEORY) (|IntegerPrimesPackage| . PRIMES) (|IntegerRetractions| . INTRET) (|IntegerRoots| . IROOT) (|IntegrationResultFunctions2| . IR2) (|IntegrationResultRFToFunction| . IRRF2F) (|IntegrationResultToFunction| . IR2F) (|Interval| . INTRVL) (|InventorDataSink| . IVDATA) (|InventorViewPort| . IVVIEW) (|InventorRenderPackage| . IVREND) (|InverseLaplaceTransform| . INVLAPLA) (|IrrRepSymNatPackage| . IRSN) (|KernelFunctions2| . KERNEL2) (|KeyedAccessFile| . KAFILE) (|LaplaceTransform| . LAPLACE) (|LazardMorenoSolvingPackage| . LAZM3PK) (|Library| . LI!
B) (|LieSquareMatrix| . LSQM) (|LinearOrdinaryDifferentialOperator| . LODO) (|LinearSystemMatrixPackage| . LSMP) (|LinearSystemMatrixPackage1| . LSMP1) (|LinearSystemPolynomialPackage| . LSPP) (|List| . LIST) (|ListFunctions2| . LIST2) (|ListFunctions3| . LIST3) (|ListToMap| . LIST2MAP) (|MakeFloatCompiledFunction| . MKFLCFN) (|MakeFunction| . MKFUNC) (|MakeRecord| . MKRECORD) (|MappingPackage1| . MAPPKG1) (|MappingPackage2| . MAPPKG2) (|MappingPackage3| . MAPPKG3) (|MappingPackage4| . MAPPKG4) (|MathMLFormat| . MMLFORM) (|Matrix| . MATRIX) (|MatrixCategoryFunctions2| . MATCAT2) (|MatrixCommonDenominator| . MCDEN) (|MatrixLinearAlgebraFunctions| . MATLIN) (|MergeThing| . MTHING) (|ModularDistinctDegreeFactorizer| . MDDFACT) (|ModuleOperator| . MODOP) (|MonoidRingFunctions2| . MRF2) (|MoreSystemCommands| . MSYSCMD) (|MPolyCatFunctions2| . MPC2) (|MPolyCatRationalFunctionFactorizer| . MPRFF) (|Multiset| . MSET) (|MultivariateFactorize| . MULTFACT) (|MultivariatePolynomial| . M!
POLY) (|MultFiniteFactorize| . MFINFACT) (|MyUnivariatePolyno!
mial| . MYUP) (|MyExpression| . MYEXPR) (|NoneFunctions1| . NONE1) (|NonNegativeInteger| . NNI) (|NottinghamGroup| . NOTTING) (|NormalizationPackage| . NORMPK) (|NormInMonogenicAlgebra| . NORMMA) (|NumberTheoreticPolynomialFunctions| . NTPOLFN) (|Numeric| . NUMERIC) (|NumericalOrdinaryDifferentialEquations| . NUMODE) (|NumericalQuadrature| . NUMQUAD) (|NumericComplexEigenPackage| . NCEP) (|NumericRealEigenPackage| . NREP) (|NumericContinuedFraction| . NCNTFRAC) (|Octonion| . OCT) (|OctonionCategoryFunctions2| . OCTCT2) (|OneDimensionalArray| . ARRAY1) (|OneDimensionalArrayFunctions2| . ARRAY12) (|OnePointCompletion| . ONECOMP) (|OnePointCompletionFunctions2| . ONECOMP2) (|OpenMathConnection| . OMCONN) (|OpenMathDevice| . OMDEV) (|OpenMathEncoding| . OMENC) (|OpenMathError| . OMERR) (|OpenMathErrorKind| . OMERRK) (|OpenMathPackage| . OMPKG) (|OpenMathServerPackage| . OMSERVER) (|OperationsQuery| . OPQUERY) (|OrderedCompletion| . ORDCOMP) (|OrderedCompletionFunctions2| . ORDCO!
MP2) (|OrdinaryDifferentialRing| . ODR) (|OrdSetInts| . OSI) (|OrthogonalPolynomialFunctions| . ORTHPOL) (|OutputPackage| . OUT) (|PadeApproximantPackage| . PADEPAC) (|Palette| . PALETTE) (|PartialFraction| . PFR) (|PatternFunctions2| . PATTERN2) (|ParametricPlaneCurve| . PARPCURV) (|ParametricSpaceCurve| . PARSCURV) (|ParametricSurface| . PARSURF) (|ParametricPlaneCurveFunctions2| . PARPC2) (|ParametricSpaceCurveFunctions2| . PARSC2) (|ParametricSurfaceFunctions2| . PARSU2) (|PartitionsAndPermutations| . PARTPERM) (|PatternMatch| . PATMATCH) (|PatternMatchAssertions| . PMASS) (|PatternMatchResultFunctions2| . PATRES2) (|PendantTree| . PENDTREE) (|Permanent| . PERMAN) (|PermutationGroupExamples| . PGE) (|PermutationGroup| . PERMGRP) (|Permutation| . PERM) (|Pi| . HACKPI) (|PiCoercions| . PICOERCE) (|PointFunctions2| . PTFUNC2) (|PolyGroebner| . PGROEB) (|Polynomial| . POLY) (|PolynomialAN2Expression| . PAN2EXPR) (|PolynomialComposition| . PCOMP) (|PolynomialDecomposition| . !
PDECOMP) (|PolynomialFunctions2| . POLY2) (|PolynomialIdeals|!
 . IDEAL) (|PolynomialToUnivariatePolynomial| . POLY2UP) (|PositiveInteger| . PI) (|PowerSeriesLimitPackage| . LIMITPS) (|PrimeField| . PF) (|PrimitiveArrayFunctions2| . PRIMARR2) (|PrintPackage| . PRINT) (|QuadraticForm| . QFORM) (|QuasiComponentPackage| . QCMPACK) (|Quaternion| . QUAT) (|QuaternionCategoryFunctions2| . QUATCT2) (|QueryEquation| . QEQUAT) (|Queue| . QUEUE) (|QuotientFieldCategoryFunctions2| . QFCAT2) (|RadicalEigenPackage| . REP) (|RadicalSolvePackage| . SOLVERAD) (|RadixExpansion| . RADIX) (|RadixUtilities| . RADUTIL) (|RandomNumberSource| . RANDSRC) (|RationalFunction| . RF) (|RationalFunctionDefiniteIntegration| . DEFINTRF) (|RationalFunctionFactor| . RFFACT) (|RationalFunctionFactorizer| . RFFACTOR) (|RationalFunctionIntegration| . INTRF) (|RationalFunctionLimitPackage| . LIMITRF) (|RationalFunctionSign| . SIGNRF) (|RationalFunctionSum| . SUMRF) (|RationalRetractions| . RATRET) (|RealClosure| . RECLOS) (|RealPolynomialUtilitiesPackage| . POLUTIL) (|Real!
ZeroPackage| . REAL0) (|RealZeroPackageQ| . REAL0Q) (|RecurrenceOperator| . RECOP) (|RectangularMatrixCategoryFunctions2| . RMCAT2) (|RegularSetDecompositionPackage| . RSDCMPK) (|RegularTriangularSet| . REGSET) (|RegularTriangularSetGcdPackage| . RSETGCD) (|RepresentationPackage1| . REP1) (|RepresentationPackage2| . REP2) (|ResolveLatticeCompletion| . RESLATC) (|RewriteRule| . RULE) (|RightOpenIntervalRootCharacterization| . ROIRC) (|RomanNumeral| . ROMAN) (|Ruleset| . RULESET) (|ScriptFormulaFormat| . FORMULA) (|ScriptFormulaFormat1| . FORMULA1) (|Segment| . SEG) (|SegmentBinding| . SEGBIND) (|SegmentBindingFunctions2| . SEGBIND2) (|SegmentFunctions2| . SEG2) (|Set| . SET) (|SimpleAlgebraicExtensionAlgFactor| . SAEFACT) (|SimplifyAlgebraicNumberConvertPackage| . SIMPAN) (|SingleInteger| . SINT) (|SmithNormalForm| . SMITH) (|SparseUnivariatePolynomialExpressions| . SUPEXPR) (|SparseUnivariatePolynomialFunctions2| . SUP2) (|SpecialOutputPackage| . SPECOUT) (|SquareFreeRegular!
SetDecompositionPackage| . SRDCMPK) (|SquareFreeRegularTriang!
ularSet| . SREGSET) (|SquareFreeRegularTriangularSetGcdPackage| . SFRGCD) (|SquareFreeQuasiComponentPackage| . SFQCMPK) (|Stack| . STACK) (|Stream| . STREAM) (|StreamFunctions1| . STREAM1) (|StreamFunctions2| . STREAM2) (|StreamFunctions3| . STREAM3) (|String| . STRING) (|SturmHabichtPackage| . SHP) (|Symbol| . SYMBOL) (|SymmetricGroupCombinatoricFunctions| . SGCF) (|SystemSolvePackage| . SYSSOLP) (|SAERationalFunctionAlgFactor| . SAERFFC) (|Tableau| . TABLEAU) (|TaylorSeries| . TS) (|TaylorSolve| . UTSSOL) (|TexFormat| . TEX) (|TexFormat1| . TEX1) (|TextFile| . TEXTFILE) (|ThreeDimensionalViewport| . VIEW3D) (|ThreeSpace| . SPACE3) (|Timer| . TIMER) (|TopLevelDrawFunctions| . DRAW) (|TopLevelDrawFunctionsForAlgebraicCurves| . DRAWCURV) (|TopLevelDrawFunctionsForCompiledFunctions| . DRAWCFUN) (|TopLevelDrawFunctionsForPoints| . DRAWPT) (|TopLevelThreeSpace| . TOPSP) (|TranscendentalManipulations| . TRMANIP) (|TransSolvePackage| . SOLVETRA) (|Tree| . TREE) (|TrigonometricMani!
pulations| . TRIGMNIP) (|UnivariateLaurentSeriesFunctions2| . ULS2) (|UnivariateFormalPowerSeries| . UFPS) (|UnivariateFormalPowerSeriesFunctions| . UFPS1) (|UnivariatePolynomial| . UP) (|UnivariatePolynomialCategoryFunctions2| . UPOLYC2) (|UnivariatePolynomialCommonDenominator| . UPCDEN) (|UnivariatePolynomialFunctions2| . UP2) (|UnivariatePolynomialMultiplicationPackage| . UPMP) (|UnivariatePuiseuxSeriesFunctions2| . UPXS2) (|UnivariateTaylorSeriesFunctions2| . UTS2) (|UniversalSegment| . UNISEG) (|UniversalSegmentFunctions2| . UNISEG2) (|UserDefinedVariableOrdering| . UDVO) (|Vector| . VECTOR) (|VectorFunctions2| . VECTOR2) (|ViewDefaultsPackage| . VIEWDEF) (|Void| . VOID) (|WuWenTsunTriangularSet| . WUTSET)) (|naglink| (|Asp1| . ASP1) (|Asp4| . ASP4) (|Asp6| . ASP6) (|Asp7| . ASP7) (|Asp8| . ASP8) (|Asp9| . ASP9) (|Asp10| . ASP10) (|Asp12| . ASP12) (|Asp19| . ASP19) (|Asp20| . ASP20) (|Asp24| . ASP24) (|Asp27| . ASP27) (|Asp28| . ASP28) (|Asp29| . ASP29) (|Asp30| . ASP30!
) (|Asp31| . ASP31) (|Asp33| . ASP33) (|Asp34| . ASP34) (|Asp!
35| . ASP35) (|Asp41| . ASP41) (|Asp42| . ASP42) (|Asp49| . ASP49) (|Asp50| . ASP50) (|Asp55| . ASP55) (|Asp73| . ASP73) (|Asp74| . ASP74) (|Asp77| . ASP77) (|Asp78| . ASP78) (|Asp80| . ASP80) (|FortranCode| . FC) (|FortranCodePackage1| . FCPAK1) (|FortranExpression| . FEXPR) (|FortranMachineTypeCategory| . FMTC) (|FortranMatrixCategory| . FMC) (|FortranMatrixFunctionCategory| . FMFUN) (|FortranOutputStackPackage| . FOP) (|FortranPackage| . FORT) (|FortranProgramCategory| . FORTCAT) (|FortranProgram| . FORTRAN) (|FortranFunctionCategory| . FORTFN) (|FortranScalarType| . FST) (|FortranType| . FT) (|FortranTemplate| . FTEM) (|FortranVectorFunctionCategory| . FVFUN) (|FortranVectorCategory| . FVC) (|MachineComplex| . MCMPLX) (|MachineFloat| . MFLOAT) (|MachineInteger| . MINT) (|MultiVariableCalculusFunctions| . MCALCFN) (|NagDiscreteFourierTransformInterfacePackage| . NAGDIS) (|NagEigenInterfacePackage| . NAGEIG) (|NAGLinkSupportPackage| . NAGSP) (|NagOptimisationInterfacePacka!
ge| . NAGOPT) (|NagQuadratureInterfacePackage| . NAGQUA) (|NagResultChecks| . NAGRES) (|NagSpecialFunctionsInterfacePackage| . NAGSPE) (|NagPolynomialRootsPackage| . NAGC02) (|NagRootFindingPackage| . NAGC05) (|NagSeriesSummationPackage| . NAGC06) (|NagIntegrationPackage| . NAGD01) (|NagOrdinaryDifferentialEquationsPackage| . NAGD02) (|NagPartialDifferentialEquationsPackage| . NAGD03) (|NagInterpolationPackage| . NAGE01) (|NagFittingPackage| . NAGE02) (|NagOptimisationPackage| . NAGE04) (|NagMatrixOperationsPackage| . NAGF01) (|NagEigenPackage| . NAGF02) (|NagLinearEquationSolvingPackage| . NAGF04) (|NagLapack| . NAGF07) (|NagSpecialFunctionsPackage| . NAGS) (|PackedHermitianSequence| . PACKED) (|Result| . RESULT) (|SimpleFortranProgram| . SFORT) (|Switch| . SWITCH) (|SymbolTable| . SYMTAB) (|TemplateUtilities| . TEMUTL) (|TheSymbolTable| . SYMS) (|ThreeDimensionalMatrix| . M3D)) (|anna| (|AnnaNumericalIntegrationPackage| . INTPACK) (|AnnaNumericalOptimizationPackage| . OPTP!
ACK) (|AnnaOrdinaryDifferentialEquationPackage| . ODEPACK) (|!
AnnaPartialDifferentialEquationPackage| . PDEPACK) (|AttributeButtons| . ATTRBUT) (|BasicFunctions| . BFUNCT) (|d01ajfAnnaType| . D01AJFA) (|d01akfAnnaType| . D01AKFA) (|d01alfAnnaType| . D01ALFA) (|d01amfAnnaType| . D01AMFA) (|d01anfAnnaType| . D01ANFA) (|d01apfAnnaType| . D01APFA) (|d01aqfAnnaType| . D01AQFA) (|d01asfAnnaType| . D01ASFA) (|d01fcfAnnaType| . D01FCFA) (|d01gbfAnnaType| . D01GBFA) (|d01AgentsPackage| . D01AGNT) (|d01TransformFunctionType| . D01TRNS) (|d01WeightsPackage| . D01WGTS) (|d02AgentsPackage| . D02AGNT) (|d02bbfAnnaType| . D02BBFA) (|d02bhfAnnaType| . D02BHFA) (|d02cjfAnnaType| . D02CJFA) (|d02ejfAnnaType| . D02EJFA) (|d03AgentsPackage| . D03AGNT) (|d03eefAnnaType| . D03EEFA) (|d03fafAnnaType| . D03FAFA) (|e04AgentsPackage| . E04AGNT) (|e04dgfAnnaType| . E04DGFA) (|e04fdfAnnaType| . E04FDFA) (|e04gcfAnnaType| . E04GCFA) (|e04jafAnnaType| . E04JAFA) (|e04mbfAnnaType| . E04MBFA) (|e04nafAnnaType| . E04NAFA) (|e04ucfAnnaType| . E04UCFA) (|ExpertSystemCon!
tinuityPackage| . ESCONT) (|ExpertSystemContinuityPackage1| . ESCONT1) (|ExpertSystemToolsPackage| . ESTOOLS) (|ExpertSystemToolsPackage1| . ESTOOLS1) (|ExpertSystemToolsPackage2| . ESTOOLS2) (|NumericalIntegrationCategory| . NUMINT) (|NumericalIntegrationProblem| . NIPROB) (|NumericalODEProblem| . ODEPROB) (|NumericalOptimizationCategory| . OPTCAT) (|NumericalOptimizationProblem| . OPTPROB) (|NumericalPDEProblem| . PDEPROB) (|ODEIntensityFunctionsTable| . ODEIFTBL) (|IntegrationFunctionsTable| . INTFTBL) (|OrdinaryDifferentialEquationsSolverCategory| . ODECAT) (|PartialDifferentialEquationsSolverCategory| . PDECAT) (|RoutinesTable| . ROUTINE)) (|categories| (|AbelianGroup| . ABELGRP) (|AbelianMonoid| . ABELMON) (|AbelianMonoidRing| . AMR) (|AbelianSemiGroup| . ABELSG) (|Aggregate| . AGG) (|Algebra| . ALGEBRA) (|AlgebraicallyClosedField| . ACF) (|AlgebraicallyClosedFunctionSpace| . ACFS) (|ArcHyperbolicFunctionCategory| . AHYP) (|ArcTrigonometricFunctionCategory| . ATRIG) (|!
AssociationListAggregate| . ALAGG) (|AttributeRegistry| . ATT!
REG) (|BagAggregate| . BGAGG) (|BasicType| . BASTYPE) (|BiModule| . BMODULE) (|BinaryRecursiveAggregate| . BRAGG) (|BinaryTreeCategory| . BTCAT) (|BitAggregate| . BTAGG) (|CachableSet| . CACHSET) (|CancellationAbelianMonoid| . CABMON) (|CharacteristicNonZero| . CHARNZ) (|CharacteristicZero| . CHARZ) (|CoercibleTo| . KOERCE) (|Collection| . CLAGG) (|CombinatorialFunctionCategory| . CFCAT) (|CombinatorialOpsCategory| . COMBOPC) (|CommutativeRing| . COMRING) (|ComplexCategory| . COMPCAT) (|ConvertibleTo| . KONVERT) (|DequeueAggregate| . DQAGG) (|Dictionary| . DIAGG) (|DictionaryOperations| . DIOPS) (|DifferentialExtension| . DIFEXT) (|DifferentialPolynomialCategory| . DPOLCAT) (|DifferentialRing| . DIFRING) (|DifferentialVariableCategory| . DVARCAT) (|DirectProductCategory| . DIRPCAT) (|DivisionRing| . DIVRING) (|DoublyLinkedAggregate| . DLAGG) (|ElementaryFunctionCategory| . ELEMFUN) (|Eltable| . ELTAB) (|EltableAggregate| . ELTAGG) (|EntireRing| . ENTIRER) (|EuclideanDomain| !
. EUCDOM) (|Evalable| . EVALAB) (|ExpressionSpace| . ES) (|ExtensibleLinearAggregate| . ELAGG) (|ExtensionField| . XF) (|Field| . FIELD) (|FieldOfPrimeCharacteristic| . FPC) (|Finite| . FINITE) (|FileCategory| . FILECAT) (|FileNameCategory| . FNCAT) (|FiniteAbelianMonoidRing| . FAMR) (|FiniteAlgebraicExtensionField| . FAXF) (|FiniteDivisorCategory| . FDIVCAT) (|FiniteFieldCategory| . FFIELDC) (|FiniteLinearAggregate| . FLAGG) (|FiniteRankNonAssociativeAlgebra| . FINAALG) (|FiniteRankAlgebra| . FINRALG) (|FiniteSetAggregate| . FSAGG) (|FloatingPointSystem| . FPS) (|FramedAlgebra| . FRAMALG) (|FramedNonAssociativeAlgebra| . FRNAALG) (|FramedNonAssociativeAlgebraFunctions2| . FRNAAF2) (|FreeAbelianMonoidCategory| . FAMONC) (|FreeLieAlgebra| . FLALG) (|FreeModuleCat| . FMCAT) (|FullyEvalableOver| . FEVALAB) (|FullyLinearlyExplicitRingOver| . FLINEXP) (|FullyPatternMatchable| . FPATMAB) (|FullyRetractableTo| . FRETRCT) (|FunctionFieldCategory| . FFCAT) (|FunctionSpace| . FS) (|Gc!
dDomain| . GCDDOM) (|GradedAlgebra| . GRALG) (|GradedModule| !
. GRMOD) (|Group| . GROUP) (|HomogeneousAggregate| . HOAGG) (|HyperbolicFunctionCategory| . HYPCAT) (|IndexedAggregate| . IXAGG) (|IndexedDirectProductCategory| . IDPC) (|InnerEvalable| . IEVALAB) (|IntegerNumberSystem| . INS) (|IntegralDomain| . INTDOM) (|IntervalCategory| . INTCAT) (|KeyedDictionary| . KDAGG) (|LazyStreamAggregate| . LZSTAGG) (|LeftAlgebra| . LALG) (|LeftModule| . LMODULE) (|LieAlgebra| . LIECAT) (|LinearAggregate| . LNAGG) (|LinearlyExplicitRingOver| . LINEXP) (|LinearOrdinaryDifferentialOperatorCategory| . LODOCAT) (|LiouvillianFunctionCategory| . LFCAT) (|ListAggregate| . LSAGG) (|Logic| . LOGIC) (|MatrixCategory| . MATCAT) (|Module| . MODULE) (|Monad| . MONAD) (|MonadWithUnit| . MONADWU) (|Monoid| . MONOID) (|MonogenicAlgebra| . MONOGEN) (|MonogenicLinearOperator| . MLO) (|MultiDictionary| . MDAGG) (|MultisetAggregate| . MSETAGG) (|MultivariateTaylorSeriesCategory| . MTSCAT) (|NonAssociativeAlgebra| . NAALG) (|NonAssociativeRing| . NASRING) (|NonAssoci!
ativeRng| . NARNG) (|NormalizedTriangularSetCategory| . NTSCAT) (|Object| . OBJECT) (|OctonionCategory| . OC) (|OneDimensionalArrayAggregate| . A1AGG) (|OpenMath| . OM) (|OrderedAbelianGroup| . OAGROUP) (|OrderedAbelianMonoid| . OAMON) (|OrderedAbelianMonoidSup| . OAMONS) (|OrderedAbelianSemiGroup| . OASGP) (|OrderedCancellationAbelianMonoid| . OCAMON) (|OrderedFinite| . ORDFIN) (|OrderedIntegralDomain| . OINTDOM) (|OrderedMonoid| . ORDMON) (|OrderedMultisetAggregate| . OMSAGG) (|OrderedRing| . ORDRING) (|OrderedSet| . ORDSET) (|PAdicIntegerCategory| . PADICCT) (|PartialDifferentialRing| . PDRING) (|PartialTranscendentalFunctions| . PTRANFN) (|Patternable| . PATAB) (|PatternMatchable| . PATMAB) (|PermutationCategory| . PERMCAT) (|PlottablePlaneCurveCategory| . PPCURVE) (|PlottableSpaceCurveCategory| . PSCURVE) (|PointCategory| . PTCAT) (|PolynomialCategory| . POLYCAT) (|PolynomialFactorizationExplicit| . PFECAT) (|PolynomialSetCategory| . PSETCAT) (|PowerSeriesCategory| . PS!
CAT) (|PrimitiveFunctionCategory| . PRIMCAT) (|PrincipalIdeal!
Domain| . PID) (|PriorityQueueAggregate| . PRQAGG) (|QuaternionCategory| . QUATCAT) (|QueueAggregate| . QUAGG) (|QuotientFieldCategory| . QFCAT) (|RadicalCategory| . RADCAT) (|RealClosedField| . RCFIELD) (|RealConstant| . REAL) (|RealNumberSystem| . RNS) (|RealRootCharacterizationCategory| . RRCC) (|RectangularMatrixCategory| . RMATCAT) (|RecursiveAggregate| . RCAGG) (|RecursivePolynomialCategory| . RPOLCAT) (|RegularChain| . RGCHAIN) (|RegularTriangularSetCategory| . RSETCAT) (|RetractableTo| . RETRACT) (|RightModule| . RMODULE) (|Ring| . RING) (|Rng| . RNG) (|SegmentCategory| . SEGCAT) (|SegmentExpansionCategory| . SEGXCAT) (|SemiGroup| . SGROUP) (|SetAggregate| . SETAGG) (|SetCategory| . SETCAT) (|SExpressionCategory| . SEXCAT) (|SpecialFunctionCategory| . SPFCAT) (|SquareFreeNormalizedTriangularSetCategory| . SNTSCAT) (|SquareFreeRegularTriangularSetCategory| . SFRTCAT) (|SquareMatrixCategory| . SMATCAT) (|StackAggregate| . SKAGG) (|StepThrough| . STEP) (|StreamAggregate!
| . STAGG) (|StringAggregate| . SRAGG) (|StringCategory| . STRICAT) (|StructuralConstantsPackage| . SCPKG) (|TableAggregate| . TBAGG) (|ThreeSpaceCategory| . SPACEC) (|TranscendentalFunctionCategory| . TRANFUN) (|TriangularSetCategory| . TSETCAT) (|TrigonometricFunctionCategory| . TRIGCAT) (|TwoDimensionalArrayCategory| . ARR2CAT) (|Type| . TYPE) (|UnaryRecursiveAggregate| . URAGG) (|UniqueFactorizationDomain| . UFD) (|UnivariateLaurentSeriesCategory| . ULSCAT) (|UnivariateLaurentSeriesConstructorCategory| . ULSCCAT) (|UnivariatePolynomialCategory| . UPOLYC) (|UnivariatePowerSeriesCategory| . UPSCAT) (|UnivariatePuiseuxSeriesCategory| . UPXSCAT) (|UnivariatePuiseuxSeriesConstructorCategory| . UPXSCCA) (|UnivariateSkewPolynomialCategory| . OREPCAT) (|UnivariateTaylorSeriesCategory| . UTSCAT) (|VectorCategory| . VECTCAT) (|VectorSpace| . VSPACE) (|XAlgebra| . XALG) (|XFreeAlgebra| . XFALG) (|XPolynomialsCat| . XPOLYC) (|ZeroDimensionalSolvePackage| . ZDSOLVE)) (|Hidden| (|Alge!
braicFunction| . AF) (|AlgebraicFunctionField| . ALGFF) (|Alg!
ebraicHermiteIntegration| . INTHERAL) (|AlgebraicIntegrate| . INTALG) (|AlgebraicIntegration| . INTAF) (|AnonymousFunction| . ANON) (|AntiSymm| . ANTISYM) (|ApplyRules| . APPRULE) (|ApplyUnivariateSkewPolynomial| . APPLYORE) (|ArrayStack| . ASTACK) (|AssociatedEquations| . ASSOCEQ) (|AssociationList| . ALIST) (|Automorphism| . AUTOMOR) (|BalancedFactorisation| . BALFACT) (|BalancedPAdicInteger| . BPADIC) (|BalancedPAdicRational| . BPADICRT) (|BezoutMatrix| . BEZOUT) (|BoundIntegerRoots| . BOUNDZRO) (|BrillhartTests| . BRILL) (|ChangeOfVariable| . CHVAR) (|CharacteristicPolynomialInMonogenicalAlgebra| . CPIMA) (|ChineseRemainderToolsForIntegralBases| . IBACHIN) (|CoerceVectorMatrixPackage| . CVMP) (|CombinatorialFunction| . COMBF) (|CommonOperators| . COMMONOP) (|CommuteUnivariatePolynomialCategory| . COMMUPC) (|ComplexIntegerSolveLinearPolynomialEquation| . CINTSLPE) (|ComplexPattern| . COMPLPAT) (|ComplexPatternMatch| . CPMATCH) (|ComplexRootFindingPackage| . CRFP) (|Consta!
ntLODE| . ODECONST) (|CyclicStreamTools| . CSTTOOLS) (|CyclotomicPolynomialPackage| . CYCLOTOM) (|DefiniteIntegrationTools| . DFINTTLS) (|DegreeReductionPackage| . DEGRED) (|DeRhamComplex| . DERHAM) (|DifferentialSparseMultivariatePolynomial| . DSMP) (|DirectProduct| . DIRPROD) (|DirectProductMatrixModule| . DPMM) (|DirectProductModule| . DPMO) (|DiscreteLogarithmPackage| . DLP) (|DistributedMultivariatePolynomial| . DMP) (|DoubleResultantPackage| . DBLRESP) (|DrawOptionFunctions0| . DROPT0) (|DrawOptionFunctions1| . DROPT1) (|ElementaryFunction| . EF) (|ElementaryFunctionsUnivariateLaurentSeries| . EFULS) (|ElementaryFunctionsUnivariatePuiseuxSeries| . EFUPXS) (|ElementaryIntegration| . INTEF) (|ElementaryRischDE| . RDEEF) (|ElementaryRischDESystem| . RDEEFS) (|EllipticFunctionsUnivariateTaylorSeries| . ELFUTS) (|EqTable| . EQTBL) (|EuclideanModularRing| . EMR) (|EvaluateCycleIndicators| . EVALCYC) (|ExponentialExpansion| . EXPEXPAN) (|ExponentialOfUnivariatePuiseuxSeries| !
. EXPUPXS) (|ExpressionSpaceFunctions1| . ES1) (|ExpressionTu!
bePlot| . EXPRTUBE) (|ExtAlgBasis| . EAB) (|FactoredFunctions| . FACTFUNC) (|FactoredFunctionUtilities| . FRUTIL) (|FactoringUtilities| . FACUTIL) (|FGLMIfCanPackage| . FGLMICPK) (|FindOrderFinite| . FORDER) (|FiniteDivisor| . FDIV) (|FiniteFieldCyclicGroupExtension| . FFCGX) (|FiniteFieldCyclicGroupExtensionByPolynomial| . FFCGP) (|FiniteFieldExtension| . FFX) (|FiniteFieldExtensionByPolynomial| . FFP) (|FiniteFieldFunctions| . FFF) (|FiniteFieldNormalBasisExtension| . FFNBX) (|FiniteFieldNormalBasisExtensionByPolynomial| . FFNBP) (|FiniteFieldPolynomialPackage| . FFPOLY) (|FiniteFieldSolveLinearPolynomialEquation| . FFSLPE) (|FormalFraction| . FORMAL) (|FourierComponent| . FCOMP) (|FractionalIdeal| . FRIDEAL) (|FramedModule| . FRMOD) (|FreeAbelianGroup| . FAGROUP) (|FreeAbelianMonoid| . FAMONOID) (|FreeGroup| . FGROUP) (|FreeModule| . FM) (|FreeModule1| . FM1) (|FreeMonoid| . FMONOID) (|FunctionalSpecialFunction| . FSPECF) (|FunctionCalled| . FUNCTION) (|FunctionFieldInteg!
ralBasis| . FFINTBAS) (|FunctionSpaceReduce| . FSRED) (|FunctionSpaceToUnivariatePowerSeries| . FS2UPS) (|FunctionSpaceToExponentialExpansion| . FS2EXPXP) (|FunctionSpaceUnivariatePolynomialFactor| . FSUPFACT) (|GaloisGroupFactorizationUtilities| . GALFACTU) (|GaloisGroupFactorizer| . GALFACT) (|GaloisGroupPolynomialUtilities| . GALPOLYU) (|GaloisGroupUtilities| . GALUTIL) (|GeneralHenselPackage| . GHENSEL) (|GeneralDistributedMultivariatePolynomial| . GDMP) (|GeneralPolynomialGcdPackage| . GENPGCD) (|GeneralSparseTable| . GSTBL) (|GenericNonAssociativeAlgebra| . GCNAALG) (|GenExEuclid| . GENEEZ) (|GeneralizedMultivariateFactorize| . GENMFACT) (|GeneralModulePolynomial| . GMODPOL) (|GeneralPolynomialSet| . GPOLSET) (|GeneralTriangularSet| . GTSET) (|GenUFactorize| . GENUFACT) (|GenusZeroIntegration| . INTG0) (|GosperSummationMethod| . GOSPER) (|GraphImage| . GRIMAGE) (|GrayCode| . GRAY) (|GroebnerInternalPackage| . GBINTERN) (|GroebnerSolve| . GROEBSOL) (|HashTable| . HASHTB!
L) (|Heap| . HEAP) (|HeuGcd| . HEUGCD) (|HomogeneousDistribut!
edMultivariatePolynomial| . HDMP) (|HyperellipticFiniteDivisor| . HELLFDIV) (|IncrementingMaps| . INCRMAPS) (|IndexedBits| . IBITS) (|IndexedDirectProductAbelianGroup| . IDPAG) (|IndexedDirectProductAbelianMonoid| . IDPAM) (|IndexedDirectProductObject| . IDPO) (|IndexedDirectProductOrderedAbelianMonoid| . IDPOAM) (|IndexedDirectProductOrderedAbelianMonoidSup| . IDPOAMS) (|IndexedExponents| . INDE) (|IndexedFlexibleArray| . IFARRAY) (|IndexedList| . ILIST) (|IndexedMatrix| . IMATRIX) (|IndexedOneDimensionalArray| . IARRAY1) (|IndexedString| . ISTRING) (|IndexedTwoDimensionalArray| . IARRAY2) (|IndexedVector| . IVECTOR) (|InnerAlgFactor| . IALGFACT) (|InnerAlgebraicNumber| . IAN) (|InnerCommonDenominator| . ICDEN) (|InnerFiniteField| . IFF) (|InnerFreeAbelianMonoid| . IFAMON) (|InnerIndexedTwoDimensionalArray| . IIARRAY2) (|InnerMatrixLinearAlgebraFunctions| . IMATLIN) (|InnerMatrixQuotientFieldFunctions| . IMATQF) (|InnerModularGcd| . INMODGCD) (|InnerMultFact| . INNMFACT) (|!
InnerNormalBasisFieldFunctions| . INBFF) (|InnerNumericEigenPackage| . INEP) (|InnerNumericFloatSolvePackage| . INFSP) (|InnerPAdicInteger| . IPADIC) (|InnerPolySign| . INPSIGN) (|InnerPolySum| . ISUMP) (|InnerPrimeField| . IPF) (|InnerSparseUnivariatePowerSeries| . ISUPS) (|InnerTable| . INTABL) (|InnerTaylorSeries| . ITAYLOR) (|InnerTrigonometricManipulations| . ITRIGMNP) (|InputForm| . INFORM) (|InputFormFunctions1| . INFORM1) (|IntegerBits| . INTBIT) (|IntegerFactorizationPackage| . INTFACT) (|IntegerMod| . ZMOD) (|IntegerSolveLinearPolynomialEquation| . INTSLPE) (|IntegralBasisPolynomialTools| . IBPTOOLS) (|IntegralBasisTools| . IBATOOL) (|IntegrationResult| . IR) (|IntegrationTools| . INTTOOLS) (|InternalPrintPackage| . IPRNTPK) (|InternalRationalUnivariateRepresentationPackage| . IRURPK) (|IrredPolyOverFiniteField| . IRREDFFX) (|Kernel| . KERNEL) (|Kovacic| . KOVACIC) (|LaurentPolynomial| . LAUPOL) (|LeadingCoefDetermination| . LEADCDET) (|LexTriangularPackage| . LEXT!
RIPK) (|LieExponentials| . LEXP) (|LiePolynomial| . LPOLY) (|!
LinearDependence| . LINDEP) (|LinearOrdinaryDifferentialOperatorFactorizer| . LODOF) (|LinearOrdinaryDifferentialOperator1| . LODO1) (|LinearOrdinaryDifferentialOperator2| . LODO2) (|LinearOrdinaryDifferentialOperatorsOps| . LODOOPS) (|LinearPolynomialEquationByFractions| . LPEFRAC) (|LinGroebnerPackage| . LGROBP) (|LiouvillianFunction| . LF) (|ListMonoidOps| . LMOPS) (|ListMultiDictionary| . LMDICT) (|LocalAlgebra| . LA) (|Localize| . LO) (|LyndonWord| . LWORD) (|Magma| . MAGMA) (|MakeBinaryCompiledFunction| . MKBCFUNC) (|MakeCachableSet| . MKCHSET) (|MakeUnaryCompiledFunction| . MKUCFUNC) (|MappingPackageInternalHacks1| . MAPHACK1) (|MappingPackageInternalHacks2| . MAPHACK2) (|MappingPackageInternalHacks3| . MAPHACK3) (|MeshCreationRoutinesForThreeDimensions| . MESH) (|ModMonic| . MODMON) (|ModularField| . MODFIELD) (|ModularHermitianRowReduction| . MHROWRED) (|ModularRing| . MODRING) (|ModuleMonomial| . MODMONOM) (|MoebiusTransform| . MOEBIUS) (|MonoidRing| . MRING) (|Mon!
omialExtensionTools| . MONOTOOL) (|MPolyCatPolyFactorizer| . MPCPF) (|MPolyCatFunctions3| . MPC3) (|MRationalFactorize| . MRATFAC) (|MultipleMap| . MMAP) (|MultivariateLifting| . MLIFT) (|MultivariateSquareFree| . MULTSQFR) (|HomogeneousDirectProduct| . HDP) (|NewSparseMultivariatePolynomial| . NSMP) (|NewSparseUnivariatePolynomial| . NSUP) (|NewSparseUnivariatePolynomialFunctions2| . NSUP2) (|NonCommutativeOperatorDivision| . NCODIV) (|NewtonInterpolation| . NEWTON) (|None| . NONE) (|NonLinearFirstOrderODESolver| . NODE1) (|NonLinearSolvePackage| . NLINSOL) (|NormRetractPackage| . NORMRETR) (|NPCoef| . NPCOEF) (|NumberFormats| . NUMFMT) (|NumberFieldIntegralBasis| . NFINTBAS) (|NumericTubePlot| . NUMTUBE) (|ODEIntegration| . ODEINT) (|ODETools| . ODETOOLS) (|Operator| . OP) (|OppositeMonogenicLinearOperator| . OMLO) (|OrderedDirectProduct| . ODP) (|OrderedFreeMonoid| . OFMONOID) (|OrderedVariableList| . OVAR) (|OrderingFunctions| . ORDFUNS) (|OrderlyDifferentialPolynomial| !
. ODPOL) (|OrderlyDifferentialVariable| . ODVAR) (|OrdinaryWe!
ightedPolynomials| . OWP) (|OutputForm| . OUTFORM) (|PadeApproximants| . PADE) (|PAdicInteger| . PADIC) (|PAdicRational| . PADICRAT) (|PAdicRationalConstructor| . PADICRC) (|PAdicWildFunctionFieldIntegralBasis| . PWFFINTB) (|ParadoxicalCombinatorsForStreams| . YSTREAM) (|ParametricLinearEquations| . PLEQN) (|PartialFractionPackage| . PFRPAC) (|Partition| . PRTITION) (|Pattern| . PATTERN) (|PatternFunctions1| . PATTERN1) (|PatternMatchFunctionSpace| . PMFS) (|PatternMatchIntegerNumberSystem| . PMINS) (|PatternMatchIntegration| . INTPM) (|PatternMatchKernel| . PMKERNEL) (|PatternMatchListAggregate| . PMLSAGG) (|PatternMatchListResult| . PATLRES) (|PatternMatchPolynomialCategory| . PMPLCAT) (|PatternMatchPushDown| . PMDOWN) (|PatternMatchQuotientFieldCategory| . PMQFCAT) (|PatternMatchResult| . PATRES) (|PatternMatchSymbol| . PMSYM) (|PatternMatchTools| . PMTOOLS) (|PlaneAlgebraicCurvePlot| . ACPLOT) (|Plot| . PLOT) (|PlotFunctions1| . PLOT1) (|PlotTools| . PLOTTOOL) (|Plot3D| !
. PLOT3D) (|PoincareBirkhoffWittLyndonBasis| . PBWLB) (|Point| . POINT) (|PointsOfFiniteOrder| . PFO) (|PointsOfFiniteOrderRational| . PFOQ) (|PointsOfFiniteOrderTools| . PFOTOOLS) (|PointPackage| . PTPACK) (|PolToPol| . POLTOPOL) (|PolynomialCategoryLifting| . POLYLIFT) (|PolynomialCategoryQuotientFunctions| . POLYCATQ) (|PolynomialFactorizationByRecursion| . PFBR) (|PolynomialFactorizationByRecursionUnivariate| . PFBRU) (|PolynomialGcdPackage| . PGCD) (|PolynomialInterpolation| . PINTERP) (|PolynomialInterpolationAlgorithms| . PINTERPA) (|PolynomialNumberTheoryFunctions| . PNTHEORY) (|PolynomialRing| . PR) (|PolynomialRoots| . POLYROOT) (|PolynomialSetUtilitiesPackage| . PSETPK) (|PolynomialSolveByFormulas| . SOLVEFOR) (|PolynomialSquareFree| . PSQFR) (|PrecomputedAssociatedEquations| . PREASSOC) (|PrimitiveArray| . PRIMARR) (|PrimitiveElement| . PRIMELT) (|PrimitiveRatDE| . ODEPRIM) (|PrimitiveRatRicDE| . ODEPRRIC) (|Product| . PRODUCT) (|PseudoRemainderSequence| . PRS) (!
|PseudoLinearNormalForm| . PSEUDLIN) (|PureAlgebraicIntegrati!
on| . INTPAF) (|PureAlgebraicLODE| . ODEPAL) (|PushVariables| . PUSHVAR) (|QuasiAlgebraicSet| . QALGSET) (|QuasiAlgebraicSet2| . QALGSET2) (|RadicalFunctionField| . RADFF) (|RandomDistributions| . RDIST) (|RandomFloatDistributions| . RFDIST) (|RandomIntegerDistributions| . RIDIST) (|RationalFactorize| . RATFACT) (|RationalIntegration| . INTRAT) (|RationalInterpolation| . RINTERP) (|RationalLODE| . ODERAT) (|RationalRicDE| . ODERTRIC) (|RationalUnivariateRepresentationPackage| . RURPK) (|RealSolvePackage| . REALSOLV) (|RectangularMatrix| . RMATRIX) (|ReducedDivisor| . RDIV) (|ReduceLODE| . ODERED) (|ReductionOfOrder| . REDORDER) (|Reference| . REF) (|RepeatedDoubling| . REPDB) (|RepeatedSquaring| . REPSQ) (|ResidueRing| . RESRING) (|RetractSolvePackage| . RETSOL) (|RuleCalled| . RULECOLD) (|SetOfMIntegersInOneToN| . SETMN) (|SExpression| . SEX) (|SExpressionOf| . SEXOF) (|SequentialDifferentialPolynomial| . SDPOL) (|SequentialDifferentialVariable| . SDVAR) (|SimpleAlgebraicEx!
tension| . SAE) (|SingletonAsOrderedSet| . SAOS) (|SortedCache| . SCACHE) (|SortPackage| . SORTPAK) (|SparseMultivariatePolynomial| . SMP) (|SparseMultivariateTaylorSeries| . SMTS) (|SparseTable| . STBL) (|SparseUnivariatePolynomial| . SUP) (|SparseUnivariateSkewPolynomial| . ORESUP) (|SparseUnivariateLaurentSeries| . SULS) (|SparseUnivariatePuiseuxSeries| . SUPXS) (|SparseUnivariateTaylorSeries| . SUTS) (|SplitHomogeneousDirectProduct| . SHDP) (|SplittingNode| . SPLNODE) (|SplittingTree| . SPLTREE) (|SquareMatrix| . SQMATRIX) (|Stack| . STACK) (|StorageEfficientMatrixOperations| . MATSTOR) (|StreamInfiniteProduct| . STINPROD) (|StreamTaylorSeriesOperations| . STTAYLOR) (|StreamTranscendentalFunctions| . STTF) (|StreamTranscendentalFunctionsNonCommutative| . STTFNC) (|StringTable| . STRTBL) (|SubResultantPackage| . SUBRESP) (|SubSpace| . SUBSPACE) (|SubSpaceComponentProperty| . COMPPROP) (|SuchThat| . SUCH) (|SupFractionFactorizer| . SUPFRACF) (|SymmetricFunctions| . SYMFUNC!
) (|SymmetricPolynomial| . SYMPOLY) (|SystemODESolver| . ODES!
YS) (|Table| . TABLE) (|TableauxBumpers| . TABLBUMP) (|TabulatedComputationPackage| . TBCMPPK) (|TangentExpansions| . TANEXP) (|ToolsForSign| . TOOLSIGN) (|TranscendentalHermiteIntegration| . INTHERTR) (|TranscendentalIntegration| . INTTR) (|TranscendentalRischDE| . RDETR) (|TranscendentalRischDESystem| . RDETRS) (|TransSolvePackageService| . SOLVESER) (|TriangularMatrixOperations| . TRIMAT) (|TubePlot| . TUBE) (|TubePlotTools| . TUBETOOL) (|Tuple| . TUPLE) (|TwoDimensionalArray| . ARRAY2) (|TwoDimensionalPlotClipping| . CLIP) (|TwoDimensionalViewport| . VIEW2D) (|TwoFactorize| . TWOFACT) (|UnivariateFactorize| . UNIFACT) (|UnivariateLaurentSeries| . ULS) (|UnivariateLaurentSeriesConstructor| . ULSCONS) (|UnivariatePolynomialDecompositionPackage| . UPDECOMP) (|UnivariatePolynomialDivisionPackage| . UPDIVP) (|UnivariatePolynomialSquareFree| . UPSQFREE) (|UnivariatePuiseuxSeries| . UPXS) (|UnivariatePuiseuxSeriesConstructor| . UPXSCONS) (|UnivariatePuiseuxSeriesWithExponential!
Singularity| . UPXSSING) (|UnivariateSkewPolynomial| . OREUP) (|UnivariateSkewPolynomialCategoryOps| . OREPCTO) (|UnivariateTaylorSeries| . UTS) (|UnivariateTaylorSeriesODESolver| . UTSODE) (|UserDefinedPartialOrdering| . UDPO) (|UTSodetools| . UTSODETL) (|Variable| . VARIABLE) (|ViewportPackage| . VIEW) (|WeierstrassPreparation| . WEIER) (|WeightedPolynomials| . WP) (|WildFunctionFieldIntegralBasis| . WFFINTBS) (|XDistributedPolynomial| . XDPOLY) (|XExponentialPackage| . XEXPPKG) (|XPBWPolynomial| . XPBWPOLY) (|XPolynomial| . XPOLY) (|XPolynomialRing| . XPR) (|XRecursivePolynomial| . XRPOLY)) (|defaults| (|AbelianGroup&| . ABELGRP-) (|AbelianMonoid&| . ABELMON-) (|AbelianMonoidRing&| . AMR-) (|AbelianSemiGroup&| . ABELSG-) (|Aggregate&| . AGG-) (|Algebra&| . ALGEBRA-) (|AlgebraicallyClosedField&| . ACF-) (|AlgebraicallyClosedFunctionSpace&| . ACFS-) (|ArcTrigonometricFunctionCategory&| . ATRIG-) (|BagAggregate&| . BGAGG-) (|BasicType&| . BASTYPE-) (|BinaryRecursiveAggregate!
&| . BRAGG-) (|BinaryTreeCategory&| . BTCAT-) (|BitAggregate&!
| . BTAGG-) (|Collection&| . CLAGG-) (|ComplexCategory&| . COMPCAT-) (|Dictionary&| . DIAGG-) (|DictionaryOperations&| . DIOPS-) (|DifferentialExtension&| . DIFEXT-) (|DifferentialPolynomialCategory&| . DPOLCAT-) (|DifferentialRing&| . DIFRING-) (|DifferentialVariableCategory&| . DVARCAT-) (|DirectProductCategory&| . DIRPCAT-) (|DivisionRing&| . DIVRING-) (|ElementaryFunctionCategory&| . ELEMFUN-) (|EltableAggregate&| . ELTAGG-) (|EuclideanDomain&| . EUCDOM-) (|Evalable&| . EVALAB-) (|ExpressionSpace&| . ES-) (|ExtensibleLinearAggregate&| . ELAGG-) (|ExtensionField&| . XF-) (|Field&| . FIELD-) (|FieldOfPrimeCharacteristic&| . FPC-) (|FiniteAbelianMonoidRing&| . FAMR-) (|FiniteAlgebraicExtensionField&| . FAXF-) (|FiniteDivisorCategory&| . FDIVCAT-) (|FiniteFieldCategory&| . FFIELDC-) (|FiniteLinearAggregate&| . FLAGG-) (|FiniteSetAggregate&| . FSAGG-) (|FiniteRankAlgebra&| . FINRALG-) (|FiniteRankNonAssociativeAlgebra&| . FINAALG-) (|FloatingPointSystem&| . FPS-) (|FramedAlge!
bra&| . FRAMALG-) (|FramedNonAssociativeAlgebra&| . FRNAALG-) (|FullyEvalableOver&| . FEVALAB-) (|FullyLinearlyExplicitRingOver&| . FLINEXP-) (|FullyRetractableTo&| . FRETRCT-) (|FunctionFieldCategory&| . FFCAT-) (|FunctionSpace&| . FS-) (|GcdDomain&| . GCDDOM-) (|GradedAlgebra&| . GRALG-) (|GradedModule&| . GRMOD-) (|Group&| . GROUP-) (|HomogeneousAggregate&| . HOAGG-) (|HyperbolicFunctionCategory&| . HYPCAT-) (|IndexedAggregate&| . IXAGG-) (|InnerEvalable&| . IEVALAB-) (|IntegerNumberSystem&| . INS-) (|IntegralDomain&| . INTDOM-) (|KeyedDictionary&| . KDAGG-) (|LazyStreamAggregate&| . LZSTAGG-) (|LeftAlgebra&| . LALG-) (|LieAlgebra&| . LIECAT-) (|LinearAggregate&| . LNAGG-) (|ListAggregate&| . LSAGG-) (|Logic&| . LOGIC-) (|LinearOrdinaryDifferentialOperatorCategory&| . LODOCAT-) (|MatrixCategory&| . MATCAT-) (|Module&| . MODULE-) (|Monad&| . MONAD-) (|MonadWithUnit&| . MONADWU-) (|Monoid&| . MONOID-) (|MonogenicAlgebra&| . MONOGEN-) (|NonAssociativeAlgebra&| . NAALG-) (|No!
nAssociativeRing&| . NASRING-) (|NonAssociativeRng&| . NARNG-!
) (|OctonionCategory&| . OC-) (|OneDimensionalArrayAggregate&| . A1AGG-) (|OrderedRing&| . ORDRING-) (|OrderedSet&| . ORDSET-) (|PartialDifferentialRing&| . PDRING-) (|PolynomialCategory&| . POLYCAT-) (|PolynomialFactorizationExplicit&| . PFECAT-) (|PolynomialSetCategory&| . PSETCAT-) (|PowerSeriesCategory&| . PSCAT-) (|QuaternionCategory&| . QUATCAT-) (|QuotientFieldCategory&| . QFCAT-) (|RadicalCategory&| . RADCAT-) (|RealClosedField&| . RCFIELD-) (|RealNumberSystem&| . RNS-) (|RealRootCharacterizationCategory&| . RRCC-) (|RectangularMatrixCategory&| . RMATCAT-) (|RecursiveAggregate&| . RCAGG-) (|RecursivePolynomialCategory&| . RPOLCAT-) (|RegularTriangularSetCategory&| . RSETCAT-) (|RetractableTo&| . RETRACT-) (|Ring&| . RING-) (|SemiGroup&| . SGROUP-) (|SetAggregate&| . SETAGG-) (|SetCategory&| . SETCAT-) (|SquareMatrixCategory&| . SMATCAT-) (|StreamAggregate&| . STAGG-) (|StringAggregate&| . SRAGG-) (|TableAggregate&| . TBAGG-) (|TranscendentalFunctionCategory&| . TRANF!
UN-) (|TriangularSetCategory&| . TSETCAT-) (|TrigonometricFunctionCategory&| . TRIGCAT-) (|TwoDimensionalArrayCategory&| . ARR2CAT-) (|UnaryRecursiveAggregate&| . URAGG-) (|UniqueFactorizationDomain&| . UFD-) (|UnivariateLaurentSeriesConstructorCategory&| . ULSCCAT-) (|UnivariatePolynomialCategory&| . UPOLYC-) (|UnivariatePowerSeriesCategory&| . UPSCAT-) (|UnivariatePuiseuxSeriesConstructorCategory&| . UPXSCCA-) (|UnivariateSkewPolynomialCategory&| . OREPCAT-) (|UnivariateTaylorSeriesCategory&| . UTSCAT-) (|VectorCategory&| . VECTCAT-) (|VectorSpace&| . VSPACE-)))
+--RValue = ((|basic| (|AlgebraicManipulations| . ALGMANIP) (|AlgebraicNumber| . AN) (|AlgFactor| . ALGFACT) (|AlgebraicMultFact| . ALGMFACT) (|AlgebraPackage| . ALGPKG) (|AlgebraGivenByStructuralConstants| . ALGSC) (|Any| . ANY) (|AnyFunctions1| . ANY1) (|ApplicationProgramInterface| . API) (|ArrayStack| . ASTACK) (|AssociatedJordanAlgebra| . JORDAN) (|AssociatedLieAlgebra| . LIE) (|AttachPredicates| . PMPRED) (|AxiomServer| . AXSERV) (|BalancedBinaryTree| . BBTREE) (|BasicOperator| . BOP) (|BasicOperatorFunctions1| . BOP1) (|Bezier| . BEZIER) (|BinaryExpansion| . BINARY) (|BinaryFile| . BINFILE) (|BinarySearchTree| . BSTREE) (|BinaryTournament| . BTOURN) (|BinaryTree| . BTREE) (|Bits| . BITS) (|Boolean| . BOOLEAN) (|CardinalNumber| . CARD) (|CartesianTensor| . CARTEN) (|CartesianTensorFunctions2| . CARTEN2) (|Character| . CHAR) (|CharacterClass| . CCLASS) (|CharacteristicPolynomialPackage| . CHARPOL) (|CliffordAlgebra| . CLIF) (|Color| . COLOR) (|CommonDenominator| . CDEN)!
 (|Commutator| . COMM) (|Complex| . COMPLEX) (|ComplexFactorization| . COMPFACT) (|ComplexFunctions2| . COMPLEX2) (|ComplexRootPackage| . CMPLXRT) (|ComplexTrigonometricManipulations| . CTRIGMNP) (|ContinuedFraction| . CONTFRAC) (|CoordinateSystems| . COORDSYS) (|CRApackage| . CRAPACK) (|CycleIndicators| . CYCLES) (|Database| . DBASE) (|DataList| . DLIST) (|DecimalExpansion| . DECIMAL) (|DenavitHartenbergMatrix| . DHMATRIX) (|Dequeue| . DEQUEUE) (|DiophantineSolutionPackage| . DIOSP) (|DirectProductFunctions2| . DIRPROD2) (|DisplayPackage| . DISPLAY) (|DistinctDegreeFactorize| . DDFACT) (|DoubleFloat| . DFLOAT) (|DoubleFloatSpecialFunctions| . DFSFUN) (|DrawComplex| . DRAWCX) (|DrawNumericHack| . DRAWHACK) (|DrawOption| . DROPT) (|EigenPackage| . EP) (|ElementaryFunctionDefiniteIntegration| . DEFINTEF) (|ElementaryFunctionLODESolver| . LODEEF) (|ElementaryFunctionODESolver| . ODEEF) (|ElementaryFunctionSign| . SIGNEF) (|ElementaryFunctionStructurePackage| . EFSTRUC) (|Equati!
on| . EQ) (|EquationFunctions2| . EQ2) (|ErrorFunctions| . ER!
ROR) (|EuclideanGroebnerBasisPackage| . GBEUCLID) (|Exit| . EXIT) (|Expression| . EXPR) (|ExpressionFunctions2| . EXPR2) (|ExpressionSolve| . EXPRSOL) (|ExpressionSpaceFunctions2| . ES2) (|ExpressionSpaceODESolver| . EXPRODE) (|ExpressionToOpenMath| . OMEXPR) (|ExpressionToUnivariatePowerSeries| . EXPR2UPS) (|Factored| . FR) (|FactoredFunctions2| . FR2) (|File| . FILE) (|FileName| . FNAME) (|FiniteAbelianMonoidRingFunctions2| . FAMR2) (|FiniteDivisorFunctions2| . FDIV2) (|FiniteField| . FF) (|FiniteFieldCyclicGroup| . FFCG) (|FiniteFieldPolynomialPackage2| . FFPOLY2) (|FiniteFieldNormalBasis| . FFNB) (|FiniteFieldHomomorphisms| . FFHOM) (|FiniteLinearAggregateFunctions2| . FLAGG2) (|FiniteLinearAggregateSort| . FLASORT) (|FiniteSetAggregateFunctions2| . FSAGG2) (|FlexibleArray| . FARRAY) (|Float| . FLOAT) (|FloatingRealPackage| . FLOATRP) (|FloatingComplexPackage| . FLOATCP) (|FourierSeries| . FSERIES) (|Fraction| . FRAC) (|FractionalIdealFunctions2| . FRIDEAL2) (|FractionFr!
eeFastGaussian| . FFFG) (|FractionFreeFastGaussianFractions| . FFFGF) (|FractionFunctions2| . FRAC2) (|FreeNilpotentLie| . FNLA) (|FullPartialFractionExpansion| . FPARFRAC) (|FunctionFieldCategoryFunctions2| . FFCAT2) (|FunctionSpaceAssertions| . PMASSFS) (|FunctionSpaceAttachPredicates| . PMPREDFS) (|FunctionSpaceComplexIntegration| . FSCINT) (|FunctionSpaceFunctions2| . FS2) (|FunctionSpaceIntegration| . FSINT) (|FunctionSpacePrimitiveElement| . FSPRMELT) (|FunctionSpaceSum| . SUMFS) (|GaussianFactorizationPackage| . GAUSSFAC) (|GeneralUnivariatePowerSeries| . GSERIES) (|GenerateUnivariatePowerSeries| . GENUPS) (|GraphicsDefaults| . GRDEF) (|GroebnerPackage| . GB) (|GroebnerFactorizationPackage| . GBF) (|Guess| . GUESS) (|GuessAlgebraicNumber| . GUESSAN) (|GuessFinite| . GUESSF) (|GuessFiniteFunctions| . GUESSF1) (|GuessInteger| . GUESSINT) (|GuessOption| . GOPT) (|GuessOptionFunctions0| . GOPT0) (|GuessPolynomial| . GUESSP) (|GuessUnivariatePolynomial| . GUESSUP) (|HallBa!
sis| . HB) (|Heap| . HEAP) (|HexadecimalExpansion| . HEXADEC)!
 (|IndexCard| . ICARD) (|IdealDecompositionPackage| . IDECOMP) (|InfiniteProductCharacteristicZero| . INFPROD0) (|InfiniteProductFiniteField| . INPRODFF) (|InfiniteProductPrimeField| . INPRODPF) (|InfiniteTuple| . ITUPLE) (|InfiniteTupleFunctions2| . ITFUN2) (|InfiniteTupleFunctions3| . ITFUN3) (|Infinity| . INFINITY) (|Integer| . INT) (|IntegerCombinatoricFunctions| . COMBINAT) (|IntegerLinearDependence| . ZLINDEP) (|IntegerNumberTheoryFunctions| . INTHEORY) (|IntegerPrimesPackage| . PRIMES) (|IntegerRetractions| . INTRET) (|IntegerRoots| . IROOT) (|IntegrationResultFunctions2| . IR2) (|IntegrationResultRFToFunction| . IRRF2F) (|IntegrationResultToFunction| . IR2F) (|Interval| . INTRVL) (|InventorDataSink| . IVDATA) (|InventorViewPort| . IVVIEW) (|InventorRenderPackage| . IVREND) (|InverseLaplaceTransform| . INVLAPLA) (|IrrRepSymNatPackage| . IRSN) (|KernelFunctions2| . KERNEL2) (|KeyedAccessFile| . KAFILE) (|LaplaceTransform| . LAPLACE) (|LazardMorenoSolvingPackage| . LAZM!
3PK) (|Library| . LIB) (|LieSquareMatrix| . LSQM) (|LinearOrdinaryDifferentialOperator| . LODO) (|LinearSystemMatrixPackage| . LSMP) (|LinearSystemMatrixPackage1| . LSMP1) (|LinearSystemPolynomialPackage| . LSPP) (|List| . LIST) (|ListFunctions2| . LIST2) (|ListFunctions3| . LIST3) (|ListToMap| . LIST2MAP) (|MakeFloatCompiledFunction| . MKFLCFN) (|MakeFunction| . MKFUNC) (|MakeRecord| . MKRECORD) (|MappingPackage1| . MAPPKG1) (|MappingPackage2| . MAPPKG2) (|MappingPackage3| . MAPPKG3) (|MappingPackage4| . MAPPKG4) (|MathMLFormat| . MMLFORM) (|Matrix| . MATRIX) (|MatrixCategoryFunctions2| . MATCAT2) (|MatrixCommonDenominator| . MCDEN) (|MatrixLinearAlgebraFunctions| . MATLIN) (|MergeThing| . MTHING) (|ModularDistinctDegreeFactorizer| . MDDFACT) (|ModuleOperator| . MODOP) (|MonoidRingFunctions2| . MRF2) (|MoreSystemCommands| . MSYSCMD) (|MPolyCatFunctions2| . MPC2) (|MPolyCatRationalFunctionFactorizer| . MPRFF) (|Multiset| . MSET) (|MultivariateFactorize| . MULTFACT) (|Multiva!
riatePolynomial| . MPOLY) (|MultFiniteFactorize| . MFINFACT) !
(|MyUnivariatePolynomial| . MYUP) (|MyExpression| . MYEXPR) (|NoneFunctions1| . NONE1) (|NonNegativeInteger| . NNI) (|NottinghamGroup| . NOTTING) (|NormalizationPackage| . NORMPK) (|NormInMonogenicAlgebra| . NORMMA) (|NumberTheoreticPolynomialFunctions| . NTPOLFN) (|Numeric| . NUMERIC) (|NumericalOrdinaryDifferentialEquations| . NUMODE) (|NumericalQuadrature| . NUMQUAD) (|NumericComplexEigenPackage| . NCEP) (|NumericRealEigenPackage| . NREP) (|NumericContinuedFraction| . NCNTFRAC) (|Octonion| . OCT) (|OctonionCategoryFunctions2| . OCTCT2) (|OneDimensionalArray| . ARRAY1) (|OneDimensionalArrayFunctions2| . ARRAY12) (|OnePointCompletion| . ONECOMP) (|OnePointCompletionFunctions2| . ONECOMP2) (|OpenMathConnection| . OMCONN) (|OpenMathDevice| . OMDEV) (|OpenMathEncoding| . OMENC) (|OpenMathError| . OMERR) (|OpenMathErrorKind| . OMERRK) (|OpenMathPackage| . OMPKG) (|OpenMathServerPackage| . OMSERVER) (|OperationsQuery| . OPQUERY) (|OrderedCompletion| . ORDCOMP) (|OrderedCompletio!
nFunctions2| . ORDCOMP2) (|OrdinaryDifferentialRing| . ODR) (|OrdSetInts| . OSI) (|OrthogonalPolynomialFunctions| . ORTHPOL) (|OutputPackage| . OUT) (|PadeApproximantPackage| . PADEPAC) (|Palette| . PALETTE) (|PartialFraction| . PFR) (|PatternFunctions2| . PATTERN2) (|ParametricPlaneCurve| . PARPCURV) (|ParametricSpaceCurve| . PARSCURV) (|ParametricSurface| . PARSURF) (|ParametricPlaneCurveFunctions2| . PARPC2) (|ParametricSpaceCurveFunctions2| . PARSC2) (|ParametricSurfaceFunctions2| . PARSU2) (|PartitionsAndPermutations| . PARTPERM) (|PatternMatch| . PATMATCH) (|PatternMatchAssertions| . PMASS) (|PatternMatchResultFunctions2| . PATRES2) (|PendantTree| . PENDTREE) (|Permanent| . PERMAN) (|PermutationGroupExamples| . PGE) (|PermutationGroup| . PERMGRP) (|Permutation| . PERM) (|Pi| . HACKPI) (|PiCoercions| . PICOERCE) (|PointFunctions2| . PTFUNC2) (|PolyGroebner| . PGROEB) (|Polynomial| . POLY) (|PolynomialAN2Expression| . PAN2EXPR) (|PolynomialComposition| . PCOMP) (|Polynom!
ialDecomposition| . PDECOMP) (|PolynomialFunctions2| . POLY2)!
 (|PolynomialIdeals| . IDEAL) (|PolynomialToUnivariatePolynomial| . POLY2UP) (|PositiveInteger| . PI) (|PowerSeriesLimitPackage| . LIMITPS) (|PrimeField| . PF) (|PrimitiveArrayFunctions2| . PRIMARR2) (|PrintPackage| . PRINT) (|QuadraticForm| . QFORM) (|QuasiComponentPackage| . QCMPACK) (|Quaternion| . QUAT) (|QuaternionCategoryFunctions2| . QUATCT2) (|QueryEquation| . QEQUAT) (|Queue| . QUEUE) (|QuotientFieldCategoryFunctions2| . QFCAT2) (|RadicalEigenPackage| . REP) (|RadicalSolvePackage| . SOLVERAD) (|RadixExpansion| . RADIX) (|RadixUtilities| . RADUTIL) (|RandomNumberSource| . RANDSRC) (|RationalFunction| . RF) (|RationalFunctionDefiniteIntegration| . DEFINTRF) (|RationalFunctionFactor| . RFFACT) (|RationalFunctionFactorizer| . RFFACTOR) (|RationalFunctionIntegration| . INTRF) (|RationalFunctionLimitPackage| . LIMITRF) (|RationalFunctionSign| . SIGNRF) (|RationalFunctionSum| . SUMRF) (|RationalRetractions| . RATRET) (|RealClosure| . RECLOS) (|RealPolynomialUtilitiesPackag!
e| . POLUTIL) (|RealZeroPackage| . REAL0) (|RealZeroPackageQ| . REAL0Q) (|RecurrenceOperator| . RECOP) (|RectangularMatrixCategoryFunctions2| . RMCAT2) (|RegularSetDecompositionPackage| . RSDCMPK) (|RegularTriangularSet| . REGSET) (|RegularTriangularSetGcdPackage| . RSETGCD) (|RepresentationPackage1| . REP1) (|RepresentationPackage2| . REP2) (|ResolveLatticeCompletion| . RESLATC) (|RewriteRule| . RULE) (|RightOpenIntervalRootCharacterization| . ROIRC) (|RomanNumeral| . ROMAN) (|Ruleset| . RULESET) (|ScriptFormulaFormat| . FORMULA) (|ScriptFormulaFormat1| . FORMULA1) (|Segment| . SEG) (|SegmentBinding| . SEGBIND) (|SegmentBindingFunctions2| . SEGBIND2) (|SegmentFunctions2| . SEG2) (|Set| . SET) (|SimpleAlgebraicExtensionAlgFactor| . SAEFACT) (|SimplifyAlgebraicNumberConvertPackage| . SIMPAN) (|SingleInteger| . SINT) (|SmithNormalForm| . SMITH) (|SparseUnivariatePolynomialExpressions| . SUPEXPR) (|SparseUnivariatePolynomialFunctions2| . SUP2) (|SpecialOutputPackage| . SPECOUT)!
 (|SquareFreeRegularSetDecompositionPackage| . SRDCMPK) (|Squ!
areFreeRegularTriangularSet| . SREGSET) (|SquareFreeRegularTriangularSetGcdPackage| . SFRGCD) (|SquareFreeQuasiComponentPackage| . SFQCMPK) (|Stack| . STACK) (|Stream| . STREAM) (|StreamFunctions1| . STREAM1) (|StreamFunctions2| . STREAM2) (|StreamFunctions3| . STREAM3) (|String| . STRING) (|SturmHabichtPackage| . SHP) (|Symbol| . SYMBOL) (|SymmetricGroupCombinatoricFunctions| . SGCF) (|SystemSolvePackage| . SYSSOLP) (|SAERationalFunctionAlgFactor| . SAERFFC) (|Tableau| . TABLEAU) (|TaylorSeries| . TS) (|TaylorSolve| . UTSSOL) (|TexFormat| . TEX) (|TexFormat1| . TEX1) (|TextFile| . TEXTFILE) (|ThreeDimensionalViewport| . VIEW3D) (|ThreeSpace| . SPACE3) (|Timer| . TIMER) (|TopLevelDrawFunctions| . DRAW) (|TopLevelDrawFunctionsForAlgebraicCurves| . DRAWCURV) (|TopLevelDrawFunctionsForCompiledFunctions| . DRAWCFUN) (|TopLevelDrawFunctionsForPoints| . DRAWPT) (|TopLevelThreeSpace| . TOPSP) (|TranscendentalManipulations| . TRMANIP) (|TransSolvePackage| . SOLVETRA) (|Tree| . TREE)!
 (|TrigonometricManipulations| . TRIGMNIP) (|UnivariateLaurentSeriesFunctions2| . ULS2) (|UnivariateFormalPowerSeries| . UFPS) (|UnivariateFormalPowerSeriesFunctions| . UFPS1) (|UnivariatePolynomial| . UP) (|UnivariatePolynomialCategoryFunctions2| . UPOLYC2) (|UnivariatePolynomialCommonDenominator| . UPCDEN) (|UnivariatePolynomialFunctions2| . UP2) (|UnivariatePolynomialMultiplicationPackage| . UPMP) (|UnivariatePuiseuxSeriesFunctions2| . UPXS2) (|UnivariateTaylorSeriesFunctions2| . UTS2) (|UniversalSegment| . UNISEG) (|UniversalSegmentFunctions2| . UNISEG2) (|UserDefinedVariableOrdering| . UDVO) (|Vector| . VECTOR) (|VectorFunctions2| . VECTOR2) (|ViewDefaultsPackage| . VIEWDEF) (|Void| . VOID) (|WuWenTsunTriangularSet| . WUTSET)) (|naglink| (|Asp1| . ASP1) (|Asp4| . ASP4) (|Asp6| . ASP6) (|Asp7| . ASP7) (|Asp8| . ASP8) (|Asp9| . ASP9) (|Asp10| . ASP10) (|Asp12| . ASP12) (|Asp19| . ASP19) (|Asp20| . ASP20) (|Asp24| . ASP24) (|Asp27| . ASP27) (|Asp28| . ASP28) (|Asp29| . ASP!
29) (|Asp30| . ASP30) (|Asp31| . ASP31) (|Asp33| . ASP33) (|A!
sp34| . ASP34) (|Asp35| . ASP35) (|Asp41| . ASP41) (|Asp42| . ASP42) (|Asp49| . ASP49) (|Asp50| . ASP50) (|Asp55| . ASP55) (|Asp73| . ASP73) (|Asp74| . ASP74) (|Asp77| . ASP77) (|Asp78| . ASP78) (|Asp80| . ASP80) (|FortranCode| . FC) (|FortranCodePackage1| . FCPAK1) (|FortranExpression| . FEXPR) (|FortranMachineTypeCategory| . FMTC) (|FortranMatrixCategory| . FMC) (|FortranMatrixFunctionCategory| . FMFUN) (|FortranOutputStackPackage| . FOP) (|FortranPackage| . FORT) (|FortranProgramCategory| . FORTCAT) (|FortranProgram| . FORTRAN) (|FortranFunctionCategory| . FORTFN) (|FortranScalarType| . FST) (|FortranType| . FT) (|FortranTemplate| . FTEM) (|FortranVectorFunctionCategory| . FVFUN) (|FortranVectorCategory| . FVC) (|MachineComplex| . MCMPLX) (|MachineFloat| . MFLOAT) (|MachineInteger| . MINT) (|MultiVariableCalculusFunctions| . MCALCFN) (|NagDiscreteFourierTransformInterfacePackage| . NAGDIS) (|NagEigenInterfacePackage| . NAGEIG) (|NAGLinkSupportPackage| . NAGSP) (|NagOptimi!
sationInterfacePackage| . NAGOPT) (|NagQuadratureInterfacePackage| . NAGQUA) (|NagResultChecks| . NAGRES) (|NagSpecialFunctionsInterfacePackage| . NAGSPE) (|NagPolynomialRootsPackage| . NAGC02) (|NagRootFindingPackage| . NAGC05) (|NagSeriesSummationPackage| . NAGC06) (|NagIntegrationPackage| . NAGD01) (|NagOrdinaryDifferentialEquationsPackage| . NAGD02) (|NagPartialDifferentialEquationsPackage| . NAGD03) (|NagInterpolationPackage| . NAGE01) (|NagFittingPackage| . NAGE02) (|NagOptimisationPackage| . NAGE04) (|NagMatrixOperationsPackage| . NAGF01) (|NagEigenPackage| . NAGF02) (|NagLinearEquationSolvingPackage| . NAGF04) (|NagLapack| . NAGF07) (|NagSpecialFunctionsPackage| . NAGS) (|PackedHermitianSequence| . PACKED) (|Result| . RESULT) (|SimpleFortranProgram| . SFORT) (|Switch| . SWITCH) (|SymbolTable| . SYMTAB) (|TemplateUtilities| . TEMUTL) (|TheSymbolTable| . SYMS) (|ThreeDimensionalMatrix| . M3D)) (|anna| (|AnnaNumericalIntegrationPackage| . INTPACK) (|AnnaNumericalOptimiz!
ationPackage| . OPTPACK) (|AnnaOrdinaryDifferentialEquationPa!
ckage| . ODEPACK) (|AnnaPartialDifferentialEquationPackage| . PDEPACK) (|AttributeButtons| . ATTRBUT) (|BasicFunctions| . BFUNCT) (|d01ajfAnnaType| . D01AJFA) (|d01akfAnnaType| . D01AKFA) (|d01alfAnnaType| . D01ALFA) (|d01amfAnnaType| . D01AMFA) (|d01anfAnnaType| . D01ANFA) (|d01apfAnnaType| . D01APFA) (|d01aqfAnnaType| . D01AQFA) (|d01asfAnnaType| . D01ASFA) (|d01fcfAnnaType| . D01FCFA) (|d01gbfAnnaType| . D01GBFA) (|d01AgentsPackage| . D01AGNT) (|d01TransformFunctionType| . D01TRNS) (|d01WeightsPackage| . D01WGTS) (|d02AgentsPackage| . D02AGNT) (|d02bbfAnnaType| . D02BBFA) (|d02bhfAnnaType| . D02BHFA) (|d02cjfAnnaType| . D02CJFA) (|d02ejfAnnaType| . D02EJFA) (|d03AgentsPackage| . D03AGNT) (|d03eefAnnaType| . D03EEFA) (|d03fafAnnaType| . D03FAFA) (|e04AgentsPackage| . E04AGNT) (|e04dgfAnnaType| . E04DGFA) (|e04fdfAnnaType| . E04FDFA) (|e04gcfAnnaType| . E04GCFA) (|e04jafAnnaType| . E04JAFA) (|e04mbfAnnaType| . E04MBFA) (|e04nafAnnaType| . E04NAFA) (|e04ucfAnnaType| . E04UCF!
A) (|ExpertSystemContinuityPackage| . ESCONT) (|ExpertSystemContinuityPackage1| . ESCONT1) (|ExpertSystemToolsPackage| . ESTOOLS) (|ExpertSystemToolsPackage1| . ESTOOLS1) (|ExpertSystemToolsPackage2| . ESTOOLS2) (|NumericalIntegrationCategory| . NUMINT) (|NumericalIntegrationProblem| . NIPROB) (|NumericalODEProblem| . ODEPROB) (|NumericalOptimizationCategory| . OPTCAT) (|NumericalOptimizationProblem| . OPTPROB) (|NumericalPDEProblem| . PDEPROB) (|ODEIntensityFunctionsTable| . ODEIFTBL) (|IntegrationFunctionsTable| . INTFTBL) (|OrdinaryDifferentialEquationsSolverCategory| . ODECAT) (|PartialDifferentialEquationsSolverCategory| . PDECAT) (|RoutinesTable| . ROUTINE)) (|categories| (|AbelianGroup| . ABELGRP) (|AbelianMonoid| . ABELMON) (|AbelianMonoidRing| . AMR) (|AbelianSemiGroup| . ABELSG) (|Aggregate| . AGG) (|Algebra| . ALGEBRA) (|AlgebraicallyClosedField| . ACF) (|AlgebraicallyClosedFunctionSpace| . ACFS) (|ArcHyperbolicFunctionCategory| . AHYP) (|ArcTrigonometricFunctionC!
ategory| . ATRIG) (|AssociationListAggregate| . ALAGG) (|Attr!
ibuteRegistry| . ATTREG) (|BagAggregate| . BGAGG) (|BasicType| . BASTYPE) (|BiModule| . BMODULE) (|BinaryRecursiveAggregate| . BRAGG) (|BinaryTreeCategory| . BTCAT) (|BitAggregate| . BTAGG) (|CachableSet| . CACHSET) (|CancellationAbelianMonoid| . CABMON) (|CharacteristicNonZero| . CHARNZ) (|CharacteristicZero| . CHARZ) (|CoercibleTo| . KOERCE) (|Collection| . CLAGG) (|CombinatorialFunctionCategory| . CFCAT) (|CombinatorialOpsCategory| . COMBOPC) (|CommutativeRing| . COMRING) (|ComplexCategory| . COMPCAT) (|ConvertibleTo| . KONVERT) (|DequeueAggregate| . DQAGG) (|Dictionary| . DIAGG) (|DictionaryOperations| . DIOPS) (|DifferentialExtension| . DIFEXT) (|DifferentialPolynomialCategory| . DPOLCAT) (|DifferentialRing| . DIFRING) (|DifferentialVariableCategory| . DVARCAT) (|DirectProductCategory| . DIRPCAT) (|DivisionRing| . DIVRING) (|DoublyLinkedAggregate| . DLAGG) (|ElementaryFunctionCategory| . ELEMFUN) (|Eltable| . ELTAB) (|EltableAggregate| . ELTAGG) (|EntireRing| . ENTIRER)!
 (|EuclideanDomain| . EUCDOM) (|Evalable| . EVALAB) (|ExpressionSpace| . ES) (|ExtensibleLinearAggregate| . ELAGG) (|ExtensionField| . XF) (|Field| . FIELD) (|FieldOfPrimeCharacteristic| . FPC) (|Finite| . FINITE) (|FileCategory| . FILECAT) (|FileNameCategory| . FNCAT) (|FiniteAbelianMonoidRing| . FAMR) (|FiniteAlgebraicExtensionField| . FAXF) (|FiniteDivisorCategory| . FDIVCAT) (|FiniteFieldCategory| . FFIELDC) (|FiniteLinearAggregate| . FLAGG) (|FiniteRankNonAssociativeAlgebra| . FINAALG) (|FiniteRankAlgebra| . FINRALG) (|FiniteSetAggregate| . FSAGG) (|FloatingPointSystem| . FPS) (|FramedAlgebra| . FRAMALG) (|FramedNonAssociativeAlgebra| . FRNAALG) (|FramedNonAssociativeAlgebraFunctions2| . FRNAAF2) (|FreeAbelianMonoidCategory| . FAMONC) (|FreeLieAlgebra| . FLALG) (|FreeModuleCat| . FMCAT) (|FullyEvalableOver| . FEVALAB) (|FullyLinearlyExplicitRingOver| . FLINEXP) (|FullyPatternMatchable| . FPATMAB) (|FullyRetractableTo| . FRETRCT) (|FunctionFieldCategory| . FFCAT) (|Funct!
ionSpace| . FS) (|GcdDomain| . GCDDOM) (|GradedAlgebra| . GRA!
LG) (|GradedModule| . GRMOD) (|Group| . GROUP) (|HomogeneousAggregate| . HOAGG) (|HyperbolicFunctionCategory| . HYPCAT) (|IndexedAggregate| . IXAGG) (|IndexedDirectProductCategory| . IDPC) (|InnerEvalable| . IEVALAB) (|IntegerNumberSystem| . INS) (|IntegralDomain| . INTDOM) (|IntervalCategory| . INTCAT) (|KeyedDictionary| . KDAGG) (|LazyStreamAggregate| . LZSTAGG) (|LeftAlgebra| . LALG) (|LeftModule| . LMODULE) (|LieAlgebra| . LIECAT) (|LinearAggregate| . LNAGG) (|LinearlyExplicitRingOver| . LINEXP) (|LinearOrdinaryDifferentialOperatorCategory| . LODOCAT) (|LiouvillianFunctionCategory| . LFCAT) (|ListAggregate| . LSAGG) (|Logic| . LOGIC) (|MatrixCategory| . MATCAT) (|Module| . MODULE) (|Monad| . MONAD) (|MonadWithUnit| . MONADWU) (|Monoid| . MONOID) (|MonogenicAlgebra| . MONOGEN) (|MonogenicLinearOperator| . MLO) (|MultiDictionary| . MDAGG) (|MultisetAggregate| . MSETAGG) (|MultivariateTaylorSeriesCategory| . MTSCAT) (|NonAssociativeAlgebra| . NAALG) (|NonAssociativeRing| . !
NASRING) (|NonAssociativeRng| . NARNG) (|NormalizedTriangularSetCategory| . NTSCAT) (|Object| . OBJECT) (|OctonionCategory| . OC) (|OneDimensionalArrayAggregate| . A1AGG) (|OpenMath| . OM) (|OrderedAbelianGroup| . OAGROUP) (|OrderedAbelianMonoid| . OAMON) (|OrderedAbelianMonoidSup| . OAMONS) (|OrderedAbelianSemiGroup| . OASGP) (|OrderedCancellationAbelianMonoid| . OCAMON) (|OrderedFinite| . ORDFIN) (|OrderedIntegralDomain| . OINTDOM) (|OrderedMonoid| . ORDMON) (|OrderedMultisetAggregate| . OMSAGG) (|OrderedRing| . ORDRING) (|OrderedSet| . ORDSET) (|PAdicIntegerCategory| . PADICCT) (|PartialDifferentialRing| . PDRING) (|PartialTranscendentalFunctions| . PTRANFN) (|Patternable| . PATAB) (|PatternMatchable| . PATMAB) (|PermutationCategory| . PERMCAT) (|PlottablePlaneCurveCategory| . PPCURVE) (|PlottableSpaceCurveCategory| . PSCURVE) (|PointCategory| . PTCAT) (|PolynomialCategory| . POLYCAT) (|PolynomialFactorizationExplicit| . PFECAT) (|PolynomialSetCategory| . PSETCAT) (|Power!
SeriesCategory| . PSCAT) (|PrimitiveFunctionCategory| . PRIMC!
AT) (|PrincipalIdealDomain| . PID) (|PriorityQueueAggregate| . PRQAGG) (|QuaternionCategory| . QUATCAT) (|QueueAggregate| . QUAGG) (|QuotientFieldCategory| . QFCAT) (|RadicalCategory| . RADCAT) (|RealClosedField| . RCFIELD) (|RealConstant| . REAL) (|RealNumberSystem| . RNS) (|RealRootCharacterizationCategory| . RRCC) (|RectangularMatrixCategory| . RMATCAT) (|RecursiveAggregate| . RCAGG) (|RecursivePolynomialCategory| . RPOLCAT) (|RegularChain| . RGCHAIN) (|RegularTriangularSetCategory| . RSETCAT) (|RetractableTo| . RETRACT) (|RightModule| . RMODULE) (|Ring| . RING) (|Rng| . RNG) (|SegmentCategory| . SEGCAT) (|SegmentExpansionCategory| . SEGXCAT) (|SemiGroup| . SGROUP) (|SetAggregate| . SETAGG) (|SetCategory| . SETCAT) (|SExpressionCategory| . SEXCAT) (|SpecialFunctionCategory| . SPFCAT) (|SquareFreeNormalizedTriangularSetCategory| . SNTSCAT) (|SquareFreeRegularTriangularSetCategory| . SFRTCAT) (|SquareMatrixCategory| . SMATCAT) (|StackAggregate| . SKAGG) (|StepThrough| . STE!
P) (|StreamAggregate| . STAGG) (|StringAggregate| . SRAGG) (|StringCategory| . STRICAT) (|StructuralConstantsPackage| . SCPKG) (|TableAggregate| . TBAGG) (|ThreeSpaceCategory| . SPACEC) (|TranscendentalFunctionCategory| . TRANFUN) (|TriangularSetCategory| . TSETCAT) (|TrigonometricFunctionCategory| . TRIGCAT) (|TwoDimensionalArrayCategory| . ARR2CAT) (|Type| . TYPE) (|UnaryRecursiveAggregate| . URAGG) (|UniqueFactorizationDomain| . UFD) (|UnivariateLaurentSeriesCategory| . ULSCAT) (|UnivariateLaurentSeriesConstructorCategory| . ULSCCAT) (|UnivariatePolynomialCategory| . UPOLYC) (|UnivariatePowerSeriesCategory| . UPSCAT) (|UnivariatePuiseuxSeriesCategory| . UPXSCAT) (|UnivariatePuiseuxSeriesConstructorCategory| . UPXSCCA) (|UnivariateSkewPolynomialCategory| . OREPCAT) (|UnivariateTaylorSeriesCategory| . UTSCAT) (|VectorCategory| . VECTCAT) (|VectorSpace| . VSPACE) (|XAlgebra| . XALG) (|XFreeAlgebra| . XFALG) (|XPolynomialsCat| . XPOLYC) (|ZeroDimensionalSolvePackage| . ZDSOLV!
E)) (|Hidden| (|AlgebraicFunction| . AF) (|AlgebraicFunctionF!
ield| . ALGFF) (|AlgebraicHermiteIntegration| . INTHERAL) (|AlgebraicIntegrate| . INTALG) (|AlgebraicIntegration| . INTAF) (|AnonymousFunction| . ANON) (|AntiSymm| . ANTISYM) (|ApplyRules| . APPRULE) (|ApplyUnivariateSkewPolynomial| . APPLYORE) (|ArrayStack| . ASTACK) (|AssociatedEquations| . ASSOCEQ) (|AssociationList| . ALIST) (|Automorphism| . AUTOMOR) (|BalancedFactorisation| . BALFACT) (|BalancedPAdicInteger| . BPADIC) (|BalancedPAdicRational| . BPADICRT) (|BezoutMatrix| . BEZOUT) (|BoundIntegerRoots| . BOUNDZRO) (|BrillhartTests| . BRILL) (|ChangeOfVariable| . CHVAR) (|CharacteristicPolynomialInMonogenicalAlgebra| . CPIMA) (|ChineseRemainderToolsForIntegralBases| . IBACHIN) (|CoerceVectorMatrixPackage| . CVMP) (|CombinatorialFunction| . COMBF) (|CommonOperators| . COMMONOP) (|CommuteUnivariatePolynomialCategory| . COMMUPC) (|ComplexIntegerSolveLinearPolynomialEquation| . CINTSLPE) (|ComplexPattern| . COMPLPAT) (|ComplexPatternMatch| . CPMATCH) (|ComplexRootFindingPacka!
ge| . CRFP) (|ConstantLODE| . ODECONST) (|CyclicStreamTools| . CSTTOOLS) (|CyclotomicPolynomialPackage| . CYCLOTOM) (|DefiniteIntegrationTools| . DFINTTLS) (|DegreeReductionPackage| . DEGRED) (|DeRhamComplex| . DERHAM) (|DifferentialSparseMultivariatePolynomial| . DSMP) (|DirectProduct| . DIRPROD) (|DirectProductMatrixModule| . DPMM) (|DirectProductModule| . DPMO) (|DiscreteLogarithmPackage| . DLP) (|DistributedMultivariatePolynomial| . DMP) (|DoubleResultantPackage| . DBLRESP) (|DrawOptionFunctions0| . DROPT0) (|DrawOptionFunctions1| . DROPT1) (|ElementaryFunction| . EF) (|ElementaryFunctionsUnivariateLaurentSeries| . EFULS) (|ElementaryFunctionsUnivariatePuiseuxSeries| . EFUPXS) (|ElementaryIntegration| . INTEF) (|ElementaryRischDE| . RDEEF) (|ElementaryRischDESystem| . RDEEFS) (|EllipticFunctionsUnivariateTaylorSeries| . ELFUTS) (|EqTable| . EQTBL) (|EuclideanModularRing| . EMR) (|EvaluateCycleIndicators| . EVALCYC) (|ExponentialExpansion| . EXPEXPAN) (|ExponentialOfUniva!
riatePuiseuxSeries| . EXPUPXS) (|ExpressionSpaceFunctions1| .!
 ES1) (|ExpressionTubePlot| . EXPRTUBE) (|ExtAlgBasis| . EAB) (|FactoredFunctions| . FACTFUNC) (|FactoredFunctionUtilities| . FRUTIL) (|FactoringUtilities| . FACUTIL) (|FGLMIfCanPackage| . FGLMICPK) (|FindOrderFinite| . FORDER) (|FiniteDivisor| . FDIV) (|FiniteFieldCyclicGroupExtension| . FFCGX) (|FiniteFieldCyclicGroupExtensionByPolynomial| . FFCGP) (|FiniteFieldExtension| . FFX) (|FiniteFieldExtensionByPolynomial| . FFP) (|FiniteFieldFunctions| . FFF) (|FiniteFieldNormalBasisExtension| . FFNBX) (|FiniteFieldNormalBasisExtensionByPolynomial| . FFNBP) (|FiniteFieldPolynomialPackage| . FFPOLY) (|FiniteFieldSolveLinearPolynomialEquation| . FFSLPE) (|FormalFraction| . FORMAL) (|FourierComponent| . FCOMP) (|FractionalIdeal| . FRIDEAL) (|FramedModule| . FRMOD) (|FreeAbelianGroup| . FAGROUP) (|FreeAbelianMonoid| . FAMONOID) (|FreeGroup| . FGROUP) (|FreeModule| . FM) (|FreeModule1| . FM1) (|FreeMonoid| . FMONOID) (|FunctionalSpecialFunction| . FSPECF) (|FunctionCalled| . FUNCTION) !
(|FunctionFieldIntegralBasis| . FFINTBAS) (|FunctionSpaceReduce| . FSRED) (|FunctionSpaceToUnivariatePowerSeries| . FS2UPS) (|FunctionSpaceToExponentialExpansion| . FS2EXPXP) (|FunctionSpaceUnivariatePolynomialFactor| . FSUPFACT) (|GaloisGroupFactorizationUtilities| . GALFACTU) (|GaloisGroupFactorizer| . GALFACT) (|GaloisGroupPolynomialUtilities| . GALPOLYU) (|GaloisGroupUtilities| . GALUTIL) (|GeneralHenselPackage| . GHENSEL) (|GeneralDistributedMultivariatePolynomial| . GDMP) (|GeneralPolynomialGcdPackage| . GENPGCD) (|GeneralSparseTable| . GSTBL) (|GenericNonAssociativeAlgebra| . GCNAALG) (|GenExEuclid| . GENEEZ) (|GeneralizedMultivariateFactorize| . GENMFACT) (|GeneralModulePolynomial| . GMODPOL) (|GeneralPolynomialSet| . GPOLSET) (|GeneralTriangularSet| . GTSET) (|GenUFactorize| . GENUFACT) (|GenusZeroIntegration| . INTG0) (|GosperSummationMethod| . GOSPER) (|GraphImage| . GRIMAGE) (|GrayCode| . GRAY) (|GroebnerInternalPackage| . GBINTERN) (|GroebnerSolve| . GROEBSOL) (!
|HashTable| . HASHTBL) (|Heap| . HEAP) (|HeuGcd| . HEUGCD) (|!
HomogeneousDistributedMultivariatePolynomial| . HDMP) (|HyperellipticFiniteDivisor| . HELLFDIV) (|IncrementingMaps| . INCRMAPS) (|IndexedBits| . IBITS) (|IndexedDirectProductAbelianGroup| . IDPAG) (|IndexedDirectProductAbelianMonoid| . IDPAM) (|IndexedDirectProductObject| . IDPO) (|IndexedDirectProductOrderedAbelianMonoid| . IDPOAM) (|IndexedDirectProductOrderedAbelianMonoidSup| . IDPOAMS) (|IndexedExponents| . INDE) (|IndexedFlexibleArray| . IFARRAY) (|IndexedList| . ILIST) (|IndexedMatrix| . IMATRIX) (|IndexedOneDimensionalArray| . IARRAY1) (|IndexedString| . ISTRING) (|IndexedTwoDimensionalArray| . IARRAY2) (|IndexedVector| . IVECTOR) (|InnerAlgFactor| . IALGFACT) (|InnerAlgebraicNumber| . IAN) (|InnerCommonDenominator| . ICDEN) (|InnerFiniteField| . IFF) (|InnerFreeAbelianMonoid| . IFAMON) (|InnerIndexedTwoDimensionalArray| . IIARRAY2) (|InnerMatrixLinearAlgebraFunctions| . IMATLIN) (|InnerMatrixQuotientFieldFunctions| . IMATQF) (|InnerModularGcd| . INMODGCD) (|InnerMult!
Fact| . INNMFACT) (|InnerNormalBasisFieldFunctions| . INBFF) (|InnerNumericEigenPackage| . INEP) (|InnerNumericFloatSolvePackage| . INFSP) (|InnerPAdicInteger| . IPADIC) (|InnerPolySign| . INPSIGN) (|InnerPolySum| . ISUMP) (|InnerPrimeField| . IPF) (|InnerSparseUnivariatePowerSeries| . ISUPS) (|InnerTable| . INTABL) (|InnerTaylorSeries| . ITAYLOR) (|InnerTrigonometricManipulations| . ITRIGMNP) (|InputForm| . INFORM) (|InputFormFunctions1| . INFORM1) (|IntegerBits| . INTBIT) (|IntegerFactorizationPackage| . INTFACT) (|IntegerMod| . ZMOD) (|IntegerSolveLinearPolynomialEquation| . INTSLPE) (|IntegralBasisPolynomialTools| . IBPTOOLS) (|IntegralBasisTools| . IBATOOL) (|IntegrationResult| . IR) (|IntegrationTools| . INTTOOLS) (|InternalPrintPackage| . IPRNTPK) (|InternalRationalUnivariateRepresentationPackage| . IRURPK) (|IrredPolyOverFiniteField| . IRREDFFX) (|Kernel| . KERNEL) (|Kovacic| . KOVACIC) (|LaurentPolynomial| . LAUPOL) (|LeadingCoefDetermination| . LEADCDET) (|LexTrian!
gularPackage| . LEXTRIPK) (|LieExponentials| . LEXP) (|LiePol!
ynomial| . LPOLY) (|LinearDependence| . LINDEP) (|LinearOrdinaryDifferentialOperatorFactorizer| . LODOF) (|LinearOrdinaryDifferentialOperator1| . LODO1) (|LinearOrdinaryDifferentialOperator2| . LODO2) (|LinearOrdinaryDifferentialOperatorsOps| . LODOOPS) (|LinearPolynomialEquationByFractions| . LPEFRAC) (|LinGroebnerPackage| . LGROBP) (|LiouvillianFunction| . LF) (|ListMonoidOps| . LMOPS) (|ListMultiDictionary| . LMDICT) (|LocalAlgebra| . LA) (|Localize| . LO) (|LyndonWord| . LWORD) (|Magma| . MAGMA) (|MakeBinaryCompiledFunction| . MKBCFUNC) (|MakeCachableSet| . MKCHSET) (|MakeUnaryCompiledFunction| . MKUCFUNC) (|MappingPackageInternalHacks1| . MAPHACK1) (|MappingPackageInternalHacks2| . MAPHACK2) (|MappingPackageInternalHacks3| . MAPHACK3) (|MeshCreationRoutinesForThreeDimensions| . MESH) (|ModMonic| . MODMON) (|ModularField| . MODFIELD) (|ModularHermitianRowReduction| . MHROWRED) (|ModularRing| . MODRING) (|ModuleMonomial| . MODMONOM) (|MoebiusTransform| . MOEBIUS) (|Monoid!
Ring| . MRING) (|MonomialExtensionTools| . MONOTOOL) (|MPolyCatPolyFactorizer| . MPCPF) (|MPolyCatFunctions3| . MPC3) (|MRationalFactorize| . MRATFAC) (|MultipleMap| . MMAP) (|MultivariateLifting| . MLIFT) (|MultivariateSquareFree| . MULTSQFR) (|HomogeneousDirectProduct| . HDP) (|NewSparseMultivariatePolynomial| . NSMP) (|NewSparseUnivariatePolynomial| . NSUP) (|NewSparseUnivariatePolynomialFunctions2| . NSUP2) (|NonCommutativeOperatorDivision| . NCODIV) (|NewtonInterpolation| . NEWTON) (|None| . NONE) (|NonLinearFirstOrderODESolver| . NODE1) (|NonLinearSolvePackage| . NLINSOL) (|NormRetractPackage| . NORMRETR) (|NPCoef| . NPCOEF) (|NumberFormats| . NUMFMT) (|NumberFieldIntegralBasis| . NFINTBAS) (|NumericTubePlot| . NUMTUBE) (|ODEIntegration| . ODEINT) (|ODETools| . ODETOOLS) (|Operator| . OP) (|OppositeMonogenicLinearOperator| . OMLO) (|OrderedDirectProduct| . ODP) (|OrderedFreeMonoid| . OFMONOID) (|OrderedVariableList| . OVAR) (|OrderingFunctions| . ORDFUNS) (|OrderlyDiff!
erentialPolynomial| . ODPOL) (|OrderlyDifferentialVariable| .!
 ODVAR) (|OrdinaryWeightedPolynomials| . OWP) (|OutputForm| . OUTFORM) (|PadeApproximants| . PADE) (|PAdicInteger| . PADIC) (|PAdicRational| . PADICRAT) (|PAdicRationalConstructor| . PADICRC) (|PAdicWildFunctionFieldIntegralBasis| . PWFFINTB) (|ParadoxicalCombinatorsForStreams| . YSTREAM) (|ParametricLinearEquations| . PLEQN) (|PartialFractionPackage| . PFRPAC) (|Partition| . PRTITION) (|Pattern| . PATTERN) (|PatternFunctions1| . PATTERN1) (|PatternMatchFunctionSpace| . PMFS) (|PatternMatchIntegerNumberSystem| . PMINS) (|PatternMatchIntegration| . INTPM) (|PatternMatchKernel| . PMKERNEL) (|PatternMatchListAggregate| . PMLSAGG) (|PatternMatchListResult| . PATLRES) (|PatternMatchPolynomialCategory| . PMPLCAT) (|PatternMatchPushDown| . PMDOWN) (|PatternMatchQuotientFieldCategory| . PMQFCAT) (|PatternMatchResult| . PATRES) (|PatternMatchSymbol| . PMSYM) (|PatternMatchTools| . PMTOOLS) (|PlaneAlgebraicCurvePlot| . ACPLOT) (|Plot| . PLOT) (|PlotFunctions1| . PLOT1) (|PlotTools| . !
PLOTTOOL) (|Plot3D| . PLOT3D) (|PoincareBirkhoffWittLyndonBasis| . PBWLB) (|Point| . POINT) (|PointsOfFiniteOrder| . PFO) (|PointsOfFiniteOrderRational| . PFOQ) (|PointsOfFiniteOrderTools| . PFOTOOLS) (|PointPackage| . PTPACK) (|PolToPol| . POLTOPOL) (|PolynomialCategoryLifting| . POLYLIFT) (|PolynomialCategoryQuotientFunctions| . POLYCATQ) (|PolynomialFactorizationByRecursion| . PFBR) (|PolynomialFactorizationByRecursionUnivariate| . PFBRU) (|PolynomialGcdPackage| . PGCD) (|PolynomialInterpolation| . PINTERP) (|PolynomialInterpolationAlgorithms| . PINTERPA) (|PolynomialNumberTheoryFunctions| . PNTHEORY) (|PolynomialRing| . PR) (|PolynomialRoots| . POLYROOT) (|PolynomialSetUtilitiesPackage| . PSETPK) (|PolynomialSolveByFormulas| . SOLVEFOR) (|PolynomialSquareFree| . PSQFR) (|PrecomputedAssociatedEquations| . PREASSOC) (|PrimitiveArray| . PRIMARR) (|PrimitiveElement| . PRIMELT) (|PrimitiveRatDE| . ODEPRIM) (|PrimitiveRatRicDE| . ODEPRRIC) (|Product| . PRODUCT) (|PseudoRemaind!
erSequence| . PRS) (|PseudoLinearNormalForm| . PSEUDLIN) (|Pu!
reAlgebraicIntegration| . INTPAF) (|PureAlgebraicLODE| . ODEPAL) (|PushVariables| . PUSHVAR) (|QuasiAlgebraicSet| . QALGSET) (|QuasiAlgebraicSet2| . QALGSET2) (|RadicalFunctionField| . RADFF) (|RandomDistributions| . RDIST) (|RandomFloatDistributions| . RFDIST) (|RandomIntegerDistributions| . RIDIST) (|RationalFactorize| . RATFACT) (|RationalIntegration| . INTRAT) (|RationalInterpolation| . RINTERP) (|RationalLODE| . ODERAT) (|RationalRicDE| . ODERTRIC) (|RationalUnivariateRepresentationPackage| . RURPK) (|RealSolvePackage| . REALSOLV) (|RectangularMatrix| . RMATRIX) (|ReducedDivisor| . RDIV) (|ReduceLODE| . ODERED) (|ReductionOfOrder| . REDORDER) (|Reference| . REF) (|RepeatedDoubling| . REPDB) (|RepeatedSquaring| . REPSQ) (|ResidueRing| . RESRING) (|RetractSolvePackage| . RETSOL) (|RuleCalled| . RULECOLD) (|SetOfMIntegersInOneToN| . SETMN) (|SExpression| . SEX) (|SExpressionOf| . SEXOF) (|SequentialDifferentialPolynomial| . SDPOL) (|SequentialDifferentialVariable| . SDVAR)!
 (|SimpleAlgebraicExtension| . SAE) (|SingletonAsOrderedSet| . SAOS) (|SortedCache| . SCACHE) (|SortPackage| . SORTPAK) (|SparseMultivariatePolynomial| . SMP) (|SparseMultivariateTaylorSeries| . SMTS) (|SparseTable| . STBL) (|SparseUnivariatePolynomial| . SUP) (|SparseUnivariateSkewPolynomial| . ORESUP) (|SparseUnivariateLaurentSeries| . SULS) (|SparseUnivariatePuiseuxSeries| . SUPXS) (|SparseUnivariateTaylorSeries| . SUTS) (|SplitHomogeneousDirectProduct| . SHDP) (|SplittingNode| . SPLNODE) (|SplittingTree| . SPLTREE) (|SquareMatrix| . SQMATRIX) (|Stack| . STACK) (|StorageEfficientMatrixOperations| . MATSTOR) (|StreamInfiniteProduct| . STINPROD) (|StreamTaylorSeriesOperations| . STTAYLOR) (|StreamTranscendentalFunctions| . STTF) (|StreamTranscendentalFunctionsNonCommutative| . STTFNC) (|StringTable| . STRTBL) (|SubResultantPackage| . SUBRESP) (|SubSpace| . SUBSPACE) (|SubSpaceComponentProperty| . COMPPROP) (|SuchThat| . SUCH) (|SupFractionFactorizer| . SUPFRACF) (|Symmetric!
Functions| . SYMFUNC) (|SymmetricPolynomial| . SYMPOLY) (|Sys!
temODESolver| . ODESYS) (|Table| . TABLE) (|TableauxBumpers| . TABLBUMP) (|TabulatedComputationPackage| . TBCMPPK) (|TangentExpansions| . TANEXP) (|ToolsForSign| . TOOLSIGN) (|TranscendentalHermiteIntegration| . INTHERTR) (|TranscendentalIntegration| . INTTR) (|TranscendentalRischDE| . RDETR) (|TranscendentalRischDESystem| . RDETRS) (|TransSolvePackageService| . SOLVESER) (|TriangularMatrixOperations| . TRIMAT) (|TubePlot| . TUBE) (|TubePlotTools| . TUBETOOL) (|Tuple| . TUPLE) (|TwoDimensionalArray| . ARRAY2) (|TwoDimensionalPlotClipping| . CLIP) (|TwoDimensionalViewport| . VIEW2D) (|TwoFactorize| . TWOFACT) (|UnivariateFactorize| . UNIFACT) (|UnivariateLaurentSeries| . ULS) (|UnivariateLaurentSeriesConstructor| . ULSCONS) (|UnivariatePolynomialDecompositionPackage| . UPDECOMP) (|UnivariatePolynomialDivisionPackage| . UPDIVP) (|UnivariatePolynomialSquareFree| . UPSQFREE) (|UnivariatePuiseuxSeries| . UPXS) (|UnivariatePuiseuxSeriesConstructor| . UPXSCONS) (|UnivariatePuiseuxS!
eriesWithExponentialSingularity| . UPXSSING) (|UnivariateSkewPolynomial| . OREUP) (|UnivariateSkewPolynomialCategoryOps| . OREPCTO) (|UnivariateTaylorSeries| . UTS) (|UnivariateTaylorSeriesODESolver| . UTSODE) (|UserDefinedPartialOrdering| . UDPO) (|UTSodetools| . UTSODETL) (|Variable| . VARIABLE) (|ViewportPackage| . VIEW) (|WeierstrassPreparation| . WEIER) (|WeightedPolynomials| . WP) (|WildFunctionFieldIntegralBasis| . WFFINTBS) (|XDistributedPolynomial| . XDPOLY) (|XExponentialPackage| . XEXPPKG) (|XPBWPolynomial| . XPBWPOLY) (|XPolynomial| . XPOLY) (|XPolynomialRing| . XPR) (|XRecursivePolynomial| . XRPOLY)) (|defaults| (|AbelianGroup&| . ABELGRP-) (|AbelianMonoid&| . ABELMON-) (|AbelianMonoidRing&| . AMR-) (|AbelianSemiGroup&| . ABELSG-) (|Aggregate&| . AGG-) (|Algebra&| . ALGEBRA-) (|AlgebraicallyClosedField&| . ACF-) (|AlgebraicallyClosedFunctionSpace&| . ACFS-) (|ArcTrigonometricFunctionCategory&| . ATRIG-) (|BagAggregate&| . BGAGG-) (|BasicType&| . BASTYPE-) (|Bina!
ryRecursiveAggregate&| . BRAGG-) (|BinaryTreeCategory&| . BTC!
AT-) (|BitAggregate&| . BTAGG-) (|Collection&| . CLAGG-) (|ComplexCategory&| . COMPCAT-) (|Dictionary&| . DIAGG-) (|DictionaryOperations&| . DIOPS-) (|DifferentialExtension&| . DIFEXT-) (|DifferentialPolynomialCategory&| . DPOLCAT-) (|DifferentialRing&| . DIFRING-) (|DifferentialVariableCategory&| . DVARCAT-) (|DirectProductCategory&| . DIRPCAT-) (|DivisionRing&| . DIVRING-) (|ElementaryFunctionCategory&| . ELEMFUN-) (|EltableAggregate&| . ELTAGG-) (|EuclideanDomain&| . EUCDOM-) (|Evalable&| . EVALAB-) (|ExpressionSpace&| . ES-) (|ExtensibleLinearAggregate&| . ELAGG-) (|ExtensionField&| . XF-) (|Field&| . FIELD-) (|FieldOfPrimeCharacteristic&| . FPC-) (|FiniteAbelianMonoidRing&| . FAMR-) (|FiniteAlgebraicExtensionField&| . FAXF-) (|FiniteDivisorCategory&| . FDIVCAT-) (|FiniteFieldCategory&| . FFIELDC-) (|FiniteLinearAggregate&| . FLAGG-) (|FiniteSetAggregate&| . FSAGG-) (|FiniteRankAlgebra&| . FINRALG-) (|FiniteRankNonAssociativeAlgebra&| . FINAALG-) (|FloatingPointSystem&| !
. FPS-) (|FramedAlgebra&| . FRAMALG-) (|FramedNonAssociativeAlgebra&| . FRNAALG-) (|FullyEvalableOver&| . FEVALAB-) (|FullyLinearlyExplicitRingOver&| . FLINEXP-) (|FullyRetractableTo&| . FRETRCT-) (|FunctionFieldCategory&| . FFCAT-) (|FunctionSpace&| . FS-) (|GcdDomain&| . GCDDOM-) (|GradedAlgebra&| . GRALG-) (|GradedModule&| . GRMOD-) (|Group&| . GROUP-) (|HomogeneousAggregate&| . HOAGG-) (|HyperbolicFunctionCategory&| . HYPCAT-) (|IndexedAggregate&| . IXAGG-) (|InnerEvalable&| . IEVALAB-) (|IntegerNumberSystem&| . INS-) (|IntegralDomain&| . INTDOM-) (|KeyedDictionary&| . KDAGG-) (|LazyStreamAggregate&| . LZSTAGG-) (|LeftAlgebra&| . LALG-) (|LieAlgebra&| . LIECAT-) (|LinearAggregate&| . LNAGG-) (|ListAggregate&| . LSAGG-) (|Logic&| . LOGIC-) (|LinearOrdinaryDifferentialOperatorCategory&| . LODOCAT-) (|MatrixCategory&| . MATCAT-) (|Module&| . MODULE-) (|Monad&| . MONAD-) (|MonadWithUnit&| . MONADWU-) (|Monoid&| . MONOID-) (|MonogenicAlgebra&| . MONOGEN-) (|NonAssociativeAlge!
bra&| . NAALG-) (|NonAssociativeRing&| . NASRING-) (|NonAssoc!
iativeRng&| . NARNG-) (|OctonionCategory&| . OC-) (|OneDimensionalArrayAggregate&| . A1AGG-) (|OrderedRing&| . ORDRING-) (|OrderedSet&| . ORDSET-) (|PartialDifferentialRing&| . PDRING-) (|PolynomialCategory&| . POLYCAT-) (|PolynomialFactorizationExplicit&| . PFECAT-) (|PolynomialSetCategory&| . PSETCAT-) (|PowerSeriesCategory&| . PSCAT-) (|QuaternionCategory&| . QUATCAT-) (|QuotientFieldCategory&| . QFCAT-) (|RadicalCategory&| . RADCAT-) (|RealClosedField&| . RCFIELD-) (|RealNumberSystem&| . RNS-) (|RealRootCharacterizationCategory&| . RRCC-) (|RectangularMatrixCategory&| . RMATCAT-) (|RecursiveAggregate&| . RCAGG-) (|RecursivePolynomialCategory&| . RPOLCAT-) (|RegularTriangularSetCategory&| . RSETCAT-) (|RetractableTo&| . RETRACT-) (|Ring&| . RING-) (|SemiGroup&| . SGROUP-) (|SetAggregate&| . SETAGG-) (|SetCategory&| . SETCAT-) (|SquareMatrixCategory&| . SMATCAT-) (|StreamAggregate&| . STAGG-) (|StringAggregate&| . SRAGG-) (|TableAggregate&| . TBAGG-) (|TranscendentalFuncti!
onCategory&| . TRANFUN-) (|TriangularSetCategory&| . TSETCAT-) (|TrigonometricFunctionCategory&| . TRIGCAT-) (|TwoDimensionalArrayCategory&| . ARR2CAT-) (|UnaryRecursiveAggregate&| . URAGG-) (|UniqueFactorizationDomain&| . UFD-) (|UnivariateLaurentSeriesConstructorCategory&| . ULSCCAT-) (|UnivariatePolynomialCategory&| . UPOLYC-) (|UnivariatePowerSeriesCategory&| . UPSCAT-) (|UnivariatePuiseuxSeriesConstructorCategory&| . UPXSCCA-) (|UnivariateSkewPolynomialCategory&| . OREPCAT-) (|UnivariateTaylorSeriesCategory&| . UTSCAT-) (|VectorCategory&| . VECTCAT-) (|VectorSpace&| . VSPACE-)))
 --E 155
 
 --S 156 of 237
diff --git a/src/input/unittest3.input.pamphlet b/src/input/unittest3.input.pamphlet
index 22e0c14..bd6c15c 100644
--- a/src/input/unittest3.input.pamphlet
+++ b/src/input/unittest3.input.pamphlet
@@ -17,76 +17,76 @@ Unit test the user level commands
 )set mes auto off
 )clear all
 
---S 1 of 19
+--S 1 of 75
 )lisp (identity |$inputPromptType|)
 --R 
 --RValue = |step|
 --E 1
 
---S 2 of 19
+--S 2 of 75
 )lisp (setq |$inputPromptType| '|none|)
 --R 
 --RValue = |none|
 --E 2
 
---S 3 of 19
+--S 3 of 75
 1
 --R   (1)  1
 --R                                                        Type: PositiveInteger
 --E 3
 
---S 4 of 19
+--S 4 of 75
 )lisp (setq |$inputPromptType| '|plain|)
 --RValue = |plain|
 --E 4
 
---S 5 of 19
+--S 5 of 75
 2
 --R
 --R   (2)  2
 --R                                                        Type: PositiveInteger
 --E 5
 
---S 6 of 19
+--S 6 of 75
 )lisp (setq |$inputPromptType| '|step|)
 --R 
 --RValue = |step|
 --E 6
 
---S 7 of 19
+--S 7 of 75
 2
 --R
 --R   (3)  2
 --R                                                        Type: PositiveInteger
 --E 7
 
---S 8 of 19
+--S 8 of 75
 )lisp (setq |$inputPromptType| '|frame|)
 --R 
 --RValue = |frame|
 --E 8
 
---S 9 of 19
+--S 9 of 75
 2
 --R
 --R   (4)  2
 --R                                                        Type: PositiveInteger
 --E 9
 
---S 10 of 19
+--S 10 of 75
 )lisp (setq |$inputPromptType| t)
 --R 
 --RValue = T
 --E 10
 
---S 11 of 19
+--S 11 of 75
 2
 --R
 --R   (5)  2
 --R                                                        Type: PositiveInteger
 --E 11
 
---S 12 of 19
+--S 12 of 75
 )set debug
 --R                    Current Values of  debug  Variables                    
 --R
@@ -97,7 +97,7 @@ Unit test the user level commands
 --R
 --E 12
 
---S 13 of 19
+--S 13 of 75
 )set debug lambdatype 
 --R-------------------------- The lambdatype Option --------------------------
 --R
@@ -112,11 +112,11 @@ Unit test the user level commands
 --R
 --E 13
 
---S 14 of 19
+--S 14 of 75
 )set debug lambdatype on
 --E 14
 
---S 15 of 19
+--S 15 of 75
 )set debug lambdatype
 --R-------------------------- The lambdatype Option --------------------------
 --R
@@ -131,7 +131,7 @@ Unit test the user level commands
 --R
 --E 15
 
---S 16 of 19
+--S 16 of 75
 )set debug dalymode
 --R--------------------------- The dalymode Option ---------------------------
 --R
@@ -146,11 +146,11 @@ Unit test the user level commands
 --R
 --E 16
 
---S 17 of 19
+--S 17 of 75
 )set debug dalymode on
 --E 17
 
---S 18 of 19
+--S 18 of 75
 )set debug dalymode
 --R--------------------------- The dalymode Option ---------------------------
 --R
@@ -165,7 +165,7 @@ Unit test the user level commands
 --R
 --E 18
 
---S 19 of 19
+--S 19 of 75
 )set debug
 --R                    Current Values of  debug  Variables                    
 --R
@@ -176,6 +176,343 @@ Unit test the user level commands
 --R
 --E 19
 
+--S 20 of 75
+)lisp |$frameAlist|
+--R 
+--RValue = NIL
+--E 20
+
+--S 21 of 75
+)lisp |$frameNumber|
+--R 
+--RValue = 0
+--E 21
+
+--S 22 of 75
+)lisp |$currentFrameNum|
+--R 
+--RValue = 0
+--E 22
+
+--S 23 of 75
+)lisp |$EndServerSession|
+--R 
+--RValue = NIL
+--E 23
+
+--S 24 of 75
+)lisp |$NeedToSignalSessionManager|
+--R 
+--RValue = T
+--E 24
+
+--S 25 of 75
+)lisp |$sockBufferLength|
+--R 
+--RValue = 9217
+--E 25
+
+--S 26 of 75
+)lisp SessionManager
+--R 
+--RValue = 1
+--E 26
+
+--S 27 of 75
+)lisp |$SessionManager|
+--R 
+--RValue = 1
+--E 27
+
+--S 28 of 75
+)lisp ViewportServer
+--R 
+--RValue = 2
+--E 28
+
+--S 29 of 75
+)lisp |$ViewportServer|
+--R 
+--RValue = 2
+--E 29
+
+--S 30 of 75
+)lisp MenuServer
+--R 
+--RValue = 3
+--E 30
+
+--S 31 of 75
+)lisp |$MenuServer|
+--R 
+--RValue = 3
+--E 31
+
+--S 32 of 75
+)lisp SessionIO
+--R 
+--RValue = 4
+--E 32
+
+--S 33 of 75
+)lisp |$SessionIO|
+--R 
+--RValue = 4
+--E 33
+
+--S 34 of 75
+)lisp MessageServer
+--R 
+--RValue = 5
+--E 34
+
+--S 35 of 75
+)lisp |$MessageServer|
+--R 
+--RValue = 5
+--E 35
+
+--S 36 of 75
+)lisp InterpWindow
+--R 
+--RValue = 6
+--E 36
+
+--S 37 of 75
+)lisp |$InterpWindow|
+--R 
+--RValue = 6
+--E 37
+
+--S 38 of 75
+)lisp KillSpad
+--R 
+--RValue = 7
+--E 38
+
+--S 39 of 75
+)lisp |$KillSpad|
+--R 
+--RValue = 7
+--E 39
+
+--S 40 of 75
+)lisp DebugWindow
+--R 
+--RValue = 8
+--E 40
+
+--S 41 of 75
+)lisp |$DebugWindow|
+--R 
+--RValue = 8
+--E 41
+
+--S 42 of 75
+)lisp NAGLinkServer
+--R 
+--RValue = 8
+--E 42
+
+--S 43 of 75
+)lisp |$NAGLinkServer|
+--R 
+--RValue = 8
+--E 43
+
+--S 44 of 75
+)lisp Forker
+--R 
+--RValue = 9
+--E 44
+
+--S 45 of 75
+)lisp |$Forker|
+--R 
+--RValue = 9
+--E 45
+
+--S 46 of 75
+)lisp CreateFrame
+--R 
+--RValue = 1
+--E 46
+
+--S 47 of 75
+)lisp |$CreateFrame|
+--R 
+--RValue = 1
+--E 47
+
+--S 48 of 75
+)lisp SwitchFrames
+--R 
+--RValue = 2
+--E 48
+
+--S 49 of 75
+)lisp |$SwitchFrames|
+--R 
+--RValue = 2
+--E 49
+
+--S 50 of 75
+)lisp EndOfOutput
+--R 
+--RValue = 3
+--E 50
+
+--S 51 of 75
+)lisp |$EndOfOutput|
+--R 
+--RValue = 3
+--E 51
+
+--S 52 of 75
+)lisp CallInterp
+--R 
+--RValue = 4
+--E 52
+
+--S 53 of 75
+)lisp |$CallInterp|
+--R 
+--RValue = 4
+--E 53
+
+--S 54 of 75
+)lisp EndSession
+--R 
+--RValue = 5
+--E 54
+
+--S 55 of 75
+)lisp |$EndSession|
+--R 
+--RValue = 5
+--E 55
+
+--S 56 of 75
+)lisp LispCommand
+--R 
+--RValue = 6
+--E 56
+
+--S 57 of 75
+)lisp |$LispCommand|
+--R 
+--RValue = 6
+--E 57
+
+--S 58 of 75
+)lisp SpadCommand
+--R 
+--RValue = 7
+--E 58
+
+--S 59 of 75
+)lisp |$SpadCommand|
+--R 
+--RValue = 7
+--E 59
+
+--S 60 of 75
+)lisp SendXEventToHyperTeX
+--R 
+--RValue = 8
+--E 60
+
+--S 61 of 75
+)lisp |$SendXEventToHyperTeX|
+--R 
+--RValue = 8
+--E 61
+
+--S 62 of 75
+)lisp QuietSpadCommand
+--R 
+--RValue = 9
+--E 62
+
+--S 63 of 75
+)lisp |$QuietSpadCommand|
+--R 
+--RValue = 9
+--E 63
+
+--S 64 of 75
+)lisp CloseClient
+--R 
+--RValue = 10
+--E 64
+
+--S 65 of 75
+)lisp |$CloseClient|
+--R 
+--RValue = 10
+--E 65
+
+--S 66 of 75
+)lisp QueryClients
+--R 
+--RValue = 11
+--E 66
+
+--S 67 of 75
+)lisp |$QueryClients|
+--R 
+--RValue = 11
+--E 67
+
+--S 68 of 75
+)lisp QuerySpad
+--R 
+--RValue = 12
+--E 68
+
+--S 69 of 75
+)lisp |$QuerySpad|
+--R 
+--RValue = 12
+--E 69
+
+--S 70 of 75
+)lisp NonSmanSession
+--R 
+--RValue = 13
+--E 70
+
+--S 71 of 75
+)lisp |$NonSmanSession|
+--R 
+--RValue = 13
+--E 71
+
+--S 72 of 75
+)lisp KillLispSystem
+--R 
+--RValue = 14
+--E 72
+
+--S 73 of 75
+)lisp |$KillLispSystem|
+--R 
+--RValue = 14
+--E 73
+
+--S 74 of 75
+)lisp CreateFrameAnswer
+--R 
+--RValue = 50
+--E 74
+
+--S 75 of 75
+)lisp |$CreateFrameAnswer|
+--R 
+--RValue = 50
+--E 75
+
+@
 )spool
 )lisp (bye)
  
\start
Date: Tue, 14 Apr 2009 20:39:38 -0500
From: Tim Daly
To: Michael Becker
Subject: bug 7195

If I do:
)set system functioncode on
)set system optimization on
)set function compile off
draw(surface(x,x*x,y),x=0..5,z=0..3)

I get the failure
  >>System error:
  The variable |y| is unbound.

So clearly, in the highly optimized compiler code, this variable
is freely referenced and unbound at run time causing the segmentation
violation. Turning compilation off can catch it.

\start
Date: Wed, 15 Apr 2009 10:30:46 -0500
From: Tim Daly
To: list
Subject: 20090415.01.tpd.patch (bookvol5 add \defunsec,	section titles..)

This is mostly more documentation. It is the first step toward
cleaning up and making the interpreter documentation minimally readable.

Add \defunsec latex macro which allows section titles to be displayed
for each defun.

Add section titles to many sections.
Add doc strings to defun sexpressions

Additionally, minor regression breakage due to the new Bezier package
was fixed.
======================================================================
diff --git a/books/bookvol5.pamphlet b/books/bookvol5.pamphlet
index 96ae01e..187e50b 100644
--- a/books/bookvol5.pamphlet
+++ b/books/bookvol5.pamphlet
@@ -36,7 +36,7 @@
 %%
 %% defun marks a function definition and adds it to the index
 %%
-\newcommand{\defun}[2]{% e.g. \defun{functionname}
+\newcommand{\defun}[2]{% e.g. \defun{functionname}{functionname}
 \subsection{defun #2}%
 \label{#1}%
 \index{#1}%
@@ -44,6 +44,17 @@
 \index{#1!defun}}
 
 %%
+%% defunsec marks a function definition and adds it to the index
+%% It assumes that the second argument is a section title.
+%%
+\newcommand{\defunsec}[2]{% e.g. \defunsec{functionname}{section title}
+\subsection{#2}%
+\label{#1}%
+\index{#1}%
+\index{defun!#1}%
+\index{#1!defun}}
+
+%%
 %% defmacro marks a macro definition and adds it to the index
 %%
 \newcommand{\defmacro}[1]{% e.g. \defmacro{functionname}
@@ -367,12 +378,13 @@ itself (don't break this) and never exits.
 \section{Variables Used}
 \section{Data Structures}
 \section{Functions}
-\defun{set-restart-hook}{set-restart-hook}
+\defunsec{set-restart-hook}{Set the restart hook}
 When a lisp image containing code is reloaded there is a hook to
 allow a function to be called. In our case it is the restart
 function which is the entry to the Axiom interpreter.
 <<defun set-restart-hook>>=
 (defun set-restart-hook ()
+  "Set the restart hook"
   #+KCL (setq system::*top-level-hook* 'restart)
   #+Lucid (setq boot::restart-hook 'restart)
   'restart
@@ -471,9 +483,10 @@ information is initialized.
   (|spad|))
 
 @
-\defun{spad}{Starts the interpreter but do not read in profiles}
+\defunsec{spad}{Starts the interpreter but do not read in profiles}
 <<defun spad>>=
 (defun |spad| () 
+ "Starts the interpreter but do not read in profiles"
  (let (|$PrintCompilerMessageIfTrue| |$inLispVM|) 
   (declare (special |$PrintCompilerMessageIfTrue| |$inLispVM|)) 
   (setq |$PrintCompilerMessageIfTrue| nil) 
@@ -671,9 +684,10 @@ will end up as a recursive call to ourselves.
 
 @
 \section{Helper Functions}
-\defun{getenviron}{getenviron}
+\defunsec{getenviron}{Get the value of an evironment variable}
 <<defun getenviron>>=
 (defun getenviron (var)
+ "Get the value of an evironment variable"
  #+allegro (sys::getenv (string var))
  #+clisp (ext:getenv (string var))
  #+(or cmu scl)
@@ -721,7 +735,7 @@ This function performs those setup commands.
 
 @
 
-\pagehead{initroot}{Set spadroot to be the AXIOM shell variable}
+\defunsec{initroot}{Set spadroot to be the AXIOM shell variable}
 Sets up the system to use the {\bf AXIOM} shell variable if we can
 and default to the {\bf \$spadroot} variable (which was the value
 of the {\bf AXIOM} shell variable at build time) if we can't.
@@ -729,14 +743,15 @@ of the {\bf AXIOM} shell variable at build time) if we can't.
 Called from \fnref{restart}.
 <<defun initroot>>=
 (defun initroot (&optional (newroot (getenviron "AXIOM")))
+ "Set spadroot to be the AXIOM shell variable"
   (declare (special $spadroot))
   (reroot (or newroot $spadroot (error "setenv AXIOM or (setq $spadroot)"))))
 
 @
 
-\defun{intloopPrefix?}{Does the string start with this prefix?}
+\defunsec{intloopPrefix?}{Does the string start with this prefix?}
 If the prefix string is the same as the whole string initial characters
-(ignoring spaces in the whole string) then we return the whole string
+--R(ignoring spaces in the whole string) then we return the whole string
 minus any leading spaces.
 <<defun intloopPrefix?>>=
 (defun |intloopPrefix?| (prefix whole)
@@ -748,8 +763,20 @@ minus any leading spaces.
     newwhole))))
 
 @
+\defunsec{get-current-directory}{Get the current directory}
+<<defun get-current-directory>>=
+#+:cmu
+(defun get-current-directory ()
+ "Get the current directory"
+  (namestring (extensions::default-directory)))
+
+#+(or :akcl :gcl)
+(defun get-current-directory ()
+ "Get the current directory"
+  (namestring (truename "")))
 
-\defun{make-absolute-filename}{Prepend the absolute path to a filename}
+@ 
+\defunsec{make-absolute-filename}{Prepend the absolute path to a filename}
 Prefix a filename with the {\bf AXIOM} shell variable.
 <<defun make-absolute-filename>>=
 (defun make-absolute-filename (name)
@@ -759,9 +786,10 @@ Prefix a filename with the {\bf AXIOM} shell variable.
 
 @
 
-\defun{makeInitialModemapFrame}{makeInitialModemapFrame}
+\defunsec{makeInitialModemapFrame}{Make the initial modemap frame}
 <<defun makeInitialModemapFrame>>=
 (defun |makeInitialModemapFrame| ()
+  "Make the initial modemap frame"
   (declare (special |$InitialModemapFrame|)) 
   (copy |$InitialModemapFrame|)) 
 
@@ -780,29 +808,31 @@ character. Otherwise, it returns nil.
 
 @
 
-\defun{reclaim}{reclaim}
+\defunsec{reclaim}{Call the garbage collector}
 Call the garbage collector on various platforms.
 <<defun reclaim>>=
 #+abcl 
-(defun reclaim () (ext::gc))
+(defun reclaim () "Call the garbage collector" (ext::gc))
 #+:allegro
-(defun reclaim () (excl::gc t))
+(defun reclaim () "Call the garbage collector" (excl::gc t))
 #+:CCL
-(defun reclaim () (gc))
+(defun reclaim () "Call the garbage collector" (gc))
 #+clisp
-(defun reclaim () (#+lisp=cl ext::gc #-lisp=cl lisp::gc))
+(defun reclaim () 
+ "Call the garbage collector" 
+ (#+lisp=cl ext::gc #-lisp=cl lisp::gc))
 #+(or :cmulisp :cmu)
-(defun reclaim () (ext:gc))
+(defun reclaim () "Call the garbage collector" (ext:gc))
 #+cormanlisp
-(defun reclaim () (cl::gc))
+(defun reclaim () "Call the garbage collector" (cl::gc))
 #+(OR IBCL KCL GCL)
-(defun reclaim () (si::gbc t))
+(defun reclaim () "Call the garbage collector" (si::gbc t))
 #+lispworks 
-(defun reclaim () (hcl::normal-gc))
+(defun reclaim () "Call the garbage collector" (hcl::normal-gc))
 #+Lucid
-(defun reclaim () (lcl::gc))
+(defun reclaim () "Call the garbage collector" (lcl::gc))
 #+sbcl
-(defun reclaim () (sb-ext::gc))
+(defun reclaim () "Call the garbage collector" (sb-ext::gc))
 @
 
 \defun{reroot}{reroot}
@@ -865,7 +895,7 @@ this is what the current code does so I won't change it.
 
 @
 
-\defun{mkprompt}{Show the Axiom prompt}
+\defunsec{mkprompt}{Show the Axiom prompt}
 <<defun mkprompt>>=
 (defun mkprompt ()
  "Show the Axiom prompt"
@@ -1071,10 +1101,10 @@ They appear to only be used to initialize the boot dollar variables.
 
 @
 
-\defun{serverReadLine}{serverReadLine}
+\defunsec{serverReadLine}{READ-LINE in an Axiom server system}
 <<defun serverReadLine>>=
 (defun |serverReadLine| (stream)
- "used in place of READ-LINE in a scratchpad server system."
+ "used in place of READ-LINE in a Axiom server system."
  (let (in-stream *eof* l framename currentframe form stringbuf line)
  (declare (special in-stream *eof* |$SpadServer| |$EndServerSession|
      |$NeedToSignalSessionManager| |$SessionManager| |$EndOfOutput|
@@ -1145,9 +1175,10 @@ They appear to only be used to initialize the boot dollar variables.
 
 @
 
-\defun{intloopInclude}{Include a file into the stream}
+\defunsec{intloopInclude}{Include a file into the stream}
 <<defun intloopInclude>>=
 (defun |intloopInclude| (name n)
+  "Include a file into the stream"
   (with-open-file (st name) (|intloopInclude0| st name n)))
 
 @
@@ -5364,7 +5395,7 @@ in the algebra so we keep them as functions.
 @
 
 \section{Functions}
-\defun{initializeInterpreterFrameRing}
+\defunsec{initializeInterpreterFrameRing}
 {Initializing the Interpreter Frame Ring}
 
 Now that we know what a frame looks like we need a function to
@@ -5379,6 +5410,7 @@ initial values.
 
 <<defun initializeInterpreterFrameRing>>=
 (defun |initializeInterpreterFrameRing| ()
+ "Initializing the Interpreter Frame Ring"
  (declare (special |$interpreterFrameName| |$interpreterFrameRing|))
  (setq |$interpreterFrameName| '|initial|)
  (setq |$interpreterFrameRing|
@@ -5387,34 +5419,35 @@ initial values.
  nil) 
 
 @
-\defun{frameNames}
-{Creating a List of all of the Frame Names}
+\defunsec{frameNames}{Creating a List of all of the Frame Names}
 This function simply walks across the frame in the frame ring and
 returns a list of the name of each frame. 
 <<defun frameNames>>=
 (defun |frameNames| () 
+ "Creating a List of all of the Frame Names"
  (declare (special |$interpreterFrameRing|))
  (mapcar #'frameName |$interpreterFrameRing|))
 
 @
 
-\defun{frameEnvironment}
-{Get Named Frame Environment (aka Interactive)}
+\defunsec{frameEnvironment}{Get Named Frame Environment (aka Interactive)}
 If the frame is found we return the environment portion of the frame
 otherwise we construct an empty environment and return it.
 The initial values of an empty frame are created here. This function
 returns a single frame that will be placed in the frame ring.
 <<defun frameEnvironment>>=
 (defun |frameEnvironment| (fname)
+ "Get Named Frame Environment (aka Interactive)"
  (let ((frame (|findFrameInRing| fname)))
   (if frame
    (frameInteractive frame)
    (list (list nil)))))
 
 @
-\defun{emptyInterpreterFrame}{emptyInterpreterFrame}
+\defunsec{emptyInterpreterFrame}{Create a new, empty Interpreter Frame}
 <<defun emptyInterpreterFrame>>=
 (defun |emptyInterpreterFrame| (name)
+ "Create a new, empty Interpreter Frame"
  (declare (special |$HiFiAccess| |$HistList| |$HistListLen| |$HistListAct| 
    |$HistRecord| |$localExposureDataDefault|))
  (list name                                 ; frame name
@@ -5429,7 +5462,7 @@ returns a single frame that will be placed in the frame ring.
    (copy-seq |$localExposureDataDefault|))) ; $localExposureData
 
 @
-\defun{createCurrentInterpreterFrame}
+\defunsec{createCurrentInterpreterFrame}
 {Collecting up the Environment into a Frame}
 
 We can collect up all the current environment information into
@@ -5438,6 +5471,7 @@ values of the global variables and returns this as a frame element.
 
 <<defun createCurrentInterpreterFrame>>=
 (defun |createCurrentInterpreterFrame| ()
+ "Collecting up the Environment into a Frame"
  (declare (special |$interpreterFrameName| |$InteractiveFrame| |$IOindex| 
    |$HiFiAccess| |$HistList| |$HistListLen| |$HistListAct| |$HistRecord| 
    |$internalHistoryTable| |$localExposureData|))
@@ -5455,12 +5489,13 @@ values of the global variables and returns this as a frame element.
 
 @
 
-\defun{updateFromCurrentInterpreterFrame}{Updating from the Current Frame}
+\defunsec{updateFromCurrentInterpreterFrame}{Update from the Current Frame}
 The frames are kept on a circular list. The first element on that
 list is known as ``the current frame''. This will initialize all
 of the interesting interpreter data structures from that frame.
 <<defun updateFromCurrentInterpreterFrame>>=
 (defun |updateFromCurrentInterpreterFrame| ()
+ "Update from the Current Frame"
  (let (tmp1)
   (declare (special |$interpreterFrameRing| |$interpreterFrameName|
     |$InteractiveFrame| |$IOindex| |$HiFiAccess| |$HistList| |$HistListLen|
@@ -5483,11 +5518,12 @@ of the interesting interpreter data structures from that frame.
       ,#(|bright| |$interpreterFrameName|))))))
 
 @
-\defun{findFrameInRing}{Find a Frame in the Frame Ring by Name}
+\defunsec{findFrameInRing}{Find a Frame in the Frame Ring by Name}
 Each frame contains its name as the 0th element.  We simply walk all
 the frames and if we find one we return it.
 <<defun findFrameInRing>>=
 (defun |findFrameInRing| (name)
+ "Find a Frame in the Frame Ring by Name"
  (let (result)
   (declare (special |$interpreterFrameRing|))
   (dolist (frame |$interpreterFrameRing|)
@@ -5497,29 +5533,29 @@ the frames and if we find one we return it.
 
 @
 
-\defun{updateCurrentInterpreterFrame}{Update the Current Interpreter Frame}
+\defunsec{updateCurrentInterpreterFrame}{Update the Current Interpreter Frame}
 This function collects the normal contents of the world into a 
 frame object, places it first on the frame list, and then sets
 the current values of the world from the frame object. 
 <<defun updateCurrentInterpreterFrame>>=
 (defun |updateCurrentInterpreterFrame| ()
+  "Update the Current Interpreter Frame"
   (declare (special |$interpreterFrameRing|))
   (rplaca |$interpreterFrameRing| (|createCurrentInterpreterFrame|))
   (|updateFromCurrentInterpreterFrame|))
 
 @
-\defun{nextInterpreterFrame}{nextInterpreterFrame}
-
+\defunsec{nextInterpreterFrame}{Move to the next Interpreter Frame in Ring}
 This function updates the current frame to make sure all of the
 current information is recorded. If there are more frame elements
 in the list then this will destructively move the current frame
 to the end of the list, that is, assume the frame list reads (1 2 3)
 this function will destructively change it to (2 3 1).
-
 Note: the nconc2 function destructively inserts the second list at the
 end of the first.
 <<defun nextInterpreterFrame>>=
 (defun |nextInterpreterFrame| ()
+  "Move to the next Interpreter Frame in Ring"
   (declare (special |$interpreterFrameRing|))
   (when (cdr |$interpreterFrameRing|)
    (setq |$interpreterFrameRing|
@@ -5528,9 +5564,10 @@ end of the first.
    (|updateFromCurrentInterpreterFrame|)))
 
 @
-\defun{changeToNamedInterpreterFrame}{changeToNamedInterpreterFrame}
+\defunsec{changeToNamedInterpreterFrame}{Change to the Named Interpreter Frame}
 <<defun changeToNamedInterpreterFrame>>=
 (defun |changeToNamedInterpreterFrame| (name)
+ "Change to the Named Interpreter Frame"
  (let (frame)
  (declare (special |$interpreterFrameRing|))
    (|updateCurrentInterpreterFrame|)
@@ -5541,9 +5578,11 @@ end of the first.
      (|updateFromCurrentInterpreterFrame|))))
 
 @
-\defun{previousInterpreterFrame}{previousInterpreterFrame}
+\defunsec{previousInterpreterFrame}
+{Move to the previous Interpreter Frame in Ring}
 <<defun previousInterpreterFrame>>=
 (defun |previousInterpreterFrame| ()
+ "Move to the previous Interpreter Frame in Ring"
  (let (tmp1 l b)
  (declare (special |$interpreterFrameRing|))
   (|updateCurrentInterpreterFrame|)
@@ -5555,9 +5594,10 @@ end of the first.
     (|updateFromCurrentInterpreterFrame|))))
 
 @
-\defun{addNewInterpreterFrame}{addNewInterpreterFrame}
+\defunsec{addNewInterpreterFrame}{Add a New Interpreter Frame}
 <<defun addNewInterpreterFrame>>=
 (defun |addNewInterpreterFrame| (name)
+ "Add a New Interpreter Frame"
  (declare (special |$interpreterFrameRing|))
  (if (null name)
    (|throwKeyedMsg| 's2iz0018 nil)  ; you must provide a name for new frame
@@ -5573,9 +5613,10 @@ end of the first.
      ($erase (|histFileName|)))))
 
 @
-\defun{closeInterpreterFrame}{closeInterpreterFrame}
+\defunsec{closeInterpreterFrame}{Close an Interpreter Frame}
 <<defun closeInterpreterFrame>>=
 (defun |closeInterpreterFrame| (name)
+ "Close an Interpreter Frame"
  (declare (special |$interpreterFrameRing| |$interpreterFrameName|))
  (let (ifr found)
     (if (null (cdr |$interpreterFrameRing|))
@@ -5601,9 +5642,10 @@ end of the first.
        (|updateFromCurrentInterpreterFrame|)))))
 
 @
-\defun{displayFrameNames}{displayFrameNames}
+\defunsec{displayFrameNames}{Display the Frame Names}
 <<defun displayFrameNames>>=
 (defun |displayFrameNames| ()
+ "Display the Frame Names"
  (declare (special |$interpreterFrameRing|))
  (let (t1)
   (setq t1
@@ -5612,9 +5654,10 @@ end of the first.
  (|sayKeyedMsg| 's2iz0024 (list (apply #'append t1)))))
 
 @
-\defun{importFromFrame}{importFromFrame}
+\defunsec{importFromFrame}{Import items from another frame}
 <<defun importFromFrame>>=
 (defun |importFromFrame| (args)
+ "Import items from another frame"
  (prog (temp1 fname fenv x v props vars plist prop val m)
  (declare (special |$interpreterFrameRing|))
   (when (and args (atom args)) (setq args (cons args nil))) 
@@ -5695,15 +5738,17 @@ end of the first.
             (cons fname nil))))))))))
 
 @
-\defun{frame}{frame}
+\defunsec{frame}{The top level frame command}
 <<defun frame>>=
 (defun |frame| (l)
+ "The top level frame command"
  (|frameSpad2Cmd| l)) 
 
 @
-\defun{frameSpad2Cmd}{frameSpad2Cmd}
+\defunsec{frameSpad2Cmd}{The top level frame command handler}
 <<defun frameSpad2Cmd>>=
 (defun |frameSpad2Cmd| (args)
+ "The top level frame command handler"
  (let (frameArgs arg a)
   (declare (special |$options|))
   (setq frameArgs '(|drop| |import| |last| |names| |new| |next|))
@@ -5930,16 +5975,18 @@ Available algebra help topics are:
 @ 
 
 \section{Functions}
-\defun{help}{help}
+\defunsec{help}{The top level help command}
 <<defun help>>=
 (defun |help| (l)
+ "The top level help command"
  (|helpSpad2Cmd| l)) 
 
 @
 
-\defun{helpSpad2Cmd}{helpSpad2Cmd}
+\defunsec{helpSpad2Cmd}{The top level help command handler}
 <<defun helpSpad2Cmd>>=
 (defun |helpSpad2Cmd| (|args|)
+ "The top level help command handler"
  (unless (|newHelpSpad2Cmd| |args|)
   (|sayKeyedMsg| 's2iz0025 (cons |args| nil))))
 
@@ -6237,18 +6284,20 @@ environment to \verb|$HistList| and \verb|$HistRecord|.
    (setq |$HistRecord| nil)))
  
 @
-\defun{history}{history}
+\defunsec{history}{The top level history command}
 <<defun history>>=
 (defun |history| (l) 
+ "The top level history command"
  (declare (special |$options|))
  (if (or l (null |$options|)) 
   (|sayKeyedMsg| 's2ih0006 nil) ; syntax error
   (|historySpad2Cmd|)))
 
 @
-\defun{historySpad2Cmd}{historySpad2Cmd}
+\defunsec{historySpad2Cmd}{The top level history command handler}
 <<defun historySpad2Cmd>>=
 (defun |historySpad2Cmd| () 
+ "The top level history command handler"
  (let (histOptions opts opt optargs x) 
  (declare (special |$options| |$HiFiAccess| |$IOindex|))
   (setq histOptions 
@@ -6861,9 +6910,10 @@ Also used in the output routines.
    (t (|throwKeyedMsg| 's2ih0004 nil))))) ; history not on
 
 @
-\defun{readHiFi}{Read the history file using index n}
+\defunsec{readHiFi}{Read the history file using index n}
 <<defun readHiFi>>=
 (defun |readHiFi| (n)
+ "Read the history file using index n"
  (let (pair HiFi vec)
   (declare (special |$useInternalHistoryTable| |$internalHistoryTable|))
   (if |$useInternalHistoryTable|
@@ -6884,9 +6934,10 @@ Also used in the output routines.
   vec))
 
 @
-\defun{writeHiFi}{Writes information of the current step to history file}
+\defunsec{writeHiFi}{Writes information of the current step to history file}
 <<defun writeHiFi>>=
 (defun |writeHiFi| ()
+ "Writes information of the current step to history file"
  (let (HiFi)
  (declare (special |$useInternalHistoryTable| |$internalHistoryTable|
      |$IOindex| |$HistRecord| |$currentLine|))
@@ -6907,9 +6958,10 @@ Also used in the output routines.
       (rshut HiFi)))))
 
 @
-\defun{disableHist}{Disable history if an error occurred}
+\defunsec{disableHist}{Disable history if an error occurred}
 <<defun disableHist>>=
 (defun |disableHist| () 
+ "Disable history if an error occurred"
  (declare (special |$HiFiAccess|))
  (cond
   ((null |$HiFiAccess|) 
@@ -6945,8 +6997,8 @@ Lisplib output transformations
 
 Some types of objects cannot be saved by LISP/VM in lisplibs.
 These functions transform an object to a writable form and back.
-\defun{SPADRWRITE0}{SPADRWRITE0}
-<<defun SPADRWRITE0>>=
+\defun{spadrwrite0}{spadrwrite0}
+<<defun spadrwrite0>>=
 (defun spadrwrite0 (vec item stream)
  (let (val)
   (setq val (|safeWritify| item))
@@ -6957,8 +7009,8 @@ These functions transform an object to a writable form and back.
      item))))
 
 @
-\defun{SPADRWRITE}{SPADRWRITE}
-<<defun SPADRWRITE>>=
+\defun{spadrwrite}{spadrwrite}
+<<defun spadrwrite>>=
 (defun spadrwrite (vec item stream)
  (let (val)
   (setq val (spadrwrite0 vec item stream))
@@ -6967,8 +7019,8 @@ These functions transform an object to a writable form and back.
    item)))
 
 @
-\defun{SPADRREAD}{SPADRREAD}
-<<defun SPADRREAD>>=
+\defun{spadrread}{spadrread}
+<<defun spadrread>>=
 (defun spadrread (vec stream)
  (|dewritify| (|rread| vec stream nil))) 
 
@@ -7495,10 +7547,11 @@ absolute or relative pathname.
     n)))
 
 @
-\defun{ncloopIncFileName}{ncloopIncFileName}
-Returns the first non-blank substring of the given string.
+\defunsec{ncloopIncFileName}
+{Returns the first non-blank substring of the given string}
 <<defun ncloopIncFileName>>=
 (defun |ncloopIncFileName| (string)
+ "Returns the first non-blank substring of the given string"
  (let (fn)
   (unless (setq fn (|incFileName| string))
    (write-line (concat string " not found")))
@@ -7506,31 +7559,34 @@ Returns the first non-blank substring of the given string.
 
 @
 
-\defun{ncloopInclude}{ncloopInclude}
-Open the file and read it in. The ncloopInclude0 function is part
+\defunsec{ncloopInclude}{Open the include file and read it in} 
+The ncloopInclude0 function is part
 of the parser and lives in int-top.boot.
 <<defun ncloopInclude>>=
 (defun |ncloopInclude| (name n)
-  (with-open-file (st name) (|ncloopInclude0| st name n)))
+ "Open the include file and read it in"
+ (with-open-file (st name) (|ncloopInclude0| st name n)))
 
 @
 
-\defun{incFileName}{incFileName}
+\defunsec{incFileName}{Return the include filename}
 Given a string we return the first token from the string which is
 the first non-blank substring.
 <<defun incFileName>>=
 (defun |incFileName| (x)
+ "Return the include filename"
   (car (|incBiteOff| x)))
 
 @
 
-\defun{incBiteOff}{incBiteOff}
+\defunsec{incBiteOff}{Return the next token}
 Takes a sequence and returns the a list of the first token and the
 remaining string characters. If there are no remaining string characters
 the second string is of length 0. Effectively it "bites off" the first 
 token in the string. If the string only 0 or more blanks it returns nil.
 <<defun incBiteOff>>=
 (defun |incBiteOff| (x)
+ "Return the next token"
  (let (blank nonblank)
   (setq x (string x))
   (when (setq nonblank (position #\space x :test-not #'char=))
@@ -7755,15 +7811,18 @@ o )system
 \fnref{system}}
 
 \section{Functions}
-\defun{pquit}{pquit}
+\defunsec{pquit}{The top level pquit command}
 <<defun pquit>>=
-(defun |pquit| () (|pquitSpad2Cmd|)) 
+(defun |pquit| ()
+ "The top level pquit command"
+ (|pquitSpad2Cmd|)) 
 
 @
 
-\defun{pquitSpad2Cmd}{pquitSpad2Cmd}
+\defunsec{pquitSpad2Cmd}{The top level pquit command handler}
 <<defun pquitSpad2Cmd>>=
 (defun |pquitSpad2Cmd| ()
+ "The top level pquit command handler"
  (let ((|$quitCommandType| '|protected|))
   (declare (special |$quitCommandType|))
   (|quitSpad2Cmd|)))
@@ -7829,14 +7888,17 @@ o )system
 \fnref{system}}
 
 \section{Functions}
-\defun{quit}{quit}
+\defunsec{quit}{The top level quit command}
 <<defun quit>>=
-(defun |quit| () (|quitSpad2Cmd|))
+(defun |quit| ()
+ "The top level quit command"
+ (|quitSpad2Cmd|))
 
 @
-\defun{quitSpad2Cmd}{quitSpad2Cmd}
+\defunsec{quitSpad2Cmd}{The top level quit command handler}
 <<defun quitSpad2Cmd>>=
 (defun |quitSpad2Cmd| ()
+ "The top level quit command handler"
  (declare (special |$quitCommandType|))
  (if (eq |$quitCommandType| '|protected|)
   (let (x)
@@ -7848,9 +7910,11 @@ o )system
 
 @
 
-\defun{leaveScratchpad}{leaveScratchpad}
+\defunsec{leaveScratchpad}{Leave the Axiom interpreter}
 <<defun leaveScratchpad>>=
-(defun |leaveScratchpad| () (bye)) 
+(defun |leaveScratchpad| () 
+ "Leave the Axiom interpreter"
+ (bye)) 
 
 @
 
@@ -8033,7 +8097,7 @@ for system. For more information, issue )help set .
 \end{verbatim}
 \section{Variables Used}
 \section{Functions}
-\defun{initializeSetVariables}{initializeSetVariables}
+\defunsec{initializeSetVariables}{Initialize the set variables}
 The argument settree is initially the \verb|$setOption| variable.
 The fourth element is a union-style switch symbol.
 The fifth element is usually a variable to set.
@@ -8042,6 +8106,7 @@ The seventh element is usually the default value. For more detailed
 explanations see the list structure section \ref{Theliststructure}.
 <<defun initializeSetVariables>>=
 (defun |initializeSetVariables| (settree) 
+ "Initialize the set variables"
  (dolist (setdata settree)
   (case (fourth setdata)
    (FUNCTION
@@ -8057,9 +8122,10 @@ explanations see the list structure section \ref{Theliststructure}.
 
 @
 
-\defun{resetWorkspaceVariables}{resetWorkspaceVariables}
+\defunsec{resetWorkspaceVariables}{Reset the workspace variables}
 <<defun resetWorkspaceVariables>>=
 (defun |resetWorkspaceVariables| () 
+ "Reset the workspace variables"
  (declare (special /countlist /editfile /sourcefiles |$sourceFiles| /pretty
     /spacelist /timerlist |$existingFiles| |$functionTable| $boot 
     |$compileMapFlag| |$echoLineStack| |$operationNameList| |$slamFlag|
@@ -8095,9 +8161,10 @@ explanations see the list structure section \ref{Theliststructure}.
 
 @
 
-\defun{displaySetOptionInformation}{displaySetOptionInformation}
+\defunsec{displaySetOptionInformation}{Display the set option information}
 <<defun displaySetOptionInformation>>=
 (defun |displaySetOptionInformation| (arg setdata)
+ "Display the set option information"
  (let (current)
  (declare (special $linelength))
   (cond
@@ -8142,9 +8209,10 @@ explanations see the list structure section \ref{Theliststructure}.
 
 @
 
-\defun{displaySetVariableSettings}{displaySetVariableSettings}
+\defunsec{displaySetVariableSettings}{Display the set variable settings}
 <<defun displaySetVariableSettings>>=
 (defun |displaySetVariableSettings| (settree label)
+ "Display the set variable settings"
  (let (setoption opt subtree subname)
  (declare (special $linelength))
   (if (eq label '||) 
@@ -8207,9 +8275,10 @@ explanations see the list structure section \ref{Theliststructure}.
 
 @
 
-\defun{translateYesNo2TrueFalse}{translateYesNo2TrueFalse}
+\defunsec{translateYesNo2TrueFalse}{Translate options values to t or nil}
 <<defun translateYesNo2TrueFalse>>=
 (defun |translateYesNo2TrueFalse| (x)
+ "Translate options values to t or nil"
  (cond
   ((|member| x '(|yes| |on|)) t)
   ((|member| x '(|no| |off|)) nil)
@@ -8217,9 +8286,10 @@ explanations see the list structure section \ref{Theliststructure}.
 
 @
 
-\defun{translateTrueFalse2YesNo}{translateTrueFalse2YesNo}
+\defunsec{translateTrueFalse2YesNo}{Translate t or nil to option values}
 <<defun translateTrueFalse2YesNo>>=
 (defun |translateTrueFalse2YesNo| (x)
+ "Translate t or nil to option values"
  (cond
   ((eq x t) '|on|)
   ((null x) '|off|)
@@ -8430,9 +8500,10 @@ args         arguments for compiling AXIOM code
 @
 \section{Variables Used}
 \section{Functions}
-\defun{setOutputLibrary}{setOutputLibrary}
+\defunsec{setOutputLibrary}{The set output command handler}
 <<defun setOutputLibrary>>=
 (defun |setOutputLibrary| (arg)
+ "The set output command handler"
  (let (fn)
  (declare (special |$outputLibraryName|))
    (cond
@@ -8447,9 +8518,10 @@ args         arguments for compiling AXIOM code
 
 @
 
-\defun{describeOutputLibraryArgs}{describeOutputLibraryArgs}
+\defunsec{describeOutputLibraryArgs}{Describe the set output library arguments}
 <<defun describeOutputLibraryArgs>>=
 (defun |describeOutputLibraryArgs| ()
+ "Describe the set output library arguments"
  (|sayBrightly| (list
   '|%b| ")set compiler output library"
   '|%d| "is used to tell the compiler where to place"
@@ -8460,10 +8532,11 @@ args         arguments for compiling AXIOM code
 
 @
 
-\defun{openOutputLibrary}{openOutputLibrary}
+\defunsec{openOutputLibrary}{Open the output library}
 The input-libraries and output-library are now truename based.
 <<defun openOutputLibrary>>=
 (defun |openOutputLibrary| (lib)
+ "Open the output library"
  (declare (special output-library input-libraries))
   (|dropInputLibrary| lib)
   (setq output-library (truename lib))
@@ -8495,10 +8568,11 @@ The input-libraries and output-library are now truename based.
 
 \section{Variables Used}
 \section{Functions}
-\defun{setInputLibrary}{setInputLibrary}
+\defunsec{setInputLibrary}{The set input library command handler}
 The input-libraries is now maintained as a list of truenames.
 <<defun setInputLibrary>>=
 (defun |setInputLibrary| (arg)
+ "The set input library command handler"
  (declare (special input-libraries))
  (let (tmp1 filename act)
   (cond
@@ -8523,9 +8597,10 @@ The input-libraries is now maintained as a list of truenames.
 
 @
 
-\defun{describeInputLibraryArgs}{describeInputLibraryArgs}
+\defunsec{describeInputLibraryArgs}{Describe the set input library arguments}
 <<defun describeInputLibraryArgs>>=
 (defun |describeInputLibraryArgs| ()
+ "Describe the set input library arguments"
  (|sayBrightly| (list
   '|%b| ")set compiler input add library"
   '|%d| "is used to tell AXIOM to add"
@@ -8541,19 +8616,21 @@ The input-libraries is now maintained as a list of truenames.
 
 @
 
-\defun{addInputLibrary}{addInputLibrary}
+\defunsec{addInputLibrary}{Add the input library to the list}
 The input-libraries variable is now maintained as a list of truenames.
 <<defun addInputLibrary>>=
 (defun |addInputLibrary| (lib)
+ "Add the input library to the list"
  (declare (special input-libraries))
   (|dropInputLibrary| lib)
   (push (truename lib) input-libraries))
 
 @
 
-\defun{dropInputLibrary}{dropInputLibrary}
+\defunsec{dropInputLibrary}{Drop an input library from the list}
 <<defun dropInputLibrary>>=
 (defun |dropInputLibrary| (lib) 
+ "Drop an input library from the list"
  (declare (special input-libraries))
  (setq input-libraries (delete (truename lib) input-libraries :test #'equal)))
 
@@ -8596,9 +8673,10 @@ The input-libraries variable is now maintained as a list of truenames.
 
 \section{Variables Used}
 \section{Functions}
-\defun{setAsharpArgs}{setAsharpArgs}
+\defunsec{setAsharpArgs}{Handle the set compiler command arguments}
 <<defun setAsharpArgs>>=
 (defun |setAsharpArgs| (arg)
+ "Handle the set compiler command arguments"
  (declare (special |$asharpCmdlineFlags|))
  (cond
   ((eq arg '|%initialize%|)
@@ -8611,9 +8689,10 @@ The input-libraries variable is now maintained as a list of truenames.
 
 @
 
-\defun{describeAsharpArgs}{describeAsharpArgs}
+\defunsec{describeAsharpArgs}{Describe the set compiler command arguments}
 <<defun describeAsharpArgs>>=
 (defun |describeAsharpArgs| () 
+ "Describe the set compiler command arguments"
  (declare (special |$asharpCmdlineFlags|))
  (|sayBrightly| (list
   '|%b| ")set compiler args "
@@ -8670,9 +8749,10 @@ The input-libraries variable is now maintained as a list of truenames.
 
 \section{Variables Used}
 \section{Functions}
-\defun{setExpose}{setExpose}
+\defunsec{setExpose}{The top level set expose command handler}
 <<defun setExpose>>=
 (defun |setExpose| (arg)
+ "The top level set expose command handler"
  (let (fnargs fn)
    (cond
     ((eq arg '|%initialize%|) (|loadExposureGroupData|))
@@ -8698,9 +8778,10 @@ The input-libraries variable is now maintained as a list of truenames.
 
 @
 
-\defun{setExposeAdd}{setExposeAdd}
+\defunsec{setExposeAdd}{The top level set expose add command handler}
 <<defun setExposeAdd>>=
 (defun |setExposeAdd| (arg)
+ "The top level set expose add command handler"
  (declare (special $linelength))
  (let (fnargs fn)
    (cond
@@ -8723,11 +8804,12 @@ The input-libraries variable is now maintained as a list of truenames.
 
 @
 
-\defun{setExposeAddGroup}{setExposeAddGroup}
+\defunsec{setExposeAddGroup}{Expose a group}
 Note that \verb|$localExposureData| is a vector of lists.
 It consists of [exposed groups,exposed constructors,hidden constructors]
 <<defun setExposeAddGroup>>=
 (defun |setExposeAddGroup| (arg)
+ "Expose a group"
  (declare (special |$globalExposureGroupAlist| |$localExposureData|
                    |$interpreterFrameName| $linelength))
  (if (null arg)
@@ -8768,9 +8850,10 @@ It consists of [exposed groups,exposed constructors,hidden constructors]
 
 @
 
-\defun{setExposeAddConstr}{setExposeAddConstr}
+\defunsec{setExposeAddConstr}{The top level set expose add constructor handler}
 <<defun setExposeAddConstr>>=
 (defun |setExposeAddConstr| (arg)
+ "The top level set expose add constructor handler"
  (declare (special $linelength |$localExposureData| |$interpreterFrameName|))
  (if (null arg)
    (progn
@@ -8796,9 +8879,10 @@ It consists of [exposed groups,exposed constructors,hidden constructors]
 
 @
 
-\defun{setExposeDrop}{setExposeDrop}
+\defunsec{setExposeDrop}{The top level set expose drop handler}
 <<defun setExposeDrop>>=
 (defun |setExposeDrop| (arg)
+ "The top level set expose drop handler"
  (declare (special $linelength))
  (let (fnargs fn)
    (cond
@@ -8819,9 +8903,10 @@ It consists of [exposed groups,exposed constructors,hidden constructors]
 
 @
 
-\defun{setExposeDropGroup}{setExposeDropGroup}
+\defunsec{setExposeDropGroup}{The top level set expose drop group handler}
 <<defun setExposeDropGroup>>=
 (defun |setExposeDropGroup| (arg)
+ "The top level set expose drop group handler"
  (declare (special $linelength |$localExposureData| |$interpreterFrameName|
                    |$globalExposureGroupAlist|))
  (if (null arg)
@@ -8854,9 +8939,11 @@ It consists of [exposed groups,exposed constructors,hidden constructors]
      (t (|sayKeyedMsg| 's2iz0049h (list x )))))))
 
 @
-\defun{setExposeDropConstr}{setExposeDropConstr}
+\defunsec{setExposeDropConstr}
+{The top level set expose drop constructor handler}
 <<defun setExposeDropConstr>>=
 (defun |setExposeDropConstr| (arg)
+ "The top level set expose drop constructor handler"
  (declare (special $linelength |$localExposureData| |$interpreterFrameName|))
  (if (null arg)
   (progn
@@ -8886,39 +8973,42 @@ It consists of [exposed groups,exposed constructors,hidden constructors]
 
 @
 
-\defun{displayExposedGroups}{displayExposedGroups}
+\defunsec{displayExposedGroups}{Display exposed groups}
 <<defun displayExposedGroups>>=
 (defun |displayExposedGroups| ()
-  (declare (special |$interpreterFrameName| |$localExposureData|))
-  (|sayKeyedMsg| 's2iz0049a (list |$interpreterFrameName|))
-  (if  (null (elt |$localExposureData| 0))
-   (|centerAndHighlight| "there are no exposed groups")
-   (dolist (c (elt |$localExposureData| 0))
-      (|centerAndHighlight| c))))
+ "Display exposed groups"
+ (declare (special |$interpreterFrameName| |$localExposureData|))
+ (|sayKeyedMsg| 's2iz0049a (list |$interpreterFrameName|))
+ (if  (null (elt |$localExposureData| 0))
+  (|centerAndHighlight| "there are no exposed groups")
+  (dolist (c (elt |$localExposureData| 0))
+     (|centerAndHighlight| c))))
 
 @
 
-\defun{displayExposedConstructors}{displayExposedConstructors}
+\defunsec{displayExposedConstructors}{Display exposed constructors}
 <<defun displayExposedConstructors>>=
 (defun |displayExposedConstructors| ()
-  (declare (special |$localExposureData|))
-  (|sayKeyedMsg| 's2iz0049b nil)
-  (if  (null (elt |$localExposureData| 1))
-   (|centerAndHighlight| "there are no explicitly exposed constructors")
-   (dolist (c (elt |$localExposureData| 1))
-      (|centerAndHighlight| c))))
+ "Display exposed constructors"
+ (declare (special |$localExposureData|))
+ (|sayKeyedMsg| 's2iz0049b nil)
+ (if  (null (elt |$localExposureData| 1))
+  (|centerAndHighlight| "there are no explicitly exposed constructors")
+  (dolist (c (elt |$localExposureData| 1))
+     (|centerAndHighlight| c))))
 
 @
 
-\defun{displayHiddenConstructors}{displayHiddenConstructors}
+\defunsec{displayHiddenConstructors}{Display hidden constructors}
 <<defun displayHiddenConstructors>>=
 (defun |displayHiddenConstructors| ()
-  (declare (special |$localExposureData|))
-  (|sayKeyedMsg| 's2iz0049c nil)
-  (if (null (elt |$localExposureData| 2))
-    (|centerAndHighlight| "there are no explicitly hidden constructors")
-    (dolist (c (elt |$localExposureData| 2))
-      (|centerAndHighlight| c))))
+ "Display hidden constructors"
+ (declare (special |$localExposureData|))
+ (|sayKeyedMsg| 's2iz0049c nil)
+ (if (null (elt |$localExposureData| 2))
+   (|centerAndHighlight| "there are no explicitly hidden constructors")
+   (dolist (c (elt |$localExposureData| 2))
+     (|centerAndHighlight| c))))
 
 @
 \section{functions}
@@ -8977,10 +9067,11 @@ recurrence   specially compile recurrence relations     on
 @
 \section{Variables Used}
 \section{Functions}
-\defun{setFunctionsCache}{setFunctionsCache}
+\defunsec{setFunctionsCache}{The top level set functions cache handler}
 \begin{verbatim}
 <<defun setFunctionsCache>>=
 (defun |setFunctionsCache| (arg)
+ "The top level set functions cache handler"
  (let (|$options| n)
   (declare (special |$options| |$cacheCount| |$cacheAlist|))
   (cond
@@ -9009,9 +9100,10 @@ recurrence   specially compile recurrence relations     on
 
 @
 
-\defun{countCache}{countCache}
+\defunsec{countCache}{Display a particular cache count}
 <<defun countCache>>=
 (defun |countCache| (n)
+ "Display a particular cache count"
  (let (tmp1 l cachecountname)
  (declare (special |$options| |$cacheAlist| |$cacheCount|))
  (cond 
@@ -9038,9 +9130,10 @@ recurrence   specially compile recurrence relations     on
 
 @
 
-\defun{describeSetFunctionsCache}{describeSetFunctionsCache}
+\defunsec{describeSetFunctionsCache}{Describe the set functions cache}
 <<defun describeSetFunctionsCache>>=
 (defun |describeSetFunctionsCache| ()
+ "Describe the set functions cache"
  (|sayBrightly| (list
   '|%b| ")set functions cache"
   '|%d| "is used to tell AXIOM how many"
@@ -9063,9 +9156,10 @@ recurrence   specially compile recurrence relations     on
 
 @
 
-\defun{sayAllCacheCounts}{sayAllCacheCounts}
+\defunsec{sayAllCacheCounts}{Display all cache counts}
 <<defun sayAllCacheCounts>>=
 (defun |sayAllCacheCounts| ()
+ "Display all cache counts"
  (let (x n)
  (declare (special |$cacheCount| |$cacheAlist|))
    (|sayCacheCount| nil |$cacheCount|)
@@ -9081,9 +9175,10 @@ recurrence   specially compile recurrence relations     on
 
 @
 
-\defun{sayCacheCount}{sayCacheCount}
+\defunsec{sayCacheCount}{Describe the cache counts}
 <<defun sayCacheCount>>=
 (defun |sayCacheCount| (fn n)
+ "Describe the cache counts"
  (let (prefix phrase)
     (setq prefix
      (cond 
@@ -9570,9 +9665,10 @@ linker       linker arguments (e.g. libraries to search) -lxlf
          NIL)
 @
 
-\defun{setFortTmpDir}{setFortTmpDir}
+\defunsec{setFortTmpDir}{The top level set fortran calling tempfile handler}
 <<defun setFortTmpDir>>=
 (defun |setFortTmpDir| (arg)
+ "The top level set fortran calling tempfile handler"
  (let (mode)
    (declare (special |$fortranTmpDir|))
    (cond
@@ -9592,18 +9688,20 @@ linker       linker arguments (e.g. libraries to search) -lxlf
 
 @
 
-\defun{validateOutputDirectory}{validateOutputDirectory}
+\defunsec{validateOutputDirectory}{Validate the output directory}
 <<defun validateOutputDirectory>>=
 (defun |validateOutputDirectory| (x)
+ "Validate the output directory"
  (let ((dirname (car x)))
   (when (and (pathname-directory dirname) (null (probe-file dirname)))
    dirname)))
 
 @
 
-\defun{describeSetFortTmpDir}{describeSetFortTmpDir}
+\defunsec{describeSetFortTmpDir}{Describe the set fortran calling tempfile}
 <<defun describeSetFortTmpDir>>=
 (defun |describeSetFortTmpDir| ()
+ "Describe the set fortran calling tempfile"
  (declare (special |$fortranTmpDir|))
  (|sayBrightly| (list
   '|%b| ")set fortran calling tempfile"
@@ -15679,9 +15777,10 @@ Properties of r ::
   (setq |$previousBindings| nil))
 
 @
-\defun{undoCount}{Undo previous n commands}
+\defunsec{undoCount}{Undo previous n commands}
 <<defun undoCount>>=
 (defun |undoCount| (n)
+ "Undo previous n commands"
  (prog (m)
  (declare (special |$IOindex|))
   (return
@@ -15840,10 +15939,11 @@ undoSingleStep(changes,env) ==
               (t pair)) tmp0))))))))))))) 
 
 @
-\defun{removeUndoLines}{Remove undo lines from hist write}
+\defunsec{removeUndoLines}{Remove undo lines from history write}
 Removing undo lines from \verb|)hist )write linelist|
 <<defun removeUndoLines>>=
 (defun |removeUndoLines| (u)
+ "Remove undo lines from history write"
  (prog (xtra savedIOindex s s1 m s2 x code c n acc)
  (declare (special |$currentLine| |$IOindex|))
   (return
@@ -16173,11 +16273,12 @@ o )show
 
 @
 
-\defun{apropos}{Display all operation names containing the fragment}
+\defunsec{apropos}{Display all operation names containing the fragment}
 Argument l is a list of operation name fragments.
 This displays all operation names containing these fragments
 <<defun apropos>>=
 (defun |apropos| (arg)
+ "Display all operation names containing the fragment"
  (prog (ops)
   (return
    (seq
@@ -17250,7 +17351,7 @@ stringimage
 (defconstant |$PageStuff| 100) 
 
 @
-\defun{issueHT}{Issue a line of HyperTex}
+\defunsec{issueHT}{Issue a line of HyperTex}
 <<defun issueHT>>=
 (defun |issueHT| (line)
  "Issue a line of HyperTex"
@@ -17259,7 +17360,7 @@ stringimage
  (|sockSendString| |$MenuServer| line))
 
 @
-\defun{endHTPage}{Mark the end of a hyperdoc page}
+\defunsec{endHTPage}{Mark the end of a hyperdoc page}
 <<defun endHTPage>>=
 (defun |endHTPage| ()
  "Mark the end of a hyperdoc page"
@@ -17267,7 +17368,7 @@ stringimage
  (|sockSendInt| |$MenuServer| |$EndOfPage|))
 
 @
-\defun{testPage}{Generate a Hyperdoc Test Page from Lisp}
+\defunsec{testPage}{Generate a Hyperdoc Test Page from Lisp}
 <<defun testPage>>=
 (defun |testPage| ()
  "Generate a Hyperdoc Test Page from Lisp"
@@ -17280,7 +17381,7 @@ stringimage
  (|endHTPage|))
 
 @
-\defun{replaceNamedHTPage}{Replace a current hypertex page}
+\defunsec{replaceNamedHTPage}{Replace a current hypertex page}
 <<defun replaceNamedHTPage>>=
 (defun |replaceNamedHTPage| (window name)
  "Replace a current hypertex page"
@@ -17293,7 +17394,7 @@ stringimage
  (|sockSendString| |$MenuServer| name))
 
 @
-\defun{startHTPopUpPage}{Start up a form page from spad}
+\defunsec{startHTPopUpPage}{Start up a form page from spad}
 <<defun startHTPopUpPage>>=
 (defun |startHTPopUpPage| (cols)
  "Start up a form page from spad"
@@ -17305,7 +17406,7 @@ stringimage
  (|sockGetInt| |$MenuServer|))
 
 @
-\defun{startHTPage}{Start a page from spad}
+\defunsec{startHTPage}{Start a page from spad}
 <<defun startHTPage>>=
 (defun |startHTPage| (cols)
  "Start a page from spad.  Using the spcified number of columns"
@@ -17316,7 +17417,7 @@ stringimage
  (|sockSendInt| |$MenuServer| cols))
 
 @
-\defun{startReplaceHTPage}{Start a replace page sequence}
+\defunsec{startReplaceHTPage}{Start a replace page sequence}
 <<defun startReplaceHTPage>>=
 (defun |startReplaceHTPage| (w)
  "Start a replace page sequence"
@@ -17328,7 +17429,7 @@ stringimage
  (|sockSendInt| |$MenuServer| w))
 
 @
-\defun{killHTPage}{Kill a hyperdoc page}
+\defunsec{killHTPage}{Kill a hyperdoc page}
 <<defun killHTPage>>=
 (defun |killHTPage| (w)
  "Kill a hyperdoc page"
@@ -17339,7 +17440,7 @@ stringimage
  (|sockSendInt| |$MenuServer| w))
 
 @
-\defun{linkToHTPage}{Link to hyperdoc page}
+\defunsec{linkToHTPage}{Link to hyperdoc page}
 <<defun linkToHTPage>>=
 (defun |linkToHTPage| (name)
  "Link to hyperdoc page"
@@ -17351,7 +17452,7 @@ stringimage
  (|sockSendString| |$MenuServer| name))
 
 @
-\defun{popUpNamedHTPage}{Pop up a named hyperdoc page}
+\defunsec{popUpNamedHTPage}{Pop up a named hyperdoc page}
 <<defun popUpNamedHTPage>>=
 (defun |popUpNamedHTPage| (name cols)
  "Pop up a named hyperdoc page"
@@ -17365,7 +17466,7 @@ stringimage
  (|sockGetInt| |$MenuServer|))
 
 @
-\defun{sendHTErrorSignal}{Send hyperdoc an error signal}
+\defunsec{sendHTErrorSignal}{Send hyperdoc an error signal}
 <<defun sendHTErrorSignal>>=
 (defun |sendHTErrorSignal| ()
  "Send hyperdoc an error signal"
@@ -17496,6 +17597,7 @@ stringimage
 <<defun gensymInt>>
 <<defun getAliasIfTracedMapParameter>>
 <<defun getBpiNameIfTracedMap>>
+<<defun get-current-directory>>
 <<defun getenviron>>
 <<defun getMapSig>>
 <<defun getMapSubNames>>
@@ -17684,9 +17786,9 @@ stringimage
 <<defun SpadInterpretStream>>
 <<defun spadReply>>
 <<defun spadReply,printName>>
-<<defun SPADRREAD>>
-<<defun SPADRWRITE>>
-<<defun SPADRWRITE0>>
+<<defun spadrread>>
+<<defun spadrwrite>>
+<<defun spadrwrite0>>
 <<defun spad-save>>
 <<defun spadTrace>>
 <<defun spadTraceAlias>>
diff --git a/changelog b/changelog
index fd00320..11f8639 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,8 @@
+20090415 tpd src/axiom-website/patches.html 20090415.01.tpd.patch
+20090415 tpd src/input/r20bugs.input fixup bezier
+20090415 tpd src/input/cmds.input fixup bezier 
+20090415 tpd src/interp/vmlisp.lisp move get-current-directory to bookvol5
+20090415 tpd books/bookvol5 add \defunsec, section titles, docstrings
 20090414 tpd src/axiom-website/patches.html 20090414.06.tpd.patch
 20090414 tpd src/input/unittest3.input add Bezier package
 20090414 tpd src/input/unittest2.input add Bezier package
diff --git a/src/axiom-website/patches.html b/src/axiom-website/patches.html
index ef0541a..322172d 100644
--- a/src/axiom-website/patches.html
+++ b/src/axiom-website/patches.html
@@ -1086,5 +1086,7 @@ Makefile add Makefile.slackware chunk<br/>
 Makefile report regression failures<br/>
 <a href="patches/20090414.06.tpd.patch">20090414.06.tpd.patch</a>
 bookvol10.4 add Bezier package<br/>
+<a href="patches/20090415.01.tpd.patch">20090415.01.tpd.patch</a>
+bookvol5 add \defunsec, section titles, docstrings<br/>
  </body>
 </html>
diff --git a/src/input/cmds.input.pamphlet b/src/input/cmds.input.pamphlet
index 29c2766..001cd25 100644
--- a/src/input/cmds.input.pamphlet
+++ b/src/input/cmds.input.pamphlet
@@ -510,6 +510,7 @@
 
 --S 15 of 23
 )what packages
+--R 
 --R-------------------------------- Packages ---------------------------------
 --R AF       AlgebraicFunction            ALGFACT  AlgFactor
 --R ALGMANIP AlgebraicManipulations       ALGMFACT AlgebraicMultFact
@@ -519,10 +520,10 @@
 --R APPRULE  ApplyRules
 --R ARRAY12  OneDimensionalArrayFunctions2
 --R ASSOCEQ  AssociatedEquations          AXSERV   AxiomServer
---R BALFACT  BalancedFactorisation        BEZOUT   BezoutMatrix
---R BOP1     BasicOperatorFunctions1      BOUNDZRO BoundIntegerRoots
---R BRILL    BrillhartTests               CARTEN2  CartesianTensorFunctions2
---R CDEN     CommonDenominator
+--R BALFACT  BalancedFactorisation        BEZIER   Bezier
+--R BEZOUT   BezoutMatrix                 BOP1     BasicOperatorFunctions1
+--R BOUNDZRO BoundIntegerRoots            BRILL    BrillhartTests
+--R CARTEN2  CartesianTensorFunctions2    CDEN     CommonDenominator
 --R CHARPOL  CharacteristicPolynomialPackage
 --R CHVAR    ChangeOfVariable
 --R CINTSLPE ComplexIntegerSolveLinearPolynomialEquation
diff --git a/src/input/r20bugs.input.pamphlet b/src/input/r20bugs.input.pamphlet
index 829d2a5..93b9926 100644
--- a/src/input/r20bugs.input.pamphlet
+++ b/src/input/r20bugs.input.pamphlet
@@ -197,7 +197,8 @@ positiveRemainder(-1::SINT,-5::SINT)
 complexRoots([u**2-v+1,v**2-4],[u,v],0.01)
 --R 
 --R
---R   (1)  [[1.73046875 %i,- 2.0],[- 1.73046875 %i,- 2.0],[- 1.0,2.0],[1.0,2.0]]
+--R   (1)
+--R   [[1.732421875 %i,- 2.0],[- 1.732421875 %i,- 2.0],[- 1.0,2.0],[1.0,2.0]]
 --R                                                Type: List List Complex Float
 --E 17
 
diff --git a/src/interp/vmlisp.lisp.pamphlet b/src/interp/vmlisp.lisp.pamphlet
index 215ab70..0b998a3 100644
--- a/src/interp/vmlisp.lisp.pamphlet
+++ b/src/interp/vmlisp.lisp.pamphlet
@@ -84,18 +84,6 @@ Contributed by Juergen Weiss from Arthur Norman's CCL.
     (/ 1.0 (tan a))))
 
 @
-\section{The get-current-directory function}
-Contributed by Juergen Weiss.
-<<getCD>>=
-#+:cmu
-(defun get-current-directory ()
-  (namestring (extensions::default-directory)))
-
-#+(or :akcl :gcl)
-(defun get-current-directory ()
-  (namestring (truename "")))
-
-@ 
 \section{The digits-by-radix function} 
 The purpose of the following function is to calculate the number of
 digits in the radix $B$ expansion of an arbitrary Lisp integer $n$.
@@ -1991,8 +1979,6 @@ can be restored.
 (defun MAKE-BVEC (n)
  (make-array (list n) :element-type 'bit :initial-element 0))
 
-<<getCD>>
-
 (in-package 'boot)
 
 <<manexp>>

\start
Date: Thu, 16 Apr 2009 03:31:37 -0500
From: Tim Daly
To: list
Subject: 20090416.01.tpd.patch (regress.lisp tighten checks on regression)

There was a hole in regression testing. If the regression tests failed
with an early exit (e.g. an interpreter exit) then the regression code
would certify the test as passing if the subset of tests prior to the
failure worked. 

Regression tests use "--S N of M" on each start line of each test
so it is possible to check whether the final start line fulfills the
condition that N=M, that is, the last line reads "--S 20 of 20", etc.
If the test exits early, say at test 8, then the "--S 8 of 20" would
not fulfill the requirement and an error will now be indicated.

This check was added and some failing tests were brought up to the
new standard.

Failing tests are listed at the end of every system make.

====================================================================
diff --git a/books/bookvol10.3.pamphlet b/books/bookvol10.3.pamphlet
index 4c6f3bf..569e470 100644
--- a/books/bookvol10.3.pamphlet
+++ b/books/bookvol10.3.pamphlet
@@ -51013,26 +51013,210 @@ Kernel(S:OrderedSet): Exports == Implementation where
 )set message test on
 )set message auto off
 )clear all
+
+--S 1 of 20
 ey: KeyedAccessFile(Integer) := open("editor.year", "output")
+--R 
+--R
+--R   (1)  "editor.year"
+--R                                                Type: KeyedAccessFile Integer
+--E 1
+
+--S 2 of 20
 ey."Char":= 1986
+--R 
+--R
+--R   (2)  1986
+--R                                                        Type: PositiveInteger
+--E 2
+
+--S 3 of 20
 ey."Caviness" := 1985
+--R 
+--R
+--R   (3)  1985
+--R                                                        Type: PositiveInteger
+--E 3
+
+--S 4 of 20
 ey."Fitch"    := 1984
+--R 
+--R
+--R   (4)  1984
+--R                                                        Type: PositiveInteger
+--E 4
+
+--S 5 of 20
 ey."Char"
+--R 
+--R 
+--RDaly Bug
+--R   >> Error detected within library code:
+--R   File is not readable
+--R   "editor.year"
+--R
+--R   Continuing to read the file...
+--R
+--E 5
+
+--S 6 of 20
 ey("Char")
+--R 
+--R 
+--RDaly Bug
+--R   >> Error detected within library code:
+--R   File is not readable
+--R   "editor.year"
+--R
+--R   Continuing to read the file...
+--R
+--E 6
+
+--S 7 of 20
 ey "Char"
+--R 
+--R 
+--RDaly Bug
+--R   >> Error detected within library code:
+--R   File is not readable
+--R   "editor.year"
+--R
+--R   Continuing to read the file...
+--R
+--E 7
+
+--S 8 of 20
 search("Char", ey)
+--R 
+--R 
+--RDaly Bug
+--R   >> System error:
+--R   Cannot create the file NIL/index.kaf.
+--R
+--R   Continuing to read the file...
+--R
+--E 8
+
+--S 9 of 20
 search("Smith", ey)
+--R 
+--R 
+--RDaly Bug
+--R   >> System error:
+--R   Cannot create the file NIL/index.kaf.
+--R
+--R   Continuing to read the file...
+--R
+--E 9
+
+--S 10 of 20
 remove!("Char", ey)
+--R 
+--R 
+--RDaly Bug
+--R   >> System error:
+--R   Cannot create the file NIL/index.kaf.
+--R
+--R   Continuing to read the file...
+--R
+--E 10
+
+--S 11 of 20
 keys ey
+--R 
+--R 
+--RDaly Bug
+--R   >> System error:
+--R   Cannot create the file NIL/index.kaf.
+--R
+--R   Continuing to read the file...
+--R
+--E 11
+
+--S 12 of 20
 #ey
+--R 
+--R 
+--RDaly Bug
+--R   >> System error:
+--R   Cannot create the file NIL/index.kaf.
+--R
+--R   Continuing to read the file...
+--R
+--E 12
+
+--S 13 of 20
 KE := Record(key: String, entry: Integer)
+--R 
+--R
+--R   (5)  Record(key: String,entry: Integer)
+--R                                                                 Type: Domain
+--E 13
+
+--S 14 of 20
 reopen!(ey, "output")
+--R 
+--R
+--R   (6)  "editor.year"
+--R                                                Type: KeyedAccessFile Integer
+--E 14
+
+--S 15 of 20
 write!(ey, ["van Hulzen", 1983]$KE)
+--R 
+--R
+--R   (7)  [key= "van Hulzen",entry= 1983]
+--R                                     Type: Record(key: String,entry: Integer)
+--E 15
+
+--S 16 of 20
 write!(ey, ["Calmet", 1982]$KE)
+--R 
+--R
+--R   (8)  [key= "Calmet",entry= 1982]
+--R                                     Type: Record(key: String,entry: Integer)
+--E 16
+
+--S 17 of 20
 write!(ey, ["Wang", 1981]$KE)
+--R 
+--R
+--R   (9)  [key= "Wang",entry= 1981]
+--R                                     Type: Record(key: String,entry: Integer)
+--E 17
+
+--S 18 of 20
 close! ey
+--R 
+--R
+--R   (10)  "editor.year"
+--R                                                Type: KeyedAccessFile Integer
+--E 18
+
+--S 19 of 20
 keys ey
+--R 
+--R 
+--RDaly Bug
+--R   >> System error:
+--R   Cannot create the file NIL/index.kaf.
+--R
+--R   Continuing to read the file...
+--R
+--E 19
+
+--S 20 of 20
 members ey
+--R 
+--R 
+--RDaly Bug
+--R   >> System error:
+--R   Cannot create the file NIL/index.kaf.
+--R
+--R   Continuing to read the file...
+--R
+--E 20
+
 )system rm -r editor.year
 )spool
 )lisp (bye)
diff --git a/books/bookvol10.4.pamphlet b/books/bookvol10.4.pamphlet
index fb1fa99..9884d3b 100644
--- a/books/bookvol10.4.pamphlet
+++ b/books/bookvol10.4.pamphlet
@@ -5122,14 +5122,14 @@ BasicOperatorFunctions1(A:SetCategory): Exports == Implementation where
 )set message test on
 )set message auto off
 )clear all
---S 1
+--S 1 of 6
 n:=linearBezier([2.0,2.0],[4.0,4.0])
 --R
 --I   (1)  theMap(BEZIER;linearBezier;2LM;1!0,707)
 --R                                                  Type: (Float -> List Float)
 --E 1
 
---S 2
+--S 2 of 6
 [n(t/10.0) for t in 0..10 by 1]
 --R
 --R   (2)
@@ -5138,14 +5138,14 @@ n:=linearBezier([2.0,2.0],[4.0,4.0])
 --R                                                        Type: List List Float
 --E 2
 
---S 3
+--S 3 of 6
 n:=quadraticBezier([2.0,2.0],[4.0,4.0],[6.0,2.0])
 --R
 --I   (3)  theMap(BEZIER;quadraticBezier;3LM;2!0,291)
 --R                                                  Type: (Float -> List Float)
 --E 3
 
---S 4
+--S 4 of 6
 [n(t/10.0) for t in 0..10 by 1]
 --R
 --R   (4)
@@ -5154,14 +5154,14 @@ n:=quadraticBezier([2.0,2.0],[4.0,4.0],[6.0,2.0])
 --R                                                        Type: List List Float
 --E 4
 
---S 5
+--S 5 of 6
 n:=cubicBezier([2.0,2.0],[2.0,4.0],[6.0,4.0],[6.0,2.0])
 --R
 --I   (5)  theMap(BEZIER;cubicBezier;4LM;3!0,915)
 --R                                                  Type: (Float -> List Float)
 --E 5
 
---S 6
+--S 6 of 6
 [n(t/10.0) for t in 0..10 by 1]
 --R
 --R   (6)
@@ -44096,117 +44096,188 @@ IntegerLinearDependence(R): Exports == Implementation where
 )set message test on
 )set message auto off
 )clear all
+
+--S 1 of 30
 div144 := divisors(144)
 --R 
 --R
 --R   (1)  [1,2,3,4,6,8,9,12,16,18,24,36,48,72,144]
 --R                                                           Type: List Integer
+--E 1
+
+--S 2 of 30
 #(div144)
 --R 
 --R
 --R   (2)  15
 --R                                                        Type: PositiveInteger
+--E 2
+
+--S 3 of 30
 reduce(+,div144)
 --R 
 --R
 --R   (3)  403
 --R                                                        Type: PositiveInteger
+--E 3
+
+--S 4 of 30
 numberOfDivisors(144)
 --R 
 --R
 --R   (4)  15
 --R                                                        Type: PositiveInteger
+--E 4
+
+--S 5 of 30
 sumOfDivisors(144)
 --R 
 --R
 --R   (5)  403
 --R                                                        Type: PositiveInteger
+--E 5
+
+--S 6 of 30
 f1(n)==reduce(+,[moebiusMu(d)*numberOfDivisors(quo(n,d))_
      for d in divisors(n)])
 --R 
 --R                                                                   Type: Void
+--E 6
+
+--S 7 of 30
 f1(200)
 --R 
 --R   Compiling function f1 with type PositiveInteger -> Integer 
 --R
 --R   (7)  1
 --R                                                        Type: PositiveInteger
+--E 7
+
+--S 8 of 30
 f1(846)
 --R 
 --R
 --R   (8)  1
 --R                                                        Type: PositiveInteger
+--E 8
+
+--S 9 of 30
 f2(n) == reduce(+,[moebiusMu(d) * sumOfDivisors(quo(n,d))_
      for d in divisors(n)]) 
 --R 
 --R                                                                   Type: Void
+--E 9
+
+--S 10 of 30
 f2(200)
 --R 
 --R   Compiling function f2 with type PositiveInteger -> Integer 
 --R
 --R   (10)  200
 --R                                                        Type: PositiveInteger
+--E 10
+
+--S 11 of 30
 f2(846)
 --R 
 --R
 --R   (11)  846
 --R                                                        Type: PositiveInteger
+--E 11
+
+--S 12 of 30
 fibonacci(25)
 --R 
 --R
 --R   (12)  75025
 --R                                                        Type: PositiveInteger
+--E 12
+
+--S 13 of 30
 [fibonacci(n) for n in 1..15]
 --R 
 --R
 --R   (13)  [1,1,2,3,5,8,13,21,34,55,89,144,233,377,610]
 --R                                                           Type: List Integer
+--E 13
+
+--S 14 of 30
 fib(n) == reduce(+,[binomial(n-1-k,k) for k in 0..quo(n-1,2)])
 --R 
 --R                                                                   Type: Void
+--E 14
+
+--S 15 of 30
 fib(25)
 --R 
 --R   Compiling function fib with type PositiveInteger -> Integer 
 --R
 --R   (15)  75025
 --R                                                        Type: PositiveInteger
+--E 15
+
+--S 16 of 30
 [fib(n) for n in 1..15]
 --R 
 --R
 --R   (16)  [1,1,2,3,5,8,13,21,34,55,89,144,233,377,610]
 --R                                                           Type: List Integer
+--E 16
+
+--S 17 of 30
 legendre(3,5)
 --R 
 --R
 --R   (17)  - 1
 --R                                                                Type: Integer
+--E 17
+
+--S 18 of 30
 legendre(23,691)
 --R 
 --R
 --R   (18)  - 1
 --R                                                                Type: Integer
+--E 18
+
+--S 19 of 30
 h(d) == quo(reduce(+,[jacobi(d,k) for k in 1..quo(-d, 2)]),2-jacobi(d,2))
 --R 
 --R                                                                   Type: Void
+--E 19
+
+--S 20 of 30
 h(-163)
 --R 
 --R   Compiling function h with type Integer -> Integer 
 --R
 --R   (20)  1
 --R                                                        Type: PositiveInteger
+--E 20
+
+--S 21 of 30
 h(-499)
 --R 
 --R
 --R   (21)  3
 --R                                                        Type: PositiveInteger
+--E 21
+
+--S 22 of 30
 h(-1832)
 --R 
 --R
 --R   (22)  26
 --R                                                        Type: PositiveInteger
+--E 22
+
+--S 23 of 30
 inverse:(INT,INT)->INT
 --R 
 --R                                                                   Type: Void
+--E 23
+
+--S 24 of 30
 inverse(a,b) ==
   borg:INT:=b
   c1:INT := 1
@@ -44221,6 +44292,9 @@ inverse(a,b) ==
   positiveRemainder(c1,borg)
 --R 
 --R                                                                   Type: Void
+--E 24
+
+--S 25 of 30
 inverse(15,26)
 --R 
 --R   Compiling function inverse with type (Integer,Integer) -> Integer 
@@ -44233,31 +44307,48 @@ inverse(15,26)
 --R
 --R   (25)  7
 --R                                                        Type: PositiveInteger
+--E 25
+
+--S 26 of 30
 x1:=4
 --R 
 --R
 --R   (26)  4
 --R                                                        Type: PositiveInteger
+--E 26
+
+--S 27 of 30
 m1:=5
 --R 
 --R
 --R   (27)  5
 --R                                                        Type: PositiveInteger
+--E 27
+
+--S 28 of 30
 x2:=2
 --R 
 --R
 --R   (28)  2
 --R                                                        Type: PositiveInteger
+--E 28
+
+--S 29 of 30
 m2:=3
 --R 
 --R
 --R   (29)  3
 --R                                                        Type: PositiveInteger
+--E 29
+
+--S 30 of 30
 result:=chineseRemainder(x1,m1,x2,m2)
 --R 
 --R
 --R   (30)  14
 --R                                                        Type: PositiveInteger
+--E 30
+
 )spool
 )lisp (bye)
 @
diff --git a/books/bookvol5.pamphlet b/books/bookvol5.pamphlet
index 187e50b..ed8f089 100644
--- a/books/bookvol5.pamphlet
+++ b/books/bookvol5.pamphlet
@@ -1105,7 +1105,7 @@ They appear to only be used to initialize the boot dollar variables.
 <<defun serverReadLine>>=
 (defun |serverReadLine| (stream)
  "used in place of READ-LINE in a Axiom server system."
- (let (in-stream *eof* l framename currentframe form stringbuf line)
+ (let (in-stream *eof* l framename currentframe form stringbuf line action)
  (declare (special in-stream *eof* |$SpadServer| |$EndServerSession|
      |$NeedToSignalSessionManager| |$SessionManager| |$EndOfOutput|
      |$CallInterp| |$CreateFrame| |$frameAlist| |$frameNumber|
@@ -1228,7 +1228,7 @@ They appear to only be used to initialize the boot dollar variables.
 
 \defmacro{Rest}
 <<defmacro Rest>>=
-(defmacro |Rest| (s)
+(defmacro |Rest| ()
  "used in incLude1 for parsing; s is not used."
  '(|incLude| eb (cdr ss) lno ufos states))
 
@@ -1363,40 +1363,40 @@ They appear to only be used to initialize the boot dollar variables.
       ((null (elt info 0))
        (cond
         ((|Skipping?| state)
-         (cons (|xlSkip| eb str lno (elt ufos 0)) (|Rest| |s|)))
+         (cons (|xlSkip| eb str lno (elt ufos 0)) (|Rest|)))
         (t
-         (cons (|xlOK| eb str lno (elt ufos 0)) (|Rest| |s|)))))
+         (cons (|xlOK| eb str lno (elt ufos 0)) (|Rest|)))))
       ((equal (elt info 2) "other")
        (cond
         ((|Skipping?| state)
-         (cons (|xlSkip| eb str lno (elt ufos 0)) (|Rest| |s|)))
+         (cons (|xlSkip| eb str lno (elt ufos 0)) (|Rest|)))
         (t
          (cons
           (|xlOK1| eb str (concat ")command" str) lno (elt ufos 0))
-          (|Rest| |s|)))))
+          (|Rest|)))))
       ((equal (elt info 2) "say")
        (cond
         ((|Skipping?| state)
-         (cons (|xlSkip| eb str lno (elt ufos 0)) (|Rest| |s|)))
+         (cons (|xlSkip| eb str lno (elt ufos 0)) (|Rest|)))
         (t
          (progn
           (setq str (|incCommandTail| str info))
           (cons (|xlSay| eb str lno ufos str)
-           (cons (|xlOK| eb str lno (ELT ufos 0)) (|Rest| |s|)))))))
+           (cons (|xlOK| eb str lno (ELT ufos 0)) (|Rest|)))))))
       ((equal (elt info 2) "include")
        (cond
         ((|Skipping?| state)
-         (cons (|xlSkip| eb str lno (elt ufos 0)) (|Rest| |s|)))
+         (cons (|xlSkip| eb str lno (elt ufos 0)) (|Rest|)))
         (t
          (progn
           (setq fn1 (|inclFname| str info))
           (cond
            ((null fn1)
-            (cons (|xlNoSuchFile| eb str lno ufos |fn|) (|Rest| |s|)))
+            (cons (|xlNoSuchFile| eb str lno ufos fn1) (|Rest|)))
            ((null (probe-file fn1))
-            (cons (|xlCannotRead| eb str lno ufos fn1) (|Rest| |s|)))
+            (cons (|xlCannotRead| eb str lno ufos fn1) (|Rest|)))
            ((|incActive?| fn1 ufos)
-            (cons (|xlFileCycle| eb str lno ufos fn1) (|Rest| |s|)))
+            (cons (|xlFileCycle| eb str lno ufos fn1) (|Rest|)))
            (t
             (progn
              (setq includee
@@ -1406,11 +1406,11 @@ They appear to only be used to initialize the boot dollar variables.
                          (cons fn1 ufos)
                          (cons |Top| states)))
              (cons (|xlOK| eb str lno (elt ufos 0))
-                   (|incAppend| includee (|Rest| |s|))))))))))
+                   (|incAppend| includee (|Rest|))))))))))
       ((equal (elt info 2) "console")
        (cond
         ((|Skipping?| state)
-         (cons (|xlSkip| eb str lno (elt ufos 0)) (|Rest| |s|)))
+         (cons (|xlSkip| eb str lno (elt ufos 0)) (|Rest|)))
         (t
          (progn
           (setq head
@@ -1419,7 +1419,7 @@ They appear to only be used to initialize the boot dollar variables.
                       0
                       (cons "console" ufos)
                       (cons |Top| states)))
-          (setq tail (|Rest| |s|))
+          (setq tail (|Rest|))
           (setq n (|incNConsoles| ufos))
           (cond
            ((< 0 n)
@@ -1433,7 +1433,7 @@ They appear to only be used to initialize the boot dollar variables.
       ((equal (elt info 2) "fin")
        (cond
         ((|Skipping?| state)
-         (cons (|xlSkippingFin| eb str lno ufos) (|Rest| |s|)))
+         (cons (|xlSkippingFin| eb str lno ufos) (|Rest|)))
         ((null (|Top?| state))
          (cons (|xlPrematureFin| eb str lno ufos) |StreamNil|))
         (t
@@ -1441,12 +1441,12 @@ They appear to only be used to initialize the boot dollar variables.
       ((equal (elt info 2) "assert")
        (cond
         ((|Skipping?| state)
-         (cons (|xlSkippingFin| eb str lno ufos) (|Rest| |s|)))
+         (cons (|xlSkippingFin| eb str lno ufos) (|Rest|)))
         (t
          (progn
           (|assertCond| str info)
           (cons (|xlOK| eb str lno (elt ufos 0))
-                (|incAppend| includee (|Rest| |s|)))))))
+                (|incAppend| includee (|Rest|)))))))
       ((equal (elt info 2) "if")
        (progn
         (setq s1
diff --git a/src/axiom-website/patches.html b/src/axiom-website/patches.html
index 322172d..4b6e6b4 100644
--- a/src/axiom-website/patches.html
+++ b/src/axiom-website/patches.html
@@ -1088,5 +1088,7 @@ Makefile report regression failures<br/>
 bookvol10.4 add Bezier package<br/>
 <a href="patches/20090415.01.tpd.patch">20090415.01.tpd.patch</a>
 bookvol5 add \defunsec, section titles, docstrings<br/>
+<a href="patches/20090416.01.tpd.patch">20090416.01.tpd.patch</a>
+regress.lisp tighten checks on regression tests<br/>
  </body>
 </html>
diff --git a/src/input/contfrac.input.pamphlet b/src/input/contfrac.input.pamphlet
index 0044f79..c982a22 100644
--- a/src/input/contfrac.input.pamphlet
+++ b/src/input/contfrac.input.pamphlet
@@ -233,7 +233,7 @@ a / b
 --R                                      Type: ContinuedFraction Complex Integer
 --E 20
 
---E 21
+--S 21 of 40
 convergents %
 --R 
 --R
diff --git a/src/input/overload.input.pamphlet b/src/input/overload.input.pamphlet
index d5c7ada..fbe3eeb 100644
--- a/src/input/overload.input.pamphlet
+++ b/src/input/overload.input.pamphlet
@@ -31,7 +31,7 @@ understandable, some not(?), below.
 The cos function will produce float outcomes for float arguments
 <<*>>=
 
---S 1 of 28
+--S 1 of 51
 cos(1.237)
 --R 
 --R
@@ -43,7 +43,7 @@ cos(1.237)
 can handle expressions that mix floats and integers
 <<*>>=
 
---S 2 of 28
+--S 2 of 51
 cos(1.237/2)
 --R 
 --R
@@ -56,7 +56,7 @@ but will respect an integer expression, as we would want it to,
 by not evaluating
 <<*>>=
 
---S 3 of 28
+--S 3 of 51
 cos(2/3)
 --R 
 --R
@@ -76,7 +76,7 @@ constand in each expression which results in a proper implicit selection
 of which ``/'' definitition to use.
 <<*>>=
 
---S 4 of 28
+--S 4 of 51
 cos(2/3::Float)
 --R 
 --R
@@ -84,7 +84,7 @@ cos(2/3::Float)
 --R                                                                  Type: Float
 --E 4
 
---S 5 of 28
+--S 5 of 51
 cos((2/3)::Float)
 --R 
 --R
@@ -92,7 +92,7 @@ cos((2/3)::Float)
 --R                                                                  Type: Float
 --E 5
 
---S 6 of 28
+--S 6 of 51
 cos(2/3$Float)
 --R 
 --R
@@ -100,7 +100,7 @@ cos(2/3$Float)
 --R                                                                  Type: Float
 --E 6
 
---S 7 of 28
+--S 7 of 51
 cos((2/3)$Float)
 --R 
 --R
@@ -108,7 +108,7 @@ cos((2/3)$Float)
 --R                                                                  Type: Float
 --E 7
 
---S 8 of 28
+--S 8 of 51
 cos(2/3@Float)
 --R 
 --R
@@ -116,7 +116,7 @@ cos(2/3@Float)
 --R                                                                  Type: Float
 --E 8
 
---S 9 of 28
+--S 9 of 51
 cos((2/3)@Float)
 --R 
 --R
@@ -130,7 +130,7 @@ fact. Coercion operates ``on the surface and not deeply'' as illustrated
 here.
 <<*>>=
 
---S 10 of 28
+--S 10 of 51
 cos(2/3)::Float
 --R 
 --R 
@@ -147,7 +147,7 @@ However, there is a real need for a deep coercion operator that operates
 on the innermost atomic constants. Suppose we define
 <<*>>=
 
---S 11 of 28
+--S 11 of 51
 cosf(x:Expression Integer):Expression Integer == 1+cos(x/2)
 --R 
 --R   Function declaration cosf : Expression Integer -> Expression Integer
@@ -169,7 +169,7 @@ general way because it is a tangled web we weave when we practice to
 decieve.
 <<*>>=
 
---S 12 of 28
+--S 12 of 51
 cosf(2/3)
 --R 
 --R   Compiling function cosf with type Expression Integer -> Expression 
@@ -181,7 +181,7 @@ cosf(2/3)
 --R                                                     Type: Expression Integer
 --E 12
 
---S 13 of 28
+--S 13 of 51
 cosf((2/3)::Float)
 --R 
 --R   Conversion failed in the compiled user function cosf .
@@ -205,7 +205,7 @@ Bizarrely, the draw function seems to have the power to override the
 type problem as shown here
 <<*>>=
 
---S 14 of 28
+--S 14 of 51
 --draw(cosf(x),x=0..15)
 --E 14
 
@@ -223,7 +223,7 @@ example, in Maple ``cos(2/3)+1.2323'' remains as is, while in Axiom
 we get
 <<*>>=
 
---S 15 of 28
+--S 15 of 51
 cos(2/3)+1.2323
 --R 
 --R
@@ -238,7 +238,7 @@ force combination of itself with an Integer. It simply results in a new
 kind of Integer evaluation of type Pi
 <<*>>=
 
---S 16 of 28
+--S 16 of 51
 3/4+%pi
 --R 
 --R
@@ -255,7 +255,7 @@ Now let's examine properties and problems with overloading.
 Define the type $Q$ of Hamiltonian biquaternions
 <<*>>=
 
---S 17 of 28
+--S 17 of 51
 C:=Complex Expression Integer
 --R 
 --R
@@ -263,7 +263,7 @@ C:=Complex Expression Integer
 --R                                                                 Type: Domain
 --E 17
 
---S 18 of 28
+--S 18 of 51
 Q:=Quaternion C
 --R 
 --R
@@ -276,7 +276,7 @@ While developing the support functions, this definition of biquat
 division was introduced to simplify the format of the formulae
 <<*>>=
 
---S 19 of 28
+--S 19 of 51
 ((x:Q)/(y:Q)):Q == x*inv(y)
 --R 
 --R   Function declaration ?/? : (Quaternion Complex Expression Integer,
@@ -291,7 +291,7 @@ On the face, it would appear all is normal, here's an example of
 integer division
 <<*>>=
 
---S 20 of 28
+--S 20 of 51
 x:=15/6
 --R 
 --R   Compiling function / with type (Quaternion Complex Expression 
@@ -310,7 +310,7 @@ notice this, and proceed, some things seem still to act normally,
 for example, no complaint from Axiom with
 <<*>>=
 
---S 21 of 28
+--S 21 of 51
 cos(x)
 --R 
 --R
@@ -324,7 +324,7 @@ cos(x)
 Of course, we still get a correct answer with
 <<*>>=
 
---S 22 of 28
+--S 22 of 51
 cos(1.237)
 --R 
 --R
@@ -336,7 +336,7 @@ cos(1.237)
 But let's try to apply this as a simple mixed float/integer function
 <<*>>=
 
---S 23 of 28
+--S 23 of 51
 cos(15.457/6)
 --R 
 --R   Conversion failed in the compiled user function / .
@@ -355,7 +355,7 @@ Well, what if we built a new cosine function that forced the form of
 the arguments into certain types to avoid mismatch?
 <<*>>=
 
---S 24 of 28
+--S 24 of 51
 c(y:Float):Float == cos(y)
 --R 
 --R   Function declaration c : Float -> Float has been added to workspace.
@@ -366,7 +366,7 @@ c(y:Float):Float == cos(y)
 At first this seems to work, we can still evaluate a float
 <<*>>=
 
---S 25 of 28
+--S 25 of 51
 c(1.237)
 --R 
 --R   Compiling function c with type Float -> Float 
@@ -380,7 +380,7 @@ and we can even get a float answer when we introduce the integer coercible
 biquat variable value generated from the above.
 <<*>>=
 
---S 26 of 28
+--S 26 of 51
 c(x)
 --R 
 --R
@@ -394,7 +394,7 @@ expressions because of the ``/'' operation still not being resolved
 correctly.
 <<*>>=
 
---S 27 of 28
+--S 27 of 51
 c(1.237/2)
 --R 
 --R   Conversion failed in the compiled user function / .
@@ -414,7 +414,7 @@ Our results are mixed. Recall that each of the following worked in the
 previous case, producing the correct floating result in each case.
 <<*>>=
 
---S 28 of 28
+--S 28 of 51
 cos(2/3::Float)
 --R 
 --R
@@ -424,7 +424,7 @@ cos(2/3::Float)
 --R                                                     Type: Expression Integer
 --E 28
 
---S 29 of 28
+--S 29 of 51
 cos((2/3)::Float)
 --R 
 --R
@@ -432,7 +432,7 @@ cos((2/3)::Float)
 --R                                                                  Type: Float
 --E 29
 
---S 30 of 28
+--S 30 of 51
 cos(2/3$Float)
 --R 
 --R
@@ -442,7 +442,7 @@ cos(2/3$Float)
 --R                                                     Type: Expression Integer
 --E 30
 
---S 31 of 28
+--S 31 of 51
 cos((2/3)$Float)
 --R 
 --R
@@ -450,7 +450,7 @@ cos((2/3)$Float)
 --R                                                                  Type: Float
 --E 31
 
---S 32 of 28
+--S 32 of 51
 cos(2/3@Float)
 --R 
 --R
@@ -460,7 +460,7 @@ cos(2/3@Float)
 --R                                                     Type: Expression Integer
 --E 32
 
---S 33 of 28
+--S 33 of 51
 cos((2/3)@Float)
 --R 
 --R 
@@ -475,7 +475,7 @@ Try these examples with our type constrained function, which has better
 luck now
 <<*>>=
 
---S 34 of 28
+--S 34 of 51
 c(2/3::Float)
 --R 
 --R
@@ -483,7 +483,7 @@ c(2/3::Float)
 --R                                                                  Type: Float
 --E 34
 
---S 35 of 28
+--S 35 of 51
 c((2/3)::Float)
 --R 
 --R
@@ -491,7 +491,7 @@ c((2/3)::Float)
 --R                                                                  Type: Float
 --E 35
 
---S 36 of 28
+--S 36 of 51
 c(2/3$Float)
 --R 
 --R
@@ -499,7 +499,7 @@ c(2/3$Float)
 --R                                                                  Type: Float
 --E 36
 
---S 37 of 28
+--S 37 of 51
 c((2/3)$Float)
 --R 
 --R
@@ -507,7 +507,7 @@ c((2/3)$Float)
 --R                                                                  Type: Float
 --E 37
 
---S 38 of 28
+--S 38 of 51
 c(2/3@Float)
 --R 
 --R
@@ -515,7 +515,7 @@ c(2/3@Float)
 --R                                                                  Type: Float
 --E 38
 
---S 39 of 28
+--S 39 of 51
 c((2/3)@Float)
 --R 
 --R 
@@ -531,13 +531,13 @@ to the function we defined? Let's repeat the entire example with
 this single change for the function c2
 <<*>>=
 
---S 40 of 28
+--S 40 of 51
 c2(y) == cos(y)
 --R 
 --R                                                                   Type: Void
 --E 40
 
---S 41 of 28
+--S 41 of 51
 c2(1.237)
 --R 
 --R   Compiling function c2 with type Float -> Float 
@@ -546,7 +546,7 @@ c2(1.237)
 --R                                                                  Type: Float
 --E 41
 
---S 42 of 28
+--S 42 of 51
 c2(x)
 --R 
 --R   There are 2 exposed and 6 unexposed library operations named cos 
@@ -575,7 +575,7 @@ But that was only misdirection, because this breaks down for
 reasonable expressions
 <<*>>=
 
---S 43 of 28
+--S 43 of 51
 c2(1.237/2)
 --R 
 --R   Conversion failed in the compiled user function / .
@@ -592,7 +592,7 @@ and various attempts at coercion also fail -- compare these results
 to the previous ones
 <<*>>=
 
---S 44 of 28
+--S 44 of 51
 c2(2/3::Float)
 --R 
 --R
@@ -602,7 +602,7 @@ c2(2/3::Float)
 --R                                                     Type: Expression Integer
 --E 44
 
---S 45 of 28
+--S 45 of 51
 c2((2/3)::Float)
 --R 
 --R
@@ -610,7 +610,7 @@ c2((2/3)::Float)
 --R                                                                  Type: Float
 --E 45
 
---S 46 of 28
+--S 46 of 51
 c2(2/3$Float)
 --R 
 --R
@@ -620,7 +620,7 @@ c2(2/3$Float)
 --R                                                     Type: Expression Integer
 --E 46
 
---S 47 of 28
+--S 47 of 51
 c2((2/3)$Float)
 --R 
 --R
@@ -628,7 +628,7 @@ c2((2/3)$Float)
 --R                                                                  Type: Float
 --E 47
 
---S 48 of 28
+--S 48 of 51
 c2(2/3@Float)
 --R 
 --R
@@ -638,7 +638,7 @@ c2(2/3@Float)
 --R                                                     Type: Expression Integer
 --E 48
 
---S 49 of 28
+--S 49 of 51
 c2((2/3)@Float)
 --R 
 --R 
@@ -655,7 +655,7 @@ internal types we saw take place with draw in the example prior to the
 introduction of operator overloading.
 <<*>>=
 
---S 50 of 28
+--S 50 of 51
 --draw(c(x),x=0..15)
 --E 50
 
@@ -666,7 +666,7 @@ that we just saw it above still working with Integer and Float arguments
 applied directly.
 <<*>>=
 
---S 51 of 28
+--S 51 of 51
 --draw(cos(x),x=0..15)
 --E 51
 
diff --git a/src/interp/regress.lisp.pamphlet b/src/interp/regress.lisp.pamphlet
index f199edc..048fe3e 100644
--- a/src/interp/regress.lisp.pamphlet
+++ b/src/interp/regress.lisp.pamphlet
@@ -62,8 +62,12 @@ failures are marked.
 <<*>>=
 (in-package "BOOT")
 
+(defvar *all-tests-ran* nil "true implies that all tests ran")
+
 (defun regress (infile)
  (let (name comment test (count 0) (passed 0) (failed 0))
+ (declare (special *all-tests-ran*))
+  (setq *all-tests-ran* nil)
   (with-open-file (stream infile :direction :input)
    (setq name (getspoolname stream)) 
    (when name
@@ -83,7 +87,9 @@ failures are marked.
     (format t "regression result passed ~a of ~a stanzas ~Tfile ~a~%"
      passed count name)
     (format t "regression result FAILED ~a of ~a stanzas ~Tfile ~a~%"
-     failed count name))))))
+     failed count name))
+   (unless *all-tests-ran*
+    (format t "regression result FAILED early exit in file ~a?~%" name))))))
 
 @
 \subsection{defun getspoolname}
@@ -217,10 +223,20 @@ This is useful for handling random results or gensym symbols.
 @
 \subsection{defun startp}
 This test returns true if we have a ``start'' line. That is, a line
-with a ``--S'' prefix.
+with a ``--S'' prefix. 
+
+The *all-tests-ran* variable is true if the start line is of the form
+"--S N of M" and N=M, that is, it checks that all tests were performed
+since this should only occur on the last start line. This will detect
+``premature exit'' in processing.
 <<*>>=
 (defun startp (oneline)
- (and (>= (length oneline) 3) (string= (subseq oneline 0 3) "--S")))
+ (let (result)
+  (when
+   (setq result
+    (and (>= (length oneline) 3) (string= (subseq oneline 0 3) "--S")))
+   (setq *all-tests-ran* (lastcount oneline)))
+  result))
 
 @
 \subsection{defun endedp}
@@ -247,6 +263,39 @@ with a ``--I'' prefix.
  (and (>= (length oneline) 3) (string= (subseq oneline 0 3) "--I")))
 
 @
+\subsection{defun lastcount}
+If the ``--S'' line has the format ``--S n of m'' we return true if 
+n=m, false otherwise.
+Thus,
+\begin{verbatim}
+ "--S"              => nil
+ "--S 1 of 4"       => nil
+ "--S 10 of 40"     => nil
+ "--S 4 of 4"       => t
+ "--S 40 of 40"     => t
+ "--S 1 of a"       => nil
+\end{verbatim}
+This is used as a final end check to make sure that all of the
+tests actually ran rather than having the regression test exit
+early and quietly. This will be false on all but the last test
+and will be false if the ``--S'' line does not contain the optional
+count marker. It is not required but is highly recommended.
+<<*>>=
+(defun lastcount (oneline)
+ (let ((n :done) (m :done) next somemore)
+ (when (and (>= (length oneline) 3) (string= (subseq oneline 0 3) "--S"))
+  (setq somemore (string-trim " " (subseq oneline 3)))
+  (when somemore
+   (multiple-value-setq (n next) (read-from-string somemore nil :done))
+   (when (integerp n)
+    (setq somemore (string-trim " " (subseq somemore next)))
+    (multiple-value-setq (isof next) (read-from-string somemore nil :done))
+    (when (string= isof "OF")
+     (setq somemore (string-trim " " (subseq somemore next)))
+     (multiple-value-setq (m next) (read-from-string somemore nil :done))))))
+  (and (integerp m) (integerp n) (= m n))))
+
+@
 \eject
 \begin{thebibliography}{99}
 \bibitem{1} nothing

\start
Date: Thu, 16 Apr 2009 19:27:06 -0500
From: Tim Daly
To: list
Subject: 20090416.02.tpd.patch (bookvol5 collect more interpreter code)

Some global variables and a few routines have been collected, documented,
and added to bookvol5
=======================================================================
diff --git a/books/bookvol5.pamphlet b/books/bookvol5.pamphlet
index ed8f089..ec72c99 100644
--- a/books/bookvol5.pamphlet
+++ b/books/bookvol5.pamphlet
@@ -496,6 +496,11 @@ information is initialized.
   '|EndOfSpad|))
 
 @
+\defdollar{quitTag}
+<<initvars>>=
+(defvar |$quitTag| system::*quit-tag*)
+
+@
 \defun{runspad}{runspad}
 <<defun runspad>>=
 (defun |runspad| () 
@@ -516,12 +521,58 @@ information is initialized.
            (setq mode (catch '|top_level| (|ncTopLevel|))))))))))))))
 
 @
+\defun{resetStackLimits}{Reset the stack limits}
+<<defun resetStackLimits>>=
+(defun |resetStackLimits| () 
+ "Reset the stack limits"
+ (system:reset-stack-limits))
+
+@
 \chapter{Handling Input}
-\defun{ncTopLevel}{ncTopLevel}
+\section{Streams}
+\defvar{curinstream}
+The curinstream variable is set to the value of the 
+\verb|*standard-input*| common lisp
+variable in ncIntLoop. While not using the
+``dollar'' convention this variable is still ``global''.
+<<initvars>>=
+(defvar curinstream (make-synonym-stream '*standard-input*))
+
+@
+\defvar{curoutstream}
+The curoutstream variable is set to the value of the 
+\verb|*standard-output*| common lisp variable in ncIntLoop.
+While not using the ``dollar'' convention this variable is still ``global''.
+<<initvars>>=
+(defvar curoutstream (make-synonym-stream '*standard-output*))
+
+@
+\defvar{errorinstream}
+<<initvars>>=
+(defvar errorinstream (make-synonym-stream '*terminal-io*))
+
+@
+\defvar{erroroutstream}
+<<initvars>>=
+(defvar erroroutstream (make-synonym-stream '*terminal-io*))
+
+@
+\defvar{*eof*}
+<<initvars>>=
+(defvar *eof* nil)
+
+@
+\defdollar{InteractiveMode}
+<<initvars>>=
+(defvar |$InteractiveMode| t)
+
+@
+\defunsec{ncTopLevel}{Top-level read-parse-eval-print loop}
 Top-level read-parse-eval-print loop for the interpreter.  Uses
 the Bill Burge's parser.
 <<defun ncTopLevel>>=
 (defun |ncTopLevel| ()
+ "Top-level read-parse-eval-print loop"
  (let (|$e| $spad $newspad $boot |$InteractiveMode| *eof* in-stream) 
   (declare (special |$e| $spad $newspad $boot |$InteractiveMode| *eof*
              in-stream |$InteractiveFrame|)) 
@@ -17200,7 +17251,6 @@ $directory-list
 |$inclAssertions|
 |$InitialModemapFrame|)) 
 in-stream
-|$InteractiveMode|
 |$InteractiveFrame| 
 |$internalHistoryTable|
 |$interpreterFrameName|
@@ -17724,6 +17774,7 @@ stringimage
 <<defun resetCounters>>
 <<defun resetInCoreHist>>
 <<defun resetSpacers>>
+<<defun resetStackLimits>>
 <<defun resetTimers>>
 <<defun resetWorkspaceVariables>>
 <<defun restart>>
@@ -17941,7 +17992,6 @@ curoutstream                 & ncIntLoop           & \\
                              & undo                & recordFrame \\
                              & undoSteps           & undoSteps \\
                              &                     & reportUndo \\
-\$InteractiveMode            & ncTopLevel          & \\
 \$internalHistoryTable       & initvars            & \\
 \$interpreterFrameName       & initializeInterpreterFrameRing & \\
 \$interpreterFrameRing       & initializeInterpreterFrameRing & \\
@@ -18002,17 +18052,6 @@ The \verb|$boot| variable is set to NIL in ncTopLevel.
 The coerceFailure symbol is a catch tag used in runspad
 to catch an exit from ncTopLevel.
 
-\subsection{curinstream}
-The curinstream variable is set to the value of the 
-\verb|*standard-input*| common lisp
-variable in ncIntLoop. While not using the
-``dollar'' convention this variable is still ``global''.
-
-\subsection{curinstream}
-The curoutstream variable is set to the value of the 
-\verb|*standard-output*| common lisp variable in ncIntLoop.
-While not using the ``dollar'' convention this variable is still ``global''.
-
 \subsection{\$current-directory}
 This is set to the value returned by the \verb|get-current-directory| 
 function in \fnref{restart}. It is set to the argument of the 
@@ -18169,9 +18208,6 @@ The \verb|$InteractiveFrame| is set in restart to the value of the
 call to the makeInitialModemapFrame function. This function simply
 returns a copy of the variable \verb|$InitialModemapFrame|
 
-\subsection{\$InteractiveMode}
-The \verb|$InteractiveMode| is set to T in ncTopLevel.
-
 \subsection{\$intRestart}
 The \verb|$intRestart| variable is used in intloop but has no value.
 This is probably a bug. While the variable's value is unchanged the
diff --git a/changelog b/changelog
index 11f8639..a57f6df 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,16 @@
+20090416 tpd src/axiom-website/patches.html 20090416.02.tpd.patch
+20090416 tpd src/interp/vmlisp.lisp move more interpreter code
+20090416 tpd src/interp/spaderror.lisp move more interpreter code
+20090416 tpd src/interp/spad.lisp move more interpreter code
+20090416 tpd src/interp/setq.lisp move more interpreter code
+20090416 tpd books/bookvol5 collect more interpreter to code
+20090416 tpd src/axiom-website/patches.html 20090416.01.tpd.patch
+20090416 tpd src/input/overload.input fix test numbering
+20090416 tpd src/input/contfrac.input fix test numbering
+20090416 tpd books/bookvol5 fix test numbering
+20090416 tpd books/bookvol10.4 fix test numbering
+20090416 tpd books/bookvol10.3 fix test numbering
+20090416 tpd src/interp/regress.lisp tighten checks on regression tests
 20090415 tpd src/axiom-website/patches.html 20090415.01.tpd.patch
 20090415 tpd src/input/r20bugs.input fixup bezier
 20090415 tpd src/input/cmds.input fixup bezier 
diff --git a/src/axiom-website/patches.html b/src/axiom-website/patches.html
index 4b6e6b4..6f83681 100644
--- a/src/axiom-website/patches.html
+++ b/src/axiom-website/patches.html
@@ -1090,5 +1090,7 @@ bookvol10.4 add Bezier package<br/>
 bookvol5 add \defunsec, section titles, docstrings<br/>
 <a href="patches/20090416.01.tpd.patch">20090416.01.tpd.patch</a>
 regress.lisp tighten checks on regression tests<br/>
+<a href="patches/20090416.02.tpd.patch">20090416.02.tpd.patch</a>
+bookvol5 move more interpreter code<br/>
  </body>
 </html>
diff --git a/src/interp/setq.lisp.pamphlet b/src/interp/setq.lisp.pamphlet
index cb5d56f..86bf635 100644
--- a/src/interp/setq.lisp.pamphlet
+++ b/src/interp/setq.lisp.pamphlet
@@ -46,13 +46,6 @@
 <<*>>=
 <<license>>
 
-(setq copyrights '(
- "Copyright The Numerical Algorithms Group Limited 1991-94."
- "All rights reserved"
- "Certain derivative-work portions Copyright (C) 1998 by Leslie Lamport."
- "Portions (c) Copyright Taiichi Yuasa and Masami Hagiya, 1984."
- "All rights reserved"))
-
 (in-package "BOOT")
 
 (SETQ |/MAJOR-VERSION| 7)
@@ -135,7 +128,6 @@
 (SETQ INITCOLUMN 0)
 (SETQ |$functionTable| NIL)
 (SETQ |$spaddefs| NIL)
-(SETQ |$InteractiveMode| T)
 (SETQ |$xeditIsConsole|	 NIL)
 (SETQ |$echoInputLines|	 NIL)	    ;; This is in SETVART also
 (SETQ |$Slot1DataBase| (MAKE-HASHTABLE 'ID))  ;; See NRUNTIME BOOT
diff --git a/src/interp/spad.lisp.pamphlet b/src/interp/spad.lisp.pamphlet
index cfc828f..717a70a 100644
--- a/src/interp/spad.lisp.pamphlet
+++ b/src/interp/spad.lisp.pamphlet
@@ -123,7 +123,6 @@
 (defvar xtrans '|boot-new|)
 (defvar |$IOAlist| '((|%i| . (|gauss| 0 1))))
 (setq |$useBFasDefault| T)
-(defvar |InteractiveMode|)
 (defvar |New-LEXPR|)
 (defvar |NewFLAG| t)
 (defvar |uc| 'UC)
diff --git a/src/interp/spaderror.lisp.pamphlet b/src/interp/spaderror.lisp.pamphlet
index 3db7dcd..8d76741 100644
--- a/src/interp/spaderror.lisp.pamphlet
+++ b/src/interp/spaderror.lisp.pamphlet
@@ -56,15 +56,6 @@
  
 ;;(defmacro |trappedSpadEval| (form) form) ;;nop for now
 
-#+:akcl
-(setq |$quitTag| system::*quit-tag*)
-#+:akcl
-(defun |resetStackLimits| () (system:reset-stack-limits))
-#-:akcl
-(setq |$quitTag| (gensym))
-#-:akcl
-(defun |resetStackLimits| () nil)
-
 ;; failed union branch --  value returned for numeric failure
 (setq |$numericFailure| (cons 1 "failed")) 
 
diff --git a/src/interp/vmlisp.lisp.pamphlet b/src/interp/vmlisp.lisp.pamphlet
index 0b998a3..ccd83f2 100644
--- a/src/interp/vmlisp.lisp.pamphlet
+++ b/src/interp/vmlisp.lisp.pamphlet
@@ -198,17 +198,9 @@ the calculation by repeated divisions using the radix itself.
 
 ;; DEFVARS
 
-(defvar *comp370-apply* nil "function (name def) for comp370 to apply")
-
-(defvar curinstream (make-synonym-stream '*standard-input*))
-
-(defvar curoutstream (make-synonym-stream '*standard-output*))
-
 (defvar *embedded-functions* nil)
 
-(defvar errorinstream (make-synonym-stream '*terminal-io*))
-
-(defvar erroroutstream (make-synonym-stream '*terminal-io*))
+(defvar *comp370-apply* nil "function (name def) for comp370 to apply")
 
 (defvar *fileactq-apply* nil "function to apply in fileactq")
 
\start
Date: Thu, 16 Apr 2009 21:15:36 -0500
From: Tim Daly
To: list
Subject: 20090416.03.tpd.patch (bookvol10.4 update bezier documentation)

Add bezier documentation with an example and a graph

======================================================================
diff --git a/books/bookvol10.4.pamphlet b/books/bookvol10.4.pamphlet
index 9884d3b..b603e5b 100644
--- a/books/bookvol10.4.pamphlet
+++ b/books/bookvol10.4.pamphlet
@@ -5122,14 +5122,14 @@ BasicOperatorFunctions1(A:SetCategory): Exports == Implementation where
 )set message test on
 )set message auto off
 )clear all
---S 1 of 6
+--S 1 of 9
 n:=linearBezier([2.0,2.0],[4.0,4.0])
 --R
 --I   (1)  theMap(BEZIER;linearBezier;2LM;1!0,707)
 --R                                                  Type: (Float -> List Float)
 --E 1
 
---S 2 of 6
+--S 2 of 9
 [n(t/10.0) for t in 0..10 by 1]
 --R
 --R   (2)
@@ -5138,14 +5138,14 @@ n:=linearBezier([2.0,2.0],[4.0,4.0])
 --R                                                        Type: List List Float
 --E 2
 
---S 3 of 6
+--S 3 of 9
 n:=quadraticBezier([2.0,2.0],[4.0,4.0],[6.0,2.0])
 --R
 --I   (3)  theMap(BEZIER;quadraticBezier;3LM;2!0,291)
 --R                                                  Type: (Float -> List Float)
 --E 3
 
---S 4 of 6
+--S 4 of 9
 [n(t/10.0) for t in 0..10 by 1]
 --R
 --R   (4)
@@ -5154,14 +5154,14 @@ n:=quadraticBezier([2.0,2.0],[4.0,4.0],[6.0,2.0])
 --R                                                        Type: List List Float
 --E 4
 
---S 5 of 6
+--S 5 of 9
 n:=cubicBezier([2.0,2.0],[2.0,4.0],[6.0,4.0],[6.0,2.0])
 --R
 --I   (5)  theMap(BEZIER;cubicBezier;4LM;3!0,915)
 --R                                                  Type: (Float -> List Float)
 --E 5
 
---S 6 of 6
+--S 6 of 9
 [n(t/10.0) for t in 0..10 by 1]
 --R
 --R   (6)
@@ -5171,7 +5171,28 @@ n:=cubicBezier([2.0,2.0],[2.0,4.0],[6.0,4.0],[6.0,2.0])
 --R                                                        Type: List List Float
 --E 6
 
+--S 7 of 9
+line:=[[i::Float,4.0] for i in -4..4 by 1]
+--E 7
+
+--S 8 of 9
+functions:=[quadraticBezier([2.0,2.0],m,[6.0,2.0]) for m in line]
+--E 8
+
+--S 9 of 9
+graphs:=[[point(((functions.i)(j/100.0))::LIST(DFLOAT)) for j in 0..100] for i in 1..9]
+--E 9
+
+-- We do not do these during testing since graphics is not available
+-- The resulting image is in the Bezier section of Volume 10.4
+
+--d1:=draw(graphs.1,title=="Bezier Control Point Motion")
+--others:=[graphs.i for i in 2..9]
+--for i in 2..9 for graph in others repeat putGraph(d1,[graph],i)
+--vp:=makeViewport2D(d1)
+
 @
+\includegraphics[scale=1.50]{ps/v104beziermove.eps}
 <<Bezier.help>>=
 ====================================================================
 Bezier Curve examples
@@ -5226,19 +5247,60 @@ n:=cubicBezier([2.0,2.0],[2.0,4.0],[6.0,4.0],[6.0,2.0])
     [4.0,3.5], [4.592,3.44], [5.136,3.26], [5.584,2.96], [5.888,2.54],
     [6.0,2.0]]
 
+Bezier curves "move" based on moving their control points, which
+in the case of the three components of a quadratic Bezier curve
+are the three points given. To see this motion we can show what
+happens when you "drag" the middle control point along the line
+from [-4,4] to [4,4] by increments of 1. 
+
+First, we form the line as a list of Floats, 9 in all.
+
+   line:=[[i::Float,4.0] for i in -4..4 by 1]
+
+Next, we form a list of functions, each with a different center control point.
+Notice that the endpoints remain fized so we expect that the curve will
+begin and end at the same point but that the midpoint is pulled around.
+
+  functions:=[quadraticBezier([2.0,2.0],m,[6.0,2.0]) for m in line]
+
+Then we form a list of the graphs by calling each function in the above
+list. Each function call happens 101 times (to include both endpoints).
+Thus we get a List of Lists of Points of DoubleFloats
+
+  graphs:=[ [ point( ( (functions.i)(j/100.0) )::LIST(DFLOAT) ) _
+    for j in 0..100] for i in 1..9]
+
+We draw the first graph to see if it looks reasonable:
+
+  d1:=draw(graphs.1)
+
+Since it does we add the other 8 graphs. The 2D graphs can hold up to
+9 simultaneous graphs.
+
+  others:=[graphs.i for i in 2..9]
+  for i in 2..9 for graph in others repeat putGraph(d1,[graph],i)
+
+and now we display them all on one graph.
+
+  vp:=makeViewport2D(d1)
+
 See Also:
 o )show Bezier
+o )show TwoDimensionalViewport
+o )d op draw
+o )d op point
+o )d op putGraph
+o )d op makeViewport2D
 
 @
 \pagehead{Bezier}{BEZIER}
 \pagepic{ps/v104bezier.ps}{BEZIER}{1.00}
 
 {\bf Exports:}\\
-\begin{tabular}{llll}
-\cross{BEZIER}{bezoutDiscriminant} &
-\cross{BEZIER}{bezoutMatrix} &
-\cross{BEZIER}{bezoutResultant} &
-\cross{BEZIER}{sylvesterMatrix} 
+\begin{tabular}{lll}
+\cross{BEZIER}{linearBezier} &
+\cross{BEZIER}{quadraticBezier} &
+\cross{BEZIER}{cubicBezier} 
 \end{tabular}
 
 <<package BEZIER Bezier>>=
@@ -5248,35 +5310,35 @@ o )show Bezier
 ++ Description: Provide linear, quadratic, and cubic spline bezier curves
 Bezier(R:Ring): with
    linearBezier: (x:List R,y:List R) -> Mapping(List R,R)
-   ++ A linear Bezier curve is a simple interpolation between the 
-   ++ starting point and the ending point based on a parameter t.
-   ++ Given a start point a=[x1,y1] and an endpoint b=[x2,y2]
-   ++ f(t) == [(1-t)*x1 + t*x2, (1-t)*y1 + t*y2]
-   ++
-   ++X n:=linearBezier([2.0,2.0],[4.0,4.0])
-   ++X [n(t/10.0) for t in 0..10 by 1]
+    ++ A linear Bezier curve is a simple interpolation between the 
+    ++ starting point and the ending point based on a parameter t.
+    ++ Given a start point a=[x1,y1] and an endpoint b=[x2,y2]
+    ++ f(t) == [(1-t)*x1 + t*x2, (1-t)*y1 + t*y2]
+    ++
+    ++X n:=linearBezier([2.0,2.0],[4.0,4.0])
+    ++X [n(t/10.0) for t in 0..10 by 1]
    quadraticBezier: (x:List R,y:List R,z:List R) -> Mapping(List R,R)
-   ++ A quadratic Bezier curve is a simple interpolation between the 
-   ++ starting point, a middle point, and the ending point based on 
-   ++ a parameter t.
-   ++ Given a start point a=[x1,y1], a middle point b=[x2,y2], 
-   ++ and an endpoint c=[x3,y3]
-   ++ f(t) == [(1-t)^2 x1 + 2t(1-t) x2 + t^2 x3,
-   ++          (1-t)^2 y1 + 2t(1-t) y2 + t^2 y3]
-   ++
-   ++X n:=quadraticBezier([2.0,2.0],[4.0,4.0],[6.0,2.0])
-   ++X [n(t/10.0) for t in 0..10 by 1]
+    ++ A quadratic Bezier curve is a simple interpolation between the 
+    ++ starting point, a middle point, and the ending point based on 
+    ++ a parameter t.
+    ++ Given a start point a=[x1,y1], a middle point b=[x2,y2], 
+    ++ and an endpoint c=[x3,y3]
+    ++ f(t) == [(1-t)^2 x1 + 2t(1-t) x2 + t^2 x3,
+    ++          (1-t)^2 y1 + 2t(1-t) y2 + t^2 y3]
+    ++
+    ++X n:=quadraticBezier([2.0,2.0],[4.0,4.0],[6.0,2.0])
+    ++X [n(t/10.0) for t in 0..10 by 1]
    cubicBezier: (w:List R,x:List R,y:List R,z:List R) -> Mapping(List R,R)
-   ++ A cubic Bezier curve is a simple interpolation between the 
-   ++ starting point, a left-middle point,, a right-middle point,
-   ++ and the ending point based on a parameter t.
-   ++ Given a start point a=[x1,y1], the left-middle point b=[x2,y2],
-   ++ the right-middle point c=[x3,y3] and an endpoint d=[x4,y4]
-   ++ f(t) == [(1-t)^3 x1 + 3t(1-t)^2 x2 + 3t^2 (1-t) x3 + t^3 x4,
-   ++          (1-t)^3 y1 + 3t(1-t)^2 y2 + 3t^2 (1-t) y3 + t^3 y4]
-   ++
-   ++X n:=cubicBezier([2.0,2.0],[2.0,4.0],[6.0,4.0],[6.0,2.0])
-   ++X [n(t/10.0) for t in 0..10 by 1]
+    ++ A cubic Bezier curve is a simple interpolation between the 
+    ++ starting point, a left-middle point,, a right-middle point,
+    ++ and the ending point based on a parameter t.
+    ++ Given a start point a=[x1,y1], the left-middle point b=[x2,y2],
+    ++ the right-middle point c=[x3,y3] and an endpoint d=[x4,y4]
+    ++ f(t) == [(1-t)^3 x1 + 3t(1-t)^2 x2 + 3t^2 (1-t) x3 + t^3 x4,
+    ++          (1-t)^3 y1 + 3t(1-t)^2 y2 + 3t^2 (1-t) y3 + t^3 y4]
+    ++
+    ++X n:=cubicBezier([2.0,2.0],[2.0,4.0],[6.0,4.0],[6.0,2.0])
+    ++X [n(t/10.0) for t in 0..10 by 1]
  == add
    linearBezier(a,b) == 
     [(1-#1)*(a.1) + #1*(b.1), (1-#1)*(a.2) + #1*(b.2)]
diff --git a/books/ps/v104beziermove.eps b/books/ps/v104beziermove.eps
new file mode 100644
index 0000000..3ac95e6
--- /dev/null
+++ b/books/ps/v104beziermove.eps
@@ -0,0 +1,2342 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: GIMP PostScript file plugin V 1.17 by Peter Kirchgessner
+%%Title: v104beziermove.eps
+%%CreationDate: Mon Mar 30 14:51:49 2009
+%%DocumentData: Clean7Bit
+%%LanguageLevel: 2
+%%Pages: 1
+%%BoundingBox: 14 14 142 146
+%%EndComments
+%%BeginProlog
+% Use own dictionary to avoid conflicts
+10 dict begin
+%%EndProlog
+%%Page: 1 1
+% Translate for offset
+14.173228346456694 14.173228346456694 translate
+% Translate to begin of first scanline
+0 131.17539273108105 translate
+127.10551181102363 -131.17539273108105 scale
+% Image geometry
+406 419 8
+% Transformation matrix
+[ 406 0 0 419 0 0 ]
+% Strings to hold RGB-samples per scanline
+/rstr 406 string def
+/gstr 406 string def
+/bstr 406 string def
+{currentfile /ASCII85Decode filter /RunLengthDecode filter rstr readstring pop}
+{currentfile /ASCII85Decode filter /RunLengthDecode filter gstr readstring pop}
+{currentfile /ASCII85Decode filter /RunLengthDecode filter bstr readstring pop}
+true 3
+%%BeginData:       123775 ASCII Bytes
+colorimage
+r;V>^J\H]LotLA(J,~>
+r;V>VJ[U-<osXeuJ,~>
+r;V>VJ[U-<osXeuJ,~>
+rr<#4J_G\/W7h74o@sAojR_.-dH'oS!7Cf"s1\L4J,~>
+rr<#,J^f8#W71h*o@F#di:GP$bM`!D!6bAks0hq,J,~>
+rr<#,J^f8#W71h*o@F#di:GP$bM`!D!6bAks0hq,J,~>
+s8N)5J_5P+VUtn-o@X/jiUb_'cf+KK!71Sq!l"^7J,~>
+s8N)-J^T+tVU>J#o@*f_h=K+sakcR<!6P/e!k/./J,~>
+s8N)-J^T+tVU>J#o@*f_h=K+sakcR<!6P/e!k/./J,~>
+!WTn1f(1#8eq)D`ec=V!f)a.Ro@F#fhu;4.gYDbZs4dP)!6tDl!P\Sa~>
+!WTV)d.9k\d"0QTciDhldK.DCo?mZ[g]#Y$fDX+uf%9oL!6=u`!Oi#Y~>
+!WTV)d.<$Dd"0QTciDhldK.DCo?mZ[g]#Y$fDX+uf%9oL!6=u`!Oi#Y~>
+!WTn1e,UWaEW@55eFV/lec#O%qpY]+s4Znj$MFDrk1&Ais8268J^j;@!8[7s!R0BseH4Fbg\fS5
+bh^h"g?%GQe^`O<jk827bkolj^Ai]~>
+!WTV)c2^K0T)_K7cL]<`ci!gnqp#9!s4-P_$M=;pj3HK\s8200J^3l4!86ti!QEahcN;VSf)3i*
+`S&S`eD]B>cd1>(iRH3"`V[p][f:j~>
+!WTV)c2`XmcN&`OcL]<`ci!gnqp#9!s4-P_$M=;pj3HK\s8200J^3l4!86ti!QEahcN;VSf)3i*
+`S&S`eD]B>cd1>(iRH3"`V[p][f:j~>
+!5A9W!?cFW1]_V>J^X/<"5a(Xk53R.e(<(:dL,9mmf(_os4uQ/mt&pYdK&%ndfIVGqpPW*io0ga
+&B`bVe(<X:j4rGMhW*29e&qO8!5<s~>
+!4M^I!D9!YAHADqJ^!`0"5<eTj87%%cI0u*bR3R`m/G;cs4H'%m"*CPbQ-5cblP`5qoo2uhVJ+S
+&B!)Dc-kP(hq6T=g>LB'c,9D%!4IC~>
+!4M^I!Jf"qU]JesJ^!`0"5<eTj87%%cI0u*bR3R`m/G;cs4H'%m"*CPbQ-5cblP`5qoo2uhVJ+S
+&B!)Dc-kP(hq6T=g>LB'c,9D%!4IC~>
+!5A9U%>b&9f\+p1g"P6:h>`:^d.>U&lhg;Fd,t5Tp[6r=f?i^Zqr#iYs7$$Tmf)SLcjA\2e)12W
+d,k8SJ^F&9!86tk!Q`skd/r:`iV_((aP$R?#M\7oio8eRgA]J"aSO6`^46~>
+!4M^G%>t2?gYCQ=h;-rFhuARbb4Eaol21&Bb2`?Dp?UK5dE:PJqV96Js6fjOm/H8GapHr)cJ/BH
+b2WEEJ]dW-!7^V`!Q!:_b6$MRh>GFs_:8J-#M.bahVQoAf)Ehm_>;:S[X\~>
+!4M^G%>Fi3eCE(!f%8R-gAckXb4Eaol21&Bb2`?Dp?UK5dE:PJqV96Js6fjOm/H8GapHr)cJ/BH
+b2WEEJ]dW-!7^V`!Q!:_b6$MRh>GFs_:8J-#M.bahVQoAf)Ehm_>;:S[X\~>
+!5A9S#DiE5g"P-5g]$"1huAL`cL]=#qX<SGda.X^qpF7"e^a][lho)bs5iDCjlZTjr6>Yrp@-A`
+s4,EOs3lPEoZdHgo?RHXfDa))f&,BEh;[>Lf$D[_fDX#!g#:]?iS"1U!6=r]!5<s~>
+!4M^E!fI$5rS7\7hr*GOs,)BKo>hmHmGn2ian>E)bh<$Cd/W%fr5mXlioC'uj8[=#a9p,`m`=)]
+d)ar@c@O(/a8jZ[a8s'(rl>Mpg=tK:hV6c2aN2-ErQ#/lgt('3e,@>f^\Z"O[X\~>
+!4M^E%>Fi5f%8L)f\,!4h#E(ZaRdIlq<d5AbfTPPqTRXmd*VgNkkrQUs5N)=ioC'^r5]5gp$ToS
+s3Sj@s3?2:oZ.$\o>gsIdf.;rd+[72f\YB:d)a;Cdf%5jeD/X+gsc5C!5JBO!4IC~>
+!5A9R!f6m2r7hJ3hr*GmLk3hCboG@8in=@hc/AWcc/&ELh#Gp]s3fa'e_U8Th#Gk%bmVhepsI@B
+s4#<Srm-/?oZ[Bdo?@<Tec*f%hqd&Ag"Y9;hp'Ebec!_rf\bE:hq7nP!6+fZ!5<s~>
+!4M^C!K-pTh?MlqiSrksMLie>`Z3D+hUDMZ`n^UU`n:=:fDj1Ms30-qce/9Cf`04p`XBiVpWCM.
+s3AXBrlBZ1oYpmWo>UgEci1omg=Y!-eCN4'g;_.Gci(iedbE:$gX?&?!586K!4IC~>
+!4M^C%>Fi6f\+p1g"Y9:h>`1[`q77jdJr(Ps4bQKs5h8Qs3B6rce8?Bf`0:Ms3B9sc2GWia7/iG
+`n:=:`o-j;J]@?%!718V!PQhY`XLSRf%/@%f%A]r`kB^s`WafFeC<7$rPeiNqSiNDJ,~>
+!5A9P%>b&>h;6uEhr!ANiW"^bbOisXk5G;rm`kP!r6a:!daS6TlMSl\s3f[%dbFfMrQ>Q7r7B??
+g],mYqs8mWo?.-_o?%*Oe,IJudbNX8g#(T?d`T_Me,IJpf%ns7h:LK5rlP5YqTAlQJ,~>
+!4M^A%>t2Chr*DMiSieVj8Y!f`:UtJir/lnm)Jekr6*^lbg$1DkPW<Ns30*pbLcd;rPT'.r6ia,
+fDj:KqW`XMo>CXRo>C[Bc2PWic.L_)e_Jj1c,@Q5c2PWddG!('g=+a%rknfLqSWBBJ,~>
+!4M^A%>Fi7g"P-5gt^`BhuAC]`:UtJir/lnm)Jekr6*^lbg$1DkPW<Ns30*pbLcd;rPT'.r6ia,
+fDj:KqW`XMo>CXRo>C[Bc2PWic.L_)e_Jj1c,@Q5c2PWddG!('g=+a%rknfLqSWBBJ,~>
+!5A9N%>b&?hV[2Ii8N\Tj8Xpdan3[pp%-Y]m/?2DbOY,Us3\sKr;,0igAfRSs3TL"d/D)brs$j(
+s8Vu]b^mn-aT0`fa8jQ_f`]XBaMQ@%a9(,Kg\f,(_U6HGcJ7"+e(!1(gs4!^_YV@S^46~>
+!4M^?%>t2DiSrhUj5]4^jo:3h_Xt\bo^^8Ol29]<`:30Es3&:;r;,$^ec3hCs2rmlb5K3Urs$Wr
+s8VrZ`IYnt_>qdY_#VURe-*n0_7Ihe_#i3:f)3>q]$%q+aOnklcHb%gfZ:nF])'8D[X\~>
+!4M^?%>Fi9gYCQ=h;7&Hi;\L^_Xt\bo^^8Ol29]<`:30Es3&:;r;,$^ec3hCs2rmlb5K3Urs$Wr
+s8VrZ`IYnt_>qdY_#VURe-*n0_7Ihe_#i3:f)3>q]$%q+aOnklcHb%gfZ:nF])'8D[X\~>
+!5A9L%>b&Ai8NPMi8N\Tj8Xpda+;:B`rOHb`W=cFr7;,*fZ(qHchk]`g">!U`Xor3`l?9YgX=*]
+dbER$`l>gj`rNi(~>
+!4M^=%>t2FioB"Wj5]4^jo:3h^k';4^];IT^]2g]dKS.L^V@;"qnE3^e("<1&@ffr^W4sXbeLp;
+f@S$W^UX-U!4IC~>
+!4M^=%>Fi;h;-i@h;7&Hi;\L^^k';4^];IT^]2g]dKS.L^V@;"qnE3^e("<1&@ffr^W4sXbeLp;
+f@S$W^UX-U!4IC~>
+!5A9J%>b&Ai8NVQioB([jo:-f`IZ">`;n0^_uS$Xf*'=9`4jLn_ue3:c2>K\^<QYq!R&Xa`;e!Z
+_uROJ`;mW&~>
+!4M^;%>t2FioB%Yj5f=ak5U<i^4F#0^&Z1P]`H.$r6kht`kB'o`r!FNa4/0-]`GR]rk/?O`;RCL
+`;[FM[ed]<[X\~>
+!4M^;!ep[0rS7\7i8EVSs+Q$<J\J_0!65#O!QNRcdfn1>]tLkoqn3'OeAqL#!Og#I]`H*jrOr6L
+rk/<?qRus<J,~>
+!5A9H!/U=J!/Q3DJ]#(:!6auN!PQ\J_?%?no>1L@qSN<IJ,~>
+!4M^9!/gIL!/c??J\8S,!6"K?!OTf:\cK1Vo==q/qRcg:J,~>
+!4M^9!/:+G!/6!:J\8S,!6"K?!OTf:\cK1Vo==q/qRcg:J,~>
+!5A9Fo8%t6J\eq6!6OiJ!P?JF^]D'ho=t@<qS<0GJ,~>
+!4M^7o88+1J\&G(!5\9:!OBQ5\,inOo=+e+qRQ[8J,~>
+!4M^7o7_b,J\&G(!5\9:!OBQ5\,inOo=+e+qRQ[8J,~>
+J\H]LUV6`Ko=b79a7I"G\]=<U!4hp>J,~>
+J[U-<UUC0;o<n\(^[nl7YeTe<!3l:-J,~>
+J[U-<UUC0;o<n\(^[nl7YeTe<!3l:-J,~>
+rk<s`JcC<$nc/U&J,~>
+rjICXJcC<$nc/TsJ,~>
+rjICXJcC<$nc/TsJ,~>
+rk<s`JcC<$nc/U&J,~>
+rjICXJcC<$nc/TsJ,~>
+rjICXJcC<$nc/TsJ,~>
+rk<s`JcC<$nc/U&J,~>
+rjICXJcC<$nc/TsJ,~>
+rjICXJcC<$nc/TsJ,~>
+rk<s`JcC<$nc/U&J,~>
+rjICXJcC<$nc/TsJ,~>
+rjICXJcC<$nc/TsJ,~>
+rk<s`JcC<$nc/U&J,~>
+rjICXJcC<$nc/TsJ,~>
+rjICXJcC<$nc/TsJ,~>
+rk<s`JcC<$nc/U&J,~>
+rjICXJcC<$nc/TsJ,~>
+rjICXJcC<$nc/TsJ,~>
+rk=9irP.(drkICks1e@/rP.=k!5JO5!5F*bli6suJ,~>
+rjI^arG('drbCBks(_?/rG(<k!,DN5!,@)bli6smJ,~>
+rjI^arA!%+r\<@2s"X<KrA!:2!&=KQ!&9')li6smJ,~>
+rk=6h"2Fm9^[hC)^[1t#^]+65^[qI*^[M1&^\Ig/^]+65^\Ig/^\@a.^\@a.^]+65^\Rm0^\e$2
+^OcF^s8K`_~>
+rjI[`")@l9C@_B)C@(s#CB"55C@hH*C@D0&CA@f/CB"55CA@f/CA7`.CA7`.CB"55CAIl0CA\#2
+C4ZE^s8KHW~>
+rjI[`"#9iU1%P>E1$no?1&h1Q1%YDF1%5,B1&1bK1&h1Q1&1bK1&(\J1&(\J1&h1Q1&:hL1&LtN
+0nKB%s8KHW~>
+rk=6h"2Fm9^YJhh^[M1&^[M1&^\Ig/^]+65^[;%$^\@d.^B4GM^\Rm0^OcFWs8K`_~>
+rjI[`")@l9C>AghC@D0&C@D0&CA@f/CB"55C@2$$CA7c.C'+EMCAIl0C4ZEWs8KHW~>
+rjI[`"#9iU1#2d/1%5,B1%5,B1&1bK1&h1Q1%"u@1&(_J0`qA01&:hL0nKAss8KHW~>
+rk=6h"i(*;^]4?5^]4?3^]4?6^]"33^]4<9^]2'`q>UH0qu?Z1s8N8;s1c>Ks8B_4rr^%9^VBdJ
+rkJF3!5J=/!5JO5!l+d8rkJI4s1eR5"i()P^]4?4^\Rm6^]2(K^]4?5^]4?4^]+95^]"33^]4<9
+^]2'`M#[IgJ,~>
+rjI[`"`");CB+>5CB+>3CB+>6CAn23CB+;9CB&$`q>UG0qu?Y1s8N7;s(Z<Ks8?^4rr[$9C23bJ
+rbDE3!,D</!,DN5!c%c8rbDH4s(_Q5"`"'PCB+>4CAIl6CB&&KCB+>5CB+>4CB"85CAn23CB+;9
+CB&$`M#[I_J,~>
+rjI[`"Yp&W1&q:Q1&q:O1&q:R1&_.O1&q7U1&is_q>UFLqu?XMs8N6Ws"Q8.s8=\PrrY"U0er\-
+r\=BO!&=9K!&=KQ!\s`Tr\=EPs"XNQ"Yp$31&q:P1&:hR1&j!.1&q:Q1&q:P1&h4Q1&_.O1&q7U
+1&is_M#[I_J,~>
+rk=6hrkJL5!5JO5!5JL4!5JL4!5JO5!5JO5#/C2Q^]4>KqYpQ1r;Qc3rr3;>s1c>Ks1eU6^]"34
+^]4<8^]2(JrrBh5rrBh/s8B_4rrBh5rrBh5rrBh5s8Tk6rr^%9s1e=.#/C2Qs1eTKrr3)8s8Tk2
+rrBh5rrBh5rs$7<^VBgK^PW!i^46~>
+rjI[`rbDK5!,DN5!,DK4!,DK4!,DN5!,DN5#&=0QCB+<KqYpP1r;Qb3rr3:>s(Z<Ks(_T6CAn24
+CB+;8CB&&Jrr?g5rr?g/s8?^4rr?g5rr?g5rr?g5s8Qj6rr[$9s(_<.#&=0Qs(_RKrr3(8s8Qj2
+rr?g5rr?g5rs!6<C23eKC5Mui[X\~>
+rjI[`r\=HQ!&=KQ!&=HP!&=HP!&=KQ!&=KQ"u6-41&q8.qYpOMr;QaOrr39Zs"Q8.s"XQR1&_.P
+1&q7T1&j!-rr=eQrr=eKs8=\Prr=eQrr=eQrr=eQs8OhRrrY"Us"X9J"u6-4s"XO.rr3'Ts8OhN
+rr=eQrr=eQrrt4X0er_.0o>r0[X\~>
+rk=6h"Mb!:^]45Hrr2u5r;Qc3rr;o2!WTq.rrBh3rrBh5rrTt8^]+68^]4>KrVll4r;Qc3rr2u5
+rr2u5q#:?/r;Qc3rr2u5rr2u5rr2u5rr3)8s8Tk.rrBh5rrTt8^]+68^]4>Kqu6Z2rr2u5rr3&7
+s1eR5!5FBjrk<m~>
+rjI[`"D[u:CB+3Hrr2t5r;Qb3rr;n2!WQp.rr?g3rr?g5rrQs8CB"58CB+<KrVlk4r;Qb3rr2t5
+rr2t5q#:>/r;Qb3rr2t5rr2t5rr2t5rr3(8s8Qj.rr?g5rrQs8CB"58CB+<Kqu6Y2rr2t5rr3%7
+s(_Q5!,@AjrjI=~>
+rjI[`">TrV1&q/+rr2sQr;QaOrr;mN!WOnJrr=eOrr=eQrrOqT1&h1T1&q8.rVljPr;QaOrr2sQ
+rr2sQq#:=Kr;QaOrr2sQrr2sQrr2sQrr3'Ts8OhJrr=eQrrOqT1&h1T1&q8.qu6XNrr2sQrr3$S
+s"XNQ!&9?1rjI=~>
+rk=6h"i(*;^]2(GrrBh2rrBh5rrBh3rrBh-rrBh3rrBh5rrTt8^]+68^]4>KrVll4r;Qc3rr2u5
+rr2u5q#:?/r;Qc3rr2u5rr2u5rr2u5rr3)8s8Tk.rrBh5rrTt8^]+68^]4>Kqu6Z2rr2u5rr3&7
+s1eR5!5FBjrk<m~>
+rjI[`"`");CB&&Grr?g2rr?g5rr?g3rr?g-rr?g3rr?g5rrQs8CB"58CB+<KrVlk4r;Qb3rr2t5
+rr2t5q#:>/r;Qb3rr2t5rr2t5rr2t5rr3(8s8Qj.rr?g5rrQs8CB"58CB+<Kqu6Y2rr2t5rr3%7
+s(_Q5!,@AjrjI=~>
+rjI[`"Yp&W1&j!*rr=eNrr=eQrr=eOrr=eIrr=eOrr=eQrrOqT1&h1T1&q8.rVljPr;QaOrr2sQ
+rr2sQq#:=Kr;QaOrr2sQrr2sQrr2sQrr3'Ts8OhJrr=eQrrOqT1&h1T1&q8.qu6XNrr2sQrr3$S
+s"XNQ!&9?1rjI=~>
+rk=6h"i(*;^]2(JrrTt8^\[s1^]+65^]+67^]2(BrrBh5rrTt8^]+67^]2(Jrs6C>s1eU6^]2(H
+rrBh5rrBh5rrBh/rrBh3rrBh5rrBh5rrBh5rrBh5rs$7<s1eU6^\[s1^]+67^]2(Jrs$7<s1eU6
+^]+65^]+65^]+67^]2(JrrBfjs8K`_~>
+rjI[`"`");CB&&JrrQs8CARr1CB"55CB"57CB&&Brr?g5rrQs8CB"57CB&&Jrs3B>s(_T6CB&&H
+rr?g5rr?g5rr?g/rr?g3rr?g5rr?g5rr?g5rr?g5rs!6<s(_T6CARr1CB"57CB&&Jrs!6<s(_T6
+CB"55CB"55CB"57CB&&Jrr?ejs8KHW~>
+rjI[`"Yp&W1&j!-rrOqT1&CnM1&h1Q1&h1S1&j!%rr=eQrrOqT1&h1S1&j!-rs1@Zs"XQR1&j!+
+rr=eQrr=eQrr=eKrr=eOrr=eQrr=eQrr=eQrr=eQrrt4Xs"XQR1&CnM1&h1S1&j!-rrt4Xs"XQR
+1&h1Q1&h1Q1&h1S1&j!-rr=d1s8KHW~>
+rk=9irP/@3rkJL5r4i:3rkJI4rkJL5!5J4,rkJI4rkJL5!5JO5!5JO5s1eU6!5JF2rkJI4rkJ:/
+!5JF2rkJI4rkJL5!5JO5!5JO5s1eC0!5JO5!l+d8rkJF3s1eR5rkJI4rkJL5!5JO5!5FBjrk<m~>
+rjI^arG)?3rbDK5r+c93rbDH4rbDK5!,D3,rbDH4rbDK5!,DN5!,DN5s(_T6!,DE2rbDH4rbD9/
+!,DE2rbDH4rbDK5!,DN5!,DN5s(_B0!,DN5!c%c8rbDE3s(_Q5rbDH4rbDK5!,DN5!,@AjrjI=~>
+rjI^arA"<Or\=HQr%\6Or\=EPr\=HQ!&=0Hr\=EPr\=HQ!&=KQ!&=KQs"XQR!&=BNr\=EPr\=6K
+!&=BNr\=EPr\=HQ!&=KQ!&=KQs"X?L!&=KQ!\s`Tr\=BOs"XNQr\=EPr\=HQ!&=KQ!&9?1rjI=~>
+rk<s`JcC<$nc/U&J,~>
+rjICXJcC<$nc/TsJ,~>
+rjICXJcC<$nc/TsJ,~>
+rk<s`JcC<$nc/U&J,~>
+rjICXJcC<$nc/TsJ,~>
+rjICXJcC<$nc/TsJ,~>
+rk<s`JcC<$nc/U&J,~>
+rjICXJcC<$nc/TsJ,~>
+rjICXJcC<$nc/TsJ,~>
+rk<s`JcC<$nc/U&J,~>
+rjICXJcC<$nc/TsJ,~>
+rjICXJcC<$nc/TsJ,~>
+rk<s`JcC<$nc/U&J,~>
+rjICXJcC<$nc/TsJ,~>
+rjICXJcC<$nc/TsJ,~>
+rk<s`JcC<$nc/U&J,~>
+rjICXJcC<$nc/TsJ,~>
+rjICXJcC<$nc/TsJ,~>
+rk<s`JcC<$nc/U&J,~>
+rjICXJcC<$nc/TsJ,~>
+rjICXJcC<$nc/TsJ,~>
+rk<s`JcC<$nc/U&J,~>
+rjICXJcC<$nc/TsJ,~>
+rjICXJcC<$nc/TsJ,~>
+rk<s`JcC<$nc/U&J,~>
+rjICXJcC<$nc/TsJ,~>
+rjICXJcC<$nc/TsJ,~>
+rk@:i!9&M/JcCu7rk<m~>
+rjL_a!47=WJcCu7rjI=~>
+rjL_a!-!MhJcCu7rjI=~>
+rk@:i!9&M/JcCu7rk<m~>
+rjL_a!47=WJcCu7rjI=~>
+rjL_a!-!MhJcCu7rjI=~>
+rk@:i!9&M/JcCu7rk<m~>
+rjL_a!47=WJcCu7rjI=~>
+rjL_a!-!MhJcCu7rjI=~>
+rk@:i!9&M/JcCu7rk<m~>
+rjL_a!47=WJcCu7rjI=~>
+rjL_a!-!MhJcCu7rjI=~>
+rk@:i!9&M/JcCu7rk<m~>
+rjL_a!47=WJcCu7rjI=~>
+rjL_a!-!MhJcCu7rjI=~>
+rk@:i!9&M/JcCu7rk<m~>
+rjL_a!47=WJcCu7rjI=~>
+rjL_a!-!MhJcCu7rjI=~>
+rk@:i!9&M/JcCu7rk<m~>
+rjL_a!47=WJcCu7rjI=~>
+rjL_a!-!MhJcCu7rjI=~>
+rk@Inr#Gdrq]55,oc4%Inc/8&nGi/%nGi2&!5J((oc4%Inc/8&nGi/%nGi2&!5F*b!<<&4J,~>
+rjLnfr0.2gqipXNoooG2nc/9HnGi0GnGi3H!&=$DoooG2nc/9HnGi0GnGi3H!&9')!<<&,J,~>
+rjLnfr#GcVq]55,oc4#enc/8&nGi/%nGi2&!&=$Doc4#enc/8&nGi/%nGi2&!&9')!<<&,J,~>
+rk@OpruM$P!9*pl!rp$MrZ1\3!$2!P!<<#4!WTq6*VKI4*W!MNs8B_3*VKI4*W!MNs8B_4*<<kI
+s8O,7^B+ALrZ1\3ruM*R!<;r2!WTq6*VKI4*W3YPs80S2*<<kIs8O,9^B"<4^],;S^\7^,*<?-:
+^B"<5^]#7*s8K`_~>
+rjLths-3F9!4;_[!rju0rfm*U!0mC9!<<!P!WOnRPkG(VPkm*7s8=\OPkG(VPkm*7s8=\PPQ3H2
+s8S>Y0`h;/rfm*Us-3L;!<;pN!WOnRPkG(VPl*69s8+PNPQ3H2s8S>[0`_7P1&mI<1%tYHPQ:a\
+0`_7Q1&dDhs8KHW~>
+rjLthruM"l!-%ol!rju0rZ1\3!$1tl!<<!P!WOnR*VKI4*VqJjs8=\O*VKI4*VqJjs8=\P*<7he
+s8O,70`h;/rZ1\3ruM(n!<;pN!WOnR*VKI4*W.Vls8+PN*<7hes8O,90`_7P1&i6o1%tYH*<?-:
+0`_7Q1&`2Fs8KHW~>
+rk@Rq!$2'RrVllVqZ$T1rZ1k8ruM-Sp&G',rZ1h7!$2'Rp&G',rZ1k8ruM*Rp&>$,rZ1h7ruM*R
+pAb0-rZ1k8ruM*Rp&G',ruD*SqZ$R9rkJ.+!5JLRqZ$O8!rp$Mp&>-/*?Doks8O,=^\.X,^],;S
+^P2^e^46~>
+rjM"i!0mI;rVll)qZ$RMrfm9Zs-3O<p&G%Hrfm6Y!0mI;p&G%Hrfm9Zs-3L;p&>"Hrfm6Ys-3L;
+pAb.Irfm9Zs-3L;p&G%Hs-*L<qZ$S[r\=*G!&=J;qZ$PZ!rju0p&>+KPa!p!s8S>_1%kSH1&mI<
+0noZ,[X\~>
+rjM"i!$2%nrVlk:qZ$RMrZ1k8ruM+op&G%HrZ1h7!$2%np&G%HrZ1k8ruM(np&>"HrZ1h7ruM(n
+pAb.IrZ1k8ruM(np&G%HruD(oqZ$R9r\=*G!&=HnqZ$O8!rju0p&>+K*??m2s8O,=1%kSH1&i6o
+0noZ,[X\~>
+rk@Ur!Zf%jqu6ZTp](9.ruD*Srr2s=rkJ"'s1eRS!5JL4!Zf%jnGiO'ruD*Srr2s=rkJ"'s1eRS
+!5JL4!$2'Rnc/X(ruD*Srr2s=rkIt&"2>is^]"04*WEhDs8Tk6*<<kRrr=)=^[V7*^E"?0rVlj<
+rkIt&"2>is^PDjg^46~>
+rjM%j!gGDoqu6Z'p](7Js-*L<rr2t_r\<sCs"XP<!&=HP!gGDonGiMCs-*L<rr2t_r\<sCs"XP<
+!&=HP!0mI;nc/VDs-*L<rr2t_r\<pB"#6%)1&_+PPl<E-s8OhRPQ3H;rrA;_1%>2F0pInWrVlk^
+r\<pB"#6%)0o,f.[X\~>
+rjM%j!Za!Mqu6Y8p](7JruD(orr2s=r\<sCs"XNo!&=HP!Za!MnGiMCruD(orr2s=r\<sCs"XNo
+!&=HP!$2%nnc/VDruD(orr2s=r\<pB"#1f:1&_+P*W@e`s8OhR*<7hnrr=)=1%>2F0c_8hrVlj<
+r\<pB"#1f:0o,f.[X\~>
+rk@Xs!Zf%jqYpQSo`#-1*?G/#^VB.8#JV9"s8O+S^[1t)^E"?p*P]AUrs-:Z*WQ-[^VB.8#/;0!
+ruJkhm/I=**?G1[*P]AUrs$4Ys8O+S^[1t*^E"?p*?Do0m/I+$*Ja[o^46~>
+rjM(k!gGDoqYpQ&o`#+MPa)340er%p#;MI-s8S<<1$noE0pIq&PVFoZrs(9CPlLcJ0er%p"u2@,
+s-,5mm/I;FPa)4JPVFoZrrt3Bs8S<<1$noF0pIq&Pa!mWm/I)@P_];<[X\~>
+rjM(k!Za!MqYpP7o`#+M*?G/#0er%p#;I5>s8O)o1$noE0c_;7*AK;8rs(8!*WQ-[0er%p"u.,=
+ruEgKm/I;F*?G1[*AK;8rrt1us8O)o1$noF0c_;7*??jhm/I)@*Ja[o[X\~>
+rk@[t!?JrMrrD$Js8O)>^Zb^t*<<k;s8O)>^Zb^t*<<k;rrF.TkPtQ&!5IatruD*SkPkQ'^ZYUt
+*P[I2rk<m~>
+rjM+l!L,>6rrBFrs8S;`1$JZ;PQ3H$s8S;`1$JZ;PQ3H$rrJ?=kPtRH!&<^;s-*L<kPkRI1$AQ;
+PVJ$prjI=~>
+rjM+l!?Eoirr@$.s8O)>1$JZ;*<7hWs8O)>1$JZ;*<7hWrrF,pkPtQ&!&<^;ruD(okPkQ'1$AQ;
+*ANENrjI=~>
+rk@^u!Zf%jq#:?Qnc&Y2^VB"4!Zf%jkPkT(^VB"4!Zf%jkl1])^VAt3!Zf%jkl1])^VB"4!Zf%j
+kPkRt*Jsgq^46~>
+rjM.m!gGDoq#:?$nc&ZT0eqnl!gGDokPkUJ0eqnl!gGDokl1^K0eqkk!gGDokl1^K0eqnl!gGDo
+kPkQ;P_oG>[X\~>
+rjM.m!Za!Mq#:>5nc&Y20eqnl!Za!MkPkT(0eqnl!Za!Mkl1])0eqkk!Za!Mkl1])0eqnl!Za!M
+kPkQ;*Jsgq[X\~>
+rk@^u!?JrLrrD$JrrjFXruE,pli.,/^],;p^[(n'*P_XS*P^q?"WbAXruJl?rrjFXs8O+SlMh#.
+^]4<S^[(n'*P_XS*P^q?"WbAXruJl;rrF.TMuWdjJ,~>
+rjM.m!L,>5rrBFrrrnWAs-/a&li.-Q1&mK&1$eiCPVN4<PVMM("dCbAs-,8(rrnWAs8S<<lMh$P
+1&q9<1$eiCPVN4<PVMM("dCbAs-,8$rrJ?=MuWdbJ,~>
+rjM.m!?Eohrr@$.rrjDtruE+7li.,/1&i771$eiC*ARTo*AQm["W]>truEi[rrjDts8O)olMh#.
+1&q7o1$eiC*ARTo*AQm["W]>truEiWrrF,pMuWdbJ,~>
+rk@b!!Zf%jp\t6Po)Aq8^VBgK^E"?^rs'RZ^]4>K*?FPI#9CRos8ThS*UWk3*P]Ahs1]QpmJdD3
+^VBgK^E"?]rs'RZ^]4>K*?FPI#9CRos8ThS*UWk3*P]Ahs1]Qpkl1_!*?C+=rk<m~>
+rjM1n!gGDop\t6#o)ArZ0er_.0pIpirs+cC1&q8.Pa(S8#F$qts8Og<PjSJUPVFoms"Tb&mJdEU
+0er_.0pIphrs+cC1&q8.Pa(S8#F$qts8Og<PjSJUPVFoms"Tb&kl1]=Pa%.,rjI=~>
+rjM1n!Za!Mp\t54o)Aq80er_.0c_;%rs'Q!1&q8.*?FPI#9>NRs8Oeo*UWk3*AK;Ks"PN7mJdD3
+0er_.0c_;$rs'Q!1&q8.*?FPI#9>NRs8Oeo*UWk3*AK;Ks"PN7kl1]=*?C+=rjI=~>
+rk@b!!?JrKrrD$LrrF.TqYpR:^[V7(*P_IN!?JrDrrF.Tqu6[;^[M1'*P_LO!?JrDrrF.Tqu6[;
+^[M1'*P_IN!?JrErrF.TqYpR:^[V7(*P_IN!?Jr<rrF.TNrT*mJ,~>
+rjM1n!L,>4rrBFtrrJ?=qYpS\1%>2DPVN%7!L,>-rrJ?=qu6\]1%5,CPVN(8!L,>-rrJ?=qu6\]
+1%5,CPVN%7!L,>.rrJ?=qYpS\1%>2DPVN%7!L,>%rrJ?=NrT*eJ,~>
+rjM1n!?Eogrr@$0rrF,pqYpR:1%>2D*AREj!?Eo`rrF,pqu6[;1%5,C*ARHk!?Eo`rrF,pqu6[;
+1%5,C*AREj!?EoarrF,pqYpR:1%>2D*AREj!?EoXrrF,pNrT*eJ,~>
+rk@b!s1e:-!9*SM!Zf%jqYpW3*?F_N!Zf%jqYpW3*?F\M!Zf%jqu6`4*?F\M!Zf%jqu6`4*?F\M
+!Zf%jqu6`4*?F\M!Zf%jqYpT2*V'.2*P]AcrrKkTnc&Y2^VBXF!P]Z<rrKkTNrT*mJ,~>
+rjM1ns"X6I!4;Cu!gGDoqYpUOPa(b=!gGDoqYpUOPa(_<!gGDoqu6^PPa(_<!gGDoqu6^PPa(_<
+!gGDoqu6^PPa(_<!gGDoqYpRNPk"bTPVFohrrFj=nc&ZT0erP)!ATi%rrFj=NrT*eJ,~>
+rjM1ns"X6I!-%T1!Za!MqYpUO*?F_N!Za!MqYpUO*?F\M!Za!Mqu6^P*?F\M!Za!Mqu6^P*?F\M
+!Za!Mqu6^P*?F\M!Za!MqYpRN*V'.2*AK;FrrFhpnc&Y20erP)!APVXrrFhpNrT*eJ,~>
+rk@b!!?JrKrrD$MrrF.TpAb.5!5J4,!?JrKs8O)>^\.U-*P_=JruD*Sp&>%5^\7^-*<<kIrrF.T
+pAb.5!5J4,!?JrKrrF.To`"q4^\7[.*P_7H!?JrKrrF.TkPkQ'^QAKp^46~>
+rjM1n!L,>4rrBFurrJ?=pAb/W!&=0H!L,>4s8S;`1%kPIPVMn3s-*L<p&>&W1%tYIPQ3H2rrJ?=
+pAb/W!&=0H!L,>4rrJ?=o`"rV1%tVJPVMh1!L,>4rrJ?=kPkRI0p)G7[X\~>
+rjM1n!?Eogrr@$1rrF,ppAb.5!&=0H!?Eogs8O)>1%kPI*AR9fruD(op&>%51%tYI*<7herrF,p
+pAb.5!&=0H!?EogrrF,po`"q41%tVJ*AR3d!?EogrrF,pkPkQ'0p)G7[X\~>
+rk@b!s1e:-!9*SMs1e7,!P]ZJs8Tk,rrKkTp&G',p&>'-*VKI4^\.U-^E*%J!Zf%jp&>'-*VTL7
+*P]A_rrKkTp&>(6^VBLB!P]ZJrrO4U^\7[.^E)M;!P]Y:s8K`_~>
+rjM1ns"X6I!4;Cus"X3H!ATi3s8OhHrrFj=p&G%Hp&>%IPkG(V1%kPI0pMD3!gGDop&>%IPkP+Y
+PVFodrrFj=p&>)X0erD%!ATi3rrSE>1%tVJ0pLl$!ATh#s8KHW~>
+rjM1ns"X6I!-%T1s"X3H!APVfs8OhHrrFhpp&G%Hp&>%I*VKI41%kPI0cfuf!Za!Mp&>%I*VTL7
+*AK;BrrFhpp&>(60erD%!APVfrrO2q1%tVJ0cfHW!APUVs8KHW~>
+rk@e"!$1_3!9*SM!$1Y1ruLn7!$1V0ruLn7!$1V0!$1h6!$1V0!$1h6!$1V0!$1h6!$1Y1!$1e5
+!$1Y1!$1h6!$1V0!$18&!$.1$rk<m~>
+rjM4o!0m-U!4;Cu!0m'Ss-3<Y!0m$Rs-3<Y!0m$R!0m6X!0m$R!0m6X!0m$R!0m6X!0m'S!0m3W
+!0m'S!0m6X!0m$R!0l[H!0iTFrjI=~>
+rjM4o!$1_3!-%T1!$1Y1ruLn7!$1V0ruLn7!$1V0!$1h6!$1V0!$1h6!$1V0!$1h6!$1Y1!$1e5
+!$1Y1!$1h6!$1V0!$18&!$.1$rjI=~>
+rk@e"!?JrJrrD$MrrF.Tnc&V1^\[s2*P_+D!?JrOrrF.Tnc&V1^\Rm1*P_.E!?JrOrrF.TnG`M0
+^\[s2*P_.E!?JrNrrF.Tnc&V1^\[s2*P_+D!?Jr=rrF.TP5kNqJ,~>
+rjM4o!L,>3rrBFurrJ?=nc&WS1&CnNPVM\-!L,>8rrJ?=nc&WS1&:hMPVM_.!L,>8rrJ?=nG`NR
+1&CnNPVM_.!L,>7rrJ?=nc&WS1&CnNPVM\-!L,>&rrJ?=P5kNiJ,~>
+rjM4o!?Eofrr@$1rrF,pnc&V11&CnN*AR'`!?EokrrF,pnc&V11&:hM*AR*a!?EokrrF,pnG`M0
+1&CnN*AR*a!?EojrrF,pnc&V11&CnN*AR'`!?EoYrrF,pP5kNiJ,~>
+rk@e"s1e7,!9*SMs1e+(!P]ZOs8Tk'rrKkTqZ$T1nc&X)*W#d;*P]AZrrKkTqZ$T1nG`O(*W,j<
+*P]AZrrKkTqYpU;^VB==!P]ZPrrO4U^[V7(^E)P<!P]Y<s8K`_~>
+rjM4os"X3H!4;Cus"X'D!ATi8s8OhCrrFj=qZ$RMnc&VEPktC]PVFo_rrFj=qZ$RMnG`MDPl(I^
+PVFo_rrFj=qYpV]0er4u!ATi9rrSE>1%>2D0pLo%!ATh%s8KHW~>
+rjM4os"X3H!-%T1s"X'D!APVks8OhCrrFhpqZ$RMnc&VE*W#d;*AK;=rrFhpqZ$RMnG`MD*W,j<
+*AK;=rrFhpqYpU;0er4u!APVlrrO2q1%>2D0cfKX!APUXs8KHW~>
+rk@e"!$1_3!9*VN!$1J,ruM(<!$1G+ruM(<!$1J,ruM%;!$1J,ruM(<!$1G+!$2";!$1J,!$1t:
+!$1J,!$2";!$1J,!$15%!$.:'rk<m~>
+rjM4o!0m-U!4;G!!0lmNs-3K^!0ljMs-3K^!0lmNs-3H]!0lmNs-3K^!0ljM!0mE]!0lmN!0mB\
+!0lmN!0mE]!0lmN!0lXG!0i]IrjI=~>
+rjM4o!$1_3!-%W2!$1J,ruM(<!$1G+ruM(<!$1J,ruM%;!$1J,ruM(<!$1G+!$2";!$1J,!$1t:
+!$1J,!$2";!$1J,!$15%!$.:'rjI=~>
+rk@e"!?JrJrrD$NrrF.Tm/I50^]4<S^[(n'*P_XS*P^t@"WbAXruJl?rrjFXs8O+Sm/I50^]4<S
+^[1t$*P_UR!?JrArrjFXs8O+Sm/I),^ZYUt*P[m>rk<m~>
+rjM4o!L,>3rrBG!rrJ?=m/I6R1&q9<1$eiCPVN4<PVMP)"dCbAs-,8(rrnWAs8S<<m/I6R1&q9<
+1$no@PVN1;!L,>*rrnWAs8S<<m/I*N1$AQ;PVJI'rjI=~>
+rjM4o!?Eofrr@$2rrF,pm/I501&q7o1$eiC*ARTo*AQp\"W]>truEi[rrjDts8O)om/I501&q7o
+1$no@*ARQn!?Eo]rrjDts8O)om/I),1$AQ;*ANiZrjI=~>
+rk@e"s1e7,!9*VNs1dq#"hu&us1c>7rrp.Xs8TjKm/I7(*WQ/S^[(n'^E*=p^VB.8"hu)X*P]AU
+rs$4Ys8O+S^[1t(^E*=p^VB.8!P]Z<rrKkTQ2gitJ,~>
+rjM4os"X3H!4;G!s"Wm?"Yl7+s"Q7orrk-As8Of.m/I5DPlLb<1$eiC0pM^&0er%p"Yl8APVFoZ
+rrt3Bs8S<<1$noD0pM^&0er%p!ATi%rrFj=Q2gilJ,~>
+rjM4os"X3H!-%W2s"Wm?"Yh#<s"Q7orrk+ts8Of.m/I5D*WQ-o1$eiC0cg970er%p"Yh%t*AK;8
+rrt1us8O)o1$noD0cg970er%p!APVXrrFhpQ2gilJ,~>
+rk@e"!$1_3!9*VN!$1;'ruL>'ruL>'ruL;&ruL>'ruL>'ruL;&ruL>'!$18&!$.@)rk<m~>
+rjM4o!0m-U!4;G!!0l^Is-2aIs-2aIs-2^Hs-2aIs-2aIs-2^Hs-2aI!0l[H!0icKrjI=~>
+rjM4o!$1_3!-%W2!$1;'ruL>'ruL>'ruL;&ruL>'ruL>'ruL;&ruL>'!$18&!$.@)rjI=~>
+rk@e"!?JrJrrD$NrrF.Tkl1])^VB%5!Zf%jl2Lf*^VB%5!Zf%jl2Lf*^VB%5"!,,s^Zkb"*P]AQ
+rrF.Tkl1Z(^R,!"^46~>
+rjM4o!L,>3rrBG!rrJ?=kl1^K0eqqm!gGDol2LgL0eqqm!gGDol2LgL0eqqm"-bO)1$S]>PVFoV
+rrJ?=kl1[J0phq>[X\~>
+rjM4o!?Eofrr@$2rrF,pkl1])0eqqm!Za!Ml2Lf*0eqqm!Za!Ml2Lf*0eqqm"!'*:1$S]>*AK;4
+rrF,pkl1Z(0phq>[X\~>
+rk@e"s1e7,!9*VNs1ddts1\OSl2Udu!$1>(s1\OSl2Udu!$1>(s1\OSlMgi)rkAFRlMgr,^V:fQ
+rrKkTkl1[u*LHg*^46~>
+rjM4os"X3H!4;G!s"Wa;s"OM<l2Uc<!0laJs"OM<l2Uc<!0laJs"OM<lMgjKr\4D;lMgsN0enpV
+rrFj=kl1Z<PaDFL[X\~>
+rjM4os"X3H!-%W2s"Wa;s"OKol2Uc<!$1>(s"OKol2Uc<!$1>(s"OKolMgi)r\4BnlMgr,0ej^4
+rrFhpkl1Z<*LHg*[X\~>
+rk@e"!$1_3!9*YO!$18&!$2(=!$1D*!$2(=!$1D*!$2(=!$1D*!$2(=!$1D*!$2(=!$1D*!$2%<
+!$1G+!$2%<!$1;'!$18&!$.F+rk<m~>
+rjM4o!0m-U!4;J"!0l[H!0mK_!0lgL!0mK_!0lgL!0mK_!0lgL!0mK_!0lgL!0mK_!0lgL!0mH^
+!0ljM!0mH^!0l^I!0l[H!0iiMrjI=~>
+rjM4o!$1_3!-%Z3!$18&!$2(=!$1D*!$2(=!$1D*!$2(=!$1D*!$2(=!$1D*!$2(=!$1D*!$2%<
+!$1G+!$2%<!$1;'!$18&!$.F+rjI=~>
+rk@e"!$1_3!9*YO!$18&!$2%<!$1G+!$2%<!$1G+!$2%<!$1G+!$2%<!$1G+!$2%<!$1J,!$2";
+!$1G+!$2%<!$18&!$18&!$.I,rk<m~>
+rjM4o!0m-U!4;J"!0l[H!0mH^!0ljM!0mH^!0ljM!0mH^!0ljM!0mH^!0ljM!0mH^!0lmN!0mE]
+!0ljM!0mH^!0l[H!0l[H!0ilNrjI=~>
+rjM4o!$1_3!-%Z3!$18&!$2%<!$1G+!$2%<!$1G+!$2%<!$1G+!$2%<!$1G+!$2%<!$1J,!$2";
+!$1G+!$2%<!$18&!$18&!$.I,rjI=~>
+rk@e"!?JrJrrD$OrrF.Tkl1Z(^]"05*P_%B!?JrRrrF.Tmf*;.^]"05*P_%B!?JrRrrF.Tmf*;.
+^]"05*P_(C!?JrQrrF.Tn,ED/^\n*4*P^k=!?Jr=rrF.TRK*9#J,~>
+rjM4o!L,>3rrBG"rrJ?=kl1[J1&_+QPVMV+!L,>;rrJ?=mf*<P1&_+QPVMV+!L,>;rrJ?=mf*<P
+1&_+QPVMY,!L,>:rrJ?=n,EEQ1&V%PPVMG&!L,>&rrJ?=RK*8pJ,~>
+rjM4o!?Eofrr@$3rrF,pkl1Z(1&_+Q*AR!^!?EonrrF,pmf*;.1&_+Q*AR!^!?EonrrF,pmf*;.
+1&_+Q*AR$_!?EomrrF,pn,ED/1&V%P*AQgY!?EoYrrF,pRK*8pJ,~>
+rk@e"s1e7,!9*YOs1ddts1eO4!P]ZCs8Tk4rrKkTmf3=%rVlo5*Uj"0*P]AfrrKkTn,EG0^VBaI
+!P]ZErrO4U^\n*4^E)hD!Zf%jr;Qf4*U3S)^E)P<!P]YCs8K`_~>
+rjM4os"X3H!4;J"s"Wa;s"XKP!ATi,s8OhPrrFj=mf3;ArVlmQPjeVRPVFokrrFj=n,EHR0erY,
+!ATi.rrSE>1&V%P0pM2-!gGDor;QdPPj/2K0pLo%!ATh,s8KHW~>
+rjM4os"X3H!-%Z3s"Wa;s"XKP!APV_s8OhPrrFhpmf3;ArVlmQ*Uj"0*AK;IrrFhpn,EG00erY,
+!APVarrO2q1&V%P0cfc`!Za!Mr;QdP*U3S)0cfKX!APU_s8KHW~>
+rk@e"!$1_3!9*YO!$18&!$1q9ruLY0!$1n8ruLY0!$1n8!$1S/!$1n8!$1S/!$1n8!$1V0!$1k7
+!$1V0!$1n8!$18&!$18&!$.O.rk<m~>
+rjM4o!0m-U!4;J"!0l[H!0m?[s-3'R!0m<Zs-3'R!0m<Z!0m!Q!0m<Z!0m!Q!0m<Z!0m$R!0m9Y
+!0m$R!0m<Z!0l[H!0l[H!0irPrjI=~>
+rjM4o!$1_3!-%Z3!$18&!$1q9ruLY0!$1n8ruLY0!$1n8!$1S/!$1n8!$1S/!$1n8!$1V0!$1k7
+!$1V0!$1n8!$18&!$18&!$.O.rjI=~>
+rk@e"!$1_3!9*YO!$18&!$1k7!$1Y1!$1h6!$1Y1!$1k7!$1Y1!$1h6!$1Y1!$1k7!$1Y1!$1h6
+!$1Y1!$1h6!$1;'!$18&!$.O.rk<m~>
+rjM4o!0m-U!4;J"!0l[H!0m9Y!0m'S!0m6X!0m'S!0m9Y!0m'S!0m6X!0m'S!0m9Y!0m'S!0m6X
+!0m'S!0m6X!0l^I!0l[H!0irPrjI=~>
+rjM4o!$1_3!-%Z3!$18&!$1k7!$1Y1!$1h6!$1Y1!$1k7!$1Y1!$1h6!$1Y1!$1k7!$1Y1!$1h6
+!$1Y1!$1h6!$1;'!$18&!$.O.rjI=~>
+rk@e"!?JrJrrD$OrrF.Tkl1Z(^\Ig0*P_7H!?JrLrrF.To`"q4^\Ig0*P_7H!?JrLrrF.To`"q4
+^\Ig0*P_7H!?JrLrrF.To`"q4^\Ig0*P^h<!?Jr=rrF.TSH&T&J,~>
+rjM4o!L,>3rrBG"rrJ?=kl1[J1&1bLPVMh1!L,>5rrJ?=o`"rV1&1bLPVMh1!L,>5rrJ?=o`"rV
+1&1bLPVMh1!L,>5rrJ?=o`"rV1&1bLPVMD%!L,>&rrJ?=SH&SsJ,~>
+rjM4o!?Eofrr@$3rrF,pkl1Z(1&1bL*AR3d!?EohrrF,po`"q41&1bL*AR3d!?EohrrF,po`"q4
+1&1bL*AR3d!?EohrrF,po`"q41&1bL*AQdX!?EoYrrF,pSH&SsJ,~>
+rk@e"s1e7,!9*YOs1ddts1e@/!P]ZIs8Tk.rrKkTo`+s+q#:B0*VBC3^\@a/^E*"I!Zf%jq#:B0
+*VBC3^\@a/^E*"I!Zf%jq#:B0*U*M(^E)P<!P]YFs8K`_~>
+rjM4os"X3H!4;J"s"Wa;s"X<K!ATi2s8OhJrrFj=o`+qGq#:@LPk>"U1&(\K0pMA2!gGDoq#:@L
+Pk>"U1&(\K0pMA2!gGDoq#:@LPj&,J0pLo%!ATh/s8KHW~>
+rjM4os"X3H!-%Z3s"Wa;s"X<K!APVes8OhJrrFhpo`+qGq#:@L*VBC31&(\K0cfre!Za!Mq#:@L
+*VBC31&(\K0cfre!Za!Mq#:@L*U*M(0cfKX!APUbs8KHW~>
+rk@e"!$1_3!9*YO!$1;'!$1_3ruLh5!$1_3!$1e5!$1_3ruLk6!$1\2!$1e5!$1_3!$1e5!$1\2
+!$1e5!$1_3!$18&!$1;'!$.U0rk<m~>
+rjM4o!0m-U!4;J"!0l^I!0m-Us-36W!0m-U!0m3W!0m-Us-39X!0m*T!0m3W!0m-U!0m3W!0m*T
+!0m3W!0m-U!0l[H!0l^I!0j#RrjI=~>
+rjM4o!$1_3!-%Z3!$1;'!$1_3ruLh5!$1_3!$1e5!$1_3ruLk6!$1\2!$1e5!$1_3!$1e5!$1\2
+!$1e5!$1_3!$18&!$1;'!$.U0rjI=~>
+rk@e"!$1_3!9*YO!$1;'!$1Y1!$1h6!$1\2!$1h6!$1Y1!$1k7!$1Y1!$1k7!$1Y1!$1h6!$1\2
+!$1h6!$1\2!$18&!$18&!$.X1rk<m~>
+rjM4o!0m-U!4;J"!0l^I!0m'S!0m6X!0m*T!0m6X!0m'S!0m9Y!0m'S!0m9Y!0m'S!0m6X!0m*T
+!0m6X!0m*T!0l[H!0l[H!0j&SrjI=~>
+rjM4o!$1_3!-%Z3!$1;'!$1Y1!$1h6!$1\2!$1h6!$1Y1!$1k7!$1Y1!$1k7!$1Y1!$1h6!$1\2
+!$1h6!$1\2!$18&!$18&!$.X1rjI=~>
+rk@e"!?JrJrrD$OrrF.Tl2Lc)^[hC**P_FM!?JrHrrF.Tq>UI9^[hC**P_IN!?JrGrrF.TqYpR:
+^[hC**P_FM!?JrHrrF.Tq>UI9^[qI+*P^h<!?Jr>rrF.TT)\f(J,~>
+rjM4o!L,>3rrBG"rrJ?=l2LdK1%P>FPVN"6!L,>1rrJ?=q>UJ[1%P>FPVN%7!L,>0rrJ?=qYpS\
+1%P>FPVN"6!L,>1rrJ?=q>UJ[1%YDGPVMD%!L,>'rrJ?=T)\euJ,~>
+rjM4o!?Eofrr@$3rrF,pl2Lc)1%P>F*ARBi!?EodrrF,pq>UI91%P>F*AREj!?EocrrF,pqYpR:
+1%P>F*ARBi!?EodrrF,pq>UI91%YDG*AQdX!?EoZrrF,pT)\euJ,~>
+rk@e"s1e7,!9*YOs1dgus1e.)!P]ZNs8Tk*rrKkTq>^K0o)Aa**W#g9^[hC*^E*1Ns1e.)!P]ZN
+s8Tk*rrKkTqYpU;^VBC?!P]Z=rrF.Tl2Lc)^RkK)^46~>
+rjM4os"X3H!4;J"s"Wd<s"X*E!ATi7s8OhFrrFj=q>^ILo)A_FPktF[1%P>F0pMP7s"X*E!ATi7
+s8OhFrrFj=qYpV]0er;"!ATi&rrJ?=l2LdK0qSFE[X\~>
+rjM4os"X3H!-%Z3s"Wd<s"X*E!APVjs8OhFrrFhpq>^ILo)A_F*W#g91%P>F0cg,js"X*E!APVj
+s8OhFrrFhpqYpU;0er;"!APVYrrF,pl2Lc)0qSFE[X\~>
+rk@e"!$1_3!9*YO!$1;'!$1P.!$1q9!$1S/!$1q9!$1P.!$1t:!$1P.!$1t:!$1P.!$1t:!$1P.
+!$1t:!$1S/!$18&!$1;'!$.[2rk<m~>
+rjM4o!0m-U!4;J"!0l^I!0lsP!0m?[!0m!Q!0m?[!0lsP!0mB\!0lsP!0mB\!0lsP!0mB\!0lsP
+!0mB\!0m!Q!0l[H!0l^I!0j)TrjI=~>
+rjM4o!$1_3!-%Z3!$1;'!$1P.!$1q9!$1S/!$1q9!$1P.!$1t:!$1P.!$1t:!$1P.!$1t:!$1P.
+!$1t:!$1S/!$18&!$1;'!$.[2rjI=~>
+rk@b!!$1b4!9*YO!$1;'!$1M-!$2";!$1M-!$2";!$1M-!$2";!$1M-!$2";!$1M-!$1t:!$1P.
+!$2";!$1M-!$1;'!$1;'!$.[2rk<m~>
+rjM1n!0m0V!4;J"!0l^I!0lpO!0mE]!0lpO!0mE]!0lpO!0mE]!0lpO!0mE]!0lpO!0mB\!0lsP
+!0mE]!0lpO!0l^I!0l^I!0j)TrjI=~>
+rjM1n!$1b4!-%Z3!$1;'!$1M-!$2";!$1M-!$2";!$1M-!$2";!$1M-!$2";!$1M-!$1t:!$1P.
+!$2";!$1M-!$1;'!$1;'!$.[2rjI=~>
+rk@b!!$1b4!9*YO!$1;'!$1J,!$2%<!$1J,!$2%<!$1J,!$2%<!$1J,!$2%<!$1J,!$2%<!$1J,
+!$2%<!$1M-!$18&!$1;'!$.^3rk<m~>
+rjM1n!0m0V!4;J"!0l^I!0lmN!0mH^!0lmN!0mH^!0lmN!0mH^!0lmN!0mH^!0lmN!0mH^!0lmN
+!0mH^!0lpO!0l[H!0l^I!0j,UrjI=~>
+rjM1n!$1b4!-%Z3!$1;'!$1J,!$2%<!$1J,!$2%<!$1J,!$2%<!$1J,!$2%<!$1J,!$2%<!$1J,
+!$2%<!$1M-!$18&!$1;'!$.^3rjI=~>
+rk@b!!?JrKrrD$OrrF.Tl2Lc)^[;%)*P_XS*P_"A"WbAXruJlArrjFXs8O+SmJd>1^]4<S^[;%)
+*P_XS*P_"A"<G8W*P_"A!?Jr>rrF.Tl2Lc)^S(W+^46~>
+rjM1n!L,>4rrBG"rrJ?=l2LdK1%"uEPVN4<PVMS*"dCbAs-,8*rrnWAs8S<<mJd?S1&q9<1%"uE
+PVN4<PVMS*"I(Y@PVMS*!L,>'rrJ?=l2LdK0qeRG[X\~>
+rjM1n!?Eogrr@$3rrF,pl2Lc)1%"uE*ARTo*AQs]"W]>truEi]rrjDts8O)omJd>11&q7o1%"uE
+*ARTo*AQs]"<B5s*AQs]!?EoZrrF,pl2Lc)0qeRG[X\~>
+rk@b!s1e:-!9*YOs1dgus1dt$"hu&us1c>9rrp.Xs8TjKmJd@)*WQ/S^[;%)^E*=p^VB19"hu)X
+*P]AVrrg(W*P]AVrrKkTl2Le!*U3S)^E'!Irk<m~>
+rjM1ns"X6I!4;J"s"Wd<s"Wp@"Yl7+s"Q7qrrk-As8Of.mJd>EPlLb<1%"uE0pM^&0er(q"Yl8A
+PVFo[rrb'@PVFo[rrFj=l2Lc=Pj/2K0pJ@2rjI=~>
+rjM1ns"X6I!-%Z3s"Wd<s"Wp@"Yh#<s"Q7qrrk+ts8Of.mJd>E*WQ-o1%"uE0cg970er(q"Yh%t
+*AK;9rrb%s*AK;9rrFhpl2Lc=*U3S)0ccqerjI=~>
+rk@b!!$1b4!9*VN!$1>(!$1>(ruLD)ruLA(ruLA(ruLA(ruLA(!$1>(!$1;'!$1>(!$.a4rk<m~>
+rjM1n!0m0V!4;G!!0laJ!0laJs-2gKs-2dJs-2dJs-2dJs-2dJ!0laJ!0l^I!0laJ!0j/VrjI=~>
+rjM1n!$1b4!-%W2!$1>(!$1>(ruLD)ruLA(ruLA(ruLA(ruLA(!$1>(!$1;'!$1>(!$.a4rjI=~>
+rk@b!!$1b4!9*VN!$1>(!$1;'ruLD)ruLA(ruLD)ruLA(ruLD)ruL>'!$1>(!$1;'!$.d5rk<m~>
+rjM1n!0m0V!4;G!!0laJ!0l^Is-2gKs-2dJs-2gKs-2dJs-2gKs-2aI!0laJ!0l^I!0j2WrjI=~>
+rjM1n!$1b4!-%W2!$1>(!$1;'ruLD)ruLA(ruLD)ruLA(ruLD)ruL>'!$1>(!$1;'!$.d5rjI=~>
+rk@b!!?JrKrrD$NrrF.TlMgl*^Zkb#*PWW0m/I/.^E()TrrX:V*P^t@"!,,s^[(n%*PWW0m/I/.
+^E()RrrF.TlMgl*^Zth"*P\?Krk<m~>
+rjM1n!L,>4rrBG!rrJ?=lMgmL1$S]?PVJCWm/I0P0pFEYrr\K?PVMP)"-bO)1$eiAPVJCWm/I0P
+0pFEWrrJ?=lMgmL1$\c>PVJp4rjI=~>
+rjM1n!?Eogrr@$2rrF,plMgl*1$S]?*AJQhm/I/.0c`"7rrX8r*AQp\"!'*:1$eiA*AJQhm/I/.
+0c`"5rrF,plMgl*1$\c>*AO;grjI=~>
+rk@b!s1e:-!9*VNs1dk!s1dgurkAFRm/R("!$1D*rkAFRm/R("!$1D*rkAFRm/R("!$1>(!P]Z?
+rrKkTlMgn"*MWT5^46~>
+rjM1ns"X6I!4;G!s"Wg=s"Wd<r\4D;m/R&>!0lgLr\4D;m/R&>!0lgLr\4D;m/R&>!0laJ!ATi(
+rrFj=lMgl>PbS3W[X\~>
+rjM1ns"X6I!-%W2s"Wg=s"Wd<r\4Bnm/R&>!$1D*r\4Bnm/R&>!$1D*r\4Bnm/R&>!$1>(!APV[
+rrFhplMgl>*MWT5[X\~>
+rk@b!!$1b4!9*VN!$1>(!$1;'!$2(=!$1J,!$2(=!$1G+!$2(=!$1J,!$2(=!$1J,!$2(=!$1J,
+!$2%<!$1>(!$1>(!$1>(!$.g6rk<m~>
+rjM1n!0m0V!4;G!!0laJ!0l^I!0mK_!0lmN!0mK_!0ljM!0mK_!0lmN!0mK_!0lmN!0mK_!0lmN
+!0mH^!0laJ!0laJ!0laJ!0j5XrjI=~>
+rjM1n!$1b4!-%W2!$1>(!$1;'!$2(=!$1J,!$2(=!$1G+!$2(=!$1J,!$2(=!$1J,!$2(=!$1J,
+!$2%<!$1>(!$1>(!$1>(!$.g6rjI=~>
+rk@^u!$1e5!9*VN!$1>(!$1>(!$2";!$1M-!$2%<!$1M-!$2%<!$1M-!$2%<!$1J,!$2%<!$1M-
+!$2%<!$1;'!$1>(!$1>(!$.j7rk<m~>
+rjM.m!0m3W!4;G!!0laJ!0laJ!0mE]!0lpO!0mH^!0lpO!0mH^!0lpO!0mH^!0lmN!0mH^!0lpO
+!0mH^!0l^I!0laJ!0laJ!0j8YrjI=~>
+rjM.m!$1e5!-%W2!$1>(!$1>(!$2";!$1M-!$2%<!$1M-!$2%<!$1M-!$2%<!$1J,!$2%<!$1M-
+!$2%<!$1;'!$1>(!$1>(!$.j7rjI=~>
+rk@^u!$1e5!9*VN!$1>(!$1>(!$1t:!$1P.!$2";!$1P.!$2";!$1P.!$2";!$1P.!$2";!$1P.
+!$1t:!$1>(!$1>(!$1>(!$.j7rk<m~>
+rjM.m!0m3W!4;G!!0laJ!0laJ!0mB\!0lsP!0mE]!0lsP!0mE]!0lsP!0mE]!0lsP!0mE]!0lsP
+!0mB\!0laJ!0laJ!0laJ!0j8YrjI=~>
+rjM.m!$1e5!-%W2!$1>(!$1>(!$1t:!$1P.!$2";!$1P.!$2";!$1P.!$2";!$1P.!$2";!$1P.
+!$1t:!$1>(!$1>(!$1>(!$.j7rjI=~>
+rk@^u!?JrLrrD$NrrF.TlMgl*^Zth"*P_LO!?JrFrrF.Tr;Qd<^[_=)*P_OP!?JrFrrF.Tr;Qd<
+^[_=)*P_OP!?JrFrrF.Tqu6[;^Zth"*P^n>!?Jr?rrF.TV>pP/J,~>
+rjM.m!L,>5rrBG!rrJ?=lMgmL1$\c>PVN(8!L,>/rrJ?=r;Qe^1%G8EPVN+9!L,>/rrJ?=r;Qe^
+1%G8EPVN+9!L,>/rrJ?=qu6\]1$\c>PVMJ'!L,>(rrJ?=V>pP'J,~>
+rjM.m!?Eohrr@$2rrF,plMgl*1$\c>*ARHk!?EobrrF,pr;Qd<1%G8E*ARKl!?EobrrF,pr;Qd<
+1%G8E*ARKl!?EobrrF,pqu6[;1$\c>*AQjZ!?Eo[rrF,pV>pP'J,~>
+rk@^us1e=.!9*VNs1dk!s1dk!s1eI2!P]ZFs8Tk3rrKkTnc/X(r;Qf4*V'10^\n*4^E)kEs1eL3
+!P]ZFs8Tk2rrKkTlMgn"*U<Y**P^n>!?JqOs8K`_~>
+rjM.ms"X9J!4;G!s"Wg=s"Wg=s"XEN!ATi/s8OhOrrFj=nc/VDr;QdPPk"eR1&V%P0pM5.s"XHO
+!ATi/s8OhNrrFj=lMgl>Pj88LPVMJ'!L,=8s8KHW~>
+rjM.ms"X9J!-%W2s"Wg=s"Wg=s"XEN!APVbs8OhOrrFhpnc/VDr;QdP*V'101&V%P0cffas"XHO
+!APVbs8OhNrrFhplMgl>*U<Y**AQjZ!?Enks8KHW~>
+rk@^u!$1e5!9*VN!$1>(!$1>(!$1k7!$1Y1!$1n8!$1Y1!$1n8!$1\2!$1k7!$1\2!$1n8!$1Y1
+!$1k7!$1>(!$1>(!$1>(!$.p9rk<m~>
+rjM.m!0m3W!4;G!!0laJ!0laJ!0m9Y!0m'S!0m<Z!0m'S!0m<Z!0m*T!0m9Y!0m*T!0m<Z!0m'S
+!0m9Y!0laJ!0laJ!0laJ!0j>[rjI=~>
+rjM.m!$1e5!-%W2!$1>(!$1>(!$1k7!$1Y1!$1n8!$1Y1!$1n8!$1\2!$1k7!$1\2!$1n8!$1Y1
+!$1k7!$1>(!$1>(!$1>(!$.p9rjI=~>
+rk@[t!$1h6!9*SM!$1>(!$1A)!$1h6!$1_3!$1h6!$1_3!$1h6!$1_3!$1h6!$1_3!$1k7!$1\2
+!$1h6!$1>(!$1A)!$1>(!$.p9rk<m~>
+rjM+l!0m6X!4;Cu!0laJ!0ldK!0m6X!0m-U!0m6X!0m-U!0m6X!0m-U!0m6X!0m-U!0m9Y!0m*T
+!0m6X!0laJ!0ldK!0laJ!0j>[rjI=~>
+rjM+l!$1h6!-%T1!$1>(!$1A)!$1h6!$1_3!$1h6!$1_3!$1h6!$1_3!$1h6!$1_3!$1k7!$1\2
+!$1h6!$1>(!$1A)!$1>(!$.p9rjI=~>
+rk@[t!$1h6!9*SM!$1>(!$1A)!$1e5!$1b4!$1e5!$1b4!$1h6!$1_3!$1h6!$1_3!$1h6!$1_3
+!$1h6!$1>(!$1A)!$1>(!$.p9rk<m~>
+rjM+l!0m6X!4;Cu!0laJ!0ldK!0m3W!0m0V!0m3W!0m0V!0m6X!0m-U!0m6X!0m-U!0m6X!0m-U
+!0m6X!0laJ!0ldK!0laJ!0j>[rjI=~>
+rjM+l!$1h6!-%T1!$1>(!$1A)!$1e5!$1b4!$1e5!$1b4!$1h6!$1_3!$1h6!$1_3!$1h6!$1_3
+!$1h6!$1>(!$1A)!$1>(!$.p9rjI=~>
+rk@[t!$1h6!9*SM!$1>(!$1A)!$1b4!$1e5!$1b4!$1e5!$1e5!$1e5!$1b4!$1e5!$1e5!$1b4
+!$1b4!$1>(!$1A)!$1>(!$.s:rk<m~>
+rjM+l!0m6X!4;Cu!0laJ!0ldK!0m0V!0m3W!0m0V!0m3W!0m3W!0m3W!0m0V!0m3W!0m3W!0m0V
+!0m0V!0laJ!0ldK!0laJ!0jA\rjI=~>
+rjM+l!$1h6!-%T1!$1>(!$1A)!$1b4!$1e5!$1b4!$1e5!$1e5!$1e5!$1b4!$1e5!$1e5!$1b4
+!$1b4!$1>(!$1A)!$1>(!$.s:rjI=~>
+rk@[t!?JrMrrD$MrrF.TlMgl*^[(n#*P_:I!?JrMrrF.Tp&>%5^\Ig0*P_=J!?JrMrrF.Tp&>%5
+^\Ig0*P_=J!?JrLrrF.TpAY.6^Zth"*P^q?!?Jr?rrF.TVuQb1J,~>
+rjM+l!L,>6rrBFurrJ?=lMgmL1$ei?PVMk2!L,>6rrJ?=p&>&W1&1bLPVMn3!L,>6rrJ?=p&>&W
+1&1bLPVMn3!L,>5rrJ?=pAY/X1$\c>PVMM(!L,>(rrJ?=VuQb)J,~>
+rjM+l!?Eoirr@$1rrF,plMgl*1$ei?*AR6e!?EoirrF,pp&>%51&1bL*AR9f!?EoirrF,pp&>%5
+1&1bL*AR9f!?EohrrF,ppAY.61$\c>*AQm[!?Eo[rrF,pVuQb)J,~>
+rk@[ts1e@/!9*SMs1dk!s1dn"s1e7,!P]ZMs8Tk,rrKkTq#CB/pAY0.*Vf[7^\.U-^E*+Ls1e:-
+!P]ZMrrO4U^\7[.^E)V>!P]Z@rrKkTlMgl*^Sh,2^46~>
+rjM+ls"X<K!4;Cus"Wg=s"Wj>s"X3H!ATi6s8OhHrrFj=q#C@KpAY.JPkb:Y1%kPI0pMJ5s"X6I
+!ATi6rrSE>1%tVJ0pLu'!ATi)rrFj=lMgmL0rP'N[X\~>
+rjM+ls"X<K!-%T1s"Wg=s"Wj>s"X3H!APVis8OhHrrFhpq#C@KpAY.J*Vf[71%kPI0cg&hs"X6I
+!APVirrO2q1%tVJ0cfQZ!APV\rrFhplMgl*0rP'N[X\~>
+rk@Xs!$1k7!9*SM!$1>(!$1A)!$1Y1!$1n8!$1Y1!$1n8!$1\2!$1n8!$1Y1!$1q9!$1Y1!$1n8
+!$1Y1!$1A)!$1A)!$1>(!$/!;rk<m~>
+rjM(k!0m9Y!4;Cu!0laJ!0ldK!0m'S!0m<Z!0m'S!0m<Z!0m*T!0m<Z!0m'S!0m?[!0m'S!0m<Z
+!0m'S!0ldK!0ldK!0laJ!0jD]rjI=~>
+rjM(k!$1k7!-%T1!$1>(!$1A)!$1Y1!$1n8!$1Y1!$1n8!$1\2!$1n8!$1Y1!$1q9!$1Y1!$1n8
+!$1Y1!$1A)!$1A)!$1>(!$/!;rjI=~>
+rk@Xs!$1k7!9*PL!$1A)!$1A)!$1V0ruM%;!$1S/!$1t:!$1V0!$1t:!$1V0!$1q9!$1V0!$1t:
+!$1V0!$1>(!$1A)!$1A)!$/!;rk<m~>
+rjM(k!0m9Y!4;@t!0ldK!0ldK!0m$Rs-3H]!0m!Q!0mB\!0m$R!0mB\!0m$R!0m?[!0m$R!0mB\
+!0m$R!0laJ!0ldK!0ldK!0jD]rjI=~>
+rjM(k!$1k7!-%Q0!$1A)!$1A)!$1V0ruM%;!$1S/!$1t:!$1V0!$1t:!$1V0!$1q9!$1V0!$1t:
+!$1V0!$1>(!$1A)!$1A)!$/!;rjI=~>
+rk@Ur!$1n8!9*PL!$1A)!$1A)!$1P.!$2%<!$1P.!$2";!$1S/!$2";!$1S/!$2";!$1P.!$2";
+!$1S/!$1A)!$1A)!$1>(!$/$<rk<m~>
+rjM%j!0m<Z!4;@t!0ldK!0ldK!0lsP!0mH^!0lsP!0mE]!0m!Q!0mE]!0m!Q!0mE]!0lsP!0mE]
+!0m!Q!0ldK!0ldK!0laJ!0jG^rjI=~>
+rjM%j!$1n8!-%Q0!$1A)!$1A)!$1P.!$2%<!$1P.!$2";!$1S/!$2";!$1S/!$2";!$1P.!$2";
+!$1S/!$1A)!$1A)!$1>(!$/$<rjI=~>
+rk@Ur!?JrOrrD$LrrF.Tli-u+^[(n#*P_(C"WbAXruJlCrrF.Trr3!>^[V7(*P_UR!?JrErrF.T
+rr3!>^[M1+*P_XS*P_(C!?Jr@rrF.Tli-u+^[(n#*P\TRrk<m~>
+rjM%j!L,>8rrBFtrrJ?=li.!M1$ei?PVMY,"dCbAs-,8,rrJ?=rr3"`1%>2DPVN1;!L,>.rrJ?=
+rr3"`1%5,GPVN4<PVMY,!L,>)rrJ?=li.!M1$ei?PVK0;rjI=~>
+rjM%j!?Eokrr@$0rrF,pli-u+1$ei?*AR$_"W]>truEi_rrF,prr3!>1%>2D*ARQn!?EoarrF,p
+rr3!>1%5,G*ARTo*AR$_!?Eo\rrF,pli-u+1$ei?*AOPnrjI=~>
+rk@Urs1eF1!9*PLs1dn"s1dn"s1e%&"hu)Xs1c>;rrKkTrr<#5nG`O(*WH*=^[V7(^E*=Rs1e%&
+"hu)Xs1c>;rrKkTli."#*UE_+^E)Y?!P]YSs8K`_~>
+rjM%js"XBM!4;@ts"Wj>s"Wj>s"X!B"Yl8As"Q7srrFj=rr<!QnG`MDPlC^_1%>2D0pM\;s"X!B
+"Yl8As"Q7srrFj=li-u?PjA>M0pM#(!ATh<s8KHW~>
+rjM%js"XBM!-%Q0s"Wj>s"Wj>s"X!B"Yh%ts"Q7srrFhprr<!QnG`MD*WH*=1%>2D0cg8ns"X!B
+"Yh%ts"Q7srrFhpli-u?*UE_+0cfT[!APUos8KHW~>
+rk@Ur!$1n8!9*PL!$1A)!$1A)!$1G+!Zh:]m/I/.s8O,,rrO5@*UNe-*WI/HrrO5@*UNe+*U<Y)
+*U<Y)*U<Y)*NB)<^46~>
+rjM%j!0m<Z!4;@t!0ldK!0ldK!0ljM!gN_Lm/I0Ps8S>NrrSGbPjJDOPlI!7rrSGbPjJDMPj88K
+Pj88KPj88KPc=]^[X\~>
+rjM%j!$1n8!-%Q0!$1A)!$1A)!$1G+!Zh:]m/I/.s8O,,rrO5@*UNe-*WI/HrrO5@*UNe+*U<Y)
+*U<Y)*U<Y)*NB)<[X\~>
+rk@Rq!$1q9!9*MK!$1A)!$1D*!$1D*ruLG*ruLG*ruLG*ruLG*ruLG*!$1A)!$1A)!$1A)!$/*>
+rk<m~>
+rjM"i!0m?[!4;=s!0ldK!0lgL!0lgLs-2jLs-2jLs-2jLs-2jLs-2jL!0ldK!0ldK!0ldK!0jM`
+rjI=~>
+rjM"i!$1q9!-%N/!$1A)!$1D*!$1D*ruLG*ruLG*ruLG*ruLG*ruLG*!$1A)!$1A)!$1A)!$/*>
+rjI=~>
+rk@Rq!$1q9!9*MK!$1A)!$1D*!$1A)!$1A)!$1D*ruLG*ruLD)!$1A)!$1D*!$1A)!$1A)!$/*>
+rk<m~>
+rjM"i!0m?[!4;=s!0ldK!0lgL!0ldK!0ldK!0lgLs-2jLs-2gK!0ldK!0lgL!0ldK!0ldK!0jM`
+rjI=~>
+rjM"i!$1q9!-%N/!$1A)!$1D*!$1A)!$1A)!$1D*ruLG*ruLD)!$1A)!$1D*!$1A)!$1A)!$/*>
+rjI=~>
+rk@Rq!$1q9!9*MK!$1A)!$1D*!$1A)ruLG*ruLJ+ruLG*ruLG*ruLD)!$1A)!$1A)!$1A)!$/-?
+rk<m~>
+rjM"i!0m?[!4;=s!0ldK!0lgL!0ldKs-2jLs-2mMs-2jLs-2jLs-2gK!0ldK!0ldK!0ldK!0jPa
+rjI=~>
+rjM"i!$1q9!-%N/!$1A)!$1D*!$1A)ruLG*ruLJ+ruLG*ruLG*ruLD)!$1A)!$1A)!$1A)!$/-?
+rjI=~>
+rk@Rq!?JrPrrD$KrrF.Tli-u+^[1t$*P^q?"!,,s^[;%'*PWW0mf*A0^E()VrrX:V*P_"A"!,,s
+^[(n#*P^t@!?Jr@rrF.Tli-u+^T@J7^46~>
+rjM"i!L,>9rrBFsrrJ?=li.!M1$no@PVMM("-bO)1%"uCPVJCWmf*BR0pFE[rr\K?PVMS*"-bO)
+1$ei?PVMP)!L,>)rrJ?=li.!M0s(ES[X\~>
+rjM"i!?Eolrr@$/rrF,pli-u+1$no@*AQm["!'*:1%"uC*AJQhmf*A00c`"9rrX8r*AQs]"!'*:
+1$ei?*AQp\!?Eo\rrF,pli-u+0s(ES[X\~>
+rk@Rqs1eI2!9*MKs1dn"s1dq#s1dn"rkAFRmJm1#!$1M-rkAFRmJm1#!$1J,rkAFRli."#*UNe,
+^E)Y?!P]Z@rrF.TXT/:6J,~>
+rjM"is"XEN!4;=ss"Wj>s"Wm?s"Wj>r\4D;mJm/?!0lpOr\4D;mJm/?!0lmNr\4D;li-u?PjJDN
+0pM#(!ATi)rrJ?=XT/:.J,~>
+rjM"is"XEN!-%N/s"Wj>s"Wm?s"Wj>r\4BnmJm/?!$1M-r\4BnmJm/?!$1J,r\4Bnli-u?*UNe,
+0cfT[!APV\rrF,pXT/:.J,~>
+rk@Op!$1t:!9*MK!$1A)!$1D*!$1A)!$2(=!$1M-!$2(=!$1P.!$2(=!$1P.!$2%<!$1P.!$2(=
+!$1A)!$1D*!$1A)!$1A)!$/0@rk<m~>
+rjLth!0mB\!4;=s!0ldK!0lgL!0ldK!0mK_!0lpO!0mK_!0lsP!0mK_!0lsP!0mH^!0lsP!0mK_
+!0ldK!0lgL!0ldK!0ldK!0jSbrjI=~>
+rjLth!$1t:!-%N/!$1A)!$1D*!$1A)!$2(=!$1M-!$2(=!$1P.!$2(=!$1P.!$2%<!$1P.!$2(=
+!$1A)!$1D*!$1A)!$1A)!$/0@rjI=~>
+rk@Op!$1t:!9*JJ!$1D*!$1D*!$1A)!$2%<!$1S/!$2";!$1V0!$2";!$1S/!$2";!$1S/!$2%<
+!$1A)!$1D*!$1A)!$1D*!$/0@rk<m~>
+rjLth!0mB\!4;:r!0lgL!0lgL!0ldK!0mH^!0m!Q!0mE]!0m$R!0mE]!0m!Q!0mE]!0m!Q!0mH^
+!0ldK!0lgL!0ldK!0lgL!0jSbrjI=~>
+rjLth!$1t:!-%K.!$1D*!$1D*!$1A)!$2%<!$1S/!$2";!$1V0!$2";!$1S/!$2";!$1S/!$2%<
+!$1A)!$1D*!$1A)!$1D*!$/0@rjI=~>
+rk@Op!$1t:!9*JJ!$1D*!$1D*!$1A)!$2";!$1V0!$2";!$1V0!$1t:!$1V0!$2";!$1S/!$2";
+!$1D*!$1A)!$1D*!$1D*!$/0@rk<m~>
+rjLth!0mB\!4;:r!0lgL!0lgL!0ldK!0mE]!0m$R!0mE]!0m$R!0mB\!0m$R!0mE]!0m!Q!0mE]
+!0lgL!0ldK!0lgL!0lgL!0jSbrjI=~>
+rjLth!$1t:!-%K.!$1D*!$1D*!$1A)!$2";!$1V0!$2";!$1V0!$1t:!$1V0!$2";!$1S/!$2";
+!$1D*!$1A)!$1D*!$1D*!$/0@rjI=~>
+rk@Lo!$2";!9*JJ!$1D*!$1D*!$1A)!$1t:!$1Y1!$1t:!$1Y1!$1q9!$1\2!$1q9!$1Y1!$1t:
+!$1A)!$1D*!$1A)!$1D*!$/3Ark<m~>
+rjLqg!0mE]!4;:r!0lgL!0lgL!0ldK!0mB\!0m'S!0mB\!0m'S!0m?[!0m*T!0m?[!0m'S!0mB\
+!0ldK!0lgL!0ldK!0lgL!0jVcrjI=~>
+rjLqg!$2";!-%K.!$1D*!$1D*!$1A)!$1t:!$1Y1!$1t:!$1Y1!$1q9!$1\2!$1q9!$1Y1!$1t:
+!$1A)!$1D*!$1A)!$1D*!$/3ArjI=~>
+rk@Lo!?JrRrrD$JrrF.Tm/I),^[1t$*P^q?!?JrPrrF.To`"q4^\e$3*P_7H!?JrOrrF.Tp&>%5
+^\[s2*P_7H!?JrPrrF.Tm/I),^[(n#*P^t@!?JrArrF.TY5eL8J,~>
+rjLqg!L,>;rrBFrrrJ?=m/I*N1$no@PVMM(!L,>9rrJ?=o`"rV1&LtOPVMh1!L,>8rrJ?=p&>&W
+1&CnNPVMh1!L,>9rrJ?=m/I*N1$ei?PVMP)!L,>*rrJ?=Y5eL0J,~>
+rjLqg!?Eonrr@$.rrF,pm/I),1$no@*AQm[!?EolrrF,po`"q41&LtO*AR3d!?EokrrF,pp&>%5
+1&CnN*AR3d!?EolrrF,pm/I),1$ei?*AQp\!?Eo]rrF,pY5eL0J,~>
+rk@Los1eO4!9*JJs1dq#s1dq#s1dn"s1eI2!P]ZIs8Tk2rrKkTo`+s+qYpT2*VKI4^\[s2^E)tH
+s1eI2!P]ZArrKkTli-u+^[1t$*P^t@!?JqXs8K`_~>
+rjLqgs"XKP!4;:rs"Wm?s"Wm?s"Wj>s"XEN!ATi2s8OhNrrFj=o`+qGqYpRNPkG(V1&CnN0pM>1
+s"XEN!ATi*rrFj=li.!M1$no@PVMP)!L,=As8KHW~>
+rjLqgs"XKP!-%K.s"Wm?s"Wm?s"Wj>s"XEN!APVes8OhNrrFhpo`+qGqYpRN*VKI41&CnN0cfod
+s"XEN!APV]rrFhpli-u+1$no@*AQp\!?Ents8KHW~>
+rk@In!$2%<!9*JJ!$1D*!$1D*!$1A)!$1k7!$1b4!$1k7!$1b4!$1k7!$1b4!$1k7!$1b4!$1k7
+!$1D*!$1A)!$1D*!$1D*!$/6Brk<m~>
+rjLnf!0mH^!4;:r!0lgL!0lgL!0ldK!0m9Y!0m0V!0m9Y!0m0V!0m9Y!0m0V!0m9Y!0m0V!0m9Y
+!0lgL!0ldK!0lgL!0lgL!0jYdrjI=~>
+rjLnf!$2%<!-%K.!$1D*!$1D*!$1A)!$1k7!$1b4!$1k7!$1b4!$1k7!$1b4!$1k7!$1b4!$1k7
+!$1D*!$1A)!$1D*!$1D*!$/6BrjI=~>
+rk@In!$2%<!9*JJ!$1D*!$1D*!$1A)!$1h6!$1e5!$1h6!$1e5!$1h6!$1e5!$1h6!$1e5!$1h6
+!$1D*!$1D*!$1D*!$1D*!$/6Brk<m~>
+rjLnf!0mH^!4;:r!0lgL!0lgL!0ldK!0m6X!0m3W!0m6X!0m3W!0m6X!0m3W!0m6X!0m3W!0m6X
+!0lgL!0lgL!0lgL!0lgL!0jYdrjI=~>
+rjLnf!$2%<!-%K.!$1D*!$1D*!$1A)!$1h6!$1e5!$1h6!$1e5!$1h6!$1e5!$1h6!$1e5!$1h6
+!$1D*!$1D*!$1D*!$1D*!$/6BrjI=~>
+rk@In!$2%<!9*GI!$1D*!$1D*!$1G+!$1b4!$1k7!$1e5!$1h6!$1b4!$1k7!$1b4!$1k7!$1e5
+!$1D*!$1A)!$1D*!$1G+!$/6Brk<m~>
+rjLnf!0mH^!4;7q!0lgL!0lgL!0ljM!0m0V!0m9Y!0m3W!0m6X!0m0V!0m9Y!0m0V!0m9Y!0m3W
+!0lgL!0ldK!0lgL!0ljM!0jYdrjI=~>
+rjLnf!$2%<!-%H-!$1D*!$1D*!$1G+!$1b4!$1k7!$1e5!$1h6!$1b4!$1k7!$1b4!$1k7!$1e5
+!$1D*!$1A)!$1D*!$1G+!$/6BrjI=~>
+rk@In!$2%<!9*GI!$1D*!$1D*!$1G+!$1_3!$1n8!$1b4!$1k7!$1_3!$1n8!$1_3!$1n8!$1b4
+!$1D*!$1D*!$1D*!$1G+!$/6Brk<m~>
+rjLnf!0mH^!4;7q!0lgL!0lgL!0ljM!0m-U!0m<Z!0m0V!0m9Y!0m-U!0m<Z!0m-U!0m<Z!0m0V
+!0lgL!0lgL!0lgL!0ljM!0jYdrjI=~>
+rjLnf!$2%<!-%H-!$1D*!$1D*!$1G+!$1_3!$1n8!$1b4!$1k7!$1_3!$1n8!$1_3!$1n8!$1b4
+!$1D*!$1D*!$1D*!$1G+!$/6BrjI=~>
+rk@Fm!$2(=!9*GI!$1D*!$1D*!$1G+!$1\2!$1q9!$1_3!$1n8!$1_3!$1n8!$1_3!$1q9!$1_3
+!$1D*!$1A)!$1D*!$1G+!$/9Crk<m~>
+rjLke!0mK_!4;7q!0lgL!0lgL!0ljM!0m*T!0m?[!0m-U!0m<Z!0m-U!0m<Z!0m-U!0m?[!0m-U
+!0lgL!0ldK!0lgL!0ljM!0j\erjI=~>
+rjLke!$2(=!-%H-!$1D*!$1D*!$1G+!$1\2!$1q9!$1_3!$1n8!$1_3!$1n8!$1_3!$1q9!$1_3
+!$1D*!$1A)!$1D*!$1G+!$/9CrjI=~>
+rk@Fm"<G8Ws5EJI!?JrArrF.Tm/I),^[;%%*P_4G!?JrQrrF.To`"q4^\e$3*P_7H!?JrPrrF.T
+o`"q4^\n*4*P_7H!?JrArrF.Tm/I),^[1t$*P_"A!?JqZs8K`_~>
+rjLke"I(Y@s0V:q!L,>*rrJ?=m/I*N1%"uAPVMe0!L,>:rrJ?=o`"rV1&LtOPVMh1!L,>9rrJ?=
+o`"rV1&V%PPVMh1!L,>*rrJ?=m/I*N1$no@PVMS*!L,=Cs8KHW~>
+rjLke"<B5ss)@K-!?Eo]rrF,pm/I),1%"uA*AR0c!?EomrrF,po`"q41&LtO*AR3d!?EolrrF,p
+o`"q41&V%P*AR3d!?Eo]rrF,pm/I),1$no@*AQs]!?Eo!s8KHW~>
+rk@Fms1eU6!9*GIs1dq#s1dq#s1dt$s1e1*!P]ZQs8Tk+rrKkTqu?]2o`"s,*W,m:^\%O,^E*7P
+s1e4+!P]ZArrKkTm/I),^[1t$*P_"A!?JqZs8K`_~>
+rjLkes"XQR!4;7qs"Wm?s"Wm?s"Wp@s"X-F!ATi:s8OhGrrFj=qu?[No`"qHPl(L\1%bJH0pMV9
+s"X0G!ATi*rrFj=m/I*N1$no@PVMS*!L,=Cs8KHW~>
+rjLkes"XQR!-%H-s"Wm?s"Wm?s"Wp@s"X-F!APVms8OhGrrFhpqu?[No`"qH*W,m:1%bJH0cg2l
+s"X0G!APV]rrFhpm/I),1$no@*AQs]!?Eo!s8KHW~>
+rk@Cl"!.FAiU?dH*UNe+*UE_**UNe+*Us(/*W?!<*V'.0*W5p;*V'.0*W?!<*V'.0*W?!<*V'.0
+*UE_**UE_**UE_**UNe+*O,SC^46~>
+rjLhd"-iic[.""pPjJDMPjA>LPjJDMPjn\QPl:U^Pk"bRPl1O]Pk"bRPl:U^Pk"bRPl:U^Pk"bR
+PjA>LPjA>LPjA>LPjJDMPd(2e[X\~>
+rjLhd"!.FAE:<f,*UNe+*UE_**UNe+*Us(/*W?!<*V'.0*W5p;*V'.0*W?!<*V'.0*W?!<*V'.0
+*UE_**UE_**UE_**UNe+*O,SC[X\~>
+rk@Cl"!.FAiU?dH*UNe+*UE_**UNe+*Uj".*WH'=*Us(/*W?!<*Us(/*WH'=*Us(/*WH'=*Us(/
+*UE_**UNe+*UE_**UNe+*O,SC^46~>
+rjLhd"-iic[.""pPjJDMPjA>LPjJDMPjeVPPlC[_Pjn\QPl:U^Pjn\QPlC[_Pjn\QPlC[_Pjn\Q
+PjA>LPjJDMPjA>LPjJDMPd(2e[X\~>
+rjLhd"!.FAE:<f,*UNe+*UE_**UNe+*Uj".*WH'=*Us(/*W?!<*Us(/*WH'=*Us(/*WH'=*Us(/
+*UE_**UNe+*UE_**UNe+*O,SC[X\~>
+rk@Cl"!.FAiU?dH*UE_**UNe+*UNe+*Uj"1*WQ-[n,EA.rr2s=n,EA.rr2s=n,EJ1s8O,.rr=)+
+rr=)*rr=)+rr=)*rr=(Es8K`_~>
+rjLhd"-iic[.""pPjA>LPjJDMPjJDMPjeVSPlLcJn,EBPrr2t_n,EBPrr2t_n,EKSs8S>PrrA;M
+rrA;LrrA;MrrA;LrrA:gs8KHW~>
+rjLhd"!.FAE:<f,*UE_**UNe+*UNe+*Uj"1*WQ-[n,EA.rr2s=n,EA.rr2s=n,EJ1s8O,.rr=)+
+rr=)*rr=)+rr=)*rr=(Es8KHW~>
+rk@Cl"!.FAiU?dH*UE_**UNe+*UNe+*U`q/*WI/JrrX;AruLP-"!.FA*U`q/*WI/Jrr=)+rr=)+
+rr=)+rr=)*rr=(Es8K`_~>
+rjLhd"-iic[.""pPjA>LPjJDMPjJDMPj\PQPlI!9rr\Mcs-2sO"-iicPj\PQPlI!9rrA;MrrA;M
+rrA;MrrA;LrrA:gs8KHW~>
+rjLhd"!.FAE:<f,*UE_**UNe+*UNe+*U`q/*WI/JrrX;AruLP-"!.FA*U`q/*WI/Jrr=)+rr=)+
+rr=)+rr=)*rr=(Es8KHW~>
+rk@@k!Zh="mf*8-m/I&+m/I&+m/I&+mJm2,mJd5.ruLM,ruLM,ruLM,!$1G+!$1D*!$1G+!$1D*
+!$/BFrk<m~>
+rjLec!gN_lmf*9Om/I'Mm/I'Mm/I'MmJm3NmJd6Ps-2pNs-2pNs-2pN!0ljM!0lgL!0ljM!0lgL
+!0jehrjI=~>
+rjLec!Zh;[mf*8-m/I&+m/I&+m/I&+mJm2,mJd5.ruLM,ruLM,ruLM,!$1G+!$1D*!$1G+!$1D*
+!$/BFrjI=~>
+rk@@k!Zf&7mf*;.^[;%%*P_"A!?JrBrrF.TmJd2-^[;($*<<kArrF.TmJd2-^[;%%*P_"A!?JrB
+rrF.TmJd2-^[1t$*P\r\rk<m~>
+rjLec!gGFHmf*<P1%"uAPVMS*!L,>+rrJ?=mJd3O1%##@PQ3H*rrJ?=mJd3O1%"uAPVMS*!L,>+
+rrJ?=mJd3O1$no@PVKNErjI=~>
+rjLec!Za"7mf*;.1%"uA*AQs]!?Eo^rrF,pmJd2-1%##@*<7h]rrF,pmJd2-1%"uA*AQs]!?Eo^
+rrF,pmJd2-1$no@*AOo#rjI=~>
+rk@@ks1\Qmmf3=%mJm4$mJm4$mJm4$mJm4$mJm1#mJm4$mJm4$mJd4%*UWk-^E)_A!P]ZBrrF.T
+m/I),^U*t>^46~>
+rjLecs"OM\mf3;AmJm2@mJm2@mJm2@mJm2@mJm/?mJm2@mJm2@mJd2APjSJO0pM)*!ATi+rrJ?=
+m/I*N0sgoZ[X\~>
+rjLecs"OLmmf3;AmJm2@mJm2@mJm2@mJm2@mJm/?mJm2@mJm2@mJd2A*UWk-0cfZ]!APV^rrF,p
+m/I),0sgoZ[X\~>
+rk@=j!?L.err=)+rr=)+rr=)+rr=)+rrO5@*U`q/*WI/JrrO5@*U`q/*WI/Hrr=)+rr=)+rr=)+
+rr=)*rr=(Gs8K`_~>
+rjLbb!L0tZrrA;MrrA;MrrA;MrrA;MrrSGbPj\PQPlI!9rrSGbPj\PQPlI!7rrA;MrrA;MrrA;M
+rrA;LrrA:is8KHW~>
+rjLbb!?H.Irr=)+rr=)+rr=)+rr=)+rrO5@*U`q/*WI/JrrO5@*U`q/*WI/Hrr=)+rr=)+rr=)+
+rr=)*rr=(Gs8KHW~>
+rk@=j!?L.err=)+rr=)+rr=)+rr=)+rrX;AruLS."!.FA*Uj"1*WQ-[n,EJ1s8O,+rr=)+rr=)+
+rr=),rr=)*rr=(Gs8K`_~>
+rjLbb!L0tZrrA;MrrA;MrrA;MrrA;Mrr\Mcs-3!P"-iicPjeVSPlLcJn,EKSs8S>MrrA;MrrA;M
+rrA;NrrA;LrrA:is8KHW~>
+rjLbb!?H.Irr=)+rr=)+rr=)+rr=)+rrX;AruLS."!.FA*Uj"1*WQ-[n,EJ1s8O,+rr=)+rr=)+
+rr=),rr=)*rr=(Gs8KHW~>
+rk@=j!?L.drr=)+rr=)+rr=),rr=)+rr=)=rr=)/rr=)=rr=)/rr=)=rr=)/rr=)=rr=),rr=)+
+rr=)+rr=)+rr=)+rr=(Gs8K`_~>
+rjLbb!L0tYrrA;MrrA;MrrA;NrrA;MrrA;_rrA;QrrA;_rrA;QrrA;_rrA;QrrA;_rrA;NrrA;M
+rrA;MrrA;MrrA;MrrA:is8KHW~>
+rjLbb!?H.Hrr=)+rr=)+rr=),rr=)+rr=)=rr=)/rr=)=rr=)/rr=)=rr=)/rr=)=rr=),rr=)+
+rr=)+rr=)+rr=)+rr=(Gs8KHW~>
+rk@=j!?L.drr=)+rr=)+rr=),rr=)+rr=)<rr=)0rr=)<rr=)0rr=)<rr=)0rr=)<rr=),rr=)+
+rr=)+rr=),rr=)+rr=(Gs8K`_~>
+rjLbb!L0tYrrA;MrrA;MrrA;NrrA;MrrA;^rrA;RrrA;^rrA;RrrA;^rrA;RrrA;^rrA;NrrA;M
+rrA;MrrA;NrrA;MrrA:is8KHW~>
+rjLbb!?H.Hrr=)+rr=)+rr=),rr=)+rr=)<rr=)0rr=)<rr=)0rr=)<rr=)0rr=)<rr=),rr=)+
+rr=)+rr=),rr=)+rr=(Gs8KHW~>
+rk@:i!9*>F!$1G+!$1G+!$1J,!$1G+!$2";!$1\2!$1t:!$1\2!$2";!$1Y1!$2";!$1J,!$1G+
+!$1G+!$1G+!$1G+!$/HHrk<m~>
+rjL_a!4;.n!0ljM!0ljM!0lmN!0ljM!0mE]!0m*T!0mB\!0m*T!0mE]!0m'S!0mE]!0lmN!0ljM
+!0ljM!0ljM!0ljM!0jkjrjI=~>
+rjL_a!-%?*!$1G+!$1G+!$1J,!$1G+!$2";!$1\2!$1t:!$1\2!$2";!$1Y1!$2";!$1J,!$1G+
+!$1G+!$1G+!$1G+!$/HHrjI=~>
+rk@:i!TCf]rrF.TmJd2-^[;%%*P_%B!?JrBrrF.Tr;Qd<^\.U-*P_LO!?JrJrrF.Tr;Qd<^\%O,
+*P_OP!?JrCrrF.TmJd2-^[;%%*P_%B!?JrBrrF.T[K$6?J,~>
+rjL_a!OOTLrrJ?=mJd3O1%"uAPVMV+!L,>+rrJ?=r;Qe^1%kPIPVN(8!L,>3rrJ?=r;Qe^1%bJH
+PVN+9!L,>,rrJ?=mJd3O1%"uAPVMV+!L,>+rrJ?=[K$67J,~>
+rjL_a!H9d]rrF,pmJd2-1%"uA*AR!^!?Eo^rrF,pr;Qd<1%kPI*ARHk!?EofrrF,pr;Qd<1%bJH
+*ARKl!?Eo_rrF,pmJd2-1%"uA*AR!^!?Eo^rrF,p[K$67J,~>
+rk@:i!TCf]s8Tk$s8Tk$s8Tk%s8Tk$s8Tk3rrKkTp&G',qu6]3*VKI4^\n*4^E)tHs1eL3!P]ZC
+rrKkTmJd4%*UWk-*P_%B!?JrBrrF.T[K$6?J,~>
+rjL_a!OOTLs8Oh@s8Oh@s8OhAs8Oh@s8OhOrrFj=p&G%Hqu6[OPkG(V1&V%P0pM>1s"XHO!ATi,
+rrFj=mJd2APjSJOPVMV+!L,>+rrJ?=[K$67J,~>
+rjL_a!H9d]s8Oh@s8Oh@s8OhAs8Oh@s8OhOrrFhpp&G%Hqu6[O*VKI41&V%P0cfods"XHO!APV_
+rrFhpmJd2A*UWk-*AR!^!?Eo^rrF,p[K$67J,~>
+rk@:i!T>'drr=),rr=)+rr=),rr=)+rr=)8rr=)5rr=)7rr=)6rr=)7rr=)5rr=)8rr=),rr=)+
+rr=)+rr=),rr=)+rr=(Is8K`_~>
+rjL_a!OS*YrrA;NrrA;MrrA;NrrA;MrrA;ZrrA;WrrA;YrrA;XrrA;YrrA;WrrA;ZrrA;NrrA;M
+rrA;MrrA;NrrA;MrrA:ks8KHW~>
+rjL_a!H9(Hrr=),rr=)+rr=),rr=)+rr=)8rr=)5rr=)7rr=)6rr=)7rr=)5rr=)8rr=),rr=)+
+rr=)+rr=),rr=)+rr=(Is8KHW~>
+rk@:i!T>'drr=),rr=)+rr=),rr=)+rr=)7rr=)6rr=)6rr=)7rr=)6rr=)6rr=)7rr=),rr=)+
+rr=),rr=),rr=)+rr=(Is8K`_~>
+rjL_a!OS*YrrA;NrrA;MrrA;NrrA;MrrA;YrrA;XrrA;XrrA;YrrA;XrrA;XrrA;YrrA;NrrA;M
+rrA;NrrA;NrrA;MrrA:ks8KHW~>
+rjL_a!H9(Hrr=),rr=)+rr=),rr=)+rr=)7rr=)6rr=)6rr=)7rr=)6rr=)6rr=)7rr=),rr=)+
+rr=),rr=),rr=)+rr=(Is8KHW~>
+rk@:i!T>'drr=)+rr=),rr=),rr=),rr=)5rr=)8rr=)5rr=)7rr=)6rr=)7rr=)5rr=),rr=),
+rr=)+rr=),rr=),rr=(Is8K`_~>
+rjL_a!OS*YrrA;MrrA;NrrA;NrrA;NrrA;WrrA;ZrrA;WrrA;YrrA;XrrA;YrrA;WrrA;NrrA;N
+rrA;MrrA;NrrA;NrrA:ks8KHW~>
+rjL_a!H9(Hrr=)+rr=),rr=),rr=),rr=)5rr=)8rr=)5rr=)7rr=)6rr=)7rr=)5rr=),rr=),
+rr=)+rr=),rr=),rr=(Is8KHW~>
+rk@:i!T>'drr=)+rr=),rr=),rr=),rr=)4rr=)9rr=)4rr=)8rr=)5rr=)8rr=)4rr=),rr=),
+rr=),rr=),rr=),rr=(Is8K`_~>
+rjL_a!OS*YrrA;MrrA;NrrA;NrrA;NrrA;VrrA;[rrA;VrrA;ZrrA;WrrA;ZrrA;VrrA;NrrA;N
+rrA;NrrA;NrrA;NrrA:ks8KHW~>
+rjL_a!H9(Hrr=)+rr=),rr=),rr=),rr=)4rr=)9rr=)4rr=)8rr=)5rr=)8rr=)4rr=),rr=),
+rr=),rr=),rr=),rr=(Is8KHW~>
+rk@:i!oa/"mJd/,mJd/,mJd/,mJd/,mJd/,o`"n3qu6X:o`"n3qu6X:o`"n3qu6X:o`"n3mJd/,
+mJd/,m/I&+mJd/,mJd/,[f??@J,~>
+rjL_a!jqulmJd0NmJd0NmJd0NmJd0NmJd0No`"oUqu6Y\o`"oUqu6Y\o`"oUqu6Y\o`"oUmJd0N
+mJd0Nm/I'MmJd0NmJd0N[f??8J,~>
+rjL_a!c\/[mJd/,mJd/,mJd/,mJd/,mJd/,o`"n3qu6X:o`"n3qu6X:o`"n3qu6X:o`"n3mJd/,
+mJd/,m/I&+mJd/,mJd/,[f??8J,~>
+rk@:i"6'8#^[D+&*P_%B!?JrCrrF.Tmf*;.^[D+&*P_7H!?JrRrrF.To`"q4^]"05*P_7H!?JrR
+rrF.To`"q4^[D+&*P_%B!?JrCrrF.Tmf*;.^[D+&*P])`rk<m~>
+rjL_a"18)m1%,&BPVMV+!L,>,rrJ?=mf*<P1%,&BPVMh1!L,>;rrJ?=o`"rV1&_+QPVMh1!L,>;
+rrJ?=o`"rV1%,&BPVMV+!L,>,rrJ?=mf*<P1%,&BPVKZIrjI=~>
+rjL_a"*"8\1%,&B*AR!^!?Eo_rrF,pmf*;.1%,&B*AR3d!?EonrrF,po`"q41&_+Q*AR3d!?Eon
+rrF,po`"q41%,&B*AR!^!?Eo_rrF,pmf*;.1%,&B*AP&'rjI=~>
+rk@:i"6'9p^[D.%^[D.%^[D.%^[D.%^[D.%^\%O,^E*:Qs1e4+!P]ZRs8Tk+rrKkTrVuo4o`"s,
+*U`q.^E)bB!P]ZCrrKkTmf*;.^[D+&*P])`rk<m~>
+rjL_a"18(_1%,)A1%,)A1%,)A1%,)A1%,)A1%bJH0pMY:s"X0G!ATi;s8OhGrrFj=rVumPo`"qH
+Pj\PP0pM,+!ATi,rrFj=mf*<P1%,&BPVKZIrjI=~>
+rjL_a"*"8p1%,)A1%,)A1%,)A1%,)A1%,)A1%bJH0cg5ms"X0G!APVns8OhGrrFhprVumPo`"qH
+*U`q.0cf]^!APV_rrFhpmf*;.1%,&B*AP&'rjI=~>
+rk@:i"6':[*UWk,*UWk,*U`q-*UWk,*UWk,*V'.0*WH'=*V'.0*WH'=*V'.3*WQ-[nc&S0mJd/,
+mJd/,mJd/,mJd/,mJd/,\,ZHAJ,~>
+rjL_a"18+.PjSJNPjSJNPj\POPjSJNPjSJNPk"bRPlC[_Pk"bRPlC[_Pk"bUPlLcJnc&TRmJd0N
+mJd0NmJd0NmJd0NmJd0N\,ZH9J,~>
+rjL_a"*";?*UWk,*UWk,*U`q-*UWk,*UWk,*V'.0*WH'=*V'.0*WH'=*V'.3*WQ-[nc&S0mJd/,
+mJd/,mJd/,mJd/,mJd/,\,ZH9J,~>
+rk@:i"6':[*UWk,*UWk,*U`q-*UWk,*UWk,*Us(2*WQ-[nG`S2s8O,0rrX;AruLV/!$1J,!$1J,
+!$1J,!$1M-!$1J,!$/QKrk<m~>
+rjL_a"18+.PjSJNPjSJNPj\POPjSJNPjSJNPjn\TPlLcJnG`TTs8S>Rrr\Mcs-3$Q!0lmN!0lmN
+!0lmN!0lpO!0lmN!0jtmrjI=~>
+rjL_a"*";?*UWk,*UWk,*U`q-*UWk,*UWk,*Us(2*WQ-[nG`S2s8O,0rrX;AruLV/!$1J,!$1J,
+!$1J,!$1M-!$1J,!$/QKrjI=~>
+rk@:i!9*qW!$1M-!$1J,!$1J,!$1M-!$1J,!$1P.ruLP-ruLS.!Zh:]n,EA.mJd/,mf*8-mJd/,
+mJd/,mJd/,\GuQBJ,~>
+rjL_a!4;b*!0lpO!0lmN!0lmN!0lpO!0lmN!0lsPs-2sOs-3!P!gN_Ln,EBPmJd0Nmf*9OmJd0N
+mJd0NmJd0N\GuQ:J,~>
+rjL_a!-%r;!$1M-!$1J,!$1J,!$1M-!$1J,!$1P.ruLP-ruLS.!Zh:]n,EA.mJd/,mf*8-mJd/,
+mJd/,mJd/,\GuQ:J,~>
+rk@:i!9*qW!$1M-!$1J,!$1J,!$1M-!$1J,!$1P.ruLP-ruLP-ruLS.!$1J,!$1J,!$1J,!$1M-
+!$1J,!$/TLrk<m~>
+rjL_a!4;b*!0lpO!0lmN!0lmN!0lpO!0lmN!0lsPs-2sOs-2sOs-3!P!0lmN!0lmN!0lmN!0lpO
+!0lmN!0k"nrjI=~>
+rjL_a!-%r;!$1M-!$1J,!$1J,!$1M-!$1J,!$1P.ruLP-ruLP-ruLS.!$1J,!$1J,!$1J,!$1M-
+!$1J,!$/TLrjI=~>
+rk@:i!9*qW!$1J,!$1J,!$1M-!$1M-!$1J,!$1M-!$1J,!$1M-ruLP-!$1J,!$1M-!$1J,!$1M-
+!$1J,!$/TLrk<m~>
+rjL_a!4;b*!0lmN!0lmN!0lpO!0lpO!0lmN!0lpO!0lmN!0lpOs-2sO!0lmN!0lpO!0lmN!0lpO
+!0lmN!0k"nrjI=~>
+rjL_a!-%r;!$1J,!$1J,!$1M-!$1M-!$1J,!$1M-!$1J,!$1M-ruLP-!$1J,!$1M-!$1J,!$1M-
+!$1J,!$/TLrjI=~>
+rk@:i!9*nV!$1M-!$1J,!$1M-!$1M-!$1J,!$1M-ruLP-ruLS.ruLP-!$1J,!$1J,!$1J,!$1M-
+!$1J,!$/WMrk<m~>
+rjL_a!4;_)!0lpO!0lmN!0lpO!0lpO!0lmN!0lpOs-2sOs-3!Ps-2sO!0lmN!0lmN!0lmN!0lpO
+!0lmN!0k%orjI=~>
+rjL_a!-%o:!$1M-!$1J,!$1M-!$1M-!$1J,!$1M-ruLP-ruLS.ruLP-!$1J,!$1J,!$1J,!$1M-
+!$1J,!$/WMrjI=~>
+rk@:i!9*nV!?JrDrrF.Tmf*;.^[M1'*P_(C!?JrCrrF.Tn,EJ1^E()YrrX:V*P_.E"!,,s^[M1'
+*P_%B!?JrDrrF.Tmf*;.^[M1'*P_%B!?Jqds8K`_~>
+rjL_a!4;_)!L,>-rrJ?=mf*<P1%5,CPVMY,!L,>,rrJ?=n,EKS0pFE^rr\K?PVM_."-bO)1%5,C
+PVMV+!L,>-rrJ?=mf*<P1%5,CPVMV+!L,=Ms8KHW~>
+rjL_a!-%o:!?Eo`rrF,pmf*;.1%5,C*AR$_!?Eo_rrF,pn,EJ10c`"<rrX8r*AR*a"!'*:1%5,C
+*AR!^!?Eo`rrF,pmf*;.1%5,C*AR!^!?Eo+s8KHW~>
+rk@:i!9*nVs1e%&s1e"%s1e%&s1e%&s1e"%s1e%&rkAFRnGiL&!$1V0rkAFRn,EF'*U`q.^E)eC
+!P]ZCrrF.Tn,ED/^[D+&*P]2crk<m~>
+rjL_a!4;_)s"X!Bs"WsAs"X!Bs"X!Bs"WsAs"X!Br\4D;nGiJB!0m$Rr\4D;n,EDCPj\PP0pM/,
+!ATi,rrJ?=n,EEQ1%,&BPVKcLrjI=~>
+rjL_a!-%o:s"X!Bs"WsAs"X!Bs"X!Bs"WsAs"X!Br\4BnnGiJB!$1V0r\4Bnn,EDC*U`q.0cf`_
+!APV_rrF,pn,ED/1%,&B*AP/*rjI=~>
+rk@:i!9*kU!$1M-!$1M-!$1M-!$1M-!$1J,!$1M-!$2(=!$1Y1!$2%<!$1\2!$2%<!$1M-!$1M-
+!$1M-!$1J,!$1M-!$1J,!$/ZNrk<m~>
+rjL_a!4;\(!0lpO!0lpO!0lpO!0lpO!0lmN!0lpO!0mK_!0m'S!0mH^!0m*T!0mH^!0lpO!0lpO
+!0lpO!0lmN!0lpO!0lmN!0k(prjI=~>
+rjL_a!-%l9!$1M-!$1M-!$1M-!$1M-!$1J,!$1M-!$2(=!$1Y1!$2%<!$1\2!$2%<!$1M-!$1M-
+!$1M-!$1J,!$1M-!$1J,!$/ZNrjI=~>
+rk@:i!9*kU!$1M-!$1M-!$1M-!$1M-!$1J,!$1M-!$2%<!$1\2!$2%<!$1\2!$2%<!$1M-!$1J,
+!$1M-!$1M-!$1M-!$1J,!$/ZNrk<m~>
+rjL_a!4;\(!0lpO!0lpO!0lpO!0lpO!0lmN!0lpO!0mH^!0m*T!0mH^!0m*T!0mH^!0lpO!0lmN
+!0lpO!0lpO!0lpO!0lmN!0k(prjI=~>
+rjL_a!-%l9!$1M-!$1M-!$1M-!$1M-!$1J,!$1M-!$2%<!$1\2!$2%<!$1\2!$2%<!$1M-!$1J,
+!$1M-!$1M-!$1M-!$1J,!$/ZNrjI=~>
+rk@:i!9*hT!$1P.!$1J,!$1M-!$1M-!$1P.!$1M-!$1t:!$1_3!$2";!$1_3!$2";!$1M-!$1J,
+!$1M-!$1M-!$1M-!$1M-!$/ZNrk<m~>
+rjL_a!4;Y'!0lsP!0lmN!0lpO!0lpO!0lsP!0lpO!0mB\!0m-U!0mE]!0m-U!0mE]!0lpO!0lmN
+!0lpO!0lpO!0lpO!0lpO!0k(prjI=~>
+rjL_a!-%i8!$1P.!$1J,!$1M-!$1M-!$1P.!$1M-!$1t:!$1_3!$2";!$1_3!$2";!$1M-!$1J,
+!$1M-!$1M-!$1M-!$1M-!$/ZNrjI=~>
+rk@:i!9*hT!$1P.!$1J,!$1M-!$1M-!$1P.!$1M-!$1q9!$1b4!$1t:!$1b4!$1t:!$1M-!$1M-
+!$1M-!$1M-!$1M-!$1M-!$/ZNrk<m~>
+rjL_a!4;Y'!0lsP!0lmN!0lpO!0lpO!0lsP!0lpO!0m?[!0m0V!0mB\!0m0V!0mB\!0lpO!0lpO
+!0lpO!0lpO!0lpO!0lpO!0k(prjI=~>
+rjL_a!-%i8!$1P.!$1J,!$1M-!$1M-!$1P.!$1M-!$1q9!$1b4!$1t:!$1b4!$1t:!$1M-!$1M-
+!$1M-!$1M-!$1M-!$1M-!$/ZNrjI=~>
+rk@:i!9*hT!$1M-!$1M-!$1M-!$1M-!$1P.!$1M-!$1n8!$1h6!$1n8!$1h6!$1n8!$1M-!$1M-
+!$1M-!$1P.!$1M-!$1J,!$/]Ork<m~>
+rjL_a!4;Y'!0lpO!0lpO!0lpO!0lpO!0lsP!0lpO!0m<Z!0m6X!0m<Z!0m6X!0m<Z!0lpO!0lpO
+!0lpO!0lsP!0lpO!0lmN!0k+qrjI=~>
+rjL_a!-%i8!$1M-!$1M-!$1M-!$1M-!$1P.!$1M-!$1n8!$1h6!$1n8!$1h6!$1n8!$1M-!$1M-
+!$1M-!$1P.!$1M-!$1J,!$/]OrjI=~>
+rk@:i!9*eS!$1P.!$1M-!$1M-!$1M-!$1P.!$1M-!$1k7!$1k7!$1n8!$1h6!$1n8!$1M-!$1M-
+!$1M-!$1M-!$1M-!$1M-!$/]Ork<m~>
+rjL_a!4;V&!0lsP!0lpO!0lpO!0lpO!0lsP!0lpO!0m9Y!0m9Y!0m<Z!0m6X!0m<Z!0lpO!0lpO
+!0lpO!0lpO!0lpO!0lpO!0k+qrjI=~>
+rjL_a!-%f7!$1P.!$1M-!$1M-!$1M-!$1P.!$1M-!$1k7!$1k7!$1n8!$1h6!$1n8!$1M-!$1M-
+!$1M-!$1M-!$1M-!$1M-!$/]OrjI=~>
+rk@:i!9*eS!?JrErrF.Tn,ED/^[M1'*P_(C!?JrErrF.Tn,ED/^\Ig0*P_IN!?JrNrrF.Tq>UI9
+^\Rm1*P_(C!?JrDrrF.Tn,ED/^[V7(*P_(C!?JrDrrF.T]`7uFJ,~>
+rjL_a!4;V&!L,>.rrJ?=n,EEQ1%5,CPVMY,!L,>.rrJ?=n,EEQ1&1bLPVN%7!L,>7rrJ?=q>UJ[
+1&:hMPVMY,!L,>-rrJ?=n,EEQ1%>2DPVMY,!L,>-rrJ?=]`7u>J,~>
+rjL_a!-%f7!?EoarrF,pn,ED/1%5,C*AR$_!?EoarrF,pn,ED/1&1bL*AREj!?EojrrF,pq>UI9
+1&:hM*AR$_!?Eo`rrF,pn,ED/1%>2D*AR$_!?Eo`rrF,p]`7u>J,~>
+rk@:i!9*eSs1e('s1e%&s1e%&s1e%&s1e('s1e%&s1e@/!P]ZOs8Tk0rrKkTq>^K0q>UK1*Uj"/
+^E)eC!P]ZDrrKkTnG`O(*Uj"/*P_(C!?Jqfs8K`_~>
+rjL_a!4;V&s"X$Cs"X!Bs"X!Bs"X!Bs"X$Cs"X!Bs"X<K!ATi8s8OhLrrFj=q>^ILq>UIMPjeVQ
+0pM/,!ATi-rrFj=nG`MDPjeVQPVMY,!L,=Os8KHW~>
+rjL_a!-%f7s"X$Cs"X!Bs"X!Bs"X!Bs"X$Cs"X!Bs"X<K!APVks8OhLrrFhpq>^ILq>UIM*Uj"/
+0cf`_!APV`rrFhpnG`MD*Uj"/*AR$_!?Eo-s8KHW~>
+rk@:i!9*bR!$1P.!$1M-!$1P.!$1M-!$1P.!$1M-!$1b4!$2";!$1b4!$1t:!$1b4!$1M-!$1P.
+!$1M-!$1P.!$1M-!$1M-!$/`Prk<m~>
+rjL_a!4;S%!0lsP!0lpO!0lsP!0lpO!0lsP!0lpO!0m0V!0mE]!0m0V!0mB\!0m0V!0lpO!0lsP
+!0lpO!0lsP!0lpO!0lpO!0k.rrjI=~>
+rjL_a!-%c6!$1P.!$1M-!$1P.!$1M-!$1P.!$1M-!$1b4!$2";!$1b4!$1t:!$1b4!$1M-!$1P.
+!$1M-!$1P.!$1M-!$1M-!$/`PrjI=~>
+rk@:i!9*bR!$1P.!$1M-!$1P.!$1M-!$1P.!$1M-!$1_3!$2%<!$1_3!$2";!$1b4!$1M-!$1M-
+!$1M-!$1P.!$1P.!$1M-!$/`Prk<m~>
+rjL_a!4;S%!0lsP!0lpO!0lsP!0lpO!0lsP!0lpO!0m-U!0mH^!0m-U!0mE]!0m0V!0lpO!0lpO
+!0lpO!0lsP!0lsP!0lpO!0k.rrjI=~>
+rjL_a!-%c6!$1P.!$1M-!$1P.!$1M-!$1P.!$1M-!$1_3!$2%<!$1_3!$2";!$1b4!$1M-!$1M-
+!$1M-!$1P.!$1P.!$1M-!$/`PrjI=~>
+rk@:i!9*_Q!$1P.!$1P.!$1M-!$1P.!$1P.!$1P.!$1Y1!$2(=!$1\2!$2(=!$1\2!$1M-!$1M-
+!$1P.!$1P.!$1M-!$1P.!$/`Prk<m~>
+rjL_a!4;P$!0lsP!0lsP!0lpO!0lsP!0lsP!0lsP!0m'S!0mK_!0m*T!0mK_!0m*T!0lpO!0lpO
+!0lsP!0lsP!0lpO!0lsP!0k.rrjI=~>
+rjL_a!-%`5!$1P.!$1P.!$1M-!$1P.!$1P.!$1P.!$1Y1!$2(=!$1\2!$2(=!$1\2!$1M-!$1M-
+!$1P.!$1P.!$1M-!$1P.!$/`PrjI=~>
+rk@:i!9*_Q!$1P.!$1P.!$1M-!$1P.!$1P.!$1P.!$1Y1!$2(=!$1\2!$2(=!$1Y1!$1M-!$1P.
+!$1M-!$1P.!$1P.!$1P.!$/`Prk<m~>
+rjL_a!4;P$!0lsP!0lsP!0lpO!0lsP!0lsP!0lsP!0m'S!0mK_!0m*T!0mK_!0m'S!0lpO!0lsP
+!0lpO!0lsP!0lsP!0lsP!0k.rrjI=~>
+rjL_a!-%`5!$1P.!$1P.!$1M-!$1P.!$1P.!$1P.!$1Y1!$2(=!$1\2!$2(=!$1Y1!$1M-!$1P.
+!$1M-!$1P.!$1P.!$1P.!$/`PrjI=~>
+rk@:i!9*_Q!$1P.!$1M-!$1P.!$1P.!$1P.!$1P.!$1V0!Zh:]nc&\3s8O,0rr=)-rr=).rr=).
+rr=).rr=).rr=)-rr=(Qs8K`_~>
+rjL_a!4;P$!0lsP!0lpO!0lsP!0lsP!0lsP!0lsP!0m$R!gN_Lnc&]Us8S>RrrA;OrrA;PrrA;P
+rrA;PrrA;PrrA;OrrA:ss8KHW~>
+rjL_a!-%`5!$1P.!$1M-!$1P.!$1P.!$1P.!$1P.!$1V0!Zh:]nc&\3s8O,0rr=)-rr=).rr=).
+rr=).rr=).rr=)-rr=(Qs8KHW~>
+rk@:i!9*\P!$1P.!$1P.!$1P.!$1P.!$1P.!$1P.!$1S/ruLV/ruLV/!$1M-!$1P.!$1M-!$1P.
+!$1P.!$1P.!$/cQrk<m~>
+rjL_a!4;M#!0lsP!0lsP!0lsP!0lsP!0lsP!0lsP!0m!Qs-3$Qs-3$Q!0lpO!0lsP!0lpO!0lsP
+!0lsP!0lsP!0k1srjI=~>
+rjL_a!-%]4!$1P.!$1P.!$1P.!$1P.!$1P.!$1P.!$1S/ruLV/ruLV/!$1M-!$1P.!$1M-!$1P.
+!$1P.!$1P.!$/cQrjI=~>
+rk@:i!9*\P!?JrErrF.TnG`M0^[V7(*P_+D!?JrErrF.TnG`M0^[V7(*P_+D!?JrErrF.Tn,ED/
+^[V7(*P_+D!?JrErrF.TnG`M0^[V7(*P]>grk<m~>
+rjL_a!4;M#!L,>.rrJ?=nG`NR1%>2DPVM\-!L,>.rrJ?=nG`NR1%>2DPVM\-!L,>.rrJ?=n,EEQ
+1%>2DPVM\-!L,>.rrJ?=nG`NR1%>2DPVKoPrjI=~>
+rjL_a!-%]4!?EoarrF,pnG`M01%>2D*AR'`!?EoarrF,pnG`M01%>2D*AR'`!?EoarrF,pn,ED/
+1%>2D*AR'`!?EoarrF,pnG`M01%>2D*AP;.rjI=~>
+rk@:i!9*\Ps1e('s1e('s1e('s1e('s1e('s1e('s1e('s1e('s1e('!P]ZDrrKkTnG`O(*Us(0
+^E)hD!P]ZErrF.TnG`M0^V9aI^46~>
+rjL_a!4;M#s"X$Cs"X$Cs"X$Cs"X$Cs"X$Cs"X$Cs"X$Cs"X$Cs"X$C!ATi-rrFj=nG`MDPjn\R
+0pM2-!ATi.rrJ?=nG`NR0u!\e[X\~>
+rjL_a!-%]4s"X$Cs"X$Cs"X$Cs"X$Cs"X$Cs"X$Cs"X$Cs"X$Cs"X$C!APV`rrFhpnG`MD*Us(0
+0cfc`!APVarrF,pnG`M00u!\e[X\~>
+rk@:i!9*YO!$1P.!$1P.!$1S/!$1P.!$1P.!$1P.!$1P.!Zh:]o)Ae4s8O,.rr=).rr=).rr=).
+rr=).rr=).rr=).rr=(Rs8K`_~>
+rjL_a!4;J"!0lsP!0lsP!0m!Q!0lsP!0lsP!0lsP!0lsP!gN_Lo)AfVs8S>PrrA;PrrA;PrrA;P
+rrA;PrrA;PrrA;PrrA:ts8KHW~>
+rjL_a!-%Z3!$1P.!$1P.!$1S/!$1P.!$1P.!$1P.!$1P.!Zh:]o)Ae4s8O,.rr=).rr=).rr=).
+rr=).rr=).rr=).rr=(Rs8KHW~>
+rk@:i!9*YO!$1P.!$1P.!$1S/!$1P.!$1P.!$1P.!$1P."!.FA*V9:2*WH'=*Uj".*Uj".*Uj".
+*Uj".*Uj".*Us(/*Uj".*PVRQ^46~>
+rjL_a!4;J"!0lsP!0lsP!0m!Q!0lsP!0lsP!0lsP!0lsP"-iicPk4nTPlC[_PjeVPPjeVPPjeVP
+PjeVPPjeVPPjn\QPjeVPPeR1s[X\~>
+rjL_a!-%Z3!$1P.!$1P.!$1S/!$1P.!$1P.!$1P.!$1P."!.FA*V9:2*WH'=*Uj".*Uj".*Uj".
+*Uj".*Uj".*Us(/*Uj".*PVRQ[X\~>
+rk@:i!9*VN!$1S/!$1P.!$1P.!$1S/!$1P.!$1S/!$1P.!$2%<!$1_3!$2%<!$1P.!$1P.!$1P.
+!$1S/!$1P.!$1P.!$1S/!$/fRrk<m~>
+rjL_a!4;G!!0m!Q!0lsP!0lsP!0m!Q!0lsP!0m!Q!0lsP!0mH^!0m-U!0mH^!0lsP!0lsP!0lsP
+!0m!Q!0lsP!0lsP!0m!Q!0k4trjI=~>
+rjL_a!-%W2!$1S/!$1P.!$1P.!$1S/!$1P.!$1S/!$1P.!$2%<!$1_3!$2%<!$1P.!$1P.!$1P.
+!$1S/!$1P.!$1P.!$1S/!$/fRrjI=~>
+rk@:i!9*VN!$1S/!$1P.!$1P.!$1S/!$1P.!$1S/!$1P.!$2";!$1b4!$2%<!$1P.!$1P.!$1P.
+!$1P.!$1P.!$1S/!$1S/!$/fRrk<m~>
+rjL_a!4;G!!0m!Q!0lsP!0lsP!0m!Q!0lsP!0m!Q!0lsP!0mE]!0m0V!0mH^!0lsP!0lsP!0lsP
+!0lsP!0lsP!0m!Q!0m!Q!0k4trjI=~>
+rjL_a!-%W2!$1S/!$1P.!$1P.!$1S/!$1P.!$1S/!$1P.!$2";!$1b4!$2%<!$1P.!$1P.!$1P.
+!$1P.!$1P.!$1S/!$1S/!$/fRrjI=~>
+rk@:i!9*VN!$1P.!$1P.!$1S/!$1S/!$1P.!$1S/!$1P.!$1t:!$1h6!$1t:!$1P.!$1P.!$1P.
+!$1S/!$1P.!$1S/!$1P.!$/iSrk<m~>
+rjL_a!4;G!!0lsP!0lsP!0m!Q!0m!Q!0lsP!0m!Q!0lsP!0mB\!0m6X!0mB\!0lsP!0lsP!0lsP
+!0m!Q!0lsP!0m!Q!0lsP!0k7urjI=~>
+rjL_a!-%W2!$1P.!$1P.!$1S/!$1S/!$1P.!$1S/!$1P.!$1t:!$1h6!$1t:!$1P.!$1P.!$1P.
+!$1S/!$1P.!$1S/!$1P.!$/iSrjI=~>
+rk@:i!9*SM!$1S/!$1P.!$1S/!$1S/!$1P.!$1S/!$1P.!$1q9!$1k7!$1q9!$1P.!$1S/!$1P.
+!$1P.!$1P.!$1S/!$1S/!$/iSrk<m~>
+rjL_a!4;Cu!0m!Q!0lsP!0m!Q!0m!Q!0lsP!0m!Q!0lsP!0m?[!0m9Y!0m?[!0lsP!0m!Q!0lsP
+!0lsP!0lsP!0m!Q!0m!Q!0k7urjI=~>
+rjL_a!-%T1!$1S/!$1P.!$1S/!$1S/!$1P.!$1S/!$1P.!$1q9!$1k7!$1q9!$1P.!$1S/!$1P.
+!$1P.!$1P.!$1S/!$1S/!$/iSrjI=~>
+rk@:i!9*SM!?JrFrrF.TnG`M0^[_=)*P_.E!?JrErrF.Tnc&V1^[V7(*P_IN!?JrOrrF.TqYpR:
+^[V7(*P_.E!?JrErrF.Tnc&V1^[V7(*P_.E!?JrFrrF.T_#ODJJ,~>
+rjL_a!4;Cu!L,>/rrJ?=nG`NR1%G8EPVM_.!L,>.rrJ?=nc&WS1%>2DPVN%7!L,>8rrJ?=qYpS\
+1%>2DPVM_.!L,>.rrJ?=nc&WS1%>2DPVM_.!L,>/rrJ?=_#ODBJ,~>
+rjL_a!-%T1!?EobrrF,pnG`M01%G8E*AR*a!?EoarrF,pnc&V11%>2D*AREj!?EokrrF,pqYpR:
+1%>2D*AR*a!?EoarrF,pnc&V11%>2D*AR*a!?EobrrF,p_#ODBJ,~>
+rk@:i!9*SMs1e+(s1e('s1e+(s1e+(s1e('s1e+(s1e('s1eF1!P]ZOs8Tk1rrKkTnG`O(*V'.1
+^E)hD!P]ZFrrKkTnG`M0^[_=)*P_.E!?Jqjs8K`_~>
+rjL_a!4;Cus"X'Ds"X$Cs"X'Ds"X'Ds"X$Cs"X'Ds"X$Cs"XBM!ATi8s8OhMrrFj=nG`MDPk"bS
+0pM2-!ATi/rrFj=nG`NR1%G8EPVM_.!L,=Ss8KHW~>
+rjL_a!-%T1s"X'Ds"X$Cs"X'Ds"X'Ds"X$Cs"X'Ds"X$Cs"XBM!APVks8OhMrrFhpnG`MD*V'.1
+0cfc`!APVbrrFhpnG`M01%G8E*AR*a!?Eo1s8KHW~>
+rk@:i!9*PL!$1S/!$1S/!$1S/!$1S/!$1P.!$1S/!$1P.!$1h6!$1t:!$1h6!$1S/!$1S/!$1P.
+!$1S/!$1P.!$1S/!$1S/!$/lTrk<m~>
+rjL_a!4;@t!0m!Q!0m!Q!0m!Q!0m!Q!0lsP!0m!Q!0lsP!0m6X!0mB\!0m6X!0m!Q!0m!Q!0lsP
+!0m!Q!0lsP!0m!Q!0m!Q!0k;!rjI=~>
+rjL_a!-%Q0!$1S/!$1S/!$1S/!$1S/!$1P.!$1S/!$1P.!$1h6!$1t:!$1h6!$1S/!$1S/!$1P.
+!$1S/!$1P.!$1S/!$1S/!$/lTrjI=~>
+rk@:i!9*PL!$1S/!$1S/!$1S/!$1S/!$1P.!$1S/!$1S/!$1b4!$2%<!$1b4!$1S/!$1S/!$1P.
+!$1S/!$1S/!$1S/!$1S/!$/lTrk<m~>
+rjL_a!4;@t!0m!Q!0m!Q!0m!Q!0m!Q!0lsP!0m!Q!0m!Q!0m0V!0mH^!0m0V!0m!Q!0m!Q!0lsP
+!0m!Q!0m!Q!0m!Q!0m!Q!0k;!rjI=~>
+rjL_a!-%Q0!$1S/!$1S/!$1S/!$1S/!$1P.!$1S/!$1S/!$1b4!$2%<!$1b4!$1S/!$1S/!$1P.
+!$1S/!$1S/!$1S/!$1S/!$/lTrjI=~>
+rk@:i!9*PL!$1S/!$1S/!$1S/!$1S/!$1P.!$1S/!$1S/!$1_3!$2(=!$1_3!$1S/!$1S/!$1S/
+!$1S/!$1S/!$1S/!$1S/!$/lTrk<m~>
+rjL_a!4;@t!0m!Q!0m!Q!0m!Q!0m!Q!0lsP!0m!Q!0m!Q!0m-U!0mK_!0m-U!0m!Q!0m!Q!0m!Q
+!0m!Q!0m!Q!0m!Q!0m!Q!0k;!rjI=~>
+rjL_a!-%Q0!$1S/!$1S/!$1S/!$1S/!$1P.!$1S/!$1S/!$1_3!$2(=!$1_3!$1S/!$1S/!$1S/
+!$1S/!$1S/!$1S/!$1S/!$/lTrjI=~>
+rk@:i!9*MK!$1S/!$1S/!$1S/!$1S/!$1S/!$1V0!$1P.!$1_3!$2(=!$1_3!$1S/!$1S/!$1P.
+!$1S/!$1S/!$1S/!$1S/!$/oUrk<m~>
+rjL_a!4;=s!0m!Q!0m!Q!0m!Q!0m!Q!0m!Q!0m$R!0lsP!0m-U!0mK_!0m-U!0m!Q!0m!Q!0lsP
+!0m!Q!0m!Q!0m!Q!0m!Q!0k>"rjI=~>
+rjL_a!-%N/!$1S/!$1S/!$1S/!$1S/!$1S/!$1V0!$1P.!$1_3!$2(=!$1_3!$1S/!$1S/!$1P.
+!$1S/!$1S/!$1S/!$1S/!$/oUrjI=~>
+rk@:i!9*MK!$1S/!$1S/!$1S/!$1S/!$1S/!$1V0!$1P.!$1\2"!.FA*V9:2*Us(/*Us(/*Us(/
+*Us(/*Us(/*Us(/*Us(/*PqdT^46~>
+rjL_a!4;=s!0m!Q!0m!Q!0m!Q!0m!Q!0m!Q!0m$R!0lsP!0m*T"-iicPk4nTPjn\QPjn\QPjn\Q
+Pjn\QPjn\QPjn\QPjn\QPemD![X\~>
+rjL_a!-%N/!$1S/!$1S/!$1S/!$1S/!$1S/!$1V0!$1P.!$1\2"!.FA*V9:2*Us(/*Us(/*Us(/
+*Us(/*Us(/*Us(/*Us(/*PqdT[X\~>
+rk@:i!9*MK!$1S/!$1S/!$1S/!$1S/!$1S/!$1V0!$1S/!$1V0ruLY0!$1S/!$1S/!$1S/!$1S/
+!$1V0!$1S/!$1S/!$/oUrk<m~>
+rjL_a!4;=s!0m!Q!0m!Q!0m!Q!0m!Q!0m!Q!0m$R!0m!Q!0m$Rs-3'R!0m!Q!0m!Q!0m!Q!0m!Q
+!0m$R!0m!Q!0m!Q!0k>"rjI=~>
+rjL_a!-%N/!$1S/!$1S/!$1S/!$1S/!$1S/!$1V0!$1S/!$1V0ruLY0!$1S/!$1S/!$1S/!$1S/
+!$1V0!$1S/!$1S/!$/oUrjI=~>
+rk@:i!9*JJ!$1S/!$1V0!$1S/!$1S/!$1S/!$1V0!$1S/!$1S/!$1S/!$1V0!$1S/!$1S/!$1S/
+!$1S/!$1S/!$1S/!$/rVrk<m~>
+rjL_a!4;:r!0m!Q!0m$R!0m!Q!0m!Q!0m!Q!0m$R!0m!Q!0m!Q!0m!Q!0m$R!0m!Q!0m!Q!0m!Q
+!0m!Q!0m!Q!0m!Q!0kA#rjI=~>
+rjL_a!-%K.!$1S/!$1V0!$1S/!$1S/!$1S/!$1V0!$1S/!$1S/!$1S/!$1V0!$1S/!$1S/!$1S/
+!$1S/!$1S/!$1S/!$/rVrjI=~>
+rk@:i!9*JJ!?JrFrrF.To)A_2^[_=)*P_.E!?JrFrrF.To)A_2^[_=)*P_.E!Zf%jnc&V1^[hC*
+*P_.E!?JrFrrF.Tnc&V1^[hC**P_.E!?JrFrrF.T_uK_MJ,~>
+rjL_a!4;:r!L,>/rrJ?=o)A`T1%G8EPVM_.!L,>/rrJ?=o)A`T1%G8EPVM_.!gGDonc&WS1%P>F
+PVM_.!L,>/rrJ?=nc&WS1%P>FPVM_.!L,>/rrJ?=_uK_EJ,~>
+rjL_a!-%K.!?EobrrF,po)A_21%G8E*AR*a!?EobrrF,po)A_21%G8E*AR*a!Za!Mnc&V11%P>F
+*AR*a!?EobrrF,pnc&V11%P>F*AR*a!?EobrrF,p_uK_EJ,~>
+rk@:i!9*JJs1e+(s1e.)s1e+(s1e+(s1e+(s1e.)s1e+(s1e+(s1\OSnc&X)*V042^E)kE!P]ZF
+rrKkTnc&V1^[hC**P_.E!?JrFrrF.T_uK_MJ,~>
+rjL_a!4;:rs"X'Ds"X*Es"X'Ds"X'Ds"X'Ds"X*Es"X'Ds"X'Ds"OM<nc&VEPk+hT0pM5.!ATi/
+rrFj=nc&WS1%P>FPVM_.!L,>/rrJ?=_uK_EJ,~>
+rjL_a!-%K.s"X'Ds"X*Es"X'Ds"X'Ds"X'Ds"X*Es"X'Ds"X'Ds"OKonc&VE*V0420cffa!APVb
+rrFhpnc&V11%P>F*AR*a!?EobrrF,p_uK_EJ,~>
+rk@:i!9*GI!$1S/!$1V0!$1V0!$1S/!$1S/!$1V0!$1S/!$1S/"!.FA*Us(/*V'.0*V'.0*Us(/
+*Us(/*V'.0*Us(/*V'.0*Q%jU^46~>
+rjL_a!4;7q!0m!Q!0m$R!0m$R!0m!Q!0m!Q!0m$R!0m!Q!0m!Q"-iicPjn\QPk"bRPk"bRPjn\Q
+Pjn\QPk"bRPjn\QPk"bRPf!J"[X\~>
+rjL_a!-%H-!$1S/!$1V0!$1V0!$1S/!$1S/!$1V0!$1S/!$1S/"!.FA*Us(/*V'.0*V'.0*Us(/
+*Us(/*V'.0*Us(/*V'.0*Q%jU[X\~>
+rk@:i!9*GI!$1S/!$1V0!$1S/!$1V0!$1S/!$1V0!$1S/!$1V0!$2%<!$1V0!$1V0!$1S/!$1S/
+!$1V0!$1V0!$1S/!$1S/!$/uWrk<m~>
+rjL_a!4;7q!0m!Q!0m$R!0m!Q!0m$R!0m!Q!0m$R!0m!Q!0m$R!0mH^!0m$R!0m$R!0m!Q!0m!Q
+!0m$R!0m$R!0m!Q!0m!Q!0kD$rjI=~>
+rjL_a!-%H-!$1S/!$1V0!$1S/!$1V0!$1S/!$1V0!$1S/!$1V0!$2%<!$1V0!$1V0!$1S/!$1S/
+!$1V0!$1V0!$1S/!$1S/!$/uWrjI=~>
+rk@:i!9*DH!$1V0!$1V0!$1S/!$1V0!$1S/!$1V0!$1S/!$1V0!$2";!$1V0!$1V0!$1S/!$1V0
+!$1S/!$1V0!$1V0!$1S/!$/uWrk<m~>
+rjL_a!4;4p!0m$R!0m$R!0m!Q!0m$R!0m!Q!0m$R!0m!Q!0m$R!0mE]!0m$R!0m$R!0m!Q!0m$R
+!0m!Q!0m$R!0m$R!0m!Q!0kD$rjI=~>
+rjL_a!-%E,!$1V0!$1V0!$1S/!$1V0!$1S/!$1V0!$1S/!$1V0!$2";!$1V0!$1V0!$1S/!$1V0
+!$1S/!$1V0!$1V0!$1S/!$/uWrjI=~>
+rk@:i!9*DH!$1S/!$1V0!$1V0!$1S/!$1V0!$1V0!$1V0!$1S/!$2";!$1S/!$1V0!$1V0!$1S/
+!$1V0!$1V0!$1S/!$1V0!$/uWrk<m~>
+rjL_a!4;4p!0m!Q!0m$R!0m$R!0m!Q!0m$R!0m$R!0m$R!0m!Q!0mE]!0m!Q!0m$R!0m$R!0m!Q
+!0m$R!0m$R!0m!Q!0m$R!0kD$rjI=~>
+rjL_a!-%E,!$1S/!$1V0!$1V0!$1S/!$1V0!$1V0!$1V0!$1S/!$2";!$1S/!$1V0!$1V0!$1S/
+!$1V0!$1V0!$1S/!$1V0!$/uWrjI=~>
+rk@:i!9*AG!$1V0!$1V0!$1V0!$1S/!$1V0!$1V0!$1V0!$1S/!$1t:!$1S/!$1V0!$1V0!$1V0
+!$1S/!$1V0!$1V0!$1V0!$/uWrk<m~>
+rjL_a!4;1o!0m$R!0m$R!0m$R!0m!Q!0m$R!0m$R!0m$R!0m!Q!0mB\!0m!Q!0m$R!0m$R!0m$R
+!0m!Q!0m$R!0m$R!0m$R!0kD$rjI=~>
+rjL_a!-%B+!$1V0!$1V0!$1V0!$1S/!$1V0!$1V0!$1V0!$1S/!$1t:!$1S/!$1V0!$1V0!$1V0
+!$1S/!$1V0!$1V0!$1V0!$/uWrjI=~>
+rk@:i!9*AG!$1V0!$1V0!$1S/!$1V0!$1V0!$1V0!$1V0!$1V0!$1n8!$1V0!$1V0!$1S/!$1V0
+!$1V0!$1V0!$1V0!$1S/!$0#Xrk<m~>
+rjL_a!4;1o!0m$R!0m$R!0m!Q!0m$R!0m$R!0m$R!0m$R!0m$R!0m<Z!0m$R!0m$R!0m!Q!0m$R
+!0m$R!0m$R!0m$R!0m!Q!0kG%rjI=~>
+rjL_a!-%B+!$1V0!$1V0!$1S/!$1V0!$1V0!$1V0!$1V0!$1V0!$1n8!$1V0!$1V0!$1S/!$1V0
+!$1V0!$1V0!$1V0!$1S/!$0#XrjI=~>
+rk@:i!9*>F!$1V0!$1V0!$1V0!$1V0!$1V0!$1V0!$1V0!$1V0!$1k7!$1V0!$1V0!$1V0!$1V0
+!$1S/!$1V0!$1V0!$1V0!$0#Xrk<m~>
+rjL_a!4;.n!0m$R!0m$R!0m$R!0m$R!0m$R!0m$R!0m$R!0m$R!0m9Y!0m$R!0m$R!0m$R!0m$R
+!0m!Q!0m$R!0m$R!0m$R!0kG%rjI=~>
+rjL_a!-%?*!$1V0!$1V0!$1V0!$1V0!$1V0!$1V0!$1V0!$1V0!$1k7!$1V0!$1V0!$1V0!$1V0
+!$1S/!$1V0!$1V0!$1V0!$0#XrjI=~>
+rk@:i!9*>F!?JrGrrF.To)A_2^[hC**P_1F!?JrGrrF.To)A_2^[hC**P_1F!?JrMrrF.To)A_2
+^[hC**P_1F!?JrGrrF.To)A_2^[hC**P_1F!?JrGrrF.T`W,qOJ,~>
+rjL_a!4;.n!L,>0rrJ?=o)A`T1%P>FPVMb/!L,>0rrJ?=o)A`T1%P>FPVMb/!L,>6rrJ?=o)A`T
+1%P>FPVMb/!L,>0rrJ?=o)A`T1%P>FPVMb/!L,>0rrJ?=`W,qGJ,~>
+rjL_a!-%?*!?EocrrF,po)A_21%P>F*AR-b!?EocrrF,po)A_21%P>F*AR-b!?EoirrF,po)A_2
+1%P>F*AR-b!?EocrrF,po)A_21%P>F*AR-b!?EocrrF,p`W,qGJ,~>
+rk@:i!9*>Fs1e.)s1e.)s1e.)s1e.)s1e.)s1e.)s1e.)s1e.)s1e@/!P]ZGrrKkTo)Aa**V042
+^E)nF!P]ZGrrKkTo)A_2^[hC**P_1F!?Jqos8K`_~>
+rjL_a!4;.ns"X*Es"X*Es"X*Es"X*Es"X*Es"X*Es"X*Es"X*Es"X<K!ATi0rrFj=o)A_FPk+hT
+0pM8/!ATi0rrFj=o)A`T1%P>FPVMb/!L,=Xs8KHW~>
+rjL_a!-%?*s"X*Es"X*Es"X*Es"X*Es"X*Es"X*Es"X*Es"X*Es"X<K!APVcrrFhpo)A_F*V042
+0cfib!APVcrrFhpo)A_21%P>F*AR-b!?Eo6s8KHW~>
+rk@:i!9*;E!$1Y1!$1V0!$1V0!$1V0!$1V0!$1V0!$1V0!$1Y1!$1_3!$1V0!$1Y1!$1V0!$1V0
+!$1V0!$1V0!$1V0!$1Y1!$0#Xrk<m~>
+rjL_a!4;+m!0m'S!0m$R!0m$R!0m$R!0m$R!0m$R!0m$R!0m'S!0m-U!0m$R!0m'S!0m$R!0m$R
+!0m$R!0m$R!0m$R!0m'S!0kG%rjI=~>
+rjL_a!-%<)!$1Y1!$1V0!$1V0!$1V0!$1V0!$1V0!$1V0!$1Y1!$1_3!$1V0!$1Y1!$1V0!$1V0
+!$1V0!$1V0!$1V0!$1Y1!$0#XrjI=~>
+rk@:i!9*;E!$1V0!$1V0!$1Y1!$1V0!$1V0!$1V0!$1Y1!$1V0!$1_3!$1V0!$1V0!$1V0!$1V0
+!$1V0!$1Y1!$1V0!$1V0!$0&Yrk<m~>
+rjL_a!4;+m!0m$R!0m$R!0m'S!0m$R!0m$R!0m$R!0m'S!0m$R!0m-U!0m$R!0m$R!0m$R!0m$R
+!0m$R!0m'S!0m$R!0m$R!0kJ&rjI=~>
+rjL_a!-%<)!$1V0!$1V0!$1Y1!$1V0!$1V0!$1V0!$1Y1!$1V0!$1_3!$1V0!$1V0!$1V0!$1V0
+!$1V0!$1Y1!$1V0!$1V0!$0&YrjI=~>
+rk@:i!9*;E!$1V0!$1V0!$1Y1!$1V0!$1V0!$1V0!$1Y1!$1V0!$1\2!$1V0!$1V0!$1Y1!$1V0
+!$1V0!$1V0!$1Y1!$1V0!$0&Yrk<m~>
+rjL_a!4;+m!0m$R!0m$R!0m'S!0m$R!0m$R!0m$R!0m'S!0m$R!0m*T!0m$R!0m$R!0m'S!0m$R
+!0m$R!0m$R!0m'S!0m$R!0kJ&rjI=~>
+rjL_a!-%<)!$1V0!$1V0!$1Y1!$1V0!$1V0!$1V0!$1Y1!$1V0!$1\2!$1V0!$1V0!$1Y1!$1V0
+!$1V0!$1V0!$1Y1!$1V0!$0&YrjI=~>
+rk@:i!9*8D!$1Y1!$1V0!$1V0!$1Y1!$1Y1!$1V0!$1V0!$1Y1!$1V0!$1V0!$1V0!$1Y1!$1V0
+!$1V0!$1Y1!$1V0!$1Y1!$0&Yrk<m~>
+rjL_a!4;(l!0m'S!0m$R!0m$R!0m'S!0m'S!0m$R!0m$R!0m'S!0m$R!0m$R!0m$R!0m'S!0m$R
+!0m$R!0m'S!0m$R!0m'S!0kJ&rjI=~>
+rjL_a!-%9(!$1Y1!$1V0!$1V0!$1Y1!$1Y1!$1V0!$1V0!$1Y1!$1V0!$1V0!$1V0!$1Y1!$1V0
+!$1V0!$1Y1!$1V0!$1Y1!$0&YrjI=~>
+rk@:i!9*8D!$1Y1!$1V0!$1V0!$1Y1!$1Y1!$1V0!$1V0!$1Y1!$1S/!$1V0!$1Y1!$1V0!$1Y1
+!$1V0!$1Y1!$1V0!$1Y1!$0&Yrk<m~>
+rjL_a!4;(l!0m'S!0m$R!0m$R!0m'S!0m'S!0m$R!0m$R!0m'S!0m!Q!0m$R!0m'S!0m$R!0m'S
+!0m$R!0m'S!0m$R!0m'S!0kJ&rjI=~>
+rjL_a!-%9(!$1Y1!$1V0!$1V0!$1Y1!$1Y1!$1V0!$1V0!$1Y1!$1S/!$1V0!$1Y1!$1V0!$1Y1
+!$1V0!$1Y1!$1V0!$1Y1!$0&YrjI=~>
+rk@:i!9*8D!$1Y1!$1V0!$1V0!$1Y1!$1Y1!$1V0!$1V0!$1Y1!$1P.!$1V0!$1Y1!$1Y1!$1V0
+!$1V0!$1Y1!$1Y1!$1Y1!$0&Yrk<m~>
+rjL_a!4;(l!0m'S!0m$R!0m$R!0m'S!0m'S!0m$R!0m$R!0m'S!0lsP!0m$R!0m'S!0m'S!0m$R
+!0m$R!0m'S!0m'S!0m'S!0kJ&rjI=~>
+rjL_a!-%9(!$1Y1!$1V0!$1V0!$1Y1!$1Y1!$1V0!$1V0!$1Y1!$1P.!$1V0!$1Y1!$1Y1!$1V0
+!$1V0!$1Y1!$1Y1!$1Y1!$0&YrjI=~>
+rk@:i!9*8D!$1V0!$1V0!$1Y1!$1Y1!$1Y1!$1V0!$1Y1!$1V0!$1P.!$1V0!$1V0!$1Y1!$1Y1
+!$1V0!$1Y1!$1Y1!$1V0!$0)Zrk<m~>
+rjL_a!4;(l!0m$R!0m$R!0m'S!0m'S!0m'S!0m$R!0m'S!0m$R!0lsP!0m$R!0m$R!0m'S!0m'S
+!0m$R!0m'S!0m'S!0m$R!0kM'rjI=~>
+rjL_a!-%9(!$1V0!$1V0!$1Y1!$1Y1!$1Y1!$1V0!$1Y1!$1V0!$1P.!$1V0!$1V0!$1Y1!$1Y1
+!$1V0!$1Y1!$1Y1!$1V0!$0)ZrjI=~>
+rk@:i!9*5C!$1Y1!$1V0!$1Y1!$1Y1!$1Y1!$1V0!$1Y1!$1Y1!$1J,!$1V0!$1Y1!$1Y1!$1V0
+!$1V0!$1Y1!$1Y1!$1Y1!$0)Zrk<m~>
+rjL_a!4;%k!0m'S!0m$R!0m'S!0m'S!0m'S!0m$R!0m'S!0m'S!0lmN!0m$R!0m'S!0m'S!0m$R
+!0m$R!0m'S!0m'S!0m'S!0kM'rjI=~>
+rjL_a!-%6'!$1Y1!$1V0!$1Y1!$1Y1!$1Y1!$1V0!$1Y1!$1Y1!$1J,!$1V0!$1Y1!$1Y1!$1V0
+!$1V0!$1Y1!$1Y1!$1Y1!$0)ZrjI=~>
+rk@:i!9*5C!?JrHrrF.To)A_2^[qI+*P_4G!?JrHrrF.To)A_2^[qI+*P_4G!?JrBrrF.To)A_2
+^[qI+*P_4G!?JrHrrF.To)A_2^[qI+*P_4G!?JrHrrF.Ta8c.QJ,~>
+rjL_a!4;%k!L,>1rrJ?=o)A`T1%YDGPVMe0!L,>1rrJ?=o)A`T1%YDGPVMe0!L,>+rrJ?=o)A`T
+1%YDGPVMe0!L,>1rrJ?=o)A`T1%YDGPVMe0!L,>1rrJ?=a8c.IJ,~>
+rjL_a!-%6'!?EodrrF,po)A_21%YDG*AR0c!?EodrrF,po)A_21%YDG*AR0c!?Eo^rrF,po)A_2
+1%YDG*AR0c!?EodrrF,po)A_21%YDG*AR0c!?EodrrF,pa8c.IJ,~>
+rk@:i!9*5Cs1e1*s1e.)s1e1*s1e1*s1e1*s1e.)s1e1*s1e1*s1dt$!P]ZGrrKkToD\j+*V9:3
+^E)qG!P]ZGrrF.ToD\h3^[qI+*P_4G!?Jqqs8K`_~>
+rjL_a!4;%ks"X-Fs"X*Es"X-Fs"X-Fs"X-Fs"X*Es"X-Fs"X-Fs"Wp@!ATi0rrFj=oD\hGPk4nU
+0pM;0!ATi0rrJ?=oD\iU1%YDGPVMe0!L,=Zs8KHW~>
+rjL_a!-%6's"X-Fs"X*Es"X-Fs"X-Fs"X-Fs"X*Es"X-Fs"X-Fs"Wp@!APVcrrFhpoD\hG*V9:3
+0cflc!APVcrrF,poD\h31%YDG*AR0c!?Eo8s8KHW~>
+rk@:i!9*2B!$1Y1!$1Y1!$1Y1!$1Y1!$1Y1!$1V0!$1Y1!$1Y1!$1A)!$1V0!$1Y1!$1\2!$1Y1
+!$1V0!$1Y1!$1Y1!$1Y1!$0,[rk<m~>
+rjL_a!4;"j!0m'S!0m'S!0m'S!0m'S!0m'S!0m$R!0m'S!0m'S!0ldK!0m$R!0m'S!0m*T!0m'S
+!0m$R!0m'S!0m'S!0m'S!0kP(rjI=~>
+rjL_a!-%3&!$1Y1!$1Y1!$1Y1!$1Y1!$1Y1!$1V0!$1Y1!$1Y1!$1A)!$1V0!$1Y1!$1\2!$1Y1
+!$1V0!$1Y1!$1Y1!$1Y1!$0,[rjI=~>
+rk@:i!9*2B!$1Y1!$1V0!$1Y1!$1\2!$1Y1!$1V0!$1\2!$1Y1!$1;'!$1Y1!$1Y1!$1Y1!$1Y1
+!$1Y1!$1Y1!$1Y1!$1Y1!$0,[rk<m~>
+rjL_a!4;"j!0m'S!0m$R!0m'S!0m*T!0m'S!0m$R!0m*T!0m'S!0l^I!0m'S!0m'S!0m'S!0m'S
+!0m'S!0m'S!0m'S!0m'S!0kP(rjI=~>
+rjL_a!-%3&!$1Y1!$1V0!$1Y1!$1\2!$1Y1!$1V0!$1\2!$1Y1!$1;'!$1Y1!$1Y1!$1Y1!$1Y1
+!$1Y1!$1Y1!$1Y1!$1Y1!$0,[rjI=~>
+rk@:i!9*/A!$1Y1!$1Y1!$1Y1!$1\2!$1Y1!$1V0!$1\2!$1Y1!$18&!$1Y1!$1Y1!$1Y1!$1Y1
+!$1Y1!$1Y1!$1\2!$1Y1!$0,[rk<m~>
+rjL_a!4:ti!0m'S!0m'S!0m'S!0m*T!0m'S!0m$R!0m*T!0m'S!0l[H!0m'S!0m'S!0m'S!0m'S
+!0m'S!0m'S!0m*T!0m'S!0kP(rjI=~>
+rjL_a!-%0%!$1Y1!$1Y1!$1Y1!$1\2!$1Y1!$1V0!$1\2!$1Y1!$18&!$1Y1!$1Y1!$1Y1!$1Y1
+!$1Y1!$1Y1!$1\2!$1Y1!$0,[rjI=~>
+rk@:i!9*/A!$1Y1!$1Y1!$1Y1!$1Y1!$1Y1!$1\2!$1Y1!$1Y1!$15%!$1Y1!$1Y1!$1\2!$1Y1
+!$1Y1!$1Y1!$1Y1!$1Y1!$0/\rk<m~>
+rjL_a!4:ti!0m'S!0m'S!0m'S!0m'S!0m'S!0m*T!0m'S!0m'S!0lXG!0m'S!0m'S!0m*T!0m'S
+!0m'S!0m'S!0m'S!0m'S!0kS)rjI=~>
+rjL_a!-%0%!$1Y1!$1Y1!$1Y1!$1Y1!$1Y1!$1\2!$1Y1!$1Y1!$15%!$1Y1!$1Y1!$1\2!$1Y1
+!$1Y1!$1Y1!$1Y1!$1Y1!$0/\rjI=~>
+rk@:i!9*,@!$1Y1!$1\2!$1Y1!$1Y1!$1Y1!$1\2!$1Y1!$1Y1!$12$!$1Y1!$1Y1!$1\2!$1Y1
+!$1Y1!$1Y1!$1\2!$1Y1!$0/\rk<m~>
+rjL_a!4:qh!0m'S!0m*T!0m'S!0m'S!0m'S!0m*T!0m'S!0m'S!0lUF!0m'S!0m'S!0m*T!0m'S
+!0m'S!0m'S!0m*T!0m'S!0kS)rjI=~>
+rjL_a!-%-$!$1Y1!$1\2!$1Y1!$1Y1!$1Y1!$1\2!$1Y1!$1Y1!$12$!$1Y1!$1Y1!$1\2!$1Y1
+!$1Y1!$1Y1!$1\2!$1Y1!$0/\rjI=~>
+rk@:i!9*,@!$1Y1!$1Y1!$1Y1!$1\2!$1Y1!$1\2!$1\2!$1Y1!$1,"!$1\2!$1Y1!$1Y1!$1Y1
+!$1\2!$1Y1!$1\2!$1Y1!$0/\rk<m~>
+rjL_a!4:qh!0m'S!0m'S!0m'S!0m*T!0m'S!0m*T!0m*T!0m'S!0lOD!0m*T!0m'S!0m'S!0m'S
+!0m*T!0m'S!0m*T!0m'S!0kS)rjI=~>
+rjL_a!-%-$!$1Y1!$1Y1!$1Y1!$1\2!$1Y1!$1\2!$1\2!$1Y1!$1,"!$1\2!$1Y1!$1Y1!$1Y1
+!$1\2!$1Y1!$1\2!$1Y1!$0/\rjI=~>
+rk@:i!9*)?!$1Y1!$1\2!$1Y1!$1\2!$1Y1!$1\2!$1\2!$1Y1!$1)!!$1\2!$1Y1!$1\2!$1Y1
+!$1Y1!$1Y1!$1\2!$1Y1!$02]rk<m~>
+rjL_a!4:ng!0m'S!0m*T!0m'S!0m*T!0m'S!0m*T!0m*T!0m'S!0lLC!0m*T!0m'S!0m*T!0m'S
+!0m'S!0m'S!0m*T!0m'S!0kV*rjI=~>
+rjL_a!-%*#!$1Y1!$1\2!$1Y1!$1\2!$1Y1!$1\2!$1\2!$1Y1!$1)!!$1\2!$1Y1!$1\2!$1Y1
+!$1Y1!$1Y1!$1\2!$1Y1!$02]rjI=~>
+rk@:i!9*)?!?JrHrrF.To`"q4^[qI+*P_7H!?JrHrrF.To`"q4^\%O,*P_4G!?Jr7rrF.To`"q4
+^[qI+*P_7H!?JrHrrF.To`"q4^[qI+*P_7H!?JrHrrF.Tb5_ITJ,~>
+rjL_a!4:ng!L,>1rrJ?=o`"rV1%YDGPVMh1!L,>1rrJ?=o`"rV1%bJHPVMe0!L,=urrJ?=o`"rV
+1%YDGPVMh1!L,>1rrJ?=o`"rV1%YDGPVMh1!L,>1rrJ?=b5_ILJ,~>
+rjL_a!-%*#!?EodrrF,po`"q41%YDG*AR3d!?EodrrF,po`"q41%bJH*AR0c!?EoSrrF,po`"q4
+1%YDG*AR3d!?EodrrF,po`"q41%YDG*AR3d!?EodrrF,pb5_ILJ,~>
+rk@:i!9*)?s1e1*s1e4+s1e1*s1e4+s1e1*s1e4+s1e4+s1e1*s1dRn!P]ZIrrKkToD\j+*VB@4
+^E)qG!P]ZIrrKkToD\h3^\%O,*P_4G!?Jqts8K`_~>
+rjL_a!4:ngs"X-Fs"X0Gs"X-Fs"X0Gs"X-Fs"X0Gs"X0Gs"X-Fs"WO5!ATi2rrFj=oD\hGPk=tV
+0pM;0!ATi2rrFj=oD\iU1%bJHPVMe0!L,=]s8KHW~>
+rjL_a!-%*#s"X-Fs"X0Gs"X-Fs"X0Gs"X-Fs"X0Gs"X0Gs"X-Fs"WO5!APVerrFhpoD\hG*VB@4
+0cflc!APVerrFhpoD\h31%bJH*AR0c!?Eo;s8KHW~>
+rk@:i!9*&>!$1Y1!$1\2!$1\2!$1\2!$1Y1!$1\2!$1\2!$1Y1!$0ts!$1\2!$1\2!$1\2!$1Y1
+!$1\2!$1Y1!$1\2!$1\2!$02]rk<m~>
+rjL_a!4:kf!0m'S!0m*T!0m*T!0m*T!0m'S!0m*T!0m*T!0m'S!0lC@!0m*T!0m*T!0m*T!0m'S
+!0m*T!0m'S!0m*T!0m*T!0kV*rjI=~>
+rjL_a!-%'"!$1Y1!$1\2!$1\2!$1\2!$1Y1!$1\2!$1\2!$1Y1!$0ts!$1\2!$1\2!$1\2!$1Y1
+!$1\2!$1Y1!$1\2!$1\2!$02]rjI=~>
+rk@:i!9*&>!$1Y1!$1\2!$1\2!$1\2!$1Y1!$1\2!$1\2!$1\2!$0qr!$1\2!$1Y1!$1\2!$1Y1
+!$1\2!$1\2!$1\2!$1Y1!$05^rk<m~>
+rjL_a!4:kf!0m'S!0m*T!0m*T!0m*T!0m'S!0m*T!0m*T!0m*T!0l@?!0m*T!0m'S!0m*T!0m'S
+!0m*T!0m*T!0m*T!0m'S!0kY+rjI=~>
+rjL_a!-%'"!$1Y1!$1\2!$1\2!$1\2!$1Y1!$1\2!$1\2!$1\2!$0qr!$1\2!$1Y1!$1\2!$1Y1
+!$1\2!$1\2!$1\2!$1Y1!$05^rjI=~>
+rk@:i!9*#=!$1\2!$1\2!$1\2!$1\2!$1Y1!$1\2!$1\2!$1\2!$0nq!$1\2!$1Y1!$1_3!$1Y1
+!$1\2!$1Y1!$1_3!$1Y1!$05^rk<m~>
+rjL_a!4:he!0m*T!0m*T!0m*T!0m*T!0m'S!0m*T!0m*T!0m*T!0l=>!0m*T!0m'S!0m-U!0m'S
+!0m*T!0m'S!0m-U!0m'S!0kY+rjI=~>
+rjL_a!-%$!!$1\2!$1\2!$1\2!$1\2!$1Y1!$1\2!$1\2!$1\2!$0nq!$1\2!$1Y1!$1_3!$1Y1
+!$1\2!$1Y1!$1_3!$1Y1!$05^rjI=~>
+rk@:i!9*#=!$1Y1!$1\2!$1\2!$1\2!$1\2!$1_3!$1\2!$1Y1!$0kp!$1\2!$1Y1!$1_3!$1Y1
+!$1\2!$1\2!$1\2!$1\2!$05^rk<m~>
+rjL_a!4:he!0m'S!0m*T!0m*T!0m*T!0m*T!0m-U!0m*T!0m'S!0l:=!0m*T!0m'S!0m-U!0m'S
+!0m*T!0m*T!0m*T!0m*T!0kY+rjI=~>
+rjL_a!-%$!!$1Y1!$1\2!$1\2!$1\2!$1\2!$1_3!$1\2!$1Y1!$0kp!$1\2!$1Y1!$1_3!$1Y1
+!$1\2!$1\2!$1\2!$1\2!$05^rjI=~>
+rk@:i!9*#=!$1Y1!$1\2!$1\2!$1\2!$1\2!$1_3!$1\2!$1Y1!$0ho!$1\2!$1\2!$1\2!$1\2
+!$1\2!$1\2!$1\2!$1\2!$05^rk<m~>
+rjL_a!4:he!0m'S!0m*T!0m*T!0m*T!0m*T!0m-U!0m*T!0m'S!0l7<!0m*T!0m*T!0m*T!0m*T
+!0m*T!0m*T!0m*T!0m*T!0kY+rjI=~>
+rjL_a!-%$!!$1Y1!$1\2!$1\2!$1\2!$1\2!$1_3!$1\2!$1Y1!$0ho!$1\2!$1\2!$1\2!$1\2
+!$1\2!$1\2!$1\2!$1\2!$05^rjI=~>
+rk@:i!9)u<!$1\2!$1\2!$1\2!$1\2!$1\2!$1_3!$1\2!$1Y1!$0en!$1\2!$1\2!$1_3!$1Y1
+!$1\2!$1\2!$1_3!$1\2!$05^rk<m~>
+rjL_a!4:ed!0m*T!0m*T!0m*T!0m*T!0m*T!0m-U!0m*T!0m'S!0l4;!0m*T!0m*T!0m-U!0m'S
+!0m*T!0m*T!0m-U!0m*T!0kY+rjI=~>
+rjL_a!-$uu!$1\2!$1\2!$1\2!$1\2!$1\2!$1_3!$1\2!$1Y1!$0en!$1\2!$1\2!$1_3!$1Y1
+!$1\2!$1\2!$1_3!$1\2!$05^rjI=~>
+rk@:i!9)u<!$1\2!$1\2!$1\2!$1\2!$1\2!$1_3!$1\2!$1\2!$0bm!$1\2!$1Y1!$1_3!$1\2
+!$1\2!$1\2!$1_3!$1Y1!$08_rk<m~>
+rjL_a!4:ed!0m*T!0m*T!0m*T!0m*T!0m*T!0m-U!0m*T!0m*T!0l1:!0m*T!0m'S!0m-U!0m*T
+!0m*T!0m*T!0m-U!0m'S!0k\,rjI=~>
+rjL_a!-$uu!$1\2!$1\2!$1\2!$1\2!$1\2!$1_3!$1\2!$1\2!$0bm!$1\2!$1Y1!$1_3!$1\2
+!$1\2!$1\2!$1_3!$1Y1!$08_rjI=~>
+rk@:i!9)r;!$1\2!$1\2!$1_3!$1\2!$1\2!$1_3!$1\2!$1\2!$0_l!$1\2!$1\2!$1_3!$1Y1
+!$1\2!$1\2!$1_3!$1\2!$08_rk<m~>
+rjL_a!4:bc!0m*T!0m*T!0m-U!0m*T!0m*T!0m-U!0m*T!0m*T!0l.9!0m*T!0m*T!0m-U!0m'S
+!0m*T!0m*T!0m-U!0m*T!0k\,rjI=~>
+rjL_a!-$rt!$1\2!$1\2!$1_3!$1\2!$1\2!$1_3!$1\2!$1\2!$0_l!$1\2!$1\2!$1_3!$1Y1
+!$1\2!$1\2!$1_3!$1\2!$08_rjI=~>
+rk@:i!9)r;!?JrIrrF.To`"q4^\.U-*P_7H!?JrIrrF.Tp&>%5^\%O,*P_7H!?Jr-rrF.To`"q4
+^\%O,*P_:I!?JrIrrF.To`"q4^\%O,*P_:I!?JrIrrF.Tbl@[VJ,~>
+rjL_a!4:bc!L,>2rrJ?=o`"rV1%kPIPVMh1!L,>2rrJ?=p&>&W1%bJHPVMh1!L,=krrJ?=o`"rV
+1%bJHPVMk2!L,>2rrJ?=o`"rV1%bJHPVMk2!L,>2rrJ?=bl@[NJ,~>
+rjL_a!-$rt!?EoerrF,po`"q41%kPI*AR3d!?EoerrF,pp&>%51%bJH*AR3d!?EoIrrF,po`"q4
+1%bJH*AR6e!?EoerrF,po`"q41%bJH*AR6e!?EoerrF,pbl@[NJ,~>
+rk@:i!9)r;s1e4+s1e4+s1e7,s1e4+s1e4+s1e7,s1e4+s1e4+s1d4d!P]ZIrrKkTo`"s,*VKF5
+^E)tH!P]ZIrrKkTo`"q4^\.U-*P_7H!?Jr!s8K`_~>
+rjL_a!4:bcs"X0Gs"X0Gs"X3Hs"X0Gs"X0Gs"X3Hs"X0Gs"X0Gs"W1+!ATi2rrFj=o`"qHPkG%W
+0pM>1!ATi2rrFj=o`"rV1%kPIPVMh1!L,=_s8KHW~>
+rjL_a!-$rts"X0Gs"X0Gs"X3Hs"X0Gs"X0Gs"X3Hs"X0Gs"X0Gs"W1+!APVerrFhpo`"qH*VKF5
+0cfod!APVerrFhpo`"q41%kPI*AR3d!?Eo=s8KHW~>
+rk@:i!9)o:!$1\2!$1_3!$1_3!$1\2!$1\2!$1_3!$1\2!$1_3!$0Sh!$1\2!$1_3!$1_3!$1\2
+!$1\2!$1\2!$1_3!$1_3!$08_rk<m~>
+rjL_a!4:_b!0m*T!0m-U!0m-U!0m*T!0m*T!0m-U!0m*T!0m-U!0l"5!0m*T!0m-U!0m-U!0m*T
+!0m*T!0m*T!0m-U!0m-U!0k\,rjI=~>
+rjL_a!-$os!$1\2!$1_3!$1_3!$1\2!$1\2!$1_3!$1\2!$1_3!$0Sh!$1\2!$1_3!$1_3!$1\2
+!$1\2!$1\2!$1_3!$1_3!$08_rjI=~>
+rk@:i!9)o:!$1\2!$1\2!$1_3!$1_3!$1\2!$1_3!$1_3!$1\2!$0Pg!$1_3!$1\2!$1_3!$1\2
+!$1\2!$1_3!$1_3!$1\2!$0;`rk<m~>
+rjL_a!4:_b!0m*T!0m*T!0m-U!0m-U!0m*T!0m-U!0m-U!0m*T!0kt4!0m-U!0m*T!0m-U!0m*T
+!0m*T!0m-U!0m-U!0m*T!0k_-rjI=~>
+rjL_a!-$os!$1\2!$1\2!$1_3!$1_3!$1\2!$1_3!$1_3!$1\2!$0Pg!$1_3!$1\2!$1_3!$1\2
+!$1\2!$1_3!$1_3!$1\2!$0;`rjI=~>
+rk@:i!9)l9!$1_3!$1\2!$1_3!$1_3!$1\2!$1_3!$1_3!$1\2!$0Mf!$1_3!$1\2!$1_3!$1_3
+!$1\2!$1_3!$1_3!$1\2!$0;`rk<m~>
+rjL_a!4:\a!0m-U!0m*T!0m-U!0m-U!0m*T!0m-U!0m-U!0m*T!0kq3!0m-U!0m*T!0m-U!0m-U
+!0m*T!0m-U!0m-U!0m*T!0k_-rjI=~>
+rjL_a!-$lr!$1_3!$1\2!$1_3!$1_3!$1\2!$1_3!$1_3!$1\2!$0Mf!$1_3!$1\2!$1_3!$1_3
+!$1\2!$1_3!$1_3!$1\2!$0;`rjI=~>
+rk@:i!9)l9!$1\2!$1_3!$1_3!$1\2!$1_3!$1_3!$1_3!$1_3!$0Gd!$1_3!$1\2!$1_3!$1_3
+!$1\2!$1_3!$1_3!$1_3!$0;`rk<m~>
+rjL_a!4:\a!0m*T!0m-U!0m-U!0m*T!0m-U!0m-U!0m-U!0m-U!0kk1!0m-U!0m*T!0m-U!0m-U
+!0m*T!0m-U!0m-U!0m-U!0k_-rjI=~>
+rjL_a!-$lr!$1\2!$1_3!$1_3!$1\2!$1_3!$1_3!$1_3!$1_3!$0Gd!$1_3!$1\2!$1_3!$1_3
+!$1\2!$1_3!$1_3!$1_3!$0;`rjI=~>
+rk@:i!9)l9!$1\2!$1_3!$1_3!$1\2!$1_3!$1_3!$1_3!$1_3!$0Gd!$1\2!$1_3!$1_3!$1\2
+!$1_3!$1_3!$1_3!$1_3!$0;`rk<m~>
+rjL_a!4:\a!0m*T!0m-U!0m-U!0m*T!0m-U!0m-U!0m-U!0m-U!0kk1!0m*T!0m-U!0m-U!0m*T
+!0m-U!0m-U!0m-U!0m-U!0k_-rjI=~>
+rjL_a!-$lr!$1\2!$1_3!$1_3!$1\2!$1_3!$1_3!$1_3!$1_3!$0Gd!$1\2!$1_3!$1_3!$1\2
+!$1_3!$1_3!$1_3!$1_3!$0;`rjI=~>
+rk@:i!9)i8!$1_3!$1_3!$1_3!$1\2!$1_3!$1_3!$1_3!$1_3!$0Dc!$1\2!$1_3!$1_3!$1_3
+!$1\2!$1b4!$1_3!$1_3!$0;`rk<m~>
+rjL_a!4:Y`!0m-U!0m-U!0m-U!0m*T!0m-U!0m-U!0m-U!0m-U!0kh0!0m*T!0m-U!0m-U!0m-U
+!0m*T!0m0V!0m-U!0m-U!0k_-rjI=~>
+rjL_a!-$iq!$1_3!$1_3!$1_3!$1\2!$1_3!$1_3!$1_3!$1_3!$0Dc!$1\2!$1_3!$1_3!$1_3
+!$1\2!$1b4!$1_3!$1_3!$0;`rjI=~>
+rk@:i!9)i8!$1_3!$1\2!$1_3!$1_3!$1_3!$1_3!$1b4!$1\2!$0Ab!$1_3!$1\2!$1_3!$1_3
+!$1_3!$1b4!$1_3!$1\2!$0>ark<m~>
+rjL_a!4:Y`!0m-U!0m*T!0m-U!0m-U!0m-U!0m-U!0m0V!0m*T!0ke/!0m-U!0m*T!0m-U!0m-U
+!0m-U!0m0V!0m-U!0m*T!0kb.rjI=~>
+rjL_a!-$iq!$1_3!$1\2!$1_3!$1_3!$1_3!$1_3!$1b4!$1\2!$0Ab!$1_3!$1\2!$1_3!$1_3
+!$1_3!$1b4!$1_3!$1\2!$0>arjI=~>
+rk@:i!9)f7!$1_3!$1_3!$1_3!$1_3!$1_3!$1_3!$1b4!$1_3!$0;`!$1_3!$1_3!$1_3!$1_3
+!$1\2!$1b4!$1_3!$1_3!$0>ark<m~>
+rjL_a!4:V_!0m-U!0m-U!0m-U!0m-U!0m-U!0m-U!0m0V!0m-U!0k_-!0m-U!0m-U!0m-U!0m-U
+!0m*T!0m0V!0m-U!0m-U!0kb.rjI=~>
+rjL_a!-$fp!$1_3!$1_3!$1_3!$1_3!$1_3!$1_3!$1b4!$1_3!$0;`!$1_3!$1_3!$1_3!$1_3
+!$1\2!$1b4!$1_3!$1_3!$0>arjI=~>
+rk@:i!9)f7!?JrJrrF.Tp&>%5^\.U-*P_:I!?JrJrrF.Tp&>%5^\7[.*P_:I!?Jr!rrF.Tp&>%5
+^\.U-*P_:I!?JrJrrF.Tp&>%5^\7[.*P_:I!?JrJrrF.TcN!mXJ,~>
+rjL_a!4:V_!L,>3rrJ?=p&>&W1%kPIPVMk2!L,>3rrJ?=p&>&W1%tVJPVMk2!L,=_rrJ?=p&>&W
+1%kPIPVMk2!L,>3rrJ?=p&>&W1%tVJPVMk2!L,>3rrJ?=cN!mPJ,~>
+rjL_a!-$fp!?EofrrF,pp&>%51%kPI*AR6e!?EofrrF,pp&>%51%tVJ*AR6e!?Eo=rrF,pp&>%5
+1%kPI*AR6e!?EofrrF,pp&>%51%tVJ*AR6e!?EofrrF,pcN!mPJ,~>
+rk@:i!9)f7s1e7,s1e7,s1e7,s1e7,s1e7,s1e7,s1e:-s1e7,s1ceX!P]ZJrrKkTp&>'-*VKF5
+^E*"I!?JrJrrF.TpAY.6^\.U-*P_:I!?Jr#s8K`_~>
+rjL_a!4:V_s"X3Hs"X3Hs"X3Hs"X3Hs"X3Hs"X3Hs"X6Is"X3Hs"Vat!ATi3rrFj=p&>%IPkG%W
+0pMA2!L,>3rrJ?=pAY/X1%kPIPVMk2!L,=as8KHW~>
+rjL_a!-$fps"X3Hs"X3Hs"X3Hs"X3Hs"X3Hs"X3Hs"X6Is"X3Hs"Vat!APVfrrFhpp&>%I*VKF5
+0cfre!?EofrrF,ppAY.61%kPI*AR6e!?Eo?s8KHW~>
+rk@:i!9)c6!$1_3!$1_3!$1b4!$1_3!$1_3!$1_3!$1b4!$1_3!$02]!$1b4!$1_3!$1_3!$1_3
+!$1_3!$1b4!$1_3!$1_3!$0Abrk<m~>
+rjL_a!4:S^!0m-U!0m-U!0m0V!0m-U!0m-U!0m-U!0m0V!0m-U!0kV*!0m0V!0m-U!0m-U!0m-U
+!0m-U!0m0V!0m-U!0m-U!0ke/rjI=~>
+rjL_a!-$co!$1_3!$1_3!$1b4!$1_3!$1_3!$1_3!$1b4!$1_3!$02]!$1b4!$1_3!$1_3!$1_3
+!$1_3!$1b4!$1_3!$1_3!$0AbrjI=~>
+rk@:i!9)c6!$1_3!$1_3!$1_3!$1b4!$1_3!$1_3!$1b4!$1b4!$0/\!$1_3!$1_3!$1_3!$1b4
+!$1_3!$1b4!$1_3!$1_3!$0Abrk<m~>
+rjL_a!4:S^!0m-U!0m-U!0m-U!0m0V!0m-U!0m-U!0m0V!0m0V!0kS)!0m-U!0m-U!0m-U!0m0V
+!0m-U!0m0V!0m-U!0m-U!0ke/rjI=~>
+rjL_a!-$co!$1_3!$1_3!$1_3!$1b4!$1_3!$1_3!$1b4!$1b4!$0/\!$1_3!$1_3!$1_3!$1b4
+!$1_3!$1b4!$1_3!$1_3!$0AbrjI=~>
+rk@:i!9)`5!$1b4!$1_3!$1_3!$1b4!$1_3!$1_3!$1b4!$1b4!$0,[!$1_3!$1_3!$1b4!$1_3
+!$1b4!$1b4!$1_3!$1_3!$0Abrk<m~>
+rjL_a!4:P]!0m0V!0m-U!0m-U!0m0V!0m-U!0m-U!0m0V!0m0V!0kP(!0m-U!0m-U!0m0V!0m-U
+!0m0V!0m0V!0m-U!0m-U!0ke/rjI=~>
+rjL_a!-$`n!$1b4!$1_3!$1_3!$1b4!$1_3!$1_3!$1b4!$1b4!$0,[!$1_3!$1_3!$1b4!$1_3
+!$1b4!$1b4!$1_3!$1_3!$0AbrjI=~>
+rk@:i!9)`5!$1_3!$1b4!$1_3!$1b4!$1_3!$1_3!$1b4!$1b4!$0)Z!$1_3!$1b4!$1_3!$1b4
+!$1_3!$1b4!$1_3!$1b4!$0Abrk<m~>
+rjL_a!4:P]!0m-U!0m0V!0m-U!0m0V!0m-U!0m-U!0m0V!0m0V!0kM'!0m-U!0m0V!0m-U!0m0V
+!0m-U!0m0V!0m-U!0m0V!0ke/rjI=~>
+rjL_a!-$`n!$1_3!$1b4!$1_3!$1b4!$1_3!$1_3!$1b4!$1b4!$0)Z!$1_3!$1b4!$1_3!$1b4
+!$1_3!$1b4!$1_3!$1b4!$0AbrjI=~>
+rk@:i!9)]4!$1b4!$1_3!$1b4!$1_3!$1b4!$1b4!$1b4!$1_3!$0&Y!$1b4!$1_3!$1b4!$1_3
+!$1b4!$1b4!$1_3!$1_3!$0Dcrk<m~>
+rjL_a!4:M\!0m0V!0m-U!0m0V!0m-U!0m0V!0m0V!0m0V!0m-U!0kJ&!0m0V!0m-U!0m0V!0m-U
+!0m0V!0m0V!0m-U!0m-U!0kh0rjI=~>
+rjL_a!-$]m!$1b4!$1_3!$1b4!$1_3!$1b4!$1b4!$1b4!$1_3!$0&Y!$1b4!$1_3!$1b4!$1_3
+!$1b4!$1b4!$1_3!$1_3!$0DcrjI=~>
+rk@:i!9)]4!$1_3!$1b4!$1b4!$1_3!$1b4!$1b4!$1b4!$1_3!$0#X!$1b4!$1b4!$1_3!$1b4
+!$1_3!$1b4!$1_3!$1b4!$0Dcrk<m~>
+rjL_a!4:M\!0m-U!0m0V!0m0V!0m-U!0m0V!0m0V!0m0V!0m-U!0kG%!0m0V!0m0V!0m-U!0m0V
+!0m-U!0m0V!0m-U!0m0V!0kh0rjI=~>
+rjL_a!-$]m!$1_3!$1b4!$1b4!$1_3!$1b4!$1b4!$1b4!$1_3!$0#X!$1b4!$1b4!$1_3!$1b4
+!$1_3!$1b4!$1_3!$1b4!$0DcrjI=~>
+rk@:i!9)Z3!$1b4!$1b4!$1b4!$1_3!$1b4!$1b4!$1b4!$1_3!$/uW!$1b4!$1b4!$1b4!$1_3
+!$1b4!$1b4!$1_3!$1b4!$0Dcrk<m~>
+rjL_a!4:J[!0m0V!0m0V!0m0V!0m-U!0m0V!0m0V!0m0V!0m-U!0kD$!0m0V!0m0V!0m0V!0m-U
+!0m0V!0m0V!0m-U!0m0V!0kh0rjI=~>
+rjL_a!-$Zl!$1b4!$1b4!$1b4!$1_3!$1b4!$1b4!$1b4!$1_3!$/uW!$1b4!$1b4!$1b4!$1_3
+!$1b4!$1b4!$1_3!$1b4!$0DcrjI=~>
+rk@:i!9)Z3!$1b4!$1b4!$1_3!$1b4!$1b4!$1b4!$1b4!$1b4!$/rV!$1_3!$1b4!$1b4!$1b4
+!$1b4!$1b4!$1_3!$1b4!$0Dcrk<m~>
+rjL_a!4:J[!0m0V!0m0V!0m-U!0m0V!0m0V!0m0V!0m0V!0m0V!0kA#!0m-U!0m0V!0m0V!0m0V
+!0m0V!0m0V!0m-U!0m0V!0kh0rjI=~>
+rjL_a!-$Zl!$1b4!$1b4!$1_3!$1b4!$1b4!$1b4!$1b4!$1b4!$/rV!$1_3!$1b4!$1b4!$1b4
+!$1b4!$1b4!$1_3!$1b4!$0DcrjI=~>
+rk@:i!9)W2!$1b4!$1b4!$1b4!$1b4!$1b4!$1b4!$1b4!$1b4!$/oU!$1b4!$1b4!$1b4!$1_3
+!$1b4!$1b4!$1_3!$1b4!$0Gdrk<m~>
+rjL_a!4:GZ!0m0V!0m0V!0m0V!0m0V!0m0V!0m0V!0m0V!0m0V!0k>"!0m0V!0m0V!0m0V!0m-U
+!0m0V!0m0V!0m-U!0m0V!0kk1rjI=~>
+rjL_a!-$Wk!$1b4!$1b4!$1b4!$1b4!$1b4!$1b4!$1b4!$1b4!$/oU!$1b4!$1b4!$1b4!$1_3
+!$1b4!$1b4!$1_3!$1b4!$0GdrjI=~>
+rk@:i!9)W2!?JrKrrF.TpAY.6^\7[.*P_=J!?JrKrrF.TpAY.6^\7[.*P_=J!?JqkrrF.TpAY.6
+^\7[.*P_=J!?JrKrrF.TpAY.6^\7[.*P_:I!?JrKrrF.TdJs3[J,~>
+rjL_a!4:GZ!L,>4rrJ?=pAY/X1%tVJPVMn3!L,>4rrJ?=pAY/X1%tVJPVMn3!L,=TrrJ?=pAY/X
+1%tVJPVMn3!L,>4rrJ?=pAY/X1%tVJPVMk2!L,>4rrJ?=dJs3SJ,~>
+rjL_a!-$Wk!?EogrrF,ppAY.61%tVJ*AR9f!?EogrrF,ppAY.61%tVJ*AR9f!?Eo2rrF,ppAY.6
+1%tVJ*AR9f!?EogrrF,ppAY.61%tVJ*AR6e!?EogrrF,pdJs3SJ,~>
+rk@:i!9)W2s1e:-s1e:-s1e:-s1e:-s1e:-s1e:-s1e:-s1e:-s1cDM!P]ZKrrKkTpAY0.*VTL6
+^E*%J!P]ZKrrF.TpAY.6^\.U-*P_=J!?Jr&s8K`_~>
+rjL_a!4:GZs"X6Is"X6Is"X6Is"X6Is"X6Is"X6Is"X6Is"X6Is"V@i!ATi4rrFj=pAY.JPkP+X
+0pMD3!ATi4rrJ?=pAY/X1%kPIPVMn3!L,=ds8KHW~>
+rjL_a!-$Wks"X6Is"X6Is"X6Is"X6Is"X6Is"X6Is"X6Is"X6Is"V@i!APVgrrFhppAY.J*VTL6
+0cfuf!APVgrrF,ppAY.61%kPI*AR9f!?EoBs8KHW~>
+rk@:i!9)T1!$1b4!$1b4!$1e5!$1b4!$1b4!$1b4!$1b4!$1b4!$/fR!$1b4!$1e5!$1b4!$1b4
+!$1b4!$1b4!$1_3!$1e5!$0Gdrk<m~>
+rjL_a!4:DY!0m0V!0m0V!0m3W!0m0V!0m0V!0m0V!0m0V!0m0V!0k4t!0m0V!0m3W!0m0V!0m0V
+!0m0V!0m0V!0m-U!0m3W!0kk1rjI=~>
+rjL_a!-$Tj!$1b4!$1b4!$1e5!$1b4!$1b4!$1b4!$1b4!$1b4!$/fR!$1b4!$1e5!$1b4!$1b4
+!$1b4!$1b4!$1_3!$1e5!$0GdrjI=~>
+rk@:i!9)T1!$1b4!$1b4!$1b4!$1e5!$1b4!$1b4!$1b4!$1e5!$/`P!$1e5!$1b4!$1b4!$1b4
+!$1e5!$1b4!$1_3!$1b4!$0Jerk<m~>
+rjL_a!4:DY!0m0V!0m0V!0m0V!0m3W!0m0V!0m0V!0m0V!0m3W!0k.r!0m3W!0m0V!0m0V!0m0V
+!0m3W!0m0V!0m-U!0m0V!0kn2rjI=~>
+rjL_a!-$Tj!$1b4!$1b4!$1b4!$1e5!$1b4!$1b4!$1b4!$1e5!$/`P!$1e5!$1b4!$1b4!$1b4
+!$1e5!$1b4!$1_3!$1b4!$0JerjI=~>
+rk@:i!9)T1!$1b4!$1b4!$1b4!$1e5!$1b4!$1b4!$1b4!$1e5!$/]O!$1e5!$1b4!$1b4!$1e5
+!$1b4!$1b4!$1b4!$1b4!$0Jerk<m~>
+rjL_a!4:DY!0m0V!0m0V!0m0V!0m3W!0m0V!0m0V!0m0V!0m3W!0k+q!0m3W!0m0V!0m0V!0m3W
+!0m0V!0m0V!0m0V!0m0V!0kn2rjI=~>
+rjL_a!-$Tj!$1b4!$1b4!$1b4!$1e5!$1b4!$1b4!$1b4!$1e5!$/]O!$1e5!$1b4!$1b4!$1e5
+!$1b4!$1b4!$1b4!$1b4!$0JerjI=~>
+rk@:i!9)Q0!$1b4!$1e5!$1b4!$1e5!$1b4!$1b4!$1b4!$1e5!$/ZN!$1e5!$1b4!$1e5!$1b4
+!$1e5!$1b4!$1b4!$1b4!$0Jerk<m~>
+rjL_a!4:AX!0m0V!0m3W!0m0V!0m3W!0m0V!0m0V!0m0V!0m3W!0k(p!0m3W!0m0V!0m3W!0m0V
+!0m3W!0m0V!0m0V!0m0V!0kn2rjI=~>
+rjL_a!-$Qi!$1b4!$1e5!$1b4!$1e5!$1b4!$1b4!$1b4!$1e5!$/ZN!$1e5!$1b4!$1e5!$1b4
+!$1e5!$1b4!$1b4!$1b4!$0JerjI=~>
+rk@:i!9)Q0!$1b4!$1b4!$1e5!$1b4!$1e5!$1e5!$1b4!$1b4!$/ZN!$1b4!$1e5!$1b4!$1e5
+!$1b4!$1b4!$1b4!$1e5!$0Jerk<m~>
+rjL_a!4:AX!0m0V!0m0V!0m3W!0m0V!0m3W!0m3W!0m0V!0m0V!0k(p!0m0V!0m3W!0m0V!0m3W
+!0m0V!0m0V!0m0V!0m3W!0kn2rjI=~>
+rjL_a!-$Qi!$1b4!$1b4!$1e5!$1b4!$1e5!$1e5!$1b4!$1b4!$/ZN!$1b4!$1e5!$1b4!$1e5
+!$1b4!$1b4!$1b4!$1e5!$0JerjI=~>
+rk@:i!9)N/!$1b4!$1e5!$1e5!$1b4!$1e5!$1e5!$1b4!$1b4!$/WM!$1b4!$1e5!$1e5!$1b4
+!$1e5!$1b4!$1b4!$1e5!$0Jerk<m~>
+rjL_a!4:>W!0m0V!0m3W!0m3W!0m0V!0m3W!0m3W!0m0V!0m0V!0k%o!0m0V!0m3W!0m3W!0m0V
+!0m3W!0m0V!0m0V!0m3W!0kn2rjI=~>
+rjL_a!-$Nh!$1b4!$1e5!$1e5!$1b4!$1e5!$1e5!$1b4!$1b4!$/WM!$1b4!$1e5!$1e5!$1b4
+!$1e5!$1b4!$1b4!$1e5!$0JerjI=~>
+rk@:i!9)N/!$1b4!$1e5!$1e5!$1b4!$1e5!$1e5!$1b4!$1b4!$/TL!$1b4!$1e5!$1e5!$1e5
+!$1b4!$1b4!$1e5!$1e5!$0Jerk<m~>
+rjL_a!4:>W!0m0V!0m3W!0m3W!0m0V!0m3W!0m3W!0m0V!0m0V!0k"n!0m0V!0m3W!0m3W!0m3W
+!0m0V!0m0V!0m3W!0m3W!0kn2rjI=~>
+rjL_a!-$Nh!$1b4!$1e5!$1e5!$1b4!$1e5!$1e5!$1b4!$1b4!$/TL!$1b4!$1e5!$1e5!$1e5
+!$1b4!$1b4!$1e5!$1e5!$0JerjI=~>
+rk@:i!9)N/!$1b4!$1e5!$1b4!$1e5!$1e5!$1e5!$1b4!$1e5!$/NJ!$1e5!$1b4!$1e5!$1e5
+!$1e5!$1b4!$1e5!$1b4!$0Mfrk<m~>
+rjL_a!4:>W!0m0V!0m3W!0m0V!0m3W!0m3W!0m3W!0m0V!0m3W!0jql!0m3W!0m0V!0m3W!0m3W
+!0m3W!0m0V!0m3W!0m0V!0kq3rjI=~>
+rjL_a!-$Nh!$1b4!$1e5!$1b4!$1e5!$1e5!$1e5!$1b4!$1e5!$/NJ!$1e5!$1b4!$1e5!$1e5
+!$1e5!$1b4!$1e5!$1b4!$0MfrjI=~>
+rk@:i!9)K.!$1b4!$1e5!$1e5!$1e5!$1e5!$1e5!$1b4!$1e5!$/KI!$1e5!$1e5!$1e5!$1e5
+!$1b4!$1b4!$1e5!$1e5!$0Mfrk<m~>
+rjL_a!4:;V!0m0V!0m3W!0m3W!0m3W!0m3W!0m3W!0m0V!0m3W!0jnk!0m3W!0m3W!0m3W!0m3W
+!0m0V!0m0V!0m3W!0m3W!0kq3rjI=~>
+rjL_a!-$Kg!$1b4!$1e5!$1e5!$1e5!$1e5!$1e5!$1b4!$1e5!$/KI!$1e5!$1e5!$1e5!$1e5
+!$1b4!$1b4!$1e5!$1e5!$0MfrjI=~>
+rk@:i!9)K.!?JrKrrF.Tp\t77^\@a/*P_@K!?JrLrrF.Tp\t77^\7[.*P_@K!?Jq_rrF.Tp\t77
+^\@a/*P_@K!?JrLrrF.Tp\t77^\7[.*P_@K!?JrLrrF.Te,TE]J,~>
+rjL_a!4:;V!L,>4rrJ?=p\t8Y1&(\KPVMq4!L,>5rrJ?=p\t8Y1%tVJPVMq4!L,=HrrJ?=p\t8Y
+1&(\KPVMq4!L,>5rrJ?=p\t8Y1%tVJPVMq4!L,>5rrJ?=e,TEUJ,~>
+rjL_a!-$Kg!?EogrrF,pp\t771&(\K*AR<g!?EohrrF,pp\t771%tVJ*AR<g!?Eo&rrF,pp\t77
+1&(\K*AR<g!?EohrrF,pp\t771%tVJ*AR<g!?EohrrF,pe,TEUJ,~>
+rk@:i!9)K.s1e:-s1e=.s1e=.s1e=.s1e=.s1e=.s1e:-s1e=.s1buA!P]ZLrrKkTp\t9/*V]R7
+^E*(K!P]ZLrrF.TpAY.6^\@a/*P_@K!?Jr(s8K`_~>
+rjL_a!4:;Vs"X6Is"X9Js"X9Js"X9Js"X9Js"X9Js"X6Is"X9Js"Uq]!ATi5rrFj=p\t7KPkY1Y
+0pMG4!ATi5rrJ?=pAY/X1&(\KPVMq4!L,=fs8KHW~>
+rjL_a!-$Kgs"X6Is"X9Js"X9Js"X9Js"X9Js"X9Js"X6Is"X9Js"Uq]!APVhrrFhpp\t7K*V]R7
+0cg#g!APVhrrF,ppAY.61&(\K*AR<g!?EoDs8KHW~>
+rk@:i!9)H-!$1b4!$1e5!$1h6!$1e5!$1e5!$1e5!$1b4!$1h6!$/?E!$1h6!$1e5!$1e5!$1e5
+!$1e5!$1b4!$1e5!$1h6!$0Mfrk<m~>
+rjL_a!4:8U!0m0V!0m3W!0m6X!0m3W!0m3W!0m3W!0m0V!0m6X!0jbg!0m6X!0m3W!0m3W!0m3W
+!0m3W!0m0V!0m3W!0m6X!0kq3rjI=~>
+rjL_a!-$Hf!$1b4!$1e5!$1h6!$1e5!$1e5!$1e5!$1b4!$1h6!$/?E!$1h6!$1e5!$1e5!$1e5
+!$1e5!$1b4!$1e5!$1h6!$0MfrjI=~>
+rk@:i!9)H-!$1b4!$1e5!$1e5!$1h6!$1e5!$1e5!$1e5!$1e5!$/?E!$1e5!$1e5!$1e5!$1e5
+!$1h6!$1b4!$1e5!$1e5!$0Pgrk<m~>
+rjL_a!4:8U!0m0V!0m3W!0m3W!0m6X!0m3W!0m3W!0m3W!0m3W!0jbg!0m3W!0m3W!0m3W!0m3W
+!0m6X!0m0V!0m3W!0m3W!0kt4rjI=~>
+rjL_a!-$Hf!$1b4!$1e5!$1e5!$1h6!$1e5!$1e5!$1e5!$1e5!$/?E!$1e5!$1e5!$1e5!$1e5
+!$1h6!$1b4!$1e5!$1e5!$0PgrjI=~>
+rk@:i!9)E,!$1e5!$1e5!$1e5!$1h6!$1e5!$1e5!$1e5!$1e5!$/<D!$1e5!$1e5!$1e5!$1h6
+!$1e5!$1e5!$1e5!$1e5!$0Pgrk<m~>
+rjL_a!4:5T!0m3W!0m3W!0m3W!0m6X!0m3W!0m3W!0m3W!0m3W!0j_f!0m3W!0m3W!0m3W!0m6X
+!0m3W!0m3W!0m3W!0m3W!0kt4rjI=~>
+rjL_a!-$Ee!$1e5!$1e5!$1e5!$1h6!$1e5!$1e5!$1e5!$1e5!$/<D!$1e5!$1e5!$1e5!$1h6
+!$1e5!$1e5!$1e5!$1e5!$0PgrjI=~>
+rk@:i!9)E,!$1e5!$1e5!$1e5!$1h6!$1e5!$1e5!$1e5!$1e5!$/9C!$1e5!$1h6!$1e5!$1e5
+!$1h6!$1b4!$1h6!$1e5!$0Pgrk<m~>
+rjL_a!4:5T!0m3W!0m3W!0m3W!0m6X!0m3W!0m3W!0m3W!0m3W!0j\e!0m3W!0m6X!0m3W!0m3W
+!0m6X!0m0V!0m6X!0m3W!0kt4rjI=~>
+rjL_a!-$Ee!$1e5!$1e5!$1e5!$1h6!$1e5!$1e5!$1e5!$1e5!$/9C!$1e5!$1h6!$1e5!$1e5
+!$1h6!$1b4!$1h6!$1e5!$0PgrjI=~>
+rk@:i!9)B+!$1e5!$1e5!$1h6!$1e5!$1e5!$1h6!$1e5!$1h6!$/3A!$1h6!$1e5!$1e5!$1h6
+!$1e5!$1e5!$1e5!$1h6!$0Pgrk<m~>
+rjL_a!4:2S!0m3W!0m3W!0m6X!0m3W!0m3W!0m6X!0m3W!0m6X!0jVc!0m6X!0m3W!0m3W!0m6X
+!0m3W!0m3W!0m3W!0m6X!0kt4rjI=~>
+rjL_a!-$Bd!$1e5!$1e5!$1h6!$1e5!$1e5!$1h6!$1e5!$1h6!$/3A!$1h6!$1e5!$1e5!$1h6
+!$1e5!$1e5!$1e5!$1h6!$0PgrjI=~>
+rk@:i!9)B+!$1e5!$1e5!$1h6!$1e5!$1e5!$1h6!$1e5!$1h6!$/0@!$1h6!$1h6!$1e5!$1e5
+!$1h6!$1b4!$1h6!$1h6!$0Pgrk<m~>
+rjL_a!4:2S!0m3W!0m3W!0m6X!0m3W!0m3W!0m6X!0m3W!0m6X!0jSb!0m6X!0m6X!0m3W!0m3W
+!0m6X!0m0V!0m6X!0m6X!0kt4rjI=~>
+rjL_a!-$Bd!$1e5!$1e5!$1h6!$1e5!$1e5!$1h6!$1e5!$1h6!$/0@!$1h6!$1h6!$1e5!$1e5
+!$1h6!$1b4!$1h6!$1h6!$0PgrjI=~>
+rk@:i!9)?*!$1h6!$1e5!$1h6!$1e5!$1e5!$1h6!$1e5!$1h6!$/-?!$1h6!$1h6!$1e5!$1h6
+!$1e5!$1e5!$1h6!$1h6!$0Pgrk<m~>
+rjL_a!4:/R!0m6X!0m3W!0m6X!0m3W!0m3W!0m6X!0m3W!0m6X!0jPa!0m6X!0m6X!0m3W!0m6X
+!0m3W!0m3W!0m6X!0m6X!0kt4rjI=~>
+rjL_a!-$?c!$1h6!$1e5!$1h6!$1e5!$1e5!$1h6!$1e5!$1h6!$/-?!$1h6!$1h6!$1e5!$1h6
+!$1e5!$1e5!$1h6!$1h6!$0PgrjI=~>
+rk@:i!9)?*!$1h6!$1e5!$1e5!$1h6!$1e5!$1h6!$1h6!$1e5!$/-?!$1e5!$1h6!$1e5!$1h6
+!$1h6!$1e5!$1h6!$1e5!$0Shrk<m~>
+rjL_a!4:/R!0m6X!0m3W!0m3W!0m6X!0m3W!0m6X!0m6X!0m3W!0jPa!0m3W!0m6X!0m3W!0m6X
+!0m6X!0m3W!0m6X!0m3W!0l"5rjI=~>
+rjL_a!-$?c!$1h6!$1e5!$1e5!$1h6!$1e5!$1h6!$1h6!$1e5!$/-?!$1e5!$1h6!$1e5!$1h6
+!$1h6!$1e5!$1h6!$1e5!$0ShrjI=~>
+rk@:i!9)<)!$1h6!$1e5!$1h6!$1h6!$1e5!$1h6!$1h6!$1h6!$/'=!$1h6!$1h6!$1e5!$1h6
+!$1e5!$1e5!$1h6!$1h6!$0Shrk<m~>
+rjL_a!4:,Q!0m6X!0m3W!0m6X!0m6X!0m3W!0m6X!0m6X!0m6X!0jJ_!0m6X!0m6X!0m3W!0m6X
+!0m3W!0m3W!0m6X!0m6X!0l"5rjI=~>
+rjL_a!-$<b!$1h6!$1e5!$1h6!$1h6!$1e5!$1h6!$1h6!$1h6!$/'=!$1h6!$1h6!$1e5!$1h6
+!$1e5!$1e5!$1h6!$1h6!$0ShrjI=~>
+rk@:i!9)<)!?JrMrrF.Tp\t77^\Ig0*P_CL!?JrLrrF.Tq#:@8^\Ig0*P_CL!?JqSrrF.Tq#:@8
+^\Ig0*P_@K!?JrMrrF.Tq#:@8^\@a/*P_CL!?JrMrrF.Tec5W_J,~>
+rjL_a!4:,Q!L,>6rrJ?=p\t8Y1&1bLPVMt5!L,>5rrJ?=q#:AZ1&1bLPVMt5!L,=<rrJ?=q#:AZ
+1&1bLPVMq4!L,>6rrJ?=q#:AZ1&(\KPVMt5!L,>6rrJ?=ec5WWJ,~>
+rjL_a!-$<b!?EoirrF,pp\t771&1bL*AR?h!?EohrrF,pq#:@81&1bL*AR?h!?EnorrF,pq#:@8
+1&1bL*AR<g!?EoirrF,pq#:@81&(\K*AR?h!?EoirrF,pec5WWJ,~>
+rk@:i!9)<)s1e@/s1e=.s1e@/s1e@/s1e=.s1e@/s1e@/s1e@/s1bQ5!P]ZMrrKkTq#:B0*V]R7
+^E*+L!P]ZMrrF.Tp\t77^\Ig0*P_CL!?Jr*s8K`_~>
+rjL_a!4:,Qs"X<Ks"X9Js"X<Ks"X<Ks"X9Js"X<Ks"X<Ks"X<Ks"UMQ!ATi6rrFj=q#:@LPkY1Y
+0pMJ5!ATi6rrJ?=p\t8Y1&1bLPVMt5!L,=hs8KHW~>
+rjL_a!-$<bs"X<Ks"X9Js"X<Ks"X<Ks"X9Js"X<Ks"X<Ks"X<Ks"UMQ!APVirrFhpq#:@L*V]R7
+0cg&h!APVirrF,pp\t771&1bL*AR?h!?EoFs8KHW~>
+rk@:i!9)9(!$1h6!$1e5!$1k7!$1h6!$1e5!$1h6!$1h6!$1h6!$.s:!$1h6!$1k7!$1e5!$1h6
+!$1h6!$1e5!$1h6!$1k7!$0Shrk<m~>
+rjL_a!4:)P!0m6X!0m3W!0m9Y!0m6X!0m3W!0m6X!0m6X!0m6X!0jA\!0m6X!0m9Y!0m3W!0m6X
+!0m6X!0m3W!0m6X!0m9Y!0l"5rjI=~>
+rjL_a!-$9a!$1h6!$1e5!$1k7!$1h6!$1e5!$1h6!$1h6!$1h6!$.s:!$1h6!$1k7!$1e5!$1h6
+!$1h6!$1e5!$1h6!$1k7!$0ShrjI=~>
+rk@:i!9)9(!$1h6!$1e5!$1h6!$1h6!$1h6!$1h6!$1h6!$1k7!$.m8!$1k7!$1h6!$1e5!$1h6
+!$1k7!$1e5!$1h6!$1h6!$0Virk<m~>
+rjL_a!4:)P!0m6X!0m3W!0m6X!0m6X!0m6X!0m6X!0m6X!0m9Y!0j;Z!0m9Y!0m6X!0m3W!0m6X
+!0m9Y!0m3W!0m6X!0m6X!0l%6rjI=~>
+rjL_a!-$9a!$1h6!$1e5!$1h6!$1h6!$1h6!$1h6!$1h6!$1k7!$.m8!$1k7!$1h6!$1e5!$1h6
+!$1k7!$1e5!$1h6!$1h6!$0VirjI=~>
+rk@:i!9)6'!$1h6!$1h6!$1h6!$1h6!$1h6!$1h6!$1h6!$1k7!$.j7!$1k7!$1h6!$1e5!$1k7
+!$1h6!$1h6!$1h6!$1h6!$0Virk<m~>
+rjL_a!4:&O!0m6X!0m6X!0m6X!0m6X!0m6X!0m6X!0m6X!0m9Y!0j8Y!0m9Y!0m6X!0m3W!0m9Y
+!0m6X!0m6X!0m6X!0m6X!0l%6rjI=~>
+rjL_a!-$6`!$1h6!$1h6!$1h6!$1h6!$1h6!$1h6!$1h6!$1k7!$.j7!$1k7!$1h6!$1e5!$1k7
+!$1h6!$1h6!$1h6!$1h6!$0VirjI=~>
+rk@:i!9)6'!$1h6!$1h6!$1h6!$1h6!$1h6!$1h6!$1h6!$1k7!$.g6!$1k7!$1h6!$1h6!$1h6
+!$1k7!$1e5!$1k7!$1h6!$0Virk<m~>
+rjL_a!4:&O!0m6X!0m6X!0m6X!0m6X!0m6X!0m6X!0m6X!0m9Y!0j5X!0m9Y!0m6X!0m6X!0m6X
+!0m9Y!0m3W!0m9Y!0m6X!0l%6rjI=~>
+rjL_a!-$6`!$1h6!$1h6!$1h6!$1h6!$1h6!$1h6!$1h6!$1k7!$.g6!$1k7!$1h6!$1h6!$1h6
+!$1k7!$1e5!$1k7!$1h6!$0VirjI=~>
+rk@:i!9)3&!$1h6!$1h6!$1k7!$1h6!$1h6!$1k7!$1h6!$1h6!$.g6!$1h6!$1k7!$1e5!$1k7
+!$1h6!$1h6!$1h6!$1k7!$0Virk<m~>
+rjL_a!4:#N!0m6X!0m6X!0m9Y!0m6X!0m6X!0m9Y!0m6X!0m6X!0j5X!0m6X!0m9Y!0m3W!0m9Y
+!0m6X!0m6X!0m6X!0m9Y!0l%6rjI=~>
+rjL_a!-$3_!$1h6!$1h6!$1k7!$1h6!$1h6!$1k7!$1h6!$1h6!$.g6!$1h6!$1k7!$1e5!$1k7
+!$1h6!$1h6!$1h6!$1k7!$0VirjI=~>
+rk@:i!9)3&!$1h6!$1h6!$1k7!$1h6!$1h6!$1k7!$1h6!$1h6!$.d5!$1h6!$1k7!$1h6!$1h6
+!$1k7!$1e5!$1k7!$1k7!$0Virk<m~>
+rjL_a!4:#N!0m6X!0m6X!0m9Y!0m6X!0m6X!0m9Y!0m6X!0m6X!0j2W!0m6X!0m9Y!0m6X!0m6X
+!0m9Y!0m3W!0m9Y!0m9Y!0l%6rjI=~>
+rjL_a!-$3_!$1h6!$1h6!$1k7!$1h6!$1h6!$1k7!$1h6!$1h6!$.d5!$1h6!$1k7!$1h6!$1h6
+!$1k7!$1e5!$1k7!$1k7!$0VirjI=~>
+rk@:i!9)0%!$1h6!$1k7!$1k7!$1h6!$1h6!$1k7!$1h6!$1h6!$.a4!$1h6!$1k7!$1h6!$1k7
+!$1h6!$1h6!$1k7!$1k7!$0Virk<m~>
+rjL_a!49uM!0m6X!0m9Y!0m9Y!0m6X!0m6X!0m9Y!0m6X!0m6X!0j/V!0m6X!0m9Y!0m6X!0m9Y
+!0m6X!0m6X!0m9Y!0m9Y!0l%6rjI=~>
+rjL_a!-$0^!$1h6!$1k7!$1k7!$1h6!$1h6!$1k7!$1h6!$1h6!$.a4!$1h6!$1k7!$1h6!$1k7
+!$1h6!$1h6!$1k7!$1k7!$0VirjI=~>
+rk@:i!9)0%!$1h6!$1k7!$1h6!$1h6!$1k7!$1k7!$1h6!$1k7!$.[2!$1k7!$1h6!$1h6!$1k7
+!$1k7!$1h6!$1k7!$1h6!$0Yjrk<m~>
+rjL_a!49uM!0m6X!0m9Y!0m6X!0m6X!0m9Y!0m9Y!0m6X!0m9Y!0j)T!0m9Y!0m6X!0m6X!0m9Y
+!0m9Y!0m6X!0m9Y!0m6X!0l(7rjI=~>
+rjL_a!-$0^!$1h6!$1k7!$1h6!$1h6!$1k7!$1k7!$1h6!$1k7!$.[2!$1k7!$1h6!$1h6!$1k7
+!$1k7!$1h6!$1k7!$1h6!$0YjrjI=~>
+rk@:i!9)-$!$1h6!$1k7!$1k7!$1h6!$1k7!$1k7!$1h6!$1k7!$.X1!$1k7!$1k7!$1h6!$1k7
+!$1h6!$1h6!$1k7!$1k7!$0Yjrk<m~>
+rjL_a!49rL!0m6X!0m9Y!0m9Y!0m6X!0m9Y!0m9Y!0m6X!0m9Y!0j&S!0m9Y!0m9Y!0m6X!0m9Y
+!0m6X!0m6X!0m9Y!0m9Y!0l(7rjI=~>
+rjL_a!-$-]!$1h6!$1k7!$1k7!$1h6!$1k7!$1k7!$1h6!$1k7!$.X1!$1k7!$1k7!$1h6!$1k7
+!$1h6!$1h6!$1k7!$1k7!$0YjrjI=~>
+rk@:i!9)-$!?JrMrrF.Tq>UI9^\Rm1*P_CL!?JrNrrF.Tq>UI9^\Ig0*P_FM!?JqGrrF.Tq>UI9
+^\Rm1*P_CL!?JrNrrF.Tq>UI9^\Ig0*P_FM!?JrNrrF.TfDkiaJ,~>
+rjL_a!49rL!L,>6rrJ?=q>UJ[1&:hMPVMt5!L,>7rrJ?=q>UJ[1&1bLPVN"6!L,=0rrJ?=q>UJ[
+1&:hMPVMt5!L,>7rrJ?=q>UJ[1&1bLPVN"6!L,>7rrJ?=fDkiYJ,~>
+rjL_a!-$-]!?EoirrF,pq>UI91&:hM*AR?h!?EojrrF,pq>UI91&1bL*ARBi!?EncrrF,pq>UI9
+1&:hM*AR?h!?EojrrF,pq>UI91&1bL*ARBi!?EojrrF,pfDkiYJ,~>
+rk@:i!9)-$s1e@/s1eC0s1eC0s1e@/s1eC0s1eC0s1e@/s1eC0s1b-)!P]ZNrrKkTq>UK1*VfX8
+^E*.M!P]ZNrrF.Tq#:@8^\Rm1*P_FM!?Jr,s8K`_~>
+rjL_a!49rLs"X<Ks"X?Ls"X?Ls"X<Ks"X?Ls"X?Ls"X<Ks"X?Ls"U)E!ATi7rrFj=q>UIMPkb7Z
+0pMM6!ATi7rrJ?=q#:AZ1&:hMPVN"6!L,=js8KHW~>
+rjL_a!-$-]s"X<Ks"X?Ls"X?Ls"X<Ks"X?Ls"X?Ls"X<Ks"X?Ls"U)E!APVjrrFhpq>UIM*VfX8
+0cg)i!APVjrrF,pq#:@81&:hM*ARBi!?EoHs8KHW~>
+rk@:i!9)*#!$1h6!$1k7!$1k7!$1k7!$1k7!$1k7!$1h6!$1k7!$.O.!$1k7!$1n8!$1h6!$1k7
+!$1k7!$1h6!$1k7!$1k7!$0\krk<m~>
+rjL_a!49oK!0m6X!0m9Y!0m9Y!0m9Y!0m9Y!0m9Y!0m6X!0m9Y!0irP!0m9Y!0m<Z!0m6X!0m9Y
+!0m9Y!0m6X!0m9Y!0m9Y!0l+8rjI=~>
+rjL_a!-$*\!$1h6!$1k7!$1k7!$1k7!$1k7!$1k7!$1h6!$1k7!$.O.!$1k7!$1n8!$1h6!$1k7
+!$1k7!$1h6!$1k7!$1k7!$0\krjI=~>
+rk@:i!9)*#!$1h6!$1k7!$1k7!$1k7!$1k7!$1k7!$1k7!$1k7!$.L-!$1k7!$1k7!$1h6!$1k7
+!$1n8!$1h6!$1k7!$1k7!$0\krk<m~>
+rjL_a!49oK!0m6X!0m9Y!0m9Y!0m9Y!0m9Y!0m9Y!0m9Y!0m9Y!0ioO!0m9Y!0m9Y!0m6X!0m9Y
+!0m<Z!0m6X!0m9Y!0m9Y!0l+8rjI=~>
+rjL_a!-$*\!$1h6!$1k7!$1k7!$1k7!$1k7!$1k7!$1k7!$1k7!$.L-!$1k7!$1k7!$1h6!$1k7
+!$1n8!$1h6!$1k7!$1k7!$0\krjI=~>
+rk@:i!9)'"!$1k7!$1k7!$1k7!$1k7!$1k7!$1k7!$1k7!$1k7!$.I,!$1k7!$1k7!$1k7!$1k7
+!$1k7!$1k7!$1k7!$1k7!$0\krk<m~>
+rjL_a!49lJ!0m9Y!0m9Y!0m9Y!0m9Y!0m9Y!0m9Y!0m9Y!0m9Y!0ilN!0m9Y!0m9Y!0m9Y!0m9Y
+!0m9Y!0m9Y!0m9Y!0m9Y!0l+8rjI=~>
+rjL_a!-$'[!$1k7!$1k7!$1k7!$1k7!$1k7!$1k7!$1k7!$1k7!$.I,!$1k7!$1k7!$1k7!$1k7
+!$1k7!$1k7!$1k7!$1k7!$0\krjI=~>
+rk@:i!9)'"!$1h6!$1n8!$1k7!$1k7!$1k7!$1k7!$1k7!$1k7!$.F+!$1k7!$1n8!$1h6!$1k7
+!$1n8!$1h6!$1n8!$1k7!$0\krk<m~>
+rjL_a!49lJ!0m6X!0m<Z!0m9Y!0m9Y!0m9Y!0m9Y!0m9Y!0m9Y!0iiM!0m9Y!0m<Z!0m6X!0m9Y
+!0m<Z!0m6X!0m<Z!0m9Y!0l+8rjI=~>
+rjL_a!-$'[!$1h6!$1n8!$1k7!$1k7!$1k7!$1k7!$1k7!$1k7!$.F+!$1k7!$1n8!$1h6!$1k7
+!$1n8!$1h6!$1n8!$1k7!$0\krjI=~>
+rk@:i!9)$!!$1k7!$1k7!$1k7!$1k7!$1k7!$1n8!$1k7!$1k7!$.C*!$1k7!$1n8!$1h6!$1n8
+!$1k7!$1k7!$1k7!$1k7!$0_lrk<m~>
+rjL_a!49iI!0m9Y!0m9Y!0m9Y!0m9Y!0m9Y!0m<Z!0m9Y!0m9Y!0ifL!0m9Y!0m<Z!0m6X!0m<Z
+!0m9Y!0m9Y!0m9Y!0m9Y!0l.9rjI=~>
+rjL_a!-$$Z!$1k7!$1k7!$1k7!$1k7!$1k7!$1n8!$1k7!$1k7!$.C*!$1k7!$1n8!$1h6!$1n8
+!$1k7!$1k7!$1k7!$1k7!$0_lrjI=~>
+rk@:i!9)$!!$1k7!$1k7!$1k7!$1k7!$1k7!$1n8!$1k7!$1k7!$.C*!$1k7!$1k7!$1k7!$1k7
+!$1n8!$1k7!$1k7!$1k7!$0_lrk<m~>
+rjL_a!49iI!0m9Y!0m9Y!0m9Y!0m9Y!0m9Y!0m<Z!0m9Y!0m9Y!0ifL!0m9Y!0m9Y!0m9Y!0m9Y
+!0m<Z!0m9Y!0m9Y!0m9Y!0l.9rjI=~>
+rjL_a!-$$Z!$1k7!$1k7!$1k7!$1k7!$1k7!$1n8!$1k7!$1k7!$.C*!$1k7!$1k7!$1k7!$1k7
+!$1n8!$1k7!$1k7!$1k7!$0_lrjI=~>
+rk@:i!9)$!!$1h6!$1n8!$1k7!$1k7!$1k7!$1n8!$1k7!$1k7!$.@)!$1k7!$1n8!$1h6!$1n8
+!$1n8!$1h6!$1n8!$1k7!$0_lrk<m~>
+rjL_a!49iI!0m6X!0m<Z!0m9Y!0m9Y!0m9Y!0m<Z!0m9Y!0m9Y!0icK!0m9Y!0m<Z!0m6X!0m<Z
+!0m<Z!0m6X!0m<Z!0m9Y!0l.9rjI=~>
+rjL_a!-$$Z!$1h6!$1n8!$1k7!$1k7!$1k7!$1n8!$1k7!$1k7!$.@)!$1k7!$1n8!$1h6!$1n8
+!$1n8!$1h6!$1n8!$1k7!$0_lrjI=~>
+rk@:i!9(uu!$1k7!$1n8!$1k7!$1k7!$1k7!$1n8!$1n8!$1k7!$.:'!$1k7!$1n8!$1k7!$1k7
+!$1n8!$1k7!$1n8!$1k7!$0_lrk<m~>
+rjL_a!49fH!0m9Y!0m<Z!0m9Y!0m9Y!0m9Y!0m<Z!0m<Z!0m9Y!0i]I!0m9Y!0m<Z!0m9Y!0m9Y
+!0m<Z!0m9Y!0m<Z!0m9Y!0l.9rjI=~>
+rjL_a!-$!Y!$1k7!$1n8!$1k7!$1k7!$1k7!$1n8!$1n8!$1k7!$.:'!$1k7!$1n8!$1k7!$1k7
+!$1n8!$1k7!$1n8!$1k7!$0_lrjI=~>
+rk@:i!9(uu!$1k7!$1k7!$1k7!$1n8!$1k7!$1n8!$1n8!$1k7!$.7&!$1k7!$1n8!$1k7!$1n8
+!$1n8!$1k7!$1k7!$1k7!$0bmrk<m~>
+rjL_a!49fH!0m9Y!0m9Y!0m9Y!0m<Z!0m9Y!0m<Z!0m<Z!0m9Y!0iZH!0m9Y!0m<Z!0m9Y!0m<Z
+!0m<Z!0m9Y!0m9Y!0m9Y!0l1:rjI=~>
+rjL_a!-$!Y!$1k7!$1k7!$1k7!$1n8!$1k7!$1n8!$1n8!$1k7!$.7&!$1k7!$1n8!$1k7!$1n8
+!$1n8!$1k7!$1k7!$1k7!$0bmrjI=~>
+rk@:i!9(rt!$1k7!$1n8!$1k7!$1n8!$1k7!$1n8!$1n8!$1k7!$.7&!$1k7!$1n8!$1k7!$1k7
+!$1n8!$1k7!$1n8!$1k7!$0bmrk<m~>
+rjL_a!49cG!0m9Y!0m<Z!0m9Y!0m<Z!0m9Y!0m<Z!0m<Z!0m9Y!0iZH!0m9Y!0m<Z!0m9Y!0m9Y
+!0m<Z!0m9Y!0m<Z!0m9Y!0l1:rjI=~>
+rjL_a!-#sX!$1k7!$1n8!$1k7!$1n8!$1k7!$1n8!$1n8!$1k7!$.7&!$1k7!$1n8!$1k7!$1k7
+!$1n8!$1k7!$1n8!$1k7!$0bmrjI=~>
+rk@:i!9(rt!?JrNrrF.TqYpR:^\Rm1*P_IN!?JrNrrF.TqYpR:^\[s2*P_FM!?Jq<rrF.Tq>UI9
+^\[s2*P_FM!?JrOrrF.TqYpR:^\Rm1*P_IN!?JrNrrF.TgAh/dJ,~>
+rjL_a!49cG!L,>7rrJ?=qYpS\1&:hMPVN%7!L,>7rrJ?=qYpS\1&CnNPVN"6!L,=%rrJ?=q>UJ[
+1&CnNPVN"6!L,>8rrJ?=qYpS\1&:hMPVN%7!L,>7rrJ?=gAh/\J,~>
+rjL_a!-#sX!?EojrrF,pqYpR:1&:hM*AREj!?EojrrF,pqYpR:1&CnN*ARBi!?EnXrrF,pq>UI9
+1&CnN*ARBi!?EokrrF,pqYpR:1&:hM*AREj!?EojrrF,pgAh/\J,~>
+rk@:i!9(rts1eC0s1eF1s1eC0s1eF1s1eC0s1eF1s1eF1s1eC0s1a`s!P]ZNrrKkTqYpT2*Vo^9
+^E*1N!P]ZOrrKkTq>UI9^\[s2*P_FM!?Jr/s8K`_~>
+rjL_a!49cGs"X?Ls"XBMs"X?Ls"XBMs"X?Ls"XBMs"XBMs"X?Ls"T]:!ATi7rrFj=qYpRNPkk=[
+0pMP7!ATi8rrFj=q>UJ[1&CnNPVN"6!L,=ms8KHW~>
+rjL_a!-#sXs"X?Ls"XBMs"X?Ls"XBMs"X?Ls"XBMs"XBMs"X?Ls"T]:!APVjrrFhpqYpRN*Vo^9
+0cg,j!APVkrrFhpq>UI91&CnN*ARBi!?EoKs8KHW~>
+rk@:i!9(os!$1k7!$1n8!$1n8!$1n8!$1k7!$1n8!$1n8!$1k7!$..#!$1k7!$1q9!$1k7!$1n8
+!$1n8!$1k7!$1n8!$1n8!$0bmrk<m~>
+rjL_a!49`F!0m9Y!0m<Z!0m<Z!0m<Z!0m9Y!0m<Z!0m<Z!0m9Y!0iQE!0m9Y!0m?[!0m9Y!0m<Z
+!0m<Z!0m9Y!0m<Z!0m<Z!0l1:rjI=~>
+rjL_a!-#pW!$1k7!$1n8!$1n8!$1n8!$1k7!$1n8!$1n8!$1k7!$..#!$1k7!$1q9!$1k7!$1n8
+!$1n8!$1k7!$1n8!$1n8!$0bmrjI=~>
+rk@:i!9(lr!$1n8!$1n8!$1k7!$1n8!$1n8!$1n8!$1n8!$1n8!$.(!!$1n8!$1n8!$1k7!$1n8
+!$1n8!$1n8!$1n8!$1k7!$0enrk<m~>
+rjL_a!49]E!0m<Z!0m<Z!0m9Y!0m<Z!0m<Z!0m<Z!0m<Z!0m<Z!0iKC!0m<Z!0m<Z!0m9Y!0m<Z
+!0m<Z!0m<Z!0m<Z!0m9Y!0l4;rjI=~>
+rjL_a!-#mV!$1n8!$1n8!$1k7!$1n8!$1n8!$1n8!$1n8!$1n8!$.(!!$1n8!$1n8!$1k7!$1n8
+!$1n8!$1n8!$1n8!$1k7!$0enrjI=~>
+rk@:i!9(lr!$1n8!$1n8!$1k7!$1n8!$1n8!$1n8!$1n8!$1n8!$.(!!$1k7!$1n8!$1n8!$1n8
+!$1n8!$1n8!$1n8!$1k7!$0enrk<m~>
+rjL_a!49]E!0m<Z!0m<Z!0m9Y!0m<Z!0m<Z!0m<Z!0m<Z!0m<Z!0iKC!0m9Y!0m<Z!0m<Z!0m<Z
+!0m<Z!0m<Z!0m<Z!0m9Y!0l4;rjI=~>
+rjL_a!-#mV!$1n8!$1n8!$1k7!$1n8!$1n8!$1n8!$1n8!$1n8!$.(!!$1k7!$1n8!$1n8!$1n8
+!$1n8!$1n8!$1n8!$1k7!$0enrjI=~>
+rk@:i!9(iq!$1n8!$1n8!$1n8!$1n8!$1n8!$1n8!$1n8!$1n8!$.$u!$1k7!$1q9!$1k7!$1n8
+!$1n8!$1n8!$1n8!$1n8!$0enrk<m~>
+rjL_a!49ZD!0m<Z!0m<Z!0m<Z!0m<Z!0m<Z!0m<Z!0m<Z!0m<Z!0iHB!0m9Y!0m?[!0m9Y!0m<Z
+!0m<Z!0m<Z!0m<Z!0m<Z!0l4;rjI=~>
+rjL_a!-#jU!$1n8!$1n8!$1n8!$1n8!$1n8!$1n8!$1n8!$1n8!$.$u!$1k7!$1q9!$1k7!$1n8
+!$1n8!$1n8!$1n8!$1n8!$0enrjI=~>
+rk@:i!9(iq!$1n8!$1n8!$1n8!$1n8!$1n8!$1n8!$1q9!$1k7!$.!t!$1k7!$1q9!$1k7!$1q9
+!$1n8!$1n8!$1n8!$1n8!$0enrk<m~>
+rjL_a!49ZD!0m<Z!0m<Z!0m<Z!0m<Z!0m<Z!0m<Z!0m?[!0m9Y!0iEA!0m9Y!0m?[!0m9Y!0m?[
+!0m<Z!0m<Z!0m<Z!0m<Z!0l4;rjI=~>
+rjL_a!-#jU!$1n8!$1n8!$1n8!$1n8!$1n8!$1n8!$1q9!$1k7!$.!t!$1k7!$1q9!$1k7!$1q9
+!$1n8!$1n8!$1n8!$1n8!$0enrjI=~>
+rk@:i!9(fp!$1q9!$1n8!$1n8!$1n8!$1n8!$1n8!$1q9!$1k7!$-ss!$1n8!$1n8!$1n8!$1n8
+!$1n8!$1q9!$1n8!$1n8!$0enrk<m~>
+rjL_a!49WC!0m?[!0m<Z!0m<Z!0m<Z!0m<Z!0m<Z!0m?[!0m9Y!0iB@!0m<Z!0m<Z!0m<Z!0m<Z
+!0m<Z!0m?[!0m<Z!0m<Z!0l4;rjI=~>
+rjL_a!-#gT!$1q9!$1n8!$1n8!$1n8!$1n8!$1n8!$1q9!$1k7!$-ss!$1n8!$1n8!$1n8!$1n8
+!$1n8!$1q9!$1n8!$1n8!$0enrjI=~>
+rk@:i!9(fp!$1n8!$1n8!$1q9!$1n8!$1n8!$1n8!$1q9!$1k7!$-pr!$1n8!$1q9!$1k7!$1q9
+!$1n8!$1n8!$1n8!$1q9!$0enrk<m~>
+rjL_a!49WC!0m<Z!0m<Z!0m?[!0m<Z!0m<Z!0m<Z!0m?[!0m9Y!0i??!0m<Z!0m?[!0m9Y!0m?[
+!0m<Z!0m<Z!0m<Z!0m?[!0l4;rjI=~>
+rjL_a!-#gT!$1n8!$1n8!$1q9!$1n8!$1n8!$1n8!$1q9!$1k7!$-pr!$1n8!$1q9!$1k7!$1q9
+!$1n8!$1n8!$1n8!$1q9!$0enrjI=~>
+rk@:i!9(co!$1q9!$1n8!$1n8!$1n8!$1q9!$1n8!$1q9!$1n8!$-jp!$1n8!$1q9!$1n8!$1n8
+!$1n8!$1q9!$1n8!$1n8!$0hork<m~>
+rjL_a!49TB!0m?[!0m<Z!0m<Z!0m<Z!0m?[!0m<Z!0m?[!0m<Z!0i9=!0m<Z!0m?[!0m<Z!0m<Z
+!0m<Z!0m?[!0m<Z!0m<Z!0l7<rjI=~>
+rjL_a!-#dS!$1q9!$1n8!$1n8!$1n8!$1q9!$1n8!$1q9!$1n8!$-jp!$1n8!$1q9!$1n8!$1n8
+!$1n8!$1q9!$1n8!$1n8!$0horjI=~>
+rk@:i!9(co!$1q9!$1n8!$1n8!$1n8!$1q9!$1n8!$1q9!$1n8!$-jp!$1k7!$1q9!$1n8!$1q9
+!$1n8!$1q9!$1n8!$1n8!$0hork<m~>
+rjL_a!49TB!0m?[!0m<Z!0m<Z!0m<Z!0m?[!0m<Z!0m?[!0m<Z!0i9=!0m9Y!0m?[!0m<Z!0m?[
+!0m<Z!0m?[!0m<Z!0m<Z!0l7<rjI=~>
+rjL_a!-#dS!$1q9!$1n8!$1n8!$1n8!$1q9!$1n8!$1q9!$1n8!$-jp!$1k7!$1q9!$1n8!$1q9
+!$1n8!$1q9!$1n8!$1n8!$0horjI=~>
+rk@:i!9(`n!$1q9!$1n8!$1q9!$1n8!$1q9!$1n8!$1q9!$1n8!$-go!$1n8!$1q9!$1n8!$1n8
+!$1n8!$1q9!$1n8!$1q9!$0hork<m~>
+rjL_a!49QA!0m?[!0m<Z!0m?[!0m<Z!0m?[!0m<Z!0m?[!0m<Z!0i6<!0m<Z!0m?[!0m<Z!0m<Z
+!0m<Z!0m?[!0m<Z!0m?[!0l7<rjI=~>
+rjL_a!-#aR!$1q9!$1n8!$1q9!$1n8!$1q9!$1n8!$1q9!$1n8!$-go!$1n8!$1q9!$1n8!$1n8
+!$1n8!$1q9!$1n8!$1q9!$0horjI=~>
+rk@:i!9(`n!?JrPrrF.TqYpR:^\e$3*P_IN!?JrPrrF.TqYpR:^\e$3*P_IN!?Jq0rrF.TqYpR:
+^\e$3*P_IN!?JrPrrF.TqYpR:^\e$3*P_IN!?JrPrrF.Th#IAfJ,~>
+rjL_a!49QA!L,>9rrJ?=qYpS\1&LtOPVN%7!L,>9rrJ?=qYpS\1&LtOPVN%7!L,<nrrJ?=qYpS\
+1&LtOPVN%7!L,>9rrJ?=qYpS\1&LtOPVN%7!L,>9rrJ?=h#IA^J,~>
+rjL_a!-#aR!?EolrrF,pqYpR:1&LtO*AREj!?EolrrF,pqYpR:1&LtO*AREj!?EnLrrF,pqYpR:
+1&LtO*AREj!?EolrrF,pqYpR:1&LtO*AREj!?EolrrF,ph#IA^J,~>
+rk@:i!9(`ns1eI2s1eF1s1eI2s1eF1s1eI2s1eF1s1eI2s1eF1s1a<g!P]ZOrrKkTqu6]3*W#d:
+^E*4O!P]ZOrrF.Tqu6[;^\[s2*P_LO!?Jr1s8K`_~>
+rjL_a!49QAs"XENs"XBMs"XENs"XBMs"XENs"XBMs"XENs"XBMs"T9.!ATi8rrFj=qu6[OPktC\
+0pMS8!ATi8rrJ?=qu6\]1&CnNPVN(8!L,=os8KHW~>
+rjL_a!-#aRs"XENs"XBMs"XENs"XBMs"XENs"XBMs"XENs"XBMs"T9.!APVkrrFhpqu6[O*W#d:
+0cg/k!APVkrrF,pqu6[;1&CnN*ARHk!?EoMs8KHW~>
+rk@:i!9(]m!$1q9!$1n8!$1q9!$1q9!$1q9!$1n8!$1q9!$1q9!$-[k!$1n8!$1t:!$1n8!$1q9
+!$1n8!$1q9!$1n8!$1t:!$0hork<m~>
+rjL_a!49N@!0m?[!0m<Z!0m?[!0m?[!0m?[!0m<Z!0m?[!0m?[!0i*8!0m<Z!0mB\!0m<Z!0m?[
+!0m<Z!0m?[!0m<Z!0mB\!0l7<rjI=~>
+rjL_a!-#^Q!$1q9!$1n8!$1q9!$1q9!$1q9!$1n8!$1q9!$1q9!$-[k!$1n8!$1t:!$1n8!$1q9
+!$1n8!$1q9!$1n8!$1t:!$0horjI=~>
+rk@:i!9(]m!$1q9!$1n8!$1q9!$1q9!$1q9!$1n8!$1q9!$1q9!$-Xj!$1q9!$1q9!$1n8!$1q9
+!$1q9!$1q9!$1n8!$1q9!$0kprk<m~>
+rjL_a!49N@!0m?[!0m<Z!0m?[!0m?[!0m?[!0m<Z!0m?[!0m?[!0i'7!0m?[!0m?[!0m<Z!0m?[
+!0m?[!0m?[!0m<Z!0m?[!0l:=rjI=~>
+rjL_a!-#^Q!$1q9!$1n8!$1q9!$1q9!$1q9!$1n8!$1q9!$1q9!$-Xj!$1q9!$1q9!$1n8!$1q9
+!$1q9!$1q9!$1n8!$1q9!$0kprjI=~>
+rk@:i!9(Zl!$1q9!$1q9!$1q9!$1q9!$1q9!$1n8!$1q9!$1q9!$-Xj!$1n8!$1q9!$1q9!$1q9
+!$1n8!$1t:!$1n8!$1q9!$0kprk<m~>
+rjL_a!49K?!0m?[!0m?[!0m?[!0m?[!0m?[!0m<Z!0m?[!0m?[!0i'7!0m<Z!0m?[!0m?[!0m?[
+!0m<Z!0mB\!0m<Z!0m?[!0l:=rjI=~>
+rjL_a!-#[P!$1q9!$1q9!$1q9!$1q9!$1q9!$1n8!$1q9!$1q9!$-Xj!$1n8!$1q9!$1q9!$1q9
+!$1n8!$1t:!$1n8!$1q9!$0kprjI=~>
+rk@:i!9(Zl!$1q9!$1q9!$1q9!$1q9!$1q9!$1n8!$1q9!$1q9!$-Xj!WO29rr=):rr=)8rr=)9
+rr=)9rr=)9rr=)9rr=)9rr=(ps8K`_~>
+rjL_a!49K?!0m?[!0m?[!0m?[!0m?[!0m?[!0m<Z!0m?[!0m?[!0i'7!WSD[rrA;\rrA;ZrrA;[
+rrA;[rrA;[rrA;[rrA;[rrA;=s8KHW~>
+rjL_a!-#[P!$1q9!$1q9!$1q9!$1q9!$1q9!$1n8!$1q9!$1q9!$-Xj!WO29rr=):rr=)8rr=)9
+rr=)9rr=)9rr=)9rr=)9rr=(ps8KHW~>
+rk@:i!9(Wk!$1q9!$1q9!$1q9!$1q9!$1q9!$1t:!$1q9!$1q9!$-Xjrr2s=q>UF8qu6X:q>UF8
+qu6X:q>UF8qu6X:q>UF8qu6X:h#IAfJ,~>
+rjL_a!49H>!0m?[!0m?[!0m?[!0m?[!0m?[!0mB\!0m?[!0m?[!0i'7rr2t_q>UGZqu6Y\q>UGZ
+qu6Y\q>UGZqu6Y\q>UGZqu6Y\h#IA^J,~>
+rjL_a!-#XO!$1q9!$1q9!$1q9!$1q9!$1q9!$1t:!$1q9!$1q9!$-Xjrr2s=q>UF8qu6X:q>UF8
+qu6X:q>UF8qu6X:q>UF8qu6X:h#IA^J,~>
+rk@:i!9(Wk!$1q9!$1q9!$1q9!$1q9!$1q9!$1t:!$1q9!$1q9!$-XjrVlj<qYpO9qYpO9qYpO9
+qYpO9qYpO9qu6X:q>UF8qu6X:h#IAfJ,~>
+rjL_a!49H>!0m?[!0m?[!0m?[!0m?[!0m?[!0mB\!0m?[!0m?[!0i'7rVlk^qYpP[qYpP[qYpP[
+qYpP[qYpP[qu6Y\q>UGZqu6Y\h#IA^J,~>
+rjL_a!-#XO!$1q9!$1q9!$1q9!$1q9!$1q9!$1t:!$1q9!$1q9!$-XjrVlj<qYpO9qYpO9qYpO9
+qYpO9qYpO9qu6X:q>UF8qu6X:h#IA^J,~>
+rk@:i!9(Wk!$1q9!$1q9!$1q9!$1q9!$1q9!$1t:!$1q9!$1q9!$-Xjr;Qa;qYpO9qu6X:q>UF8
+qu6X:qYpO9qYpO9qYpO9qu6X:h#IAfJ,~>
+rjL_a!49H>!0m?[!0m?[!0m?[!0m?[!0m?[!0mB\!0m?[!0m?[!0i'7r;Qb]qYpP[qu6Y\q>UGZ
+qu6Y\qYpP[qYpP[qYpP[qu6Y\h#IA^J,~>
+rjL_a!-#XO!$1q9!$1q9!$1q9!$1q9!$1q9!$1t:!$1q9!$1q9!$-Xjr;Qa;qYpO9qu6X:q>UF8
+qu6X:qYpO9qYpO9qYpO9qu6X:h#IA^J,~>
+rk@:i!9(Tj!$1q9!$1t:!$1q9!$1q9!$1q9!$1t:!$1q9!$1q9!$-Xjqu6X:qYpO9qu6X:qYpO9
+qYpO9qYpO9qu6X:qYpO9qYpO9h>dJgJ,~>
+rjL_a!49E=!0m?[!0mB\!0m?[!0m?[!0m?[!0mB\!0m?[!0m?[!0i'7qu6Y\qYpP[qu6Y\qYpP[
+qYpP[qYpP[qu6Y\qYpP[qYpP[h>dJ_J,~>
+rjL_a!-#UN!$1q9!$1t:!$1q9!$1q9!$1q9!$1t:!$1q9!$1q9!$-Xjqu6X:qYpO9qu6X:qYpO9
+qYpO9qYpO9qu6X:qYpO9qYpO9h>dJ_J,~>
+rk@:i!9(Tj!$1q9!$1q9!$1q9!$1t:!$1q9!$1t:!$1q9!$1t:!$-XjqYpO9q>UF8qu6X:qYpO9
+qu6X:qYpO9qu6X:q>UF8qu6X:h>dJgJ,~>
+rjL_a!49E=!0m?[!0m?[!0m?[!0mB\!0m?[!0mB\!0m?[!0mB\!0i'7qYpP[q>UGZqu6Y\qYpP[
+qu6Y\qYpP[qu6Y\q>UGZqu6Y\h>dJ_J,~>
+rjL_a!-#UN!$1q9!$1q9!$1q9!$1t:!$1q9!$1t:!$1q9!$1t:!$-XjqYpO9q>UF8qu6X:qYpO9
+qu6X:qYpO9qu6X:q>UF8qu6X:h>dJ_J,~>
+rk@:i!9(Qi!$1q9!$1t:!$1q9!$1t:!$1q9!$1t:!$1q9!$1t:!$-Xjq>UF8qYpO9qu6X:qYpO9
+qYpO9qYpO9qu6X:qYpO9qu6X:h>dJgJ,~>
+rjL_a!49B<!0m?[!0mB\!0m?[!0mB\!0m?[!0mB\!0m?[!0mB\!0i'7q>UGZqYpP[qu6Y\qYpP[
+qYpP[qYpP[qu6Y\qYpP[qu6Y\h>dJ_J,~>
+rjL_a!-#RM!$1q9!$1t:!$1q9!$1t:!$1q9!$1t:!$1q9!$1t:!$-Xjq>UF8qYpO9qu6X:qYpO9
+qYpO9qYpO9qu6X:qYpO9qu6X:h>dJ_J,~>
+rk@:i!9(Qi!?JrPrrF.Tr;Qd<^\e$3*P_OP!?JrPrrF.Tr;Qd<^\e$3*P_OP!?Jq+s7uZq*P_LO
+!?JrQrrF.Tqu6[;^\n*4*P_LO!?JrQrrF.Tqu6[;^\n*4*P^J2rk<m~>
+rjL_a!49B<!L,>9rrJ?=r;Qe^1&LtOPVN+9!L,>9rrJ?=r;Qe^1&LtOPVN+9!L,<is7uZqPVN(8
+!L,>:rrJ?=qu6\]1&V%PPVN(8!L,>:rrJ?=qu6\]1&V%PPVM%prjI=~>
+rjL_a!-#RM!?EolrrF,pr;Qd<1&LtO*ARKl!?EolrrF,pr;Qd<1&LtO*ARKl!?EnGs7uZq*ARHk
+!?EomrrF,pqu6[;1&V%P*ARHk!?EomrrF,pqu6[;1&V%P*AQFNrjI=~>
+rk@:i!9(Qis1eI2s1eL3s1eI2s1eL3s1eI2s1eL3s1eI2s1eL3s1a-bq>UK1*W,j;^E*7P!P]ZP
+rrKkTr;Qf4*W,j;*P_OP!?JrPrrF.Tr;Qd<^Y]"i^46~>
+rjL_a!49B<s"XENs"XHOs"XENs"XHOs"XENs"XHOs"XENs"XHOs"T*)q>UIMPl(I]0pMV9!ATi9
+rrFj=r;QdPPl(I]PVN+9!L,>9rrJ?=r;Qe^1#Ds0[X\~>
+rjL_a!-#RMs"XENs"XHOs"XENs"XHOs"XENs"XHOs"XENs"XHOs"T*)q>UIM*W,j;0cg2l!APVl
+rrFhpr;QdP*W,j;*ARKl!?EolrrF,pr;Qd<1#Ds0[X\~>
+rk@:i!9(Nh!$1q9!$1t:!$1t:!$1t:!$1q9!$1t:!$1q9!$1t:!$-XjpAY+5qu6X:qu6X:qYpO9
+qu6X:qYpO9qu6X:qu6X:qu6X:h>dJgJ,~>
+rjL_a!49?;!0m?[!0mB\!0mB\!0mB\!0m?[!0mB\!0m?[!0mB\!0i'7pAY,Wqu6Y\qu6Y\qYpP[
+qu6Y\qYpP[qu6Y\qu6Y\qu6Y\h>dJ_J,~>
+rjL_a!-#OL!$1q9!$1t:!$1t:!$1t:!$1q9!$1t:!$1q9!$1t:!$-XjpAY+5qu6X:qu6X:qYpO9
+qu6X:qYpO9qu6X:qu6X:qu6X:h>dJ_J,~>
+rk@:i!9(Nh!$1q9!$1t:!$1t:!$1t:!$1q9!$1t:!$1q9!$1t:!$-Xjp&>"4qu6X:qu6X:qYpO9
+qu6X:qu6X:qu6X:qYpO9qu6X:hZ*ShJ,~>
+rjL_a!49?;!0m?[!0mB\!0mB\!0mB\!0m?[!0mB\!0m?[!0mB\!0i'7p&>#Vqu6Y\qu6Y\qYpP[
+qu6Y\qu6Y\qu6Y\qYpP[qu6Y\hZ*S`J,~>
+rjL_a!-#OL!$1q9!$1t:!$1t:!$1t:!$1q9!$1t:!$1q9!$1t:!$-Xjp&>"4qu6X:qu6X:qYpO9
+qu6X:qu6X:qu6X:qYpO9qu6X:hZ*S`J,~>
+rk@:i!9(Kg!$1t:!$1t:!$1q9!$1t:!$1t:!$1t:!$1t:!$1t:!$-Xjo`"n3qYpO9qu6X:qu6X:
+qu6X:qYpO9qu6X:qu6X:qu6X:hZ*ShJ,~>
+rjL_a!49<:!0mB\!0mB\!0m?[!0mB\!0mB\!0mB\!0mB\!0mB\!0i'7o`"oUqYpP[qu6Y\qu6Y\
+qu6Y\qYpP[qu6Y\qu6Y\qu6Y\hZ*S`J,~>
+rjL_a!-#LK!$1t:!$1t:!$1q9!$1t:!$1t:!$1t:!$1t:!$1t:!$-Xjo`"n3qYpO9qu6X:qu6X:
+qu6X:qYpO9qu6X:qu6X:qu6X:hZ*S`J,~>
+rk@:i!9(Kg!$1q9!$1t:!$1t:!$1t:!$1t:!$1t:!$1t:!$1t:!$-XjoD\e2qu6X:qu6X:qYpO9
+qu6X:qu6X:qu6X:qu6X:qu6X:hZ*ShJ,~>
+rjL_a!49<:!0m?[!0mB\!0mB\!0mB\!0mB\!0mB\!0mB\!0mB\!0i'7oD\fTqu6Y\qu6Y\qYpP[
+qu6Y\qu6Y\qu6Y\qu6Y\qu6Y\hZ*S`J,~>
+rjL_a!-#LK!$1q9!$1t:!$1t:!$1t:!$1t:!$1t:!$1t:!$1t:!$-XjoD\e2qu6X:qu6X:qYpO9
+qu6X:qu6X:qu6X:qu6X:qu6X:hZ*S`J,~>
+rk@:i!9(Hf!$1t:!$1t:!$1t:!$1t:!$1t:!$1t:!$1t:!$1t:!$-Xjo)A\1qu6X:qu6X:qu6X:
+qu6X:qu6X:qu6X:qu6X:qu6X:hZ*ShJ,~>
+rjL_a!4999!0mB\!0mB\!0mB\!0mB\!0mB\!0mB\!0mB\!0mB\!0i'7o)A]Squ6Y\qu6Y\qu6Y\
+qu6Y\qu6Y\qu6Y\qu6Y\qu6Y\hZ*S`J,~>
+rjL_a!-#IJ!$1t:!$1t:!$1t:!$1t:!$1t:!$1t:!$1t:!$1t:!$-Xjo)A\1qu6X:qu6X:qu6X:
+qu6X:qu6X:qu6X:qu6X:qu6X:hZ*S`J,~>
+rk@:i!9(Hf!$1t:!$1t:!$1t:!$1t:!$1t:!$1t:!$1t:!$1t:!$-Xjnc&S0qu6X:qu6X:qu6X:
+qu6X:qu6X:qu6X:qu6X:qu6X:huE\iJ,~>
+rjL_a!4999!0mB\!0mB\!0mB\!0mB\!0mB\!0mB\!0mB\!0mB\!0i'7nc&TRqu6Y\qu6Y\qu6Y\
+qu6Y\qu6Y\qu6Y\qu6Y\qu6Y\huE\aJ,~>
+rjL_a!-#IJ!$1t:!$1t:!$1t:!$1t:!$1t:!$1t:!$1t:!$1t:!$-Xjnc&S0qu6X:qu6X:qu6X:
+qu6X:qu6X:qu6X:qu6X:qu6X:huE\aJ,~>
+rk@:i!9(Ee!$2";!$1t:!$1t:!$1t:!$1t:!$1t:!$1t:!$1t:!$-XjnG`J/qu6X:qu6X:r;Qa;
+qu6X:qu6X:qu6X:qu6X:qu6X:huE\iJ,~>
+rjL_a!4968!0mE]!0mB\!0mB\!0mB\!0mB\!0mB\!0mB\!0mB\!0i'7nG`KQqu6Y\qu6Y\r;Qb]
+qu6Y\qu6Y\qu6Y\qu6Y\qu6Y\huE\aJ,~>
+rjL_a!-#FI!$2";!$1t:!$1t:!$1t:!$1t:!$1t:!$1t:!$1t:!$-XjnG`J/qu6X:qu6X:r;Qa;
+qu6X:qu6X:qu6X:qu6X:qu6X:huE\aJ,~>
+rk@:i!9(Ee!$1t:!$1t:!$2";!$1t:!$1t:!$1t:!$1t:!$1t:!$-Xjn,EA.r;Qa;qu6X:qu6X:
+qu6X:r;Qa;qu6X:qu6X:qu6X:huE\iJ,~>
+rjL_a!4968!0mB\!0mB\!0mE]!0mB\!0mB\!0mB\!0mB\!0mB\!0i'7n,EBPr;Qb]qu6Y\qu6Y\
+qu6Y\r;Qb]qu6Y\qu6Y\qu6Y\huE\aJ,~>
+rjL_a!-#FI!$1t:!$1t:!$2";!$1t:!$1t:!$1t:!$1t:!$1t:!$-Xjn,EA.r;Qa;qu6X:qu6X:
+qu6X:r;Qa;qu6X:qu6X:qu6X:huE\aJ,~>
+rk@:i!9(Bd!$2";!$1t:!$1t:!$1t:!$2";!$1t:!$2";!$1t:!$-Xjmf*8-qu6X:qu6X:r;Qa;
+qu6X:qu6X:qu6X:r;Qa;qu6X:huE\iJ,~>
+rjL_a!4937!0mE]!0mB\!0mB\!0mB\!0mE]!0mB\!0mE]!0mB\!0i'7mf*9Oqu6Y\qu6Y\r;Qb]
+qu6Y\qu6Y\qu6Y\r;Qb]qu6Y\huE\aJ,~>
+rjL_a!-#CH!$2";!$1t:!$1t:!$1t:!$2";!$1t:!$2";!$1t:!$-Xjmf*8-qu6X:qu6X:r;Qa;
+qu6X:qu6X:qu6X:r;Qa;qu6X:huE\aJ,~>
+rk@:i!9(Bd!$2";!$1t:!$1t:!$1t:!$2";!$1t:!$2";!$1t:!$-XjmJd/,qu6X:qu6X:r;Qa;
+qu6X:r;Qa;qu6X:qu6X:qu6X:i;`ejJ,~>
+rjL_a!4937!0mE]!0mB\!0mB\!0mB\!0mE]!0mB\!0mE]!0mB\!0i'7mJd0Nqu6Y\qu6Y\r;Qb]
+qu6Y\r;Qb]qu6Y\qu6Y\qu6Y\i;`ebJ,~>
+rjL_a!-#CH!$2";!$1t:!$1t:!$1t:!$2";!$1t:!$2";!$1t:!$-XjmJd/,qu6X:qu6X:r;Qa;
+qu6X:r;Qa;qu6X:qu6X:qu6X:i;`ebJ,~>
+rk@:i!9(?c!$2";!$1t:!$2";!$1t:!$2";!$1t:!$2";!$1t:!$-Xjm/I&+r;Qa;qu6X:r;Qa;
+qu6X:qu6X:qu6X:r;Qa;qu6X:i;`ejJ,~>
+rjL_a!4906!0mE]!0mB\!0mE]!0mB\!0mE]!0mB\!0mE]!0mB\!0i'7m/I'Mr;Qb]qu6Y\r;Qb]
+qu6Y\qu6Y\qu6Y\r;Qb]qu6Y\i;`ebJ,~>
+rjL_a!-#@G!$2";!$1t:!$2";!$1t:!$2";!$1t:!$2";!$1t:!$-Xjm/I&+r;Qa;qu6X:r;Qa;
+qu6X:qu6X:qu6X:r;Qa;qu6X:i;`ebJ,~>
+rk@:i!9(?c!?JrRrrF.Tr;Qd<^]"05*P_OP!?JrRrrF.Tr;Qd<^]"05*P_OP!?Jq+s6Tad*P_RQ
+!?JrQrrF.TrVlm=^\n*4*P_RQ!?JrQrrF.TrVlm=^\n*4*P^S5rk<m~>
+rjL_a!4906!L,>;rrJ?=r;Qe^1&_+QPVN+9!L,>;rrJ?=r;Qe^1&_+QPVN+9!L,<is6TadPVN.:
+!L,>:rrJ?=rVln_1&V%PPVN.:!L,>:rrJ?=rVln_1&V%PPVM.srjI=~>
+rjL_a!-#@G!?EonrrF,pr;Qd<1&_+Q*ARKl!?EonrrF,pr;Qd<1&_+Q*ARKl!?EnGs6Tad*ARNm
+!?EomrrF,prVlm=1&V%P*ARNm!?EomrrF,prVlm=1&V%P*AQOQrjI=~>
+rk@:i!9(?cs1eO4s1eL3s1eO4s1eL3s1eO4s1eL3s1eO4s1eL3s1a-bm/I+$*W?!=^E*7P!P]ZR
+rrKkTr;Qf4*W?!=^E*7P!?JrRrrF.Tr;Qd<^Z#4l^46~>
+rjL_a!4906s"XKPs"XHOs"XKPs"XHOs"XKPs"XHOs"XKPs"XHOs"T*)m/I)@Pl:U_0pMV9!ATi;
+rrFj=r;QdPPl:U_0pMV9!L,>;rrJ?=r;Qe^1#`03[X\~>
+rjL_a!-#@Gs"XKPs"XHOs"XKPs"XHOs"XKPs"XHOs"XKPs"XHOs"T*)m/I)@*W?!=0cg2l!APVn
+rrFhpr;QdP*W?!=0cg2l!?EonrrF,pr;Qd<1#`03[X\~>
+rk@:i!9(<b!$2";!$1t:!$2";!$2";!$2";!$1t:!$2";!$1t:!$-Xjl2L`(r;Qa;r;Qa;r;Qa;
+qu6X:r;Qa;qu6X:r;Qa;r;Qa;i;`ejJ,~>
+rjL_a!49-5!0mE]!0mB\!0mE]!0mE]!0mE]!0mB\!0mE]!0mB\!0i'7l2LaJr;Qb]r;Qb]r;Qb]
+qu6Y\r;Qb]qu6Y\r;Qb]r;Qb]i;`ebJ,~>
+rjL_a!-#=F!$2";!$1t:!$2";!$2";!$2";!$1t:!$2";!$1t:!$-Xjl2L`(r;Qa;r;Qa;r;Qa;
+qu6X:r;Qa;qu6X:r;Qa;r;Qa;i;`ebJ,~>
+rk@:i!9(9a!$2%<!$1t:!$2";!$1t:!$2%<!$1t:!$2";!$2";!$-XjkPkN&r;Qa;r;Qa;r;Qa;
+qu6X:r;Qa;r;Qa;r;Qa;qu6X:iW&nkJ,~>
+rjL_a!49*4!0mH^!0mB\!0mE]!0mB\!0mH^!0mB\!0mE]!0mE]!0i'7kPkOHr;Qb]r;Qb]r;Qb]
+qu6Y\r;Qb]r;Qb]r;Qb]qu6Y\iW&ncJ,~>
+rjL_a!-#:E!$2%<!$1t:!$2";!$1t:!$2%<!$1t:!$2";!$2";!$-XjkPkN&r;Qa;r;Qa;r;Qa;
+qu6X:r;Qa;r;Qa;r;Qa;qu6X:iW&ncJ,~>
+rk@:i!9(9a!$2";!$2";!$2";!$1t:!$2%<!$1t:!$2";!$2";!$-XjkPkN&r;Qa;qu6X:r;Qa;
+r;Qa;r;Qa;r;Qa;r;Qa;qu6X:iW&nkJ,~>
+rjL_a!49*4!0mE]!0mE]!0mE]!0mB\!0mH^!0mB\!0mE]!0mE]!0i'7kPkOHr;Qb]qu6Y\r;Qb]
+r;Qb]r;Qb]r;Qb]r;Qb]qu6Y\iW&ncJ,~>
+rjL_a!-#:E!$2";!$2";!$2";!$1t:!$2%<!$1t:!$2";!$2";!$-XjkPkN&r;Qa;qu6X:r;Qa;
+r;Qa;r;Qa;r;Qa;r;Qa;qu6X:iW&ncJ,~>
+rk@:i!9(6`!$2%<!$1t:!$2%<!$1t:!$2%<!$1t:!$2";!$2";!$-Xjk5PE%r;Qa;r;Qa;r;Qa;
+qu6X:r;Qa;r;Qa;r;Qa;r;Qa;iW&nkJ,~>
+rjL_a!49'3!0mH^!0mB\!0mH^!0mB\!0mH^!0mB\!0mE]!0mE]!0i'7k5PFGr;Qb]r;Qb]r;Qb]
+qu6Y\r;Qb]r;Qb]r;Qb]r;Qb]iW&ncJ,~>
+rjL_a!-#7D!$2%<!$1t:!$2%<!$1t:!$2%<!$1t:!$2";!$2";!$-Xjk5PE%r;Qa;r;Qa;r;Qa;
+qu6X:r;Qa;r;Qa;r;Qa;r;Qa;iW&ncJ,~>
+rk@:i!9(6`!$2";!$2";!$2";!$2";!$2";!$2";!$2%<!$1t:!$-Xjjo5<$r;Qa;r;Qa;r;Qa;
+r;Qa;r;Qa;r;Qa;r;Qa;r;Qa;iW&nkJ,~>
+rjL_a!49'3!0mE]!0mE]!0mE]!0mE]!0mE]!0mE]!0mH^!0mB\!0i'7jo5=Fr;Qb]r;Qb]r;Qb]
+r;Qb]r;Qb]r;Qb]r;Qb]r;Qb]iW&ncJ,~>
+rjL_a!-#7D!$2";!$2";!$2";!$2";!$2";!$2";!$2%<!$1t:!$-Xjjo5<$r;Qa;r;Qa;r;Qa;
+r;Qa;r;Qa;r;Qa;r;Qa;r;Qa;iW&ncJ,~>
+rk@:i!9(3_!$2%<!$2";!$2";!$2";!$2";!$2";!$2%<!$1t:!$-XjjSo3#r;Qa;r;Qa;r;Qa;
+r;Qa;r;Qa;rVlj<r;Qa;r;Qa;iW&nkJ,~>
+rjL_a!49$2!0mH^!0mE]!0mE]!0mE]!0mE]!0mE]!0mH^!0mB\!0i'7jSo4Er;Qb]r;Qb]r;Qb]
+r;Qb]r;Qb]rVlk^r;Qb]r;Qb]iW&ncJ,~>
+rjL_a!-#4C!$2%<!$2";!$2";!$2";!$2";!$2";!$2%<!$1t:!$-XjjSo3#r;Qa;r;Qa;r;Qa;
+r;Qa;r;Qa;rVlj<r;Qa;r;Qa;iW&ncJ,~>
+rk@:i!9(3_!$2%<!$1t:!$2%<!$2";!$2";!$2";!$2%<!$1t:!$-Xjj8T*"r;Qa;rVlj<r;Qa;
+r;Qa;r;Qa;r;Qa;r;Qa;rVlj<iW&nkJ,~>
+rjL_a!49$2!0mH^!0mB\!0mH^!0mE]!0mE]!0mE]!0mH^!0mB\!0i'7j8T+Dr;Qb]rVlk^r;Qb]
+r;Qb]r;Qb]r;Qb]r;Qb]rVlk^iW&ncJ,~>
+rjL_a!-#4C!$2%<!$1t:!$2%<!$2";!$2";!$2";!$2%<!$1t:!$-Xjj8T*"r;Qa;rVlj<r;Qa;
+r;Qa;r;Qa;r;Qa;r;Qa;rVlj<iW&ncJ,~>
+rk@:i!9(0^!$2%<!$2";!$2%<!$1t:!$2%<!$2";!$2%<!$2";!$-XjiVrlur;Qa;rVlj<r;Qa;
+r;Qa;r;Qa;rVlj<r;Qa;r;Qa;irB"lJ,~>
+rjL_a!49!1!0mH^!0mE]!0mH^!0mB\!0mH^!0mE]!0mH^!0mE]!0i'7iVrnBr;Qb]rVlk^r;Qb]
+r;Qb]r;Qb]rVlk^r;Qb]r;Qb]irB"dJ,~>
+rjL_a!-#1B!$2%<!$2";!$2%<!$1t:!$2%<!$2";!$2%<!$2";!$-XjiVrlur;Qa;rVlj<r;Qa;
+r;Qa;r;Qa;rVlj<r;Qa;r;Qa;irB"dJ,~>
+rk@:i!9(0^!$2%<!$2";!$2";!$2";!$2%<!$2";!$2%<!$2";!$-XjiVrlur;Qa;r;Qa;r;Qa;
+rVlj<r;Qa;rVlj<r;Qa;r;Qa;irB"lJ,~>
+rjL_a!49!1!0mH^!0mE]!0mE]!0mE]!0mH^!0mE]!0mH^!0mE]!0i'7iVrnBr;Qb]r;Qb]r;Qb]
+rVlk^r;Qb]rVlk^r;Qb]r;Qb]irB"dJ,~>
+rjL_a!-#1B!$2%<!$2";!$2";!$2";!$2%<!$2";!$2%<!$2";!$-XjiVrlur;Qa;r;Qa;r;Qa;
+rVlj<r;Qa;rVlj<r;Qa;r;Qa;irB"dJ,~>
+rk@:i!9(-]!$2%<!$2";!$2%<!$2";!$2%<!$2";!$2%<!$2";!$-Xji;Wctr;Qa;rVlj<r;Qa;
+r;Qa;r;Qa;rVlj<r;Qa;rVlj<irB"lJ,~>
+rjL_a!48s0!0mH^!0mE]!0mH^!0mE]!0mH^!0mE]!0mH^!0mE]!0i'7i;WeAr;Qb]rVlk^r;Qb]
+r;Qb]r;Qb]rVlk^r;Qb]rVlk^irB"dJ,~>
+rjL_a!-#.A!$2%<!$2";!$2%<!$2";!$2%<!$2";!$2%<!$2";!$-Xji;Wctr;Qa;rVlj<r;Qa;
+r;Qa;r;Qa;rVlj<r;Qa;rVlj<irB"dJ,~>
+rk@:i!9(-]!?JrSrrF.TrVlm=^]+66*P_RQ!?JrSrrF.TrVlm=^]+66*P_RQ!?Jq+s5<nX*P_RQ
+!?JrSrrF.TrVlm=^]+66*P_RQ!?JrSrrF.TrVlm=^]+66*P^Y7rk<m~>
+rjL_a!48s0!L,><rrJ?=rVln_1&h1RPVN.:!L,><rrJ?=rVln_1&h1RPVN.:!L,<is5<nXPVN.:
+!L,><rrJ?=rVln_1&h1RPVN.:!L,><rrJ?=rVln_1&h1RPVM4urjI=~>
+rjL_a!-#.A!?EoorrF,prVlm=1&h1R*ARNm!?EoorrF,prVlm=1&h1R*ARNm!?EnGs5<nX*ARNm
+!?EoorrF,prVlm=1&h1R*ARNm!?EoorrF,prVlm=1&h1R*AQUSrjI=~>
+rk@:i!9(-]s1eR5s1eO4s1eR5s1eO4s1eR5s1eO4s1eR5s1eO4s1a-bi;Whm*W?!=^E*=R!P]ZR
+rrKkTrr3#6*W?!=*P_UR!?JrRrrF.Trr3!>^Z5@n^46~>
+rjL_a!48s0s"XNQs"XKPs"XNQs"XKPs"XNQs"XKPs"XNQs"XKPs"T*)i;Wg4Pl:U_0pM\;!ATi;
+rrFj=rr3!RPl:U_PVN1;!L,>;rrJ?=rr3"`1#r<5[X\~>
+rjL_a!-#.As"XNQs"XKPs"XNQs"XKPs"XNQs"XKPs"XNQs"XKPs"T*)i;Wg4*W?!=0cg8n!APVn
+rrFhprr3!R*W?!=*ARQn!?EonrrF,prr3!>1#r<5[X\~>
+rk@:i!9(*\!$2%<!$2";!$2(=!$2";!$2%<!$2";!$2%<!$2";!$-Xjh>[HqrVlj<rVlj<r;Qa;
+rVlj<r;Qa;rVlj<rVlj<rVlj<irB"lJ,~>
+rjL_a!48p/!0mH^!0mE]!0mK_!0mE]!0mH^!0mE]!0mH^!0mE]!0i'7h>[J>rVlk^rVlk^r;Qb]
+rVlk^r;Qb]rVlk^rVlk^rVlk^irB"dJ,~>
+rjL_a!-#+@!$2%<!$2";!$2(=!$2";!$2%<!$2";!$2%<!$2";!$-Xjh>[HqrVlj<rVlj<r;Qa;
+rVlj<r;Qa;rVlj<rVlj<rVlj<irB"dJ,~>
+rk@:i!9(*\!$2%<!$2";!$2%<!$2%<!$2%<!$2";!$2%<!$2%<!$-Xjg]%6orVlj<rVlj<r;Qa;
+rVlj<rVlj<rVlj<r;Qa;rr2s=irB"lJ,~>
+rjL_a!48p/!0mH^!0mE]!0mH^!0mH^!0mH^!0mE]!0mH^!0mH^!0i'7g]%8<rVlk^rVlk^r;Qb]
+rVlk^rVlk^rVlk^r;Qb]rr2t_irB"dJ,~>
+rjL_a!-#+@!$2%<!$2";!$2%<!$2%<!$2%<!$2";!$2%<!$2%<!$-Xjg]%6orVlj<rVlj<r;Qa;
+rVlj<rVlj<rVlj<r;Qa;rr2s=irB"dJ,~>
+rk@:i!9('[!$2%<!$2%<!$2%<!$2";!$2(=!$2";!$2%<!$2%<!$-Xjg]%6or;Qa;rVlj<rVlj<
+rVlj<r;Qa;rr2s=r;Qa;rVlj<j8]+mJ,~>
+rjL_a!48m.!0mH^!0mH^!0mH^!0mE]!0mK_!0mE]!0mH^!0mH^!0i'7g]%8<r;Qb]rVlk^rVlk^
+rVlk^r;Qb]rr2t_r;Qb]rVlk^j8]+eJ,~>
+rjL_a!-#(?!$2%<!$2%<!$2%<!$2";!$2(=!$2";!$2%<!$2%<!$-Xjg]%6or;Qa;rVlj<rVlj<
+rVlj<r;Qa;rr2s=r;Qa;rVlj<j8]+eJ,~>
+rk@:i!9('[!$2%<!$2";!$2(=!$2";!$2(=!$2";!$2%<!$2%<!$-XjgA_-nrVlj<rVlj<r;Qa;
+rVlj<rVlj<rVlj<rVlj<rVlj<j8]+mJ,~>
+rjL_a!48m.!0mH^!0mE]!0mK_!0mE]!0mK_!0mE]!0mH^!0mH^!0i'7gA_/;rVlk^rVlk^r;Qb]
+rVlk^rVlk^rVlk^rVlk^rVlk^j8]+eJ,~>
+rjL_a!-#(?!$2%<!$2";!$2(=!$2";!$2(=!$2";!$2%<!$2%<!$-XjgA_-nrVlj<rVlj<r;Qa;
+rVlj<rVlj<rVlj<rVlj<rVlj<j8]+eJ,~>
+rk@:i!9($Z!$2(=!$2";!$2(=!$2";!$2(=!$2";!$2%<!$2%<!$-Xjg&D$mrVlj<rVlj<rVlj<
+rVlj<rVlj<rVlj<rVlj<rVlj<j8]+mJ,~>
+rjL_a!48j-!0mK_!0mE]!0mK_!0mE]!0mK_!0mE]!0mH^!0mH^!0i'7g&D&:rVlk^rVlk^rVlk^
+rVlk^rVlk^rVlk^rVlk^rVlk^j8]+eJ,~>
+rjL_a!-#%>!$2(=!$2";!$2(=!$2";!$2(=!$2";!$2%<!$2%<!$-Xjg&D$mrVlj<rVlj<rVlj<
+rVlj<rVlj<rVlj<rVlj<rVlj<j8]+eJ,~>
+rk@:i!9($Z!$2%<!$2%<!$2%<!$2%<!$2%<!$2(=!$2%<!$2%<!$-XjfDbgkrVlj<rVlj<rVlj<
+rVlj<rVlj<rr2s=r;Qa;rr2s=j8]+mJ,~>
+rjL_a!48j-!0mH^!0mH^!0mH^!0mH^!0mH^!0mK_!0mH^!0mH^!0i'7fDbi8rVlk^rVlk^rVlk^
+rVlk^rVlk^rr2t_r;Qb]rr2t_j8]+eJ,~>
+rjL_a!-#%>!$2%<!$2%<!$2%<!$2%<!$2%<!$2(=!$2%<!$2%<!$-XjfDbgkrVlj<rVlj<rVlj<
+rVlj<rVlj<rr2s=r;Qa;rr2s=j8]+eJ,~>
+rk@:i!9(!Y!$2(=!$2%<!$2%<!$2%<!$2%<!$2(=!$2%<!$2%<!$-Xjf)G^jrVlj<rVlj<rr2s=
+rVlj<rVlj<rr2s=r;Qa;rr2s=j8]+mJ,~>
+rjL_a!48g,!0mK_!0mH^!0mH^!0mH^!0mH^!0mK_!0mH^!0mH^!0i'7f)G`7rVlk^rVlk^rr2t_
+rVlk^rVlk^rr2t_r;Qb]rr2t_j8]+eJ,~>
+rjL_a!-#"=!$2(=!$2%<!$2%<!$2%<!$2%<!$2(=!$2%<!$2%<!$-Xjf)G^jrVlj<rVlj<rr2s=
+rVlj<rVlj<rr2s=r;Qa;rr2s=j8]+eJ,~>
+rk@:i!9(!Y!$2(=!$2";!$2(=!$2%<!$2%<!$2(=!$2%<!$2%<!$-Xjec,Uirr2s=rVlj<rVlj<
+rVlj<rr2s=rVlj<rVlj<rr2s=j8]+mJ,~>
+rjL_a!48g,!0mK_!0mE]!0mK_!0mH^!0mH^!0mK_!0mH^!0mH^!0i'7ec,W6rr2t_rVlk^rVlk^
+rVlk^rr2t_rVlk^rVlk^rr2t_j8]+eJ,~>
+rjL_a!-#"=!$2(=!$2";!$2(=!$2%<!$2%<!$2(=!$2%<!$2%<!$-Xjec,Uirr2s=rVlj<rVlj<
+rVlj<rr2s=rVlj<rVlj<rr2s=j8]+eJ,~>
+rk@:i!9'sX!$2(=!$2%<!$2(=!$2";!$2(=!$2(=!$2%<!$2%<!$-Xjec,UirVlj<rVlj<rr2s=
+rVlj<rVlj<rr2s=rVlj<rVlj<jT#4nJ,~>
+rjL_a!48d+!0mK_!0mH^!0mK_!0mE]!0mK_!0mK_!0mH^!0mH^!0i'7ec,W6rVlk^rVlk^rr2t_
+rVlk^rVlk^rr2t_rVlk^rVlk^jT#4fJ,~>
+rjL_a!-"t<!$2(=!$2%<!$2(=!$2";!$2(=!$2(=!$2%<!$2%<!$-Xjec,UirVlj<rVlj<rr2s=
+rVlj<rVlj<rr2s=rVlj<rVlj<jT#4fJ,~>
+rk@:i!9'sX!$2(=!$2%<!$2%<!$2%<!$2(=!$2(=!$2%<!$2(=!$-Xje,KCgrVlj<rVlj<rr2s=
+rVlj<rr2s=rr2s=r;Qa;rr2s=jT#4nJ,~>
+rjL_a!48d+!0mK_!0mH^!0mH^!0mH^!0mK_!0mK_!0mH^!0mK_!0i'7e,KE4rVlk^rVlk^rr2t_
+rVlk^rr2t_rr2t_r;Qb]rr2t_jT#4fJ,~>
+rjL_a!-"t<!$2(=!$2%<!$2%<!$2%<!$2(=!$2(=!$2%<!$2(=!$-Xje,KCgrVlj<rVlj<rr2s=
+rVlj<rr2s=rr2s=r;Qa;rr2s=jT#4fJ,~>
+rk@:i!9'pW!$2(=!$2%<!$2(=!$2%<!$2(=!$2(=!$2%<!$2(=!$-Xjdf0:frr2s=rVlj<rr2s=
+rVlj<rVlj<rr2s=rVlj<rr2s=jT#4nJ,~>
+rjL_a!48a*!0mK_!0mH^!0mK_!0mH^!0mK_!0mK_!0mH^!0mK_!0i'7df0<3rr2t_rVlk^rr2t_
+rVlk^rVlk^rr2t_rVlk^rr2t_jT#4fJ,~>
+rjL_a!-"q;!$2(=!$2%<!$2(=!$2%<!$2(=!$2(=!$2%<!$2(=!$-Xjdf0:frr2s=rVlj<rr2s=
+rVlj<rVlj<rr2s=rVlj<rr2s=jT#4fJ,~>
+rk@:i!9'pW"WbAXruJlRrrjFXs8O+Srr39F^]4<S^]4<S^]+6:*P_XS*P[1*df0Ik^]4<S^]+6:
+*P_XS*P_UR#p$e\ruJlSruJlRrrjFXs8O+Sjo>=oJ,~>
+rjL_a!48a*"dCbAs-,8;rrnWAs8S<<rr3:h1&q9<1&q9<1&h1VPVN4<PVIahdf0K81&q9<1&h1V
+PVN4<PVN1;$'[1Es-,8<s-,8;rrnWAs8S<<jo>=gJ,~>
+rjL_a!-"q;"W]>truEinrrjDts8O)orr39F1&q7o1&q7o1&h1V*ARTo*AN-Fdf0Ik1&q7o1&h1V
+*ARTo*ARQn#otc#ruEioruEinrrjDts8O)ojo>=gJ,~>
+rk@:i!9'pWs1eU6s1eR5s1eU6s1eR5s1eU6s1eU6s1eR5s1eU6s1a-bdf0Kc*WQ/S*WH'B^E*@S
+^E*=R#p$e\ruJlSruJlRrrjFXs8O+Sjo>=oJ,~>
+rjL_a!48a*s"XQRs"XNQs"XQRs"XNQs"XQRs"XQRs"XNQs"XQRs"T*)df0J*PlLb<PlC[d0pM_<
+0pM\;$'[1Es-,8<s-,8;rrnWAs8S<<jo>=gJ,~>
+rjL_a!-"q;s"XQRs"XNQs"XQRs"XNQs"XQRs"XQRs"XNQs"XQRs"T*)df0J**WQ-o*WH'B0cg;o
+0cg8n#otc#ruEioruEinrrjDts8O)ojo>=gJ,~>
+rk@:i!9'mV!$2(=!$2%<"!.FA*W?!<*WH'=*WH'=*W?!<*WH'=*J+7:rrX;AruM(<!$2(=!$2%<
+!$2(=!$2(=!$2(=!$2(=!$1/#rk<m~>
+rjL_a!48^)!0mK_!0mH^"-iicPl:U^PlC[_PlC[_Pl:U^PlC[_P_&k\rr\Mcs-3K^!0mK_!0mH^
+!0mK_!0mK_!0mK_!0mK_!0lRErjI=~>
+rjL_a!-"n:!$2(=!$2%<"!.FA*W?!<*WH'=*WH'=*W?!<*WH'=*J+7:rrX;AruM(<!$2(=!$2%<
+!$2(=!$2(=!$2(=!$2(=!$1/#rjI=~>
+rk@:i!9'mV!$2(=!$2%<!$2(=!$2(=!$2(=!$2(=!$2%<!$2(=!$-Xjci3tcrr2s=rVlj<rr2s=
+rr2s=rr2s=rr2s=rVlj<rr2s=jo>=oJ,~>
+rjL_a!48^)!0mK_!0mH^!0mK_!0mK_!0mK_!0mK_!0mH^!0mK_!0i'7ci4!0rr2t_rVlk^rr2t_
+rr2t_rr2t_rr2t_rVlk^rr2t_jo>=gJ,~>
+rjL_a!-"n:!$2(=!$2%<!$2(=!$2(=!$2(=!$2(=!$2%<!$2(=!$-Xjci3tcrr2s=rVlj<rr2s=
+rr2s=rr2s=rr2s=rVlj<rr2s=jo>=gJ,~>
+rk@:i!9'jU!$2(=!$2(=!$2(=!$2%<"!.FA*WH'=*W?!?*WQ-[JcF!p!$2(=!$2(=!$2(=!$2%<
+!$2(="!.FA*W?!<*WH'=*Td>#^46~>
+rjL_a!48[(!0mK_!0mK_!0mK_!0mH^"-iicPlC[_Pl:UaPlLcJJcF!p!0mK_!0mK_!0mK_!0mH^
+!0mK_"-iicPl:U^PlC[_Pi_rE[X\~>
+rjL_a!-"k9!$2(=!$2(=!$2(=!$2%<"!.FA*WH'=*W?!?*WQ-[JcF!p!$2(=!$2(=!$2(=!$2%<
+!$2(="!.FA*W?!<*WH'=*Td>#[X\~>
+rk@:i!9'jU!$2(=!$2(=!$2(=!$2%<"!.FA*WH'=*W?!?*WQ-[JcEso!$2(=!$2(=!$2(=!$2(=
+!$2(=!$2(=!$2(=!$2(=!$12$rk<m~>
+rjL_a!48[(!0mK_!0mK_!0mK_!0mH^"-iicPlC[_Pl:UaPlLcJJcEso!0mK_!0mK_!0mK_!0mK_
+!0mK_!0mK_!0mK_!0mK_!0lUFrjI=~>
+rjL_a!-"k9!$2(=!$2(=!$2(=!$2%<"!.FA*WH'=*W?!?*WQ-[JcEso!$2(=!$2(=!$2(=!$2(=
+!$2(=!$2(=!$2(=!$2(=!$12$rjI=~>
+rk@:i!9'gT!$2(=!$2(="!.FA*W?!?*WQ-[rr2s=rVls?s8O*js3(EE*WQ-[rr2s=rr2s=rVlj<
+rr3'@s8O,=rr=)=rr=)$s8K`_~>
+rjL_a!48X'!0mK_!0mK_"-iicPl:UaPlLcJrr2t_rVltas8S=7s3(EEPlLcJrr2t_rr2t_rVlk^
+rr3(bs8S>_rrA;_rrA;Fs8KHW~>
+rjL_a!-"h8!$2(=!$2(="!.FA*W?!?*WQ-[rr2s=rVls?s8O*js3(EE*WQ-[rr2s=rr2s=rVlj<
+rr3'@s8O,=rr=)=rr=)$s8KHW~>
+rk@:i!9'gT!$2(=!$2(=!$2(=!$2(=!$2(="!.FA*WH'=*WH'=*J+75rrX;AruM+=!$2(=!$2(=
+!$2(=!$2(=!$2(=!$2(=!$15%rk<m~>
+rjL_a!48X'!0mK_!0mK_!0mK_!0mK_!0mK_"-iicPlC[_PlC[_P_&kWrr\Mcs-3N_!0mK_!0mK_
+!0mK_!0mK_!0mK_!0mK_!0lXGrjI=~>
+rjL_a!-"h8!$2(=!$2(=!$2(=!$2(=!$2(="!.FA*WH'=*WH'=*J+75rrX;AruM+=!$2(=!$2(=
+!$2(=!$2(=!$2(=!$2(=!$15%rjI=~>
+rk@:i!9'gT!$2(=!$2(=!$2(=!$2(=!$2(="!.FA*WH'=*WH'=*J+75rr=)=rr=)=rr=)=rrX;A
+ruM+=!$2(=!$2(=!$2(=!$15%rk<m~>
+rjL_a!48X'!0mK_!0mK_!0mK_!0mK_!0mK_"-iicPlC[_PlC[_P_&kWrrA;_rrA;_rrA;_rr\Mc
+s-3N_!0mK_!0mK_!0mK_!0lXGrjI=~>
+rjL_a!-"h8!$2(=!$2(=!$2(=!$2(=!$2(="!.FA*WH'=*WH'=*J+75rr=)=rr=)=rr=)=rrX;A
+ruM+=!$2(=!$2(=!$2(=!$15%rjI=~>
+rk@:i!9'dS!$2(=!$2(="!.FA*WH'=*WH'@*WQ-[rr2s=rr2s=JcEjl"!.FA*WH'=*WH'=*WH'=
+*WH'@*WQ-[rr2s=rr2s=k5YFpJ,~>
+rjL_a!48U&!0mK_!0mK_"-iicPlC[_PlC[bPlLcJrr2t_rr2t_JcEjl"-iicPlC[_PlC[_PlC[_
+PlC[bPlLcJrr2t_rr2t_k5YFhJ,~>
+rjL_a!-"e7!$2(=!$2(="!.FA*WH'=*WH'@*WQ-[rr2s=rr2s=JcEjl"!.FA*WH'=*WH'=*WH'=
+*WH'@*WQ-[rr2s=rr2s=k5YFhJ,~>
+rk@:i!9'dS!$2(=!$2(="!.FA*WH'=*WH'@*WQ-[rr2s=rr2s=JcEgk"!.FA*WH'=*WH'@*WQ-[
+rr2s=rr3'@s8O,=rr=)%s8K`_~>
+rjL_a!48U&!0mK_!0mK_"-iicPlC[_PlC[bPlLcJrr2t_rr2t_JcEgk"-iicPlC[_PlC[bPlLcJ
+rr2t_rr3(bs8S>_rrA;Gs8KHW~>
+rjL_a!-"e7!$2(=!$2(="!.FA*WH'=*WH'@*WQ-[rr2s=rr2s=JcEgk"!.FA*WH'=*WH'@*WQ-[
+rr2s=rr3'@s8O,=rr=)%s8KHW~>
+rk@:i!9'aR!$2(="s*aD*WQ-[rVm'Bs8O,>ruM+="!.FA*J+71rrsMDruM.>*WH'=*WH'=*WH'C
+*WQ-[s8O,=rr=)%s8K`_~>
+rjL_a!48R%!0mK_#*f/fPlLcJrVm(ds8S>`s-3N_"-iicP_&kSrs"_fs-3Q`PlC[_PlC[_PlC[e
+PlLcJs8S>_rrA;Gs8KHW~>
+rjL_a!-"b6!$2(="s*aD*WQ-[rVm'Bs8O,>ruM+="!.FA*J+71rrsMDruM.>*WH'=*WH'=*WH'C
+*WQ-[s8O,=rr=)%s8KHW~>
+rk@:i!9'aR!$2(="!.FA*WH'=*WH'C*WQ-[s8O,=rrX;AruH[j`r?#Zrr3'@s8O,=rrX;AruM+=
+"!.FA*WH'=*WH'=*U!J%^46~>
+rjL_a!48R%!0mK_"-iicPlC[_PlC[ePlLcJs8S>_rr\Mcs-/*7`r?%'rr3(bs8S>_rr\Mcs-3N_
+"-iicPlC[_PlC[_Pir)G[X\~>
+rjL_a!-"b6!$2(="!.FA*WH'=*WH'C*WQ-[s8O,=rrX;AruH[j`r?#Zrr3'@s8O,=rrX;AruM+=
+"!.FA*WH'=*WH'=*U!J%[X\~>
+rk@:i!9'^Q!$2(="s*aD*WQ-[rr30Cs8O,>ruM+="!.FA*J+70rrsMDruM.>*WH'=*WH'=*WH'C
+*WQ-[s8O,=rr=)&s8K`_~>
+rjL_a!48O$!0mK_#*f/fPlLcJrr31es8S>`s-3N_"-iicP_&kRrs"_fs-3Q`PlC[_PlC[_PlC[e
+PlLcJs8S>_rrA;Hs8KHW~>
+rjL_a!-"_5!$2(="s*aD*WQ-[rr30Cs8O,>ruM+="!.FA*J+70rrsMDruM.>*WH'=*WH'=*WH'C
+*WQ-[s8O,=rr=)&s8KHW~>
+rk@:i!9'^Q*$)foruJlS*P_Up^]4<S^],=hruJlSruJlS*P[1*`W$nu^],=hruJlSruJlS*P_XS
+*P_Up^],=hs8O+Skl:XrJ,~>
+rjL_a!48O$*0`2Xs-,8<PVN3&1&q9<1&mIms-,8<s-,8<PVIah`W$pB1&mIms-,8<s-,8<PVN4<
+PVN3&1&mIms8S<<kl:XjJ,~>
+rjL_a!-"_5*$$d6ruEio*ARR71&q7o1&i7KruEioruEio*AN-F`W$nu1&i7KruEioruEio*ARTo
+*ARR71&i7Ks8O)okl:XjJ,~>
+rk@:i!9'^Qs1eU6s1]?L^VBf`^]4>K^]2'`s1c>Ks1c>K^V>@"`W$pm*WNkps1]TSs1]TS^E*@S
+*P_Up^],=hs8O+Skl:XrJ,~>
+rjL_a!48O$s"XQRs"P;h0er\_1&q8.1&is_s"Q8.s"Q8.0en7Z`W$o4PlEJ&s"Tc<s"Tc<0pM_<
+PVN3&1&mIms8S<<kl:XjJ,~>
+rjL_a!-"_5s"XQRs"P;h0er\_1&q8.1&is_s"Q8.s"Q8.0en7Z`W$o4*WIi7s"PPos"PPo0cg;o
+*ARR71&i7Ks8O)okl:XjJ,~>
+rk@:i!9'[P!$2(="WdXC*WI/ZrrsMDruM.>*WH'@*WQ-[JcEUe"WdU`s8O,=rrX;AruM+=#p''G
+*WQ-[s8O,&s8K`_~>
+rjL_a!48L#!0mK_"dK&ePlI!Irs"_fs-3Q`PlC[bPlLcJJcEUe"dK%Os8S>_rr\Mcs-3N_$'bJi
+PlLcJs8S>Hs8KHW~>
+rjL_a!-"\4!$2(="WdXC*WI/ZrrsMDruM.>*WH'@*WQ-[JcEUe"WdU`s8O,=rrX;AruM+=#p''G
+*WQ-[s8O,&s8KHW~>
+rk@:i!9'XO&fq#P*WQ-[s8O,>ruM.>*WQ-[rr3'@s8O*js2+d?*WQ-[s8O,=rsp.MruM.>*WQ-[
+s8O,>ruL;&rk<m~>
+rjL_a!48I"&sWFrPlLcJs8S>`s-3Q`PlLcJrr3(bs8S=7s2+d?PlLcJs8S>_rst@os-3Q`PlLcJ
+s8S>`s-2^HrjI=~>
+rjL_a!-"Y3&fq#P*WQ-[s8O,>ruM.>*WQ-[rr3'@s8O*js2+d?*WQ-[s8O,=rsp.MruM.>*WQ-[
+s8O,>ruL;&rjI=~>
+rk@:i!9'XO#p''G*WQ-[s8O,=rsKkI*WQ-[s8O,>ruH[j_#G,is8O,>ruM.>*WQ-[s8O,>ruM.>
+*WH'=*U*P&^46~>
+rjL_a!48I"$'bJiPlLcJs8S>_rsP(kPlLcJs8S>`s-/*7_#G.6s8S>`s-3Q`PlLcJs8S>`s-3Q`
+PlC[_Pj&/H[X\~>
+rjL_a!-"Y3#p''G*WQ-[s8O,=rsKkI*WQ-[s8O,>ruH[j_#G,is8O,>ruM.>*WQ-[s8O,>ruM.>
+*WH'=*U*P&[X\~>
+rk@:i!9'UN#T`sF*WI/[ruM+=$Q]6fs8O,>ruM.>*J+7*rrjGCruM+[rr3?Hs8O,>ruM+[s8O,=
+rr=)'s8K`_~>
+rjL_a!48F!#aGAhPlI!Js-3N_$^C[Us8S>`s-3Q`P_&kLrrnYes-3PJrr3@js8S>`s-3PJs8S>_
+rrA;Is8KHW~>
+rjL_a!-"V2#T`sF*WI/[ruM+=$Q]6fs8O,>ruM.>*J+7*rrjGCruM+[rr3?Hs8O,>ruM+[s8O,=
+rr=)'s8KHW~>
+rk@:i!9'UN#T`sF*WQ-[ruM+=$Q]6fs8O,>ruM.>*J+7)rtc^U*WQ-[s8O,>ruM.>*WQ-[s8O,>
+ruL>'rk<m~>
+rjL_a!48F!#aGAhPlLcJs-3N_$^C[Us8S>`s-3Q`P_&kKrtgq"PlLcJs8S>`s-3Q`PlLcJs8S>`
+s-2aIrjI=~>
+rjL_a!-"V2#T`sF*WQ-[ruM+=$Q]6fs8O,>ruM.>*J+7)rtc^U*WQ-[s8O,>ruM.>*WQ-[s8O,>
+ruL>'rjI=~>
+rk@:i!9'RM(*3GT*WI/[ruM.>*WQ-[ruM.>*WQ-[JcEF`(*3Dqs8O,>ruM.>*WQ-[ruM.>*WQ-[
+kl:XrJ,~>
+rjL_a!48Bu(6nk!PlI!Js-3Q`PlLcJs-3Q`PlLcJJcEF`(6ni`s8S>`s-3Q`PlLcJs-3Q`PlLcJ
+kl:XjJ,~>
+rjL_a!-"S1(*3GT*WI/[ruM.>*WQ-[ruM.>*WQ-[JcEF`(*3Dqs8O,>ruM.>*WQ-[ruM.>*WQ-[
+kl:XjJ,~>
+rk@:i!9'RM(*3GT*WI/[ruM.>*WQ-[ruM.>*WQ-[JcEF`"WdXC*WI/Zrs^"K*WQ-[ruM.>*WQ-[
+kl:XrJ,~>
+rjL_a!48Bu(6nk!PlI!Js-3Q`PlLcJs-3Q`PlLcJJcEF`"dK&ePlI!Irsb4mPlLcJs-3Q`PlLcJ
+kl:XjJ,~>
+rjL_a!-"S1(*3GT*WI/[ruM.>*WQ-[ruM.>*WQ-[JcEF`"WdXC*WI/Zrs^"K*WQ-[ruM.>*WQ-[
+kl:XjJ,~>
+rk@:i!9'OL'cm;ps8O,>*WQ-[s8O,>*WQ-[s8O*js1J@H*WI/[ruM.>*WQ-[ruM.>*WQ-[ruL>'
+rk<m~>
+rjL_a!48?t'pS`_s8S>`PlLcJs8S>`PlLcJs8S=7s1J@HPlI!Js-3Q`PlLcJs-3Q`PlLcJs-2aI
+rjI=~>
+rjL_a!-"P0'cm;ps8O,>*WQ-[s8O,>*WQ-[s8O*js1J@H*WI/[ruM.>*WQ-[ruM.>*WQ-[ruL>'
+rjI=~>
+rk@:i!9'OL'cm>S*WI/[*WQ-[s8O,>*WQ-[s8O*js1A:6*WI/[*WH'I*WI/[ruM+[s8O,>*U*P&
+^46~>
+rjL_a!48?t'pSauPlI!JPlLcJs8S>`PlLcJs8S=7s1A:6PlI!JPlC[kPlI!Js-3PJs8S>`Pj&/H
+[X\~>
+rjL_a!-"P0'cm>S*WI/[*WQ-[s8O,>*WQ-[s8O*js1A:6*WI/[*WH'I*WI/[ruM+[s8O,>*U*P&
+[X\~>
+rk@:i!9'LK"s*^aruM+[rr39FruM+[ruM.>*J+7$rtHLR*WI/[ruM.>*WI/[*WQ-[s8O,(s8K`_~>
+rjL_a!48<s#*f.Ps-3PJrr3:hs-3PJs-3Q`P_&kFrtL^tPlI!Js-3Q`PlI!JPlLcJs8S>Js8KHW~>
+rjL_a!-"M/"s*^aruM+[rr39FruM+[ruM.>*J+7$rtHLR*WI/[ruM.>*WI/[*WQ-[s8O,(s8KHW~>
+rk@:i!9'LK'-7)nruM.>*WQ-[ruM+[ruM.>*J+7$rtHLRruM+[s8O,>*WI/[*WQ-[s8O,(s8K`_~>
+rjL_a!48<s'9rN]s-3Q`PlLcJs-3PJs-3Q`P_&kFrtL^ts-3PJs8S>`PlI!JPlLcJs8S>Js8KHW~>
+rjL_a!-"M/'-7)nruM.>*WQ-[ruM+[ruM.>*J+7$rtHLRruM+[s8O,>*WI/[*WQ-[s8O,(s8KHW~>
+rk@:i!9'IJ&fpumruM+[s8O,>*WI/[*WQ-[JcE7['-7)nruM.>*WQ-[ruM+[s8O,>*U3V'^46~>
+rjL_a!489r&sWE\s-3PJs8S>`PlI!JPlLcJJcE7['9rN]s-3Q`PlLcJs-3PJs8S>`Pj/5I[X\~>
+rjL_a!-"J.&fpumruM+[s8O,>*WI/[*WQ-[JcE7['-7)nruM.>*WQ-[ruM+[s8O,>*U3V'[X\~>
+rk@:i!9'IJ'-4h.^E('0^],=h*PWW0*P_Up^OcEprt?Ef*PWW0ruJip^E('0^],=h*P^n>rk<m~>
+rjL_a!489r'9k590pFDW1&mImPVJCWPVN3&0nKA7rtCVOPVJCWs-,7&0pFDW1&mImPVMJ'rjI=~>
+rjL_a!-"J.'-/eJ0c_th1&i7K*AJQh*ARR70nKA7rt?D-*AJQhruEg70c_th1&i7K*AQjZrjI=~>
+rk@:i!9'IJq7cq0q7d"2^V>@"\Gm5W*PWW0*WNkp^E"?0*P_Up^E()Ss8K`_~>
+rjL_a!489rq(VmLq(VsN0en7Z\Gm3sPVJCWPlEJ&0pInWPVN3&0pFEXs8KHW~>
+rjL_a!-"J.q(VmLq(VsN0en7Z\Gm3s*AJQh*WIi70c_8h*ARR70c`"6s8KHW~>
+rk@:i!9'FI&KUllruM+[ruM+[ruM+[s8O*js0_k<*WI-#s8O,>*WI/[*WI/[*U3V'^46~>
+rjL_a!486q&X<<[s-3PJs-3PJs-3PJs8S=7s0_k<PlHu4s8S>`PlI!JPlI!JPj/5I[X\~>
+rjL_a!-"G-&KUllruM+[ruM+[ruM+[s8O*js0_k<*WI-#s8O,>*WI/[*WI/[*U3V'[X\~>
+rk@:i!9'FI&0:ckruM+[ruM+[ruM+[ruH[jZiC%G%K@IKruM+[*WI/[ruE-Es8K`_~>
+rjL_a!486q&=!3Zs-3PJs-3PJs-3PJs-/*7ZiC&i%KD[ms-3PJPlI!Js-/c4s8KHW~>
+rjL_a!-"G-&0:ckruM+[ruM+[ruM+[ruH[jZiC%G%K@IKruM+[*WI/[ruE-Es8KHW~>
+rk@:i!9'CH%itZjruE-[ruE-[*WI/[*J+6srt$4N*WI/[*WI/[*WI/[*WI/Fs8K`_~>
+rjL_a!483p&![*Ys-/cJs-/cJPlI!JP_&k@rt(FpPlI!JPlI!JPlI!JPlI!5s8KHW~>
+rjL_a!-"D,%itZjruE-[ruE-[*WI/[*J+6srt$4N*WI/[*WI/[*WI/[*WI/Fs8KHW~>
+rk@:i!9'CH%itZjruM+[ruE-[*WI/[*J+6rrsp.M*?G1[*WI-#ruM+[ruLD)rk<m~>
+rjL_a!483p&![*Ys-3PJs-/cJPlI!JP_&k?rst@oPa)4JPlHu4s-3PJs-2gKrjI=~>
+rjL_a!-"D,%itZjruM+[ruE-[*WI/[*J+6rrsp.M*?G1[*WI-#ruM+[ruLD)rjI=~>
+rk@:i!9'@GruDOJ*WI/[*?G/#ruM+[JcE"T%NYQi*WI/[*WI-#ruM+[lMpjtJ,~>
+rjL_a!480os-*rlPlI!JPa)34s-3PJJcE"T%[@!XPlI!JPlHu4s-3PJlMpjlJ,~>
+rjL_a!-"A+ruDOJ*WI/[*?G/#ruM+[JcE"T%NYQi*WI/[*WI-#ruM+[lMpjlJ,~>
+rk@:i!9'@G#T`pcruE-[*WQ*Z!WO0ks0)J&*=MlfruM+[*WI/[*?FGFrk<m~>
+rjL_a!480o#aG@Rs-/cJPlL`I!WSC8s0)J&PRIMUs-3PJPlI!JPa(J5rjI=~>
+rjL_a!-"A+#T`pcruE-[*WQ*Z!WO0ks0)J&*=MlfruM+[*WI/[*?FGFrjI=~>
+rk@:i!9'=FruD:C*?G/#s8F#>ruH[jY5eMB$ND+eruM+[*WI-#lMpjtJ,~>
+rjL_a!48-ns-*]ePa)34s8J5`s-/*7Y5eNd$NH?Ts-3PJPlHu4lMpjlJ,~>
+rjL_a!-">*ruD:C*?G/#s8F#>ruH[jY5eMB$ND+eruM+[*WI-#lMpjlJ,~>
+rk@:i!9'=FruD:C*WI-#s8F#>ruH[jXoJA@!rj;@rZ)(?*?FGFrk<m~>
+rjL_a!48-ns-*]ePlHu4s8J5`s-/*7XoJBb!rnMbrfdKaPa(J5rjI=~>
+rjL_a!-">*ruD:C*WI-#s8F#>ruH[jXoJA@!rj;@rZ)(?*?FGFrjI=~>
+rk@:i!9':EruD4A*?G1Y*<H0\JcDkP!?M4>*<Q6]s8F#>ruLG*rk<m~>
+rjL_a!48*ms-*WcPa)4HPQCfKJcDkP!L3W`PQLlLs8J5`s-2jLrjI=~>
+rjL_a!-";)ruD4A*?G1Y*<H0\JcDkP!?M4>*<Q6]s8F#>ruLG*rjI=~>
+rk@:i!9':EruD4A*?G1X*J+6ks8O)AruE-[rZ)(?*?FJGrk<m~>
+rjL_a!48*ms-*WcPa)4GP_&k8s8S;cs-/cJrfdKaPa(M6rjI=~>
+rjL_a!-";)ruD4A*?G1X*J+6ks8O)AruE-[rZ)(?*?FJGrjI=~>
+rk@:i!9'7DruD+>qAk.eWrN#<!rj;@r>k5(rk<m~>
+rjL_a!48'ls-*N`qNQR2WrN$^!rnMbrKQXJrjI=~>
+rjL_a!-"8(ruD+>qAk.eWrN#<!rj;@r>k5(rjI=~>
+rk@:i!9'7DruD*SqAfRNJcDbMr>bmQr#GdPm/R(!J,~>
+rjL_a!48'ls-*L<qNLt7JcDbMrKI::r0.19m/R'nJ,~>
+rjL_a!-"8(ruD(oqAfPjJcDbMr>bkmr#Gblm/R'nJ,~>
+rk@:i!9'7Dp:l1YWrN%4q],[Om/R(!J,~>
+rjL_a!48'lp+_-uWrN#Pqih(8m/R'nJ,~>
+rjL_a!-"8(p+_-uWrN#Pq],Ykm/R'nJ,~>
+rk@:i!9'4CruD+>q]17fW;lf:!<<!<li6suJ,~>
+rjL_a!48$ks-*N`qil[3W;lg\!<<"^li6smJ,~>
+rjL_a!-"5'ruD+>q]17fW;lf:!<<!<li6smJ,~>
+rk@:i!9'4CruD+>q]17fVuQQ5li6suJ,~>
+rjL_a!48$ks-*N`qil[3VuQRWli6smJ,~>
+rjL_a!-"5'ruD+>q]17fVuQQ5li6smJ,~>
+rk@:i!9'1BqAk.eV>pN8!<<!<m/R(!J,~>
+rjL_a!48!jqNQR2V>pOZ!<<"^m/R'nJ,~>
+rjL_a!-"2&qAk.eV>pN8!<<!<m/R'nJ,~>
+rk@:i!9'1BqAk.eV#U93m/R(!J,~>
+rjL_a!48!jqNQR2V#U:Um/R'nJ,~>
+rjL_a!-"2&qAk.eV#U93m/R'nJ,~>
+rk@:i!9'.A!?M4=*J+6ds8!c&s8K`_~>
+rjL_a!47si!L3W_P_&k1s8%uHs8KHW~>
+rjL_a!-"/%!?M4=*J+6ds8!c&s8KHW~>
+rk@:i!9'.Aq]17fU]:33m/R(!J,~>
+rjL_a!47siqil[3U]:4Um/R'nJ,~>
+rjL_a!-"/%q]17fU]:33m/R'nJ,~>
+rk@:i!9'+@r#L@gUAt-3m/R(!J,~>
+rjL_a!47phr02d4UAt.Um/R'nJ,~>
+rjL_a!-",$r#L@gUAt-3m/R'nJ,~>
+rk@:i!9'+@r#L@gU&Y'3m/R(!J,~>
+rjL_a!47phr02d4U&Y(Um/R'nJ,~>
+rjL_a!-",$r#L@gU&Y'3m/R'nJ,~>
+rk@:i!9'(?r>gIhU&Y'3m/R(!J,~>
+rjL_a!47mgrKMm5U&Y(Um/R'nJ,~>
+rjL_a!-")#r>gIhU&Y'3m/R'nJ,~>
+rk@:i!9'(?r>gIhT`>!3m/R(!J,~>
+rjL_a!47mgrKMm5T`>"Um/R'nJ,~>
+rjL_a!-")#r>gIhT`>!3m/R'nJ,~>
+rk@:i!9'%>ruH[jT)\d1mJm1"J,~>
+rjL_a!47jfs-/*7T)\eSmJm0oJ,~>
+rjL_a!-"&"ruH[jT)\d1mJm0oJ,~>
+rk@:i!9'%>ruH[jScA^1mJm1"J,~>
+rjL_a!47jfs-/*7ScA_SmJm0oJ,~>
+rjL_a!-"&"ruH[jScA^1mJm0oJ,~>
+rk@:i!9'"=!$-XjScA^1mJm1"J,~>
+rjL_a!47ge!0i'7ScA_SmJm0oJ,~>
+rjL_a!-"#!!$-XjScA^1mJm0oJ,~>
+rk@:i!9'"=!?Jq+s.02i^[D.$^46~>
+rjL_a!47ge!L,<is.02i1%,)@[X\~>
+rjL_a!-"#!!?EnGs.02i1%,)@[X\~>
+rk@:i!9'"=s1a-bScA`)mf3:#J,~>
+rjL_a!47ges"T*)ScA^Emf39pJ,~>
+rjL_a!-"#!s"T*)ScA^Emf39pJ,~>
+rk@:i!9&M/JcCu7rk<m~>
+rjL_a!47=WJcCu7rjI=~>
+rjL_a!-!MhJcCu7rjI=~>
+rk@:i!9&M/JcCu7rk<m~>
+rjL_a!47=WJcCu7rjI=~>
+rjL_a!-!MhJcCu7rjI=~>
+rk@:i!9&M/JcCu7rk<m~>
+rjL_a!47=WJcCu7rjI=~>
+rjL_a!-!MhJcCu7rjI=~>
+rk@:i!9&M/JcCu7rk<m~>
+rjL_a!47=WJcCu7rjI=~>
+rjL_a!-!MhJcCu7rjI=~>
+rk@:i!9&M/JcCu7rk<m~>
+rjL_a!47=WJcCu7rjI=~>
+rjL_a!-!MhJcCu7rjI=~>
+rk@:i!9&M/JcCu7rk<m~>
+rjL_a!47=WJcCu7rjI=~>
+rjL_a!-!MhJcCu7rjI=~>
+rk@:i!9&M/JcCu7rk<m~>
+rjL_a!47=WJcCu7rjI=~>
+rjL_a!-!MhJcCu7rjI=~>
+J\H]LJ\LHaJ,~>
+J[U-<J[XmQJ,~>
+J[U-<J[XmQJ,~>
+J\H]LJ\LHaJ,~>
+J[U-<J[XmQJ,~>
+J[U-<J[XmQJ,~>
+J\H]LJ\LHaJ,~>
+J[U-<J[XmQJ,~>
+J[U-<J[XmQJ,~>
+%%EndData
+showpage
+%%Trailer
+end
+%%EOF
diff --git a/changelog b/changelog
index a57f6df..7e8e2d2 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,6 @@
+20090416 tpd src/axiom-website/patches.html 20090416.03.tpd.patch
+20090416 tpd books/bookvol10.4 update bezier documentation
+20090416 tpd books/ps/v104beziermove.eps graph the bezier curves
 20090416 tpd src/axiom-website/patches.html 20090416.02.tpd.patch
 20090416 tpd src/interp/vmlisp.lisp move more interpreter code
 20090416 tpd src/interp/spaderror.lisp move more interpreter code
diff --git a/src/axiom-website/patches.html b/src/axiom-website/patches.html
index 6f83681..758d24e 100644
--- a/src/axiom-website/patches.html
+++ b/src/axiom-website/patches.html
@@ -1092,5 +1092,7 @@ bookvol5 add \defunsec, section titles, docstrings<br/>
 regress.lisp tighten checks on regression tests<br/>
 <a href="patches/20090416.02.tpd.patch">20090416.02.tpd.patch</a>
 bookvol5 move more interpreter code<br/>
+<a href="patches/20090416.03.tpd.patch">20090416.03.tpd.patch</a>
+bookvol10.4 update bezier documentation<br/>
  </body>
 </html>

\start
Date: Fri, 17 Apr 2009 06:42:57 -0500
From: Tim Daly
To: list
Subject: 20090417.01.tpd.patch (bookvol10.4, 10.2 document binomial)

The binomial function was documented in 1 category and 2 domains.

Help and regression files, and binomial examples were added for 
IntegerCombinatoricFunctions

Help and regression files, and binomial examples were added for 
CombinatorialFunctionCategory as well as additional code cleanup.

=====================================================================
diff --git a/books/bookvol10.2.pamphlet b/books/bookvol10.2.pamphlet
index 88c7428..24ea0fe 100644
--- a/books/bookvol10.2.pamphlet
+++ b/books/bookvol10.2.pamphlet
@@ -872,6 +872,8 @@ CombinatorialFunctionCategory(): Category == with
       ++ binomial(n,r) returns the \spad{(n,r)} binomial coefficient
       ++ (often denoted in the literature by \spad{C(n,r)}).
       ++ Note: \spad{C(n,r) = n!/(r!(n-r)!)} where \spad{n >= r >= 0}.
+      ++
+      ++X [binomial(5,i) for i in 0..5]
     factorial  : $ -> $
       ++ factorial(n) computes the factorial of n
       ++ (denoted in the literature by \spad{n!})
diff --git a/books/bookvol10.4.pamphlet b/books/bookvol10.4.pamphlet
index b603e5b..4537e98 100644
--- a/books/bookvol10.4.pamphlet
+++ b/books/bookvol10.4.pamphlet
@@ -6326,6 +6326,145 @@ CoerceVectorMatrixPackage(R : CommutativeRing): public == private where
 @
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 \section{package COMBF CombinatorialFunction}
+<<CombinatorialFunction.input>>=
+)set break resume
+)sys rm -f CombinatorialFunction.output
+)spool CombinatorialFunction.output
+)set message test on
+)set message auto off
+)clear all
+--S 1 of 6
+f := operator 'f
+--R 
+--R
+--R   (1)  f
+--R                                                          Type: BasicOperator
+--E 1
+
+--S 2 of 6
+D(product(f(i,x),i=1..m),x)
+--R 
+--R
+--R          m           m    f  (i,x)
+--R        ++-++        --+    ,2
+--R   (2)   | |   f(i,x)>     --------
+--R         | |         --+    f(i,x)
+--R        i= 1         i= 1
+--R                                                     Type: Expression Integer
+--E 2
+
+--S 3 of 6
+)set expose add constructor OutputForm
+--R 
+--I   OutputForm is already explicitly exposed in frame frame0 
+--E 3
+
+--S 4 of 6
+pascalRow(n) == [right(binomial(n,i),4) for i in 0..n]
+--R 
+--R                                                                   Type: Void
+--E 4
+
+--S 5 of 6
+displayRow(n)==output center blankSeparate pascalRow(n)
+--R 
+--R                                                                   Type: Void
+--E 5
+
+--S 6 of 6
+for i in 0..7 repeat displayRow i
+--R 
+--R   Compiling function pascalRow with type NonNegativeInteger -> List 
+--R      OutputForm 
+--R   Compiling function displayRow with type NonNegativeInteger -> Void 
+--R                                     1
+--R                                  1    1
+--R                                1    2    1
+--R                             1    3    3    1
+--R                           1    4    6    4    1
+--R                        1    5   10   10    5    1
+--R                      1    6   15   20   15    6    1
+--R                   1    7   21   35   35   21    7    1
+--R                                                                   Type: Void
+--E 6
+
+
+)spool
+)lisp (bye)
+@
+<<CombinatorialFunction.help>>=
+====================================================================
+CombinatorialFunction examples
+====================================================================
+
+f := operator 'f
+ 
+
+   (1)  f
+                                                          Type: BasicOperator
+
+D(product(f(i,x),i=1..m),x)
+ 
+
+          m           m    f  (i,x)
+        ++-++        --+    ,2
+   (2)   | |   f(i,x)>     --------
+         | |         --+    f(i,x)
+        i= 1         i= 1
+                                                     Type: Expression Integer
+
+
+The binomial(n, r) returns the number of subsets of r objects
+taken among n objects, i.e. n!/(r! * (n-r)!)
+
+The binomial coefficients are the coefficients of the series expansion
+of a power of a binomial, that is
+
+    n
+   --+    / n \   k             n
+   >     |     | x    =  (1 + x)
+   --+    \ k /
+   k= 0
+
+This leads to the famous pascal triangle. First we expose the OutputForm
+domain, which is normally hidden, so we can use it to format the lines.
+
+  )set expose add constructor OutputForm
+
+Next we define a function that will output the list of binomial coefficients
+right justified with proper spacing:
+
+  pascalRow(n) == [right(binomial(n,i),4) for i in 0..n]
+
+and now we format the whole line so that it looks centered:
+
+  displayRow(n)==output center blankSeparate pascalRow(n)
+
+and we compute the triangle
+
+  for i in 0..7 repeat displayRow i
+
+giving the pretty result:
+ 
+   Compiling function pascalRow with type NonNegativeInteger -> List 
+      OutputForm 
+   Compiling function displayRow with type NonNegativeInteger -> Void 
+                                     1
+                                  1    1
+                                1    2    1
+                             1    3    3    1
+                           1    4    6    4    1
+                        1    5   10   10    5    1
+                      1    6   15   20   15    6    1
+                   1    7   21   35   35   21    7    1
+
+See Also:
+o )show CombinatorialFunction
+o )d op binomial
+o )show OutputForm
+o )help set
+
+@
 \pagehead{CombinatorialFunction}{COMBF}
 \pagepic{ps/v104combinatorialfunction.ps}{COMBF}{1.00}
 
@@ -6351,52 +6490,11 @@ CoerceVectorMatrixPackage(R : CommutativeRing): public == private where
 \cross{COMBF}{?**?} &&
 \end{tabular}
 
-<<package COMBF CombinatorialFunction>>=
-)abbrev package COMBF CombinatorialFunction
-++ Provides the usual combinatorial functions
-++ Author: Manuel Bronstein, Martin Rubey
-++ Date Created: 2 Aug 1988
-++ Date Last Updated: 30 October 2005
-++ Description:
-++   Provides combinatorial functions over an integral domain.
-++ Keywords: combinatorial, function, factorial.
-++ Examples:  )r COMBF INPUT
-
-CombinatorialFunction(R, F): Exports == Implementation where
-  R: Join(OrderedSet, IntegralDomain)
-  F: FunctionSpace R
-
-  OP  ==> BasicOperator
-  K   ==> Kernel F
-  SE  ==> Symbol
-  O   ==> OutputForm
-  SMP ==> SparseMultivariatePolynomial(R, K)
-  Z   ==> Integer
-
-  POWER        ==> "%power"::Symbol
-  OPEXP        ==> "exp"::Symbol
-  SPECIALDIFF  ==> "%specialDiff"
-  SPECIALDISP  ==> "%specialDisp"
-  SPECIALEQUAL ==> "%specialEqual"
-
-  Exports ==> with
-    belong?    : OP -> Boolean
-      ++ belong?(op) is true if op is a combinatorial operator;
-    operator   : OP -> OP
-      ++ operator(op) returns a copy of op with the domain-dependent
-      ++ properties appropriate for F;
-      ++ error if op is not a combinatorial operator;
-    "**"       : (F, F) -> F
-      ++ a ** b is the formal exponential a**b;
-    binomial   : (F, F) -> F
-      ++ binomial(n, r) returns the number of subsets of r objects
-      ++ taken among n objects, i.e. n!/(r! * (n-r)!);
-@
-
+\subsubsection{binomial}
 We currently simplify binomial coefficients only for non-negative integral
 second argument, using the formula
 $$ \binom{n}{k}=\frac{1}{k!}\prod_{i=0..k-1} (n-i),$$
-except if the second argument is symbolic: in this case [[binomial(n,n)]] is
+except if the second argument is symbolic: in this case binomial(n,n) is
 simplified to one.
  
 Note that there are at least two different ways to define binomial coefficients
@@ -6411,7 +6509,7 @@ second argument. This is, partially, also the approach taken in
       m = 0 => 1
 \end{verbatim}
 
-Of course, here [[n]] and [[m]] are integers. This definition agrees with the
+Of course, here $n$ and $m$ are integers. This definition agrees with the
 recurrence
 
 $$\binom{n}{k}+\binom{n}{k+1}=\binom{n+1}{k+1}.$$
@@ -6433,11 +6531,116 @@ $\Gamma(n_0+1)$ is unbounded.
 
 However, since for $k\in {\bf Z}$, $n\in {\bf Z}$ and $0 < k < n$ both
 definitions agree, one could also combine them. This is what, for example,
-Mathematica does. It seems that MuPAD sets [[binomial(n,n)=1]] for all
-arguments [[n]], and returns [[binomial(-2, n)]] unevaluated. Provisos may help
+Mathematica does. It seems that MuPAD sets binomial(n,n)=1 for all
+arguments $n$, and returns binomial(-2, n) unevaluated. Provisos may help
 here.
 
+\subsubsection{dvsum and dvdsum}
+The dvsum and dvdsum operations implement differentiation of sums with 
+and without bounds. Note that the function
+$$n\mapsto\sum_{k=1}^n f(k,n)$$
+is well defined only for integral values of $n$ greater than or equal to zero.
+There is not even consensus how to define this function for $n<0$. Thus, it is
+not differentiable. Therefore, we need to check whether we erroneously are
+differentiating with respect to the upper bound or the lower bound, where the
+same reasoning holds.
+
+Differentiating a sum with respect to its indexing variable correctly gives
+zero. This is due to the introduction of dummy variables in the internal
+representation of a sum: the operator [[%defsum]] takes 5 arguments, namely
+
+\begin{enumerate}
+\item the summands, where each occurrence of the indexing variable is replaced
+  by 
+\item the dummy variable,
+\item the indexing variable,
+\item the lower bound, and
+\item the upper bound.
+\end{enumerate}
+
+\subsubsection{dvprod and dvdprod}
+The dvprod and dvdprod operations implement differentiation of products with 
+and without bounds. Note again, that we cannot even properly define 
+products with bounds that are not integral.
+
+To differentiate the product, we use Leibniz rule:
+$$\frac{d}{dx}\prod_{i=a}^b f(i,x) = 
+  \sum_{i=a}^b \frac{\frac{d}{dx} f(i,x)}{f(i,x)}\prod_{i=a}^b f(i,x)
+$$
+
+There is one situation where this definition might produce wrong results,
+namely when the product is zero, but axiom failed to recognize it: in this
+case,
+$$
+  \frac{d}{dx} f(i,x)/f(i,x)  
+$$
+is undefined for some $i$. However, I was not able to come up with an
+example. The alternative definition
+$$
+  \frac{d}{dx}\prod_{i=a}^b f(i,x) = 
+  \sum_{i=a}^b \left(\frac{d}{dx} f(i,x)\right)\prod_{j=a,j\neq i}^b f(j,x)
+$$
+has the slight (display) problem that we would have to come up with a new index
+variable, which looks very ugly. Furthermore, it seems to me that more
+simplifications will occur with the first definition.
+
+\begin{verbatim}
+  f := operator 'f
+  D(product(f(i,x),i=1..m),x)
+\end{verbatim}
+
+\subsubsection{dvpow2}
+The dvpow2 operation implements the differentiation of the power operator 
+\verb|%power| with respect to its second argument, i.e., the exponent. 
+It uses the formula
+$$\frac{d}{dx} g(y)^x = \frac{d}{dx} e^{x\log g(y)} = \log g(y) g(y)^x.$$
+
+If $g(y)$ equals zero, this formula is not valid, since the logarithm is not
+defined there. Although strictly speaking $0^x$ is not differentiable at zero,
+we return zero for convenience. 
+
 <<package COMBF CombinatorialFunction>>=
+)abbrev package COMBF CombinatorialFunction
+++ Provides the usual combinatorial functions
+++ Author: Manuel Bronstein, Martin Rubey
+++ Date Created: 2 Aug 1988
+++ Date Last Updated: 30 October 2005
+++ Description:
+++   Provides combinatorial functions over an integral domain.
+++ Keywords: combinatorial, function, factorial.
+++ Examples:  )r COMBF INPUT
+
+CombinatorialFunction(R, F): Exports == Implementation where
+  R: Join(OrderedSet, IntegralDomain)
+  F: FunctionSpace R
+
+  OP  ==> BasicOperator
+  K   ==> Kernel F
+  SE  ==> Symbol
+  O   ==> OutputForm
+  SMP ==> SparseMultivariatePolynomial(R, K)
+  Z   ==> Integer
+
+  POWER        ==> "%power"::Symbol
+  OPEXP        ==> "exp"::Symbol
+  SPECIALDIFF  ==> "%specialDiff"
+  SPECIALDISP  ==> "%specialDisp"
+  SPECIALEQUAL ==> "%specialEqual"
+
+  Exports ==> with
+    belong?    : OP -> Boolean
+      ++ belong?(op) is true if op is a combinatorial operator;
+    operator   : OP -> OP
+      ++ operator(op) returns a copy of op with the domain-dependent
+      ++ properties appropriate for F;
+      ++ error if op is not a combinatorial operator;
+    "**"       : (F, F) -> F
+      ++ a ** b is the formal exponential a**b;
+    binomial   : (F, F) -> F
+      ++ binomial(n, r) returns the number of subsets of r objects
+      ++ taken among n objects, i.e. n!/(r! * (n-r)!);
+      ++
+      ++X [binomial(5,i) for i in 0..5]
     permutation: (F, F) -> F
       ++ permutation(n, r) returns the number of permutations of
       ++ n objects taken r at a time, i.e. n!/(n-r)!;
@@ -6503,25 +6706,14 @@ here.
     K2fact    : (K, List SE) -> F
     smpfact   : (SMP, List SE) -> F
 
-    dummy == new()$SE :: F
-@
-This macro will be used in [[product]] and [[summation]], both the $5$ and $3$
-argument forms. It is used to introduce a dummy variable in place of the
-summation index within the summands. This in turn is necessary to keep the
-indexing variable local, circumventing problems, for example, with
-differentiation.
+-- This macro will be used in product and summation, both the 5 and 3
+-- argument forms. It is used to introduce a dummy variable in place of the
+-- summation index within the summands. This in turn is necessary to keep the
+-- indexing variable local, circumventing problems, for example, with
+-- differentiation.
 
-This works if we don't accidently use such a symbol as a bound of summation or
-product.
-
-Note that up to [[patch--25]] this used to read
-\begin{verbatim}
-    dummy := new()$SE :: F
-\end{verbatim}
-thus introducing the same dummy variable for all products and summations, which
-caused nested products and summations to fail. (Issue~\#72)
+    dummy == new()$SE :: F
 
-<<package COMBF CombinatorialFunction>>=
     opfact  := operator("factorial"::Symbol)$CommonOperators
     opperm  := operator("permutation"::Symbol)$CommonOperators
     opbinom := operator("binomial"::Symbol)$CommonOperators
@@ -6576,11 +6768,9 @@ caused nested products and summations to fail. (Issue~\#72)
       dm := dummy
       opsum [eval(x, k := kernel(i)$K, dm), dm, k::F]
 
-@
-These two operations return the product or the sum as unevaluated operators. A
-dummy variable is introduced to make the indexing variable \lq local\rq.
+-- These two operations return the product or the sum as unevaluated operators
+-- A dummy variable is introduced to make the indexing variable local.
 
-<<package COMBF CombinatorialFunction>>=
     dvsum(l, x) ==
       opsum [differentiate(first l, x), second l, third l]
 
@@ -6592,51 +6782,6 @@ dummy variable is introduced to make the indexing variable \lq local\rq.
       else
         opdsum [differentiate(first l, x), second l, y, g, h]
 
-@
-The above two operations implement differentiation of sums with and without
-bounds. Note that the function
-$$n\mapsto\sum_{k=1}^n f(k,n)$$
-is well defined only for integral values of $n$ greater than or equal to zero.
-There is not even consensus how to define this function for $n<0$. Thus, it is
-not differentiable. Therefore, we need to check whether we erroneously are
-differentiating with respect to the upper bound or the lower bound, where the
-same reasoning holds.
-
-Differentiating a sum with respect to its indexing variable correctly gives
-zero. This is due to the introduction of dummy variables in the internal
-representation of a sum: the operator [[%defsum]] takes 5 arguments, namely
-
-\begin{enumerate}
-\item the summands, where each occurrence of the indexing variable is replaced
-  by 
-\item the dummy variable,
-\item the indexing variable,
-\item the lower bound, and
-\item the upper bound.
-\end{enumerate}
-
-Note that up to [[patch--40]] the following incorrect code was used, which 
-tried to parallel the known rules for integration: (Issue~\#180)
-
-\begin{verbatim}
-    dvdsum(l, x) ==
-      x = retract(y := third l)@SE => 0
-      k := retract(d := second l)@K
-      differentiate(h := third rest rest l,x) * eval(f := first l, k, h)
-        - differentiate(g := third rest l, x) * eval(f, k, g)
-             + opdsum [differentiate(f, x), d, y, g, h]
-\end{verbatim}
-
-Up to [[patch--45]] a similar mistake could be found in the code for
-differentiation of formal sums, which read
-\begin{verbatim}
-    dvsum(l, x) ==
-      k  := retract(second l)@K
-      differentiate(third l, x) * summand l
-          + opsum [differentiate(first l, x), second l, third l]
-\end{verbatim}
-
-<<package COMBF CombinatorialFunction>>=
     dvprod(l, x) ==
       dm := retract(dummy)@SE
       f := eval(first l, retract(second l)@K, dm::F)
@@ -6653,42 +6798,9 @@ differentiation of formal sums, which read
       else
         opdsum cons(differentiate(first l, x)/first l, rest l) * opdprod l 
 
-@ 
-The above two operations implement differentiation of products with and without
-bounds. Note again, that we cannot even properly define products with bounds
-that are not integral.
-
-To differentiate the product, we use Leibniz rule:
-$$\frac{d}{dx}\prod_{i=a}^b f(i,x) = 
-  \sum_{i=a}^b \frac{\frac{d}{dx} f(i,x)}{f(i,x)}\prod_{i=a}^b f(i,x)
-$$
-
-There is one situation where this definition might produce wrong results,
-namely when the product is zero, but axiom failed to recognize it: in this
-case,
-$$
-  \frac{d}{dx} f(i,x)/f(i,x)  
-$$
-is undefined for some $i$. However, I was not able to come up with an
-example. The alternative definition
-$$
-  \frac{d}{dx}\prod_{i=a}^b f(i,x) = 
-  \sum_{i=a}^b \left(\frac{d}{dx} f(i,x)\right)\prod_{j=a,j\neq i}^b f(j,x)
-$$
-has the slight (display) problem that we would have to come up with a new index
-variable, which looks very ugly. Furthermore, it seems to me that more
-simplifications will occur with the first definition.
-
-<<TEST COMBF>>=
-  f := operator 'f
-  D(product(f(i,x),i=1..m),x)
-@
-
-Note that up to [[patch--45]] these functions did not exist and products were
-differentiated according to the usual chain rule, which gave incorrect
-results. (Issue~\#211)
+-- These four operations handle the conversion of sums and products to
+-- OutputForm
 
-<<package COMBF CombinatorialFunction>>=
     dprod l ==
       prod(summand(l)::O, third(l)::O)
 
@@ -6701,33 +6813,26 @@ results. (Issue~\#211)
     ddsum l ==
       sum(summand(l)::O, third(l)::O = fourth(l)::O, fourth(rest l)::O)
 
-@ 
-These four operations handle the conversion of sums and products to
-[[OutputForm]]. Note that up to [[patch--45]] the definitions for sums and
-products without bounds were missing and output was illegible.
+-- The two operations handle the testing for equality of sums and products.
+-- The corresponding property \verb|%specialEqual| set below is checked in
+-- Kernel. Note that we can assume that the operators are equal, since this is
+-- checked in Kernel itself.
 
-<<package COMBF CombinatorialFunction>>=
     equalsumprod(s1, s2) ==
       l1 := argument s1
       l2 := argument s2
-
       (eval(first l1, retract(second l1)@K, second l2) = first l2)
 
     equaldsumprod(s1, s2) ==
       l1 := argument s1
       l2 := argument s2
-
       ((third rest l1 = third rest l2) and
        (third rest rest l1 = third rest rest l2) and
        (eval(first l1, retract(second l1)@K, second l2) = first l2))
 
-@ 
-The preceding two operations handle the testing for equality of sums and
-products. This functionality was missing up to [[patch--45]]. (Issue~\#213) The
-corresponding property [[%specialEqual]] set below is checked in
-[[Kernel]]. Note that we can assume that the operators are equal, since this is
-checked in [[Kernel]] itself.
-<<package COMBF CombinatorialFunction>>=
+-- These two operations return the product or the sum as unevaluated operators
+-- A dummy variable is introduced to make the indexing variable local.
+
     product(x:F, s:SegmentBinding F) ==
       k := kernel(variable s)$K
       dm := dummy
@@ -6738,11 +6843,6 @@ checked in [[Kernel]] itself.
       dm := dummy
       opdsum [eval(x,k,dm), dm, k::F, lo segment s, hi segment s]
 
-@
-These two operations return the product or the sum as unevaluated operators. A
-dummy variable is introduced to make the indexing variable \lq local\rq.
-
-<<package COMBF CombinatorialFunction>>=
     smpfact(p, l) ==
       map(K2fact(#1, l), #1::F, p)$PolynomialCategoryLifting(
         IndexedExponents K, K, R, SMP, F)
@@ -6889,15 +6989,9 @@ dummy variable is introduced to make the indexing variable \lq local\rq.
                => ibinom l
            binomial(r1::R, r2::R)::F
 
-@
-
-[[iibinom]] checks those cases in which the binomial coefficient may be
-evaluated explicitly. Note that up to [[patch--51]], the case where the second
-argument is a positive integer was not checked.(Issue~\#336) Currently, the
-naive iterative algorithm is used to calculate the coefficient, there is room
-for improvement here.
-
-<<package COMBF CombinatorialFunction>>=
+-- iibinom checks those cases in which the binomial coefficient may
+-- be evaluated explicitly. Currently, the naive iterative algorithm is
+-- used to calculate the coefficient, there is room for improvement here.
 
       else
          iibinom l ==
@@ -6926,23 +7020,6 @@ for improvement here.
                   else
                     log(first l) * first(l) ** second(l)
 
-@
-This operation implements the differentiation of the power operator [[%power]]
-with respect to its second argument, i.e., the exponent. It uses the formula
-$$\frac{d}{dx} g(y)^x = \frac{d}{dx} e^{x\log g(y)} = \log g(y) g(y)^x.$$
-
-If $g(y)$ equals zero, this formula is not valid, since the logarithm is not
-defined there. Although strictly speaking $0^x$ is not differentiable at zero,
-we return zero for convenience. 
-
-Note that up to [[patch--25]] this used to read
-\begin{verbatim}
-    if F has ElementaryFunctionCategory then
-      dvpow2 l == log(first l) * first(l) ** second(l)
-\end{verbatim}
-which caused differentiating $0^x$ to fail. (Issue~\#19)
-
-<<package COMBF CombinatorialFunction>>=
     evaluate(opfact, iifact)$BasicOperatorFunctions1(F)
     evaluate(oppow, iipow)
     evaluate(opperm, iiperm)
@@ -6952,17 +7029,18 @@ which caused differentiating $0^x$ to fail. (Issue~\#19)
     evaluate(opprod, iprod)
     evaluate(opdprod, iidprod)
     derivative(oppow, [dvpow1, dvpow2])
+
+-- These four properties define special differentiation rules for sums and 
+-- products. 
+
     setProperty(opsum,   SPECIALDIFF, dvsum@((List F, SE) -> F) pretend None)
     setProperty(opdsum,  SPECIALDIFF, dvdsum@((List F, SE)->F) pretend None)
     setProperty(opprod,  SPECIALDIFF, dvprod@((List F, SE)->F) pretend None)
     setProperty(opdprod, SPECIALDIFF, dvdprod@((List F, SE)->F) pretend None)
-@
-The last four properties define special differentiation rules for sums and
-products. Note that up to [[patch--45]] the rules for products were missing.
-Thus products were differentiated according the usual chain-rule, which gave
-incorrect results.
 
-<<package COMBF CombinatorialFunction>>=
+-- Set the properties for displaying sums and products and testing for
+-- equality.
+
     setProperty(opsum,   SPECIALDISP, dsum@(List F -> O) pretend None)
     setProperty(opdsum,  SPECIALDISP, ddsum@(List F -> O) pretend None)
     setProperty(opprod,  SPECIALDISP, dprod@(List F -> O) pretend None)
@@ -6973,10 +7051,6 @@ incorrect results.
     setProperty(opdprod, SPECIALEQUAL, equaldsumprod@((K,K) -> Boolean) pretend None)
 
 @ 
-Finally, we set the properties for displaying sums and products and testing for
-equality.
-
-
 <<COMBF.dotabb>>=
 "COMBF" [color="#FF4488",href="bookvol10.4.pdf#nameddest=COMBF"]
 "FS" [color="#4488FF",href="bookvol10.2.pdf#nameddest=FS"]
@@ -43431,6 +43505,107 @@ IntegerBits: with
 @
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 \section{package COMBINAT IntegerCombinatoricFunctions}
+<<IntegerCombinatoricFunctions.input>>=
+)set break resume
+)sys rm -f IntegerCombinatoricFunctions.output
+)spool IntegerCombinatoricFunctions.output
+)set message test on
+)set message auto off
+)clear all
+--S 1 of 4
+)set expose add constructor OutputForm
+--R 
+--I   OutputForm is already explicitly exposed in frame frame0 
+--E 1
+
+--S 2 of 4
+pascalRow(n) == [right(binomial(n,i),4) for i in 0..n]
+--R 
+--R                                                                   Type: Void
+--E 2
+
+--S 3 of 4
+displayRow(n)==output center blankSeparate pascalRow(n)
+--R 
+--R                                                                   Type: Void
+--E 3
+
+--S 4 of 4
+for i in 0..7 repeat displayRow i
+--R 
+--R   Compiling function pascalRow with type NonNegativeInteger -> List 
+--R      OutputForm 
+--R   Compiling function displayRow with type NonNegativeInteger -> Void 
+--R                                     1
+--R                                  1    1
+--R                                1    2    1
+--R                             1    3    3    1
+--R                           1    4    6    4    1
+--R                        1    5   10   10    5    1
+--R                      1    6   15   20   15    6    1
+--R                   1    7   21   35   35   21    7    1
+--R                                                                   Type: Void
+--E 4
+
+)spool
+)lisp (bye)
+@
+<<IntegerCombinatoricFunctions.help>>=
+====================================================================
+IntegerCombinatoricFunctions examples
+====================================================================
+
+The binomial(n, r) returns the number of subsets of r objects
+taken among n objects, i.e. n!/(r! * (n-r)!)
+
+The binomial coefficients are the coefficients of the series expansion
+of a power of a binomial, that is
+
+    n
+   --+    / n \   k             n
+   >     |     | x    =  (1 + x)
+   --+    \ k /
+   k= 0
+
+This leads to the famous pascal triangle. First we expose the OutputForm
+domain, which is normally hidden, so we can use it to format the lines.
+
+  )set expose add constructor OutputForm
+
+Next we define a function that will output the list of binomial coefficients
+right justified with proper spacing:
+
+  pascalRow(n) == [right(binomial(n,i),4) for i in 0..n]
+
+and now we format the whole line so that it looks centered:
+
+  displayRow(n)==output center blankSeparate pascalRow(n)
+
+and we compute the triangle
+
+  for i in 0..7 repeat displayRow i
+
+giving the pretty result:
+ 
+   Compiling function pascalRow with type NonNegativeInteger -> List 
+      OutputForm 
+   Compiling function displayRow with type NonNegativeInteger -> Void 
+                                     1
+                                  1    1
+                                1    2    1
+                             1    3    3    1
+                           1    4    6    4    1
+                        1    5   10   10    5    1
+                      1    6   15   20   15    6    1
+                   1    7   21   35   35   21    7    1
+
+See Also:
+o )show IntegerCombinatoricFunctions
+o )d op binomial
+o )show OutputForm
+o )help set
+
+@
 \pagehead{IntegerCombinatoricFunctions}{COMBINAT}
 \pagepic{ps/v104integercombinatoricfunctions.ps}{COMBINAT}{1.00}
 
@@ -43469,6 +43644,8 @@ IntegerCombinatoricFunctions(I:IntegerNumberSystem): with
       ++ \spad{binomial(n,r)} returns the binomial coefficient
       ++ \spad{C(n,r) = n!/(r! (n-r)!)}, where \spad{n >= r >= 0}.
       ++ This is the number of combinations of n objects taken r at a time.
+      ++
+      ++X [binomial(5,i) for i in 0..5]
    factorial: I -> I
       ++ \spad{factorial(n)} returns \spad{n!}. this is the product of all
       ++ integers between 1 and n (inclusive). 
@@ -123791,7 +123968,7 @@ PolynomialNumberTheoryFunctions(): Exports == Implementation where
  Exports ==> with
   bernoulli : I -> SUP RN
     ++ bernoulli(n) returns the nth Bernoulli polynomial \spad{B[n](x)}.
-    ++ Note: Bernoulli polynomials denoted \spad{B(n,x)} computed by solving the
+    ++ Bernoulli polynomials denoted \spad{B(n,x)} computed by solving the
     ++ differential equation  \spad{differentiate(B(n,x),x) = n B(n-1,x)} where
     ++ \spad{B(0,x) = 1} and initial condition comes from \spad{B(n) = B(n,0)}.
   chebyshevT: I -> SUP I
@@ -129823,49 +130000,45 @@ RandomFloatDistributions(): Cat == Body where
 ++ Description:
 ++ This package exports integer distributions
 RandomIntegerDistributions(): with
-        uniform:   Segment Integer           -> (() -> Integer)
-		++ uniform(s) \undocumented
-        binomial:  (Integer, RationalNumber) -> (() -> Integer)
-		++ binomial(n,f) \undocumented
-        poisson:   RationalNumber          -> (() -> Integer)
-		++ poisson(f) \undocumented
-        geometric: RationalNumber          -> (() -> Integer)
-		++ geometric(f) \undocumented
-
-        ridHack1:  (Integer,Integer,Integer,Integer) -> Integer
-		++ ridHack1(i,j,k,l) \undocumented
-    == add
-        import RandomNumberSource()
-        import IntegerBits()
-
-        -- Compute uniform(a..b) as
-        --
-        --     l + U0 + w*U1 + w**2*U2 +...+ w**(n-1)*U-1 + w**n*M
-        --
-        -- where
-        --     l = min(a,b)
-        --     m = abs(b-a) + 1
-        --     w**n < m < w**(n+1)
-        --     U0,...,Un-1  are uniform on  0..w-1
-        --     M            is  uniform on  0..(m quo w**n)-1
-
-        uniform aTob ==
-            a := lo aTob;  b := hi aTob
-            l := min(a,b); m := abs(a-b) + 1
-
-            w := 2**(bitLength size() quo 2)::NonNegativeInteger
-
-            n  := 0
-            mq := m  -- m quo w**n
-            while (mqnext := mq quo w) > 0 repeat
-                n  := n + 1
-                mq := mqnext
-            ridHack1(mq, n, w, l)
-
-        ridHack1(mq, n, w, l) ==
-            r := randnum mq
-            for i in 1..n repeat r := r*w + randnum w
-            r + l
+   uniform:   Segment Integer           -> (() -> Integer)
+     ++ uniform(s) as
+     ++     l + u0 + w*u1 + w**2*u2 +...+ w**(n-1)*u-1 + w**n*m
+     ++ where
+     ++     s = a..b
+     ++     l = min(a,b)
+     ++     m = abs(b-a) + 1
+     ++     w**n < m < w**(n+1)
+     ++     u0,...,un-1  are uniform on  0..w-1
+     ++     m            is  uniform on  0..(m quo w**n)-1
+   binomial:  (Integer, RationalNumber) -> (() -> Integer)
+     ++ binomial(n,f) \undocumented
+   poisson:   RationalNumber          -> (() -> Integer)
+     ++ poisson(f) \undocumented
+   geometric: RationalNumber          -> (() -> Integer)
+     ++ geometric(f) \undocumented
+   ridHack1:  (Integer,Integer,Integer,Integer) -> Integer
+     ++ ridHack1(i,j,k,l) \undocumented
+ == add
+   import RandomNumberSource()
+   import IntegerBits()
+
+   uniform aTob ==
+       a := lo aTob;  b := hi aTob
+       l := min(a,b); m := abs(a-b) + 1
+
+       w := 2**(bitLength size() quo 2)::NonNegativeInteger
+
+       n  := 0
+       mq := m  -- m quo w**n
+       while (mqnext := mq quo w) > 0 repeat
+           n  := n + 1
+           mq := mqnext
+       ridHack1(mq, n, w, l)
+
+   ridHack1(mq, n, w, l) ==
+       r := randnum mq
+       for i in 1..n repeat r := r*w + randnum w
+       r + l
 
 @
 <<RIDIST.dotabb>>=
diff --git a/changelog b/changelog
index 7e8e2d2..fed1b33 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,7 @@
+20090417 tpd src/axiom-website/patches.html 20090417.01.tpd.patch
+20090417 tpd src/algebra/Makefile add help, regression tests
+20090417 tpd books/bookvol10.4 document binomial
+20090417 tpd books/bookvol10.2 document binomial
 20090416 tpd src/axiom-website/patches.html 20090416.03.tpd.patch
 20090416 tpd books/bookvol10.4 update bezier documentation
 20090416 tpd books/ps/v104beziermove.eps graph the bezier curves
diff --git a/src/algebra/Makefile.pamphlet b/src/algebra/Makefile.pamphlet
index f454c55..8af306b 100644
--- a/src/algebra/Makefile.pamphlet
+++ b/src/algebra/Makefile.pamphlet
@@ -16445,6 +16445,7 @@ SPADHELP=\
  ${HELP}/BinarySearchTree.help       ${HELP}/CardinalNumber.help \
  ${HELP}/CartesianTensor.help        ${HELP}/Character.help \
  ${HELP}/CharacterClass.help         ${HELP}/CliffordAlgebra.help \
+ ${HELP}/CombinatorialFunction.help \
  ${HELP}/Complex.help                ${HELP}/ContinuedFraction.help \
  ${HELP}/CycleIndicators.help        ${HELP}/DeRhamComplex.help \
  ${HELP}/DecimalExpansion.help       ${HELP}/Dequeue.help \
@@ -16463,7 +16464,9 @@ SPADHELP=\
  ${HELP}/GroebnerPackage.help \
  ${HELP}/Heap.help                   ${HELP}/HexadecimalExpansion.help \
  ${HELP}/HomogeneousDistributedMultivariatePolynomial.help \
- ${HELP}/Integer.help                ${HELP}/IntegerLinearDependence.help \
+ ${HELP}/Integer.help \
+ ${HELP}/IntegerCombinatoricFunctions.help \
+ ${HELP}/IntegerLinearDependence.help \
  ${HELP}/IntegerNumberTheoryFunctions.help \
  ${HELP}/Kernel.help                 ${HELP}/KeyedAccessFile.help \
  ${HELP}/LazardSetSolvingPackage.help \
@@ -16536,6 +16539,7 @@ REGRESS=\
  BinarySearchTree.regress       CardinalNumber.regress \
  CartesianTensor.regress        Character.regress \
  CharacterClass.regress         CliffordAlgebra.regress \
+ CombinatorialFunction.regress \
  Complex.regress                ContinuedFraction.regress \
  CycleIndicators.regress        DeRhamComplex.regress \
  DecimalExpansion.regress       Dequeue.regress \
@@ -16553,7 +16557,8 @@ REGRESS=\
  GroebnerPackage.regress \
  Heap.regress                   HexadecimalExpansion.regress \
  HomogeneousDistributedMultivariatePolynomial.regress \
- Integer.regress                IntegerLinearDependence.regress \
+ Integer.regress                IntegerCombinatoricFunctions.regress \
+ IntegerLinearDependence.regress \
  IntegerNumberTheoryFunctions.regress \
  Kernel.regress                 KeyedAccessFile.regress \
  LazardSetSolvingPackage.regress \
@@ -16744,6 +16749,18 @@ ${HELP}/CliffordAlgebra.help: ${BOOKS}/bookvol10.3.pamphlet
             >${INPUT}/CliffordAlgebra.input
 	@echo "CliffordAlgebra (CLIF)" >>${HELPFILE}
 
+${HELP}/CombinatorialFunction.help: ${BOOKS}/bookvol10.4.pamphlet
+	@echo 7010 create CombinatorialFunction.help from \
+          ${BOOKS}/bookvol10.4.pamphlet
+	@${TANGLE} -R"CombinatorialFunction.help" \
+          ${BOOKS}/bookvol10.4.pamphlet \
+            >${HELP}/CombinatorialFunction.help
+	@cp ${HELP}/CombinatorialFunction.help ${HELP}/COMBF.help
+	@${TANGLE} -R"CombinatorialFunction.input" \
+           ${BOOKS}/bookvol10.4.pamphlet \
+            >${INPUT}/CombinatorialFunction.input
+	@echo "CombinatorialFunction (COMBF)" >>${HELPFILE}
+
 ${HELP}/Complex.help: ${BOOKS}/bookvol10.3.pamphlet
 	@echo 7011 create Complex.help from ${BOOKS}/bookvol10.3.pamphlet
 	@${TANGLE} -R"Complex.help" ${BOOKS}/bookvol10.3.pamphlet \
@@ -17028,6 +17045,18 @@ ${HELP}/Integer.help: ${BOOKS}/bookvol10.3.pamphlet
             >${INPUT}/Integer.input
 	@echo "Integer (INT)" >>${HELPFILE}
 
+${HELP}/IntegerCombinatoricFunctions.help: ${BOOKS}/bookvol10.4.pamphlet
+	@echo 7039 create IntegerCombinatoricFunctions.help from \
+           ${BOOKS}/bookvol10.4.pamphlet
+	@${TANGLE} -R"IntegerCombinatoricFunctions.help" \
+           ${BOOKS}/bookvol10.4.pamphlet \
+           >${HELP}/IntegerCombinatoricFunctions.help
+	@cp ${HELP}/IntegerCombinatoricFunctions.help ${HELP}/COMBINAT.help
+	@${TANGLE} -R"IntegerCombinatoricFunctions.input" \
+           ${BOOKS}/bookvol10.4.pamphlet \
+            >${INPUT}/IntegerCombinatoricFunctions.input
+	@echo "IntegerCombinatoricFunctions (COMBINAT)" >>${HELPFILE}
+
 ${HELP}/IntegerLinearDependence.help: ${BOOKS}/bookvol10.4.pamphlet
 	@echo 7039 create IntegerLinearDependence.help from \
            ${BOOKS}/bookvol10.4.pamphlet
diff --git a/src/axiom-website/patches.html b/src/axiom-website/patches.html
index 758d24e..d8cd037 100644
--- a/src/axiom-website/patches.html
+++ b/src/axiom-website/patches.html
@@ -1094,5 +1094,7 @@ regress.lisp tighten checks on regression tests<br/>
 bookvol5 move more interpreter code<br/>
 <a href="patches/20090416.03.tpd.patch">20090416.03.tpd.patch</a>
 bookvol10.4 update bezier documentation<br/>
+<a href="patches/20090416.03.tpd.patch">20090416.03.tpd.patch</a>
+bookvol10.4, 10.2 document binomial<br/>
  </body>
 </html>

\start
Date: Fri, 17 Apr 2009 20:36:30 -0500
From: Tim Daly
To: list
Subject: 20090417.02.wxh.patch (compiler use Waldek +->	syntax)

Waldek has implemented changes to the spad compiler to use 
+-> rather than #1 for anonymous function syntax which makes
anonymous functions easier to understand. He helped by pointing
out the explicit revisions that contained the changes.

Bezier was updated to test and use Waldek notation.

=====================================================================
diff --git a/books/bookvol10.4.pamphlet b/books/bookvol10.4.pamphlet
index 4537e98..885f2c7 100644
--- a/books/bookvol10.4.pamphlet
+++ b/books/bookvol10.4.pamphlet
@@ -5341,17 +5341,17 @@ Bezier(R:Ring): with
     ++X [n(t/10.0) for t in 0..10 by 1]
  == add
    linearBezier(a,b) == 
-    [(1-#1)*(a.1) + #1*(b.1), (1-#1)*(a.2) + #1*(b.2)]
+    t +-> [(1-t)*(a.1) + t*(b.1), (1-t)*(a.2) + t*(b.2)]
 
    quadraticBezier(a,b,c) == 
-    [(1-#1)**2*(a.1) + 2*#1*(1-#1)*(b.1) + (#1)**2*(c.1),
-     (1-#1)**2*(a.2) + 2*#1*(1-#1)*(b.2) + (#1)**2*(c.2)]
+    t +-> [(1-t)**2*(a.1) + 2*t*(1-t)*(b.1) + t**2*(c.1),
+           (1-t)**2*(a.2) + 2*t*(1-t)*(b.2) + t**2*(c.2)]
 
    cubicBezier(a,b,c,d) == 
-    [(1-#1)**3*(a.1) + 3*(#1)*(1-#1)**2*(b.1) 
-        + 3*(#1)**2*(1-#1)*(c.1) + (#1)**3*(d.1),
-     (1-#1)**3*(a.2) + 3*(#1)*(1-#1)**2*(b.2)
-        + 3*(#1)**2*(1-#1)*(c.2) + (#1)**3*(d.2)]
+    t +-> [(1-t)**3*(a.1) + 3*t*(1-t)**2*(b.1) 
+             + 3*t**2*(1-t)*(c.1) + t**3*(d.1),
+           (1-t)**3*(a.2) + 3*t*(1-t)**2*(b.2)
+             + 3*t**2*(1-t)*(c.2) + t**3*(d.2)]
      
 @
 <<BEZIER.dotabb>>=
diff --git a/changelog b/changelog
index fed1b33..6a34a9a 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,9 @@
+20090417 tpd src/axiom-website/patches.html 20090417.02.tpd.patch
+20090417 tpd books/bookvol10.4 add +-> handling
+20090417 wxh src/interp/define.boot add +-> handling
+20090417 wxh src/interp/newaux.lisp add +-> handling
+20090417 wxh src/interp/property.lisp add +-> handling	
+20090417 wxh src/interp/compiler.boot add +-> handling
 20090417 tpd src/axiom-website/patches.html 20090417.01.tpd.patch
 20090417 tpd src/algebra/Makefile add help, regression tests
 20090417 tpd books/bookvol10.4 document binomial
diff --git a/src/axiom-website/patches.html b/src/axiom-website/patches.html
index d8cd037..1adb0e9 100644
--- a/src/axiom-website/patches.html
+++ b/src/axiom-website/patches.html
@@ -1094,7 +1094,9 @@ regress.lisp tighten checks on regression tests<br/>
 bookvol5 move more interpreter code<br/>
 <a href="patches/20090416.03.tpd.patch">20090416.03.tpd.patch</a>
 bookvol10.4 update bezier documentation<br/>
-<a href="patches/20090416.03.tpd.patch">20090416.03.tpd.patch</a>
+<a href="patches/20090417.01.tpd.patch">20090417.01.tpd.patch</a>
 bookvol10.4, 10.2 document binomial<br/>
+<a href="patches/20090417.02.tpd.patch">20090417.02.tpd.patch</a>
+compiler use waldek +-> syntax <br/>
  </body>
 </html>
diff --git a/src/interp/compiler.boot.pamphlet b/src/interp/compiler.boot.pamphlet
index d1be1e7..fbf3c53 100644
--- a/src/interp/compiler.boot.pamphlet
+++ b/src/interp/compiler.boot.pamphlet
@@ -257,19 +257,77 @@ hasFormalMapVariable(x, vl) ==
      hasone? x == MEMQ(x,$formalMapVariables)
 
 @
+\subsection{argsToSig}
+<<*>>=
+argsToSig(args) ==
+  args is [":",v,t] => [[v],[t]]
+  sig1:=[]
+  arg1:=[]
+  bad:=false
+  for arg in args repeat
+    arg is [":",v,t] =>
+      sig1:=[t,:sig1]
+      arg1:=[v,:arg1]
+    bad:=true
+  bad=>[nil,nil]
+  [REVERSE(arg1),REVERSE(sig1)]
+
+@
+\subsection{compLambda}
+<<*>>=
+compLambda(x is ["+->",vl,body],m,e) ==
+  vl is [":",args,target] =>
+    args:=
+      args is ["Tuple",:a1] => a1
+      args
+    LISTP(args) =>
+      [arg1,sig1]:=argsToSig(args)
+      sig1 =>
+        ress:=compAtSign(["@",["+->",arg1,body],["Mapping",target,:sig1]],m,e)
+        ress
+      stackAndThrow["compLambda",x]
+    stackAndThrow["compLambda",x]
+  stackAndThrow["compLambda",x]
+
+@
 \subsection{compWithMappingMode}
 <<*>>=
-compWithMappingMode(x,m is ["Mapping",m',:sl],oldE) ==
+compWithMappingMode(x,m,oldE) ==
+  compWithMappingMode1(x,m,oldE,$formalArgList)
+
+@
+\subsection{compWithMappingMode1}
+<<*>>=
+compWithMappingMode1(x,m is ["Mapping",m',:sl],oldE,$formalArgList) ==
   $killOptimizeIfTrue: local:= true
   e:= oldE
   isFunctor x =>
     if get(x,"modemap",$CategoryFrame) is [[[.,target,:argModeList],.],:.] and
-      (and/[extendsCategoryForm("$",s,mode) for mode in argModeList for s in sl]
-        ) and extendsCategoryForm("$",target,m') then return [x,m,e]
+     (and/[extendsCategoryForm("$",s,mode) for mode in argModeList for s in sl]
+       ) and extendsCategoryForm("$",target,m') then return [x,m,e]
   if STRINGP x then x:= INTERN x
-  for m in sl for v in (vl:= take(#sl,$FormalMapVariableList)) repeat
+  ress:=nil
+  old_style:=true
+  if x is ["+->",vl,nx] then
+    old_style:=false
+    vl is [":",:.] =>
+      ress:=compLambda(x,m,oldE)
+      ress
+    vl:=
+      vl is ["Tuple",:vl1] => vl1
+      vl
+    vl:=
+      SYMBOLP(vl) => [vl]
+      LISTP(vl) and (and/[SYMBOLP(v) for v in vl]) => vl
+      stackAndThrow ["bad +-> arguments:",vl]
+    $formatArgList:=[:vl,:$formalArgList]
+    x:=nx
+  else
+    vl:=take(#sl,$FormalMapVariableList)
+  ress => ress
+  for m in sl for v in vl repeat
     [.,.,e]:= compMakeDeclaration([":",v,m],$EmptyMode,e)
-  not null vl and not hasFormalMapVariable(x, vl) => return
+  old_style and not null vl and not hasFormalMapVariable(x, vl) => return
     [u,.,.] := comp([x,:vl],m',e) or return nil
     extractCodeAndConstructTriple(u, m, oldE)
   null vl and (t := comp([x], m', e)) => return
@@ -328,20 +386,14 @@ compWithMappingMode(x,m is ["Mapping",m',:sl],oldE) ==
       ['LAMBDA,[:vl,vec], :CDDR expandedFunction]
     scode:=nil
     vec:=nil
-    slist:=nil
     locals:=nil
     i:=-1
     for v in frees repeat
       i:=i+1
       vec:=[first v,:vec]
-      rest v = 1 =>
-                --Only used once
-        slist:=[[first v,($QuickCode => 'QREFELT;'ELT),"$$",i],:slist]
       scode:=[['SETQ,first v,[($QuickCode => 'QREFELT;'ELT),"$$",i]],:scode]
       locals:=[first v,:locals]
-    body:=
-      slist => SUBLISNQ(slist,CDDR expandedFunction)
-      CDDR expandedFunction
+    body:=CDDR expandedFunction
     if locals then
       if body is [['DECLARE,:.],:.] then
         body:=[CAR body,['PROG,locals,:scode,['RETURN,['PROGN,:CDR body]]]]
diff --git a/src/interp/define.boot.pamphlet b/src/interp/define.boot.pamphlet
index 0f2dc03..08a5310 100644
--- a/src/interp/define.boot.pamphlet
+++ b/src/interp/define.boot.pamphlet
@@ -88,6 +88,9 @@ compDefine1(form,m,e) ==
     (sig:= getSignatureFromMode(lhs,e)) =>
   -- here signature of lhs is determined by a previous declaration
       compDefine1(['DEF,lhs,[first sig,:rest signature],specialCases,rhs],m,e)
+  $insideCapsuleFunctionIfTrue =>
+    --stackAndThrow ["Internal functions unsupported:",form]
+    compInternalFunction(form,m,e)
   if signature.target=$Category then $insideCategoryIfTrue:= true
 --?? following 3 lines seem bogus, BMT 6/23/93
 --?  if signature.target is ['Mapping,:map] then
@@ -765,6 +768,20 @@ orderByDependency(vl,dl) ==
     vl:= vl'
     dl:= dl'
   REMDUP NREVERSE orderedVarList --ordered so ith is indep. of jth if i < j
+
+compInternalFunction(df is ['DEF,form,signature,specialCases,body],m,e) ==
+  -- $insideExpressionIfTrue:=false
+  [op,:argl]:=form
+  not(IDENTP(op)) =>
+    stackAndThrow ["Bad name for internal function:",op]
+  #argl=0 =>
+    stackAndThrow ["Argumentless internal functions unsupported:",op]
+    --nf:=["where",["LET",[":",op,["Mapping",:signature]],nbody],_
+    --     :whereList1,:whereList2]
+  nbody:=["+->",argl,body]
+  nf:=["LET",[":",op,["Mapping",:signature]],nbody]
+  ress:=comp(nf,m,e)
+  ress
  
 compDefineCapsuleFunction(df is ['DEF,form,signature,specialCases,body],
   m,oldE,$prefix,$formalArgList) ==
diff --git a/src/interp/newaux.lisp.pamphlet b/src/interp/newaux.lisp.pamphlet
index 11295fb..ce51b7b 100644
--- a/src/interp/newaux.lisp.pamphlet
+++ b/src/interp/newaux.lisp.pamphlet
@@ -102,7 +102,7 @@
           (/\\ 250 251)   (\\/ 200 201)
           (\.\. SEGMENT 401 699 (|PARSE-Seg|))
           (=\> 123 103)
-          (+-\> 998 102)
+          (+-\> 995 112)
           (== DEF 122 121)
           (==\> MDEF 122 121)
           (\| 108 111)                          ;was 190 190
diff --git a/src/interp/property.lisp.pamphlet b/src/interp/property.lisp.pamphlet
index 095310b..8844c08 100644
--- a/src/interp/property.lisp.pamphlet
+++ b/src/interp/property.lisp.pamphlet
@@ -574,6 +574,7 @@ We have a similar problem with the control-G character.
   (\@ |compAtSign|)
   (|:| |compColon|)
   (\:\: |compCoerce|)
+  (|+->| |compLambda|)
   (QUOTE |compQuote|)
 <<clip1>>
   (|add| |compAdd|)

\start
Date: Sat, 18 Apr 2009 19:05:11 -0500
From: Tim Daly
To: list
Subject: 20090418.01.tpd.patch (bookvol10.4 convert EF to +-> syntax)

The derivatives for trig functions in ElementaryFunctions
now use the +-> syntax. Additionally, there are new regression
tests and a help file for ElementaryFunctions.

========================================================================
diff --git a/books/bookvol10.4.pamphlet b/books/bookvol10.4.pamphlet
index 885f2c7..724f459 100644
--- a/books/bookvol10.4.pamphlet
+++ b/books/bookvol10.4.pamphlet
@@ -15277,6 +15277,547 @@ EigenPackage(R) : C == T
 @
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 \section{package EF ElementaryFunction}
+<<ElementaryFunction.input>>=
+)set break resume
+)sys rm -f ElementaryFunction.output
+)spool ElementaryFunction.output
+)set message test on
+)set message auto off
+)clear all
+
+--S 1 of 32
+)trace EF
+--R 
+--R 
+--R   Parameterized constructors traced:
+--R      EF
+--E 1
+
+--S 2 of 32
+D(cos(3*x+6*y),x)
+--I 
+--I1<enter ElementaryFunction.cos,64 : ((1 #<vector 0941ef18> (1 0 . 6) (0 1 #<vector 0941eee0> (1 0 . 3))) 0 . 1)
+--I 1<enter ElementaryFunction.iicos,154 : ((1 #<vector 0941ef18> (1 0 . 6) (0 1 #<vector 0941eee0> (1 0 . 3))) 0 . 1)
+--I  1<enter ElementaryFunction.iisqrt2,58 : 
+--I  1>exit  ElementaryFunction.iisqrt2,58 : ((1 #<vector 0917aab8> (1 0 . 1)) 0 . 1)
+--I  1<enter ElementaryFunction.iisqrt3,59 : 
+--I  1>exit  ElementaryFunction.iisqrt3,59 : ((1 #<vector 0917a1dc> (1 0 . 1)) 0 . 1)
+--I  1<enter ElementaryFunction.specialTrigs,116 : ((1 #<vector 0941ef18> (1 0 . 6) (0 1 #<vector 0941eee0> (1 0 . 3))) 0 . 1)\((((0 . 1) 0 . 1)) (((0 . -1) 0 . 1)) (((0 . 0) 0 . 1)) (((0 . 0) 0 . 1)) (((0 . 1) 0 . 2)) (((0 . -1) 0 . 2)) (((0 . -1) 0 . 2)) (((0 . 1) 0 . 2)) (((1 #<vector 0917aab8> (1 0 . 1)) 0 . 2)) (((1 #<vector 0917aab8> (1 0 . -1)) 0 . 2)) (((1 #<vector 0917aab8> (1 0 . -1)) 0 . 2)) (((1 #<vector 0917aab8> (1 0 . 1)) 0 . 2)) (((1 #<vector 0917a1dc> (1 0 . 1)) 0 . 2)) (((1 #<vector 0917a1dc> (1 0 . -1)) 0 . 2)) (((1 #<vector 0917a1dc> (1 0 . -1)) 0 . 2)) (((1 #<vector 0917a1dc> (1 0 . 1)) 0 . 2)))
+--I   1<enter ElementaryFunction.pi,46 : 
+--I   1>exit  ElementaryFunction.pi,46 : ((1 #<vector 090c3a64> (1 0 . 1)) 0 . 1)
+--I  1>exit  ElementaryFunction.specialTrigs,116 : (1 . "failed")
+--I 1>exit  ElementaryFunction.iicos,154 : ((1 #<vector 0941ed74> (1 0 . 1)) 0 . 1)
+--I1>exit  ElementaryFunction.cos,64 : ((1 #<vector 0941ed74> (1 0 . 1)) 0 . 1)
+--I1<enter ElementaryFunction.sin,63 : ((1 #<vector 0941ef18> (1 0 . 6) (0 1 #<vector 0941eee0> (1 0 . 3))) 0 . 1)
+--I 1<enter ElementaryFunction.iisin,152 : ((1 #<vector 0941ef18> (1 0 . 6) (0 1 #<vector 0941eee0> (1 0 . 3))) 0 . 1)
+--I  1<enter ElementaryFunction.iisqrt2,58 : 
+--I  1>exit  ElementaryFunction.iisqrt2,58 : ((1 #<vector 0917aab8> (1 0 . 1)) 0 . 1)
+--I  1<enter ElementaryFunction.iisqrt3,59 : 
+--I  1>exit  ElementaryFunction.iisqrt3,59 : ((1 #<vector 0917a1dc> (1 0 . 1)) 0 . 1)
+--I  1<enter ElementaryFunction.specialTrigs,116 : ((1 #<vector 0941ef18> (1 0 . 6) (0 1 #<vector 0941eee0> (1 0 . 3))) 0 . 1)\((((0 . 0) 0 . 1)) (((0 . 0) 0 . 1)) (((0 . 1) 0 . 1)) (((0 . -1) 0 . 1)) (((1 #<vector 0917a1dc> (1 0 . 1)) 0 . 2)) (((1 #<vector 0917a1dc> (1 0 . 1)) 0 . 2)) (((1 #<vector 0917a1dc> (1 0 . -1)) 0 . 2)) (((1 #<vector 0917a1dc> (1 0 . -1)) 0 . 2)) (((1 #<vector 0917aab8> (1 0 . 1)) 0 . 2)) (((1 #<vector 0917aab8> (1 0 . 1)) 0 . 2)) (((1 #<vector 0917aab8> (1 0 . -1)) 0 . 2)) (((1 #<vector 0917aab8> (1 0 . -1)) 0 . 2)) (((0 . 1) 0 . 2)) (((0 . 1) 0 . 2)) (((0 . -1) 0 . 2)) (((0 . -1) 0 . 2)))
+--I   1<enter ElementaryFunction.pi,46 : 
+--I   1>exit  ElementaryFunction.pi,46 : ((1 #<vector 090c3a64> (1 0 . 1)) 0 . 1)
+--I  1>exit  ElementaryFunction.specialTrigs,116 : (1 . "failed")
+--I 1>exit  ElementaryFunction.iisin,152 : ((1 #<vector 0941eb60> (1 0 . 1)) 0 . 1)
+--I1>exit  ElementaryFunction.sin,63 : ((1 #<vector 0941eb60> (1 0 . 1)) 0 . 1)
+--R
+--R   (1)  - 3sin(6y + 3x)
+--R                                                     Type: Expression Integer
+--E 2
+
+--S 3 of 32
+)trace )off
+--R 
+--R
+--R   Nothing is traced now.
+--R
+--E 3
+
+
+--S 4 of 32
+D(sin(3*x+6*y),x)
+--R 
+--R
+--R   (2)  3cos(6y + 3x)
+--R                                                     Type: Expression Integer
+--E 4
+
+--S 5 of 32
+D(cos(3*x+6*y),x)
+--R 
+--R
+--R   (3)  - 3sin(6y + 3x)
+--R                                                     Type: Expression Integer
+--E 5
+
+@
+Note that both Mathematica and Maxima return this result as
+$3 sec(3*x+6*y)^2$ but Maple returns the same result as Axiom.
+They are equivalent results.
+<<ElementaryFunction.input>>=
+
+--S 6 of 32
+D(tan(3*x+6*y),x)
+--R 
+--R
+--R                     2
+--R   (4)  3tan(6y + 3x)  + 3
+--R                                                     Type: Expression Integer
+--E 6
+
+--S 7 of 32
+simplify ((3*tan(6*y+3*x)^2+3) - (3*sec(3*x+6*y)^2))
+--R 
+--R
+--R   (5)  0
+--R                                                     Type: Expression Integer
+--E 7
+
+@
+Note that Mathematica and Maxima return $-3 csc(3x+6y)^2$
+and Maple returns the same form as Axiom. They are equivalent.
+<<ElementaryFunction.input>>=
+
+--S 8 of 32
+D(cot(3*x+6*y),x)
+--R 
+--R
+--R                       2
+--R   (6)  - 3cot(6y + 3x)  - 3
+--R                                                     Type: Expression Integer
+--E 8
+
+--S 9 of 32
+simplify ((-3*cot(6*y+3*x)^2-3) -(-3*csc(3*x+6*y)^2))
+--R 
+--R
+--R   (7)  0
+--R                                                     Type: Expression Integer
+--E 9
+
+--S 10 of 32
+D(sec(3*x+6*y),x)
+--R 
+--R
+--R   (8)  3sec(6y + 3x)tan(6y + 3x)
+--R                                                     Type: Expression Integer
+--E 10
+
+--S 11 of 32
+D(csc(3*x+6*y),x)
+--R 
+--R
+--R   (9)  - 3cot(6y + 3x)csc(6y + 3x)
+--R                                                     Type: Expression Integer
+--E 11
+
+--S 12 of 32
+D(asin(3*x+6*y),x)
+--R 
+--R
+--R                      3
+--R   (10)  ---------------------------
+--R          +------------------------+
+--R          |     2             2
+--R         \|- 36y  - 36x y - 9x  + 1
+--R                                                     Type: Expression Integer
+--E 12
+
+--S 13 of 32
+D(acos(3*x+6*y),x)
+--R 
+--R
+--R                        3
+--R   (11)  - ---------------------------
+--R            +------------------------+
+--R            |     2             2
+--R           \|- 36y  - 36x y - 9x  + 1
+--R                                                     Type: Expression Integer
+--E 13
+
+--S 14 of 32
+D(atan(3*x+6*y),x)
+--R 
+--R
+--R                    3
+--R   (12)  ----------------------
+--R            2             2
+--R         36y  + 36x y + 9x  + 1
+--R                                                     Type: Expression Integer
+--E 14
+
+--S 15 of 32
+D(acot(3*x+6*y),x)
+--R 
+--R
+--R                      3
+--R   (13)  - ----------------------
+--R              2             2
+--R           36y  + 36x y + 9x  + 1
+--R                                                     Type: Expression Integer
+--E 15
+
+@
+Mathematica, Maple, and Maxima give:
+\[\frac{3}{(3*x+6*y)^2  \sqrt{1 - \frac{1}{(3*x+6*y)^2}}}\]
+which proceeds directly from the formula for the derivative of asec:
+\[\frac{d}{dx}arcsec(x) = \frac{1}{x\sqrt{x^2-1}}\]
+<<ElementaryFunction.input>>=
+
+--S 16 of 32
+D(asec(3*x+6*y),x)
+--R 
+--R
+--R                         1
+--R   (14)  ---------------------------------
+--R                  +----------------------+
+--R                  |   2             2
+--R         (2y + x)\|36y  + 36x y + 9x  - 1
+--R                                                     Type: Expression Integer
+--E 16
+
+@
+If we use the same formula for this example:
+\[\frac{1}{(3*x+6*y)\sqrt{(3*x+6*y)^2-1}} d(3*x+6*y)/dx\]
+<<ElementaryFunction.input>>=
+
+--S 17 of 32
+3/((3*x+6*y)*sqrt((3*x+6*y)^2-1))
+--R 
+--R
+--R                         1
+--R   (15)  ---------------------------------
+--R                  +----------------------+
+--R                  |   2             2
+--R         (2y + x)\|36y  + 36x y + 9x  - 1
+--R                                                     Type: Expression Integer
+--E 17
+
+@
+Mathematica, Maple, and Maxima give
+\[- \frac{3}{(3*x+6*y)^2  \sqrt{1 - \frac{1}{(3*x+6*y)^2}}}\]
+which is just the negative of the above result and we can see
+that the same analysis applies to explain the results.
+<<ElementaryFunction.input>>=
+
+--S 18 of 32
+D(acsc(3*x+6*y),x)
+--R 
+--R
+--R                           1
+--R   (16)  - ---------------------------------
+--R                    +----------------------+
+--R                    |   2             2
+--R           (2y + x)\|36y  + 36x y + 9x  - 1
+--R                                                     Type: Expression Integer
+--E 18
+
+--S 19 of 32
+D(sinh(3*x+6*y),x)
+--R 
+--R
+--R   (17)  3cosh(6y + 3x)
+--R                                                     Type: Expression Integer
+--E 19
+
+--S 20 of 32
+D(cosh(3*x+6*y),x)
+--R 
+--R
+--R   (18)  3sinh(6y + 3x)
+--R                                                     Type: Expression Integer
+--E 20
+
+@
+Mathematica and Maxima return
+\[3 sech(3x+6y)^2\]
+Maple returns Axiom's answer. Both are equivalent.
+<<ElementaryFunction.input>>=
+
+--S 21 of 32
+D(tanh(3*x+6*y),x)
+--R 
+--R
+--R                         2
+--R   (19)  - 3tanh(6y + 3x)  + 3
+--R                                                     Type: Expression Integer
+--E 21
+
+--S 22 of 32
+simplify ((-3*tanh(6*y+3*x)^2+3)-(3*sech(3*x+6*y)^2))
+--R 
+--R
+--R   (20)  0
+--R                                                     Type: Expression Integer
+--E 22
+
+Mathematica and Maxima return
+\[-3 csch(3*x+6*y)^2\]
+Maple returns Axiom's answer. Both are equivalent.
+<<ElementaryFunction.input>>=
+
+--S 23 of 32
+D(coth(3*x+6*y),x)
+--R 
+--R
+--R                         2
+--R   (21)  - 3coth(6y + 3x)  + 3
+--R                                                     Type: Expression Integer
+--E 23
+
+--S 24 of 32
+simplify ((-3*coth(6*y+3*x)^2+3) - (-3*csch(3*x+6*y)^2))
+--R 
+--R
+--R   (22)  0
+--R                                                     Type: Expression Integer
+--E 24
+
+--S 25 of 32
+D(sech(3*x+6*y),x)
+--R 
+--R
+--R   (23)  - 3sech(6y + 3x)tanh(6y + 3x)
+--R                                                     Type: Expression Integer
+--E 25
+
+--S 26 of 32
+D(csch(3*x+6*y),x)
+--R 
+--R
+--R   (24)  - 3coth(6y + 3x)csch(6y + 3x)
+--R                                                     Type: Expression Integer
+--E 26
+
+--S 27 of 32
+D(asinh(3*x+6*y),x)
+--R 
+--R
+--R                     3
+--R   (25)  -------------------------
+--R          +----------------------+
+--R          |   2             2
+--R         \|36y  + 36x y + 9x  + 1
+--R                                                     Type: Expression Integer
+--E 27
+
+@
+Mathematica and Maple show
+\[\frac{3}{\sqrt{-1+3*x+6*y}\sqrt{1+3*x+6*y}}\]
+Maxima gives Axiom's answer. Both are equivalent, just factored forms.
+<<ElementaryFunction.input>>=
+
+--S 28 of 32
+D(acosh(3*x+6*y),x)
+--R 
+--R
+--R                     3
+--R   (26)  -------------------------
+--R          +----------------------+
+--R          |   2             2
+--R         \|36y  + 36x y + 9x  - 1
+--R                                                     Type: Expression Integer
+--E 28
+
+--S 29 of 32
+D(atanh(3*x+6*y),x)
+--R 
+--R
+--R                      3
+--R   (27)  - ----------------------
+--R              2             2
+--R           36y  + 36x y + 9x  - 1
+--R                                                     Type: Expression Integer
+--E 29
+
+--S 30 of 32
+D(acoth(3*x+6*y),x)
+--R 
+--R
+--R                      3
+--R   (28)  - ----------------------
+--R              2             2
+--R           36y  + 36x y + 9x  - 1
+--R                                                     Type: Expression Integer
+--E 30
+
+@
+Mathematica gives
+\[- \frac{3}{(3x+6y)\sqrt{\frac{1-3x-6y}{1_3x+6y}}(1+3x+6y)}\]
+Maxima gives
+\[- \frac{3}{(6y+3x)^2\sqrt{\frac{1}{(6y+3x)^2}-1}}\]
+Maple gives
+\[- \frac{3}{(3x+6y)^2 \sqrt{\frac{1}{3x+6y}-1} \sqrt{\frac{1}{3x+6y}+1}}\]
+
+Axiom cannot simplify these differences to zero but Maxima does which
+shows they are all equivalent answers.
+<<ElementaryFunction.input>>=
+
+--S 31 of 32
+D(asech(3*x+6*y),x)
+--R 
+--R
+--R                            1
+--R   (29)  - -----------------------------------
+--R                    +------------------------+
+--R                    |     2             2
+--R           (2y + x)\|- 36y  - 36x y - 9x  + 1
+--R                                                     Type: Expression Integer
+--E 31
+
+@
+Mathematica, Maple, and Maxima all generate the answer
+\[- \frac{3}{(3x+6y)^2 \sqrt{1+\frac{1}{(3x+6y)^2}}} \]
+
+Axiom cannot simplify these differences to zero but Maxima does which
+shows they are all equivalent answers.
+<<ElementaryFunction.input>>=
+
+--S 32 of 32
+D(acsch(3*x+6*y),x)
+--R 
+--R
+--R                           1
+--R   (30)  - ---------------------------------
+--R                    +----------------------+
+--R                    |   2             2
+--R           (2y + x)\|36y  + 36x y + 9x  + 1
+--R                                                     Type: Expression Integer
+--E 32
+
+)spool
+)lisp (bye)
+@
+<<ElementaryFunction.help>>=
+====================================================================
+ElementaryFunction examples
+====================================================================
+
+D(sin(3*x+6*y),x)
+   3cos(6y + 3x)
+
+D(cos(3*x+6*y),x)
+   - 3sin(6y + 3x)
+
+D(tan(3*x+6*y),x)
+                2
+   3tan(6y + 3x)  + 3
+
+D(cot(3*x+6*y),x)
+                  2
+   - 3cot(6y + 3x)  - 3
+
+D(sec(3*x+6*y),x)
+   3sec(6y + 3x)tan(6y + 3x)
+
+D(csc(3*x+6*y),x)
+   - 3cot(6y + 3x)csc(6y + 3x)
+
+D(asin(3*x+6*y),x)
+                3
+   ---------------------------
+    +------------------------+
+    |     2             2
+   \|- 36y  - 36x y - 9x  + 1
+
+D(acos(3*x+6*y),x)
+                  3
+   - ---------------------------
+      +------------------------+
+      |     2             2
+     \|- 36y  - 36x y - 9x  + 1
+
+D(atan(3*x+6*y),x)
+               3
+    ----------------------
+       2             2
+    36y  + 36x y + 9x  + 1
+
+D(acot(3*x+6*y),x)
+                 3
+    - ----------------------
+         2             2
+      36y  + 36x y + 9x  + 1
+
+D(asec(3*x+6*y),x)
+                    1
+    ---------------------------------
+             +----------------------+
+             |   2             2
+    (2y + x)\|36y  + 36x y + 9x  - 1
+
+D(acsc(3*x+6*y),x)
+                      1
+    - ---------------------------------
+               +----------------------+
+               |   2             2
+      (2y + x)\|36y  + 36x y + 9x  - 1
+
+
+D(sinh(3*x+6*y),x)
+    3cosh(6y + 3x)
+
+D(cosh(3*x+6*y),x)
+    3sinh(6y + 3x)
+
+D(tanh(3*x+6*y),x)
+                    2
+    - 3tanh(6y + 3x)  + 3
+
+D(coth(3*x+6*y),x)
+                    2
+    - 3coth(6y + 3x)  + 3
+
+D(sech(3*x+6*y),x)
+    - 3sech(6y + 3x)tanh(6y + 3x)
+
+D(csch(3*x+6*y),x)
+    - 3coth(6y + 3x)csch(6y + 3x)
+
+D(asinh(3*x+6*y),x)
+                3
+    -------------------------
+     +----------------------+
+     |   2             2
+    \|36y  + 36x y + 9x  + 1
+
+D(acosh(3*x+6*y),x)
+                3
+    -------------------------
+     +----------------------+
+     |   2             2
+    \|36y  + 36x y + 9x  - 1
+
+D(atanh(3*x+6*y),x)
+                 3
+    - ----------------------
+         2             2
+      36y  + 36x y + 9x  - 1
+
+D(acoth(3*x+6*y),x)
+                 3
+    - ----------------------
+         2             2
+      36y  + 36x y + 9x  - 1
+
+D(asech(3*x+6*y),x)
+                       1
+    - -----------------------------------
+               +------------------------+
+               |     2             2
+      (2y + x)\|- 36y  - 36x y - 9x  + 1
+
+D(acsch(3*x+6*y),x)
+                      1
+    - ---------------------------------
+               +----------------------+
+               |   2             2
+      (2y + x)\|36y  + 36x y + 9x  + 1
+
+See Also:
+o )show ElementaryFunction
+
+@
 \pagehead{ElementaryFunction}{EF}
 \pagepic{ps/v104elementaryfunction.ps}{EF}{1.00}
 
@@ -16143,7 +16684,9 @@ ElementaryFunction(R, F): Exports == Implementation where
       iiasech x == iasech x
       iiacsch x == iacsch x
 
-    evaluate(oppi, ipi)$BasicOperatorFunctions1(F)
+    import BasicOperatorFunctions1(F)
+
+    evaluate(oppi, ipi)
     evaluate(oplog, iilog)
     evaluate(opexp, iiexp)
     evaluate(opsin, iisin)
@@ -16173,29 +16716,29 @@ ElementaryFunction(R, F): Exports == Implementation where
     derivative(opexp, exp)
     derivative(oplog, inv)
     derivative(opsin, cos)
-    derivative(opcos, - sin #1)
-    derivative(optan, 1 + tan(#1)**2)
-    derivative(opcot, - 1 - cot(#1)**2)
-    derivative(opsec, tan(#1) * sec(#1))
-    derivative(opcsc, - cot(#1) * csc(#1))
-    derivative(opasin, inv sqrt(1 - #1**2))
-    derivative(opacos, - inv sqrt(1 - #1**2))
-    derivative(opatan, inv(1 + #1**2))
-    derivative(opacot, - inv(1 + #1**2))
-    derivative(opasec, inv(#1 * sqrt(#1**2 - 1)))
-    derivative(opacsc, - inv(#1 * sqrt(#1**2 - 1)))
+    derivative(opcos,(x:F):F +-> - sin x)
+    derivative(optan,(x:F):F +-> 1 + tan(x)**2)
+    derivative(opcot,(x:F):F +-> - 1 - cot(x)**2)
+    derivative(opsec,(x:F):F +-> tan(x) * sec(x))
+    derivative(opcsc,(x:F):F +-> - cot(x) * csc(x))
+    derivative(opasin,(x:F):F +-> inv sqrt(1 - x**2))
+    derivative(opacos,(x:F):F +-> - inv sqrt(1 - x**2))
+    derivative(opatan,(x:F):F +-> inv(1 + x**2))
+    derivative(opacot,(x:F):F +-> - inv(1 + x**2))
+    derivative(opasec,(x:F):F +-> inv(x * sqrt(x**2 - 1)))
+    derivative(opacsc,(x:F):F +-> - inv(x * sqrt(x**2 - 1)))
     derivative(opsinh, cosh)
     derivative(opcosh, sinh)
-    derivative(optanh, 1 - tanh(#1)**2)
-    derivative(opcoth, 1 - coth(#1)**2)
-    derivative(opsech, - tanh(#1) * sech(#1))
-    derivative(opcsch, - coth(#1) * csch(#1))
-    derivative(opasinh, inv sqrt(1 + #1**2))
-    derivative(opacosh, inv sqrt(#1**2 - 1))
-    derivative(opatanh, inv(1 - #1**2))
-    derivative(opacoth, inv(1 - #1**2))
-    derivative(opasech, - inv(#1 * sqrt(1 - #1**2)))
-    derivative(opacsch, - inv(#1 * sqrt(1 + #1**2)))
+    derivative(optanh,(x:F):F +-> 1 - tanh(x)**2)
+    derivative(opcoth,(x:F):F +-> 1 - coth(x)**2)
+    derivative(opsech,(x:F):F +-> - tanh(x) * sech(x))
+    derivative(opcsch,(x:F):F +-> - coth(x) * csch(x))
+    derivative(opasinh,(x:F):F +-> inv sqrt(1 + x**2))
+    derivative(opacosh,(x:F):F +-> inv sqrt(x**2 - 1))
+    derivative(opatanh,(x:F):F +-> inv(1 - x**2))
+    derivative(opacoth,(x:F):F +-> inv(1 - x**2))
+    derivative(opasech,(x:F):F +-> - inv(x * sqrt(1 - x**2)))
+    derivative(opacsch,(x:F):F +-> - inv(x * sqrt(1 + x**2)))
 
 @
 <<EF.dotabb>>=
diff --git a/changelog b/changelog
index 6a34a9a..45e78ce 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,6 @@
+20090418 tpd src/axiom-website/patches.html 20090418.01.tpd.patch
+20090418 tpd src/algebra/Makefile add help, regress for EF
+20090418 tpd books/bookvol10.4 convert EF to +-> notation
 20090417 tpd src/axiom-website/patches.html 20090417.02.tpd.patch
 20090417 tpd books/bookvol10.4 add +-> handling
 20090417 wxh src/interp/define.boot add +-> handling
diff --git a/src/algebra/Makefile.pamphlet b/src/algebra/Makefile.pamphlet
index 8af306b..7e922ae 100644
--- a/src/algebra/Makefile.pamphlet
+++ b/src/algebra/Makefile.pamphlet
@@ -16450,7 +16450,7 @@ SPADHELP=\
  ${HELP}/CycleIndicators.help        ${HELP}/DeRhamComplex.help \
  ${HELP}/DecimalExpansion.help       ${HELP}/Dequeue.help \
  ${HELP}/DistributedMultivariatePolynomial.help \
- ${HELP}/DoubleFloat.help \
+ ${HELP}/DoubleFloat.help            ${HELP}/ElementaryFunction.help \
  ${HELP}/EqTable.help                ${HELP}/Equation.help \
  ${HELP}/Expression.help \
  ${HELP}/EuclideanGroebnerBasisPackage.help \
@@ -16543,7 +16543,7 @@ REGRESS=\
  Complex.regress                ContinuedFraction.regress \
  CycleIndicators.regress        DeRhamComplex.regress \
  DecimalExpansion.regress       Dequeue.regress \
- DoubleFloat.regress \
+ DoubleFloat.regress            ElementaryFunction.regress \
  DistributedMultivariatePolynomial.regress \
  EqTable.regress                Equation.regress \
  Expression.regress \
@@ -16840,6 +16840,16 @@ ${HELP}/DoubleFloat.help: ${BOOKS}/bookvol10.3.pamphlet
             >${INPUT}/DoubleFloat.input
 	@echo "DoubleFloat (DFLOAT)" >>${HELPFILE}
 
+${HELP}/ElementaryFunction.help: ${BOOKS}/bookvol10.4.pamphlet
+	@echo 7018 create ElementaryFunction.help from \
+            ${BOOKS}/bookvol10.4.pamphlet
+	@${TANGLE} -R"ElementaryFunction.help" ${BOOKS}/bookvol10.4.pamphlet \
+            >${HELP}/ElementaryFunction.help
+	@cp ${HELP}/ElementaryFunction.help ${HELP}/EF.help
+	@${TANGLE} -R"ElementaryFunction.input" ${BOOKS}/bookvol10.4.pamphlet \
+            >${INPUT}/ElementaryFunction.input
+	@echo "ElementaryFunction (EF)" >>${HELPFILE}
+
 ${HELP}/EqTable.help: ${BOOKS}/bookvol10.3.pamphlet
 	@echo 7019 create EqTable.help from ${BOOKS}/bookvol10.3.pamphlet
 	@${TANGLE} -R"EqTable.help" ${BOOKS}/bookvol10.3.pamphlet \
diff --git a/src/axiom-website/patches.html b/src/axiom-website/patches.html
index 073e024..a2d878e 100644
--- a/src/axiom-website/patches.html
+++ b/src/axiom-website/patches.html
@@ -1098,5 +1098,7 @@ bookvol10.4 update bezier documentation<br/>
 bookvol10.4, 10.2 document binomial<br/>
 <a href="patches/20090417.02.wxh.patch">20090417.02.wxh.patch</a>
 compiler use waldek +-> syntax <br/>
+<a href="patches/20090418.01.tpd.patch">20090418.01.tpd.patch</a>
+bookvol10.4 convert EF to +-> syntax <br/>
  </body>
 </html>

\start
Date: Sat, 18 Apr 2009 20:18:03 -0500
From: Tim Daly
To: list
Subject: 20090418.02.tpd.patch (bookvol9 move portions of the compiler)

Move portions of the compiler to bookvol9

======================================================================
diff --git a/books/bookvol9.pamphlet b/books/bookvol9.pamphlet
index 662a1a7..8d14dd7 100644
--- a/books/bookvol9.pamphlet
+++ b/books/bookvol9.pamphlet
@@ -15,6 +15,17 @@
 \index{#1!defun}}
 
 %%
+%% defunsec marks a function definition and adds it to the index
+%% It assumes that the second argument is a section title.
+%%
+\newcommand{\defunsec}[2]{% e.g. \defunsec{functionname}{section title}
+\subsection{#2}%
+\label{#1}%
+\index{#1}%
+\index{defun!#1}%
+\index{#1!defun}}
+
+%%
 %% defmacro marks a macro definition and adds it to the index
 %%
 \newcommand{\defmacro}[1]{% e.g. \defmacro{functionname}
@@ -558,7 +569,7 @@ with a {\tt .lsp} file, the Lisp file is compiled and {\tt )library}
 is called. For Aldor, You must also have present a {\tt .asy}
 generated from the same source file.
 
-\defun{compileSpad2Cmd}{The Spad compiler top level function}
+\defunsec{compileSpad2Cmd}{The Spad compiler top level function}
 This is the old compiler.
 Assume we entered from the "compiler" function, so args is 
 a file with file extension .spad.
@@ -900,6 +911,36 @@ if \verb|$InteractiveMode| then use a null outputstream
   (compile-file fn)))
 
 @
+\defdollar{byConstructors}
+<<initvars>>=
+(defvar |$byConstructors| () "list of constructors to be compiled")
+
+@
+\defdollar{constructorsSeen}
+<<initvars>>=
+(defvar |$constructorsSeen| () "list of constructors found")
+
+@
+\defun{compilerDoit}{compilerDoit}
+<<defun compilerDoit>>=
+(defun |compilerDoit| (constructor fun)
+ (let (|$byConstructors| |$constructorsSeen|)
+ (declare (special |$byConstructors| |$constructorsSeen|))
+  (setq |$byConstructors| nil)
+  (setq |$constructorsSeen| nil)
+  (cond
+   ((equal fun '(|rf| |lib|))   (|/RQ,LIB|))
+   ((equal fun '(|rf| |nolib|)) (/rf))
+   ((equal fun '(|rq| |lib|))   (|/RQ,LIB|))
+   ((equal fun '(|rq| |nolib|)) (/rq))
+   ((equal fun '(|c| |lib|))
+    (setq |$byConstructors| (mapcar #'|opOf| constructor))
+    (|/RQ,LIB|)
+    (dolist (con |$byConstructors|)
+     (unless (|member| con |$constructorsSeen|)
+      (|sayBrightly| `(">>> Warning " |%b| ,con |%d| " was not found"))))))))
+
+@
 
 \chapter{Dangling references}
 \section{shell variables}
@@ -917,13 +958,11 @@ ALDORROOT
 
 \section{defined special variables}
 \begin{verbatim}
-$syscommands
-|$systemCommands|
 \end{verbatim}
 
 \section{undefined special variables}
 \begin{verbatim}
-|$asharpCmdlineFlags|
+|$asharpCmdlineFlags| 
 |$compileOnlyCertainItems| 
 $current-directory
 /editfile 
@@ -931,17 +970,20 @@ $current-directory
 |$InteractiveMode| 
 |$m| 
 |$ncConverse| 
-|$newcompMode| 
 |$newComp| 
+|$newcompMode| 
 |$newConlist|
 |$options|
 |$QuickCode| 
 |$QuickLet| 
 |$scanIfTrue| 
 |$sourceFileTypes| 
+*standard-output* 
+$syscommands
+|$systemCommands|
 \end{verbatim}
 
-\section{functions}
+\section{undefined functions}
 \begin{verbatim}
 |browserAutoloadOnceTrigger|
 |compilerDoit|
@@ -954,6 +996,7 @@ directory
 |fnameMake|
 |fnameReadable?|
 getenv
+|member|
 |namestring|
 nequal
 obey
@@ -965,6 +1008,7 @@ obey
 |pathnameName|
 |pathnameType|
 recompile-lib-file-if-necessary
+|sayBrightly|
 |sayKeyedMsg|
 |spadPrompt|
 |spad2AsTranslatorAutoloadOnceTrigger|
@@ -979,11 +1023,14 @@ strpos
 <<Compiler>>=
 (in-package "BOOT")
 
+<<initvars>>
+
 <<defun compileAsharpArchiveCmd>>
 <<defun compileAsharpCmd>>
 <<defun compileAsharpCmd1>>
 <<defun compileAsharpLispCmd>>
 <<defun compileFileQuietly>>
+<<defun compilerDoit>>
 <<defun compileSpad2Cmd>>
 <<defun compileSpadLispCmd>>
 
diff --git a/changelog b/changelog
index 45e78ce..99c01ad 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,5 @@
+20090418 tpd src/axiom-website/patches.html 20090418.02.tpd.patch
+20090418 tpd books/bookvol9 move portions of the compiler
 20090418 tpd src/axiom-website/patches.html 20090418.01.tpd.patch
 20090418 tpd src/algebra/Makefile add help, regress for EF
 20090418 tpd books/bookvol10.4 convert EF to +-> notation
diff --git a/src/axiom-website/patches.html b/src/axiom-website/patches.html
index a2d878e..a66659b 100644
--- a/src/axiom-website/patches.html
+++ b/src/axiom-website/patches.html
@@ -1100,5 +1100,7 @@ bookvol10.4, 10.2 document binomial<br/>
 compiler use waldek +-> syntax <br/>
 <a href="patches/20090418.01.tpd.patch">20090418.01.tpd.patch</a>
 bookvol10.4 convert EF to +-> syntax <br/>
+<a href="patches/20090418.02.tpd.patch">20090418.02.tpd.patch</a>
+bookvol9 move portions of the compiler <br/>
  </body>
 </html>

\start
Date: Sun, 19 Apr 2009 15:22:48 -0500
From: Tim Daly
To: list
Subject: 20090419.01.tpd.patch (bookvol9 move portions of the compiler)

Move more of the compiler to bookvol9
=======================================================================
diff --git a/books/bookvol9.pamphlet b/books/bookvol9.pamphlet
index 8d14dd7..c886fd6 100644
--- a/books/bookvol9.pamphlet
+++ b/books/bookvol9.pamphlet
@@ -569,6 +569,102 @@ with a {\tt .lsp} file, the Lisp file is compiled and {\tt )library}
 is called. For Aldor, You must also have present a {\tt .asy}
 generated from the same source file.
 
+\defunsec{compiler}{The top level compiler command}
+<<defun compiler>>=
+(defun |compiler| (args)
+ "The top level compiler command"
+ (let (|$newConlist| optlist optname optargs havenew haveold aft ef af af1)
+  (declare (special |$newConlist| |$options| /editfile))
+  (setq |$newConlist| nil)
+  (cond
+   ((and (null args) (null |$options|) (null /editfile))
+     (|helpSpad2Cmd| '(|compiler|)))
+   (t
+    (cond ((null args) (setq args (cons /editfile nil))))
+    (setq optlist '(|new| |old| |translate| |constructor|))
+    (setq havenew nil)
+    (setq haveold nil)
+    (do ((t0 |$options| (cdr t0)) (opt nil))
+        ((or (atom t0) 
+             (progn (setq opt (car t0)) nil)
+             (null (null (and havenew haveold))))
+          nil)
+     (setq optname (car opt))
+     (setq optargs (cdr opt))
+     (case (|selectOptionLC| optname optlist nil)
+      (|new|         (setq havenew t))
+      (|translate|   (setq haveold t))
+      (|constructor| (setq haveold t))
+      (|old|         (setq haveold t))))
+    (cond
+     ((and havenew haveold) (|throwKeyedMsg| 's2iz0081 nil))
+     (t
+      (setq af (|pathname| args))
+      (setq aft (|pathnameType| af))
+      (cond
+       ((or havenew (string= aft "as"))
+        (if (null (setq af1 ($findfile af '(|as|))))
+          (|throwKeyedMsg| 's2il0003 (cons (namestring af) nil))
+          (|compileAsharpCmd| (cons af1 nil))))
+       ((or haveold (string= aft "spad"))
+        (if (null (setq af1 ($findfile af '(|spad|))))
+           (|throwKeyedMsg| 's2il0003 (cons (namestring af) nil))
+           (|compileSpad2Cmd| (cons af1 nil))))
+       ((string= aft "lsp")
+        (if (null (setq af1 ($findfile af '(|lsp|))))
+          (|throwKeyedMsg| 's2il0003 (cons (namestring af) nil))
+          (|compileAsharpLispCmd| (cons af1 nil))))
+       ((string= aft "nrlib")
+        (if (null (setq af1 ($findfile af '(|nrlib|))))
+          (|throwKeyedMsg| 'S2IL0003 (cons (namestring af) nil))
+          (|compileSpadLispCmd| (cons af1 nil))))
+       ((string= aft "ao")
+        (if (null (setq af1 ($findfile af '(|ao|))))
+          (|throwKeyedMsg| 's2il0003 (cons (namestring af) nil))
+         (|compileAsharpCmd| (cons af1 nil))))
+       ((string= aft "al")
+        (if (null (setq af1 ($findfile af '(|al|))))
+          (|throwKeyedMsg| 's2il0003 (cons (namestring af) nil))
+          (|compileAsharpArchiveCmd| (cons af1 nil))))
+       (t
+        (setq af1 ($findfile af '(|as| |spad| |ao| |asy|)))
+        (cond
+         ((and af1 (string= (|pathnameType| af1) "as"))
+          (|compileAsharpCmd| (cons af1 nil)))
+         ((and af1 (string= (|pathnameType| af1) "ao"))
+          (|compileAsharpCmd| (cons af1 nil)))
+         ((and af1 (string= (|pathnameType| af1) "spad"))
+          (|compileSpad2Cmd| (cons af1 nil)))
+         ((and af1 (string= (|pathnameType| af1) "asy"))
+          (|compileAsharpArchiveCmd| (cons af1 nil)))
+         (t
+          (setq ef (|pathname| /editfile))
+          (setq ef (|mergePathnames| af ef))
+          (cond
+           ((boot-equal ef af) (|throwKeyedMsg| 's2iz0039 nil))
+           (t
+            (setq af ef)
+            (cond
+             ((string= (|pathnameType| af) "as")
+              (|compileAsharpCmd| args))
+             ((string= (|pathnameType| af) "ao")
+              (|compileAsharpCmd| args))
+             ((string= (|pathnameType| af) "spad")
+              (|compileSpad2Cmd| args))
+             (t
+              (setq af1 ($findfile af '(|as| |spad| |ao| |asy|)))
+              (cond
+               ((and af1 (string= (|pathnameType| af1) "as"))
+                 (|compileAsharpCmd| (cons af1 nil)))
+               ((and af1 (string= (|pathnameType| af1) "ao"))
+                 (|compileAsharpCmd| (cons af1 nil)))
+               ((and af1 (string= (|pathnameType| af1) "spad"))
+                 (|compileSpad2Cmd| (cons af1 nil)))
+               ((and af1 (string= (|pathnameType| af1) "asy"))
+                (|compileAsharpArchiveCmd| (cons af1 nil)))
+               (t (|throwKeyedMsg| 's2iz0039 nil)))))))))))))))))
+
+@
 \defunsec{compileSpad2Cmd}{The Spad compiler top level function}
 This is the old compiler.
 Assume we entered from the "compiler" function, so args is 
diff --git a/changelog b/changelog
index 99c01ad..3dbaa1e 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,5 @@
+20090419 tpd src/axiom-website/patches.html 20090419.01.tpd.patch
+20090419 tpd books/bookvol9 move portions of the compiler
 20090418 tpd src/axiom-website/patches.html 20090418.02.tpd.patch
 20090418 tpd books/bookvol9 move portions of the compiler
 20090418 tpd src/axiom-website/patches.html 20090418.01.tpd.patch
diff --git a/src/axiom-website/patches.html b/src/axiom-website/patches.html
index a66659b..f730fea 100644
--- a/src/axiom-website/patches.html
+++ b/src/axiom-website/patches.html
@@ -1102,5 +1102,7 @@ compiler use waldek +-> syntax <br/>
 bookvol10.4 convert EF to +-> syntax <br/>
 <a href="patches/20090418.02.tpd.patch">20090418.02.tpd.patch</a>
 bookvol9 move portions of the compiler <br/>
+<a href="patches/20090419.01.tpd.patch">20090419.01.tpd.patch</a>
+bookvol9 move portions of the compiler <br/>
  </body>
 </html>
diff --git a/src/interp/setq.lisp.pamphlet b/src/interp/setq.lisp.pamphlet
index 86bf635..11cb965 100644
--- a/src/interp/setq.lisp.pamphlet
+++ b/src/interp/setq.lisp.pamphlet
@@ -67,6 +67,10 @@
 (SETQ |$newConlist| nil)
 (SETQ |$createLocalLibDb| 't)
 
+;; These are duplicates of definitions in bookvol9
+
+(defvar |$byConstructors| () "list of constructors to be compiled")
+(defvar |$constructorsSeen| () "list of constructors found")
 
 ;; These were originally in SPAD LISP
 
@@ -193,11 +197,6 @@
 (SETQ $cacheAlist NIL)
 (SETQ $streamAlist NIL)
 
-;; following 2 variables are referenced by PREPARSE1
-
-(defvar |$byConstructors| () "list of constructors to be compiled")
-(defvar |$constructorsSeen| () "list of constructors found")
-
 ;; These are for the output routines in OUT BOOT
 
 (SETQ $LINELENGTH 77)

\start
Date: Sun, 19 Apr 2009 20:30:36 -0500
From: Tim Daly
To: list
Subject: 20090419.02.tpd.patch (bookvol10.3 convert FRAC to +-> syntax)

Convert FRAC to +-> syntax.
Add unittest4.input.pamphlet to regression test changes to FRAC

======================================================================
diff --git a/books/bookvol10.3.pamphlet b/books/bookvol10.3.pamphlet
index 569e470..49498e8 100644
--- a/books/bookvol10.3.pamphlet
+++ b/books/bookvol10.3.pamphlet
@@ -36434,6 +36434,7 @@ g :: FRAC COMPLEX INT
 --R             15
 --R                                               Type: Fraction Complex Integer
 --E 12
+
 )spool
 )lisp (bye)
 @
@@ -36897,14 +36898,14 @@ Fraction(S: IntegralDomain): QuotientFieldCategory S with
           zero? qq => pp
           zero? degree pp or zero? degree qq => 1
           denpp:="lcm"/[denom u for u in coefficients pp]
-          ppD:DP:=map(retract(#1*denpp),pp)
+          ppD:DP:=map(x+->retract(x*denpp),pp)
           denqq:="lcm"/[denom u for u in coefficients qq]
-          qqD:DP:=map(retract(#1*denqq),qq)
+          qqD:DP:=map(x+->retract(x*denqq),qq)
           g:=gcdPolynomial(ppD,qqD)
           zero? degree g => 1
 --          one? (lc:=leadingCoefficient g) => map(#1::%,g)
-          ((lc:=leadingCoefficient g) = 1) => map(#1::%,g)
-          map(#1 / lc,g)
+          ((lc:=leadingCoefficient g) = 1) => map(x+->x::%,g)
+          map(x+->x/lc,g)
 
     if (S has PolynomialFactorizationExplicit) then
        -- we'll let the solveLinearPolynomialEquations operator
@@ -36944,36 +36945,38 @@ Fraction(S: IntegralDomain): QuotientFieldCategory S with
        factorPolynomial(pp) ==
           zero? pp => 0
           denpp:="lcm"/[denom u for u in coefficients pp]
-          ppD:DP:=map(retract(#1*denpp),pp)
+          ppD:DP:=map(x+->retract(x*denpp),pp)
           ff:=factorPolynomial ppD
           den1:%:=denpp::%
           lfact:List Record(flg:Union("nil", "sqfr", "irred", "prime"),
                              fctr:QFP, xpnt:Integer)
           lfact:= [[w.flg,
-                    if leadingCoefficient w.fctr =1 then map(#1::%,w.fctr)
+                    if leadingCoefficient w.fctr =1 then 
+                           map(x+->x::%,w.fctr)
                     else (lc:=(leadingCoefficient w.fctr)::%;
                            den1:=den1/lc**w.xpnt;
-                            map(#1::%/lc,w.fctr)),
+                            map(x+->x::%/lc,w.fctr)),
                    w.xpnt] for w in factorList ff]
-          makeFR(map(#1::%/den1,unit(ff)),lfact)
+          makeFR(map(x+->x::%/den1,unit(ff)),lfact)
        factorSquareFreePolynomial(pp) ==
           zero? pp => 0
           degree pp = 0 => makeFR(pp,empty())
           lcpp:=leadingCoefficient pp
           pp:=pp/lcpp
           denpp:="lcm"/[denom u for u in coefficients pp]
-          ppD:DP:=map(retract(#1*denpp),pp)
+          ppD:DP:=map(x+->retract(x*denpp),pp)
           ff:=factorSquareFreePolynomial ppD
           den1:%:=denpp::%/lcpp
           lfact:List Record(flg:Union("nil", "sqfr", "irred", "prime"),
                              fctr:QFP, xpnt:Integer)
           lfact:= [[w.flg,
-                    if leadingCoefficient w.fctr =1 then map(#1::%,w.fctr)
+                    if leadingCoefficient w.fctr =1 then 
+                           map(x+->x::%,w.fctr)
                     else (lc:=(leadingCoefficient w.fctr)::%;
                            den1:=den1/lc**w.xpnt;
-                            map(#1::%/lc,w.fctr)),
+                            map(x+->x::%/lc,w.fctr)),
                    w.xpnt] for w in factorList ff]
-          makeFR(map(#1::%/den1,unit(ff)),lfact)
+          makeFR(map(x+->x::%/den1,unit(ff)),lfact)
 
 @
 <<FRAC.dotabb>>=
diff --git a/changelog b/changelog
index 3dbaa1e..6a41191 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,7 @@
+20090419 tpd src/axiom-website/patches.html 20090419.02.tpd.patch
+20090419 tpd books/bookvol10.3 convert FRAC to +-> notation
+20090419 tpd src/input/Makefile add FRAC regression test
+20090419 tpd src/input/unittest4.input add FRAC regression test
 20090419 tpd src/axiom-website/patches.html 20090419.01.tpd.patch
 20090419 tpd books/bookvol9 move portions of the compiler
 20090418 tpd src/axiom-website/patches.html 20090418.02.tpd.patch
diff --git a/src/axiom-website/patches.html b/src/axiom-website/patches.html
index f730fea..8858d1b 100644
--- a/src/axiom-website/patches.html
+++ b/src/axiom-website/patches.html
@@ -1104,5 +1104,7 @@ bookvol10.4 convert EF to +-> syntax <br/>
 bookvol9 move portions of the compiler <br/>
 <a href="patches/20090419.01.tpd.patch">20090419.01.tpd.patch</a>
 bookvol9 move portions of the compiler <br/>
+<a href="patches/20090419.02.tpd.patch">20090419.02.tpd.patch</a>
+bookvol10.3 convert FRAC to +-> syntax <br/>
  </body>
 </html>
diff --git a/src/input/Makefile.pamphlet b/src/input/Makefile.pamphlet
index 8cfea16..4a823b5 100644
--- a/src/input/Makefile.pamphlet
+++ b/src/input/Makefile.pamphlet
@@ -380,7 +380,7 @@ REGRES= algaggr.regress algbrbf.regress  algfacob.regress alist.regress  \
     textfile.regress  torus.regress \
     triglim.regress   tsetcatvermeer.regress            tutchap1.regress \
     typetower.regress void.regress      uniseg.regress \
-    unittest1.regress unittest2.regress unittest3.regress
+    unittest1.regress unittest2.regress unittest3.regress unittest4.regress
 
 IN=     ${SRC}/input
 MID=	${INT}/input
@@ -690,7 +690,7 @@ FILES= ${OUT}/algaggr.input  ${OUT}/algbrbf.input    ${OUT}/algfacob.input \
        ${OUT}/tutchap4.input ${OUT}/tutchap67.input  ${OUT}/typetower.input \
        ${OUT}/typo.input     \
        ${OUT}/uniseg.input   ${OUT}/up.input         ${OUT}/unittest1.input \
-       ${OUT}/unittest2.input ${OUT}/unittest3.input \
+       ${OUT}/unittest2.input ${OUT}/unittest3.input ${OUT}/unittest4.input \
        ${OUT}/vector.input   ${OUT}/vectors.input    ${OUT}/viewdef.input \
        ${OUT}/void.input     ${OUT}/wiggle.input   \
        ${OUT}/wutset.input \
diff --git a/src/input/unittest4.input.pamphlet b/src/input/unittest4.input.pamphlet
new file mode 100644
index 0000000..0bf8616
--- /dev/null
+++ b/src/input/unittest4.input.pamphlet
@@ -0,0 +1,64 @@
+\documentclass{article}
+\usepackage{axiom}
+\begin{document}
+\title{\$SPAD/src/input unittest4.input}
+\author{Timothy Daly}
+\maketitle
+\begin{abstract}
+Unit test the $+->$ syntax changes
+\end{abstract}
+\eject
+\tableofcontents
+\eject
+<<*>>=
+)set break resume
+)sys rm -f unittest4.output
+)spool unittest4.output
+)set mes auto off
+)clear all
+
+@
+Unit tests of $+->$ syntax change to gcdPolynomial in FRAC
+<<*>>=
+
+--S 1 of 4
+gcdPolynomial((3*x^2+6)::SUP(FRAC(INT)),(9*x^3+12)::SUP(FRAC(INT)))$FRAC(POLY(INT))
+--E 1
+
+--S 2 of 4
+)lisp (trace |FRAC;gcdPolynomial;3Sup;35!0|)
+--R 
+--RValue = (|FRAC;gcdPolynomial;3Sup;35!0|)
+--E 2
+
+--S 3 of 4
+)lisp (trace |FRAC;gcdPolynomial;3Sup;35!1|)
+--R 
+--RValue = (|FRAC;gcdPolynomial;3Sup;35!1|)
+--E 3
+
+--S 4 of 4
+gcdPolynomial((3*x^2+6)::SUP(FRAC(INT)),(9*x^3+12)::SUP(FRAC(INT)))$FRAC(POLY(INT))
+--R 
+--I  1> (|FRAC;gcdPolynomial;3Sup;35!0| ((0 . 3) 0 . 1) #<vector 0918c524>)
+--R  <1 (|FRAC;gcdPolynomial;3Sup;35!0| (0 . 3))
+--I  1> (|FRAC;gcdPolynomial;3Sup;35!0| ((0 . 6) 0 . 1) #<vector 0918c524>)
+--R  <1 (|FRAC;gcdPolynomial;3Sup;35!0| (0 . 6))
+--I  1> (|FRAC;gcdPolynomial;3Sup;35!1| ((0 . 9) 0 . 1) #<vector 0918c508>)
+--R  <1 (|FRAC;gcdPolynomial;3Sup;35!1| (0 . 9))
+--I  1> (|FRAC;gcdPolynomial;3Sup;35!1| ((0 . 12) 0 . 1) #<vector 0918c508>)
+--R  <1 (|FRAC;gcdPolynomial;3Sup;35!1| (0 . 12))
+--R
+--R   (2)  1
+--R                 Type: SparseUnivariatePolynomial Fraction Polynomial Integer
+--E 4
+
+)spool
+)lisp (bye)
+ 
+@
+\eject
+\begin{thebibliography}{99}
+\bibitem{1} nothing
+\end{thebibliography}
+\end{document}

\start
Date: Tue, 28 Apr 2009 04:52:42 -0500
From: Gabriel Dos Reis
To: list
Subject: PLMMS 2009: Last CFP


		  The ACM SIGSAM 2009 International
		Workshop on Programming Languages for
		    Mechanized Mathematics Systems
			      PLMMS 2009

		   Munich, Germany; August 21, 2009
		     http://plmms09.cse.tamu.edu/

			   CALL FOR PAPERS


The ACM SIGSAM 2009 International Workshop on Programming Languages
for Mechanized Mathematics Systems will be co-located with TPHOLs 2009.

Important Dates

  * Abstract submission : May 11, 2009 (Apia, Samoa time)
  * Submission deadline: May 18, 2009 (Apia, Samoa time)
  * Author notification:  June 22, 2009
  * Camera ready papers: July 10, 2009
  * Workshop: August 21, 2009

General Information

The scope of this workshop is at the intersection of programming
languages (PL) and mechanized mathematics systems (MMS). The latter
category subsumes present-day computer algebra systems (CAS),
interactive proof assistants (PA), and automated theorem provers
(ATP), all heading towards fully integrated mechanized mathematical
assistants. Areas of interest include all aspects of PL and MMS that
meet in the following topics, but not limited to:

  * Dedicated input languages for MMS: covers all aspects of languages
    intended for the user to deploy or extend the system, both
    algorithmic and declarative ones. Typical examples are tactic
    definition languages such as Ltac in Coq, mathematical proof
    languages as in Mizar or Isar, or specialized programming
    languages built into CA systems.

  * Mathematical modeling languages used for programming: covers the
    relation of logical descriptions vs. algorithmic content. For
    instance the logic of ACL2 extends a version of Lisp, that of Coq
    is close to Haskell, and some portions of HOL are similar to ML
    and Haskell, while Maple tries to do both simultaneously. Such
    mathematical languages offer rich specification capabilities,
    which are rarely available in regular programming languages. How
    can programming benefit from mathematical concepts, without
    limiting mathematics to the computational world view?

  * Programming languages with mathematical specifications: covers
    advanced mathematical concepts in programming languages that
    improve the expressive power of functional specifications, type
    systems, module systems etc. Programming languages with dependent
    types are of particular interest here, as is intentionality vs
    extensionality.

  * Language elements for program verification: covers specific means
    built into a language to facilitate correctness proofs using
    MMS. For example, logical annotations within programs may be
    turned into verification conditions to be solved in a proof
    assistant eventually. How need MMS and PL to be improved to make
    this work conveniently and in a mathematically appealing way?

These issues have a very colorful history. Many PL innovations first
appeared in either CA or proof systems first, before migrating into
more mainstream programming languages.  This workshop is an
opportunity  to present the latest innovations in MMS design that may
be relevant to future programming languages, or conversely novel PL
principles that improve upon implementation and deployment of MMS.
Why are all the languages of mainstream CA systems untyped?  Why
are the (strongly typed) proof assistants so much harder to use than
a typical CAS?  What forms of polymorphism exist in mathematics?
What forms of dependent types may be used in mathematical modeling?
How can MMS regain the upper hand on issues of "genericity" and
"modularity"?  What are the biggest barriers to using a more
mainstream language as a host language for a CAS or PA/ATP?

PLMMS 2007 was held as a satellite event of, and PLMMS 2008 was
a CICM 2008 workshop.

Submission Details

   Submitted papers should be in portable document format (PDF),
   formatted using the ACM SIGPLAN style guidelines
   (http://www.acm.org/sigs/sigplan/authorInformation.htm). The length
   is restricted to 10 pages, and the font size 9pt. Each submission
   must adhere to SIGPLAN's republication policy, as explained on the
   web. Violation risks summary rejection of the offending submission.

  Papers are exclusively submitted via EasyChair

          http://www.easychair.org/conferences?conf=plmms09

   We expect that at least one author of each accepted paper attends
   PLMMS 2009 and presents her or his paper.

   Accepted papers will appear in the ACM Digital Library.

Links

  * http://plmms09.cse.tamu.edu/, the PLMMS 2009 workshop web site
  * http://tphols.in.tum.de/, the THOPLs 2009 conference web site

Program Committee

  * Clemens Ballarin, aicas GmbH
  * Gabriel Dos Reis, Texas A&M University (Co-Chair)
  * Jean-Christophe Filli=E2tre, CNRS Universit=E9 Paris Sud
  * Predrag Janicic, University of Belgrade
  * Jaakko J=E4rvi, Texas A&M University
  * Florina Piroi, Johannes Kepler University
  * Laurent Th=E9ry, INRIA Sophia Antipolis (Co-Chair)
  * Makarius Wenzel, Technische Universit=E4t M=FCnchen

\start
Date: Tue, 28 Apr 2009 06:55:48 -0500
From: Tim Daly
To: list
Subject: 20090427.01.tpd.patch (tangle.lisp lisp version of tangle function)

This is a major transition step in development. The tangle.lisp contains
all of the code necessary to extract the code chunks from a pamphlet file.
When using the latex syntax there is no need for a weave function since
the pamphlet file is pure latex. This will greatly simplify the system
builds since several changes are in the pipeline:
 
o) Rewrite the pamphlet files into latex syntax
   This removes the need to use weave anywhere in the system

o) Integrate the tangle function into the )co, )read, and other Axiom cmds
   This means that Axiom will now understand, and be able to directly 
   manipulate pamphlet files in their native form. The compiler will be
   able to compile directly and the interpreter can read directly.

o) Remove noweb from the makefiles.
   This greatly simplifies the makefile and removes a complete layer
   of build processing

o) Remove noweb
   The .tgz file will eventually be removed and no longer bundled with
   the system.
  

This code works with both noweb syntax, as in
    <<chunkname>>=
    <<achunk>>
    @

and latex syntax, as in

    \begin{chunk}{chunkname}
    \getchunk{achunk}
    \end{chunk}

Details of the prolog necessary to use the latex syntax is in the
documentation. 

========================================================================
diff --git a/books/tangle.lisp b/books/tangle.lisp
new file mode 100644
index 0000000..0f1f29b
--- /dev/null
+++ b/books/tangle.lisp
@@ -0,0 +1,353 @@
+;  0 AUTHOR and LICENSE
+;  1 ABSTRACT
+;  2 THE LATEX SUPPORT CODE
+;  3 GLOBALS
+;  4 THE TANGLE COMMAND
+;  5 THE TANGLE FUNCTION
+;  6 GCL-READ-FILE (aka read-sequence)
+;  7 GCL-HASHCHUNKS
+;  8 GCL-EXPAND
+;  9 ISCHUNK-LATEX
+; 10 ISCHUNK-NOWEB
+
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; 0 AUTHOR and LICENSE
+
+;;; Timothy Daly (Tim Daly) 
+;;; License: Public Domain
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; 1 ABSTRACT
+
+;;; This program will extract the source code from a literate file
+
+;;; A literate lisp file contains a mixture of latex and lisp sources code.
+;;; The file is intended to be in one of two formats, either in latex
+;;; format or, for legacy reasons, in noweb format.
+
+;;; Latex format files defines a newenvironment so that code chunks
+;;; can be delimited by \begin{chunk}{name} .... \end{chunk} blocks
+;;; This is supported by the following latex code.
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; 2 THE LATEX SUPPORT CODE
+
+;;; The verbatim package quotes everything within its grasp and is used to
+;;; hide and quote the source code during latex formatting. The verbatim
+;;; environment is built in but the package form lets us use it in our
+;;; chunk environment and it lets us change the font.
+;;;
+;;; \usepackage{verbatim}
+;;; 
+;;; Make the verbatim font smaller
+;;; Note that we have to temporarily change the '@' to be just a character
+;;; because the \verbatim@font name uses it as a character
+;;;
+;;; \chardef\atcode=\catcode`\@
+;;; \catcode`\@=11
+;;; \renewcommand{\verbatim@font}{\ttfamily\small}
+;;; \catcode`\@=\atcode
+
+;;; This declares a new environment named ``chunk'' which has one
+;;; argument that is the name of the chunk. All code needs to live
+;;; between the \begin{chunk}{name} and the \end{chunk}
+;;; The ``name'' is used to define the chunk.
+;;; Reuse of the same chunk name later concatenates the chunks
+
+;;; For those of you who can't read latex this says:
+;;; Make a new environment named chunk with one argument
+;;; The first block is the code for the \begin{chunk}{name}
+;;; The second block is the code for the \end{chunk}
+;;; The % is the latex comment character
+
+;;; We have two alternate markers, a lightweight one using dashes
+;;; and a heavyweight one using the \begin and \end syntax
+;;; You can choose either one by changing the comment char in column 1
+ 
+;;; \newenvironment{chunk}[1]{%   we need the chunkname as an argument
+;;; {\ }\newline\noindent%                    make sure we are in column 1
+;;; %{\small $\backslash{}$begin\{chunk\}\{{\bf #1}\}}% alternate begin mark
+;;; \hbox{\hskip 2.0cm}{\bf --- #1 ---}%      mark the beginning
+;;; \verbatim}%                               say exactly what we see
+;;; {\endverbatim%                            process \end{chunk}
+;;; \par{}%                                   we add a newline
+;;; \noindent{}%                              start in column 1
+;;; \hbox{\hskip 2.0cm}{\bf ----------}%      mark the end
+;;; %$\backslash{}$end\{chunk\}%              alternate end mark (commented)
+;;; \par%                                     and a newline
+;;; \normalsize\noindent}%                    and return to the document
+
+;;; This declares the place where we want to expand a chunk
+;;; Technically we don't need this because a getchunk must always
+;;; be properly nested within a chunk and will be verbatim.
+
+;;; \providecommand{\getchunk}[1]{%
+;;; \noindent%
+;;; {\small $\backslash{}$begin\{chunk\}\{{\bf #1}\}}}% mark the reference
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; 3 GLOBALS
+
+;;; The *chunkhash* variable will hold the hash table of chunks.
+;;;
+;;; Every time we find a \begin{chunk}{name} ... \end{chunk} we look
+;;; in this hash table. If the ``name'' is not found we add it.
+;;; If the name is found, we concatentate it to the existing chunk.
+
+(defvar *chunkhash* nil "this hash table contains the chunks found")
+
+;;; This shows critical information for debugging purposes
+(defvar *chunknoise* nil "turn this on to debug internals")
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; 4 THE TANGLE COMMAND
+
+;;;
+;;; The tangle command does all of the work of extracting code.
+;;; For legacy reasons we support 2 syntax forms, latex and noweb
+;;;
+;;; In latex form the code blocks are delimited by
+;;;     \begin{chunk}{name}
+;;;     ... (code for name)...
+;;;     \end{chunk}
+;;;
+;;; and referenced by \getchunk{name} which gets replaced by the code
+
+;;; In noweb form the code blocks are delimited by
+;;;     <<name>>=
+;;;     ... (code for name)...
+;;;     @
+;;;
+;;; and referenced by <<name>> which gets replaced by the code
+
+:;; There are several ways to invoke the tangle function. 
+;;;
+;;; The first argument is always the file from which to extract code
+;;;
+;;; The second argument is the name of the chunk to extract
+;;;    If the name starts with < then we assume noweb format as in:
+;;;        (tangle "clweb.pamphlet" "<<name>>")  <== noweb syntax
+;;;    Otherwise we assume latex format as in:
+;;;        (tangle "clweb.pamphlet "name")       <== latex syntax (default)
+;;;
+;;; The standard noweb chunk name is ``*'' but any name can be used.
+;;;
+;;; The third arument is the name of an output file:
+;;;  (tangle "clweb.pamphlet" "clweb.chunk" "clweb.spadfile")
+
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; 5 THE TANGLE FUNCTION
+
+;;; This routine looks at the first character of the chunk name.
+;;; If it is a $<$ character then we assume noweb syntax otherwise
+;;; we assume latex syntax.
+;;;
+;;; We initialize the chunk hashtable
+;;; then read the file and store each chunk
+;;; then we recursively expand the ``topchunk'' to the output stream
+
+(defun tangle (filename topchunk &optional file)
+ "Extract the source code from a pamphlet file"
+ (let ((noweb? (char= (schar topchunk 0) #\<)))
+  (setq *chunkhash* (make-hash-table :test #'equal))
+  (when *chunknoise* (format t "PASS 1~%"))
+  (gcl-hashchunks (gcl-read-file filename) noweb?)
+  (when *chunknoise* (format t "PASS 2~%"))
+  (if (and file (stringp file))
+   (with-open-file (out file :direction :output)
+     (gcl-expand topchunk noweb? out))
+   (gcl-expand topchunk noweb? t))))
+
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; 6 GCL-READ-FILE (aka read-sequence)
+
+;;; This would be read-sequence in ansi common lisp. Here we read
+;;; a line, push it onto a stack and then reverse the stack. The
+;;; net effect is a list of strings, one per line of the file.
+
+(defun gcl-read-file (streamname)
+ "Implement read-sequence in GCL"
+ (let (result)
+  (with-open-file (stream (open streamname))
+   (do (line eof)
+      ((eq line 'done) (nreverse result))
+    (multiple-value-setq (line eof) (read-line stream nil 'done)) 
+    (unless (eq line 'done) (push line result))))))
+
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; 7 GCL-HASHCHUNKS
+
+;;; gcl-hashchunks gathers the chunks and puts them in the hash table
+;;;
+;;; if we find the chunk syntax and it is a
+;;;   define ==> parse the chunkname and start gathering lines onto a stack
+;;;   end    ==> push the completed list of lines into a stack of chunks
+;;;              already in the hash table
+;;;   otherwise ==> if we are gathering, push the line onto the stack
+
+;;; a hash table entry is a list of lists such as
+;;; (("6" "5") ("4" "3") ("2" "1"))
+;;; each of the sublists is a set of lines in reverse (stack) order
+;;; each sublist is a single chunk of lines. 
+;;; there is a new sublist for each reuse of the same chunkname
+
+;;; If the noweb argument is non-nil we assume that we are parsing
+;;; using the noweb syntax. A nil argument implies latex syntax.
+
+(defun gcl-hashchunks (lines noweb)
+ "Gather all of the chunks and put them into a hash table"
+ (let (type name chunkname oldchunks chunk gather)
+  (dolist (line lines)
+   (if noweb
+    (multiple-value-setq (type name) (ischunk-noweb line))
+    (multiple-value-setq (type name) (ischunk-latex line)))
+   (cond
+    ((eq type 'define)
+      (when *chunknoise* (format t "DEFINE name=~a~%" name))
+      (setq chunkname name)
+      (setq gather t))
+    ((eq type 'end)
+      (when *chunknoise* 
+       (format t "END name= ~a chunk=~s~%" chunkname (reverse chunk)))
+      (setq oldchunks (gethash chunkname *chunkhash*))
+      (setf (gethash chunkname *chunkhash*) (push chunk oldchunks))
+      (setq gather nil)
+      (setq chunk nil))
+    (gather ;; collect lines into the chunk while gather is true
+      (push line chunk))))))
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; 8 GCL-EXPAND
+
+;;; gcl-expand will recursively expand chunks in the hash table
+;;; 
+;;; latex chunk names are just the chunkname itself e.g. chunkname
+;;; noweb chunk names include the delimiters, e.g: <<chunkname>>
+
+;;; a hash table entry is a list of lists such as
+;;; (("6" "5") ("4" "3") ("2" "1"))
+;;; so to process the chunk we reverse the main list and
+;;; for each sublist we reverse the sublist and process the lines
+
+;;; if a chunk name reference is encountered in a line we call expand
+;;; recursively to expand the inner chunkname.
+
+(defun gcl-expand (chunk noweb? file)
+ "Recursively expand a chunk into the output stream"
+ (let ((chunklist (gethash chunk *chunkhash*)) type name)
+  (dolist (chunk (reverse chunklist))
+   (dolist (line (reverse chunk))
+    (if noweb?
+     (multiple-value-setq (type name) (ischunk-noweb line))
+     (multiple-value-setq (type name) (ischunk-latex line)))
+    (if (eq type 'refer) 
+      (progn
+       (when *chunknoise* (format t "REFER name=~a~%" name))
+       (gcl-expand name noweb? file))
+      (format file "~a~%" line))))))
+
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; 9 ISCHUNK-LATEX
+
+;;; There is a built-in assumption (in the ischunk-* functions)
+;;; that the chunks occur on separate lines and that the indentation
+;;; of the chunk reference has no meaning.
+;;;
+;;; ischunk-latex  recognizes chunk names in latex convention
+;;;
+;;; There are 3 cases to recognize:
+;;;  \begin{chunk}{thechunkname}  ==> 'define thechunkname
+;;;  \end{chunk}                  ==> 'end nil
+;;;  \getchunk{thechunkname}      ==> 'refer thechunkname
+
+(defun ischunk-latex (line)
+ "Find chunks delimited by latex syntax"
+ (let ((len (length line)) 
+       (mark (search "chunk" line))
+       (point 0)
+       name preline postline
+       (beginstring "\\begin{chunk}{")
+       beginlength
+       (endstring "\end{chunk}")
+       (referstring "\getchunk{")
+       referlength)
+  (setq beginlength (length beginstring))
+  (setq referlength (length referstring))
+  (when mark
+   (cond
+    ((setq mark (search beginstring line)) ; recognize define
+      (setq point (position #\} line :start (+ mark beginlength)))
+      (cond
+       ((null point) (values nil nil))
+       ((= point 0)  (values nil nil))
+       (t
+         (setq name (subseq line (+ mark beginlength) point)) 
+         ;(print (list 'ischunk-latex 'define name))
+         (values 'define name))))
+    ((setq mark (search endstring line))     ; recognize end
+       ;(print (list 'ischunk-latex 'end))
+       (values 'end nil))
+    ((setq mark (search referstring line))         ; recognize reference
+      (setq point (position #\} line :start (+ mark referlength)))
+      (cond
+       ((null point) (values nil nil))
+       ((= point 0)  (values nil nil))
+       (t
+         (setq name (subseq line (+ mark referlength) point)) 
+         ;(print (list 'ischunk-latex 'refer name))
+         (values 'refer name))))
+    (t (values nil nil))))))
+  
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;; 10 ISCHUNK-NOWEB
+
+;;; ischunk-noweb recognizes chunk names using the noweb convention
+;;;
+;;; There are 3 cases to recognize:
+;;;  <<thechunkname>>=  ==> 'define thechunkname
+;;;  @                  ==> 'end nil
+;;;  <<thechunkname>>   ==> 'refer thechunkname
+
+(defun ischunk-noweb (line)
+ "Find chunks delimited by noweb syntax"
+ (let ((len (length line)) (mark (position #\> line)) (point 0))
+  (cond
+   ((and mark                    ; recognize define
+         (> len (+ mark 2))
+         (char= #\< (schar line 0))
+         (char= #\< (schar line 1))
+         (char= #\> (schar line (+ mark 1)))
+         (char= #\= (schar line (+ mark 2))))
+     ;(print (list 'define (subseq line 0 (+ mark 2))))
+     (values 'define (subseq line 0 (+ mark 2))))
+   ((and mark                    ; recognize reference
+         (> len (+ mark 1))
+         (char= #\> (schar line (+ mark 1))))
+     (setq point (position #\< line))
+     (if
+      (and point
+           (< point (- mark 2))
+           (char= #\< (schar line (+ point 1))))
+        (values 'refer (subseq line point (+ mark 2)))
+        (values 'noise nil)))
+    ((and (> len 0)                ; end chunk
+          (char= #\@ (schar line 0)))
+      (values 'end nil))
+    (t (values nil nil)))))
+  
+ 
+
diff --git a/changelog b/changelog
index b3dd7a4..5978543 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,5 @@
+20090427 tpd src/axiom-website/patches.html 20090427.01.tpd.patch
+20090427 tpd books/tangle.lisp lisp version of tangle command
 20090420 tpd src/axiom-website/patches.html 20090420.01.tpd.patch
 20090420 tpd src/interp/Makefile remove parsing autoload
 20090420 tpd src/interp/util.lisp remove parsing autoload
diff --git a/src/axiom-website/patches.html b/src/axiom-website/patches.html
index 756aad5..f6181a8 100644
--- a/src/axiom-website/patches.html
+++ b/src/axiom-website/patches.html
@@ -1108,5 +1108,7 @@ bookvol9 move portions of the compiler <br/>
 bookvol10.3 convert FRAC to +-> syntax <br/>
 <a href="patches/20090420.01.tpd.patch">20090420.01.tpd.patch</a>
 parsing.lisp consolidate parsing, remove autoload <br/>
+<a href="patches/20090427.01.tpd.patch">20090427.01.tpd.patch</a>
+tangle.lisp common lisp literate tangle function <br/>
  </body>
 </html>



\end{verbatim}
\eject
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\cleardoublepage
%\phantomsection
\addcontentsline{toc}{chapter}{Bibliography}
\bibliographystyle{axiom}
\bibliography{axiom}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\cleardoublepage
%\phantomsection
\addcontentsline{toc}{chapter}{Index}
\printindex
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\end{document}
