PLEASE READ THIS LICENSE AGREEMENT ("AGREEMENT") CAREFULLY.  THIS AGREEMENT IS
A BINDING LEGAL AGREEMENT ENTERED INTO BY AND BETWEEN YOU (OR IF YOU ARE
ENTERING INTO THIS AGREEMENT ON BEHALF OF AN ENTITY, THEN THE ENTITY THAT YOU
REPRESENT) AND QUALCOMM TECHNOLOGIES, INC. ("QTI" "WE" "OUR" OR "US").  THIS IS
THE AGREEMENT THAT APPLIES TO YOUR USE OF THE DESIGNATED AND/OR LINKED
APPLICATIONS, THE ENCLOSED QUALCOMM TECHNOLOGIES' MATERIALS, INCLUDING RELATED
DOCUMENTATION AND ANY UPDATES OR IMPROVEMENTS THEREOF
(COLLECTIVELY, "MATERIALS").  BY USING OR COMPLETING THE INSTALLATION OF THE
MATERIALS, YOU ARE ACCEPTING THIS AGREEMENT AND YOU AGREE TO BE BOUND BY ITS
TERMS AND CONDITIONS.  IF YOU DO NOT AGREE TO THESE TERMS, QTI IS UNWILLING TO
AND DOES NOT LICENSE THE MATERIALS TO YOU. IF YOU DO NOT AGREE TO THESE TERMS
YOU MUST DISCONTINUE THE INSTALLATION PROCESS AND YOU MAY NOT USE THE MATERIALS
OR RETAIN ANY COPIES OF THE MATERIALS. ANY USE OR POSSESSION OF THE MATERIALS
BY YOU IS SUBJECT TO THE TERMS AND CONDITIONS SET FORTH IN THIS AGREEMENT.

1. RIGHT TO USE DELIVERABLES; RESTRICTIONS.

  1.1 License.  Subject to the terms and conditions of this Agreement,
  including, without limitation, the restrictions, conditions, limitations and
  exclusions set forth in this Agreement, QTI hereby grants to you a
  nonexclusive, limited license under QTI's copyrights to:  (i) install and use
  the Materials; and (ii) to reproduce and redistribute the binary code portions
  of the Materials (the "Redistributable Binary Code").  You may make and use a
  reasonable number of copies of any documentation.

  1.2 Redistribution Restrictions.  Distribution of the Redistributable Binary
  Code is subject to the following restrictions: (i) Redistributable Binary Code
  may only be distributed in binary format and may not be distributed in source
  code format:; (ii)  the Redistributable Binary Code may only operate in
  conjunction with platforms incorporating Qualcomm Technologies, Inc. chipsets;
  (iii) redistribution of the Redistributable Binary Code must include the .txt
  file setting forth the terms and condition of this Agreement; (iv) you may not
  use Qualcomm Technologies' or its affiliates or subsidiaries name, logo or
  trademarks; and (v) copyright, trademark, patent and any other notices that
  appear on the Materials may not be removed or obscured.

  1.3 Additional Restrictions.  Except as expressly permitted by this Agreement,
  you shall have no right to sublicense, transfer or otherwise disclose the
  Materials to any third party.  You shall not reverse engineer, reverse
  assemble, reverse translate, decompile or reduce to source code form any
  portion of the Materials provided in object code form or executable form.
  Except for the purposes expressly permitted in this Agreement, You shall not
  use the Materials for any other purpose.  QTI (or its licensors) shall retain
  title and all ownership rights in and to the Materials and any alterations,
  modifications (including all derivative works), translations or adaptations
  made of the Materials, and all copies thereof, and nothing herein shall be
  deemed to grant any right to You under any of QTI's or its affiliates'
  patents.  You shall not subject the Materials to any third party license
  terms (e.g., open source license terms).  You shall not use the Materials for
  the purpose of identifying or providing evidence to support any potential
  patent infringement claim against QTI, its affiliates, or any of QTI's or
  QTI's affiliates' suppliers and/or direct or indirect customers.  QTI hereby
  reserves all rights not expressly granted herein.

  1.4 Third Party Software and Materials.  The Software may contain or link to
  certain software and/or materials that are written or owned by third parties.
  Such third party code and materials may be licensed under separate or
  different terms and conditions and are not licensed to you under the terms of
  this Agreement.  You agree to comply with all terms and conditions imposed on
  you in the applicable third party licenses.  Such terms and conditions may
  impose certain obligations on you as a condition to the permitted use of such
  third party code and materials.  QTI does not represent or warrant that such
  third party licensors have or will continue to license or make available their
  code and materials to you.

  1.5 Feedback.  QTI may from time to time receive suggestions, feedback or
  other information from You regarding the Materials.  Any suggestions, feedback
  or other disclosures received from You are and shall be entirely voluntary on
  the part of You.  Notwithstanding any other term in this Agreement, QTI shall
  be free to use suggestions, feedback or other information received from You,
  without obligation of any kind to You.  The Parties agree that all inventions,
  product improvements, and modifications conceived of or made by QTI that are
  based, either in whole or in part, on ideas, feedback, suggestions, or
  recommended improvements received from You are the exclusive property of QTI,
  and all right, title and interest in and to any such inventions, product
  improvements, and modifications will vest solely in QTI.

  1.6 No Technical Support.  QTI is under no obligation to provide any form of
  technical support for the Materials, and if QTI, in its sole discretion,
  chooses to provide any form of support or information relating to the
  Materials, such support and information shall be deemed confidential and
  proprietary to QTI.

