Apache Usergrid_
Copyright 2014 The Apache Software Foundation.

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

This product bundles SBJson, which is available under a "3-clause BSD" license.
For details, see sdks/ios/UGAPI/SBJson/ .

This product bundles SSKeychain, which is available under a "MIT/X11" license.
For details, see sdks/ios/UGAPI/SSKeychain/.

This product bundles angular-senario.js, part of jQuery JavaScript Library v1.10.2
which Includes Sizzle.js Copyright 2005, 2013 jQuery Foundation, Inc. and
other contributors. Released under the MIT license.

This product bundles angular.js, specifically AngularJS v1.2.5 (c) 2010-2014
Google, Inc. Released under the MIT license.

This product bundles Bootstrap v2.3.2 Copyright 2012 Twitter, Inc
Licensed under the Apache License v2.0

This product bundles jquery-ui-1.8.9. Licensed under MIT license.

This product bundles jquery-1.9.1 Licensed under MIT license.

This product bundles mocha. All rights reserved. Licensed under MIT.
Copyright (c) 2011-2014 TJ Holowaychuk <tj@vision-media.ca>

This product bundles NSubstitute v1.6.0.0. Licensed under the BSD 2-Clause License.

This product bundles NUnit v2.6.2.
Portions Copyright © 2002-2012 Charlie Poole or Copyright © 2002-2004 James W. Newkirk, Michael C. Two, Alexei A. Vorontsov or Copyright © 2000-2002 Philip A. Craig

This product bundles a number of files within the /sdks/ios
package.

 Copyright (C) 2009 Stig Brautaset. All rights reserved.
 
 Redistribution and use in source and binary forms, with or without
 modification, are permitted provided that the following conditions are met:
 
 * Redistributions of source code must retain the above copyright notice, this
   list of conditions and the following disclaimer.
 
 * 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.
 
 * Neither the name of the author nor the names of its contributors may be used
   to endorse or promote products derived from this software without specific
   prior written permission.
 
 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 AND ANY EXPRESS 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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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.

This product bundles SSToolkit Copyright (c) 2009-2011 Sam Soffes. All rights reserved.
These files can be located within the /sdks/ios package.
 
