THIS DEVELOPER SOFTWARE LICENSE AGREEMENT (THE "AGREEMENT") IS A LEGALLY
BINDING AGREEMENT BETWEEN NXP Semiconductors Netherlands B.V ("LICENSOR") AND
YOU OR THE LEGAL ENTITY YOU REPRESENT ("You" or its possessive, "Your"). BY
TYPING "I ACCEPT" WHERE INDICATED YOU ACKNOWLEDGE THAT YOU HAVE READ THIS
AGREEMENT, UNDERSTAND IT AND AGREE TO BE BOUND BY ITS TERMS AND CONDITIONS. IF
YOU DO NOT AGREE TO THESE TERMS YOU MUST DISCONTINUE THE INSTALLATION PROCESS
AND YOU SHALL NOT USE THE SOFTWARE OR RETAIN ANY COPIES OF THE SOFTWARE OR
DOCUMENTATION. ANY USE OR POSSESSION OF THE SOFTWARE BY YOU IS SUBJECT TO THE
TERMS AND CONDITIONS SET FORTH IN THIS AGREEMENT. IF THE SOFTWARE IS INSTALLED
ON A COMPUTER OWNED BY A CORPORATION OR OTHER LEGAL ENTITY, THEN YOU REPRESENT
AND WARRANT THAT YOU HAVE THE AUTHORITY TO BIND SUCH ENTITY TO THE TERMS AND
CONDITIONS OF THIS AGREEMENT.

   1.  Special Definitions

      a.  The term "Android" means the open source mobile platform, software
          stack, operating system, middleware, application programming
          interfaces and mobile applications under the trade-name "Android"
          distributed at Android.com.

      b.  The term "Android Applications" means a software application or
          open-source contribution developed by You, designed to operate with
          Android that does not contain or incorporate any of the Software.

      c.  The term "Authorized Android Enabled Device" means the device
          known as the Nexus S only.
          The term "Software" means the Licensor's proprietary software and
          libraries in object code form, designed for use on the Authorized
          Android Enabled Device.

      d.  The term "Authorized Android Enabled Device Software" means a
          packaged build for Authorized Android Enabled Devices, consisting of
          files suitable for installation on an Authorized Android Enabled
          Device using a mechanism such as fastboot mode or recovery mode.

   2.  License Grant

      a.  Subject to the terms of this Agreement, Licensor hereby grants to
          You, free of charge, a non-exclusive, non-sublicensable,
          non-transferable, limited license, during the term of this Agreement,
          to download, install and use the Software internally in
          machine-readable (i.e., object code) form and the Documentation for
          non-commercial use on an Authorized Android Enabled Device and
          non-commercial redistribution of the Authorized Android Enabled
          Device Software (the "Limited Purpose"). You may grant your end users
          the right to use the Software for the Limited Purpose. The license to
          the Software granted to You hereunder is solely for the Limited
          Purpose set forth in this section, and the Software shall not be used
          for any other purpose.

   3.  Restrictions

      a.  Retention of Rights. The entire right, title and interest in the
          Software shall remain with Licensor and, unless specified in writing
          hereunder, no rights are granted to any of the Software. Except for
          the right to use the Software for the Limited Purpose, the delivery
          of the Software to You does not convey to You any intellectual
          property rights in the Software, including, but not limited to any
          rights under any patent, trademark, copyright, or trade secret.
          Neither the delivery of the Software to You nor any terms set forth
          herein shall be construed to grant to You, either expressly, by
          implication or by way of estoppel, any license under any patents or
          other intellectual property rights covering or relating to any other
          product or invention or any combination of the Software with any
          other product. Any rights not expressly granted to You herein are
          reserved by Licensor.

      b.  No Commercialization or Distribution of the Software and
          Documentation. Except as expressly provided in Section 2 of this
          Agreement, You shall have no right to (i) copy, disclose, distribute,
          publically perform, publically display, transfer, alter, modify,
          translate, disassemble, decompile, reverse engineer, or adapt the
          Software and Documentation, or any portion thereof, or create any
          derivative works based thereon; (ii) rent, lease, assign, sublicense,
          resell, disclose or otherwise transfer the Software and Documentation
          in whole or in part to any third party (iii) use the Software and
          Documentation except for the Limited Purpose, (iv) remove or alter
          any of the copyright or proprietary notices contained in any of the
          Software and Documentation. For the purposes of clarity, nothing in
          this Agreement prohibits You from making and distributing Android
          Applications under commercial or non-commercial terms, provided that
          You shall not contain, incorporate, and/or compile the Software or
          any of its derivative works, in whole or in part, into Your Android
          Applications and/or any software/devices created by You or by third
          parties acting on Your behalf. You and any such third party shall
          comply with all of the terms and conditions of this Agreement.

      c.  No Reverse Engineering. Except for any portions of the Software
          provided to You in source code format and except for any third party
          code distributed with the Software that is licensed under contrary
          terms, You will not reverse engineer, disassemble,
          decompile, or translate the Software, or otherwise attempt to derive
          the source code version of the Software, except if and to the extent
          expressly permitted under any applicable law.

      d.  Third Party Software. You agree that Android may contain third party
          software. You agree that you may not distribute such third party
          software for any purpose without appropriate licenses from the
          applicable third party or parties.

      e.  No Transfer or Assignment. You shall not assign any of its rights or
          obligations under this Agreement. Any attempted assignment in
          contravention of this Section shall be void.

   4.  Indemnity

      a.  You agree to indemnify and hold harmless Licensor and its officers,
          directors, customers, employees and successors and assigns (each an
          "Indemnified Party") against any and all claims, demands, causes of
          action, losses, liabilities, damages, costs and expenses, incurred by
          the Indemnified Party (including but not limited to costs of defense,
          investigation and reasonable attorney's fees) arising out of,
          resulting from or related to (i) any software, products,
          documentation, content, materials or derivative works created or
          developed by You using the Software which causes an infringement of
          any patent, copyright, trademark, trade secret, or other property,
          publicity or privacy rights of any third parties arising in any
          jurisdiction anywhere in the world, (ii) the download, distribution,
          installation, storage, execution, use or transfer of such software,
          products, documentation, content, materials or derivative works by
          any person or entity, and/or (iii) any breach of this Agreement by
          You. If requested by an Indemnified Party, You agree to defend such
          Indemnified Party 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.

   5.  Limitation of Liability

      a.  TO THE MAXIMUM EXTENT PERMITTED UNDER APPLICABLE LAWS, UNDER NO
          CIRCUMSTANCES, INCLUDING WITHOUT LIMITATION NEGLIGENCE, SHALL
          LICENSOR, ITS AFFILIATES AND/OR ITS DIRECTORS, OFFICERS, EMPLOYEES OR
          AGENTS BE LIABLE FOR ANY INDIRECT, INCIDENTAL, SPECIAL, PUNITIVE OR
          CONSEQUENTIAL DAMAGES (INCLUDING BUT NOT LIMITED TO DAMAGES FOR LOSS
          OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF BUSINESS
          INFORMATION AND THE LIKE) ARISING OUT OF OR IN CONNECTION WITH THE
          SOFTWARE OR ANY DOWNLOAD, INSTALLATION OR USE OF, OR INABILITY TO
          USE, THE SOFTWARE, EVEN IF LICENSOR HAS BEEN ADVISED OF THE
          POSSIBILITY OF SUCH DAMAGES. SOME JURISDICTIONS DO NOT ALLOW THE
          LIMITATION OR EXCLUSION OF LIABILITY FOR INCIDENTAL OR CONSEQUENTIAL
          DAMAGES SO THE ABOVE LIMITATION OR EXCLUSION MAY NOT APPLY OR MAY BE
          LIMITED. IN NO EVENT SHALL LICENSOR'S TOTAL AGGREGATE LIABILITY TO
          YOU FOR ANY AND ALL DAMAGES, LOSSES, CLAIMS AND CAUSES OF ACTIONS
          (WHETHER IN CONTRACT, TORT, INCLUDING NEGLIGENCE, INDEMNIFICATION OR
          OTHERWISE) EXCEED ONE HUNDRED U.S. DOLLARS (US$100). THE LIMITATIONS
          SET FORTH IN THIS PARAGRAPH SHALL BE DEEMED TO APPLY TO THE MAXIMUM
          EXTENT PERMITTED BY APPLICABLE LAW. THE PARTIES HAVE FULLY CONSIDERED
          THE FOREGOING ALLOCATION OF RISK AND FIND IT REASONABLE, AND THAT THE
          FOREGOING LIMITATIONS IN THIS PARAGRAPH ARE AN ESSENTIAL BASIS OF
          THE BARGAIN BETWEEN THE PARTIES.

   6.  No Warranty

      a.  LICENSOR MAKES NO WARRANTIES, EXPRESS OR IMPLIED, WITH RESPECT TO THE
          SOFTWARE AND 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 A WARRANTY OR REPRESENTATION BY LICENSOR (I) AS TO THE
          VALIDITY OR SCOPE OF ANY PATENT, COPYRIGHT OR OTHER INTELLECTUAL
          PROPERTY RIGHT AND (II) 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. LICENSOR SHALL NOT HAVE ANY OBLIGATION TO PROVIDE
          ANY TECHNICAL SUPPORT OF THE SOFTWARE UNDER THIS AGREEMENT.

   7.  Term and Termination

      a.  This Agreement shall be effective on the date You accept this
          Agreement and shall remain in effect until terminated as provided
          herein. You may terminate the Agreement at any time by deleting and
          destroying all copies of the Software 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, Licensor may at any time terminate
          this Agreement, without cause, upon notice to You. Upon termination
          You must delete or destroy all copies of the Software in Your
          possession, and the license granted to You in this Agreement shall
          terminate. Sections 3, 4, 5, 6 and 8 shall survive the termination of
          this Agreement.

   8.  Miscellaneous

      a.  Governing Law. This Agreement is governed and interpreted in
          accordance with the laws of the State of California without giving
          effect to its conflict of laws provisions. The United Nations
          Convention on Contracts for the International Sale of Goods is
          expressly disclaimed and shall not apply. Any claim arising out of or
          related to this Agreement must be brought exclusively in a federal or
          state court located in Santa Clara County, California and You consent
          to the jurisdiction and venue of such courts.

      b.  Waiver and Severability. The failure of either party to require
          performance by the other party of any provision of this Agreement
          shall not affect the full right to require such performance at any
          time thereafter; nor shall the waiver by either party of a breach of
          any provision of this Agreement be taken or held to be a waiver of
          the provision itself. Severability. If any provision of this
          Agreement is unenforceable or invalid under any applicable law or is
          so held by applicable court decision, such unenforceability or
          invalidity shall not render this Agreement unenforceable or invalid
          as a whole, and such provision shall be changed and interpreted so as
          to best accomplish the objectives of such unenforceable or invalid
          provision within the limits of applicable law or applicable court
          decisions.

      c.  Amendment and Modification. This Agreement and any of its terms and
          provisions may only be amended, modified, supplemented or waived in a
          writing signed by both parties hereto.

      d.  Compliance with Laws. You shall comply with all applicable laws,
          rules, and regulations in connection with its activities under this
          Agreement.

      e.  Entire Agreement. This Agreement completely and exclusively states
          the agreement between You and Licensor regarding this subject matter.
