<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements.  See the NOTICE file
distributed with this work for additional information
regarding copyright ownership.  The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License.  You may obtain a copy of the License at

  http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied.  See the License for the
specific language governing permissions and limitations
under the License.
-->
<manifest>
    <licenses>
        <license name='COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.0' id='CDDL'
        url='http://www.opensource.org/licenses/CDDL-1.0' requires-source='yes'>
        <text>
COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.0

1. Definitions.

1.1. "Contributor" means each individual or entity that
creates or contributes to the creation of Modifications.

1.2. "Contributor Version" means the combination of the
Original Software, prior Modifications used by a
Contributor (if any), and the Modifications made by that
particular Contributor.

1.3. "Covered Software" means (a) the Original Software, or
(b) Modifications, or (c) the combination of files
containing Original Software with files containing
Modifications, in each case including portions thereof.

1.4. "Executable" means the Covered Software in any form
other than Source Code.

1.5. "Initial Developer" means the individual or entity
that first makes Original Software available under this
License.

1.6. "Larger Work" means a work which combines Covered
Software or portions thereof with code not governed by the
terms of this License.

1.7. "License" means this document.

1.8. "Licensable" means having the right to grant, to the
maximum extent possible, whether at the time of the initial
grant or subsequently acquired, any and all of the rights
conveyed herein.

1.9. "Modifications" means the Source Code and Executable
form of any of the following:

A. Any file that results from an addition to,
deletion from or modification of the contents of a
file containing Original Software or previous
Modifications;

B. Any new file that contains any part of the
Original Software or previous Modification; or

C. Any new file that is contributed or otherwise made
available under the terms of this License.

1.10. "Original Software" means the Source Code and
Executable form of computer software code that is
originally released under this License.

1.11. "Patent Claims" means any patent claim(s), now owned
or hereafter acquired, including without limitation,
method, process, and apparatus claims, in any patent
Licensable by grantor.

1.12. "Source Code" means (a) the common form of computer
software code in which modifications are made and (b)
associated documentation included in or with such code.

1.13. "You" (or "Your") means an individual or a legal
entity exercising rights under, and complying with all of
the terms of, this License. For legal entities, "You"
includes any entity which controls, is controlled by, or is
under common control with You. For purposes of this
definition, "control" means (a) the power, direct or
indirect, to cause the direction or management of such
entity, whether by contract or otherwise, or (b) ownership
of more than fifty percent (50%) of the outstanding shares
or beneficial ownership of such entity.

2. License Grants.

2.1. The Initial Developer Grant.

Conditioned upon Your compliance with Section 3.1 below and
subject to third party intellectual property claims, the
Initial Developer hereby grants You a world-wide,
royalty-free, non-exclusive license:

(a) under intellectual property rights (other than
patent or trademark) Licensable by Initial Developer,
to use, reproduce, modify, display, perform,
sublicense and distribute the Original Software (or
portions thereof), with or without Modifications,
and/or as part of a Larger Work; and

(b) under Patent Claims infringed by the making,
using or selling of Original Software, to make, have
made, use, practice, sell, and offer for sale, and/or
otherwise dispose of the Original Software (or
portions thereof).

(c) The licenses granted in Sections 2.1(a) and (b)
are effective on the date Initial Developer first
distributes or otherwise makes the Original Software
available to a third party under the terms of this
License.

(d) Notwithstanding Section 2.1(b) above, no patent
license is granted: (1) for code that You delete from
the Original Software, or (2) for infringements
caused by: (i) the modification of the Original
Software, or (ii) the combination of the Original
Software with other software or devices.

2.2. Contributor Grant.

Conditioned upon Your compliance with Section 3.1 below and
subject to third party intellectual property claims, each
Contributor hereby grants You a world-wide, royalty-free,
non-exclusive license:

(a) under intellectual property rights (other than
patent or trademark) Licensable by Contributor to
use, reproduce, modify, display, perform, sublicense
and distribute the Modifications created by such
Contributor (or portions thereof), either on an
unmodified basis, with other Modifications, as
Covered Software and/or as part of a Larger Work; and

(b) under Patent Claims infringed by the making,
using, or selling of Modifications made by that
Contributor either alone and/or in combination with
its Contributor Version (or portions of such
combination), to make, use, sell, offer for sale,
have made, and/or otherwise dispose of: (1)
Modifications made by that Contributor (or portions
thereof); and (2) the combination of Modifications
made by that Contributor with its Contributor Version
(or portions of such combination).

(c) The licenses granted in Sections 2.2(a) and
2.2(b) are effective on the date Contributor first
distributes or otherwise makes the Modifications
available to a third party.

(d) Notwithstanding Section 2.2(b) above, no patent
license is granted: (1) for any code that Contributor
has deleted from the Contributor Version; (2) for
infringements caused by: (i) third party
modifications of Contributor Version, or (ii) the
combination of Modifications made by that Contributor
with other software (except as part of the
Contributor Version) or other devices; or (3) under
Patent Claims infringed by Covered Software in the
absence of Modifications made by that Contributor.

3. Distribution Obligations.

3.1. Availability of Source Code.

Any Covered Software that You distribute or otherwise make
available in Executable form must also be made available in
Source Code form and that Source Code form must be
distributed only under the terms of this License. You must
include a copy of this License with every copy of the
Source Code form of the Covered Software You distribute or
otherwise make available. You must inform recipients of any
such Covered Software in Executable form as to how they can
obtain such Covered Software in Source Code form in a
reasonable manner on or through a medium customarily used
for software exchange.

3.2. Modifications.

The Modifications that You create or to which You
contribute are governed by the terms of this License. You
represent that You believe Your Modifications are Your
original creation(s) and/or You have sufficient rights to
grant the rights conveyed by this License.

3.3. Required Notices.

You must include a notice in each of Your Modifications
that identifies You as the Contributor of the Modification.
You may not remove or alter any copyright, patent or
trademark notices contained within the Covered Software, or
any notices of licensing or any descriptive text giving
attribution to any Contributor or the Initial Developer.

3.4. Application of Additional Terms.

You may not offer or impose any terms on any Covered
Software in Source Code form that alters or restricts the
applicable version of this License or the recipients'
rights hereunder. You may choose to offer, and to charge a
fee for, warranty, support, indemnity or liability
obligations to one or more recipients of Covered Software.
However, you may do so only on Your own behalf, and not on
behalf of the Initial Developer or any Contributor. You
must make it absolutely clear that any such warranty,
support, indemnity or liability obligation is offered by
You alone, and You hereby agree to indemnify the Initial
Developer and every Contributor for any liability incurred
by the Initial Developer or such Contributor as a result of
warranty, support, indemnity or liability terms You offer.

3.5. Distribution of Executable Versions.

You may distribute the Executable form of the Covered
Software under the terms of this License or under the terms
of a license of Your choice, which may contain terms
different from this License, provided that You are in
compliance with the terms of this License and that the
license for the Executable form does not attempt to limit
or alter the recipient's rights in the Source Code form
from the rights set forth in this License. If You
distribute the Covered Software in Executable form under a
different license, You must make it absolutely clear that
any terms which differ from this License are offered by You
alone, not by the Initial Developer or Contributor. You
hereby agree to indemnify the Initial Developer and every
Contributor for any liability incurred by the Initial
Developer or such Contributor as a result of any such terms
You offer.

3.6. Larger Works.

You may create a Larger Work by combining Covered Software
with other code not governed by the terms of this License
and distribute the Larger Work as a single product. In such
a case, You must make sure the requirements of this License
are fulfilled for the Covered Software.

4. Versions of the License.

4.1. New Versions.

Sun Microsystems, Inc. is the initial license steward and
may publish revised and/or new versions of this License
from time to time. Each version will be given a
distinguishing version number. Except as provided in
Section 4.3, no one other than the license steward has the
right to modify this License.

4.2. Effect of New Versions.

You may always continue to use, distribute or otherwise
make the Covered Software available under the terms of the
version of the License under which You originally received
the Covered Software. If the Initial Developer includes a
notice in the Original Software prohibiting it from being
distributed or otherwise made available under any
subsequent version of the License, You must distribute and
make the Covered Software available under the terms of the
version of the License under which You originally received
the Covered Software. Otherwise, You may also choose to
use, distribute or otherwise make the Covered Software
available under the terms of any subsequent version of the
License published by the license steward.

4.3. Modified Versions.

When You are an Initial Developer and You want to create a
new license for Your Original Software, You may create and
use a modified version of this License if You: (a) rename
the license and remove any references to the name of the
license steward (except to note that the license differs
from this License); and (b) otherwise make it clear that
the license contains terms which differ from this License.

5. DISCLAIMER OF WARRANTY.

COVERED SOFTWARE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS"
BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED,
INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE COVERED
SOFTWARE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR
PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND
PERFORMANCE OF THE COVERED SOFTWARE IS WITH YOU. SHOULD ANY
COVERED SOFTWARE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE
INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF
ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF
WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF
ANY COVERED SOFTWARE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS
DISCLAIMER.

6. TERMINATION.

6.1. This License and the rights granted hereunder will
terminate automatically if You fail to comply with terms
herein and fail to cure such breach within 30 days of
becoming aware of the breach. Provisions which, by their
nature, must remain in effect beyond the termination of
this License shall survive.

6.2. If You assert a patent infringement claim (excluding
declaratory judgment actions) against Initial Developer or
a Contributor (the Initial Developer or Contributor against
whom You assert such claim is referred to as "Participant")
alleging that the Participant Software (meaning the
Contributor Version where the Participant is a Contributor
or the Original Software where the Participant is the
Initial Developer) directly or indirectly infringes any
patent, then any and all rights granted directly or
indirectly to You by such Participant, the Initial
Developer (if the Initial Developer is not the Participant)
and all Contributors under Sections 2.1 and/or 2.2 of this
License shall, upon 60 days notice from Participant
terminate prospectively and automatically at the expiration
of such 60 day notice period, unless if within such 60 day
period You withdraw Your claim with respect to the
Participant Software against such Participant either
unilaterally or pursuant to a written agreement with
Participant.

6.3. In the event of termination under Sections 6.1 or 6.2
above, all end user licenses that have been validly granted
by You or any distributor hereunder prior to termination
(excluding licenses granted to You by any distributor)
shall survive termination.

7. LIMITATION OF LIABILITY.

UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT
(INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE
INITIAL DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF
COVERED SOFTWARE, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE
LIABLE TO ANY PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR
CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT
LIMITATION, DAMAGES FOR LOST PROFITS, LOSS OF GOODWILL, WORK
STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER
COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN
INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF
LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL
INJURY RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT
APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO
NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR
CONSEQUENTIAL DAMAGES, SO THIS EXCLUSION AND LIMITATION MAY NOT
APPLY TO YOU.

8. U.S. GOVERNMENT END USERS.

The Covered Software is a "commercial item," as that term is
defined in 48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial
computer software" (as that term is defined at 48 C.F.R. ¤
252.227-7014(a)(1)) and "commercial computer software
documentation" as such terms are used in 48 C.F.R. 12.212 (Sept.
1995). Consistent with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1
through 227.7202-4 (June 1995), all U.S. Government End Users
acquire Covered Software with only those rights set forth herein.
This U.S. Government Rights clause is in lieu of, and supersedes,
any other FAR, DFAR, or other clause or provision that addresses
Government rights in computer software under this License.

9. MISCELLANEOUS.

This License represents the complete agreement concerning subject
matter hereof. If any provision of this License is held to be
unenforceable, such provision shall be reformed only to the
extent necessary to make it enforceable. This License shall be
governed by the law of the jurisdiction specified in a notice
contained within the Original Software (except to the extent
applicable law, if any, provides otherwise), excluding such
jurisdiction's conflict-of-law provisions. Any litigation
relating to this License shall be subject to the jurisdiction of
the courts located in the jurisdiction and venue specified in a
notice contained within the Original Software, with the losing
party responsible for costs, including, without limitation, court
costs and reasonable attorneys' fees and expenses. The
application of the United Nations Convention on Contracts for the
International Sale of Goods is expressly excluded. Any law or
regulation which provides that the language of a contract shall
be construed against the drafter shall not apply to this License.
You agree that You alone are responsible for compliance with the
United States export administration regulations (and the export
control laws and regulation of any other countries) when You use,
distribute or otherwise make available any Covered Software.

10. RESPONSIBILITY FOR CLAIMS.

