SOFTWARE LICENSE AGREEMENT

Unless you and InvenSense Corporation ("InvenSense") execute a separate written
software license agreement governing use of the accompanying software, this
software is licensed to you under the terms of this Software License
Agreement ("Agreement").

ANY USE, REPRODUCTION OR DISTRIBUTION OF THE SOFTWARE CONSTITUTES YOUR
ACCEPTANCE OF THIS AGREEMENT.

1.  DEFINITIONS.

1.1.    "InvenSense Product" means any of the proprietary integrated circuit
product(s) sold by InvenSense with which the Software was designed to be used,
or their successors.

1.2.    "Licensee" means you or if you are accepting on behalf of an entity
then the entity and its affiliates exercising rights under, and complying
with all of the terms of this Agreement.

1.3.    "Software" shall mean that software made available by InvenSense to
Licensee in binary code form with this Agreement.

2.  LICENSE GRANT; OWNERSHIP

2.1.    License Grants.  Subject to the terms and conditions of this Agreement,
InvenSense hereby grants to Licensee a non-exclusive, non-transferable,
royalty-free license (i) to use and integrate the Software in conjunction
with any other software; and (ii) to reproduce and distribute the Software
complete, unmodified and only for use with a InvenSense Product.

2.2.    Restriction on Modification.  If and to the extent that the Software is
designed to be compliant with any published communications standard
(including, without limitation, DOCSIS, HomePNA, IEEE, and ITU standards),
Licensee may not make any modifications to the Software that would cause the
Software or the accompanying InvenSense Products to be incompatible with such
standard.

