   =========================================================================
   ==  NOTICE file corresponding to the section 4 d of                    ==
   ==  the Apache License, Version 2.0,                                   ==
   ==  in this case for the Apache Axiom distribution.                    ==
   =========================================================================

   This product includes software developed by
   The Apache Software Foundation (http://www.apache.org/).
   Portions Copyright 2006 International Business Machines Corp.

   Please read the different LICENSE files present in the licenses directory of
   this distribution.

   This product includes unmodified, binary redistributions of software (AspectJ)
   developed for the Eclipse Foundation (http://www.eclipse.org/aspectj), which
   is licensed under the Eclipse Public License 1.0. Source code for this project
   can be found at http://git.eclipse.org/c/aspectj/org.aspectj.git. An original
   copy of the license can be found at http://eclipse.org/legal/epl-v10.html.
