<?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.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/DECORATION/1.0.0 http://maven.apache.org/xsd/decoration-1.0.0.xsd"
  name="Maven">
    <bannerLeft>
        <name>Apache Accumulo</name>
        <src>http://www.apache.org/images/asf-logo.gif</src>
        <href>http://accumulo.apache.org/</href>
    </bannerLeft>
  <version position="right" />
  <skin>
    <groupId>org.apache.maven.skins</groupId>
    <artifactId>maven-fluido-skin</artifactId>
    <version>1.1</version>
  </skin>
  <body>
    <breadcrumbs>
      <item name="Accumulo"  href="http://accumulo.apache.org/" />
    </breadcrumbs>
    <menu ref="reports" inherit="top" />
    <menu ref="modules" inherit="top" />
  </body>
</project>