<%--
  ~ 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.
  --%>

<%@ page contentType="text/html;charset=iso-8859-1" language="java" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
  <head>
    <jsp:include page="../include/httpbase.jsp"/>
    <title>Axis2 :: Resource not found!</title>
    <link href="axis2-web/css/axis-style.css" rel="stylesheet" type="text/css"/>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
  </head>

  <body>
    <table width="100%">
      <tr>
        <td align="left"><img src="axis2-web/images/asf-logo.gif" alt=""/></td>
        <td align="right"><img src="axis2-web/images/axis_l.jpg" alt=""/></td>
      </tr>
    </table>
    <table width="100%">
      <tr>
        <td>
          <h1>Requested resource not found!</h1>
          <br/>
          <br/>
          <br/>
          <br/>
        </td>
      </tr>
      <tr><td align="center"><a href="axis2-web/index.jsp">home</a></td></tr>
    </table>
    <table width="100%">
      <tr><td>
        <table width="950px">
          <tr><td><hr size="1" noshade=""/></td></tr>
          <tr>
            <td align="center">Copyright &#169; 1999-2006, The Apache Software Foundation<br/>Licensed under the <a
              href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</td>
          </tr>
        </table>
      </td>
        <td>&nbsp;</td>
      </tr>
    </table>
  </body>
</html>