<?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="htrace-core4/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" />
      <item name="Building" href="building.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</slogan>
    </reflowSkin>
 </custom>
    <skin>
      <groupId>lt.velykis.maven.skins</groupId>
      <artifactId>reflow-maven-skin</artifactId>
      <version>1.1.1</version>
    </skin>
</project>
