                           POV-Ray Licence Agreement
                           GENERAL LICENSE AGREEMENT
                               FOR PERSONAL USE
                  Persistence of Vision Ray Tracer (POV-Ray)
               Version 3.6 License and Terms & Conditions of Use
                          version of 1 February 2005
                         (also known as POVLEGAL.DOC)

Please read through the terms and conditions of this license carefully. This
license is a binding legal agreement between you, the 'User' (an individual
or single entity) and Persistence of Vision Raytracer Pty. Ltd. ACN 105 891
870 (herein also referred to as the "Company"), a company incorporated in the
state of Victoria, Australia, for the product known as the "Persistence of
Vision Ray Tracer", also referred to herein as 'POV-Ray'.

YOUR ATTENTION IS PARTICULARLY DRAWN TO THE DISCLAIMER OF WARRANTY AND NO
LIABILITY AND INDEMNITY PROVISIONS. TO USE THE PERSISTENCE OF VISION RAY
TRACER ("POV-RAY") YOU MUST AGREE TO BE BOUND BY THE TERMS AND CONDITIONS SET
OUT IN THIS DOCUMENT. IF YOU DO NOT AGREE TO ALL THE TERMS AND CONDITIONS OF
USE OF POV-RAY SET OUT IN THIS LICENSE AGREEMENT, OR IF SUCH TERMS AND
CONDITIONS ARE NOT BINDING ON YOU IN YOUR JURISDICTION, THEN YOU MAY NOT USE
POV-RAY IN ANY MANNER. THIS GENERAL LICENSE AGREEMENT MUST ACCOMPANY ALL
POV-RAY FILES WHETHER IN THEIR OFFICIAL OR CUSTOM VERSION FORM. IT MAY NOT BE
REMOVED OR MODIFIED. THIS GENERAL LICENSE AGREEMENT GOVERNS THE USE OF
POV-RAY WORLDWIDE. THIS DOCUMENT SUPERSEDES AND REPLACES ALL PREVIOUS GENERAL
LICENSES.

INTRODUCTION

This document pertains to the use of the Persistence of Vision Ray Tracer
(also known as POV-Ray). It applies to all POV-Ray program source files,
executable (binary) files, scene files, documentation files, help files,
bitmaps and other POV-Ray files contained in official Company archives,
whether in full or any part thereof, and are herein referred to as the
"Software". The Company reserves the right to revise these rules in future
versions and to make additional rules to address new circumstances at any
time. Such rules, when made, will be posted in a revised license file, the
latest version of which is available from the Company website at
http://www.povray.org/povlegal.html.

USAGE PROVISIONS

Subject to the terms and conditions of this agreement, permission is granted
to the User to use the Software and its associated files to create and render
images. The creator of a scene file retains all rights to any scene files
they create, and any images generated by the Software from them. Subject to
the other terms of this license, the User is permitted to use the Software in
a profit-making enterprise, provided such profit arises primarily from use of
the Software and not from distribution of the Software or a work including
the Software in whole or part.

Please refer to http://www.povray.org/povlegal.html for licenses covering
distribution of the Software and works including the Software.

The User is also granted the right to use the scene files, fonts, bitmaps,
and include files distributed in the INCLUDE and SCENES\INCDEMO sub-
directories of the Software in their own scenes. Such permission does not
extend to any other files in the SCENES directory or its sub-directories. The
SCENES files are for the User's enjoyment and education but may not be the
basis of any derivative works unless the file in question explicitly grants
permission to do such.

This licence does not grant any right of re-distribution or use in any manner
other than the above. The Company has separate license documents that apply
to other uses (such as re-distribution via the internet or on CD) ; please
visit http://www.povray.org/povlegal.html for links to these. In particular
you are advised that the sale, lease, or rental of the Software in any form
without written authority from the Company is explicitly prohibited.

