Texas Instruments Incorporated Technology and Software Publicly Available
Software License Agreement

Copyright 2009-2010 Texas Instruments Incorporated Copyright Imagination
Technology, Ltd.

Important:  Please read the following license agreement carefully.
This is a legally binding agreement.  Do not use or redistribute the
Licensed Materials unless: (1) you are authorized to accept and agree
to the terms of this software license agreement and (2) you intend to
enter into and to be bound by the terms of this agreement.

This Software License Agreement ("License") is a legal agreement between
you (either an individual or entity) and Texas Instruments Incorporated
("TI"), 12500 TI Boulevard, Dallas, Texas 75243.  The "Licensed
Materials" subject to this License include, in whole or in part, the
software programs that accompany this License.  By installing, copying
or otherwise using the Licensed Materials you agree to abide by the terms
of this License.  If you choose not to accept or agree with these terms,
you must immediately cease any use, copying or redistribution and destroy
the Licensed Materials.

NOTE:  The Licensed Materials may be bundled with open source software
and separate license terms may apply. For clarification, this License
does not license, limit your rights under, nor does it grant you rights
that supersede, the license terms of any applicable open source license
agreement.

1.  Object Code License.   TI hereby grants to you a limited,
non-exclusive license to reproduce and use the Licensed Materials
provided to you in object code format and to distribute an unlimited
number of object or executable copies of such Licensed Materials
provided that Licensed Materials are used solely and exclusively on
devices manufactured by or for TI. Redistributions must reproduce the
copyright notices and all the terms of this License in the documentation
and/or other materials provided with the Licensed Materials. Licensed
Materials may not be distributed under terms different than this License.

2. Termination.  This license is effective until terminated.  Without
prejudice to any other rights, TI may terminate your right to use the
Licensed Materials under this License if you fail to comply with the
terms of this License. In such event, you shall destroy all copies of
the Licensed Materials, including all portions and derivatives thereof.

3. Intellectual Property Rights.

a. The Licensed Materials being provided to you hereunder are being made
publicly available by TI, even though they contain copyrighted material
of TI and its licensors, if applicable.   In no event may you alter,
remove or destroy any copyright notice included in the Licensed Materials.
To the extent that any of the Licensed Materials are provided in binary
or object code only, you may not unlock, decompile, reverse engineer,
disassemble or otherwise translate such binary or object code to
human-perceivable form. The source code of such reverse engineered code
may contain TI trade secret and other proprietary information. Further,
nothing shall obligate TI to provide you with source code for the
Licensed Materials licensed to you in binary or object code only under
this License. TI reserves all rights not specifically granted under
this License.

b.	Certain Licensed Materials may (i) require patent licenses from
third parties claiming patent rights covering implementation of the
Licensed Materials or (ii) be based on industry recognized standards
or software programs published by industry recognized standards bodies
and certain third parties may claim to own patents or copyrights that
cover implementation of those standards.  You acknowledge and agree that
this License does not convey a license to any such third party patents
and copyrights.

c.	YOU ACKNOWLEDGE AND AGREE THAT TI SHALL NOT BE LIABLE
FOR AND SHALL NOT DEFEND OR INDEMNIFY YOU AGAINST ANY THIRD PARTY
INFRINGEMENT CLAIM THAT RELATES TO OR IS BASED ON YOUR MANUFACTURE,
USE, OR DISTRIBUTION OF THE LICENSED MATERIALS OR YOUR MANUFACTURE, USE,
OFFER FOR SALE, SALE, IMPORTATION OR DISTRIBUTION OF YOUR PRODUCTS THAT
INCLUDE OR INCORPORATE THE LICENSED MATERIALS.

d.	You acknowledge and agree that you are responsible for any fees
or royalties that may be payable to any third party based on such third
party's interests in the Licensed Materials described in Section 3(b)
above (the "Third Party Payment Obligations").	You agree to indemnify
TI against any Third Party Payment Obligations and will defend any
claim, suit or proceeding brought against TI insofar as such claim,
suit or proceeding is based on your failure to pay any Third Party
Payment Obligations.

