<?xml version="1.0" encoding="ISO-8859-1"?>
<!--
  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 name="Hama">
  <bannerLeft>
    <name>Apache Hama</name>
    <src>/images/headerlogo.png</src>
    <href>/index.html</href>
    <width>340</width>
  </bannerLeft>

  <publishDate position="right"/>
  <version position="right"/>

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

  <custom>
    <fluidoSkin>
      <topBarEnabled>true</topBarEnabled>
      <sideBarEnabled>false</sideBarEnabled>
    </fluidoSkin>
  </custom>

  <body>
  <head>
  <script>
  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');

  ga('create', 'UA-46300992-1', 'apache.org');
  ga('send', 'pageview');
  </script>
  </head>
    <links position="left">
      <item name="Wiki" href="http://wiki.apache.org/hama" />
      <item name="JIRA" href="http://issues.apache.org/jira/browse/HAMA" />
      <item name="Hama Twitter" href="http://twitter.com/apachehama" />
    </links>

    <breadcrumbs position="left">
      <item name="Apache" href="http://www.apache.org/" />
      <item name="Hama" href="http://hama.apache.org/"/>
    </breadcrumbs>

    <menu name="Information">
      <item name="Overview" href="index.html"/>
      <item name="Downloads" href="downloads.html"/>
      <item name="Who We Are" href="team-list.html" />
      <item name="Privacy Policy" href="privacy_policy.html" />
    </menu>

    <menu name="Resources">
      <item name="Developers" href="developers.html" />
      <item name="Mailing Lists" href="mail-lists.html" />
      <item name="Issue Tracking" href="issue-tracking.html" />
      <item name="IRC channel" href="irc-channel.html" />
    </menu>

    <menu name="Documentation">
      <item name="Getting Started" href="getting_started_with_hama.html" />
      <item name="Hama on Clouds" href="hama_on_clouds.html" />
      <item name="Run Examples" href="run_examples.html" />
      <item name="BSP tutorial" href="hama_bsp_tutorial.html" />
      <item name="Graph tutorial" href="hama_graph_tutorial.html" />
      <item name="Presentations" href="http://wiki.apache.org/hama/Presentations" />
      <item name="Research Papers" href="http://wiki.apache.org/hama/Articles" />
      <item name="Books" href="http://wiki.apache.org/hama/Books" />
    </menu>

    <menu name="Related Projects">
      <item name="Hadoop" href="http://hadoop.apache.org/" />
      <item name="Whirr" href="http://whirr.apache.org/" />
      <item name="Bigtop" href="http://incubator.apache.org/bigtop/" />
      <item name="Mahout" href="http://mahout.apache.org/" />
    </menu>
    
    <menu name="Art works">
      <item name="Artwork and Clothing" href="artwork.html" />
    </menu>

    <menu name="ASF">
      <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>
    <footer>
      <div class="row span16">Apache Hama, Apache, the Apache feather logo, and
          the Apache Hama project logos are trademarks of The Apache Software
          Foundation. All other marks mentioned may be trademarks or registered
          trademarks of their respective owners.</div>
    </footer>
  </body>
</project>