As between Initial Developer and the Contributors, each party is
responsible for claims and damages arising, directly or
indirectly, out of its utilization of rights under this License
and You agree to work with Initial Developer and Contributors to
distribute such responsibility on an equitable basis. Nothing
herein is intended or shall be deemed to constitute any admission
of liability.
        </text>
        </license>
        <license
            name='Mozilla Public License, Version 1.1'
            id='MPL1'
            url='http://www.mozilla.org/MPL/1.1/' >
            <template>
                <parameter-name>PROJECT</parameter-name>
                <parameter-name>INITIAL_DEVELOPER</parameter-name>
                <parameter-name>INITIAL_DEVELOPER_COPYRIGHT</parameter-name>
                <parameter-name>CONTRIBUTORS</parameter-name>
                <parameter-name>ALT_LIC_NAME</parameter-name>
                <parameter-name>ALT_LIC_SHORT</parameter-name>
            </template>
            <text>
                          MOZILLA PUBLIC LICENSE
                                Version 1.1

                              ---------------

1. Definitions.

     1.0.1. "Commercial Use" means distribution or otherwise making the
     Covered Code available to a third party.

     1.1. "Contributor" means each entity that creates or contributes to
     the creation of Modifications.

     1.2. "Contributor Version" means the combination of the Original
     Code, prior Modifications used by a Contributor, and the Modifications
     made by that particular Contributor.

     1.3. "Covered Code" means the Original Code or Modifications or the
     combination of the Original Code and Modifications, in each case
     including portions thereof.

     1.4. "Electronic Distribution Mechanism" means a mechanism generally
     accepted in the software development community for the electronic
     transfer of data.

     1.5. "Executable" means Covered Code in any form other than Source
     Code.

     1.6. "Initial Developer" means the individual or entity identified
     as the Initial Developer in the Source Code notice required by Exhibit
     A.

     1.7. "Larger Work" means a work which combines Covered Code or
     portions thereof with code not governed by the terms of this License.

     1.8. "License" means this document.

     1.8.1. "Licensable" means having the right to grant, to the maximum
     extent possible, whether at the time of the initial grant or
     subsequently acquired, any and all of the rights conveyed herein.

     1.9. "Modifications" means any addition to or deletion from the
     substance or structure of either the Original Code or any previous
     Modifications. When Covered Code is released as a series of files, a
     Modification is:
          A. Any addition to or deletion from the contents of a file
          containing Original Code or previous Modifications.

          B. Any new file that contains any part of the Original Code or
          previous Modifications.

     1.10. "Original Code" means Source Code of computer software code
     which is described in the Source Code notice required by Exhibit A as
     Original Code, and which, at the time of its release under this
     License is not already Covered Code governed by this License.

     1.10.1. "Patent Claims" means any patent claim(s), now owned or
     hereafter acquired, including without limitation,  method, process,
     and apparatus claims, in any patent Licensable by grantor.

     1.11. "Source Code" means the preferred form of the Covered Code for
     making modifications to it, including all modules it contains, plus
     any associated interface definition files, scripts used to control
     compilation and installation of an Executable, or source code
     differential comparisons against either the Original Code or another
     well known, available Covered Code of the Contributor's choice. The
     Source Code can be in a compressed or archival form, provided the
     appropriate decompression or de-archiving software is widely available
     for no charge.

     1.12. "You" (or "Your")  means an individual or a legal entity
     exercising rights under, and complying with all of the terms of, this
     License or a future version of this License issued under Section 6.1.
     For legal entities, "You" includes any entity which controls, is
     controlled by, or is under common control with You. For purposes of
     this definition, "control" means (a) the power, direct or indirect,
     to cause the direction or management of such entity, whether by
     contract or otherwise, or (b) ownership of more than fifty percent
     (50%) of the outstanding shares or beneficial ownership of such
     entity.

2. Source Code License.

     2.1. The Initial Developer Grant.
     The Initial Developer hereby grants You a world-wide, royalty-free,
     non-exclusive license, subject to third party intellectual property
     claims:
          (a)  under intellectual property rights (other than patent or
          trademark) Licensable by Initial Developer to use, reproduce,
          modify, display, perform, sublicense and distribute the Original
          Code (or portions thereof) with or without Modifications, and/or
          as part of a Larger Work; and

          (b) under Patents Claims infringed by the making, using or
          selling of Original Code, to make, have made, use, practice,
          sell, and offer for sale, and/or otherwise dispose of the
          Original Code (or portions thereof).

          (c) the licenses granted in this Section 2.1(a) and (b) are
          effective on the date Initial Developer first distributes
          Original Code under the terms of this License.

          (d) Notwithstanding Section 2.1(b) above, no patent license is
          granted: 1) for code that You delete from the Original Code; 2)
          separate from the Original Code;  or 3) for infringements caused
          by: i) the modification of the Original Code or ii) the
          combination of the Original Code with other software or devices.

     2.2. Contributor Grant.
     Subject to third party intellectual property claims, each Contributor
     hereby grants You a world-wide, royalty-free, non-exclusive license

          (a)  under intellectual property rights (other than patent or
          trademark) Licensable by Contributor, to use, reproduce, modify,
          display, perform, sublicense and distribute the Modifications
          created by such Contributor (or portions thereof) either on an
          unmodified basis, with other Modifications, as Covered Code
          and/or as part of a Larger Work; and

          (b) under Patent Claims infringed by the making, using, or
          selling of  Modifications made by that Contributor either alone
          and/or in combination with its Contributor Version (or portions
          of such combination), to make, use, sell, offer for sale, have
          made, and/or otherwise dispose of: 1) Modifications made by that
          Contributor (or portions thereof); and 2) the combination of
          Modifications made by that Contributor with its Contributor
          Version (or portions of such combination).

          (c) the licenses granted in Sections 2.2(a) and 2.2(b) are
          effective on the date Contributor first makes Commercial Use of
          the Covered Code.

          (d)    Notwithstanding Section 2.2(b) above, no patent license is
          granted: 1) for any code that Contributor has deleted from the
          Contributor Version; 2)  separate from the Contributor Version;
          3)  for infringements caused by: i) third party modifications of
          Contributor Version or ii)  the combination of Modifications made
          by that Contributor with other software  (except as part of the
          Contributor Version) or other devices; or 4) under Patent Claims
          infringed by Covered Code in the absence of Modifications made by
          that Contributor.

3. Distribution Obligations.

     3.1. Application of License.
     The Modifications which You create or to which You contribute are
     governed by the terms of this License, including without limitation
     Section 2.2. The Source Code version of Covered Code may be
     distributed only under the terms of this License or a future version
     of this License released under Section 6.1, and You must include a
     copy of this License with every copy of the Source Code You
     distribute. You may not offer or impose any terms on any Source Code
     version that alters or restricts the applicable version of this
     License or the recipients' rights hereunder. However, You may include
     an additional document offering the additional rights described in
     Section 3.5.

     3.2. Availability of Source Code.
     Any Modification which You create or to which You contribute must be
     made available in Source Code form under the terms of this License
     either on the same media as an Executable version or via an accepted
     Electronic Distribution Mechanism to anyone to whom you made an
     Executable version available; and if made available via Electronic
     Distribution Mechanism, must remain available for at least twelve (12)
     months after the date it initially became available, or at least six
     (6) months after a subsequent version of that particular Modification
     has been made available to such recipients. You are responsible for
     ensuring that the Source Code version remains available even if the
     Electronic Distribution Mechanism is maintained by a third party.

     3.3. Description of Modifications.
     You must cause all Covered Code to which You contribute to contain a
     file documenting the changes You made to create that Covered Code and
     the date of any change. You must include a prominent statement that
     the Modification is derived, directly or indirectly, from Original
     Code provided by the Initial Developer and including the name of the
     Initial Developer in (a) the Source Code, and (b) in any notice in an
     Executable version or related documentation in which You describe the
     origin or ownership of the Covered Code.

     3.4. Intellectual Property Matters
          (a) Third Party Claims.
          If Contributor has knowledge that a license under a third party's
          intellectual property rights is required to exercise the rights
          granted by such Contributor under Sections 2.1 or 2.2,
          Contributor must include a text file with the Source Code
          distribution titled "LEGAL" which describes the claim and the
          party making the claim in sufficient detail that a recipient will
          know whom to contact. If Contributor obtains such knowledge after
          the Modification is made available as described in Section 3.2,
          Contributor shall promptly modify the LEGAL file in all copies
          Contributor makes available thereafter and shall take other steps
          (such as notifying appropriate mailing lists or newsgroups)
          reasonably calculated to inform those who received the Covered
          Code that new knowledge has been obtained.

          (b) Contributor APIs.
          If Contributor's Modifications include an application programming
          interface and Contributor has knowledge of patent licenses which
          are reasonably necessary to implement that API, Contributor must
          also include this information in the LEGAL file.

               (c)    Representations.
          Contributor represents that, except as disclosed pursuant to
          Section 3.4(a) above, Contributor believes that Contributor's
          Modifications are Contributor's original creation(s) and/or
          Contributor has sufficient rights to grant the rights conveyed by
          this License.

     3.5. Required Notices.
     You must duplicate the notice in Exhibit A in each file of the Source
     Code.  If it is not possible to put such notice in a particular Source
     Code file due to its structure, then You must include such notice in a
     location (such as a relevant directory) where a user would be likely
     to look for such a notice.  If You created one or more Modification(s)
     You may add your name as a Contributor to the notice described in
     Exhibit A.  You must also duplicate this License in any documentation
     for the Source Code where You describe recipients' rights or ownership
     rights relating to Covered Code.  You may choose to offer, and to
     charge a fee for, warranty, support, indemnity or liability
     obligations to one or more recipients of Covered Code. However, You
     may do so only on Your own behalf, and not on behalf of the Initial
     Developer or any Contributor. You must make it absolutely clear than
     any such warranty, support, indemnity or liability obligation is
     offered by You alone, and You hereby agree to indemnify the Initial
     Developer and every Contributor for any liability incurred by the
     Initial Developer or such Contributor as a result of warranty,
     support, indemnity or liability terms You offer.

     3.6. Distribution of Executable Versions.
     You may distribute Covered Code in Executable form only if the
     requirements of Section 3.1-3.5 have been met for that Covered Code,
     and if You include a notice stating that the Source Code version of
     the Covered Code is available under the terms of this License,
     including a description of how and where You have fulfilled the
     obligations of Section 3.2. The notice must be conspicuously included
     in any notice in an Executable version, related documentation or
     collateral in which You describe recipients' rights relating to the
     Covered Code. You may distribute the Executable version of Covered
     Code or ownership rights under a license of Your choice, which may
     contain terms different from this License, provided that You are in
     compliance with the terms of this License and that the license for the
     Executable version does not attempt to limit or alter the recipient's
     rights in the Source Code version from the rights set forth in this
     License. If You distribute the Executable version under a different
     license You must make it absolutely clear that any terms which differ
     from this License are offered by You alone, not by the Initial
     Developer or any Contributor. You hereby agree to indemnify the
     Initial Developer and every Contributor for any liability incurred by
     the Initial Developer or such Contributor as a result of any such
     terms You offer.

     3.7. Larger Works.
     You may create a Larger Work by combining Covered Code with other code
     not governed by the terms of this License and distribute the Larger
     Work as a single product. In such a case, You must make sure the
     requirements of this License are fulfilled for the Covered Code.

4. Inability to Comply Due to Statute or Regulation.

     If it is impossible for You to comply with any of the terms of this
     License with respect to some or all of the Covered Code due to
     statute, judicial order, or regulation then You must: (a) comply with
     the terms of this License to the maximum extent possible; and (b)
     describe the limitations and the code they affect. Such description
     must be included in the LEGAL file described in Section 3.4 and must
     be included with all distributions of the Source Code. Except to the
     extent prohibited by statute or regulation, such description must be
     sufficiently detailed for a recipient of ordinary skill to be able to
     understand it.

5. Application of this License.

     This License applies to code to which the Initial Developer has
     attached the notice in Exhibit A and to related Covered Code.

6. Versions of the License.

     6.1. New Versions.
     Netscape Communications Corporation ("Netscape") may publish revised
     and/or new versions of the License from time to time. Each version
     will be given a distinguishing version number.

     6.2. Effect of New Versions.
     Once Covered Code has been published under a particular version of the
     License, You may always continue to use it under the terms of that
     version. You may also choose to use such Covered Code under the terms
     of any subsequent version of the License published by Netscape. No one
     other than Netscape has the right to modify the terms applicable to
     Covered Code created under this License.

     6.3. Derivative Works.
     If You create or use a modified version of this License (which you may
     only do in order to apply it to code which is not already Covered Code
     governed by this License), You must (a) rename Your license so that
     the phrases "Mozilla", "MOZILLAPL", "MOZPL", "Netscape",
     "MPL", "NPL" or any confusingly similar phrase do not appear in your
     license (except to note that your license differs from this License)
     and (b) otherwise make it clear that Your version of the license
     contains terms which differ from the Mozilla Public License and
     Netscape Public License. (Filling in the name of the Initial
     Developer, Original Code or Contributor in the notice described in
     Exhibit A shall not of themselves be deemed to be modifications of
     this License.)

