<?xml version="1.0" encoding="UTF-8"?>
<!--
  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.
-->
<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V2.0//EN"
  "http://forrest.apache.org/dtd/document-v20.dtd">
<document>
  <header>
    <title>Thanks from Apache Forrest</title>
  </header>
  <body>
    <p>
      The Apache Forrest project gives thanks ...
    </p>
    <section id="general">
      <title>General thanks</title>
      <p>
        <a href="http://www.apache.org/foundation/">The Apache Software
        Foundation (ASF)</a> provides an excellent home for our community. See
        also the <a href="http://www.apache.org/foundation/thanks.html">ASF
        thanks page</a> and the <a href="http://www.apache.org/foundation/sponsorship.html">ASF sponsors page</a>.
        Without <em>your</em> support The Apache Software Foundation would not be here for us all.
      </p>
      <p>
        The individual developers who participate via the dev
        <a href="site:mail-lists">mailing list</a>.
      </p>
      <p>
        Our <a href="site:who">committers</a> and Project Management Committee.
      </p>
      <p>
        Our <a href="site:mail-lists">users</a>. See some of their
        <a href="site:live-sites">example sites</a>.
      </p>
    </section>
    <section id="packaged-attribution">
      <title>Packaged software attribution</title>
      <p>
        Various products are packaged with the Apache Forrest distribution.
        These products use a license that is compatible with the Apache License.
        Most products do not require specific attribution, but some do request
        that. See the NOTICE.txt and LICENSE.txt files in the distribution.
      </p>
    </section>
    <section id="supporting-attribution">
      <title>Supporting software attribution</title>
      <p>
        Developers use various tools to assist with their work, such as
        <a href="site:catalog">xml editors</a> and IDEs such as
        <a href="http://www.jetbrains.com/idea/opensource/" rel="nofollow">IntelliJ IDEA</a> or
        <a href="http://www.eclipse.org/" rel="nofollow">Eclipse</a>. Most tools do not require
        attribution, but some do (<a href="http://www.yourkit.com/" rel="nofollow">YourKit Java
        Profiler</a>).
      </p>
    </section>
  </body>
</document>