2. WARRANTY DISCLAIMER.  YOU EXPRESSLY ACKNOWLEDGE AND AGREE THAT THE USE OF
THE MATERIALS IS AT YOUR SOLE RISK.  THE MATERIALS AND TECHNICAL SUPPORT, IF
ANY, ARE PROVIDED "AS IS" AND WITHOUT WARRANTY OF ANY KIND, WHETHER EXPRESS OR
IMPLIED.  QTI ITS LICENSORS AND AFFILIATES MAKE NO WARRANTIES, EXPRESS OR
IMPLIED, WITH RESPECT TO THE MATERIALS OR ANY OTHER INFORMATION OR DOCUMENTATION
PROVIDED UNDER THIS AGREEMENT, INCLUDING BUT NOT LIMITED TO ANY WARRANTY OF
MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE OR AGAINST INFRINGEMENT, OR
ANY EXPRESS OR IMPLIED WARRANTY ARISING OUT OF TRADE USAGE OR OUT OF A COURSE OF
DEALING OR COURSE OF PERFORMANCE.  NOTHING CONTAINED IN THIS AGREEMENT SHALL BE
CONSTRUED AS (I) A WARRANTY OR REPRESENTATION BY QTI, ITS LICENSORS OR
AFFILIATES AS TO THE VALIDITY OR SCOPE OF ANY PATENT, COPYRIGHT OR OTHER
INTELLECTUAL PROPERTY RIGHT OR (II) A WARRANTY OR REPRESENTATION BY QTI THAT ANY
MANUFACTURE OR USE WILL BE FREE FROM INFRINGEMENT OF PATENTS, COPYRIGHTS OR
OTHER INTELLECTUAL PROPERTY RIGHTS OF OTHERS, AND IT SHALL BE THE SOLE
RESPONSIBILITY OF YOU TO MAKE SUCH DETERMINATION AS IS NECESSARY WITH RESPECT TO
THE ACQUISITION OF LICENSES UNDER PATENTS AND OTHER INTELLECTUAL PROPERTY OF
THIRD PARTIES.

3. NO OTHER LICENSES OR INTELLECTUAL PROPERTY RIGHTS. Neither this Agreement,
nor any act by QTI or any of its affiliates pursuant to this Agreement or
relating to the Materials (including, without limitation, the provision by QTI
or its affiliates of the Materials), shall provide to You any license or any
other rights whatsoever under any patents, trademarks, trade secrets, copyrights
or any other intellectual property of QTI or any of its affiliates, except for
the copyright rights expressly licensed under this Agreement. You understand and
agree that:

  (i) Neither this Agreement, nor delivery of the Materials, grants any right to
  practice, or any other right at all with respect to, any patent of QTI or any
  of its affiliates; and

  (ii) A separate license agreement from QUALCOMM Incorporated is needed to use
  or practice any patent of QUALCOMM Incorporated. You agree not to contend in
  any context that, as a result of the provision or use of the Materials, either
  QTI or any of its affiliates has any obligation to extend, or You or any other
  party has obtained any right to, any license, whether express or implied, with
  respect to any patent of QTI or any of its affiliates for any purpose.

4. TERMINATION.  This Agreement shall be effective upon acceptance, or access or
use of the Materials (whichever occurs first) by You and shall continue until
terminated. You may terminate the Agreement at any time by deleting and
destroying all copies of the Materials and all related information in Your
possession or control. This Agreement terminates immediately and automatically,
with or without notice, if You fail to comply with any provision hereof.
Additionally, QTI may at any time terminate this Agreement, without cause, upon
notice to You. Upon termination You must, to the extent possible, delete or
destroy all copies of the Materials in Your possession and the license granted
to You in this Agreement shall terminate. Sections 1.2 through 10 shall survive
the termination of this Agreement. In the event that any restrictions,
conditions, limitations are found to be either invalid or unenforceable, the
rights granted to You in Section 1 (License) shall be null, void and ineffective
from the Effective Date, and QTI shall also have the right to terminate this
Agreement immediately, and with retroactive effect to the effective date.

