<?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.3.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/DECORATION/1.3.0 http://maven.apache.org/xsd/decoration-1.3.0.xsd">
<skin>
    <groupId>org.apache.maven.skins</groupId>
    <artifactId>maven-fluido-skin</artifactId>
    <version>1.3.1</version>
  </skin>

<bannerLeft>
    <name>Ranger Logo</name>
    <src>/logo/rangerlogo.png</src>
    <height>200px</height>
    <width>400px</width>
    <href></href>
</bannerLeft>

<body>
    <menu name="Overview">
      <item name="Introduction" href="index.html"/>
      <item name="News" href="https://cwiki.apache.org/confluence/display/RANGER/News" />
      <item name="Download" href="download.html"/>
      <item name="FAQ" href="faq.html"/>
    </menu>
    <menu name="Resources">
	  <item name="Wiki" href="https://cwiki.apache.org/confluence/display/RANGER/Index" />
      <item name="Quick Start Guide" href="quick_start_guide.html"/>
      <item name="Ranger REST API Documentation" href="apidocs/index.html"/>
      <item name="Ranger KMS REST API Documentation" href="kms/apidocs/index.html"/>
      <!-- According to http://jira.codehaus.org/browse/MNGSITE-152 -->
      <item name="License" href="http://www.apache.org/licenses/"/>
    </menu>
    <menu name="Project Information">
        <item name="Project Summary" href="project-summary.html"/>
        <item name="Mailing Lists" href="mail-lists.html"/>
        <item name="Issue Tracking" href="https://issues.apache.org/jira/browse/RANGER"/>
        <item name="Team" href="team-list.html"/>
    </menu>
	<menu name="Releases">
		<item name="0.4.0" href="https://cwiki.apache.org/confluence/display/RANGER/Apache+Ranger+0.4.0+Release+Notes" />
		<item name="0.5.0" href="https://cwiki.apache.org/confluence/display/RANGER/Apache+Ranger+0.5.0+-+Release+Notes" />
		<item name="0.5.1" href="https://cwiki.apache.org/confluence/display/RANGER/Apache+Ranger+0.5.1+-+Release+Notes" />
		<item name="0.5.2" href="https://cwiki.apache.org/confluence/display/RANGER/Apache+Ranger+0.5.2+-+Release+Notes" />
		<item name="0.5.3" href="https://cwiki.apache.org/confluence/display/RANGER/Apache+Ranger+0.5.3+-+Release+Notes" />
		<item name="0.6.0" href="https://cwiki.apache.org/confluence/display/RANGER/Apache+Ranger+0.6.0+-+Release+Notes" />
		<item name="0.6.1" href="https://cwiki.apache.org/confluence/display/RANGER/Apache+Ranger+0.6.1+-+Release+Notes" />
		<item name="0.6.2" href="https://cwiki.apache.org/confluence/display/RANGER/Apache+Ranger+0.6.2+-+Release+Notes" />
		<item name="0.6.3" href="https://cwiki.apache.org/confluence/display/RANGER/Apache+Ranger+0.6.3+-+Release+Notes" />
	</menu>
</body>

<poweredBy>
    <logo name="Maven" href="http://maven.apache.org/"img="http://maven.apache.org/images/logos/maven-feather.png"/>
</poweredBy>
<custom>
    <fluidoSkin>
        <sideBarEnabled>true</sideBarEnabled>
        <sourceLineNumbersEnabled>true</sourceLineNumbersEnabled>
		<!--
        <twitter>
            <user>Ranger4Hadoop</user>
            <showUser>true</showUser>
            <showFollowers>true</showFollowers>
        </twitter>
		-->
        <facebookLike />
        <skipGenerationDate>true</skipGenerationDate>
    </fluidoSkin>
</custom>
</project>
