
<!--
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>
<head>
<title>Sample "Hello, World" Application</title>
<link rel="stylesheet" type="text/css" href="styles/main.css">
</head>
<body>
<div id='main'>
<div id="header">
	<div class="header_text">
		<h1>Sample Brooklyn Deployed "Hello, World" Application</h1>
	</div>
</div>
	<div id="container">
		<div class="text_row">
		  <div class="app_info"><h3>This is the home page for a sample application used to illustrate 
		how web applications can be deployed to multi-cloud environments using Brooklyn.</h3></div>
		  <div class="illustrations"><p>See the available illustrations <a href="available.jsp">here</a>.</p></div>
		</div>
	</div>
</div>
</body>
</html>
