   Virtual Paper

End User License Agreement for pstotext Software

   GRANT.
          Subject to the provisions contained herein, Digital Equipment
          Corporation ("Digital") hereby grants you a non-exclusive
          license to use its accompanying proprietary software product
          and associated documentation ("Software") free of charge
          pursuant to the terms and conditions of this Agreement. You are
          not entitled to support or telephone assistance in connection
          with your use of the Software.

   SOFTWARE AND DOCUMENTATION.
          Digital shall furnish the Software to you electronically or on
          media in source code form. This license does not grant you any
          right to any enhancement or update to the Software and
          Documentation.

   USE RESTRICTIONS.
          You may use, copy, modify, and distribute the Software in
          source code or object code form, subject to the following
          conditions:

          + If the Software is modified, any Software containing
            modifications must prominently state in the modified product
            or documentation (i) that it has been modified, (ii) the
            identity of the person or entity that made the modifications,
            and (iii) the date the modifications were made.
          + Each copy of the Software made by you shall be subject to the
            terms of this Agreement and shall contain all of Digital's
            notices regarding copyrights, trademarks and other
            proprietary rights as contained in the Software originally
            provided to you.
          + The Software may not be transferred to any third party unless
            such third party receives a copy of this Agreement and agrees
            to be bound by all of its terms and conditions.

   TITLE.
          Title, ownership rights, and intellectual property rights in
          and to the Software shall remain in Digital and/or its
          suppliers. The Software is protected by the copyright laws of
          the United States and international copyright treaties.

   CONTENT.
          Title, ownership rights, and intellectual property rights in
          and to the content accessed through the Software is the
          property of the applicable content owner and may be protected
          by applicable copyright or other law. This License gives you no
          rights to such content.

   DISCLAIMER OF WARRANTY.
          Since the Software is provided free of charge, the Software is
          provided on an "AS IS" basis, without warranty of any kind,
          including without limitation the warranties of merchantability,
          fitness for a particular purpose and non-infringement. The
          entire risk as to the quality and performance of the Software
          is borne by you. Should the Software prove defective, you, and
          not Digital assume the entire cost of any service and repair.
          This disclaimer of warranty constitutes an essential part of
          the agreement.

   LIMITATION OF LIABILITY.
          UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, TORT,
          CONTRACT, OR OTHERWISE, SHALL DIGITAL OR ITS SUPPLIERS
          RESELLERS, OR LICENSEES BE LIABLE TO YOU OR ANY OTHER PERSON
          FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL
          DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES
          FOR LOSS OF GOODWILL, STOPPAGE, COMPUTER FAILURE OR
          MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES,
          EVEN IF DIGITAL SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF
          SUCH DAMAGES, OR FOR ANY CLAIM BY ANY OTHER PARTY.

   EXPORT CONTROLS.
          You may not download or otherwise export or reexport the
          Software or any underlying information or technology except in
          full compliance with all United States and other applicable
          laws and regulations. By downloading or using the Software, you
          are agreeing to the foregoing.

   TERMINATION.
          This Agreement shall automatically terminate upon failure by
          you to comply with its terms, in which case you shall
          immediately discontinue the use of the Software and shall
          within ten (10) days return to Digital or destroy all copies of
          the Software. You may also terminate this Agreement at any time
          by destroying the Software and all copies thereof.

   MISCELLANEOUS.
          This Agreement represents the complete and exclusive statement
          of the agreements concerning this license between the parties.
          It may be amended only by a writing executed by both parties.
          If any provision of this Agreement is held to be unenforceable
          for any reason, such provision shall be reformed only to the
          extent necessary to make it enforceable, and such decision
          shall not affect the enforceability (i) of such provision under
          other circumstances or (ii) of the remaining provisions hereof
          under all circumstances. Headings shall not be considered in
          interpreting this Agreement. This Agreement shall be governed
          by and construed under the laws of the Commonwealth of
          Massachusetts, except as governed by Federal law. This
          Agreement will not be governed by the United Nations Convention
          of Contracts for the International Sale of Goods, the
          application of which is hereby expressly excluded.

   U.S. Government Restricted Rights.
          Use, duplication or disclosure by the Government is subject to
          restrictions set forth in subparagraphs (a) through (d) of the
          Commercial Computer-Restricted Rights clause at FAR 52 227-19
          when applicable, or in subparagraph (c) (1) (ii) of the Rights
          in Technical Data and Computer Software clause at DFARS
          252.227-7013, and in similar clauses in the NASA FAR
          Supplement. Contractor/manufacturer is Digital Equipment
          Corporation.
     _________________________________________________________________


    [1]Andrew Birrell and [2]Paul McJones

   [3]Legal Statement [4]Privacy Statement

References

   1. http://www.research.digital.com/SRC/people/Andrew_Birrell/bio.html
   2. http://www.research.digital.com/SRC/people/Paul_McJones/bio.html
   3. http://www.compaq.com/legal.html
   4. http://www.compaq.com/privacy.html
