<!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>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" id="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=0.5">
    <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
    
    <!-- Left empty on purpose!-->
    <title></title>

    <!-- Bootstrap -->
    
    <link href="css/bootstrap.min.css" rel="stylesheet" media="all">
    <link href="css/scaffolding.css?revision=f3a4716" rel="stylesheet" media="all">
    <link href="css/modal.css" rel="stylesheet" media="all">
    <link href="css/spinner.css" rel="stylesheet" media="all">
    <link rel="alternate" href="/api/static.lua"/>
    <link rel="stylesheet" href="css/hack.css">

    <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
    <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
    <!--[if lt IE 9]>
      <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
      <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
    <![endif]-->
  </head>
  <body onload="prime_list_index();">
    <div style="text-align: center; margin: 10px auto;">
    <img src="images/logo.png" alt="Foal logo" style="width: 320px;"/><br/>
    <h2>Mail Archives</h2>
    <h4>Pick a list domain to start browsing emails:</h4>
    </div>

    <div id="list_index"style="margin: 0 auto;">
        <div id="list_index_child" style="margin: 0 auto; max-width: 400px;">
          
        </div>
        <div id="list_index_child_wide" style="margin: 0 auto; max-width: 780px;">
          <div id="list_picker" style="margin: 0 auto;">
            <ul id="list_picker_ul">
            </ul>
          </div>
          <ul id="list_index_wide_lists"></ul>
        </div>
      </div>
    <noscript>
    <p style="text-align: center;">This site requires JavaScript to operate. If you wish, you may view a <a href="/api/plain">text-only version</a> of these lists.</p>
    </noscript>

    <script src="js/jquery-1.12.4.min.js" integrity="sha256-ZosEbRLbNQzLpnKIkEdrPv7lOy9C27hHQ+Xp8a4MxAQ="></script>
    <!-- Include all compiled plugins (below), or include individual files as needed -->
    <script src="js/bootstrap.min.js"></script>
    <script src="js/config.js?revision=f3a4716"></script>
    <script src="js/ponymail.js?revision=f3a4716"></script>
    <div id="splash" class="splash fade-in"> &nbsp; </div>
    <div style="clear: both;"></div>
    
  </body>
</html>
