<?xml version="1.0"?>
<!--
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.
-->
<document>
  <properties>
    <title>Home</title>
    <author email="dev@commons.apache.org">Commons Documentation Team</author>
  </properties>
  <body>
    <!-- ================================================== -->
    <section name="Commons RNG Release History">
      <p><em>Note.</em> For older release javadocs see the individual artifact sub-sites.</p>
      <table>
        <tr><th>Version</th><th>Release date (YYYY-MM-DD)</th><th>Required Java Version</th><th>Release notes</th></tr>
        <tr>
          <td>1.3</td><td>2019-11-08</td><td>6+</td><td><a href="release-notes/RELEASE-NOTES-1.3.txt">release notes for 1.3</a></td>
        </tr>
        <tr>
          <td>1.2</td><td>2018-12-07</td><td>6+</td><td><a href="release-notes/RELEASE-NOTES-1.2.txt">release notes for 1.2</a></td>
        </tr>
        <tr>
          <td>1.1</td><td>2018-08-14</td><td>6+</td><td><a href="release-notes/RELEASE-NOTES-1.1.txt">release notes for 1.1</a></td>
        </tr>
        <tr>
          <td>1.0</td><td>2016-12-13</td><td>6+</td><td><a href="release-notes/RELEASE-NOTES-1.0.txt">release notes for 1.0</a></td>
        </tr>
      </table>

    </section>
    <!-- ================================================== -->
  </body>
</document>
