
Portions of Apache Xerces were originally based on the following:
 - software copyright (c) 1999, IBM Corporation., http://www.ibm.com.
 - software copyright (c) 1999, Sun Microsystems., http://www.sun.com.
 - voluntary contributions made by Paul Eng on behalf of the
   Apache Software Foundation that were originally developed at iClick, Inc.,
   software copyright (c) 1999.
       
Portions of Apache Xerces was originally based on the following:
 - software copyright (c) 1999-2002, Lotus Development Corporation.,
   http://www.lotus.com.
 - software copyright (c) 2001-2002, Sun Microsystems.,
   http://www.sun.com.
 - software copyright (c) 2003, IBM Corporation., 
   http://www.ibm.com.
                             
Portions of Apache Xerces are derived from classes placed in the public domain
by Arbortext on 10 Apr 2000. See:
  http://www.arbortext.com/customer_support/updates_and_technical_notes/catalogs/docs/README.htm

Portions of Apache Xalan were originally based on the following:
 - software copyright (c) 1999-2002, Lotus Development Corporation.,
   http://www.lotus.com.
 - software copyright (c) 2001-2002, Sun Microsystems.,
   http://www.sun.com.
 - software copyright (c) 2003, IBM Corporation., http://www.ibm.com.
 - voluntary contributions made by Ovidiu Predescu <ovidiu@cup.hp.com> on
   behalf of the Apache Software Foundation that was originally developed
   at Hewlett Packard Company. 
       
Apache Xalan includes software developed by the following:    
 - The Apache Software Foundation (see BCEL.README.txt, ant.README.txt, 
   regexp.README.txt, stylebook-1.0-b3_xalan-2.README.txt, 
   xercesImpl.README.txt, xml-apis.README.txt)              
 - International Business Machines Corporation (see bsf.README.txt)   
 - World Wide Web Consortium (see jtidy.README.txt)      
 - Elliot Joel Berk and C. Scott Ananian (see JLex.README.txt)              
 - Scott Hudson, Frank Flannery, C. Scott Ananian 
   (see java_cup.READNE.txt, runtime.README.txt)
    		
Portions of Apache XML Commons were originally based on the following:
 - software copyright (c) 1999, IBM Corporation., http://www.ibm.com.
 - software copyright (c) 1999, Sun Microsystems., http://www.sun.com.
 - software copyright (c) 2000 World Wide Web Consortium, http://www.w3.org
 
Portions of Saxon9 are derived from classes placed in the
public domain by Arbortext on 10 Apr 2000. See:
  http://www.arbortext.com/customer_support/updates_and_technical_notes/catalogs/docs/README.htm

