#############################
CodeIgniter License Agreement
#############################

Copyright (c) 2008 - 2011, EllisLab, Inc.
All rights reserved.

This license is a legal agreement between you and EllisLab Inc. for the
use of CodeIgniter Software (the "Software"). By obtaining the Software
you agree to comply with the terms and conditions of this license.

Permitted Use
=============

You are permitted to use, copy, modify, and distribute the Software and
its documentation, with or without modification, for any purpose,
provided that the following conditions are met:

#. A copy of this license agreement must be included with the
   distribution.
#. Redistributions of source code must retain the above copyright notice
   in all source code files.
#. Redistributions in binary form must reproduce the above copyright
   notice in the documentation and/or other materials provided with the
   distribution.
#. Any files that have been modified must carry notices stating the
   nature of the change and the names of those who changed them.
#. Products derived from the Software must include an acknowledgment
   that they are derived from CodeIgniter in their documentation and/or
   other materials provided with the distribution.
#. Products derived from the Software may not be called "CodeIgniter",
   nor may "CodeIgniter" appear in their name, without prior written
   permission from EllisLab, Inc.

Indemnity
=========

You agree to indemnify and hold harmless the authors of the Software and
any contributors for any direct, indirect, incidental, or consequential
third-party claims, actions or suits, as well as any related expenses,
liabilities, damages, settlements or fees arising from your use or
misuse of the Software, or a violation of any terms of this license.

Disclaimer of Warranty
======================

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, WARRANTIES OF
QUALITY, PERFORMANCE, NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR
A PARTICULAR PURPOSE.

Limitations of Liability
========================

YOU ASSUME ALL RISK ASSOCIATED WITH THE INSTALLATION AND USE OF THE
SOFTWARE. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS OF THE
SOFTWARE BE LIABLE FOR CLAIMS, DAMAGES OR OTHER LIABILITY ARISING FROM,
OUT OF, OR IN CONNECTION WITH THE SOFTWARE. LICENSE HOLDERS ARE SOLELY
RESPONSIBLE FOR DETERMINING THE APPROPRIATENESS OF USE AND ASSUME ALL
RISKS ASSOCIATED WITH ITS USE, INCLUDING BUT NOT LIMITED TO THE RISKS OF
PROGRAM ERRORS, DAMAGE TO EQUIPMENT, LOSS OF DATA OR SOFTWARE PROGRAMS,
OR UNAVAILABILITY OR INTERRUPTION OF OPERATIONS.
