diff --git a/books/bookvol10.3.pamphlet b/books/bookvol10.3.pamphlet
index 344a8e0..781994e 100644
--- a/books/bookvol10.3.pamphlet
+++ b/books/bookvol10.3.pamphlet
@@ -142518,6 +142518,242 @@ U16Vector() : OneDimensionalArrayAggregate Integer == add
 
 \end{chunk}
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{domain U32MAT U32Matrix}
+
+\begin{chunk}{U32Matrix.input}
+)set break resume
+)sys rm -f U32Matrix.output
+)spool U32Matrix.output
+)set message test on
+)set message auto off
+)clear all
+
+--S 1 of 1
+)show U32Matrix
+--R U32Matrix  is a domain constructor
+--R Abbreviation for U32Matrix is U32MAT 
+--R This constructor is exposed in this frame.
+--R Issue )edit /tmp/ta.spad to see algebra source code for U32MAT 
+--R
+--R------------------------------- Operations --------------------------------
+--R ?*? : (U32Vector,%) -> U32Vector      ?*? : (%,U32Vector) -> U32Vector
+--R ?*? : (Integer,%) -> %                ?*? : (%,Integer) -> %
+--R ?*? : (Integer,%) -> %                ?*? : (%,%) -> %
+--R ?+? : (%,%) -> %                      -? : % -> %
+--R ?-? : (%,%) -> %                      antisymmetric? : % -> Boolean
+--R coerce : U32Vector -> %               column : (%,Integer) -> U32Vector
+--R copy : % -> %                         diagonal? : % -> Boolean
+--R diagonalMatrix : List(%) -> %         empty : () -> %
+--R empty? : % -> Boolean                 eq? : (%,%) -> Boolean
+--R fill! : (%,Integer) -> %              horizConcat : (%,%) -> %
+--R matrix : List(List(Integer)) -> %     maxColIndex : % -> Integer
+--R maxRowIndex : % -> Integer            minColIndex : % -> Integer
+--R minRowIndex : % -> Integer            ncols : % -> NonNegativeInteger
+--R nrows : % -> NonNegativeInteger       parts : % -> List(Integer)
+--R qnew : (Integer,Integer) -> %         row : (%,Integer) -> U32Vector
+--R sample : () -> %                      square? : % -> Boolean
+--R squareTop : % -> %                    symmetric? : % -> Boolean
+--R transpose : % -> %                    transpose : U32Vector -> %
+--R vertConcat : (%,%) -> %              
+--R #? : % -> NonNegativeInteger if $ has finiteAggregate
+--R ?**? : (%,Integer) -> % if Integer has FIELD
+--R ?**? : (%,NonNegativeInteger) -> %
+--R ?/? : (%,Integer) -> % if Integer has FIELD
+--R ?=? : (%,%) -> Boolean if Integer has SETCAT
+--R any? : ((Integer -> Boolean),%) -> Boolean if $ has finiteAggregate
+--R coerce : % -> OutputForm if Integer has SETCAT
+--R columnSpace : % -> List(U32Vector) if Integer has EUCDOM
+--R count : (Integer,%) -> NonNegativeInteger if $ has finiteAggregate and Integer has SETCAT
+--R count : ((Integer -> Boolean),%) -> NonNegativeInteger if $ has finiteAggregate
+--R determinant : % -> Integer if Integer has commutative(*)
+--R diagonalMatrix : List(Integer) -> %
+--R elt : (%,List(Integer),List(Integer)) -> %
+--R elt : (%,Integer,Integer,Integer) -> Integer
+--R elt : (%,Integer,Integer) -> Integer
+--R eval : (%,List(Integer),List(Integer)) -> % if Integer has EVALAB(INT) and Integer has SETCAT
+--R eval : (%,Integer,Integer) -> % if Integer has EVALAB(INT) and Integer has SETCAT
+--R eval : (%,Equation(Integer)) -> % if Integer has EVALAB(INT) and Integer has SETCAT
+--R eval : (%,List(Equation(Integer))) -> % if Integer has EVALAB(INT) and Integer has SETCAT
+--R every? : ((Integer -> Boolean),%) -> Boolean if $ has finiteAggregate
+--R exquo : (%,Integer) -> Union(%,"failed") if Integer has INTDOM
+--R hash : % -> SingleInteger if Integer has SETCAT
+--R inverse : % -> Union(%,"failed") if Integer has FIELD
+--R latex : % -> String if Integer has SETCAT
+--R less? : (%,NonNegativeInteger) -> Boolean
+--R listOfLists : % -> List(List(Integer))
+--R map : (((Integer,Integer) -> Integer),%,%,Integer) -> %
+--R map : (((Integer,Integer) -> Integer),%,%) -> %
+--R map : ((Integer -> Integer),%) -> %
+--R map! : ((Integer -> Integer),%) -> %
+--R matrix : (NonNegativeInteger,NonNegativeInteger,((Integer,Integer) -> Integer)) -> %
+--R member? : (Integer,%) -> Boolean if $ has finiteAggregate and Integer has SETCAT
+--R members : % -> List(Integer) if $ has finiteAggregate
+--R minordet : % -> Integer if Integer has commutative(*)
+--R more? : (%,NonNegativeInteger) -> Boolean
+--R new : (NonNegativeInteger,NonNegativeInteger,Integer) -> %
+--R nullSpace : % -> List(U32Vector) if Integer has INTDOM
+--R nullity : % -> NonNegativeInteger if Integer has INTDOM
+--R pfaffian : % -> Integer if Integer has COMRING
+--R qelt : (%,Integer,Integer) -> Integer
+--R qsetelt! : (%,Integer,Integer,Integer) -> Integer
+--R rank : % -> NonNegativeInteger if Integer has INTDOM
+--R rowEchelon : % -> % if Integer has EUCDOM
+--R scalarMatrix : (NonNegativeInteger,Integer) -> %
+--R setColumn! : (%,Integer,U32Vector) -> %
+--R setRow! : (%,Integer,U32Vector) -> %
+--R setelt : (%,List(Integer),List(Integer),%) -> %
+--R setelt : (%,Integer,Integer,Integer) -> Integer
+--R setsubMatrix! : (%,Integer,Integer,%) -> %
+--R size? : (%,NonNegativeInteger) -> Boolean
+--R subMatrix : (%,Integer,Integer,Integer,Integer) -> %
+--R swapColumns! : (%,Integer,Integer) -> %
+--R swapRows! : (%,Integer,Integer) -> %
+--R zero : (NonNegativeInteger,NonNegativeInteger) -> %
+--R ?~=? : (%,%) -> Boolean if Integer has SETCAT
+--R
+--E 1
+
+)spool
+)lisp (bye)
+\end{chunk}
+\begin{chunk}{U32Matrix.help}
+====================================================================
+U32Matrix examples
+====================================================================
+
+See Also:
+o )show U32Matrix
+
+\end{chunk}
+\pagehead{U32Matrix}{U32MAT}
+\pagepic{ps/v103u32matrix.eps}{U32MAT}{1.00}
+{\bf See}\\
+
+{\bf Exports:}\\
+\begin{tabular}{llll}
+\cross{U32MAT}{\#{}?} &
+\cross{U32MAT}{-?} &
+\cross{U32MAT}{?**?} &
+\cross{U32MAT}{?*?} \\
+\cross{U32MAT}{?+?} &
+\cross{U32MAT}{?-?} &
+\cross{U32MAT}{?/?} &
+\cross{U32MAT}{?=?} \\
+\cross{U32MAT}{?\~{}=?} &
+\cross{U32MAT}{antisymmetric?} &
+\cross{U32MAT}{any?} &
+\cross{U32MAT}{coerce} \\
+\cross{U32MAT}{column} &
+\cross{U32MAT}{columnSpace} &
+\cross{U32MAT}{copy} &
+\cross{U32MAT}{count} \\
+\cross{U32MAT}{determinant} &
+\cross{U32MAT}{diagonal?} &
+\cross{U32MAT}{diagonalMatrix} &
+\cross{U32MAT}{elt} \\
+\cross{U32MAT}{empty} &
+\cross{U32MAT}{empty?} &
+\cross{U32MAT}{eq?} &
+\cross{U32MAT}{eval} \\
+\cross{U32MAT}{every?} &
+\cross{U32MAT}{exquo} &
+\cross{U32MAT}{fill!} &
+\cross{U32MAT}{hash} \\
+\cross{U32MAT}{horizConcat} &
+\cross{U32MAT}{inverse} &
+\cross{U32MAT}{latex} &
+\cross{U32MAT}{less?} \\
+\cross{U32MAT}{listOfLists} &
+\cross{U32MAT}{map} &
+\cross{U32MAT}{map!} &
+\cross{U32MAT}{matrix} \\
+\cross{U32MAT}{maxColIndex} &
+\cross{U32MAT}{maxRowIndex} &
+\cross{U32MAT}{member?} &
+\cross{U32MAT}{members} \\
+\cross{U32MAT}{minColIndex} &
+\cross{U32MAT}{minRowIndex} &
+\cross{U32MAT}{minordet} &
+\cross{U32MAT}{more?} \\
+\cross{U32MAT}{ncols} &
+\cross{U32MAT}{new} &
+\cross{U32MAT}{nrows} &
+\cross{U32MAT}{nullSpace} \\
+\cross{U32MAT}{nullity} &
+\cross{U32MAT}{parts} &
+\cross{U32MAT}{pfaffian} &
+\cross{U32MAT}{qelt} \\
+\cross{U32MAT}{qnew} &
+\cross{U32MAT}{qsetelt!} &
+\cross{U32MAT}{rank} &
+\cross{U32MAT}{row} \\
+\cross{U32MAT}{rowEchelon} &
+\cross{U32MAT}{sample} &
+\cross{U32MAT}{scalarMatrix} &
+\cross{U32MAT}{setColumn!} \\
+\cross{U32MAT}{setRow!} &
+\cross{U32MAT}{setelt} &
+\cross{U32MAT}{setsubMatrix!} &
+\cross{U32MAT}{size?} \\
+\cross{U32MAT}{square?} &
+\cross{U32MAT}{squareTop} &
+\cross{U32MAT}{subMatrix} &
+\cross{U32MAT}{swapColumns!} \\
+\cross{U32MAT}{swapRows!} &
+\cross{U32MAT}{symmetric?} &
+\cross{U32MAT}{transpose} &
+\cross{U32MAT}{vertConcat} \\
+\cross{U32MAT}{zero} &
+\end{tabular} 
+
+\begin{chunk}{domain U32MAT U32Matrix}
+)abbrev domain U32MAT U32Matrix
+++ Description: This is a low-level domain which implements matrices
+++ (two dimensional arrays) of 32-bit integers.
+++ Indexing is 0 based, there is no bound checking (unless
+++ provided by lower level).
+U32Matrix : MatrixCategory(Integer,
+                         U32Vector,
+                         U32Vector) with
+    qnew : (Integer, Integer) -> %
+      ++ qnew(n, m) creates a new uninitialized n by m matrix.
+      ++
+      ++X qnew(3,4)
+  == add
+
+    R ==> Integer
+
+    Qelt2    ==> AREF2U32$Lisp
+    Qsetelt2 ==> SETAREF2U32$Lisp
+    Qnrows   ==> ANROWSU32$Lisp
+    Qncols   ==> ANCOLSU32$Lisp
+    Qnew     ==> MAKEMATRIXU32$Lisp
+    Qnew1    ==> MAKEMATRIX1U32$Lisp
+
+    minRowIndex x == 0
+    minColIndex x == 0
+    nrows x == Qnrows(x)
+    ncols x == Qncols(x)
+    maxRowIndex x == Qnrows(x) - 1
+    maxColIndex x == Qncols(x) - 1
+
+    qelt(m, i, j) == Qelt2(m, i, j)
+    elt(m : %, i : Integer, j : Integer) : R == Qelt2(m, i, j)
+    qsetelt!(m, i, j, r) == Qsetelt2(m, i, j, r)
+    setelt(m : %, i : Integer, j : Integer, r : R) == Qsetelt2(m, i, j, r)
+
+    empty() == Qnew(0$Integer, 0$Integer)
+    qnew(rows, cols) == Qnew(rows, cols)
+    new(rows, cols, a) == Qnew1(rows, cols, a)
+
+\end{chunk}
+\begin{chunk}{U32MAT.dotabb}
+"U32MAT" [color="#88FF44",href="bookvol10.3.pdf#nameddest=U32MAT"]
+"MATCAT" [color="#4488FF",href="bookvol10.2.pdf#nameddest=MATCAT"]
+"U32MAT" -> "MATCAT"
+
+\end{chunk}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 \section{domain U32VEC U32Vector}
 
 \begin{chunk}{U32Vector.input}