7. DISCLAIMER OF WARRANTY.

     COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS,
     WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
     WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF
     DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING.
     THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE
     IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT,
     YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE
     COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER
     OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF
     ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.

8. TERMINATION.

     8.1.  This License and the rights granted hereunder will terminate
     automatically if You fail to comply with terms herein and fail to cure
     such breach within 30 days of becoming aware of the breach. All
     sublicenses to the Covered Code which are properly granted shall
     survive any termination of this License. Provisions which, by their
     nature, must remain in effect beyond the termination of this License
     shall survive.

     8.2.  If You initiate litigation by asserting a patent infringement
     claim (excluding declatory judgment actions) against Initial Developer
     or a Contributor (the Initial Developer or Contributor against whom
     You file such action is referred to as "Participant")  alleging that:

     (a)  such Participant's Contributor Version directly or indirectly
     infringes any patent, then any and all rights granted by such
     Participant to You under Sections 2.1 and/or 2.2 of this License
     shall, upon 60 days notice from Participant terminate prospectively,
     unless if within 60 days after receipt of notice You either: (i)
     agree in writing to pay Participant a mutually agreeable reasonable
     royalty for Your past and future use of Modifications made by such
     Participant, or (ii) withdraw Your litigation claim with respect to
     the Contributor Version against such Participant.  If within 60 days
     of notice, a reasonable royalty and payment arrangement are not
     mutually agreed upon in writing by the parties or the litigation claim
     is not withdrawn, the rights granted by Participant to You under
     Sections 2.1 and/or 2.2 automatically terminate at the expiration of
     the 60 day notice period specified above.

     (b)  any software, hardware, or device, other than such Participant's
     Contributor Version, directly or indirectly infringes any patent, then
     any rights granted to You by such Participant under Sections 2.1(b)
     and 2.2(b) are revoked effective as of the date You first made, used,
     sold, distributed, or had made, Modifications made by that
     Participant.

     8.3.  If You assert a patent infringement claim against Participant
     alleging that such Participant's Contributor Version directly or
     indirectly infringes any patent where such claim is resolved (such as
     by license or settlement) prior to the initiation of patent
     infringement litigation, then the reasonable value of the licenses
     granted by such Participant under Sections 2.1 or 2.2 shall be taken
     into account in determining the amount or value of any payment or
     license.

     8.4.  In the event of termination under Sections 8.1 or 8.2 above,
     all end user license agreements (excluding distributors and resellers)
     which have been validly granted by You or any distributor hereunder
     prior to termination shall survive termination.

9. LIMITATION OF LIABILITY.

     UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT
     (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL
     DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE,
     OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR
     ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY
     CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL,
     WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER
     COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN
     INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF
     LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY
     RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW
     PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE
     EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO
     THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.

10. U.S. GOVERNMENT END USERS.

     The Covered Code is a "commercial item," as that term is defined in
     48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer
     software" and "commercial computer software documentation," as such
     terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48
     C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995),
     all U.S. Government End Users acquire Covered Code with only those
     rights set forth herein.

11. MISCELLANEOUS.

     This License represents the complete agreement concerning subject
     matter hereof. If any provision of this License is held to be
     unenforceable, such provision shall be reformed only to the extent
     necessary to make it enforceable. This License shall be governed by
     California law provisions (except to the extent applicable law, if
     any, provides otherwise), excluding its conflict-of-law provisions.
     With respect to disputes in which at least one party is a citizen of,
     or an entity chartered or registered to do business in the United
     States of America, any litigation relating to this License shall be
     subject to the jurisdiction of the Federal Courts of the Northern
     District of California, with venue lying in Santa Clara County,
     California, with the losing party responsible for costs, including
     without limitation, court costs and reasonable attorneys' fees and
     expenses. The application of the United Nations Convention on
     Contracts for the International Sale of Goods is expressly excluded.
     Any law or regulation which provides that the language of a contract
     shall be construed against the drafter shall not apply to this
     License.

12. RESPONSIBILITY FOR CLAIMS.

     As between Initial Developer and the Contributors, each party is
     responsible for claims and damages arising, directly or indirectly,
     out of its utilization of rights under this License and You agree to
     work with Initial Developer and Contributors to distribute such
     responsibility on an equitable basis. Nothing herein is intended or
     shall be deemed to constitute any admission of liability.

13. MULTIPLE-LICENSED CODE.

     Initial Developer may designate portions of the Covered Code as
     "Multiple-Licensed".  "Multiple-Licensed" means that the Initial
     Developer permits you to utilize portions of the Covered Code under
     Your choice of the NPL or the alternative licenses, if any, specified
     by the Initial Developer in the file described in Exhibit A.

EXHIBIT A -Mozilla Public License.

     ``The contents of this file are subject to the Mozilla Public License
     Version 1.1 (the "License"); you may not use this file except in
     compliance with the License. You may obtain a copy of the License at
     http://www.mozilla.org/MPL/

     Software distributed under the License is distributed on an "AS IS"
     basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
     License for the specific language governing rights and limitations
     under the License.

     The Original Code is ${PROJECT}.

     The Initial Developer of the Original Code is ${INITIAL_DEVELOPER}.
     Portions created by ${INITIAL_DEVELOPER} are Copyright (C) 
     ${INITIAL_DEVELOPER_COPYRIGHT}. All Rights Reserved.

     Contributor(s): ${CONTRIBUTORS}.

     Alternatively, the contents of this file may be used under the terms
     of the ${ALT_LIC_NAME} license (the  "[${ALT_LIC_SHORT}] License"), in which case the
     provisions of [${ALT_LIC_SHORT}] License are applicable instead of those
     above.  If you wish to allow use of your version of this file only
     under the terms of the [${ALT_LIC_SHORT}] License and not to allow others to use
     your version of this file under the MPL, indicate your decision by
     deleting  the provisions above and replace  them with the notice and
     other provisions required by the [${ALT_LIC_SHORT}] License.  If you do not delete
     the provisions above, a recipient may use your version of this file
     under either the MPL or the [${ALT_LIC_SHORT}] License."

     [NOTE: The text of this Exhibit A may differ slightly from the text of
     the notices in the Source Code files of the Original Code. You should
     use the text of this Exhibit A rather than the text found in the
     Original Code Source Code for Your Modifications.]

            </text>
        </license>
        <license 
            name='Bouncy Castle adaptation of MIT X11 License' 
            id='bouncy.mit' 
            url='http://www.bouncycastle.org/licence.html'>
            <text>
Please note: our license is an adaptation of the MIT X11 License and should be
read as such.

LICENSE Copyright (c) 2000 - 2011 The Legion Of The Bouncy Castle
(http://www.bouncycastle.org)

Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
            </text>
        </license>
        <license name='The MIT License (MIT)' id='MIT' 
            url='http://opensource.org/licenses/mit-license.php'>
            <text>
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software  and associated documentation files (the "Software"), to deal in
the Software without restriction,  including without limitation the rights to
use, copy, modify, merge, publish, distribute,  sublicense, and/or sell copies
of the Software, and to permit persons to whom the Software is  furnished to do
so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or  substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING  BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND  NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,  DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
            </text>
        </license>
        <license 
            name='Eclipse Distribution License Version 1.0' 
            id='EclipseDistributionLicense1' 
            url='http://www.eclipse.org/org/documents/edl-v10.php'>
            <text>
Eclipse Distribution License Version 1.0

Copyright (c) 2007, Eclipse Foundation, Inc. and its licensors.

All rights reserved.

Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:

Redistributions of source code must retain the above copyright notice, this list
of conditions and the following disclaimer. Redistributions in binary form must
reproduce the above copyright notice, this list of conditions and the following
disclaimer in the documentation and/or other materials provided with the
distribution. Neither the name of the Eclipse Foundation, Inc. nor the names of
its contributors may be used to endorse or promote products derived from  this
software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT  LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT  OWNER OR CONTRIBUTORS BE LIABLE FOR
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF  THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
            </text>
        </license>
        <license name='MIT License' id='MIT' 
            url='http://www.opensource.org/licenses/mit-license.php'>
            <text>
Permission is hereby granted, free  of charge, to any person obtaining
a  copy  of this  software  and  associated  documentation files  (the
"Software"), to  deal in  the Software without  restriction, including
without limitation  the rights to  use, copy, modify,  merge, publish,
distribute,  sublicense, and/or sell  copies of  the Software,  and to
permit persons to whom the Software  is furnished to do so, subject to
the following conditions:

The  above  copyright  notice  and  this permission  notice  shall  be
included in all copies or substantial portions of the Software.

THE  SOFTWARE IS  PROVIDED  "AS  IS", WITHOUT  WARRANTY  OF ANY  KIND,
EXPRESS OR  IMPLIED, INCLUDING  BUT NOT LIMITED  TO THE  WARRANTIES OF
MERCHANTABILITY,    FITNESS    FOR    A   PARTICULAR    PURPOSE    AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE,  ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
            </text>
        </license>
        <license name='BSD (2-clause) for XenServerJava' id='BSD2ClauseXenServerJava'
            url='http://www.opensource.org/licenses/BSD-2-Clause'>
            <text>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:

 1) Redistributions of source code must retain the above copyright
    notice, this list of conditions and the following disclaimer.

 2) Redistributions in binary form must reproduce the above copyright
    notice, this list of conditions and the following disclaimer in
    the documentation and/or other materials provided with the
    distribution.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
            </text>
        </license>
        <license name='BSD (2-clause)' id='BSD2ClauseGeneric'
            url='http://www.opensource.org/licenses/BSD-2-Clause'>
            <text>
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:

Redistributions of source code must retain the above copyright notice, this list
of  conditions and the following disclaimer. Redistributions in binary form must
reproduce the above copyright notice, this list  of conditions and the following
disclaimer in the documentation and/or other materials  provided with the
distribution.

Neither the name of the author nor the names of contributors may be used to
endorse  or promote products derived from this software without specific prior
written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY  EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE  GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED  AND ON
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED  OF THE POSSIBILITY OF SUCH DAMAGE.
            </text>
        </license>
        <license name='BSD (3-clause)' id='BSD3ClauseGeneric'
            url='http://www.opensource.org/licenses/BSD-3-Clause'>
            <text>
  Redistribution and use in source and binary forms, with or without
  modification, are permitted provided that the following conditions
  are met:
  1. Redistributions of source code must retain the above copyright
     notice, this list of conditions and the following disclaimer.
  2. Redistributions in binary form must reproduce the above copyright
     notice, this list of conditions and the following disclaimer in the
     documentation and/or other materials provided with the distribution.
  3. Neither the name of the copyright holders nor the names of its
     contributors may be used to endorse or promote products derived from
     this software without specific prior written permission.
 
  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
  THE POSSIBILITY OF SUCH DAMAGE.
            </text>
        </license>
        <license name='BSD (3-clause)' id ='BSD3Clause' 
            url='http://www.opensource.org/licenses/BSD-3-Clause'>
                <template>
                    <parameter-name>organisation</parameter-name>
                </template>
                <text>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:

   * Redistributions of source code must retain the above copyright notice,
     this list of conditions and the following disclaimer.
   * Redistributions in binary form must reproduce the above copyright notice,
     this list of conditions and the following disclaimer in the documentation
     and/or other materials provided with the distribution.
   * Neither the name of ${organisation} nor the names of its contributors
     may be used to endorse or promote products derived from this software
     without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
            </text>
        </license>
        <license
            name='Apache License, Version 1.1'
            id='ApacheLicenseVersion1.1'
            url='http://www.apache.org/licenses/LICENSE-1.1'>
            <text>