Notwithstanding anything in the the balance of this licence agreement,
nothing in this licence agreement permits the installation or use of the
Software in conjunction with any product (including software) produced
or distributed by any party who is, or has been, in violation of this
licence agreement or of the distribution licence
  (http://www.povray.org/distribution-license.html)
(or any earlier or later versions of those documents) unless:

   a. the Company has explicitly released that party in writing from the
      consequences of their non compliance; or
   b. both of the following are true:
         i. the installation or use of the Software is without the User
            being aware of the abovementioned violation; and
        ii. the installation or use of the Software is not a result (whether
            direct or indirect) of any request or action of the abovementioned
            party (or any of its products), any agent of that party (or any of
            their products), or any person(s) involved in supplying any such
            product to the User.

COPYRIGHT

Copyright © 1991-2003, Persistence of Vision Team.
Copyright © 2003-2004, Persistence of Vision Raytracer Pty. Ltd.
Windows version Copyright © 1996-2003, Christopher Cason.

Copyright subsists in this Software which is protected by Australian and
international copyright laws. The Software is NOT PUBLIC DOMAIN.

Nothing in this agreement shall give you any rights in respect of the
intellectual property of the Company and you acknowledge that you do not
acquire any rights in respect of such intellectual property rights. You
acknowledge that the Software is the valuable intellectual property of the
Company and that if you use, modify or distribute the Software for
unauthorized purposes or in an unauthorized manner (or cause or allow the
forgoing to occur), you will be liable to the Company for any damages it may
suffer (and which you acknowledge it may suffer) as well as statutory damages
to the maximum extent permitted by law and also that you may be liable to
criminal prosecution. You indemnify the Company and the authors of the
Software for every single consequence flowing from the aforementioned events.

DISCLAIMER OF WARRANTY

This Software is provided on an "AS IS" basis, without warranty of any kind,
express or implied, including without limitation, any implied warranties of
merchantability, fitness for a particular purpose and non-infringement of
intellectual property of any third party. This Software has inherent
limitations including design faults and programming bugs. The entire risk as
to the quality and performance of the Software is borne by you, and it is
your responsibility to ensure that it does what you require it to do prior to
using it for any purpose (other than testing it), and prior to distributing
it in any fashion. Should the Software prove defective, you agree that you
alone assume the entire cost resulting in any way from such defect.

This disclaimer of warranty constitutes an essential and material term of
this agreement. If you do not or cannot accept this, or if it is
unenforceable in your jurisdiction, then you may not use the Software in any
manner.

NO LIABILITY

When you use the Software you acknowledge and accept that you do so at your
sole risk. You agree that under no circumstances shall you have any claim
against the Company or anyone associated directly or indirectly with the
Company whether as employee, subcontractor, agent, representative,
consultant, licensee or otherwise ("Company Associates") for any loss,
damages, harm, injury, expense, work stoppage, loss of business information,
business interruption, computer failure or malfunction which may be suffered
by you or by any third party from any cause whatsoever, howsoever arising, in
connection with your use or distribution of the Software even where the
Company were aware, or ought to have been aware, of the potential of such
loss. Damages referred to above shall include direct, indirect, general,
special, incidental, punitive and/or consequential.

This disclaimer of liability constitutes an essential and material term of
this agreement. If you do not or cannot accept this, or if it is
unenforceable in your jurisdiction, then you may not use the Software.

INDEMNITY

You indemnify the Company and Company Associates and hold them harmless
against any claims which may arise from any loss, damages, harm, injury,
expense, work stoppage, loss of business information, business interruption,
computer failure or malfunction, which may be suffered by you or any other
party whatsoever as a consequence of any act or omission of the Company
and/or Company Associates, whether negligent or not, arising out of your use
and/or distribution of the Software, or from any other cause whatsoever,
howsoever arising, in connection with the Software. These provisions are
binding on your estate, heirs, executors, legal successors, administrators,
parents and/or guardians.

This indemnification constitutes an essential and material term of this
agreement. If you do not or cannot accept this, or if it is unenforceable in
your jurisdiction, then you may not use the Software.

HIGH RISK ACTIVITIES

This Software and the output produced by this Software is not fault-tolerant
and is not designed, manufactured or intended for use as on-line control
equipment in hazardous environments requiring fail-safe performance, in which
the failure of the Software could lead or directly or indirectly to death,
personal injury, or severe physical or environmental damage ("High Risk
Activities"). The Company specifically disclaims any express or implied
warranty of fitness for High Risk Activities and explicitly prohibits the use
of the Software for such purposes.

CRYPTOGRAPHIC SIGNING OF DOCUMENTS

Changes to this Agreement and documents issued under its authority may be
cryptographically signed by the POV-Ray Team Co-ordinator's private PGP key.
In the absence of evidence to the contrary, such documents shall be considered,
under the terms of this Agreement, to be authentic provided the signature is
valid. The master copy of this Agreement at http://www.povray.org/povlegal.html
will also be signed by the current version of the team-coordinator's key.

The public key for the POV-Ray Team-coordinator can be retrieved from the
location https://secure.povray.org/keys/. The current fingerprint for it is
B4DD 932A C080 C3A3 6EA2 9952 DB04 4A74 9901 4518.

MISCELLANEOUS

This Agreement constitutes the complete agreement concerning this license.
Any changes to this agreement must be in writing and may take the form of
notifications by the Company to you, or through posting notifications on the
Company website. THE USE OF THIS SOFTWARE BY ANY PERSON OR ENTITY IS
EXPRESSLY MADE CONDITIONAL ON THEIR ACCEPTANCE OF THE TERMS SET FORTH HEREIN.

Except where explicitly stated otherwise herein, if any provision of this
Agreement is found to be invalid or unenforceable, the invalidity or
unenforceability of such provision shall not affect the other provisions of
this agreement, and all provisions not affected by such invalidity or
unenforceability shall remain in full force and effect. In such cases you
agree to attempt to substitute for each invalid or unenforceable provision a
valid or enforceable provision which achieves to the greatest extent
possible, the objectives and intention of the invalid or unenforceable
provision. The validity and interpretation of this agreement will be governed
by the laws of Australia in the state of Victoria (except for conflict of law
provisions).

CONTACT INFORMATION

License inquiries can be made via email; please use the following address
(but see below prior to emailing) :

  team-coord-[three-letter month]-[four-digit year]@povray.org

for example, team-coord-jun-2004@povray.org should be used if at the time you
send the email it is the month of June 2004. The changing email addresses are
necessary to combat spam and email viruses. Old email addresses may be deleted
at our discretion.

Note that the above address may change for reasons other than that given above;
please check the version of this document at http://www.povray.org/povlegal.html
for the current address. Note that your inability or failure to contact us
for any reason is not an excuse for violating this licence.

Do NOT send any attachments of any sort other than by prior arrangement.
EMAIL MESSAGES INCLUDING ATTACHMENTS WILL BE DELETED UNREAD.

The following postal address is only for official license business. Please
note that it is preferred that initial queries about licensing be made via
email ; postal mail should only be used when email is not possible, or when
written documents are being exchanged by prior arrangement.

 Persistence of Vision Raytracer Pty. Ltd.
 PO Box 407
 Williamstown,
 Victoria 3016
 Australia