@@ -142735,12 +142971,6 @@ t8:=fill!(t2,7)
 )spool 
 )lisp (bye)
  
-\end{chunk}
-\eject
-\begin{thebibliography}{99}
-\bibitem{1} nothing
-\end{thebibliography}
-\end{document}
 See Also:
 o )show U8Vector
 o )show U16Vector
@@ -153849,9 +154079,10 @@ Note that this code is not included in the generated catdef.spad file.
 \getchunk{domain UTSZ UnivariateTaylorSeriesCZero}
 \getchunk{domain UNISEG UniversalSegment}
 
-\getchunk{domain U8VEC U16Vector}
+\getchunk{domain U8VEC U8Vector}
 \getchunk{domain U16VEC U16Vector}
 \getchunk{domain U32VEC U32Vector}
+\getchunk{domain U32MAT U32Matrix}
 \getchunk{domain VARIABLE Variable}
 \getchunk{domain VECTOR Vector}
 \getchunk{domain VOID Void}
diff --git a/books/bookvol5.pamphlet b/books/bookvol5.pamphlet
index 35d7805..d8d132a 100644
--- a/books/bookvol5.pamphlet
+++ b/books/bookvol5.pamphlet
@@ -24647,6 +24647,7 @@ otherwise the new algebra won't be loaded by the interpreter when needed.
    (|U8Vector| . U8VEC)
    (|U16Vector| . U16VEC)
    (|U32Vector| . U32VEC)
