<!--
    * 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.    
-->
<html>
<head>
<title>About</title>
<meta http-equiv=Content-Type content="text/html; charset=ISO-8859-1">
</head>
<body>
<h2>About Apache Tuscany SCA Eclipse Tools Core Plug-in</h2>

<h3>Copyright</h3>

<p>Copyright (c) 2005 - 2011 The Apache Software Foundation</p>

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

<h3>License</h3>

<p>Apache Tuscany SCA Eclipse Tools Core Plug-in is provided to you under the terms and conditions of the
Apache License Version 2.0. A copy of the Apache Licence is provided in the
<a href="about_files/LICENSE">LICENSE</a> file in this distribution and is also available at
<a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>.
See also the <a href="about_files/NOTICE">NOTICE</a> file in this distribution.</p>

<h3>Third Party Content</h3>

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

<h4>SCA Collaboration</h4>

<p>
This product also includes software under the SCA Collaboration license 
(see the <a href="about_files/LICENSE">LICENSE</a> file in this distribution),
with the following copyright:</p>

<p>(c) Copyright SCA Collaboration 2006, 2007</p>

</body>
</html>
