${pom.name}
Copyright (c) 2005 - 2008 The Apache Software Foundation

This product includes software developed by
The Apache Software Foundation (http://www.apache.org/).

Unless otherwise indicated, all distribution made available by the Apache Software Foundation
is provided to you under the terms and conditions of the Apache License Version 2.0 ("AL").
A copy of the AL is provided with this distribution as the LICENSE file present in the
root directory, and is also available at http://www.apache.org/licenses/.

This product also includes software under the BSD license 
(see the LICENSE file contained in this distribution), with
the following copyright:

Copyright (c) 2006, Sun Microsystems, Inc.
All rights reserved.
