<!DOCTYPE html>
## 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.
##
#parse( "default-site-macros.vm" )
<!-- Generated by #generatedBy()
#if( $docRenderingContext.generator || $docRenderingContext.doxiaSource ) from##
#if( $docRenderingContext.generator ) $docRenderingContext.generator#end##
#if( $docRenderingContext.doxiaSource ) $docRenderingContext.doxiaSourcePath#end##
#end
 at $dateFormat.format( $currentDate ) -->
<html xmlns="http://www.w3.org/1999/xhtml"#if ( $locale ) xml:lang="$locale.language" lang="$locale.language"#end>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=${outputEncoding}" />
    <title>$title</title>
    <style type="text/css" media="all">
      @import url("$relativePath/css/maven-base.css");
      @import url("$relativePath/css/maven-theme.css");
      @import url("$relativePath/css/site.css");
    </style>
    <link rel="stylesheet" href="$relativePath/css/print.css" type="text/css" media="print" />
    <meta name="generator" content="#generatedBy()" />
#foreach( $author in $authors )
      <meta name="author" content="$author" />
#end
#if ( $documentDate )
    <meta name="date" content="$documentDate" />
#end
#if( $decoration.body.head )
#**#$render.eval( $decoration.body.head )
#end
    $headContent
#**##googleAnalytics( $decoration.googleAnalyticsAccountId )
  </head>
  <body class="composite">
    <div id="banner">
#*  *##banner( $decoration.bannerLeft "bannerLeft" )
#*  *##banner( $decoration.bannerRight "bannerRight" )
      <div class="clear">
        <hr/>
      </div>
    </div>
    <div id="breadcrumbs">
#*  *##publishDate( "left" $decoration.publishDate $decoration.version )
      <div class="xright">#links( $decoration.body.links )
#*  *##publishDate( "right" $decoration.publishDate $decoration.version )
      </div>
      <div class="clear">
        <hr/>
      </div>
    </div>
    <div id="leftColumn">
      <div id="navcolumn">
#*   *##publishDate( "navigation-top" $decoration.publishDate $decoration.version )
#*   *##mainMenu( $decoration.body.menus )
#*   *##poweredByLogo( $decoration.poweredBy )
#*   *##publishDate( "navigation-bottom" $decoration.publishDate $decoration.version )
      </div>
    </div>
    <div id="bodyColumn">
      <div id="contentBox">
#*   *#$bodyContent
      </div>
    </div>
    <div class="clear">
      <hr/>
    </div>
    <div id="footer">
      <div class="xright">
#*  *##if( $decoration.body.footer )
        $render.eval( $decoration.body.footer )
#*  *##else
        Copyright &#169;#copyright()All rights reserved.#publishDate( "bottom" $decoration.publishDate $decoration.version )
#*  *##end
      </div>
      <div class="clear">
        <hr/>
      </div>
    </div>
  </body>
</html>