/* ====================================================================
 * The Apache Software License, Version 1.1
 *
 * Copyright (c) 2000 The Apache Software Foundation.  All rights
 * reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 *
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in
 *    the documentation and/or other materials provided with the
 *    distribution.
 *
 * 3. The end-user documentation included with the redistribution,
 *    if any, must include the following acknowledgment:
 *       "This product includes software developed by the
 *        Apache Software Foundation (http://www.apache.org/)."
 *    Alternately, this acknowledgment may appear in the software itself,
 *    if and wherever such third-party acknowledgments normally appear.
 *
 * 4. The names "Apache" and "Apache Software Foundation" must
 *    not be used to endorse or promote products derived from this
 *    software without prior written permission. For written
 *    permission, please contact apache@apache.org.
 *
 * 5. Products derived from this software may not be called "Apache",
 *    nor may "Apache" appear in their name, without prior written
 *    permission of the Apache Software Foundation.
 *
 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 * SUCH DAMAGE.
 * ====================================================================
 *
 * This software consists of voluntary contributions made by many
 * individuals on behalf of the Apache Software Foundation.  For more
 * information on the Apache Software Foundation, please see
 * &lt;http://www.apache.org/&gt;.
 */
            </text>
        </license>
        <license
            name='Common Public License - v 1.0'
            id='CPL1'
            url='http://opensource.org/licenses/cpl1.0'>
            <text>
Common Public License Version 1.0 (CPL)

THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS COMMON PUBLIC
LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM
CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.

1. DEFINITIONS

"Contribution means:

a) in the case of the initial Contributor, the initial code and documentation
distributed under this Agreement, and

b) in the case of each subsequent Contributor:

i) changes to the Program, and

ii) additions to the Program;

where such changes and/or additions to the Program originate from and are
distributed by that particular Contributor. A Contribution 'originates' from a
Contributor if it was added to the Program by such Contributor itself or anyone
acting on such Contributor's behalf. Contributions do not include additions to
the Program which: (i) are separate modules of software distributed in
conjunction with the Program under their own license agreement, and (ii) are not
derivative works of the Program.

"Contributor means any person or entity that distributes the Program.

"Licensed Patents  mean patent claims licensable by a Contributor which are
"necessarily infringed by the use or sale of its Contribution alone or when
"combined with the Program.

"Program means the Contributions distributed in accordance with this Agreement.

"Recipient means anyone who receives the Program under this Agreement, including
"all Contributors.

2. GRANT OF RIGHTS

a) Subject to the terms of this Agreement, each Contributor hereby grants
Recipient a non-exclusive, worldwide, royalty-free copyright license to
reproduce, prepare derivative works of, publicly display, publicly perform,
distribute and sublicense the Contribution of such Contributor, if any, and such
derivative works, in source code and object code form.

b) Subject to the terms of this Agreement, each Contributor hereby grants
Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed
Patents to make, use, sell, offer to sell, import and otherwise transfer the
Contribution of such Contributor, if any, in source code and object code form.
This patent license shall apply to the combination of the Contribution and the
Program if, at the time the Contribution is added by the Contributor, such
addition of the Contribution causes such combination to be covered by the
Licensed Patents. The patent license shall not apply to any other combinations
which include the Contribution. No hardware per se is licensed hereunder.

c) Recipient understands that although each Contributor grants the licenses to
its Contributions set forth herein, no assurances are provided by any
Contributor that the Program does not infringe the patent or other intellectual
property rights of any other entity. Each Contributor disclaims any liability to
Recipient for claims brought by any other entity based on infringement of
intellectual property rights or otherwise. As a condition to exercising the
rights and licenses granted hereunder, each Recipient hereby assumes sole
responsibility to secure any other intellectual property rights needed, if any.
For example, if a third party patent license is required to allow Recipient to
distribute the Program, it is Recipient's responsibility to acquire that license
before distributing the Program.

d) Each Contributor represents that to its knowledge it has sufficient copyright
rights in its Contribution, if any, to grant the copyright license set forth in
this Agreement.

3. REQUIREMENTS

A Contributor may choose to distribute the Program in object code form under its
own license agreement, provided that:

a) it complies with the terms and conditions of this Agreement; and

b) its license agreement:

i) effectively disclaims on behalf of all Contributors all warranties and
conditions, express and implied, including warranties or conditions of title and
non-infringement, and implied warranties or conditions of merchantability and
fitness for a particular purpose;

ii) effectively excludes on behalf of all Contributors all liability for
damages, including direct, indirect, special, incidental and consequential
damages, such as lost profits;

iii) states that any provisions which differ from this Agreement are offered by
that Contributor alone and not by any other party; and

iv) states that source code for the Program is available from such Contributor,
and informs licensees how to obtain it in a reasonable manner on or through a
medium customarily used for software exchange.

When the Program is made available in source code form:

a) it must be made available under this Agreement; and

b) a copy of this Agreement must be included with each copy of the Program.

Contributors may not remove or alter any copyright notices contained within the
Program.

Each Contributor must identify itself as the originator of its Contribution, if
any, in a manner that reasonably allows subsequent Recipients to identify the
originator of the Contribution.

4. COMMERCIAL DISTRIBUTION

Commercial distributors of software may accept certain responsibilities with
respect to end users, business partners and the like. While this license is
intended to facilitate the commercial use of the Program, the Contributor who
includes the Program in a commercial product offering should do so in a manner
which does not create potential liability for other Contributors. Therefore, if
a Contributor includes the Program in a commercial product offering, such
Contributor ("Commercial Contributor") hereby agrees to defend and indemnify
every other Contributor ("Indemnified Contributor") against any losses, damages
and costs (collectively "Losses") arising from claims, lawsuits and other legal
actions brought by a third party against the Indemnified Contributor to the
extent caused by the acts or omissions of such Commercial Contributor in
connection with its distribution of the Program in a commercial product
offering. The obligations in this section do not apply to any claims or Losses
relating to any actual or alleged intellectual property infringement. In order
to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
Contributor in writing of such claim, and b) allow the Commercial Contributor to
control, and cooperate with the Commercial Contributor in, the defense and any
related settlement negotiations. The Indemnified Contributor may participate in
any such claim at its own expense.

For example, a Contributor might include the Program in a commercial product
offering, Product X. That Contributor is then a Commercial Contributor. If that
Commercial Contributor then makes performance claims, or offers warranties
related to Product X, those performance claims and warranties are such
Commercial Contributor's responsibility alone. Under this section, the
Commercial Contributor would have to defend claims against the other
Contributors related to those performance claims and warranties, and if a court
requires any other Contributor to pay any damages as a result, the Commercial
Contributor must pay those damages.

5. NO WARRANTY

EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR
IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE,
NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each
Recipient is solely responsible for determining the appropriateness of using and
distributing the Program and assumes all risks associated with its exercise of
rights under this Agreement, including but not limited to the risks and costs of
program errors, compliance with applicable laws, damage to or loss of data,
programs or equipment, and unavailability or interruption of operations.

6. DISCLAIMER OF LIABILITY

EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY
CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST
PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS
GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

7. GENERAL

If any provision of this Agreement is invalid or unenforceable under applicable
law, it shall not affect the validity or enforceability of the remainder of the
terms of this Agreement, and without further action by the parties hereto, such
provision shall be reformed to the minimum extent necessary to make such
provision valid and enforceable.

If Recipient institutes patent litigation against a Contributor with respect to
a patent applicable to software (including a cross-claim or counterclaim in a
lawsuit), then any patent licenses granted by that Contributor to such Recipient
under this Agreement shall terminate as of the date such litigation is filed. In
addition, if Recipient institutes patent litigation against any entity
(including a cross-claim or counterclaim in a lawsuit) alleging that the Program
itself (excluding combinations of the Program with other software or hardware)
infringes such Recipient's patent(s), then such Recipient's rights granted under
Section 2(b) shall terminate as of the date such litigation is filed.

All Recipient's rights under this Agreement shall terminate if it fails to
comply with any of the material terms or conditions of this Agreement and does
not cure such failure in a reasonable period of time after becoming aware of
such noncompliance. If all Recipient's rights under this Agreement terminate,
Recipient agrees to cease use and distribution of the Program as soon as
reasonably practicable. However, Recipient's obligations under this Agreement
and any licenses granted by Recipient relating to the Program shall continue and
survive.

Everyone is permitted to copy and distribute copies of this Agreement, but in
order to avoid inconsistency the Agreement is copyrighted and may only be
modified in the following manner. The Agreement Steward reserves the right to
publish new versions (including revisions) of this Agreement from time to time.
No one other than the Agreement Steward has the right to modify this Agreement.
IBM is the initial Agreement Steward. IBM may assign the responsibility to serve
as the Agreement Steward to a suitable separate entity. Each new version of the
Agreement will be given a distinguishing version number. The Program (including
Contributions) may always be distributed subject to the version of the Agreement
under which it was received. In addition, after a new version of the Agreement
is published, Contributor may elect to distribute the Program (including its
Contributions) under the new version. Except as expressly stated in Sections
2(a) and 2(b) above, Recipient receives no rights or licenses to the
intellectual property of any Contributor under this Agreement, whether
expressly, by implication, estoppel or otherwise. All rights in the Program not
expressly granted under this Agreement are reserved.

This Agreement is governed by the laws of the State of New York and the
intellectual property laws of the United States of America. No party to this
Agreement will bring a legal action under this Agreement more than one year
after the cause of action arose. Each party waives its rights to a jury trial in
any resulting litigation.
            </text>
        </license>
        <license
            name='XStream BSD Style License'
            id='xstream.bsd'
            url='https://fisheye.codehaus.org/browse/xstream/trunk/LICENSE.txt?hb=true'>
            <text>
(BSD Style License)
 
Copyright (c) 2003-2006, Joe Walnes Copyright (c) 2006-2011, XStream Committers
All rights reserved.
 
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
 
Redistributions of source code must retain the above copyright notice, this list
of conditions and the following disclaimer. Redistributions in binary form must
reproduce the above copyright notice, this list of conditions and the following
disclaimer in the documentation and/or other materials provided with the
distribution.
 
Neither the name of XStream nor the names of its contributors may be used to
endorse or promote products derived from this software without specific prior
written permission.
 
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
            </text>
        </license>
        <license
            name='ANTLR 2 License'
            id='antlr2'
            url='http://www.antlr2.org/license.html'>
            <text>                
ANTLR 2 License

We reserve no legal rights to the ANTLR--it is fully in the public domain. An
individual or company may do whatever they wish with source code distributed
with ANTLR or the code generated by ANTLR, including the incorporation of ANTLR,
or its output, into commerical software. We encourage users to develop software
with ANTLR. However, we do ask that credit is given to us for developing ANTLR.
By "credit", we mean that if you use ANTLR or incorporate any source code into
one of your programs (commercial product, research project, or otherwise) that
you acknowledge this fact somewhere in the documentation, research report,
etc... If you like ANTLR and have developed a nice tool with the output, please
mention that you developed it using ANTLR. In addition, we ask that the headers
remain intact in our source code. As long as these guidelines are kept, we
expect to continue enhancing this system and expect to make other tools
available as they are completed.
            </text>
        </license>
        <license
            name='Dom4J License'
            id='dom4j.license'
            url='http://dom4j.cvs.sourceforge.net/viewvc/dom4j/dom4j/LICENSE.txt'>
            <text>
Copyright 2001-2005 (C) MetaStuff, Ltd. All Rights Reserved.

Redistribution and use of this software and associated documentation
("Software"), with or without modification, are permitted provided
that the following conditions are met:

1. Redistributions of source code must retain copyright
   statements and notices.  Redistributions must also contain a
   copy of this document.
 
2. Redistributions in binary form must reproduce the
   above copyright notice, this list of conditions and the
   following disclaimer in the documentation and/or other
   materials provided with the distribution.
 
3. The name "DOM4J" must not be used to endorse or promote
   products derived from this Software without prior written
   permission of MetaStuff, Ltd.  For written permission,
   please contact dom4j-info@metastuff.com.
 
4. Products derived from this Software may not be called "DOM4J"
   nor may "DOM4J" appear in their names without prior written
   permission of MetaStuff, Ltd. DOM4J is a registered
   trademark of MetaStuff, Ltd.
 
5. Due credit should be given to the DOM4J Project - 
   http://www.dom4j.org
 
THIS SOFTWARE IS PROVIDED BY METASTUFF, LTD. AND CONTRIBUTORS
``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT
NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL
METASTUFF, LTD. OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
OF THE POSSIBILITY OF SUCH DAMAGE.
            </text>
        </license>
        <license 
            name='Apache License, Version 2' 
            id='ApacheLicenseVersion2' 
            url='http://www.apache.org/licenses/LICENSE-2.0.txt'>
            <text>
                                 Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS
            </text>
        </license>
    </licenses>
    <notices>
        <notice id='trilead.notice'>
Trilead SSH-2 for Java includes code that was written by Dr. Christian Plattner
during his PhD at ETH Zurich. The license states the following:

