This License is granted by Microsemi Corporation, referred to in this License
as "PMC-Sierra" or "ADAPTEC Inc" or "ADAPTEC" or "we" or "us." Microsemi
reserves the right to record all activities and to use any information
obtained in accordance with the privacy policy which you can access below.

Directions to Obtain Your File:

CAREFULLY READ THE FOLLOWING TERMS AND CONDITIONS AS WELL AS THE EXPORT
COMPLIANCE REQUIREMENTS SET OUT BELOW. YOU MUST ANSWER THE REQUIRED QUESTION
TRUTHFULLY TO LET US KNOW WHETHER YOU HAVE READ AND UNDERSTOOD THE TERMS AND
CONDITIONS AND EXPORT COMPLIANCE REQUIREMENTS AND WHETHER YOU AGREE TO COMPLY.
YOU MUST CLICK A FURTHER BUTTON TO CONFIRM YOUR ANSWER AND IF YOU ANSWER IN
THE AFFIRMATIVE, A BINDING LICENSE AGREEMENT ("LICENSE") WILL BE CONCLUDED
BETWEEN US. YOU MAY THEN PROCEED TO DOWNLOAD THE SOFTWARE.

IF YOU DO NOT AGREE TO THESE TERMS, CONDITIONS, AND EXPORT COMPLIANCE
REQUIREMENTS THEN DO NOT DOWNLOAD THE SOFTWARE. IF YOU WISH TO CANCEL THIS
LICENSE AT ANY TIME YOU MAY DO SO BY DESTROYING ALL COPIES AND PARTIAL COPIES
OF THE SOFTWARE WHICH YOU HAVE DOWNLOADED.

YOU ALSO AGREE THAT YOU HAVE ALL NECESSARY INFORMATION IN ORDER TO ENTER INTO
THIS LICENSE WHETHER UNDER AN APPLICABLE EUROPEAN E-COMMERCE DIRECTIVE OR
OTHERWISE. IF YOU DO NOT AGREE TO THESE TERMS, CONDITIONS, AND REQUIREMENTS,
DO NOT DOWNLOAD ANY FILES.

Please retain a copy of the License for your files or you may contact
ADAPTEC's Legal Department at the address listed below for a further copy.
This license may be concluded in English or the language in which it is
drafted by ADAPTEC and appears to you online, as applicable. If you are a
consumer residing in Europe (a "European Consumer") then this License shall
not affect your statutory rights under the local laws in Europe.

This License grants you a non-exclusive license to use the ADAPTEC Software
and related documentation ("Software") on the following terms, conditions, and
export compliance requirements:

If you are NOT an individual consumer residing in Europe then the following
terms, conditions and export compliance requirements apply and are a part of
your license: ALL SECTIONS EXCEPT AS SPECIFIED HEREIN.