5. LIMITATION OF LIABILITY.  IN NO EVENT SHALL QTI, QTI's AFFILIATES OR ITS
LICENSORS BE LIABLE TO YOU FOR ANY INCIDENTAL, CONSEQUENTIAL OR SPECIAL DAMAGES,
INCLUDING BUT NOT LIMITED TO ANY LOST PROFITS, LOST SAVINGS, OR OTHER INCIDENTAL
DAMAGES, ARISING OUT OF THE USE OR INABILITY TO USE, OR THE DELIVERY OR FAILURE
TO DELIVER, ANY OF THE DELIVERABLES, OR ANY BREACH OF ANY OBLIGATION UNDER THIS
AGREEMENT, EVEN IF QTI HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
THE FOREGOING LIMITATION OF LIABILITY SHALL REMAIN IN FULL FORCE AND EFFECT
REGARDLESS OF WHETHER YOUR REMEDIES HEREUNDER ARE DETERMINED TO HAVE FAILED OF
THEIR ESSENTIAL PURPOSE.  THE ENTIRE LIABILITY OF QTI, QTI's AFFILIATES AND ITS
LICENSORS, AND THE SOLE AND EXCLUSIVE REMEDY OF YOU, FOR ANY CLAIM OR CAUSE OF
ACTION ARISING HEREUNDER (WHETHER IN CONTRACT, TORT, OR OTHERWISE) SHALL NOT
EXCEED US$50.

6. INDEMNIFICATION.  You agree to indemnify and hold harmless QTI and its
officers, directors, employees and successors and assigns against any and all
third party claims, demands, causes of action, losses, liabilities, damages,
costs and expenses, incurred by QTI (including but not limited to costs of
defense, investigation and reasonable attorney's fees) arising out of, resulting
from or related to: (i) any breach of this Agreement by You; and (ii) your acts,
omissions, products and services.  If requested by QTI, You agree to defend QTI
in connection with any third party claims, demands, or causes of action
resulting from, arising out of or in connection with any of the foregoing.

7. ASSIGNMENT.  You shall not assign this Agreement or any right or interest
under this Agreement, nor delegate any obligation to be performed under this
Agreement, without QTI's prior written consent.  For purposes of this Section 7,
an "assignment" by You under this Section shall be deemed to include, without
limitation, any merger, consolidation, sale of all or substantially all of its
assets, or any substantial change in the management or control of You.
Any attempted assignment in contravention of this Section 9 shall be void.
QTI may freely assign this Agreement or delegate any or all of its rights and
obligations hereunder to any third party.

8. COMPLIANCE WITH LAWS; APPLICABLE LAW.  You agree to comply with all
applicable local, international and national laws and regulations and with U.S.
Export Administration Regulations, as they apply to the subject matter of this
Agreement.  This Agreement is governed by the laws of the State of California,
excluding California's choice of law rules.

9. CONTRACTING PARTIES.  If the Materials are downloaded on any computer owned
by a corporation or other legal entity, then this Agreement is formed by and
between QTI and such entity.  The individual accepting the terms of this
Agreement represents and warrants to QTI that they have the authority to bind
such entity to the terms and conditions of this Agreement.

10. MISCELLANEOUS PROVISIONS.  This Agreement, together with all exhibits
attached hereto, which are incorporated herein by this reference, constitutes
the entire agreement between QTI and You and supersedes all prior negotiations,
representations and agreements between the parties with respect to the subject
matter hereof.  No addition or modification of this Agreement shall be effective
unless made in writing and signed by the respective representatives of QTI and
You.  The restrictions, limitations, exclusions and conditions set forth in this
Agreement shall apply even if QTI or any of its affiliates becomes aware of or
fails to act in a manner to address any violation or failure to comply
therewith.  You hereby acknowledge and agree that the restrictions, limitations,
conditions and exclusions imposed in this Agreement on the rights granted in
this Agreement are not a derogation of the benefits of such rights.  You further
acknowledges that, in the absence of such restrictions, limitations, conditions
and exclusions, QTI would not have entered into this Agreement with You.  Each
party shall be responsible for and shall bear its own expenses in connection
with this Agreement.  If any of the provisions of this Agreement are determined
to be invalid, illegal, or otherwise unenforceable, the remaining provisions
shall remain in full force and effect.  This Agreement is entered into solely
in the English language, and if for any reason any other language version is
prepared by any party, it shall be solely for convenience and the English
version shall govern and control all aspects.  If You are located in the
province of Quebec, Canada, the following applies: The Parties hereby confirm
they have requested this Agreement and all related documents be prepared
in English..