<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<!--
   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>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
    <meta name="description" lang="en" content="Apache Click Java web application framework"/>
    <meta name="keywords" lang="en" content="Apache Click, Click Framework, Java, JEE, J2EE, web application framework, open source"/>
    <title>Apache Click</title>
    <link rel="stylesheet" type="text/css" href="../help.css"/>
    <style type="text/css">
        .change {
            margin-bottom: 0.75em;
        }
    </style>
</head>
<body>

<h1>Thanks</h1>

<h3>Sponsors</h3>

<ul>
  <li>
    <a class="external" target="_blank" href='http://www.apache.org/foundation/thanks.html' title=' Apache Sponsors'>
        Apache Sponsors</a>
  </li>

  <li>
    <a class="external" target="_blank" href='http://www.apache.org/foundation/sponsorship.html' title=' Sponsorship Program'>
        Apache Sponsorship Program</a>
  </li>

</ul>

<h3 style="margin-top: 1.5em">Supporting software attribution</h3>

Developers use various tools to assist with their work, such as or
<a class="external" target="_blank" rel="nofollow" href="http://www.eclipse.org/">Eclipse</a>
or <a class="external" target="_blank" rel="nofollow" href="http://www.netbeans.org/">Netbeans</a>.

<p/>

Most tools do not require attribution, but some do
(<a class="external" target="_blank" rel="nofollow" href="http://www.yourkit.com/">YourKit Java Profiler</a>).
