diff --git a/HasGP.cabal b/HasGP.cabal
new file mode 100644
--- /dev/null
+++ b/HasGP.cabal
@@ -0,0 +1,102 @@
+-- HasGP.cabal auto-generated by cabal init. For additional options,
+-- see
+-- http://www.haskell.org/cabal/release/cabal-latest/doc/users-guide/authors.html#pkg-descr.
+-- The name of the package.
+Name:                HasGP
+
+-- The package version. See the Haskell package versioning policy
+-- (http://www.haskell.org/haskellwiki/Package_versioning_policy) for
+-- standards guiding when and how versions should be incremented.
+Version:             0.1
+
+-- A short (one-line) description of the package.
+Synopsis:            A Haskell library for inference using Gaussian processes
+
+-- A longer description of the package.
+Description:         A Haskell library implementing algorithms for supervised learning, roughly corresponding to chapters 1 to 5 of "Gaussian Processes for Machine Learning" by Carl Rasmussen and Christopher Williams, The MIT Press 2006. In particular, algorithms are provides for regression and for two-class classification using either the Laplace or EP approximation.    
+
+-- URL for the project homepage or repository.
+Homepage:            http://www.cl.cam.ac.uk/~sbh11/HasGP
+
+-- The license under which the package is released.
+License:             GPL-3
+
+-- The file containing the license text.
+License-file:        LICENSE
+
+-- The package author(s).
+Author:              Sean B. Holden
+
+-- An email address to which users can send suggestions, bug reports,
+-- and patches.
+Maintainer:          sbh11@cl.cam.ac.uk
+
+-- A copyright notice.
+Copyright:           Copyright (C) 2011 Sean Holden
+
+Category:            AI, Classification, Datamining, Statistics
+
+Build-type:          Simple
+
+-- Extra files to be distributed with the package, such as examples or
+-- a README.
+Extra-source-files: README
+
+-- Constraint on the version of Cabal needed to build this package.
+Cabal-version:       >=1.6
+
+Stability:           Experimental
+
+Bug-reports:         sbh11@cl.cam.ac.uk
+
+Package-url:         http://www.cl.cam.ac.uk/~sbh11/HasGP/HasGP-0.1.tar.gz
+
+Tested-with:         GHC ==7.0.3
+
+Data-files:          *.txt
+
+Data-dir:            src/HasGP/Data/Files
+
+Library
+  -- Modules exported by the library.
+  Exposed-modules:     HasGP.Classification.EP.ClassificationEP, 
+                       HasGP.Classification.Laplace.ClassificationLaplace, 
+                       HasGP.Covariance.Basic, 
+                       HasGP.Covariance.SquaredExp, 
+                       HasGP.Covariance.SquaredExpARD, 
+                       HasGP.Data.BishopData, 
+                       HasGP.Data.Normalise, 
+                       HasGP.Data.RWData1, 
+                       HasGP.Demos.ClassificationDemo1, 
+                       HasGP.Demos.ClassificationDemo2, 
+                       HasGP.Demos.RegressionDemo1, 
+                       HasGP.Likelihood.Basic, 
+                       HasGP.Likelihood.LogLogistic, 
+                       HasGP.Likelihood.LogPhi, 
+                       HasGP.Parsers.SvmLight, 
+                       HasGP.Regression.Regression, 
+                       HasGP.Support.Functions, 
+                       HasGP.Support.Iterate, 
+                       HasGP.Support.Linear, 
+                       HasGP.Support.MatrixFunction, 
+                       HasGP.Support.Random, 
+                       HasGP.Support.Solve, 
+                       HasGP.Types.MainTypes
+  
+  -- Packages needed in order to build this package.
+  Build-depends: base == 4.*,
+                 haskell98 == 1.*,
+                 parsec == 3.*,
+                 random == 1.*,
+                 mtl == 2.*,
+                 hmatrix == 0.12.*,
+                 hmatrix-special == 0.1.*
+  
+  hs-source-dirs: src
+
+  -- Modules not exported by this package.
+  -- Other-modules:       
+  
+  -- Extra tools (e.g. alex, hsc2hs, ...) needed to build the source.
+  -- Build-tools:         
+  
diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,675 @@
+              GNU GENERAL PUBLIC LICENSE
+                Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                     Preamble
+
+  The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+  The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works.  By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users.  We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors.  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+  To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights.  Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received.  You must make sure that they, too, receive
+or can get the source code.  And you must show them these terms so they
+know their rights.
+
+  Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+  For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software.  For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+  Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so.  This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software.  The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable.  Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products.  If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+  Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary.  To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                TERMS AND CONDITIONS
+
+  0. Definitions.
+
+  "This License" refers to version 3 of the GNU General Public License.
+
+  "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+ 
+  "The Program" refers to any copyrightable work licensed under this
+License.  Each licensee is addressed as "you".  "Licensees" and
+"recipients" may be individuals or organizations.
+
+  To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy.  The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+  A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+  To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy.  Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+  To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies.  Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+  An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License.  If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+  1. Source Code.
+
+  The "source code" for a work means the preferred form of the work
+for making modifications to it.  "Object code" means any non-source
+form of a work.
+
+  A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+  The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form.  A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+  The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities.  However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work.  For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+  The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+  The Corresponding Source for a work in source code form is that
+same work.
+
+  2. Basic Permissions.
+
+  All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met.  This License explicitly affirms your unlimited
+permission to run the unmodified Program.  The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work.  This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+  You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force.  You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright.  Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+  Conveying under any other circumstances is permitted solely under
+the conditions stated below.  Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+  No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+  When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+  4. Conveying Verbatim Copies.
+
+  You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+  You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+  5. Conveying Modified Source Versions.
+
+  You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+    a) The work must carry prominent notices stating that you modified
+    it, and giving a relevant date.
+
+    b) The work must carry prominent notices stating that it is
+    released under this License and any conditions added under section
+    7.  This requirement modifies the requirement in section 4 to
+    "keep intact all notices".
+
+    c) You must license the entire work, as a whole, under this
+    License to anyone who comes into possession of a copy.  This
+    License will therefore apply, along with any applicable section 7
+    additional terms, to the whole of the work, and all its parts,
+    regardless of how they are packaged.  This License gives no
+    permission to license the work in any other way, but it does not
+    invalidate such permission if you have separately received it.
+
+    d) If the work has interactive user interfaces, each must display
+    Appropriate Legal Notices; however, if the Program has interactive
+    interfaces that do not display Appropriate Legal Notices, your
+    work need not make them do so.
+
+  A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit.  Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+  6. Conveying Non-Source Forms.
+
+  You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+    a) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by the
+    Corresponding Source fixed on a durable physical medium
+    customarily used for software interchange.
+
+    b) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by a
+    written offer, valid for at least three years and valid for as
+    long as you offer spare parts or customer support for that product
+    model, to give anyone who possesses the object code either (1) a
+    copy of the Corresponding Source for all the software in the
+    product that is covered by this License, on a durable physical
+    medium customarily used for software interchange, for a price no
+    more than your reasonable cost of physically performing this
+    conveying of source, or (2) access to copy the
+    Corresponding Source from a network server at no charge.
+
+    c) Convey individual copies of the object code with a copy of the
+    written offer to provide the Corresponding Source.  This
+    alternative is allowed only occasionally and noncommercially, and
+    only if you received the object code with such an offer, in accord
+    with subsection 6b.
+
+    d) Convey the object code by offering access from a designated
+    place (gratis or for a charge), and offer equivalent access to the
+    Corresponding Source in the same way through the same place at no
+    further charge.  You need not require recipients to copy the
+    Corresponding Source along with the object code.  If the place to
+    copy the object code is a network server, the Corresponding Source
+    may be on a different server (operated by you or a third party)
+    that supports equivalent copying facilities, provided you maintain
+    clear directions next to the object code saying where to find the
+    Corresponding Source.  Regardless of what server hosts the
+    Corresponding Source, you remain obligated to ensure that it is
+    available for as long as needed to satisfy these requirements.
+
+    e) Convey the object code using peer-to-peer transmission, provided
+    you inform other peers where the object code and Corresponding
+    Source of the work are being offered to the general public at no
+    charge under subsection 6d.
+
+  A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+  A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling.  In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage.  For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product.  A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+  "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source.  The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+  If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information.  But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+  The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed.  Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+  Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+  7. Additional Terms.
+
+  "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law.  If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+  When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it.  (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.)  You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+  Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+    a) Disclaiming warranty or limiting liability differently from the
+    terms of sections 15 and 16 of this License; or
+
+    b) Requiring preservation of specified reasonable legal notices or
+    author attributions in that material or in the Appropriate Legal
+    Notices displayed by works containing it; or
+
+    c) Prohibiting misrepresentation of the origin of that material, or
+    requiring that modified versions of such material be marked in
+    reasonable ways as different from the original version; or
+
+    d) Limiting the use for publicity purposes of names of licensors or
+    authors of the material; or
+
+    e) Declining to grant rights under trademark law for use of some
+    trade names, trademarks, or service marks; or
+
+    f) Requiring indemnification of licensors and authors of that
+    material by anyone who conveys the material (or modified versions of
+    it) with contractual assumptions of liability to the recipient, for
+    any liability that these contractual assumptions directly impose on
+    those licensors and authors.
+
+  All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10.  If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term.  If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+  If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+  Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+  8. Termination.
+
+  You may not propagate or modify a covered work except as expressly
+provided under this License.  Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+  However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+  Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+  Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License.  If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+  9. Acceptance Not Required for Having Copies.
+
+  You are not required to accept this License in order to receive or
+run a copy of the Program.  Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance.  However,
+nothing other than this License grants you permission to propagate or
+modify any covered work.  These actions infringe copyright if you do
+not accept this License.  Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+  10. Automatic Licensing of Downstream Recipients.
+
+  Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License.  You are not responsible
+for enforcing compliance by third parties with this License.
+
+  An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations.  If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+  You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License.  For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+  11. Patents.
+
+  A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based.  The
+work thus licensed is called the contributor's "contributor version".
+
+  A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version.  For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+  Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+  In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement).  To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+  If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients.  "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+  
+  If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+  A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License.  You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+  Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+  12. No Surrender of Others' Freedom.
+
+  If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all.  For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+  13. Use with the GNU Affero General Public License.
+
+  Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work.  The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+  14. Revised Versions of this License.
+
+  The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+  Each version is given a distinguishing version number.  If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation.  If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+  If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+  Later license versions may give you additional or different
+permissions.  However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+  15. Disclaimer of Warranty.
+
+  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. Limitation of Liability.
+
+  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+  17. Interpretation of Sections 15 and 16.
+
+  If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+              END OF TERMS AND CONDITIONS
+
+     How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+  If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+    <program>  Copyright (C) <year>  <name of author>
+    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+  You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<http://www.gnu.org/licenses/>.
+
+  The GNU General Public License does not permit incorporating your program
+into proprietary programs.  If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library.  If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.  But first, please read
+<http://www.gnu.org/philosophy/why-not-lgpl.html>.
+
diff --git a/README b/README
new file mode 100644
--- /dev/null
+++ b/README
@@ -0,0 +1,10 @@
+The HasGP package for Gaussian process inference in Haskell
+-----------------------------------------------------------
+
+Copyright (C) 2011 Sean Holden sbh11@cl.cam.ac.uk
+
+For a detailed description of how to install, use and modify this code 
+please download the User Manual from the project site at:
+
+http://www.cl.cam.ac.uk/~sbh11/HasGP/
+
diff --git a/Setup.hs b/Setup.hs
new file mode 100644
--- /dev/null
+++ b/Setup.hs
@@ -0,0 +1,2 @@
+import Distribution.Simple
+main = defaultMain
diff --git a/src/HasGP/Classification/EP/ClassificationEP.hs b/src/HasGP/Classification/EP/ClassificationEP.hs
new file mode 100644
--- /dev/null
+++ b/src/HasGP/Classification/EP/ClassificationEP.hs
@@ -0,0 +1,406 @@
+{- | ClassificationEP is a module in the HasGP Gaussian Process
+   library. It implements basic Gaussian Process Classification for two 
+   classes using the EP approximation. Targets should be +1/-1. 
+   
+   Copyright (C) 2011 Sean Holden. sbh11\@cl.cam.ac.uk.
+-}
+{- This file is part of HasGP.
+
+   HasGP is free software: you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
+
+   HasGP is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with HasGP.  If not, see <http://www.gnu.org/licenses/>.
+-}
+module HasGP.Classification.EP.ClassificationEP 
+   ( 
+     EPValue(eValue,siteState,count),
+     EPConvergenceTest,
+     EPSiteState,
+     EPState,
+     SiteOrder,
+     generateRandomSiteOrder,
+     generateFixedSiteOrder,
+     gpClassifierEPEvidence,
+     gpClassifierEPLearn,
+     gpClassifierEPPredict,
+     gpClassifierEPLogEvidence,
+     gpClassifierEPLogEvidenceList,
+     gpClassifierEPLogEvidenceVec
+   ) where 
+
+import Numeric.LinearAlgebra
+
+import Control.Monad.State    
+import System.Random
+
+import HasGP.Types.MainTypes
+import HasGP.Support.MatrixFunction
+import HasGP.Support.Linear
+import HasGP.Support.Functions
+import HasGP.Support.Solve
+import HasGP.Support.Iterate
+import HasGP.Support.Random
+import HasGP.Covariance.Basic
+import HasGP.Likelihood.Basic
+
+-- | A convergence test for EP usually depends on the evidence and 
+--   the number of iterations so far. This allows us to specify 
+--   completely arbitrary convergence tests.
+data EPValue = EPValue {
+      eValue::Double,
+      siteState::EPSiteState,
+      count::Int
+    }
+
+-- | By passing a function with this type we can specify arbitrary 
+--   convergence tests.   
+type EPConvergenceTest = (EPValue -> EPValue -> Bool)
+
+-- | When updating a single site at a time you keep track of var, 
+--   tauTilde, mu, nuTilde, TauMinus, and MuMinus.
+data EPSiteState = EPSiteState {
+     var::DMatrix,                  
+     tauTilde::DVector, 
+     mu::DVector, 
+     nuTilde::DVector,
+     tauMinus::DVector,
+     muMinus::DVector
+   }       
+
+-- | We hide the state used in performing EP using the state monad. 
+--   We need to include a random number generator and the number of 
+--   iterations.
+type EPState = (EPSiteState, StdGen, Int)
+
+-- | If we're updating sites in a random order then we need access to 
+--   the random number generator. 
+type SiteOrder = State EPState [Int]
+
+-- | Generates a basic start state for the sites, with var = covariance 
+--   matrix and all vectors = 0.
+generateInitialSiteState :: CovarianceMatrix  
+                         -> Int     -- ^ Number of sites
+                         -> EPSiteState
+generateInitialSiteState k n = EPSiteState k z1 z2 z3 z4 z5
+    where
+      z1 = constant 0.0 n
+      z2 = constant 0.0 n
+      z3 = constant 0.0 n
+      z4 = constant 0.0 n
+      z5 = constant 0.0 n
+
+-- | Updates for the EP version of Gaussian Process Classifiers.
+--   cavityParameters, marginalMoments and siteParameters 
+--   are successive parts of the update for a single site.
+cavityParameters :: Double -- ^ varI
+                 -> Double -- ^ tauTildeI
+                 -> Double -- ^ muI
+                 -> Double -- ^ nuTildeI
+                 -> (Double,Double)
+cavityParameters varI tauTildeI muI nuTildeI = (tauMinusI, nuMinusI)
+    where
+      varIInv = 1 / varI
+      tauMinusI = varIInv - tauTildeI 
+      nuMinusI = (varIInv * muI) - nuTildeI
+
+marginalMoments :: Double -- ^ muMinusI
+                -> Double -- ^ tI
+                -> Double -- ^ varMinusI
+                -> (Double,Double)
+marginalMoments muMinusI tI varMinusI    = (muHatI, varHatI)
+    where 
+      zI = (tI * muMinusI) / (sqrt (1 + varMinusI))
+      nopz = nOverPhi zI
+      muHatI = muMinusI + (((tI * varMinusI) / (sqrt (1 + varMinusI))) * nopz)
+      varHatI = varMinusI - 
+                ((((square varMinusI) / (1 + varMinusI)) * nopz) * (zI + nopz))
+
+siteParameters :: Double -- ^ tauTildeI
+               -> Double -- ^ varHatI
+               -> Double -- ^ tauMinusI
+               -> Double -- ^ muHatI
+               -> Double -- ^ nuMinusI
+               -> (Double,Double,Double)
+siteParameters tauTildeI varHatI tauMinusI muHatI nuMinusI = 
+    (deltaTauTilde, tauTildeINew, nuTildeINew)
+        where
+          deltaTauTilde = (1 / varHatI) - tauMinusI - tauTildeI
+          tauTildeINew = tauTildeI + deltaTauTilde
+          nuTildeINew = ((1 / varHatI) * muHatI) - nuMinusI
+
+-- | Do a complete update for site i.
+updateOneSite :: Targets -- ^ Labels
+              -> Int     -- ^ Number of sites
+              -> Int     -- ^ Site to update
+              -> EPSiteState
+              -> EPSiteState
+updateOneSite t n i (EPSiteState var tauTilde mu nuTilde oldTauMinus 
+                     oldMuMinus) = 
+    -- oldTauMinusI, oldMuMinus not used but need to be updated.
+    EPSiteState newVar newTauTilde newMu newNuTilde newTauMinus newMuMinus 
+        where      
+          -- hmatrix counts from 0 whereas I'm using 1.
+          i2 = i-1 
+          tauTildeI = (tauTilde @> i2)
+          varII = var @@> (i2,i2)
+          (tauMinusI, nuMinusI) = 
+              cavityParameters varII tauTildeI (mu @> i2) (nuTilde @> i2)
+          varMinusI = (1 / tauMinusI)
+          muMinusI = (nuMinusI / tauMinusI)
+          (muHatI, varHatI) = marginalMoments muMinusI (t @> i2) varMinusI
+          (deltaTauTilde, tauTildeINew, nuTildeINew) = 
+              siteParameters tauTildeI varHatI tauMinusI muHatI nuMinusI
+          newTauTilde = replaceInVector tauTilde (i2+1) tauTildeINew 
+          newNuTilde = replaceInVector nuTilde (i2+1) nuTildeINew
+          newTauMinus = replaceInVector oldTauMinus (i2+1) tauMinusI 
+          newMuMinus = replaceInVector oldMuMinus (i2+1) muMinusI
+          sI = subMatrix (0,i2) (n,1) var
+          newVar = var - (scale (deltaTauTilde / (1 + (deltaTauTilde * varII)))
+                          (sI <> (trans sI)))
+          newMu = flatten $ (newVar <> (asColumn newNuTilde))
+
+-- | Generate a random permutation. This is wrapped up in the state 
+--   transformer generateRandomSiteOrder.
+randomPermutation :: StdGen           -- ^ Random number generator
+                  -> Int              -- ^ Size of list required
+                  -> (StdGen, [Int])  -- ^ New generator and result.
+randomPermutation g n = rP g (n-1) [1..n] []
+    where
+      rP g' n' [] result = (g', result)
+      rP g' n' [x] result = (g', x:result)
+      rP g' n' xs result = rP newG (n' - 1) newXs (m:result)
+          where
+            (r, newG) = randomR (0, n') g'
+            m = xs !! r
+            newXs = filter (\x -> x /= m) xs 
+
+-- | We're often going to want to update sites in a random order. 
+--   So we need a state transformer that takes the current state (which 
+--   includes a random number generator) and produces a random permutation.
+generateRandomSiteOrder :: SiteOrder
+generateRandomSiteOrder = do 
+  (state, g, n) <- get
+  let (newG, p) = randomPermutation g (dim $ tauTilde state)
+  put (state, newG, n)
+  return p
+
+-- | For completeness: just in case you want to update sites in a 
+--   non-random manner, this state transformer does exactly that.
+generateFixedSiteOrder :: SiteOrder
+generateFixedSiteOrder = do
+  (state, g, n) <- get
+  return [1..(dim $ tauTilde state)]
+
+-- | Update all the sites in the order specified by a list of Ints
+updateAllSites :: Targets 
+               -> Int     -- ^ Number of sites
+               -> [Int]   -- ^ Sites to update
+               -> EPSiteState
+               -> EPSiteState
+updateAllSites t n [] state = state
+updateAllSites t n (s:ss) state = updateAllSites t n ss newState
+    where
+      newState = updateOneSite t n s state
+
+-- | Re-compute the approximation after updating all the sites.
+--   Outputs \Sigma and \mu.
+recomputeApproximation :: CovarianceMatrix
+                       -> Int     -- ^ Number of sites
+                       -> DVector -- ^ tauTilde
+                       -> DVector -- ^ nuTilde
+                       -> (DMatrix, DMatrix, DVector)
+recomputeApproximation k n tauTilde nuTilde = 
+  (l, finalVar, finalMu)
+    where
+      rootSTilde = mapVector sqrt tauTilde
+      l = trans $ chol ((ident n) + (abaDiagDiag rootSTilde k))
+      v = generalSolve lowerSolve l (preMultiply rootSTilde k) 
+      finalVar = k - ((trans v) <> v) 
+      finalMu = flatten $ finalVar <> (asColumn nuTilde) 
+
+-- | Compute the approximation to the log marginal likelihood.
+gpClassifierEPEvidence :: CovarianceMatrix 
+                       -> Targets 
+                       -> DMatrix -- ^ L matrix
+                       -> EPSiteState
+                       -> Double  -- ^ log marginal likelihood.
+gpClassifierEPEvidence k t l state = 
+    (terms1and4 + term3 + terms2and5)
+        where
+          tT = tauTilde state
+          nT = nuTilde state
+          tM = tauMinus state
+          mM = muMinus state
+          oneOverTauMinus = mapVector (1/) $ tM
+          sumLog = sum $ toList $ mapVector log $ takeDiag l
+          terms1and4 = 
+              (0.5 * (sum $ toList $ mapVector (log . (1+)) 
+                      (zipVectorWith (*) tT oneOverTauMinus))) - sumLog
+          term3 = 
+              sum $ toList $ 
+              mapVector logPhi (zipVectorWith (/) 
+                                (zipVectorWith (*) t mM) 
+                                (mapVector (sqrt . (1+)) oneOverTauMinus))
+          rootSTilde = diag $ mapVector sqrt tT
+          vM = generalSolve lowerSolve l 
+               (preMultiply (mapVector sqrt tT) k)
+          --      vM = generalSolve upperSolve (trans l) (rootSTilde <> k)    
+          invTPlusSTilde = 
+              diag $ mapVector (1/) $ tT + tM
+          part1 = 
+              0.5 * ((asRow nT) <> 
+                     (k - ((trans vM) <> vM) - invTPlusSTilde) <> 
+                     (asColumn nT))
+          part2 = 
+              0.5 * ((asRow mM) <> (diag tM) <> invTPlusSTilde <> 
+                     ((asColumn (zipVectorWith (*) tT mM)) - 
+                      (asColumn $ (scale 2 nT))))
+          terms2and5 = (part1 + part2) @@> (0,0)  
+
+-- | As we're hiding the state using the State monad, we make a state 
+--   transformer that uses updateAllSites and recomputeApproximation to 
+--   do a complete single update. This will make use of an arbitrary 
+--   state transformer to produce a list specifying the order to update 
+--   the sites in. The output is the l matrix produced when recomputing the 
+--   approximation.
+doOneUpdate :: CovarianceMatrix    
+            -> Targets            
+            -> SiteOrder           -- ^ Supplier of update order. 
+            -> State EPState EPValue
+doOneUpdate k t siteOrder = do
+  order <- siteOrder
+  (state,g,i) <- get
+  let sites = dim $ tauTilde state
+  let state' = updateAllSites t sites order state
+  let finalTT =  tauTilde state' 
+  let finalNT = nuTilde state'
+  let finalTM = tauMinus state'
+  let finalMM = muMinus state'
+  let (l, finalVar, finalMu) = recomputeApproximation k sites finalTT finalNT
+  let state'' = EPSiteState finalVar finalTT finalMu finalNT finalTM finalMM
+  put (state'', g, i+1) 
+  let logML = gpClassifierEPEvidence k t l state''
+  return $ EPValue logML state'' (i+1)
+  
+-- | The learning algorithm. Takes an arbitrary function for convergence 
+--   testing.
+gpClassifierEPLearn :: CovarianceMatrix 
+                    -> Targets         
+                    -> SiteOrder
+                    -> EPConvergenceTest
+                    -> (EPValue, EPState)
+gpClassifierEPLearn k t siteOrder converged = 
+    runState (iterateToConvergence'' doOnce converged) start
+        where
+          doOnce = doOneUpdate k t siteOrder 
+          start = ((generateInitialSiteState k (dim t)), mkStdGen 0, 0) 
+ 
+-- | Prediction with GP classifiers based on EP learning.
+--   Takes a matrix in which each row is an example to be 
+--   classified.
+gpClassifierEPPredict :: (CovarianceFunction c) => EPSiteState
+                      -> Inputs          
+                      -> Targets          -- ^ Inputs in training set
+                      -> CovarianceMatrix
+                      -> c                -- ^ Covariance Function
+                      -> Inputs           -- ^ New inputs
+                      -> DVector
+gpClassifierEPPredict state i t k c xStars 
+    = fromList $ map phiIntegral (zipWith (/) fStar (map (sqrt . (1+)) vfStar))
+      where
+        nT = nuTilde state 
+        tT = tauTilde state 
+        d = dim t
+        rootSTildeV = mapVector sqrt tT
+        rootSTilde = diag rootSTildeV
+        l = trans $ chol ((ident d) + (abaDiagDiag rootSTildeV k))
+        z = rootSTilde 
+            <> (asColumn 
+                (upperSolve (trans l) 
+                 (lowerSolve l (flatten $ 
+                                (rootSTilde <> k <> (asColumn nT))))))
+        xStarsRows = toRows xStars
+        covarianceWithTestInputs = 
+            fromRows [covarianceWithPoint c i xStar | xStar <- xStarsRows]
+        fStar = 
+            toList $ flatten $ 
+                       (covarianceWithTestInputs <> ((asColumn nT) - z))
+        v = [lowerSolve l (rootSTilde <> kxStar) | 
+             kxStar <- (toColumns $ trans $ covarianceWithTestInputs)]
+        vTv = zipWith (<.>) v v
+        kxStarxStar = zipWith (covariance c) xStarsRows xStarsRows
+        vfStar = zipWith (-) kxStarxStar vTv
+
+-- | Compute the log evidence and its first derivative for the EP approximation 
+--   for GP classification. Targets should be +1/-1. Outputs the -log 
+--   marginal likelihood and a vector of its derivatives.
+gpClassifierEPLogEvidence :: (CovarianceFunction c) => c -- ^ Covariance
+                          -> Inputs 
+                          -> Targets 
+                          -> SiteOrder
+                          -> EPConvergenceTest
+                          -> (Double, DVector)
+gpClassifierEPLogEvidence c i t siteOrder converged 
+  = (-logEvidence, -(zipVectorWith (*) (trueHyper c) (fromList dLogEvidence))) 
+    where
+      d = dim t
+      k = covarianceMatrix c i
+      (value, s) = gpClassifierEPLearn k t siteOrder converged
+      nT = nuTilde $ siteState value
+      tT =  tauTilde $ siteState value
+      logEvidence =  eValue value
+      rootSTildeV = mapVector sqrt tT
+      rootSTilde = diag rootSTildeV
+      l = trans $ chol ((ident d) + (abaDiagDiag rootSTildeV k))
+      b = (asColumn nT) - 
+           (rootSTilde <> 
+            (asColumn $ upperSolve (trans l) 
+                         (lowerSolve l (flatten $ 
+                                     rootSTilde <> k <> (asColumn nT)))))
+      r = (b <> (trans b)) - 
+             (rootSTilde <> 
+                 (generalSolve upperSolve (trans l) 
+                                       (generalSolve lowerSolve l rootSTilde)))
+      dLogEvidence = map ((0.5 *) . sum . toList . (abDiagOnly r)) 
+                           (makeMatricesFromPairs (dCovarianceDParameters c) i)
+
+-- | Essentially the same as gpClassifierEPLogEvidence, but makes a 
+--   covariance function using the hyperparameters supplied in a list 
+--   and passes it on. 
+gpClassifierEPLogEvidenceList :: (CovarianceFunction c) => Inputs 
+                          -> Targets
+                          -> c -- ^ Covariance 
+                          -> SiteOrder
+                          -> EPConvergenceTest
+                          -> [Double]
+                          -> (Double, DVector)
+gpClassifierEPLogEvidenceList i t cov siteOrder converged hyper = 
+    gpClassifierEPLogEvidence cov2 i t siteOrder converged
+        where 
+          cov2 = makeCovarianceFromList cov hyper
+
+-- | Essentially the same as gpClassifierEPLogEvidence, but makes a 
+--   covariance function using the hyperparameters supplied in a vector 
+--   and passes it on. 
+gpClassifierEPLogEvidenceVec :: (CovarianceFunction c) => Inputs 
+                          -> Targets 
+                          -> c -- ^ Covariance
+                          -> SiteOrder
+                          -> EPConvergenceTest
+                          -> DVector
+                          -> (Double, DVector)
+gpClassifierEPLogEvidenceVec i t cov siteOrder converged hyper = 
+    gpClassifierEPLogEvidence cov2 i t siteOrder converged
+        where 
+          cov2 = makeCovarianceFromList cov (toList hyper)
+
+
+
diff --git a/src/HasGP/Classification/Laplace/ClassificationLaplace.hs b/src/HasGP/Classification/Laplace/ClassificationLaplace.hs
new file mode 100644
--- /dev/null
+++ b/src/HasGP/Classification/Laplace/ClassificationLaplace.hs
@@ -0,0 +1,280 @@
+{- | ClassificationLaplace is a module in the HasGP Gaussian Process
+   library. It implements basic Gaussian Process Classification for two 
+   classes using the Laplace approximation. For details see 
+   www.gaussianprocesses.org.
+
+   Copyright (C) 2011 Sean Holden. sbh11\@cl.cam.ac.uk.
+-}
+{- This file is part of HasGP.
+
+   HasGP is free software: you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
+
+   HasGP is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with HasGP.  If not, see <http://www.gnu.org/licenses/>.
+-}
+module HasGP.Classification.Laplace.ClassificationLaplace 
+   (
+     LaplaceValue(..),
+     LaplaceConvergenceTest,
+     gpCLaplaceLearn,
+     convertToP_CG,
+     gpCLaplacePredict,
+     gpCLaplacePredict',
+     gpCLaplaceLogEvidence,
+     gpCLaplaceLogEvidenceList,
+     gpCLaplaceLogEvidenceVec
+   ) where 
+
+import Numeric.LinearAlgebra
+
+import Control.Monad.State
+
+import HasGP.Types.MainTypes
+import HasGP.Support.MatrixFunction
+import HasGP.Support.Linear
+import HasGP.Support.Functions
+import HasGP.Support.Solve
+import HasGP.Support.Iterate
+import HasGP.Covariance.Basic
+import HasGP.Likelihood.Basic
+
+-- | Computing the Laplace approximation requires us to deal with 
+--   quite a lot of information. To keep things straightforward we 
+--   wrap this up in a type.
+--
+--   The value associated with a state includes f, evidence, objective, 
+--   derivative of the objective, the vector a needed to compute the 
+--   derivative of the evidence, and the number of iterations.
+data LaplaceValue = LaplaceValue {
+      fValue::DVector,
+      eValue::Double,
+      psiValue::Double,
+      dPsiValue::DVector,
+      aValue::DVector,
+      count::Int
+    }
+
+-- | The state is the vector f and the number of iterations.
+type LaplaceState = (DVector,Int)
+
+-- | A convergence test is a function that takes two consecutive values 
+--   during iteration and works out whether you've converged or not.
+type LaplaceConvergenceTest = (LaplaceValue -> LaplaceValue -> Bool)
+
+-- | Compute the Laplace update for the latent variables f.
+--
+--   Produces new f, log marginal likelihood, objective, derivative 
+--   of objective, and the vector a which is needed to compute the derivative 
+--   of the log marginal likelihood.
+gpCLaplaceUpdate :: LogLikelihood l => CovarianceMatrix 
+                 -> Targets                  
+                 -> l               -- ^ log likelihood
+                 -> LaplaceState    -- ^ Current f and n.
+                 -> LaplaceValue
+gpCLaplaceUpdate c t like (f,n) = 
+    LaplaceValue newF e psi dPsi aV (n+1)
+        where
+          d = dim t
+          diagW = -(zipVectorWith (ddLikelihood like) t f)
+          w = diag diagW
+          diagRootW = mapVector sqrt diagW
+          rootW = diag diagRootW
+          -- MUST use abaDiagDiag, or errors accumulate and symmetry is lost.
+          ll = trans $ chol ((ident d) + (abaDiagDiag diagRootW c))
+          dL = zipVectorWith (dLikelihood like) t f                   
+          b = (w <> (asColumn f)) + (asColumn dL)    
+          a = b - 
+              (rootW <> 
+               asColumn (upperSolve (trans ll) 
+                         (lowerSolve ll (head $ toColumns (rootW <> c <> b)))))
+          aV = head $ toColumns a
+          newF = head $ toColumns (c <> a)
+          psi = (-(1/2) * (aV <.> newF)) + 
+                (sum $ toList $ zipVectorWith (likelihood like) t newF)
+          -- Not in the book but easily proved using the fact that f = Ka and 
+          -- dPsi = d log likelihood - (inverse of K) f
+          dPsi = dL - aV 
+          -- log marginal likelihood.
+          e = (psi - (sum $ map log $ toList $ takeDiag ll)) 
+                        
+-- | Iteration to convergence is much nicer if the state is hidden using 
+--   the State monad.
+--
+--   This uses the pure gpCLaplaceUpdate function, and wraps it up in a 
+--   state transformer that's usable by the general functions in 
+--   HasGP.Support.Iterate.
+singleIteration::LogLikelihood l => CovarianceMatrix 
+               -> Targets                 
+               -> l                        -- ^ log likelihood
+               -> State LaplaceState LaplaceValue
+singleIteration c t like = state sI 
+    where
+      sI (f, n) = (newValue, ((fValue newValue), (n+1)))
+          where
+            newValue = gpCLaplaceUpdate c t like (f,n)
+
+-- | Iteration to convergence is much nicer if the state is hidden using 
+--   the State monad.
+--
+--   This uses a general function from HasGP.Support.Iterate to implement 
+--   the learning algorithm. Convergence testing is done using a user 
+--   supplied function.
+gpCLaplaceLearn::LogLikelihood l => CovarianceMatrix 
+               -> Targets   
+               -> l          -- ^ log likelihood
+               -> LaplaceConvergenceTest
+               -> LaplaceValue
+gpCLaplaceLearn c t like converged = 
+    evalState (iterateToConvergence'' doOnce converged) (constant 0.0 (dim t),1)
+        where
+          doOnce = singleIteration c t like
+
+-- | Converts pairs of fStar and V produced by the prediction functions 
+--   to actual probabilities, assuming the cumulative Gaussian likelihood 
+--   was used.
+convertToP_CG :: (Double,Double) -> Double
+convertToP_CG (fStar,v) = phiIntegral (fStar / (sqrt (1 + v)))
+
+-- | Predict using a GP classifier based on the Laplace approximation.
+--
+--   Produces fStar and V rather than the actual probability as 
+--   further approximations are then required to compute this.
+gpCLaplacePredict :: (CovarianceFunction cF, LogLikelihood l) => DVector -- ^ f
+                  -> Inputs           
+                  -> Targets          
+                  -> CovarianceMatrix -- ^ Covariance matrix
+                  -> cF               -- ^ Covariance function
+                  -> l                -- ^ log likelihood
+                  -> Input            -- ^ Input to classify
+                  -> (Double,Double)
+gpCLaplacePredict f inputs t c cov like x = 
+    (fStar, (((covariance cov) x x) - (v <.> v)))
+        where
+          d = dim t
+          diagW = -(zipVectorWith (ddLikelihood like) t f)
+          w = diag diagW
+          diagRootW = mapVector sqrt diagW
+          rootW = diag diagRootW
+          ll = trans $ chol ((ident d) + (abaDiagDiag diagRootW c))   
+          kxxStar = covarianceWithPoint cov inputs x 
+          fStar = kxxStar <.> (zipVectorWith (dLikelihood like) t f) 
+          v = lowerSolve ll (zipVectorWith (*) diagRootW kxxStar)
+
+-- | Predict using a GP classifier based on the Laplace approximation.
+--
+--   The same as gpLaplacePredict but applies to a collection of new 
+--   inputs supplied as the rows of a matrix.
+--
+--   Produces a list of pairs of fStar and V rather than the actual 
+--   probabilities as further approximations are then required to compute 
+--   these.
+gpCLaplacePredict' :: (CovarianceFunction cF, LogLikelihood l) => DVector -- ^ f
+                   -> Inputs          
+                   -> Targets         
+                   -> CovarianceMatrix 
+                   -> cF               -- ^ Covariance function
+                   -> l                -- ^ log likelihood
+                   -> Inputs           -- ^ Inputs to classify
+                   -> [(Double,Double)]
+gpCLaplacePredict' f inputs t c cov like x = 
+    map predict $ toRows x
+        where
+          predict = gpCLaplacePredict f inputs t c cov like
+
+-- | Compute the log marginal likelihood and its first derivative for the 
+--   Laplace approximation for GP classification.
+--
+--   The convergence test input tests for convergence when 
+--   using gpClassificationLaplaceLearn. Note that a covariance function 
+--   contains its own parameters and can compute its own derivative so 
+--   theta does not need to be passed seperately.
+--
+--   Outputs the NEGATIVE log marginal likelihood and a vector of its 
+--   derivatives. The derivatives are with respect to the actual, NOT log 
+--   parameters.
+gpCLaplaceLogEvidence :: (CovarianceFunction cF, LogLikelihood l) => Inputs 
+                      -> Targets 
+                      -> cF                  -- ^ Covariance function
+                      -> l                   -- ^ log likelihood
+                      -> LaplaceConvergenceTest 
+                      -> (Double, DVector)
+gpCLaplaceLogEvidence i t cov like converged = 
+    (-z, -dZ)
+        where
+          d = dim t
+          cM = covarianceMatrix cov i
+          LaplaceValue f z psi dPsi aV n = 
+              gpCLaplaceLearn cM t like converged
+          diagW = -(zipVectorWith (ddLikelihood like) t f)
+          w = diag diagW
+          diagRootW = mapVector sqrt diagW
+          rootW = diag diagRootW
+          ll = trans $ chol ((ident d) + (abaDiagDiag diagRootW cM))
+          r = rootW <> (generalSolve upperSolve (trans ll) 
+                        (generalSolve lowerSolve ll rootW))
+          c = generalSolve lowerSolve ll (rootW <> cM)
+          s2 = flatten $ 
+               (-0.5) * (diag ((takeDiag cM) - 
+                               (abDiagOnly (trans c) c))) <> 
+                          (asColumn (zipVectorWith (dddLikelihood like) t f))
+          cList = makeMatricesFromPairs (dCovarianceDParameters cov) i
+          s1a = fromList $ map (abaVV aV) cList
+          s1b = fromList $ map (sum . toList . (abDiagOnly r)) cList
+          s1 = 0.5 * (s1a - s1b)
+          b = map (<> (asColumn $ zipVectorWith (dLikelihood like) t f)) cList
+          s3 = map (\x -> x - (cM <> r <> x)) b 
+          dZ = s1 + (fromList $ map (s2 <.>) (map flatten s3)) 
+
+-- | A version of gpClassificationLaplaceEvidence that's usable by the
+--   conjugate gradient function included in the hmatrix library. Computes 
+--   the log evidence and its first derivative for the Laplace approximation 
+--   for GP classification. The issue is that while it makes sense for a 
+--   covariance function to be implemented as a class so that any can easily 
+--   be used, we need to supply evidence and its derivatives directly as 
+--   functions of the hyperparameters, and these have to be supplied as 
+--   vectors of Doubles. The solution is to include a function in the 
+--   CovarianceFunction class that takes a list and returns a new covariance 
+--   function of the required type having the specified hyperparameters.
+--
+--   Parameters: The same parameters as gpClassifierLaplaceEvidence, plus 
+--   the list of hyperparameters. Outputs: negative log marginal likelihood 
+--   and a vector of its first derivatives. 
+--   
+--   In addition to the above, this assumes that we want derivatives with 
+--   respect to log parameters and so converts using df/d log p = 
+--   p df/dp.
+gpCLaplaceLogEvidenceList :: (CovarianceFunction cF, LogLikelihood l) => Inputs 
+                          -> Targets 
+                          -> cF 
+                          -> l 
+                          -> LaplaceConvergenceTest
+                          -> [Double] -- ^ log hyperparameters
+                          -> (Double, DVector)
+gpCLaplaceLogEvidenceList i t cov like converged hyper = 
+    (negZ, zipVectorWith (*) (fromList $ map exp hyper) negDZ)
+        where 
+          cov2 = makeCovarianceFromList cov hyper
+          (negZ, negDZ) = gpCLaplaceLogEvidence i t cov2 like converged
+
+-- | This is the same as gpCLaplaceLogEvidenceList but takes a vector 
+--   instead of a list.
+gpCLaplaceLogEvidenceVec :: (CovarianceFunction cF, LogLikelihood l) => Inputs 
+                         -> Targets 
+                         -> cF 
+                         -> l 
+                         -> LaplaceConvergenceTest
+                         -> DVector 
+                         -> (Double, DVector)
+gpCLaplaceLogEvidenceVec i t cov like converged 
+    = (gpCLaplaceLogEvidenceList i t cov like converged) . toList
+
+
+
diff --git a/src/HasGP/Covariance/Basic.hs b/src/HasGP/Covariance/Basic.hs
new file mode 100644
--- /dev/null
+++ b/src/HasGP/Covariance/Basic.hs
@@ -0,0 +1,80 @@
+{- | Gaussian Process Library. This module contains assorted functions that 
+   support the computation of covariance, constructing covariance matrices 
+   etc.
+
+   Covariance functions store log parameters. Functions are needed to return 
+   the covariance and its derivative. Derivatives are with respect to the 
+   actual parameters, NOT their logs.
+
+   Copyright (C) 2011 Sean Holden. sbh11\@cl.cam.ac.uk.
+-}
+{- HasGP is free software: you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
+
+   HasGP is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with HasGP.  If not, see <http://www.gnu.org/licenses/>.
+-}
+module HasGP.Covariance.Basic 
+   (
+     CovarianceFunction,
+     trueHyper,
+     covariance,
+     dCovarianceDParameters,
+     makeCovarianceFromList,
+     makeListFromCovariance,
+     covarianceMatrix,
+     covarianceWithPoint,
+     covarianceWithPoints
+   ) where
+
+import Numeric.LinearAlgebra
+
+import HasGP.Types.MainTypes
+
+class CovarianceFunction a where
+    -- ^ The actual hyperparameter values.
+    trueHyper :: a -> DVector           
+    -- ^ The covariance
+    covariance :: a -> DVector -> DVector -> Double 
+    -- ^ Derivative of covariance with respect to parameters 
+    dCovarianceDParameters :: a -> DVector -> DVector -> DVector 
+    -- ^ Construct using log parameters.
+    makeCovarianceFromList :: a -> [Double] -> a 
+    -- ^ Get log parameters.
+    makeListFromCovariance :: a -> [Double]  
+
+-- | Construct a matrix of covariances from a covariance and a design matrix. 
+covarianceMatrix :: (CovarianceFunction c) => c -> Inputs 
+              -> CovarianceMatrix
+covarianceMatrix c d = (r><r) [(covariance c x y) | x <- dList, y <- dList]
+    where
+      r = rows d
+      dList = toRows d
+
+-- | Constructs the column vector required when a new input is included. 
+--   Constructed as a matrix to avoid further work elsewhere. 
+covarianceWithPoint :: (CovarianceFunction c) => c 
+                    -> Inputs
+                    -> Input
+                    -> DVector
+covarianceWithPoint c d xStar = fromList [((covariance c) x xStar) | x <- dList]
+    where
+      r = rows d
+      dList = toRows d
+
+-- | covarianceWithPoint applied to a list of points to produce 
+--   a list of vectors.
+covarianceWithPoints :: (CovarianceFunction c) => c 
+                    -> Inputs 
+                    -> [Input]
+                    -> [DVector]
+covarianceWithPoints c d xStars = map (covarianceWithPoint c d) xStars
+
+
diff --git a/src/HasGP/Covariance/SquaredExp.hs b/src/HasGP/Covariance/SquaredExp.hs
new file mode 100644
--- /dev/null
+++ b/src/HasGP/Covariance/SquaredExp.hs
@@ -0,0 +1,61 @@
+{- | Gaussian Process Library. This module contains the definition 
+     of the standard squared exponential covariance function.
+
+     Copyright (C) 2008-11 Sean Holden. sbh11\@cl.cam.ac.uk.
+-}
+{-   HasGP is free software: you can redistribute it and/or modify
+     it under the terms of the GNU General Public License as published by
+     the Free Software Foundation, either version 3 of the License, or
+     (at your option) any later version.
+
+     HasGP is distributed in the hope that it will be useful,
+     but WITHOUT ANY WARRANTY; without even the implied warranty of
+     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+     GNU General Public License for more details.
+
+     You should have received a copy of the GNU General Public License
+     along with HasGP.  If not, see <http://www.gnu.org/licenses/>.
+-}
+module HasGP.Covariance.SquaredExp 
+   (
+     SquaredExponential(..)
+   ) where
+
+import Numeric.LinearAlgebra
+
+import HasGP.Types.MainTypes
+import HasGP.Covariance.Basic
+
+data SquaredExponential = SquaredExponential
+    {
+      f :: Double,         -- ^ log \sigma_f^2
+      l :: Double          -- ^ log l
+    }                      
+
+instance CovarianceFunction SquaredExponential where
+
+    trueHyper se = mapVector exp $ fromList [(f se), (l se)]
+
+    covariance se in1 in2 = 
+        f2 * exp (-(1/(2 * (l2^2))) * (diff <.> diff))
+            where 
+              diff = in1 - in2
+              f2 = exp (f se)
+              l2 = exp (l se)
+
+    dCovarianceDParameters se in1 in2 = 
+        fromList [dLogByDF, dLogByDL]
+            where 
+              diff = in1 - in2
+              d = diff <.> diff
+              f2 = exp (f se)
+              l2 = exp (l se)
+              dLogByDF = exp (-(1/(2 * (l2^2))) * d) 
+              dLogByDL = f2 * dLogByDF * (d * (l2^^(-3)))
+
+    makeCovarianceFromList se [f, l] = SquaredExponential f l 
+    makeCovarianceFromList se _ = 
+        error "SquaredExp requires exactly 2 hyperparameters"
+
+    makeListFromCovariance se = [f se, l se]
+
diff --git a/src/HasGP/Covariance/SquaredExpARD.hs b/src/HasGP/Covariance/SquaredExpARD.hs
new file mode 100644
--- /dev/null
+++ b/src/HasGP/Covariance/SquaredExpARD.hs
@@ -0,0 +1,73 @@
+{- | Gaussian Process Library. This module contains the definition 
+   of the standard squared exponential covariance function, extended 
+   for use with Automatic Relevance Determination.
+
+   s_f^2 exp (-1\/2 (x_1 - x_2)^T M (x_1 - x_2)) 
+
+   Parameters: s_f^2 and vector containing the diagonal of M. 
+   M is diag (1\/l_1^2,...,1\/l_?^2)
+
+   Copyright (C) 2011 Sean Holden. sbh11\@cl.cam.ac.uk.
+-}
+{- HasGP is free software: you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
+
+   HasGP is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with HasGP.  If not, see <http://www.gnu.org/licenses/>.
+-}
+module HasGP.Covariance.SquaredExpARD 
+   ( 
+     SquaredExponentialARD(..)
+   ) where
+
+import Numeric.LinearAlgebra
+import HasGP.Types.MainTypes
+import HasGP.Support.Linear
+import HasGP.Support.Functions
+import HasGP.Covariance.Basic
+
+data SquaredExponentialARD = SquaredExponentialARD 
+    {
+      fARD            :: Double,
+      m               :: DVector
+    }
+
+instance CovarianceFunction SquaredExponentialARD where
+
+    trueHyper se = mapVector exp $ join [fromList [fARD se], m se]
+      
+    covariance se x1 x2 = f2 * (exp ((-(1/2)) * (xAxDiag diff newM2)))
+        where
+          diff = x1 - x2
+          f2 = exp (fARD se)
+          newM2 = mapVector ((^^(-2)) . exp) (m se) 
+
+    dCovarianceDParameters se x1 x2 = 
+        join [(fromList [dKDLogF]), dKDLogM] -- You need to compute dK/dtheta, 
+                                             -- NOT dK/dlogtheta
+            where
+               diff = x1 - x2
+               d = mapVector square diff
+               f2 = exp (fARD se)
+               m2 = mapVector exp (m se)
+               newM2 = mapVector (^^(-2)) m2
+               dKDLogF = exp ((-(1/2)) * (xAxDiag diff newM2))
+               dKDLogM = scale (f2 * dKDLogF) 
+                            (zipVectorWith (*) d (mapVector (^^(-3)) m2)) 
+
+    makeCovarianceFromList se (f:rest) =  
+        if (length rest) == (dim $ (m se))
+        then SquaredExponentialARD f (fromList rest) 
+        else error "SquaredExpARD needs the correct number of hyperparameters"
+    makeCovarianceFromList se _ = 
+        error "SquaredExpARD needs the correct number of hyperparameters"
+
+    makeListFromCovariance se = (fARD se):(toList $ m se) 
+
diff --git a/src/HasGP/Data/BishopData.hs b/src/HasGP/Data/BishopData.hs
new file mode 100644
--- /dev/null
+++ b/src/HasGP/Data/BishopData.hs
@@ -0,0 +1,44 @@
+{- | BishopData is a module in the HasGP Gaussian Process library. 
+     It contains functions to generate toy data as used in "Neural 
+     Networks for Pattern Recognition," by Chris Bishop.
+
+     There is one difference between this data and that in the book. 
+     Namely: this data is adjusted to have zero mean, making it easier 
+     to use in the demonstrations.
+
+     Copyright (C) 2011 Sean Holden. sbh11\@cl.cam.ac.uk.
+-}
+{- This file is part of HasGP.
+
+   HasGP is free software: you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
+
+   HasGP is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with HasGP.  If not, see <http://www.gnu.org/licenses/>.
+-}
+module HasGP.Data.BishopData where
+
+import Numeric.LinearAlgebra
+
+import HasGP.Types.MainTypes
+import HasGP.Support.Random
+
+h :: Double -> Double
+h x = (0.4 * (sin (2 * pi * x))) -- to get the original data add 0.5 to this
+
+bishopData :: (Inputs, Targets)
+bishopData = (asColumn inputs, (mapVector h inputs) + n)
+    where
+      xVar = 0.05
+      random = normalVectorSimple 1 1 60
+      n = scale (0.05) $ subVector 0 30 random
+      i1 = (constant 0.25 15) + (scale (xVar) $ subVector 30 15 random)
+      i2 = (constant 0.75 15) + (scale (xVar) $ subVector 45 15 random)
+      inputs = join [i1, i2]
diff --git a/src/HasGP/Data/Files/gpml-classifier-test.txt b/src/HasGP/Data/Files/gpml-classifier-test.txt
new file mode 100644
--- /dev/null
+++ b/src/HasGP/Data/Files/gpml-classifier-test.txt
@@ -0,0 +1,6561 @@
+-4.000000 -4.000000
+-4.000000 -3.900000
+-4.000000 -3.800000
+-4.000000 -3.700000
+-4.000000 -3.600000
+-4.000000 -3.500000
+-4.000000 -3.400000
+-4.000000 -3.300000
+-4.000000 -3.200000
+-4.000000 -3.100000
+-4.000000 -3.000000
+-4.000000 -2.900000
+-4.000000 -2.800000
+-4.000000 -2.700000
+-4.000000 -2.600000
+-4.000000 -2.500000
+-4.000000 -2.400000
+-4.000000 -2.300000
+-4.000000 -2.200000
+-4.000000 -2.100000
+-4.000000 -2.000000
+-4.000000 -1.900000
+-4.000000 -1.800000
+-4.000000 -1.700000
+-4.000000 -1.600000
+-4.000000 -1.500000
+-4.000000 -1.400000
+-4.000000 -1.300000
+-4.000000 -1.200000
+-4.000000 -1.100000
+-4.000000 -1.000000
+-4.000000 -0.900000
+-4.000000 -0.800000
+-4.000000 -0.700000
+-4.000000 -0.600000
+-4.000000 -0.500000
+-4.000000 -0.400000
+-4.000000 -0.300000
+-4.000000 -0.200000
+-4.000000 -0.100000
+-4.000000 0.000000
+-4.000000 0.100000
+-4.000000 0.200000
+-4.000000 0.300000
+-4.000000 0.400000
+-4.000000 0.500000
+-4.000000 0.600000
+-4.000000 0.700000
+-4.000000 0.800000
+-4.000000 0.900000
+-4.000000 1.000000
+-4.000000 1.100000
+-4.000000 1.200000
+-4.000000 1.300000
+-4.000000 1.400000
+-4.000000 1.500000
+-4.000000 1.600000
+-4.000000 1.700000
+-4.000000 1.800000
+-4.000000 1.900000
+-4.000000 2.000000
+-4.000000 2.100000
+-4.000000 2.200000
+-4.000000 2.300000
+-4.000000 2.400000
+-4.000000 2.500000
+-4.000000 2.600000
+-4.000000 2.700000
+-4.000000 2.800000
+-4.000000 2.900000
+-4.000000 3.000000
+-4.000000 3.100000
+-4.000000 3.200000
+-4.000000 3.300000
+-4.000000 3.400000
+-4.000000 3.500000
+-4.000000 3.600000
+-4.000000 3.700000
+-4.000000 3.800000
+-4.000000 3.900000
+-4.000000 4.000000
+-3.900000 -4.000000
+-3.900000 -3.900000
+-3.900000 -3.800000
+-3.900000 -3.700000
+-3.900000 -3.600000
+-3.900000 -3.500000
+-3.900000 -3.400000
+-3.900000 -3.300000
+-3.900000 -3.200000
+-3.900000 -3.100000
+-3.900000 -3.000000
+-3.900000 -2.900000
+-3.900000 -2.800000
+-3.900000 -2.700000
+-3.900000 -2.600000
+-3.900000 -2.500000
+-3.900000 -2.400000
+-3.900000 -2.300000
+-3.900000 -2.200000
+-3.900000 -2.100000
+-3.900000 -2.000000
+-3.900000 -1.900000
+-3.900000 -1.800000
+-3.900000 -1.700000
+-3.900000 -1.600000
+-3.900000 -1.500000
+-3.900000 -1.400000
+-3.900000 -1.300000
+-3.900000 -1.200000
+-3.900000 -1.100000
+-3.900000 -1.000000
+-3.900000 -0.900000
+-3.900000 -0.800000
+-3.900000 -0.700000
+-3.900000 -0.600000
+-3.900000 -0.500000
+-3.900000 -0.400000
+-3.900000 -0.300000
+-3.900000 -0.200000
+-3.900000 -0.100000
+-3.900000 0.000000
+-3.900000 0.100000
+-3.900000 0.200000
+-3.900000 0.300000
+-3.900000 0.400000
+-3.900000 0.500000
+-3.900000 0.600000
+-3.900000 0.700000
+-3.900000 0.800000
+-3.900000 0.900000
+-3.900000 1.000000
+-3.900000 1.100000
+-3.900000 1.200000
+-3.900000 1.300000
+-3.900000 1.400000
+-3.900000 1.500000
+-3.900000 1.600000
+-3.900000 1.700000
+-3.900000 1.800000
+-3.900000 1.900000
+-3.900000 2.000000
+-3.900000 2.100000
+-3.900000 2.200000
+-3.900000 2.300000
+-3.900000 2.400000
+-3.900000 2.500000
+-3.900000 2.600000
+-3.900000 2.700000
+-3.900000 2.800000
+-3.900000 2.900000
+-3.900000 3.000000
+-3.900000 3.100000
+-3.900000 3.200000
+-3.900000 3.300000
+-3.900000 3.400000
+-3.900000 3.500000
+-3.900000 3.600000
+-3.900000 3.700000
+-3.900000 3.800000
+-3.900000 3.900000
+-3.900000 4.000000
+-3.800000 -4.000000
+-3.800000 -3.900000
+-3.800000 -3.800000
+-3.800000 -3.700000
+-3.800000 -3.600000
+-3.800000 -3.500000
+-3.800000 -3.400000
+-3.800000 -3.300000
+-3.800000 -3.200000
+-3.800000 -3.100000
+-3.800000 -3.000000
+-3.800000 -2.900000
+-3.800000 -2.800000
+-3.800000 -2.700000
+-3.800000 -2.600000
+-3.800000 -2.500000
+-3.800000 -2.400000
+-3.800000 -2.300000
+-3.800000 -2.200000
+-3.800000 -2.100000
+-3.800000 -2.000000
+-3.800000 -1.900000
+-3.800000 -1.800000
+-3.800000 -1.700000
+-3.800000 -1.600000
+-3.800000 -1.500000
+-3.800000 -1.400000
+-3.800000 -1.300000
+-3.800000 -1.200000
+-3.800000 -1.100000
+-3.800000 -1.000000
+-3.800000 -0.900000
+-3.800000 -0.800000
+-3.800000 -0.700000
+-3.800000 -0.600000
+-3.800000 -0.500000
+-3.800000 -0.400000
+-3.800000 -0.300000
+-3.800000 -0.200000
+-3.800000 -0.100000
+-3.800000 0.000000
+-3.800000 0.100000
+-3.800000 0.200000
+-3.800000 0.300000
+-3.800000 0.400000
+-3.800000 0.500000
+-3.800000 0.600000
+-3.800000 0.700000
+-3.800000 0.800000
+-3.800000 0.900000
+-3.800000 1.000000
+-3.800000 1.100000
+-3.800000 1.200000
+-3.800000 1.300000
+-3.800000 1.400000
+-3.800000 1.500000
+-3.800000 1.600000
+-3.800000 1.700000
+-3.800000 1.800000
+-3.800000 1.900000
+-3.800000 2.000000
+-3.800000 2.100000
+-3.800000 2.200000
+-3.800000 2.300000
+-3.800000 2.400000
+-3.800000 2.500000
+-3.800000 2.600000
+-3.800000 2.700000
+-3.800000 2.800000
+-3.800000 2.900000
+-3.800000 3.000000
+-3.800000 3.100000
+-3.800000 3.200000
+-3.800000 3.300000
+-3.800000 3.400000
+-3.800000 3.500000
+-3.800000 3.600000
+-3.800000 3.700000
+-3.800000 3.800000
+-3.800000 3.900000
+-3.800000 4.000000
+-3.700000 -4.000000
+-3.700000 -3.900000
+-3.700000 -3.800000
+-3.700000 -3.700000
+-3.700000 -3.600000
+-3.700000 -3.500000
+-3.700000 -3.400000
+-3.700000 -3.300000
+-3.700000 -3.200000
+-3.700000 -3.100000
+-3.700000 -3.000000
+-3.700000 -2.900000
+-3.700000 -2.800000
+-3.700000 -2.700000
+-3.700000 -2.600000
+-3.700000 -2.500000
+-3.700000 -2.400000
+-3.700000 -2.300000
+-3.700000 -2.200000
+-3.700000 -2.100000
+-3.700000 -2.000000
+-3.700000 -1.900000
+-3.700000 -1.800000
+-3.700000 -1.700000
+-3.700000 -1.600000
+-3.700000 -1.500000
+-3.700000 -1.400000
+-3.700000 -1.300000
+-3.700000 -1.200000
+-3.700000 -1.100000
+-3.700000 -1.000000
+-3.700000 -0.900000
+-3.700000 -0.800000
+-3.700000 -0.700000
+-3.700000 -0.600000
+-3.700000 -0.500000
+-3.700000 -0.400000
+-3.700000 -0.300000
+-3.700000 -0.200000
+-3.700000 -0.100000
+-3.700000 0.000000
+-3.700000 0.100000
+-3.700000 0.200000
+-3.700000 0.300000
+-3.700000 0.400000
+-3.700000 0.500000
+-3.700000 0.600000
+-3.700000 0.700000
+-3.700000 0.800000
+-3.700000 0.900000
+-3.700000 1.000000
+-3.700000 1.100000
+-3.700000 1.200000
+-3.700000 1.300000
+-3.700000 1.400000
+-3.700000 1.500000
+-3.700000 1.600000
+-3.700000 1.700000
+-3.700000 1.800000
+-3.700000 1.900000
+-3.700000 2.000000
+-3.700000 2.100000
+-3.700000 2.200000
+-3.700000 2.300000
+-3.700000 2.400000
+-3.700000 2.500000
+-3.700000 2.600000
+-3.700000 2.700000
+-3.700000 2.800000
+-3.700000 2.900000
+-3.700000 3.000000
+-3.700000 3.100000
+-3.700000 3.200000
+-3.700000 3.300000
+-3.700000 3.400000
+-3.700000 3.500000
+-3.700000 3.600000
+-3.700000 3.700000
+-3.700000 3.800000
+-3.700000 3.900000
+-3.700000 4.000000
+-3.600000 -4.000000
+-3.600000 -3.900000
+-3.600000 -3.800000
+-3.600000 -3.700000
+-3.600000 -3.600000
+-3.600000 -3.500000
+-3.600000 -3.400000
+-3.600000 -3.300000
+-3.600000 -3.200000
+-3.600000 -3.100000
+-3.600000 -3.000000
+-3.600000 -2.900000
+-3.600000 -2.800000
+-3.600000 -2.700000
+-3.600000 -2.600000
+-3.600000 -2.500000
+-3.600000 -2.400000
+-3.600000 -2.300000
+-3.600000 -2.200000
+-3.600000 -2.100000
+-3.600000 -2.000000
+-3.600000 -1.900000
+-3.600000 -1.800000
+-3.600000 -1.700000
+-3.600000 -1.600000
+-3.600000 -1.500000
+-3.600000 -1.400000
+-3.600000 -1.300000
+-3.600000 -1.200000
+-3.600000 -1.100000
+-3.600000 -1.000000
+-3.600000 -0.900000
+-3.600000 -0.800000
+-3.600000 -0.700000
+-3.600000 -0.600000
+-3.600000 -0.500000
+-3.600000 -0.400000
+-3.600000 -0.300000
+-3.600000 -0.200000
+-3.600000 -0.100000
+-3.600000 0.000000
+-3.600000 0.100000
+-3.600000 0.200000
+-3.600000 0.300000
+-3.600000 0.400000
+-3.600000 0.500000
+-3.600000 0.600000
+-3.600000 0.700000
+-3.600000 0.800000
+-3.600000 0.900000
+-3.600000 1.000000
+-3.600000 1.100000
+-3.600000 1.200000
+-3.600000 1.300000
+-3.600000 1.400000
+-3.600000 1.500000
+-3.600000 1.600000
+-3.600000 1.700000
+-3.600000 1.800000
+-3.600000 1.900000
+-3.600000 2.000000
+-3.600000 2.100000
+-3.600000 2.200000
+-3.600000 2.300000
+-3.600000 2.400000
+-3.600000 2.500000
+-3.600000 2.600000
+-3.600000 2.700000
+-3.600000 2.800000
+-3.600000 2.900000
+-3.600000 3.000000
+-3.600000 3.100000
+-3.600000 3.200000
+-3.600000 3.300000
+-3.600000 3.400000
+-3.600000 3.500000
+-3.600000 3.600000
+-3.600000 3.700000
+-3.600000 3.800000
+-3.600000 3.900000
+-3.600000 4.000000
+-3.500000 -4.000000
+-3.500000 -3.900000
+-3.500000 -3.800000
+-3.500000 -3.700000
+-3.500000 -3.600000
+-3.500000 -3.500000
+-3.500000 -3.400000
+-3.500000 -3.300000
+-3.500000 -3.200000
+-3.500000 -3.100000
+-3.500000 -3.000000
+-3.500000 -2.900000
+-3.500000 -2.800000
+-3.500000 -2.700000
+-3.500000 -2.600000
+-3.500000 -2.500000
+-3.500000 -2.400000
+-3.500000 -2.300000
+-3.500000 -2.200000
+-3.500000 -2.100000
+-3.500000 -2.000000
+-3.500000 -1.900000
+-3.500000 -1.800000
+-3.500000 -1.700000
+-3.500000 -1.600000
+-3.500000 -1.500000
+-3.500000 -1.400000
+-3.500000 -1.300000
+-3.500000 -1.200000
+-3.500000 -1.100000
+-3.500000 -1.000000
+-3.500000 -0.900000
+-3.500000 -0.800000
+-3.500000 -0.700000
+-3.500000 -0.600000
+-3.500000 -0.500000
+-3.500000 -0.400000
+-3.500000 -0.300000
+-3.500000 -0.200000
+-3.500000 -0.100000
+-3.500000 0.000000
+-3.500000 0.100000
+-3.500000 0.200000
+-3.500000 0.300000
+-3.500000 0.400000
+-3.500000 0.500000
+-3.500000 0.600000
+-3.500000 0.700000
+-3.500000 0.800000
+-3.500000 0.900000
+-3.500000 1.000000
+-3.500000 1.100000
+-3.500000 1.200000
+-3.500000 1.300000
+-3.500000 1.400000
+-3.500000 1.500000
+-3.500000 1.600000
+-3.500000 1.700000
+-3.500000 1.800000
+-3.500000 1.900000
+-3.500000 2.000000
+-3.500000 2.100000
+-3.500000 2.200000
+-3.500000 2.300000
+-3.500000 2.400000
+-3.500000 2.500000
+-3.500000 2.600000
+-3.500000 2.700000
+-3.500000 2.800000
+-3.500000 2.900000
+-3.500000 3.000000
+-3.500000 3.100000
+-3.500000 3.200000
+-3.500000 3.300000
+-3.500000 3.400000
+-3.500000 3.500000
+-3.500000 3.600000
+-3.500000 3.700000
+-3.500000 3.800000
+-3.500000 3.900000
+-3.500000 4.000000
+-3.400000 -4.000000
+-3.400000 -3.900000
+-3.400000 -3.800000
+-3.400000 -3.700000
+-3.400000 -3.600000
+-3.400000 -3.500000
+-3.400000 -3.400000
+-3.400000 -3.300000
+-3.400000 -3.200000
+-3.400000 -3.100000
+-3.400000 -3.000000
+-3.400000 -2.900000
+-3.400000 -2.800000
+-3.400000 -2.700000
+-3.400000 -2.600000
+-3.400000 -2.500000
+-3.400000 -2.400000
+-3.400000 -2.300000
+-3.400000 -2.200000
+-3.400000 -2.100000
+-3.400000 -2.000000
+-3.400000 -1.900000
+-3.400000 -1.800000
+-3.400000 -1.700000
+-3.400000 -1.600000
+-3.400000 -1.500000
+-3.400000 -1.400000
+-3.400000 -1.300000
+-3.400000 -1.200000
+-3.400000 -1.100000
+-3.400000 -1.000000
+-3.400000 -0.900000
+-3.400000 -0.800000
+-3.400000 -0.700000
+-3.400000 -0.600000
+-3.400000 -0.500000
+-3.400000 -0.400000
+-3.400000 -0.300000
+-3.400000 -0.200000
+-3.400000 -0.100000
+-3.400000 0.000000
+-3.400000 0.100000
+-3.400000 0.200000
+-3.400000 0.300000
+-3.400000 0.400000
+-3.400000 0.500000
+-3.400000 0.600000
+-3.400000 0.700000
+-3.400000 0.800000
+-3.400000 0.900000
+-3.400000 1.000000
+-3.400000 1.100000
+-3.400000 1.200000
+-3.400000 1.300000
+-3.400000 1.400000
+-3.400000 1.500000
+-3.400000 1.600000
+-3.400000 1.700000
+-3.400000 1.800000
+-3.400000 1.900000
+-3.400000 2.000000
+-3.400000 2.100000
+-3.400000 2.200000
+-3.400000 2.300000
+-3.400000 2.400000
+-3.400000 2.500000
+-3.400000 2.600000
+-3.400000 2.700000
+-3.400000 2.800000
+-3.400000 2.900000
+-3.400000 3.000000
+-3.400000 3.100000
+-3.400000 3.200000
+-3.400000 3.300000
+-3.400000 3.400000
+-3.400000 3.500000
+-3.400000 3.600000
+-3.400000 3.700000
+-3.400000 3.800000
+-3.400000 3.900000
+-3.400000 4.000000
+-3.300000 -4.000000
+-3.300000 -3.900000
+-3.300000 -3.800000
+-3.300000 -3.700000
+-3.300000 -3.600000
+-3.300000 -3.500000
+-3.300000 -3.400000
+-3.300000 -3.300000
+-3.300000 -3.200000
+-3.300000 -3.100000
+-3.300000 -3.000000
+-3.300000 -2.900000
+-3.300000 -2.800000
+-3.300000 -2.700000
+-3.300000 -2.600000
+-3.300000 -2.500000
+-3.300000 -2.400000
+-3.300000 -2.300000
+-3.300000 -2.200000
+-3.300000 -2.100000
+-3.300000 -2.000000
+-3.300000 -1.900000
+-3.300000 -1.800000
+-3.300000 -1.700000
+-3.300000 -1.600000
+-3.300000 -1.500000
+-3.300000 -1.400000
+-3.300000 -1.300000
+-3.300000 -1.200000
+-3.300000 -1.100000
+-3.300000 -1.000000
+-3.300000 -0.900000
+-3.300000 -0.800000
+-3.300000 -0.700000
+-3.300000 -0.600000
+-3.300000 -0.500000
+-3.300000 -0.400000
+-3.300000 -0.300000
+-3.300000 -0.200000
+-3.300000 -0.100000
+-3.300000 0.000000
+-3.300000 0.100000
+-3.300000 0.200000
+-3.300000 0.300000
+-3.300000 0.400000
+-3.300000 0.500000
+-3.300000 0.600000
+-3.300000 0.700000
+-3.300000 0.800000
+-3.300000 0.900000
+-3.300000 1.000000
+-3.300000 1.100000
+-3.300000 1.200000
+-3.300000 1.300000
+-3.300000 1.400000
+-3.300000 1.500000
+-3.300000 1.600000
+-3.300000 1.700000
+-3.300000 1.800000
+-3.300000 1.900000
+-3.300000 2.000000
+-3.300000 2.100000
+-3.300000 2.200000
+-3.300000 2.300000
+-3.300000 2.400000
+-3.300000 2.500000
+-3.300000 2.600000
+-3.300000 2.700000
+-3.300000 2.800000
+-3.300000 2.900000
+-3.300000 3.000000
+-3.300000 3.100000
+-3.300000 3.200000
+-3.300000 3.300000
+-3.300000 3.400000
+-3.300000 3.500000
+-3.300000 3.600000
+-3.300000 3.700000
+-3.300000 3.800000
+-3.300000 3.900000
+-3.300000 4.000000
+-3.200000 -4.000000
+-3.200000 -3.900000
+-3.200000 -3.800000
+-3.200000 -3.700000
+-3.200000 -3.600000
+-3.200000 -3.500000
+-3.200000 -3.400000
+-3.200000 -3.300000
+-3.200000 -3.200000
+-3.200000 -3.100000
+-3.200000 -3.000000
+-3.200000 -2.900000
+-3.200000 -2.800000
+-3.200000 -2.700000
+-3.200000 -2.600000
+-3.200000 -2.500000
+-3.200000 -2.400000
+-3.200000 -2.300000
+-3.200000 -2.200000
+-3.200000 -2.100000
+-3.200000 -2.000000
+-3.200000 -1.900000
+-3.200000 -1.800000
+-3.200000 -1.700000
+-3.200000 -1.600000
+-3.200000 -1.500000
+-3.200000 -1.400000
+-3.200000 -1.300000
+-3.200000 -1.200000
+-3.200000 -1.100000
+-3.200000 -1.000000
+-3.200000 -0.900000
+-3.200000 -0.800000
+-3.200000 -0.700000
+-3.200000 -0.600000
+-3.200000 -0.500000
+-3.200000 -0.400000
+-3.200000 -0.300000
+-3.200000 -0.200000
+-3.200000 -0.100000
+-3.200000 0.000000
+-3.200000 0.100000
+-3.200000 0.200000
+-3.200000 0.300000
+-3.200000 0.400000
+-3.200000 0.500000
+-3.200000 0.600000
+-3.200000 0.700000
+-3.200000 0.800000
+-3.200000 0.900000
+-3.200000 1.000000
+-3.200000 1.100000
+-3.200000 1.200000
+-3.200000 1.300000
+-3.200000 1.400000
+-3.200000 1.500000
+-3.200000 1.600000
+-3.200000 1.700000
+-3.200000 1.800000
+-3.200000 1.900000
+-3.200000 2.000000
+-3.200000 2.100000
+-3.200000 2.200000
+-3.200000 2.300000
+-3.200000 2.400000
+-3.200000 2.500000
+-3.200000 2.600000
+-3.200000 2.700000
+-3.200000 2.800000
+-3.200000 2.900000
+-3.200000 3.000000
+-3.200000 3.100000
+-3.200000 3.200000
+-3.200000 3.300000
+-3.200000 3.400000
+-3.200000 3.500000
+-3.200000 3.600000
+-3.200000 3.700000
+-3.200000 3.800000
+-3.200000 3.900000
+-3.200000 4.000000
+-3.100000 -4.000000
+-3.100000 -3.900000
+-3.100000 -3.800000
+-3.100000 -3.700000
+-3.100000 -3.600000
+-3.100000 -3.500000
+-3.100000 -3.400000
+-3.100000 -3.300000
+-3.100000 -3.200000
+-3.100000 -3.100000
+-3.100000 -3.000000
+-3.100000 -2.900000
+-3.100000 -2.800000
+-3.100000 -2.700000
+-3.100000 -2.600000
+-3.100000 -2.500000
+-3.100000 -2.400000
+-3.100000 -2.300000
+-3.100000 -2.200000
+-3.100000 -2.100000
+-3.100000 -2.000000
+-3.100000 -1.900000
+-3.100000 -1.800000
+-3.100000 -1.700000
+-3.100000 -1.600000
+-3.100000 -1.500000
+-3.100000 -1.400000
+-3.100000 -1.300000
+-3.100000 -1.200000
+-3.100000 -1.100000
+-3.100000 -1.000000
+-3.100000 -0.900000
+-3.100000 -0.800000
+-3.100000 -0.700000
+-3.100000 -0.600000
+-3.100000 -0.500000
+-3.100000 -0.400000
+-3.100000 -0.300000
+-3.100000 -0.200000
+-3.100000 -0.100000
+-3.100000 0.000000
+-3.100000 0.100000
+-3.100000 0.200000
+-3.100000 0.300000
+-3.100000 0.400000
+-3.100000 0.500000
+-3.100000 0.600000
+-3.100000 0.700000
+-3.100000 0.800000
+-3.100000 0.900000
+-3.100000 1.000000
+-3.100000 1.100000
+-3.100000 1.200000
+-3.100000 1.300000
+-3.100000 1.400000
+-3.100000 1.500000
+-3.100000 1.600000
+-3.100000 1.700000
+-3.100000 1.800000
+-3.100000 1.900000
+-3.100000 2.000000
+-3.100000 2.100000
+-3.100000 2.200000
+-3.100000 2.300000
+-3.100000 2.400000
+-3.100000 2.500000
+-3.100000 2.600000
+-3.100000 2.700000
+-3.100000 2.800000
+-3.100000 2.900000
+-3.100000 3.000000
+-3.100000 3.100000
+-3.100000 3.200000
+-3.100000 3.300000
+-3.100000 3.400000
+-3.100000 3.500000
+-3.100000 3.600000
+-3.100000 3.700000
+-3.100000 3.800000
+-3.100000 3.900000
+-3.100000 4.000000
+-3.000000 -4.000000
+-3.000000 -3.900000
+-3.000000 -3.800000
+-3.000000 -3.700000
+-3.000000 -3.600000
+-3.000000 -3.500000
+-3.000000 -3.400000
+-3.000000 -3.300000
+-3.000000 -3.200000
+-3.000000 -3.100000
+-3.000000 -3.000000
+-3.000000 -2.900000
+-3.000000 -2.800000
+-3.000000 -2.700000
+-3.000000 -2.600000
+-3.000000 -2.500000
+-3.000000 -2.400000
+-3.000000 -2.300000
+-3.000000 -2.200000
+-3.000000 -2.100000
+-3.000000 -2.000000
+-3.000000 -1.900000
+-3.000000 -1.800000
+-3.000000 -1.700000
+-3.000000 -1.600000
+-3.000000 -1.500000
+-3.000000 -1.400000
+-3.000000 -1.300000
+-3.000000 -1.200000
+-3.000000 -1.100000
+-3.000000 -1.000000
+-3.000000 -0.900000
+-3.000000 -0.800000
+-3.000000 -0.700000
+-3.000000 -0.600000
+-3.000000 -0.500000
+-3.000000 -0.400000
+-3.000000 -0.300000
+-3.000000 -0.200000
+-3.000000 -0.100000
+-3.000000 0.000000
+-3.000000 0.100000
+-3.000000 0.200000
+-3.000000 0.300000
+-3.000000 0.400000
+-3.000000 0.500000
+-3.000000 0.600000
+-3.000000 0.700000
+-3.000000 0.800000
+-3.000000 0.900000
+-3.000000 1.000000
+-3.000000 1.100000
+-3.000000 1.200000
+-3.000000 1.300000
+-3.000000 1.400000
+-3.000000 1.500000
+-3.000000 1.600000
+-3.000000 1.700000
+-3.000000 1.800000
+-3.000000 1.900000
+-3.000000 2.000000
+-3.000000 2.100000
+-3.000000 2.200000
+-3.000000 2.300000
+-3.000000 2.400000
+-3.000000 2.500000
+-3.000000 2.600000
+-3.000000 2.700000
+-3.000000 2.800000
+-3.000000 2.900000
+-3.000000 3.000000
+-3.000000 3.100000
+-3.000000 3.200000
+-3.000000 3.300000
+-3.000000 3.400000
+-3.000000 3.500000
+-3.000000 3.600000
+-3.000000 3.700000
+-3.000000 3.800000
+-3.000000 3.900000
+-3.000000 4.000000
+-2.900000 -4.000000
+-2.900000 -3.900000
+-2.900000 -3.800000
+-2.900000 -3.700000
+-2.900000 -3.600000
+-2.900000 -3.500000
+-2.900000 -3.400000
+-2.900000 -3.300000
+-2.900000 -3.200000
+-2.900000 -3.100000
+-2.900000 -3.000000
+-2.900000 -2.900000
+-2.900000 -2.800000
+-2.900000 -2.700000
+-2.900000 -2.600000
+-2.900000 -2.500000
+-2.900000 -2.400000
+-2.900000 -2.300000
+-2.900000 -2.200000
+-2.900000 -2.100000
+-2.900000 -2.000000
+-2.900000 -1.900000
+-2.900000 -1.800000
+-2.900000 -1.700000
+-2.900000 -1.600000
+-2.900000 -1.500000
+-2.900000 -1.400000
+-2.900000 -1.300000
+-2.900000 -1.200000
+-2.900000 -1.100000
+-2.900000 -1.000000
+-2.900000 -0.900000
+-2.900000 -0.800000
+-2.900000 -0.700000
+-2.900000 -0.600000
+-2.900000 -0.500000
+-2.900000 -0.400000
+-2.900000 -0.300000
+-2.900000 -0.200000
+-2.900000 -0.100000
+-2.900000 0.000000
+-2.900000 0.100000
+-2.900000 0.200000
+-2.900000 0.300000
+-2.900000 0.400000
+-2.900000 0.500000
+-2.900000 0.600000
+-2.900000 0.700000
+-2.900000 0.800000
+-2.900000 0.900000
+-2.900000 1.000000
+-2.900000 1.100000
+-2.900000 1.200000
+-2.900000 1.300000
+-2.900000 1.400000
+-2.900000 1.500000
+-2.900000 1.600000
+-2.900000 1.700000
+-2.900000 1.800000
+-2.900000 1.900000
+-2.900000 2.000000
+-2.900000 2.100000
+-2.900000 2.200000
+-2.900000 2.300000
+-2.900000 2.400000
+-2.900000 2.500000
+-2.900000 2.600000
+-2.900000 2.700000
+-2.900000 2.800000
+-2.900000 2.900000
+-2.900000 3.000000
+-2.900000 3.100000
+-2.900000 3.200000
+-2.900000 3.300000
+-2.900000 3.400000
+-2.900000 3.500000
+-2.900000 3.600000
+-2.900000 3.700000
+-2.900000 3.800000
+-2.900000 3.900000
+-2.900000 4.000000
+-2.800000 -4.000000
+-2.800000 -3.900000
+-2.800000 -3.800000
+-2.800000 -3.700000
+-2.800000 -3.600000
+-2.800000 -3.500000
+-2.800000 -3.400000
+-2.800000 -3.300000
+-2.800000 -3.200000
+-2.800000 -3.100000
+-2.800000 -3.000000
+-2.800000 -2.900000
+-2.800000 -2.800000
+-2.800000 -2.700000
+-2.800000 -2.600000
+-2.800000 -2.500000
+-2.800000 -2.400000
+-2.800000 -2.300000
+-2.800000 -2.200000
+-2.800000 -2.100000
+-2.800000 -2.000000
+-2.800000 -1.900000
+-2.800000 -1.800000
+-2.800000 -1.700000
+-2.800000 -1.600000
+-2.800000 -1.500000
+-2.800000 -1.400000
+-2.800000 -1.300000
+-2.800000 -1.200000
+-2.800000 -1.100000
+-2.800000 -1.000000
+-2.800000 -0.900000
+-2.800000 -0.800000
+-2.800000 -0.700000
+-2.800000 -0.600000
+-2.800000 -0.500000
+-2.800000 -0.400000
+-2.800000 -0.300000
+-2.800000 -0.200000
+-2.800000 -0.100000
+-2.800000 0.000000
+-2.800000 0.100000
+-2.800000 0.200000
+-2.800000 0.300000
+-2.800000 0.400000
+-2.800000 0.500000
+-2.800000 0.600000
+-2.800000 0.700000
+-2.800000 0.800000
+-2.800000 0.900000
+-2.800000 1.000000
+-2.800000 1.100000
+-2.800000 1.200000
+-2.800000 1.300000
+-2.800000 1.400000
+-2.800000 1.500000
+-2.800000 1.600000
+-2.800000 1.700000
+-2.800000 1.800000
+-2.800000 1.900000
+-2.800000 2.000000
+-2.800000 2.100000
+-2.800000 2.200000
+-2.800000 2.300000
+-2.800000 2.400000
+-2.800000 2.500000
+-2.800000 2.600000
+-2.800000 2.700000
+-2.800000 2.800000
+-2.800000 2.900000
+-2.800000 3.000000
+-2.800000 3.100000
+-2.800000 3.200000
+-2.800000 3.300000
+-2.800000 3.400000
+-2.800000 3.500000
+-2.800000 3.600000
+-2.800000 3.700000
+-2.800000 3.800000
+-2.800000 3.900000
+-2.800000 4.000000
+-2.700000 -4.000000
+-2.700000 -3.900000
+-2.700000 -3.800000
+-2.700000 -3.700000
+-2.700000 -3.600000
+-2.700000 -3.500000
+-2.700000 -3.400000
+-2.700000 -3.300000
+-2.700000 -3.200000
+-2.700000 -3.100000
+-2.700000 -3.000000
+-2.700000 -2.900000
+-2.700000 -2.800000
+-2.700000 -2.700000
+-2.700000 -2.600000
+-2.700000 -2.500000
+-2.700000 -2.400000
+-2.700000 -2.300000
+-2.700000 -2.200000
+-2.700000 -2.100000
+-2.700000 -2.000000
+-2.700000 -1.900000
+-2.700000 -1.800000
+-2.700000 -1.700000
+-2.700000 -1.600000
+-2.700000 -1.500000
+-2.700000 -1.400000
+-2.700000 -1.300000
+-2.700000 -1.200000
+-2.700000 -1.100000
+-2.700000 -1.000000
+-2.700000 -0.900000
+-2.700000 -0.800000
+-2.700000 -0.700000
+-2.700000 -0.600000
+-2.700000 -0.500000
+-2.700000 -0.400000
+-2.700000 -0.300000
+-2.700000 -0.200000
+-2.700000 -0.100000
+-2.700000 0.000000
+-2.700000 0.100000
+-2.700000 0.200000
+-2.700000 0.300000
+-2.700000 0.400000
+-2.700000 0.500000
+-2.700000 0.600000
+-2.700000 0.700000
+-2.700000 0.800000
+-2.700000 0.900000
+-2.700000 1.000000
+-2.700000 1.100000
+-2.700000 1.200000
+-2.700000 1.300000
+-2.700000 1.400000
+-2.700000 1.500000
+-2.700000 1.600000
+-2.700000 1.700000
+-2.700000 1.800000
+-2.700000 1.900000
+-2.700000 2.000000
+-2.700000 2.100000
+-2.700000 2.200000
+-2.700000 2.300000
+-2.700000 2.400000
+-2.700000 2.500000
+-2.700000 2.600000
+-2.700000 2.700000
+-2.700000 2.800000
+-2.700000 2.900000
+-2.700000 3.000000
+-2.700000 3.100000
+-2.700000 3.200000
+-2.700000 3.300000
+-2.700000 3.400000
+-2.700000 3.500000
+-2.700000 3.600000
+-2.700000 3.700000
+-2.700000 3.800000
+-2.700000 3.900000
+-2.700000 4.000000
+-2.600000 -4.000000
+-2.600000 -3.900000
+-2.600000 -3.800000
+-2.600000 -3.700000
+-2.600000 -3.600000
+-2.600000 -3.500000
+-2.600000 -3.400000
+-2.600000 -3.300000
+-2.600000 -3.200000
+-2.600000 -3.100000
+-2.600000 -3.000000
+-2.600000 -2.900000
+-2.600000 -2.800000
+-2.600000 -2.700000
+-2.600000 -2.600000
+-2.600000 -2.500000
+-2.600000 -2.400000
+-2.600000 -2.300000
+-2.600000 -2.200000
+-2.600000 -2.100000
+-2.600000 -2.000000
+-2.600000 -1.900000
+-2.600000 -1.800000
+-2.600000 -1.700000
+-2.600000 -1.600000
+-2.600000 -1.500000
+-2.600000 -1.400000
+-2.600000 -1.300000
+-2.600000 -1.200000
+-2.600000 -1.100000
+-2.600000 -1.000000
+-2.600000 -0.900000
+-2.600000 -0.800000
+-2.600000 -0.700000
+-2.600000 -0.600000
+-2.600000 -0.500000
+-2.600000 -0.400000
+-2.600000 -0.300000
+-2.600000 -0.200000
+-2.600000 -0.100000
+-2.600000 0.000000
+-2.600000 0.100000
+-2.600000 0.200000
+-2.600000 0.300000
+-2.600000 0.400000
+-2.600000 0.500000
+-2.600000 0.600000
+-2.600000 0.700000
+-2.600000 0.800000
+-2.600000 0.900000
+-2.600000 1.000000
+-2.600000 1.100000
+-2.600000 1.200000
+-2.600000 1.300000
+-2.600000 1.400000
+-2.600000 1.500000
+-2.600000 1.600000
+-2.600000 1.700000
+-2.600000 1.800000
+-2.600000 1.900000
+-2.600000 2.000000
+-2.600000 2.100000
+-2.600000 2.200000
+-2.600000 2.300000
+-2.600000 2.400000
+-2.600000 2.500000
+-2.600000 2.600000
+-2.600000 2.700000
+-2.600000 2.800000
+-2.600000 2.900000
+-2.600000 3.000000
+-2.600000 3.100000
+-2.600000 3.200000
+-2.600000 3.300000
+-2.600000 3.400000
+-2.600000 3.500000
+-2.600000 3.600000
+-2.600000 3.700000
+-2.600000 3.800000
+-2.600000 3.900000
+-2.600000 4.000000
+-2.500000 -4.000000
+-2.500000 -3.900000
+-2.500000 -3.800000
+-2.500000 -3.700000
+-2.500000 -3.600000
+-2.500000 -3.500000
+-2.500000 -3.400000
+-2.500000 -3.300000
+-2.500000 -3.200000
+-2.500000 -3.100000
+-2.500000 -3.000000
+-2.500000 -2.900000
+-2.500000 -2.800000
+-2.500000 -2.700000
+-2.500000 -2.600000
+-2.500000 -2.500000
+-2.500000 -2.400000
+-2.500000 -2.300000
+-2.500000 -2.200000
+-2.500000 -2.100000
+-2.500000 -2.000000
+-2.500000 -1.900000
+-2.500000 -1.800000
+-2.500000 -1.700000
+-2.500000 -1.600000
+-2.500000 -1.500000
+-2.500000 -1.400000
+-2.500000 -1.300000
+-2.500000 -1.200000
+-2.500000 -1.100000
+-2.500000 -1.000000
+-2.500000 -0.900000
+-2.500000 -0.800000
+-2.500000 -0.700000
+-2.500000 -0.600000
+-2.500000 -0.500000
+-2.500000 -0.400000
+-2.500000 -0.300000
+-2.500000 -0.200000
+-2.500000 -0.100000
+-2.500000 0.000000
+-2.500000 0.100000
+-2.500000 0.200000
+-2.500000 0.300000
+-2.500000 0.400000
+-2.500000 0.500000
+-2.500000 0.600000
+-2.500000 0.700000
+-2.500000 0.800000
+-2.500000 0.900000
+-2.500000 1.000000
+-2.500000 1.100000
+-2.500000 1.200000
+-2.500000 1.300000
+-2.500000 1.400000
+-2.500000 1.500000
+-2.500000 1.600000
+-2.500000 1.700000
+-2.500000 1.800000
+-2.500000 1.900000
+-2.500000 2.000000
+-2.500000 2.100000
+-2.500000 2.200000
+-2.500000 2.300000
+-2.500000 2.400000
+-2.500000 2.500000
+-2.500000 2.600000
+-2.500000 2.700000
+-2.500000 2.800000
+-2.500000 2.900000
+-2.500000 3.000000
+-2.500000 3.100000
+-2.500000 3.200000
+-2.500000 3.300000
+-2.500000 3.400000
+-2.500000 3.500000
+-2.500000 3.600000
+-2.500000 3.700000
+-2.500000 3.800000
+-2.500000 3.900000
+-2.500000 4.000000
+-2.400000 -4.000000
+-2.400000 -3.900000
+-2.400000 -3.800000
+-2.400000 -3.700000
+-2.400000 -3.600000
+-2.400000 -3.500000
+-2.400000 -3.400000
+-2.400000 -3.300000
+-2.400000 -3.200000
+-2.400000 -3.100000
+-2.400000 -3.000000
+-2.400000 -2.900000
+-2.400000 -2.800000
+-2.400000 -2.700000
+-2.400000 -2.600000
+-2.400000 -2.500000
+-2.400000 -2.400000
+-2.400000 -2.300000
+-2.400000 -2.200000
+-2.400000 -2.100000
+-2.400000 -2.000000
+-2.400000 -1.900000
+-2.400000 -1.800000
+-2.400000 -1.700000
+-2.400000 -1.600000
+-2.400000 -1.500000
+-2.400000 -1.400000
+-2.400000 -1.300000
+-2.400000 -1.200000
+-2.400000 -1.100000
+-2.400000 -1.000000
+-2.400000 -0.900000
+-2.400000 -0.800000
+-2.400000 -0.700000
+-2.400000 -0.600000
+-2.400000 -0.500000
+-2.400000 -0.400000
+-2.400000 -0.300000
+-2.400000 -0.200000
+-2.400000 -0.100000
+-2.400000 0.000000
+-2.400000 0.100000
+-2.400000 0.200000
+-2.400000 0.300000
+-2.400000 0.400000
+-2.400000 0.500000
+-2.400000 0.600000
+-2.400000 0.700000
+-2.400000 0.800000
+-2.400000 0.900000
+-2.400000 1.000000
+-2.400000 1.100000
+-2.400000 1.200000
+-2.400000 1.300000
+-2.400000 1.400000
+-2.400000 1.500000
+-2.400000 1.600000
+-2.400000 1.700000
+-2.400000 1.800000
+-2.400000 1.900000
+-2.400000 2.000000
+-2.400000 2.100000
+-2.400000 2.200000
+-2.400000 2.300000
+-2.400000 2.400000
+-2.400000 2.500000
+-2.400000 2.600000
+-2.400000 2.700000
+-2.400000 2.800000
+-2.400000 2.900000
+-2.400000 3.000000
+-2.400000 3.100000
+-2.400000 3.200000
+-2.400000 3.300000
+-2.400000 3.400000
+-2.400000 3.500000
+-2.400000 3.600000
+-2.400000 3.700000
+-2.400000 3.800000
+-2.400000 3.900000
+-2.400000 4.000000
+-2.300000 -4.000000
+-2.300000 -3.900000
+-2.300000 -3.800000
+-2.300000 -3.700000
+-2.300000 -3.600000
+-2.300000 -3.500000
+-2.300000 -3.400000
+-2.300000 -3.300000
+-2.300000 -3.200000
+-2.300000 -3.100000
+-2.300000 -3.000000
+-2.300000 -2.900000
+-2.300000 -2.800000
+-2.300000 -2.700000
+-2.300000 -2.600000
+-2.300000 -2.500000
+-2.300000 -2.400000
+-2.300000 -2.300000
+-2.300000 -2.200000
+-2.300000 -2.100000
+-2.300000 -2.000000
+-2.300000 -1.900000
+-2.300000 -1.800000
+-2.300000 -1.700000
+-2.300000 -1.600000
+-2.300000 -1.500000
+-2.300000 -1.400000
+-2.300000 -1.300000
+-2.300000 -1.200000
+-2.300000 -1.100000
+-2.300000 -1.000000
+-2.300000 -0.900000
+-2.300000 -0.800000
+-2.300000 -0.700000
+-2.300000 -0.600000
+-2.300000 -0.500000
+-2.300000 -0.400000
+-2.300000 -0.300000
+-2.300000 -0.200000
+-2.300000 -0.100000
+-2.300000 0.000000
+-2.300000 0.100000
+-2.300000 0.200000
+-2.300000 0.300000
+-2.300000 0.400000
+-2.300000 0.500000
+-2.300000 0.600000
+-2.300000 0.700000
+-2.300000 0.800000
+-2.300000 0.900000
+-2.300000 1.000000
+-2.300000 1.100000
+-2.300000 1.200000
+-2.300000 1.300000
+-2.300000 1.400000
+-2.300000 1.500000
+-2.300000 1.600000
+-2.300000 1.700000
+-2.300000 1.800000
+-2.300000 1.900000
+-2.300000 2.000000
+-2.300000 2.100000
+-2.300000 2.200000
+-2.300000 2.300000
+-2.300000 2.400000
+-2.300000 2.500000
+-2.300000 2.600000
+-2.300000 2.700000
+-2.300000 2.800000
+-2.300000 2.900000
+-2.300000 3.000000
+-2.300000 3.100000
+-2.300000 3.200000
+-2.300000 3.300000
+-2.300000 3.400000
+-2.300000 3.500000
+-2.300000 3.600000
+-2.300000 3.700000
+-2.300000 3.800000
+-2.300000 3.900000
+-2.300000 4.000000
+-2.200000 -4.000000
+-2.200000 -3.900000
+-2.200000 -3.800000
+-2.200000 -3.700000
+-2.200000 -3.600000
+-2.200000 -3.500000
+-2.200000 -3.400000
+-2.200000 -3.300000
+-2.200000 -3.200000
+-2.200000 -3.100000
+-2.200000 -3.000000
+-2.200000 -2.900000
+-2.200000 -2.800000
+-2.200000 -2.700000
+-2.200000 -2.600000
+-2.200000 -2.500000
+-2.200000 -2.400000
+-2.200000 -2.300000
+-2.200000 -2.200000
+-2.200000 -2.100000
+-2.200000 -2.000000
+-2.200000 -1.900000
+-2.200000 -1.800000
+-2.200000 -1.700000
+-2.200000 -1.600000
+-2.200000 -1.500000
+-2.200000 -1.400000
+-2.200000 -1.300000
+-2.200000 -1.200000
+-2.200000 -1.100000
+-2.200000 -1.000000
+-2.200000 -0.900000
+-2.200000 -0.800000
+-2.200000 -0.700000
+-2.200000 -0.600000
+-2.200000 -0.500000
+-2.200000 -0.400000
+-2.200000 -0.300000
+-2.200000 -0.200000
+-2.200000 -0.100000
+-2.200000 0.000000
+-2.200000 0.100000
+-2.200000 0.200000
+-2.200000 0.300000
+-2.200000 0.400000
+-2.200000 0.500000
+-2.200000 0.600000
+-2.200000 0.700000
+-2.200000 0.800000
+-2.200000 0.900000
+-2.200000 1.000000
+-2.200000 1.100000
+-2.200000 1.200000
+-2.200000 1.300000
+-2.200000 1.400000
+-2.200000 1.500000
+-2.200000 1.600000
+-2.200000 1.700000
+-2.200000 1.800000
+-2.200000 1.900000
+-2.200000 2.000000
+-2.200000 2.100000
+-2.200000 2.200000
+-2.200000 2.300000
+-2.200000 2.400000
+-2.200000 2.500000
+-2.200000 2.600000
+-2.200000 2.700000
+-2.200000 2.800000
+-2.200000 2.900000
+-2.200000 3.000000
+-2.200000 3.100000
+-2.200000 3.200000
+-2.200000 3.300000
+-2.200000 3.400000
+-2.200000 3.500000
+-2.200000 3.600000
+-2.200000 3.700000
+-2.200000 3.800000
+-2.200000 3.900000
+-2.200000 4.000000
+-2.100000 -4.000000
+-2.100000 -3.900000
+-2.100000 -3.800000
+-2.100000 -3.700000
+-2.100000 -3.600000
+-2.100000 -3.500000
+-2.100000 -3.400000
+-2.100000 -3.300000
+-2.100000 -3.200000
+-2.100000 -3.100000
+-2.100000 -3.000000
+-2.100000 -2.900000
+-2.100000 -2.800000
+-2.100000 -2.700000
+-2.100000 -2.600000
+-2.100000 -2.500000
+-2.100000 -2.400000
+-2.100000 -2.300000
+-2.100000 -2.200000
+-2.100000 -2.100000
+-2.100000 -2.000000
+-2.100000 -1.900000
+-2.100000 -1.800000
+-2.100000 -1.700000
+-2.100000 -1.600000
+-2.100000 -1.500000
+-2.100000 -1.400000
+-2.100000 -1.300000
+-2.100000 -1.200000
+-2.100000 -1.100000
+-2.100000 -1.000000
+-2.100000 -0.900000
+-2.100000 -0.800000
+-2.100000 -0.700000
+-2.100000 -0.600000
+-2.100000 -0.500000
+-2.100000 -0.400000
+-2.100000 -0.300000
+-2.100000 -0.200000
+-2.100000 -0.100000
+-2.100000 0.000000
+-2.100000 0.100000
+-2.100000 0.200000
+-2.100000 0.300000
+-2.100000 0.400000
+-2.100000 0.500000
+-2.100000 0.600000
+-2.100000 0.700000
+-2.100000 0.800000
+-2.100000 0.900000
+-2.100000 1.000000
+-2.100000 1.100000
+-2.100000 1.200000
+-2.100000 1.300000
+-2.100000 1.400000
+-2.100000 1.500000
+-2.100000 1.600000
+-2.100000 1.700000
+-2.100000 1.800000
+-2.100000 1.900000
+-2.100000 2.000000
+-2.100000 2.100000
+-2.100000 2.200000
+-2.100000 2.300000
+-2.100000 2.400000
+-2.100000 2.500000
+-2.100000 2.600000
+-2.100000 2.700000
+-2.100000 2.800000
+-2.100000 2.900000
+-2.100000 3.000000
+-2.100000 3.100000
+-2.100000 3.200000
+-2.100000 3.300000
+-2.100000 3.400000
+-2.100000 3.500000
+-2.100000 3.600000
+-2.100000 3.700000
+-2.100000 3.800000
+-2.100000 3.900000
+-2.100000 4.000000
+-2.000000 -4.000000
+-2.000000 -3.900000
+-2.000000 -3.800000
+-2.000000 -3.700000
+-2.000000 -3.600000
+-2.000000 -3.500000
+-2.000000 -3.400000
+-2.000000 -3.300000
+-2.000000 -3.200000
+-2.000000 -3.100000
+-2.000000 -3.000000
+-2.000000 -2.900000
+-2.000000 -2.800000
+-2.000000 -2.700000
+-2.000000 -2.600000
+-2.000000 -2.500000
+-2.000000 -2.400000
+-2.000000 -2.300000
+-2.000000 -2.200000
+-2.000000 -2.100000
+-2.000000 -2.000000
+-2.000000 -1.900000
+-2.000000 -1.800000
+-2.000000 -1.700000
+-2.000000 -1.600000
+-2.000000 -1.500000
+-2.000000 -1.400000
+-2.000000 -1.300000
+-2.000000 -1.200000
+-2.000000 -1.100000
+-2.000000 -1.000000
+-2.000000 -0.900000
+-2.000000 -0.800000
+-2.000000 -0.700000
+-2.000000 -0.600000
+-2.000000 -0.500000
+-2.000000 -0.400000
+-2.000000 -0.300000
+-2.000000 -0.200000
+-2.000000 -0.100000
+-2.000000 0.000000
+-2.000000 0.100000
+-2.000000 0.200000
+-2.000000 0.300000
+-2.000000 0.400000
+-2.000000 0.500000
+-2.000000 0.600000
+-2.000000 0.700000
+-2.000000 0.800000
+-2.000000 0.900000
+-2.000000 1.000000
+-2.000000 1.100000
+-2.000000 1.200000
+-2.000000 1.300000
+-2.000000 1.400000
+-2.000000 1.500000
+-2.000000 1.600000
+-2.000000 1.700000
+-2.000000 1.800000
+-2.000000 1.900000
+-2.000000 2.000000
+-2.000000 2.100000
+-2.000000 2.200000
+-2.000000 2.300000
+-2.000000 2.400000
+-2.000000 2.500000
+-2.000000 2.600000
+-2.000000 2.700000
+-2.000000 2.800000
+-2.000000 2.900000
+-2.000000 3.000000
+-2.000000 3.100000
+-2.000000 3.200000
+-2.000000 3.300000
+-2.000000 3.400000
+-2.000000 3.500000
+-2.000000 3.600000
+-2.000000 3.700000
+-2.000000 3.800000
+-2.000000 3.900000
+-2.000000 4.000000
+-1.900000 -4.000000
+-1.900000 -3.900000
+-1.900000 -3.800000
+-1.900000 -3.700000
+-1.900000 -3.600000
+-1.900000 -3.500000
+-1.900000 -3.400000
+-1.900000 -3.300000
+-1.900000 -3.200000
+-1.900000 -3.100000
+-1.900000 -3.000000
+-1.900000 -2.900000
+-1.900000 -2.800000
+-1.900000 -2.700000
+-1.900000 -2.600000
+-1.900000 -2.500000
+-1.900000 -2.400000
+-1.900000 -2.300000
+-1.900000 -2.200000
+-1.900000 -2.100000
+-1.900000 -2.000000
+-1.900000 -1.900000
+-1.900000 -1.800000
+-1.900000 -1.700000
+-1.900000 -1.600000
+-1.900000 -1.500000
+-1.900000 -1.400000
+-1.900000 -1.300000
+-1.900000 -1.200000
+-1.900000 -1.100000
+-1.900000 -1.000000
+-1.900000 -0.900000
+-1.900000 -0.800000
+-1.900000 -0.700000
+-1.900000 -0.600000
+-1.900000 -0.500000
+-1.900000 -0.400000
+-1.900000 -0.300000
+-1.900000 -0.200000
+-1.900000 -0.100000
+-1.900000 0.000000
+-1.900000 0.100000
+-1.900000 0.200000
+-1.900000 0.300000
+-1.900000 0.400000
+-1.900000 0.500000
+-1.900000 0.600000
+-1.900000 0.700000
+-1.900000 0.800000
+-1.900000 0.900000
+-1.900000 1.000000
+-1.900000 1.100000
+-1.900000 1.200000
+-1.900000 1.300000
+-1.900000 1.400000
+-1.900000 1.500000
+-1.900000 1.600000
+-1.900000 1.700000
+-1.900000 1.800000
+-1.900000 1.900000
+-1.900000 2.000000
+-1.900000 2.100000
+-1.900000 2.200000
+-1.900000 2.300000
+-1.900000 2.400000
+-1.900000 2.500000
+-1.900000 2.600000
+-1.900000 2.700000
+-1.900000 2.800000
+-1.900000 2.900000
+-1.900000 3.000000
+-1.900000 3.100000
+-1.900000 3.200000
+-1.900000 3.300000
+-1.900000 3.400000
+-1.900000 3.500000
+-1.900000 3.600000
+-1.900000 3.700000
+-1.900000 3.800000
+-1.900000 3.900000
+-1.900000 4.000000
+-1.800000 -4.000000
+-1.800000 -3.900000
+-1.800000 -3.800000
+-1.800000 -3.700000
+-1.800000 -3.600000
+-1.800000 -3.500000
+-1.800000 -3.400000
+-1.800000 -3.300000
+-1.800000 -3.200000
+-1.800000 -3.100000
+-1.800000 -3.000000
+-1.800000 -2.900000
+-1.800000 -2.800000
+-1.800000 -2.700000
+-1.800000 -2.600000
+-1.800000 -2.500000
+-1.800000 -2.400000
+-1.800000 -2.300000
+-1.800000 -2.200000
+-1.800000 -2.100000
+-1.800000 -2.000000
+-1.800000 -1.900000
+-1.800000 -1.800000
+-1.800000 -1.700000
+-1.800000 -1.600000
+-1.800000 -1.500000
+-1.800000 -1.400000
+-1.800000 -1.300000
+-1.800000 -1.200000
+-1.800000 -1.100000
+-1.800000 -1.000000
+-1.800000 -0.900000
+-1.800000 -0.800000
+-1.800000 -0.700000
+-1.800000 -0.600000
+-1.800000 -0.500000
+-1.800000 -0.400000
+-1.800000 -0.300000
+-1.800000 -0.200000
+-1.800000 -0.100000
+-1.800000 0.000000
+-1.800000 0.100000
+-1.800000 0.200000
+-1.800000 0.300000
+-1.800000 0.400000
+-1.800000 0.500000
+-1.800000 0.600000
+-1.800000 0.700000
+-1.800000 0.800000
+-1.800000 0.900000
+-1.800000 1.000000
+-1.800000 1.100000
+-1.800000 1.200000
+-1.800000 1.300000
+-1.800000 1.400000
+-1.800000 1.500000
+-1.800000 1.600000
+-1.800000 1.700000
+-1.800000 1.800000
+-1.800000 1.900000
+-1.800000 2.000000
+-1.800000 2.100000
+-1.800000 2.200000
+-1.800000 2.300000
+-1.800000 2.400000
+-1.800000 2.500000
+-1.800000 2.600000
+-1.800000 2.700000
+-1.800000 2.800000
+-1.800000 2.900000
+-1.800000 3.000000
+-1.800000 3.100000
+-1.800000 3.200000
+-1.800000 3.300000
+-1.800000 3.400000
+-1.800000 3.500000
+-1.800000 3.600000
+-1.800000 3.700000
+-1.800000 3.800000
+-1.800000 3.900000
+-1.800000 4.000000
+-1.700000 -4.000000
+-1.700000 -3.900000
+-1.700000 -3.800000
+-1.700000 -3.700000
+-1.700000 -3.600000
+-1.700000 -3.500000
+-1.700000 -3.400000
+-1.700000 -3.300000
+-1.700000 -3.200000
+-1.700000 -3.100000
+-1.700000 -3.000000
+-1.700000 -2.900000
+-1.700000 -2.800000
+-1.700000 -2.700000
+-1.700000 -2.600000
+-1.700000 -2.500000
+-1.700000 -2.400000
+-1.700000 -2.300000
+-1.700000 -2.200000
+-1.700000 -2.100000
+-1.700000 -2.000000
+-1.700000 -1.900000
+-1.700000 -1.800000
+-1.700000 -1.700000
+-1.700000 -1.600000
+-1.700000 -1.500000
+-1.700000 -1.400000
+-1.700000 -1.300000
+-1.700000 -1.200000
+-1.700000 -1.100000
+-1.700000 -1.000000
+-1.700000 -0.900000
+-1.700000 -0.800000
+-1.700000 -0.700000
+-1.700000 -0.600000
+-1.700000 -0.500000
+-1.700000 -0.400000
+-1.700000 -0.300000
+-1.700000 -0.200000
+-1.700000 -0.100000
+-1.700000 0.000000
+-1.700000 0.100000
+-1.700000 0.200000
+-1.700000 0.300000
+-1.700000 0.400000
+-1.700000 0.500000
+-1.700000 0.600000
+-1.700000 0.700000
+-1.700000 0.800000
+-1.700000 0.900000
+-1.700000 1.000000
+-1.700000 1.100000
+-1.700000 1.200000
+-1.700000 1.300000
+-1.700000 1.400000
+-1.700000 1.500000
+-1.700000 1.600000
+-1.700000 1.700000
+-1.700000 1.800000
+-1.700000 1.900000
+-1.700000 2.000000
+-1.700000 2.100000
+-1.700000 2.200000
+-1.700000 2.300000
+-1.700000 2.400000
+-1.700000 2.500000
+-1.700000 2.600000
+-1.700000 2.700000
+-1.700000 2.800000
+-1.700000 2.900000
+-1.700000 3.000000
+-1.700000 3.100000
+-1.700000 3.200000
+-1.700000 3.300000
+-1.700000 3.400000
+-1.700000 3.500000
+-1.700000 3.600000
+-1.700000 3.700000
+-1.700000 3.800000
+-1.700000 3.900000
+-1.700000 4.000000
+-1.600000 -4.000000
+-1.600000 -3.900000
+-1.600000 -3.800000
+-1.600000 -3.700000
+-1.600000 -3.600000
+-1.600000 -3.500000
+-1.600000 -3.400000
+-1.600000 -3.300000
+-1.600000 -3.200000
+-1.600000 -3.100000
+-1.600000 -3.000000
+-1.600000 -2.900000
+-1.600000 -2.800000
+-1.600000 -2.700000
+-1.600000 -2.600000
+-1.600000 -2.500000
+-1.600000 -2.400000
+-1.600000 -2.300000
+-1.600000 -2.200000
+-1.600000 -2.100000
+-1.600000 -2.000000
+-1.600000 -1.900000
+-1.600000 -1.800000
+-1.600000 -1.700000
+-1.600000 -1.600000
+-1.600000 -1.500000
+-1.600000 -1.400000
+-1.600000 -1.300000
+-1.600000 -1.200000
+-1.600000 -1.100000
+-1.600000 -1.000000
+-1.600000 -0.900000
+-1.600000 -0.800000
+-1.600000 -0.700000
+-1.600000 -0.600000
+-1.600000 -0.500000
+-1.600000 -0.400000
+-1.600000 -0.300000
+-1.600000 -0.200000
+-1.600000 -0.100000
+-1.600000 0.000000
+-1.600000 0.100000
+-1.600000 0.200000
+-1.600000 0.300000
+-1.600000 0.400000
+-1.600000 0.500000
+-1.600000 0.600000
+-1.600000 0.700000
+-1.600000 0.800000
+-1.600000 0.900000
+-1.600000 1.000000
+-1.600000 1.100000
+-1.600000 1.200000
+-1.600000 1.300000
+-1.600000 1.400000
+-1.600000 1.500000
+-1.600000 1.600000
+-1.600000 1.700000
+-1.600000 1.800000
+-1.600000 1.900000
+-1.600000 2.000000
+-1.600000 2.100000
+-1.600000 2.200000
+-1.600000 2.300000
+-1.600000 2.400000
+-1.600000 2.500000
+-1.600000 2.600000
+-1.600000 2.700000
+-1.600000 2.800000
+-1.600000 2.900000
+-1.600000 3.000000
+-1.600000 3.100000
+-1.600000 3.200000
+-1.600000 3.300000
+-1.600000 3.400000
+-1.600000 3.500000
+-1.600000 3.600000
+-1.600000 3.700000
+-1.600000 3.800000
+-1.600000 3.900000
+-1.600000 4.000000
+-1.500000 -4.000000
+-1.500000 -3.900000
+-1.500000 -3.800000
+-1.500000 -3.700000
+-1.500000 -3.600000
+-1.500000 -3.500000
+-1.500000 -3.400000
+-1.500000 -3.300000
+-1.500000 -3.200000
+-1.500000 -3.100000
+-1.500000 -3.000000
+-1.500000 -2.900000
+-1.500000 -2.800000
+-1.500000 -2.700000
+-1.500000 -2.600000
+-1.500000 -2.500000
+-1.500000 -2.400000
+-1.500000 -2.300000
+-1.500000 -2.200000
+-1.500000 -2.100000
+-1.500000 -2.000000
+-1.500000 -1.900000
+-1.500000 -1.800000
+-1.500000 -1.700000
+-1.500000 -1.600000
+-1.500000 -1.500000
+-1.500000 -1.400000
+-1.500000 -1.300000
+-1.500000 -1.200000
+-1.500000 -1.100000
+-1.500000 -1.000000
+-1.500000 -0.900000
+-1.500000 -0.800000
+-1.500000 -0.700000
+-1.500000 -0.600000
+-1.500000 -0.500000
+-1.500000 -0.400000
+-1.500000 -0.300000
+-1.500000 -0.200000
+-1.500000 -0.100000
+-1.500000 0.000000
+-1.500000 0.100000
+-1.500000 0.200000
+-1.500000 0.300000
+-1.500000 0.400000
+-1.500000 0.500000
+-1.500000 0.600000
+-1.500000 0.700000
+-1.500000 0.800000
+-1.500000 0.900000
+-1.500000 1.000000
+-1.500000 1.100000
+-1.500000 1.200000
+-1.500000 1.300000
+-1.500000 1.400000
+-1.500000 1.500000
+-1.500000 1.600000
+-1.500000 1.700000
+-1.500000 1.800000
+-1.500000 1.900000
+-1.500000 2.000000
+-1.500000 2.100000
+-1.500000 2.200000
+-1.500000 2.300000
+-1.500000 2.400000
+-1.500000 2.500000
+-1.500000 2.600000
+-1.500000 2.700000
+-1.500000 2.800000
+-1.500000 2.900000
+-1.500000 3.000000
+-1.500000 3.100000
+-1.500000 3.200000
+-1.500000 3.300000
+-1.500000 3.400000
+-1.500000 3.500000
+-1.500000 3.600000
+-1.500000 3.700000
+-1.500000 3.800000
+-1.500000 3.900000
+-1.500000 4.000000
+-1.400000 -4.000000
+-1.400000 -3.900000
+-1.400000 -3.800000
+-1.400000 -3.700000
+-1.400000 -3.600000
+-1.400000 -3.500000
+-1.400000 -3.400000
+-1.400000 -3.300000
+-1.400000 -3.200000
+-1.400000 -3.100000
+-1.400000 -3.000000
+-1.400000 -2.900000
+-1.400000 -2.800000
+-1.400000 -2.700000
+-1.400000 -2.600000
+-1.400000 -2.500000
+-1.400000 -2.400000
+-1.400000 -2.300000
+-1.400000 -2.200000
+-1.400000 -2.100000
+-1.400000 -2.000000
+-1.400000 -1.900000
+-1.400000 -1.800000
+-1.400000 -1.700000
+-1.400000 -1.600000
+-1.400000 -1.500000
+-1.400000 -1.400000
+-1.400000 -1.300000
+-1.400000 -1.200000
+-1.400000 -1.100000
+-1.400000 -1.000000
+-1.400000 -0.900000
+-1.400000 -0.800000
+-1.400000 -0.700000
+-1.400000 -0.600000
+-1.400000 -0.500000
+-1.400000 -0.400000
+-1.400000 -0.300000
+-1.400000 -0.200000
+-1.400000 -0.100000
+-1.400000 0.000000
+-1.400000 0.100000
+-1.400000 0.200000
+-1.400000 0.300000
+-1.400000 0.400000
+-1.400000 0.500000
+-1.400000 0.600000
+-1.400000 0.700000
+-1.400000 0.800000
+-1.400000 0.900000
+-1.400000 1.000000
+-1.400000 1.100000
+-1.400000 1.200000
+-1.400000 1.300000
+-1.400000 1.400000
+-1.400000 1.500000
+-1.400000 1.600000
+-1.400000 1.700000
+-1.400000 1.800000
+-1.400000 1.900000
+-1.400000 2.000000
+-1.400000 2.100000
+-1.400000 2.200000
+-1.400000 2.300000
+-1.400000 2.400000
+-1.400000 2.500000
+-1.400000 2.600000
+-1.400000 2.700000
+-1.400000 2.800000
+-1.400000 2.900000
+-1.400000 3.000000
+-1.400000 3.100000
+-1.400000 3.200000
+-1.400000 3.300000
+-1.400000 3.400000
+-1.400000 3.500000
+-1.400000 3.600000
+-1.400000 3.700000
+-1.400000 3.800000
+-1.400000 3.900000
+-1.400000 4.000000
+-1.300000 -4.000000
+-1.300000 -3.900000
+-1.300000 -3.800000
+-1.300000 -3.700000
+-1.300000 -3.600000
+-1.300000 -3.500000
+-1.300000 -3.400000
+-1.300000 -3.300000
+-1.300000 -3.200000
+-1.300000 -3.100000
+-1.300000 -3.000000
+-1.300000 -2.900000
+-1.300000 -2.800000
+-1.300000 -2.700000
+-1.300000 -2.600000
+-1.300000 -2.500000
+-1.300000 -2.400000
+-1.300000 -2.300000
+-1.300000 -2.200000
+-1.300000 -2.100000
+-1.300000 -2.000000
+-1.300000 -1.900000
+-1.300000 -1.800000
+-1.300000 -1.700000
+-1.300000 -1.600000
+-1.300000 -1.500000
+-1.300000 -1.400000
+-1.300000 -1.300000
+-1.300000 -1.200000
+-1.300000 -1.100000
+-1.300000 -1.000000
+-1.300000 -0.900000
+-1.300000 -0.800000
+-1.300000 -0.700000
+-1.300000 -0.600000
+-1.300000 -0.500000
+-1.300000 -0.400000
+-1.300000 -0.300000
+-1.300000 -0.200000
+-1.300000 -0.100000
+-1.300000 0.000000
+-1.300000 0.100000
+-1.300000 0.200000
+-1.300000 0.300000
+-1.300000 0.400000
+-1.300000 0.500000
+-1.300000 0.600000
+-1.300000 0.700000
+-1.300000 0.800000
+-1.300000 0.900000
+-1.300000 1.000000
+-1.300000 1.100000
+-1.300000 1.200000
+-1.300000 1.300000
+-1.300000 1.400000
+-1.300000 1.500000
+-1.300000 1.600000
+-1.300000 1.700000
+-1.300000 1.800000
+-1.300000 1.900000
+-1.300000 2.000000
+-1.300000 2.100000
+-1.300000 2.200000
+-1.300000 2.300000
+-1.300000 2.400000
+-1.300000 2.500000
+-1.300000 2.600000
+-1.300000 2.700000
+-1.300000 2.800000
+-1.300000 2.900000
+-1.300000 3.000000
+-1.300000 3.100000
+-1.300000 3.200000
+-1.300000 3.300000
+-1.300000 3.400000
+-1.300000 3.500000
+-1.300000 3.600000
+-1.300000 3.700000
+-1.300000 3.800000
+-1.300000 3.900000
+-1.300000 4.000000
+-1.200000 -4.000000
+-1.200000 -3.900000
+-1.200000 -3.800000
+-1.200000 -3.700000
+-1.200000 -3.600000
+-1.200000 -3.500000
+-1.200000 -3.400000
+-1.200000 -3.300000
+-1.200000 -3.200000
+-1.200000 -3.100000
+-1.200000 -3.000000
+-1.200000 -2.900000
+-1.200000 -2.800000
+-1.200000 -2.700000
+-1.200000 -2.600000
+-1.200000 -2.500000
+-1.200000 -2.400000
+-1.200000 -2.300000
+-1.200000 -2.200000
+-1.200000 -2.100000
+-1.200000 -2.000000
+-1.200000 -1.900000
+-1.200000 -1.800000
+-1.200000 -1.700000
+-1.200000 -1.600000
+-1.200000 -1.500000
+-1.200000 -1.400000
+-1.200000 -1.300000
+-1.200000 -1.200000
+-1.200000 -1.100000
+-1.200000 -1.000000
+-1.200000 -0.900000
+-1.200000 -0.800000
+-1.200000 -0.700000
+-1.200000 -0.600000
+-1.200000 -0.500000
+-1.200000 -0.400000
+-1.200000 -0.300000
+-1.200000 -0.200000
+-1.200000 -0.100000
+-1.200000 0.000000
+-1.200000 0.100000
+-1.200000 0.200000
+-1.200000 0.300000
+-1.200000 0.400000
+-1.200000 0.500000
+-1.200000 0.600000
+-1.200000 0.700000
+-1.200000 0.800000
+-1.200000 0.900000
+-1.200000 1.000000
+-1.200000 1.100000
+-1.200000 1.200000
+-1.200000 1.300000
+-1.200000 1.400000
+-1.200000 1.500000
+-1.200000 1.600000
+-1.200000 1.700000
+-1.200000 1.800000
+-1.200000 1.900000
+-1.200000 2.000000
+-1.200000 2.100000
+-1.200000 2.200000
+-1.200000 2.300000
+-1.200000 2.400000
+-1.200000 2.500000
+-1.200000 2.600000
+-1.200000 2.700000
+-1.200000 2.800000
+-1.200000 2.900000
+-1.200000 3.000000
+-1.200000 3.100000
+-1.200000 3.200000
+-1.200000 3.300000
+-1.200000 3.400000
+-1.200000 3.500000
+-1.200000 3.600000
+-1.200000 3.700000
+-1.200000 3.800000
+-1.200000 3.900000
+-1.200000 4.000000
+-1.100000 -4.000000
+-1.100000 -3.900000
+-1.100000 -3.800000
+-1.100000 -3.700000
+-1.100000 -3.600000
+-1.100000 -3.500000
+-1.100000 -3.400000
+-1.100000 -3.300000
+-1.100000 -3.200000
+-1.100000 -3.100000
+-1.100000 -3.000000
+-1.100000 -2.900000
+-1.100000 -2.800000
+-1.100000 -2.700000
+-1.100000 -2.600000
+-1.100000 -2.500000
+-1.100000 -2.400000
+-1.100000 -2.300000
+-1.100000 -2.200000
+-1.100000 -2.100000
+-1.100000 -2.000000
+-1.100000 -1.900000
+-1.100000 -1.800000
+-1.100000 -1.700000
+-1.100000 -1.600000
+-1.100000 -1.500000
+-1.100000 -1.400000
+-1.100000 -1.300000
+-1.100000 -1.200000
+-1.100000 -1.100000
+-1.100000 -1.000000
+-1.100000 -0.900000
+-1.100000 -0.800000
+-1.100000 -0.700000
+-1.100000 -0.600000
+-1.100000 -0.500000
+-1.100000 -0.400000
+-1.100000 -0.300000
+-1.100000 -0.200000
+-1.100000 -0.100000
+-1.100000 0.000000
+-1.100000 0.100000
+-1.100000 0.200000
+-1.100000 0.300000
+-1.100000 0.400000
+-1.100000 0.500000
+-1.100000 0.600000
+-1.100000 0.700000
+-1.100000 0.800000
+-1.100000 0.900000
+-1.100000 1.000000
+-1.100000 1.100000
+-1.100000 1.200000
+-1.100000 1.300000
+-1.100000 1.400000
+-1.100000 1.500000
+-1.100000 1.600000
+-1.100000 1.700000
+-1.100000 1.800000
+-1.100000 1.900000
+-1.100000 2.000000
+-1.100000 2.100000
+-1.100000 2.200000
+-1.100000 2.300000
+-1.100000 2.400000
+-1.100000 2.500000
+-1.100000 2.600000
+-1.100000 2.700000
+-1.100000 2.800000
+-1.100000 2.900000
+-1.100000 3.000000
+-1.100000 3.100000
+-1.100000 3.200000
+-1.100000 3.300000
+-1.100000 3.400000
+-1.100000 3.500000
+-1.100000 3.600000
+-1.100000 3.700000
+-1.100000 3.800000
+-1.100000 3.900000
+-1.100000 4.000000
+-1.000000 -4.000000
+-1.000000 -3.900000
+-1.000000 -3.800000
+-1.000000 -3.700000
+-1.000000 -3.600000
+-1.000000 -3.500000
+-1.000000 -3.400000
+-1.000000 -3.300000
+-1.000000 -3.200000
+-1.000000 -3.100000
+-1.000000 -3.000000
+-1.000000 -2.900000
+-1.000000 -2.800000
+-1.000000 -2.700000
+-1.000000 -2.600000
+-1.000000 -2.500000
+-1.000000 -2.400000
+-1.000000 -2.300000
+-1.000000 -2.200000
+-1.000000 -2.100000
+-1.000000 -2.000000
+-1.000000 -1.900000
+-1.000000 -1.800000
+-1.000000 -1.700000
+-1.000000 -1.600000
+-1.000000 -1.500000
+-1.000000 -1.400000
+-1.000000 -1.300000
+-1.000000 -1.200000
+-1.000000 -1.100000
+-1.000000 -1.000000
+-1.000000 -0.900000
+-1.000000 -0.800000
+-1.000000 -0.700000
+-1.000000 -0.600000
+-1.000000 -0.500000
+-1.000000 -0.400000
+-1.000000 -0.300000
+-1.000000 -0.200000
+-1.000000 -0.100000
+-1.000000 0.000000
+-1.000000 0.100000
+-1.000000 0.200000
+-1.000000 0.300000
+-1.000000 0.400000
+-1.000000 0.500000
+-1.000000 0.600000
+-1.000000 0.700000
+-1.000000 0.800000
+-1.000000 0.900000
+-1.000000 1.000000
+-1.000000 1.100000
+-1.000000 1.200000
+-1.000000 1.300000
+-1.000000 1.400000
+-1.000000 1.500000
+-1.000000 1.600000
+-1.000000 1.700000
+-1.000000 1.800000
+-1.000000 1.900000
+-1.000000 2.000000
+-1.000000 2.100000
+-1.000000 2.200000
+-1.000000 2.300000
+-1.000000 2.400000
+-1.000000 2.500000
+-1.000000 2.600000
+-1.000000 2.700000
+-1.000000 2.800000
+-1.000000 2.900000
+-1.000000 3.000000
+-1.000000 3.100000
+-1.000000 3.200000
+-1.000000 3.300000
+-1.000000 3.400000
+-1.000000 3.500000
+-1.000000 3.600000
+-1.000000 3.700000
+-1.000000 3.800000
+-1.000000 3.900000
+-1.000000 4.000000
+-0.900000 -4.000000
+-0.900000 -3.900000
+-0.900000 -3.800000
+-0.900000 -3.700000
+-0.900000 -3.600000
+-0.900000 -3.500000
+-0.900000 -3.400000
+-0.900000 -3.300000
+-0.900000 -3.200000
+-0.900000 -3.100000
+-0.900000 -3.000000
+-0.900000 -2.900000
+-0.900000 -2.800000
+-0.900000 -2.700000
+-0.900000 -2.600000
+-0.900000 -2.500000
+-0.900000 -2.400000
+-0.900000 -2.300000
+-0.900000 -2.200000
+-0.900000 -2.100000
+-0.900000 -2.000000
+-0.900000 -1.900000
+-0.900000 -1.800000
+-0.900000 -1.700000
+-0.900000 -1.600000
+-0.900000 -1.500000
+-0.900000 -1.400000
+-0.900000 -1.300000
+-0.900000 -1.200000
+-0.900000 -1.100000
+-0.900000 -1.000000
+-0.900000 -0.900000
+-0.900000 -0.800000
+-0.900000 -0.700000
+-0.900000 -0.600000
+-0.900000 -0.500000
+-0.900000 -0.400000
+-0.900000 -0.300000
+-0.900000 -0.200000
+-0.900000 -0.100000
+-0.900000 0.000000
+-0.900000 0.100000
+-0.900000 0.200000
+-0.900000 0.300000
+-0.900000 0.400000
+-0.900000 0.500000
+-0.900000 0.600000
+-0.900000 0.700000
+-0.900000 0.800000
+-0.900000 0.900000
+-0.900000 1.000000
+-0.900000 1.100000
+-0.900000 1.200000
+-0.900000 1.300000
+-0.900000 1.400000
+-0.900000 1.500000
+-0.900000 1.600000
+-0.900000 1.700000
+-0.900000 1.800000
+-0.900000 1.900000
+-0.900000 2.000000
+-0.900000 2.100000
+-0.900000 2.200000
+-0.900000 2.300000
+-0.900000 2.400000
+-0.900000 2.500000
+-0.900000 2.600000
+-0.900000 2.700000
+-0.900000 2.800000
+-0.900000 2.900000
+-0.900000 3.000000
+-0.900000 3.100000
+-0.900000 3.200000
+-0.900000 3.300000
+-0.900000 3.400000
+-0.900000 3.500000
+-0.900000 3.600000
+-0.900000 3.700000
+-0.900000 3.800000
+-0.900000 3.900000
+-0.900000 4.000000
+-0.800000 -4.000000
+-0.800000 -3.900000
+-0.800000 -3.800000
+-0.800000 -3.700000
+-0.800000 -3.600000
+-0.800000 -3.500000
+-0.800000 -3.400000
+-0.800000 -3.300000
+-0.800000 -3.200000
+-0.800000 -3.100000
+-0.800000 -3.000000
+-0.800000 -2.900000
+-0.800000 -2.800000
+-0.800000 -2.700000
+-0.800000 -2.600000
+-0.800000 -2.500000
+-0.800000 -2.400000
+-0.800000 -2.300000
+-0.800000 -2.200000
+-0.800000 -2.100000
+-0.800000 -2.000000
+-0.800000 -1.900000
+-0.800000 -1.800000
+-0.800000 -1.700000
+-0.800000 -1.600000
+-0.800000 -1.500000
+-0.800000 -1.400000
+-0.800000 -1.300000
+-0.800000 -1.200000
+-0.800000 -1.100000
+-0.800000 -1.000000
+-0.800000 -0.900000
+-0.800000 -0.800000
+-0.800000 -0.700000
+-0.800000 -0.600000
+-0.800000 -0.500000
+-0.800000 -0.400000
+-0.800000 -0.300000
+-0.800000 -0.200000
+-0.800000 -0.100000
+-0.800000 0.000000
+-0.800000 0.100000
+-0.800000 0.200000
+-0.800000 0.300000
+-0.800000 0.400000
+-0.800000 0.500000
+-0.800000 0.600000
+-0.800000 0.700000
+-0.800000 0.800000
+-0.800000 0.900000
+-0.800000 1.000000
+-0.800000 1.100000
+-0.800000 1.200000
+-0.800000 1.300000
+-0.800000 1.400000
+-0.800000 1.500000
+-0.800000 1.600000
+-0.800000 1.700000
+-0.800000 1.800000
+-0.800000 1.900000
+-0.800000 2.000000
+-0.800000 2.100000
+-0.800000 2.200000
+-0.800000 2.300000
+-0.800000 2.400000
+-0.800000 2.500000
+-0.800000 2.600000
+-0.800000 2.700000
+-0.800000 2.800000
+-0.800000 2.900000
+-0.800000 3.000000
+-0.800000 3.100000
+-0.800000 3.200000
+-0.800000 3.300000
+-0.800000 3.400000
+-0.800000 3.500000
+-0.800000 3.600000
+-0.800000 3.700000
+-0.800000 3.800000
+-0.800000 3.900000
+-0.800000 4.000000
+-0.700000 -4.000000
+-0.700000 -3.900000
+-0.700000 -3.800000
+-0.700000 -3.700000
+-0.700000 -3.600000
+-0.700000 -3.500000
+-0.700000 -3.400000
+-0.700000 -3.300000
+-0.700000 -3.200000
+-0.700000 -3.100000
+-0.700000 -3.000000
+-0.700000 -2.900000
+-0.700000 -2.800000
+-0.700000 -2.700000
+-0.700000 -2.600000
+-0.700000 -2.500000
+-0.700000 -2.400000
+-0.700000 -2.300000
+-0.700000 -2.200000
+-0.700000 -2.100000
+-0.700000 -2.000000
+-0.700000 -1.900000
+-0.700000 -1.800000
+-0.700000 -1.700000
+-0.700000 -1.600000
+-0.700000 -1.500000
+-0.700000 -1.400000
+-0.700000 -1.300000
+-0.700000 -1.200000
+-0.700000 -1.100000
+-0.700000 -1.000000
+-0.700000 -0.900000
+-0.700000 -0.800000
+-0.700000 -0.700000
+-0.700000 -0.600000
+-0.700000 -0.500000
+-0.700000 -0.400000
+-0.700000 -0.300000
+-0.700000 -0.200000
+-0.700000 -0.100000
+-0.700000 0.000000
+-0.700000 0.100000
+-0.700000 0.200000
+-0.700000 0.300000
+-0.700000 0.400000
+-0.700000 0.500000
+-0.700000 0.600000
+-0.700000 0.700000
+-0.700000 0.800000
+-0.700000 0.900000
+-0.700000 1.000000
+-0.700000 1.100000
+-0.700000 1.200000
+-0.700000 1.300000
+-0.700000 1.400000
+-0.700000 1.500000
+-0.700000 1.600000
+-0.700000 1.700000
+-0.700000 1.800000
+-0.700000 1.900000
+-0.700000 2.000000
+-0.700000 2.100000
+-0.700000 2.200000
+-0.700000 2.300000
+-0.700000 2.400000
+-0.700000 2.500000
+-0.700000 2.600000
+-0.700000 2.700000
+-0.700000 2.800000
+-0.700000 2.900000
+-0.700000 3.000000
+-0.700000 3.100000
+-0.700000 3.200000
+-0.700000 3.300000
+-0.700000 3.400000
+-0.700000 3.500000
+-0.700000 3.600000
+-0.700000 3.700000
+-0.700000 3.800000
+-0.700000 3.900000
+-0.700000 4.000000
+-0.600000 -4.000000
+-0.600000 -3.900000
+-0.600000 -3.800000
+-0.600000 -3.700000
+-0.600000 -3.600000
+-0.600000 -3.500000
+-0.600000 -3.400000
+-0.600000 -3.300000
+-0.600000 -3.200000
+-0.600000 -3.100000
+-0.600000 -3.000000
+-0.600000 -2.900000
+-0.600000 -2.800000
+-0.600000 -2.700000
+-0.600000 -2.600000
+-0.600000 -2.500000
+-0.600000 -2.400000
+-0.600000 -2.300000
+-0.600000 -2.200000
+-0.600000 -2.100000
+-0.600000 -2.000000
+-0.600000 -1.900000
+-0.600000 -1.800000
+-0.600000 -1.700000
+-0.600000 -1.600000
+-0.600000 -1.500000
+-0.600000 -1.400000
+-0.600000 -1.300000
+-0.600000 -1.200000
+-0.600000 -1.100000
+-0.600000 -1.000000
+-0.600000 -0.900000
+-0.600000 -0.800000
+-0.600000 -0.700000
+-0.600000 -0.600000
+-0.600000 -0.500000
+-0.600000 -0.400000
+-0.600000 -0.300000
+-0.600000 -0.200000
+-0.600000 -0.100000
+-0.600000 0.000000
+-0.600000 0.100000
+-0.600000 0.200000
+-0.600000 0.300000
+-0.600000 0.400000
+-0.600000 0.500000
+-0.600000 0.600000
+-0.600000 0.700000
+-0.600000 0.800000
+-0.600000 0.900000
+-0.600000 1.000000
+-0.600000 1.100000
+-0.600000 1.200000
+-0.600000 1.300000
+-0.600000 1.400000
+-0.600000 1.500000
+-0.600000 1.600000
+-0.600000 1.700000
+-0.600000 1.800000
+-0.600000 1.900000
+-0.600000 2.000000
+-0.600000 2.100000
+-0.600000 2.200000
+-0.600000 2.300000
+-0.600000 2.400000
+-0.600000 2.500000
+-0.600000 2.600000
+-0.600000 2.700000
+-0.600000 2.800000
+-0.600000 2.900000
+-0.600000 3.000000
+-0.600000 3.100000
+-0.600000 3.200000
+-0.600000 3.300000
+-0.600000 3.400000
+-0.600000 3.500000
+-0.600000 3.600000
+-0.600000 3.700000
+-0.600000 3.800000
+-0.600000 3.900000
+-0.600000 4.000000
+-0.500000 -4.000000
+-0.500000 -3.900000
+-0.500000 -3.800000
+-0.500000 -3.700000
+-0.500000 -3.600000
+-0.500000 -3.500000
+-0.500000 -3.400000
+-0.500000 -3.300000
+-0.500000 -3.200000
+-0.500000 -3.100000
+-0.500000 -3.000000
+-0.500000 -2.900000
+-0.500000 -2.800000
+-0.500000 -2.700000
+-0.500000 -2.600000
+-0.500000 -2.500000
+-0.500000 -2.400000
+-0.500000 -2.300000
+-0.500000 -2.200000
+-0.500000 -2.100000
+-0.500000 -2.000000
+-0.500000 -1.900000
+-0.500000 -1.800000
+-0.500000 -1.700000
+-0.500000 -1.600000
+-0.500000 -1.500000
+-0.500000 -1.400000
+-0.500000 -1.300000
+-0.500000 -1.200000
+-0.500000 -1.100000
+-0.500000 -1.000000
+-0.500000 -0.900000
+-0.500000 -0.800000
+-0.500000 -0.700000
+-0.500000 -0.600000
+-0.500000 -0.500000
+-0.500000 -0.400000
+-0.500000 -0.300000
+-0.500000 -0.200000
+-0.500000 -0.100000
+-0.500000 0.000000
+-0.500000 0.100000
+-0.500000 0.200000
+-0.500000 0.300000
+-0.500000 0.400000
+-0.500000 0.500000
+-0.500000 0.600000
+-0.500000 0.700000
+-0.500000 0.800000
+-0.500000 0.900000
+-0.500000 1.000000
+-0.500000 1.100000
+-0.500000 1.200000
+-0.500000 1.300000
+-0.500000 1.400000
+-0.500000 1.500000
+-0.500000 1.600000
+-0.500000 1.700000
+-0.500000 1.800000
+-0.500000 1.900000
+-0.500000 2.000000
+-0.500000 2.100000
+-0.500000 2.200000
+-0.500000 2.300000
+-0.500000 2.400000
+-0.500000 2.500000
+-0.500000 2.600000
+-0.500000 2.700000
+-0.500000 2.800000
+-0.500000 2.900000
+-0.500000 3.000000
+-0.500000 3.100000
+-0.500000 3.200000
+-0.500000 3.300000
+-0.500000 3.400000
+-0.500000 3.500000
+-0.500000 3.600000
+-0.500000 3.700000
+-0.500000 3.800000
+-0.500000 3.900000
+-0.500000 4.000000
+-0.400000 -4.000000
+-0.400000 -3.900000
+-0.400000 -3.800000
+-0.400000 -3.700000
+-0.400000 -3.600000
+-0.400000 -3.500000
+-0.400000 -3.400000
+-0.400000 -3.300000
+-0.400000 -3.200000
+-0.400000 -3.100000
+-0.400000 -3.000000
+-0.400000 -2.900000
+-0.400000 -2.800000
+-0.400000 -2.700000
+-0.400000 -2.600000
+-0.400000 -2.500000
+-0.400000 -2.400000
+-0.400000 -2.300000
+-0.400000 -2.200000
+-0.400000 -2.100000
+-0.400000 -2.000000
+-0.400000 -1.900000
+-0.400000 -1.800000
+-0.400000 -1.700000
+-0.400000 -1.600000
+-0.400000 -1.500000
+-0.400000 -1.400000
+-0.400000 -1.300000
+-0.400000 -1.200000
+-0.400000 -1.100000
+-0.400000 -1.000000
+-0.400000 -0.900000
+-0.400000 -0.800000
+-0.400000 -0.700000
+-0.400000 -0.600000
+-0.400000 -0.500000
+-0.400000 -0.400000
+-0.400000 -0.300000
+-0.400000 -0.200000
+-0.400000 -0.100000
+-0.400000 0.000000
+-0.400000 0.100000
+-0.400000 0.200000
+-0.400000 0.300000
+-0.400000 0.400000
+-0.400000 0.500000
+-0.400000 0.600000
+-0.400000 0.700000
+-0.400000 0.800000
+-0.400000 0.900000
+-0.400000 1.000000
+-0.400000 1.100000
+-0.400000 1.200000
+-0.400000 1.300000
+-0.400000 1.400000
+-0.400000 1.500000
+-0.400000 1.600000
+-0.400000 1.700000
+-0.400000 1.800000
+-0.400000 1.900000
+-0.400000 2.000000
+-0.400000 2.100000
+-0.400000 2.200000
+-0.400000 2.300000
+-0.400000 2.400000
+-0.400000 2.500000
+-0.400000 2.600000
+-0.400000 2.700000
+-0.400000 2.800000
+-0.400000 2.900000
+-0.400000 3.000000
+-0.400000 3.100000
+-0.400000 3.200000
+-0.400000 3.300000
+-0.400000 3.400000
+-0.400000 3.500000
+-0.400000 3.600000
+-0.400000 3.700000
+-0.400000 3.800000
+-0.400000 3.900000
+-0.400000 4.000000
+-0.300000 -4.000000
+-0.300000 -3.900000
+-0.300000 -3.800000
+-0.300000 -3.700000
+-0.300000 -3.600000
+-0.300000 -3.500000
+-0.300000 -3.400000
+-0.300000 -3.300000
+-0.300000 -3.200000
+-0.300000 -3.100000
+-0.300000 -3.000000
+-0.300000 -2.900000
+-0.300000 -2.800000
+-0.300000 -2.700000
+-0.300000 -2.600000
+-0.300000 -2.500000
+-0.300000 -2.400000
+-0.300000 -2.300000
+-0.300000 -2.200000
+-0.300000 -2.100000
+-0.300000 -2.000000
+-0.300000 -1.900000
+-0.300000 -1.800000
+-0.300000 -1.700000
+-0.300000 -1.600000
+-0.300000 -1.500000
+-0.300000 -1.400000
+-0.300000 -1.300000
+-0.300000 -1.200000
+-0.300000 -1.100000
+-0.300000 -1.000000
+-0.300000 -0.900000
+-0.300000 -0.800000
+-0.300000 -0.700000
+-0.300000 -0.600000
+-0.300000 -0.500000
+-0.300000 -0.400000
+-0.300000 -0.300000
+-0.300000 -0.200000
+-0.300000 -0.100000
+-0.300000 0.000000
+-0.300000 0.100000
+-0.300000 0.200000
+-0.300000 0.300000
+-0.300000 0.400000
+-0.300000 0.500000
+-0.300000 0.600000
+-0.300000 0.700000
+-0.300000 0.800000
+-0.300000 0.900000
+-0.300000 1.000000
+-0.300000 1.100000
+-0.300000 1.200000
+-0.300000 1.300000
+-0.300000 1.400000
+-0.300000 1.500000
+-0.300000 1.600000
+-0.300000 1.700000
+-0.300000 1.800000
+-0.300000 1.900000
+-0.300000 2.000000
+-0.300000 2.100000
+-0.300000 2.200000
+-0.300000 2.300000
+-0.300000 2.400000
+-0.300000 2.500000
+-0.300000 2.600000
+-0.300000 2.700000
+-0.300000 2.800000
+-0.300000 2.900000
+-0.300000 3.000000
+-0.300000 3.100000
+-0.300000 3.200000
+-0.300000 3.300000
+-0.300000 3.400000
+-0.300000 3.500000
+-0.300000 3.600000
+-0.300000 3.700000
+-0.300000 3.800000
+-0.300000 3.900000
+-0.300000 4.000000
+-0.200000 -4.000000
+-0.200000 -3.900000
+-0.200000 -3.800000
+-0.200000 -3.700000
+-0.200000 -3.600000
+-0.200000 -3.500000
+-0.200000 -3.400000
+-0.200000 -3.300000
+-0.200000 -3.200000
+-0.200000 -3.100000
+-0.200000 -3.000000
+-0.200000 -2.900000
+-0.200000 -2.800000
+-0.200000 -2.700000
+-0.200000 -2.600000
+-0.200000 -2.500000
+-0.200000 -2.400000
+-0.200000 -2.300000
+-0.200000 -2.200000
+-0.200000 -2.100000
+-0.200000 -2.000000
+-0.200000 -1.900000
+-0.200000 -1.800000
+-0.200000 -1.700000
+-0.200000 -1.600000
+-0.200000 -1.500000
+-0.200000 -1.400000
+-0.200000 -1.300000
+-0.200000 -1.200000
+-0.200000 -1.100000
+-0.200000 -1.000000
+-0.200000 -0.900000
+-0.200000 -0.800000
+-0.200000 -0.700000
+-0.200000 -0.600000
+-0.200000 -0.500000
+-0.200000 -0.400000
+-0.200000 -0.300000
+-0.200000 -0.200000
+-0.200000 -0.100000
+-0.200000 0.000000
+-0.200000 0.100000
+-0.200000 0.200000
+-0.200000 0.300000
+-0.200000 0.400000
+-0.200000 0.500000
+-0.200000 0.600000
+-0.200000 0.700000
+-0.200000 0.800000
+-0.200000 0.900000
+-0.200000 1.000000
+-0.200000 1.100000
+-0.200000 1.200000
+-0.200000 1.300000
+-0.200000 1.400000
+-0.200000 1.500000
+-0.200000 1.600000
+-0.200000 1.700000
+-0.200000 1.800000
+-0.200000 1.900000
+-0.200000 2.000000
+-0.200000 2.100000
+-0.200000 2.200000
+-0.200000 2.300000
+-0.200000 2.400000
+-0.200000 2.500000
+-0.200000 2.600000
+-0.200000 2.700000
+-0.200000 2.800000
+-0.200000 2.900000
+-0.200000 3.000000
+-0.200000 3.100000
+-0.200000 3.200000
+-0.200000 3.300000
+-0.200000 3.400000
+-0.200000 3.500000
+-0.200000 3.600000
+-0.200000 3.700000
+-0.200000 3.800000
+-0.200000 3.900000
+-0.200000 4.000000
+-0.100000 -4.000000
+-0.100000 -3.900000
+-0.100000 -3.800000
+-0.100000 -3.700000
+-0.100000 -3.600000
+-0.100000 -3.500000
+-0.100000 -3.400000
+-0.100000 -3.300000
+-0.100000 -3.200000
+-0.100000 -3.100000
+-0.100000 -3.000000
+-0.100000 -2.900000
+-0.100000 -2.800000
+-0.100000 -2.700000
+-0.100000 -2.600000
+-0.100000 -2.500000
+-0.100000 -2.400000
+-0.100000 -2.300000
+-0.100000 -2.200000
+-0.100000 -2.100000
+-0.100000 -2.000000
+-0.100000 -1.900000
+-0.100000 -1.800000
+-0.100000 -1.700000
+-0.100000 -1.600000
+-0.100000 -1.500000
+-0.100000 -1.400000
+-0.100000 -1.300000
+-0.100000 -1.200000
+-0.100000 -1.100000
+-0.100000 -1.000000
+-0.100000 -0.900000
+-0.100000 -0.800000
+-0.100000 -0.700000
+-0.100000 -0.600000
+-0.100000 -0.500000
+-0.100000 -0.400000
+-0.100000 -0.300000
+-0.100000 -0.200000
+-0.100000 -0.100000
+-0.100000 0.000000
+-0.100000 0.100000
+-0.100000 0.200000
+-0.100000 0.300000
+-0.100000 0.400000
+-0.100000 0.500000
+-0.100000 0.600000
+-0.100000 0.700000
+-0.100000 0.800000
+-0.100000 0.900000
+-0.100000 1.000000
+-0.100000 1.100000
+-0.100000 1.200000
+-0.100000 1.300000
+-0.100000 1.400000
+-0.100000 1.500000
+-0.100000 1.600000
+-0.100000 1.700000
+-0.100000 1.800000
+-0.100000 1.900000
+-0.100000 2.000000
+-0.100000 2.100000
+-0.100000 2.200000
+-0.100000 2.300000
+-0.100000 2.400000
+-0.100000 2.500000
+-0.100000 2.600000
+-0.100000 2.700000
+-0.100000 2.800000
+-0.100000 2.900000
+-0.100000 3.000000
+-0.100000 3.100000
+-0.100000 3.200000
+-0.100000 3.300000
+-0.100000 3.400000
+-0.100000 3.500000
+-0.100000 3.600000
+-0.100000 3.700000
+-0.100000 3.800000
+-0.100000 3.900000
+-0.100000 4.000000
+0.000000 -4.000000
+0.000000 -3.900000
+0.000000 -3.800000
+0.000000 -3.700000
+0.000000 -3.600000
+0.000000 -3.500000
+0.000000 -3.400000
+0.000000 -3.300000
+0.000000 -3.200000
+0.000000 -3.100000
+0.000000 -3.000000
+0.000000 -2.900000
+0.000000 -2.800000
+0.000000 -2.700000
+0.000000 -2.600000
+0.000000 -2.500000
+0.000000 -2.400000
+0.000000 -2.300000
+0.000000 -2.200000
+0.000000 -2.100000
+0.000000 -2.000000
+0.000000 -1.900000
+0.000000 -1.800000
+0.000000 -1.700000
+0.000000 -1.600000
+0.000000 -1.500000
+0.000000 -1.400000
+0.000000 -1.300000
+0.000000 -1.200000
+0.000000 -1.100000
+0.000000 -1.000000
+0.000000 -0.900000
+0.000000 -0.800000
+0.000000 -0.700000
+0.000000 -0.600000
+0.000000 -0.500000
+0.000000 -0.400000
+0.000000 -0.300000
+0.000000 -0.200000
+0.000000 -0.100000
+0.000000 0.000000
+0.000000 0.100000
+0.000000 0.200000
+0.000000 0.300000
+0.000000 0.400000
+0.000000 0.500000
+0.000000 0.600000
+0.000000 0.700000
+0.000000 0.800000
+0.000000 0.900000
+0.000000 1.000000
+0.000000 1.100000
+0.000000 1.200000
+0.000000 1.300000
+0.000000 1.400000
+0.000000 1.500000
+0.000000 1.600000
+0.000000 1.700000
+0.000000 1.800000
+0.000000 1.900000
+0.000000 2.000000
+0.000000 2.100000
+0.000000 2.200000
+0.000000 2.300000
+0.000000 2.400000
+0.000000 2.500000
+0.000000 2.600000
+0.000000 2.700000
+0.000000 2.800000
+0.000000 2.900000
+0.000000 3.000000
+0.000000 3.100000
+0.000000 3.200000
+0.000000 3.300000
+0.000000 3.400000
+0.000000 3.500000
+0.000000 3.600000
+0.000000 3.700000
+0.000000 3.800000
+0.000000 3.900000
+0.000000 4.000000
+0.100000 -4.000000
+0.100000 -3.900000
+0.100000 -3.800000
+0.100000 -3.700000
+0.100000 -3.600000
+0.100000 -3.500000
+0.100000 -3.400000
+0.100000 -3.300000
+0.100000 -3.200000
+0.100000 -3.100000
+0.100000 -3.000000
+0.100000 -2.900000
+0.100000 -2.800000
+0.100000 -2.700000
+0.100000 -2.600000
+0.100000 -2.500000
+0.100000 -2.400000
+0.100000 -2.300000
+0.100000 -2.200000
+0.100000 -2.100000
+0.100000 -2.000000
+0.100000 -1.900000
+0.100000 -1.800000
+0.100000 -1.700000
+0.100000 -1.600000
+0.100000 -1.500000
+0.100000 -1.400000
+0.100000 -1.300000
+0.100000 -1.200000
+0.100000 -1.100000
+0.100000 -1.000000
+0.100000 -0.900000
+0.100000 -0.800000
+0.100000 -0.700000
+0.100000 -0.600000
+0.100000 -0.500000
+0.100000 -0.400000
+0.100000 -0.300000
+0.100000 -0.200000
+0.100000 -0.100000
+0.100000 0.000000
+0.100000 0.100000
+0.100000 0.200000
+0.100000 0.300000
+0.100000 0.400000
+0.100000 0.500000
+0.100000 0.600000
+0.100000 0.700000
+0.100000 0.800000
+0.100000 0.900000
+0.100000 1.000000
+0.100000 1.100000
+0.100000 1.200000
+0.100000 1.300000
+0.100000 1.400000
+0.100000 1.500000
+0.100000 1.600000
+0.100000 1.700000
+0.100000 1.800000
+0.100000 1.900000
+0.100000 2.000000
+0.100000 2.100000
+0.100000 2.200000
+0.100000 2.300000
+0.100000 2.400000
+0.100000 2.500000
+0.100000 2.600000
+0.100000 2.700000
+0.100000 2.800000
+0.100000 2.900000
+0.100000 3.000000
+0.100000 3.100000
+0.100000 3.200000
+0.100000 3.300000
+0.100000 3.400000
+0.100000 3.500000
+0.100000 3.600000
+0.100000 3.700000
+0.100000 3.800000
+0.100000 3.900000
+0.100000 4.000000
+0.200000 -4.000000
+0.200000 -3.900000
+0.200000 -3.800000
+0.200000 -3.700000
+0.200000 -3.600000
+0.200000 -3.500000
+0.200000 -3.400000
+0.200000 -3.300000
+0.200000 -3.200000
+0.200000 -3.100000
+0.200000 -3.000000
+0.200000 -2.900000
+0.200000 -2.800000
+0.200000 -2.700000
+0.200000 -2.600000
+0.200000 -2.500000
+0.200000 -2.400000
+0.200000 -2.300000
+0.200000 -2.200000
+0.200000 -2.100000
+0.200000 -2.000000
+0.200000 -1.900000
+0.200000 -1.800000
+0.200000 -1.700000
+0.200000 -1.600000
+0.200000 -1.500000
+0.200000 -1.400000
+0.200000 -1.300000
+0.200000 -1.200000
+0.200000 -1.100000
+0.200000 -1.000000
+0.200000 -0.900000
+0.200000 -0.800000
+0.200000 -0.700000
+0.200000 -0.600000
+0.200000 -0.500000
+0.200000 -0.400000
+0.200000 -0.300000
+0.200000 -0.200000
+0.200000 -0.100000
+0.200000 0.000000
+0.200000 0.100000
+0.200000 0.200000
+0.200000 0.300000
+0.200000 0.400000
+0.200000 0.500000
+0.200000 0.600000
+0.200000 0.700000
+0.200000 0.800000
+0.200000 0.900000
+0.200000 1.000000
+0.200000 1.100000
+0.200000 1.200000
+0.200000 1.300000
+0.200000 1.400000
+0.200000 1.500000
+0.200000 1.600000
+0.200000 1.700000
+0.200000 1.800000
+0.200000 1.900000
+0.200000 2.000000
+0.200000 2.100000
+0.200000 2.200000
+0.200000 2.300000
+0.200000 2.400000
+0.200000 2.500000
+0.200000 2.600000
+0.200000 2.700000
+0.200000 2.800000
+0.200000 2.900000
+0.200000 3.000000
+0.200000 3.100000
+0.200000 3.200000
+0.200000 3.300000
+0.200000 3.400000
+0.200000 3.500000
+0.200000 3.600000
+0.200000 3.700000
+0.200000 3.800000
+0.200000 3.900000
+0.200000 4.000000
+0.300000 -4.000000
+0.300000 -3.900000
+0.300000 -3.800000
+0.300000 -3.700000
+0.300000 -3.600000
+0.300000 -3.500000
+0.300000 -3.400000
+0.300000 -3.300000
+0.300000 -3.200000
+0.300000 -3.100000
+0.300000 -3.000000
+0.300000 -2.900000
+0.300000 -2.800000
+0.300000 -2.700000
+0.300000 -2.600000
+0.300000 -2.500000
+0.300000 -2.400000
+0.300000 -2.300000
+0.300000 -2.200000
+0.300000 -2.100000
+0.300000 -2.000000
+0.300000 -1.900000
+0.300000 -1.800000
+0.300000 -1.700000
+0.300000 -1.600000
+0.300000 -1.500000
+0.300000 -1.400000
+0.300000 -1.300000
+0.300000 -1.200000
+0.300000 -1.100000
+0.300000 -1.000000
+0.300000 -0.900000
+0.300000 -0.800000
+0.300000 -0.700000
+0.300000 -0.600000
+0.300000 -0.500000
+0.300000 -0.400000
+0.300000 -0.300000
+0.300000 -0.200000
+0.300000 -0.100000
+0.300000 0.000000
+0.300000 0.100000
+0.300000 0.200000
+0.300000 0.300000
+0.300000 0.400000
+0.300000 0.500000
+0.300000 0.600000
+0.300000 0.700000
+0.300000 0.800000
+0.300000 0.900000
+0.300000 1.000000
+0.300000 1.100000
+0.300000 1.200000
+0.300000 1.300000
+0.300000 1.400000
+0.300000 1.500000
+0.300000 1.600000
+0.300000 1.700000
+0.300000 1.800000
+0.300000 1.900000
+0.300000 2.000000
+0.300000 2.100000
+0.300000 2.200000
+0.300000 2.300000
+0.300000 2.400000
+0.300000 2.500000
+0.300000 2.600000
+0.300000 2.700000
+0.300000 2.800000
+0.300000 2.900000
+0.300000 3.000000
+0.300000 3.100000
+0.300000 3.200000
+0.300000 3.300000
+0.300000 3.400000
+0.300000 3.500000
+0.300000 3.600000
+0.300000 3.700000
+0.300000 3.800000
+0.300000 3.900000
+0.300000 4.000000
+0.400000 -4.000000
+0.400000 -3.900000
+0.400000 -3.800000
+0.400000 -3.700000
+0.400000 -3.600000
+0.400000 -3.500000
+0.400000 -3.400000
+0.400000 -3.300000
+0.400000 -3.200000
+0.400000 -3.100000
+0.400000 -3.000000
+0.400000 -2.900000
+0.400000 -2.800000
+0.400000 -2.700000
+0.400000 -2.600000
+0.400000 -2.500000
+0.400000 -2.400000
+0.400000 -2.300000
+0.400000 -2.200000
+0.400000 -2.100000
+0.400000 -2.000000
+0.400000 -1.900000
+0.400000 -1.800000
+0.400000 -1.700000
+0.400000 -1.600000
+0.400000 -1.500000
+0.400000 -1.400000
+0.400000 -1.300000
+0.400000 -1.200000
+0.400000 -1.100000
+0.400000 -1.000000
+0.400000 -0.900000
+0.400000 -0.800000
+0.400000 -0.700000
+0.400000 -0.600000
+0.400000 -0.500000
+0.400000 -0.400000
+0.400000 -0.300000
+0.400000 -0.200000
+0.400000 -0.100000
+0.400000 0.000000
+0.400000 0.100000
+0.400000 0.200000
+0.400000 0.300000
+0.400000 0.400000
+0.400000 0.500000
+0.400000 0.600000
+0.400000 0.700000
+0.400000 0.800000
+0.400000 0.900000
+0.400000 1.000000
+0.400000 1.100000
+0.400000 1.200000
+0.400000 1.300000
+0.400000 1.400000
+0.400000 1.500000
+0.400000 1.600000
+0.400000 1.700000
+0.400000 1.800000
+0.400000 1.900000
+0.400000 2.000000
+0.400000 2.100000
+0.400000 2.200000
+0.400000 2.300000
+0.400000 2.400000
+0.400000 2.500000
+0.400000 2.600000
+0.400000 2.700000
+0.400000 2.800000
+0.400000 2.900000
+0.400000 3.000000
+0.400000 3.100000
+0.400000 3.200000
+0.400000 3.300000
+0.400000 3.400000
+0.400000 3.500000
+0.400000 3.600000
+0.400000 3.700000
+0.400000 3.800000
+0.400000 3.900000
+0.400000 4.000000
+0.500000 -4.000000
+0.500000 -3.900000
+0.500000 -3.800000
+0.500000 -3.700000
+0.500000 -3.600000
+0.500000 -3.500000
+0.500000 -3.400000
+0.500000 -3.300000
+0.500000 -3.200000
+0.500000 -3.100000
+0.500000 -3.000000
+0.500000 -2.900000
+0.500000 -2.800000
+0.500000 -2.700000
+0.500000 -2.600000
+0.500000 -2.500000
+0.500000 -2.400000
+0.500000 -2.300000
+0.500000 -2.200000
+0.500000 -2.100000
+0.500000 -2.000000
+0.500000 -1.900000
+0.500000 -1.800000
+0.500000 -1.700000
+0.500000 -1.600000
+0.500000 -1.500000
+0.500000 -1.400000
+0.500000 -1.300000
+0.500000 -1.200000
+0.500000 -1.100000
+0.500000 -1.000000
+0.500000 -0.900000
+0.500000 -0.800000
+0.500000 -0.700000
+0.500000 -0.600000
+0.500000 -0.500000
+0.500000 -0.400000
+0.500000 -0.300000
+0.500000 -0.200000
+0.500000 -0.100000
+0.500000 0.000000
+0.500000 0.100000
+0.500000 0.200000
+0.500000 0.300000
+0.500000 0.400000
+0.500000 0.500000
+0.500000 0.600000
+0.500000 0.700000
+0.500000 0.800000
+0.500000 0.900000
+0.500000 1.000000
+0.500000 1.100000
+0.500000 1.200000
+0.500000 1.300000
+0.500000 1.400000
+0.500000 1.500000
+0.500000 1.600000
+0.500000 1.700000
+0.500000 1.800000
+0.500000 1.900000
+0.500000 2.000000
+0.500000 2.100000
+0.500000 2.200000
+0.500000 2.300000
+0.500000 2.400000
+0.500000 2.500000
+0.500000 2.600000
+0.500000 2.700000
+0.500000 2.800000
+0.500000 2.900000
+0.500000 3.000000
+0.500000 3.100000
+0.500000 3.200000
+0.500000 3.300000
+0.500000 3.400000
+0.500000 3.500000
+0.500000 3.600000
+0.500000 3.700000
+0.500000 3.800000
+0.500000 3.900000
+0.500000 4.000000
+0.600000 -4.000000
+0.600000 -3.900000
+0.600000 -3.800000
+0.600000 -3.700000
+0.600000 -3.600000
+0.600000 -3.500000
+0.600000 -3.400000
+0.600000 -3.300000
+0.600000 -3.200000
+0.600000 -3.100000
+0.600000 -3.000000
+0.600000 -2.900000
+0.600000 -2.800000
+0.600000 -2.700000
+0.600000 -2.600000
+0.600000 -2.500000
+0.600000 -2.400000
+0.600000 -2.300000
+0.600000 -2.200000
+0.600000 -2.100000
+0.600000 -2.000000
+0.600000 -1.900000
+0.600000 -1.800000
+0.600000 -1.700000
+0.600000 -1.600000
+0.600000 -1.500000
+0.600000 -1.400000
+0.600000 -1.300000
+0.600000 -1.200000
+0.600000 -1.100000
+0.600000 -1.000000
+0.600000 -0.900000
+0.600000 -0.800000
+0.600000 -0.700000
+0.600000 -0.600000
+0.600000 -0.500000
+0.600000 -0.400000
+0.600000 -0.300000
+0.600000 -0.200000
+0.600000 -0.100000
+0.600000 0.000000
+0.600000 0.100000
+0.600000 0.200000
+0.600000 0.300000
+0.600000 0.400000
+0.600000 0.500000
+0.600000 0.600000
+0.600000 0.700000
+0.600000 0.800000
+0.600000 0.900000
+0.600000 1.000000
+0.600000 1.100000
+0.600000 1.200000
+0.600000 1.300000
+0.600000 1.400000
+0.600000 1.500000
+0.600000 1.600000
+0.600000 1.700000
+0.600000 1.800000
+0.600000 1.900000
+0.600000 2.000000
+0.600000 2.100000
+0.600000 2.200000
+0.600000 2.300000
+0.600000 2.400000
+0.600000 2.500000
+0.600000 2.600000
+0.600000 2.700000
+0.600000 2.800000
+0.600000 2.900000
+0.600000 3.000000
+0.600000 3.100000
+0.600000 3.200000
+0.600000 3.300000
+0.600000 3.400000
+0.600000 3.500000
+0.600000 3.600000
+0.600000 3.700000
+0.600000 3.800000
+0.600000 3.900000
+0.600000 4.000000
+0.700000 -4.000000
+0.700000 -3.900000
+0.700000 -3.800000
+0.700000 -3.700000
+0.700000 -3.600000
+0.700000 -3.500000
+0.700000 -3.400000
+0.700000 -3.300000
+0.700000 -3.200000
+0.700000 -3.100000
+0.700000 -3.000000
+0.700000 -2.900000
+0.700000 -2.800000
+0.700000 -2.700000
+0.700000 -2.600000
+0.700000 -2.500000
+0.700000 -2.400000
+0.700000 -2.300000
+0.700000 -2.200000
+0.700000 -2.100000
+0.700000 -2.000000
+0.700000 -1.900000
+0.700000 -1.800000
+0.700000 -1.700000
+0.700000 -1.600000
+0.700000 -1.500000
+0.700000 -1.400000
+0.700000 -1.300000
+0.700000 -1.200000
+0.700000 -1.100000
+0.700000 -1.000000
+0.700000 -0.900000
+0.700000 -0.800000
+0.700000 -0.700000
+0.700000 -0.600000
+0.700000 -0.500000
+0.700000 -0.400000
+0.700000 -0.300000
+0.700000 -0.200000
+0.700000 -0.100000
+0.700000 0.000000
+0.700000 0.100000
+0.700000 0.200000
+0.700000 0.300000
+0.700000 0.400000
+0.700000 0.500000
+0.700000 0.600000
+0.700000 0.700000
+0.700000 0.800000
+0.700000 0.900000
+0.700000 1.000000
+0.700000 1.100000
+0.700000 1.200000
+0.700000 1.300000
+0.700000 1.400000
+0.700000 1.500000
+0.700000 1.600000
+0.700000 1.700000
+0.700000 1.800000
+0.700000 1.900000
+0.700000 2.000000
+0.700000 2.100000
+0.700000 2.200000
+0.700000 2.300000
+0.700000 2.400000
+0.700000 2.500000
+0.700000 2.600000
+0.700000 2.700000
+0.700000 2.800000
+0.700000 2.900000
+0.700000 3.000000
+0.700000 3.100000
+0.700000 3.200000
+0.700000 3.300000
+0.700000 3.400000
+0.700000 3.500000
+0.700000 3.600000
+0.700000 3.700000
+0.700000 3.800000
+0.700000 3.900000
+0.700000 4.000000
+0.800000 -4.000000
+0.800000 -3.900000
+0.800000 -3.800000
+0.800000 -3.700000
+0.800000 -3.600000
+0.800000 -3.500000
+0.800000 -3.400000
+0.800000 -3.300000
+0.800000 -3.200000
+0.800000 -3.100000
+0.800000 -3.000000
+0.800000 -2.900000
+0.800000 -2.800000
+0.800000 -2.700000
+0.800000 -2.600000
+0.800000 -2.500000
+0.800000 -2.400000
+0.800000 -2.300000
+0.800000 -2.200000
+0.800000 -2.100000
+0.800000 -2.000000
+0.800000 -1.900000
+0.800000 -1.800000
+0.800000 -1.700000
+0.800000 -1.600000
+0.800000 -1.500000
+0.800000 -1.400000
+0.800000 -1.300000
+0.800000 -1.200000
+0.800000 -1.100000
+0.800000 -1.000000
+0.800000 -0.900000
+0.800000 -0.800000
+0.800000 -0.700000
+0.800000 -0.600000
+0.800000 -0.500000
+0.800000 -0.400000
+0.800000 -0.300000
+0.800000 -0.200000
+0.800000 -0.100000
+0.800000 0.000000
+0.800000 0.100000
+0.800000 0.200000
+0.800000 0.300000
+0.800000 0.400000
+0.800000 0.500000
+0.800000 0.600000
+0.800000 0.700000
+0.800000 0.800000
+0.800000 0.900000
+0.800000 1.000000
+0.800000 1.100000
+0.800000 1.200000
+0.800000 1.300000
+0.800000 1.400000
+0.800000 1.500000
+0.800000 1.600000
+0.800000 1.700000
+0.800000 1.800000
+0.800000 1.900000
+0.800000 2.000000
+0.800000 2.100000
+0.800000 2.200000
+0.800000 2.300000
+0.800000 2.400000
+0.800000 2.500000
+0.800000 2.600000
+0.800000 2.700000
+0.800000 2.800000
+0.800000 2.900000
+0.800000 3.000000
+0.800000 3.100000
+0.800000 3.200000
+0.800000 3.300000
+0.800000 3.400000
+0.800000 3.500000
+0.800000 3.600000
+0.800000 3.700000
+0.800000 3.800000
+0.800000 3.900000
+0.800000 4.000000
+0.900000 -4.000000
+0.900000 -3.900000
+0.900000 -3.800000
+0.900000 -3.700000
+0.900000 -3.600000
+0.900000 -3.500000
+0.900000 -3.400000
+0.900000 -3.300000
+0.900000 -3.200000
+0.900000 -3.100000
+0.900000 -3.000000
+0.900000 -2.900000
+0.900000 -2.800000
+0.900000 -2.700000
+0.900000 -2.600000
+0.900000 -2.500000
+0.900000 -2.400000
+0.900000 -2.300000
+0.900000 -2.200000
+0.900000 -2.100000
+0.900000 -2.000000
+0.900000 -1.900000
+0.900000 -1.800000
+0.900000 -1.700000
+0.900000 -1.600000
+0.900000 -1.500000
+0.900000 -1.400000
+0.900000 -1.300000
+0.900000 -1.200000
+0.900000 -1.100000
+0.900000 -1.000000
+0.900000 -0.900000
+0.900000 -0.800000
+0.900000 -0.700000
+0.900000 -0.600000
+0.900000 -0.500000
+0.900000 -0.400000
+0.900000 -0.300000
+0.900000 -0.200000
+0.900000 -0.100000
+0.900000 0.000000
+0.900000 0.100000
+0.900000 0.200000
+0.900000 0.300000
+0.900000 0.400000
+0.900000 0.500000
+0.900000 0.600000
+0.900000 0.700000
+0.900000 0.800000
+0.900000 0.900000
+0.900000 1.000000
+0.900000 1.100000
+0.900000 1.200000
+0.900000 1.300000
+0.900000 1.400000
+0.900000 1.500000
+0.900000 1.600000
+0.900000 1.700000
+0.900000 1.800000
+0.900000 1.900000
+0.900000 2.000000
+0.900000 2.100000
+0.900000 2.200000
+0.900000 2.300000
+0.900000 2.400000
+0.900000 2.500000
+0.900000 2.600000
+0.900000 2.700000
+0.900000 2.800000
+0.900000 2.900000
+0.900000 3.000000
+0.900000 3.100000
+0.900000 3.200000
+0.900000 3.300000
+0.900000 3.400000
+0.900000 3.500000
+0.900000 3.600000
+0.900000 3.700000
+0.900000 3.800000
+0.900000 3.900000
+0.900000 4.000000
+1.000000 -4.000000
+1.000000 -3.900000
+1.000000 -3.800000
+1.000000 -3.700000
+1.000000 -3.600000
+1.000000 -3.500000
+1.000000 -3.400000
+1.000000 -3.300000
+1.000000 -3.200000
+1.000000 -3.100000
+1.000000 -3.000000
+1.000000 -2.900000
+1.000000 -2.800000
+1.000000 -2.700000
+1.000000 -2.600000
+1.000000 -2.500000
+1.000000 -2.400000
+1.000000 -2.300000
+1.000000 -2.200000
+1.000000 -2.100000
+1.000000 -2.000000
+1.000000 -1.900000
+1.000000 -1.800000
+1.000000 -1.700000
+1.000000 -1.600000
+1.000000 -1.500000
+1.000000 -1.400000
+1.000000 -1.300000
+1.000000 -1.200000
+1.000000 -1.100000
+1.000000 -1.000000
+1.000000 -0.900000
+1.000000 -0.800000
+1.000000 -0.700000
+1.000000 -0.600000
+1.000000 -0.500000
+1.000000 -0.400000
+1.000000 -0.300000
+1.000000 -0.200000
+1.000000 -0.100000
+1.000000 0.000000
+1.000000 0.100000
+1.000000 0.200000
+1.000000 0.300000
+1.000000 0.400000
+1.000000 0.500000
+1.000000 0.600000
+1.000000 0.700000
+1.000000 0.800000
+1.000000 0.900000
+1.000000 1.000000
+1.000000 1.100000
+1.000000 1.200000
+1.000000 1.300000
+1.000000 1.400000
+1.000000 1.500000
+1.000000 1.600000
+1.000000 1.700000
+1.000000 1.800000
+1.000000 1.900000
+1.000000 2.000000
+1.000000 2.100000
+1.000000 2.200000
+1.000000 2.300000
+1.000000 2.400000
+1.000000 2.500000
+1.000000 2.600000
+1.000000 2.700000
+1.000000 2.800000
+1.000000 2.900000
+1.000000 3.000000
+1.000000 3.100000
+1.000000 3.200000
+1.000000 3.300000
+1.000000 3.400000
+1.000000 3.500000
+1.000000 3.600000
+1.000000 3.700000
+1.000000 3.800000
+1.000000 3.900000
+1.000000 4.000000
+1.100000 -4.000000
+1.100000 -3.900000
+1.100000 -3.800000
+1.100000 -3.700000
+1.100000 -3.600000
+1.100000 -3.500000
+1.100000 -3.400000
+1.100000 -3.300000
+1.100000 -3.200000
+1.100000 -3.100000
+1.100000 -3.000000
+1.100000 -2.900000
+1.100000 -2.800000
+1.100000 -2.700000
+1.100000 -2.600000
+1.100000 -2.500000
+1.100000 -2.400000
+1.100000 -2.300000
+1.100000 -2.200000
+1.100000 -2.100000
+1.100000 -2.000000
+1.100000 -1.900000
+1.100000 -1.800000
+1.100000 -1.700000
+1.100000 -1.600000
+1.100000 -1.500000
+1.100000 -1.400000
+1.100000 -1.300000
+1.100000 -1.200000
+1.100000 -1.100000
+1.100000 -1.000000
+1.100000 -0.900000
+1.100000 -0.800000
+1.100000 -0.700000
+1.100000 -0.600000
+1.100000 -0.500000
+1.100000 -0.400000
+1.100000 -0.300000
+1.100000 -0.200000
+1.100000 -0.100000
+1.100000 0.000000
+1.100000 0.100000
+1.100000 0.200000
+1.100000 0.300000
+1.100000 0.400000
+1.100000 0.500000
+1.100000 0.600000
+1.100000 0.700000
+1.100000 0.800000
+1.100000 0.900000
+1.100000 1.000000
+1.100000 1.100000
+1.100000 1.200000
+1.100000 1.300000
+1.100000 1.400000
+1.100000 1.500000
+1.100000 1.600000
+1.100000 1.700000
+1.100000 1.800000
+1.100000 1.900000
+1.100000 2.000000
+1.100000 2.100000
+1.100000 2.200000
+1.100000 2.300000
+1.100000 2.400000
+1.100000 2.500000
+1.100000 2.600000
+1.100000 2.700000
+1.100000 2.800000
+1.100000 2.900000
+1.100000 3.000000
+1.100000 3.100000
+1.100000 3.200000
+1.100000 3.300000
+1.100000 3.400000
+1.100000 3.500000
+1.100000 3.600000
+1.100000 3.700000
+1.100000 3.800000
+1.100000 3.900000
+1.100000 4.000000
+1.200000 -4.000000
+1.200000 -3.900000
+1.200000 -3.800000
+1.200000 -3.700000
+1.200000 -3.600000
+1.200000 -3.500000
+1.200000 -3.400000
+1.200000 -3.300000
+1.200000 -3.200000
+1.200000 -3.100000
+1.200000 -3.000000
+1.200000 -2.900000
+1.200000 -2.800000
+1.200000 -2.700000
+1.200000 -2.600000
+1.200000 -2.500000
+1.200000 -2.400000
+1.200000 -2.300000
+1.200000 -2.200000
+1.200000 -2.100000
+1.200000 -2.000000
+1.200000 -1.900000
+1.200000 -1.800000
+1.200000 -1.700000
+1.200000 -1.600000
+1.200000 -1.500000
+1.200000 -1.400000
+1.200000 -1.300000
+1.200000 -1.200000
+1.200000 -1.100000
+1.200000 -1.000000
+1.200000 -0.900000
+1.200000 -0.800000
+1.200000 -0.700000
+1.200000 -0.600000
+1.200000 -0.500000
+1.200000 -0.400000
+1.200000 -0.300000
+1.200000 -0.200000
+1.200000 -0.100000
+1.200000 0.000000
+1.200000 0.100000
+1.200000 0.200000
+1.200000 0.300000
+1.200000 0.400000
+1.200000 0.500000
+1.200000 0.600000
+1.200000 0.700000
+1.200000 0.800000
+1.200000 0.900000
+1.200000 1.000000
+1.200000 1.100000
+1.200000 1.200000
+1.200000 1.300000
+1.200000 1.400000
+1.200000 1.500000
+1.200000 1.600000
+1.200000 1.700000
+1.200000 1.800000
+1.200000 1.900000
+1.200000 2.000000
+1.200000 2.100000
+1.200000 2.200000
+1.200000 2.300000
+1.200000 2.400000
+1.200000 2.500000
+1.200000 2.600000
+1.200000 2.700000
+1.200000 2.800000
+1.200000 2.900000
+1.200000 3.000000
+1.200000 3.100000
+1.200000 3.200000
+1.200000 3.300000
+1.200000 3.400000
+1.200000 3.500000
+1.200000 3.600000
+1.200000 3.700000
+1.200000 3.800000
+1.200000 3.900000
+1.200000 4.000000
+1.300000 -4.000000
+1.300000 -3.900000
+1.300000 -3.800000
+1.300000 -3.700000
+1.300000 -3.600000
+1.300000 -3.500000
+1.300000 -3.400000
+1.300000 -3.300000
+1.300000 -3.200000
+1.300000 -3.100000
+1.300000 -3.000000
+1.300000 -2.900000
+1.300000 -2.800000
+1.300000 -2.700000
+1.300000 -2.600000
+1.300000 -2.500000
+1.300000 -2.400000
+1.300000 -2.300000
+1.300000 -2.200000
+1.300000 -2.100000
+1.300000 -2.000000
+1.300000 -1.900000
+1.300000 -1.800000
+1.300000 -1.700000
+1.300000 -1.600000
+1.300000 -1.500000
+1.300000 -1.400000
+1.300000 -1.300000
+1.300000 -1.200000
+1.300000 -1.100000
+1.300000 -1.000000
+1.300000 -0.900000
+1.300000 -0.800000
+1.300000 -0.700000
+1.300000 -0.600000
+1.300000 -0.500000
+1.300000 -0.400000
+1.300000 -0.300000
+1.300000 -0.200000
+1.300000 -0.100000
+1.300000 0.000000
+1.300000 0.100000
+1.300000 0.200000
+1.300000 0.300000
+1.300000 0.400000
+1.300000 0.500000
+1.300000 0.600000
+1.300000 0.700000
+1.300000 0.800000
+1.300000 0.900000
+1.300000 1.000000
+1.300000 1.100000
+1.300000 1.200000
+1.300000 1.300000
+1.300000 1.400000
+1.300000 1.500000
+1.300000 1.600000
+1.300000 1.700000
+1.300000 1.800000
+1.300000 1.900000
+1.300000 2.000000
+1.300000 2.100000
+1.300000 2.200000
+1.300000 2.300000
+1.300000 2.400000
+1.300000 2.500000
+1.300000 2.600000
+1.300000 2.700000
+1.300000 2.800000
+1.300000 2.900000
+1.300000 3.000000
+1.300000 3.100000
+1.300000 3.200000
+1.300000 3.300000
+1.300000 3.400000
+1.300000 3.500000
+1.300000 3.600000
+1.300000 3.700000
+1.300000 3.800000
+1.300000 3.900000
+1.300000 4.000000
+1.400000 -4.000000
+1.400000 -3.900000
+1.400000 -3.800000
+1.400000 -3.700000
+1.400000 -3.600000
+1.400000 -3.500000
+1.400000 -3.400000
+1.400000 -3.300000
+1.400000 -3.200000
+1.400000 -3.100000
+1.400000 -3.000000
+1.400000 -2.900000
+1.400000 -2.800000
+1.400000 -2.700000
+1.400000 -2.600000
+1.400000 -2.500000
+1.400000 -2.400000
+1.400000 -2.300000
+1.400000 -2.200000
+1.400000 -2.100000
+1.400000 -2.000000
+1.400000 -1.900000
+1.400000 -1.800000
+1.400000 -1.700000
+1.400000 -1.600000
+1.400000 -1.500000
+1.400000 -1.400000
+1.400000 -1.300000
+1.400000 -1.200000
+1.400000 -1.100000
+1.400000 -1.000000
+1.400000 -0.900000
+1.400000 -0.800000
+1.400000 -0.700000
+1.400000 -0.600000
+1.400000 -0.500000
+1.400000 -0.400000
+1.400000 -0.300000
+1.400000 -0.200000
+1.400000 -0.100000
+1.400000 0.000000
+1.400000 0.100000
+1.400000 0.200000
+1.400000 0.300000
+1.400000 0.400000
+1.400000 0.500000
+1.400000 0.600000
+1.400000 0.700000
+1.400000 0.800000
+1.400000 0.900000
+1.400000 1.000000
+1.400000 1.100000
+1.400000 1.200000
+1.400000 1.300000
+1.400000 1.400000
+1.400000 1.500000
+1.400000 1.600000
+1.400000 1.700000
+1.400000 1.800000
+1.400000 1.900000
+1.400000 2.000000
+1.400000 2.100000
+1.400000 2.200000
+1.400000 2.300000
+1.400000 2.400000
+1.400000 2.500000
+1.400000 2.600000
+1.400000 2.700000
+1.400000 2.800000
+1.400000 2.900000
+1.400000 3.000000
+1.400000 3.100000
+1.400000 3.200000
+1.400000 3.300000
+1.400000 3.400000
+1.400000 3.500000
+1.400000 3.600000
+1.400000 3.700000
+1.400000 3.800000
+1.400000 3.900000
+1.400000 4.000000
+1.500000 -4.000000
+1.500000 -3.900000
+1.500000 -3.800000
+1.500000 -3.700000
+1.500000 -3.600000
+1.500000 -3.500000
+1.500000 -3.400000
+1.500000 -3.300000
+1.500000 -3.200000
+1.500000 -3.100000
+1.500000 -3.000000
+1.500000 -2.900000
+1.500000 -2.800000
+1.500000 -2.700000
+1.500000 -2.600000
+1.500000 -2.500000
+1.500000 -2.400000
+1.500000 -2.300000
+1.500000 -2.200000
+1.500000 -2.100000
+1.500000 -2.000000
+1.500000 -1.900000
+1.500000 -1.800000
+1.500000 -1.700000
+1.500000 -1.600000
+1.500000 -1.500000
+1.500000 -1.400000
+1.500000 -1.300000
+1.500000 -1.200000
+1.500000 -1.100000
+1.500000 -1.000000
+1.500000 -0.900000
+1.500000 -0.800000
+1.500000 -0.700000
+1.500000 -0.600000
+1.500000 -0.500000
+1.500000 -0.400000
+1.500000 -0.300000
+1.500000 -0.200000
+1.500000 -0.100000
+1.500000 0.000000
+1.500000 0.100000
+1.500000 0.200000
+1.500000 0.300000
+1.500000 0.400000
+1.500000 0.500000
+1.500000 0.600000
+1.500000 0.700000
+1.500000 0.800000
+1.500000 0.900000
+1.500000 1.000000
+1.500000 1.100000
+1.500000 1.200000
+1.500000 1.300000
+1.500000 1.400000
+1.500000 1.500000
+1.500000 1.600000
+1.500000 1.700000
+1.500000 1.800000
+1.500000 1.900000
+1.500000 2.000000
+1.500000 2.100000
+1.500000 2.200000
+1.500000 2.300000
+1.500000 2.400000
+1.500000 2.500000
+1.500000 2.600000
+1.500000 2.700000
+1.500000 2.800000
+1.500000 2.900000
+1.500000 3.000000
+1.500000 3.100000
+1.500000 3.200000
+1.500000 3.300000
+1.500000 3.400000
+1.500000 3.500000
+1.500000 3.600000
+1.500000 3.700000
+1.500000 3.800000
+1.500000 3.900000
+1.500000 4.000000
+1.600000 -4.000000
+1.600000 -3.900000
+1.600000 -3.800000
+1.600000 -3.700000
+1.600000 -3.600000
+1.600000 -3.500000
+1.600000 -3.400000
+1.600000 -3.300000
+1.600000 -3.200000
+1.600000 -3.100000
+1.600000 -3.000000
+1.600000 -2.900000
+1.600000 -2.800000
+1.600000 -2.700000
+1.600000 -2.600000
+1.600000 -2.500000
+1.600000 -2.400000
+1.600000 -2.300000
+1.600000 -2.200000
+1.600000 -2.100000
+1.600000 -2.000000
+1.600000 -1.900000
+1.600000 -1.800000
+1.600000 -1.700000
+1.600000 -1.600000
+1.600000 -1.500000
+1.600000 -1.400000
+1.600000 -1.300000
+1.600000 -1.200000
+1.600000 -1.100000
+1.600000 -1.000000
+1.600000 -0.900000
+1.600000 -0.800000
+1.600000 -0.700000
+1.600000 -0.600000
+1.600000 -0.500000
+1.600000 -0.400000
+1.600000 -0.300000
+1.600000 -0.200000
+1.600000 -0.100000
+1.600000 0.000000
+1.600000 0.100000
+1.600000 0.200000
+1.600000 0.300000
+1.600000 0.400000
+1.600000 0.500000
+1.600000 0.600000
+1.600000 0.700000
+1.600000 0.800000
+1.600000 0.900000
+1.600000 1.000000
+1.600000 1.100000
+1.600000 1.200000
+1.600000 1.300000
+1.600000 1.400000
+1.600000 1.500000
+1.600000 1.600000
+1.600000 1.700000
+1.600000 1.800000
+1.600000 1.900000
+1.600000 2.000000
+1.600000 2.100000
+1.600000 2.200000
+1.600000 2.300000
+1.600000 2.400000
+1.600000 2.500000
+1.600000 2.600000
+1.600000 2.700000
+1.600000 2.800000
+1.600000 2.900000
+1.600000 3.000000
+1.600000 3.100000
+1.600000 3.200000
+1.600000 3.300000
+1.600000 3.400000
+1.600000 3.500000
+1.600000 3.600000
+1.600000 3.700000
+1.600000 3.800000
+1.600000 3.900000
+1.600000 4.000000
+1.700000 -4.000000
+1.700000 -3.900000
+1.700000 -3.800000
+1.700000 -3.700000
+1.700000 -3.600000
+1.700000 -3.500000
+1.700000 -3.400000
+1.700000 -3.300000
+1.700000 -3.200000
+1.700000 -3.100000
+1.700000 -3.000000
+1.700000 -2.900000
+1.700000 -2.800000
+1.700000 -2.700000
+1.700000 -2.600000
+1.700000 -2.500000
+1.700000 -2.400000
+1.700000 -2.300000
+1.700000 -2.200000
+1.700000 -2.100000
+1.700000 -2.000000
+1.700000 -1.900000
+1.700000 -1.800000
+1.700000 -1.700000
+1.700000 -1.600000
+1.700000 -1.500000
+1.700000 -1.400000
+1.700000 -1.300000
+1.700000 -1.200000
+1.700000 -1.100000
+1.700000 -1.000000
+1.700000 -0.900000
+1.700000 -0.800000
+1.700000 -0.700000
+1.700000 -0.600000
+1.700000 -0.500000
+1.700000 -0.400000
+1.700000 -0.300000
+1.700000 -0.200000
+1.700000 -0.100000
+1.700000 0.000000
+1.700000 0.100000
+1.700000 0.200000
+1.700000 0.300000
+1.700000 0.400000
+1.700000 0.500000
+1.700000 0.600000
+1.700000 0.700000
+1.700000 0.800000
+1.700000 0.900000
+1.700000 1.000000
+1.700000 1.100000
+1.700000 1.200000
+1.700000 1.300000
+1.700000 1.400000
+1.700000 1.500000
+1.700000 1.600000
+1.700000 1.700000
+1.700000 1.800000
+1.700000 1.900000
+1.700000 2.000000
+1.700000 2.100000
+1.700000 2.200000
+1.700000 2.300000
+1.700000 2.400000
+1.700000 2.500000
+1.700000 2.600000
+1.700000 2.700000
+1.700000 2.800000
+1.700000 2.900000
+1.700000 3.000000
+1.700000 3.100000
+1.700000 3.200000
+1.700000 3.300000
+1.700000 3.400000
+1.700000 3.500000
+1.700000 3.600000
+1.700000 3.700000
+1.700000 3.800000
+1.700000 3.900000
+1.700000 4.000000
+1.800000 -4.000000
+1.800000 -3.900000
+1.800000 -3.800000
+1.800000 -3.700000
+1.800000 -3.600000
+1.800000 -3.500000
+1.800000 -3.400000
+1.800000 -3.300000
+1.800000 -3.200000
+1.800000 -3.100000
+1.800000 -3.000000
+1.800000 -2.900000
+1.800000 -2.800000
+1.800000 -2.700000
+1.800000 -2.600000
+1.800000 -2.500000
+1.800000 -2.400000
+1.800000 -2.300000
+1.800000 -2.200000
+1.800000 -2.100000
+1.800000 -2.000000
+1.800000 -1.900000
+1.800000 -1.800000
+1.800000 -1.700000
+1.800000 -1.600000
+1.800000 -1.500000
+1.800000 -1.400000
+1.800000 -1.300000
+1.800000 -1.200000
+1.800000 -1.100000
+1.800000 -1.000000
+1.800000 -0.900000
+1.800000 -0.800000
+1.800000 -0.700000
+1.800000 -0.600000
+1.800000 -0.500000
+1.800000 -0.400000
+1.800000 -0.300000
+1.800000 -0.200000
+1.800000 -0.100000
+1.800000 0.000000
+1.800000 0.100000
+1.800000 0.200000
+1.800000 0.300000
+1.800000 0.400000
+1.800000 0.500000
+1.800000 0.600000
+1.800000 0.700000
+1.800000 0.800000
+1.800000 0.900000
+1.800000 1.000000
+1.800000 1.100000
+1.800000 1.200000
+1.800000 1.300000
+1.800000 1.400000
+1.800000 1.500000
+1.800000 1.600000
+1.800000 1.700000
+1.800000 1.800000
+1.800000 1.900000
+1.800000 2.000000
+1.800000 2.100000
+1.800000 2.200000
+1.800000 2.300000
+1.800000 2.400000
+1.800000 2.500000
+1.800000 2.600000
+1.800000 2.700000
+1.800000 2.800000
+1.800000 2.900000
+1.800000 3.000000
+1.800000 3.100000
+1.800000 3.200000
+1.800000 3.300000
+1.800000 3.400000
+1.800000 3.500000
+1.800000 3.600000
+1.800000 3.700000
+1.800000 3.800000
+1.800000 3.900000
+1.800000 4.000000
+1.900000 -4.000000
+1.900000 -3.900000
+1.900000 -3.800000
+1.900000 -3.700000
+1.900000 -3.600000
+1.900000 -3.500000
+1.900000 -3.400000
+1.900000 -3.300000
+1.900000 -3.200000
+1.900000 -3.100000
+1.900000 -3.000000
+1.900000 -2.900000
+1.900000 -2.800000
+1.900000 -2.700000
+1.900000 -2.600000
+1.900000 -2.500000
+1.900000 -2.400000
+1.900000 -2.300000
+1.900000 -2.200000
+1.900000 -2.100000
+1.900000 -2.000000
+1.900000 -1.900000
+1.900000 -1.800000
+1.900000 -1.700000
+1.900000 -1.600000
+1.900000 -1.500000
+1.900000 -1.400000
+1.900000 -1.300000
+1.900000 -1.200000
+1.900000 -1.100000
+1.900000 -1.000000
+1.900000 -0.900000
+1.900000 -0.800000
+1.900000 -0.700000
+1.900000 -0.600000
+1.900000 -0.500000
+1.900000 -0.400000
+1.900000 -0.300000
+1.900000 -0.200000
+1.900000 -0.100000
+1.900000 0.000000
+1.900000 0.100000
+1.900000 0.200000
+1.900000 0.300000
+1.900000 0.400000
+1.900000 0.500000
+1.900000 0.600000
+1.900000 0.700000
+1.900000 0.800000
+1.900000 0.900000
+1.900000 1.000000
+1.900000 1.100000
+1.900000 1.200000
+1.900000 1.300000
+1.900000 1.400000
+1.900000 1.500000
+1.900000 1.600000
+1.900000 1.700000
+1.900000 1.800000
+1.900000 1.900000
+1.900000 2.000000
+1.900000 2.100000
+1.900000 2.200000
+1.900000 2.300000
+1.900000 2.400000
+1.900000 2.500000
+1.900000 2.600000
+1.900000 2.700000
+1.900000 2.800000
+1.900000 2.900000
+1.900000 3.000000
+1.900000 3.100000
+1.900000 3.200000
+1.900000 3.300000
+1.900000 3.400000
+1.900000 3.500000
+1.900000 3.600000
+1.900000 3.700000
+1.900000 3.800000
+1.900000 3.900000
+1.900000 4.000000
+2.000000 -4.000000
+2.000000 -3.900000
+2.000000 -3.800000
+2.000000 -3.700000
+2.000000 -3.600000
+2.000000 -3.500000
+2.000000 -3.400000
+2.000000 -3.300000
+2.000000 -3.200000
+2.000000 -3.100000
+2.000000 -3.000000
+2.000000 -2.900000
+2.000000 -2.800000
+2.000000 -2.700000
+2.000000 -2.600000
+2.000000 -2.500000
+2.000000 -2.400000
+2.000000 -2.300000
+2.000000 -2.200000
+2.000000 -2.100000
+2.000000 -2.000000
+2.000000 -1.900000
+2.000000 -1.800000
+2.000000 -1.700000
+2.000000 -1.600000
+2.000000 -1.500000
+2.000000 -1.400000
+2.000000 -1.300000
+2.000000 -1.200000
+2.000000 -1.100000
+2.000000 -1.000000
+2.000000 -0.900000
+2.000000 -0.800000
+2.000000 -0.700000
+2.000000 -0.600000
+2.000000 -0.500000
+2.000000 -0.400000
+2.000000 -0.300000
+2.000000 -0.200000
+2.000000 -0.100000
+2.000000 0.000000
+2.000000 0.100000
+2.000000 0.200000
+2.000000 0.300000
+2.000000 0.400000
+2.000000 0.500000
+2.000000 0.600000
+2.000000 0.700000
+2.000000 0.800000
+2.000000 0.900000
+2.000000 1.000000
+2.000000 1.100000
+2.000000 1.200000
+2.000000 1.300000
+2.000000 1.400000
+2.000000 1.500000
+2.000000 1.600000
+2.000000 1.700000
+2.000000 1.800000
+2.000000 1.900000
+2.000000 2.000000
+2.000000 2.100000
+2.000000 2.200000
+2.000000 2.300000
+2.000000 2.400000
+2.000000 2.500000
+2.000000 2.600000
+2.000000 2.700000
+2.000000 2.800000
+2.000000 2.900000
+2.000000 3.000000
+2.000000 3.100000
+2.000000 3.200000
+2.000000 3.300000
+2.000000 3.400000
+2.000000 3.500000
+2.000000 3.600000
+2.000000 3.700000
+2.000000 3.800000
+2.000000 3.900000
+2.000000 4.000000
+2.100000 -4.000000
+2.100000 -3.900000
+2.100000 -3.800000
+2.100000 -3.700000
+2.100000 -3.600000
+2.100000 -3.500000
+2.100000 -3.400000
+2.100000 -3.300000
+2.100000 -3.200000
+2.100000 -3.100000
+2.100000 -3.000000
+2.100000 -2.900000
+2.100000 -2.800000
+2.100000 -2.700000
+2.100000 -2.600000
+2.100000 -2.500000
+2.100000 -2.400000
+2.100000 -2.300000
+2.100000 -2.200000
+2.100000 -2.100000
+2.100000 -2.000000
+2.100000 -1.900000
+2.100000 -1.800000
+2.100000 -1.700000
+2.100000 -1.600000
+2.100000 -1.500000
+2.100000 -1.400000
+2.100000 -1.300000
+2.100000 -1.200000
+2.100000 -1.100000
+2.100000 -1.000000
+2.100000 -0.900000
+2.100000 -0.800000
+2.100000 -0.700000
+2.100000 -0.600000
+2.100000 -0.500000
+2.100000 -0.400000
+2.100000 -0.300000
+2.100000 -0.200000
+2.100000 -0.100000
+2.100000 0.000000
+2.100000 0.100000
+2.100000 0.200000
+2.100000 0.300000
+2.100000 0.400000
+2.100000 0.500000
+2.100000 0.600000
+2.100000 0.700000
+2.100000 0.800000
+2.100000 0.900000
+2.100000 1.000000
+2.100000 1.100000
+2.100000 1.200000
+2.100000 1.300000
+2.100000 1.400000
+2.100000 1.500000
+2.100000 1.600000
+2.100000 1.700000
+2.100000 1.800000
+2.100000 1.900000
+2.100000 2.000000
+2.100000 2.100000
+2.100000 2.200000
+2.100000 2.300000
+2.100000 2.400000
+2.100000 2.500000
+2.100000 2.600000
+2.100000 2.700000
+2.100000 2.800000
+2.100000 2.900000
+2.100000 3.000000
+2.100000 3.100000
+2.100000 3.200000
+2.100000 3.300000
+2.100000 3.400000
+2.100000 3.500000
+2.100000 3.600000
+2.100000 3.700000
+2.100000 3.800000
+2.100000 3.900000
+2.100000 4.000000
+2.200000 -4.000000
+2.200000 -3.900000
+2.200000 -3.800000
+2.200000 -3.700000
+2.200000 -3.600000
+2.200000 -3.500000
+2.200000 -3.400000
+2.200000 -3.300000
+2.200000 -3.200000
+2.200000 -3.100000
+2.200000 -3.000000
+2.200000 -2.900000
+2.200000 -2.800000
+2.200000 -2.700000
+2.200000 -2.600000
+2.200000 -2.500000
+2.200000 -2.400000
+2.200000 -2.300000
+2.200000 -2.200000
+2.200000 -2.100000
+2.200000 -2.000000
+2.200000 -1.900000
+2.200000 -1.800000
+2.200000 -1.700000
+2.200000 -1.600000
+2.200000 -1.500000
+2.200000 -1.400000
+2.200000 -1.300000
+2.200000 -1.200000
+2.200000 -1.100000
+2.200000 -1.000000
+2.200000 -0.900000
+2.200000 -0.800000
+2.200000 -0.700000
+2.200000 -0.600000
+2.200000 -0.500000
+2.200000 -0.400000
+2.200000 -0.300000
+2.200000 -0.200000
+2.200000 -0.100000
+2.200000 0.000000
+2.200000 0.100000
+2.200000 0.200000
+2.200000 0.300000
+2.200000 0.400000
+2.200000 0.500000
+2.200000 0.600000
+2.200000 0.700000
+2.200000 0.800000
+2.200000 0.900000
+2.200000 1.000000
+2.200000 1.100000
+2.200000 1.200000
+2.200000 1.300000
+2.200000 1.400000
+2.200000 1.500000
+2.200000 1.600000
+2.200000 1.700000
+2.200000 1.800000
+2.200000 1.900000
+2.200000 2.000000
+2.200000 2.100000
+2.200000 2.200000
+2.200000 2.300000
+2.200000 2.400000
+2.200000 2.500000
+2.200000 2.600000
+2.200000 2.700000
+2.200000 2.800000
+2.200000 2.900000
+2.200000 3.000000
+2.200000 3.100000
+2.200000 3.200000
+2.200000 3.300000
+2.200000 3.400000
+2.200000 3.500000
+2.200000 3.600000
+2.200000 3.700000
+2.200000 3.800000
+2.200000 3.900000
+2.200000 4.000000
+2.300000 -4.000000
+2.300000 -3.900000
+2.300000 -3.800000
+2.300000 -3.700000
+2.300000 -3.600000
+2.300000 -3.500000
+2.300000 -3.400000
+2.300000 -3.300000
+2.300000 -3.200000
+2.300000 -3.100000
+2.300000 -3.000000
+2.300000 -2.900000
+2.300000 -2.800000
+2.300000 -2.700000
+2.300000 -2.600000
+2.300000 -2.500000
+2.300000 -2.400000
+2.300000 -2.300000
+2.300000 -2.200000
+2.300000 -2.100000
+2.300000 -2.000000
+2.300000 -1.900000
+2.300000 -1.800000
+2.300000 -1.700000
+2.300000 -1.600000
+2.300000 -1.500000
+2.300000 -1.400000
+2.300000 -1.300000
+2.300000 -1.200000
+2.300000 -1.100000
+2.300000 -1.000000
+2.300000 -0.900000
+2.300000 -0.800000
+2.300000 -0.700000
+2.300000 -0.600000
+2.300000 -0.500000
+2.300000 -0.400000
+2.300000 -0.300000
+2.300000 -0.200000
+2.300000 -0.100000
+2.300000 0.000000
+2.300000 0.100000
+2.300000 0.200000
+2.300000 0.300000
+2.300000 0.400000
+2.300000 0.500000
+2.300000 0.600000
+2.300000 0.700000
+2.300000 0.800000
+2.300000 0.900000
+2.300000 1.000000
+2.300000 1.100000
+2.300000 1.200000
+2.300000 1.300000
+2.300000 1.400000
+2.300000 1.500000
+2.300000 1.600000
+2.300000 1.700000
+2.300000 1.800000
+2.300000 1.900000
+2.300000 2.000000
+2.300000 2.100000
+2.300000 2.200000
+2.300000 2.300000
+2.300000 2.400000
+2.300000 2.500000
+2.300000 2.600000
+2.300000 2.700000
+2.300000 2.800000
+2.300000 2.900000
+2.300000 3.000000
+2.300000 3.100000
+2.300000 3.200000
+2.300000 3.300000
+2.300000 3.400000
+2.300000 3.500000
+2.300000 3.600000
+2.300000 3.700000
+2.300000 3.800000
+2.300000 3.900000
+2.300000 4.000000
+2.400000 -4.000000
+2.400000 -3.900000
+2.400000 -3.800000
+2.400000 -3.700000
+2.400000 -3.600000
+2.400000 -3.500000
+2.400000 -3.400000
+2.400000 -3.300000
+2.400000 -3.200000
+2.400000 -3.100000
+2.400000 -3.000000
+2.400000 -2.900000
+2.400000 -2.800000
+2.400000 -2.700000
+2.400000 -2.600000
+2.400000 -2.500000
+2.400000 -2.400000
+2.400000 -2.300000
+2.400000 -2.200000
+2.400000 -2.100000
+2.400000 -2.000000
+2.400000 -1.900000
+2.400000 -1.800000
+2.400000 -1.700000
+2.400000 -1.600000
+2.400000 -1.500000
+2.400000 -1.400000
+2.400000 -1.300000
+2.400000 -1.200000
+2.400000 -1.100000
+2.400000 -1.000000
+2.400000 -0.900000
+2.400000 -0.800000
+2.400000 -0.700000
+2.400000 -0.600000
+2.400000 -0.500000
+2.400000 -0.400000
+2.400000 -0.300000
+2.400000 -0.200000
+2.400000 -0.100000
+2.400000 0.000000
+2.400000 0.100000
+2.400000 0.200000
+2.400000 0.300000
+2.400000 0.400000
+2.400000 0.500000
+2.400000 0.600000
+2.400000 0.700000
+2.400000 0.800000
+2.400000 0.900000
+2.400000 1.000000
+2.400000 1.100000
+2.400000 1.200000
+2.400000 1.300000
+2.400000 1.400000
+2.400000 1.500000
+2.400000 1.600000
+2.400000 1.700000
+2.400000 1.800000
+2.400000 1.900000
+2.400000 2.000000
+2.400000 2.100000
+2.400000 2.200000
+2.400000 2.300000
+2.400000 2.400000
+2.400000 2.500000
+2.400000 2.600000
+2.400000 2.700000
+2.400000 2.800000
+2.400000 2.900000
+2.400000 3.000000
+2.400000 3.100000
+2.400000 3.200000
+2.400000 3.300000
+2.400000 3.400000
+2.400000 3.500000
+2.400000 3.600000
+2.400000 3.700000
+2.400000 3.800000
+2.400000 3.900000
+2.400000 4.000000
+2.500000 -4.000000
+2.500000 -3.900000
+2.500000 -3.800000
+2.500000 -3.700000
+2.500000 -3.600000
+2.500000 -3.500000
+2.500000 -3.400000
+2.500000 -3.300000
+2.500000 -3.200000
+2.500000 -3.100000
+2.500000 -3.000000
+2.500000 -2.900000
+2.500000 -2.800000
+2.500000 -2.700000
+2.500000 -2.600000
+2.500000 -2.500000
+2.500000 -2.400000
+2.500000 -2.300000
+2.500000 -2.200000
+2.500000 -2.100000
+2.500000 -2.000000
+2.500000 -1.900000
+2.500000 -1.800000
+2.500000 -1.700000
+2.500000 -1.600000
+2.500000 -1.500000
+2.500000 -1.400000
+2.500000 -1.300000
+2.500000 -1.200000
+2.500000 -1.100000
+2.500000 -1.000000
+2.500000 -0.900000
+2.500000 -0.800000
+2.500000 -0.700000
+2.500000 -0.600000
+2.500000 -0.500000
+2.500000 -0.400000
+2.500000 -0.300000
+2.500000 -0.200000
+2.500000 -0.100000
+2.500000 0.000000
+2.500000 0.100000
+2.500000 0.200000
+2.500000 0.300000
+2.500000 0.400000
+2.500000 0.500000
+2.500000 0.600000
+2.500000 0.700000
+2.500000 0.800000
+2.500000 0.900000
+2.500000 1.000000
+2.500000 1.100000
+2.500000 1.200000
+2.500000 1.300000
+2.500000 1.400000
+2.500000 1.500000
+2.500000 1.600000
+2.500000 1.700000
+2.500000 1.800000
+2.500000 1.900000
+2.500000 2.000000
+2.500000 2.100000
+2.500000 2.200000
+2.500000 2.300000
+2.500000 2.400000
+2.500000 2.500000
+2.500000 2.600000
+2.500000 2.700000
+2.500000 2.800000
+2.500000 2.900000
+2.500000 3.000000
+2.500000 3.100000
+2.500000 3.200000
+2.500000 3.300000
+2.500000 3.400000
+2.500000 3.500000
+2.500000 3.600000
+2.500000 3.700000
+2.500000 3.800000
+2.500000 3.900000
+2.500000 4.000000
+2.600000 -4.000000
+2.600000 -3.900000
+2.600000 -3.800000
+2.600000 -3.700000
+2.600000 -3.600000
+2.600000 -3.500000
+2.600000 -3.400000
+2.600000 -3.300000
+2.600000 -3.200000
+2.600000 -3.100000
+2.600000 -3.000000
+2.600000 -2.900000
+2.600000 -2.800000
+2.600000 -2.700000
+2.600000 -2.600000
+2.600000 -2.500000
+2.600000 -2.400000
+2.600000 -2.300000
+2.600000 -2.200000
+2.600000 -2.100000
+2.600000 -2.000000
+2.600000 -1.900000
+2.600000 -1.800000
+2.600000 -1.700000
+2.600000 -1.600000
+2.600000 -1.500000
+2.600000 -1.400000
+2.600000 -1.300000
+2.600000 -1.200000
+2.600000 -1.100000
+2.600000 -1.000000
+2.600000 -0.900000
+2.600000 -0.800000
+2.600000 -0.700000
+2.600000 -0.600000
+2.600000 -0.500000
+2.600000 -0.400000
+2.600000 -0.300000
+2.600000 -0.200000
+2.600000 -0.100000
+2.600000 0.000000
+2.600000 0.100000
+2.600000 0.200000
+2.600000 0.300000
+2.600000 0.400000
+2.600000 0.500000
+2.600000 0.600000
+2.600000 0.700000
+2.600000 0.800000
+2.600000 0.900000
+2.600000 1.000000
+2.600000 1.100000
+2.600000 1.200000
+2.600000 1.300000
+2.600000 1.400000
+2.600000 1.500000
+2.600000 1.600000
+2.600000 1.700000
+2.600000 1.800000
+2.600000 1.900000
+2.600000 2.000000
+2.600000 2.100000
+2.600000 2.200000
+2.600000 2.300000
+2.600000 2.400000
+2.600000 2.500000
+2.600000 2.600000
+2.600000 2.700000
+2.600000 2.800000
+2.600000 2.900000
+2.600000 3.000000
+2.600000 3.100000
+2.600000 3.200000
+2.600000 3.300000
+2.600000 3.400000
+2.600000 3.500000
+2.600000 3.600000
+2.600000 3.700000
+2.600000 3.800000
+2.600000 3.900000
+2.600000 4.000000
+2.700000 -4.000000
+2.700000 -3.900000
+2.700000 -3.800000
+2.700000 -3.700000
+2.700000 -3.600000
+2.700000 -3.500000
+2.700000 -3.400000
+2.700000 -3.300000
+2.700000 -3.200000
+2.700000 -3.100000
+2.700000 -3.000000
+2.700000 -2.900000
+2.700000 -2.800000
+2.700000 -2.700000
+2.700000 -2.600000
+2.700000 -2.500000
+2.700000 -2.400000
+2.700000 -2.300000
+2.700000 -2.200000
+2.700000 -2.100000
+2.700000 -2.000000
+2.700000 -1.900000
+2.700000 -1.800000
+2.700000 -1.700000
+2.700000 -1.600000
+2.700000 -1.500000
+2.700000 -1.400000
+2.700000 -1.300000
+2.700000 -1.200000
+2.700000 -1.100000
+2.700000 -1.000000
+2.700000 -0.900000
+2.700000 -0.800000
+2.700000 -0.700000
+2.700000 -0.600000
+2.700000 -0.500000
+2.700000 -0.400000
+2.700000 -0.300000
+2.700000 -0.200000
+2.700000 -0.100000
+2.700000 0.000000
+2.700000 0.100000
+2.700000 0.200000
+2.700000 0.300000
+2.700000 0.400000
+2.700000 0.500000
+2.700000 0.600000
+2.700000 0.700000
+2.700000 0.800000
+2.700000 0.900000
+2.700000 1.000000
+2.700000 1.100000
+2.700000 1.200000
+2.700000 1.300000
+2.700000 1.400000
+2.700000 1.500000
+2.700000 1.600000
+2.700000 1.700000
+2.700000 1.800000
+2.700000 1.900000
+2.700000 2.000000
+2.700000 2.100000
+2.700000 2.200000
+2.700000 2.300000
+2.700000 2.400000
+2.700000 2.500000
+2.700000 2.600000
+2.700000 2.700000
+2.700000 2.800000
+2.700000 2.900000
+2.700000 3.000000
+2.700000 3.100000
+2.700000 3.200000
+2.700000 3.300000
+2.700000 3.400000
+2.700000 3.500000
+2.700000 3.600000
+2.700000 3.700000
+2.700000 3.800000
+2.700000 3.900000
+2.700000 4.000000
+2.800000 -4.000000
+2.800000 -3.900000
+2.800000 -3.800000
+2.800000 -3.700000
+2.800000 -3.600000
+2.800000 -3.500000
+2.800000 -3.400000
+2.800000 -3.300000
+2.800000 -3.200000
+2.800000 -3.100000
+2.800000 -3.000000
+2.800000 -2.900000
+2.800000 -2.800000
+2.800000 -2.700000
+2.800000 -2.600000
+2.800000 -2.500000
+2.800000 -2.400000
+2.800000 -2.300000
+2.800000 -2.200000
+2.800000 -2.100000
+2.800000 -2.000000
+2.800000 -1.900000
+2.800000 -1.800000
+2.800000 -1.700000
+2.800000 -1.600000
+2.800000 -1.500000
+2.800000 -1.400000
+2.800000 -1.300000
+2.800000 -1.200000
+2.800000 -1.100000
+2.800000 -1.000000
+2.800000 -0.900000
+2.800000 -0.800000
+2.800000 -0.700000
+2.800000 -0.600000
+2.800000 -0.500000
+2.800000 -0.400000
+2.800000 -0.300000
+2.800000 -0.200000
+2.800000 -0.100000
+2.800000 0.000000
+2.800000 0.100000
+2.800000 0.200000
+2.800000 0.300000
+2.800000 0.400000
+2.800000 0.500000
+2.800000 0.600000
+2.800000 0.700000
+2.800000 0.800000
+2.800000 0.900000
+2.800000 1.000000
+2.800000 1.100000
+2.800000 1.200000
+2.800000 1.300000
+2.800000 1.400000
+2.800000 1.500000
+2.800000 1.600000
+2.800000 1.700000
+2.800000 1.800000
+2.800000 1.900000
+2.800000 2.000000
+2.800000 2.100000
+2.800000 2.200000
+2.800000 2.300000
+2.800000 2.400000
+2.800000 2.500000
+2.800000 2.600000
+2.800000 2.700000
+2.800000 2.800000
+2.800000 2.900000
+2.800000 3.000000
+2.800000 3.100000
+2.800000 3.200000
+2.800000 3.300000
+2.800000 3.400000
+2.800000 3.500000
+2.800000 3.600000
+2.800000 3.700000
+2.800000 3.800000
+2.800000 3.900000
+2.800000 4.000000
+2.900000 -4.000000
+2.900000 -3.900000
+2.900000 -3.800000
+2.900000 -3.700000
+2.900000 -3.600000
+2.900000 -3.500000
+2.900000 -3.400000
+2.900000 -3.300000
+2.900000 -3.200000
+2.900000 -3.100000
+2.900000 -3.000000
+2.900000 -2.900000
+2.900000 -2.800000
+2.900000 -2.700000
+2.900000 -2.600000
+2.900000 -2.500000
+2.900000 -2.400000
+2.900000 -2.300000
+2.900000 -2.200000
+2.900000 -2.100000
+2.900000 -2.000000
+2.900000 -1.900000
+2.900000 -1.800000
+2.900000 -1.700000
+2.900000 -1.600000
+2.900000 -1.500000
+2.900000 -1.400000
+2.900000 -1.300000
+2.900000 -1.200000
+2.900000 -1.100000
+2.900000 -1.000000
+2.900000 -0.900000
+2.900000 -0.800000
+2.900000 -0.700000
+2.900000 -0.600000
+2.900000 -0.500000
+2.900000 -0.400000
+2.900000 -0.300000
+2.900000 -0.200000
+2.900000 -0.100000
+2.900000 0.000000
+2.900000 0.100000
+2.900000 0.200000
+2.900000 0.300000
+2.900000 0.400000
+2.900000 0.500000
+2.900000 0.600000
+2.900000 0.700000
+2.900000 0.800000
+2.900000 0.900000
+2.900000 1.000000
+2.900000 1.100000
+2.900000 1.200000
+2.900000 1.300000
+2.900000 1.400000
+2.900000 1.500000
+2.900000 1.600000
+2.900000 1.700000
+2.900000 1.800000
+2.900000 1.900000
+2.900000 2.000000
+2.900000 2.100000
+2.900000 2.200000
+2.900000 2.300000
+2.900000 2.400000
+2.900000 2.500000
+2.900000 2.600000
+2.900000 2.700000
+2.900000 2.800000
+2.900000 2.900000
+2.900000 3.000000
+2.900000 3.100000
+2.900000 3.200000
+2.900000 3.300000
+2.900000 3.400000
+2.900000 3.500000
+2.900000 3.600000
+2.900000 3.700000
+2.900000 3.800000
+2.900000 3.900000
+2.900000 4.000000
+3.000000 -4.000000
+3.000000 -3.900000
+3.000000 -3.800000
+3.000000 -3.700000
+3.000000 -3.600000
+3.000000 -3.500000
+3.000000 -3.400000
+3.000000 -3.300000
+3.000000 -3.200000
+3.000000 -3.100000
+3.000000 -3.000000
+3.000000 -2.900000
+3.000000 -2.800000
+3.000000 -2.700000
+3.000000 -2.600000
+3.000000 -2.500000
+3.000000 -2.400000
+3.000000 -2.300000
+3.000000 -2.200000
+3.000000 -2.100000
+3.000000 -2.000000
+3.000000 -1.900000
+3.000000 -1.800000
+3.000000 -1.700000
+3.000000 -1.600000
+3.000000 -1.500000
+3.000000 -1.400000
+3.000000 -1.300000
+3.000000 -1.200000
+3.000000 -1.100000
+3.000000 -1.000000
+3.000000 -0.900000
+3.000000 -0.800000
+3.000000 -0.700000
+3.000000 -0.600000
+3.000000 -0.500000
+3.000000 -0.400000
+3.000000 -0.300000
+3.000000 -0.200000
+3.000000 -0.100000
+3.000000 0.000000
+3.000000 0.100000
+3.000000 0.200000
+3.000000 0.300000
+3.000000 0.400000
+3.000000 0.500000
+3.000000 0.600000
+3.000000 0.700000
+3.000000 0.800000
+3.000000 0.900000
+3.000000 1.000000
+3.000000 1.100000
+3.000000 1.200000
+3.000000 1.300000
+3.000000 1.400000
+3.000000 1.500000
+3.000000 1.600000
+3.000000 1.700000
+3.000000 1.800000
+3.000000 1.900000
+3.000000 2.000000
+3.000000 2.100000
+3.000000 2.200000
+3.000000 2.300000
+3.000000 2.400000
+3.000000 2.500000
+3.000000 2.600000
+3.000000 2.700000
+3.000000 2.800000
+3.000000 2.900000
+3.000000 3.000000
+3.000000 3.100000
+3.000000 3.200000
+3.000000 3.300000
+3.000000 3.400000
+3.000000 3.500000
+3.000000 3.600000
+3.000000 3.700000
+3.000000 3.800000
+3.000000 3.900000
+3.000000 4.000000
+3.100000 -4.000000
+3.100000 -3.900000
+3.100000 -3.800000
+3.100000 -3.700000
+3.100000 -3.600000
+3.100000 -3.500000
+3.100000 -3.400000
+3.100000 -3.300000
+3.100000 -3.200000
+3.100000 -3.100000
+3.100000 -3.000000
+3.100000 -2.900000
+3.100000 -2.800000
+3.100000 -2.700000
+3.100000 -2.600000
+3.100000 -2.500000
+3.100000 -2.400000
+3.100000 -2.300000
+3.100000 -2.200000
+3.100000 -2.100000
+3.100000 -2.000000
+3.100000 -1.900000
+3.100000 -1.800000
+3.100000 -1.700000
+3.100000 -1.600000
+3.100000 -1.500000
+3.100000 -1.400000
+3.100000 -1.300000
+3.100000 -1.200000
+3.100000 -1.100000
+3.100000 -1.000000
+3.100000 -0.900000
+3.100000 -0.800000
+3.100000 -0.700000
+3.100000 -0.600000
+3.100000 -0.500000
+3.100000 -0.400000
+3.100000 -0.300000
+3.100000 -0.200000
+3.100000 -0.100000
+3.100000 0.000000
+3.100000 0.100000
+3.100000 0.200000
+3.100000 0.300000
+3.100000 0.400000
+3.100000 0.500000
+3.100000 0.600000
+3.100000 0.700000
+3.100000 0.800000
+3.100000 0.900000
+3.100000 1.000000
+3.100000 1.100000
+3.100000 1.200000
+3.100000 1.300000
+3.100000 1.400000
+3.100000 1.500000
+3.100000 1.600000
+3.100000 1.700000
+3.100000 1.800000
+3.100000 1.900000
+3.100000 2.000000
+3.100000 2.100000
+3.100000 2.200000
+3.100000 2.300000
+3.100000 2.400000
+3.100000 2.500000
+3.100000 2.600000
+3.100000 2.700000
+3.100000 2.800000
+3.100000 2.900000
+3.100000 3.000000
+3.100000 3.100000
+3.100000 3.200000
+3.100000 3.300000
+3.100000 3.400000
+3.100000 3.500000
+3.100000 3.600000
+3.100000 3.700000
+3.100000 3.800000
+3.100000 3.900000
+3.100000 4.000000
+3.200000 -4.000000
+3.200000 -3.900000
+3.200000 -3.800000
+3.200000 -3.700000
+3.200000 -3.600000
+3.200000 -3.500000
+3.200000 -3.400000
+3.200000 -3.300000
+3.200000 -3.200000
+3.200000 -3.100000
+3.200000 -3.000000
+3.200000 -2.900000
+3.200000 -2.800000
+3.200000 -2.700000
+3.200000 -2.600000
+3.200000 -2.500000
+3.200000 -2.400000
+3.200000 -2.300000
+3.200000 -2.200000
+3.200000 -2.100000
+3.200000 -2.000000
+3.200000 -1.900000
+3.200000 -1.800000
+3.200000 -1.700000
+3.200000 -1.600000
+3.200000 -1.500000
+3.200000 -1.400000
+3.200000 -1.300000
+3.200000 -1.200000
+3.200000 -1.100000
+3.200000 -1.000000
+3.200000 -0.900000
+3.200000 -0.800000
+3.200000 -0.700000
+3.200000 -0.600000
+3.200000 -0.500000
+3.200000 -0.400000
+3.200000 -0.300000
+3.200000 -0.200000
+3.200000 -0.100000
+3.200000 0.000000
+3.200000 0.100000
+3.200000 0.200000
+3.200000 0.300000
+3.200000 0.400000
+3.200000 0.500000
+3.200000 0.600000
+3.200000 0.700000
+3.200000 0.800000
+3.200000 0.900000
+3.200000 1.000000
+3.200000 1.100000
+3.200000 1.200000
+3.200000 1.300000
+3.200000 1.400000
+3.200000 1.500000
+3.200000 1.600000
+3.200000 1.700000
+3.200000 1.800000
+3.200000 1.900000
+3.200000 2.000000
+3.200000 2.100000
+3.200000 2.200000
+3.200000 2.300000
+3.200000 2.400000
+3.200000 2.500000
+3.200000 2.600000
+3.200000 2.700000
+3.200000 2.800000
+3.200000 2.900000
+3.200000 3.000000
+3.200000 3.100000
+3.200000 3.200000
+3.200000 3.300000
+3.200000 3.400000
+3.200000 3.500000
+3.200000 3.600000
+3.200000 3.700000
+3.200000 3.800000
+3.200000 3.900000
+3.200000 4.000000
+3.300000 -4.000000
+3.300000 -3.900000
+3.300000 -3.800000
+3.300000 -3.700000
+3.300000 -3.600000
+3.300000 -3.500000
+3.300000 -3.400000
+3.300000 -3.300000
+3.300000 -3.200000
+3.300000 -3.100000
+3.300000 -3.000000
+3.300000 -2.900000
+3.300000 -2.800000
+3.300000 -2.700000
+3.300000 -2.600000
+3.300000 -2.500000
+3.300000 -2.400000
+3.300000 -2.300000
+3.300000 -2.200000
+3.300000 -2.100000
+3.300000 -2.000000
+3.300000 -1.900000
+3.300000 -1.800000
+3.300000 -1.700000
+3.300000 -1.600000
+3.300000 -1.500000
+3.300000 -1.400000
+3.300000 -1.300000
+3.300000 -1.200000
+3.300000 -1.100000
+3.300000 -1.000000
+3.300000 -0.900000
+3.300000 -0.800000
+3.300000 -0.700000
+3.300000 -0.600000
+3.300000 -0.500000
+3.300000 -0.400000
+3.300000 -0.300000
+3.300000 -0.200000
+3.300000 -0.100000
+3.300000 0.000000
+3.300000 0.100000
+3.300000 0.200000
+3.300000 0.300000
+3.300000 0.400000
+3.300000 0.500000
+3.300000 0.600000
+3.300000 0.700000
+3.300000 0.800000
+3.300000 0.900000
+3.300000 1.000000
+3.300000 1.100000
+3.300000 1.200000
+3.300000 1.300000
+3.300000 1.400000
+3.300000 1.500000
+3.300000 1.600000
+3.300000 1.700000
+3.300000 1.800000
+3.300000 1.900000
+3.300000 2.000000
+3.300000 2.100000
+3.300000 2.200000
+3.300000 2.300000
+3.300000 2.400000
+3.300000 2.500000
+3.300000 2.600000
+3.300000 2.700000
+3.300000 2.800000
+3.300000 2.900000
+3.300000 3.000000
+3.300000 3.100000
+3.300000 3.200000
+3.300000 3.300000
+3.300000 3.400000
+3.300000 3.500000
+3.300000 3.600000
+3.300000 3.700000
+3.300000 3.800000
+3.300000 3.900000
+3.300000 4.000000
+3.400000 -4.000000
+3.400000 -3.900000
+3.400000 -3.800000
+3.400000 -3.700000
+3.400000 -3.600000
+3.400000 -3.500000
+3.400000 -3.400000
+3.400000 -3.300000
+3.400000 -3.200000
+3.400000 -3.100000
+3.400000 -3.000000
+3.400000 -2.900000
+3.400000 -2.800000
+3.400000 -2.700000
+3.400000 -2.600000
+3.400000 -2.500000
+3.400000 -2.400000
+3.400000 -2.300000
+3.400000 -2.200000
+3.400000 -2.100000
+3.400000 -2.000000
+3.400000 -1.900000
+3.400000 -1.800000
+3.400000 -1.700000
+3.400000 -1.600000
+3.400000 -1.500000
+3.400000 -1.400000
+3.400000 -1.300000
+3.400000 -1.200000
+3.400000 -1.100000
+3.400000 -1.000000
+3.400000 -0.900000
+3.400000 -0.800000
+3.400000 -0.700000
+3.400000 -0.600000
+3.400000 -0.500000
+3.400000 -0.400000
+3.400000 -0.300000
+3.400000 -0.200000
+3.400000 -0.100000
+3.400000 0.000000
+3.400000 0.100000
+3.400000 0.200000
+3.400000 0.300000
+3.400000 0.400000
+3.400000 0.500000
+3.400000 0.600000
+3.400000 0.700000
+3.400000 0.800000
+3.400000 0.900000
+3.400000 1.000000
+3.400000 1.100000
+3.400000 1.200000
+3.400000 1.300000
+3.400000 1.400000
+3.400000 1.500000
+3.400000 1.600000
+3.400000 1.700000
+3.400000 1.800000
+3.400000 1.900000
+3.400000 2.000000
+3.400000 2.100000
+3.400000 2.200000
+3.400000 2.300000
+3.400000 2.400000
+3.400000 2.500000
+3.400000 2.600000
+3.400000 2.700000
+3.400000 2.800000
+3.400000 2.900000
+3.400000 3.000000
+3.400000 3.100000
+3.400000 3.200000
+3.400000 3.300000
+3.400000 3.400000
+3.400000 3.500000
+3.400000 3.600000
+3.400000 3.700000
+3.400000 3.800000
+3.400000 3.900000
+3.400000 4.000000
+3.500000 -4.000000
+3.500000 -3.900000
+3.500000 -3.800000
+3.500000 -3.700000
+3.500000 -3.600000
+3.500000 -3.500000
+3.500000 -3.400000
+3.500000 -3.300000
+3.500000 -3.200000
+3.500000 -3.100000
+3.500000 -3.000000
+3.500000 -2.900000
+3.500000 -2.800000
+3.500000 -2.700000
+3.500000 -2.600000
+3.500000 -2.500000
+3.500000 -2.400000
+3.500000 -2.300000
+3.500000 -2.200000
+3.500000 -2.100000
+3.500000 -2.000000
+3.500000 -1.900000
+3.500000 -1.800000
+3.500000 -1.700000
+3.500000 -1.600000
+3.500000 -1.500000
+3.500000 -1.400000
+3.500000 -1.300000
+3.500000 -1.200000
+3.500000 -1.100000
+3.500000 -1.000000
+3.500000 -0.900000
+3.500000 -0.800000
+3.500000 -0.700000
+3.500000 -0.600000
+3.500000 -0.500000
+3.500000 -0.400000
+3.500000 -0.300000
+3.500000 -0.200000
+3.500000 -0.100000
+3.500000 0.000000
+3.500000 0.100000
+3.500000 0.200000
+3.500000 0.300000
+3.500000 0.400000
+3.500000 0.500000
+3.500000 0.600000
+3.500000 0.700000
+3.500000 0.800000
+3.500000 0.900000
+3.500000 1.000000
+3.500000 1.100000
+3.500000 1.200000
+3.500000 1.300000
+3.500000 1.400000
+3.500000 1.500000
+3.500000 1.600000
+3.500000 1.700000
+3.500000 1.800000
+3.500000 1.900000
+3.500000 2.000000
+3.500000 2.100000
+3.500000 2.200000
+3.500000 2.300000
+3.500000 2.400000
+3.500000 2.500000
+3.500000 2.600000
+3.500000 2.700000
+3.500000 2.800000
+3.500000 2.900000
+3.500000 3.000000
+3.500000 3.100000
+3.500000 3.200000
+3.500000 3.300000
+3.500000 3.400000
+3.500000 3.500000
+3.500000 3.600000
+3.500000 3.700000
+3.500000 3.800000
+3.500000 3.900000
+3.500000 4.000000
+3.600000 -4.000000
+3.600000 -3.900000
+3.600000 -3.800000
+3.600000 -3.700000
+3.600000 -3.600000
+3.600000 -3.500000
+3.600000 -3.400000
+3.600000 -3.300000
+3.600000 -3.200000
+3.600000 -3.100000
+3.600000 -3.000000
+3.600000 -2.900000
+3.600000 -2.800000
+3.600000 -2.700000
+3.600000 -2.600000
+3.600000 -2.500000
+3.600000 -2.400000
+3.600000 -2.300000
+3.600000 -2.200000
+3.600000 -2.100000
+3.600000 -2.000000
+3.600000 -1.900000
+3.600000 -1.800000
+3.600000 -1.700000
+3.600000 -1.600000
+3.600000 -1.500000
+3.600000 -1.400000
+3.600000 -1.300000
+3.600000 -1.200000
+3.600000 -1.100000
+3.600000 -1.000000
+3.600000 -0.900000
+3.600000 -0.800000
+3.600000 -0.700000
+3.600000 -0.600000
+3.600000 -0.500000
+3.600000 -0.400000
+3.600000 -0.300000
+3.600000 -0.200000
+3.600000 -0.100000
+3.600000 0.000000
+3.600000 0.100000
+3.600000 0.200000
+3.600000 0.300000
+3.600000 0.400000
+3.600000 0.500000
+3.600000 0.600000
+3.600000 0.700000
+3.600000 0.800000
+3.600000 0.900000
+3.600000 1.000000
+3.600000 1.100000
+3.600000 1.200000
+3.600000 1.300000
+3.600000 1.400000
+3.600000 1.500000
+3.600000 1.600000
+3.600000 1.700000
+3.600000 1.800000
+3.600000 1.900000
+3.600000 2.000000
+3.600000 2.100000
+3.600000 2.200000
+3.600000 2.300000
+3.600000 2.400000
+3.600000 2.500000
+3.600000 2.600000
+3.600000 2.700000
+3.600000 2.800000
+3.600000 2.900000
+3.600000 3.000000
+3.600000 3.100000
+3.600000 3.200000
+3.600000 3.300000
+3.600000 3.400000
+3.600000 3.500000
+3.600000 3.600000
+3.600000 3.700000
+3.600000 3.800000
+3.600000 3.900000
+3.600000 4.000000
+3.700000 -4.000000
+3.700000 -3.900000
+3.700000 -3.800000
+3.700000 -3.700000
+3.700000 -3.600000
+3.700000 -3.500000
+3.700000 -3.400000
+3.700000 -3.300000
+3.700000 -3.200000
+3.700000 -3.100000
+3.700000 -3.000000
+3.700000 -2.900000
+3.700000 -2.800000
+3.700000 -2.700000
+3.700000 -2.600000
+3.700000 -2.500000
+3.700000 -2.400000
+3.700000 -2.300000
+3.700000 -2.200000
+3.700000 -2.100000
+3.700000 -2.000000
+3.700000 -1.900000
+3.700000 -1.800000
+3.700000 -1.700000
+3.700000 -1.600000
+3.700000 -1.500000
+3.700000 -1.400000
+3.700000 -1.300000
+3.700000 -1.200000
+3.700000 -1.100000
+3.700000 -1.000000
+3.700000 -0.900000
+3.700000 -0.800000
+3.700000 -0.700000
+3.700000 -0.600000
+3.700000 -0.500000
+3.700000 -0.400000
+3.700000 -0.300000
+3.700000 -0.200000
+3.700000 -0.100000
+3.700000 0.000000
+3.700000 0.100000
+3.700000 0.200000
+3.700000 0.300000
+3.700000 0.400000
+3.700000 0.500000
+3.700000 0.600000
+3.700000 0.700000
+3.700000 0.800000
+3.700000 0.900000
+3.700000 1.000000
+3.700000 1.100000
+3.700000 1.200000
+3.700000 1.300000
+3.700000 1.400000
+3.700000 1.500000
+3.700000 1.600000
+3.700000 1.700000
+3.700000 1.800000
+3.700000 1.900000
+3.700000 2.000000
+3.700000 2.100000
+3.700000 2.200000
+3.700000 2.300000
+3.700000 2.400000
+3.700000 2.500000
+3.700000 2.600000
+3.700000 2.700000
+3.700000 2.800000
+3.700000 2.900000
+3.700000 3.000000
+3.700000 3.100000
+3.700000 3.200000
+3.700000 3.300000
+3.700000 3.400000
+3.700000 3.500000
+3.700000 3.600000
+3.700000 3.700000
+3.700000 3.800000
+3.700000 3.900000
+3.700000 4.000000
+3.800000 -4.000000
+3.800000 -3.900000
+3.800000 -3.800000
+3.800000 -3.700000
+3.800000 -3.600000
+3.800000 -3.500000
+3.800000 -3.400000
+3.800000 -3.300000
+3.800000 -3.200000
+3.800000 -3.100000
+3.800000 -3.000000
+3.800000 -2.900000
+3.800000 -2.800000
+3.800000 -2.700000
+3.800000 -2.600000
+3.800000 -2.500000
+3.800000 -2.400000
+3.800000 -2.300000
+3.800000 -2.200000
+3.800000 -2.100000
+3.800000 -2.000000
+3.800000 -1.900000
+3.800000 -1.800000
+3.800000 -1.700000
+3.800000 -1.600000
+3.800000 -1.500000
+3.800000 -1.400000
+3.800000 -1.300000
+3.800000 -1.200000
+3.800000 -1.100000
+3.800000 -1.000000
+3.800000 -0.900000
+3.800000 -0.800000
+3.800000 -0.700000
+3.800000 -0.600000
+3.800000 -0.500000
+3.800000 -0.400000
+3.800000 -0.300000
+3.800000 -0.200000
+3.800000 -0.100000
+3.800000 0.000000
+3.800000 0.100000
+3.800000 0.200000
+3.800000 0.300000
+3.800000 0.400000
+3.800000 0.500000
+3.800000 0.600000
+3.800000 0.700000
+3.800000 0.800000
+3.800000 0.900000
+3.800000 1.000000
+3.800000 1.100000
+3.800000 1.200000
+3.800000 1.300000
+3.800000 1.400000
+3.800000 1.500000
+3.800000 1.600000
+3.800000 1.700000
+3.800000 1.800000
+3.800000 1.900000
+3.800000 2.000000
+3.800000 2.100000
+3.800000 2.200000
+3.800000 2.300000
+3.800000 2.400000
+3.800000 2.500000
+3.800000 2.600000
+3.800000 2.700000
+3.800000 2.800000
+3.800000 2.900000
+3.800000 3.000000
+3.800000 3.100000
+3.800000 3.200000
+3.800000 3.300000
+3.800000 3.400000
+3.800000 3.500000
+3.800000 3.600000
+3.800000 3.700000
+3.800000 3.800000
+3.800000 3.900000
+3.800000 4.000000
+3.900000 -4.000000
+3.900000 -3.900000
+3.900000 -3.800000
+3.900000 -3.700000
+3.900000 -3.600000
+3.900000 -3.500000
+3.900000 -3.400000
+3.900000 -3.300000
+3.900000 -3.200000
+3.900000 -3.100000
+3.900000 -3.000000
+3.900000 -2.900000
+3.900000 -2.800000
+3.900000 -2.700000
+3.900000 -2.600000
+3.900000 -2.500000
+3.900000 -2.400000
+3.900000 -2.300000
+3.900000 -2.200000
+3.900000 -2.100000
+3.900000 -2.000000
+3.900000 -1.900000
+3.900000 -1.800000
+3.900000 -1.700000
+3.900000 -1.600000
+3.900000 -1.500000
+3.900000 -1.400000
+3.900000 -1.300000
+3.900000 -1.200000
+3.900000 -1.100000
+3.900000 -1.000000
+3.900000 -0.900000
+3.900000 -0.800000
+3.900000 -0.700000
+3.900000 -0.600000
+3.900000 -0.500000
+3.900000 -0.400000
+3.900000 -0.300000
+3.900000 -0.200000
+3.900000 -0.100000
+3.900000 0.000000
+3.900000 0.100000
+3.900000 0.200000
+3.900000 0.300000
+3.900000 0.400000
+3.900000 0.500000
+3.900000 0.600000
+3.900000 0.700000
+3.900000 0.800000
+3.900000 0.900000
+3.900000 1.000000
+3.900000 1.100000
+3.900000 1.200000
+3.900000 1.300000
+3.900000 1.400000
+3.900000 1.500000
+3.900000 1.600000
+3.900000 1.700000
+3.900000 1.800000
+3.900000 1.900000
+3.900000 2.000000
+3.900000 2.100000
+3.900000 2.200000
+3.900000 2.300000
+3.900000 2.400000
+3.900000 2.500000
+3.900000 2.600000
+3.900000 2.700000
+3.900000 2.800000
+3.900000 2.900000
+3.900000 3.000000
+3.900000 3.100000
+3.900000 3.200000
+3.900000 3.300000
+3.900000 3.400000
+3.900000 3.500000
+3.900000 3.600000
+3.900000 3.700000
+3.900000 3.800000
+3.900000 3.900000
+3.900000 4.000000
+4.000000 -4.000000
+4.000000 -3.900000
+4.000000 -3.800000
+4.000000 -3.700000
+4.000000 -3.600000
+4.000000 -3.500000
+4.000000 -3.400000
+4.000000 -3.300000
+4.000000 -3.200000
+4.000000 -3.100000
+4.000000 -3.000000
+4.000000 -2.900000
+4.000000 -2.800000
+4.000000 -2.700000
+4.000000 -2.600000
+4.000000 -2.500000
+4.000000 -2.400000
+4.000000 -2.300000
+4.000000 -2.200000
+4.000000 -2.100000
+4.000000 -2.000000
+4.000000 -1.900000
+4.000000 -1.800000
+4.000000 -1.700000
+4.000000 -1.600000
+4.000000 -1.500000
+4.000000 -1.400000
+4.000000 -1.300000
+4.000000 -1.200000
+4.000000 -1.100000
+4.000000 -1.000000
+4.000000 -0.900000
+4.000000 -0.800000
+4.000000 -0.700000
+4.000000 -0.600000
+4.000000 -0.500000
+4.000000 -0.400000
+4.000000 -0.300000
+4.000000 -0.200000
+4.000000 -0.100000
+4.000000 0.000000
+4.000000 0.100000
+4.000000 0.200000
+4.000000 0.300000
+4.000000 0.400000
+4.000000 0.500000
+4.000000 0.600000
+4.000000 0.700000
+4.000000 0.800000
+4.000000 0.900000
+4.000000 1.000000
+4.000000 1.100000
+4.000000 1.200000
+4.000000 1.300000
+4.000000 1.400000
+4.000000 1.500000
+4.000000 1.600000
+4.000000 1.700000
+4.000000 1.800000
+4.000000 1.900000
+4.000000 2.000000
+4.000000 2.100000
+4.000000 2.200000
+4.000000 2.300000
+4.000000 2.400000
+4.000000 2.500000
+4.000000 2.600000
+4.000000 2.700000
+4.000000 2.800000
+4.000000 2.900000
+4.000000 3.000000
+4.000000 3.100000
+4.000000 3.200000
+4.000000 3.300000
+4.000000 3.400000
+4.000000 3.500000
+4.000000 3.600000
+4.000000 3.700000
+4.000000 3.800000
+4.000000 3.900000
+4.000000 4.000000
diff --git a/src/HasGP/Data/Files/gpml-classifier-x.txt b/src/HasGP/Data/Files/gpml-classifier-x.txt
new file mode 100644
--- /dev/null
+++ b/src/HasGP/Data/Files/gpml-classifier-x.txt
@@ -0,0 +1,120 @@
+0.089450 -0.000701
+1.171606 1.177765
+1.404723 -0.017418
+0.556096 -1.489370
+1.213163 0.044545
+0.173405 -0.675668
+2.225009 0.469803
+1.470329 0.887642
+2.715199 0.621045
+0.173641 -0.936054
+2.038153 0.262587
+1.670218 -2.633187
+0.270099 -0.948780
+1.396339 -1.114992
+-1.482071 -0.654591
+-1.493788 0.382018
+1.025084 -0.860345
+0.750316 -0.101864
+0.184311 -0.258524
+0.221869 -1.393954
+2.258881 -0.786806
+1.211363 -0.423431
+1.525307 -0.097975
+0.978930 0.476154
+1.347884 -0.248408
+1.205780 -0.090878
+0.124389 0.599613
+0.784044 0.356597
+1.060217 -0.318475
+1.678114 0.678735
+0.973851 0.024881
+0.016238 -0.480900
+0.979407 0.697709
+2.217308 -0.956932
+2.150476 1.059032
+1.050502 0.532142
+1.210593 -0.318124
+0.426309 -0.571728
+0.742552 -0.122113
+0.757211 0.862002
+-0.431639 -0.763118
+-0.748398 -0.603668
+0.975087 -1.525298
+0.074504 -0.092155
+-0.668890 1.305401
+0.725633 0.096286
+-1.042271 1.297010
+1.943145 -1.051177
+1.191449 0.261350
+0.778004 -1.046301
+0.628874 1.103927
+1.295114 -0.479519
+1.522065 0.993476
+1.100256 0.961069
+-0.593244 -0.479419
+2.023197 -0.275055
+-0.788103 -1.090708
+-0.085168 1.226858
+1.691707 -1.153145
+1.989279 1.974704
+0.398800 3.051292
+-0.707217 0.185505
+0.697550 0.222287
+2.186126 -0.327829
+1.368068 1.708138
+0.883049 -1.334269
+1.737643 0.618453
+2.002229 0.103382
+-0.202639 0.495025
+0.543309 -0.802121
+-1.796162 -0.054795
+1.460694 0.750052
+0.133278 -1.154891
+0.203670 -0.480337
+-0.278985 0.030579
+2.070490 2.420783
+0.599024 -1.673209
+0.140507 0.804938
+-0.980799 -1.847988
+-0.102350 -0.822094
+1.160257 1.544112
+-0.458435 0.205668
+-1.053562 -0.614938
+-1.687901 -0.780028
+-0.467036 0.561692
+-0.703391 0.281301
+-1.568558 -0.629129
+-2.176479 -1.176211
+0.768109 1.376893
+-0.514773 0.474264
+-1.301924 -0.525179
+-1.312025 -0.049469
+-0.623418 0.226457
+0.020291 0.374056
+-1.002902 0.076597
+-2.553713 -1.731788
+-1.788156 -0.742460
+-1.119582 -0.256154
+-0.423084 0.395108
+-1.645945 -1.216319
+0.227806 0.925948
+-1.298719 -0.965511
+-0.618293 0.140046
+0.794935 1.917831
+-0.213709 0.617752
+-0.474251 -0.054854
+0.056078 1.046283
+0.887137 1.536490
+1.377162 1.764873
+-0.901196 -0.340856
+-0.783104 -0.330927
+-1.507140 0.137504
+-0.348999 0.235931
+-0.367309 0.655996
+-0.050622 0.410969
+1.734919 2.611080
+-0.567413 -0.458250
+-0.622231 0.258402
+-1.642147 -1.138579
+-0.285298 0.085451
diff --git a/src/HasGP/Data/Files/gpml-classifier-y.txt b/src/HasGP/Data/Files/gpml-classifier-y.txt
new file mode 100644
--- /dev/null
+++ b/src/HasGP/Data/Files/gpml-classifier-y.txt
@@ -0,0 +1,120 @@
+-1.000000
+-1.000000
+-1.000000
+-1.000000
+-1.000000
+-1.000000
+-1.000000
+-1.000000
+-1.000000
+-1.000000
+-1.000000
+-1.000000
+-1.000000
+-1.000000
+-1.000000
+-1.000000
+-1.000000
+-1.000000
+-1.000000
+-1.000000
+-1.000000
+-1.000000
+-1.000000
+-1.000000
+-1.000000
+-1.000000
+-1.000000
+-1.000000
+-1.000000
+-1.000000
+-1.000000
+-1.000000
+-1.000000
+-1.000000
+-1.000000
+-1.000000
+-1.000000
+-1.000000
+-1.000000
+-1.000000
+-1.000000
+-1.000000
+-1.000000
+-1.000000
+-1.000000
+-1.000000
+-1.000000
+-1.000000
+-1.000000
+-1.000000
+-1.000000
+-1.000000
+-1.000000
+-1.000000
+-1.000000
+-1.000000
+-1.000000
+-1.000000
+-1.000000
+-1.000000
+-1.000000
+-1.000000
+-1.000000
+-1.000000
+-1.000000
+-1.000000
+-1.000000
+-1.000000
+-1.000000
+-1.000000
+-1.000000
+-1.000000
+-1.000000
+-1.000000
+-1.000000
+-1.000000
+-1.000000
+-1.000000
+-1.000000
+-1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
+1.000000
diff --git a/src/HasGP/Data/Normalise.hs b/src/HasGP/Data/Normalise.hs
new file mode 100644
--- /dev/null
+++ b/src/HasGP/Data/Normalise.hs
@@ -0,0 +1,203 @@
+{- | Normalise is a module in the HasGP Gaussian process library. 
+     It contains functions for performing basic normalisation 
+     tasks on training examples, and for computing assorted 
+     standard statistics.
+
+     Copyright (C) 2011 Sean Holden. sbh11\@cl.cam.ac.uk.
+-}
+{- This file is part of HasGP.
+
+   HasGP is free software: you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
+
+   HasGP is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with HasGP.  If not, see <http://www.gnu.org/licenses/>.
+-}
+module HasGP.Data.Normalise where
+
+import Numeric.LinearAlgebra
+
+import HasGP.Types.MainTypes
+import HasGP.Support.Linear as L
+import HasGP.Support.Functions as F
+
+-- | Compute the mean for each attribute in a set of examples. 
+exampleMean :: Inputs  -- ^ Matrix - one row per example
+            -> DVector -- ^ Vector of means for each attribute.
+exampleMean examples = 
+    fromList $ map (L.sumVectorDiv r) (toColumns examples)
+        where
+          r = rows examples
+
+-- | Compute the variance for each attribute in a set of examples.
+exampleVariance :: Inputs  -- ^ Matrix - one row per example
+                -> DVector -- ^ Vector of variances for each attribute.
+exampleVariance examples = 
+    fromList $ map (L.sumVectorDiv r) 
+    (toColumns $ fromRows $ map ((mapVector (^2)) . (\x -> x-m)) 
+     (toRows examples))
+        where
+          r = rows examples
+          m = exampleMean examples
+
+-- | Compute the mean and variance for each attribute in a set of examples.
+exampleMeanVariance :: Inputs               -- ^ Matrix - one row per example
+                    -> (DVector, DVector)   -- ^ Means and variances
+exampleMeanVariance examples = (exampleMean examples, exampleVariance examples) 
+      
+-- | Normalise a set of examples to have specified mean and variance.
+normaliseMeanVariance :: DVector -- ^ Vector of new means required
+                      -> DVector -- ^ Vector of new variances required
+                      -> Inputs  -- ^ Matrix - one row per example
+                      -> Inputs  -- ^ Normalised matrix
+normaliseMeanVariance newMean newVariance examples = 
+    fromRows $ map (\x -> x+newMean) varianceAdjusted
+    where
+      (m, v) = exampleMeanVariance examples
+      zeroMean = map (\x -> x-m) (toRows examples)
+      varianceAdjustment = zipVectorWith (\x y -> (sqrt x)/(sqrt y)) 
+                                         newVariance v
+      varianceAdjusted = map (zipVectorWith (*) varianceAdjustment) zeroMean
+
+-- | The same as normaliseMeanVariance but every column (attribute) is 
+--   normalised in the same way.
+normaliseMeanVarianceSimple :: Double  -- ^ New mean required 
+                            -> Double  -- ^ New variance required
+                            -> Inputs  -- ^ Matrix - one row per example
+                            -> Inputs  -- ^ Normalised matrix
+normaliseMeanVarianceSimple newMean newVariance examples = 
+    normaliseMeanVariance (constant newMean c) (constant newVariance c) examples
+        where
+          c = cols examples
+
+-- | Normalise a set of examples to have specified maximum and minimum.
+normaliseBetweenLimits :: Double -- ^ New min required 
+                       -> Double -- ^ New max required 
+                       -> Inputs -- ^ Matrix - one row per example
+                       -> Inputs -- ^ Normalised matrix
+normaliseBetweenLimits min max examples = 
+    fromColumns $ zipWith (\x y -> mapVector (x+) y) 
+                cV (zipWith scale mV columns)
+        where
+          columns = toColumns examples
+          minV = map minElement columns
+          maxV = map maxElement columns
+          mV = zipWith (\x y -> ((max - min) / (y - x))) minV maxV
+          cV = zipWith (\x y -> (min - (y * x))) minV mV
+
+-- | Find the columns of a matrix in which all values are equal.      
+findRedundantAttributes :: Inputs  -- ^ Matrix - one row per example
+                        -> [Bool]  -- ^ List - True elements mark redundancy
+findRedundantAttributes examples = map allSame columns
+    where
+      columns = map toList (toColumns examples)
+      allSame []        = True
+      allSame [h]       = True
+      allSame [h1,h2]   = (h1 == h2)
+      allSame (h1:h2:t) = (h1 == h2) && (allSame (h2:t)) 
+
+-- | List column numbers for redundant attributes.
+listRedundantAttributes :: Inputs -- ^ Matrix - one row per example
+                        -> [Int]  -- ^ List - positions of redundant attributes
+listRedundantAttributes examples = findColumns boolean 1 []
+    where
+      boolean = findRedundantAttributes examples
+      findColumns [] n result = reverse result
+      findColumns (h:t) n result
+          | h = findColumns t (n+1) (n:result)
+          | otherwise = findColumns t (n+1) result
+
+-- | Remove any redundant columns from a matrix.
+removeRedundantAttributes :: Inputs -- ^ Matrix - one row per example
+                          -> Inputs -- ^ Modified matrix - one row per example
+removeRedundantAttributes examples = 
+    fromColumns $ removeTrueColumns [] r (toColumns examples)
+        where
+          r = findRedundantAttributes examples
+          removeTrueColumns result [] []
+              = reverse result
+          removeTrueColumns result (True:t1) (c:t2)  
+              = removeTrueColumns result t1 t2
+          removeTrueColumns result (False:t1) (c:t2) 
+              = removeTrueColumns (c:result) t1 t2
+
+-- | Specify a list of columns (matrix numbered from 1).
+--   Produce a matrix with ONLY those columns in the 
+--   order specified in the list.
+retainAttributes :: [Int]   -- ^ List of columns to keep.
+                 -> Inputs  -- ^ Matrix - one row per example
+                 -> Inputs  -- ^ Modified matrix - one row per example
+retainAttributes l m = trans $ extractRows l2 $ trans m
+    where
+      l2 = map (\x -> x-1) l
+
+-- | Compute the numbers for the confusion matrix.
+--   It is assumed that classes are +1 (positive) and -1 (negative).
+--   Result is (a,b,c,d):
+--   a - correct negatives
+--   b - predict positive when correct is negative
+--   c - predict negative when correct is positive
+--   d - correct positives
+confusionMatrix :: Targets    
+                -> Outputs    
+                -> (Double,Double,Double,Double)
+confusionMatrix correct predicted = 
+    cm (toList correct) (toList predicted) (0,0,0,0)
+        where
+          cm [] [] result = result
+          cm (h1:t1) (h2:t2) (a,b,c,d) = case (h1, h2) of
+                                           (1.0, 1.0) -> cm t1 t2 (a,b,c,d+1)
+                                           (1.0,-1.0) -> cm t1 t2 (a,b,c+1,d)
+                                           (-1.0, 1.0) -> cm t1 t2 (a,b+1,c,d)
+                                           (-1.0,-1.0) -> cm t1 t2 (a+1,b,c,d)
+          cm _ _ result 
+              = error "Correct and predicted vectors must have the same length"
+
+-- | Print the confusion matrix and some other statistics
+printConfusionMatrix :: Targets -- ^ Vector of targets 
+                     -> Outputs -- ^ Vector of actual outputs
+                     -> IO ()
+printConfusionMatrix correct predicted = do
+  let (a,b,c,d) = confusionMatrix correct predicted
+  let n = a+b+c+d
+  let trueP = d/(d+c)
+  let precision = d/(d+b)
+  putStrLn ("------------------------------------------------")
+  putStrLn ("Correct -1, Predicted -1: a = " ++ (show a))
+  putStrLn ("Correct -1, Predicted +1: b = " ++ (show b))
+  putStrLn ("Correct +1, Predicted -1: c = " ++ (show c))
+  putStrLn ("Correct +1, Predicted +1: d = " ++ (show d))
+  putStrLn ("------------------------------------------------")
+  putStrLn ("Number of examples: n = a+b+c+d = " ++ (show n))
+  putStrLn ("Accuracy:               a+d/n   = " ++ (show ((a+d)/n)))
+  putStrLn ("Recall/True Positive:   d/d+c   = " ++ (show trueP))
+  putStrLn ("False Positive:         b/b+a   = " ++ (show (b/(b+a))))
+  putStrLn ("True Negative:          a/b+a   = " ++ (show (a/(b+a))))
+  putStrLn ("False Negative:         c/d+c   = " ++ (show (c/(d+c))))
+  putStrLn ("Precision:              d/d+b   = " ++ (show precision))
+  putStrLn ("F Measure (beta = 1)            = " ++ 
+            (show ((2 * trueP * precision)/(trueP + precision))))
+  putStrLn ("------------------------------------------------")
+  return ()
+
+-- | Assuming the labels are +1 or -1, count how many there are of each.
+countLabels :: Targets -> IO ()
+countLabels v = do
+  let d = dim v
+  let plus = length $ filter (==(1.0)) $ toList v
+  putStrLn ("Total number of labels: " ++ (show d))
+  putStrLn ("Number of +1 labels:    " ++ (show plus))
+  putStrLn ("Number of -1 labels:    " ++ (show (d - plus)))
+  return ()
+
+
+
+
+
diff --git a/src/HasGP/Data/RWData1.hs b/src/HasGP/Data/RWData1.hs
new file mode 100644
--- /dev/null
+++ b/src/HasGP/Data/RWData1.hs
@@ -0,0 +1,47 @@
+{- | Gaussian Process Library - functions for producing data sets
+     From Rasmussen and Williams, "Gaussian Processes for Machine Learning."
+
+     Copyright (C) 2011 Sean Holden. sbh11\@cl.cam.ac.uk.
+-}
+{- This file is part of HasGP.
+
+   HasGP is free software: you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
+
+   HasGP is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with HasGP.  If not, see <http://www.gnu.org/licenses/>.
+-}
+module HasGP.Data.RWData1 where
+
+import Numeric.LinearAlgebra
+
+import HasGP.Types.MainTypes
+import HasGP.Support.Random
+
+-- | Generate training data for a simple classification problem as in 
+--   Rasmussen/Williams, page 62.
+simpleClassificationData :: Int -- ^ Seed for random number generator. 
+                         -> (DMatrix, DVector)
+simpleClassificationData seed = 
+	((asColumn $ join [(-6)+x1, x2, 2+x3]), 
+         join [constant 1 20, constant 0 30, constant 1 10])
+    where
+      v = (0.8)^2
+      x1 = normalVectorSimple seed v 20 
+      x2 = normalVectorSimple (seed+1) v 30
+      x3 = normalVectorSimple (seed+2) v 10
+ 
+
+
+                         
+                         
+
+
+
diff --git a/src/HasGP/Demos/ClassificationDemo1.hs b/src/HasGP/Demos/ClassificationDemo1.hs
new file mode 100644
--- /dev/null
+++ b/src/HasGP/Demos/ClassificationDemo1.hs
@@ -0,0 +1,120 @@
+{- | Demonstration of Gaussian process classification using the  
+     1-dimensional problem from Rasmussen and Williams' book.
+
+     This demo compares the Laplace and EP approximation approaches.
+
+     For details of the algorithms involved see www.gaussianprocesses.org.
+
+     Copyright (C) 2011 Sean Holden. sbh11\@cl.cam.ac.uk.
+-}
+{- This file is part of HasGP.
+
+   HasGP is free software: you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
+
+   HasGP is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with HasGP.  If not, see <http://www.gnu.org/licenses/>.
+-}
+module HasGP.Demos.ClassificationDemo1 where 
+
+import Numeric.LinearAlgebra
+import Numeric.GSL.Minimization
+
+import HasGP.Data.RWData1
+import HasGP.Types.MainTypes
+import HasGP.Support.Linear
+import HasGP.Classification.Laplace.ClassificationLaplace as L
+import HasGP.Classification.EP.ClassificationEP as EP
+import HasGP.Covariance.SquaredExp
+import HasGP.Covariance.Basic
+import HasGP.Likelihood.LogPhi
+import HasGP.Likelihood.Basic 
+
+-- | This function defines when iteration stops for the Laplace version.
+stopLaplace::LaplaceConvergenceTest
+stopLaplace s1 s2 = ((L.count s2) == 100) || 
+             (lengthV ((fValue s1) - (fValue s2)) < 0.001)
+
+-- | This function defines when iteration stops for the EP version.
+stopEP::EPConvergenceTest
+stopEP s1 s2 = ((EP.count s2) == 100) || 
+             ((EP.eValue s1) > (EP.eValue s2)) ||
+             (abs ((EP.eValue s1) - (EP.eValue s2)) < 0.001)
+
+demo = do 
+  putStrLn "Generating the training and testing data..."
+
+  let (inputs, t) = simpleClassificationData 0
+  let targets = mapVector (\x -> if (x==1) then 1 else -1) t
+  saveMatrix "training-inputs.txt" "%g" inputs
+  fprintfVector "training-targets.txt" "%g" targets
+
+  let points = asColumn $ linspace 50 (-9.0,5.0) 
+  saveMatrix "test-inputs.txt" "%g" points
+
+  putStrLn "Learning and predicting: Laplace + hyperparameter optimization..."
+
+  let cov1 = SquaredExponential (log 1.0) (log 1.0)
+  let c1 = covarianceMatrix cov1 inputs
+  
+  let f1 = (\v -> gpCLaplaceLogEvidenceVec inputs targets cov1 LogPhi 
+                 stopLaplace v)
+  let ev1 = fst . f1
+  let gev1 = snd . f1
+  let (solution1, path1) = 
+       minimizeVD ConjugatePR 0.0001 50 0.01 0.1 ev1 gev1 
+                      (constant (log 1) 2)
+                      
+  putStrLn $ "Solution: " ++ (show $ mapVector exp solution1)
+  putStrLn $ "Path: "
+  putStrLn $ show path1
+
+  let cov1' = SquaredExponential (solution1 @> 0) (solution1 @> 1)
+  let c1' = covarianceMatrix cov1' inputs
+  let result1 = gpCLaplaceLearn c1' targets LogPhi stopLaplace
+  let classify1 = 
+          gpCLaplacePredict' (fValue result1) inputs targets c1' cov1' LogPhi 
+  let newOuts1 = fromList $ map convertToP_CG $ classify1 $ points
+  
+  fprintfVector "test-outputs-laplace.txt" "%g" newOuts1
+
+  putStrLn $ "Done"
+
+  putStrLn "Learning and predicting: EP + hyperparameter optimization..."
+
+  let cov2 = SquaredExponential (log 1.0) (log 1.0)
+  let c2 = covarianceMatrix cov2 inputs
+  
+  let f2 = (\v -> gpClassifierEPLogEvidenceVec inputs targets cov2  
+                 generateRandomSiteOrder stopEP v)
+  let ev2 = fst . f2
+  let gev2 = snd . f2
+  let (solution2, path2) = 
+       minimizeVD ConjugatePR 0.0001 50 0.01 0.1 ev2 gev2 
+                      (constant (log 1) 2)
+                      
+  putStrLn $ "Solution: " ++ (show $ mapVector exp solution2)
+  putStrLn $ "Path: "
+  putStrLn $ show path2
+
+  let cov2' = SquaredExponential (solution2 @> 0) (solution2 @> 1)
+  let c2' = covarianceMatrix cov2' inputs
+  let (epValue, epState) = 
+         gpClassifierEPLearn c2' targets generateRandomSiteOrder stopEP
+  let classify2 = 
+          gpClassifierEPPredict (siteState epValue) inputs targets c2' cov2'  
+  let newOuts2 = classify2 points
+  
+  fprintfVector "test-outputs-ep.txt" "%g" newOuts2
+
+  putStrLn $ "Done"
+
+  return ()
+   
diff --git a/src/HasGP/Demos/ClassificationDemo2.hs b/src/HasGP/Demos/ClassificationDemo2.hs
new file mode 100644
--- /dev/null
+++ b/src/HasGP/Demos/ClassificationDemo2.hs
@@ -0,0 +1,85 @@
+{- | Demonstration of Gaussian process classification using the  
+     demonstration problem from
+
+     www.gaussianprocess.org/gpml/code/matlab/doc/
+
+     This demo uses the EP approximation approach.
+
+     For details of the algorithms involved see www.gaussianprocesses.org. 
+     For a detailed explanation of the following code see the HasGP user 
+     manual.
+
+     Copyright (C) 2011 Sean Holden. sbh11@cl.cam.ac.uk.
+-}
+{- This file is part of HasGP.
+
+   HasGP is free software: you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
+
+   HasGP is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with HasGP.  If not, see <http://www.gnu.org/licenses/>.
+-}
+module HasGP.Demos.ClassificationDemo2 where
+
+import Numeric.LinearAlgebra
+import Numeric.GSL.Minimization
+
+import HasGP.Types.MainTypes
+import HasGP.Support.Linear
+import HasGP.Classification.EP.ClassificationEP
+import HasGP.Covariance.SquaredExpARD
+import HasGP.Covariance.Basic
+
+-- | This function defines when iteration stops.
+stopEP::EPConvergenceTest
+stopEP s1 s2 = ((count s2) == 100) || 
+             ((eValue s1) > (eValue s2)) ||
+             (abs ((eValue s1) - (eValue s2)) < 0.001)
+
+demo = do 
+  putStrLn "Loading the training data..."
+  
+  inputs <- loadMatrix "gpml-classifier-x.txt"
+  targets <- fscanfVector "gpml-classifier-y.txt" 120
+  points <- loadMatrix "gpml-classifier-test.txt"
+
+  putStrLn "Learning and predicting: EP + hyperparameter optimization..."
+
+  let cov = SquaredExponentialARD (log 1.0) (constant (log 1.0) 2)
+  let c = covarianceMatrix cov inputs
+  
+  let f = (\v -> gpClassifierEPLogEvidenceVec inputs targets cov  
+                 generateRandomSiteOrder stopEP v)
+  let ev = fst . f
+  let gev = snd . f
+  let (solution, path) = 
+       minimizeVD ConjugatePR 0.0001 50 1 0.0001 ev gev 
+                      (constant (log 1) 3)
+                      
+  putStrLn $ "Solution: " ++ (show $ mapVector exp solution)
+  putStrLn $ "Path: "
+  putStrLn $ show path
+
+  let cov' = SquaredExponentialARD (solution @> 0) 
+                             (fromList [(solution @> 1), (solution @> 2)])
+  let c' = covarianceMatrix cov' inputs
+  let (epValue, epState) = 
+         gpClassifierEPLearn c' targets generateRandomSiteOrder stopEP
+  let classify = 
+          gpClassifierEPPredict (siteState epValue) inputs targets c' cov'  
+  let newOuts = classify points
+  
+  fprintfVector "gpml-hasgp-outputs.txt" "%g" newOuts
+
+  putStrLn $ "Done"
+  
+
+  return ()
+   
diff --git a/src/HasGP/Demos/RegressionDemo1.hs b/src/HasGP/Demos/RegressionDemo1.hs
new file mode 100644
--- /dev/null
+++ b/src/HasGP/Demos/RegressionDemo1.hs
@@ -0,0 +1,70 @@
+{- | Demonstration of Gaussian process regression using the simple
+     data from "Neural Networks for Pattern Recognition," by Chris
+     Bishop. This version estimates the hyperparameters using the
+     optimization algorithm from HMatrix.
+
+     For details of the algorithms involved see www.gaussianprocesses.org.
+
+     Copyright (C) 2011 Sean Holden. sbh11\@cl.cam.ac.uk.
+-}
+{- This file is part of HasGP.
+
+   HasGP is free software: you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
+
+   HasGP is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with HasGP.  If not, see <http://www.gnu.org/licenses/>.
+-}
+module HasGP.Demos.RegressionDemo1 where 
+
+import Numeric.LinearAlgebra
+import Numeric.GSL.Minimization
+
+import HasGP.Data.BishopData
+import HasGP.Types.MainTypes
+import HasGP.Support.Linear
+import HasGP.Support.Random
+import HasGP.Regression.Regression
+import HasGP.Covariance.SquaredExp
+
+demo = do 
+  putStrLn "Generating the training data..."
+
+  let (inputs, targets) = bishopData
+  saveMatrix "inputs.txt" "%g" inputs
+  fprintfVector "targets.txt" "%g" targets
+
+  putStrLn "Searching for best hyperparameters..."
+  let f = gpRLogHyperToEvidence (SquaredExponential 0 0) inputs targets 
+  let ev = fst . f
+  let gev = snd . f
+  let (solution, path) = 
+       minimizeVD ConjugatePR 0.0001 50 0.01 0.1 ev gev 
+                      (constant (log 0.1) 3)
+          
+  putStrLn $ "Found: " ++ (show solution)
+  putStrLn $ "Path: "
+  putStrLn $ show path
+
+  putStrLn "Learning and predicting..."
+  
+  let newPoints = fromColumns $ [linspace 100 (0.0,1.0)] 
+
+  let (newOuts, var) = 
+       gpRPredict' (SquaredExponential (solution @> 1) (solution @> 2)) 
+                   (solution @> 0) inputs targets newPoints
+
+  fprintfVector "outputs.txt" "%g" newOuts
+  fprintfVector "variances.txt" "%g" var  
+
+  putStrLn "Done"
+  return ()
+   
+
diff --git a/src/HasGP/Likelihood/Basic.hs b/src/HasGP/Likelihood/Basic.hs
new file mode 100644
--- /dev/null
+++ b/src/HasGP/Likelihood/Basic.hs
@@ -0,0 +1,40 @@
+{- | HasGP Gaussian Process Library. This module contains the class definition 
+     for log likelihoods.
+
+     Copyright (C) 2011 Sean Holden. sbh11\@cl.cam.ac.uk.
+-}
+{- This file is part of HasGP.
+
+   HasGP is free software: you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
+
+   HasGP is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with HasGP.  If not, see <http://www.gnu.org/licenses/>.
+-}
+module HasGP.Likelihood.Basic 
+   (
+     LogLikelihood(..)
+   ) where
+
+import Numeric.LinearAlgebra
+
+import HasGP.Types.MainTypes
+import HasGP.Support.Functions
+
+{- | The following allows arbitrary likelihoods with or without parameters 
+     to be wrapped up with their derivatives (with respect to f) and passed 
+     to a function.
+-}
+class LogLikelihood b where
+    likelihood    :: b -> Double -> Double -> Double 
+    dLikelihood   :: b -> Double -> Double -> Double
+    ddLikelihood  :: b -> Double -> Double -> Double
+    dddLikelihood :: b -> Double -> Double -> Double
+
diff --git a/src/HasGP/Likelihood/LogLogistic.hs b/src/HasGP/Likelihood/LogLogistic.hs
new file mode 100644
--- /dev/null
+++ b/src/HasGP/Likelihood/LogLogistic.hs
@@ -0,0 +1,46 @@
+{- | HasGP Gaussian Process Library. This module contains the definition 
+     for the standard log logistic likelihood function.
+
+     Copyright (C) 2011 Sean Holden. sbh11\@cl.cam.ac.uk.
+-}
+{- This file is part of HasGP.
+
+   HasGP is free software: you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
+
+   HasGP is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with HasGP.  If not, see <http://www.gnu.org/licenses/>.
+-}
+module HasGP.Likelihood.LogLogistic 
+   (
+     LogLogistic(..)
+   ) where
+
+import Numeric.LinearAlgebra
+
+import HasGP.Types.MainTypes
+import HasGP.Support.Functions
+import HasGP.Likelihood.Basic
+
+{- | Value and first three derivatives of log sigmoid with respect to its 
+     parameter f. log p(y|f) = log sigmoid (yf) where y is +1 or -1.
+-}
+data LogLogistic = LogLogistic
+
+instance LogLikelihood LogLogistic where
+    likelihood    LogLogistic y f = log (1 / (1 + (exp (-(f * y)))))
+    dLikelihood   LogLogistic y f = ((y + 1) / 2) - (sigmoid f)
+    ddLikelihood  LogLogistic y f = (-x) * (1 - x)
+        where x = sigmoid f
+    dddLikelihood LogLogistic y f = (exp (-f)) * (x^2) * ((2 * x) - 1)
+        where x = sigmoid f
+
+
+
diff --git a/src/HasGP/Likelihood/LogPhi.hs b/src/HasGP/Likelihood/LogPhi.hs
new file mode 100644
--- /dev/null
+++ b/src/HasGP/Likelihood/LogPhi.hs
@@ -0,0 +1,51 @@
+{- | HasGP Gaussian Process Library. This module contains the definition 
+     for the standard log Phi likelihood.
+
+     Copyright (C) 2011 Sean Holden. sbh11\@cl.cam.ac.uk.
+-}
+{- This file is part of HasGP.
+
+   HasGP is free software: you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
+
+   HasGP is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with HasGP.  If not, see <http://www.gnu.org/licenses/>.
+-}
+module HasGP.Likelihood.LogPhi
+   (
+     LogPhi(..)
+   ) where
+
+import Numeric.LinearAlgebra
+
+import HasGP.Types.MainTypes
+import HasGP.Support.Functions
+import HasGP.Likelihood.Basic
+
+{- | Value and first three derivatives of log Phi with respect to its
+     parameter f.  log p(y|f) = log \Phi (yf) where y is +1 or -1.  
+-}
+data LogPhi = LogPhi
+
+instance LogLikelihood LogPhi where 
+    likelihood    LogPhi y f = logPhi (y * f)
+    dLikelihood   LogPhi y f = y * nOverP
+        where
+          nOverP = (n f) / (phiIntegral (y * f))
+    ddLikelihood  LogPhi y f = -(((nOverP)^2) + ((y * f) * nOverP))
+        where
+          nOverP = (n f) / (phiIntegral (y * f))
+    dddLikelihood LogPhi y f = 
+        (2 * y * (nOverP^3)) + (((2 * f) + (y^2)) * 
+                                (nOverP ^2)) - (y * (1 - (f^2)) * nOverP)
+            where
+              nOverP = (n f) / (phiIntegral (y * f))
+
+
diff --git a/src/HasGP/Parsers/SvmLight.hs b/src/HasGP/Parsers/SvmLight.hs
new file mode 100644
--- /dev/null
+++ b/src/HasGP/Parsers/SvmLight.hs
@@ -0,0 +1,404 @@
+{- | Parser implemented using the Parsec library for reading from files in the 
+     format used by SVMLight.
+
+     Currently assumes your file is a text file in Unix format. The extra 
+     characters in Windows text files confuse it.
+     
+     Copyright (C) 2011 Sean Holden. sbh11\@cl.cam.ac.uk.
+-}
+{- This file is part of HasGP.
+
+   HasGP is free software: you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
+
+   HasGP is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with HasGP.  If not, see <http://www.gnu.org/licenses/>.
+-}
+module HasGP.Parsers.SvmLight 
+   (
+     analyse,
+     getMatrixExamplesFromFileC
+   ) where
+
+import Text.ParserCombinators.Parsec
+import qualified IO
+import Data.List
+
+import qualified Numeric.LinearAlgebra as M
+
+type FullTarget = (Int,Double,Bool)
+type FullFeature = ((Int,String),Double)
+type FullExample = (FullTarget,[FullFeature],String)
+
+-- | Classes are denoted by plus or minus 1 or 0
+oneZero :: Parser Int
+oneZero = do
+  n <- oneOf "10"
+  return (read [n])
+
+-- | Targets either correspond to classes or to doubles for regression 
+--   problems. 
+classTarget :: Parser Int
+classTarget = 
+    do 
+      n <- oneZero
+      return n 
+    <|> do 
+      char '+'
+      n <- oneZero
+      return n
+    <|> do 
+      char '-' 
+      n <- oneZero
+      return (-n)
+
+-- | Feature values are doubles. 
+positiveDouble :: Parser Double
+positiveDouble = 
+    do 
+      char '.'
+      s <- many1 digit
+      return (read("0." ++ s))
+    <|> try ( do 
+              s1 <- many1 digit
+              char '.'
+              s2 <- many digit
+              return (read(s1 ++ "." ++ if (s2=="") then "0" else s2))
+            )
+            <|> do 
+                s1 <- many1 digit
+                return (read s1)
+    
+-- | We may or may not want to automatically convert an integer,
+--   depending on the circumstances. In particular targets for 
+--   regression problems can be doubles, so we dont want to read a 
+--   class as a double.
+positiveDoubleNotInt :: Parser Double
+positiveDoubleNotInt = 
+    do 
+      char '.'
+      s <- many1 digit
+      return (read("0." ++ s))      
+    <|> do 
+      s1 <- many1 digit
+      char '.'
+      s2 <- many digit
+      return (read(s1 ++ "." ++ if (s2=="") then "0" else s2))
+
+signedDouble :: Parser Double
+signedDouble = 
+    do 
+      n <- positiveDouble
+      return n 
+    <|> do 
+      char '+'
+      n <- positiveDouble
+      return n
+    <|> do 
+      char '-' 
+      n <- positiveDouble
+      return (-n)
+
+signedDoubleNotInt :: Parser Double
+signedDoubleNotInt = 
+    do 
+      n <- positiveDoubleNotInt
+      return n 
+    <|> do 
+      char '+'
+      n <- positiveDoubleNotInt
+      return n
+    <|> do 
+      char '-' 
+      n <- positiveDoubleNotInt
+      return (-n)
+
+-- | A target is -1, +1, 0 or a floating point number. The
+--   Boolean is True for one of the first three and false
+--   for the fourth. A look at Joachims' examples suggests
+--   the + is optional.
+target :: Parser FullTarget              
+target = try ( 
+              do                                
+                n <- signedDoubleNotInt
+                return (0, n, False)        
+             )
+         <|> do 
+           n <- classTarget
+           return (n, 0.0, True)
+
+-- | We need integers to number the features.
+integer :: Parser Int
+integer = 
+    do 
+      n <- many1 digit
+      return (read n)
+    <|> do 
+      char '+'
+      n <- many1 digit
+      return (read n)
+    <|> do 
+      char '-'
+      n <-many1 digit
+      return (read ('-':n))
+
+-- | A feature in this format can in fact be either numbered or 
+--   labelled as "qid".
+feature :: Parser (Int, String)
+feature = 
+    do 
+      s <- string "qid"
+      return (0,"qid")
+    <|> do 
+      i <- integer
+      return (i,"")
+
+-- | Most of a line is taken up with : separated features and their values.
+featureValuePair :: Parser FullFeature
+featureValuePair = 
+    do 
+      f <- feature
+      char ':'
+      v <- signedDouble
+      return (f,v)
+
+-- | This is needed so that we can read pretty much anything we like from 
+--   comments.
+generalLetter :: Parser Char
+generalLetter = alphaNum 
+                 <|> oneOf ('"':'\\':"[]{};:'@#~/?.>,<|`¬!£$%^&*()-_=+")
+
+-- | The format describes comments in two ways. At the start of the file they 
+--   are ignored, but after a line they need to be read.
+stringToLineEnd :: Parser [String]
+stringToLineEnd = 
+    do 
+      words <- sepEndBy (many1 generalLetter) (many (char ' '))
+      newline
+      return words
+
+-- | At the end of a line, a # followed by text needs to be read.          
+--   I assume you only take the string up to the end of the line.            
+info :: Parser String
+info = 
+    do 
+      char '#'
+      spaces
+      s <- stringToLineEnd
+      return (drop 1 (foldl (++) [] (map (' ':) s)))
+    <|> do 
+      newline
+      return ""
+
+-- | This reads a single line denoting a single example.
+line :: Parser FullExample
+line = 
+    do  
+      many (char ' ')
+      t <- target
+      many1 (char ' ')
+      fvp <- sepEndBy (featureValuePair) (many (char ' '))
+      s <- info
+      return (t, fvp, s)
+
+-- | This reads a file, ignoring comments at the beginning.
+file:: Parser [FullExample]
+file = 
+    do 
+      many info
+      l <- many1 line
+      spaces
+      eof
+      return l
+
+-- | A bunch of basic functions for extracting interesting things from
+--   the output of the parser in a format
+--   that's likely to be a bit easier to use.
+split1 :: (a,b,c) -> a
+split1 (a,_,_) = a
+
+split2 :: (a,b,c) -> b
+split2 (_,b,_) = b
+
+split3 :: (a,b,c) -> c
+split3 (_,_,c) = c
+
+fullExamplesSeparate :: [FullExample] 
+                       -> ([FullTarget],[[FullFeature]],[String])
+fullExamplesSeparate l = unzip3 l
+
+classificationProblem :: [FullTarget] -> Bool
+classificationProblem l = 
+    all (\x -> (split3 x) && (((split1 x)==1) || ((split1 x)==(-1)))) l
+
+getClassificationTargets :: [FullTarget] -> [Int]
+getClassificationTargets [] = []
+getClassificationTargets ((c,_,_):rest) 
+    = c:(getClassificationTargets rest)
+
+regressionProblem :: [FullTarget] -> Bool
+regressionProblem l = all (\x -> (not $ split3 x)) l
+
+getRegressionTargets :: [FullTarget] -> [Double]
+getRegressionTargets [] = []
+getRegressionTargets ((_,r,_):rest) 
+    = r:(getRegressionTargets rest)
+
+noQid :: [[FullFeature]] -> Bool
+noQid l = all no l
+    where no l2 = all (\x -> ((snd $ fst x)/="quid")) l2
+
+getExampleRange:: [FullExample] -> (Int,Int)
+getExampleRange [] = (0,0)
+getExampleRange x 
+    = ((minimum result), (maximum result))
+      where y = split2 $ fullExamplesSeparate x -- just the attribute vectors
+            z = map (map (fst . fst)) y -- attribute numbers from vectors
+            result = foldl (++) [] z
+
+-- | Now sort numbers and attributes at the same time 
+--   so that the numbers are ascending.
+comp :: (Int,Double) -> (Int,Double) -> Ordering
+comp (a,b) (c,d) 
+    | (a > c) = LT
+    | (a < c) = GT
+    | otherwise = error "Numbers should not be equal."
+
+sortExamples :: [Int] -> [Double] -> [(Int, Double)]  
+sortExamples numbers values = sortBy comp (zip numbers values) 
+      
+insertZeros :: (Int, Int) -> ([Int], [Double]) -> [Double]
+insertZeros (min_num, max_num) (i, d) 
+    = iz (unzip (sortExamples i d)) [] min_num max_num
+      where 
+        iz ([], []) r m n           = if (n == (m-1))
+                                      then r
+                                      else iz ([], []) (0:r) m (n-1)
+        iz ([], _) _ _ _            
+            = error "insertZeros: arguments need to have equal lengths"
+        iz (_, []) _ _ _            
+            = error "insertZeros: arguments need to have equal lengths"
+        iz ((h1:t1), (h2:t2)) r m n = if (h1 == n) 
+                                      then iz (t1, t2) (h2:r) m (n-1)
+                                      else iz (h1:t1, h2:t2) (0:r) m (n-1)
+
+-- | Get the attribute vectors as a list of lists.
+--   Care required here as we need to insert 0 where there is no attribute.
+getExamples :: [FullExample] -> [[Double]]
+getExamples [] = []
+getExamples x = map (insertZeros (getExampleRange x)) (zip numbers values) 
+    where 
+      y = split2 $ 
+          fullExamplesSeparate x        -- attribute vectors
+      numbers = map (map (fst . fst)) y -- attribute numbers from vectors
+      values = map (map snd) y          -- attribute values from the vectors
+
+-- | Does a matrix of Doubles make sense: that is, are all the rows the 
+--   same length?
+dimensionsCorrect :: [[Double]] -> Bool
+dimensionsCorrect [] = True
+dimensionsCorrect [r] = True
+dimensionsCorrect (h:t) = all (==(length h)) (map length t)
+
+-- | Find the dimensions of a matrix represented as a list of lists of Doubles.
+dimensions :: [[a]] -> (Int, Int)
+dimensions [] = (0,0)
+dimensions m@(h:t) = (length m, length h)
+          
+-- | Parse a file in SvmLight format and print some information about it.   
+analyse :: String -> IO ()
+analyse file_name = 
+    do
+      x <- parseFromFile file file_name
+      case x of
+        Left error -> IO.putStrLn $ show error
+        Right result -> do
+               IO.putStrLn ("-------------------------------------------")
+               IO.putStrLn ("Analysing SVMLight input file: " ++ file_name)
+               IO.putStrLn ("-------------------------------------------")
+               IO.putStrLn ("Classification problem: " 
+                            ++ (if (classificationProblem r1) 
+                                then "Yes" 
+                                else "No"))
+               IO.putStrLn ("Regression Problem:     " 
+                            ++ (if (regressionProblem r1) 
+                                then "Yes" 
+                                else "No"))
+               IO.putStrLn ("First five classification target values: " 
+                            ++ (show $ 
+                                take 5 (getClassificationTargets $ r1)))
+               IO.putStrLn ("First five regression target values:     " 
+                            ++ (show $ take 5 (getRegressionTargets $ r1)))
+               IO.putStrLn ("-------------------------------------------")
+               IO.putStrLn ("Maximum attribute number: " ++ (show $ snd $ r2))
+               IO.putStrLn ("Minimum attribute number: " ++ (show $ fst $ r2))
+               IO.putStrLn ("-------------------------------------------")
+               IO.putStrLn ("Maximum attribute value:  " 
+                            ++ (show $ maximum $ map maximum r3))
+               IO.putStrLn ("Minimum attribute value:  " 
+                            ++ (show $ minimum $ map minimum r3))
+               IO.putStrLn ("qid present:              " 
+                            ++ (if (noQid $ r4) 
+                                then "No" 
+                                else "Yes"))
+               IO.putStrLn ("Matrix correctly sized:   " 
+                            ++ (if (dimensionsCorrect r3) 
+                                then "Yes" 
+                                else "No"))
+               IO.putStrLn ("Number of examples:       " 
+                            ++ (show $ fst $ dimensions r3))
+               IO.putStrLn ("Number of attributes:     " 
+                            ++ (show $ snd $ dimensions r3))
+               IO.putStrLn ("Beginning of first five examples: ") 
+               IO.putStrLn (show $ map (take 5) (take 5 r3))
+               IO.putStrLn ("------------------------------------------")
+                   where 
+                     r = fullExamplesSeparate result
+                     r1 = split1 r
+                     r2 = getExampleRange result
+                     r3 = getExamples result
+                     r4 = split2 r
+
+getExamplesFromFile :: String -> IO (Either ParseError [FullExample])
+getExamplesFromFile string = 
+    do 
+      x <- parseFromFile file string
+      return x
+
+fullExampleToMatrixC::[FullExample] -> (M.Matrix Double, M.Vector Double)
+fullExampleToMatrixC fullExamples 
+    | classificationProblem targets = 
+        if (dimensionsCorrect attributes)
+        then (M.fromRows attributes', 
+              M.fromList $ map convert intTargets)
+        else error "Dimension not correct for making a matrix"
+    | otherwise = error "This is not a classification problem."
+    where 
+      targets = split1 $ fullExamplesSeparate fullExamples
+      attributes = getExamples fullExamples
+      attributes' = map M.fromList attributes
+      intTargets = getClassificationTargets targets
+      convert x 
+          | x==1 = 1.0
+          | x==(-1) = (-1.0)
+          | otherwise = error "Unexpected class label."
+
+-- | Read examples from a file in SvmLight format and produce a corresponding 
+--   matrix and vector, for a classification problem. Includes checks 
+--   that all examples have the same number of attributes, and that the file 
+--   does in fact correspond to a classification problem.
+getMatrixExamplesFromFileC::String -> IO (M.Matrix Double, M.Vector Double)
+getMatrixExamplesFromFileC fileName = 
+    do
+      contents <- getExamplesFromFile fileName
+      case contents of
+        Left error' -> error $ show error'
+        Right result -> return $ fullExampleToMatrixC result
+                    
diff --git a/src/HasGP/Regression/Regression.hs b/src/HasGP/Regression/Regression.hs
new file mode 100644
--- /dev/null
+++ b/src/HasGP/Regression/Regression.hs
@@ -0,0 +1,142 @@
+{- | Regression is a module in the HasGP Gaussian process
+   library. It implements basic Gaussian process regression.
+   For the technical details see www.gaussianprocesses.org.
+
+   Copyright (C) 2011 Sean Holden. sbh11\@cl.cam.ac.uk.
+-}
+{- This file is part of HasGP.
+
+   HasGP is free software: you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
+
+   HasGP is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with HasGP.  If not, see <http://www.gnu.org/licenses/>.
+-}
+module HasGP.Regression.Regression 
+   (
+     gpRMain,
+     gpRPredict,
+     gpRPredict',
+     gpRLogEvidence,
+     gpRGradLogEvidence,
+     gpRLogHyperToEvidence
+   ) where 
+
+import Numeric.LinearAlgebra
+
+import HasGP.Types.MainTypes
+import HasGP.Covariance.Basic
+import HasGP.Support.MatrixFunction
+import HasGP.Support.Solve
+import HasGP.Support.Linear
+
+-- | Compute the main quantities required to do regression, specifically:
+--    the Cholesky decomposition L of the covariance matrix, and the parameters 
+--    \alpha such that L L^t y = alpha.
+gpRMain :: CovarianceFunction cF => cF  
+        -> Double                        -- ^ The log noise variance
+        -> Inputs                        
+        -> Targets                       
+        -> (DMatrix,DVector)             -- ^ L and alpha.
+gpRMain cov lognvar d t = (l,alpha)
+    where
+      n = rows d
+      k = covarianceMatrix cov d
+      m = (k + (scale (exp lognvar) (ident n)))
+      l = trans $ chol m
+      alpha = upperSolve (trans l) (lowerSolve l t)
+
+-- | Compute the expected value and variance for a collection of 
+--   new points supplied as the rows of a matrix. Differs from 
+--   gpRPredict' as l and alpha need to be computed in advance.
+gpRPredict :: CovarianceFunction cF => cF
+           -> DMatrix                    -- ^ l
+           -> DVector                    -- ^ alpha
+           -> Inputs                     
+           -> Targets                    
+           -> Inputs                     -- ^ The new inputs
+           -> (DVector, DVector)         -- ^ Mean, variance
+gpRPredict cov l alpha d t xStars = 
+    ((fromRows kxxStar) <> alpha, 
+     fromList $ zipWith (-) kxStarxStar (zipWith dot vs vs))
+    where
+      new = toRows xStars
+      kxxStar = covarianceWithPoints cov d new
+      kxStarxStar = zipWith (covariance cov) new new
+      vs = map (lowerSolve l) kxxStar
+
+-- | Compute the expected value and variance for a collection of 
+--   new points supplied as the rows of a matrix.       
+gpRPredict' :: CovarianceFunction cF => cF 
+            -> Double                      -- ^ The log noise variance
+            -> Inputs                      
+            -> Targets                     
+            -> Inputs                      -- ^ The new inputs
+            -> (DVector, DVector)          -- ^ Mean, variance
+gpRPredict' cov lognvar d t xStars = 
+    ((fromRows kxxStar) <> alpha, 
+     fromList $ zipWith (-) kxStarxStar (zipWith dot vs vs))
+    where
+      (l, alpha) = gpRMain cov lognvar d t 
+      new = toRows xStars
+      kxxStar = covarianceWithPoints cov d new
+      kxStarxStar = zipWith (covariance cov) new new
+      vs = map (lowerSolve l) kxxStar
+
+-- | Compute the log of the marginal likelihood.
+gpRLogEvidence :: DMatrix    -- ^ l
+               -> DVector    -- ^ alpha
+               -> Targets    
+               -> Double     -- ^ log marginal likelihood
+gpRLogEvidence l alpha t = 
+    (-0.5) * ((t <.> alpha) + 
+              (2.0 * (sum $ map log (toList $ takeDiag l))) + 
+              ((fromIntegral n) * (log (2 * pi))))
+    where
+      n = rows l
+
+-- | Compute the gradient of the log marginal likelihood.
+--   Output contains derivative with respect to noise variance 
+--   followed by the derivatives with respect to the hyperparameters 
+--   in the covariance function.
+gpRGradLogEvidence :: CovarianceFunction cF => cF
+                   -> Double  -- ^ the log noise variance
+                   -> DMatrix -- ^ l
+                   -> DVector -- ^ alpha 
+                   -> Inputs  
+                   -> DVector -- ^ Derivatives
+gpRGradLogEvidence cov lognvar l alpha i = 
+    join [fromList [dZdtheta $ scale (exp lognvar) $ ident (rows l)], 
+          fromList $ map dZdtheta dKdthetaList]
+        where
+          invK = HasGP.Support.Solve.cholSolve l
+          dKdthetaList = makeMatricesFromPairs (dCovarianceDParameters cov) i
+          dZdtheta dKdtheta = 
+              (0.5) * (sum $ toList $ abDiagOnly 
+                       ((asColumn alpha <> asRow alpha) - invK) dKdtheta)
+
+-- | Given the log parameters and other necessary inputs, compute 
+--   the NEGATIVE of the log marginal likelihood and its derivatives with 
+--   respect to the LOG hyperparameters.
+gpRLogHyperToEvidence :: CovarianceFunction cF => cF 
+                      -> Inputs  
+                      -> Targets 
+                      -> DVector -- ^ log hyperparameters, noise variance first
+                      -> (Double, DVector)
+gpRLogHyperToEvidence cov inputs targets parameters = 
+    (-(gpRLogEvidence l alpha targets), 
+     zipVectorWith (*) negGradLE (mapVector exp parameters))
+        where
+          lognvar = parameters @> 0
+          loghyper = subVector 1 ((dim parameters) - 1) parameters 
+          newCov = (makeCovarianceFromList cov) $ toList loghyper
+          (l, alpha) = gpRMain newCov lognvar inputs targets
+          negGradLE = -(gpRGradLogEvidence newCov lognvar l alpha inputs)
+
diff --git a/src/HasGP/Support/Functions.hs b/src/HasGP/Support/Functions.hs
new file mode 100644
--- /dev/null
+++ b/src/HasGP/Support/Functions.hs
@@ -0,0 +1,74 @@
+{- | HasGP Gaussian Process Library. This module contains assorted functions 
+     that support GP calculations but are more general-purpose than 
+     GP-specific.
+
+     Copyright (C) 2011 Sean Holden. sbh11\@cl.cam.ac.uk.
+-}
+{- This file is part of HasGP.
+
+   HasGP is free software: you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
+
+   HasGP is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with HasGP.  If not, see <http://www.gnu.org/licenses/>.
+-}
+module HasGP.Support.Functions where
+
+import HasGP.Types.MainTypes
+import Numeric.LinearAlgebra
+import Numeric.GSL.Special.Erf
+
+square :: Double -> Double
+square x = (x * x)
+
+trace :: DMatrix -> Double
+trace = sum . toList . takeDiag
+
+-- | Standard delta function - 0/1 valued.
+delta :: (Eq a) => a -> a -> Double
+delta a b 
+    | (a==b) = 1.0
+    | otherwise = 0.0
+
+-- | Standard delta function - boolean valued.
+deltaBool :: (Eq a) => a -> a -> Bool
+deltaBool a b = (a==b)
+
+-- | General sigmoid function with variable slope.
+generalSigmoid :: Double -> Double -> Double
+generalSigmoid theta x = 1 / (1 + (exp (-(theta * x))))
+
+-- | Standard sigmoid function.
+sigmoid :: Double -> Double
+sigmoid = generalSigmoid 1
+
+-- | Integral of Gaussian density of mean 0 and variance 1 
+--   from -infinity to x
+phiIntegral :: Double -> Double
+phiIntegral x = 1 - (erf_Q x)
+
+-- | Value of Gaussian density function for mean 0 and 
+--   variance 1.
+n :: Double -> Double
+n x = erf_Z x
+
+-- | DANGER! You can't compute the ratio (n x) / (phiIntegral x) directly, 
+--   as although it has sensible values for negative x the denominator gets 
+--   small so fast that you quickly get Infinity turning up. GSL has the 
+--   inverse Mill's function/hazard function for the Gaussian distribution, 
+--   and the ratio is equal to hazard(-x).
+nOverPhi :: Double -> Double
+nOverPhi x = hazard(-x)
+
+-- | DANGER! See nOverPhi - you have to compute this carefully as 
+--   well.
+logPhi :: Double -> Double
+logPhi x = log $ (n x) / (hazard (-x))
+
diff --git a/src/HasGP/Support/Iterate.hs b/src/HasGP/Support/Iterate.hs
new file mode 100644
--- /dev/null
+++ b/src/HasGP/Support/Iterate.hs
@@ -0,0 +1,74 @@
+{- | We often need to iterate some update equation until convergence is 
+   detected. This module uses the State monad to provide a very general way of 
+   expressing computations of this kind.
+
+   Copyright (C) Sean Holden 2011. sbh11\@cl.cam.ac.uk
+-}
+{- This file is part of HasGP.
+
+   HasGP is free software: you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
+
+   HasGP is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with HasGP.  If not, see <http://www.gnu.org/licenses/>.
+-}
+module HasGP.Support.Iterate where
+
+import Control.Monad.State
+
+{- | iterateOnce takes a function to update a state and another 
+     to compute a value associated with a given state.
+
+     It returns a state transformer performing the corresponding 
+     update - that is, one iteration.
+-}
+iterateOnce::(s -> s) -> (s -> a) -> State s a
+iterateOnce updateState stateValue = 
+    do currentState <- get
+       let newState = updateState currentState
+       put newState
+       return $ stateValue newState
+
+{- | iterateToConvergence takes a state transformer typically generated 
+     using iterateOnce, a convergence test that compares two values 
+     associated with the current and next states returning True if 
+     we've converged, and an initial value.
+
+     It returns a state transformer that performs iteration until 
+     convergence. When run from an initial state it returns the state 
+     at convergence and the corresponding value.
+-}
+iterateToConvergence::State s a -> (a -> a -> Bool) -> a -> State s a
+iterateToConvergence doOnce converged currentValue = 
+    do newValue <- doOnce
+       if (converged currentValue newValue) 
+         then return newValue
+         else iterateToConvergence doOnce converged newValue
+
+{- | The same as iterateToConvergence, but takes the state update and 
+     state value functions directly, so the resulting state transformer 
+     only requires a start state to be run.
+-}
+iterateToConvergence'::(s -> s) -> (s -> a) -> (a -> a -> Bool) -> State s a
+iterateToConvergence' updateState stateValue converged = 
+    do startState <- get
+       let initialValue = stateValue startState
+       let itOnce = iterateOnce updateState stateValue
+       iterateToConvergence itOnce converged initialValue
+
+{- | The same as iterateToConvergence, but does one update to obtain an 
+     initial value and continues from there. Consequently, no initial 
+     value is required, but you do one extra update.
+-}
+iterateToConvergence''::State s a -> (a -> a -> Bool) -> State s a
+iterateToConvergence'' doOnce converged = 
+    do newValue <- doOnce
+       iterateToConvergence doOnce converged newValue
+
diff --git a/src/HasGP/Support/Linear.hs b/src/HasGP/Support/Linear.hs
new file mode 100644
--- /dev/null
+++ b/src/HasGP/Support/Linear.hs
@@ -0,0 +1,95 @@
+{- | HasGP Gaussian Process Library. This module contains assorted
+     functions that support GP calculations and are specifically
+     related to linear algebra.
+
+     Copyright (C) 2011 Sean Holden. sbh11\@cl.cam.ac.uk.
+-}
+{- This file is part of HasGP.
+
+   HasGP is free software: you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
+
+   HasGP is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with HasGP.  If not, see <http://www.gnu.org/licenses/>.
+-}
+module HasGP.Support.Linear where
+
+import Data.Packed.ST
+import Control.Monad (mapM_,zipWithM_)
+import Control.Monad.ST
+
+import Numeric.LinearAlgebra
+
+import HasGP.Types.MainTypes
+import HasGP.Support.Functions as F
+
+-- | Sum the elements in a vector.
+sumVector :: DVector -> Double
+sumVector = foldVector (+) 0.0
+
+-- | Sum of elements in a vector, divided by an Int.
+sumVectorDiv :: Int -> DVector -> Double
+sumVectorDiv d v = (sumVector v)/(fromIntegral d)
+
+-- | Length of a vector.
+lengthV :: (Normed a b) => a b -> RealOf b
+lengthV = pnorm PNorm2
+
+-- | Generate a vector equal to the first column of a matrix.
+toVector :: Matrix Double -> Vector Double
+toVector x = head $ toColumns x
+
+-- | Replace the element at a specified position in a vector.
+--   NOTE: hmatrix numbers from 0, which is odd. This numbers from 1.
+--   The result is returned by overwriting v. This is implemented 
+--   via runSTVector because the increase in efficiency is HUGE.
+replaceInVector :: DVector -> Int -> Double -> DVector
+replaceInVector v i n 
+    | (1 <= i) && (i <= (dim v)) = runSTVector $ do
+                                     v2 <- thawVector v
+                                     writeVector v2 (i-1) n
+                                     return v2
+    | otherwise                  = error "Index out of range in replaceInVector"
+       
+-- | Efficiently pre multiply by a diagonal matrix (passed as a vector)
+preMultiply :: DVector -> DMatrix -> DMatrix
+preMultiply v m = fromRows $ zipWith scale (toList v) (toRows m) 
+
+-- | Efficiently post multiply by a diagonal matrix (passed as a vector)
+postMultiply :: DMatrix -> DVector -> DMatrix
+postMultiply m v = fromColumns $ zipWith scale (toList v) (toColumns m) 
+
+-- | Compute x^T A x when A is diagonal. The second argument is the 
+--   diagonal of A.
+xAxDiag :: DVector -> DVector -> Double
+xAxDiag x a 
+    | (d == dim a) = a <.> (x * x)      
+    | otherwise = error "Incorrect dimensions in xAxDiag"
+    where
+      d = dim x
+
+-- | Compute the diagonal only of the product of two square matrices
+abDiagOnly :: DMatrix -> DMatrix -> DVector
+abDiagOnly a b = fromList $ zipWith (<.>) (toRows a) (toColumns b)
+
+-- | Compute ABA where A is diagonal. The first argument is the diagonal of A.
+abaDiagDiag :: DVector -> DMatrix -> DMatrix
+abaDiagDiag a b = (d><d) (zipWith (*) bL aA)
+    where
+      d = dim a
+      aL = toList a
+      aA = [(a1 * a2) | a1 <- aL, a2 <- aL]
+      bL = toList $ join $ toRows b
+
+-- | Compute aBa where a is a vector and B is a matrix
+abaVV :: DVector -> DMatrix -> Double
+abaVV a b = (flatten ((asRow a) <> b)) <.> a
+
+
diff --git a/src/HasGP/Support/MatrixFunction.hs b/src/HasGP/Support/MatrixFunction.hs
new file mode 100644
--- /dev/null
+++ b/src/HasGP/Support/MatrixFunction.hs
@@ -0,0 +1,64 @@
+{- | HasGP Gaussian Process Library. This module contains assorted
+     functions that support the construction of matrices from
+     functions.
+
+     Copyright (C) 2011 Sean Holden. sbh11\@cl.cam.ac.uk.
+-}
+{- This file is part of HasGP.
+
+   HasGP is free software: you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
+
+   HasGP is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with HasGP.  If not, see <http://www.gnu.org/licenses/>.
+-}
+module HasGP.Support.MatrixFunction where
+
+import Numeric.LinearAlgebra
+
+import HasGP.Types.MainTypes
+import HasGP.Support.Functions as F
+
+-- | Take two vectors and a function. The vectors contain inputs 1 and 2. 
+--   The function maps a pair of inputs to a value. Produce a matrix 
+--   containing the values of the function at the relevant points.
+makeMatrixFromFunction2 :: (DVector -> Double) 
+                       -> DVector 
+                       -> DVector 
+                       -> DMatrix
+makeMatrixFromFunction2 f x1 x2 = 
+    flipud $ ((length x1L)><(length x2L)) (map f l)
+        where 
+          x1L = toList x1
+          x2L = toList x2
+          l = map fromList [[a,b] | a <- x1L, b <-x2L ]
+      
+-- | Take a function and a matrix of instance vectors. Apply the function to 
+--   each possible pair of instance vectors and return the result as a matrix.
+makeMatrixFromPairs2 :: (DVector -> DVector -> Double) -> DMatrix -> DMatrix
+makeMatrixFromPairs2 f i = (d><d) [f x1 x2 | x1 <- x, x2 <- x]
+    where 
+      d = rows i
+      x = toRows i
+
+-- | Same as makeMatrixFromPairs but the function returns a vector. In this 
+-- case the output is a list of matrices, one for each element of the 
+-- function value.
+makeMatricesFromPairs :: (DVector -> DVector -> DVector) -> DMatrix -> [DMatrix]
+makeMatricesFromPairs f i = map (d><d) (reArrange lists [])
+    where
+      d = rows i
+      x = toRows i
+      lists = map toList [f x1 x2 | x1 <- x, x2 <- x]
+      reArrange [] r = reverse r
+      reArrange l@(h:t) r 
+                | (h == []) = reverse r
+                | otherwise = reArrange (map tail l) ((map head l):r)
+
diff --git a/src/HasGP/Support/Random.hs b/src/HasGP/Support/Random.hs
new file mode 100644
--- /dev/null
+++ b/src/HasGP/Support/Random.hs
@@ -0,0 +1,87 @@
+{- | Gaussian Process Library. This module contains assorted functions
+     that support random number generation and the construction of basic
+     standard training sets.
+
+     Note: these are mostly calls to functions now (but not originally)
+     supplied by HMatrix. Originally different random sources were used, 
+     hence the current format.
+
+     Copyright (C) 2011 Sean Holden. sbh11\@cl.cam.ac.uk.
+
+-}
+{- This file is part of HasGP.
+
+   HasGP is free software: you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
+
+   HasGP is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with HasGP.  If not, see <http://www.gnu.org/licenses/>.
+-}
+module HasGP.Support.Random where
+
+import Numeric.LinearAlgebra
+import Numeric.Container
+
+import HasGP.Types.MainTypes
+
+-- | Make a random matrix. Elements are uniformly distributed between 
+--   specified bounds. Returns the matrix and a new generator.
+uniformMatrix :: Int                 -- ^ Seed
+              -> (Double,Double)     -- ^ Range for the elements
+              -> Int                 -- ^ Number of rows
+              -> Int                 -- ^ Number of columns
+              -> DMatrix
+uniformMatrix seed (low,high) rows columns = 
+        uniformSample seed rows [(low,high) | x <- [1..columns]] 
+
+-- | Produce vectors with normally distributed, independent elements of
+--   zero mean and specified variance.
+normalVectorSimple :: Int       -- ^ Seed 
+                   -> Double    -- ^ Variance
+                   -> Int       -- ^ Number of elements in the vector.
+                   -> DVector
+normalVectorSimple seed v n = 
+        flatten $ gaussianSample seed 1 (constant 0.0 n) 
+                    (scale (1/v) (ident n)::DMatrix)
+
+-- | Produce lists with normally distributed independent elements of
+--   zero mean and specified variance.
+normalList :: Int        -- ^ Seed 
+           -> Double     -- ^ Variance
+           -> Int        -- ^ Number of elements in the list
+           -> [Double]
+normalList seed v n = toList $ normalVectorSimple seed v n
+                          
+-- | Produce normally distributed vectors with mean and covariance
+--   specified.
+normalVector :: Int       -- ^ Seed 
+             -> DVector   -- ^ Mean vector
+             -> DMatrix   -- ^ Covariance matrix
+             -> DVector  
+normalVector seed m c = flatten $ gaussianSample seed 1 m c
+                             
+-- | Make a matrix with normally distributed, independent elements of 
+--   zero mean and specified variance.
+normalMatrix :: Int       -- ^ Seed 
+             -> Double    -- ^ Variance
+             -> Int       -- ^ Rows 
+             -> Int       -- ^ Columns
+             -> DMatrix
+normalMatrix seed variance rows columns = 
+        gaussianSample seed rows (constant 0.0 columns) 
+                           (scale variance ((ident columns)::DMatrix))
+                                       
+
+
+
+
+
+
+
diff --git a/src/HasGP/Support/Solve.hs b/src/HasGP/Support/Solve.hs
new file mode 100644
--- /dev/null
+++ b/src/HasGP/Support/Solve.hs
@@ -0,0 +1,100 @@
+{- | HasGP Gaussian Process Library. This module contains assorted functions 
+     that support the efficient solution of sets of linear equations
+
+     Copyright (C) 2011 Sean Holden. sbh11\@cl.cam.ac.uk.
+-}
+{- This file is part of HasGP.
+
+   HasGP is free software: you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
+
+   HasGP is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with HasGP.  If not, see <http://www.gnu.org/licenses/>.
+-}
+module HasGP.Support.Solve where
+
+import Numeric.LinearAlgebra
+import Data.Packed.ST
+
+import HasGP.Types.MainTypes
+import HasGP.Support.Functions as F
+
+import Control.Monad.ST
+
+{- | It's not clear whether the use of linearSolve from HMatrix will induce
+     a performance hit when the matrix is upper or lower triangular. Pro: 
+     it's a call to something presumably from LaPack. Con: we've got some 
+     structure that should allow us to make it O(n^2) instead of O(n^3).
+
+     To do: try some timed runs to see if these are needed.
+-}
+
+-- | Solve an upper triangular system. 
+upperSolve :: DMatrix -> DVector -> DVector
+upperSolve m y = uS mR yL n x
+    where 
+      n = rows m
+      x = constant 0.0 n
+      mR = reverse $ toRows m
+      yL = reverse $ toList y
+
+-- | Solve a lower triangular system.
+lowerSolve :: DMatrix -> DVector -> DVector
+lowerSolve m y = lS mR yL 1 x
+    where 
+      x = constant 0.0 $ rows m
+      mR = toRows m
+      yL = toList y
+
+-- | Used by lowerSolve.
+lS [] [] n x = x
+lS (row:rows) (y:ys) n x = lS rows ys (n+1) $ computeNthElement row y n x
+lS _ _ _ x = x 
+
+-- | Used by upperSolve.
+uS [] [] n x = x
+uS (row:rows) (y:ys) n x = uS rows ys (n-1) $ computeNthElement row y n x
+uS _ _ _ x = x 
+    
+-- | Compute the value of x_n when solving a lower triangular 
+--   set of equations Mx=y. It is assumed that all values x_i where 
+--   i < n are already in the vector x and that the rest of the 
+--   elements of x are 0.
+computeNthElement::DVector   -- ^ nth row of M
+                 -> Double   -- ^ y_n    
+                 -> Int      -- ^ n
+                 -> DVector  -- ^ current x vector
+                 -> DVector  -- ^ x vector with x_n computed.
+computeNthElement row y n x = 
+     runSTVector $ do
+          let inner = row <.> x
+          row' <- thawVector row 
+          mN <- readVector row' (n-1)
+          x' <- thawVector x
+          writeVector x' (n-1) ((y - inner)/mN)
+          return x'
+
+-- | General solver for linear equations of the relevant kind. 
+--
+--   First parameter is either upperSolve or lowerSolve. Next two parameters 
+--   are the upper/lower triangular matrix from the Cholesky decomposition, 
+--   then another matrix. Returns the solution as a matrix.
+generalSolve :: (DMatrix -> DVector -> DVector) 
+             -> DMatrix 
+             -> DMatrix 
+             -> DMatrix
+generalSolve solver l m = fromColumns $ map (solver l) (toColumns m) 
+
+-- | Find the inverse of a matrix from its Cholesky decomposition
+cholSolve :: DMatrix -> DMatrix
+cholSolve l = fromColumns $ map (upperSolve l) (toColumns $ ident $ rows l)
+
+
+
diff --git a/src/HasGP/Types/MainTypes.hs b/src/HasGP/Types/MainTypes.hs
new file mode 100644
--- /dev/null
+++ b/src/HasGP/Types/MainTypes.hs
@@ -0,0 +1,37 @@
+{- | MainTypes is a module in the HasGP Gaussian process library. It implements 
+     basic types for the entire library. 
+
+     Note: some more specific classes and types are defined elsewhere, 
+     in particular in HasGP.Likelihood and HasGP.Covariance.
+
+     Copyright (C) 2011 Sean Holden. sbh11\@cl.cam.ac.uk.
+-}
+{- This file is part of HasGP.
+
+   HasGP is free software: you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
+
+   HasGP is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with HasGP.  If not, see <http://www.gnu.org/licenses/>.
+-}
+module HasGP.Types.MainTypes where
+
+import Numeric.LinearAlgebra
+
+-- | These are defined to make functions more readable.
+type DVector = Vector Double
+type DMatrix = Matrix Double   
+
+type Input = Vector Double
+type Inputs = Matrix Double
+type CovarianceMatrix = Matrix Double
+type Targets = Vector Double
+type Outputs = Vector Double
+