If you are an individual consumer residing in Europe ("European Consumer")
then the following terms, conditions and export compliance requirements apply
and are made part of your License: 1, 2, 3, 4, applicable parts of 6, 7, 9 and
the first paragraph of export compliance. IF YOU ARE A EUROPEAN CONSUMER THIS
LICENSE SHALL NOT AFFECT YOUR RIGHTS UNDER THE STATUTORY LAWS OF EUROPE.

 1. Your right to use the Software.You may use the Software in machine
    readable form (i.e. the form you download from us) within a single working
    location. You may copy the Software in the same form solely for back-up
    purposes or use within a single working location. You must reproduce
    ADAPTEC's copyright notice and proprietary legends. These requirements
    apply to European Consumers.
 2. Restrictions. This Software contains trade secrets and in order to protect
    them you may not: (1) distribute copies of the Software in any manner,
    including, but not limited to, distribution through web site posting; (2)
    decompile, reverse engineer, disassemble, or otherwise reduce the Software
    to a human perceivable form; (3) MODIFY, ADAPT OR TRANSLATE THE SOFTWARE
    INTO ANY OTHER FORM; (4) RENT, LEASE, LOAN, RESELL FOR PROFIT, OR CREATE
    DERIVATIVE WORKS BASED UPON THE SOFTWARE OR ANY PART OF IT. These
    requirements apply to European Consumers.
 3. Ownership. The Software is copyrighted by, proprietary to and a trade
    secret of ADAPTEC. ADAPTEC retains the title, ownership and intellectual
    property rights in and to the Software and all subsequent copies
    regardless of the form or media. The Software is protected by the
    copyright laws of the United States, the European Union, and international
    copyright treaties. This License is not a sale of the Software. These
    terms apply to European consumers.
 4. Termination. This License is effective until terminated. This License will
    terminate automatically without notice if you fail to comply with any of
    the provisions. Upon termination you shall destroy all copies of the
    Software including any partial copies. This provision applies to European
    Consumers.
 5. Disclaimer of Warranty. IF YOU ARE A EUROPEAN CONSUMER THEN THIS SECTION 5
    DOES NOT APPLY TO YOU AND DOES NOT FORM PART OF YOUR LICENSE WITH US.
    PROCEED TO SECTION 6. THE SOFTWARE IS LICENSED TO YOU "AS IS." YOU ACCEPT
    ALL RISKS WHICH MAY ARISE FROM THE DOWNLOADING OF THE SOFTWARE, INCLUDING
    BUT NOT LIMITED TO ERRORS IN TRANSMISSION OR CORRUPTION OF EXISTING DATA
    OR SOFTWARE. ADAPTEC MAKES NO WARRANTIES, EXPRESS OR IMPLIED, AND
    SPECIFICALLY DISCLAIMS ANY WARRANTY OF NON INFRINGEMENT OF THIRD PARTIES'
    RIGHTS, WARRANTIES OF SATISFACTORY QUALITY AND OF FITNESS FOR A PARTICULAR
    PURPOSE. Some states do not allow the exclusion of implied warranties or
    limitations of how long an implied warranty may last, so the above
    exclusion may not apply to you. You may also have other rights which vary
    from state to state.
 6. Limitation of Liability. FOR EUROPEAN CONSUMERS: WE WILL NOT BE LIABLE TO
    YOU WHERE YOU SUFFER LOSS WHICH WAS NOT FORESEEABLE TO YOU AND TO US WHEN
    YOU DOWNLOADED THE SOFTWARE (EVEN IF IT RESULTS FROM OUR FAILURE TO COMPLY
    WITH THIS LICENSE OR OUR NEGLIGENCE); WHERE YOU SUFFER ANY BUSINESS LOSS
    INCLUDING LOSS OF REVENUE, PROFITS OR ANTICIPATED SAVINGS (WHETHER THOSE
    LOSSES ARE THE DIRECT OR INDIRECT RESULT OF OUR DEFAULT); OR WHERE YOUR
    LOSS DOES NOT RESULT FROM OUR FAILURE TO COMPLY WITH THIS LICENSE OR OUR
    NEGLIGENCE. THE SOFTWARE HAS BEEN MADE AVAILABLE TO YOU FREE OF CHARGE.
    YOU MAY AT ANY TIME DOWNLOAD A FURTHER COPY OF THE SOFTWARE FREE OF CHARGE
    TO REPLACE YOUR ORIGINAL COPY OF THE SOFTWARE (CONSEQUENTLY, WE AND OUR
    SUPPLIERS WILL ONLY BE LIABLE TO YOU UP TO A MAXIMUM TOTAL LIMIT OF TWO
    THOUSAND DOLLARS U.S. OR ITS EURO EQUIVALENT AT THE TIME A CLAIM IS MADE).
    OUR MAXIMUM FINANCIAL RESPONSIBILITY TO YOU AND THAT OF OUR SUPPLIERS WILL
    NOT EXCEED THIS LIMIT EVEN IF THE ACTUAL LOSS YOU SUFFER IS MORE THAN
    THAT. HOWEVER, NOTHING IN THIS LICENSE SHALL RESTRICT ANY PARTY'S
    LIABILITY FOR FRAUD, DEATH OR PERSONAL INJURY ARISING FROM ITS NEGLIGENCE
    OR FOR FRAUD OR ANY FRAUDULENT MISREPRESENTATION.

    ALL OTHERS DOWNLOADING THE SOFTWARE: THE SOFTWARE IS PROVIDED FREE OF
    CHARGE TO YOU, THEREFORE UNDER NO CIRCUMSTANCES EXCEPT AS DESCRIBED HEREIN
    AND UNDER NO LEGAL THEORY, TORT (INCLUDING NEGLIGENCE), CONTRACT, OR
    OTHERWISE, SHALL ADAPTEC OR ITS SUPPLIERS OR RESELLERS BE LIABLE TO YOU OR
    ANY OTHER PERSON FOR ANY ECONOMIC LOSS (INCLUDING LOSS OF PROFIT) OR FOR
    ANY LOSS OF DATA, LOSS OF BUSINESS, LOSS OF GOODWILL, LOSS OF ANTICIPATED
    SAVINGS (IN EACH CASE WHETHER DIRECT OR INDIRECT) OR FOR ANY OTHER DIRECT
    OR INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY
    CHARACTER EVEN IF ADAPTEC SHALL HAVE BEEN ADVISED OF THE POSSIBILITY OF
    SUCH DAMAGES. HOWEVER, NOTHING IN THIS LICENSE SHALL RESTRICT ANY PARTY'S
    LIABILITY FOR FRAUD, DEATH OR PERSONAL INJURY ARISING FROM ITS NEGLIGENCE
    OR FOR FRAUD OR ANY FRAUDULENT MISREPRESENTATION.
 7. Export. By downloading, you acknowledge that the laws and regulations of
    the United States and relevant countries within the European Union,
    restrict the export and re-export of the Software. Further, you agree that
    you will not export or re-export the Software or media in any form without
    the appropriate United States and foreign government approval. If you are
    a European Consumer you must not export Software outside the country in
    which you download it without our prior written permission. (See below for
    details on Export Compliance Requirements.)
 8. U.S. Government Restricted Rights. IF YOU ARE A EUROPEAN CONSUMER THEN
    THIS CLAUSE WILL NOT APPLY TO YOU AND DOES NOT FORM PART OF YOUR LICENSE
    AGREEMENT WITH US. PLEASE PROCEED TO SECTION 9. If the Software is
    acquired under the terms of a United States GSA contract, use,
    reproduction or disclosure is subject to the restrictions set forth in the
    applicable ADP Schedule contract. If the Software is acquired under the
    terms of a DoD or civilian agency contract, use, duplication or disclosure
    by the Government is subject to the restrictions of this License in
    accordance with 48 C.F.R. 12.212 of the Federal Acquisition Regulations
    and its successors and 48 C.F.R. 227.7202-1 of the DoD FAR Supplement and
    its successors. (See below for details on Export Compliance Requirements.)
 9. General. California residents entered into and to be performed within
    California, except as governed by Federal law. Should any provision of
    this License be declared unenforceable in any jurisdiction, then such
    provision shall be deemed to be severable from this License and shall not
    affect the remainder hereof. All rights in the Software not specifically
    granted in this License are reserved by Adaptec.

