diff --git a/books/bookvol10.4.pamphlet b/books/bookvol10.4.pamphlet
index be80e60..0da85da 100644
--- a/books/bookvol10.4.pamphlet
+++ b/books/bookvol10.4.pamphlet
@@ -268,6 +268,210 @@ in the bootstrap set. Thus,
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 \chapter{Chapter A}
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{package AFALGRES AffineAlgebraicSetComputeWithResultant}
+<<AffineAlgebraicSetComputeWithResultant.input>>=
+)set break resume
+)sys rm -f AffineAlgebraicSetComputeWithResultant.output
+)spool AffineAlgebraicSetComputeWithResultant.output
+)set message test on
+)set message auto off
+)clear all
+
+--S 1 of 1
+)show AffineAlgebraicSetComputeWithResultant
+--R AffineAlgebraicSetComputeWithResultant(K: Field,symb: List Symbol,PolyRing: PolynomialCategory(K,E,OrderedVariableList symb),E: DirectProductCategory(# symb,NonNegativeInteger),ProjPt: ProjectiveSpaceCategory K)  is a package constructor
+--R Abbreviation for AffineAlgebraicSetComputeWithResultant is AFALGRES 
+--R This constructor is exposed in this frame.
+--R Issue )edit bookvol10.4.pamphlet to see algebra source code for AFALGRES 
+--R
+--R------------------------------- Operations --------------------------------
+--R affineAlgSet : List PolyRing -> Union(List ProjPt,"failed",Infinite,Integer)
+--R affineAlgSetLocal : List SparseUnivariatePolynomial SparseUnivariatePolynomial K -> Union(List ProjPt,"failed",Infinite,Integer)
+--R affineRationalPoints : (PolyRing,PositiveInteger) -> Union(List ProjPt,"failed",Infinite,Integer)
+--R affineSingularPoints : PolyRing -> Union(List ProjPt,"failed",Infinite,Integer)
+--R affineSingularPoints : SparseUnivariatePolynomial SparseUnivariatePolynomial K -> Union(List ProjPt,"failed",Infinite,Integer)
+--R allPairsAmong : List SparseUnivariatePolynomial SparseUnivariatePolynomial K -> List List SparseUnivariatePolynomial SparseUnivariatePolynomial K
+--R polyRing2UPUP : PolyRing -> SparseUnivariatePolynomial SparseUnivariatePolynomial K
+--R
+--E 1
+
+)spool
+)lisp (bye)
+@
+<<AffineAlgebraicSetComputeWithResultant.help>>=
+====================================================================
+AffineAlgebraicSetComputeWithResultant examples
+====================================================================
+
+See Also:
+o )show AffineAlgebraicSetComputeWithResultant
+
+@
+\pagehead{AffineAlgebraicSetComputeWithResultant}{AFALGRES}
+\pagepic{ps/v104affinealgebraicsetcomputewithresultant.eps}{AFALGRES}{1.00}
+
+{\bf Exports:}\\
+\begin{tabular}{lll}
+\cross{AFALGRES}{affineAlgSet} &
+\cross{AFALGRES}{affineAlgSetLocal} &
+\cross{AFALGRES}{affineRationalPoints} \\
+\cross{AFALGRES}{affineSingularPoints} &
+\cross{AFALGRES}{allPairsAmong} &
+\cross{AFALGRES}{polyRing2UPUP} 
+\end{tabular}
+
+<<package AFALGRES AffineAlgebraicSetComputeWithResultant>>=
+)abbrev package AFALGRES AffineAlgebraicSetComputeWithResultant
+++ Author: Gaetan Hache
+++ Date Created: 17 nov 1992
+++ Date Last Updated: May 2010 by Tim Daly
+++ Description:  
+++ The following is part of the PAFF package
+AffineAlgebraicSetComputeWithResultant(K,symb,PolyRing,E,ProjPt):Ex==Impl where
+  K   : Field
+  symb: List(Symbol)
+  OV  ==> OrderedVariableList(symb)
+  E : DirectProductCategory(#symb,NonNegativeInteger)
+  PolyRing : PolynomialCategory(K,E,OV)
+  ProjPt   : ProjectiveSpaceCategory(K)
+  PCS      : LocalPowerSeriesCategory(K)
+  
+  SUP  ==> SparseUnivariatePolynomial
+  UPUP ==> SUP(SUP(K))
+  NNI  ==> NonNegativeInteger
+  RFP  ==> RootsFindingPackage
+
+  Ex ==>  with
+
+    affineSingularPoints: PolyRing -> _
+                          Union(List(ProjPt),"failed","Infinite",Integer)
+
+    affineSingularPoints: UPUP -> _
+                          Union(List(ProjPt),"failed","Infinite",Integer)
+
+    affineAlgSetLocal: List UPUP -> _
+                       Union(List(ProjPt),"failed","Infinite",Integer)
+
+    affineAlgSet: List PolyRing  -> _
+                  Union(List ProjPt ,"failed","Infinite",Integer)
+
+    polyRing2UPUP: PolyRing -> UPUP
+
+    allPairsAmong: List UPUP -> List List UPUP
+
+    affineRationalPoints: (PolyRing, PositiveInteger) -> _
+                          Union(List(ProjPt),"failed","Infinite",Integer)
+
+  Impl ==>  add
+    
+    import ProjPt
+        
+    evAtcoef: (UPUP,K) -> SUP(K)
+   
+    evAtcoef(pol,a)==
+      zero?(pol) => 0
+      dd:= degree pol
+      lc:= leadingCoefficient pol
+      monomial( lc(a), dd )$SUP(K)  + evAtcoef( reductum(pol), a )
+
+    polyRing2UPUP(pol)==
+      zero?(pol) => 0
+      dd:= degree pol
+      lc:= leadingCoefficient pol
+      pp:= parts dd
+      monomial(monomial(lc,pp.1)$SUP(K),pp.2)$UPUP+polyRing2UPUP(reductum(pol))
+
+    if K has FiniteFieldCategory then
+      
+      affineRationalPoints(crv:PolyRing,extdegree:PositiveInteger) ==
+	listPtsIdl:List(ProjPt):= empty()
+        x:= monomial(1,directProduct(vector([1,0,0])$Vector(NNI)))$PolyRing
+        y:= monomial(1,directProduct(vector([0,1,0])$Vector(NNI)))$PolyRing
+	if K has PseudoAlgebraicClosureOfFiniteFieldCategory then 
+	  setTower!(1$K)$K
+        q:= size()$K 
+        px:= x**(q**extdegree) - x
+	py:= y**(q**extdegree) - y
+        rpts:= affineAlgSet([crv,px,py])
+        -- si les  3  tests qui suivent ne sont pas la, 
+        -- alors ca ne compile pas !!! ??? 
+        rpts case "failed" => _
+          error "case failed: From affineRationalPoints in AFALGRES"
+        rpts case "Infinite" => _
+          error "case infinite: From affineRationalPoints in AFALGRES"
+        rpts case Integer => _
+          error "case Integer: From affineRationalPoints in AFALGRES"
+        rpts case List(ProjPt) => rpts 
+        error "case unknown: From affineRationalPoints in AFALGRES"
+
+    allPairsAmong(lp)==
+      #lp = 2 => [lp]
+      rlp:=rest lp
+      subL:= allPairsAmong rlp
+      pol:=first lp
+      frontL:= [[pol,p] for p in rlp]
+      concat( frontL , subL )
+
+    affineSingularPoints(pol:PolyRing)==
+      affineSingularPoints( polyRing2UPUP pol )
+
+    affineSingularPoints(pol:UPUP)==
+      ground? pol => "failed"
+      lc := coefficients pol
+      lcb := [ ground?( c )$SUP(K) for c in lc ]
+      reduce("and" , lcb) => "failed"
+      dy:=differentiate(pol)
+      dx:=map(differentiate$SUP(K),pol)
+      affineAlgSetLocal( [ pol, dy, dx ] )
+
+    resultantL: List UPUP -> SUP(K)
+    resultantL(lp)==
+      g:=first lp
+      h:= last lp
+      resultant(g,h)
+   
+    affineAlgSet(lpol:List PolyRing)==
+      affineAlgSetLocal( [ polyRing2UPUP pol for pol in lpol ] )
+
+    affineAlgSetLocal(lpol:List UPUP)== 
+      listPtsIdl:List(ProjPt)
+      allP:= allPairsAmong lpol
+      beforGcd:List SUP(K) := [resultantL(lp) for lp in allP]
+      polyZeroX:SUP(K):=gcd beforGcd
+      zero? polyZeroX => "failed"
+      listZeroY:List(K):=empty()
+      listZeroX:List(K):=empty()
+      recOfZerosX:=distinguishedRootsOf(polyZeroX,1$K)$RFP(K)
+      degExtX:=recOfZerosX.extDegree
+      listZeroX:List K := recOfZerosX.zeros
+      listOfExtDeg:List(Integer):=empty()
+      listOfExtDeg:=cons(degExtX,listOfExtDeg)
+      lpolEval:List SUP(K)
+      for a in listZeroX repeat
+        lpolEval := [ evAtcoef(p,a) for p in lpol ]
+	recOfZerosOfIdeal:=distinguishedCommonRootsOf( lpolEval ,a)$RFP(K)
+        listZeroY:= recOfZerosOfIdeal.zeros
+        listOfExtDeg:=cons(recOfZerosOfIdeal.extDegree,listOfExtDeg)
+        listPtsIdl:=
+          concat( [projectivePoint([a,b,1]) for b in listZeroY] ,listPtsIdl)
+      degExt:=lcm listOfExtDeg
+      zero?(degExt) => 
+        print(("AFALGRES:Infinite number of points")::OutputForm)
+        "Infinite" 
+      ^one?(degExt) =>
+        print(("AFALGRES:You need an extension of degree")::OutputForm)
+        print(degExt::OutputForm)
+        degExt
+      listPtsIdl
+
+@
+<<AFALGRES.dotabb>>=
+"AFALGRES" [color="#FF4488",href="bookvol10.4.pdf#nameddest=AFALGRES"]
+"RFP" [color="#FF4488",href="bookvol10.4.pdf#nameddest=RFP"]
+"AFALGRES" -> "RFP"
+
+@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 \section{package AF AlgebraicFunction}
 \pagehead{AlgebraicFunction}{AF}
 \pagepic{ps/v104algebraicfunction.ps}{AF}{1.00}
@@ -5572,6 +5776,313 @@ BezoutMatrix(R,UP,M,Row,Col): Exports == Implementation where
 
 @
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{package BLUPPACK BlowUpPackage}
+<<BlowUpPackage.input>>=
+)set break resume
+)sys rm -f BlowUpPackage.output
+)spool BlowUpPackage.output
+)set message test on
+)set message auto off
+)clear all
+
+--S 1 of 1
+)show BlowUpPackage
+--R BlowUpPackage(K: Field,symb: List Symbol,PolyRing: FiniteAbelianMonoidRing(K,E),E: DirectProductCategory(# symb,NonNegativeInteger),BLMET: BlowUpMethodCategory)  is a package constructor
+--R Abbreviation for BlowUpPackage is BLUPPACK 
+--R This constructor is exposed in this frame.
+--R Issue )edit bookvol10.4.pamphlet to see algebra source code for BLUPPACK 
+--R
+--R------------------------------- Operations --------------------------------
+--R applyTransform : (PolyRing,BLMET) -> PolyRing
+--R biringToPolyRing : (DistributedMultivariatePolynomial([construct,QUOTEX,QUOTEY],K),BLMET) -> PolyRing
+--R newtonPolySlope : DistributedMultivariatePolynomial([construct,QUOTEX,QUOTEY],K) -> List List NonNegativeInteger
+--R polyRingToBlUpRing : (PolyRing,BLMET) -> DistributedMultivariatePolynomial([construct,QUOTEX,QUOTEY],K)
+--R quadTransform : (DistributedMultivariatePolynomial([construct,QUOTEX,QUOTEY],K),NonNegativeInteger,BLMET) -> DistributedMultivariatePolynomial([construct,QUOTEX,QUOTEY],K)
+--R stepBlowUp : (DistributedMultivariatePolynomial([construct,QUOTEX,QUOTEY],K),AffinePlane K,BLMET,K) -> Record(mult: NonNegativeInteger,subMult: NonNegativeInteger,blUpRec: List Record(recTransStr: DistributedMultivariatePolynomial([construct,QUOTEX,QUOTEY],K),recPoint: AffinePlane K,recChart: BLMET,definingExtension: K))
+--R
+--E 1
+
+)spool
+)lisp (bye)
+@
+<<BlowUpPackage.help>>=
+====================================================================
+BlowUpPackage examples
+====================================================================
+
+See Also:
+o )show BlowUpPackage
+
+@
+\pagehead{BlowUpPackage}{BLUPPACK}
+\pagepic{ps/v104blowuppackage.eps}{BLUPPACK}{1.00}
+
+{\bf Exports:}\\
+\begin{tabular}{lll}
+\cross{BLUPPACK}{applyTransform} &
+\cross{BLUPPACK}{biringToPolyRing} &
+\cross{BLUPPACK}{newtonPolySlope} \\
+\cross{BLUPPACK}{polyRingToBlUpRing} &
+\cross{BLUPPACK}{quadTransform} &
+\cross{BLUPPACK}{stepBlowUp} 
+\end{tabular}
+
+<<package BLUPPACK BlowUpPackage>>=
+)abbrev package BLUPPACK BlowUpPackage
+++ Author: Gaetan Hache
+++ Date Created: 17 nov 1992
+++ Date Last Updated: May 2010 by Tim Daly
+++ Description:  
+++ The following is part of the PAFF package
+BlowUpPackage(K,symb,PolyRing,E,  BLMET):Exports == Implementation where 
+  K         : Field
+  symb      : List Symbol
+  PolyRing  : FiniteAbelianMonoidRing(K,E)
+  E         : DirectProductCategory(#symb,NonNegativeInteger)
+  BLMET     : BlowUpMethodCategory
+
+  NNI      ==> NonNegativeInteger
+  RFP      ==> RootsFindingPackage
+  NP       ==> NewtonPolygon( K, BlUpRing, E2 , #bls)
+  PackPoly ==> PackageForPoly(K,BlUpRing,E2,#bls)
+  bls      ==>  ['X,'Y]
+  BlUpRing ==> DistributedMultivariatePolynomial( bls , K )
+  E2       ==> DirectProduct(#bls , NNI) 
+  AFP      ==> AffinePlane(K)
+
+  blowUpRec    ==> Record(recTransStr:BlUpRing,recPoint:AFP,recChart:BLMET,_
+                         definingExtension:K) 
+  blowUpReturn ==> Record(mult:NonNegativeInteger,subMult: NNI, _
+                            blUpRec:List(blowUpRec))
+  recStr    ==> Record( sM: NNI , blRec:List blowUpRec)
+
+  Exports ==>  with
+
+      applyTransform: (PolyRing,BLMET) -> PolyRing 
+        ++ quadTransform(pol,chart) apply the quadratique transformation to 
+        ++ pol specified by chart which consist of 3 integers. The last one 
+        ++ indicates which varibles is set to 1, the first on indicates 
+        ++ which variable remains unchange, and the second one indicates
+        ++ which variable oon which the transformation is applied. 
+        ++ For example, [2,3,1] correspond to the following: 
+        ++ x -> 1, y -> y, z -> yz (here the variable are [x,y,z] in BlUpRing).
+
+      quadTransform: (BlUpRing,NNI,BLMET) -> BlUpRing  -- CHH
+        ++ quadTransform(pol,n,chart) apply the quadratique transformation 
+        ++ to pol specified by chart has in quadTransform(pol,chart) and 
+        ++ extract x**n to it, where x is the variable specified by the 
+        ++ first integer in chart (blow-up exceptional coordinate).
+
+      stepBlowUp:(BlUpRing,AFP,BLMET,K) -> blowUpReturn  -- CHH
+        ++ stepBlowUp(pol,pt,n) blow-up the point pt on the curve defined 
+        ++ by pol in the affine neighbourhood specified by n.
+
+      newtonPolySlope: BlUpRing -> List List(NNI)
+
+      polyRingToBlUpRing: (PolyRing, BLMET) -> BlUpRing
+
+      biringToPolyRing: (BlUpRing, BLMET) -> PolyRing
+
+  Implementation ==> add
+
+    import BlUpRing
+    import AFP
+    import RFP(K)
+    import PackPoly
+    import NP
+
+    makeAff( l:List(K) , chart: BLMET ):AFP ==
+          (excepCoord chart) = 1 => affinePoint( l )$AFP
+          affinePoint( reverse l )$AFP
+
+    blowExp: (E2, NNI, BLMET ) -> E2
+
+    maxOf: (K,K) -> K
+
+    getStrTrans: ( BlUpRing , List BlUpRing , BLMET, K ) -> recStr
+
+    stepBlowUp(crb:BlUpRing,pt:AFP,chart:BLMET,actualExtension:K) == 
+      -- next is with Hamburger-Noether method
+      BLMET has HamburgerNoether =>       
+        nV:Integer:= chartCoord chart
+        crbTrans:BlUpRing:=translate(crb, list(pt))$PackPoly
+        newtPol:= newtonPolygon( crbTrans, quotValuation chart, _
+                                 ramifMult chart, type chart )$NP
+        multPt:= multiplicity(newtPol)$NP 
+        one?(multPt) =>
+          [multPt, 0 , empty() ]$blowUpReturn
+        listOfgetTr:List recStr:= _
+          [ getStrTrans( crbTrans , edge , chart , actualExtension ) _
+            for edge in newtPol ]
+        lsubM: List NNI :=  [ ll.sM for ll in listOfgetTr]
+        subM := reduce( "+" , lsubM )
+        llistOfRec: List List blowUpRec :=  [ ll.blRec for ll in listOfgetTr]
+        listOfRec:= concat llistOfRec
+        [ multPt, subM ,listOfRec]$blowUpReturn
+      -- next is with usual quadratic transform.
+
+      BLMET has QuadraticTransform =>	
+        nV:Integer:= chartCoord chart
+        lpt:List(K) := list(pt)$AFP
+        crbTrans:=translate(crb,lpt)
+        minForm:=minimalForm(crbTrans)
+        multPt:=totalDegree( minForm)$PackPoly 
+        listRec:List(blowUpRec):=empty()
+        one?(multPt) => [multPt, 0 , listRec]$blowUpReturn
+        -- now pt is singular !!!!
+        lstInd:=[i::PositiveInteger for i in 1..2 ] 
+        -- la ligne suivante fait un choix judicieux pour minimiser le 
+        -- degre' du transforme' stricte.
+        if degree( crbTrans , 2 )$PackPoly < degree( crbTrans , 1 )$PackPoly _
+           then  lstInd := reverse lstInd
+        ptInf:List(K):=[0$K,0$K]
+        laCarte:BLMET:=
+          ([last(lstInd), first(lstInd),nV] @  List Integer) :: BLMET
+        laCarteInf:BLMET:=
+          ([first(lstInd),last(lstInd),nV] @ List Integer ) :: BLMET
+        transStricte   :=quadTransform(crbTrans,multPt,laCarte)
+        transStricteInf:=quadTransform(crbTrans,multPt,laCarteInf)
+        listPtsSingEcl:List(AFP):=empty()
+        transStricteZero:BlUpRing:= replaceVarByOne(minForm,excepCoord laCarte)
+        recOfZeros:=_
+          distinguishedRootsOf(univariate(transStricteZero)$PackPoly ,_
+                                          actualExtension )$RFP(K)
+        degExt:=recOfZeros.extDegree
+        ^one?(degExt) =>
+          print(("You need an extension of degree")::OutputForm)
+          print(degExt::OutputForm)
+          error("Have a nice day")
+        listPtsSingEcl:=[makeAff([0$K,a]::List(K),laCarte) _ 
+                        for a in recOfZeros.zeros]
+        listRec:=[  
+                    [  transStricte,_
+                       ptS,laCarte,_
+  		     maxOf(a,actualExtension)]$blowUpRec_
+  		  for ptS in listPtsSingEcl_
+  	       for a in recOfZeros.zeros]
+        if zero?(constant(transStricteInf))$K then
+          listRec:= concat(listRec,[transStricteInf,_
+  	                          affinePoint(ptInf)$AFP,_
+  				  laCarteInf,_
+  				  actualExtension]$blowUpRec)
+        empty?(listRec) =>
+          error "Something is very wrong in blowing up!!!!!!"
+        [multPt, 0 ,listRec]$blowUpReturn
+      error "Desingularisation is not implemented for the blowing up method chosen, see BlowingUpMethodCategory."
+
+    getStrTrans( crb , inedge , actChart, actualExtension ) == 
+      edge:= copy inedge
+      s := slope(edge)$NP
+      sden:Integer
+      snum:Integer
+      i1:Integer
+      i2:Integer
+      if s.type case "right"  then 
+        sden:= s.base
+        snum:=s.height
+        i1:=1
+        i2:=2
+      else -- interchange les roles de X et Y .
+        sden:= s.height
+        snum:= s.base
+        i1:=2
+        i2:=1
+        edge := copy reverse inedge
+      ee := entries( degree first edge) pretend List Integer
+      euclq: Integer 
+      if one?(snum) then 
+        euclq:=1
+      else 
+        euclq   := s.quotient 
+      -- sMult est la somme des  multiplicite des  points infiniment 
+      -- voisin par une trans. quadratique 
+      sMult: NNI :=  ( ( euclq - 1 )   * ee.i2 ) pretend NNI
+      -- extMult est egal a la plus grande puissance de X que l'on peut 
+      --extraire de la transformee.
+      extMult := (ee.i1 + ee.i2 * euclq) pretend NonNegativeInteger
+      ch: BLMET
+      trStr:BlUpRing
+      listBlRec: List blowUpRec
+      ^zero?(s.reste ) =>  
+         ch:= createHN( i1 , i2 , chartCoord actChart, euclq , s.reste , _
+                       false , s.type)$BLMET
+         trStr:= quadTransform(crb, extMult , ch )
+         listBlRec:= [ [trStr,origin()$AFP,ch,actualExtension ]$blowUpRec ]
+         [ sMult , listBlRec  ]$recStr
+      polEdge := reduce( "+" , edge )
+      unipol:= univariate( replaceVarByOne( polEdge , i1 )$PackPoly )$PackPoly 
+      recOfZeros:= distinguishedRootsOf( unipol , actualExtension )$RFP(K)
+      degExt:=recOfZeros.extDegree
+      ^one?(degExt) =>
+          print(("You need an extension of degree")::OutputForm)
+          print(degExt::OutputForm)
+          error("Have a nice day")
+      listOfZeroes:List K:= [ z for z in recOfZeros.zeros | ^zero?(z) ]
+      empty? listOfZeroes => _
+        error " The curve is not absolutely irreducible since the Newton polygon has no sides "
+      ch:=_
+        createHN( i1 , i2, chartCoord actChart, euclq, 0, false, s.type)$BLMET
+      lsTr:BlUpRing:= quadTransform(crb, extMult , ch ) 
+      lAff:List AFP:=[makeAff([ 0$K, z]:: List K , ch) for z in listOfZeroes ]
+      listBlRec := [ [ lsTr,p,ch,maxOf( actualExtension , z) ]$blowUpRec_
+         for p in lAff for z in listOfZeroes ]
+      [sMult, listBlRec ]$recStr
+
+    blowExp(exp,mult,chart)== -- CHH
+      zero?( excepCoord chart) => exp
+      lexp:List NNI:=parts(exp)
+      ch1:Integer:= excepCoord chart
+      ch2:Integer:= transCoord chart
+      e1:Integer := lexp(ch1) pretend Integer
+      e2:Integer := lexp(ch2) pretend Integer
+      quotVal:Integer := quotValuation chart
+      lbexp:=[0,0] :: List(NNI)
+      lbexp(ch1):= ( e1 + quotVal * e2  - mult ) pretend NonNegativeInteger
+      lbexp(ch2):=lexp(ch2)
+      directProduct(vector(lbexp)$Vector(NNI))$E2
+
+    quadTransform(pol,mult,chart)==  -- CHH
+      mapExponents(blowExp(#1,mult,chart),pol)
+
+    polyRingToBlUpRing(pol,chart)==
+      zero? pol => 0
+      lc:= leadingCoefficient pol
+      d:=entries degree pol
+      ll:= [ d.i for i in 1..3 | ^( i = chartCoord(chart) ) ]
+      e:= directProduct( vector( ll)$Vector(NNI) )$E2
+      monomial(lc , e )$BlUpRing + polyRingToBlUpRing( reductum pol, chart )
+
+    biringToPolyRing(pol,chart)==
+      zero? pol => 0
+      lc:= leadingCoefficient pol
+      d:=entries degree pol
+      nV:= chartCoord chart
+      ll:List NNI:= 
+        nV = 1 => [ 0$NNI , d.1  , d.2 ]
+        nV = 2 => [ d.1  , 0$NNI , d.2 ]
+        [d.1 , d.2 , 0$NNI ]
+      e:= directProduct( vector( ll)$Vector(NNI) )$E
+      monomial(lc , e )$PolyRing  + biringToPolyRing( reductum pol, chart )
+
+    applyTransform(pol,chart)==
+      biringToPolyRing( quadTransform( polyRingToBlUpRing( pol, chart ) ,_
+                         0 , chart) , chart )
+  
+-- K has PseudoAlgebraicClosureOfFiniteFieldCategory => maxTower([a,b])$K
+-- K has PseudoAlgebraicClosureOfRationalNumberCategory  => maxTower([a,b])$K
+    maxOf(a:K,b:K):K ==
+      K has PseudoAlgebraicClosureOfPerfectFieldCategory  => maxTower([a,b])$K
+      1$K
+@
+<<BLUPPACK.dotabb>>=
+"BLUPPACK" [color="#FF4488",href="bookvol10.4.pdf#nameddest=BLUPPACK"]
+"RFP" [color="#FF4488",href="bookvol10.4.pdf#nameddest=RFP"]
+"NPOLYGON" [color="#FF4488",href="bookvol10.4.pdf#nameddest=NPOLYGON"]
+"BLUPPACK" -> "RFP"
+"BLUPPACK" -> "NPOLYGON"
+
+@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 \section{package BOUNDZRO BoundIntegerRoots}
 \pagehead{BoundIntegerRoots}{BOUNDZRO}
 \pagepic{ps/v104boundintegerroots.ps}{BOUNDZRO}{1.00}
@@ -155881,6 +156392,7 @@ ZeroDimensionalSolvePackage(R,ls,ls2): Exports == Implementation where
 \chapter{Chunk collections}
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 <<algebra>>=
+<<package AFALGRES AffineAlgebraicSetComputeWithResultant>>
 <<package AF AlgebraicFunction>>
 <<package INTHERAL AlgebraicHermiteIntegration>>
 <<package INTALG AlgebraicIntegrate>>
@@ -155903,6 +156415,7 @@ ZeroDimensionalSolvePackage(R,ls,ls2): Exports == Implementation where
 <<package BALFACT BalancedFactorisation>>
 <<package BOP1 BasicOperatorFunctions1>>
 <<package BEZOUT BezoutMatrix>>
+<<package BLUPPACK BlowUpPackage>>
 <<package BOUNDZRO BoundIntegerRoots>>
 <<package BRILL BrillhartTests>>
 
diff --git a/books/bookvol5.pamphlet b/books/bookvol5.pamphlet
index 68f9504..749047a 100644
--- a/books/bookvol5.pamphlet
+++ b/books/bookvol5.pamphlet
@@ -23829,6 +23829,7 @@ otherwise the new algebra won't be loaded by the interpreter when needed.
  '(
  ;;define the groups |basic| |naglink| |anna| |categories| |Hidden| |defaults|
   (|basic| 
+   (|AffineAlgebraicSetComputeWithResultant| . AFALGRES)
    (|AffinePlane| . AFFPL)
    (|AffinePlaneOverPseudoAlgebraicClosureOfFiniteField| . AFFPLPS)
    (|AffineSpace| . AFFSP)
@@ -23857,6 +23858,7 @@ otherwise the new algebra won't be loaded by the interpreter when needed.
    (|BinaryTree| . BTREE)
    (|Bits| . BITS)
    (|BlasLevelOne| . BLAS1)
+   (|BlowUpPackage| . BLUPPACK)
    (|BlowUpWithHamburgerNoether| . BLHN)
    (|BlowUpWithQuadTrans| . BLQT)
    (|Boolean| . BOOLEAN)
diff --git a/books/ps/v104affinealgebraicsetcomputewithresultant.eps b/books/ps/v104affinealgebraicsetcomputewithresultant.eps
new file mode 100644
index 0000000..71c1cb4
--- /dev/null
+++ b/books/ps/v104affinealgebraicsetcomputewithresultant.eps
@@ -0,0 +1,266 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: Graphviz version 2.20.2 (Mon Mar 30 10:09:11 UTC 2009)
+%%For: (root) root
+%%Title: pic
+%%Pages: 1
+%%BoundingBox: 36 36 134 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 134 152
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 98 116 boxprim clip newpath
+1 1 set_scale 0 rotate 40 40 translate
+% AFALGRES
+gsave
+[ /Rect [ 0 72 90 108 ]
+  /Border [ 0 0 0 ]
+  /Action << /Subtype /URI /URI (bookvol10.4.pdf#nameddest=AFALGRES) >>
+  /Subtype /Link
+/ANN pdfmark
+0.939 0.733 1.000 nodecolor
+newpath 90 108 moveto
+0 108 lineto
+0 72 lineto
+90 72 lineto
+closepath fill
+1 setlinewidth
+filled
+0.939 0.733 1.000 nodecolor
+newpath 90 108 moveto
+0 108 lineto
+0 72 lineto
+90 72 lineto
+closepath stroke
+0.000 0.000 0.000 nodecolor
+14 /Times-Roman set_font
+8 85.9 moveto 74 (AFALGRES) alignedtext
+grestore
+% RFP
+gsave
+[ /Rect [ 18 0 72 36 ]
+  /Border [ 0 0 0 ]
+  /Action << /Subtype /URI /URI (bookvol10.4.pdf#nameddest=RFP) >>
+  /Subtype /Link
+/ANN pdfmark
+0.939 0.733 1.000 nodecolor
+newpath 72 36 moveto
+18 36 lineto
+18 0 lineto
+72 0 lineto
+closepath fill
+1 setlinewidth
+filled
+0.939 0.733 1.000 nodecolor
+newpath 72 36 moveto
+18 36 lineto
+18 0 lineto
+72 0 lineto
+closepath stroke
+0.000 0.000 0.000 nodecolor
+14 /Times-Roman set_font
+31.5 13.9 moveto 27 (RFP) alignedtext
+grestore
+% AFALGRES->RFP
+gsave
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 45 72 moveto
+45 64 45 55 45 46 curveto
+stroke
+0.000 0.000 0.000 edgecolor
+newpath 48.5 46 moveto
+45 36 lineto
+41.5 46 lineto
+closepath fill
+1 setlinewidth
+solid
+0.000 0.000 0.000 edgecolor
+newpath 48.5 46 moveto
+45 36 lineto
+41.5 46 lineto
+closepath stroke
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+end
+restore
+%%EOF
diff --git a/books/ps/v104blowuppackage.eps b/books/ps/v104blowuppackage.eps
new file mode 100644
index 0000000..c2af6cc
--- /dev/null
+++ b/books/ps/v104blowuppackage.eps
@@ -0,0 +1,311 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: Graphviz version 2.20.2 (Mon Mar 30 10:09:11 UTC 2009)
+%%For: (root) root
+%%Title: pic
+%%Pages: 1
+%%BoundingBox: 36 36 212 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 212 152
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 176 116 boxprim clip newpath
+1 1 set_scale 0 rotate 40 40 translate
+% BLUPPACK
+gsave
+[ /Rect [ 28 72 118 108 ]
+  /Border [ 0 0 0 ]
+  /Action << /Subtype /URI /URI (bookvol10.4.pdf#nameddest=BLUPPACK) >>
+  /Subtype /Link
+/ANN pdfmark
+0.939 0.733 1.000 nodecolor
+newpath 118 108 moveto
+28 108 lineto
+28 72 lineto
+118 72 lineto
+closepath fill
+1 setlinewidth
+filled
+0.939 0.733 1.000 nodecolor
+newpath 118 108 moveto
+28 108 lineto
+28 72 lineto
+118 72 lineto
+closepath stroke
+0.000 0.000 0.000 nodecolor
+14 /Times-Roman set_font
+36 85.9 moveto 74 (BLUPPACK) alignedtext
+grestore
+% RFP
+gsave
+[ /Rect [ 0 0 54 36 ]
+  /Border [ 0 0 0 ]
+  /Action << /Subtype /URI /URI (bookvol10.4.pdf#nameddest=RFP) >>
+  /Subtype /Link
+/ANN pdfmark
+0.939 0.733 1.000 nodecolor
+newpath 54 36 moveto
+0 36 lineto
+0 0 lineto
+54 0 lineto
+closepath fill
+1 setlinewidth
+filled
+0.939 0.733 1.000 nodecolor
+newpath 54 36 moveto
+0 36 lineto
+0 0 lineto
+54 0 lineto
+closepath stroke
+0.000 0.000 0.000 nodecolor
+14 /Times-Roman set_font
+13.5 13.9 moveto 27 (RFP) alignedtext
+grestore
+% BLUPPACK->RFP
+gsave
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 61 72 moveto
+56 64 49 54 43 44 curveto
+stroke
+0.000 0.000 0.000 edgecolor
+newpath 46.27 42.62 moveto
+38 36 lineto
+40.33 46.34 lineto
+closepath fill
+1 setlinewidth
+solid
+0.000 0.000 0.000 edgecolor
+newpath 46.27 42.62 moveto
+38 36 lineto
+40.33 46.34 lineto
+closepath stroke
+grestore
+% NPOLYGON
+gsave
+[ /Rect [ 72 0 168 36 ]
+  /Border [ 0 0 0 ]
+  /Action << /Subtype /URI /URI (bookvol10.4.pdf#nameddest=NPOLYGON) >>
+  /Subtype /Link
+/ANN pdfmark
+0.939 0.733 1.000 nodecolor
+newpath 168 36 moveto
+72 36 lineto
+72 0 lineto
+168 0 lineto
+closepath fill
+1 setlinewidth
+filled
+0.939 0.733 1.000 nodecolor
+newpath 168 36 moveto
+72 36 lineto
+72 0 lineto
+168 0 lineto
+closepath stroke
+0.000 0.000 0.000 nodecolor
+14 /Times-Roman set_font
+80 13.9 moveto 80 (NPOLYGON) alignedtext
+grestore
+% BLUPPACK->NPOLYGON
+gsave
+1 setlinewidth
+0.000 0.000 0.000 edgecolor
+newpath 85 72 moveto
+90 64 97 54 103 44 curveto
+stroke
+0.000 0.000 0.000 edgecolor
+newpath 105.67 46.34 moveto
+108 36 lineto
+99.73 42.62 lineto
+closepath fill
+1 setlinewidth
+solid
+0.000 0.000 0.000 edgecolor
+newpath 105.67 46.34 moveto
+108 36 lineto
+99.73 42.62 lineto
+closepath stroke
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+end
+restore
+%%EOF
diff --git a/changelog b/changelog
index 42d3be7..7e3c5b8 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,9 @@
+20100522 tpd src/axiom-website/patches.html 20100522.02.tpd.patch
+20100522 tpd src/algebra/Makefile help and test for AFALGRES
+20100522 tpd books/bookvol5 expose AffineAlgebraicSetComputeWithResultant
+20100522 tpd books/bookvol10.4 add AffineAlgebraicSetComputeWithResultant
+20100522 tpd books/ps/v104affinealgebraicsetcomputewithresultant.eps added
+20100522 tpd books/ps/v104blowuppackage.eps added
 20100522 tpd src/axiom-website/patches.html 20100522.01.tpd.patch
 20100522 tpd src/algebra/Makefile help and test for NewtonPolygon
 20100522 tpd books/bookvol5 expose NewtonPolygon
diff --git a/src/algebra/Makefile.pamphlet b/src/algebra/Makefile.pamphlet
index 4db73c5..59a0a16 100644
--- a/src/algebra/Makefile.pamphlet
+++ b/src/algebra/Makefile.pamphlet
@@ -9295,11 +9295,12 @@ LAYER12=\
 
 @
 \subsection{Layer13}
-Depends on: DIAGG FRAMALG MDAGG SMATCAT UPXSCCA\\
+Depends on: DIAGG FRAMALG MDAGG SMATCAT UPXSCCA RFP\\
 Used by next layer: FSAGG KDAGG MSETAGG MONOGEN
 <<layer13>>=
 
 LAYER13=\
+  ${OUT}/AFALGRES.o \
   ${OUT}/DPMM.o     ${OUT}/EFUPXS.o  ${OUT}/FFINTBAS.o ${OUT}/FRIDEAL.o  \
   ${OUT}/FRIDEAL2.o ${OUT}/FRMOD.o   ${OUT}/FSAGG.o    ${OUT}/FSAGG-.o   \
   ${OUT}/IBATOOL.o  ${OUT}/INTFACT.o ${OUT}/KDAGG.o    ${OUT}/KDAGG-.o   \
@@ -9309,7 +9310,27 @@ LAYER13=\
 @
 <<layerpic>>=
 /* layer 13 */
-/* depends on: DIAGG FRAMALG MDAGG SMATCAT UPXSCCA */
+/* depends on: DIAGG FRAMALG MDAGG SMATCAT UPXSCCA RFP*/
+
+"AFALGRES" [color="#FF4488",href="bookvol10.4.pdf#nameddest=AFALGRES"]
+"AFALGRES" -> "RFP" 
+/*"AFALGRES" -> {"PRSPCAT"; "LOCPOWC"; "SETCATD"; "PACFFC"; "CHARZ"}*/
+/*"AFALGRES" -> {"PACPERC"; "FIELD"; "EUCDOM"; "PID"; "GCDDOM"; "INTDOM"}*/
+/*"AFALGRES" -> {"COMRING"; "RING"; "RNG"; "ABELGRP"; "CABMON"; "ABELMON"}*/
+/*"AFALGRES" -> {"ABELSG"; "SETCAT"; "BASTYPE"; "KOERCE"; "SGROUP"; "MONOID"}*/
+/*"AFALGRES" -> {"LMODULE"; "BMODULE"; "RMODULE"; "ALGEBRA"; "MODULE"}*/
+/*"AFALGRES" -> {"UFD"; "DIVRING"; "POLYCAT"; "PDRING"; "FAMR"; "AMR"}*/
+/*"AFALGRES" -> {"CHARNZ"; "FRETRCT"; "RETRACT"; "EVALAB"; "IEVALAB"}*/
+/*"AFALGRES" -> {"LINEXP"; "ORDSET"; "KONVERT"; "PATMAB"; "PFECAT"}*/
+/*"AFALGRES" -> {"IXAGG"; "HOAGG"; "AGG"; "TYPE"; "ELTAGG"; "ELTAB"}*/
+/*"AFALGRES" -> {"DIFRING"; "FINITE"; "ORDRING"; "OAGROUP"; "OCAMON"}*/
+/*"AFALGRES" -> {"OASGP"; "OAMONS"; "VSPACE"; "UPOLYC"; "STEP"; "NNI"; "INT"}*/
+/*"AFALGRES" -> {"LIST"; "ILIST"; "LSAGG-"; "STAGG-"; "FFIELDC"; "FPC"; "PI"}*/
+/*"AFALGRES" -> {"VECTOR"; "OUTFORM"; "MONOID-"; "ABELMON-"; "ORDSET-"}*/
+/*"AFALGRES" -> {"SGROUP-"; "LSAGG"; "STAGG"; "URAGG"; "RCAGG"; "LNAGG"}*/
+/*"AFALGRES" -> {"CLAGG"; "FLAGG"; "ELAGG"; "OM"; "ELAGG-"; "FLAGG-"}*/
+/*"AFALGRES" -> {"INS-"; "EUCDOM-"; "UFD-"; "GCDDOM-"; "ENTIRER"; "FLINEXP"}*/
+/*"AFALGRES" -> {"URAGG-"; "DIRPCAT"; "DIFEXT"; "OAMON"}*/
 
 "DPMM" [color="#88FF44",href="bookvol10.3.pdf#nameddest=DPMM"]
 /*"DPMM" -> {"DIRPCAT"; "IXAGG"; "HOAGG"; "AGG"; "TYPE"; "SETCAT"}*/
@@ -9325,7 +9346,6 @@ LAYER13=\
 /*"DPMM" -> {"RMATCAT"; "SINT"; "PI"; "NNI"; "INT"; "INS"; "OINTDOM"}*/
 /*"DPMM" -> {"KONVERT"; "PATMAB"; "CFCAT"; "REAL"; "CHARZ"; "STEP"; "OM"}*/
 
-
 "EFUPXS" [color="#FF4488",href="bookvol10.4.pdf#nameddest=EFUPXS"]
 /*"EFUPXS" -> "PTRANFN"*/
 "EFUPXS" -> "UPXSCCA"
@@ -10179,7 +10199,8 @@ LAYER16=\
   ${OUT}/ANY.o      ${OUT}/ASP12.o    ${OUT}/ASP27.o    ${OUT}/ASP28.o    \
   ${OUT}/ASP30.o    ${OUT}/ASP33.o    ${OUT}/ASP49.o    ${OUT}/ASP55.o    \
   ${OUT}/ASP7.o     ${OUT}/ASP78.o    ${OUT}/ASP8.o     ${OUT}/ASP9.o     \
-  ${OUT}/ATTRBUT.o  ${OUT}/BOP.o      ${OUT}/BOP1.o     ${OUT}/COMMONOP.o \
+  ${OUT}/ATTRBUT.o  ${OUT}/BLUPPACK.o \
+  ${OUT}/BOP.o      ${OUT}/BOP1.o     ${OUT}/COMMONOP.o \
   ${OUT}/COMPCAT.o  ${OUT}/COMPCAT-.o ${OUT}/DRAW.o     ${OUT}/DRAWCFUN.o \
   ${OUT}/DROPT.o    ${OUT}/DROPT0.o   ${OUT}/D01ANFA.o  ${OUT}/D01ASFA.o  \
   ${OUT}/D03AGNT.o  ${OUT}/EP.o       ${OUT}/E04AGNT.o  ${OUT}/FCPAK1.o   \
@@ -10476,6 +10497,27 @@ LAYER16=\
 /*"BOOLEAN" -> {"LIST"; "STRING"; "CHAR"; "SINT"; "OUTFORM"; "PRIMARR"}*/
 /*"BOOLEAN" -> {"A1AGG"; "ISTRING"; "SRAGG"; "FLAGG"; "LNAGG"}*/
 
+"BLUPPACK" [color="#88FF44",href="bookvol10.4.pdf#nameddest=BLUPPACK"]
+"BLUPPACK" -> "RFP"
+"BLUPPACK" -> "NPOLYGON"
+/*"BLUPPACK" -> {"BLMETCT"; "PFORP"; "AFFPL"; "PACPERC"; "FIELD"; "EUCDOM"}*/
+/*"BLUPPACK" -> {"PID"; "GCDDOM"; "INTDOM"; "COMRING"; "RING"; "RNG"}*/
+/*"BLUPPACK" -> {"ABELGRP"; "CABMON"; "ABELMON"; "ABELSG"; "SETCAT"}*/
+/*"BLUPPACK" -> {"BASTYPE"; "KOERCE"; "SGROUP"; "MONOID"; "LMODULE"}*/
+/*"BLUPPACK" -> {"BMODULE"; "RMODULE"; "ALGEBRA"; "MODULE"; "ENTIRER"}*/
+/*"BLUPPACK" -> {"UFD"; "DIVRING"; "FAMR"; "AMR"; "CHARZ"; "CHARNZ"}*/
+/*"BLUPPACK" -> {"FRETRCT"; "RETRACT"; "DIRPCAT"; "IXAGG"; "HOAGG"; "AGG"}*/
+/*"BLUPPACK" -> {"TYPE"; "EVALAB"; "IEVALAB"; "ELTAGG"; "ELTAB"; "DIFEXT"}*/
+/*"BLUPPACK" -> {"DIFRING"; "PDRING"; "FLINEXP"; "LINEXP"; "FINITE"}*/
+/*"BLUPPACK" -> {"ORDRING"; "OAGROUP"; "OCAMON"; "OAMON"; "OASGP"; "ORDSET"}*/
+/*"BLUPPACK" -> {"OAMONS"; "VSPACE"; "INT"; "LIST"; "ILIST"; "POLYCAT"}*/
+/*"BLUPPACK" -> {"KONVERT"; "PATMAB"; "PFECAT"; "LSAGG"; "STAGG"; "URAGG"}*/
+/*"BLUPPACK" -> {"RCAGG"; "LNAGG"; "CLAGG"; "FLAGG"; "ELAGG"; "OM"; "NNI"}*/
+/*"BLUPPACK" -> {"LSAGG-"; "STAGG-"; "SINT"; "PI"; "ELAGG-"; "FLAGG-"}*/
+/*"BLUPPACK" -> {"URAGG-"; "BOOLEAN"; "VECTOR"; "SYMBOL"; "REF"; "ALIST"}*/
+/*"BLUPPACK" -> {"STRING"; "CHAR"; "PRIMARR"; "A1AGG-"; "ISTRING"}*/
+/*"BLUPPACK" -> {"STAGG-"; "LNAGG-"}*/
+
 "BOP" [color="#88FF44",href="bookvol10.3.pdf#nameddest=BOP"]
 /*"BOP" -> {"ORDSET"; "SETCAT"; "BASTYPE"; "KOERCE"; "SYMBOL"; "INT"; "REF"}*/
 "BOP" -> "ALIST"
@@ -16892,6 +16934,36 @@ ${MID}/NPOLYGON.nrlib/code.o: ${MID}/NPOLYGON.spad
 	      | ${INTERPSYS} >${TMP}/trace ; \
 	   fi )
 @
+<<newcode>>=
+ 
+BLUPPACKDEPS = RFP NPOLYGON BLMETCT PFORP AFFPL PACPERC
+
+${MID}/BLUPPACK.nrlib/code.o: ${MID}/BLUPPACK.spad
+	@echo P3 making ${MID}/BLUPPACK.nrlib/code.o from ${MID}/BLUPPACK.spad
+	@ (cd ${MID} ; \
+	   if [ -z "${NOISE}" ] ; then \
+	    echo -e ")lib ${BLUPPACKDEPS} \n )co BLUPPACK.spad" \
+              | ${INTERPSYS} ; \
+           else \
+	    echo -e ")lib ${BLUPPACKDEPS} \n )co BLUPPACK.spad" \
+	      | ${INTERPSYS} >${TMP}/trace ; \
+	   fi )
+@
+<<newcode>>=
+ 
+AFALGRESDEPS = PRSPCAT LOCPOWC SETCATD PACFFC PACPERC RFP
+
+${MID}/AFALGRES.nrlib/code.o: ${MID}/AFALGRES.spad
+	@echo P3 making ${MID}/AFALGRES.nrlib/code.o from ${MID}/AFALGRES.spad
+	@ (cd ${MID} ; \
+	   if [ -z "${NOISE}" ] ; then \
+	    echo -e ")lib ${AFALGRESDEPS} \n )co AFALGRES.spad" \
+              | ${INTERPSYS} ; \
+           else \
+	    echo -e ")lib ${AFALGRESDEPS} \n )co AFALGRES.spad" \
+	      | ${INTERPSYS} >${TMP}/trace ; \
+	   fi )
+@
 
 \section{Broken Files}
 These files are Aldor files
@@ -17596,6 +17668,7 @@ This keeps the regression test list in the algebra Makefile.
 HELPFILE=${HELP}/help.help
 
 SPADHELP=\
+ ${HELP}/AffineAlgebraicSetComputeWithResultant.help \
  ${HELP}/AffinePlane.help \
  ${HELP}/AffinePlaneOverPseudoAlgebraicClosureOfFiniteField.help \
  ${HELP}/AffineSpace.help \
@@ -17612,6 +17685,7 @@ SPADHELP=\
  ${HELP}/BinarySearchTree.help \
  ${HELP}/BlasLevelOne.help \
  ${HELP}/BlowUpMethodCategory.help \
+ ${HELP}/BlowUpPackage.help \
  ${HELP}/BlowUpWithHamburgerNoether.help \
  ${HELP}/BlowUpWithQuadTrans.help \
  ${HELP}/CardinalNumber.help \
@@ -17797,6 +17871,7 @@ is put into a int/Makefile.algebra and then executed by make.
 TESTSYS=  ${OBJ}/${SYS}/bin/interpsys
 
 REGRESS= \
+ AffineAlgebraicSetComputeWithResultant.regress \
  AffinePlane.regress \
  AffinePlaneOverPseudoAlgebraicClosureOfFiniteField.regress \
  AffineSpace.regress \
@@ -17813,6 +17888,7 @@ REGRESS= \
  BinarySearchTree.regress \
  BlasLevelOne.regress \
  BlowUpMethodCategory.regress \
+ BlowUpPackage.regress \
  BlowUpWithHamburgerNoether.regress \
  BlowUpWithQuadTrans.regress \
  CardinalNumber.regress \
@@ -17997,8 +18073,26 @@ all: ${REGRESS}
 	@echo algebra test cases complete.
 @
 <<spadhelp>>=
+${HELP}/AffineAlgebraicSetComputeWithResultant.help: \
+            ${BOOKS}/bookvol10.4.pamphlet
+	@echo 7000 create \
+            AffineAlgebraicSetComputeWithResultant.help from \
+            ${BOOKS}/bookvol10.4.pamphlet
+	@${TANGLE} \
+            -R"AffineAlgebraicSetComputeWithResultant.help" \
+            ${BOOKS}/bookvol10.4.pamphlet \
+            >${HELP}/AffineAlgebraicSetComputeWithResultant.help
+	@cp ${HELP}/AffineAlgebraicSetComputeWithResultant.help \
+            ${HELP}/AFALGRES.help
+	@${TANGLE} \
+            -R"AffineAlgebraicSetComputeWithResultant.input" \
+            ${BOOKS}/bookvol10.4.pamphlet \
+            >${INPUT}/AffineAlgebraicSetComputeWithResultant.input
+	@echo "AffineAlgebraicSetComputeWithResultant (AFALGRES)" \
+            >>${HELPFILE}
+
 ${HELP}/AffinePlane.help: ${BOOKS}/bookvol10.3.pamphlet
-	@echo 7000 create AffinePlane.help from \
+	@echo 7001 create AffinePlane.help from \
             ${BOOKS}/bookvol10.3.pamphlet
 	@${TANGLE} -R"AffinePlane.help" \
             ${BOOKS}/bookvol10.3.pamphlet \
@@ -18011,7 +18105,7 @@ ${HELP}/AffinePlane.help: ${BOOKS}/bookvol10.3.pamphlet
 
 ${HELP}/AffinePlaneOverPseudoAlgebraicClosureOfFiniteField.help: \
             ${BOOKS}/bookvol10.3.pamphlet
-	@echo 7001 create \
+	@echo 7002 create \
             AffinePlaneOverPseudoAlgebraicClosureOfFiniteField.help from \
             ${BOOKS}/bookvol10.3.pamphlet
 	@${TANGLE} \
@@ -18028,7 +18122,7 @@ ${HELP}/AffinePlaneOverPseudoAlgebraicClosureOfFiniteField.help: \
             >>${HELPFILE}
 
 ${HELP}/AffineSpace.help: ${BOOKS}/bookvol10.3.pamphlet
-	@echo 7002 create AffineSpace.help from \
+	@echo 7003 create AffineSpace.help from \
             ${BOOKS}/bookvol10.3.pamphlet
 	@${TANGLE} -R"AffineSpace.help" \
             ${BOOKS}/bookvol10.3.pamphlet \
@@ -18040,7 +18134,7 @@ ${HELP}/AffineSpace.help: ${BOOKS}/bookvol10.3.pamphlet
 	@echo "AffineSpace (AFFSP)" >>${HELPFILE}
 
 ${HELP}/AffineSpaceCategory.help: ${BOOKS}/bookvol10.2.pamphlet
-	@echo 7003 create AffineSpaceCategory.help from \
+	@echo 7004 create AffineSpaceCategory.help from \
             ${BOOKS}/bookvol10.2.pamphlet
 	@${TANGLE} -R"AffineSpaceCategory.help" \
             ${BOOKS}/bookvol10.2.pamphlet \
@@ -18052,7 +18146,7 @@ ${HELP}/AffineSpaceCategory.help: ${BOOKS}/bookvol10.2.pamphlet
 	@echo "AffineSpaceCategory (AFSPCAT)" >>${HELPFILE}
 
 ${HELP}/AlgebraicallyClosedField.help: ${BOOKS}/bookvol10.2.pamphlet
-	@echo 7004 create AlgebraicallyClosedField.help from \
+	@echo 7005 create AlgebraicallyClosedField.help from \
             ${BOOKS}/bookvol10.2.pamphlet
 	@${TANGLE} -R"AlgebraicallyClosedField.help" \
             ${BOOKS}/bookvol10.2.pamphlet \
@@ -18064,7 +18158,7 @@ ${HELP}/AlgebraicallyClosedField.help: ${BOOKS}/bookvol10.2.pamphlet
 	@echo "AlgebraicallyClosedField (ACF)" >>${HELPFILE}
 
 ${HELP}/Any.help: ${BOOKS}/bookvol10.3.pamphlet
-	@echo 7005 create Any.help from ${BOOKS}/bookvol10.3.pamphlet
+	@echo 7006 create Any.help from ${BOOKS}/bookvol10.3.pamphlet
 	@${TANGLE} -R"Any.help" ${BOOKS}/bookvol10.3.pamphlet >${HELP}/Any.help
 	@cp ${HELP}/Any.help ${HELP}/ANY.help
 	@${TANGLE} -R"Any.input" ${BOOKS}/bookvol10.3.pamphlet \
@@ -18072,7 +18166,7 @@ ${HELP}/Any.help: ${BOOKS}/bookvol10.3.pamphlet
 	@echo "Any (ANY)" >>${HELPFILE}
 
 ${HELP}/ApplicationProgramInterface.help: ${BOOKS}/bookvol10.4.pamphlet
-	@echo 7006 create ApplicationProgramInterface.help from \
+	@echo 7007 create ApplicationProgramInterface.help from \
            ${BOOKS}/bookvol10.4.pamphlet
 	@${TANGLE} -R"ApplicationProgramInterface.help" \
            ${BOOKS}/bookvol10.4.pamphlet \
@@ -18161,7 +18255,7 @@ ${HELP}/BlasLevelOne.help: ${BOOKS}/bookvol10.5.pamphlet
 	@echo "BlasLevelOne (BLAS1)" >>${HELPFILE}
 
 ${HELP}/BlowUpMethodCategory.help: ${BOOKS}/bookvol10.2.pamphlet
-	@echo 7083 create BlowUpMethodCategory.help from \
+	@echo 7082 create BlowUpMethodCategory.help from \
             ${BOOKS}/bookvol10.2.pamphlet
 	@${TANGLE} -R"BlowUpMethodCategory.help" \
             ${BOOKS}/bookvol10.2.pamphlet \
@@ -18172,6 +18266,18 @@ ${HELP}/BlowUpMethodCategory.help: ${BOOKS}/bookvol10.2.pamphlet
             >${INPUT}/BlowUpMethodCategory.input
 	@echo "BlowUpMethodCategory (BLMETCT)" >>${HELPFILE}
 
+${HELP}/BlowUpPackage.help: ${BOOKS}/bookvol10.4.pamphlet
+	@echo 7083 create BlowUpPackage.help from \
+            ${BOOKS}/bookvol10.4.pamphlet
+	@${TANGLE} -R"BlowUpPackage.help" \
+            ${BOOKS}/bookvol10.4.pamphlet \
+            >${HELP}/BlowUpPackage.help
+	@cp ${HELP}/BlowUpPackage.help ${HELP}/BLUPPACK.help
+	@${TANGLE} -R"BlowUpPackage.input" \
+            ${BOOKS}/bookvol10.4.pamphlet \
+            >${INPUT}/BlowUpPackage.input
+	@echo "BlowUpPackage (BLUPPACK)" >>${HELPFILE}
+
 ${HELP}/BlowUpWithHamburgerNoether.help: ${BOOKS}/bookvol10.3.pamphlet
 	@echo 7084 create BlowUpWithHamburgerNoether.help from \
             ${BOOKS}/bookvol10.3.pamphlet
diff --git a/src/axiom-website/patches.html b/src/axiom-website/patches.html
index 3469ee1..7ffa422 100644
--- a/src/axiom-website/patches.html
+++ b/src/axiom-website/patches.html
@@ -2781,5 +2781,7 @@ books/ps/v104rootsfindingpackage.eps add bounding box info<br/>
 books/bookvol10.4 add PolynomialPackageForCurve<br/>
 <a href="patches/20100522.01.tpd.patch">20100522.01.tpd.patch</a>
 books/bookvol10.4 add NewtonPolygon<br/>
+<a href="patches/20100522.02.tpd.patch">20100522.02.tpd.patch</a>
+books/bookvol10.4 add AffineAlgebraicSetComputeWithResultant<br/>
  </body>
 </html>
