THIS DEVELOPER SOFTWARE LICENSE AGREEMENT (THE "AGREEMENT") IS A LEGALLY
BINDING AGREEMENT BETWEEN Invensense, Inc. ("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 only the device
          identified on the site from which You downloaded the Software.
          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.
