<?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.
-->

<project xmlns="http://maven.apache.org/DECORATION/1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/DECORATION/1.1.0 http://maven.apache.org/xsd/decoration-1.1.0.xsd">
  <bannerLeft>
    <name>${project.name}</name>
    <src>http://maven.apache.org/images/apache-maven-project-2.png</src>
    <href>http://maven.apache.org/</href>
  </bannerLeft>
  <bannerRight>
    <src>http://maven.apache.org/images/maven-logo-2.gif</src>
  </bannerRight>

  <skin>
    <groupId>org.apache.maven.skins</groupId>
    <artifactId>maven-stylus-skin</artifactId>
    <version>1.5</version>
  </skin>

  <publishDate format="yyyy-MM-dd" position="right" />
  <version position="right" />

  <body>
    <head>
      <script src="http://www.google-analytics.com/urchin.js" type="text/javascript">
      </script>
      <script type="text/javascript">
        _uacct = "UA-140879-1";
        urchinTracker();
      </script>
    </head>

    <breadcrumbs>
      <item name="Apache" href="http://www.apache.org/" />
      <item name="Maven"  href="http://maven.apache.org/index.html" />
      <item name="Parent POMs" href="http://maven.apache.org/pom/index.html" />
      <item name="ASF"    href="http://maven.apache.org/pom/asf/index.html" />
    </breadcrumbs>

    <menu name="Overview">
      <item name="Introduction" href="index.html"/>
      <!-- According to http://jira.codehaus.org/browse/MNGSITE-152 -->
      <item name="License" href="http://www.apache.org/licenses/"/>
      <item name="Download" href="download.html"/>
    </menu>

    <menu ref="reports" inherit="bottom" />

    <!-- Copied from Maven parent's site.xml -->
    <menu name="Maven Projects" inherit="bottom">
      <item name="Ant Tasks"         href="http://maven.apache.org/ant-tasks/index.html" />
      <item name="Archetype"         href="http://maven.apache.org/archetype/index.html" />
      <item name="Doxia"             href="http://maven.apache.org/doxia/index.html" />
      <item name="JXR"               href="http://maven.apache.org/jxr/index.html" />
      <item name="Maven 1.x"         href="http://maven.apache.org/maven-1.x/index.html" />
      <item name="Maven 2 &amp; 3"   href="http://maven.apache.org/index.html" />
      <item name="Parent POMs"       href="http://maven.apache.org/pom/index.html" />
      <item name="Plugins"           href="http://maven.apache.org/plugins/index.html" />
      <item name="Plugin Tools"      href="http://maven.apache.org/plugin-tools/index.html" />
      <item name="SCM"               href="http://maven.apache.org/scm/index.html" />
      <item name="Shared Components" href="http://maven.apache.org/shared/index.html" />
      <item name="Skins"             href="http://maven.apache.org/skins/index.html" />
      <item name="Surefire"          href="http://maven.apache.org/surefire/index.html" />
      <item name="Wagon"             href="http://maven.apache.org/wagon/index.html" />
    </menu>
    <menu name="ASF" inherit="bottom">
      <item name="How Apache Works" href="http://www.apache.org/foundation/how-it-works.html"/> 
      <item name="Foundation" href="http://www.apache.org/foundation/"/>
      <item name="Sponsoring Apache" href="http://www.apache.org/foundation/sponsorship.html"/>
      <item name="Thanks" href="http://www.apache.org/foundation/thanks.html"/>
    </menu>

  </body>
</project>