Copyright (c) 2005 - 2006 Swiss Federal Institute of Technology (ETH Zurich),
  Department of Computer Science (http://www.inf.ethz.ch),
  Christian Plattner. All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:

a.) Redistributions of source code must retain the above copyright
    notice, this list of conditions and the following disclaimer.
b.) Redistributions in binary form must reproduce the above copyright
    notice, this list of conditions and the following disclaimer in the
    documentation and/or other materials provided with the distribution.
c.) Neither the name of ETH Zurich nor the names of its contributors may
    be used to endorse or promote products derived from this software
    without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.

The Java implementations of the AES, Blowfish and 3DES ciphers have been
taken (and slightly modified) from the cryptography package released by
"The Legion Of The Bouncy Castle".

Their license states the following:

Copyright (c) 2000 - 2004 The Legion Of The Bouncy Castle
(http://www.bouncycastle.org)

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE. 
        </notice>
        <notice id='codec'>
Apache Commons Codec
Copyright 2002-2011 The Apache Software Foundation

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

--------------------------------------------------------------------------------
src/test/org/apache/commons/codec/language/DoubleMetaphoneTest.java contains 
test data from http://aspell.sourceforge.net/test/batch0.tab.

Copyright (C) 2002 Kevin Atkinson (kevina@gnu.org). Verbatim copying
and distribution of this entire article is permitted in any medium,
provided this notice is preserved.
--------------------------------------------------------------------------------
        </notice>
        <notice id='logging'>
// ------------------------------------------------------------------
// NOTICE file corresponding to the section 4d of The Apache License,
// Version 2.0, in this case for Commons Logging
// ------------------------------------------------------------------

Commons Logging
Copyright 2001-2007 The Apache Software Foundation

This product includes/uses software(s) developed by 'an unknown organization'
  - Unnamed - avalon-framework:avalon-framework:jar:4.1.3
  - Unnamed - log4j:log4j:jar:1.2.12
  - Unnamed - logkit:logkit:jar:1.0.1
        </notice>
        <notice id='cddlnotice'>
NOTICE PURSUANT TO SECTION 9 OF THE COMMON DEVELOPMENT AND DISTRIBUTION LICENSE
(CDDL)

The code released under the CDDL shall be governed by the laws of the State of
California (excluding conflict-of-law provisions). Any litigation relating to
this License shall be subject to the jurisdiction of the Federal Courts of the
Northern District of California and the state courts of the State of California,
with venue lying in Santa Clara County, California.
        </notice>
        <notice id='jquery.notice.1.3.2'>
jQuery JavaScript Library v1.3.2
http://jquery.com/

Copyright (c) 2009 John Resig
Dual licensed under the MIT and GPL licenses.
http://docs.jquery.com/License

Date: 2009-02-19 17:34:21 -0500 (Thu, 19 Feb 2009)
Revision: 6246
        </notice>
        <notice id='jquery.notice.1.6.1'>
jQuery JavaScript Library v1.6.1
http://jquery.com/

Copyright 2011, John Resig
Dual licensed under the MIT or GPL Version 2 licenses.
http://jquery.org/license

Includes Sizzle.js
http://sizzlejs.com/
Copyright 2011, The Dojo Foundation
Released under the MIT, BSD, and GPL Licenses.

Date: Thu May 12 15:04:36 2011 -0400
        </notice>
        <notice id='jasypt.notice'>

   Copyright (c) 2007-2010, The JASYPT team (http://www.jasypt.org)
 
   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at
 
       http://www.apache.org/licenses/LICENSE-2.0
 
   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.


---------------------------------



This distribution includes cryptographic software.  The country in 
which you currently reside may have restrictions on the import, 
possession, use, and/or re-export to another country, of 
encryption software.  BEFORE using any encryption software, please 
check your country's laws, regulations and policies concerning the
import, possession, or use, and re-export of encryption software, to 
see if this is permitted.  See http://www.wassenaar.org/ for more
information.

The U.S. Government Department of Commerce, Bureau of Industry and
Security (BIS), has classified this software as Export Commodity 
Control Number (ECCN) 5D002.C.1, which includes information security
software using or performing cryptographic functions with asymmetric
algorithms.  The form and manner of this distribution makes it 
eligible for export under the License Exception ENC Technology 
Software Unrestricted (TSU) exception (see the BIS Export 
Administration Regulations, Section 740.13) for both object code and 
source code.

The following provides more details on the cryptographic software 
used (note that this software is not included in the distribution):

  * The PBE Encryption facilities require the Java Cryptography 
    extensions: http://java.sun.com/javase/technologies/security/.

---------------------------------

Distributions of this software may include software developed by
The Apache Software Foundation (http://www.apache.org/).

---------------------------------


ICU License - ICU 1.8.1 and later

COPYRIGHT AND PERMISSION NOTICE

Copyright (c) 1995-2006 International Business Machines 
Corporation and others

All rights reserved.

Permission is hereby granted, free of charge, to any 
person obtaining a copy of this software and associated 
documentation files (the "Software"), to deal in the 
Software without restriction, including without limitation 
the rights to use, copy, modify, merge, publish, 
distribute, and/or sell copies of the Software, and to 
permit persons to whom the Software is furnished to do so, 
provided that the above copyright notice(s) and this 
permission notice appear in all copies of the Software and 
that both the above copyright notice(s) and this 
permission notice appear in supporting documentation.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY 
KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE 
WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR 
PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO 
EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN 
THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL 
INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES 
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, 
WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER 
TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE 
USE OR PERFORMANCE OF THIS SOFTWARE.

Except as contained in this notice, the name of a copyright 
holder shall not be used in advertising or otherwise to 
promote the sale, use or other dealings in this Software 
without prior written authorization of the copyright holder. 
        </notice>
        <notice id='jquery.md5.notice'>
jQuery MD5 Plugin 1.2.1
https://github.com/blueimp/jQuery-MD5

Copyright 2010, Sebastian Tschan
https://blueimp.net

Licensed under the MIT license:
http://creativecommons.org/licenses/MIT/

Based on
A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
Digest Algorithm, as defined in RFC 1321.
Version 2.2 Copyright (C) Paul Johnston 1999 - 2009
Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
Distributed under the BSD License
See http://pajhome.org.uk/crypt/md5 for more info.
        </notice>
        <notice id='eclipse.persistence'>
EclipseLink 2.0.0

Dec 10th, 2009

About

The EclipseLink project's goal is to provide a complete persistence framework
that is both comprehensive and universal. It will run in any Java environment
and read and write objects to virtually any type of data source, including
relational databases, and XML. EclipseLink will focus on providing leading edge
support, including advanced feature extensions, for the dominant persistence
standards for each target data source; Java Persistence API (JPA) for relational
databases, Java API for XML Binding (JAXB) for XML, Service Data Objects (SDO),
and Database Web services (DBWS).

For tips on getting started with EclipseLink, please see the following
resources:

EclipseLink 2.0.0 Release Notes Documentation Examples and How To License

The Eclipse Foundation makes available all content in this plug-in ("Content").
Unless otherwise indicated below, the Content is provided to you under the terms
and conditions of the Eclipse Public License Version 1.0 ("EPL") and Eclipse
Distribution License Version 1.0 ("EDL"). A copy of the EPL is available at
http://www.eclipse.org/legal/epl-v10.html and a copy of the EDL is available at
http://www.eclipse.org/org/documents/edl-v10.php. For purposes of the EPL,
"Program" will mean the Content.

If you did not receive this Content directly from the Eclipse Foundation, the
Content is being redistributed by another party ("Redistributor") and different
terms and conditions may apply to your use of any object code in the Content.
Check the Redistributor's license that was provided with the Content. If no such
license exists, contact the Redistributor. Unless otherwise indicated below, the
terms and conditions of the EPL and EDL still apply to any source code in the
Content and such source code may be obtained at http://www.eclipse.org.

Third Party Content

The Content includes items that have been sourced from third parties as set out
below. If you did not receive this Content directly from the Eclipse Foundation,
the following is provided for informational purposes only, and you should look
to the Redistributor's license for terms and conditions of use.

Foundation Dependencies ASM EclipseLink JPA ANTLR Java Persistence API (JPA) 2.0
EARLY ACCESS EclipseLink MOXy Java Architecture for XML Binding (JAXB) 
Java Mail Java Activation Framework Streaming API for XML (StAX) 
EclipseLink SDO Service Data Objects (SDO) 
Utilities Java Connector Xerces WSDL4J 1.6.2 ASM v1.5.3

The EclipseLink Project includes ASM for the purpose of byte code weaving. The
AMS library is re-packaged within the source of the project
(org.persistence.eclipse.internal.libraries.asm.*) to avoid version collisions
with other usage of ASM. A custom patch has been added to the ASM 1.5.3 source
to handle an issue with other usages. This fix has also been contributed back to
the ASM project for inclusion in later projects.

The source code is available within the project's subversion repository. The
binaries are distributed within the eclipselink.jar and in the
org.eclipse.persistence.asm_2.0.0.v*.jar bundle.

http://asm.objectweb.org/license.html

Copyright (c) 2000-2005 INRIA, France Telecom, All rights reserved.

Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:

Redistributions of source code must retain the above copyright notice, this list
of conditions and the following disclaimer. Redistributions in binary form must
reproduce the above copyright notice, this list of conditions and the following
disclaimer in the documentation and/or other materials provided with the
distribution. Neither the name of the copyright holders nor the names of its
contributors may be used to endorse or promote products derived from this
software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY
THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"AND ANY EXPRESS OR IMPLIED
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THEIMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSEARE DISCLAIMED. IN NO EVENT
SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BELIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, ORCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OFSUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER INCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
OR OTHERWISE)ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
OFTHE POSSIBILITY OF SUCH DAMAGE.

ANTLR v3.0

The ANTLR library (license) is included within EclipseLink Project to enable
parsing of the Java Persistence Query language (JP QL). The ANTLR library is re-
packaged within the project in the
org.eclipse.persistence.internal.libraries.antlr.* packages.

The source is available with the project's subversion repository. The binaries
are distributed within the eclipselink.jar and in the
org.eclipse.persistence.antlr_2.0.0.v*.jar bundle.

Java Architecture for XML Binding (JAXB) v2.0.5

The JAXB libraries distributed under CDDL v1.0 are included within the
EclipseLink Project to enable the MOXY component's implementation of JAXB.

JAXB Libraries:

/jlib/moxy/javax.xml.bind_2.1.12.v20090708-1500.jar 
/jlib/moxy/jaxb-impl.jar
/jlib/moxy/jaxb.xjc.jar

Java Persistence (JPA) 2.0:

The Java Persistence API used is available in the Maven central repository 
under the "org.eclipse.persistence" groupId. This jar is being shipped as
an OSGi bundle and is required for compilation of some container based 
functionality. The JAR "javax.persistence" is distributed under Eclipse 
Public License v1.0 and Eclipse Distribution License v. 1.0 licenses. 
EclipseLink is the Java Persistence (JPA) 2.0 Reference Implementation
(JSR 317).

Java Mail v1.4

The Java Mail library (mail.jar) is distributed with the JAXB v2.0.5 under CDDL
v1.0 and is included within the EclipseLink Project distribution to support Web
Services attachment handling in the MOXy component. It is only required when
using Java SE 5 (Java Mail is included in Java SE 6).

Java Activation Framework v1.1

The Java Activation Framework (activation.jar) is distributed with the JAXB
v2.0.5 under CDDL v1.0 and is included within the EclipseLink Project
distribution to support Web Services attachment handling in the MOXy component.
It is only required when using Java SE 5 (The Java Activation Framework is
included in Java SE 6).

Streaming API for XML (StAX) v1.0

The Streaming API for XML (StAX) library (jsr173_1.0_api.jar) is distributed
with the JAXB v2.0.5 under CDDL v1.0 and is included within the EclipseLink
Project distribution as an optional XML processing approach in the MOXy
component.

Service Data Objects (SDO) v2.1.1

The Service Data Objects (SDO) API is distributed under a CDDLv1.0 and custom
license. It provides the standard API implemented by the EclipseLink Project's
SDO component.

Java Connector v1.5

The JCA 1.5 API is available for download from the connector-api directory in
the glassfish CVS repository. It is distributed under CDDLv1.0 .

This jar is being shipped and required by the Workbench only. When using
EclipseLink in a container where JCA integration is required that container will
provide the necessary API libraries.

Xerces v2.9.0

Xerces 2.9.0 is available from the Xerces home page. It is distributed under
Apache 2.0.

This jar is shipped for the Workbench's use only in the reading and writing of
XML configuration files.

WSDL4j v1.6.2

WSDL4J 1.6.2 is available for download from the wsdl4j project. It distributed
under CPLv1.0 .

This jar is being shipped as a OSGi bundle and is only required for the DBWS
Builder utility.
        </notice>
        <notice id='jquery.colorhelpers.notice'>
Plugin for jQuery for working with colors.

Version 1.1.

Inspiration from jQuery color animation plugin by John Resig.

Released under the MIT license by Ole Laursen, October 2009.
        </notice>
        <notice id='xmlschema.notice'>
Portions Copyright 2006 International Business Machines Corp.
        </notice>
        <notice id='axis2.notice'>
=========================================================================
==  NOTICE file corresponding to the section 4 d of                    ==
==  the Apache License, Version 2.0,                                   ==
==  in this case for the Apache Axis2 distribution.                    ==
=========================================================================

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

This product also includes schemas and specification developed by:
- the W3C consortium (http://www.w3c.org)

This product also includes WS-* schemas developed by International
Business Machines Corporation, Microsoft Corporation, BEA Systems, 
TIBCO Software, SAP AG, Sonic Software, and VeriSign

This product also includes a WSDL developed by salesforce.com
- Copyright 1999-2006 salesforce.com, inc.

Portions of the included xmlbeans library were originally based on the following:
- software copyright (c) 2000-2003, BEA Systems, &lt;http://www.bea.com/&gt;.

Please read the different LICENSE files present in the lib directory of
this distribution.
        </notice>
        <notice id='axiom.notice'>
Axiom includes software from other projects, as follows:

This software includes the Woodstox High-performance XML processor
 http://woodstox.codehaus.org/
 licensed under the Apache License, Version 2.0

This software includes the Jaxen XPath library
 http://jaxen.codehaus.org/
 licensed under the following BSD 3 Clause license:

================================================================================
 Copyright 2003-2006 The Werken Company. All Rights Reserved.
 
 Redistribution and use in source and binary forms, with or without
 modification, are permitted provided that the following conditions are
 met:

  * Redistributions of source code must retain the above copyright
    notice, this list of conditions and the following disclaimer.

  * Redistributions in binary form must reproduce the above copyright
    notice, this list of conditions and the following disclaimer in the
    documentation and/or other materials provided with the distribution.

  * Neither the name of the Jaxen Project nor the names of its
    contributors may be used to endorse or promote products derived 
    from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

================================================================================
        </notice>
        <notice id='neethi.notice'>
=========================================================================
==  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.
        </notice>
        <notice id='woden.notice'>
=========================================================================
==  NOTICE file corresponding to the section 4 d of                    ==
==  the Apache License, Version 2.0,                                   ==
==  in this case for the Apache Woden distribution.                    ==
=========================================================================

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

This product also includes software developed by :
   
  - IBM Corporation (http://www.ibm.com),
      WSDL4J was the initial code contribution for the Apache Woden
      project and some of the WSDL4J design and code has been reused.
  - The W3C Consortium (http://www.w3c.org),
      Common W3C XML Schema and DTD files are packaged with Apache Woden.

Please read the different LICENSE files present in the root directory of
this distribution.
           </notice>
           <notice id='xerces.notice'>
=========================================================================
==  NOTICE file corresponding to section 4(d) of the Apache License,   ==
==  Version 2.0, in this case for the Apache Xerces Java distribution. ==
=========================================================================

Apache Xerces Java
Copyright 1999-2012 The Apache Software Foundation

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

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.
           </notice>
           <notice id='xml-apis.notice'>
=========================================================================
==  NOTICE file corresponding to section 4(d) of the Apache License,   ==
==  Version 2.0, in this case for the Apache xml-commons xml-apis      ==
==  distribution.                                                      ==
=========================================================================

Apache XML Commons XML APIs
Copyright 2006 The Apache Software Foundation.

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

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.
  - software copyright (c) 2000 World Wide Web Consortium, http://www.w3.org
           </notice>
           <notice id='rampart.notice'>
Apache Rampart
Copyright 2010 The Apache Software Foundation

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

Please read the different LICENSE files present in the lib directory of
this distribution.
   		</notice>
        <notice id='wss4j.notice'>
Apache WebServices - WSS4J
Copyright 2004-2011 The Apache Software Foundation

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

This product includes software Copyright University of Southampton IT
Innovation Centre, 2006 (http://www.it-innovation.soton.ac.uk).
        </notice>
        <notice id='java-ipv6.notice'>
   Java IPv6
   Copyright 2013 Jan Van Besien
        </notice>
    </notices>
    <organisations>
        <organisation 
            id='apache.org' 
            name='The Apache Software Foundation' 
            url='http://www.apache.org/'/>  
        <organisation 
            id='apache.org.2' 
            name='The Apache Software Foundation' 
            url='http://www.apache.org/'/>  
        <organisation
            id='person:Clinton.Begin'
            name='Clinton Begin'
            url='http://code.google.com/p/mybatis/' />
        <organisation
            id='luck'
            name='Luck Consulting Pty Ltd'
            url='http://gregluck.com/blog/about/' />
        <organisation
            id='glassfish.org'
            name='Project GlassFish'
            url='http://glassfish.java.net/' />
        <organisation
            id='oracle.com'
            name='Oracle and/or its affiliates'
            url='http://oracle.com' />
        <organisation
            id='google.com'
            name='Google Inc.'
            url='http://google.com' />
        <organisation
            id='jasypt.org'
            name='The JASYPT team'
            url='http://www.jasypt.org' />
        <organisation
            id='eclipse.org'
            name='The Eclipse Foundation'
            url='http://www.eclipse.org' />
        <organisation
            id='jcraft.com'
            name='JCraft'
            url='http://www.jcraft.com/' />
        <organisation
            id='ibm.com'
            name='IBM Corp'
            url='http://www.ibm.com/' />   
        <organisation
            id='xstream.codehaus.com'
            name='XStream Committers'
            url='http://xstream.codehaus.org/' />       
        <organisation
            id='jetty.codehaus.com'
            name='Jetty Committers'
            url='http://jetty.codehaus.org/jetty/' />       
        <organisation
            id='distcomplab.emory'
            name='Distributed Computing Laboratory at Emory University'
            url='http://creativecommons.org/licenses/publicdomain/' />
        <organisation
            id='bouncy.castle'
            name='The Legion Of The Bouncy Castle'
            url='http://www.bouncycastle.org' />
        <organisation
            id='trilead.com'
            name='Trilead AG'
            url='http://www.trilead.com' />
        <organisation
            id='person:klaus.hartl'
            name='Klaus Hartl'
            url='http://stilbuero.de' />
        <organisation
            id='person:george.mcginley.smith'
            name='George McGinley Smith' 
            url='' />
        <organisation
            id='person:sebastian.tschan'
            name='Sebastian Tschan'
            url='https://blueimp.net' />
        <organisation
            id='person:john.resig'
            name='John Resig' url='' />
        <organisation
            id='person:jorn.zaefferer'
            name='Jorn Zaefferer' url='' />
        <organisation
            id='person:eric.meyer'
            name='Eric Meyer'
            url='http://meyerweb.com/eric/' />
        <organisation
            id='person:ole.laursen'
            name='Ole Laursen' url='' />
        <organisation
            id='iola.dk'
            name='IOLA' 
            url='http://www.iola.dk/' />
        <organisation
            id='person:brian.medendorp'
            name='Brian Medendorp' url='' />
        <organisation
            id='jqueryui.com'
            name='jQuery UI Developers'
            url='http://jqueryui.com/about' />
        <organisation
            id='openstack.org'
            name='OpenStack, LLC'
            url='http://www.openstack.org' />
        <organisation
            id='antlr2.org'
            name='ANTLR Translator Generator Project'
            url='http://www.antlr2.org/' />
        <organisation
            id='qos.ch'
            name='QOS.ch'
            url='http://www.qos.ch/' />
        <organisation
            id='dom4j.sourceforge.net'
            name='DOM4J Project'
            url='http://dom4j.sourceforge.net/' />
        <organisation
            id='json-simple'
            name='Json.simple Project'
            url='http://code.google.com/p/json-simple/' />
        <organisation
            id='junit.org'
            name='JUnit Project'
            url='http://www.junit.org/' />
        <organisation
            id='person:shigeru.chiba'
            name='Shigeru Chiba'
            url='http://www.csg.ci.i.u-tokyo.ac.jp/~chiba/javassist/' />
        <organisation
            id='citrix.com'
            name='Citrix Systems, Inc'
            url='http://www.citrix.com/' />
        <organisation
            id='caringo.com'
            name='Caringo, Inc.'
            url='http://www.caringo.com/' />
        <organisation
            id='person:simon.kelley'
            name='Simon Kelley'
            url='' />
        <organisation
            id='openssh.org'
            name='OpenSSH Project'
            url='http://www.openssh.org/' />
        <organisation
            id='netfilter.org'
            name='The netfilter.org project'
            url='http://www.netfilter.org/' />
        <organisation
            id='libvirt.org'
            name='The libvirt project'
            url='http://libvirt.org/' />
        <organisation
            id='adiscon.com'
            name='Adiscon GmbH'
            url='http://www.adiscon.com/' />
        <organisation
            id='vmware.com'
            name='VMware, Inc'
            url='http://www.vmware.com/' />
        <organisation
        	id='dojofoundation.org'
        	name='The Dojo Foundation'
        	url='http://dojofoundation.org/' />
        <organisation
            id='person:janvanbesien'
            name='Jan Van Besien'
            url='mailto:janvanbesien@gmail.com' />
        <organisation
        	id='springsource.com'
        	name='SpringSource, a division of VMware.'
        	url='http://www.springsource.org/' />
        <organisation
        	id='owasp.org'
        	name='OWASP Foundation Inc.'
        	url='https://www.owasp.org/' />
    </organisations>
    <primary-license id='ApacheLicenseVersion2'>
        <copyright-notice>Copyright (c) 2013 The Apache Software Foundation</copyright-notice>
    </primary-license>
    <primary-notice id="foo">
This product includes software developed at
The Apache Software Foundation (http://www.apache.org/).
    </primary-notice>
    <primary-organisation id='apache.org'/> 
    <within dir='systemvm/debian/etc/apache2'>
        <with-license id='ApacheLicenseVersion2'>
            <copyright-notice>
Copyright (c) 2012 The Apache Software Foundation
            </copyright-notice>
            <by-organisation id='apache.org.2'>
                <resource name='httpd.conf' />
                <resource name='vhost.template' />
            </by-organisation>
        </with-license>
    </within>
    <within dir='systemvm/debian/etc'>
        <public-domain>
            <by-organisation id='adiscon.com'>
                <resource name='rsyslog.conf' />
            </by-organisation>
            <by-organisation id='person:simon.kelley'>
                <resource name='vpcdnsmasq.conf' />
                <resource name='dnsmasq.conf' />
            </by-organisation>
        </public-domain>
    </within>
    <within dir='systemvm/debian/root/redundant_router'>
        <public-domain>
            <by-organisation id='netfilter.org'>
                <resource name='conntrackd.conf.templ' />
            </by-organisation>
        </public-domain>
    </within>
    <within dir='systemvm/debian/etc/ssh/'>
        <with-license id='BSD2ClauseGeneric'>
            <copyright-notice />
            <by-organisation id='openssh.org'>
                <resource name='sshd_config' />
            </by-organisation>
        </with-license>
    </within>
    <within dir='deps'>
        <with-license id='BSD2ClauseXenServerJava'>
            <copyright-notice>
Copyright (c) Citrix Systems, Inc.
All rights reserved.
            </copyright-notice>
            <by-organisation id='citrix.com'>
                <resource name='XenServerJava' source='http://community.citrix.com/cdn/xs/sdks/' />
            </by-organisation>
        </with-license>
    </within>
    <within dir='console-proxy/js'>
        <with-license id='MIT'>
            <copyright-notice>
Copyright (c) 2009, John Resig
            </copyright-notice>
            <by-organisation id='person:john.resig'>
                <resource name="jquery.js" notice='jquery.notice.1.3.2' />
            </by-organisation>
        </with-license>
    </within>
    <within dir='ui/lib'>
    	<with-license id='MIT'>
    		<copyright>
Copyright (c) 2010-2012, The Dojo Foundation All Rights Reserved.
    	    </copyright>
    	    <by-organisation id='dojofoundation.org'>
    	    	<resource name='require.js' source='http://github.com/jrburke/requirejs' />
    	    </by-organisation>
        </with-license>
        <with-license id='ApacheLicenseVersion2'>
            <copyright-notice>
Copyright (c) 2006 Google Inc.
            </copyright-notice>
            <by-organisation id='google.com'>
                <resource name='excanvas.js' source='http://code.google.com/p/explorercanvas/' />
            </by-organisation>
        </with-license>
        <with-license id='MIT'>
            <copyright-notice>
Copyright (c) 2011, John Resig
            </copyright-notice>
            <by-organisation id='person:john.resig'>
                <resource name="jquery.js" notice='jquery.notice.1.6.1' />
            </by-organisation>
        </with-license>
        <with-license id='MIT'>
            <copyright-notice>
Copyright (c) 2006 - 2011 Jörn Zaefferer
            </copyright-notice>
            <by-organisation id='person:jorn.zaefferer'>
                <resource name="jquery.validate.js" />
            </by-organisation>
        </with-license>
        <with-license id='MIT'>
            <copyright-notice>
Copyright (c) 2010, Sebastian Tschan
            </copyright-notice>
            <by-organisation id='person:sebastian.tschan'>
                <resource name="jquery.md5.js" notice='jquery.md5.notice' />
            </by-organisation>
        </with-license>
        <with-license id='MIT'>
            <copyright-notice>
Copyright (c) 2006 Klaus Hartl (stilbuero.de)
            </copyright-notice>
            <by-organisation id='person:klaus.hartl'>
                <resource name="jquery.cookies.js" />
            </by-organisation>
        </with-license>
        <with-license id='BSD2ClauseGeneric'>
            <copyright-notice>
Copyright (c) 2008 George McGinley Smith
All rights reserved.
            </copyright-notice>
            <by-organisation id='person:george.mcginley.smith'>
                <resource name="jquery.easing.js" />
            </by-organisation>
        </with-license>
        <public-domain>
            <by-organisation id='person:eric.meyer'>
                <resource name='reset.css' source='http://meyerweb.com/eric/tools/css/reset/' />
            </by-organisation>
        </public-domain>
    </within>
    <within dir='ui/lib/flot'>
        <with-license id='MIT'>
            <copyright-notice>
Released under the MIT license by IOLA, December 2007.
            </copyright-notice>
            <by-organisation id='iola.dk'>
                <resource name="jquery.flot.js"/>
                <resource name="jquery.flot.crosshair.js"/>
                <resource name="jquery.flot.fillbetween.js"/>
                <resource name="jquery.flot.image.js"/>
                <resource name="jquery.flot.navigate.js"/>
                <resource name="jquery.flot.resize.js"/>
                <resource name="jquery.flot.selection.js"/>
                <resource name="jquery.flot.stack.js"/>
                <resource name="jquery.flot.symbol.js"/>
                <resource name="jquery.flot.threshold.js"/>
            </by-organisation>
        </with-license>
        <with-license id='MIT'>
            <copyright-notice>
Created by Brian Medendorp, June 2009
Updated November 2009 with contributions from: btburnett3, Anthony Aragues and Xavi Ivars
            </copyright-notice>
            <by-organisation id='person:brian.medendorp'>
                <resource name="jquery.pie.js"/>
            </by-organisation>
        </with-license>
        <with-license id='MIT'>
            <copyright-notice />
            <by-organisation id='person:ole.laursen'>
                <resource name="jquery.colorhelpers.js" notice='jquery.colorhelpers.notice' />
            </by-organisation>
        </with-license>
    </within>
    <within dir='ui/lib/jquery-ui'>
        <with-license id='MIT'>
            <copyright-notice />
            <by-organisation id='jqueryui.com'>
                <resource name="css/jquery-ui.css" />
                <resource name="js/jquery-ui.js" />
                <resource name="index.html" />
            </by-organisation>
        </with-license>
    </within>
    <within dir='ui/lib/qunit'>
        <with-license id='MIT'>
            <copyright-notice>
Copyright (c) 2012 John Resig, Jörn Zaefferer
            </copyright-notice>
            <by-organisation id='person:jorn.zaefferer'>
                <resource name="qunit.css" source='http://docs.jquery.com/QUnit' />
                <resource name="qunit.js" source='http://docs.jquery.com/QUnit' />
            </by-organisation>
        </with-license>
    </within>
    <within dir='utils/src/com/cloud/utils/db'>
        <with-license id='ApacheLicenseVersion2'>
            <copyright-notice>
Copyright (c) 2004 Clinton Begin
            </copyright-notice>
            <by-organisation id="person:Clinton.Begin">
`                <resource name="ScriptRunner.java" source="http://code.google.com/p/mybatis/" />
            </by-organisation>
        </with-license>
    </within>
    <within dir='scripts/storage/secondary'>
    	<with-license id='ApacheLicenseVersion2'>
    		<copyright-notice>
Copyright (c) 2010-2011 OpenStack, LLC.
			</copyright-notice>
			<by-organisation id='openstack.org'>
				<resource name='swift' />
			</by-organisation>
		</with-license>
	</within>
    <within dir='scripts/vm/hypervisor/xenserver'>
    	<with-license id='ApacheLicenseVersion2'>
    		<copyright-notice>
Copyright (c) 2010-2011 OpenStack, LLC.
			</copyright-notice>
			<by-organisation id='openstack.org'>
				<resource name='swift' />
			</by-organisation>
		</with-license>
	</within>

<!-- Resources below this line are binary dependencies that are only pulled in during the build process.  -->

    <within dir='target/jar'>
        <with-license id='MIT'>
            <copyright-notice>
Copyright (C) 2008      Tóth István &lt;stoty@tvnet.hu&gt;
              2008-2012 Daniel Veillard &lt;veillard@redhat.com&gt;
              2009-2011 Bryan Kearney &lt;bkearney@redhat.com&gt;
            </copyright-notice>
            <by-organisation id='libvirt.org'>
                <resource name='libvirt-java-0.5.1' />
            </by-organisation>
        </with-license>
        <with-license id="ApacheLicenseVersion2">
            <copyright-notice>
Copyright (c) 2012 The Apache Software Foundation
            </copyright-notice>
            <by-organisation id="apache.org.2">
                <resource name="cloud-axis.jar" source="http://axis.apache.org/axis/" notice='axis2.notice'/>
                <resource name="cloud-commons-codec-1.5.jar" source="http://commons.apache.org/codec/" notice="codec" />
                <resource name="cloud-commons-collections-3.2.2.jar" source="http://commons.apache.org/collections/"/>
                <resource name="cloud-commons-configuration-1.8.jar" source="http://commons.apache.org/configuration/"/>
                <resource name="cloud-commons-dbcp-1.4.jar" source="http://commons.apache.org/dbcp/" />
                <resource name="cloud-commons-httpclient-3.1.jar" source="http://hc.apache.org/httpclient-3.x/" />
                <resource name="cloud-commons-lang-2.6.jar" source="http://commons.apache.org/lang/" />
                <resource name="cloud-commons-logging-1.1.1.jar" source="http://commons.apache.org/logging/" notice="logging" />
                <resource name="cloud-commons-pool-1.5.6.jar" source="http://commons.apache.org/pool/" />
                <resource name="cloud-log4j.jar" source="http://logging.apache.org/log4j/" />
                <resource name="cloud-log4j-extras.jar" source="http://logging.apache.org/log4j/companions/extras/" />
                <resource name="cloud-ws-commons-util-1.0.2.jar" source="http://ws.apache.org/commons/util/" />
                <resource name="cloud-xmlrpc-client-3.1.3.jar" source="http://ws.apache.org/xmlrpc/client.html" />
                <resource name="cloud-xmlrpc-common-3.1.3.jar" source="http://ws.apache.org/xmlrpc/xmlrpc-common/" />
                <resource name="cloud-cglib.jar" source='http://cglib.sourceforge.net/' />
            </by-organisation>
        </with-license>
        <with-license id="ApacheLicenseVersion1.1">
            <copyright-notice>
Copyright (c) 2012 The Apache Software Foundation
            </copyright-notice>
            <by-organisation id="apache.org.2">
                <resource name="cloud-commons-discovery.jar" source="http://commons.apache.org/discovery/" />
            </by-organisation>
        </with-license>
        <with-license id="ApacheLicenseVersion2">
            <copyright-notice>
Copyright (c) 2007-2010, The JASYPT team (http://www.jasypt.org)
            </copyright-notice>
            <by-organisation id='jasypt.org'>
                <resource name='cloud-jasypt-1.9.jar' source='http://www.jasypt.org' notice='jasypt.notice' />
            </by-organisation>
        </with-license>
        <with-license id="ApacheLicenseVersion2">
            <copyright-notice>
Copyright (c) 2003-2007 Luck Consulting Pty Ltd
            </copyright-notice>
            <by-organisation id="luck">
                <resource name="cloud-ehcache.jar" source="http://ehcache.org/" />
            </by-organisation>
        </with-license>
        <with-license id='CDDL'>
            <copyright-notice>
Copyright (c) 2006 Sun Microsystems, Inc. All rights reserved.
            </copyright-notice>
        </with-license>
        <with-license id='CDDL'>
            <copyright-notice>
Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
            </copyright-notice>
            <by-organisation id='oracle.com'>
                <resource name='cloud-email.jar' source='http://kenai.com/projects/javamail' notice='cddlnotice' />
            </by-organisation>
        </with-license>
        <with-license id='ApacheLicenseVersion2'>
            <copyright-notice>
Copyright (c) 2009 Google Inc.
            </copyright-notice>
            <by-organisation id='google.com'>
                <resource name='cloud-google-gson-1.7.1.jar' source='http://code.google.com/p/google-gson/' />
            </by-organisation>
        </with-license>
        <with-license id='EclipseDistributionLicense1'>
            <copyright-notice>
Copyright (c) 2012 The Eclipse Foundation.
            </copyright-notice>
            <by-organisation id='eclipse.org'>
                <resource name='cloud-javax.persistence-2.0.0.jar' source='http://wiki.eclipse.org/EclipseLink/Release/2.0.0' notice='eclipse.persistence' />
            </by-organisation>
        </with-license>
        <with-license id='BSD3ClauseGeneric'>
            <copyright-notice>
Copyright (c) 2009, Caringo, Inc.
            </copyright-notice>
            <by-organisation id='caringo.com'>
                <resource name='CAStorSDK.jar' source='http://www.castor.org/download.html' />
            </by-organisation>
        </with-license>
        <with-license id='BSD3ClauseGeneric'>
            <copyright-notice>
Copyright (c) 2002-2011 Atsuhiko Yamanaka, JCraft,Inc.
            </copyright-notice>
            <by-organisation id='jcraft.com'>
                <resource name='cloud-jsch-0.1.42.jar' source='http://www.jcraft.com/jsch/' />
            </by-organisation>
        </with-license>
        <with-license id='CPL1'>
            <copyright-notice>
Copyright (c) IBM Corp 2006 
            </copyright-notice>
            <by-organisation id='ibm.com'>
                <resource name='cloud-wsdl4j-1.6.2.jar' source='http://sourceforge.net/projects/wsdl4j/' />
                <resource name='cloud-wsdl4j.jar' source='http://sourceforge.net/projects/wsdl4j/' />
            </by-organisation>
        </with-license>
        <with-license id='xstream.bsd'>
            <copyright-notice />
            <by-organisation id='xstream.codehaus.com'>
                <resource name='cloud-xstream-1.3.1.jar' source='http://xstream.codehaus.org/repository.html' />
            </by-organisation>
        </with-license>
        <with-license id='bouncy.mit'>
            <copyright-notice />
            <by-organisation id='bouncy.castle'>
                <resource name='cloud-bcprov-jdk16-1.45.jar' source='http://repo1.maven.org/maven2/org/bouncycastle/bcprov-jdk16/1.45/bcprov-jdk16-1.45-sources.jar' />
            </by-organisation>
        </with-license>
        <with-license id='BSD3ClauseGeneric'>
            <copyright-notice>
Copyright (c) 2007-2008 Trilead AG (http://www.trilead.com)
All rights reserved.
            </copyright-notice>
            <by-organisation id='trilead.com'>
                <resource name='cloud-trilead-ssh2-build213.jar' source='http://sourceforge.net/projects/orion-ssh2/' notice='trilead.notice' />
            </by-organisation>
        </with-license>
        <with-license id='ApacheLicenseVersion2'>
            <copyright-notice />
            <by-organisation id='jetty.codehaus.com'>
                <resource name='jetty-6.1.26.jar' source='http://repo1.maven.org/maven2/org/mortbay/jetty/jetty/6.1.26/jetty-6.1.26-sources.jar' />
                <resource name='jetty-util-6.1.26.jar' source='http://repo1.maven.org/maven2/org/mortbay/jetty/jetty-util/6.1.26/jetty-util-6.1.26-sources.jar' />
            </by-organisation>
        </with-license>
        <with-license id='CPL1'>
            <copyright-notice />
            <by-organisation id='junit.org'>
                <resource name='cloud-junit.jar' source='http://kentbeck.github.com/junit/' />
            </by-organisation>
        </with-license>
        <public-domain>
            <by-organisation id='distcomplab.emory'>
                <resource name='cloud-backport-util-concurrent-3.0.jar' source='http://backport-jsr166.sourceforge.net/' />
            </by-organisation>
        </public-domain>
        <with-license id='ApacheLicenseVersion2'>
            <copyright-notice>
Copyright 2013 Jan Van Besien
            </copyright-notice>
            <by-organisation id='person:janvanbesien'>
                <resource name='java-ipv6.jar' source='http://code.google.com/p/java-ipv6' notice='java-ipv6.notice' />
            </by-organisation>
        </with-license>
        <with-license id='ApacheLicenseVersion2'>
        	<copyright-notice>
Copyright 2002-2012 the original author or authors.
        	</copyright-notice>
        	<by-organisation id='springsource.com'>
        		<resource name='spring-core-3.1.2.RELEASE.jar' source='https://github.com/SpringSource/spring-framework' />
        		<resource name='spring-context-3.1.2.RELEASE.jar' source='https://github.com/SpringSource/spring-framework' />
        		<resource name='spring-web-3.1.2.RELEASE.jar' source='https://github.com/SpringSource/spring-framework' />
            </by-organisation>
        </with-license>
        <with-license id='BSD2ClauseGeneric'>
        	<copyright-notice>
Copyright (c) 2007, The OWASP Foundation
All rights reserved.
        	</copyright-notice>
        	<by-organisation id='owasp.org'>
        		<resource name='esapi-2.0.1.jar' source='http://code.google.com/p/owasp-esapi-java/' />
        	</by-organisation>
        </with-license>
    </within>
    <within dir='deps/awsapi-lib'>
        <with-license id='ApacheLicenseVersion2'>
            <copyright-notice>
Copyright (c) 2004-2008 The Apache Software Foundation
            </copyright-notice>
            <by-organisation id='apache.org.2'>
                <resource name='XmlSchema-1.4.3.jar' notice='xmlschema.notice' />
            </by-organisation>
        </with-license>
        <with-license id='antlr2'>
            <copyright-notice />
            <by-organisation id='antlr2.org'>
                <resource name='antlr-2.7.6.jar' source='http://repo1.maven.org/maven2/antlr/antlr/2.7.6/antlr-2.7.6-sources.jar' />
            </by-organisation>
        </with-license>
        <with-license id='MIT'>
            <copyright-notice>
Copyright (c) 2004-2011 QOS.ch
            </copyright-notice>
            <by-organisation id='qos.ch'>
                <resource name='slf4j-api-1.5.11.jar' source='https://github.com/qos-ch/slf4j' />
                <resource name='slf4j-jdk14-1.5.11.jar' source='https://github.com/qos-ch/slf4j' />
            </by-organisation>
        </with-license>
        <with-license id="ApacheLicenseVersion2">
            <copyright-notice>
Copyright (c) 2004-2012 The Apache Software Foundation
            </copyright-notice>
            <by-organisation id="apache.org.2">
                <resource name="apache-log4j-extras-1.0.jar" source="http://logging.apache.org/log4j/companions/extras/" />
                <resource name="axiom-api-1.2.8.jar" source="http://ws.apache.org/axiom/source-repository.html" notice="axiom.notice" />
                <resource name="axiom-impl-1.2.8.jar" source="http://ws.apache.org/axiom/source-repository.html" notice="axiom.notice" />
                <resource name="axis2-1.5.1.jar" source="http://axis.apache.org/axis/" notice='axis2.notice' />
                <resource name="axis2-codegen-1.4.1.jar" source="http://axis.apache.org/axis/" notice='axis2.notice' />
                <resource name="axis2-adb-1.5.1.jar" source="http://axis.apache.org/axis/" notice='axis2.notice' />
                <resource name="axis2-ant-plugin-1.5.1.jar" source="http://axis.apache.org/axis/" notice='axis2.notice' />
                <resource name="axis2-jaxbri-1.5.1.jar" source="http://axis.apache.org/axis/" notice='axis2.notice' />
                <resource name="axis2-jaxws-1.5.1.jar" source="http://axis.apache.org/axis/" notice='axis2.notice' />
                <resource name="axis2-jibx-1.5.1.jar" source="http://axis.apache.org/axis/" notice='axis2.notice' />
                <resource name="axis2-json-1.5.1.jar" source="http://axis.apache.org/axis/" notice='axis2.notice' />
                <resource name="axis2-kernel-1.5.1.jar" source="http://axis.apache.org/axis/" notice='axis2.notice' />
                <resource name="axis2-transport-http-1.5.1.jar" source="http://axis.apache.org/axis/" notice='axis2.notice' />
                <resource name="axis2-transport-local-1.5.1.jar" source="http://axis.apache.org/axis/" notice='axis2.notice' />
                <resource name="axis2-webapp-1.5.1.war" source="http://axis.apache.org/axis/" notice='axis2.notice' />
                <resource name="commons-codec-1.4.jar" source="http://commons.apache.org/codec/" notice="codec" />
                <resource name="commons-collections-3.1.jar" source="http://commons.apache.org/collections/"/>
                <resource name='commons-fileupload-1.2.jar' source='http://commons.apache.org/fileupload/' />
                <resource name="commons-httpclient-3.1.jar" source="http://hc.apache.org/httpclient-3.x/" />
                <resource name='commons-io-1.4.jar' source='http://commons.apache.org/io/' />
                <resource name="commons-logging-1.1.1.jar" source="http://commons.apache.org/logging/" notice="logging" />
                <resource name="httpcore-4.0.jar" source="http://hc.apache.org/httpcomponents-core-ga/" />
                <resource name="log4j-1.2.15.jar" source="http://logging.apache.org/log4j/" />
                <resource name="neethi-2.0.4.jar" source="http://svn.apache.org/viewvc/webservices/commons/tags/neethi/2.0.4/" notice='neethi.notice' />
                <resource name="rampart-lib" source="http://axis.apache.org/axis2/java/rampart/download/1.5/download.cgi" notice='rampart.notice' />
                <resource name="woden-api-1.0M8.jar" source='http://svn.apache.org/viewvc/webservices/woden/tags/1.0M8_20080423/' notice='woden.notice' />
                <resource name="woden-impl-dom-1.0M8.jar" source='http://svn.apache.org/viewvc/webservices/woden/tags/1.0M8_20080423/' notice='woden.notice' />
                <resource name='xercesImpl.jar' source='http://xerces.apache.org/xerces2-j/source-repository.html' notice='xerces.notice' />
                <resource name='xml-apis.jar' source='http://repo1.maven.org/maven2/xml-apis/xml-apis/1.3.04/xml-apis-1.3.04-sources.jar' notice='xml-apis.notice' />
                <resource name='wss4j-1.5.8.jar' source='http://ws.apache.org/wss4j/source-repository.html' notice='wss4j.notice' />
            </by-organisation>
        </with-license>
        <with-license id='ApacheLicenseVersion2'>
            <copyright-notice>
Copyright (c) 2009 Google Inc.
            </copyright-notice>
            <by-organisation id='google.com'>
                <resource name='cloud-gson.jar' source='http://code.google.com/p/google-gson/' />
            </by-organisation>
        </with-license>
        <with-license id='dom4j.license'>
            <copyright-notice />
            <by-organisation id='dom4j.sourceforge.net'>
                <!-- TODO: Need to have a review of this license! -->
                <resource name='dom4j-1.6.1.jar' source='http://dom4j.sourceforge.net/source-repository.html' />
            </by-organisation>
        </with-license>
        <with-license id='CDDL'>
            <copyright-notice>
Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
            </copyright-notice>
            <by-organisation id='oracle.com'>
                <resource name='jaxb-api-2.1.jar' source='http://repo1.maven.org/maven2/javax/xml/bind/jaxb-api/2.1/jaxb-api-2.1-sources.jar' notice='cddlnotice' />
                <resource name='jaxb-impl-2.1.7.jar' source='http://repo1.maven.org/maven2/com/sun/xml/bind/jaxb-impl/2.1.7/jaxb-impl-2.1.7-sources.jar' notice='cddlnotice' />
                <resource name='jaxb-xjc-2.1.7.jar' source='http://repo1.maven.org/maven2/com/sun/xml/bind/jaxb-xjc/2.1.7/jaxb-xjc-2.1.7-sources.jar' notice='cddlnotice' />
            </by-organisation>
        </with-license>
        <with-license id='CDDL'>
            <copyright-notice>
Copyright (c) 2006 Sun Microsystems, Inc. All rights reserved.
            </copyright-notice>
            <by-organisation id='glassfish.org'>
                <resource name='jta-1.1.jar' source='http://repo1.maven.org/maven2/javax/transaction/jta/1.1/jta-1.1-sources.jar' notice='cddlnotice' />
            </by-organisation>
        </with-license>
        <with-license id='BSD3ClauseGeneric'>
            <copyright-notice>
Copyright (c) 2002-2011 Atsuhiko Yamanaka, JCraft,Inc.
            </copyright-notice>
            <by-organisation id='jcraft.com'>
                <resource name='jsch-0.1.42.jar' source='http://www.jcraft.com/jsch/' />
            </by-organisation>
        </with-license>
        <with-license id='ApacheLicenseVersion2'>
            <copyright-notice />
            <by-organisation id='json-simple'>
                <resource name='json_simple-1.1.jar' source='http://code.google.com/p/json-simple/source/checkout' />
            </by-organisation>
        </with-license>
        <with-license id='CDDL'>
            <copyright-notice>
Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
            </copyright-notice>
            <by-organisation id='oracle.com'>
                <resource name='mail-1.4.jar' source='http://kenai.com/projects/javamail' notice='cddlnotice' />
            </by-organisation>
        </with-license>
        <with-license id='CPL1'>
            <copyright-notice />
            <by-organisation id='junit.org'>
                <resource name='junit-4.8.1.jar' source='http://kentbeck.github.com/junit/' />
            </by-organisation>
        </with-license>
        <with-license id='MPL1'>
            <copyright-notice />
            <license-parameters>
                <parameter><name>PROJECT</name><value>Javassist</value></parameter>
                <parameter><name>INITIAL_DEVELOPER</name><value>Shigeru Chiba</value></parameter>
                <parameter><name>INITIAL_DEVELOPER_COPYRIGHT</name><value>1999-2008 Shigeru Chiba</value></parameter>
                <parameter><name>CONTRIBUTORS</name><value></value></parameter>
                <parameter><name>ALT_LIC_NAME</name><value>GNU Lesser General Public License Version 2.1 or later</value></parameter>
                <parameter><name>ALT_LIC_SHORT</name><value>LGPL</value></parameter>
               </license-parameters>
               <by-organisation id='person:shigeru.chiba'>
                   <resource name='javassist-3.9.0.GA.jar' source='http://sourceforge.net/projects/jboss/files/Javassist/' />
               </by-organisation>
        </with-license>
        <with-license id='MPL1'>
            <copyright-notice>Copyright (c) 2007-2012 VMware, Inc.  All Rights Reserved.</copyright-notice>
            <license-parameters>
                <parameter><name>PROJECT</name><value>RabbitMQ</value></parameter>
                <parameter><name>INITIAL_DEVELOPER</name><value>VMware, Ltd.</value></parameter>
                <parameter><name>INITIAL_DEVELOPER_COPYRIGHT</name><value>2007-2012 VMware, Inc.</value></parameter>
                <parameter><name>CONTRIBUTORS</name><value></value></parameter>
                <parameter><name>ALT_LIC_NAME</name><value>GNU General Public License Version 2</value></parameter>
                <parameter><name>ALT_LIC_SHORT</name><value>GPL</value></parameter>
               </license-parameters>
               <by-organisation id='vmware.com'>
                   <resource name='rabbitmq-client.jar' source='http://www.rabbitmq.com/java-client.html' />
               </by-organisation>
        </with-license>
    </within>
    <within dir='utils/src/org/apache/commons/httpclient/contrib/ssl'>
        <with-license id='ApacheLicenseVersion2'>
            <copyright-notice>
Copyright (c) 2007 The Apache Software Foundation
            </copyright-notice>
            <by-organisation id="apache.org.2">
                <resource name="EasySSLProtocolSocketFactory.java" />
                <resource name="EasyX509TrustManager.java" />
            </by-organisation>
        </with-license>
    </within>
</manifest>
