diff --git a/books/bookvol10.4.pamphlet b/books/bookvol10.4.pamphlet
index ff7071b..2b910c8 100644
--- a/books/bookvol10.4.pamphlet
+++ b/books/bookvol10.4.pamphlet
@@ -30641,6 +30641,282 @@ FiniteDivisorFunctions2(R1, UP1, UPUP1, F1, R2, UP2, UPUP2, F2):
\end{chunk}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{package FFFACTOR FiniteFieldFactorization}
+\begin{chunk}{FiniteFieldFactorization.input}
+)set break resume
+)sys rm -f FiniteFieldFactorization.output
+)spool FiniteFieldFactorization.output
+)set message test on
+)set message auto off
+)clear all
+
+--S 1 of 1
+)show FiniteFieldFactorization
+--R FiniteFieldFactorization(K: FiniteFieldCategory,PolK: UnivariatePolynomialCategory(K)) is a package constructor
+--R Abbreviation for FiniteFieldFactorization is FFFACTOR
+--R This constructor is exposed in this frame.
+--R Issue )edit bookvol10.4.pamphlet to see algebra source code for FFFACTOR
+--R
+--R------------------------------- Operations --------------------------------
+--R factor : PolK -> Factored(PolK) irreducible? : PolK -> Boolean
+--R factorCantorZassenhaus : (PolK,NonNegativeInteger) -> List(PolK)
+--R factorSquareFree : PolK -> List(PolK)
+--R factorUsingMusser : PolK -> Factored(PolK)
+--R factorUsingYun : PolK -> Factored(PolK)
+--R
+--E 1
+
+)spool
+)lisp (bye)
+\end{chunk}
+
+\begin{chunk}{FiniteFieldFactorization.help}
+====================================================================
+FiniteFieldFactorization examples
+====================================================================
+
+Part of the package for Algebraic Function Fields in one variable (PAFF)
+
+See Also:
+o )show FiniteFieldFactorization
+
+\end{chunk}
+\pagehead{FiniteFieldFactorization}{FFFACTOR}
+\pagepic{ps/v104finitefieldfactorization.eps}{FFFACTOR}{1.00}
+
+{\bf Exports:}\\
+\begin{tabular}{lll}
+\cross{FFFACTOR}{factor} &
+\cross{FFFACTOR}{factorCantorZassenhaus} &
+\cross{FFFACTOR}{factorSquareFree} \\
+\cross{FFFACTOR}{factorUsingMusser} &
+\cross{FFFACTOR}{factorUsingYun} &
+\cross{FFFACTOR}{irreducible?}
+\end{tabular}
+
+
+\begin{chunk}{package FFFACTOR FiniteFieldFactorization}
+)abbreviation package FFFACTOR FiniteFieldFactorization
+++ Author: Gaetan Hache
+++ Date Created: 17 nov 1992
+++ Date Last Updated: March 2013 by Tim Daly
+++ Description:
+++ Part of the PAFF package
+FiniteFieldFactorization(K : FiniteFieldCategory,
+ PolK : UnivariatePolynomialCategory(K)) : with
+
+ factorSquareFree : PolK -> List(PolK)
+
+ factorCantorZassenhaus : (PolK, NonNegativeInteger) -> List(PolK)
+
+ factor : PolK -> Factored(PolK)
+
+ factorUsingYun : PolK -> Factored(PolK)
+
+ factorUsingMusser : PolK -> Factored(PolK)
+
+ irreducible? : PolK -> Boolean
+
+ == add
+
+ import FiniteFieldSquareFreeDecomposition(K, PolK)
+
+ p : NonNegativeInteger := characteristic()$K
+
+ p' : NonNegativeInteger := p quo 2 -- used for odd p : (p-1)/2
+
+ q : NonNegativeInteger := size()$K
+
+ q' : NonNegativeInteger := q quo 2 -- used for odd q : (q-1)/2
+
+ X : PolK := monomial(1, 1)
+
+ primeKdim : NonNegativeInteger :=
+ q_quo_p : NonNegativeInteger := q quo p ; e : NonNegativeInteger := 1
+ while q_quo_p > 1 repeat (e := e + 1 ; q_quo_p := q_quo_p quo p)
+ e
+
+ exp(P : PolK, n : NonNegativeInteger, R : PolK) : PolK ==
+ PP : PolK := P rem R ; Q : PolK := 1
+ repeat
+ if odd?(n) then Q := Q * PP rem R
+ (n := n quo 2) = 0 => leave
+ PP := PP * PP rem R
+ return Q
+
+ pPowers(P : PolK) : PrimitiveArray(PolK) == -- P is monic
+ n := degree(P)
+ result : PrimitiveArray(PolK) := new(n, 1)
+ result(1) := Qi := Q := exp(X, p, P)
+ for i in 2 .. n-1 repeat (Qi := Qi*Q rem P ; result(i) := Qi)
+ return result
+
+ pExp(Q : PolK, Xpowers : PrimitiveArray(PolK)) : PolK ==
+ Q' : PolK := 0
+ while Q ^= 0 repeat
+ Q' := Q' +primeFrobenius(leadingCoefficient(Q))*Xpowers(degree(Q))
+ Q := reductum(Q)
+ return Q'
+
+ pTrace(Q : PolK, d : NonNegativeInteger, P : PolK,
+ Xpowers : PrimitiveArray(PolK)) : PolK ==
+ Q : PolK := Q rem P
+ result : PolK := Q
+ for i in 1 .. d-1 repeat result := Q + pExp(result, Xpowers)
+ return result rem P
+
+ random(n : NonNegativeInteger) : PolK ==
+ repeat
+ if (deg := (random(n)$Integer)::NonNegativeInteger) > 0 then leave
+ repeat
+ if (x : K := random()$K) ^= 0 then leave
+ result : PolK :=
+ monomial(x, deg) + +/[monomial(random()$K, i) for i in 0 .. deg-1]
+ return result
+
+ internalFactorCZ(P : PolK, -- P monic-squarefree
+ d:NonNegativeInteger, Xpowers:PrimitiveArray(PolK)) : List(PolK) ==
+
+ listOfFactors : List(PolK) := [P]
+ degree(P) = d => return listOfFactors
+ result : List(PolK) := []
+ pDim : NonNegativeInteger := d * primeKdim
+ Q : PolK := P
+
+ repeat
+ G := pTrace(random(degree(Q)), pDim, Q, Xpowers)
+ if p > 2 then G := exp(G, p', Q) - 1
+ Q1 := gcd(G, Q) ; d1 := degree(Q1)
+ if d1 > 0 and d1 < degree(Q) then
+ listOfFactors := rest(listOfFactors)
+ if d1 = d then result := cons(Q1, result)
+ else listOfFactors := cons(Q1, listOfFactors)
+ Q1 := Q quo Q1 ; d1 := degree(Q1)
+ if d1 = d then result := cons(Q1, result)
+ else listOfFactors := cons(Q1, listOfFactors)
+ if empty?(listOfFactors) then leave
+ Q := first(listOfFactors)
+ return result
+
+ internalFactorSquareFree(P : PolK):List(PolK) == -- P is monic-squareFree
+ degree(P) = 1 => [P]
+ result : List(PolK) := []
+ Xpowers : PrimitiveArray(PolK) := pPowers(P)
+ S : PolK := Xpowers(1)
+ for j in 1..primeKdim-1 repeat S := pExp(S, Xpowers)
+ for i in 1 .. repeat -- S = X**(q**i) mod P
+ if degree(R := gcd(S - X, P)) > 0 then
+ result := concat(internalFactorCZ(R, i, Xpowers), result)
+ if degree (P) = degree (R) then return result
+ P := P quo R
+ if i >= degree(P) quo 2 then return cons(P, result)
+ for j in 0 .. degree(P)-1 repeat Xpowers(j):=Xpowers(j) rem P
+ S := S rem P
+ else if i >= degree(P) quo 2 then return cons(P, result)
+ for j in 1 .. primeKdim repeat S := pExp(S, Xpowers)
+
+ internalFactor(P:PolK, sqrfree:PolK -> Factored(PolK)) : Factored(PolK) ==
+ result : Factored(PolK)
+ if (d := minimumDegree(P)) > 0 then
+ P := P quo monomial(1, d)
+ result := primeFactor(X, d)
+ else
+ result := 1
+ degree(P) = 0 => P * result
+ if (lcP := leadingCoefficient(P)) ^= 1 then P := inv(lcP) * P
+ degree(P) = 1 => lcP::PolK * primeFactor(P, 1) * result
+ sqfP : Factored(PolK) := sqrfree(P)
+ for x in factors(sqfP) repeat
+ xFactors : List(PolK) := internalFactorSquareFree(x.factor)
+ result:= result * */[primeFactor(Q, x.exponent) for Q in xFactors]
+ return lcP::PolK * result
+
+ factorUsingYun(P : PolK) : Factored(PolK) == internalFactor(P, Yun)
+
+ factorUsingMusser(P : PolK) : Factored(PolK) == internalFactor(P, Musser)
+
+ factor(P : PolK) : Factored(PolK) == factorUsingYun(P)
+
+ factorSquareFree(P : PolK) : List(PolK) ==
+ degree(P) = 0 => []
+ discriminant(P) = 0 => error("factorSquareFree : non quadratfrei")
+ if (lcP := leadingCoefficient(P)) ^= 1 then P := inv(lcP) * P
+ return internalFactorSquareFree(P)
+
+ factorCantorZassenhaus(P : PolK, d : NonNegativeInteger) : List(PolK) ==
+ if (lcP := leadingCoefficient(P)) ^= 1 then P := inv(lcP) * P
+ degree(P) = 1 => [P]
+ return internalFactorCZ(P, d, pPowers(P))
+
+ qExp(Q : PolK, XqPowers : PrimitiveArray(PolK)) : PolK ==
+ Q' : PolK := 0
+ while Q ^= 0 repeat
+ Q' := Q' + leadingCoefficient(Q) * XqPowers(degree(Q))
+ Q := reductum(Q)
+ return Q'
+
+ qPowers (Xq : PolK, P : PolK) : PrimitiveArray(PolK) == -- Xq = X**q mod P
+ n := degree(P)
+ result : PrimitiveArray(PolK) := new(n, 1)
+ result(1) := Q := Xq
+ for i in 2 .. n-1 repeat (Q := Q*Xq rem P ; result(i) := Q)
+ return result
+
+ discriminantTest?(P : PolK) : Boolean ==
+ (delta : K := discriminant(P)) = 0 => true
+ StickelbergerTest : Boolean := (delta ** q' = 1) = even?(degree(P))
+ return StickelbergerTest
+
+ evenCharacteristicIrreducible?(P : PolK) : Boolean ==
+ (n := degree(P)) = 0 => false
+ n = 1 => true
+ degree(gcd(P, D(P))) > 0 => false
+ if (lcP := leadingCoefficient(P)) ^= 1 then P := inv(lcP) * P
+ S : PolK := exp(X, q, P)
+ if degree(gcd(S - X, P)) > 0 then
+ return false
+ if n < 4 then return true
+ maxDegreeToTest : NonNegativeInteger := n quo 2
+ XqPowers : PrimitiveArray(PolK) := qPowers(S, P)
+ for i in 2 .. maxDegreeToTest repeat
+ S := qExp(S, XqPowers)
+ if degree(gcd(S - X, P)) > 0 then
+ return false
+ return true
+
+ oddCharacteristicIrreducible?(P : PolK) : Boolean ==
+ (n := degree(P)) = 0 => false
+ n = 1 => true
+ discriminantTest?(P) => false
+ if (lcP := leadingCoefficient(P)) ^= 1 then P := inv(lcP) * P
+ S : PolK := exp(X, q, P)
+ if degree(gcd(S - X, P)) > 0 then
+ return false
+ if n < 6 then return true
+ maxDegreeToTest : NonNegativeInteger := n quo 3
+ XqPowers : PrimitiveArray(PolK) := qPowers(S, P)
+ for i in 2 .. maxDegreeToTest repeat
+ S := qExp(S, XqPowers)
+ if degree(gcd(S - X, P)) > 0 then
+ return false
+ return true
+
+ if p = 2 then
+
+ irreducible?(P : PolK) : Boolean == evenCharacteristicIrreducible?(P)
+
+ else
+
+ irreducible?(P : PolK) : Boolean == oddCharacteristicIrreducible?(P)
+
+\end{chunk}
+\begin{chunk}{FFFACTOR.dotabb}
+"FFFACTOR" [color="#FF4488",href="bookvol10.4.pdf#nameddest=FFFACTOR"]
+"PFECAT" [color="#4488FF",href="bookvol10.2.pdf#nameddest=PFECAT"]
+"FFFACTOR" -> "PFECAT"
+
+\end{chunk}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{package FFFACTSE FiniteFieldFactorizationWithSizeParseBySideEffect}
\begin{chunk}{FiniteFieldFactorizationWithSizeParseBySideEffect.input}
)set break resume
@@ -174874,6 +175150,7 @@ ZeroDimensionalSolvePackage(R,ls,ls2): Exports == Implementation where
\getchunk{package FORDER FindOrderFinite}
\getchunk{package FAMR2 FiniteAbelianMonoidRingFunctions2}
\getchunk{package FDIV2 FiniteDivisorFunctions2}
+\getchunk{package FFFACTOR FiniteFieldFactorization}
\getchunk{package FFFACTSE FiniteFieldFactorizationWithSizeParseBySideEffect}
\getchunk{package FFF FiniteFieldFunctions}
\getchunk{package FFHOM FiniteFieldHomomorphisms}
diff --git a/books/bookvol5.pamphlet b/books/bookvol5.pamphlet
index 187deb4..eca5c02 100644
--- a/books/bookvol5.pamphlet
+++ b/books/bookvol5.pamphlet
@@ -24330,8 +24330,9 @@ otherwise the new algebra won't be loaded by the interpreter when needed.
(|FileName| . FNAME)
(|FiniteAbelianMonoidRingFunctions2| . FAMR2)
(|FiniteDivisorFunctions2| . FDIV2)
- (|FiniteFieldFactorizationWithSizeParseBySideEffect| . FFFACTSE)
(|FiniteField| . FF)
+ (|FiniteFieldFactorization| . FFFACTOR)
+ (|FiniteFieldFactorizationWithSizeParseBySideEffect| . FFFACTSE)
(|FiniteFieldCyclicGroup| . FFCG)
(|FiniteFieldPolynomialPackage2| . FFPOLY2)
(|FiniteFieldNormalBasis| . FFNB)
diff --git a/books/ps/v104finitefieldfactorization.eps b/books/ps/v104finitefieldfactorization.eps
new file mode 100644
index 0000000..f1763ca
--- /dev/null
+++ b/books/ps/v104finitefieldfactorization.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 132 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 132 152
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 96 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
+93 112 lineto
+93 -5 lineto
+closepath fill
+1 setlinewidth
+0.16355 0.45339 0.92549 graphcolor
+newpath -4 -5 moveto
+-4 112 lineto
+93 112 lineto
+93 -5 lineto
+closepath stroke
+% FFFACTOR
+gsave
+[ /Rect [ 0 72 88 108 ]
+ /Border [ 0 0 0 ]
+ /Action << /Subtype /URI /URI (bookvol10.4.pdf#nameddest=FFFACTOR) >>
+ /Subtype /Link
+/ANN pdfmark
+0.93939 0.73333 1 nodecolor
+newpath 88 108 moveto
+0 108 lineto
+0 72 lineto
+88 72 lineto
+closepath fill
+1 setlinewidth
+filled
+0.93939 0.73333 1 nodecolor
+newpath 88 108 moveto
+0 108 lineto
+0 72 lineto
+88 72 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+7.5 86.4 moveto 73 (FFFACTOR) alignedtext
+grestore
+% PFECAT
+gsave
+[ /Rect [ 9 0 79 36 ]
+ /Border [ 0 0 0 ]
+ /Action << /Subtype /URI /URI (bookvol10.2.pdf#nameddest=PFECAT) >>
+ /Subtype /Link
+/ANN pdfmark
+0.60606 0.73333 1 nodecolor
+newpath 79 36 moveto
+9 36 lineto
+9 0 lineto
+79 0 lineto
+closepath fill
+1 setlinewidth
+filled
+0.60606 0.73333 1 nodecolor
+newpath 79 36 moveto
+9 36 lineto
+9 0 lineto
+79 0 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+16.5 14.4 moveto 55 (PFECAT) alignedtext
+grestore
+% FFFACTOR->PFECAT
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 44 71.83 moveto
+44 64.13 44 54.97 44 46.42 curveto
+stroke
+0 0 0 edgecolor
+newpath 47.5 46.41 moveto
+44 36.41 lineto
+40.5 46.41 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 47.5 46.41 moveto
+44 36.41 lineto
+40.5 46.41 lineto
+closepath stroke
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+end
+restore
+%%EOF
diff --git a/changelog b/changelog
index e8de559..e2f9290 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,8 @@
+20130321 tpd src/axiom-website/patches.html 20130321.01.tpd.patch
+20130321 tpd books/ps/v104finitefieldfactorization.eps add FFFACTOR
+20130321 tpd src/algebra/Makefile compile FiniteFieldFactorization
+20130321 tpd books/bookvol5 expose FiniteFieldFactorization
+20130321 tpd books/bookvol10.4 add FiniteFieldFactorization
20130320 tpd src/axiom-website/patches.html 20130320.01.tpd.patch
20130320 tpd src/input/richhyper200-299.input cleanup
20130320 tpd src/input/richhyper000-099.input cleanup
diff --git a/src/algebra/Makefile.pamphlet b/src/algebra/Makefile.pamphlet
index 6811bd9..1f75a01 100644
--- a/src/algebra/Makefile.pamphlet
+++ b/src/algebra/Makefile.pamphlet
@@ -5868,7 +5868,8 @@ LAYER11=\
${OUT}/ERROR.o ${OUT}/EVALCYC.o ${OUT}/EXP3D.o \
${OUT}/E04DGFA.o ${OUT}/E04FDFA.o \
${OUT}/E04GCFA.o ${OUT}/E04JAFA.o ${OUT}/E04UCFA.o ${OUT}/FACUTIL.o \
- ${OUT}/FF.o ${OUT}/FFCG.o ${OUT}/FFCGX.o ${OUT}/FFFG.o \
+ ${OUT}/FF.o ${OUT}/FFFACTOR.o \
+ ${OUT}/FFCG.o ${OUT}/FFCGX.o ${OUT}/FFFG.o \
${OUT}/FFFGF.o ${OUT}/FFHOM.o ${OUT}/FFNB.o ${OUT}/FFNBX.o \
${OUT}/FFPOLY.o ${OUT}/FFSQFR.o \
${OUT}/FFX.o ${OUT}/FFSLPE.o ${OUT}/FGLMICPK.o \
@@ -6714,6 +6715,22 @@ LAYER11=\
/*"FF" -> {"OCAMON"; "OAMON"; "OASGP"; "ORDSET"; "INS"; "OINTDOM"}*/
/*"FF" -> {"ORDRING"; "OAGROUP"; "LINEXP"; "PATMAB"; "CFCAT"; "REAL"}*/
+"FFFFACTOR" [color="#FF4488",href="bookvol10.4.pdf#nameddest=FFFFACTOR"]
+/*"FFFACTOR" -> {"FFIELDC", "FPC", "FIELD", "EUCDOM", "PID", "GCDDOM"}*/
+/*"FFFACTOR" -> {"INTDOM", "COMRING", "RING", "RNG", "ABELGRP", "CABMON"}*/
+/*"FFFACTOR" -> {"ABELMON", "ABELSG", "SETCAT", "BASTYPE", "KOERCE","SGROUP"}*/
+/*"FFFACTOR" -> {"MONOID", "LMODULE", "BMODULE", "RMODULE", "ALGEBRA"}*/
+/*"FFFACTOR" -> {"MODULE", "ENTIRER", "UFD", "DIVRING", "CHARNZ", "FINITE"}*/
+/*"FFFACTOR" -> {"STEP", "DIFRING", "UPOLYC", "POLYCAT", "PDRING", "FAMR"}*/
+/*"FFFACTOR" -> {"AMR", "CHARZ", "FRETRCT", "RETRACT", "EVALAB", "IEVALAB"}*/
+/*"FFFACTOR" -> {"FLINEXP", "LINEXP", "ORDSET", "KONVERT", "PATMAB"}*/
+"FFFACTOR" -> "PFECAT"
+/*"FFFACTOR" -> {"ELTAB", "DIFEXT", "NNI", "INT", "PI", "PRIMARR", "A1AGG"}*/
+/*"FFFACTOR" -> {"FLAGG", "LNAGG", "IXAGG", "HOAGG", "AGG", "TYPE", "ELTAGG"}*/
+/*"FFFACTOR" -> {"CLAGG", "BOOLEAN", "SINT", "LIST", "ILIST", "LSAGG-"}*/
+/*"FFFACTOR" -> {"STAGG-", "INS-", "INS", "OINTDOM", "ORDRING", "OAGROUP"}*/
+/*"FFFACTOR" -> {"OCAMON", "OAMON", "OASGP", "CFCAT", "REAL"}*/
+
"FFCG" [color="#88FF44",href="bookvol10.3.pdf#nameddest=FFCG"]
"FFCG" -> "FAXF"
/*"FFCG" -> {"XF"; "FIELD"; "EUCDOM"; "PID"; "GCDDOM"; "INTDOM"}*/
@@ -18083,6 +18100,7 @@ REGRESS= \
FiniteFieldCyclicGroupExtensionByPolynomial.regress \
FiniteFieldExtension.regress \
FiniteFieldExtensionByPolynomial.regress \
+ FiniteFieldFactorization.regress \
FiniteFieldFactorizationWithSizeParseBySideEffect.regress \
FiniteFieldFunctions.regress \
FiniteFieldHomomorphisms.regress \
diff --git a/src/axiom-website/patches.html b/src/axiom-website/patches.html
index a2d0f79..088f509 100644
--- a/src/axiom-website/patches.html
+++ b/src/axiom-website/patches.html
@@ -4109,5 +4109,7 @@ fix broken tests
regression test cleaup
20130320.01.tpd.patch
regression test cleaup
+20130321.01.tpd.patch
+books/bookvol10.4 add FiniteFieldFactorization