Apache OODT
Copyright 2010-2012 The Apache Software Foundation

This product includes software developed at
The Apache Software Foundation (http://www.apache.org/).

This product includes the WebAppers Progress Bar, version 0.2, written by
Ray Cheung. WebAppers Progress Bar is freely distributable under the terms 
of the Creative Commons license. For details, see the WebAppers web site: 
    http://www.webappers.com/progressBar/

This product includes the Prototype JavaScript framework, version 1.5.0,
written by Sam Stephenson. Prototype is freely distributable under the terms 
of an MIT-style license. For details, see the Prototype web site: 
    http://prototype.conio.net/

This product includes the jQuery JavaScript Library, version 1.3.1, written
by John Resig. jQuery is dually licensed under the MIT and GPL licenses, and
is included in this software distribution under the MIT license. For details,
see the jQuery web site: 
    http://jquery.com/

This product includes the jQuery UI, versions 1.2.2b2 and 1.5.3, written by 
Paul Bakaus. The jQuery UI is dually licensed under the MIT and GPL licenses, 
and is included in this software distribution under the MIT license. For 
details, see the jQuery UI web site:
    http://docs.jquery.com/UI

This product includes the jQuery UI CSS Framework. The jQuery UI CSS 
Framework is dually licensed under the MIT and GPL licenses, and is included 
in this software distribution under the MIT license. For details, see the 
jQuery UI web site:
    http://jqueryui.com/about

This product includes the jQuery Alert Dialogs Plugin, version 1.1, written
by Cory S.N. LaViska for A Beautiful Site, LLC. The jQuery Alert Dialogs 
Plugin is dually licensed under the MIT and GPL licenses, and is included in 
this software distribution under the MIT license. For details, see the A
Beautiful Site web site:
    http://abeautifulsite.net/

This product includes the jQuery PeriodicalUpdater Plugin, version 2.0, 
written by Robert Fischer for Smokejumper IT and 360innovate. The jQuery
PeriodicalUpdater Plugin is dually licensed under the MIT and GPL licenses, 
and is included in this software distribution under the MIT license. For 
details, see the following websites:
     Robert Fischer (http://smokejumperit.com)
     360innovate (http://www.360innovate.co.uk)

This product includes the jQuery blockUI Plugin, version 2.15, written by
M. Alsup. The jQuery blockUI Plugin is dually licensed under the MIT and 
GPL licenses, and is included in this software distribution under the MIT 
license. For details, see:
     http://malsup.com/jquery/block/

This product includes the jQuery Cookie Plugin, written by Klaus Hartl.
The jQuery Cookie Plugin is dually licensed under the MIT and GPL licenses, 
and is included in this software distribution under the MIT license.

This product includes the jQuery Treeview Plugin, version 1.4, and the
Async Treeview extension, version 0.1, written by Jörn Zaefferer. The 
jQuery Treeview Plugin and Async Treeview are dually licensed under the MIT 
and GPL licenses, and is included in this software distribution under the 
MIT license. For details, see:
     http://bassistance.de/jquery-plugins/jquery-plugin-treeview/
     http://docs.jquery.com/Plugins/Treeview
 
This product includes the Dynamic Tree View Control, version 0.4.0, written
by Martin Wendt. The Dynamic Tree View COntrol is licensed under the MIT
license. For details, see:
     http://dynatree.googlecode.com/

This product utilizes using v1.3.4 of Doug Lea's java.util.concurrent.

This product utilizes jsch version 0.1.42.

------------------------------------------------------------------------------
Copyright (c) 2002-2010 Atsuhiko Yamanaka, JCraft,Inc. 
All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:

  1. Redistributions of source code must retain the above copyright notice,
     this list of conditions and the following disclaimer.

  2. Redistributions in binary form must reproduce the above copyright 
     notice, this list of conditions and the following disclaimer in 
     the documentation and/or other materials provided with the distribution.

  3. The names of the authors may not be used to endorse or promote products
     derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,
INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
