Apache Deltacloud
Copyright 2010-2012 The Apache Software Foundation

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

This product includes software developed by Red Hat,
Inc. (http://www.redhat.com/)

This product includes software developed by IBM Corporation

This product includes software developed by the OpenNebula Project
(http://opennebula.org/)

This product includes software developed by the jQuery Project
(http://jquerymobile.com/)

This product includes icons created by David Vignon licensed under LGPL
(http://www.icon-king.com/)

This product includes software developed by Christian Neukirchen
(https://github.com/rack/rack)

This product includes software developed by ProfitBricks GmbH
(https://profitbricks.com/)