4. Warranties and Limitations.	THE LICENSED MATERIALS ARE PROVIDED
"AS IS".  TI AND ITS LICENSORS MAKE NO WARRANTY OR REPRESENTATION,
EXPRESS, IMPLIED OR STATUTORY, INCLUDING ANY IMPLIED WARRANTIES OF
MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE, LACK OF VIRUSES,
ACCURACY OR COMPLETENESS OF RESPONSES, RESULTS AND LACK OF NEGLIGENCE.
TI DISCLAIMS ANY WARRANTY OF TITLE, QUIET ENJOYMENT, QUIET POSESSION,
AND NON-INFRINGEMENT OF ANY THIRD PARTY INTELLECTUAL PROPERTY RIGHTS
WITH REGARD TO THE LICENSED MATERIALS OR USE OF THOSE MATERIALS.

YOU ACKNOWLEDGE AND AGREE THAT THE LICENSED MATERIALS MAY NOT BE INTENDED
FOR PRODUCTION APPLICATIONS AND MAY CONTAIN IRREGULARITIES AND DEFECTS
NOT FOUND IN PRODUCTION SOFTWARE.  FURTHERMORE, YOU ACKNOWLEDGE AND
AGREE THAT THE LICENSED MATERIALS HAVE NOT BEEN TESTED OR CERTIFIED BY
ANY GOVERNMENT AGENCY OR INDUSTRY REGULATORY ORGANIZATION OR ANY OTHER
THIRD PARTY ORGANIZATION.  YOU AGREE THAT PRIOR TO USING, INCORPORATING
OR DISTRIBUTING THE LICENSED MATERIALS IN OR WITH ANY COMMERCIAL PRODUCT
THAT YOU WILL THOROUGHLY TEST THE PRODUCT AND THE FUNCTIONALITY OF THE
LICENSED MATERIALS IN OR WITH THAT PRODUCT AND BE SOLELY RESPONSIBLE
FOR ANY PROBLEMS OR FAILURES.

IN NO EVENT SHALL TI OR ITS LICENSORS BE LIABLE FOR ANY SPECIAL, INDIRECT,
INCIDENTAL, PUNITIVE OR CONSEQUENTIAL DAMAGES, HOWEVER CAUSED ON ANY
THEORY OF LIABILITY, ARISING IN ANY WAY OUT OF THIS LICENSE, OR YOUR
USE OF THE LICENSED MATERIALS, WHETHER OR NOT TI HAS BEEN ADVISED OF
THE POSSIBILITY OF SUCH DAMAGES.  EXCLUDED DAMAGES INCLUDE, BUT ARE NOT
LIMITED TO, COST OF REMOVAL OR REINSTALLATION, OUTSIDE COMPUTER TIME,
LABOR COSTS, LOSS OR CORRUPTION OF DATA, LOSS OF GOODWILL, LOSS OF
PROFITS, LOSS OF SAVINGS, OR LOSS OF USE OR INTERRUPTION OF BUSINESS
OR ANY OTHER ECONOMIC LOSS.  IN NO EVENT WILL TI'S AGGREGATE LIABILITY
UNDER THIS LICENSE OR ARISING OUT OF YOUR USE OF THE LICENSED MATERIALS
EXCEED FIVE HUNDRED U.S. DOLLARS (US$500).

Because some jurisdictions do not allow the exclusion or limitation of
incidental or consequential damages or limitation on how long an implied
warranty lasts, the above limitations or exclusions may not apply to you.

5. Export Control.  The software programs and any on-line documentation
as well as any updates or upgrades to such software programs or
documentation may be subject to the export or import regulations of
certain countries. You agree to comply with all such regulations and
acknowledge that you have the responsibility to obtain any licenses or
other authorizations that may be required to export, re-export or import
the Licensed Materials.

