<?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">
  <bannerLeft>
    <name>Apache HTrace</name>
    <href>http://htrace.incubator.apache.org/</href>
  </bannerLeft>
  <bannerRight>
    <src>http://htrace.incubator.apache.org/images/owl.png</src>
    <href>http://htrace.incubator.apache.org/</href>
  </bannerRight>
  <body>
    <menu name="Apache HTrace Project">
      <item name="Overview" href="index.html"/>
      <item name="License" href="license.html" />
      <item name="Downloads" href="http://www.apache.org/dyn/closer.cgi/incubator/htrace/" />
      <item name="Distribution" href="dependency-management.html" />
      <item name="Dependency" href="dependency-info.html" />
      <item name="Issue Tracking" href="issue-tracking.html" />
      <item name="CI" href="integration.html" />
      <item name="Mailing Lists" href="mail-lists.html" />
      <item name="Source Repository" href="source-repository.html" />
      <item name="Modules" href="modules.html" />
      <item name="Project Info" href="project-info.html" />
      <item name="Team" href="team-list.html" />
    </menu>
    <menu name="ASF">
        <item name="Apache Software Foundation"      href="http://www.apache.org/foundation/" />
        <item name="How Apache Works"      href="http://www.apache.org/foundation/how-it-works.html" />
        <item name="Sponsoring Apache"      href="http://www.apache.org/foundation/sponsorship.html" />
    </menu>
  </body>
 <custom>
    <reflowSkin>
      <theme>bootswatch-flatly</theme>
      <toc>top</toc>
      <highlightJs>true</highlightJs>
      <slogan position="bannerRight">A tracing framework for use with distributed systems written in java</slogan>
    </reflowSkin>
 </custom>
    <skin>
      <groupId>lt.velykis.maven.skins</groupId>
      <artifactId>reflow-maven-skin</artifactId>
      <version>1.1.1</version>
    </skin>
</project>