+   (|U32Matrix| . U32MAT)
    (|Vector| . VECTOR)
    (|VectorFunctions2| . VECTOR2)
    (|ViewDefaultsPackage| . VIEWDEF)
@@ -39299,7 +39300,7 @@ Given a form, $u$, we try to recover the input line that created it.
 
 \defun{getRefvU8}{getRefvU8}
 \begin{chunk}{defun getRefvU8}
-(defun getRefvU8 (x n)
+(defun getRefvU8 (n x)
   (make-array n :initial-element x :element-type '(unsigned-byte 8)))
 \end{chunk}
 
@@ -39328,7 +39329,7 @@ Given a form, $u$, we try to recover the input line that created it.
 
 \defun{getRefvU16}{getRefvU16}
 \begin{chunk}{defun getRefvU16}
-(defun getRefvU16 (x n)
+(defun getRefvU16 (n x)
   (make-array n :initial-element x :element-type '(unsigned-byte 16)))
 \end{chunk}
 
@@ -39357,10 +39358,56 @@ Given a form, $u$, we try to recover the input line that created it.
 
 \defun{getRefvU32}{getRefvU32}
 \begin{chunk}{defun getRefvU32}
-(defun getRefvU32 (x n)
+(defun getRefvU32 (n x)
   (make-array n :initial-element x :element-type '(unsigned-byte 32)))
 \end{chunk}
 
+\section{U32Matrix}
+
+\defmacro{aref2U32}
+\begin{chunk}{defmacro aref2U32}
+(defmacro aref2U32 (v i j)
+ `(aref (the (simple-array (unsigned-byte 32) (* *)) ,v) ,i ,j))
+
+\end{chunk}
+
+\defmacro{setAref2U32}
+\begin{chunk}{defmacro setAref2U32}
+(defmacro setAref2U32 (v i j s)
+ `(setf (aref (the (simple-array (unsigned-byte 32) (* *)) ,v) ,i ,j), s))
+
+\end{chunk}
+
+\defmacro{anrowsU32}
+\begin{chunk}{defmacro anrowsU32}
+(defmacro anrowsU32 (v)
+ `(array-dimension (the (simple-array (unsigned-byte 32) (* *)) ,v) 0))
+
+\end{chunk}
+
+\defmacro{ancolsU32}
+\begin{chunk}{defmacro ancolsU32}
+(defmacro ancolsU32 (v)
+ `(array-dimension (the (simple-array (unsigned-byte 32) (* *)) ,v) 1))
+
+\end{chunk}
+
+\defmacro{makeMatrixU32}
+\begin{chunk}{defmacro makeMatrixU32}
+(defmacro makeMatrixU32 (n m)
+ `(make-array (list ,n ,m) :element-type '(unsigned-byte 32)
+                           :initial-element 0))
+
+\end{chunk}
+
+\defmacro{makeMatrix1U32}
+\begin{chunk}{defmacro makeMatrix1U32}
+(defmacro makeMatrix1U32 (n m s)
+ `(make-array (list ,n ,m) :element-type '(unsigned-byte 32)
+                           :initial-element ,s))
+
+\end{chunk}
+
 \section{DirectProduct}
 \defun{vec2list}{vec2list}
 \begin{chunk}{defun vec2list}
@@ -43855,6 +43902,9 @@ This needs to work off the internal exposure list, not the file.
 
 ;;; above level 0 macros
 
+\getchunk{defmacro ancolsU32}
+\getchunk{defmacro anrowsU32}
+\getchunk{defmacro aref2U32}
 \getchunk{defmacro assq}
 \getchunk{defmacro bvec-setelt}
 \getchunk{defmacro bvec-size}
@@ -43915,11 +43965,14 @@ This needs to work off the internal exposure list, not the file.
 \getchunk{defmacro make-double-matrix1}
 \getchunk{defmacro make-double-vector}
 \getchunk{defmacro make-double-vector1}
+\getchunk{defmacro makeMatrixU32}
+\getchunk{defmacro makeMatrix1U32}
 \getchunk{defmacro qvlenU8}
 \getchunk{defmacro qvlenU16}
 \getchunk{defmacro qvlenU32}
 \getchunk{defmacro Rest}
 \getchunk{defmacro startsId?}
+\getchunk{defmacro setAref2U32}
 \getchunk{defmacro seteltU8}
 \getchunk{defmacro seteltU16}
 \getchunk{defmacro seteltU32}
diff --git a/books/ps/v103u32matrix.eps b/books/ps/v103u32matrix.eps
new file mode 100644
index 0000000..509fc29
--- /dev/null
+++ b/books/ps/v103u32matrix.eps
@@ -0,0 +1,278 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: graphviz version 2.26.3 (20100126.1600)
+%%Title: pic
+%%Pages: 1
+%%BoundingBox: 36 36 118 152
+%%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 118 152
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 82 116 boxprim clip newpath
+1 1 set_scale 0 rotate 40 41 translate
+0.16355 0.45339 0.92549 graphcolor
+newpath -4 -5 moveto
+-4 112 lineto
+79 112 lineto
+79 -5 lineto
+closepath fill
+1 setlinewidth
+0.16355 0.45339 0.92549 graphcolor
+newpath -4 -5 moveto
+-4 112 lineto
+79 112 lineto
+79 -5 lineto
+closepath stroke
+% U32MAT
+gsave
+[ /Rect [ 0 72 74 108 ]
+  /Border [ 0 0 0 ]
+  /Action << /Subtype /URI /URI (bookvol10.3.pdf#nameddest=U32MAT) >>
+  /Subtype /Link
+/ANN pdfmark
+0.27273 0.73333 1 nodecolor
+newpath 74 108 moveto
+0 108 lineto
+0 72 lineto
+74 72 lineto
+closepath fill
+1 setlinewidth
+filled
+0.27273 0.73333 1 nodecolor
+newpath 74 108 moveto
+0 108 lineto
+0 72 lineto
+74 72 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+7.5 86.4 moveto 59 (U32MAT) alignedtext
+grestore
+% MATCAT
+gsave
+[ /Rect [ 0 0 74 36 ]
+  /Border [ 0 0 0 ]
+  /Action << /Subtype /URI /URI (bookvol10.2.pdf#nameddest=MATCAT) >>
+  /Subtype /Link
+/ANN pdfmark
+0.60606 0.73333 1 nodecolor
+newpath 74 36 moveto
+0 36 lineto
+0 0 lineto
+74 0 lineto
+closepath fill
+1 setlinewidth
+filled
+0.60606 0.73333 1 nodecolor
+newpath 74 36 moveto
+0 36 lineto
+0 0 lineto
+74 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+8 14.4 moveto 58 (MATCAT) alignedtext
+grestore
+% U32MAT->MATCAT
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 37 71.83 moveto
+37 64.13 37 54.97 37 46.42 curveto
+stroke
+0 0 0 edgecolor
+newpath 40.5 46.41 moveto
+37 36.41 lineto
+33.5 46.41 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 40.5 46.41 moveto
+37 36.41 lineto
+33.5 46.41 lineto
+closepath stroke
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+end
+restore
+%%EOF
diff --git a/changelog b/changelog
index 4e03b84..02b64f3 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,9 @@
+20130225 tpd src/axiom-website/patches.html 20130225.01.tpd.patch
+20130225 tpd src/input/machinearithmetic.input unit test U32Matrix
+20130225 tpd src/algebra/Makefile add U32Matrix
+20130225 tpd books/bookvol5 add U32Matrix support macros
+20130225 tpd books/bookvol10.3 add U32Matrix
+20130225 tpd books/ps/v103u32matrix.eps added
 20130223 tpd src/axiom-website/patches.html 20130223.04.tpd.patch
 20120223 tpd buglist add 7233: fill! operation from U8Vector does not show up
 20130223 tpd src/axiom-website/patches.html 20130223.03.tpd.patch
diff --git a/src/algebra/Makefile.pamphlet b/src/algebra/Makefile.pamphlet
index d67ff07..cfe129b 100644
--- a/src/algebra/Makefile.pamphlet
+++ b/src/algebra/Makefile.pamphlet
@@ -4113,7 +4113,7 @@ LAYER8=\
   ${OUT}/PROJSP.o   \
   ${OUT}/REDORDER.o ${OUT}/SRAGG.o    ${OUT}/SRAGG-.o   ${OUT}/STREAM.o   \
   ${OUT}/SYMPOLY.o  ${OUT}/TS.o       ${OUT}/TUPLE.o    ${OUT}/UPSCAT.o   \
-  ${OUT}/UPSCAT-.o  ${OUT}/U16VEC.o   ${OUT}/U32VEC.o   \
+  ${OUT}/UPSCAT-.o  ${OUT}/U8VEC.o    ${OUT}/U16VEC.o   ${OUT}/U32VEC.o   \
   ${OUT}/VECTCAT.o  ${OUT}/VECTCAT-.o ${OUT}/XDPOLY.o   \
   ${OUT}/XEXPPKG.o  ${OUT}/XF.o       ${OUT}/XF-.o      ${OUT}/XPBWPOLY.o \
   ${OUT}/XPOLY.o    ${OUT}/XRPOLY.o \
@@ -4724,6 +4724,30 @@ LAYER8=\
 /*"UPSCAT-" -> {"ENTIRER"; "ELTAB"; "DIFRING"; "PDRING"; "OAMON"; "OASGP"}*/
 /*"UPSCAT-" -> {"ORDSET"; "INT"; "LIST"; "ILIST"; "LSAGG-"}*/
 
+"U8VEC" [color="#88FF44",href="bookvol10.3.pdf#nameddest=U8VEC"]
+"U8VEC" -> "A1AGG"
+/*"U8VEC" -> {"FLAGG"; "LNAGG"; "IXAGG"; "HOAGG"; "AGG"; "TYPE"; "SETCAT"}*/
+/*"U8VEC" -> {"BASTYPE"; "KOERCE"; "EVALAB"; "IEVALAB"; "ELTAGG"; "ELTAB"}*/
+/*"U8VEC" -> {"CLAGG"; "KONVERT"; "ORDSET"; "INT"; "SINT"; "NNI"; "INS"}*/
+/*"U8VEC" -> {"UFD"; "GCDDOM"; "INTDOM"; "COMRING"; "RING"; "RNG"}*/
+/*"U8VEC" -> {"ABELGRP"; "CABMON"; "ABELMON"; "ABELSG"; "SGROUP"}*/
+/*"U8VEC" -> {"MONOID"; "LMODULE"; "BMODULE"; "RMODULE"; "ALGEBRA"}*/
+/*"U8VEC" -> {"MODULE"; "ENTIRER"; "EUCDOM"; "PID"; "OINTDOM"; "ORDRING"}*/
+/*"U8VEC" -> {"OAGROUP"; "OCAMON"; "OAMON"; "OASGP"; "DIFRING"; "RETRACT"}*/
+/*"U8VEC" -> {"LINEXP"; "PATMAB"; "CFCAT"; "REAL"; "CHARZ"; "STEP"; "OM"}*/
+
+"U16VEC" [color="#88FF44",href="bookvol10.3.pdf#nameddest=U16VEC"]
+"U16VEC" -> "A1AGG"
+/*"U16VEC" -> {"FLAGG"; "LNAGG"; "IXAGG"; "HOAGG"; "AGG"; "TYPE"; "SETCAT"}*/
+/*"U16VEC" -> {"BASTYPE"; "KOERCE"; "EVALAB"; "IEVALAB"; "ELTAGG"; "ELTAB"}*/
+/*"U16VEC" -> {"CLAGG"; "KONVERT"; "ORDSET"; "INT"; "SINT"; "NNI"; "INS"}*/
+/*"U16VEC" -> {"UFD"; "GCDDOM"; "INTDOM"; "COMRING"; "RING"; "RNG"}*/
+/*"U16VEC" -> {"ABELGRP"; "CABMON"; "ABELMON"; "ABELSG"; "SGROUP"}*/
+/*"U16VEC" -> {"MONOID"; "LMODULE"; "BMODULE"; "RMODULE"; "ALGEBRA"}*/
+/*"U16VEC" -> {"MODULE"; "ENTIRER"; "EUCDOM"; "PID"; "OINTDOM"; "ORDRING"}*/
+/*"U16VEC" -> {"OAGROUP"; "OCAMON"; "OAMON"; "OASGP"; "DIFRING"; "RETRACT"}*/
+/*"U16VEC" -> {"LINEXP"; "PATMAB"; "CFCAT"; "REAL"; "CHARZ"; "STEP"; "OM"}*/
+
 "U32VEC" [color="#88FF44",href="bookvol10.3.pdf#nameddest=U32VEC"]
 "U32VEC" -> "A1AGG"
 /*"U32VEC" -> {"FLAGG"; "LNAGG"; "IXAGG"; "HOAGG"; "AGG"; "TYPE"; "SETCAT"}*/
@@ -4857,6 +4881,7 @@ LAYER9=\
   ${OUT}/LODO1.o    ${OUT}/LODO2.o    ${OUT}/LPOLY.o   \
   ${OUT}/LSMP.o     ${OUT}/LSMP1.o    ${OUT}/MATCAT2.o  \
   ${OUT}/PROJPL.o   ${OUT}/PTCAT.o    ${OUT}/STRICAT.o  ${OUT}/TRIMAT.o  \
+  ${OUT}/U32MAT.o \
   layer9done
 
 @
@@ -5091,6 +5116,19 @@ LAYER9=\
 /*"ULSCAT" -> {"TRANFUN"; "TRIGCAT"; "ATRIG"; "HYPCAT"; "AHYP"}*/
 /*"ULSCAT" -> {"ELEMFUN"; "FIELD"; "DIVRING"}*/
 
+"U32MAT" [color="#88FF44",href="bookvol10.3.pdf#nameddest=U32MAT"]
+"U32MAT" -> "MATCAT"
+/*"U32MAT" -> {"ARR2CAT"; "HOAGG"; "AGG"; "TYPE"; "SETCAT"; "BASTYPE"}*/
+/*"U32MAT" -> {"KOERCE"; "EVALAB"; "IEVALAB"; "INS"; "UFD"; "GCDDOM"}*/
+/*"U32MAT" -> {"INTDOM"; "COMRING"; "RING"; "RNG"; "ABELGRP"; "CABMON"}*/
+/*"U32MAT" -> {"ABELMON"; "ABELSG"; "SGROUP"; "MONOID"; "LMODULE"}*/
+/*"U32MAT" -> {"BMODULE"; "RMODULE"; "ALGEBRA"; "MODULE"; "ENTIRER"}*/
+/*"U32MAT" -> {"EUCDOM"; "PID"; "OINTDOM"; "ORDRING"; "OAGROUP"}*/
+/*"U32MAT" -> {"OCAMON"; "OAMON"; "OASGP"; "ORDSET"; "DIFRING"}*/
+/*"U32MAT" -> {"KONVERT"; "RETRACT"; "LINEXP"; "PATMAB"; "CFCAT"; "REAL"}*/
+/*"U32MAT" -> {"CHARZ"; "STEP"; "A1AGG"; "FLAGG"; "LNAGG"; "IXAGG"}*/
+/*"U32MAT" -> {"ELTAGG"; "ELTAB"; "CLAGG"; "INT"; "OM"; "FIELD"; "DIVRING"}*/
+
 @
 \subsection{Layer10}
 Depends on: IVECTOR PTCAT STRICAT LOCPOWC\\
diff --git a/src/axiom-website/patches.html b/src/axiom-website/patches.html
index e14d6f2..8f3e343 100644
--- a/src/axiom-website/patches.html
+++ b/src/axiom-website/patches.html
@@ -3985,5 +3985,7 @@ books/bookvol10.3 add U16Vector
 books/bookvol10.3 add U8Vector
 <a href="patches/20130223.04.tpd.patch">20130223.04.tpd.patch</a>
 buglist add 7233: fill! operation from U8Vector does not show up
+<a href="patches/20130225.01.tpd.patch">20130225.01.tpd.patch</a>
+books/bookvol10.3 add U32Matrix
  </body>
 </html>
diff --git a/src/input/machinearithmetic.input.pamphlet b/src/input/machinearithmetic.input.pamphlet
index 9edbf2b..56fd17b 100644
--- a/src/input/machinearithmetic.input.pamphlet
+++ b/src/input/machinearithmetic.input.pamphlet
@@ -18,237 +18,241 @@
 )set message auto off
 )clear all
  
---S 1 of 33
+--S 1 of 34
 t1:=empty()$U32Vector
 --R
 --R   (1)  []
 --R                                                              Type: U32Vector
 --E 1
 
---S 2 of 33
+--S 2 of 34
 t2:=new(10,10)$U32Vector
 --R
 --R   (2)  [10,10,10,10,10,10,10,10,10,10]
 --R                                                              Type: U32Vector
 --E 2
 
---S 3 of 33
+--S 3 of 34
 t3:=qelt(t2,2)
 --R
 --R   (3)  10
 --R                                                        Type: PositiveInteger
 --E 3
 
---S 4 of 33
+--S 4 of 34
 t4:=elt(t2,2)
 --R
 --R   (4)  10
 --R                                                        Type: PositiveInteger
 --E 4
 
---S 5 of 33
+--S 5 of 34
 t5:=t2.2
 --R
 --R   (5)  10
 --R                                                        Type: PositiveInteger
 --E 5
 
---S 6 of 33
+--S 6 of 34
 t6:=qsetelt!(t2,2,5)
 --R
 --R   (6)  5
 --R                                                        Type: PositiveInteger
 --E 6
 
---S 7 of 33
+--S 7 of 34
 t2.2
 --R
 --R   (7)  5
 --R                                                        Type: PositiveInteger
 --E 7
 
---S 8 of 33
+--S 8 of 34
 t7:=setelt(t2,3,6)
 --R
 --R   (8)  6
 --R                                                        Type: PositiveInteger
 --E 8
 
---S 9 of 33
+--S 9 of 34
 t2.3
 --R
 --R   (9)  6
 --R                                                        Type: PositiveInteger
 --E 9
 
---S 10 of 33
+--S 10 of 34
 #t2
 --R
 --R   (10)  10
 --R                                                        Type: PositiveInteger
 --E 10
 
---S 11 of 33
+--S 11 of 34
 t8:=fill!(t2,7)
 --R
 --R   (11)  [7,7,7,7,7,7,7,7,7,7]
 --R                                                              Type: U32Vector
 --E 11
 
---S 12 of 33
+--S 12 of 34
 ta:=empty()$U16Vector
 --R
 --R   (12)  []
 --R                                                              Type: U16Vector
 --E 12
 
---S 13 of 33
+--S 13 of 34
 tb:=new(10,10)$U16Vector
 --R
 --R   (13)  [10,10,10,10,10,10,10,10,10,10]
 --R                                                              Type: U16Vector
 --E 13
 
---S 14 of 33
+--S 14 of 34
 tc:=qelt(tb,2)
 --R
 --R   (14)  10
 --R                                                        Type: PositiveInteger
 --E 14
 
---S 15 of 33
+--S 15 of 34
 td:=elt(tb,2)
 --R
 --R   (15)  10
 --R                                                        Type: PositiveInteger
 --E 15
 
---S 16 of 33
+--S 16 of 34
 te:=tb.2
 --R
 --R   (16)  10
 --R                                                        Type: PositiveInteger
 --E 16
 
---S 17 of 33
+--S 17 of 34
 tf:=qsetelt!(tb,2,5)
 --R
 --R   (17)  5
 --R                                                        Type: PositiveInteger
 --E 17
 
---S 18 of 33
+--S 18 of 34
 tb.2
 --R
 --R   (18)  5
 --R                                                        Type: PositiveInteger
 --E 18
 
---S 19 of 33
+--S 19 of 34
 tg:=setelt(tb,3,6)
 --R
 --R   (19)  6
 --R                                                        Type: PositiveInteger
 --E 19
 
---S 20 of 33
+--S 20 of 34
 tb.3
 --R
 --R   (20)  6
 --R                                                        Type: PositiveInteger
 --E 20
 
---S 21 of 33
+--S 21 of 34
 #tb
 --R
 --R   (21)  10
 --R                                                        Type: PositiveInteger
 --E 21
 
---S 22 of 33
+--S 22 of 34
 th:=fill!(tb,7)
 --R
 --R   (22)  [7,7,7,7,7,7,7,7,7,7]
 --R                                                              Type: U16Vector
 --E 22
 
---S 23 of 33
+--S 23 of 34
 t1a:=empty()$U8Vector
 --R
 --R   (23)  []
---R                                                              Type: U8Vector
+--R                                                               Type: U8Vector
 --E 23
 
---S 24 of 33
+--S 24 of 34
 t1b:=new(10,10)$U8Vector
 --R
 --R   (24)  [10,10,10,10,10,10,10,10,10,10]
---R                                                              Type: U8Vector
+--R                                                               Type: U8Vector
 --E 24
 
---S 25 of 33
+--S 25 of 34
 t1c:=qelt(t1b,2)
 --R
 --R   (25)  10
 --R                                                        Type: PositiveInteger
 --E 25
 
---S 26 of 33
+--S 26 of 34
 t1d:=elt(t1b,2)
 --R
 --R   (26)  10
 --R                                                        Type: PositiveInteger
 --E 26
 
---S 27 of 33
+--S 27 of 34
 t1e:=t1b.2
 --R
 --R   (27)  10
 --R                                                        Type: PositiveInteger
 --E 27
 
---S 28 of 33
+--S 28 of 34
 t1f:=qsetelt!(t1b,2,5)
 --R
 --R   (28)  5
 --R                                                        Type: PositiveInteger
 --E 28
 
---S 29 of 33
+--S 29 of 34
 t1b.2
 --R
 --R   (29)  5
 --R                                                        Type: PositiveInteger
 --E 29
 
---S 30 of 33
+--S 30 of 34
 t1g:=setelt(t1b,3,6)
 --R
 --R   (30)  6
 --R                                                        Type: PositiveInteger
 --E 30
 
---S 31 of 33
+--S 31 of 34
 t1b.3
 --R
 --R   (31)  6
 --R                                                        Type: PositiveInteger
 --E 31
 
---S 32 of 33
+--S 32 of 34
 #t1b
 --R
 --R   (32)  10
 --R                                                        Type: PositiveInteger
 --E 32
 
---S 33 of 33
+--S 33 of 34
 t1h:=fill!(t1b,7)
 --R
 --R   (33)  [7,7,7,7,7,7,7,7,7,7]
---R                                                              Type: U8Vector
+--R                                                               Type: U8Vector
 --E 33
 
+--S 34 of 34
+v32:=qnew(3,4)$U32Matrix()
+--E 34
+
 )spool 
 )lisp (bye)
  
