=========================================================================
==  NOTICE file corresponding to section 4(d) of the Apache License,   ==
==  Version 2.0.                                                       ==
=========================================================================

The Apache Open For Business Project (Apache OFBiz)
Copyright 2001-2014 The Apache Software Foundation

=========================================================================
==  Apache General Notice (Covers OFBiz and all ASF libraries)         ==
=========================================================================

This product includes software developed by
The Apache Software Foundation (http://www.apache.org/).

=========================================================================
==  Apache Ant Notice                                                  ==
=========================================================================

This product includes also software developed by :
  - the W3C consortium (http://www.w3c.org) ,
  - the SAX project (http://www.saxproject.org)

The <sync> task is based on code Copyright (c) 2002, Landmark
Graphics Corp that has been kindly donated to the Apache Software
Foundation.

=========================================================================
==  Apache Avalon Notice                                               ==
=========================================================================

This product is developed by the Apache Avalon Project.
http://avalon.apache.org

The names "Avalon" and "Merlin" must not be used to endorse or promote
products derived from this software without prior written permission.
For written permission, please contact pmc@avalon.apache.org.

=========================================================================
==  Apache Batik Notice                                                ==
=========================================================================

This software contains code from the World Wide Web Consortium (W3C) for the
Document Object Model API (DOM API) and SVG Document Type Definition (DTD).

This software contains code from the International Organisation for Standardization
for the definition of character entities used in the software's documentation.

=========================================================================
==  Apache Derby Notice                                                ==
=========================================================================

Portions of Derby were originally developed by
International Business Machines Corporation and are
licensed to the Apache Software Foundation under the
"Software Grant and Corporate Contribution License Agreement",
informally known as the "Derby CLA".
The following copyright notice(s) were affixed to portions of the code
with which this file is now or was at one time distributed
and are placed here unaltered.

(C) Copyright 1997,2004 International Business Machines Corporation.  All rights reserved.

(C) Copyright IBM Corp. 2003.

The portion of the functionTests under 'nist' was originally
developed by the National Institute of Standards and Technology (NIST),
an agency of the United States Department of Commerce, and adapted by
International Business Machines Corporation in accordance with the NIST
Software Acknowledgment and Redistribution document at
http://www.itl.nist.gov/div897/ctg/sql_form.htm

=========================================================================
==  Apache FOP Notice                                                  ==
=========================================================================

This software consists of voluntary contributions made by many individuals
on behalf of The Apache Software Foundation and was originally created by
James Tauber <jtauber@jtauber.com>.

=========================================================================
==  Apache Geronimo Notice                                             ==
=========================================================================

Portions of the Web Console were orginally developed by
International Business Machines Corporation and are
licensed to the Apache Software Foundation under the
"Software Grant and Corporate Contribution License Agreement",
informally known as the "IBM Console CLA".

The following copyright notice(s) were affixed to portions of the code
with which this file is now or was at one time distributed
and are placed here unaltered.

(C) Copyright 2004, 2005 International Business Machines Corporation.  All rights reserved.

=========================================================================
==  Apache Log4J Notice                                                ==
=========================================================================

This product includes source code based on Sun
Microsystems' book titled "Java Nativer Interface:
Programmer's Guide and Specification" and freely available
to the public at http://java.sun.com/docs/books/jni.

=========================================================================
==  Apache Lucene Notice                                               ==
=========================================================================

The snowball stemmers in
  contrib/snowball/src/java/net/sf/snowball
were developed by Martin Porter and Richard Boulton.
The full snowball package is available from
  http://snowball.tartarus.org/

=========================================================================
==  Apache Tomcat Notice                                               ==
=========================================================================

Java compilation software for JSP pages is provided by Eclipse,
which is open source software.  The original software and
related infomation is available at
http://www.eclipse.org.

=========================================================================
==  Apache Xerces Java Notice                                          ==
=========================================================================

Portions of this software 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.

=========================================================================
==  Apache Xalan distribution.                                         ==
=========================================================================

This product includes software developed by
The Apache Software Foundation (http://www.apache.org/).

Portions of this software 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.
 - 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.
The binary distribution package (ie. jars, samples and documentation) of
this product includes software developed by the following:

 - The Apache Software Foundation
     - Xerces Java - see xercesImpl.README.txt
     - JAXP 1.3 APIs - see xml-apis.README.txt
     - Bytecode Engineering Library - see BCEL.README.txt
     - Regular Expression - see regexp.README.txt

 - Scott Hudson, Frank Flannery, C. Scott Ananian
     - CUP Parser Generator runtime (javacup\runtime) - see runtime.README.txt

The source distribution package (ie. all source and tools required to build
Xalan Java) of this product includes software developed by the following:

 - The Apache Software Foundation
     - Xerces Java - see xercesImpl.README.txt
     - JAXP 1.3 APIs - see xml-apis.README.txt
     - Bytecode Engineering Library - see BCEL.README.txt
     - Regular Expression - see regexp.README.txt
     - Ant - see ant.README.txt
     - Stylebook doc tool - see stylebook-1.0-b3_xalan-2.README.txt

 - Elliot Joel Berk and C. Scott Ananian
     - Lexical Analyzer Generator (JLex) - see JLex.README.txt

=========================================================================
==  Apache Xalan serializer                                            ==
=========================================================================

This product includes software developed by IBM Corporation (http://www.ibm.com)
and The Apache Software Foundation (http://www.apache.org/).

Portions of this software 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.

=========================================================================
==  Barcode4J Notice                                                   ==
=========================================================================

This product includes software developed for project
Krysalis (http://www.krysalis.org/).

This product includes software developed by the
JDOM Project (http://www.jdom.org/).

=========================================================================
==  Freemarker Notice                                                  ==
=========================================================================

This product includes software developed by the
Visigoth Software Society (http://www.visigoths.org/).

=========================================================================
==  Groovy Notice                                                      ==
=========================================================================

This product includes software developed by
The Groovy community (http://groovy.codehaus.org/).

=========================================================================
==  JDBM Notice                                                        ==
=========================================================================

This product includes software developed by the JDBM Project
(http://jdbm.sourceforge.net/).

=========================================================================
==  PNG Behavior Notice                                                ==
=========================================================================

This product includes software developed by
WebFX (webfx.eae.net):

framework/images/webapp/images/pngbehavior.htc

=========================================================================
==  JSON-LIB Notice                                                    ==
=========================================================================

This product includes software developed by
Douglas Crockford (http://www.crockford.com).

=========================================================================
==  CoolTips Notice                                                    ==
=========================================================================
This product includes software developed by
Andrej Okonetschnikow (http://code.google.com/p/tooltips/).

========================================================================
==  JPIM Notice                                                       ==
========================================================================
This product includes software developed by jpim development team (
http://jpim.sourceforge.net/index.html)
-------------------------------------------
jpim is released under a modified BSD style license.

Java PIM Library (jpim)
Copyright (c) 2001-2003 jpim development team.
=========================================================================
==  XPP3   Notice                                                      ==
=========================================================================

This product includes software developed by the Indiana University
Extreme! Lab (http://www.extreme.indiana.edu/).
=========================================================================
==  FamFamFam Notice                                                   ==
=========================================================================

This product includes images delevoped by Mark James <mjames@gmail.com>
Birmingham, UK. www.famfamfam.com

Creative Commons Attribution 2.5 License Generic.
http://creativecommons.org/licenses/by/2.5/

You are free:

    * to Share — to copy, distribute and transmit the work
    * to Remix — to adapt the work
    * to make commercial use of the work

Under the following conditions:

    * Attribution — You must attribute the work in the manner specified
      by the author or licensor (but not in any way that suggests that
      they endorse you or your use of the work).
    * Waiver — Any of the above conditions can be waived if you get
      permission from the copyright holder.
    * Public Domain — Where the work or any of its elements is in the 
      public domain under applicable law, that status is in no way 
      affected by the license.   
    * Other Rights — In no way are any of the following rights affected 
      by the license:
        * Your fair dealing or fair use rights, or other applicable copyright 
          exceptions and limitations;      
        * The author's moral rights;
        * Rights other persons may have either in the work itself or in how 
          the work is used, such as publicity or privacy rights.    
    * Notice — For any reuse or distribution, you must make clear to others 
      the license terms of this work. The best way to do this is with a link to 
      this web page. 
=========================================================================

This product includes software developed by Steven Levithan
(http://blog.stevenlevithan.com/archives/date-time-format). MIT license
=========================================================================

This product includes software developed by Matthew Eernisse (mde@fleegix.org)
and Open Source Applications Foundation. Licensed under the ASL2
https://github.com/mde/timezone-js
=========================================================================