EXPORT COMPLIANCE REQUIREMENTS

Export of any information from the Adaptec web site (including Confidential
Information obtained through Adaptec Access) outside of the United States is
subject to all U.S. export control laws. You will abide by such laws and also
to the provision of the U.S. Export-Re-export Requirements and Enhanced
Proliferation Control Initiative set forth here. You and your organization
will not sell, license, or otherwise provide or ship Adaptec products or
technical data (or the direct product thereof) for export or re-export to the
embargoed or restricted* countries listed below:

  Afghanistan (Taliban controlled area), Cuba, Iran, Iraq, North Korea*,
  Sudan, and Syria*

You agree not to transfer, export or re-export Adaptec products, technology or
software to your customers or any intermediate entity in the chain of supply
if our products will be used in the design, development, production,
stockpiling or use of missiles, chemical or biological weapons or for nuclear
end uses without obtaining prior authorization from the U.S. Government.

You also agree that unless you receive prior authorization from the U.S.
Department of Commerce, you shall not transfer, export or re-export, directly
or indirectly, any Adaptec technology or software (or the direct product of
such technology or software or any part thereof, or any process or service
which is the direct product of such technology or software) to any Sanctioned
and/or Embargoed entity listed on:

 Bureau of Industry and Security's Lists to Check

 If you have any questions concerning this License, contact:

  Microsemi Corporation
  Legal Department
  1380 Bordeaux Drive
  Sunnyvale, CA 94089
  Phone: (408) 239-8000
