<?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.7.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/DECORATION/1.7.0 http://maven.apache.org/xsd/decoration-1.7.0.xsd">
  <bannerLeft>
    <name>${project.name}</name>
    <src>http://maven.apache.org/images/apache-maven-project.png</src>
    <href>http://www.apache.org/</href>
  </bannerLeft>

  <bannerRight>
    <src>http://maven.apache.org/images/maven-logo-black-on-white.png</src>
    <href>http://maven.apache.org/</href>
  </bannerRight>

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

  <custom>
    <fluidoSkin>
      <sourceLineNumbersEnabled>true</sourceLineNumbersEnabled>
      <googlePlusOne />
      <googleSearch>
        <sitesearch/>
      </googleSearch>
    </fluidoSkin>
  </custom>

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

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

    <!-- Breadcrumbs that every project will inherit -->
    <breadcrumbs>
      <item name="Apache" href="http://www.apache.org/" />
      <item name="Maven"  href="http://maven.apache.org/index.html" />
    </breadcrumbs>

    <!-- Menus that every project will inherit -->
    <menu ref="reports" inherit="bottom" />

    <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"             href="http://maven.apache.org/ref/current" />
      <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 Testing"    href="http://maven.apache.org/plugin-testing/index.html" />
      <item name="Plugin Tools"      href="http://maven.apache.org/plugin-tools/index.html" />
      <item name="Resource Bundles"  href="http://maven.apache.org/apache-resource-bundles/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>