2.3.    Restriction on Distribution.  Licensee shall only distribute the
Software (a) under the terms of this Agreement and a copy of this Agreement
accompanies such distribution, and (b) agrees to defend and indemnify
InvenSense and its licensors from and against any damages, costs, liabilities,
settlement amounts and/or expenses (including attorneys' fees) incurred in
connection with any claim, lawsuit or action by any third party that arises
or results from the use or distribution of any and all Software by the
Licensee except as contemplated herein.

2.4.    Proprietary Notices.  Licensee shall not remove, efface or obscure any
copyright or trademark notices from the Software.  Licensee shall include
reproductions of the InvenSense copyright notice with each copy of the
Software, except where such Software is embedded in a manner not readily
accessible to the end user.  Licensee acknowledges that any symbols,
trademarks, tradenames, and service marks adopted by InvenSense to identify the
Software belong to InvenSense and that Licensee shall have no rights therein.

2.5.    Ownership.  InvenSense shall retain all right, title and interest,
including all intellectual property rights, in and to the Software.  Licensee
hereby covenants that it will not assert any claim that the Software created
by or for InvenSense infringe any intellectual property right owned or
controlled by Licensee.

2.6.    No Other Rights Granted; Restrictions.  Apart from the license rights
expressly set forth in this Agreement, InvenSense does not grant and Licensee
does not receive any ownership right, title or interest nor any security
interest or other interest in any intellectual property rights relating to
the Software, nor in any copy of any part of the foregoing.  No license is
granted to Licensee in any human readable code of the Software (source code).
Licensee shall not (i) use, license, sell or otherwise distribute the
Software except as provided in this Agreement, (ii) attempt to reverse
engineer, decompile or disassemble any portion of the Software; or (iii) use
the Software or other material in violation of any applicable law or
regulation, including but not limited to any regulatory agency, such as FCC,
rules.

3.  NO WARRANTY OR SUPPORT

3.1.    No Warranty. THE SOFTWARE IS OFFERED "AS IS," AND INVENSENSE GRANTS AND
LICENSEE RECEIVES NO WARRANTIES OF ANY KIND, EXPRESS OR IMPLIED, BY STATUTE,
COMMUNICATION OR CONDUCT WITH LICENSEE, OR OTHERWISE.  INVENSENSE SPECIFICALLY
DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A SPECIFIC
PURPOSE OR NONINFRINGEMENT CONCERNING THE SOFTWARE OR ANY UPGRADES TO OR
DOCUMENTATION FOR THE SOFTWARE.  WITHOUT LIMITATION OF THE ABOVE, INVENSENSE
GRANTS NO WARRANTY THAT THE SOFTWARE IS ERROR-FREE OR WILL OPERATE WITHOUT
INTERRUPTION, AND GRANTS NO WARRANTY REGARDING ITS USE OR THE RESULTS
THEREFROM INCLUDING, WITHOUT LIMITATION, ITS CORRECTNESS, ACCURACY OR
RELIABILITY.

3.2.    No Support.  Nothing in this agreement shall obligate InvenSense to
provide any support for the Software. InvenSense may, but shall be under no
obligation to, correct any defects in the Software and/or provide updates to
licensees of the Software.  Licensee shall make reasonable efforts to
promptly report to InvenSense any defects it finds in the Software, as an aid
to creating improved revisions of the Software.

3.3.    Dangerous Applications.  The Software is not designed, intended, or
certified for use in components of systems intended for the operation of
weapons, weapons systems, nuclear installations, means of mass
transportation, aviation, life-support computers or equipment (including
resuscitation equipment and surgical implants), pollution control, hazardous
substances management, or for any other dangerous application in which the
failure of the Software could create a situation where personal injury or
death may occur.  Licensee understands that use of the Software in such
applications is fully at the risk of Licensee.

4.  TERM AND TERMINATION

4.1.    Termination.  This Agreement will automatically terminate if Licensee
fails to comply with any of the terms and conditions hereof. In such event,
Licensee must destroy all copies of the Software and all of its component
parts.

4.2.    Effect Of Termination.  Upon any termination of this Agreement, the
rights and licenses granted to Licensee under this Agreement shall
immediately terminate.

4.3.    Survival.  The rights and obligations under this Agreement which by
their nature should survive termination will remain in effect after
expiration or termination of this Agreement.

5.  CONFIDENTIALITY

5.1.    Obligations.  Licensee acknowledges and agrees that any documentation
relating to the Software, and any other information (if such other
information is identified as confidential or should be recognized as
confidential under the circumstances) provided to Licensee by InvenSense
hereunder (collectively, "Confidential Information") constitute the
confidential and proprietary information of InvenSense, and that Licensee's
protection thereof is an essential condition to Licensee's use and possession
of the Software.  Licensee shall retain all Confidential Information in
strict confidence and not disclose it to any third party or use it in any way
except under a written agreement with terms and conditions at least as
protective as the terms of this Section.  Licensee will exercise at least the
same amount of diligence in preserving the secrecy of the Confidential
Information as it uses in preserving the secrecy of its own most valuable
confidential information, but in no event less than reasonable diligence.
Information shall not be considered Confidential Information if and to the
extent that it: (i) was in the public domain at the time it was disclosed or
has entered the public domain through no fault of Licensee; (ii) was known to
Licensee, without restriction, at the time of disclosure as proven by the
files of Licensee in existence at the time of disclosure; or (iii) becomes
known to Licensee, without restriction, from a source other than InvenSense
without breach of this Agreement by Licensee and otherwise not in violation
of InvenSense's rights.

5.2.    Return of Confidential Information.  Notwithstanding the foregoing, all
documents and other tangible objects containing or representing InvenSense
Confidential Information and all copies thereof which are in the possession
of Licensee shall be and remain the property of InvenSense, and shall be
promptly returned to InvenSense upon written request by InvenSense or upon
termination of this Agreement.

6.  LIMITATION OF LIABILITY
TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT SHALL INVENSENSE OR ANY OF
INVENSENSE'S LICENSORS HAVE ANY LIABILITY FOR ANY INDIRECT, INCIDENTAL,
SPECIAL, OR CONSEQUENTIAL DAMAGES, HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER FOR BREACH OF CONTRACT, TORT (INCLUDING NEGLIGENCE) OR
OTHERWISE, ARISING OUT OF THIS AGREEMENT, INCLUDING BUT NOT LIMITED TO LOSS
OF PROFITS, EVEN IF SUCH PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
DAMAGES. IN NO EVENT WILL INVENSENSE'S LIABILITY WHETHER IN CONTRACT, TORT
(INCLUDING NEGLIGENCE), OR OTHERWISE, EXCEED THE AMOUNT PAID BY LICENSEE FOR
SOFTWARE UNDER THIS AGREEMENT.  THESE LIMITATIONS SHALL APPLY NOTWITHSTANDING
ANY FAILURE OF ESSENTIAL PURPOSE OF ANY LIMITED REMEDY.

7.  MISCELLANEOUS

7.1.    Export Regulations. YOU UNDERSTAND AND AGREE THAT THE SOFTWARE IS
SUBJECT TO UNITED STATES AND OTHER APPLICABLE EXPORT-RELATED LAWS AND
REGULATIONS AND THAT YOU MAY NOT EXPORT, RE-EXPORT OR TRANSFER THE SOFTWARE
OR ANY DIRECT PRODUCT OF THE SOFTWARE EXCEPT AS PERMITTED UNDER THOSE LAWS.
WITHOUT LIMITING THE FOREGOING, EXPORT, RE-EXPORT OR TRANSFER OF THE SOFTWARE
TO CUBA, IRAN, NORTH KOREA, SUDAN AND SYRIA IS PROHIBITED.

7.2 Assignment. This Agreement shall be binding upon and inure to the
benefit of the parties and their respective successors and assigns, provided,
however that Licensee may not assign this Agreement or any rights or
obligation hereunder, directly or indirectly, by operation of law or
otherwise, without the prior written consent of InvenSense, and any such
attempted assignment shall be void.  Notwithstanding the foregoing, Licensee
may assign this Agreement to a successor to all or substantially all of its
business or assets to which this Agreement relates that is not a competitor
of InvenSense.

7.3.    Governing Law; Venue.  This Agreement shall be governed by the laws of
California without regard to any conflict-of-laws rules, and the United
Nations Convention on Contracts for the International Sale of Goods is hereby
excluded.  The sole jurisdiction and venue for actions related to the subject
matter hereof shall be the state and federal courts located in the County of
Orange, California, and both parties hereby consent to such jurisdiction and
venue.

7.4.    Severability.  All terms and provisions of this Agreement shall, if
possible, be construed in a manner which makes them valid, but in the event
any term or provision of this Agreement is found by a court of competent
jurisdiction to be illegal or unenforceable, the validity or enforceability
of the remainder of this Agreement shall not be affected if the illegal or
unenforceable provision does not materially affect the intent of this
Agreement.  If the illegal or unenforceable provision materially affects the
intent of the parties to this Agreement, this Agreement shall become
terminated.

7.5.    Equitable Relief.  Licensee hereby acknowledges that its breach of this
Agreement would cause irreparable harm and significant injury to InvenSense
that may be difficult to ascertain and that a remedy at law would be
inadequate.  Accordingly, Licensee agrees that InvenSense shall have the right
to seek and obtain immediate injunctive relief to enforce obligations under
the Agreement in addition to any other rights and remedies it may have.

7.6.    Waiver.  The waiver of, or failure to enforce, any breach or default
hereunder shall not constitute the waiver of any other or subsequent breach
or default.

7.7.    Entire Agreement.  This Agreement sets forth the entire Agreement
between the parties and supersedes any and all prior proposals, agreements
and representations between them, whether written or oral concerning the
Software.  This Agreement may be changed only by mutual agreement of the
parties in writing.

