<!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.
-->
<html lang="en">
<head>
    <title>{{ .Title }} &mdash; Apache MINA</title>

    <link href="/assets/css/common.css" rel="stylesheet" type="text/css"/>
    <link href="/assets/css/asyncweb.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<script src="https://www.apachecon.com/event-images/snippet.js"></script>
<div id="container">
    {{ partial "header.html" (dict "context" . "project" "asyncweb") }}

    <div id="content">
        <div id="leftColumn">
            <div id="navigation">
                <a class="acevent" data-format="wide" data-width="170"></a>
                <h5>Overview</h5>
                <ul>
                    <li><a href="/asyncweb-project/index.html">Home</a> </li>
                    <!--li><a href="/asyncweb-project/features.html">Features</a> </li-->
                    <li><a href="/asyncweb-project/documentation.html">Documentation</a></li>
                    <!--li><a href="/asyncweb-project/downloads.html">Downloads</a></li-->
                    <li><a href="/asyncweb-project/sources.html">Sources</a></li>
                    <!--li><a href="/asyncweb-project/faq.html">FAQ</a></li-->
                    <!--li><a href="/asyncweb-project/related_project.html">Related Project</a></li-->
                </ul>

                <h5>Community</h5>
                <ul>
                    <!--li><a href="/asyncweb-project/mailing_list.html">Mailing Lists</a></li-->
                    <li><a href="/asyncweb-project/getting_involved.html">Getting Involved</a></li>
                    <li><a href="/asyncweb-project/reporting_bug.html">Reporting a Bug</a></li>
                    <li><a href="/asyncweb-project/contributors.html">Contributors</a></li>
                    <li><a href="https://www.apache.org/foundation/contributing.html">Contributing</a></li>
                    <li><a href="https://www.apache.org/licenses/">License</a></li>
                    <li><a href="https://www.apache.org/security/">Security</a></li>
                </ul>

                <h5>Sponsorship</h5>
                <ul>
                    <li><a href="https://www.apache.org/foundation/thanks.html">Thanks</a></li>
                    <li><a href="https://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>
                    <li><a href="https://www.apache.org/">apache.org</a></li>
                </ul>
            </div><!-- navigation -->
        </div><!-- leftColumn -->
        <div id="rightColumn">
            {{ partial "nav-headers.html" . }}
            {{ block "main" . }}{{ end }}
            {{ partial "nav-headers.html" . }}
        </div><!-- rightColumn -->
        <div id="endContent"></div>
    </div><!-- content -->

    {{ partial "footer.html" . }}
</div><!-- container -->

</body>

</html>
