<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
<html>
<head>
<title>About</title>
<meta http-equiv=Content-Type content="text/html; charset=ISO-8859-1">
</head>
<body lang="EN-US">
<h2>About Eclipse LDAP Browser and Editor</h2>

<h3>Copyright</h3>

<p>Copyright (c) 2006 Apache Software Foundation. All rights reserved.</p>

<h3>License</h3>

<p>Eclipse LDAP Browser and Editor is provided to you under the terms and conditions of the
Apache License Version 2.0. A copy of the Apache Licence can be found in <a href="about_files/licence.txt">about_files/license.txt</a>
and is also available at <a href="http://www.apache.org/licenses/LICENSE-2.0.html</a>.</p>

<h3>Third Party Content</h3>

<p>The Content includes items that have been sourced from third parties as follows:</p>

<h4>Eclipse</h4>

<p>The plug-in is accompanied by software developed by the Eclipse Foundation at
<a href="http://www.eclipse.org/">http://www.eclipse.org/</a>.
Parts of Eclipse code, icons and documents are included with the plug-in.
Your use of Eclipse is subject to the terms and conditions of the Eclipse Public License Version 1.0 (&quot;EPL&quot;).
A copy of the EPL can be found in <a href="about_files/epl-v10.txt">about_files/epl-v10.txt</a>
and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
The source code for Eclipse is available at <a href="http://www.eclipse.org/">http://www.eclipse.org/</a>.</p>

<h4>Commons Codec 1.3</h4>

<p>The plug-in is accompanied by software developed by the Apache Software Foundation at
<a href="http://jakarta.apache.org/commons/codec/">http://jakarta.apache.org/commons/codec/</a>.
The binary code of Commons Codec 1.3 (&quot;Commons Codec&quot;) is included with the plug-in without modification in lib/commons-codec-1.3.jar.
Your use of Commons Codec is subject to the terms and conditions of the Apache License, Version 2.0 (&quot;Apache License&quot;).
A copy of the Apache License can be found in <a href="about_files/asl-v20.txt">about_files/asl-v20.txt</a>
and is also available at <a href="http://www.apache.org/licenses/LICENSE-2.0.html">http://www.apache.org/licenses/LICENSE-2.0.html</a>.
The source code for Commons Codec is available at <a href="http://jakarta.apache.org/commons/codec/">http://jakarta.apache.org/commons/codec/</a>.</p>

<h4>Jakarta POI 2.5.1-final-20040804</h4>

<p>The plug-in is accompanied by software developed by the Apache Software Foundation at
<a href="http://jakarta.apache.org/poi/">http://jakarta.apache.org/poi/</a>.
The binary code of Jakarta POI 2.5.1-final-20040804 (&quot;POI&quot;) is included with the plug-in without modification in lib/poi-2.5.1-final-20040804.jar.
Your use of POI is subject to the terms and conditions of the Apache License, Version 1.1 (&quot;Apache License&quot;).
A copy of the Apache License can be found in <a href="about_files/asl-v11.txt">about_files/asl-v11.txt</a>
and is also available at <a href="http://www.apache.org/licenses/LICENSE-1.1">http://www.apache.org/licenses/LICENSE-1.1</a>.
The source code for POI is available at <a href="http://jakarta.apache.org/poi/">http://jakarta.apache.org/poi/</a>.</p>

<h4>ANTLR 2.7.5</h4>

<p>The plug-in is accompanied by software developed by Terence Parr at
<a href="http://www.antlr.org/">http://www.antlr.org/</a>.
The binary code of ANTLR 2.7.5 (&quot;ANTLR&quot;) is included with the plug-in without modification in lib/antlr-2.7.5.jar.
Your use of ANTLR is subject to the terms and conditions of the ANTLR License (&quot;ANTLR License&quot;).
A copy of the ANTLR License can be found in <a href="about_files/antlr.txt">about_files/antlr.txt</a>
and is also available at <a href="http://www.antlr.org/license.html">http://www.antlr.org/license.html</a>.
The source code for ANTLR is available at <a href="http://www.antlr.org/">http://www.antlr.org/</a>.</p>

<h4>OpenLDAP</h4>

<p>The plug-in is accompanied by software developed by the OpenLDAP Foundation at
<a href="http://www.openldap.org/">http://www.openldap.org/</a>.
Parts of OpenLDAP (Schema files) are included with the plug-in.
Your use of OpenLDAP is subject to the terms and conditions of the OpenLDAP Public License, Version 2.8 (&quot;OpenLDAP Public License&quot;).
A copy of the OpenLDAP Public License can be found in <a href="about_files/openldap.txt">about_files/openldap.txt</a>
and is also available at <a href="http://www.OpenLDAP.org/license.html">http://www.OpenLDAP.org/license.html</a>.
The source code for OpenLDAP is available at <a href="http://www.openldap.org/">http://www.openldap.org/</a>.</p>


</body>
</html>