6. Governing Law, Jurisdiction and Severability.  This License will be
governed by and interpreted in accordance with the laws of the State of
Texas, without reference to that state's conflict of laws principles.
This License shall not be governed by the United Nations Convention on
Contracts for the International Sale of Goods, nor shall it be governed by
the Uniform Computer Information Transactions Act (UCITA).  Any dispute
arising out of or related to this License will be brought in, and each
party consents to the exclusive jurisdiction and venue in the state and
federal courts sitting in Dallas Country, Texas.  Each party waives all
defenses of lack of personal jurisdiction and forum non-conveniens and
agrees that process may be served on either party in a manner authorized
by applicable law or court rule.  If for any reason a court of competent
jurisdiction finds any provision of the License to be unenforceable, that
provision will be enforced to the maximum extent possible to effectuate
the intent of the parties and the remainder of the License shall continue
in full force and effect.

7. PRC Provisions.  If you are located in the People's Republic of
China ("PRC") or if the Licensed Materials will be sent to the PRC,
the following provisions shall apply and shall supersede any other
provisions in this License concerning the same subject matter as the
following provisions:

	a.	Registration Requirements.  You shall be solely
	responsible for performing all acts and obtaining all approvals
	that may be required in connection with this License by the
	government of the PRC, including but not limited to registering
	pursuant to, and otherwise complying with, the PRC Measures on
	the Administration of Software Products, Management Regulations
	on Technology Import-Export, and Technology Import and Export
	Contract Registration Management Rules.  Upon receipt of such
	approvals from the government authorities, you shall forward
	evidence of all such approvals to TI for its records.  In the
	event that you fail to obtain any such approval or registration,
	you shall be solely responsible for any and all losses, damages
	or costs resulting therefrom, and shall indemnify TI for all
	such losses, damages or costs.

	b.	Governing Language.  This License is written and
	executed in the English language.  If a translation of this
	License is required for any purpose, including but not limited
	to registration of the License pursuant to any governmental laws,
	regulations or rules, you shall be solely responsible for creating
	such translation.  Any translation of this License into a language
	other than English is intended solely in order to comply with
	such laws or for reference purposes, and the English language
	version shall be authoritative and controlling.

8. Entire Agreement.  This License is the entire agreement between you
and TI and supersedes any prior agreement between the parties related
to the subject matter of this License. No amendment or modification
of this License will be effective unless in writing and signed by a
duly authorized representative of TI.  You hereby warrant and represent
that you have obtained all authorizations and other applicable consents
required empowering you to enter into this License.


---------------------------------------------------------------------------

Copyright (c) 2007-2009 The Khronos Group Inc.

Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and/or associated documentation files (the
"Materials"), to deal in the Materials without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Materials, and to
permit persons to whom the Materials are furnished to do so, subject to
the following conditions:

The above copyright notice and this permission notice shall be included
in all copies or substantial portions of the Materials.

THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT
OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE MATERIALS
OR THE USE OR OTHER DEALINGS IN THE MATERIALS.


---------------------------------------------------------------------------

SGI FREE SOFTWARE LICENSE B (Version 2.0, Sept. 18, 2008)

Copyright (C) 2006 Silicon Graphics, Inc. All Rights Reserved.

Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and associated documentation files (the "Software"),
to deal in the Software without restriction, including without limitation
the rights to use, copy, modify, merge, publish, distribute, sublicense,
and/or sell copies of the Software, and to permit persons to whom the
Software is furnished to do so, subject to the following conditions:

The above copyright notice including the dates of first
publication and either this permission notice or a reference to
http://oss.sgi.com/projects/FreeB/ shall be included in all copies or
substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
SHALL SILICON GRAPHICS, INC. BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
DEALINGS IN THE SOFTWARE.

Except as contained in this notice, the name of Silicon Graphics, Inc.
shall not be used in advertising or otherwise to promote the sale, use
or other dealings in this Software without prior written authorization
from Silicon Graphics, Inc.

