<?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 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 h"
         name="Knox Gateway">
    <!--
    <skin>
        <groupId>org.apache.maven.skins</groupId>
        <artifactId>maven-stylus-skin</artifactId>
        <version>1.5</version>
    </skin>
    <skin>
        <groupId>org.apache.maven.skins</groupId>
        <artifactId>maven-fluido-skin</artifactId>
        <version>1.3.0</version>
    </skin>
    -->
    <!--
    <custom>
        <fluidoSkin>
            <topBarEnabled>false</topBarEnabled>
            <sideBarEnabled>true</sideBarEnabled>
        </fluidoSkin>
    </custom>
    -->
    <bannerLeft>
        <name>Knox Gateway</name>
        <src>http://incubator.apache.org/knox/images/apache-logo.gif</src>
        <href>http://incubator.apache.org/knox</href>
    </bannerLeft>
    <bannerRight>
        <name>Apache Incubator</name>
        <src>http://incubator.apache.org/knox/images/apache-incubator-logo.png</src>
        <href>http://incubator.apache.org</href>
    </bannerRight>

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

    <body>
        <head>
            <script type="text/javascript">
                var _gaq = _gaq || [];
                _gaq.push(['_setAccount', 'UA-27188762-1']);
                _gaq.push(['_trackPageview']);

                (function() {
                var ga = document.createElement('script');
                ga.type = 'text/javascript'; ga.async = true;
                ga.src = ('https:' == document.location.protocol ?
                'https://ssl' : 'http://www') +
                '.google-analytics.com/ga.js';
                var s = document.getElementsByTagName('script')[0];
                s.parentNode.insertBefore(ga, s);
                })();
            </script>
        </head>

        <links>
            <item name="Git" href="https://git-wip-us.apache.org/repos/asf/incubator-knox.git" />
            <item name="Svn" href="https://svn.apache.org/repos/asf/incubator/knox" />
            <item name="Jira" href="https://issues.apache.org/jira/browse/KNOX" />
            <item name="Wiki" href="https://cwiki.apache.org/confluence/display/KNOX/Index" />
        </links>

        <breadcrumbs>
            <item name="Knox" href="index.html"/>
        </breadcrumbs>

        <menu name="Knox">
            <item name="Home" href="index.html"/>
            <item name="News" href="https://cwiki.apache.org/confluence/display/KNOX/News"/>
            <item name="License" href="license.html"/>
        </menu>

        <menu name="Documentation">
            <item name="User's Guide" href="http://knox.incubator.apache.org/books/knox-incubating-0-3-0/knox-incubating-0-3-0.html"/>
            <!-- item name="Getting Started" href="https://cwiki.apache.org/KNOX/getting-started.html"/ -->
            <item name="Getting Started" href="http://knox.incubator.apache.org/books/knox-incubating-0-3-0/knox-incubating-0-3-0.html#Getting+Started"/>
            <!-- item name="Dependencies" href="https://cwiki.apache.org/KNOX/dependencies.html"/ -->
            <item name="Dependencies" href="https://cwiki.apache.org/confluence/display/KNOX/Dependencies"/>
            <!-- item name="Wiki" href="https://cwiki.apache.org/confluence/display/KNOX/Index"/ -->
            <item name="Wiki" href="https://cwiki.apache.org/confluence/display/KNOX/Index"/>
        </menu>

        <menu name="Releases">
            <item name="0.3.0" href="https://cwiki.apache.org/confluence/display/KNOX/Release+0.3.0"/>
            <!-- item name="0.2.0" href="https://cwiki.apache.org/KNOX/release-020.html"/ -->
            <item name="0.2.0" href="https://cwiki.apache.org/confluence/display/KNOX/Release+0.2.0"/>
            <!-- item name="Roadmap" href="https://cwiki.apache.org/KNOX/roadmap.html"/ -->
            <item name="Roadmap" href="https://cwiki.apache.org/confluence/display/KNOX/Roadmap"/>
        </menu>

        <menu name="Processes">
            <!-- item name="Build" href="https://cwiki.apache.org/KNOX/build-process.html"/ -->
            <item name="Build" href="https://cwiki.apache.org/confluence/display/KNOX/Build+Process"/>
            <!-- item name="Release" href="https://cwiki.apache.org/KNOX/release-process.html"/ -->
            <item name="Release" href="https://cwiki.apache.org/confluence/display/KNOX/Release+Process"/>
            <!-- item name="Contribute" href="https://cwiki.apache.org/KNOX/contribution-process.html"/ -->
            <item name="Contribute" href="https://cwiki.apache.org/confluence/display/KNOX/Contribution+Process"/>
            <!-- item name="Site Maintenance" href="https://cwiki.apache.org/KNOX/site-maintenance.html"/ -->
            <item name="Site Maintenance" href="https://cwiki.apache.org/confluence/display/KNOX/Site+Maintenance"/>
        </menu>

        <menu name="Resources">
            <item name="Product Source" href="https://git-wip-us.apache.org/repos/asf/incubator-knox.git"/>
            <item name="Site Source" href="https://svn.apache.org/repos/asf/incubator/knox"/>
            <item name="Project Team" href="team-list.html"/>
            <item name="Mailing Lists" href="mail-lists.html"/>
            <item name="Issue Tracking" href="issue-tracking.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 span12">
                Apache Knox Gateway, Apache, the Apache feather logo and the Apache Knox Gateway project logos
                are trademarks of The Apache Software Foundation.
                All other marks mentioned may be trademarks or registered trademarks of their respective owners.
            </div>
            <div class="row span12">
                <!-- a href="https://cwiki.apache.org/KNOX/privacy-policy.html">Privacy Policy</a -->
                <a href="https://cwiki.apache.org/confluence/display/KNOX/Privacy+Policy">Privacy Policy</a>

            </div>
        </footer>

    </body>
</project>
