Taken from http://www.adaptec.com/adapteccom/templates/driverdetail.aspx?NRMODE=Published&NRNODEGUID=%7b8AF9FA1B-5BBC-46D3-9A6A-4D416EB5560D%7d

ADAPTEC, INC.
DOWNLOADABLE SOFTWARE LICENSE

This License is granted by Adaptec, Inc., referred to in this License as
"ADAPTEC" or "we" or "us." ADAPTEC 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:
Adaptec, Inc.
Legal Department
691 South Milpitas Boulevard
Milpitas, California 95035
