From dacb520e5c144dc8289331d3b0cc2717152c3365 Mon Sep 17 00:00:00 2001 From: Curtis Whitley Date: Mon, 22 Apr 2024 14:22:07 -0400 Subject: [PATCH 01/49] Add initial pingo files --- video/pingo/LICENSE | 121 ++ video/pingo/README.md | 30 + video/pingo/assets/teapot.c | 3476 +++++++++++++++++++++++++++++++ video/pingo/assets/teapot.h | 3 + video/pingo/math/mat3.c | 167 ++ video/pingo/math/mat3.h | 68 + video/pingo/math/mat4.c | 318 +++ video/pingo/math/mat4.h | 41 + video/pingo/math/types.h | 13 + video/pingo/math/vec2.c | 16 + video/pingo/math/vec2.h | 27 + video/pingo/math/vec3.c | 62 + video/pingo/math/vec3.h | 32 + video/pingo/math/vec4.c | 1 + video/pingo/math/vec4.h | 25 + video/pingo/render/backend.h | 33 + video/pingo/render/depth.c | 32 + video/pingo/render/depth.h | 28 + video/pingo/render/material.c | 5 + video/pingo/render/material.h | 9 + video/pingo/render/mesh.c | 10 + video/pingo/render/mesh.h | 16 + video/pingo/render/object.c | 8 + video/pingo/render/object.h | 16 + video/pingo/render/pixel.c | 88 + video/pingo/render/pixel.h | 70 + video/pingo/render/rasterizer.c | 242 +++ video/pingo/render/rasterizer.h | 28 + video/pingo/render/renderable.c | 5 + video/pingo/render/renderable.h | 21 + video/pingo/render/renderer.c | 308 +++ video/pingo/render/renderer.h | 32 + video/pingo/render/scene.c | 26 + video/pingo/render/scene.h | 28 + video/pingo/render/sprite.c | 30 + video/pingo/render/sprite.h | 22 + video/pingo/render/texture.c | 39 + video/pingo/render/texture.h | 21 + 38 files changed, 5517 insertions(+) create mode 100644 video/pingo/LICENSE create mode 100644 video/pingo/README.md create mode 100644 video/pingo/assets/teapot.c create mode 100644 video/pingo/assets/teapot.h create mode 100644 video/pingo/math/mat3.c create mode 100644 video/pingo/math/mat3.h create mode 100644 video/pingo/math/mat4.c create mode 100644 video/pingo/math/mat4.h create mode 100644 video/pingo/math/types.h create mode 100644 video/pingo/math/vec2.c create mode 100644 video/pingo/math/vec2.h create mode 100644 video/pingo/math/vec3.c create mode 100644 video/pingo/math/vec3.h create mode 100644 video/pingo/math/vec4.c create mode 100644 video/pingo/math/vec4.h create mode 100644 video/pingo/render/backend.h create mode 100644 video/pingo/render/depth.c create mode 100644 video/pingo/render/depth.h create mode 100644 video/pingo/render/material.c create mode 100644 video/pingo/render/material.h create mode 100644 video/pingo/render/mesh.c create mode 100644 video/pingo/render/mesh.h create mode 100644 video/pingo/render/object.c create mode 100644 video/pingo/render/object.h create mode 100644 video/pingo/render/pixel.c create mode 100644 video/pingo/render/pixel.h create mode 100644 video/pingo/render/rasterizer.c create mode 100644 video/pingo/render/rasterizer.h create mode 100644 video/pingo/render/renderable.c create mode 100644 video/pingo/render/renderable.h create mode 100644 video/pingo/render/renderer.c create mode 100644 video/pingo/render/renderer.h create mode 100644 video/pingo/render/scene.c create mode 100644 video/pingo/render/scene.h create mode 100644 video/pingo/render/sprite.c create mode 100644 video/pingo/render/sprite.h create mode 100644 video/pingo/render/texture.c create mode 100644 video/pingo/render/texture.h diff --git a/video/pingo/LICENSE b/video/pingo/LICENSE new file mode 100644 index 00000000..0e259d42 --- /dev/null +++ b/video/pingo/LICENSE @@ -0,0 +1,121 @@ +Creative Commons Legal Code + +CC0 1.0 Universal + + CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE + LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN + ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS + INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES + REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS + PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM + THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED + HEREUNDER. + +Statement of Purpose + +The laws of most jurisdictions throughout the world automatically confer +exclusive Copyright and Related Rights (defined below) upon the creator +and subsequent owner(s) (each and all, an "owner") of an original work of +authorship and/or a database (each, a "Work"). + +Certain owners wish to permanently relinquish those rights to a Work for +the purpose of contributing to a commons of creative, cultural and +scientific works ("Commons") that the public can reliably and without fear +of later claims of infringement build upon, modify, incorporate in other +works, reuse and redistribute as freely as possible in any form whatsoever +and for any purposes, including without limitation commercial purposes. +These owners may contribute to the Commons to promote the ideal of a free +culture and the further production of creative, cultural and scientific +works, or to gain reputation or greater distribution for their Work in +part through the use and efforts of others. + +For these and/or other purposes and motivations, and without any +expectation of additional consideration or compensation, the person +associating CC0 with a Work (the "Affirmer"), to the extent that he or she +is an owner of Copyright and Related Rights in the Work, voluntarily +elects to apply CC0 to the Work and publicly distribute the Work under its +terms, with knowledge of his or her Copyright and Related Rights in the +Work and the meaning and intended legal effect of CC0 on those rights. + +1. Copyright and Related Rights. A Work made available under CC0 may be +protected by copyright and related or neighboring rights ("Copyright and +Related Rights"). Copyright and Related Rights include, but are not +limited to, the following: + + i. the right to reproduce, adapt, distribute, perform, display, + communicate, and translate a Work; + ii. moral rights retained by the original author(s) and/or performer(s); +iii. publicity and privacy rights pertaining to a person's image or + likeness depicted in a Work; + iv. rights protecting against unfair competition in regards to a Work, + subject to the limitations in paragraph 4(a), below; + v. rights protecting the extraction, dissemination, use and reuse of data + in a Work; + vi. database rights (such as those arising under Directive 96/9/EC of the + European Parliament and of the Council of 11 March 1996 on the legal + protection of databases, and under any national implementation + thereof, including any amended or successor version of such + directive); and +vii. other similar, equivalent or corresponding rights throughout the + world based on applicable law or treaty, and any national + implementations thereof. + +2. Waiver. To the greatest extent permitted by, but not in contravention +of, applicable law, Affirmer hereby overtly, fully, permanently, +irrevocably and unconditionally waives, abandons, and surrenders all of +Affirmer's Copyright and Related Rights and associated claims and causes +of action, whether now known or unknown (including existing as well as +future claims and causes of action), in the Work (i) in all territories +worldwide, (ii) for the maximum duration provided by applicable law or +treaty (including future time extensions), (iii) in any current or future +medium and for any number of copies, and (iv) for any purpose whatsoever, +including without limitation commercial, advertising or promotional +purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each +member of the public at large and to the detriment of Affirmer's heirs and +successors, fully intending that such Waiver shall not be subject to +revocation, rescission, cancellation, termination, or any other legal or +equitable action to disrupt the quiet enjoyment of the Work by the public +as contemplated by Affirmer's express Statement of Purpose. + +3. Public License Fallback. Should any part of the Waiver for any reason +be judged legally invalid or ineffective under applicable law, then the +Waiver shall be preserved to the maximum extent permitted taking into +account Affirmer's express Statement of Purpose. In addition, to the +extent the Waiver is so judged Affirmer hereby grants to each affected +person a royalty-free, non transferable, non sublicensable, non exclusive, +irrevocable and unconditional license to exercise Affirmer's Copyright and +Related Rights in the Work (i) in all territories worldwide, (ii) for the +maximum duration provided by applicable law or treaty (including future +time extensions), (iii) in any current or future medium and for any number +of copies, and (iv) for any purpose whatsoever, including without +limitation commercial, advertising or promotional purposes (the +"License"). The License shall be deemed effective as of the date CC0 was +applied by Affirmer to the Work. Should any part of the License for any +reason be judged legally invalid or ineffective under applicable law, such +partial invalidity or ineffectiveness shall not invalidate the remainder +of the License, and in such case Affirmer hereby affirms that he or she +will not (i) exercise any of his or her remaining Copyright and Related +Rights in the Work or (ii) assert any associated claims and causes of +action with respect to the Work, in either case contrary to Affirmer's +express Statement of Purpose. + +4. Limitations and Disclaimers. + + a. No trademark or patent rights held by Affirmer are waived, abandoned, + surrendered, licensed or otherwise affected by this document. + b. Affirmer offers the Work as-is and makes no representations or + warranties of any kind concerning the Work, express, implied, + statutory or otherwise, including without limitation warranties of + title, merchantability, fitness for a particular purpose, non + infringement, or the absence of latent or other defects, accuracy, or + the present or absence of errors, whether or not discoverable, all to + the greatest extent permissible under applicable law. + c. Affirmer disclaims responsibility for clearing rights of other persons + that may apply to the Work or any use thereof, including without + limitation any person's Copyright and Related Rights in the Work. + Further, Affirmer disclaims responsibility for obtaining any necessary + consents, permissions or other rights required for any use of the + Work. + d. Affirmer understands and acknowledges that Creative Commons is not a + party to this document and has no duty or obligation with respect to + this CC0 or use of the Work. diff --git a/video/pingo/README.md b/video/pingo/README.md new file mode 100644 index 00000000..836b5069 --- /dev/null +++ b/video/pingo/README.md @@ -0,0 +1,30 @@ + +# pingo + +Pingo is a low level 2D/3D software graphics library. It uses no dynamically allocated memory and provides a simple low level backend interface to implement for your platform. This library can easily be compiled for many different platforms since it has no dependencies except for a working C compiler, it has been tested on Windows, Linux x86, Linux ARM, ESP32, Arm Cortex M3 and even RISC V CPUs. + +The cmake project contains targets that build examples that show 3D rendering on different platforms. +``` +git clone git@github.com:fededevi/pingo.git +cd pingo +mkdir build && cd build +cmake .. && make +``` + +If you compile on Linux the default cmake project will build 3 example binaries: +- linux_window -> An example that renders to an X11 window +- linux_framebuffer -> An example that renders to a framebuffer device +- linux_terminal -> An example that renders to the terminal + +If you compile on Windows the default cmake project will build 2 example binaries: +- win_window -> An example that renders to a Windows window +- win_terminal -> An example that renders to the terminal + +Some backends like the linux framebuffer require exact dimension and pixel format, see pixel.h and this line in the example's main.c: +``` +int main(){ + Vec2i size = {300, 150}; +``` + +#### An example with texture and per-triangle shading +![Example](/public/viking.png) \ No newline at end of file diff --git a/video/pingo/assets/teapot.c b/video/pingo/assets/teapot.c new file mode 100644 index 00000000..9a3b482b --- /dev/null +++ b/video/pingo/assets/teapot.c @@ -0,0 +1,3476 @@ +#include "../render/mesh.h" + +#define teapot_vertices 1728 + +Vec3f positions[teapot_vertices] = { + {0.700000f, -1.200000f, 0.000000f}, + {0.605600f, -1.200000f, -0.355700f}, + {0.598800f, -1.243700f, -0.351700f}, + {0.598800f, -1.243700f, -0.351700f}, + {0.692100f, -1.243700f, 0.000000f}, + {0.700000f, -1.200000f, 0.000000f}, + {0.692100f, -1.243700f, 0.000000f}, + {0.598800f, -1.243700f, -0.351700f}, + {0.619600f, -1.243700f, -0.363900f}, + {0.619600f, -1.243700f, -0.363900f}, + {0.716200f, -1.243700f, 0.000000f}, + {0.692100f, -1.243700f, 0.000000f}, + {0.716200f, -1.243700f, 0.000000f}, + {0.619600f, -1.243700f, -0.363900f}, + {0.648900f, -1.200000f, -0.381100f}, + {0.648900f, -1.200000f, -0.381100f}, + {0.750000f, -1.200000f, 0.000000f}, + {0.716200f, -1.243700f, 0.000000f}, + {0.605600f, -1.200000f, -0.355700f}, + {0.355700f, -1.200000f, -0.605600f}, + {0.351700f, -1.243700f, -0.598800f}, + {0.351700f, -1.243700f, -0.598800f}, + {0.598800f, -1.243700f, -0.351700f}, + {0.605600f, -1.200000f, -0.355700f}, + {0.598800f, -1.243700f, -0.351700f}, + {0.351700f, -1.243700f, -0.598800f}, + {0.363900f, -1.243800f, -0.619600f}, + {0.363900f, -1.243800f, -0.619600f}, + {0.619600f, -1.243700f, -0.363900f}, + {0.598800f, -1.243700f, -0.351700f}, + {0.619600f, -1.243700f, -0.363900f}, + {0.363900f, -1.243800f, -0.619600f}, + {0.381100f, -1.200000f, -0.648900f}, + {0.381100f, -1.200000f, -0.648900f}, + {0.648900f, -1.200000f, -0.381100f}, + {0.619600f, -1.243700f, -0.363900f}, + {0.355700f, -1.200000f, -0.605600f}, + {0.000000f, -1.200000f, -0.700000f}, + {0.000000f, -1.243700f, -0.692100f}, + {0.000000f, -1.243700f, -0.692100f}, + {0.351700f, -1.243700f, -0.598800f}, + {0.355700f, -1.200000f, -0.605600f}, + {0.351700f, -1.243700f, -0.598800f}, + {0.000000f, -1.243700f, -0.692100f}, + {0.000000f, -1.243800f, -0.716200f}, + {0.000000f, -1.243800f, -0.716200f}, + {0.363900f, -1.243800f, -0.619600f}, + {0.351700f, -1.243700f, -0.598800f}, + {0.363900f, -1.243800f, -0.619600f}, + {0.000000f, -1.243800f, -0.716200f}, + {0.000000f, -1.200000f, -0.750000f}, + {0.000000f, -1.200000f, -0.750000f}, + {0.381100f, -1.200000f, -0.648900f}, + {0.363900f, -1.243800f, -0.619600f}, + {0.000000f, -1.200000f, -0.700000f}, + {-0.375700f, -1.200000f, -0.605600f}, + {-0.357600f, -1.243700f, -0.598800f}, + {-0.357600f, -1.243700f, -0.598800f}, + {0.000000f, -1.243700f, -0.692100f}, + {0.000000f, -1.200000f, -0.700000f}, + {0.000000f, -1.243700f, -0.692100f}, + {-0.357600f, -1.243700f, -0.598800f}, + {-0.364700f, -1.243700f, -0.619600f}, + {-0.364700f, -1.243700f, -0.619600f}, + {0.000000f, -1.243800f, -0.716200f}, + {0.000000f, -1.243700f, -0.692100f}, + {0.000000f, -1.243800f, -0.716200f}, + {-0.364700f, -1.243700f, -0.619600f}, + {-0.381100f, -1.200000f, -0.648900f}, + {-0.381100f, -1.200000f, -0.648900f}, + {0.000000f, -1.200000f, -0.750000f}, + {0.000000f, -1.243800f, -0.716200f}, + {-0.375700f, -1.200000f, -0.605600f}, + {-0.615600f, -1.200000f, -0.355700f}, + {-0.601800f, -1.243700f, -0.351700f}, + {-0.601800f, -1.243700f, -0.351700f}, + {-0.357600f, -1.243700f, -0.598800f}, + {-0.375700f, -1.200000f, -0.605600f}, + {-0.357600f, -1.243700f, -0.598800f}, + {-0.601800f, -1.243700f, -0.351700f}, + {-0.620000f, -1.243700f, -0.363900f}, + {-0.620000f, -1.243700f, -0.363900f}, + {-0.364700f, -1.243700f, -0.619600f}, + {-0.357600f, -1.243700f, -0.598800f}, + {-0.364700f, -1.243700f, -0.619600f}, + {-0.620000f, -1.243700f, -0.363900f}, + {-0.648900f, -1.200000f, -0.381100f}, + {-0.648900f, -1.200000f, -0.381100f}, + {-0.381100f, -1.200000f, -0.648900f}, + {-0.364700f, -1.243700f, -0.619600f}, + {-0.615600f, -1.200000f, -0.355700f}, + {-0.700000f, -1.200000f, 0.000000f}, + {-0.692100f, -1.243700f, 0.000000f}, + {-0.692100f, -1.243700f, 0.000000f}, + {-0.601800f, -1.243700f, -0.351700f}, + {-0.615600f, -1.200000f, -0.355700f}, + {-0.601800f, -1.243700f, -0.351700f}, + {-0.692100f, -1.243700f, 0.000000f}, + {-0.716200f, -1.243700f, 0.000000f}, + {-0.716200f, -1.243700f, 0.000000f}, + {-0.620000f, -1.243700f, -0.363900f}, + {-0.601800f, -1.243700f, -0.351700f}, + {-0.620000f, -1.243700f, -0.363900f}, + {-0.716200f, -1.243700f, 0.000000f}, + {-0.750000f, -1.200000f, 0.000000f}, + {-0.750000f, -1.200000f, 0.000000f}, + {-0.648900f, -1.200000f, -0.381100f}, + {-0.620000f, -1.243700f, -0.363900f}, + {-0.700000f, -1.200000f, 0.000000f}, + {-0.605600f, -1.200000f, 0.355700f}, + {-0.598800f, -1.243700f, 0.351700f}, + {-0.598800f, -1.243700f, 0.351700f}, + {-0.692100f, -1.243700f, 0.000000f}, + {-0.700000f, -1.200000f, 0.000000f}, + {-0.692100f, -1.243700f, 0.000000f}, + {-0.598800f, -1.243700f, 0.351700f}, + {-0.619600f, -1.243700f, 0.363900f}, + {-0.619600f, -1.243700f, 0.363900f}, + {-0.716200f, -1.243700f, 0.000000f}, + {-0.692100f, -1.243700f, 0.000000f}, + {-0.716200f, -1.243700f, 0.000000f}, + {-0.619600f, -1.243700f, 0.363900f}, + {-0.648900f, -1.200000f, 0.381100f}, + {-0.648900f, -1.200000f, 0.381100f}, + {-0.750000f, -1.200000f, 0.000000f}, + {-0.716200f, -1.243700f, 0.000000f}, + {-0.605600f, -1.200000f, 0.355700f}, + {-0.355700f, -1.200000f, 0.605600f}, + {-0.351700f, -1.243700f, 0.598800f}, + {-0.351700f, -1.243700f, 0.598800f}, + {-0.598800f, -1.243700f, 0.351700f}, + {-0.605600f, -1.200000f, 0.355700f}, + {-0.598800f, -1.243700f, 0.351700f}, + {-0.351700f, -1.243700f, 0.598800f}, + {-0.363900f, -1.243700f, 0.619600f}, + {-0.363900f, -1.243700f, 0.619600f}, + {-0.619600f, -1.243700f, 0.363900f}, + {-0.598800f, -1.243700f, 0.351700f}, + {-0.619600f, -1.243700f, 0.363900f}, + {-0.363900f, -1.243700f, 0.619600f}, + {-0.381100f, -1.200000f, 0.648900f}, + {-0.381100f, -1.200000f, 0.648900f}, + {-0.648900f, -1.200000f, 0.381100f}, + {-0.619600f, -1.243700f, 0.363900f}, + {-0.355700f, -1.200000f, 0.605600f}, + {0.000000f, -1.200000f, 0.700000f}, + {0.000000f, -1.243700f, 0.692100f}, + {0.000000f, -1.243700f, 0.692100f}, + {-0.351700f, -1.243700f, 0.598800f}, + {-0.355700f, -1.200000f, 0.605600f}, + {-0.351700f, -1.243700f, 0.598800f}, + {0.000000f, -1.243700f, 0.692100f}, + {0.000000f, -1.243700f, 0.716200f}, + {0.000000f, -1.243700f, 0.716200f}, + {-0.363900f, -1.243700f, 0.619600f}, + {-0.351700f, -1.243700f, 0.598800f}, + {-0.363900f, -1.243700f, 0.619600f}, + {0.000000f, -1.243700f, 0.716200f}, + {0.000000f, -1.200000f, 0.750000f}, + {0.000000f, -1.200000f, 0.750000f}, + {-0.381100f, -1.200000f, 0.648900f}, + {-0.363900f, -1.243700f, 0.619600f}, + {0.000000f, -1.200000f, 0.700000f}, + {0.355700f, -1.200000f, 0.605600f}, + {0.351700f, -1.243700f, 0.598800f}, + {0.351700f, -1.243700f, 0.598800f}, + {0.000000f, -1.243700f, 0.692100f}, + {0.000000f, -1.200000f, 0.700000f}, + {0.000000f, -1.243700f, 0.692100f}, + {0.351700f, -1.243700f, 0.598800f}, + {0.363900f, -1.243700f, 0.619600f}, + {0.363900f, -1.243700f, 0.619600f}, + {0.000000f, -1.243700f, 0.716200f}, + {0.000000f, -1.243700f, 0.692100f}, + {0.000000f, -1.243700f, 0.716200f}, + {0.363900f, -1.243700f, 0.619600f}, + {0.381100f, -1.200000f, 0.648900f}, + {0.381100f, -1.200000f, 0.648900f}, + {0.000000f, -1.200000f, 0.750000f}, + {0.000000f, -1.243700f, 0.716200f}, + {0.355700f, -1.200000f, 0.605600f}, + {0.605600f, -1.200000f, 0.355700f}, + {0.598800f, -1.243700f, 0.351700f}, + {0.598800f, -1.243700f, 0.351700f}, + {0.351700f, -1.243700f, 0.598800f}, + {0.355700f, -1.200000f, 0.605600f}, + {0.351700f, -1.243700f, 0.598800f}, + {0.598800f, -1.243700f, 0.351700f}, + {0.619600f, -1.243700f, 0.363900f}, + {0.619600f, -1.243700f, 0.363900f}, + {0.363900f, -1.243700f, 0.619600f}, + {0.351700f, -1.243700f, 0.598800f}, + {0.363900f, -1.243700f, 0.619600f}, + {0.619600f, -1.243700f, 0.363900f}, + {0.648900f, -1.200000f, 0.381100f}, + {0.648900f, -1.200000f, 0.381100f}, + {0.381100f, -1.200000f, 0.648900f}, + {0.363900f, -1.243700f, 0.619600f}, + {0.605600f, -1.200000f, 0.355700f}, + {0.700000f, -1.200000f, 0.000000f}, + {0.692100f, -1.243700f, 0.000000f}, + {0.692100f, -1.243700f, 0.000000f}, + {0.598800f, -1.243700f, 0.351700f}, + {0.605600f, -1.200000f, 0.355700f}, + {0.598800f, -1.243700f, 0.351700f}, + {0.692100f, -1.243700f, 0.000000f}, + {0.716200f, -1.243700f, 0.000000f}, + {0.716200f, -1.243700f, 0.000000f}, + {0.619600f, -1.243700f, 0.363900f}, + {0.598800f, -1.243700f, 0.351700f}, + {0.619600f, -1.243700f, 0.363900f}, + {0.716200f, -1.243700f, 0.000000f}, + {0.750000f, -1.200000f, 0.000000f}, + {0.750000f, -1.200000f, 0.000000f}, + {0.648900f, -1.200000f, 0.381100f}, + {0.619600f, -1.243700f, 0.363900f}, + {0.750000f, -1.200000f, 0.000000f}, + {0.648900f, -1.200000f, -0.381100f}, + {0.753000f, -0.938900f, -0.442300f}, + {0.753000f, -0.938900f, -0.442300f}, + {0.870400f, -0.938900f, 0.000000f}, + {0.750000f, -1.200000f, 0.000000f}, + {0.870400f, -0.938900f, 0.000000f}, + {0.753000f, -0.938900f, -0.442300f}, + {0.833100f, -0.686100f, -0.489300f}, + {0.833100f, -0.686100f, -0.489300f}, + {0.963000f, -0.686100f, 0.000000f}, + {0.870400f, -0.938900f, 0.000000f}, + {0.963000f, -0.686100f, 0.000000f}, + {0.833100f, -0.686100f, -0.489300f}, + {0.865200f, -0.450000f, -0.508100f}, + {0.865200f, -0.450000f, -0.508100f}, + {1.000000f, -0.450000f, 0.000000f}, + {0.963000f, -0.686100f, 0.000000f}, + {0.648900f, -1.200000f, -0.381100f}, + {0.381100f, -1.200000f, -0.648900f}, + {0.442300f, -0.938900f, -0.753000f}, + {0.442300f, -0.938900f, -0.753000f}, + {0.753000f, -0.938900f, -0.442300f}, + {0.648900f, -1.200000f, -0.381100f}, + {0.753000f, -0.938900f, -0.442300f}, + {0.442300f, -0.938900f, -0.753000f}, + {0.489300f, -0.686100f, -0.833100f}, + {0.489300f, -0.686100f, -0.833100f}, + {0.833100f, -0.686100f, -0.489300f}, + {0.753000f, -0.938900f, -0.442300f}, + {0.833100f, -0.686100f, -0.489300f}, + {0.489300f, -0.686100f, -0.833100f}, + {0.508100f, -0.450000f, -0.865200f}, + {0.508100f, -0.450000f, -0.865200f}, + {0.865200f, -0.450000f, -0.508100f}, + {0.833100f, -0.686100f, -0.489300f}, + {0.381100f, -1.200000f, -0.648900f}, + {0.000000f, -1.200000f, -0.750000f}, + {0.000000f, -0.938900f, -0.870400f}, + {0.000000f, -0.938900f, -0.870400f}, + {0.442300f, -0.938900f, -0.753000f}, + {0.381100f, -1.200000f, -0.648900f}, + {0.442300f, -0.938900f, -0.753000f}, + {0.000000f, -0.938900f, -0.870400f}, + {0.000000f, -0.686100f, -0.963000f}, + {0.000000f, -0.686100f, -0.963000f}, + {0.489300f, -0.686100f, -0.833100f}, + {0.442300f, -0.938900f, -0.753000f}, + {0.489300f, -0.686100f, -0.833100f}, + {0.000000f, -0.686100f, -0.963000f}, + {0.000000f, -0.450000f, -1.000000f}, + {0.000000f, -0.450000f, -1.000000f}, + {0.508100f, -0.450000f, -0.865200f}, + {0.489300f, -0.686100f, -0.833100f}, + {0.000000f, -1.200000f, -0.750000f}, + {-0.381100f, -1.200000f, -0.648900f}, + {-0.442300f, -0.938900f, -0.753000f}, + {-0.442300f, -0.938900f, -0.753000f}, + {0.000000f, -0.938900f, -0.870400f}, + {0.000000f, -1.200000f, -0.750000f}, + {0.000000f, -0.938900f, -0.870400f}, + {-0.442300f, -0.938900f, -0.753000f}, + {-0.489300f, -0.686100f, -0.833100f}, + {-0.489300f, -0.686100f, -0.833100f}, + {0.000000f, -0.686100f, -0.963000f}, + {0.000000f, -0.938900f, -0.870400f}, + {0.000000f, -0.686100f, -0.963000f}, + {-0.489300f, -0.686100f, -0.833100f}, + {-0.508100f, -0.450000f, -0.865200f}, + {-0.508100f, -0.450000f, -0.865200f}, + {0.000000f, -0.450000f, -1.000000f}, + {0.000000f, -0.686100f, -0.963000f}, + {-0.381100f, -1.200000f, -0.648900f}, + {-0.648900f, -1.200000f, -0.381100f}, + {-0.753000f, -0.938900f, -0.442300f}, + {-0.753000f, -0.938900f, -0.442300f}, + {-0.442300f, -0.938900f, -0.753000f}, + {-0.381100f, -1.200000f, -0.648900f}, + {-0.442300f, -0.938900f, -0.753000f}, + {-0.753000f, -0.938900f, -0.442300f}, + {-0.833100f, -0.686100f, -0.489300f}, + {-0.833100f, -0.686100f, -0.489300f}, + {-0.489300f, -0.686100f, -0.833100f}, + {-0.442300f, -0.938900f, -0.753000f}, + {-0.489300f, -0.686100f, -0.833100f}, + {-0.833100f, -0.686100f, -0.489300f}, + {-0.865200f, -0.450000f, -0.508100f}, + {-0.865200f, -0.450000f, -0.508100f}, + {-0.508100f, -0.450000f, -0.865200f}, + {-0.489300f, -0.686100f, -0.833100f}, + {-0.648900f, -1.200000f, -0.381100f}, + {-0.750000f, -1.200000f, 0.000000f}, + {-0.870400f, -0.938900f, 0.000000f}, + {-0.870400f, -0.938900f, 0.000000f}, + {-0.753000f, -0.938900f, -0.442300f}, + {-0.648900f, -1.200000f, -0.381100f}, + {-0.753000f, -0.938900f, -0.442300f}, + {-0.870400f, -0.938900f, 0.000000f}, + {-0.963000f, -0.686100f, 0.000000f}, + {-0.963000f, -0.686100f, 0.000000f}, + {-0.833100f, -0.686100f, -0.489300f}, + {-0.753000f, -0.938900f, -0.442300f}, + {-0.833100f, -0.686100f, -0.489300f}, + {-0.963000f, -0.686100f, 0.000000f}, + {-1.000000f, -0.450000f, 0.000000f}, + {-1.000000f, -0.450000f, 0.000000f}, + {-0.865200f, -0.450000f, -0.508100f}, + {-0.833100f, -0.686100f, -0.489300f}, + {-0.750000f, -1.200000f, 0.000000f}, + {-0.648900f, -1.200000f, 0.381100f}, + {-0.753000f, -0.938900f, 0.442300f}, + {-0.753000f, -0.938900f, 0.442300f}, + {-0.870400f, -0.938900f, 0.000000f}, + {-0.750000f, -1.200000f, 0.000000f}, + {-0.870400f, -0.938900f, 0.000000f}, + {-0.753000f, -0.938900f, 0.442300f}, + {-0.833100f, -0.686100f, 0.489300f}, + {-0.833100f, -0.686100f, 0.489300f}, + {-0.963000f, -0.686100f, 0.000000f}, + {-0.870400f, -0.938900f, 0.000000f}, + {-0.963000f, -0.686100f, 0.000000f}, + {-0.833100f, -0.686100f, 0.489300f}, + {-0.865200f, -0.450000f, 0.508100f}, + {-0.865200f, -0.450000f, 0.508100f}, + {-1.000000f, -0.450000f, 0.000000f}, + {-0.963000f, -0.686100f, 0.000000f}, + {-0.648900f, -1.200000f, 0.381100f}, + {-0.381100f, -1.200000f, 0.648900f}, + {-0.442300f, -0.938900f, 0.753000f}, + {-0.442300f, -0.938900f, 0.753000f}, + {-0.753000f, -0.938900f, 0.442300f}, + {-0.648900f, -1.200000f, 0.381100f}, + {-0.753000f, -0.938900f, 0.442300f}, + {-0.442300f, -0.938900f, 0.753000f}, + {-0.489300f, -0.686100f, 0.833100f}, + {-0.489300f, -0.686100f, 0.833100f}, + {-0.833100f, -0.686100f, 0.489300f}, + {-0.753000f, -0.938900f, 0.442300f}, + {-0.833100f, -0.686100f, 0.489300f}, + {-0.489300f, -0.686100f, 0.833100f}, + {-0.508100f, -0.450000f, 0.865200f}, + {-0.508100f, -0.450000f, 0.865200f}, + {-0.865200f, -0.450000f, 0.508100f}, + {-0.833100f, -0.686100f, 0.489300f}, + {-0.381100f, -1.200000f, 0.648900f}, + {0.000000f, -1.200000f, 0.750000f}, + {0.000000f, -0.938900f, 0.870400f}, + {0.000000f, -0.938900f, 0.870400f}, + {-0.442300f, -0.938900f, 0.753000f}, + {-0.381100f, -1.200000f, 0.648900f}, + {-0.442300f, -0.938900f, 0.753000f}, + {0.000000f, -0.938900f, 0.870400f}, + {0.000000f, -0.686100f, 0.963000f}, + {0.000000f, -0.686100f, 0.963000f}, + {-0.489300f, -0.686100f, 0.833100f}, + {-0.442300f, -0.938900f, 0.753000f}, + {-0.489300f, -0.686100f, 0.833100f}, + {0.000000f, -0.686100f, 0.963000f}, + {0.000000f, -0.450000f, 1.000000f}, + {0.000000f, -0.450000f, 1.000000f}, + {-0.508100f, -0.450000f, 0.865200f}, + {-0.489300f, -0.686100f, 0.833100f}, + {0.000000f, -1.200000f, 0.750000f}, + {0.381100f, -1.200000f, 0.648900f}, + {0.442300f, -0.938900f, 0.753000f}, + {0.442300f, -0.938900f, 0.753000f}, + {0.000000f, -0.938900f, 0.870400f}, + {0.000000f, -1.200000f, 0.750000f}, + {0.000000f, -0.938900f, 0.870400f}, + {0.442300f, -0.938900f, 0.753000f}, + {0.489300f, -0.686100f, 0.833100f}, + {0.489300f, -0.686100f, 0.833100f}, + {0.000000f, -0.686100f, 0.963000f}, + {0.000000f, -0.938900f, 0.870400f}, + {0.000000f, -0.686100f, 0.963000f}, + {0.489300f, -0.686100f, 0.833100f}, + {0.508100f, -0.450000f, 0.865200f}, + {0.508100f, -0.450000f, 0.865200f}, + {0.000000f, -0.450000f, 1.000000f}, + {0.000000f, -0.686100f, 0.963000f}, + {0.381100f, -1.200000f, 0.648900f}, + {0.648900f, -1.200000f, 0.381100f}, + {0.753000f, -0.938900f, 0.442300f}, + {0.753000f, -0.938900f, 0.442300f}, + {0.442300f, -0.938900f, 0.753000f}, + {0.381100f, -1.200000f, 0.648900f}, + {0.442300f, -0.938900f, 0.753000f}, + {0.753000f, -0.938900f, 0.442300f}, + {0.833100f, -0.686100f, 0.489300f}, + {0.833100f, -0.686100f, 0.489300f}, + {0.489300f, -0.686100f, 0.833100f}, + {0.442300f, -0.938900f, 0.753000f}, + {0.489300f, -0.686100f, 0.833100f}, + {0.833100f, -0.686100f, 0.489300f}, + {0.865200f, -0.450000f, 0.508100f}, + {0.865200f, -0.450000f, 0.508100f}, + {0.508100f, -0.450000f, 0.865200f}, + {0.489300f, -0.686100f, 0.833100f}, + {0.648900f, -1.200000f, 0.381100f}, + {0.750000f, -1.200000f, 0.000000f}, + {0.870400f, -0.938900f, 0.000000f}, + {0.870400f, -0.938900f, 0.000000f}, + {0.753000f, -0.938900f, 0.442300f}, + {0.648900f, -1.200000f, 0.381100f}, + {0.753000f, -0.938900f, 0.442300f}, + {0.870400f, -0.938900f, 0.000000f}, + {0.963000f, -0.686100f, 0.000000f}, + {0.963000f, -0.686100f, 0.000000f}, + {0.833100f, -0.686100f, 0.489300f}, + {0.753000f, -0.938900f, 0.442300f}, + {0.833100f, -0.686100f, 0.489300f}, + {0.963000f, -0.686100f, 0.000000f}, + {1.000000f, -0.450000f, 0.000000f}, + {1.000000f, -0.450000f, 0.000000f}, + {0.865200f, -0.450000f, 0.508100f}, + {0.833100f, -0.686100f, 0.489300f}, + {1.000000f, -0.450000f, 0.000000f}, + {0.865200f, -0.450000f, -0.508100f}, + {0.809100f, -0.261100f, -0.475200f}, + {0.809100f, -0.261100f, -0.475200f}, + {0.935200f, -0.261100f, 0.000000f}, + {1.000000f, -0.450000f, 0.000000f}, + {0.935200f, -0.261100f, 0.000000f}, + {0.809100f, -0.261100f, -0.475200f}, + {0.705000f, -0.138900f, -0.414000f}, + {0.705000f, -0.138900f, -0.414000f}, + {0.814800f, -0.138900f, 0.000000f}, + {0.935200f, -0.261100f, 0.000000f}, + {0.814800f, -0.138900f, 0.000000f}, + {0.705000f, -0.138900f, -0.414000f}, + {0.648900f, -0.075000f, -0.381100f}, + {0.648900f, -0.075000f, -0.381100f}, + {0.750000f, -0.075000f, 0.000000f}, + {0.814800f, -0.138900f, 0.000000f}, + {0.865200f, -0.450000f, -0.508100f}, + {0.508100f, -0.450000f, -0.865200f}, + {0.475200f, -0.261100f, -0.809100f}, + {0.475200f, -0.261100f, -0.809100f}, + {0.809100f, -0.261100f, -0.475200f}, + {0.865200f, -0.450000f, -0.508100f}, + {0.809100f, -0.261100f, -0.475200f}, + {0.475200f, -0.261100f, -0.809100f}, + {0.414000f, -0.138900f, -0.705000f}, + {0.414000f, -0.138900f, -0.705000f}, + {0.705000f, -0.138900f, -0.414000f}, + {0.809100f, -0.261100f, -0.475200f}, + {0.705000f, -0.138900f, -0.414000f}, + {0.414000f, -0.138900f, -0.705000f}, + {0.381100f, -0.075000f, -0.648900f}, + {0.381100f, -0.075000f, -0.648900f}, + {0.648900f, -0.075000f, -0.381100f}, + {0.705000f, -0.138900f, -0.414000f}, + {0.508100f, -0.450000f, -0.865200f}, + {0.000000f, -0.450000f, -1.000000f}, + {0.000000f, -0.261100f, -0.935200f}, + {0.000000f, -0.261100f, -0.935200f}, + {0.475200f, -0.261100f, -0.809100f}, + {0.508100f, -0.450000f, -0.865200f}, + {0.475200f, -0.261100f, -0.809100f}, + {0.000000f, -0.261100f, -0.935200f}, + {0.000000f, -0.138900f, -0.814800f}, + {0.000000f, -0.138900f, -0.814800f}, + {0.414000f, -0.138900f, -0.705000f}, + {0.475200f, -0.261100f, -0.809100f}, + {0.414000f, -0.138900f, -0.705000f}, + {0.000000f, -0.138900f, -0.814800f}, + {0.000000f, -0.075000f, -0.750000f}, + {0.000000f, -0.075000f, -0.750000f}, + {0.381100f, -0.075000f, -0.648900f}, + {0.414000f, -0.138900f, -0.705000f}, + {0.000000f, -0.450000f, -1.000000f}, + {-0.508100f, -0.450000f, -0.865200f}, + {-0.475200f, -0.261100f, -0.809100f}, + {-0.475200f, -0.261100f, -0.809100f}, + {0.000000f, -0.261100f, -0.935200f}, + {0.000000f, -0.450000f, -1.000000f}, + {0.000000f, -0.261100f, -0.935200f}, + {-0.475200f, -0.261100f, -0.809100f}, + {-0.414000f, -0.138900f, -0.705000f}, + {-0.414000f, -0.138900f, -0.705000f}, + {0.000000f, -0.138900f, -0.814800f}, + {0.000000f, -0.261100f, -0.935200f}, + {0.000000f, -0.138900f, -0.814800f}, + {-0.414000f, -0.138900f, -0.705000f}, + {-0.381100f, -0.075000f, -0.648900f}, + {-0.381100f, -0.075000f, -0.648900f}, + {0.000000f, -0.075000f, -0.750000f}, + {0.000000f, -0.138900f, -0.814800f}, + {-0.508100f, -0.450000f, -0.865200f}, + {-0.865200f, -0.450000f, -0.508100f}, + {-0.809100f, -0.261100f, -0.475200f}, + {-0.809100f, -0.261100f, -0.475200f}, + {-0.475200f, -0.261100f, -0.809100f}, + {-0.508100f, -0.450000f, -0.865200f}, + {-0.475200f, -0.261100f, -0.809100f}, + {-0.809100f, -0.261100f, -0.475200f}, + {-0.705000f, -0.138900f, -0.414000f}, + {-0.705000f, -0.138900f, -0.414000f}, + {-0.414000f, -0.138900f, -0.705000f}, + {-0.475200f, -0.261100f, -0.809100f}, + {-0.414000f, -0.138900f, -0.705000f}, + {-0.705000f, -0.138900f, -0.414000f}, + {-0.648900f, -0.075000f, -0.381100f}, + {-0.648900f, -0.075000f, -0.381100f}, + {-0.381100f, -0.075000f, -0.648900f}, + {-0.414000f, -0.138900f, -0.705000f}, + {-0.865200f, -0.450000f, -0.508100f}, + {-1.000000f, -0.450000f, 0.000000f}, + {-0.935200f, -0.261100f, 0.000000f}, + {-0.935200f, -0.261100f, 0.000000f}, + {-0.809100f, -0.261100f, -0.475200f}, + {-0.865200f, -0.450000f, -0.508100f}, + {-0.809100f, -0.261100f, -0.475200f}, + {-0.935200f, -0.261100f, 0.000000f}, + {-0.814800f, -0.138900f, 0.000000f}, + {-0.814800f, -0.138900f, 0.000000f}, + {-0.705000f, -0.138900f, -0.414000f}, + {-0.809100f, -0.261100f, -0.475200f}, + {-0.705000f, -0.138900f, -0.414000f}, + {-0.814800f, -0.138900f, 0.000000f}, + {-0.750000f, -0.075000f, 0.000000f}, + {-0.750000f, -0.075000f, 0.000000f}, + {-0.648900f, -0.075000f, -0.381100f}, + {-0.705000f, -0.138900f, -0.414000f}, + {-1.000000f, -0.450000f, 0.000000f}, + {-0.865200f, -0.450000f, 0.508100f}, + {-0.809100f, -0.261100f, 0.475200f}, + {-0.809100f, -0.261100f, 0.475200f}, + {-0.935200f, -0.261100f, 0.000000f}, + {-1.000000f, -0.450000f, 0.000000f}, + {-0.935200f, -0.261100f, 0.000000f}, + {-0.809100f, -0.261100f, 0.475200f}, + {-0.705000f, -0.138900f, 0.414000f}, + {-0.705000f, -0.138900f, 0.414000f}, + {-0.814800f, -0.138900f, 0.000000f}, + {-0.935200f, -0.261100f, 0.000000f}, + {-0.814800f, -0.138900f, 0.000000f}, + {-0.705000f, -0.138900f, 0.414000f}, + {-0.648900f, -0.075000f, 0.381100f}, + {-0.648900f, -0.075000f, 0.381100f}, + {-0.750000f, -0.075000f, 0.000000f}, + {-0.814800f, -0.138900f, 0.000000f}, + {-0.865200f, -0.450000f, 0.508100f}, + {-0.508100f, -0.450000f, 0.865200f}, + {-0.475200f, -0.261100f, 0.809100f}, + {-0.475200f, -0.261100f, 0.809100f}, + {-0.809100f, -0.261100f, 0.475200f}, + {-0.865200f, -0.450000f, 0.508100f}, + {-0.809100f, -0.261100f, 0.475200f}, + {-0.475200f, -0.261100f, 0.809100f}, + {-0.414000f, -0.138900f, 0.705000f}, + {-0.414000f, -0.138900f, 0.705000f}, + {-0.705000f, -0.138900f, 0.414000f}, + {-0.809100f, -0.261100f, 0.475200f}, + {-0.705000f, -0.138900f, 0.414000f}, + {-0.414000f, -0.138900f, 0.705000f}, + {-0.381100f, -0.075000f, 0.648900f}, + {-0.381100f, -0.075000f, 0.648900f}, + {-0.648900f, -0.075000f, 0.381100f}, + {-0.705000f, -0.138900f, 0.414000f}, + {-0.508100f, -0.450000f, 0.865200f}, + {0.000000f, -0.450000f, 1.000000f}, + {0.000000f, -0.261100f, 0.935200f}, + {0.000000f, -0.261100f, 0.935200f}, + {-0.475200f, -0.261100f, 0.809100f}, + {-0.508100f, -0.450000f, 0.865200f}, + {-0.475200f, -0.261100f, 0.809100f}, + {0.000000f, -0.261100f, 0.935200f}, + {0.000000f, -0.138900f, 0.814800f}, + {0.000000f, -0.138900f, 0.814800f}, + {-0.414000f, -0.138900f, 0.705000f}, + {-0.475200f, -0.261100f, 0.809100f}, + {-0.414000f, -0.138900f, 0.705000f}, + {0.000000f, -0.138900f, 0.814800f}, + {0.000000f, -0.075000f, 0.750000f}, + {0.000000f, -0.075000f, 0.750000f}, + {-0.381100f, -0.075000f, 0.648900f}, + {-0.414000f, -0.138900f, 0.705000f}, + {0.000000f, -0.450000f, 1.000000f}, + {0.508100f, -0.450000f, 0.865200f}, + {0.475200f, -0.261100f, 0.809100f}, + {0.475200f, -0.261100f, 0.809100f}, + {0.000000f, -0.261100f, 0.935200f}, + {0.000000f, -0.450000f, 1.000000f}, + {0.000000f, -0.261100f, 0.935200f}, + {0.475200f, -0.261100f, 0.809100f}, + {0.414000f, -0.138900f, 0.705000f}, + {0.414000f, -0.138900f, 0.705000f}, + {0.000000f, -0.138900f, 0.814800f}, + {0.000000f, -0.261100f, 0.935200f}, + {0.000000f, -0.138900f, 0.814800f}, + {0.414000f, -0.138900f, 0.705000f}, + {0.381100f, -0.075000f, 0.648900f}, + {0.381100f, -0.075000f, 0.648900f}, + {0.000000f, -0.075000f, 0.750000f}, + {0.000000f, -0.138900f, 0.814800f}, + {0.508100f, -0.450000f, 0.865200f}, + {0.865200f, -0.450000f, 0.508100f}, + {0.809100f, -0.261100f, 0.475200f}, + {0.809100f, -0.261100f, 0.475200f}, + {0.475200f, -0.261100f, 0.809100f}, + {0.508100f, -0.450000f, 0.865200f}, + {0.475200f, -0.261100f, 0.809100f}, + {0.809100f, -0.261100f, 0.475200f}, + {0.705000f, -0.138900f, 0.414000f}, + {0.705000f, -0.138900f, 0.414000f}, + {0.414000f, -0.138900f, 0.705000f}, + {0.475200f, -0.261100f, 0.809100f}, + {0.414000f, -0.138900f, 0.705000f}, + {0.705000f, -0.138900f, 0.414000f}, + {0.648900f, -0.075000f, 0.381100f}, + {0.648900f, -0.075000f, 0.381100f}, + {0.381100f, -0.075000f, 0.648900f}, + {0.414000f, -0.138900f, 0.705000f}, + {0.865200f, -0.450000f, 0.508100f}, + {1.000000f, -0.450000f, 0.000000f}, + {0.935200f, -0.261100f, 0.000000f}, + {0.935200f, -0.261100f, 0.000000f}, + {0.809100f, -0.261100f, 0.475200f}, + {0.865200f, -0.450000f, 0.508100f}, + {0.809100f, -0.261100f, 0.475200f}, + {0.935200f, -0.261100f, 0.000000f}, + {0.814800f, -0.138900f, 0.000000f}, + {0.814800f, -0.138900f, 0.000000f}, + {0.705000f, -0.138900f, 0.414000f}, + {0.809100f, -0.261100f, 0.475200f}, + {0.705000f, -0.138900f, 0.414000f}, + {0.814800f, -0.138900f, 0.000000f}, + {0.750000f, -0.075000f, 0.000000f}, + {0.750000f, -0.075000f, 0.000000f}, + {0.648900f, -0.075000f, 0.381100f}, + {0.705000f, -0.138900f, 0.414000f}, + {0.750000f, -0.075000f, 0.000000f}, + {0.648900f, -0.075000f, -0.381100f}, + {0.617600f, -0.038900f, -0.362800f}, + {0.617600f, -0.038900f, -0.362800f}, + {0.713900f, -0.038900f, 0.000000f}, + {0.750000f, -0.075000f, 0.000000f}, + {0.713900f, -0.038900f, 0.000000f}, + {0.617600f, -0.038900f, -0.362800f}, + {0.442200f, -0.011100f, -0.259700f}, + {0.442200f, -0.011100f, -0.259700f}, + {0.511100f, -0.011100f, 0.000000f}, + {0.713900f, -0.038900f, 0.000000f}, + {0.511100f, -0.011100f, 0.000000f}, + {0.442200f, -0.011100f, -0.259700f}, + {0.000000f, 0.000000f, -0.000000f}, + {0.000000f, 0.000000f, -0.000000f}, + {0.000000f, 0.000000f, -0.000000f}, + {0.511100f, -0.011100f, 0.000000f}, + {0.648900f, -0.075000f, -0.381100f}, + {0.381100f, -0.075000f, -0.648900f}, + {0.362800f, -0.038900f, -0.617600f}, + {0.362800f, -0.038900f, -0.617600f}, + {0.617600f, -0.038900f, -0.362800f}, + {0.648900f, -0.075000f, -0.381100f}, + {0.617600f, -0.038900f, -0.362800f}, + {0.362800f, -0.038900f, -0.617600f}, + {0.259700f, -0.011100f, -0.442200f}, + {0.259700f, -0.011100f, -0.442200f}, + {0.442200f, -0.011100f, -0.259700f}, + {0.617600f, -0.038900f, -0.362800f}, + {0.442200f, -0.011100f, -0.259700f}, + {0.259700f, -0.011100f, -0.442200f}, + {0.000000f, 0.000000f, -0.000000f}, + {0.000000f, 0.000000f, -0.000000f}, + {0.000000f, 0.000000f, -0.000000f}, + {0.442200f, -0.011100f, -0.259700f}, + {0.381100f, -0.075000f, -0.648900f}, + {0.000000f, -0.075000f, -0.750000f}, + {0.000000f, -0.038900f, -0.713900f}, + {0.000000f, -0.038900f, -0.713900f}, + {0.362800f, -0.038900f, -0.617600f}, + {0.381100f, -0.075000f, -0.648900f}, + {0.362800f, -0.038900f, -0.617600f}, + {0.000000f, -0.038900f, -0.713900f}, + {0.000000f, -0.011100f, -0.511100f}, + {0.000000f, -0.011100f, -0.511100f}, + {0.259700f, -0.011100f, -0.442200f}, + {0.362800f, -0.038900f, -0.617600f}, + {0.259700f, -0.011100f, -0.442200f}, + {0.000000f, -0.011100f, -0.511100f}, + {0.000000f, 0.000000f, -0.000000f}, + {0.000000f, 0.000000f, -0.000000f}, + {0.000000f, 0.000000f, -0.000000f}, + {0.259700f, -0.011100f, -0.442200f}, + {0.000000f, -0.075000f, -0.750000f}, + {-0.381100f, -0.075000f, -0.648900f}, + {-0.362800f, -0.038900f, -0.617600f}, + {-0.362800f, -0.038900f, -0.617600f}, + {0.000000f, -0.038900f, -0.713900f}, + {0.000000f, -0.075000f, -0.750000f}, + {0.000000f, -0.038900f, -0.713900f}, + {-0.362800f, -0.038900f, -0.617600f}, + {-0.259700f, -0.011100f, -0.442200f}, + {-0.259700f, -0.011100f, -0.442200f}, + {0.000000f, -0.011100f, -0.511100f}, + {0.000000f, -0.038900f, -0.713900f}, + {0.000000f, -0.011100f, -0.511100f}, + {-0.259700f, -0.011100f, -0.442200f}, + {0.000000f, 0.000000f, -0.000000f}, + {0.000000f, 0.000000f, -0.000000f}, + {0.000000f, 0.000000f, -0.000000f}, + {0.000000f, -0.011100f, -0.511100f}, + {-0.381100f, -0.075000f, -0.648900f}, + {-0.648900f, -0.075000f, -0.381100f}, + {-0.617600f, -0.038900f, -0.362800f}, + {-0.617600f, -0.038900f, -0.362800f}, + {-0.362800f, -0.038900f, -0.617600f}, + {-0.381100f, -0.075000f, -0.648900f}, + {-0.362800f, -0.038900f, -0.617600f}, + {-0.617600f, -0.038900f, -0.362800f}, + {-0.442200f, -0.011100f, -0.259700f}, + {-0.442200f, -0.011100f, -0.259700f}, + {-0.259700f, -0.011100f, -0.442200f}, + {-0.362800f, -0.038900f, -0.617600f}, + {-0.259700f, -0.011100f, -0.442200f}, + {-0.442200f, -0.011100f, -0.259700f}, + {0.000000f, 0.000000f, -0.000000f}, + {0.000000f, 0.000000f, -0.000000f}, + {0.000000f, 0.000000f, -0.000000f}, + {-0.259700f, -0.011100f, -0.442200f}, + {-0.648900f, -0.075000f, -0.381100f}, + {-0.750000f, -0.075000f, 0.000000f}, + {-0.713900f, -0.038900f, 0.000000f}, + {-0.713900f, -0.038900f, 0.000000f}, + {-0.617600f, -0.038900f, -0.362800f}, + {-0.648900f, -0.075000f, -0.381100f}, + {-0.617600f, -0.038900f, -0.362800f}, + {-0.713900f, -0.038900f, 0.000000f}, + {-0.511100f, -0.011100f, 0.000000f}, + {-0.511100f, -0.011100f, 0.000000f}, + {-0.442200f, -0.011100f, -0.259700f}, + {-0.617600f, -0.038900f, -0.362800f}, + {-0.442200f, -0.011100f, -0.259700f}, + {-0.511100f, -0.011100f, 0.000000f}, + {0.000000f, 0.000000f, -0.000000f}, + {0.000000f, 0.000000f, -0.000000f}, + {0.000000f, 0.000000f, -0.000000f}, + {-0.442200f, -0.011100f, -0.259700f}, + {-0.750000f, -0.075000f, 0.000000f}, + {-0.648900f, -0.075000f, 0.381100f}, + {-0.617600f, -0.038900f, 0.362800f}, + {-0.617600f, -0.038900f, 0.362800f}, + {-0.713900f, -0.038900f, 0.000000f}, + {-0.750000f, -0.075000f, 0.000000f}, + {-0.713900f, -0.038900f, 0.000000f}, + {-0.617600f, -0.038900f, 0.362800f}, + {-0.442200f, -0.011100f, 0.259700f}, + {-0.442200f, -0.011100f, 0.259700f}, + {-0.511100f, -0.011100f, 0.000000f}, + {-0.713900f, -0.038900f, 0.000000f}, + {-0.511100f, -0.011100f, 0.000000f}, + {-0.442200f, -0.011100f, 0.259700f}, + {0.000000f, 0.000000f, -0.000000f}, + {0.000000f, 0.000000f, -0.000000f}, + {0.000000f, 0.000000f, -0.000000f}, + {-0.511100f, -0.011100f, 0.000000f}, + {-0.648900f, -0.075000f, 0.381100f}, + {-0.381100f, -0.075000f, 0.648900f}, + {-0.362800f, -0.038900f, 0.617600f}, + {-0.362800f, -0.038900f, 0.617600f}, + {-0.617600f, -0.038900f, 0.362800f}, + {-0.648900f, -0.075000f, 0.381100f}, + {-0.617600f, -0.038900f, 0.362800f}, + {-0.362800f, -0.038900f, 0.617600f}, + {-0.259700f, -0.011100f, 0.442200f}, + {-0.259700f, -0.011100f, 0.442200f}, + {-0.442200f, -0.011100f, 0.259700f}, + {-0.617600f, -0.038900f, 0.362800f}, + {-0.442200f, -0.011100f, 0.259700f}, + {-0.259700f, -0.011100f, 0.442200f}, + {0.000000f, 0.000000f, -0.000000f}, + {0.000000f, 0.000000f, -0.000000f}, + {0.000000f, 0.000000f, -0.000000f}, + {-0.442200f, -0.011100f, 0.259700f}, + {-0.381100f, -0.075000f, 0.648900f}, + {0.000000f, -0.075000f, 0.750000f}, + {0.000000f, -0.038900f, 0.713900f}, + {0.000000f, -0.038900f, 0.713900f}, + {-0.362800f, -0.038900f, 0.617600f}, + {-0.381100f, -0.075000f, 0.648900f}, + {-0.362800f, -0.038900f, 0.617600f}, + {0.000000f, -0.038900f, 0.713900f}, + {0.000000f, -0.011100f, 0.511100f}, + {0.000000f, -0.011100f, 0.511100f}, + {-0.259700f, -0.011100f, 0.442200f}, + {-0.362800f, -0.038900f, 0.617600f}, + {-0.259700f, -0.011100f, 0.442200f}, + {0.000000f, -0.011100f, 0.511100f}, + {0.000000f, 0.000000f, -0.000000f}, + {0.000000f, 0.000000f, -0.000000f}, + {0.000000f, 0.000000f, -0.000000f}, + {-0.259700f, -0.011100f, 0.442200f}, + {0.000000f, -0.075000f, 0.750000f}, + {0.381100f, -0.075000f, 0.648900f}, + {0.362800f, -0.038900f, 0.617600f}, + {0.362800f, -0.038900f, 0.617600f}, + {0.000000f, -0.038900f, 0.713900f}, + {0.000000f, -0.075000f, 0.750000f}, + {0.000000f, -0.038900f, 0.713900f}, + {0.362800f, -0.038900f, 0.617600f}, + {0.259700f, -0.011100f, 0.442200f}, + {0.259700f, -0.011100f, 0.442200f}, + {0.000000f, -0.011100f, 0.511100f}, + {0.000000f, -0.038900f, 0.713900f}, + {0.000000f, -0.011100f, 0.511100f}, + {0.259700f, -0.011100f, 0.442200f}, + {0.000000f, 0.000000f, -0.000000f}, + {0.000000f, 0.000000f, -0.000000f}, + {0.000000f, 0.000000f, -0.000000f}, + {0.000000f, -0.011100f, 0.511100f}, + {0.381100f, -0.075000f, 0.648900f}, + {0.648900f, -0.075000f, 0.381100f}, + {0.617600f, -0.038900f, 0.362800f}, + {0.617600f, -0.038900f, 0.362800f}, + {0.362800f, -0.038900f, 0.617600f}, + {0.381100f, -0.075000f, 0.648900f}, + {0.362800f, -0.038900f, 0.617600f}, + {0.617600f, -0.038900f, 0.362800f}, + {0.442200f, -0.011100f, 0.259700f}, + {0.442200f, -0.011100f, 0.259700f}, + {0.259700f, -0.011100f, 0.442200f}, + {0.362800f, -0.038900f, 0.617600f}, + {0.259700f, -0.011100f, 0.442200f}, + {0.442200f, -0.011100f, 0.259700f}, + {0.000000f, 0.000000f, -0.000000f}, + {0.000000f, 0.000000f, -0.000000f}, + {0.000000f, 0.000000f, -0.000000f}, + {0.259700f, -0.011100f, 0.442200f}, + {0.648900f, -0.075000f, 0.381100f}, + {0.750000f, -0.075000f, 0.000000f}, + {0.713900f, -0.038900f, 0.000000f}, + {0.713900f, -0.038900f, 0.000000f}, + {0.617600f, -0.038900f, 0.362800f}, + {0.648900f, -0.075000f, 0.381100f}, + {0.617600f, -0.038900f, 0.362800f}, + {0.713900f, -0.038900f, 0.000000f}, + {0.511100f, -0.011100f, 0.000000f}, + {0.511100f, -0.011100f, 0.000000f}, + {0.442200f, -0.011100f, 0.259700f}, + {0.617600f, -0.038900f, 0.362800f}, + {0.442200f, -0.011100f, 0.259700f}, + {0.511100f, -0.011100f, 0.000000f}, + {0.000000f, 0.000000f, -0.000000f}, + {0.000000f, 0.000000f, -0.000000f}, + {0.000000f, 0.000000f, -0.000000f}, + {0.442200f, -0.011100f, 0.259700f}, + {-0.800000f, -1.012500f, 0.000000f}, + {-0.787000f, -1.041700f, -0.100000f}, + {-1.115900f, -1.036400f, -0.100000f}, + {-1.115900f, -1.036400f, -0.100000f}, + {-1.098100f, -1.008300f, 0.000000f}, + {-0.800000f, -1.012500f, 0.000000f}, + {-1.098100f, -1.008300f, 0.000000f}, + {-1.115900f, -1.036400f, -0.100000f}, + {-1.319300f, -0.999700f, -0.100000f}, + {-1.319300f, -0.999700f, -0.100000f}, + {-1.285200f, -0.979200f, 0.000000f}, + {-1.098100f, -1.008300f, 0.000000f}, + {-1.285200f, -0.979200f, 0.000000f}, + {-1.319300f, -0.999700f, -0.100000f}, + {-1.388900f, -0.900000f, -0.100000f}, + {-1.388900f, -0.900000f, -0.100000f}, + {-1.350000f, -0.900000f, 0.000000f}, + {-1.285200f, -0.979200f, 0.000000f}, + {-0.787000f, -1.041700f, -0.100000f}, + {-0.763000f, -1.095800f, -0.100000f}, + {-1.148900f, -1.088600f, -0.100000f}, + {-1.148900f, -1.088600f, -0.100000f}, + {-1.115900f, -1.036400f, -0.100000f}, + {-0.787000f, -1.041700f, -0.100000f}, + {-1.115900f, -1.036400f, -0.100000f}, + {-1.148900f, -1.088600f, -0.100000f}, + {-1.382600f, -1.037800f, -0.100000f}, + {-1.382600f, -1.037800f, -0.100000f}, + {-1.319300f, -0.999700f, -0.100000f}, + {-1.115900f, -1.036400f, -0.100000f}, + {-1.319300f, -0.999700f, -0.100000f}, + {-1.382600f, -1.037800f, -0.100000f}, + {-1.461100f, -0.900000f, -0.100000f}, + {-1.461100f, -0.900000f, -0.100000f}, + {-1.388900f, -0.900000f, -0.100000f}, + {-1.319300f, -0.999700f, -0.100000f}, + {-0.763000f, -1.095800f, -0.100000f}, + {-0.750000f, -1.125000f, 0.000000f}, + {-1.166700f, -1.116700f, 0.000000f}, + {-1.166700f, -1.116700f, 0.000000f}, + {-1.148900f, -1.088600f, -0.100000f}, + {-0.763000f, -1.095800f, -0.100000f}, + {-1.148900f, -1.088600f, -0.100000f}, + {-1.166700f, -1.116700f, 0.000000f}, + {-1.416700f, -1.058300f, 0.000000f}, + {-1.416700f, -1.058300f, 0.000000f}, + {-1.382600f, -1.037800f, -0.100000f}, + {-1.148900f, -1.088600f, -0.100000f}, + {-1.382600f, -1.037800f, -0.100000f}, + {-1.416700f, -1.058300f, 0.000000f}, + {-1.500000f, -0.900000f, 0.000000f}, + {-1.500000f, -0.900000f, 0.000000f}, + {-1.461100f, -0.900000f, -0.100000f}, + {-1.382600f, -1.037800f, -0.100000f}, + {-0.750000f, -1.125000f, 0.000000f}, + {-0.763000f, -1.095800f, 0.100000f}, + {-1.148900f, -1.088600f, 0.100000f}, + {-1.148900f, -1.088600f, 0.100000f}, + {-1.166700f, -1.116700f, 0.000000f}, + {-0.750000f, -1.125000f, 0.000000f}, + {-1.166700f, -1.116700f, 0.000000f}, + {-1.148900f, -1.088600f, 0.100000f}, + {-1.382600f, -1.037800f, 0.100000f}, + {-1.382600f, -1.037800f, 0.100000f}, + {-1.416700f, -1.058300f, 0.000000f}, + {-1.166700f, -1.116700f, 0.000000f}, + {-1.416700f, -1.058300f, 0.000000f}, + {-1.382600f, -1.037800f, 0.100000f}, + {-1.461100f, -0.900000f, 0.100000f}, + {-1.461100f, -0.900000f, 0.100000f}, + {-1.500000f, -0.900000f, 0.000000f}, + {-1.416700f, -1.058300f, 0.000000f}, + {-0.763000f, -1.095800f, 0.100000f}, + {-0.787000f, -1.041700f, 0.100000f}, + {-1.115900f, -1.036400f, 0.100000f}, + {-1.115900f, -1.036400f, 0.100000f}, + {-1.148900f, -1.088600f, 0.100000f}, + {-0.763000f, -1.095800f, 0.100000f}, + {-1.148900f, -1.088600f, 0.100000f}, + {-1.115900f, -1.036400f, 0.100000f}, + {-1.319300f, -0.999700f, 0.100000f}, + {-1.319300f, -0.999700f, 0.100000f}, + {-1.382600f, -1.037800f, 0.100000f}, + {-1.148900f, -1.088600f, 0.100000f}, + {-1.382600f, -1.037800f, 0.100000f}, + {-1.319300f, -0.999700f, 0.100000f}, + {-1.388900f, -0.900000f, 0.100000f}, + {-1.388900f, -0.900000f, 0.100000f}, + {-1.461100f, -0.900000f, 0.100000f}, + {-1.382600f, -1.037800f, 0.100000f}, + {-0.787000f, -1.041700f, 0.100000f}, + {-0.800000f, -1.012500f, 0.000000f}, + {-1.098100f, -1.008300f, 0.000000f}, + {-1.098100f, -1.008300f, 0.000000f}, + {-1.115900f, -1.036400f, 0.100000f}, + {-0.787000f, -1.041700f, 0.100000f}, + {-1.115900f, -1.036400f, 0.100000f}, + {-1.098100f, -1.008300f, 0.000000f}, + {-1.285200f, -0.979200f, 0.000000f}, + {-1.285200f, -0.979200f, 0.000000f}, + {-1.319300f, -0.999700f, 0.100000f}, + {-1.115900f, -1.036400f, 0.100000f}, + {-1.319300f, -0.999700f, 0.100000f}, + {-1.285200f, -0.979200f, 0.000000f}, + {-1.350000f, -0.900000f, 0.000000f}, + {-1.350000f, -0.900000f, 0.000000f}, + {-1.388900f, -0.900000f, 0.100000f}, + {-1.319300f, -0.999700f, 0.100000f}, + {-1.350000f, -0.900000f, 0.000000f}, + {-1.388900f, -0.900000f, -0.100000f}, + {-1.347500f, -0.738500f, -0.100000f}, + {-1.347500f, -0.738500f, -0.100000f}, + {-1.314800f, -0.758300f, 0.000000f}, + {-1.350000f, -0.900000f, 0.000000f}, + {-1.314800f, -0.758300f, 0.000000f}, + {-1.347500f, -0.738500f, -0.100000f}, + {-1.216700f, -0.562900f, -0.100000f}, + {-1.216700f, -0.562900f, -0.100000f}, + {-1.201900f, -0.591700f, 0.000000f}, + {-1.314800f, -0.758300f, 0.000000f}, + {-1.201900f, -0.591700f, 0.000000f}, + {-1.216700f, -0.562900f, -0.100000f}, + {-0.987000f, -0.411100f, -0.100000f}, + {-0.987000f, -0.411100f, -0.100000f}, + {-1.000000f, -0.450000f, 0.000000f}, + {-1.201900f, -0.591700f, 0.000000f}, + {-1.388900f, -0.900000f, -0.100000f}, + {-1.461100f, -0.900000f, -0.100000f}, + {-1.408100f, -0.701700f, -0.100000f}, + {-1.408100f, -0.701700f, -0.100000f}, + {-1.347500f, -0.738500f, -0.100000f}, + {-1.388900f, -0.900000f, -0.100000f}, + {-1.347500f, -0.738500f, -0.100000f}, + {-1.408100f, -0.701700f, -0.100000f}, + {-1.244400f, -0.509400f, -0.100000f}, + {-1.244400f, -0.509400f, -0.100000f}, + {-1.216700f, -0.562900f, -0.100000f}, + {-1.347500f, -0.738500f, -0.100000f}, + {-1.216700f, -0.562900f, -0.100000f}, + {-1.244400f, -0.509400f, -0.100000f}, + {-0.963000f, -0.338900f, -0.100000f}, + {-0.963000f, -0.338900f, -0.100000f}, + {-0.987000f, -0.411100f, -0.100000f}, + {-1.216700f, -0.562900f, -0.100000f}, + {-1.461100f, -0.900000f, -0.100000f}, + {-1.500000f, -0.900000f, 0.000000f}, + {-1.440700f, -0.681900f, 0.000000f}, + {-1.440700f, -0.681900f, 0.000000f}, + {-1.408100f, -0.701700f, -0.100000f}, + {-1.461100f, -0.900000f, -0.100000f}, + {-1.408100f, -0.701700f, -0.100000f}, + {-1.440700f, -0.681900f, 0.000000f}, + {-1.259300f, -0.480600f, 0.000000f}, + {-1.259300f, -0.480600f, 0.000000f}, + {-1.244400f, -0.509400f, -0.100000f}, + {-1.408100f, -0.701700f, -0.100000f}, + {-1.244400f, -0.509400f, -0.100000f}, + {-1.259300f, -0.480600f, 0.000000f}, + {-0.950000f, -0.300000f, 0.000000f}, + {-0.950000f, -0.300000f, 0.000000f}, + {-0.963000f, -0.338900f, -0.100000f}, + {-1.244400f, -0.509400f, -0.100000f}, + {-1.500000f, -0.900000f, 0.000000f}, + {-1.461100f, -0.900000f, 0.100000f}, + {-1.408100f, -0.701700f, 0.100000f}, + {-1.408100f, -0.701700f, 0.100000f}, + {-1.440700f, -0.681900f, 0.000000f}, + {-1.500000f, -0.900000f, 0.000000f}, + {-1.440700f, -0.681900f, 0.000000f}, + {-1.408100f, -0.701700f, 0.100000f}, + {-1.244400f, -0.509400f, 0.100000f}, + {-1.244400f, -0.509400f, 0.100000f}, + {-1.259300f, -0.480600f, 0.000000f}, + {-1.440700f, -0.681900f, 0.000000f}, + {-1.259300f, -0.480600f, 0.000000f}, + {-1.244400f, -0.509400f, 0.100000f}, + {-0.963000f, -0.338900f, 0.100000f}, + {-0.963000f, -0.338900f, 0.100000f}, + {-0.950000f, -0.300000f, 0.000000f}, + {-1.259300f, -0.480600f, 0.000000f}, + {-1.461100f, -0.900000f, 0.100000f}, + {-1.388900f, -0.900000f, 0.100000f}, + {-1.347500f, -0.738500f, 0.100000f}, + {-1.347500f, -0.738500f, 0.100000f}, + {-1.408100f, -0.701700f, 0.100000f}, + {-1.461100f, -0.900000f, 0.100000f}, + {-1.408100f, -0.701700f, 0.100000f}, + {-1.347500f, -0.738500f, 0.100000f}, + {-1.216700f, -0.562900f, 0.100000f}, + {-1.216700f, -0.562900f, 0.100000f}, + {-1.244400f, -0.509400f, 0.100000f}, + {-1.408100f, -0.701700f, 0.100000f}, + {-1.244400f, -0.509400f, 0.100000f}, + {-1.216700f, -0.562900f, 0.100000f}, + {-0.987000f, -0.411100f, 0.100000f}, + {-0.987000f, -0.411100f, 0.100000f}, + {-0.963000f, -0.338900f, 0.100000f}, + {-1.244400f, -0.509400f, 0.100000f}, + {-1.388900f, -0.900000f, 0.100000f}, + {-1.350000f, -0.900000f, 0.000000f}, + {-1.314800f, -0.758300f, 0.000000f}, + {-1.314800f, -0.758300f, 0.000000f}, + {-1.347500f, -0.738500f, 0.100000f}, + {-1.388900f, -0.900000f, 0.100000f}, + {-1.347500f, -0.738500f, 0.100000f}, + {-1.314800f, -0.758300f, 0.000000f}, + {-1.201900f, -0.591700f, 0.000000f}, + {-1.201900f, -0.591700f, 0.000000f}, + {-1.216700f, -0.562900f, 0.100000f}, + {-1.347500f, -0.738500f, 0.100000f}, + {-1.216700f, -0.562900f, 0.100000f}, + {-1.201900f, -0.591700f, 0.000000f}, + {-1.000000f, -0.450000f, 0.000000f}, + {-1.000000f, -0.450000f, 0.000000f}, + {-0.987000f, -0.411100f, 0.100000f}, + {-1.216700f, -0.562900f, 0.100000f}, + {0.850000f, -0.712500f, 0.000000f}, + {0.850000f, -0.605600f, -0.220000f}, + {1.169800f, -0.737100f, -0.184600f}, + {1.169800f, -0.737100f, -0.184600f}, + {1.135200f, -0.805600f, 0.000000f}, + {0.850000f, -0.712500f, 0.000000f}, + {1.135200f, -0.805600f, 0.000000f}, + {1.169800f, -0.737100f, -0.184600f}, + {1.274700f, -0.981400f, -0.118800f}, + {1.274700f, -0.981400f, -0.118800f}, + {1.231500f, -1.006900f, 0.000000f}, + {1.135200f, -0.805600f, 0.000000f}, + {1.231500f, -1.006900f, 0.000000f}, + {1.274700f, -0.981400f, -0.118800f}, + {1.427800f, -1.200000f, -0.083300f}, + {1.427800f, -1.200000f, -0.083300f}, + {1.350000f, -1.200000f, 0.000000f}, + {1.231500f, -1.006900f, 0.000000f}, + {0.850000f, -0.605600f, -0.220000f}, + {0.850000f, -0.406900f, -0.220000f}, + {1.234000f, -0.610100f, -0.184600f}, + {1.234000f, -0.610100f, -0.184600f}, + {1.169800f, -0.737100f, -0.184600f}, + {0.850000f, -0.605600f, -0.220000f}, + {1.169800f, -0.737100f, -0.184600f}, + {1.234000f, -0.610100f, -0.184600f}, + {1.354900f, -0.933900f, -0.118800f}, + {1.354900f, -0.933900f, -0.118800f}, + {1.274700f, -0.981400f, -0.118800f}, + {1.169800f, -0.737100f, -0.184600f}, + {1.274700f, -0.981400f, -0.118800f}, + {1.354900f, -0.933900f, -0.118800f}, + {1.572200f, -1.200000f, -0.083300f}, + {1.572200f, -1.200000f, -0.083300f}, + {1.427800f, -1.200000f, -0.083300f}, + {1.274700f, -0.981400f, -0.118800f}, + {0.850000f, -0.406900f, -0.220000f}, + {0.850000f, -0.300000f, 0.000000f}, + {1.268500f, -0.541700f, 0.000000f}, + {1.268500f, -0.541700f, 0.000000f}, + {1.234000f, -0.610100f, -0.184600f}, + {0.850000f, -0.406900f, -0.220000f}, + {1.234000f, -0.610100f, -0.184600f}, + {1.268500f, -0.541700f, 0.000000f}, + {1.398100f, -0.908300f, 0.000000f}, + {1.398100f, -0.908300f, 0.000000f}, + {1.354900f, -0.933900f, -0.118800f}, + {1.234000f, -0.610100f, -0.184600f}, + {1.354900f, -0.933900f, -0.118800f}, + {1.398100f, -0.908300f, 0.000000f}, + {1.650000f, -1.200000f, 0.000000f}, + {1.650000f, -1.200000f, 0.000000f}, + {1.572200f, -1.200000f, -0.083300f}, + {1.354900f, -0.933900f, -0.118800f}, + {0.850000f, -0.300000f, 0.000000f}, + {0.850000f, -0.406900f, 0.220000f}, + {1.234000f, -0.610100f, 0.184600f}, + {1.234000f, -0.610100f, 0.184600f}, + {1.268500f, -0.541700f, 0.000000f}, + {0.850000f, -0.300000f, 0.000000f}, + {1.268500f, -0.541700f, 0.000000f}, + {1.234000f, -0.610100f, 0.184600f}, + {1.354900f, -0.933900f, 0.118800f}, + {1.354900f, -0.933900f, 0.118800f}, + {1.398100f, -0.908300f, 0.000000f}, + {1.268500f, -0.541700f, 0.000000f}, + {1.398100f, -0.908300f, 0.000000f}, + {1.354900f, -0.933900f, 0.118800f}, + {1.572200f, -1.200000f, 0.083300f}, + {1.572200f, -1.200000f, 0.083300f}, + {1.650000f, -1.200000f, 0.000000f}, + {1.398100f, -0.908300f, 0.000000f}, + {0.850000f, -0.406900f, 0.220000f}, + {0.850000f, -0.605600f, 0.220000f}, + {1.169800f, -0.737100f, 0.184600f}, + {1.169800f, -0.737100f, 0.184600f}, + {1.234000f, -0.610100f, 0.184600f}, + {0.850000f, -0.406900f, 0.220000f}, + {1.234000f, -0.610100f, 0.184600f}, + {1.169800f, -0.737100f, 0.184600f}, + {1.274700f, -0.981400f, 0.118800f}, + {1.274700f, -0.981400f, 0.118800f}, + {1.354900f, -0.933900f, 0.118800f}, + {1.234000f, -0.610100f, 0.184600f}, + {1.354900f, -0.933900f, 0.118800f}, + {1.274700f, -0.981400f, 0.118800f}, + {1.427800f, -1.200000f, 0.083300f}, + {1.427800f, -1.200000f, 0.083300f}, + {1.572200f, -1.200000f, 0.083300f}, + {1.354900f, -0.933900f, 0.118800f}, + {0.850000f, -0.605600f, 0.220000f}, + {0.850000f, -0.712500f, 0.000000f}, + {1.135200f, -0.805600f, 0.000000f}, + {1.135200f, -0.805600f, 0.000000f}, + {1.169800f, -0.737100f, 0.184600f}, + {0.850000f, -0.605600f, 0.220000f}, + {1.169800f, -0.737100f, 0.184600f}, + {1.135200f, -0.805600f, 0.000000f}, + {1.231500f, -1.006900f, 0.000000f}, + {1.231500f, -1.006900f, 0.000000f}, + {1.274700f, -0.981400f, 0.118800f}, + {1.169800f, -0.737100f, 0.184600f}, + {1.274700f, -0.981400f, 0.118800f}, + {1.231500f, -1.006900f, 0.000000f}, + {1.350000f, -1.200000f, 0.000000f}, + {1.350000f, -1.200000f, 0.000000f}, + {1.427800f, -1.200000f, 0.083300f}, + {1.274700f, -0.981400f, 0.118800f}, + {1.350000f, -1.200000f, 0.000000f}, + {1.427800f, -1.200000f, -0.083300f}, + {1.478900f, -1.227200f, -0.074700f}, + {1.478900f, -1.227200f, -0.074700f}, + {1.396300f, -1.225000f, 0.000000f}, + {1.350000f, -1.200000f, 0.000000f}, + {1.396300f, -1.225000f, 0.000000f}, + {1.478900f, -1.227200f, -0.074700f}, + {1.491200f, -1.227700f, -0.058600f}, + {1.491200f, -1.227700f, -0.058600f}, + {1.420400f, -1.225000f, 0.000000f}, + {1.396300f, -1.225000f, 0.000000f}, + {1.420400f, -1.225000f, 0.000000f}, + {1.491200f, -1.227700f, -0.058600f}, + {1.451900f, -1.200000f, -0.050000f}, + {1.451900f, -1.200000f, -0.050000f}, + {1.400000f, -1.200000f, 0.000000f}, + {1.420400f, -1.225000f, 0.000000f}, + {1.427800f, -1.200000f, -0.083300f}, + {1.572200f, -1.200000f, -0.083300f}, + {1.632200f, -1.231200f, -0.074700f}, + {1.632200f, -1.231200f, -0.074700f}, + {1.478900f, -1.227200f, -0.074700f}, + {1.427800f, -1.200000f, -0.083300f}, + {1.478900f, -1.227200f, -0.074700f}, + {1.632200f, -1.231200f, -0.074700f}, + {1.622700f, -1.232700f, -0.058600f}, + {1.622700f, -1.232700f, -0.058600f}, + {1.491200f, -1.227700f, -0.058600f}, + {1.478900f, -1.227200f, -0.074700f}, + {1.491200f, -1.227700f, -0.058600f}, + {1.622700f, -1.232700f, -0.058600f}, + {1.548100f, -1.200000f, -0.050000f}, + {1.548100f, -1.200000f, -0.050000f}, + {1.451900f, -1.200000f, -0.050000f}, + {1.491200f, -1.227700f, -0.058600f}, + {1.572200f, -1.200000f, -0.083300f}, + {1.650000f, -1.200000f, 0.000000f}, + {1.714800f, -1.233300f, 0.000000f}, + {1.714800f, -1.233300f, 0.000000f}, + {1.632200f, -1.231200f, -0.074700f}, + {1.572200f, -1.200000f, -0.083300f}, + {1.632200f, -1.231200f, -0.074700f}, + {1.714800f, -1.233300f, 0.000000f}, + {1.693500f, -1.235400f, 0.000000f}, + {1.693500f, -1.235400f, 0.000000f}, + {1.622700f, -1.232700f, -0.058600f}, + {1.632200f, -1.231200f, -0.074700f}, + {1.622700f, -1.232700f, -0.058600f}, + {1.693500f, -1.235400f, 0.000000f}, + {1.600000f, -1.200000f, 0.000000f}, + {1.600000f, -1.200000f, 0.000000f}, + {1.548100f, -1.200000f, -0.050000f}, + {1.622700f, -1.232700f, -0.058600f}, + {1.650000f, -1.200000f, 0.000000f}, + {1.572200f, -1.200000f, 0.083300f}, + {1.632200f, -1.231200f, 0.074700f}, + {1.632200f, -1.231200f, 0.074700f}, + {1.714800f, -1.233300f, 0.000000f}, + {1.650000f, -1.200000f, 0.000000f}, + {1.714800f, -1.233300f, 0.000000f}, + {1.632200f, -1.231200f, 0.074700f}, + {1.622700f, -1.232700f, 0.058600f}, + {1.622700f, -1.232700f, 0.058600f}, + {1.693500f, -1.235400f, 0.000000f}, + {1.714800f, -1.233300f, 0.000000f}, + {1.693500f, -1.235400f, 0.000000f}, + {1.622700f, -1.232700f, 0.058600f}, + {1.548100f, -1.200000f, 0.050000f}, + {1.548100f, -1.200000f, 0.050000f}, + {1.600000f, -1.200000f, 0.000000f}, + {1.693500f, -1.235400f, 0.000000f}, + {1.572200f, -1.200000f, 0.083300f}, + {1.427800f, -1.200000f, 0.083300f}, + {1.478900f, -1.227200f, 0.074700f}, + {1.478900f, -1.227200f, 0.074700f}, + {1.632200f, -1.231200f, 0.074700f}, + {1.572200f, -1.200000f, 0.083300f}, + {1.632200f, -1.231200f, 0.074700f}, + {1.478900f, -1.227200f, 0.074700f}, + {1.491200f, -1.227700f, 0.058600f}, + {1.491200f, -1.227700f, 0.058600f}, + {1.622700f, -1.232700f, 0.058600f}, + {1.632200f, -1.231200f, 0.074700f}, + {1.622700f, -1.232700f, 0.058600f}, + {1.491200f, -1.227700f, 0.058600f}, + {1.451900f, -1.200000f, 0.050000f}, + {1.451900f, -1.200000f, 0.050000f}, + {1.548100f, -1.200000f, 0.050000f}, + {1.622700f, -1.232700f, 0.058600f}, + {1.427800f, -1.200000f, 0.083300f}, + {1.350000f, -1.200000f, 0.000000f}, + {1.396300f, -1.225000f, 0.000000f}, + {1.396300f, -1.225000f, 0.000000f}, + {1.478900f, -1.227200f, 0.074700f}, + {1.427800f, -1.200000f, 0.083300f}, + {1.478900f, -1.227200f, 0.074700f}, + {1.396300f, -1.225000f, 0.000000f}, + {1.420400f, -1.225000f, 0.000000f}, + {1.420400f, -1.225000f, 0.000000f}, + {1.491200f, -1.227700f, 0.058600f}, + {1.478900f, -1.227200f, 0.074700f}, + {1.491200f, -1.227700f, 0.058600f}, + {1.420400f, -1.225000f, 0.000000f}, + {1.400000f, -1.200000f, 0.000000f}, + {1.400000f, -1.200000f, 0.000000f}, + {1.451900f, -1.200000f, 0.050000f}, + {1.491200f, -1.227700f, 0.058600f}, + {0.000000f, -1.575000f, 0.000000f}, + {0.000000f, -1.575000f, 0.000000f}, + {0.157100f, -1.533300f, -0.092400f}, + {0.157100f, -1.533300f, -0.092400f}, + {0.181500f, -1.533300f, 0.000000f}, + {0.000000f, -1.575000f, 0.000000f}, + {0.181500f, -1.533300f, 0.000000f}, + {0.157100f, -1.533300f, -0.092400f}, + {0.102600f, -1.441700f, -0.060300f}, + {0.102600f, -1.441700f, -0.060300f}, + {0.118500f, -1.441700f, 0.000000f}, + {0.181500f, -1.533300f, 0.000000f}, + {0.118500f, -1.441700f, 0.000000f}, + {0.102600f, -1.441700f, -0.060300f}, + {0.086500f, -1.350000f, -0.050800f}, + {0.086500f, -1.350000f, -0.050800f}, + {0.100000f, -1.350000f, 0.000000f}, + {0.118500f, -1.441700f, 0.000000f}, + {0.000000f, -1.575000f, 0.000000f}, + {0.000000f, -1.575000f, 0.000000f}, + {0.092400f, -1.533300f, -0.157100f}, + {0.092400f, -1.533300f, -0.157100f}, + {0.157100f, -1.533300f, -0.092400f}, + {0.000000f, -1.575000f, 0.000000f}, + {0.157100f, -1.533300f, -0.092400f}, + {0.092400f, -1.533300f, -0.157100f}, + {0.060300f, -1.441700f, -0.102600f}, + {0.060300f, -1.441700f, -0.102600f}, + {0.102600f, -1.441700f, -0.060300f}, + {0.157100f, -1.533300f, -0.092400f}, + {0.102600f, -1.441700f, -0.060300f}, + {0.060300f, -1.441700f, -0.102600f}, + {0.050800f, -1.350000f, -0.086500f}, + {0.050800f, -1.350000f, -0.086500f}, + {0.086500f, -1.350000f, -0.050800f}, + {0.102600f, -1.441700f, -0.060300f}, + {0.000000f, -1.575000f, 0.000000f}, + {0.000000f, -1.575000f, 0.000000f}, + {0.000000f, -1.533300f, -0.181500f}, + {0.000000f, -1.533300f, -0.181500f}, + {0.092400f, -1.533300f, -0.157100f}, + {0.000000f, -1.575000f, 0.000000f}, + {0.092400f, -1.533300f, -0.157100f}, + {0.000000f, -1.533300f, -0.181500f}, + {0.000000f, -1.441700f, -0.118500f}, + {0.000000f, -1.441700f, -0.118500f}, + {0.060300f, -1.441700f, -0.102600f}, + {0.092400f, -1.533300f, -0.157100f}, + {0.060300f, -1.441700f, -0.102600f}, + {0.000000f, -1.441700f, -0.118500f}, + {0.000000f, -1.350000f, -0.100000f}, + {0.000000f, -1.350000f, -0.100000f}, + {0.050800f, -1.350000f, -0.086500f}, + {0.060300f, -1.441700f, -0.102600f}, + {0.000000f, -1.575000f, 0.000000f}, + {0.000000f, -1.575000f, 0.000000f}, + {-0.092400f, -1.533300f, -0.157100f}, + {-0.092400f, -1.533300f, -0.157100f}, + {0.000000f, -1.533300f, -0.181500f}, + {0.000000f, -1.575000f, 0.000000f}, + {0.000000f, -1.533300f, -0.181500f}, + {-0.092400f, -1.533300f, -0.157100f}, + {-0.060300f, -1.441700f, -0.102600f}, + {-0.060300f, -1.441700f, -0.102600f}, + {0.000000f, -1.441700f, -0.118500f}, + {0.000000f, -1.533300f, -0.181500f}, + {0.000000f, -1.441700f, -0.118500f}, + {-0.060300f, -1.441700f, -0.102600f}, + {-0.050800f, -1.350000f, -0.086500f}, + {-0.050800f, -1.350000f, -0.086500f}, + {0.000000f, -1.350000f, -0.100000f}, + {0.000000f, -1.441700f, -0.118500f}, + {0.000000f, -1.575000f, 0.000000f}, + {0.000000f, -1.575000f, 0.000000f}, + {-0.157100f, -1.533300f, -0.092400f}, + {-0.157100f, -1.533300f, -0.092400f}, + {-0.092400f, -1.533300f, -0.157100f}, + {0.000000f, -1.575000f, 0.000000f}, + {-0.092400f, -1.533300f, -0.157100f}, + {-0.157100f, -1.533300f, -0.092400f}, + {-0.102600f, -1.441700f, -0.060300f}, + {-0.102600f, -1.441700f, -0.060300f}, + {-0.060300f, -1.441700f, -0.102600f}, + {-0.092400f, -1.533300f, -0.157100f}, + {-0.060300f, -1.441700f, -0.102600f}, + {-0.102600f, -1.441700f, -0.060300f}, + {-0.086500f, -1.350000f, -0.050800f}, + {-0.086500f, -1.350000f, -0.050800f}, + {-0.050800f, -1.350000f, -0.086500f}, + {-0.060300f, -1.441700f, -0.102600f}, + {0.000000f, -1.575000f, 0.000000f}, + {0.000000f, -1.575000f, 0.000000f}, + {-0.181500f, -1.533300f, 0.000000f}, + {-0.181500f, -1.533300f, 0.000000f}, + {-0.157100f, -1.533300f, -0.092400f}, + {0.000000f, -1.575000f, 0.000000f}, + {-0.157100f, -1.533300f, -0.092400f}, + {-0.181500f, -1.533300f, 0.000000f}, + {-0.118500f, -1.441700f, 0.000000f}, + {-0.118500f, -1.441700f, 0.000000f}, + {-0.102600f, -1.441700f, -0.060300f}, + {-0.157100f, -1.533300f, -0.092400f}, + {-0.102600f, -1.441700f, -0.060300f}, + {-0.118500f, -1.441700f, 0.000000f}, + {-0.100000f, -1.350000f, 0.000000f}, + {-0.100000f, -1.350000f, 0.000000f}, + {-0.086500f, -1.350000f, -0.050800f}, + {-0.102600f, -1.441700f, -0.060300f}, + {0.000000f, -1.575000f, 0.000000f}, + {0.000000f, -1.575000f, 0.000000f}, + {-0.157100f, -1.533300f, 0.092400f}, + {-0.157100f, -1.533300f, 0.092400f}, + {-0.181500f, -1.533300f, 0.000000f}, + {0.000000f, -1.575000f, 0.000000f}, + {-0.181500f, -1.533300f, 0.000000f}, + {-0.157100f, -1.533300f, 0.092400f}, + {-0.102600f, -1.441700f, 0.060300f}, + {-0.102600f, -1.441700f, 0.060300f}, + {-0.118500f, -1.441700f, 0.000000f}, + {-0.181500f, -1.533300f, 0.000000f}, + {-0.118500f, -1.441700f, 0.000000f}, + {-0.102600f, -1.441700f, 0.060300f}, + {-0.086500f, -1.350000f, 0.050800f}, + {-0.086500f, -1.350000f, 0.050800f}, + {-0.100000f, -1.350000f, 0.000000f}, + {-0.118500f, -1.441700f, 0.000000f}, + {0.000000f, -1.575000f, 0.000000f}, + {0.000000f, -1.575000f, 0.000000f}, + {-0.092400f, -1.533300f, 0.157100f}, + {-0.092400f, -1.533300f, 0.157100f}, + {-0.157100f, -1.533300f, 0.092400f}, + {0.000000f, -1.575000f, 0.000000f}, + {-0.157100f, -1.533300f, 0.092400f}, + {-0.092400f, -1.533300f, 0.157100f}, + {-0.060300f, -1.441700f, 0.102600f}, + {-0.060300f, -1.441700f, 0.102600f}, + {-0.102600f, -1.441700f, 0.060300f}, + {-0.157100f, -1.533300f, 0.092400f}, + {-0.102600f, -1.441700f, 0.060300f}, + {-0.060300f, -1.441700f, 0.102600f}, + {-0.050800f, -1.350000f, 0.086500f}, + {-0.050800f, -1.350000f, 0.086500f}, + {-0.086500f, -1.350000f, 0.050800f}, + {-0.102600f, -1.441700f, 0.060300f}, + {0.000000f, -1.575000f, 0.000000f}, + {0.000000f, -1.575000f, 0.000000f}, + {0.000000f, -1.533300f, 0.181500f}, + {0.000000f, -1.533300f, 0.181500f}, + {-0.092400f, -1.533300f, 0.157100f}, + {0.000000f, -1.575000f, 0.000000f}, + {-0.092400f, -1.533300f, 0.157100f}, + {0.000000f, -1.533300f, 0.181500f}, + {0.000000f, -1.441700f, 0.118500f}, + {0.000000f, -1.441700f, 0.118500f}, + {-0.060300f, -1.441700f, 0.102600f}, + {-0.092400f, -1.533300f, 0.157100f}, + {-0.060300f, -1.441700f, 0.102600f}, + {0.000000f, -1.441700f, 0.118500f}, + {0.000000f, -1.350000f, 0.100000f}, + {0.000000f, -1.350000f, 0.100000f}, + {-0.050800f, -1.350000f, 0.086500f}, + {-0.060300f, -1.441700f, 0.102600f}, + {0.000000f, -1.575000f, 0.000000f}, + {0.000000f, -1.575000f, 0.000000f}, + {0.092400f, -1.533300f, 0.157100f}, + {0.092400f, -1.533300f, 0.157100f}, + {0.000000f, -1.533300f, 0.181500f}, + {0.000000f, -1.575000f, 0.000000f}, + {0.000000f, -1.533300f, 0.181500f}, + {0.092400f, -1.533300f, 0.157100f}, + {0.060300f, -1.441700f, 0.102600f}, + {0.060300f, -1.441700f, 0.102600f}, + {0.000000f, -1.441700f, 0.118500f}, + {0.000000f, -1.533300f, 0.181500f}, + {0.000000f, -1.441700f, 0.118500f}, + {0.060300f, -1.441700f, 0.102600f}, + {0.050800f, -1.350000f, 0.086500f}, + {0.050800f, -1.350000f, 0.086500f}, + {0.000000f, -1.350000f, 0.100000f}, + {0.000000f, -1.441700f, 0.118500f}, + {0.000000f, -1.575000f, 0.000000f}, + {0.000000f, -1.575000f, 0.000000f}, + {0.157100f, -1.533300f, 0.092400f}, + {0.157100f, -1.533300f, 0.092400f}, + {0.092400f, -1.533300f, 0.157100f}, + {0.000000f, -1.575000f, 0.000000f}, + {0.092400f, -1.533300f, 0.157100f}, + {0.157100f, -1.533300f, 0.092400f}, + {0.102600f, -1.441700f, 0.060300f}, + {0.102600f, -1.441700f, 0.060300f}, + {0.060300f, -1.441700f, 0.102600f}, + {0.092400f, -1.533300f, 0.157100f}, + {0.060300f, -1.441700f, 0.102600f}, + {0.102600f, -1.441700f, 0.060300f}, + {0.086500f, -1.350000f, 0.050800f}, + {0.086500f, -1.350000f, 0.050800f}, + {0.050800f, -1.350000f, 0.086500f}, + {0.060300f, -1.441700f, 0.102600f}, + {0.000000f, -1.575000f, 0.000000f}, + {0.000000f, -1.575000f, 0.000000f}, + {0.181500f, -1.533300f, 0.000000f}, + {0.181500f, -1.533300f, 0.000000f}, + {0.157100f, -1.533300f, 0.092400f}, + {0.000000f, -1.575000f, 0.000000f}, + {0.157100f, -1.533300f, 0.092400f}, + {0.181500f, -1.533300f, 0.000000f}, + {0.118500f, -1.441700f, 0.000000f}, + {0.118500f, -1.441700f, 0.000000f}, + {0.102600f, -1.441700f, 0.060300f}, + {0.157100f, -1.533300f, 0.092400f}, + {0.102600f, -1.441700f, 0.060300f}, + {0.118500f, -1.441700f, 0.000000f}, + {0.100000f, -1.350000f, 0.000000f}, + {0.100000f, -1.350000f, 0.000000f}, + {0.086500f, -1.350000f, 0.050800f}, + {0.102600f, -1.441700f, 0.060300f}, + {0.100000f, -1.350000f, 0.000000f}, + {0.086500f, -1.350000f, -0.050800f}, + {0.248300f, -1.294400f, -0.145900f}, + {0.248300f, -1.294400f, -0.145900f}, + {0.287000f, -1.294400f, 0.000000f}, + {0.100000f, -1.350000f, 0.000000f}, + {0.287000f, -1.294400f, 0.000000f}, + {0.248300f, -1.294400f, -0.145900f}, + {0.458200f, -1.255600f, -0.269100f}, + {0.458200f, -1.255600f, -0.269100f}, + {0.529600f, -1.255600f, 0.000000f}, + {0.287000f, -1.294400f, 0.000000f}, + {0.529600f, -1.255600f, 0.000000f}, + {0.458200f, -1.255600f, -0.269100f}, + {0.562400f, -1.200000f, -0.330300f}, + {0.562400f, -1.200000f, -0.330300f}, + {0.650000f, -1.200000f, 0.000000f}, + {0.529600f, -1.255600f, 0.000000f}, + {0.086500f, -1.350000f, -0.050800f}, + {0.050800f, -1.350000f, -0.086500f}, + {0.145900f, -1.294400f, -0.248300f}, + {0.145900f, -1.294400f, -0.248300f}, + {0.248300f, -1.294400f, -0.145900f}, + {0.086500f, -1.350000f, -0.050800f}, + {0.248300f, -1.294400f, -0.145900f}, + {0.145900f, -1.294400f, -0.248300f}, + {0.269100f, -1.255600f, -0.458200f}, + {0.269100f, -1.255600f, -0.458200f}, + {0.458200f, -1.255600f, -0.269100f}, + {0.248300f, -1.294400f, -0.145900f}, + {0.458200f, -1.255600f, -0.269100f}, + {0.269100f, -1.255600f, -0.458200f}, + {0.330300f, -1.200000f, -0.562400f}, + {0.330300f, -1.200000f, -0.562400f}, + {0.562400f, -1.200000f, -0.330300f}, + {0.458200f, -1.255600f, -0.269100f}, + {0.050800f, -1.350000f, -0.086500f}, + {0.000000f, -1.350000f, -0.100000f}, + {0.000000f, -1.294400f, -0.287000f}, + {0.000000f, -1.294400f, -0.287000f}, + {0.145900f, -1.294400f, -0.248300f}, + {0.050800f, -1.350000f, -0.086500f}, + {0.145900f, -1.294400f, -0.248300f}, + {0.000000f, -1.294400f, -0.287000f}, + {0.000000f, -1.255600f, -0.529600f}, + {0.000000f, -1.255600f, -0.529600f}, + {0.269100f, -1.255600f, -0.458200f}, + {0.145900f, -1.294400f, -0.248300f}, + {0.269100f, -1.255600f, -0.458200f}, + {0.000000f, -1.255600f, -0.529600f}, + {0.000000f, -1.200000f, -0.650000f}, + {0.000000f, -1.200000f, -0.650000f}, + {0.330300f, -1.200000f, -0.562400f}, + {0.269100f, -1.255600f, -0.458200f}, + {0.000000f, -1.350000f, -0.100000f}, + {-0.050800f, -1.350000f, -0.086500f}, + {-0.145900f, -1.294400f, -0.248300f}, + {-0.145900f, -1.294400f, -0.248300f}, + {0.000000f, -1.294400f, -0.287000f}, + {0.000000f, -1.350000f, -0.100000f}, + {0.000000f, -1.294400f, -0.287000f}, + {-0.145900f, -1.294400f, -0.248300f}, + {-0.269100f, -1.255600f, -0.458200f}, + {-0.269100f, -1.255600f, -0.458200f}, + {0.000000f, -1.255600f, -0.529600f}, + {0.000000f, -1.294400f, -0.287000f}, + {0.000000f, -1.255600f, -0.529600f}, + {-0.269100f, -1.255600f, -0.458200f}, + {-0.330300f, -1.200000f, -0.562400f}, + {-0.330300f, -1.200000f, -0.562400f}, + {0.000000f, -1.200000f, -0.650000f}, + {0.000000f, -1.255600f, -0.529600f}, + {-0.050800f, -1.350000f, -0.086500f}, + {-0.086500f, -1.350000f, -0.050800f}, + {-0.248300f, -1.294400f, -0.145900f}, + {-0.248300f, -1.294400f, -0.145900f}, + {-0.145900f, -1.294400f, -0.248300f}, + {-0.050800f, -1.350000f, -0.086500f}, + {-0.145900f, -1.294400f, -0.248300f}, + {-0.248300f, -1.294400f, -0.145900f}, + {-0.458200f, -1.255600f, -0.269100f}, + {-0.458200f, -1.255600f, -0.269100f}, + {-0.269100f, -1.255600f, -0.458200f}, + {-0.145900f, -1.294400f, -0.248300f}, + {-0.269100f, -1.255600f, -0.458200f}, + {-0.458200f, -1.255600f, -0.269100f}, + {-0.562400f, -1.200000f, -0.330300f}, + {-0.562400f, -1.200000f, -0.330300f}, + {-0.330300f, -1.200000f, -0.562400f}, + {-0.269100f, -1.255600f, -0.458200f}, + {-0.086500f, -1.350000f, -0.050800f}, + {-0.100000f, -1.350000f, 0.000000f}, + {-0.287000f, -1.294400f, 0.000000f}, + {-0.287000f, -1.294400f, 0.000000f}, + {-0.248300f, -1.294400f, -0.145900f}, + {-0.086500f, -1.350000f, -0.050800f}, + {-0.248300f, -1.294400f, -0.145900f}, + {-0.287000f, -1.294400f, 0.000000f}, + {-0.529600f, -1.255600f, 0.000000f}, + {-0.529600f, -1.255600f, 0.000000f}, + {-0.458200f, -1.255600f, -0.269100f}, + {-0.248300f, -1.294400f, -0.145900f}, + {-0.458200f, -1.255600f, -0.269100f}, + {-0.529600f, -1.255600f, 0.000000f}, + {-0.650000f, -1.200000f, 0.000000f}, + {-0.650000f, -1.200000f, 0.000000f}, + {-0.562400f, -1.200000f, -0.330300f}, + {-0.458200f, -1.255600f, -0.269100f}, + {-0.100000f, -1.350000f, 0.000000f}, + {-0.086500f, -1.350000f, 0.050800f}, + {-0.248300f, -1.294400f, 0.145900f}, + {-0.248300f, -1.294400f, 0.145900f}, + {-0.287000f, -1.294400f, 0.000000f}, + {-0.100000f, -1.350000f, 0.000000f}, + {-0.287000f, -1.294400f, 0.000000f}, + {-0.248300f, -1.294400f, 0.145900f}, + {-0.458200f, -1.255600f, 0.269100f}, + {-0.458200f, -1.255600f, 0.269100f}, + {-0.529600f, -1.255600f, 0.000000f}, + {-0.287000f, -1.294400f, 0.000000f}, + {-0.529600f, -1.255600f, 0.000000f}, + {-0.458200f, -1.255600f, 0.269100f}, + {-0.562400f, -1.200000f, 0.330300f}, + {-0.562400f, -1.200000f, 0.330300f}, + {-0.650000f, -1.200000f, 0.000000f}, + {-0.529600f, -1.255600f, 0.000000f}, + {-0.086500f, -1.350000f, 0.050800f}, + {-0.050800f, -1.350000f, 0.086500f}, + {-0.145900f, -1.294400f, 0.248300f}, + {-0.145900f, -1.294400f, 0.248300f}, + {-0.248300f, -1.294400f, 0.145900f}, + {-0.086500f, -1.350000f, 0.050800f}, + {-0.248300f, -1.294400f, 0.145900f}, + {-0.145900f, -1.294400f, 0.248300f}, + {-0.269100f, -1.255600f, 0.458200f}, + {-0.269100f, -1.255600f, 0.458200f}, + {-0.458200f, -1.255600f, 0.269100f}, + {-0.248300f, -1.294400f, 0.145900f}, + {-0.458200f, -1.255600f, 0.269100f}, + {-0.269100f, -1.255600f, 0.458200f}, + {-0.330300f, -1.200000f, 0.562400f}, + {-0.330300f, -1.200000f, 0.562400f}, + {-0.562400f, -1.200000f, 0.330300f}, + {-0.458200f, -1.255600f, 0.269100f}, + {-0.050800f, -1.350000f, 0.086500f}, + {0.000000f, -1.350000f, 0.100000f}, + {0.000000f, -1.294400f, 0.287000f}, + {0.000000f, -1.294400f, 0.287000f}, + {-0.145900f, -1.294400f, 0.248300f}, + {-0.050800f, -1.350000f, 0.086500f}, + {-0.145900f, -1.294400f, 0.248300f}, + {0.000000f, -1.294400f, 0.287000f}, + {0.000000f, -1.255600f, 0.529600f}, + {0.000000f, -1.255600f, 0.529600f}, + {-0.269100f, -1.255600f, 0.458200f}, + {-0.145900f, -1.294400f, 0.248300f}, + {-0.269100f, -1.255600f, 0.458200f}, + {0.000000f, -1.255600f, 0.529600f}, + {0.000000f, -1.200000f, 0.650000f}, + {0.000000f, -1.200000f, 0.650000f}, + {-0.330300f, -1.200000f, 0.562400f}, + {-0.269100f, -1.255600f, 0.458200f}, + {0.000000f, -1.350000f, 0.100000f}, + {0.050800f, -1.350000f, 0.086500f}, + {0.145900f, -1.294400f, 0.248300f}, + {0.145900f, -1.294400f, 0.248300f}, + {0.000000f, -1.294400f, 0.287000f}, + {0.000000f, -1.350000f, 0.100000f}, + {0.000000f, -1.294400f, 0.287000f}, + {0.145900f, -1.294400f, 0.248300f}, + {0.269100f, -1.255600f, 0.458200f}, + {0.269100f, -1.255600f, 0.458200f}, + {0.000000f, -1.255600f, 0.529600f}, + {0.000000f, -1.294400f, 0.287000f}, + {0.000000f, -1.255600f, 0.529600f}, + {0.269100f, -1.255600f, 0.458200f}, + {0.330300f, -1.200000f, 0.562400f}, + {0.330300f, -1.200000f, 0.562400f}, + {0.000000f, -1.200000f, 0.650000f}, + {0.000000f, -1.255600f, 0.529600f}, + {0.050800f, -1.350000f, 0.086500f}, + {0.086500f, -1.350000f, 0.050800f}, + {0.248300f, -1.294400f, 0.145900f}, + {0.248300f, -1.294400f, 0.145900f}, + {0.145900f, -1.294400f, 0.248300f}, + {0.050800f, -1.350000f, 0.086500f}, + {0.145900f, -1.294400f, 0.248300f}, + {0.248300f, -1.294400f, 0.145900f}, + {0.458200f, -1.255600f, 0.269100f}, + {0.458200f, -1.255600f, 0.269100f}, + {0.269100f, -1.255600f, 0.458200f}, + {0.145900f, -1.294400f, 0.248300f}, + {0.269100f, -1.255600f, 0.458200f}, + {0.458200f, -1.255600f, 0.269100f}, + {0.562400f, -1.200000f, 0.330300f}, + {0.562400f, -1.200000f, 0.330300f}, + {0.330300f, -1.200000f, 0.562400f}, + {0.269100f, -1.255600f, 0.458200f}, + {0.086500f, -1.350000f, 0.050800f}, + {0.100000f, -1.350000f, 0.000000f}, + {0.287000f, -1.294400f, 0.000000f}, + {0.287000f, -1.294400f, 0.000000f}, + {0.248300f, -1.294400f, 0.145900f}, + {0.086500f, -1.350000f, 0.050800f}, + {0.248300f, -1.294400f, 0.145900f}, + {0.287000f, -1.294400f, 0.000000f}, + {0.529600f, -1.255600f, 0.000000f}, + {0.529600f, -1.255600f, 0.000000f}, + {0.458200f, -1.255600f, 0.269100f}, + {0.248300f, -1.294400f, 0.145900f}, + {0.458200f, -1.255600f, 0.269100f}, + {0.529600f, -1.255600f, 0.000000f}, + {0.650000f, -1.200000f, 0.000000f}, + {0.650000f, -1.200000f, 0.000000f}, + {0.562400f, -1.200000f, 0.330300f}, + {0.458200f, -1.255600f, 0.269100f} +}; + +uint16_t indexes[teapot_vertices] = { + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 132, + 133, + 134, + 135, + 136, + 137, + 138, + 139, + 140, + 141, + 142, + 143, + 144, + 145, + 146, + 147, + 148, + 149, + 150, + 151, + 152, + 153, + 154, + 155, + 156, + 157, + 158, + 159, + 160, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 170, + 171, + 172, + 173, + 174, + 175, + 176, + 177, + 178, + 179, + 180, + 181, + 182, + 183, + 184, + 185, + 186, + 187, + 188, + 189, + 190, + 191, + 192, + 193, + 194, + 195, + 196, + 197, + 198, + 199, + 200, + 201, + 202, + 203, + 204, + 205, + 206, + 207, + 208, + 209, + 210, + 211, + 212, + 213, + 214, + 215, + 216, + 217, + 218, + 219, + 220, + 221, + 222, + 223, + 224, + 225, + 226, + 227, + 228, + 229, + 230, + 231, + 232, + 233, + 234, + 235, + 236, + 237, + 238, + 239, + 240, + 241, + 242, + 243, + 244, + 245, + 246, + 247, + 248, + 249, + 250, + 251, + 252, + 253, + 254, + 255, + 256, + 257, + 258, + 259, + 260, + 261, + 262, + 263, + 264, + 265, + 266, + 267, + 268, + 269, + 270, + 271, + 272, + 273, + 274, + 275, + 276, + 277, + 278, + 279, + 280, + 281, + 282, + 283, + 284, + 285, + 286, + 287, + 288, + 289, + 290, + 291, + 292, + 293, + 294, + 295, + 296, + 297, + 298, + 299, + 300, + 301, + 302, + 303, + 304, + 305, + 306, + 307, + 308, + 309, + 310, + 311, + 312, + 313, + 314, + 315, + 316, + 317, + 318, + 319, + 320, + 321, + 322, + 323, + 324, + 325, + 326, + 327, + 328, + 329, + 330, + 331, + 332, + 333, + 334, + 335, + 336, + 337, + 338, + 339, + 340, + 341, + 342, + 343, + 344, + 345, + 346, + 347, + 348, + 349, + 350, + 351, + 352, + 353, + 354, + 355, + 356, + 357, + 358, + 359, + 360, + 361, + 362, + 363, + 364, + 365, + 366, + 367, + 368, + 369, + 370, + 371, + 372, + 373, + 374, + 375, + 376, + 377, + 378, + 379, + 380, + 381, + 382, + 383, + 384, + 385, + 386, + 387, + 388, + 389, + 390, + 391, + 392, + 393, + 394, + 395, + 396, + 397, + 398, + 399, + 400, + 401, + 402, + 403, + 404, + 405, + 406, + 407, + 408, + 409, + 410, + 411, + 412, + 413, + 414, + 415, + 416, + 417, + 418, + 419, + 420, + 421, + 422, + 423, + 424, + 425, + 426, + 427, + 428, + 429, + 430, + 431, + 432, + 433, + 434, + 435, + 436, + 437, + 438, + 439, + 440, + 441, + 442, + 443, + 444, + 445, + 446, + 447, + 448, + 449, + 450, + 451, + 452, + 453, + 454, + 455, + 456, + 457, + 458, + 459, + 460, + 461, + 462, + 463, + 464, + 465, + 466, + 467, + 468, + 469, + 470, + 471, + 472, + 473, + 474, + 475, + 476, + 477, + 478, + 479, + 480, + 481, + 482, + 483, + 484, + 485, + 486, + 487, + 488, + 489, + 490, + 491, + 492, + 493, + 494, + 495, + 496, + 497, + 498, + 499, + 500, + 501, + 502, + 503, + 504, + 505, + 506, + 507, + 508, + 509, + 510, + 511, + 512, + 513, + 514, + 515, + 516, + 517, + 518, + 519, + 520, + 521, + 522, + 523, + 524, + 525, + 526, + 527, + 528, + 529, + 530, + 531, + 532, + 533, + 534, + 535, + 536, + 537, + 538, + 539, + 540, + 541, + 542, + 543, + 544, + 545, + 546, + 547, + 548, + 549, + 550, + 551, + 552, + 553, + 554, + 555, + 556, + 557, + 558, + 559, + 560, + 561, + 562, + 563, + 564, + 565, + 566, + 567, + 568, + 569, + 570, + 571, + 572, + 573, + 574, + 575, + 576, + 577, + 578, + 579, + 580, + 581, + 582, + 583, + 584, + 585, + 586, + 587, + 588, + 589, + 590, + 591, + 592, + 593, + 594, + 595, + 596, + 597, + 598, + 599, + 600, + 601, + 602, + 603, + 604, + 605, + 606, + 607, + 608, + 609, + 610, + 611, + 612, + 613, + 614, + 615, + 616, + 617, + 618, + 619, + 620, + 621, + 622, + 623, + 624, + 625, + 626, + 627, + 628, + 629, + 630, + 631, + 632, + 633, + 634, + 635, + 636, + 637, + 638, + 639, + 640, + 641, + 642, + 643, + 644, + 645, + 646, + 647, + 648, + 649, + 650, + 651, + 652, + 653, + 654, + 655, + 656, + 657, + 658, + 659, + 660, + 661, + 662, + 663, + 664, + 665, + 666, + 667, + 668, + 669, + 670, + 671, + 672, + 673, + 674, + 675, + 676, + 677, + 678, + 679, + 680, + 681, + 682, + 683, + 684, + 685, + 686, + 687, + 688, + 689, + 690, + 691, + 692, + 693, + 694, + 695, + 696, + 697, + 698, + 699, + 700, + 701, + 702, + 703, + 704, + 705, + 706, + 707, + 708, + 709, + 710, + 711, + 712, + 713, + 714, + 715, + 716, + 717, + 718, + 719, + 720, + 721, + 722, + 723, + 724, + 725, + 726, + 727, + 728, + 729, + 730, + 731, + 732, + 733, + 734, + 735, + 736, + 737, + 738, + 739, + 740, + 741, + 742, + 743, + 744, + 745, + 746, + 747, + 748, + 749, + 750, + 751, + 752, + 753, + 754, + 755, + 756, + 757, + 758, + 759, + 760, + 761, + 762, + 763, + 764, + 765, + 766, + 767, + 768, + 769, + 770, + 771, + 772, + 773, + 774, + 775, + 776, + 777, + 778, + 779, + 780, + 781, + 782, + 783, + 784, + 785, + 786, + 787, + 788, + 789, + 790, + 791, + 792, + 793, + 794, + 795, + 796, + 797, + 798, + 799, + 800, + 801, + 802, + 803, + 804, + 805, + 806, + 807, + 808, + 809, + 810, + 811, + 812, + 813, + 814, + 815, + 816, + 817, + 818, + 819, + 820, + 821, + 822, + 823, + 824, + 825, + 826, + 827, + 828, + 829, + 830, + 831, + 832, + 833, + 834, + 835, + 836, + 837, + 838, + 839, + 840, + 841, + 842, + 843, + 844, + 845, + 846, + 847, + 848, + 849, + 850, + 851, + 852, + 853, + 854, + 855, + 856, + 857, + 858, + 859, + 860, + 861, + 862, + 863, + 864, + 865, + 866, + 867, + 868, + 869, + 870, + 871, + 872, + 873, + 874, + 875, + 876, + 877, + 878, + 879, + 880, + 881, + 882, + 883, + 884, + 885, + 886, + 887, + 888, + 889, + 890, + 891, + 892, + 893, + 894, + 895, + 896, + 897, + 898, + 899, + 900, + 901, + 902, + 903, + 904, + 905, + 906, + 907, + 908, + 909, + 910, + 911, + 912, + 913, + 914, + 915, + 916, + 917, + 918, + 919, + 920, + 921, + 922, + 923, + 924, + 925, + 926, + 927, + 928, + 929, + 930, + 931, + 932, + 933, + 934, + 935, + 936, + 937, + 938, + 939, + 940, + 941, + 942, + 943, + 944, + 945, + 946, + 947, + 948, + 949, + 950, + 951, + 952, + 953, + 954, + 955, + 956, + 957, + 958, + 959, + 960, + 961, + 962, + 963, + 964, + 965, + 966, + 967, + 968, + 969, + 970, + 971, + 972, + 973, + 974, + 975, + 976, + 977, + 978, + 979, + 980, + 981, + 982, + 983, + 984, + 985, + 986, + 987, + 988, + 989, + 990, + 991, + 992, + 993, + 994, + 995, + 996, + 997, + 998, + 999, + 1000, + 1001, + 1002, + 1003, + 1004, + 1005, + 1006, + 1007, + 1008, + 1009, + 1010, + 1011, + 1012, + 1013, + 1014, + 1015, + 1016, + 1017, + 1018, + 1019, + 1020, + 1021, + 1022, + 1023, + 1024, + 1025, + 1026, + 1027, + 1028, + 1029, + 1030, + 1031, + 1032, + 1033, + 1034, + 1035, + 1036, + 1037, + 1038, + 1039, + 1040, + 1041, + 1042, + 1043, + 1044, + 1045, + 1046, + 1047, + 1048, + 1049, + 1050, + 1051, + 1052, + 1053, + 1054, + 1055, + 1056, + 1057, + 1058, + 1059, + 1060, + 1061, + 1062, + 1063, + 1064, + 1065, + 1066, + 1067, + 1068, + 1069, + 1070, + 1071, + 1072, + 1073, + 1074, + 1075, + 1076, + 1077, + 1078, + 1079, + 1080, + 1081, + 1082, + 1083, + 1084, + 1085, + 1086, + 1087, + 1088, + 1089, + 1090, + 1091, + 1092, + 1093, + 1094, + 1095, + 1096, + 1097, + 1098, + 1099, + 1100, + 1101, + 1102, + 1103, + 1104, + 1105, + 1106, + 1107, + 1108, + 1109, + 1110, + 1111, + 1112, + 1113, + 1114, + 1115, + 1116, + 1117, + 1118, + 1119, + 1120, + 1121, + 1122, + 1123, + 1124, + 1125, + 1126, + 1127, + 1128, + 1129, + 1130, + 1131, + 1132, + 1133, + 1134, + 1135, + 1136, + 1137, + 1138, + 1139, + 1140, + 1141, + 1142, + 1143, + 1144, + 1145, + 1146, + 1147, + 1148, + 1149, + 1150, + 1151, + 1152, + 1153, + 1154, + 1155, + 1156, + 1157, + 1158, + 1159, + 1160, + 1161, + 1162, + 1163, + 1164, + 1165, + 1166, + 1167, + 1168, + 1169, + 1170, + 1171, + 1172, + 1173, + 1174, + 1175, + 1176, + 1177, + 1178, + 1179, + 1180, + 1181, + 1182, + 1183, + 1184, + 1185, + 1186, + 1187, + 1188, + 1189, + 1190, + 1191, + 1192, + 1193, + 1194, + 1195, + 1196, + 1197, + 1198, + 1199, + 1200, + 1201, + 1202, + 1203, + 1204, + 1205, + 1206, + 1207, + 1208, + 1209, + 1210, + 1211, + 1212, + 1213, + 1214, + 1215, + 1216, + 1217, + 1218, + 1219, + 1220, + 1221, + 1222, + 1223, + 1224, + 1225, + 1226, + 1227, + 1228, + 1229, + 1230, + 1231, + 1232, + 1233, + 1234, + 1235, + 1236, + 1237, + 1238, + 1239, + 1240, + 1241, + 1242, + 1243, + 1244, + 1245, + 1246, + 1247, + 1248, + 1249, + 1250, + 1251, + 1252, + 1253, + 1254, + 1255, + 1256, + 1257, + 1258, + 1259, + 1260, + 1261, + 1262, + 1263, + 1264, + 1265, + 1266, + 1267, + 1268, + 1269, + 1270, + 1271, + 1272, + 1273, + 1274, + 1275, + 1276, + 1277, + 1278, + 1279, + 1280, + 1281, + 1282, + 1283, + 1284, + 1285, + 1286, + 1287, + 1288, + 1289, + 1290, + 1291, + 1292, + 1293, + 1294, + 1295, + 1296, + 1297, + 1298, + 1299, + 1300, + 1301, + 1302, + 1303, + 1304, + 1305, + 1306, + 1307, + 1308, + 1309, + 1310, + 1311, + 1312, + 1313, + 1314, + 1315, + 1316, + 1317, + 1318, + 1319, + 1320, + 1321, + 1322, + 1323, + 1324, + 1325, + 1326, + 1327, + 1328, + 1329, + 1330, + 1331, + 1332, + 1333, + 1334, + 1335, + 1336, + 1337, + 1338, + 1339, + 1340, + 1341, + 1342, + 1343, + 1344, + 1345, + 1346, + 1347, + 1348, + 1349, + 1350, + 1351, + 1352, + 1353, + 1354, + 1355, + 1356, + 1357, + 1358, + 1359, + 1360, + 1361, + 1362, + 1363, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1371, + 1372, + 1373, + 1374, + 1375, + 1376, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1386, + 1387, + 1388, + 1389, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1399, + 1400, + 1401, + 1402, + 1403, + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1413, + 1414, + 1415, + 1416, + 1417, + 1418, + 1419, + 1420, + 1421, + 1422, + 1423, + 1424, + 1425, + 1426, + 1427, + 1428, + 1429, + 1430, + 1431, + 1432, + 1433, + 1434, + 1435, + 1436, + 1437, + 1438, + 1439, + 1440, + 1441, + 1442, + 1443, + 1444, + 1445, + 1446, + 1447, + 1448, + 1449, + 1450, + 1451, + 1452, + 1453, + 1454, + 1455, + 1456, + 1457, + 1458, + 1459, + 1460, + 1461, + 1462, + 1463, + 1464, + 1465, + 1466, + 1467, + 1468, + 1469, + 1470, + 1471, + 1472, + 1473, + 1474, + 1475, + 1476, + 1477, + 1478, + 1479, + 1480, + 1481, + 1482, + 1483, + 1484, + 1485, + 1486, + 1487, + 1488, + 1489, + 1490, + 1491, + 1492, + 1493, + 1494, + 1495, + 1496, + 1497, + 1498, + 1499, + 1500, + 1501, + 1502, + 1503, + 1504, + 1505, + 1506, + 1507, + 1508, + 1509, + 1510, + 1511, + 1512, + 1513, + 1514, + 1515, + 1516, + 1517, + 1518, + 1519, + 1520, + 1521, + 1522, + 1523, + 1524, + 1525, + 1526, + 1527, + 1528, + 1529, + 1530, + 1531, + 1532, + 1533, + 1534, + 1535, + 1536, + 1537, + 1538, + 1539, + 1540, + 1541, + 1542, + 1543, + 1544, + 1545, + 1546, + 1547, + 1548, + 1549, + 1550, + 1551, + 1552, + 1553, + 1554, + 1555, + 1556, + 1557, + 1558, + 1559, + 1560, + 1561, + 1562, + 1563, + 1564, + 1565, + 1566, + 1567, + 1568, + 1569, + 1570, + 1571, + 1572, + 1573, + 1574, + 1575, + 1576, + 1577, + 1578, + 1579, + 1580, + 1581, + 1582, + 1583, + 1584, + 1585, + 1586, + 1587, + 1588, + 1589, + 1590, + 1591, + 1592, + 1593, + 1594, + 1595, + 1596, + 1597, + 1598, + 1599, + 1600, + 1601, + 1602, + 1603, + 1604, + 1605, + 1606, + 1607, + 1608, + 1609, + 1610, + 1611, + 1612, + 1613, + 1614, + 1615, + 1616, + 1617, + 1618, + 1619, + 1620, + 1621, + 1622, + 1623, + 1624, + 1625, + 1626, + 1627, + 1628, + 1629, + 1630, + 1631, + 1632, + 1633, + 1634, + 1635, + 1636, + 1637, + 1638, + 1639, + 1640, + 1641, + 1642, + 1643, + 1644, + 1645, + 1646, + 1647, + 1648, + 1649, + 1650, + 1651, + 1652, + 1653, + 1654, + 1655, + 1656, + 1657, + 1658, + 1659, + 1660, + 1661, + 1662, + 1663, + 1664, + 1665, + 1666, + 1667, + 1668, + 1669, + 1670, + 1671, + 1672, + 1673, + 1674, + 1675, + 1676, + 1677, + 1678, + 1679, + 1680, + 1681, + 1682, + 1683, + 1684, + 1685, + 1686, + 1687, + 1688, + 1689, + 1690, + 1691, + 1692, + 1693, + 1694, + 1695, + 1696, + 1697, + 1698, + 1699, + 1700, + 1701, + 1702, + 1703, + 1704, + 1705, + 1706, + 1707, + 1708, + 1709, + 1710, + 1711, + 1712, + 1713, + 1714, + 1715, + 1716, + 1717, + 1718, + 1719, + 1720, + 1721, + 1722, + 1723, + 1724, + 1725, + 1726, + 1727 +}; + +Vec2f tex_coords = { 0.5, 0.5 }; +uint16_t tex_indexes[1728] = { 0 }; + +Mesh mesh_teapot = { + .indexes_count = teapot_vertices, + .positions = positions, + .pos_indices = indexes, + .tex_indices = tex_indexes, + .textCoord = &tex_coords +}; diff --git a/video/pingo/assets/teapot.h b/video/pingo/assets/teapot.h new file mode 100644 index 00000000..55855362 --- /dev/null +++ b/video/pingo/assets/teapot.h @@ -0,0 +1,3 @@ +#include "../render/mesh.h" + +extern Mesh mesh_teapot; diff --git a/video/pingo/math/mat3.c b/video/pingo/math/mat3.c new file mode 100644 index 00000000..091ae37e --- /dev/null +++ b/video/pingo/math/mat3.c @@ -0,0 +1,167 @@ +#include "mat3.h" +#include "vec2.h" + +#include +#include + +Mat3 mat3Identity() { + return (Mat3){{ + 1, 0, 0, + 0, 1, 0, + 0, 0, 1 + }}; +} + +Mat3 mat3Translate(Vec2f l) { + F_TYPE x = l.x; + F_TYPE y = l.y; + return (Mat3){{ + 1, 0, x, + 0, 1, y, + 0, 0, 1 + }}; +} + +Mat3 mat3Rotate(F_TYPE theta) { + F_TYPE s = sin(theta); + F_TYPE c = cos(theta); + return (Mat3){{ + c, -s, 0, + s, c, 0, + 0, 0, 1 + }}; +} + +extern Mat3 mat3Scale(Vec2f s) { + F_TYPE p = s.x; + F_TYPE q = s.y; + return (Mat3){{ + p, 0, 0, + 0, q, 0, + 0, 0, 1 + }}; +} + +Vec2f mat3Multiply(Vec2f *v, Mat3 *t) { + F_TYPE a = v->x * t->elements[0] + v->y * t->elements[1] + 1.0 * t->elements[2]; + F_TYPE b = v->x * t->elements[3] + v->y * t->elements[4] + 1.0 * t->elements[5]; + //F_TYPE c = v->x * t->elements[6] + v->y * t->elements[7] + 1.0 * t->elements[8]; + return (Vec2f){a,b}; +} + +Mat3 mat3MultiplyM( Mat3 * m1, Mat3 * m2) { + Mat3 out; + F_TYPE * a = m2->elements; + F_TYPE * b = m1->elements; + out.elements[0] = a[0] * b[0] + a[1] * b[3] + a[2] * b[6]; + out.elements[1] = a[0] * b[1] + a[1] * b[4] + a[2] * b[7]; + out.elements[2] = a[0] * b[2] + a[1] * b[5] + a[2] * b[8]; + out.elements[3] = a[3] * b[0] + a[4] * b[3] + a[5] * b[6]; + out.elements[4] = a[3] * b[1] + a[4] * b[4] + a[5] * b[7]; + out.elements[5] = a[3] * b[2] + a[4] * b[5] + a[5] * b[8]; + out.elements[6] = a[6] * b[0] + a[7] * b[3] + a[8] * b[6]; + out.elements[7] = a[6] * b[1] + a[7] * b[4] + a[8] * b[7]; + out.elements[8] = a[6] * b[2] + a[7] * b[5] + a[8] * b[8]; + return out; +} + +F_TYPE mat3Determinant(Mat3 * mat) +{ + F_TYPE * m = mat->elements; + return m[0] * (m[4] * m[8] - m[5] * m[7]) - + m[3] * (m[3] * m[8] - m[5] * m[6]) + + m[6] * (m[3] * m[7] - m[4] * m[6]); +} + +Mat3 mat3Inverse(Mat3 *v) +{ + F_TYPE * b = v->elements; + F_TYPE s = 1.0 / mat3Determinant(v); + + Mat3 out; + F_TYPE * a = out.elements; + + //calculate inverse + a[0] = (s) * (b[4] * b[8] - b[5] * b[7]); + a[1] = (s) * (b[2] * b[7] - b[1] * b[8]); + a[2] = (s) * (b[1] * b[5] - b[2] * b[4]); + a[3] = (s) * (b[5] * b[6] - b[3] * b[8]); + a[4] = (s) * (b[0] * b[8] - b[2] * b[6]); + a[5] = (s) * (b[2] * b[3] - b[0] * b[5]); + a[6] = (s) * (b[3] * b[7] - b[4] * b[6]); + a[7] = (s) * (b[1] * b[6] - b[0] * b[7]); + a[8] = (s) * (b[0] * b[4] - b[1] * b[3]); + + //homongenize the matrix so that homo coord is 1.0 + a[0] = a[0] / a[8]; + a[1] = a[1] / a[8]; + a[2] = a[2] / a[8]; + a[3] = a[3] / a[8]; + a[4] = a[4] / a[8]; + a[5] = a[5] / a[8]; + a[6] = a[6] / a[8]; + a[7] = a[7] / a[8]; + a[8] = a[8] / a[8]; + + return out; +} + +extern Mat3 mat3Complete( Vec2f origin, Vec2f translation, Vec2f scale, F_TYPE rotation ){ + int isRotated = rotation != 0; + int isScaled = scale.x != 1.0 || scale.y != 1.0; + + //This is just a translation + if (!isRotated && !isScaled) { + return mat3Translate(translation); + } + + //Transform is more complex, translate first in the origin + Mat3 m = mat3Translate((Vec2f){-origin.x,-origin.y}); + + //Apply rotation + if (isRotated) { + Mat3 r = mat3Rotate(rotation); + m = mat3MultiplyM(&m, &r); + } + + //Apply scale + if (isScaled) { + Mat3 s = mat3Scale(scale); + m = mat3MultiplyM(&m, &s); + } + + //Translate it to supposed location + Vec2f finalTranslation = {origin.x + translation.x, origin.y + translation.y}; + Mat3 t = mat3Translate(finalTranslation); + m = mat3MultiplyM(&m, &t); + + return m; +} + +int mat3IsOnlyTranslation(Mat3 *m ) +{ + if (m->elements[0] != 1.0) return 0; + if (m->elements[1] != 0.0) return 0; + //if (m->elements[2] != 0.0) return 0; This is a translation component + if (m->elements[3] != 0.0) return 0; + if (m->elements[4] != 1.0) return 0; + //if (m->elements[5] != 1.0) return 0; This is a translation component + if (m->elements[6] != 0.0) return 0; + if (m->elements[7] != 0.0) return 0; + if (m->elements[8] != 1.0) return 0; + return 1; +} + +int mat3IsOnlyTranslationDoubled(Mat3 *m) +{ + if (m->elements[0] != 2.0) return 0; + if (m->elements[1] != 0.0) return 0; + //if (m->elements[2] != 0.0) return 0; This is a translation component + if (m->elements[3] != 0.0) return 0; + if (m->elements[4] != 2.0) return 0; + //if (m->elements[5] != 1.0) return 0; This is a translation component + if (m->elements[6] != 0.0) return 0; + if (m->elements[7] != 0.0) return 0; + if (m->elements[8] != 1.0) return 0; + return 1; +} diff --git a/video/pingo/math/mat3.h b/video/pingo/math/mat3.h new file mode 100644 index 00000000..c4e0a2fb --- /dev/null +++ b/video/pingo/math/mat3.h @@ -0,0 +1,68 @@ +#pragma once +#include "types.h" +#include "vec2.h" + +#ifdef __cplusplus +extern "C" { +#endif + + +typedef struct Mat3 { + F_TYPE elements[9]; +} Mat3; + +/* Returns identity + |1|0|x| + |0|1|y| + |0|0|1| +*/ +extern Mat3 mat3Identity(); + +/* Builds a clean translation matrix with x and y translation along relative axes + |1|0|x| + |0|1|y| + |0|0|1| +*/ +extern Mat3 mat3Translate(Vec2f l); + +/* Builds a clean rotation matrix of Θ angle + | c(Θ) | -s(Θ) | 0 | + | s(Θ) | c(Θ) | 0 | + | 0 | 0 | 1 | +*/ +extern Mat3 mat3Rotate(float theta); + + +/* Builds a clean scale matrix of x, y scaling factors + | x | 0 | 0 | + | 0 | y | 0 | + | 0 | 0 | 1 | +*/ +extern Mat3 mat3Scale(Vec2f s); + +//Multiply 2 component vector b 3x3 matrix +extern Vec2f mat3Multiply(Vec2f * v, Mat3 * t); + +//Multiply 3x3 matrix with 3x3 matrix (v*t) +extern Mat3 mat3MultiplyM( Mat3 *v, Mat3 *t); + +//Calculate homogeneous inverse of matrix +extern Mat3 mat3Inverse( Mat3 *v ); + +/* Calculate a complete matrix transformation with translation rotation and scale working as expected + * Rotation and scaled are applied in reference to the provided origin + */ +extern Mat3 mat3Complete( Vec2f origin, Vec2f translation, Vec2f scale, float rotation ); + +//Calculate determinant of matrix +extern F_TYPE mat3Determinant(Mat3 * m); + +//If a matrix has only translation some optimization can be done during rendering. +extern int mat3IsOnlyTranslation(Mat3 *m); + +//If a matrix has only translation and doubles the size some optimization can be done during rendering. +extern int mat3IsOnlyTranslationDoubled(Mat3 *m); + +#ifdef __cplusplus +} +#endif diff --git a/video/pingo/math/mat4.c b/video/pingo/math/mat4.c new file mode 100644 index 00000000..2d16b56e --- /dev/null +++ b/video/pingo/math/mat4.c @@ -0,0 +1,318 @@ +#include "mat4.h" +#include "vec2.h" +#include "vec3.h" +#include "vec4.h" + +#include +#include + +Mat4 mat4Identity() { + return (Mat4){{ + 1, 0, 0, 0, + 0, 1, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1, + }}; +} + +Mat4 mat4Translate(Vec3f l) { + F_TYPE x = l.x; + F_TYPE y = l.y; + F_TYPE z = l.z; + return (Mat4){{ + 1, 0, 0, x, + 0, 1, 0, y, + 0, 0, 1, z, + 0, 0, 0, 1, + }}; +} + +Mat4 mat4RotateX(F_TYPE phi) { + F_TYPE s = sin(phi); + F_TYPE c = cos(phi); + return (Mat4){{ + 1, 0, 0, 0, + 0, c, -s, 0, + 0, s, c, 0, + 0, 0, 0, 1, + }}; +} +Mat4 mat4RotateY(F_TYPE phi) { + F_TYPE s = sin(phi); + F_TYPE c = cos(phi); + return (Mat4){{ + c, 0, s, 0, + 0, 1, 0, 0, + -s, 0, c, 0, + 0, 0, 0, 1, + }}; +} +Mat4 mat4RotateZ(F_TYPE phi) { + F_TYPE s = sin(phi); + F_TYPE c = cos(phi); + return (Mat4){{ + c, -s, 0, 0, + s, c, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1, + }}; +} + +extern Mat4 mat4Scale(Vec3f s) { + F_TYPE p = s.x; + F_TYPE q = s.y; + F_TYPE r = s.z; + return (Mat4){{ + p, 0, 0, 0, + 0, q, 0, 0, + 0, 0, r, 0, + 0, 0, 0, 1, + }}; +} + +Vec2f mat4MultiplyVec2(Vec2f *v, Mat4 *t) { + F_TYPE a = v->x * t->elements[0] + v->y * t->elements[1] + 1.0 * t->elements[2] + 1.0 * t->elements[3]; + F_TYPE b = v->x * t->elements[4] + v->y * t->elements[5] + 1.0 * t->elements[6] + 1.0 * t->elements[7]; + return (Vec2f){a,b}; +} + +Vec3f mat4MultiplyVec3(Vec3f *v, Mat4 *t) { + F_TYPE a = v->x * t->elements[0] + v->y * t->elements[1] + v->z * t->elements[2] + 1.0 * t->elements[3]; + F_TYPE b = v->x * t->elements[4] + v->y * t->elements[5] + v->z * t->elements[6] + 1.0 * t->elements[7]; + F_TYPE c = v->x * t->elements[8] + v->y * t->elements[9] + v->z * t->elements[10] + 1.0 * t->elements[11]; + return (Vec3f){a,b,c}; +} + +Vec4f mat4MultiplyVec4(Vec4f *v, Mat4 *t) { + F_TYPE a = v->x * t->elements[0] + v->y * t->elements[1] + v->z * t->elements[2] + 1.0 * t->elements[3]; + F_TYPE b = v->x * t->elements[4] + v->y * t->elements[5] + v->z * t->elements[6] + 1.0 * t->elements[7]; + F_TYPE c = v->x * t->elements[8] + v->y * t->elements[9] + v->z * t->elements[10] + 1.0 * t->elements[11]; + F_TYPE d = v->x * t->elements[12] + v->y * t->elements[13] + v->z * t->elements[14] + 1.0 * t->elements[15]; + return (Vec4f){a,b,c,d}; +} + +Vec4f mat4MultiplyVec4in( Vec4f *v, Mat4 *t ) { + F_TYPE a = v->x * t->elements[0] + v->y * t->elements[4] + v->z * t->elements[8] + 1.0 * t->elements[12]; + F_TYPE b = v->x * t->elements[1] + v->y * t->elements[5] + v->z * t->elements[9] + 1.0 * t->elements[13]; + F_TYPE c = v->x * t->elements[2] + v->y * t->elements[6] + v->z * t->elements[10] + 1.0 * t->elements[14]; + F_TYPE d = v->x * t->elements[3] + v->y * t->elements[7] + v->z * t->elements[1] + 1.0 * t->elements[15]; + return (Vec4f){a,b,c,d}; +} + +Mat4 mat4MultiplyM( Mat4 * m1, Mat4 * m2) { + Mat4 out; + F_TYPE * a = m2->elements; + F_TYPE * b = m1->elements; + + out.elements[0x0] = a[0x0] * b[0x0] + a[0x1] * b[0x4] + a[0x2] * b[0x8] + a[0x3] * b[0xc]; + out.elements[0x1] = a[0x0] * b[0x1] + a[0x1] * b[0x5] + a[0x2] * b[0x9] + a[0x3] * b[0xd]; + out.elements[0x2] = a[0x0] * b[0x2] + a[0x1] * b[0x6] + a[0x2] * b[0xa] + a[0x3] * b[0xe]; + out.elements[0x3] = a[0x0] * b[0x3] + a[0x1] * b[0x7] + a[0x2] * b[0xb] + a[0x3] * b[0xf]; + + out.elements[0x4] = a[0x4] * b[0x0] + a[0x5] * b[0x4] + a[0x6] * b[0x8] + a[0x7] * b[0xc]; + out.elements[0x5] = a[0x4] * b[0x1] + a[0x5] * b[0x5] + a[0x6] * b[0x9] + a[0x7] * b[0xd]; + out.elements[0x6] = a[0x4] * b[0x2] + a[0x5] * b[0x6] + a[0x6] * b[0xa] + a[0x7] * b[0xe]; + out.elements[0x7] = a[0x4] * b[0x3] + a[0x5] * b[0x7] + a[0x6] * b[0xb] + a[0x7] * b[0xf]; + + out.elements[0x8] = a[0x8] * b[0x0] + a[0x9] * b[0x4] + a[0xa] * b[0x8] + a[0xb] * b[0xc]; + out.elements[0x9] = a[0x8] * b[0x1] + a[0x9] * b[0x5] + a[0xa] * b[0x9] + a[0xb] * b[0xd]; + out.elements[0xA] = a[0x8] * b[0x2] + a[0x9] * b[0x6] + a[0xa] * b[0xa] + a[0xb] * b[0xe]; + out.elements[0xB] = a[0x8] * b[0x3] + a[0x9] * b[0x7] + a[0xa] * b[0xb] + a[0xb] * b[0xf]; + + out.elements[0xC] = a[0xc] * b[0x0] + a[0xd] * b[0x4] + a[0xe] * b[0x8] + a[0xf] * b[0xc]; + out.elements[0xD] = a[0xc] * b[0x1] + a[0xd] * b[0x5] + a[0xe] * b[0x9] + a[0xf] * b[0xd]; + out.elements[0xE] = a[0xc] * b[0x2] + a[0xd] * b[0x6] + a[0xe] * b[0xa] + a[0xf] * b[0xe]; + out.elements[0xF] = a[0xc] * b[0x3] + a[0xd] * b[0x7] + a[0xe] * b[0xb] + a[0xf] * b[0xf]; + + return out; +} + +F_TYPE mat4Determinant(Mat4 * mat) +{ + F_TYPE * a = mat->elements; + float a00 = a[0], a01 = a[1], a02 = a[2], a03 = a[3], + a10 = a[4], a11 = a[5], a12 = a[6], a13 = a[7], + a20 = a[8], a21 = a[9], a22 = a[10], a23 = a[11], + a30 = a[12], a31 = a[13], a32 = a[14], a33 = a[15]; + + F_TYPE b00 = a00 * a11 - a01 * a10; + F_TYPE b01 = a00 * a12 - a02 * a10; + F_TYPE b02 = a00 * a13 - a03 * a10; + F_TYPE b03 = a01 * a12 - a02 * a11; + F_TYPE b04 = a01 * a13 - a03 * a11; + F_TYPE b05 = a02 * a13 - a03 * a12; + F_TYPE b06 = a20 * a31 - a21 * a30; + F_TYPE b07 = a20 * a32 - a22 * a30; + F_TYPE b08 = a20 * a33 - a23 * a30; + F_TYPE b09 = a21 * a32 - a22 * a31; + F_TYPE b10 = a21 * a33 - a23 * a31; + F_TYPE b11 = a22 * a33 - a23 * a32; + + // Calculate the determinant + return b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06; +} + +Mat4 mat4Inverse(Mat4 * mat) +{ + F_TYPE * m = mat->elements; + float inv[16], det; + + inv[0] = m[5] * m[10] * m[15] - + m[5] * m[11] * m[14] - + m[9] * m[6] * m[15] + + m[9] * m[7] * m[14] + + m[13] * m[6] * m[11] - + m[13] * m[7] * m[10]; + + inv[4] = -m[4] * m[10] * m[15] + + m[4] * m[11] * m[14] + + m[8] * m[6] * m[15] - + m[8] * m[7] * m[14] - + m[12] * m[6] * m[11] + + m[12] * m[7] * m[10]; + + inv[8] = m[4] * m[9] * m[15] - + m[4] * m[11] * m[13] - + m[8] * m[5] * m[15] + + m[8] * m[7] * m[13] + + m[12] * m[5] * m[11] - + m[12] * m[7] * m[9]; + + inv[12] = -m[4] * m[9] * m[14] + + m[4] * m[10] * m[13] + + m[8] * m[5] * m[14] - + m[8] * m[6] * m[13] - + m[12] * m[5] * m[10] + + m[12] * m[6] * m[9]; + + inv[1] = -m[1] * m[10] * m[15] + + m[1] * m[11] * m[14] + + m[9] * m[2] * m[15] - + m[9] * m[3] * m[14] - + m[13] * m[2] * m[11] + + m[13] * m[3] * m[10]; + + inv[5] = m[0] * m[10] * m[15] - + m[0] * m[11] * m[14] - + m[8] * m[2] * m[15] + + m[8] * m[3] * m[14] + + m[12] * m[2] * m[11] - + m[12] * m[3] * m[10]; + + inv[9] = -m[0] * m[9] * m[15] + + m[0] * m[11] * m[13] + + m[8] * m[1] * m[15] - + m[8] * m[3] * m[13] - + m[12] * m[1] * m[11] + + m[12] * m[3] * m[9]; + + inv[13] = m[0] * m[9] * m[14] - + m[0] * m[10] * m[13] - + m[8] * m[1] * m[14] + + m[8] * m[2] * m[13] + + m[12] * m[1] * m[10] - + m[12] * m[2] * m[9]; + + inv[2] = m[1] * m[6] * m[15] - + m[1] * m[7] * m[14] - + m[5] * m[2] * m[15] + + m[5] * m[3] * m[14] + + m[13] * m[2] * m[7] - + m[13] * m[3] * m[6]; + + inv[6] = -m[0] * m[6] * m[15] + + m[0] * m[7] * m[14] + + m[4] * m[2] * m[15] - + m[4] * m[3] * m[14] - + m[12] * m[2] * m[7] + + m[12] * m[3] * m[6]; + + inv[10] = m[0] * m[5] * m[15] - + m[0] * m[7] * m[13] - + m[4] * m[1] * m[15] + + m[4] * m[3] * m[13] + + m[12] * m[1] * m[7] - + m[12] * m[3] * m[5]; + + inv[14] = -m[0] * m[5] * m[14] + + m[0] * m[6] * m[13] + + m[4] * m[1] * m[14] - + m[4] * m[2] * m[13] - + m[12] * m[1] * m[6] + + m[12] * m[2] * m[5]; + + inv[3] = -m[1] * m[6] * m[11] + + m[1] * m[7] * m[10] + + m[5] * m[2] * m[11] - + m[5] * m[3] * m[10] - + m[9] * m[2] * m[7] + + m[9] * m[3] * m[6]; + + inv[7] = m[0] * m[6] * m[11] - + m[0] * m[7] * m[10] - + m[4] * m[2] * m[11] + + m[4] * m[3] * m[10] + + m[8] * m[2] * m[7] - + m[8] * m[3] * m[6]; + + inv[11] = -m[0] * m[5] * m[11] + + m[0] * m[7] * m[9] + + m[4] * m[1] * m[11] - + m[4] * m[3] * m[9] - + m[8] * m[1] * m[7] + + m[8] * m[3] * m[5]; + + inv[15] = m[0] * m[5] * m[10] - + m[0] * m[6] * m[9] - + m[4] * m[1] * m[10] + + m[4] * m[2] * m[9] + + m[8] * m[1] * m[6] - + m[8] * m[2] * m[5]; + + det = m[0] * inv[0] + m[1] * inv[4] + m[2] * inv[8] + m[3] * inv[12]; + //assert(det != 0); + + Mat4 out; + det = 1.0 / det; + + for (int i = 0; i < 16; i++) + out.elements[i] = inv[i] * det; + + return out; +} + +Mat4 mat4Perspective(float near, float far, float aspect, float fov) +{ + float h = cos(fov/2.0) / sin(fov/2.0); + float w = h / aspect; + float nearFar = near * far; + float farNear = far - near; + + Mat4 m = {{ + w, 0, 0, 0, + 0, h, 0, 0, + 0, 0, far/(farNear), 1, + 0, 0, -nearFar/farNear, 0 + }}; + + return m; +} + +float mat4NearFromProjection(Mat4 mat) +{ + float C = mat.elements[10]; // 2 2 + float D = mat.elements[11]; // 2 3 + + return D / (C - 1.0); +} + +float mat4FarFromProjection(Mat4 mat) +{ + float C = mat.elements[10]; // 2 2 + float D = mat.elements[11]; // 2 3 + + return D / (C + 1.0); +} + + + diff --git a/video/pingo/math/mat4.h b/video/pingo/math/mat4.h new file mode 100644 index 00000000..b9242bb7 --- /dev/null +++ b/video/pingo/math/mat4.h @@ -0,0 +1,41 @@ +#pragma once + +#include "types.h" +#include "vec2.h" +#include "vec3.h" +#include "vec4.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct Mat4 { + F_TYPE elements[16]; +} Mat4; + +Mat4 mat4Identity(); +Mat4 mat4Translate(Vec3f l); + +Mat4 mat4RotateX(F_TYPE phi); +Mat4 mat4RotateY(F_TYPE phi); +Mat4 mat4RotateZ(F_TYPE phi); + +Vec2f mat4MultiplyVec2(Vec2f *v, Mat4 *t); +Vec3f mat4MultiplyVec3(Vec3f *v, Mat4 *t); + +Vec4f mat4MultiplyVec4(Vec4f *v, Mat4 *t); +Vec4f mat4MultiplyVec4in( Vec4f *v, Mat4 *t ); + +Mat4 mat4MultiplyM( Mat4 * m1, Mat4 * m2); +Mat4 mat4Inverse(Mat4 * mat); +Mat4 mat4Scale(Vec3f s); + +Mat4 mat4Perspective(float near, float far, float aspect, float fov); +Mat4 mat4Perspective(float near, float far, float aspect, float fov ); + +float mat4NearFromProjection(Mat4 mat); +float mat4FarFromProjection(Mat4 mat); + +#ifdef __cplusplus +} +#endif diff --git a/video/pingo/math/types.h b/video/pingo/math/types.h new file mode 100644 index 00000000..50450512 --- /dev/null +++ b/video/pingo/math/types.h @@ -0,0 +1,13 @@ +#pragma once + +/** + * @brief I_TYPE is the integer type used in the math libraries, change to the desired size + */ +typedef int I_TYPE; + +/** + * @brief F_TYPE is the floating point type used in the math libraries, change to the desired precision + */ +typedef float F_TYPE; + + diff --git a/video/pingo/math/vec2.c b/video/pingo/math/vec2.c new file mode 100644 index 00000000..29c304d8 --- /dev/null +++ b/video/pingo/math/vec2.c @@ -0,0 +1,16 @@ +#include "vec2.h" + +Vec2i vector2ISum(Vec2i l, Vec2i r) +{ + return (Vec2i){l.x+r.x,l.y+r.y}; +} + +Vec2f vecItoF(Vec2i v) +{ + return (Vec2f){v.x,v.y}; +} + +Vec2i vecFtoI(Vec2f v) +{ + return (Vec2i){v.x,v.y}; +} diff --git a/video/pingo/math/vec2.h b/video/pingo/math/vec2.h new file mode 100644 index 00000000..bc5bff0f --- /dev/null +++ b/video/pingo/math/vec2.h @@ -0,0 +1,27 @@ +#pragma once + +#include "types.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct Vec2i { + I_TYPE x; + I_TYPE y; +} Vec2i; + +typedef struct { + F_TYPE x; + F_TYPE y; +} Vec2f; + +extern Vec2i vector2ISum(Vec2i l, Vec2i r); + +extern Vec2f vecItoF(Vec2i v); + +extern Vec2i vecFtoI(Vec2f v); + +#ifdef __cplusplus +} +#endif diff --git a/video/pingo/math/vec3.c b/video/pingo/math/vec3.c new file mode 100644 index 00000000..fe671a00 --- /dev/null +++ b/video/pingo/math/vec3.c @@ -0,0 +1,62 @@ +#include "vec3.h" +#include + +Vec3f vec3fmul(Vec3f a, float b) +{ + a.x = a.x * b; + a.y = a.y * b; + a.z = a.z * b; + + return a; +} + +Vec3f vec3fsumV(Vec3f a, Vec3f b) +{ + a.x = a.x + b.x; + a.y = a.y + b.y; + a.z = a.z + b.z; + + return a; +} + +Vec3f vec3fsubV(Vec3f a, Vec3f b) +{ + a.x = a.x - b.x; + a.y = a.y - b.y; + a.z = a.z - b.z; + + return a; +} + +Vec3f vec3fsum(Vec3f a, float b) +{ + a.x = a.x + b; + a.y = a.y + b; + a.z = a.z + b; + + return a; +} + +float vec3Dot(Vec3f a, Vec3f b) +{ + return a.x * b.x + a.y * b.y + a.z * b.z; +} + +Vec3f vec3f(float x, float y, float z) +{ + return (Vec3f){x,y,z}; +} + +Vec3f vec3Cross(Vec3f a, Vec3f b) +{ + + return (Vec3f) {a.y * b.z - b.y * a.z, + a.z * b.x - b.z * a.x, + a.x * b.y - b.x * a.y}; +} + +Vec3f vec3Normalize(Vec3f v) +{ + float sqrt = sqrtf(v.x * v.x + v.y * v.y + v.z * v.z); + return (Vec3f){v.x / sqrt, v.y / sqrt, v.z / sqrt}; +} diff --git a/video/pingo/math/vec3.h b/video/pingo/math/vec3.h new file mode 100644 index 00000000..3c4a9b95 --- /dev/null +++ b/video/pingo/math/vec3.h @@ -0,0 +1,32 @@ +#pragma once + +#include "types.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct Vec3i { + I_TYPE x; + I_TYPE y; + I_TYPE z; +} Vec3i; + +typedef struct Vec3f { + F_TYPE x; + F_TYPE y; + F_TYPE z; +} Vec3f; + +Vec3f vec3f(float,float,float); +Vec3f vec3fmul(Vec3f,float); +Vec3f vec3fsumV(Vec3f,Vec3f); +Vec3f vec3fsubV(Vec3f,Vec3f); +Vec3f vec3fsum(Vec3f,float); +float vec3Dot(Vec3f,Vec3f); +Vec3f vec3Cross(Vec3f,Vec3f); +Vec3f vec3Normalize(Vec3f); + +#ifdef __cplusplus +} +#endif diff --git a/video/pingo/math/vec4.c b/video/pingo/math/vec4.c new file mode 100644 index 00000000..69dbf3c0 --- /dev/null +++ b/video/pingo/math/vec4.c @@ -0,0 +1 @@ +#include "vec4.h" diff --git a/video/pingo/math/vec4.h b/video/pingo/math/vec4.h new file mode 100644 index 00000000..5bc213c1 --- /dev/null +++ b/video/pingo/math/vec4.h @@ -0,0 +1,25 @@ +#pragma once + +#include "types.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct Vec4i { + I_TYPE x; + I_TYPE y; + I_TYPE z; + I_TYPE w; +} Vec4i; + +typedef struct Vec4f { + F_TYPE x; + F_TYPE y; + F_TYPE z; + F_TYPE w; +} Vec4f; + +#ifdef __cplusplus +} +#endif diff --git a/video/pingo/render/backend.h b/video/pingo/render/backend.h new file mode 100644 index 00000000..e89bc0b6 --- /dev/null +++ b/video/pingo/render/backend.h @@ -0,0 +1,33 @@ +#pragma once + +#include "../math/vec2.h" +#include "../math/vec4.h" + +/** + * Privdes a common interface to multiple graphical backends + */ + +typedef struct Renderer Renderer; +typedef struct Pixel Pixel; +typedef struct PingoDepth PingoDepth; +typedef struct Texture Texture; + +typedef struct BackEnd { + //Called on initialization and re-initialization + void (*init)(Renderer *, struct BackEnd *, Vec4i rect); + + //Called before starting rendering + void (*beforeRender)(Renderer *, struct BackEnd * ); + + //Called after having finished a render + void (*afterRender)(Renderer *, struct BackEnd * ); + + //Should return the address of the buffer (height*width*sizeof(Pixel)) + Pixel * (*getFrameBuffer)(Renderer *, struct BackEnd * ); + + //Handle backend specific final framebuffer draw (can apply lighting in a different way if needed) + void (*drawPixel)(Texture * f, Vec2i pos, Pixel color, float illumination); + + //Should return the address of the buffer (height*width*sizeof(Pixel)) + PingoDepth * (*getZetaBuffer)(Renderer *, struct BackEnd * ); +} BackEnd; diff --git a/video/pingo/render/depth.c b/video/pingo/render/depth.c new file mode 100644 index 00000000..93974bbe --- /dev/null +++ b/video/pingo/render/depth.c @@ -0,0 +1,32 @@ +#include "depth.h" + +#ifdef ZBUFFER32 +void depth_write (PingoDepth * d, int idx, float value) { + d[idx].d = (uint32_t)(value * (float)UINT32_MAX); +} + +bool depth_check(PingoDepth * d, int idx, float value){ + return (uint32_t)(value * (float)UINT32_MAX) < d[idx].d; +} +#endif + +#ifdef ZBUFFER16 +void depth_write (PingoDepth * d, int idx, float value) { + d[idx].d = (uint16_t)(value * UINT16_MAX); +} + +bool depth_check(PingoDepth * d, int idx, float value){ + return (uint16_t)(value * UINT16_MAX) < d[idx].d; +} +#endif + +#ifdef ZBUFFER8 +void depth_write (PingoDepth * d, int idx, float value) { + d[idx].d = (uint8_t)(value * UINT8_MAX); +} + +bool depth_check(PingoDepth * d, int idx, float value){ + return (uint8_t)(value * UINT8_MAX) > d[idx].d; +} +#endif + diff --git a/video/pingo/render/depth.h b/video/pingo/render/depth.h new file mode 100644 index 00000000..9d5fa4a7 --- /dev/null +++ b/video/pingo/render/depth.h @@ -0,0 +1,28 @@ +#pragma once + +#include +#include + +#define ZBUFFER32 // [ZBUFFER32 | ZBUFFER16 | ZBUFFER8] + +#ifdef ZBUFFER32 +typedef struct PingoDepth { + uint32_t d; +} PingoDepth; +#endif + +#ifdef ZBUFFER16 +typedef struct Depth { + uint16_t d; +} Depth; +#endif + +#ifdef ZBUFFER8 +typedef struct Depth { + uint8_t d; +} Depth; +#endif + +void depth_write(PingoDepth * d, int idx, float value); +bool depth_check(PingoDepth * d, int idx, float value); + diff --git a/video/pingo/render/material.c b/video/pingo/render/material.c new file mode 100644 index 00000000..996a4d33 --- /dev/null +++ b/video/pingo/render/material.c @@ -0,0 +1,5 @@ +#include "material.h" + + + + diff --git a/video/pingo/render/material.h b/video/pingo/render/material.h new file mode 100644 index 00000000..fe52b174 --- /dev/null +++ b/video/pingo/render/material.h @@ -0,0 +1,9 @@ +#pragma once + +#include "texture.h" + +typedef struct Material { + Texture * texture; +} Material; + + diff --git a/video/pingo/render/mesh.c b/video/pingo/render/mesh.c new file mode 100644 index 00000000..3df4dfb7 --- /dev/null +++ b/video/pingo/render/mesh.c @@ -0,0 +1,10 @@ +#include "mesh.h" + + + + + + + + + diff --git a/video/pingo/render/mesh.h b/video/pingo/render/mesh.h new file mode 100644 index 00000000..7512dd52 --- /dev/null +++ b/video/pingo/render/mesh.h @@ -0,0 +1,16 @@ +#pragma once + +#include + +#include "../math/vec2.h" +#include "../math/vec3.h" + +typedef struct Mesh { + int indexes_count; + uint16_t * pos_indices; + uint16_t * tex_indices; + Vec3f * positions; + Vec2f * textCoord; +} Mesh; + + diff --git a/video/pingo/render/object.c b/video/pingo/render/object.c new file mode 100644 index 00000000..c40a7101 --- /dev/null +++ b/video/pingo/render/object.c @@ -0,0 +1,8 @@ +#include "object.h" + + +Renderable object_as_renderable(Object * object) +{ + return (Renderable){.renderableType = RENDERABLE_OBJECT, .impl = object}; +} + diff --git a/video/pingo/render/object.h b/video/pingo/render/object.h new file mode 100644 index 00000000..0d3205f4 --- /dev/null +++ b/video/pingo/render/object.h @@ -0,0 +1,16 @@ +#pragma once + +#include "../math/mat4.h" + +#include "mesh.h" +#include "renderable.h" +#include "material.h" + +typedef struct Object { + Mesh * mesh; + Mat4 transform; + Material * material; +} Object; + +Renderable object_as_renderable(Object * object); + diff --git a/video/pingo/render/pixel.c b/video/pingo/render/pixel.c new file mode 100644 index 00000000..8581a9ea --- /dev/null +++ b/video/pingo/render/pixel.c @@ -0,0 +1,88 @@ +#include "pixel.h" + +#ifdef UINT8 + +extern Pixel pixelRandom() { + return (Pixel){(uint8_t)rand()}; +} + +uint8_t pixelToUInt8(Pixel * p) +{ + return p->g; +} + +extern Pixel pixelFromUInt8( uint8_t g){ + return (Pixel){g}; +} + +extern Pixel pixelMul(Pixel p, float f) +{ + return (Pixel){p.g*f}; +} + +extern Pixel pixelFromRGBA( uint8_t r, uint8_t g, uint8_t b, uint8_t a) +{ + return (Pixel){((r + g + b) / 3)}; +} +#endif + +#ifdef RGB888 +extern Pixel pixelRandom() { + return (Pixel){(uint8_t)rand(),(uint8_t)rand(),(uint8_t)rand()}; +} + +uint32_t pixelToRGBA(Pixel * p) +{ + uint8_t g = p->g; + uint32_t a = p->r | p->g <<8 | p->b<<16| 255<<24; + return a; +} +#endif + +#ifdef RGBA8888 +extern Pixel pixelRandom() { + return (Pixel){(uint8_t)rand(),(uint8_t)rand(),(uint8_t)rand(),255}; +} + +extern Pixel pixelFromUInt8( uint8_t g){ + return (Pixel){g,g,g, 255}; +} +extern uint8_t pixelToUInt8( Pixel * p){ + return (p->r + p->g + p->b) / 3; +} + +extern Pixel pixelFromRGBA( uint8_t r, uint8_t g, uint8_t b, uint8_t a){ + return (Pixel){r,g,b,a}; +} + +extern Pixel pixelMul(Pixel p, float f) +{ + return (Pixel){p.r*f,p.g*f,p.b*f,p.a}; +} + +#endif + + +#ifdef BGRA8888 +extern Pixel pixelRandom() { + return (Pixel){(uint8_t)rand(),(uint8_t)rand(),(uint8_t)rand(),255}; +} + +extern Pixel pixelFromUInt8( uint8_t g){ + return (Pixel){g,g,g, 255}; +} + +extern uint8_t pixelToUInt8( Pixel * p){ + return (p->r + p->g + p->b) / 3; +} + +extern Pixel pixelFromRGBA( uint8_t r, uint8_t g, uint8_t b, uint8_t a){ + return (Pixel){b,g,r,a}; +} + +extern Pixel pixelMul(Pixel p, float f) +{ + return (Pixel){p.b*f,p.g*f,p.r*f,p.a}; +} + +#endif diff --git a/video/pingo/render/pixel.h b/video/pingo/render/pixel.h new file mode 100644 index 00000000..2f6847f6 --- /dev/null +++ b/video/pingo/render/pixel.h @@ -0,0 +1,70 @@ +#pragma once + +#include +#include + +//What format to use [ UINT8 | RGB565 | RGBA8888 | BGRA8888 | RGB888 ] +#define BGRA8888 + +//Formats definitions: +#ifdef UINT8 +typedef struct Pixel { + uint8_t g; +}Pixel; +#define PIXELBLACK (Pixel){0} +#define PIXELWHITE (Pixel){255} +#endif + +#ifdef RGB565 +typedef struct Pixel { + uint8_t red:5; + uint8_t green:6; + uint8_t blue:5; +}Pixel; +#define PIXELBLACK (Pixel){0} +#define PIXELWHITE (Pixel){255} +#endif + +#ifdef RGB888 +typedef struct Pixel { + uint8_t r; + uint8_t g; + uint8_t b; +} Pixel; + +#define PIXELBLACK (Pixel){0,0,0} +#define PIXELWHITE (Pixel){255,255,255} +#endif + +#ifdef RGBA8888 +typedef struct Pixel { + uint8_t r; + uint8_t g; + uint8_t b; + uint8_t a; +} Pixel; + +#define PIXELBLACK (Pixel){0,0,0,255} +#define PIXELWHITE (Pixel){255,255,255,255} +#endif + +#ifdef BGRA8888 +typedef struct Pixel { + uint8_t b; + uint8_t g; + uint8_t r; + uint8_t a; +} Pixel; + +#define PIXELBLACK (Pixel){0,0,0,255} +#define PIXELWHITE (Pixel){255,255,255,255} +#endif + + + +//Interface +extern Pixel pixelRandom(); +extern Pixel pixelFromUInt8( uint8_t); +extern uint8_t pixelToUInt8( Pixel *); +extern Pixel pixelFromRGBA( uint8_t r, uint8_t g, uint8_t b, uint8_t a); +extern Pixel pixelMul( Pixel p, float f); diff --git a/video/pingo/render/rasterizer.c b/video/pingo/render/rasterizer.c new file mode 100644 index 00000000..3b85e180 --- /dev/null +++ b/video/pingo/render/rasterizer.c @@ -0,0 +1,242 @@ +#include "rasterizer.h" +#include "renderer.h" +#include "../math/mat3.h" +#include "../math/mat4.h" + +#define MIN(a,b) (((a)<(b))?(a):(b)) +#define MAX(a,b) (((a)>(b))?(a):(b)) + +Vec2i vec2iClamp(Vec2i in, Vec2i min, Vec2i max) { + in.x = (in.x > max.x-1)? max.x-1 : (in.x < min.x)? min.x : in.x; + in.y = (in.y > max.y-1)? max.y-1 : (in.y < min.y)? min.y : in.y; + return in; +} + +int rasterizer_draw_pixel_perfect(Vec2i off, Renderer *r, Texture * src) { + Texture des = r->frameBuffer; + + //Transform coords on destination (it is only translation so it is easy) + Vec2f a = (Vec2f){off.x,off.y}; + Vec2f b = (Vec2f){off.x+src->size.x,off.y}; + Vec2f c = (Vec2f){off.x,off.y+src->size.y}; + Vec2f d = (Vec2f){off.x+src->size.x,off.y+src->size.y}; + + // .. To find the axis aligned boundig box + int minX = MIN(MIN(a.x,b.x),MIN(c.x,d.x)); + int minY = MIN(MIN(a.y,b.y),MIN(c.y,d.y)); + int maxX = MAX(MAX(a.x,b.x),MAX(c.x,d.x)); + int maxY = MAX(MAX(a.y,b.y),MAX(c.y,d.y)); + + //Then clamp max/min values to destination buffer + maxX = MIN(des.size.x, MAX(maxX, 0)); + maxY = MIN(des.size.y, MAX(maxY, 0)); + minX = MIN(des.size.x, MAX(minX, 0)); + minY = MIN(des.size.y, MAX(minY, 0)); + + for (int y = minY; y < maxY; y++) { + for (int x = minX; x < maxX; x++) { + //Transform the coordinate back to sprite space + Vec2i desPos = {x,y}; + Vec2i srcPosI = {x-off.x,y-off.y}; + Pixel color = texture_read(src, srcPosI); + texture_draw(&des, desPos, color); + } + } + + return 0; +} + +int rasterizer_draw_pixel_perfect_doubled(Vec2i off, Renderer *r, Texture * src) { + Texture des = r->frameBuffer; + + //Transform coords on destination (double the size of the frame) + Vec2f a = (Vec2f){off.x,off.y}; + Vec2f b = (Vec2f){off.x+src->size.x*2,off.y}; + Vec2f c = (Vec2f){off.x,off.y+src->size.y*2}; + Vec2f d = (Vec2f){off.x+src->size.x*2,off.y+src->size.y*2}; + + // .. To find the axis aligned boundig box + int minX = MIN(MIN(a.x,b.x),MIN(c.x,d.x)); + int minY = MIN(MIN(a.y,b.y),MIN(c.y,d.y)); + int maxX = MAX(MAX(a.x,b.x),MAX(c.x,d.x)); + int maxY = MAX(MAX(a.y,b.y),MAX(c.y,d.y)); + + //Then clamp max/min values to destination buffer + maxX = MIN(des.size.x, MAX(maxX, 0)); + maxY = MIN(des.size.y, MAX(maxY, 0)); + minX = MIN(des.size.x, MAX(minX, 0)); + minY = MIN(des.size.y, MAX(minY, 0)); + + for (int y = minY; y < maxY; y+=2) { + for (int x = minX; x < maxX; x=x+2) { + //Transform the coordinate back to sprite space + Vec2i srcPosI = {(x-off.x)/2,(y-off.y)/2}; + Pixel color = texture_read(src, srcPosI); + texture_draw(&des, (Vec2i){x,y}, color); + texture_draw(&des, (Vec2i){x+1,y}, color); + } + for (int x = minX; x < maxX; x=x+2) { + //Transform the coordinate back to sprite space + Vec2i srcPosI = {(x-off.x)/2,(y-off.y)/2}; + Pixel color = texture_read(src, srcPosI); + texture_draw(&des, (Vec2i){x,y+1}, color); + texture_draw(&des, (Vec2i){x+1,y+1}, color); + } + } + + return 0; +} + +int rasterizer_draw_transformed(Mat4 t, Renderer *r, Texture * src) { + Texture des = r->frameBuffer; + + Mat4 inv = mat4Inverse(&t); + + // Transform 4 points of frame to frame buffer space + Vec2f a = (Vec2f){0,0}; + Vec2f b = (Vec2f){src->size.x,0}; + Vec2f c = (Vec2f){0,src->size.y}; + Vec2f d = (Vec2f){src->size.x,src->size.y}; + + a = mat4MultiplyVec2(&a, &t); + b = mat4MultiplyVec2(&b, &t); + c = mat4MultiplyVec2(&c, &t); + d = mat4MultiplyVec2(&d, &t); + + // .. To find the axis aligned boundig box + int minX = MIN(MIN(a.x,b.x),MIN(c.x,d.x)); + int minY = MIN(MIN(a.y,b.y),MIN(c.y,d.y)); + int maxX = MAX(MAX(a.x,b.x),MAX(c.x,d.x)); + int maxY = MAX(MAX(a.y,b.y),MAX(c.y,d.y)); + + //Then clamp max/min values to destination buffer + maxX = MIN(des.size.x, MAX(maxX, 0)); + maxY = MIN(des.size.y, MAX(maxY, 0)); + minX = MIN(des.size.x, MAX(minX, 0)); + minY = MIN(des.size.y, MAX(minY, 0)); + + //Now we can iterate over the pixels of the axis-alignes-bounding-box (AABB) which contain the source frame + for (int y = minY; y <= maxY; y++) { + for (int x = minX; x <= maxX; x++) { + + +#ifdef FILTERING_NEAREST + //Transform the coordinate back to sprite space with the inverse tranform + Vec2i desPos = {x,y}; + Vec2f desPosF = (Vec2f){desPos.x+0.5,desPos.y+0.5}; + Vec2f srcPosF = mat4MultiplyVec2(&desPosF,&inv); + Vec2i srcPosI = vecFtoI(srcPosF); + + //TODO: Improve this check by precalculating start/end coord in loop with line intersection + //We need to check if transformed coord are inside the frame + //Probably there is a faster way of doing this by checking line intersection + //with the sprite transformed quad but I don't care for now because we + //do not use rotations as of now. + if (srcPosF.x < 0) continue; + if (srcPosF.y < 0) continue; + if (srcPosF.x >= src->size.x) continue; + if (srcPosF.y >= src->size.y) continue; + Pixel color = texture_read(src, srcPosI); +#endif +#ifdef FILTERING_BILINEAR + Vec2i desPos = {x,y}; + Vec2f desPosF = (Vec2f){desPos.x+0.5f,desPos.y+0.5f}; + Vec2f srcPosF = mat4Multiply(&desPosF,&inv); + + //TODO: Improve this check by precalculating start/end coord in loop with line intersection + //We need to check if transformed coord are inside the frame + //Probably there is a faster way of doing this by checking line intersection + //with the sprite transformed quad but I don't care for now because we + //do not use rotations as of now. + if (srcPosF.x < 0) continue; + if (srcPosF.y < 0) continue; + if (srcPosF.x >= src->size.x-1) continue; + if (srcPosF.y >= src->size.y-1) continue; + + Pixel color = frameReadBilinear(src, srcPosF); +#endif +#ifdef FILTERING_ANISOTROPIC //4X + Vec2i desPos = {x,y}; + Vec2f desPosF1 = (Vec2f){desPos.x+0.25f,desPos.y+0.25f}; + Vec2f desPosF2 = (Vec2f){desPos.x+0.75f,desPos.y+0.75f}; + Vec2f srcPosF1 = mat4Multiply(&desPosF1,&inv); + Vec2f srcPosF2 = mat4Multiply(&desPosF2,&inv); + + if (srcPosF1.x < 0 && srcPosF2.x < 0) continue; + if (srcPosF1.y < 0 && srcPosF2.y < 0) continue; + if (srcPosF1.x > src->size.x && srcPosF2.x > src->size.x) continue; + if (srcPosF1.y > src->size.y && srcPosF2.y > src->size.y) continue; + + Vec2i srcPosI1 = vec2iClamp((Vec2i) {srcPosF1.x,srcPosF1.y},(Vec2i){0,0},src->size); + Vec2i srcPosI2 = vec2iClamp((Vec2i) {srcPosF1.x,srcPosF2.y},(Vec2i){0,0},src->size); + Vec2i srcPosI3 = vec2iClamp((Vec2i) {srcPosF2.x,srcPosF1.y},(Vec2i){0,0},src->size); + Vec2i srcPosI4 = vec2iClamp((Vec2i) {srcPosF2.x,srcPosF2.y},(Vec2i){0,0},src->size); + + float p1 = src->frameBuffer[(int)(srcPosI1.x + srcPosI1.y * src->size.x)].g; + float p2 = src->frameBuffer[(int)(srcPosI2.x + srcPosI2.y * src->size.x)].g; + float p3 = src->frameBuffer[(int)(srcPosI3.x + srcPosI3.y * src->size.x)].g; + float p4 = src->frameBuffer[(int)(srcPosI4.x + srcPosI4.y * src->size.x)].g; + + Pixel color = {(p1+p2+p3+p4) / 4}; +#endif +#ifdef FILTERING_ANISOTROPICX2 //8X + Vec2i desPos = {x,y}; + Vec2f desPosF1 = (Vec2f){desPos.x+0.125f,desPos.y+0.125f}; + Vec2f desPosF2 = (Vec2f){desPos.x+0.375f,desPos.y+0.375f}; + Vec2f desPosF3 = (Vec2f){desPos.x+0.625f,desPos.y+0.625f}; + Vec2f desPosF4 = (Vec2f){desPos.x+0.875f,desPos.y+0.875f}; + + Vec2f srcPosF1 = mat4MultiplyVec2(&desPosF1,&inv); + Vec2f srcPosF2 = mat4MultiplyVec2(&desPosF2,&inv); + Vec2f srcPosF3 = mat4MultiplyVec2(&desPosF3,&inv); + Vec2f srcPosF4 = mat4MultiplyVec2(&desPosF4,&inv); + + if (srcPosF1.x < 0 && srcPosF2.x < 0 && srcPosF3.x < 0 && srcPosF4.x < 0) continue; + if (srcPosF1.y < 0 && srcPosF2.y < 0 && srcPosF3.y < 0 && srcPosF4.y < 0) continue; + if (srcPosF1.x > src->size.x && srcPosF2.x > src->size.x && + srcPosF3.x > src->size.x && srcPosF4.x > src->size.x) continue; + if (srcPosF1.y > src->size.y && srcPosF2.y > src->size.y && + srcPosF3.y > src->size.y && srcPosF4.y > src->size.y) continue; + + Vec2i srcPosI1 = vec2iClamp((Vec2i) {srcPosF1.x,srcPosF1.y},(Vec2i){0,0},src->size); + Vec2i srcPosI2 = vec2iClamp((Vec2i) {srcPosF1.x,srcPosF2.y},(Vec2i){0,0},src->size); + Vec2i srcPosI3 = vec2iClamp((Vec2i) {srcPosF1.x,srcPosF3.y},(Vec2i){0,0},src->size); + Vec2i srcPosI4 = vec2iClamp((Vec2i) {srcPosF1.x,srcPosF4.y},(Vec2i){0,0},src->size); + Vec2i srcPosI5 = vec2iClamp((Vec2i) {srcPosF2.x,srcPosF1.y},(Vec2i){0,0},src->size); + Vec2i srcPosI6 = vec2iClamp((Vec2i) {srcPosF2.x,srcPosF2.y},(Vec2i){0,0},src->size); + Vec2i srcPosI7 = vec2iClamp((Vec2i) {srcPosF2.x,srcPosF3.y},(Vec2i){0,0},src->size); + Vec2i srcPosI8 = vec2iClamp((Vec2i) {srcPosF2.x,srcPosF4.y},(Vec2i){0,0},src->size); + Vec2i srcPosI9 = vec2iClamp((Vec2i) {srcPosF3.x,srcPosF1.y},(Vec2i){0,0},src->size); + Vec2i srcPosI0 = vec2iClamp((Vec2i) {srcPosF3.x,srcPosF2.y},(Vec2i){0,0},src->size); + Vec2i srcPosI11 = vec2iClamp((Vec2i) {srcPosF3.x,srcPosF3.y},(Vec2i){0,0},src->size); + Vec2i srcPosI12 = vec2iClamp((Vec2i) {srcPosF3.x,srcPosF4.y},(Vec2i){0,0},src->size); + Vec2i srcPosI13 = vec2iClamp((Vec2i) {srcPosF4.x,srcPosF1.y},(Vec2i){0,0},src->size); + Vec2i srcPosI14 = vec2iClamp((Vec2i) {srcPosF4.x,srcPosF2.y},(Vec2i){0,0},src->size); + Vec2i srcPosI15 = vec2iClamp((Vec2i) {srcPosF4.x,srcPosF3.y},(Vec2i){0,0},src->size); + Vec2i srcPosI16 = vec2iClamp((Vec2i) {srcPosF4.x,srcPosF4.y},(Vec2i){0,0},src->size); + + float p1 = src->frameBuffer[(int)(srcPosI1.x + srcPosI1.y * src->size.x)].g; + float p2 = src->frameBuffer[(int)(srcPosI2.x + srcPosI2.y * src->size.x)].g; + float p3 = src->frameBuffer[(int)(srcPosI3.x + srcPosI3.y * src->size.x)].g; + float p4 = src->frameBuffer[(int)(srcPosI4.x + srcPosI4.y * src->size.x)].g; + float p5 = src->frameBuffer[(int)(srcPosI5.x + srcPosI5.y * src->size.x)].g; + float p6 = src->frameBuffer[(int)(srcPosI6.x + srcPosI6.y * src->size.x)].g; + float p7 = src->frameBuffer[(int)(srcPosI7.x + srcPosI7.y * src->size.x)].g; + float p8 = src->frameBuffer[(int)(srcPosI8.x + srcPosI8.y * src->size.x)].g; + float p9 = src->frameBuffer[(int)(srcPosI9.x + srcPosI9.y * src->size.x)].g; + float p0 = src->frameBuffer[(int)(srcPosI0.x + srcPosI0.y * src->size.x)].g; + float p11 = src->frameBuffer[(int)(srcPosI11.x + srcPosI11.y * src->size.x)].g; + float p12 = src->frameBuffer[(int)(srcPosI12.x + srcPosI12.y * src->size.x)].g; + float p13 = src->frameBuffer[(int)(srcPosI13.x + srcPosI13.y * src->size.x)].g; + float p14 = src->frameBuffer[(int)(srcPosI14.x + srcPosI14.y * src->size.x)].g; + float p15 = src->frameBuffer[(int)(srcPosI15.x + srcPosI15.y * src->size.x)].g; + float p16 = src->frameBuffer[(int)(srcPosI16.x + srcPosI16.y * src->size.x)].g; + + Pixel color = pixelFromUInt8((p1+p2+p3+p4+p5+p6+p7+p8+p9+p0+p11+p12+p13+p14+p15+p16) / 16); +#endif + texture_draw(&des, desPos, color); + } + } + + return 0; +} diff --git a/video/pingo/render/rasterizer.h b/video/pingo/render/rasterizer.h new file mode 100644 index 00000000..be32a764 --- /dev/null +++ b/video/pingo/render/rasterizer.h @@ -0,0 +1,28 @@ +#pragma once + +#include "texture.h" +#include "sprite.h" +#include "renderable.h" + +/** + * Defines the type of filtering used when textures are resized and rotated + * by a transformation. Nearest filtering just take 1 texture sample in the + * single pixel which the source coordinate is tranformed to. + * Bilinear filtering takes 4 samples on the source texture to compute a + * weighted average of those 4 values based on the distance of the input + * point. + * Anisotropic filtering takes 4/16 samples from the source image + * distributed uniformly over the area occupied by the destination pixel on + * the source image and makes an average of those values. + */ + +#define FILTERING_NEAREST +//#define FILTERING_BILINEAR +//#define FILTERING_ANISOTROPIC +//#define FILTERING_ANISOTROPICX2 + +int rasterizer_draw_pixel_perfect(Vec2i off, Renderer *r, Texture * src); + +int rasterizer_draw_pixel_perfect_doubled(Vec2i off, Renderer *r, Texture * src); + +int rasterizer_draw_transformed(Mat4 t, Renderer *r, Texture * src); diff --git a/video/pingo/render/renderable.c b/video/pingo/render/renderable.c new file mode 100644 index 00000000..60841560 --- /dev/null +++ b/video/pingo/render/renderable.c @@ -0,0 +1,5 @@ +#include "renderable.h" +#include "renderer.h" + +int (*renderingFunctions[RENDERABLE_COUNT])(Mat4 transform, Renderer *, Renderable); + diff --git a/video/pingo/render/renderable.h b/video/pingo/render/renderable.h new file mode 100644 index 00000000..24941d9f --- /dev/null +++ b/video/pingo/render/renderable.h @@ -0,0 +1,21 @@ +#pragma once + +#include "../math/mat4.h" + +typedef struct Renderer Renderer; + +typedef enum { + RENDERABLE_SCENE =0, + RENDERABLE_SPRITE, + RENDERABLE_OBJECT, + RENDERABLE_COUNT, +} RenderableType; + +typedef struct { + RenderableType renderableType; + void * impl; +} Renderable; + +extern int (*renderingFunctions[RENDERABLE_COUNT])(Mat4 transform, Renderer *, Renderable); + + diff --git a/video/pingo/render/renderer.c b/video/pingo/render/renderer.c new file mode 100644 index 00000000..02502e66 --- /dev/null +++ b/video/pingo/render/renderer.c @@ -0,0 +1,308 @@ +#include +#include +#include "renderer.h" +#include "sprite.h" +#include "pixel.h" +#include "depth.h" +#include "backend.h" +#include "scene.h" +#include "rasterizer.h" +#include "object.h" +/*#include "../backend/ttgobackend.h"*/ + +extern void show_pixel(uint8_t a, uint8_t b, uint8_t g, uint8_t r); + +int renderFrame(Renderer * r, Renderable ren) { + Texture * f = ren.impl; + return rasterizer_draw_pixel_perfect((Vec2i) { 0, 0 }, r, f); +}; + +int renderSprite(Mat4 transform, Renderer * r, Renderable ren) { + Sprite * s = ren.impl; + Mat4 backUp = s->t; + + //Apply parent transform to the local transform + s->t = mat4MultiplyM( & s->t, & transform); + + //Apply camera translation + Mat4 newMat = mat4Translate((Vec3f) { -r->camera.x, -r->camera.y, 0 }); + s->t = mat4MultiplyM( & s->t, & newMat); + + /* + if (mat4IsOnlyTranslation(&s->t)) { + Vec2i off = {s->t.elements[2], s->t.elements[5]}; + rasterizer_draw_pixel_perfect(off,r, &s->frame); + s->t = backUp; + return 0; + } + + if (mat4IsOnlyTranslationDoubled(&s->t)) { + Vec2i off = {s->t.elements[2], s->t.elements[5]}; + rasterizer_draw_pixel_perfect_doubled(off,r, &s->frame); + s->t = backUp; + return 0; + }*/ + + rasterizer_draw_transformed(s->t, r, & s->frame); + s->t = backUp; + return 0; +}; + +void renderRenderable(Mat4 transform, Renderer * r, Renderable ren) { + renderingFunctions[ren.renderableType](transform, r, ren); +}; + +int renderScene(Mat4 transform, Renderer * r, Renderable ren) { + Scene * s = ren.impl; + if (!s->visible) + return 0; + + //Apply hierarchy transfom + Mat4 newTransform = mat4MultiplyM( & s->transform, & transform); + for (int i = 0; i < s->numberOfRenderables; i++) { + renderRenderable(newTransform, r, s->renderables[i]); + } + return 0; +}; + +#define MIN(a, b)(((a) < (b)) ? (a) : (b)) +#define MAX(a, b)(((a) > (b)) ? (a) : (b)) + +int edgeFunction(const Vec2f * a, const Vec2f * b, const Vec2f * c) { + return (c->x - a->x) * (b->y - a->y) - (c->y - a->y) * (b->x - a->x); +} + +float isClockWise(float x1, float y1, float x2, float y2, float x3, float y3) { + return (y2 - y1) * (x3 - x2) - (y3 - y2) * (x2 - x1); +} + +int orient2d( Vec2i a, Vec2i b, Vec2i c) +{ + return (b.x-a.x)*(c.y-a.y) - (b.y-a.y)*(c.x-a.x); +} + +void backendDrawPixel (Renderer * r, Texture * f, Vec2i pos, Pixel color, float illumination) { + //If backend spcifies something.. + if (r->backEnd->drawPixel != 0) + r->backEnd->drawPixel(f, pos, color, illumination); + + //By default call this + texture_draw(f, pos, pixelMul(color,illumination)); +} + +int renderObject(Mat4 object_transform, Renderer * r, Renderable ren) { + + const Vec2i scrSize = r->frameBuffer.size; + Object * o = ren.impl; + + // MODEL MATRIX + Mat4 m = mat4MultiplyM( &o->transform, &object_transform ); + + // VIEW MATRIX + Mat4 v = r->camera_view; + Mat4 p = r->camera_projection; + + for (int i = 0; i < o->mesh->indexes_count; i += 3) { + Vec3f * ver1 = &o->mesh->positions[o->mesh->pos_indices[i+0]]; + Vec3f * ver2 = &o->mesh->positions[o->mesh->pos_indices[i+1]]; + Vec3f * ver3 = &o->mesh->positions[o->mesh->pos_indices[i+2]]; + + Vec2f tca = {0,0}; + Vec2f tcb = {0,0}; + Vec2f tcc = {0,0}; + + if (o->material != 0) { + tca = o->mesh->textCoord[o->mesh->tex_indices[i+0]]; + tcb = o->mesh->textCoord[o->mesh->tex_indices[i+1]]; + tcc = o->mesh->textCoord[o->mesh->tex_indices[i+2]]; + } + + Vec4f a = { ver1->x, ver1->y, ver1->z, 1 }; + Vec4f b = { ver2->x, ver2->y, ver2->z, 1 }; + Vec4f c = { ver3->x, ver3->y, ver3->z, 1 }; + + a = mat4MultiplyVec4( &a, &m); + b = mat4MultiplyVec4( &b, &m); + c = mat4MultiplyVec4( &c, &m); + + //Calc Face Normal + Vec3f na = vec3fsubV(*((Vec3f*)(&a)), *((Vec3f*)(&b))); + Vec3f nb = vec3fsubV(*((Vec3f*)(&a)), *((Vec3f*)(&c))); + Vec3f normal = vec3Normalize(vec3Cross(na, nb)); + Vec3f light = vec3Normalize((Vec3f){-8,5,5}); + float diffuseLight = (1.0 + vec3Dot(normal, light)) *0.5; + diffuseLight = MIN(1.0, MAX(diffuseLight, 0)); + + a = mat4MultiplyVec4( &a, &v); + b = mat4MultiplyVec4( &b, &v); + c = mat4MultiplyVec4( &c, &v); + + a = mat4MultiplyVec4( &a, &p); + b = mat4MultiplyVec4( &b, &p); + c = mat4MultiplyVec4( &c, &p); + + + //Triangle is completely behind camera + if (a.z > 0 && b.z > 0 && c.z > 0) + continue; + + // convert to device coordinates by perspective division + a.w = 1.0 / a.w; + b.w = 1.0 / b.w; + c.w = 1.0 / c.w; + a.x *= a.w; a.y *= a.w; a.z *= a.w; + b.x *= b.w; b.y *= b.w; b.z *= b.w; + c.x *= c.w; c.y *= c.w; c.z *= c.w; + + float clocking = isClockWise(a.x, a.y, b.x, b.y, c.x, c.y); + if (clocking >= 0) + continue; + + //Compute Screen coordinates + float halfX = scrSize.x/2; + float halfY = scrSize.y/2; + Vec2i a_s = {a.x * halfX + halfX, a.y * halfY + halfY}; + Vec2i b_s = {b.x * halfX + halfX, b.y * halfY + halfY}; + Vec2i c_s = {c.x * halfX + halfX, c.y * halfY + halfY}; + + int32_t minX = MIN(MIN(a_s.x, b_s.x), c_s.x); + int32_t minY = MIN(MIN(a_s.y, b_s.y), c_s.y); + int32_t maxX = MAX(MAX(a_s.x, b_s.x), c_s.x); + int32_t maxY = MAX(MAX(a_s.y, b_s.y), c_s.y); + + minX = MIN(MAX(minX, 0), r->frameBuffer.size.x); + minY = MIN(MAX(minY, 0), r->frameBuffer.size.y); + maxX = MIN(MAX(maxX, 0), r->frameBuffer.size.x); + maxY = MIN(MAX(maxY, 0), r->frameBuffer.size.y); + + // Barycentric coordinates at minX/minY corner + Vec2i minTriangle = { minX, minY }; + + int32_t area = orient2d( a_s, b_s, c_s); + if (area == 0) + continue; + float areaInverse = 1.0/area; + + int32_t A01 = ( a_s.y - b_s.y); //Barycentric coordinates steps + int32_t B01 = ( b_s.x - a_s.x); //Barycentric coordinates steps + int32_t A12 = ( b_s.y - c_s.y); //Barycentric coordinates steps + int32_t B12 = ( c_s.x - b_s.x); //Barycentric coordinates steps + int32_t A20 = ( c_s.y - a_s.y); //Barycentric coordinates steps + int32_t B20 = ( a_s.x - c_s.x); //Barycentric coordinates steps + + int32_t w0_row = orient2d( b_s, c_s, minTriangle); + int32_t w1_row = orient2d( c_s, a_s, minTriangle); + int32_t w2_row = orient2d( a_s, b_s, minTriangle); + + if (o->material != 0) { + tca.x /= a.z; + tca.y /= a.z; + tcb.x /= b.z; + tcb.y /= b.z; + tcc.x /= c.z; + tcc.y /= c.z; + } + + for (int16_t y = minY; y < maxY; y++, w0_row += B12,w1_row += B20,w2_row += B01) { + int32_t w0 = w0_row; + int32_t w1 = w1_row; + int32_t w2 = w2_row; + + for (int32_t x = minX; x < maxX; x++, w0 += A12, w1 += A20, w2 += A01) { + + if ((w0 | w1 | w2) < 0) + continue; + + float depth = -( w0 * a.z + w1 * b.z + w2 * c.z ) * areaInverse; + if (depth < 0.0 || depth > 1.0) + continue; + + if (depth_check(r->backEnd->getZetaBuffer(r,r->backEnd), x + y * scrSize.x, 1-depth )) + continue; + + depth_write(r->backEnd->getZetaBuffer(r,r->backEnd), x + y * scrSize.x, 1- depth ); + + if (o->material != 0) { + //Texture lookup + + float textCoordx = -(w0 * tca.x + w1 * tcb.x + w2 * tcc.x)* areaInverse * depth; + float textCoordy = -(w0 * tca.y + w1 * tcb.y + w2 * tcc.y)* areaInverse * depth; + + Pixel text = texture_readF(o->material->texture, (Vec2f){textCoordx,textCoordy}); + //show_pixel(text.a, text.b, text.g, text.r); + + backendDrawPixel(r, &r->frameBuffer, (Vec2i){x,y}, text, diffuseLight); + } else { + Pixel pixel; + pixel.a = 255; + pixel.b = 255; + pixel.g = 0; + pixel.r = 255; + backendDrawPixel(r, &r->frameBuffer, (Vec2i){x,y}, pixel, diffuseLight); + } + + } + + } + } + + return 0; +}; + +int rendererInit(Renderer * r, Vec2i size, BackEnd * backEnd) { + renderingFunctions[RENDERABLE_SPRITE] = & renderSprite; + renderingFunctions[RENDERABLE_SCENE] = & renderScene; + renderingFunctions[RENDERABLE_OBJECT] = & renderObject; + + r->scene = 0; + r->clear = 1; + r->clearColor = PIXELBLACK; + r->backEnd = backEnd; + + r->backEnd->init(r, r->backEnd, (Vec4i) { 0, 0, 0, 0 }); + + int e = 0; + e = texture_init( & (r->frameBuffer), size, backEnd->getFrameBuffer(r, backEnd)); + if (e) return e; + + return 0; +} + +int rendererRender(Renderer * r) { + + int pixels = r->frameBuffer.size.x * r->frameBuffer.size.y; + memset(r->backEnd->getZetaBuffer(r,r->backEnd), 0, pixels * sizeof (PingoDepth)); + + r->backEnd->beforeRender(r, r->backEnd); + + //get current framebuffe from backend + r->frameBuffer.frameBuffer = r->backEnd->getFrameBuffer(r, r->backEnd); + + //Clear draw buffer before rendering + if (r->clear) { + memset(r->backEnd->getFrameBuffer(r,r->backEnd), 0, pixels * sizeof (Pixel)); + } + + renderScene(mat4Identity(), r, sceneAsRenderable(r->scene)); + + r->backEnd->afterRender(r, r->backEnd); + + return 0; +} + +int rendererSetScene(Renderer * r, Scene * s) { + if (s == 0) + return 1; //nullptr scene + + r->scene = s; + return 0; +} + +int rendererSetCamera(Renderer * r, Vec4i rect) { + r->camera = rect; + r->backEnd->init(r, r->backEnd, rect); + r->frameBuffer.size = (Vec2i) { + rect.z, rect.w +}; + return 0; +} diff --git a/video/pingo/render/renderer.h b/video/pingo/render/renderer.h new file mode 100644 index 00000000..4f5244f0 --- /dev/null +++ b/video/pingo/render/renderer.h @@ -0,0 +1,32 @@ +#pragma once + +#include "texture.h" +#include "renderable.h" +#include "pixel.h" +#include "../math/vec4.h" + +typedef struct Scene Scene; +typedef struct BackEnd BackEnd; + +typedef struct Renderer{ + Vec4i camera; + Scene * scene; + + Texture frameBuffer; + Pixel clearColor; + int clear; + + Mat4 camera_projection; + Mat4 camera_view; + + BackEnd * backEnd; + +} Renderer; + +extern int rendererRender(Renderer *); + +extern int rendererInit(Renderer *, Vec2i size, struct BackEnd * backEnd); + +extern int rendererSetScene(Renderer *r, Scene *s); + +extern int rendererSetCamera(Renderer *r, Vec4i camera); diff --git a/video/pingo/render/scene.c b/video/pingo/render/scene.c new file mode 100644 index 00000000..03ed2d44 --- /dev/null +++ b/video/pingo/render/scene.c @@ -0,0 +1,26 @@ +#include "scene.h" +#include "renderer.h" + +int sceneAddRenderable(Scene * scene, Renderable renderable) +{ + if (scene->numberOfRenderables >= MAX_SCENE_RENDERABLES) { + return 1; //Too many renderables in this scene + } + + scene->renderables[scene->numberOfRenderables++] = renderable; + return 0; +} + +int sceneInit(Scene * s) +{ + s->transform = mat4Identity(); + s->numberOfRenderables = 0; + s->visible = 1; + + return 0; +} + + +extern Renderable sceneAsRenderable(Scene * scene) { + return (Renderable){.renderableType = RENDERABLE_SCENE, .impl = scene}; +} diff --git a/video/pingo/render/scene.h b/video/pingo/render/scene.h new file mode 100644 index 00000000..43d4c15f --- /dev/null +++ b/video/pingo/render/scene.h @@ -0,0 +1,28 @@ +#pragma once + +#include +#include "renderable.h" +#include "../math/mat3.h" +#include "../math/mat4.h" + +#ifdef __cplusplus + extern "C" { +#endif + +#define MAX_SCENE_RENDERABLES 32 + +typedef struct Scene { + uint8_t numberOfRenderables; + Renderable renderables[MAX_SCENE_RENDERABLES]; + Mat4 transform; + uint8_t visible; +} Scene; + +extern int sceneInit(Scene * s); +extern int sceneAddRenderable(Scene * scene, Renderable renderable); + +extern Renderable sceneAsRenderable(Scene * scene); + +#ifdef __cplusplus + } +#endif diff --git a/video/pingo/render/sprite.c b/video/pingo/render/sprite.c new file mode 100644 index 00000000..b07ac674 --- /dev/null +++ b/video/pingo/render/sprite.c @@ -0,0 +1,30 @@ +#include "sprite.h" +#include "../math/mat3.h" + +int spriteInit(Sprite *s, Texture f, Mat4 t) +{ + if (f.frameBuffer == 0) + return 1; + + s->frame = f; + s->t = t; + + return 0; +} + +Renderable spriteAsRenderable(Sprite * s) { + return (Renderable){ .renderableType = RENDERABLE_SPRITE, .impl = s}; +} + +int spriteRandomize(Sprite * s) +{ + + for (int x = 0; x < s->frame.size.x; x++ ) { + for (int y = 0; y < s->frame.size.y; y++ ) { + + texture_draw(&s->frame,(Vec2i){x,y},pixelRandom()); + } + } + + return 0; +} diff --git a/video/pingo/render/sprite.h b/video/pingo/render/sprite.h new file mode 100644 index 00000000..0dce6a03 --- /dev/null +++ b/video/pingo/render/sprite.h @@ -0,0 +1,22 @@ +#pragma once + +#include "texture.h" +#include "renderable.h" +#include "../math/mat4.h" + +#ifdef __cplusplus + extern "C" { +#endif + +typedef struct Sprite { + Mat4 t; + Texture frame; +} Sprite; + +extern int spriteInit( Sprite * s, Texture f, Mat4 t); +extern int spriteRandomize( Sprite * s); +extern Renderable spriteAsRenderable( Sprite * s); + +#ifdef __cplusplus + } +#endif diff --git a/video/pingo/render/texture.c b/video/pingo/render/texture.c new file mode 100644 index 00000000..e5e3d826 --- /dev/null +++ b/video/pingo/render/texture.c @@ -0,0 +1,39 @@ +#include "texture.h" +#include "math.h" + +int texture_init( Texture *f, Vec2i size, Pixel *buf ) +{ + if(size.x * size.y == 0) + return 1; // 0 sized rect + + if(buf == 0) + return 2; // null ptr buffer + + f->frameBuffer = (Pixel *)buf; + f->size = size; + + return 0; +} + +void texture_draw(Texture *f, Vec2i pos, Pixel color) +{ + f->frameBuffer[pos.x + pos.y * f->size.x] = color; +} + +Pixel texture_read(Texture *f, Vec2i pos) +{ + return f->frameBuffer[pos.x + pos.y * f->size.x]; +} + +Pixel texture_readF(Texture *f, Vec2f pos) +{ + uint16_t x = (uint16_t)(pos.x * f->size.x) % f->size.x; + uint16_t y = (uint16_t)(pos.y * f->size.y) % f->size.x; + uint32_t index = x + y * f->size.x; + Pixel value = f->frameBuffer[index]; + return value; +} + + + + diff --git a/video/pingo/render/texture.h b/video/pingo/render/texture.h new file mode 100644 index 00000000..02767310 --- /dev/null +++ b/video/pingo/render/texture.h @@ -0,0 +1,21 @@ +#pragma once + +#include "pixel.h" +#include "renderable.h" +#include "../math/vec2.h" + +typedef struct Texture { + Vec2i size; + Pixel * frameBuffer; +} Texture; + +extern int texture_init( Texture * f, Vec2i size, Pixel *); + +extern Renderable texture_as_renderable( Texture * s); + +extern void texture_draw(Texture * f, Vec2i pos, Pixel color); + +extern Pixel texture_read(Texture * f, Vec2i pos); + +extern Pixel texture_readF(Texture * f, Vec2f pos); + From 272eef7fe81c79e9bbb8a609588ef77490263c44 Mon Sep 17 00:00:00 2001 From: Curtis Whitley Date: Mon, 22 Apr 2024 14:30:56 -0400 Subject: [PATCH 02/49] Add doc from OTF, to be modified --- video/pingo/vdu_pingo.md | 264 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 264 insertions(+) create mode 100644 video/pingo/vdu_pingo.md diff --git a/video/pingo/vdu_pingo.md b/video/pingo/vdu_pingo.md new file mode 100644 index 00000000..f0a0c7bd --- /dev/null +++ b/video/pingo/vdu_pingo.md @@ -0,0 +1,264 @@ +## Introduction to 3D Render Commands + +A 3D scene is composed of one or more object models (meshes), each of which uses +some texture for colorizing the model. A texture uses a bitmap for its +pixel colors, and the model uses texture coordinates to assign colors to its +surfaces when the render is performed. + +There are various mathematical computations involved in 3D rendering, of course, +and floating point numbers are used for many of those computations. However, VDU +commands do not directly support passing floating point numbers, as the VDU statement +only supports passing 1-byte and 2-byte values. For that reason, many of the +values passed to the render commands are scaled values. + +The commands below use numbers with the following meaning and ranges: +

id: A specific primitive ID in the range 0 to 65535, where 0 is the root primitve. +In this document, it refers to a render primitive, which is an enhanced bitmap primitive. +

pid: A parent primitive ID in the range 0 to 65535, where 0 is the root primitve. +

mid: A specific mesh ID in the range 0 to 65535. This is not a primitive ID. +

oid: A specific object ID in the range 0 to 65535. This is not a primitive ID. +

flags: Refer to the Primitive Flags section of this document. +

n: A positive number (count) of things that follow within the same command. +

x: A 2D X coordinate in the range -32768 to +32767. Often, the value is in or near the range of 0 to 800. +

y: A 2D Y coordinate in the range -32768 to +32767. Often, the value is in or near the range of 0 to 600. +

w: A positive width that typically ranges from 1 to 800. +

h: A positive height that typically ranges from 1 to 600. +

x0, y0, z0: A prescaled 3D X, Y, or Z coordinate in the range -32767 to +32767. +This number is divided by 32767 to yield a floating point number in the range -1.0 to +1.0, for 3D computations. +To prescale a set of coordinates for use in a VDU command, scale them all to fit within the range -1.0 to +1.0, +then multiply the original floating point values by 32767. +``` +F = FACTOR * 32767 +PX = X * F +PY = Y * F +PZ = Z * F +VDU ... PX; PY; PZ; ... +``` +

i0: A zero-based index into a list of coordinates (mesh or texture). +

u0, v0: A texture coordinate ranging from 0 to the width or height of the texture. +This value is divided by the texture width or height to yield a floating point number, for 3D computations. +To prescale a set of coordinates for use in a VDU command, scale them all to fit within the range 0.0 to +1.0, +then multiply the original floating point values by the texture width or height, as appropriate. +``` +PU = U * FACTOR * TEXWIDTH +PV = V * FACTOR * TEXHEIGHT +VDU ... PU; PV; ... +``` +

scalex, scaley, scalez: A prescaled 3D X, Y, or Z scale value in the range 0 to 65535. +This number is divided by 256 to yield a floating point number in the approximate range 0.0 to 256.0, for 3D computations. +To prescale a set of scale factors for use in a VDU command, multiply them by 256. +``` +F = 256 +PSX = SX * F +PSY = SY * F +PSZ = SZ * F +VDU ... PSX; PSY; PSZ; ... +``` +

anglex, angley, anglez: A prescaled 3D X, Y, or Z rotation angle value in the range -32767 to +32767. +This number is divided by 32767 to yield a floating point number in the range -1.0 to +1.0, for 3D computations. +The resulting number is multiplied by 2PI, to yield an angle in radians. +Thus, the passed value of -32767 means -2PI, and +32767 means +2PI. +To prescale a set of angles in radians for use in a VDU command, divide the angles by 2PI, which will +scale them all to fit within the range -1.0 to +1.0, +then multiply the original floating point values by 32767. +``` +F = 32767 / TWOPI +PAX = AX * F +PAY = AY * F +PAZ = AZ * F +VDU ... PAX; PAY; PAZ; ... +``` +

distx, disty, distz: A prescaled 3D X, Y, or Z translation distance in the range -32767 to +32767. +This number is divided by 32767 to yield a floating point number in the range -1.0 to +1.0, for 3D computations. +The resulting number is multiplied by 256.0. +Thus, the passed value of -32767 means -256.0, and +32767 means +256.0. +To prescale a set of distances for use in a VDU command, divide the distances by 256, +scale them all to fit within the range -1.0 to +1.0, +then multiply the original floating point values by 32767. +``` +F = 256 +PDX = DX * F +PDY = DY * F +PDZ = DZ * F +VDU ... PDX; PDY; PDZ; ... +``` +
+ +## Create primitive: Solid Render +VDU 23, 30, 200, id; pid; flags; x; y; w; h; psram : Create primitive: Solid Render + +This command creates a primitive that renders a 3D scene to a bitmap. The bitmap can be +manipulated or altered using the bitmap primitive commands, after the scene image +has been rendered. A scene may contain multiple objects. This render primitive must be +created prior to using other 3D related commands, below. + +A solid render has pixels that are all 100% opaque (0% transparent). + +If the psram parameter is nonzero, the bitmap pixels are kept in PSRAM (SPI RAM) +rather than in DRAM. This should only be done in resolutions where the pixel clock +rate is relatively slow, or the total size of bitmaps coming from PSRAM is +relatively small; otherwise, flicker may occur. + +## Create primitive: Masked Render +VDU 23, 30, 201, id; pid; flags; x; y; w; h; psram, color : Create primitive: Masked Render + +This command creates a primitive that renders a 3D scene to a bitmap. The bitmap can be +manipulated or altered using the bitmap primitive commands, after the scene image +has been rendered. A scene may contain multiple objects. This render primitive must be +created prior to using other 3D related commands, below. + +A masked render has pixels that are all either 100% opaque (0% transparent) or +0% opaque (100% transparent). The given color is used as the transparency color, +and should be a color (including its alpha bits) that is not likely to appear in +the rendered image. For example, if the image will have no dark red pixels that are 25% +opaque, then the color could be specified as 1 or &01 in BASIC (0x01 in C). + +If the psram parameter is nonzero, the bitmap pixels are kept in PSRAM (SPI RAM) +rather than in DRAM. This should only be done in resolutions where the pixel clock +rate is relatively slow, or the total size of bitmaps coming from PSRAM is +relatively small; otherwise, flicker may occur. + +## Create primitive: Transparent Render +VDU 23, 30, 202, id; pid; flags; x; y; w; h; psram, color : Create primitive: Transparent Render + +This command creates a primitive that renders a 3D scene to a bitmap. The bitmap can be +manipulated or altered using the bitmap primitive commands, after the scene image +has been rendered. A scene may contain multiple objects. This render primitive must be +created prior to using other 3D related commands, below. + +A transparent render has pixels that are 100% opaque (0% transparent), 75% opaque +(25% transparent), 50% opaque (50% transparent), 25% opaque (75% transparent), or +0% opaque (100% transparent). The given color is used as the transparency color, +and should be a color (including its alpha bits) that is not likely to appear in +the rendered image. For example, if the image will have no dark red pixels that are 25% +opaque, then the color could be specified as 1 or &01 in BASIC (0x01 in C). + +If the psram parameter is nonzero, the bitmap pixels are kept in PSRAM (SPI RAM) +rather than in DRAM. This should only be done in resolutions where the pixel clock +rate is relatively slow, or the total size of bitmaps coming from PSRAM is +relatively small; otherwise, flicker may occur. + +## Define Mesh Vertices +VDU 23, 30, 203, id; mid; n; x0; y0; z0; ... : Define Mesh Vertices + +This command establishes the list of mesh coordinates to be used to define +a surface structure. The mesh may be referenced by multiple objects. + +The "n" parameter is the number of vertices, so the total number of coordinates specified equals n*3. + +## Set Mesh Vertex Indices +VDU 23, 30, 204, id; mid; n; i0; ... : Set Mesh Vertex Indices + +This command lists the indexes of the vertices that define a 3D mesh. Individual +vertices are often referenced multiple times within a mesh, because they are +often part of multiple surface triangles. Each index value ranges from 0 to +the number of defined mesh vertices. + +The "n" parameter is the number of indices. + +## Define Texture Coordinates +VDU 23, 30, 205, id; mid; n; u0; v0; ... : Define Texture Coordinates + +This command establishes the list of U/V texture coordinates that define texturing +for a mesh. + +The "n" parameter is the number of coordinate pairs, so the total number of coordinates specified equals n*2. + +## Set Texture Coordinate Indices +VDU 23, 30, 206, id; mid; n; i0; ... : Set Texture Coordinate Indices + +This command lists the indexes of the coordinates that define a 3D texture for a mesh. +Individual coordinates may be referenced multiple times within a texture, +but that is not required. The number of indices passed in this command must match +the number of mesh indices defining the mesh. Thus, each mesh vertex has texture +coordinates associated with it. + +The "n" parameter is the number of indices. + +## Define Object +VDU 23, 30, 207, id; oid; mid; bmid; : Create Object + +This command defines a renderable object in terms of its already-defined mesh, +plus a reference to an existing bitmap that provides its coloring, via the +texture coordinates used by the mesh. The same mesh can be used multiple times, +with the same or different bitmaps for coloring. + +## Set Object X Scale Factor +VDU 23, 30, 208, id; oid; scalex; : Set Object X Scale Factor + +This command sets the X scale factor for an object. + +## Set Object Y Scale Factor +VDU 23, 30, 209, id; oid; scaley; : Set Object Y Scale Factor + +This command sets the Y scale factor for an object. + +## Set Object Z Scale Factor +VDU 23, 30, 210, id; oid; scalez; : Set Object Z Scale Factor + +This command sets the Z scale factor for an object. + +## Set Object XYZ Scale Factors +VDU 23, 30, 211, id; oid; scalex; scaley; scalez : Set Object XYZ Scale Factors + +This command sets the X, Y, and Z scale factors for an object. + +## Set Object X Rotation Angle +VDU 23, 30, 212, id; oid; anglex; : Set Object X Rotation Angle + +This command sets the X rotation angle for an object. + +## Set Object Y Rotation Angle +VDU 23, 30, 213, id; oid; angley; : Set Object Y Rotation Angle + +This command sets the Y rotation angle for an object. + +## Set Object Z Rotation Angle +VDU 23, 30, 214, id; oid; anglez; : Set Object Z Rotation Angle + +This command sets the Z rotation angle for an object. + +## Set Object XYZ Rotation Angles +VDU 23, 30, 215, id; oid; anglex; angley; anglez; : Set Object XYZ Rotation Angles + +This command sets the X, Y, and Z rotation angles for an object. + +## Set Object X Translation Distance +VDU 23, 30, 216, id; oid; distx; : Set Object X Translation Distance + +This command sets the X translation distance for an object. +Note that 3D translation of an object is independent of 2D translation of the bitmap +belonging to the render primitive. + +## Set Object Y Translation Distance +VDU 23, 30, 217, id; oid; disty; : Set Object Y Translation Distance + +This command sets the Y translation distance for an object. +Note that 3D translation of an object is independent of 2D translation of the bitmap +belonging to the render primitive. + +## Set Object Z Translation Distance +VDU 23, 30, 218, id; oid; distz; : Set Object Z Translation Distance + +This command sets the Z translation distance for an object. +Note that 3D translation of an object is independent of 2D translation of the bitmap +belonging to the render primitive. + +## Set Object XYZ Translation Distances +VDU 23, 30, 219, id; oid; distx; disty; distz : Set Object XYZ Translation Distances + +This command sets the X, Y, and Z translation distances for an object. +Note that 3D translation of an object is independent of 2D translation of the bitmap +belonging to the render primitive. + +## Render To Bitmap +VDU 23, 30, 220, id; : Render To Bitmap + +This command uses information provided by the above commands to render the 3D scene +onto the bitmap belonging to the render primitive. This command must be used in +order to perform the render operation; it does not happen automatically, when other +commands change some of the render parameters. + +The following image illustrates the concept. + +![Render](render.png) From 2ccc715ef73b182e0a996671aa8c72c979b0e23b Mon Sep 17 00:00:00 2001 From: Curtis Whitley Date: Mon, 22 Apr 2024 15:25:33 -0400 Subject: [PATCH 03/49] Initial updates to doc for 3D --- video/agon.h | 1 + video/pingo/render.png | Bin 0 -> 433978 bytes video/pingo/vdu_pingo.md | 126 +++++++++++++---------------------- video/vdu_buffered.h | 28 ++++++++ video/vdu_stream_processor.h | 1 + 5 files changed, 77 insertions(+), 79 deletions(-) create mode 100644 video/pingo/render.png diff --git a/video/agon.h b/video/agon.h index 89f8feba..4fef83c1 100644 --- a/video/agon.h +++ b/video/agon.h @@ -260,6 +260,7 @@ #define BUFFERED_COPY_AND_CONSOLIDATE 0x1A // Copy blocks from multiple buffers into one buffer and consolidate them #define BUFFERED_COMPRESS 0x40 // Compress blocks from multiple buffers into one buffer #define BUFFERED_DECOMPRESS 0x41 // Decompress blocks from multiple buffers into one buffer +#define BUFFERED_PINGO_3D 0x48 // Configure a 3D scene or render to a bitmap #define BUFFERED_DEBUG_INFO 0x80 // Get debug info about a buffer diff --git a/video/pingo/render.png b/video/pingo/render.png new file mode 100644 index 0000000000000000000000000000000000000000..23228205b700c5cd90a9a4dd7686156de0bbe131 GIT binary patch literal 433978 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

vCr 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

h>x%=)(FOp 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

PBeu*yFp9@#tVD%(Ynyr}C4Pg*j- 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℞WWexWq6LLJ~08+I(kC(8E> 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
id: A specific primitive ID in the range 0 to 65535, where 0 is the root primitve. -In this document, it refers to a render primitive, which is an enhanced bitmap primitive. -

pid: A parent primitive ID in the range 0 to 65535, where 0 is the root primitve. +

sid: A VDU buffer ID that refers to a control structure for the 3D scene.

mid: A specific mesh ID in the range 0 to 65535. This is not a primitive ID.

oid: A specific object ID in the range 0 to 65535. This is not a primitive ID. -

flags: Refer to the Primitive Flags section of this document.

n: A positive number (count) of things that follow within the same command. -

x: A 2D X coordinate in the range -32768 to +32767. Often, the value is in or near the range of 0 to 800. -

y: A 2D Y coordinate in the range -32768 to +32767. Often, the value is in or near the range of 0 to 600. -

w: A positive width that typically ranges from 1 to 800. -

h: A positive height that typically ranges from 1 to 600. +

x: A 2D X coordinate in the range -32768 to +32767. Often, the value is in or near the range of 0 to screen width. +

y: A 2D Y coordinate in the range -32768 to +32767. Often, the value is in or near the range of 0 to screen height. +

w: A positive width that typically ranges from 1 to screen width. +

h: A positive height that typically ranges from 1 to screen height.

x0, y0, z0: A prescaled 3D X, Y, or Z coordinate in the range -32767 to +32767. This number is divided by 32767 to yield a floating point number in the range -1.0 to +1.0, for 3D computations. To prescale a set of coordinates for use in a VDU command, scale them all to fit within the range -1.0 to +1.0, @@ -84,62 +83,31 @@ VDU ... PDX; PDY; PDZ; ... ```
-## Create primitive: Solid Render -VDU 23, 30, 200, id; pid; flags; x; y; w; h; psram : Create primitive: Solid Render - -This command creates a primitive that renders a 3D scene to a bitmap. The bitmap can be -manipulated or altered using the bitmap primitive commands, after the scene image -has been rendered. A scene may contain multiple objects. This render primitive must be -created prior to using other 3D related commands, below. - -A solid render has pixels that are all 100% opaque (0% transparent). - -If the psram parameter is nonzero, the bitmap pixels are kept in PSRAM (SPI RAM) -rather than in DRAM. This should only be done in resolutions where the pixel clock -rate is relatively slow, or the total size of bitmaps coming from PSRAM is -relatively small; otherwise, flicker may occur. - -## Create primitive: Masked Render -VDU 23, 30, 201, id; pid; flags; x; y; w; h; psram, color : Create primitive: Masked Render - -This command creates a primitive that renders a 3D scene to a bitmap. The bitmap can be -manipulated or altered using the bitmap primitive commands, after the scene image -has been rendered. A scene may contain multiple objects. This render primitive must be -created prior to using other 3D related commands, below. - -A masked render has pixels that are all either 100% opaque (0% transparent) or -0% opaque (100% transparent). The given color is used as the transparency color, -and should be a color (including its alpha bits) that is not likely to appear in -the rendered image. For example, if the image will have no dark red pixels that are 25% -opaque, then the color could be specified as 1 or &01 in BASIC (0x01 in C). - -If the psram parameter is nonzero, the bitmap pixels are kept in PSRAM (SPI RAM) -rather than in DRAM. This should only be done in resolutions where the pixel clock -rate is relatively slow, or the total size of bitmaps coming from PSRAM is -relatively small; otherwise, flicker may occur. - -## Create primitive: Transparent Render -VDU 23, 30, 202, id; pid; flags; x; y; w; h; psram, color : Create primitive: Transparent Render - -This command creates a primitive that renders a 3D scene to a bitmap. The bitmap can be -manipulated or altered using the bitmap primitive commands, after the scene image -has been rendered. A scene may contain multiple objects. This render primitive must be -created prior to using other 3D related commands, below. - -A transparent render has pixels that are 100% opaque (0% transparent), 75% opaque -(25% transparent), 50% opaque (50% transparent), 25% opaque (75% transparent), or -0% opaque (100% transparent). The given color is used as the transparency color, -and should be a color (including its alpha bits) that is not likely to appear in -the rendered image. For example, if the image will have no dark red pixels that are 25% -opaque, then the color could be specified as 1 or &01 in BASIC (0x01 in C). - -If the psram parameter is nonzero, the bitmap pixels are kept in PSRAM (SPI RAM) -rather than in DRAM. This should only be done in resolutions where the pixel clock -rate is relatively slow, or the total size of bitmaps coming from PSRAM is -relatively small; otherwise, flicker may occur. +# VDU Commands for 3D Rendering + +## Overview of Commands + +VDU 23, 0, &A0, sid; &48, 1, mid; n; x0; y0; z0; ... : Define Mesh Vertices
+VDU 23, 0, &A0, sid; &48, 2, mid; n; i0; ... : Set Mesh Vertex Indices
+VDU 23, 0, &A0, sid; &48, 3, mid; n; u0; v0; ... : Define Texture Coordinates
+VDU 23, 0, &A0, sid; &48, 4, mid; n; i0; ... : Set Texture Coordinate Indices
+VDU 23, 0, &A0, sid; &48, 5, oid; mid; bmid; : Create Object
+VDU 23, 0, &A0, sid; &48, 6, oid; scalex; : Set Object X Scale Factor
+VDU 23, 0, &A0, sid; &48, 7, oid; scaley; : Set Object Y Scale Factor
+VDU 23, 0, &A0, sid; &48, 8, oid; scalez; : Set Object Z Scale Factor
+VDU 23, 0, &A0, sid; &48, 9, oid; scalex; scaley; scalez : Set Object XYZ Scale Factors
+VDU 23, 0, &A0, sid; &48, 10, oid; anglex; : Set Object X Rotation Angle
+VDU 23, 0, &A0, sid; &48, 11, oid; angley; : Set Object Y Rotation Angle
+VDU 23, 0, &A0, sid; &48, 12, oid; anglez; : Set Object Z Rotation Angle
+VDU 23, 0, &A0, sid; &48, 13, oid; anglex; angley; anglez; : Set Object XYZ Rotation Angles
+VDU 23, 0, &A0, sid; &48, 14, oid; distx; : Set Object X Translation Distance
+VDU 23, 0, &A0, sid; &48, 15, oid; disty; : Set Object Y Translation Distance
+VDU 23, 0, &A0, sid; &48, 16, oid; distz; : Set Object Z Translation Distance
+VDU 23, 0, &A0, sid; &48, 17, oid; distx; disty; distz : Set Object XYZ Translation Distances
+VDU 23, 0, &A0, sid; &48, 18, bmid; : Render To Bitmap
## Define Mesh Vertices -VDU 23, 30, 203, id; mid; n; x0; y0; z0; ... : Define Mesh Vertices +VDU 23, 0, &A0, sid; &48, 1, mid; n; x0; y0; z0; ... : Define Mesh Vertices This command establishes the list of mesh coordinates to be used to define a surface structure. The mesh may be referenced by multiple objects. @@ -147,7 +115,7 @@ a surface structure. The mesh may be referenced by multiple objects. The "n" parameter is the number of vertices, so the total number of coordinates specified equals n*3. ## Set Mesh Vertex Indices -VDU 23, 30, 204, id; mid; n; i0; ... : Set Mesh Vertex Indices +VDU 23, 0, &A0, sid; &48, 2, mid; n; i0; ... : Set Mesh Vertex Indices This command lists the indexes of the vertices that define a 3D mesh. Individual vertices are often referenced multiple times within a mesh, because they are @@ -157,7 +125,7 @@ the number of defined mesh vertices. The "n" parameter is the number of indices. ## Define Texture Coordinates -VDU 23, 30, 205, id; mid; n; u0; v0; ... : Define Texture Coordinates +VDU 23, 0, &A0, sid; &48, 3, mid; n; u0; v0; ... : Define Texture Coordinates This command establishes the list of U/V texture coordinates that define texturing for a mesh. @@ -165,7 +133,7 @@ for a mesh. The "n" parameter is the number of coordinate pairs, so the total number of coordinates specified equals n*2. ## Set Texture Coordinate Indices -VDU 23, 30, 206, id; mid; n; i0; ... : Set Texture Coordinate Indices +VDU 23, 0, &A0, sid; &48, 4, mid; n; i0; ... : Set Texture Coordinate Indices This command lists the indexes of the coordinates that define a 3D texture for a mesh. Individual coordinates may be referenced multiple times within a texture, @@ -176,7 +144,7 @@ coordinates associated with it. The "n" parameter is the number of indices. ## Define Object -VDU 23, 30, 207, id; oid; mid; bmid; : Create Object +VDU 23, 0, &A0, sid; &48, 5, oid; mid; bmid; : Create Object This command defines a renderable object in terms of its already-defined mesh, plus a reference to an existing bitmap that provides its coloring, via the @@ -184,75 +152,75 @@ texture coordinates used by the mesh. The same mesh can be used multiple times, with the same or different bitmaps for coloring. ## Set Object X Scale Factor -VDU 23, 30, 208, id; oid; scalex; : Set Object X Scale Factor +VDU 23, 0, &A0, sid; &48, 6, oid; scalex; : Set Object X Scale Factor This command sets the X scale factor for an object. ## Set Object Y Scale Factor -VDU 23, 30, 209, id; oid; scaley; : Set Object Y Scale Factor +VDU 23, 0, &A0, sid; &48, 7, oid; scaley; : Set Object Y Scale Factor This command sets the Y scale factor for an object. ## Set Object Z Scale Factor -VDU 23, 30, 210, id; oid; scalez; : Set Object Z Scale Factor +VDU 23, 0, &A0, sid; &48, 8, oid; scalez; : Set Object Z Scale Factor This command sets the Z scale factor for an object. ## Set Object XYZ Scale Factors -VDU 23, 30, 211, id; oid; scalex; scaley; scalez : Set Object XYZ Scale Factors +VDU 23, 0, &A0, sid; &48, 9, oid; scalex; scaley; scalez : Set Object XYZ Scale Factors This command sets the X, Y, and Z scale factors for an object. ## Set Object X Rotation Angle -VDU 23, 30, 212, id; oid; anglex; : Set Object X Rotation Angle +VDU 23, 0, &A0, sid; &48, 10, oid; anglex; : Set Object X Rotation Angle This command sets the X rotation angle for an object. ## Set Object Y Rotation Angle -VDU 23, 30, 213, id; oid; angley; : Set Object Y Rotation Angle +VDU 23, 0, &A0, sid; &48, 11, oid; angley; : Set Object Y Rotation Angle This command sets the Y rotation angle for an object. ## Set Object Z Rotation Angle -VDU 23, 30, 214, id; oid; anglez; : Set Object Z Rotation Angle +VDU 23, 0, &A0, sid; &48, 12, oid; anglez; : Set Object Z Rotation Angle This command sets the Z rotation angle for an object. ## Set Object XYZ Rotation Angles -VDU 23, 30, 215, id; oid; anglex; angley; anglez; : Set Object XYZ Rotation Angles +VDU 23, 0, &A0, sid; &48, 13, oid; anglex; angley; anglez; : Set Object XYZ Rotation Angles This command sets the X, Y, and Z rotation angles for an object. ## Set Object X Translation Distance -VDU 23, 30, 216, id; oid; distx; : Set Object X Translation Distance +VDU 23, 0, &A0, sid; &48, 14, oid; distx; : Set Object X Translation Distance This command sets the X translation distance for an object. Note that 3D translation of an object is independent of 2D translation of the bitmap belonging to the render primitive. ## Set Object Y Translation Distance -VDU 23, 30, 217, id; oid; disty; : Set Object Y Translation Distance +VDU 23, 0, &A0, sid; &48, 15, oid; disty; : Set Object Y Translation Distance This command sets the Y translation distance for an object. Note that 3D translation of an object is independent of 2D translation of the bitmap belonging to the render primitive. ## Set Object Z Translation Distance -VDU 23, 30, 218, id; oid; distz; : Set Object Z Translation Distance +VDU 23, 0, &A0, sid; &48, 16, oid; distz; : Set Object Z Translation Distance This command sets the Z translation distance for an object. Note that 3D translation of an object is independent of 2D translation of the bitmap belonging to the render primitive. ## Set Object XYZ Translation Distances -VDU 23, 30, 219, id; oid; distx; disty; distz : Set Object XYZ Translation Distances +VDU 23, 0, &A0, sid; &48, 17, oid; distx; disty; distz : Set Object XYZ Translation Distances This command sets the X, Y, and Z translation distances for an object. Note that 3D translation of an object is independent of 2D translation of the bitmap belonging to the render primitive. ## Render To Bitmap -VDU 23, 30, 220, id; : Render To Bitmap +VDU 23, 0, &A0, sid; &48, 18, bmid; : Render To Bitmap This command uses information provided by the above commands to render the 3D scene onto the bitmap belonging to the render primitive. This command must be used in diff --git a/video/vdu_buffered.h b/video/vdu_buffered.h index 27f80706..0750d8d9 100644 --- a/video/vdu_buffered.h +++ b/video/vdu_buffered.h @@ -198,6 +198,9 @@ void VDUStreamProcessor::vdu_sys_buffered() { if (sourceBufferId == -1) return; bufferDecompress(bufferId, sourceBufferId); } break; + case BUFFERED_PINGO_3D: { + bufferUsePingo3D(bufferId); + } break; case BUFFERED_DEBUG_INFO: { debug_log("vdu_sys_buffered: buffer %d, %d streams stored\n\r", bufferId, buffers[bufferId].size()); if (buffers[bufferId].empty()) { @@ -1710,4 +1713,29 @@ void VDUStreamProcessor::bufferDecompress(uint16_t bufferId, uint16_t sourceBuff } } +// VDU 23, 0, &A0, bufferId; &48, subcommand - Configure/render using Pingo 3D +// +// VDU 23, 0, &A0, sid; &48, 1, mid; n; x0; y0; z0; ... : Define Mesh Vertices
+// VDU 23, 0, &A0, sid; &48, 2, mid; n; i0; ... : Set Mesh Vertex Indices
+// VDU 23, 0, &A0, sid; &48, 3, mid; n; u0; v0; ... : Define Texture Coordinates
+// VDU 23, 0, &A0, sid; &48, 4, mid; n; i0; ... : Set Texture Coordinate Indices
+// VDU 23, 0, &A0, sid; &48, 5, oid; mid; bmid; : Create Object
+// VDU 23, 0, &A0, sid; &48, 6, oid; scalex; : Set Object X Scale Factor
+// VDU 23, 0, &A0, sid; &48, 7, oid; scaley; : Set Object Y Scale Factor
+// VDU 23, 0, &A0, sid; &48, 8, oid; scalez; : Set Object Z Scale Factor
+// VDU 23, 0, &A0, sid; &48, 9, oid; scalex; scaley; scalez : Set Object XYZ Scale Factors
+// VDU 23, 0, &A0, sid; &48, 10, oid; anglex; : Set Object X Rotation Angle
+// VDU 23, 0, &A0, sid; &48, 11, oid; angley; : Set Object Y Rotation Angle
+// VDU 23, 0, &A0, sid; &48, 12, oid; anglez; : Set Object Z Rotation Angle
+// VDU 23, 0, &A0, sid; &48, 13, oid; anglex; angley; anglez; : Set Object XYZ Rotation Angles
+// VDU 23, 0, &A0, sid; &48, 14, oid; distx; : Set Object X Translation Distance
+// VDU 23, 0, &A0, sid; &48, 15, oid; disty; : Set Object Y Translation Distance
+// VDU 23, 0, &A0, sid; &48, 16, oid; distz; : Set Object Z Translation Distance
+// VDU 23, 0, &A0, sid; &48, 17, oid; distx; disty; distz : Set Object XYZ Translation Distances
+// VDU 23, 0, &A0, sid; &48, 18, bmid; : Render To Bitmap
+// +void VDUStreamProcessor::bufferUsePingo3D(uint16_t bufferId) { + +} + #endif // VDU_BUFFERED_H diff --git a/video/vdu_stream_processor.h b/video/vdu_stream_processor.h index 121af688..c60c6f69 100644 --- a/video/vdu_stream_processor.h +++ b/video/vdu_stream_processor.h @@ -129,6 +129,7 @@ class VDUStreamProcessor { void bufferCopyAndConsolidate(uint16_t bufferId, tcb::span sourceBufferIds); void bufferCompress(uint16_t bufferId, uint16_t sourceBufferId); void bufferDecompress(uint16_t bufferId, uint16_t sourceBufferId); + void bufferUsePingo3D(uint16_t bufferId); void vdu_sys_updater(); void unlock(); From e2eba8c6c5c27271570e01b4afba690850013128 Mon Sep 17 00:00:00 2001 From: Curtis Whitley Date: Mon, 22 Apr 2024 15:52:11 -0400 Subject: [PATCH 04/49] add notes on subcommmand 0 --- video/pingo/vdu_pingo.md | 12 ++++++++++++ video/vdu_buffered.h | 1 + 2 files changed, 13 insertions(+) diff --git a/video/pingo/vdu_pingo.md b/video/pingo/vdu_pingo.md index e4414599..a8e180cd 100644 --- a/video/pingo/vdu_pingo.md +++ b/video/pingo/vdu_pingo.md @@ -87,6 +87,7 @@ VDU ... PDX; PDY; PDZ; ... ## Overview of Commands +VDU 23, 0, &A0, sid; &48, 0, init : Initialize/Deinitialize Control Structure
VDU 23, 0, &A0, sid; &48, 1, mid; n; x0; y0; z0; ... : Define Mesh Vertices
VDU 23, 0, &A0, sid; &48, 2, mid; n; i0; ... : Set Mesh Vertex Indices
VDU 23, 0, &A0, sid; &48, 3, mid; n; u0; v0; ... : Define Texture Coordinates
@@ -106,6 +107,17 @@ VDU ... PDX; PDY; PDZ; ... VDU 23, 0, &A0, sid; &48, 17, oid; distx; disty; distz : Set Object XYZ Translation Distances
VDU 23, 0, &A0, sid; &48, 18, bmid; : Render To Bitmap
+## Initialize/Deinitialize Control Structure +VDU 23, 0, &A0, sid; &48, 0, init : Initialize/Deinitialize Control Structure
+ +If init is nonzero, this command initializes a control structure used to +do 3D rendering. The structure is housed inside the designated buffer. The buffer +is created, if it does not already exist. + +If init is zero, this command deinitializes an existing control structure, +assuming that it exists in the designated buffer. The buffer is subsequently +deleted, as part of processing for this command. + ## Define Mesh Vertices VDU 23, 0, &A0, sid; &48, 1, mid; n; x0; y0; z0; ... : Define Mesh Vertices diff --git a/video/vdu_buffered.h b/video/vdu_buffered.h index 0750d8d9..630e324e 100644 --- a/video/vdu_buffered.h +++ b/video/vdu_buffered.h @@ -1715,6 +1715,7 @@ void VDUStreamProcessor::bufferDecompress(uint16_t bufferId, uint16_t sourceBuff // VDU 23, 0, &A0, bufferId; &48, subcommand - Configure/render using Pingo 3D // +// VDU 23, 0, &A0, sid; &48, 0, init : Initialize/Deinitialize Control Structure
// VDU 23, 0, &A0, sid; &48, 1, mid; n; x0; y0; z0; ... : Define Mesh Vertices
// VDU 23, 0, &A0, sid; &48, 2, mid; n; i0; ... : Set Mesh Vertex Indices
// VDU 23, 0, &A0, sid; &48, 3, mid; n; u0; v0; ... : Define Texture Coordinates
From 841c416dee53e3413069efe082914a3cd903de80 Mon Sep 17 00:00:00 2001 From: Curtis Whitley Date: Mon, 22 Apr 2024 16:57:10 -0400 Subject: [PATCH 05/49] interim; starting to add code --- video/pingo_3d.h | 150 +++++++++++++++++++++++++++++++++++++++++++ video/vdu_buffered.h | 80 +++++++++++++++++------ video/video.ino | 8 +++ 3 files changed, 218 insertions(+), 20 deletions(-) create mode 100644 video/pingo_3d.h diff --git a/video/pingo_3d.h b/video/pingo_3d.h new file mode 100644 index 00000000..e9f7a4c6 --- /dev/null +++ b/video/pingo_3d.h @@ -0,0 +1,150 @@ +#ifndef PINGO_3D_H +#define PINGO_3D_H + +#include +#include +#include + +#define PINGO_3D_CONTROL_TAG 0x50334443 // "P3DC" + +class VDUStreamProcessor; + +typedef struct tag_Pingo3dControl { + uint32_t m_tag; // Used to verify the existence of this structure + uint32_t m_size; // Used to verify the existence of this structure + VDUStreamProcessor* m_proc; // Used by subcommands to obtain more data + + // VDU 23, 0, &A0, sid; &48, 0, 1 : Initialize Control Structure + void initialize() { + memset(this, 0, sizeof(tag_Pingo3dControl)); + m_tag = PINGO_3D_CONTROL_TAG; + m_size = sizeof(tag_Pingo3dControl); + } + + // VDU 23, 0, &A0, sid; &48, 0, 0 : Deinitialize Control Structure + void deinitialize() { + } + + bool validate() { + return (m_tag == PINGO_3D_CONTROL_TAG && + m_size == sizeof(Pingo3dControl)); + } + + void handle_subcommand(VDUStreamProcessor& processor, uint8_t subcmd) { + debug_log("P3D: handle_subcommand(%hu)\n", subcmd); + m_proc = &processor; + switch (subcmd) { + case 1: define_mesh_vertices(); break; + case 2: set_mesh_vertex_indices(); break; + case 3: define_texture_coordinates(); break; + case 4: set_texture_coordinate_indices(); break; + case 5: create_object(); break; + case 6: set_object_x_scale_factor(); break; + case 7: set_object_y_scale_factor(); break; + case 8: set_object_z_scale_factor(); break; + case 9: set_object_xyz_scale_factors(); break; + case 10: set_object_x_rotation_angle(); break; + case 11: set_object_y_rotation_angle(); break; + case 12: set_object_z_rotation_angle(); break; + case 13: set_object_xyz_rotation_angles(); break; + case 14: set_object_x_translation_distance(); break; + case 15: set_object_y_translation_distance(); break; + case 16: set_object_z_translation_distance(); break; + case 17: set_object_xyz_translation_distances(); break; + case 18: render_to_bitmap(); break; + } + } + + // VDU 23, 0, &A0, sid; &48, 1, mid; n; x0; y0; z0; ... : Define Mesh Vertices + void define_mesh_vertices() { + + } + + // VDU 23, 0, &A0, sid; &48, 2, mid; n; i0; ... : Set Mesh Vertex Indices + void set_mesh_vertex_indices() { + + } + + // VDU 23, 0, &A0, sid; &48, 3, mid; n; u0; v0; ... : Define Texture Coordinates + void define_texture_coordinates() { + + } + + // VDU 23, 0, &A0, sid; &48, 4, mid; n; i0; ... : Set Texture Coordinate Indices + void set_texture_coordinate_indices() { + + } + + // VDU 23, 0, &A0, sid; &48, 5, oid; mid; bmid; : Create Object + void create_object() { + + } + + // VDU 23, 0, &A0, sid; &48, 6, oid; scalex; : Set Object X Scale Factor + void set_object_x_scale_factor() { + + } + + // VDU 23, 0, &A0, sid; &48, 7, oid; scaley; : Set Object Y Scale Factor + void set_object_y_scale_factor() { + + } + + // VDU 23, 0, &A0, sid; &48, 8, oid; scalez; : Set Object Z Scale Factor + void set_object_z_scale_factor() { + + } + + // VDU 23, 0, &A0, sid; &48, 9, oid; scalex; scaley; scalez : Set Object XYZ Scale Factors + void set_object_xyz_scale_factors() { + + } + + // VDU 23, 0, &A0, sid; &48, 10, oid; anglex; : Set Object X Rotation Angle + void set_object_x_rotation_angle() { + + } + + // VDU 23, 0, &A0, sid; &48, 11, oid; angley; : Set Object Y Rotation Angle + void set_object_y_rotation_angle() { + + } + + // VDU 23, 0, &A0, sid; &48, 12, oid; anglez; : Set Object Z Rotation Angle + void set_object_z_rotation_angle() { + + } + + // VDU 23, 0, &A0, sid; &48, 13, oid; anglex; angley; anglez; : Set Object XYZ Rotation Angles + void set_object_xyz_rotation_angles() { + + } + + // VDU 23, 0, &A0, sid; &48, 14, oid; distx; : Set Object X Translation Distance + void set_object_x_translation_distance() { + + } + + // VDU 23, 0, &A0, sid; &48, 15, oid; disty; : Set Object Y Translation Distance + void set_object_y_translation_distance() { + + } + + // VDU 23, 0, &A0, sid; &48, 16, oid; distz; : Set Object Z Translation Distance + void set_object_z_translation_distance() { + + } + + // VDU 23, 0, &A0, sid; &48, 17, oid; distx; disty; distz : Set Object XYZ Translation Distances + void set_object_xyz_translation_distances() { + + } + + // VDU 23, 0, &A0, sid; &48, 18, bmid; : Render To Bitmap + void render_to_bitmap() { + + } + +} Pingo3dControl; + +#endif // PINGO_3D_H diff --git a/video/vdu_buffered.h b/video/vdu_buffered.h index 630e324e..ca06647e 100644 --- a/video/vdu_buffered.h +++ b/video/vdu_buffered.h @@ -17,6 +17,7 @@ #include "sprites.h" #include "types.h" #include "vdu_stream_processor.h" +#include "pingo_3d.h" // VDU 23, 0, &A0, bufferId; command: Buffered command support // @@ -1715,28 +1716,67 @@ void VDUStreamProcessor::bufferDecompress(uint16_t bufferId, uint16_t sourceBuff // VDU 23, 0, &A0, bufferId; &48, subcommand - Configure/render using Pingo 3D // -// VDU 23, 0, &A0, sid; &48, 0, init : Initialize/Deinitialize Control Structure
-// VDU 23, 0, &A0, sid; &48, 1, mid; n; x0; y0; z0; ... : Define Mesh Vertices
-// VDU 23, 0, &A0, sid; &48, 2, mid; n; i0; ... : Set Mesh Vertex Indices
-// VDU 23, 0, &A0, sid; &48, 3, mid; n; u0; v0; ... : Define Texture Coordinates
-// VDU 23, 0, &A0, sid; &48, 4, mid; n; i0; ... : Set Texture Coordinate Indices
-// VDU 23, 0, &A0, sid; &48, 5, oid; mid; bmid; : Create Object
-// VDU 23, 0, &A0, sid; &48, 6, oid; scalex; : Set Object X Scale Factor
-// VDU 23, 0, &A0, sid; &48, 7, oid; scaley; : Set Object Y Scale Factor
-// VDU 23, 0, &A0, sid; &48, 8, oid; scalez; : Set Object Z Scale Factor
-// VDU 23, 0, &A0, sid; &48, 9, oid; scalex; scaley; scalez : Set Object XYZ Scale Factors
-// VDU 23, 0, &A0, sid; &48, 10, oid; anglex; : Set Object X Rotation Angle
-// VDU 23, 0, &A0, sid; &48, 11, oid; angley; : Set Object Y Rotation Angle
-// VDU 23, 0, &A0, sid; &48, 12, oid; anglez; : Set Object Z Rotation Angle
-// VDU 23, 0, &A0, sid; &48, 13, oid; anglex; angley; anglez; : Set Object XYZ Rotation Angles
-// VDU 23, 0, &A0, sid; &48, 14, oid; distx; : Set Object X Translation Distance
-// VDU 23, 0, &A0, sid; &48, 15, oid; disty; : Set Object Y Translation Distance
-// VDU 23, 0, &A0, sid; &48, 16, oid; distz; : Set Object Z Translation Distance
-// VDU 23, 0, &A0, sid; &48, 17, oid; distx; disty; distz : Set Object XYZ Translation Distances
-// VDU 23, 0, &A0, sid; &48, 18, bmid; : Render To Bitmap
+// VDU 23, 0, &A0, sid; &48, 0, init : Initialize/Deinitialize Control Structure +// VDU 23, 0, &A0, sid; &48, 1, mid; n; x0; y0; z0; ... : Define Mesh Vertices +// VDU 23, 0, &A0, sid; &48, 2, mid; n; i0; ... : Set Mesh Vertex Indices +// VDU 23, 0, &A0, sid; &48, 3, mid; n; u0; v0; ... : Define Texture Coordinates +// VDU 23, 0, &A0, sid; &48, 4, mid; n; i0; ... : Set Texture Coordinate Indices +// VDU 23, 0, &A0, sid; &48, 5, oid; mid; bmid; : Create Object +// VDU 23, 0, &A0, sid; &48, 6, oid; scalex; : Set Object X Scale Factor +// VDU 23, 0, &A0, sid; &48, 7, oid; scaley; : Set Object Y Scale Factor +// VDU 23, 0, &A0, sid; &48, 8, oid; scalez; : Set Object Z Scale Factor +// VDU 23, 0, &A0, sid; &48, 9, oid; scalex; scaley; scalez : Set Object XYZ Scale Factors +// VDU 23, 0, &A0, sid; &48, 10, oid; anglex; : Set Object X Rotation Angle +// VDU 23, 0, &A0, sid; &48, 11, oid; angley; : Set Object Y Rotation Angle +// VDU 23, 0, &A0, sid; &48, 12, oid; anglez; : Set Object Z Rotation Angle +// VDU 23, 0, &A0, sid; &48, 13, oid; anglex; angley; anglez; : Set Object XYZ Rotation Angles +// VDU 23, 0, &A0, sid; &48, 14, oid; distx; : Set Object X Translation Distance +// VDU 23, 0, &A0, sid; &48, 15, oid; disty; : Set Object Y Translation Distance +// VDU 23, 0, &A0, sid; &48, 16, oid; distz; : Set Object Z Translation Distance +// VDU 23, 0, &A0, sid; &48, 17, oid; distx; disty; distz : Set Object XYZ Translation Distances +// VDU 23, 0, &A0, sid; &48, 18, bmid; : Render To Bitmap // void VDUStreamProcessor::bufferUsePingo3D(uint16_t bufferId) { - + auto subcmd = readByte_t(); + if (subcmd == 0) { + auto init = readByte_t(); + if (init) { + // Create the buffer if necessary + // Initialize the control structure + auto buffer = bufferCreate(bufferId, sizeof(Pingo3dControl)); + if (buffer) { + auto ctrl = (Pingo3dControl*) buffer[0].getBuffer(); + ctrl->initialize(); + } + } else { + // Deinitialize the control structure + // Delete the buffer + auto buffer = buffers.find(bufferId); + if (buffer != buffers.end()) { + auto ctrl = (Pingo3dControl*) buffer[0].getBuffer(); + if (ctrl->validate()) { + ctrl->deinitialize(); + buffers.erase(buffer); + } else { + debug_log("bufferUsePingo3D: buffer %d is invalid\n\r", bufferId); + } + } else { + debug_log("bufferUsePingo3D: buffer %d not found\n\r", bufferId); + } + } + } else { + auto buffer = buffers.find(bufferId); + if (buffer != buffers.end()) { + auto ctrl = (Pingo3dControl*) buffer[0].getBuffer(); + if (ctrl->validate()) { + ctrl->handle_subcommand(*this, subcmd); + } else { + debug_log("bufferUsePingo3D: buffer %d is invalid\n\r", bufferId); + } + } else { + debug_log("bufferUsePingo3D: buffer %d not found\n\r", bufferId); + } + } } #endif // VDU_BUFFERED_H diff --git a/video/video.ino b/video/video.ino index 45a28eaa..570c2a79 100644 --- a/video/video.ino +++ b/video/video.ino @@ -76,6 +76,8 @@ VDUStreamProcessor * processor; // VDU Stream Processor #include "zdi.h" // ZDI debugging console +void test_pingo_3d(); + void setup() { #ifndef VDP_USE_WDT disableCore0WDT(); delay(200); // Disable the watchdog timers @@ -91,6 +93,12 @@ void setup() { processor->wait_eZ80(); setupKeyboardAndMouse(); processor->sendModeInformation(); + + test_pingo_3d(); +} + +void test_pingo_3d() { + } // The main loop From a0b102bffdecc702aa479e0223d9990f52b619db Mon Sep 17 00:00:00 2001 From: TurboVega Date: Mon, 22 Apr 2024 19:14:44 -0400 Subject: [PATCH 06/49] Update vdu_pingo.md --- video/pingo/vdu_pingo.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/video/pingo/vdu_pingo.md b/video/pingo/vdu_pingo.md index a8e180cd..5f10fc68 100644 --- a/video/pingo/vdu_pingo.md +++ b/video/pingo/vdu_pingo.md @@ -14,9 +14,9 @@ only supports passing 1-byte and 2-byte values. For that reason, many of the values passed to the render commands are scaled values. The commands below use numbers with the following meaning and ranges: -

sid: A VDU buffer ID that refers to a control structure for the 3D scene. -

mid: A specific mesh ID in the range 0 to 65535. This is not a primitive ID. -

oid: A specific object ID in the range 0 to 65535. This is not a primitive ID. +

sid: A VDU buffer ID that acts as a scene ID. It refers to a control structure for the 3D scene. +

mid: A specific mesh ID in the range 0 to 65535. +

oid: A specific object ID in the range 0 to 65535.

n: A positive number (count) of things that follow within the same command.

x: A 2D X coordinate in the range -32768 to +32767. Often, the value is in or near the range of 0 to screen width.

y: A 2D Y coordinate in the range -32768 to +32767. Often, the value is in or near the range of 0 to screen height. From 2631836d5e35df130b81607eae995f5008119ed9 Mon Sep 17 00:00:00 2001 From: Curtis Whitley Date: Tue, 23 Apr 2024 03:27:01 -0400 Subject: [PATCH 07/49] clean up compilation --- video/pingo_3d.h | 2 +- video/vdu_buffered.h | 18 ++++++++++-------- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/video/pingo_3d.h b/video/pingo_3d.h index e9f7a4c6..21e20b08 100644 --- a/video/pingo_3d.h +++ b/video/pingo_3d.h @@ -27,7 +27,7 @@ typedef struct tag_Pingo3dControl { bool validate() { return (m_tag == PINGO_3D_CONTROL_TAG && - m_size == sizeof(Pingo3dControl)); + m_size == sizeof(tag_Pingo3dControl)); } void handle_subcommand(VDUStreamProcessor& processor, uint8_t subcmd) { diff --git a/video/vdu_buffered.h b/video/vdu_buffered.h index ca06647e..bc73e0ae 100644 --- a/video/vdu_buffered.h +++ b/video/vdu_buffered.h @@ -1745,18 +1745,19 @@ void VDUStreamProcessor::bufferUsePingo3D(uint16_t bufferId) { // Initialize the control structure auto buffer = bufferCreate(bufferId, sizeof(Pingo3dControl)); if (buffer) { - auto ctrl = (Pingo3dControl*) buffer[0].getBuffer(); + auto ctrl = (Pingo3dControl*) buffer->getBuffer(); ctrl->initialize(); } } else { // Deinitialize the control structure // Delete the buffer - auto buffer = buffers.find(bufferId); - if (buffer != buffers.end()) { - auto ctrl = (Pingo3dControl*) buffer[0].getBuffer(); + auto bufferIter = buffers.find(bufferId); + if (bufferIter != buffers.end()) { + auto &buffer = bufferIter->second; + auto ctrl = (Pingo3dControl*) buffer.begin()->get()->getBuffer(); if (ctrl->validate()) { ctrl->deinitialize(); - buffers.erase(buffer); + buffers.erase(bufferIter); } else { debug_log("bufferUsePingo3D: buffer %d is invalid\n\r", bufferId); } @@ -1765,9 +1766,10 @@ void VDUStreamProcessor::bufferUsePingo3D(uint16_t bufferId) { } } } else { - auto buffer = buffers.find(bufferId); - if (buffer != buffers.end()) { - auto ctrl = (Pingo3dControl*) buffer[0].getBuffer(); + auto bufferIter = buffers.find(bufferId); + if (bufferIter != buffers.end()) { + auto &buffer = bufferIter->second; + auto ctrl = (Pingo3dControl*) buffer.begin()->get()->getBuffer(); if (ctrl->validate()) { ctrl->handle_subcommand(*this, subcmd); } else { From 1fdc1b39e686a2933d828f3ebedeeb75d8b78938 Mon Sep 17 00:00:00 2001 From: Curtis Whitley Date: Tue, 23 Apr 2024 03:35:13 -0400 Subject: [PATCH 08/49] started referencing pingo files --- video/pingo/render/renderer.h | 2 +- video/pingo/render/scene.h | 2 +- video/pingo_3d.h | 18 ++++++++++++++++++ 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/video/pingo/render/renderer.h b/video/pingo/render/renderer.h index 4f5244f0..ed4754cd 100644 --- a/video/pingo/render/renderer.h +++ b/video/pingo/render/renderer.h @@ -5,7 +5,7 @@ #include "pixel.h" #include "../math/vec4.h" -typedef struct Scene Scene; +typedef struct tag_Scene Scene; typedef struct BackEnd BackEnd; typedef struct Renderer{ diff --git a/video/pingo/render/scene.h b/video/pingo/render/scene.h index 43d4c15f..a0ef2cfd 100644 --- a/video/pingo/render/scene.h +++ b/video/pingo/render/scene.h @@ -11,7 +11,7 @@ #define MAX_SCENE_RENDERABLES 32 -typedef struct Scene { +typedef struct tag_Scene { uint8_t numberOfRenderables; Renderable renderables[MAX_SCENE_RENDERABLES]; Mat4 transform; diff --git a/video/pingo_3d.h b/video/pingo_3d.h index 21e20b08..6e0c1ed0 100644 --- a/video/pingo_3d.h +++ b/video/pingo_3d.h @@ -5,6 +5,24 @@ #include #include +namespace p3d { + + extern "C" { + + #include "pingo/assets/teapot.h" + + #include "pingo/render/mesh.h" + #include "pingo/render/object.h" + #include "pingo/render/pixel.h" + #include "pingo/render/renderer.h" + #include "pingo/render/scene.h" + #include "pingo/render/backend.h" + #include "pingo/render/depth.h" + + } // extern "C" + +} // namespace p3d + #define PINGO_3D_CONTROL_TAG 0x50334443 // "P3DC" class VDUStreamProcessor; From 3ae3eb26caed86d86fd512dc552865c01d63b014 Mon Sep 17 00:00:00 2001 From: Curtis Whitley Date: Tue, 23 Apr 2024 03:37:34 -0400 Subject: [PATCH 09/49] cleanup struct defs --- video/pingo/render/backend.h | 2 +- video/pingo/render/pixel.h | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/video/pingo/render/backend.h b/video/pingo/render/backend.h index e89bc0b6..7fd6f811 100644 --- a/video/pingo/render/backend.h +++ b/video/pingo/render/backend.h @@ -8,7 +8,7 @@ */ typedef struct Renderer Renderer; -typedef struct Pixel Pixel; +typedef struct tag_Pixel Pixel; typedef struct PingoDepth PingoDepth; typedef struct Texture Texture; diff --git a/video/pingo/render/pixel.h b/video/pingo/render/pixel.h index 2f6847f6..c5e3915b 100644 --- a/video/pingo/render/pixel.h +++ b/video/pingo/render/pixel.h @@ -8,7 +8,7 @@ //Formats definitions: #ifdef UINT8 -typedef struct Pixel { +typedef struct tag_Pixel { uint8_t g; }Pixel; #define PIXELBLACK (Pixel){0} @@ -16,7 +16,7 @@ typedef struct Pixel { #endif #ifdef RGB565 -typedef struct Pixel { +typedef struct tag_Pixel { uint8_t red:5; uint8_t green:6; uint8_t blue:5; @@ -26,7 +26,7 @@ typedef struct Pixel { #endif #ifdef RGB888 -typedef struct Pixel { +typedef struct tag_Pixel { uint8_t r; uint8_t g; uint8_t b; @@ -37,7 +37,7 @@ typedef struct Pixel { #endif #ifdef RGBA8888 -typedef struct Pixel { +typedef struct tag_Pixel { uint8_t r; uint8_t g; uint8_t b; @@ -49,7 +49,7 @@ typedef struct Pixel { #endif #ifdef BGRA8888 -typedef struct Pixel { +typedef struct tag_Pixel { uint8_t b; uint8_t g; uint8_t r; From 86b1693f331e920b8c681a9dfac436f4e3bb5431 Mon Sep 17 00:00:00 2001 From: Curtis Whitley Date: Tue, 23 Apr 2024 04:31:38 -0400 Subject: [PATCH 10/49] creating control members --- video/pingo/render/backend.h | 22 ++++++------ video/pingo/render/depth.h | 2 +- video/pingo/render/renderable.h | 2 +- video/pingo/render/renderer.h | 6 ++-- video/pingo/vdu_pingo.md | 24 ++++++++----- video/pingo_3d.h | 42 +++++++++++++++++++++- video/vdu_buffered.h | 62 +++++++++++++++++++-------------- 7 files changed, 109 insertions(+), 51 deletions(-) diff --git a/video/pingo/render/backend.h b/video/pingo/render/backend.h index 7fd6f811..696b037d 100644 --- a/video/pingo/render/backend.h +++ b/video/pingo/render/backend.h @@ -4,30 +4,32 @@ #include "../math/vec4.h" /** - * Privdes a common interface to multiple graphical backends + * Provides a common interface to multiple graphical backends */ -typedef struct Renderer Renderer; +typedef struct tag_Renderer Renderer; typedef struct tag_Pixel Pixel; -typedef struct PingoDepth PingoDepth; -typedef struct Texture Texture; +typedef struct tag_PingoDepth PingoDepth; -typedef struct BackEnd { +typedef struct tag_BackEnd { //Called on initialization and re-initialization - void (*init)(Renderer *, struct BackEnd *, Vec4i rect); + void (*init)(Renderer *, struct tag_BackEnd *, Vec4i rect); //Called before starting rendering - void (*beforeRender)(Renderer *, struct BackEnd * ); + void (*beforeRender)(Renderer *, struct tag_BackEnd * ); //Called after having finished a render - void (*afterRender)(Renderer *, struct BackEnd * ); + void (*afterRender)(Renderer *, struct tag_BackEnd * ); //Should return the address of the buffer (height*width*sizeof(Pixel)) - Pixel * (*getFrameBuffer)(Renderer *, struct BackEnd * ); + Pixel * (*getFrameBuffer)(Renderer *, struct tag_BackEnd * ); //Handle backend specific final framebuffer draw (can apply lighting in a different way if needed) void (*drawPixel)(Texture * f, Vec2i pos, Pixel color, float illumination); //Should return the address of the buffer (height*width*sizeof(Pixel)) - PingoDepth * (*getZetaBuffer)(Renderer *, struct BackEnd * ); + PingoDepth * (*getZetaBuffer)(Renderer *, struct tag_BackEnd * ); + + //Allows for referencing client-custom data structure + void* clientCustomData; } BackEnd; diff --git a/video/pingo/render/depth.h b/video/pingo/render/depth.h index 9d5fa4a7..9196da52 100644 --- a/video/pingo/render/depth.h +++ b/video/pingo/render/depth.h @@ -6,7 +6,7 @@ #define ZBUFFER32 // [ZBUFFER32 | ZBUFFER16 | ZBUFFER8] #ifdef ZBUFFER32 -typedef struct PingoDepth { +typedef struct tag_PingoDepth { uint32_t d; } PingoDepth; #endif diff --git a/video/pingo/render/renderable.h b/video/pingo/render/renderable.h index 24941d9f..0bd86bfa 100644 --- a/video/pingo/render/renderable.h +++ b/video/pingo/render/renderable.h @@ -2,7 +2,7 @@ #include "../math/mat4.h" -typedef struct Renderer Renderer; +typedef struct tag_Renderer Renderer; typedef enum { RENDERABLE_SCENE =0, diff --git a/video/pingo/render/renderer.h b/video/pingo/render/renderer.h index ed4754cd..8053f3b2 100644 --- a/video/pingo/render/renderer.h +++ b/video/pingo/render/renderer.h @@ -6,9 +6,9 @@ #include "../math/vec4.h" typedef struct tag_Scene Scene; -typedef struct BackEnd BackEnd; +typedef struct tag_BackEnd BackEnd; -typedef struct Renderer{ +typedef struct tag_Renderer{ Vec4i camera; Scene * scene; @@ -25,7 +25,7 @@ typedef struct Renderer{ extern int rendererRender(Renderer *); -extern int rendererInit(Renderer *, Vec2i size, struct BackEnd * backEnd); +extern int rendererInit(Renderer *, Vec2i size, struct tag_BackEnd * backEnd); extern int rendererSetScene(Renderer *r, Scene *s); diff --git a/video/pingo/vdu_pingo.md b/video/pingo/vdu_pingo.md index 5f10fc68..26092a88 100644 --- a/video/pingo/vdu_pingo.md +++ b/video/pingo/vdu_pingo.md @@ -87,7 +87,7 @@ VDU ... PDX; PDY; PDZ; ... ## Overview of Commands -VDU 23, 0, &A0, sid; &48, 0, init : Initialize/Deinitialize Control Structure
+VDU 23, 0, &A0, sid; &48, 0, w; h; : Create Control Structure
VDU 23, 0, &A0, sid; &48, 1, mid; n; x0; y0; z0; ... : Define Mesh Vertices
VDU 23, 0, &A0, sid; &48, 2, mid; n; i0; ... : Set Mesh Vertex Indices
VDU 23, 0, &A0, sid; &48, 3, mid; n; u0; v0; ... : Define Texture Coordinates
@@ -106,17 +106,16 @@ VDU ... PDX; PDY; PDZ; ... VDU 23, 0, &A0, sid; &48, 16, oid; distz; : Set Object Z Translation Distance
VDU 23, 0, &A0, sid; &48, 17, oid; distx; disty; distz : Set Object XYZ Translation Distances
VDU 23, 0, &A0, sid; &48, 18, bmid; : Render To Bitmap
+VDU 23, 0, &A0, sid; &48, 19 : Delete Control Structure
-## Initialize/Deinitialize Control Structure -VDU 23, 0, &A0, sid; &48, 0, init : Initialize/Deinitialize Control Structure
+## Create Control Structure +VDU 23, 0, &A0, sid; &48, 0, w; h; : Create Control Structure
-If init is nonzero, this command initializes a control structure used to +This command initializes a control structure used to do 3D rendering. The structure is housed inside the designated buffer. The buffer -is created, if it does not already exist. +referred to by the scene ID (sid) is created, if it does not already exist. -If init is zero, this command deinitializes an existing control structure, -assuming that it exists in the designated buffer. The buffer is subsequently -deleted, as part of processing for this command. +The given width and height determine the size of the final rendered scene. ## Define Mesh Vertices VDU 23, 0, &A0, sid; &48, 1, mid; n; x0; y0; z0; ... : Define Mesh Vertices @@ -239,6 +238,15 @@ onto the bitmap belonging to the render primitive. This command must be used in order to perform the render operation; it does not happen automatically, when other commands change some of the render parameters. +## Delete Control Structure +VDU 23, 0, &A0, sid; &48, 19 : Delete Control Structure
+ +This command deinitializes an existing control structure, +assuming that it exists in the designated buffer. The buffer is subsequently +deleted, as part of processing for this command. + +## Sample + The following image illustrates the concept. ![Render](render.png) diff --git a/video/pingo_3d.h b/video/pingo_3d.h index 6e0c1ed0..71e37a3c 100644 --- a/video/pingo_3d.h +++ b/video/pingo_3d.h @@ -4,6 +4,7 @@ #include #include #include +#include "esp_heap_caps.h" namespace p3d { @@ -31,12 +32,51 @@ typedef struct tag_Pingo3dControl { uint32_t m_tag; // Used to verify the existence of this structure uint32_t m_size; // Used to verify the existence of this structure VDUStreamProcessor* m_proc; // Used by subcommands to obtain more data + p3d::BackEnd m_backend; // Used by the renderer + p3d::Pixel* m_frame; // Frame buffer for rendered pixels + p3d::PingoDepth* m_zeta; // Zeta buffer for depth information + uint16_t m_width; // Width of final render in pixels + uint16_t m_height; // Height of final render in pixels // VDU 23, 0, &A0, sid; &48, 0, 1 : Initialize Control Structure - void initialize() { + void initialize(uint16_t width, uint16_t height) { memset(this, 0, sizeof(tag_Pingo3dControl)); m_tag = PINGO_3D_CONTROL_TAG; m_size = sizeof(tag_Pingo3dControl); + + auto frame_size = (uint32_t) width * (uint32_t) height; + m_frame = (p3d::Pixel*) heap_caps_malloc(sizeof(p3d::Pixel) * frame_size, + MALLOC_CAP_8BIT | MALLOC_CAP_SPIRAM); + m_zeta = (p3d::PingoDepth*) heap_caps_malloc(sizeof(p3d::PingoDepth) * frame_size, + MALLOC_CAP_8BIT | MALLOC_CAP_SPIRAM); + + m_backend.init = &static_init; + m_backend.beforeRender = &static_before_render; + m_backend.afterRender = &static_after_render; + m_backend.getFrameBuffer = &static_get_frame_buffer; + m_backend.getZetaBuffer = &static_get_zeta_buffer; + m_backend.drawPixel = 0; + m_backend.clientCustomData = (void*) this; + } + + static void static_init(p3d::Renderer* ren, p3d::BackEnd* backEnd, p3d::Vec4i _rect) { + //rect = _rect; + } + + static void static_before_render(p3d::Renderer* ren, p3d::BackEnd* backEnd) { + } + + static void static_after_render(p3d::Renderer* ren, p3d::BackEnd* backEnd) { + } + + static p3d::Pixel* static_get_frame_buffer(p3d::Renderer* ren, p3d::BackEnd* backEnd) { + auto p_this = (struct tag_Pingo3dControl*) backEnd->clientCustomData; + return p_this->m_frame; + } + + static p3d::PingoDepth* static_get_zeta_buffer(p3d::Renderer* ren, p3d::BackEnd* backEnd) { + auto p_this = (struct tag_Pingo3dControl*) backEnd->clientCustomData; + return p_this->m_zeta; } // VDU 23, 0, &A0, sid; &48, 0, 0 : Deinitialize Control Structure diff --git a/video/vdu_buffered.h b/video/vdu_buffered.h index bc73e0ae..95f8893a 100644 --- a/video/vdu_buffered.h +++ b/video/vdu_buffered.h @@ -1716,7 +1716,7 @@ void VDUStreamProcessor::bufferDecompress(uint16_t bufferId, uint16_t sourceBuff // VDU 23, 0, &A0, bufferId; &48, subcommand - Configure/render using Pingo 3D // -// VDU 23, 0, &A0, sid; &48, 0, init : Initialize/Deinitialize Control Structure +// VDU 23, 0, &A0, sid; &48, 0, w; h; : Create Control Structure // VDU 23, 0, &A0, sid; &48, 1, mid; n; x0; y0; z0; ... : Define Mesh Vertices // VDU 23, 0, &A0, sid; &48, 2, mid; n; i0; ... : Set Mesh Vertex Indices // VDU 23, 0, &A0, sid; &48, 3, mid; n; u0; v0; ... : Define Texture Coordinates @@ -1735,36 +1735,44 @@ void VDUStreamProcessor::bufferDecompress(uint16_t bufferId, uint16_t sourceBuff // VDU 23, 0, &A0, sid; &48, 16, oid; distz; : Set Object Z Translation Distance // VDU 23, 0, &A0, sid; &48, 17, oid; distx; disty; distz : Set Object XYZ Translation Distances // VDU 23, 0, &A0, sid; &48, 18, bmid; : Render To Bitmap +// VDU 23, 0, &A0, sid; &48, 19 : Delete Control Structure // void VDUStreamProcessor::bufferUsePingo3D(uint16_t bufferId) { auto subcmd = readByte_t(); if (subcmd == 0) { - auto init = readByte_t(); - if (init) { - // Create the buffer if necessary - // Initialize the control structure - auto buffer = bufferCreate(bufferId, sizeof(Pingo3dControl)); - if (buffer) { - auto ctrl = (Pingo3dControl*) buffer->getBuffer(); - ctrl->initialize(); - } - } else { - // Deinitialize the control structure - // Delete the buffer - auto bufferIter = buffers.find(bufferId); - if (bufferIter != buffers.end()) { - auto &buffer = bufferIter->second; - auto ctrl = (Pingo3dControl*) buffer.begin()->get()->getBuffer(); - if (ctrl->validate()) { - ctrl->deinitialize(); - buffers.erase(bufferIter); - } else { - debug_log("bufferUsePingo3D: buffer %d is invalid\n\r", bufferId); - } - } else { - debug_log("bufferUsePingo3D: buffer %d not found\n\r", bufferId); - } - } + // Create the buffer if necessary + // Initialize the control structure + auto w = readWord_t(); + if (w > 0) { + auto h = readWord_t(); + if (h > 0) { + auto buffer = bufferCreate(bufferId, sizeof(Pingo3dControl)); + if (buffer) { + auto ctrl = (Pingo3dControl*) buffer->getBuffer(); + ctrl->initialize((uint16_t)w, (uint16_t)h); + } + } else { + debug_log("bufferUsePingo3D: buffer %d missing height\n\r", bufferId); + } + } else { + debug_log("bufferUsePingo3D: buffer %d missing width\n\r", bufferId); + } + } else if (subcmd == 19) { + // Deinitialize the control structure + // Delete the buffer + auto bufferIter = buffers.find(bufferId); + if (bufferIter != buffers.end()) { + auto &buffer = bufferIter->second; + auto ctrl = (Pingo3dControl*) buffer.begin()->get()->getBuffer(); + if (ctrl->validate()) { + ctrl->deinitialize(); + buffers.erase(bufferIter); + } else { + debug_log("bufferUsePingo3D: buffer %d is invalid\n\r", bufferId); + } + } else { + debug_log("bufferUsePingo3D: buffer %d not found\n\r", bufferId); + } } else { auto bufferIter = buffers.find(bufferId); if (bufferIter != buffers.end()) { From a71f451b59b3c7f828a94a76b985d9741436e1d9 Mon Sep 17 00:00:00 2001 From: Curtis Whitley Date: Tue, 23 Apr 2024 04:48:31 -0400 Subject: [PATCH 11/49] adding more control members --- video/pingo_3d.h | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/video/pingo_3d.h b/video/pingo_3d.h index 71e37a3c..4ba867a2 100644 --- a/video/pingo_3d.h +++ b/video/pingo_3d.h @@ -4,6 +4,7 @@ #include #include #include +#include #include "esp_heap_caps.h" namespace p3d { @@ -29,14 +30,20 @@ namespace p3d { class VDUStreamProcessor; typedef struct tag_Pingo3dControl { - uint32_t m_tag; // Used to verify the existence of this structure - uint32_t m_size; // Used to verify the existence of this structure - VDUStreamProcessor* m_proc; // Used by subcommands to obtain more data - p3d::BackEnd m_backend; // Used by the renderer - p3d::Pixel* m_frame; // Frame buffer for rendered pixels - p3d::PingoDepth* m_zeta; // Zeta buffer for depth information - uint16_t m_width; // Width of final render in pixels - uint16_t m_height; // Height of final render in pixels + uint32_t m_tag; // Used to verify the existence of this structure + uint32_t m_size; // Used to verify the existence of this structure + VDUStreamProcessor* m_proc; // Used by subcommands to obtain more data + p3d::BackEnd m_backend; // Used by the renderer + p3d::Pixel* m_frame; // Frame buffer for rendered pixels + p3d::PingoDepth* m_zeta; // Zeta buffer for depth information + uint16_t m_width; // Width of final render in pixels + uint16_t m_height; // Height of final render in pixels + std::map m_mesh_vertices; // Map of arrays of mesh vertices + std::map m_mesh_indexes; // Map of arrays of mesh vertex indexes + std::map m_tex_coords; // Map of arrays of texture coordinates + std::map m_tex_indexes; // Map of arrays of texture coordinate indexes + std::map m_meshes; // Map of meshes for use by objects + std::map m_objects; // Map of objects that use meshes and have transforms // VDU 23, 0, &A0, sid; &48, 0, 1 : Initialize Control Structure void initialize(uint16_t width, uint16_t height) { From f0b318326178b25cc10a2fb6cf86493ff4404a57 Mon Sep 17 00:00:00 2001 From: TurboVega Date: Tue, 23 Apr 2024 07:05:25 -0400 Subject: [PATCH 12/49] Update vdu_pingo.md --- video/pingo/vdu_pingo.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/video/pingo/vdu_pingo.md b/video/pingo/vdu_pingo.md index 26092a88..75c5519e 100644 --- a/video/pingo/vdu_pingo.md +++ b/video/pingo/vdu_pingo.md @@ -234,7 +234,7 @@ belonging to the render primitive. VDU 23, 0, &A0, sid; &48, 18, bmid; : Render To Bitmap This command uses information provided by the above commands to render the 3D scene -onto the bitmap belonging to the render primitive. This command must be used in +onto the specified bitmap. This command must be used in order to perform the render operation; it does not happen automatically, when other commands change some of the render parameters. From 1e7bcc688f5d35a7937c51c73c2143c5f161841b Mon Sep 17 00:00:00 2001 From: Curtis Whitley Date: Tue, 23 Apr 2024 09:36:35 -0400 Subject: [PATCH 13/49] interim checkin --- video/pingo/vdu_pingo.md | 20 +++++----- video/pingo_3d.h | 76 +++++++++++++++++++++++++++--------- video/vdu_buffered.h | 8 ++-- video/vdu_stream_processor.h | 7 ++-- 4 files changed, 75 insertions(+), 36 deletions(-) diff --git a/video/pingo/vdu_pingo.md b/video/pingo/vdu_pingo.md index 75c5519e..36411e39 100644 --- a/video/pingo/vdu_pingo.md +++ b/video/pingo/vdu_pingo.md @@ -89,9 +89,9 @@ VDU ... PDX; PDY; PDZ; ... VDU 23, 0, &A0, sid; &48, 0, w; h; : Create Control Structure
VDU 23, 0, &A0, sid; &48, 1, mid; n; x0; y0; z0; ... : Define Mesh Vertices
-VDU 23, 0, &A0, sid; &48, 2, mid; n; i0; ... : Set Mesh Vertex Indices
+VDU 23, 0, &A0, sid; &48, 2, mid; n; i0; ... : Set Mesh Vertex Indexes
VDU 23, 0, &A0, sid; &48, 3, mid; n; u0; v0; ... : Define Texture Coordinates
-VDU 23, 0, &A0, sid; &48, 4, mid; n; i0; ... : Set Texture Coordinate Indices
+VDU 23, 0, &A0, sid; &48, 4, mid; n; i0; ... : Set Texture Coordinate Indexes
VDU 23, 0, &A0, sid; &48, 5, oid; mid; bmid; : Create Object
VDU 23, 0, &A0, sid; &48, 6, oid; scalex; : Set Object X Scale Factor
VDU 23, 0, &A0, sid; &48, 7, oid; scaley; : Set Object Y Scale Factor
@@ -125,15 +125,15 @@ a surface structure. The mesh may be referenced by multiple objects. The "n" parameter is the number of vertices, so the total number of coordinates specified equals n*3. -## Set Mesh Vertex Indices -VDU 23, 0, &A0, sid; &48, 2, mid; n; i0; ... : Set Mesh Vertex Indices +## Set Mesh Vertex Indexes +VDU 23, 0, &A0, sid; &48, 2, mid; n; i0; ... : Set Mesh Vertex Indexes This command lists the indexes of the vertices that define a 3D mesh. Individual vertices are often referenced multiple times within a mesh, because they are often part of multiple surface triangles. Each index value ranges from 0 to the number of defined mesh vertices. -The "n" parameter is the number of indices. +The "n" parameter is the number of indexes. ## Define Texture Coordinates VDU 23, 0, &A0, sid; &48, 3, mid; n; u0; v0; ... : Define Texture Coordinates @@ -143,16 +143,16 @@ for a mesh. The "n" parameter is the number of coordinate pairs, so the total number of coordinates specified equals n*2. -## Set Texture Coordinate Indices -VDU 23, 0, &A0, sid; &48, 4, mid; n; i0; ... : Set Texture Coordinate Indices +## Set Texture Coordinate Indexes +VDU 23, 0, &A0, sid; &48, 4, mid; n; i0; ... : Set Texture Coordinate Indexes This command lists the indexes of the coordinates that define a 3D texture for a mesh. Individual coordinates may be referenced multiple times within a texture, -but that is not required. The number of indices passed in this command must match -the number of mesh indices defining the mesh. Thus, each mesh vertex has texture +but that is not required. The number of indexes passed in this command must match +the number of mesh indexes defining the mesh. Thus, each mesh vertex has texture coordinates associated with it. -The "n" parameter is the number of indices. +The "n" parameter is the number of indexes. ## Define Object VDU 23, 0, &A0, sid; &48, 5, oid; mid; bmid; : Create Object diff --git a/video/pingo_3d.h b/video/pingo_3d.h index 4ba867a2..845977f8 100644 --- a/video/pingo_3d.h +++ b/video/pingo_3d.h @@ -25,7 +25,7 @@ namespace p3d { } // namespace p3d -#define PINGO_3D_CONTROL_TAG 0x50334443 // "P3DC" +#define PINGO_3D_CONTROL_TAG 0x43443350 // "P3DC" class VDUStreamProcessor; @@ -38,15 +38,11 @@ typedef struct tag_Pingo3dControl { p3d::PingoDepth* m_zeta; // Zeta buffer for depth information uint16_t m_width; // Width of final render in pixels uint16_t m_height; // Height of final render in pixels - std::map m_mesh_vertices; // Map of arrays of mesh vertices - std::map m_mesh_indexes; // Map of arrays of mesh vertex indexes - std::map m_tex_coords; // Map of arrays of texture coordinates - std::map m_tex_indexes; // Map of arrays of texture coordinate indexes - std::map m_meshes; // Map of meshes for use by objects - std::map m_objects; // Map of objects that use meshes and have transforms + std::map* m_meshes; // Map of meshes for use by objects + std::map* m_objects; // Map of objects that use meshes and have transforms // VDU 23, 0, &A0, sid; &48, 0, 1 : Initialize Control Structure - void initialize(uint16_t width, uint16_t height) { + void initialize(VDUStreamProcessor& processor, uint16_t width, uint16_t height) { memset(this, 0, sizeof(tag_Pingo3dControl)); m_tag = PINGO_3D_CONTROL_TAG; m_size = sizeof(tag_Pingo3dControl); @@ -64,6 +60,9 @@ typedef struct tag_Pingo3dControl { m_backend.getZetaBuffer = &static_get_zeta_buffer; m_backend.drawPixel = 0; m_backend.clientCustomData = (void*) this; + + m_meshes = new std::map; + m_objects = new std::map; } static void static_init(p3d::Renderer* ren, p3d::BackEnd* backEnd, p3d::Vec4i _rect) { @@ -87,7 +86,7 @@ typedef struct tag_Pingo3dControl { } // VDU 23, 0, &A0, sid; &48, 0, 0 : Deinitialize Control Structure - void deinitialize() { + void deinitialize(VDUStreamProcessor& processor) { } bool validate() { @@ -100,9 +99,9 @@ typedef struct tag_Pingo3dControl { m_proc = &processor; switch (subcmd) { case 1: define_mesh_vertices(); break; - case 2: set_mesh_vertex_indices(); break; + case 2: set_mesh_vertex_indexes(); break; case 3: define_texture_coordinates(); break; - case 4: set_texture_coordinate_indices(); break; + case 4: set_texture_coordinate_indexes(); break; case 5: create_object(); break; case 6: set_object_x_scale_factor(); break; case 7: set_object_y_scale_factor(); break; @@ -120,24 +119,63 @@ typedef struct tag_Pingo3dControl { } } - // VDU 23, 0, &A0, sid; &48, 1, mid; n; x0; y0; z0; ... : Define Mesh Vertices - void define_mesh_vertices() { + p3d::Mesh* create_mesh(uint16_t mid) { + auto mesh_iter = m_meshes->find(mid); + if (mesh_iter == m_meshes->end()) { + p3d::Mesh mesh; + memset(&mesh, 0, sizeof(mesh)); + (*m_meshes).insert(std::pair(mid, mesh)); + return &m_meshes->find(mid)->second; + } else { + return &mesh_iter->second; + } + } + p3d::Mesh* get_mesh() { + auto mid = m_proc->readWord_t(); + if (mid >= 0) { + return create_mesh(mid); + } + return NULL; } - // VDU 23, 0, &A0, sid; &48, 2, mid; n; i0; ... : Set Mesh Vertex Indices - void set_mesh_vertex_indices() { + // VDU 23, 0, &A0, sid; &48, 1, mid; n; x0; y0; z0; ... : Define Mesh Vertices + void define_mesh_vertices() { + auto mesh = get_mesh(); + if (mesh->positions) { + heap_caps_free(mesh->positions); + mesh->positions = 0; + } + auto n = (uint32_t) m_proc->readWord_t(); + if (n > 0) { + mesh->positions = (p3d::Vec3f*) heap_caps_malloc(n*sizeof(p3d::Vec3f), MALLOC_CAP_SPIRAM); + auto position = mesh->positions; + for (uint32_t i = 0; i < n; i++) { + uint16_t x = m_proc->readWord_t(); + uint16_t y = m_proc->readWord_t(); + uint16_t z = m_proc->readWord_t(); + if (position) { + position->x = x; + position->y = y; + position->z = z; + } + } + } + } + // VDU 23, 0, &A0, sid; &48, 2, mid; n; i0; ... : Set Mesh Vertex Indexes + void set_mesh_vertex_indexes() { +// m_mesh_indexes = new std::map; } // VDU 23, 0, &A0, sid; &48, 3, mid; n; u0; v0; ... : Define Texture Coordinates void define_texture_coordinates() { - +// m_tex_coords = new std::map; } - // VDU 23, 0, &A0, sid; &48, 4, mid; n; i0; ... : Set Texture Coordinate Indices - void set_texture_coordinate_indices() { - + // VDU 23, 0, &A0, sid; &48, 4, mid; n; i0; ... : Set Texture Coordinate Indexes + void set_texture_coordinate_indexes() { +// m_tex_indexes = new std::map; } // VDU 23, 0, &A0, sid; &48, 5, oid; mid; bmid; : Create Object diff --git a/video/vdu_buffered.h b/video/vdu_buffered.h index 95f8893a..6b8cec4c 100644 --- a/video/vdu_buffered.h +++ b/video/vdu_buffered.h @@ -1718,9 +1718,9 @@ void VDUStreamProcessor::bufferDecompress(uint16_t bufferId, uint16_t sourceBuff // // VDU 23, 0, &A0, sid; &48, 0, w; h; : Create Control Structure // VDU 23, 0, &A0, sid; &48, 1, mid; n; x0; y0; z0; ... : Define Mesh Vertices -// VDU 23, 0, &A0, sid; &48, 2, mid; n; i0; ... : Set Mesh Vertex Indices +// VDU 23, 0, &A0, sid; &48, 2, mid; n; i0; ... : Set Mesh Vertex Indexes // VDU 23, 0, &A0, sid; &48, 3, mid; n; u0; v0; ... : Define Texture Coordinates -// VDU 23, 0, &A0, sid; &48, 4, mid; n; i0; ... : Set Texture Coordinate Indices +// VDU 23, 0, &A0, sid; &48, 4, mid; n; i0; ... : Set Texture Coordinate Indexes // VDU 23, 0, &A0, sid; &48, 5, oid; mid; bmid; : Create Object // VDU 23, 0, &A0, sid; &48, 6, oid; scalex; : Set Object X Scale Factor // VDU 23, 0, &A0, sid; &48, 7, oid; scaley; : Set Object Y Scale Factor @@ -1749,7 +1749,7 @@ void VDUStreamProcessor::bufferUsePingo3D(uint16_t bufferId) { auto buffer = bufferCreate(bufferId, sizeof(Pingo3dControl)); if (buffer) { auto ctrl = (Pingo3dControl*) buffer->getBuffer(); - ctrl->initialize((uint16_t)w, (uint16_t)h); + ctrl->initialize(*this, (uint16_t)w, (uint16_t)h); } } else { debug_log("bufferUsePingo3D: buffer %d missing height\n\r", bufferId); @@ -1765,7 +1765,7 @@ void VDUStreamProcessor::bufferUsePingo3D(uint16_t bufferId) { auto &buffer = bufferIter->second; auto ctrl = (Pingo3dControl*) buffer.begin()->get()->getBuffer(); if (ctrl->validate()) { - ctrl->deinitialize(); + ctrl->deinitialize(*this); buffers.erase(bufferIter); } else { debug_log("bufferUsePingo3D: buffer %d is invalid\n\r", bufferId); diff --git a/video/vdu_stream_processor.h b/video/vdu_stream_processor.h index c60c6f69..843a5668 100644 --- a/video/vdu_stream_processor.h +++ b/video/vdu_stream_processor.h @@ -33,9 +33,6 @@ class VDUStreamProcessor { bool commandsEnabled = true; - int16_t readByte_t(uint16_t timeout); - int32_t readWord_t(uint16_t timeout); - int32_t read24_t(uint16_t timeout); uint8_t readByte_b(); uint32_t readIntoBuffer(uint8_t * buffer, uint32_t length, uint16_t timeout); uint32_t discardBytes(uint32_t length, uint16_t timeout); @@ -153,6 +150,10 @@ class VDUStreamProcessor { contextStack->push_back(context); } + int16_t readByte_t(uint16_t timeout); + int32_t readWord_t(uint16_t timeout); + int32_t read24_t(uint16_t timeout); + inline bool byteAvailable() { return inputStream->available() > 0; } From 637bf128ecf42434a5f65202dc5f69804694e3ee Mon Sep 17 00:00:00 2001 From: Curtis Whitley Date: Tue, 23 Apr 2024 09:58:45 -0400 Subject: [PATCH 14/49] slowly filling in code --- video/pingo_3d.h | 69 +++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 60 insertions(+), 9 deletions(-) diff --git a/video/pingo_3d.h b/video/pingo_3d.h index 845977f8..f4f8124d 100644 --- a/video/pingo_3d.h +++ b/video/pingo_3d.h @@ -144,20 +144,21 @@ typedef struct tag_Pingo3dControl { auto mesh = get_mesh(); if (mesh->positions) { heap_caps_free(mesh->positions); - mesh->positions = 0; + mesh->positions = NULL; } auto n = (uint32_t) m_proc->readWord_t(); if (n > 0) { mesh->positions = (p3d::Vec3f*) heap_caps_malloc(n*sizeof(p3d::Vec3f), MALLOC_CAP_SPIRAM); - auto position = mesh->positions; + auto pos = mesh->positions; for (uint32_t i = 0; i < n; i++) { uint16_t x = m_proc->readWord_t(); uint16_t y = m_proc->readWord_t(); uint16_t z = m_proc->readWord_t(); - if (position) { - position->x = x; - position->y = y; - position->z = z; + if (pos) { + pos->x = x; + pos->y = y; + pos->z = z; + pos++; } } } @@ -165,17 +166,67 @@ typedef struct tag_Pingo3dControl { // VDU 23, 0, &A0, sid; &48, 2, mid; n; i0; ... : Set Mesh Vertex Indexes void set_mesh_vertex_indexes() { -// m_mesh_indexes = new std::map; + auto mesh = get_mesh(); + if (mesh->pos_indices) { + heap_caps_free(mesh->pos_indices); + mesh->pos_indices = NULL; + mesh->indexes_count = 0; + } + auto n = (uint32_t) m_proc->readWord_t(); + if (n > 0) { + mesh->indexes_count = n; + mesh->pos_indices = (uint16_t*) heap_caps_malloc(n*sizeof(uint16_t), MALLOC_CAP_SPIRAM); + auto idx = mesh->pos_indices; + for (uint32_t i = 0; i < n; i++) { + uint16_t index = m_proc->readWord_t(); + if (idx) { + *idx++ = index; + } + } + } } // VDU 23, 0, &A0, sid; &48, 3, mid; n; u0; v0; ... : Define Texture Coordinates void define_texture_coordinates() { -// m_tex_coords = new std::map; + auto mesh = get_mesh(); + if (mesh->textCoord) { + heap_caps_free(mesh->textCoord); + mesh->textCoord = NULL; + } + auto n = (uint32_t) m_proc->readWord_t(); + if (n > 0) { + mesh->textCoord = (p3d::Vec2f*) heap_caps_malloc(n*sizeof(p3d::Vec2f), MALLOC_CAP_SPIRAM); + auto coord = mesh->textCoord; + for (uint32_t i = 0; i < n; i++) { + uint16_t u = m_proc->readWord_t(); + uint16_t v = m_proc->readWord_t(); + if (coord) { + coord->x = u; + coord->y = v; + coord++; + } + } + } } // VDU 23, 0, &A0, sid; &48, 4, mid; n; i0; ... : Set Texture Coordinate Indexes void set_texture_coordinate_indexes() { -// m_tex_indexes = new std::map; + auto mesh = get_mesh(); + if (mesh->tex_indices) { + heap_caps_free(mesh->tex_indices); + mesh->tex_indices = NULL; + } + auto n = (uint32_t) m_proc->readWord_t(); + if (n > 0) { + mesh->tex_indices = (uint16_t*) heap_caps_malloc(n*sizeof(uint16_t), MALLOC_CAP_SPIRAM); + auto idx = mesh->tex_indices; + for (uint32_t i = 0; i < n; i++) { + uint16_t index = m_proc->readWord_t(); + if (idx && (i < mesh->indexes_count)) { + *idx++ = index; + } + } + } } // VDU 23, 0, &A0, sid; &48, 5, oid; mid; bmid; : Create Object From f15cb81d34ce2eb1759ccff1f9ff5b9415f7c5c6 Mon Sep 17 00:00:00 2001 From: Curtis Whitley Date: Tue, 23 Apr 2024 11:13:55 -0400 Subject: [PATCH 15/49] filling in functions --- video/pingo/render/pixel.c | 2 +- video/pingo/render/pixel.h | 4 +- video/pingo/vdu_pingo.md | 3 +- video/pingo_3d.h | 153 ++++++++++++++++++++++++++++++++----- 4 files changed, 140 insertions(+), 22 deletions(-) diff --git a/video/pingo/render/pixel.c b/video/pingo/render/pixel.c index 8581a9ea..759c24fb 100644 --- a/video/pingo/render/pixel.c +++ b/video/pingo/render/pixel.c @@ -77,7 +77,7 @@ extern uint8_t pixelToUInt8( Pixel * p){ } extern Pixel pixelFromRGBA( uint8_t r, uint8_t g, uint8_t b, uint8_t a){ - return (Pixel){b,g,r,a}; + return (Pixel){r,g,b,a}; } extern Pixel pixelMul(Pixel p, float f) diff --git a/video/pingo/render/pixel.h b/video/pingo/render/pixel.h index c5e3915b..33b1fed9 100644 --- a/video/pingo/render/pixel.h +++ b/video/pingo/render/pixel.h @@ -50,9 +50,9 @@ typedef struct tag_Pixel { #ifdef BGRA8888 typedef struct tag_Pixel { - uint8_t b; - uint8_t g; uint8_t r; + uint8_t g; + uint8_t b; uint8_t a; } Pixel; diff --git a/video/pingo/vdu_pingo.md b/video/pingo/vdu_pingo.md index 36411e39..e1eaf74a 100644 --- a/video/pingo/vdu_pingo.md +++ b/video/pingo/vdu_pingo.md @@ -160,7 +160,8 @@ The "n" parameter is the number of indexes. This command defines a renderable object in terms of its already-defined mesh, plus a reference to an existing bitmap that provides its coloring, via the texture coordinates used by the mesh. The same mesh can be used multiple times, -with the same or different bitmaps for coloring. +with the same or different bitmaps for coloring. The bitmap must be in the +RGBA8888 format (4 bytes per pixel). ## Set Object X Scale Factor VDU 23, 0, &A0, sid; &48, 6, oid; scalex; : Set Object X Scale Factor diff --git a/video/pingo_3d.h b/video/pingo_3d.h index f4f8124d..c2c3ed8d 100644 --- a/video/pingo_3d.h +++ b/video/pingo_3d.h @@ -6,6 +6,7 @@ #include #include #include "esp_heap_caps.h" +#include "sprites.h" namespace p3d { @@ -29,6 +30,15 @@ namespace p3d { class VDUStreamProcessor; +typedef struct tag_TexObject { + p3d::Texture m_texture; + p3d::Material m_material; + p3d::Object m_object; + p3d::Vec3f m_scale; + p3d::Vec3f m_rotation; + p3d::Vec3f m_translation; +} TexObject; + typedef struct tag_Pingo3dControl { uint32_t m_tag; // Used to verify the existence of this structure uint32_t m_size; // Used to verify the existence of this structure @@ -38,8 +48,8 @@ typedef struct tag_Pingo3dControl { p3d::PingoDepth* m_zeta; // Zeta buffer for depth information uint16_t m_width; // Width of final render in pixels uint16_t m_height; // Height of final render in pixels - std::map* m_meshes; // Map of meshes for use by objects - std::map* m_objects; // Map of objects that use meshes and have transforms + std::map* m_meshes; // Map of meshes for use by objects + std::map* m_objects; // Map of textured objects that use meshes and have transforms // VDU 23, 0, &A0, sid; &48, 0, 1 : Initialize Control Structure void initialize(VDUStreamProcessor& processor, uint16_t width, uint16_t height) { @@ -62,7 +72,7 @@ typedef struct tag_Pingo3dControl { m_backend.clientCustomData = (void*) this; m_meshes = new std::map; - m_objects = new std::map; + m_objects = new std::map; } static void static_init(p3d::Renderer* ren, p3d::BackEnd* backEnd, p3d::Vec4i _rect) { @@ -119,7 +129,7 @@ typedef struct tag_Pingo3dControl { } } - p3d::Mesh* create_mesh(uint16_t mid) { + p3d::Mesh* establish_mesh(uint16_t mid) { auto mesh_iter = m_meshes->find(mid); if (mesh_iter == m_meshes->end()) { p3d::Mesh mesh; @@ -134,7 +144,30 @@ typedef struct tag_Pingo3dControl { p3d::Mesh* get_mesh() { auto mid = m_proc->readWord_t(); if (mid >= 0) { - return create_mesh(mid); + return establish_mesh(mid); + } + return NULL; + } + + TexObject* establish_object(uint16_t mid) { + auto object_iter = m_objects->find(mid); + if (object_iter == m_objects->end()) { + TexObject object; + memset(&object, 0, sizeof(object)); + object.m_object.material = &object.m_material; + object.m_material.texture = &object.m_texture; + object.m_scale = p3d::Vec3f { 1.0f, 1.0f, 1.0f }; + (*m_objects).insert(std::pair(mid, object)); + return &m_objects->find(mid)->second; + } else { + return &object_iter->second; + } + } + + TexObject* get_object() { + auto mid = m_proc->readWord_t(); + if (mid >= 0) { + return establish_object(mid); } return NULL; } @@ -231,67 +264,151 @@ typedef struct tag_Pingo3dControl { // VDU 23, 0, &A0, sid; &48, 5, oid; mid; bmid; : Create Object void create_object() { + auto object = get_object(); + auto mesh = get_mesh(); + auto bmid = m_proc->readWord_t(); + if (object && mesh && bmid) { + auto stored_bitmap = getBitmap(bmid); + if (stored_bitmap) { + auto bitmap = stored_bitmap.get(); + if (bitmap) { + auto size = p3d::Vec2i{(p3d::I_TYPE)bitmap->width, (p3d::I_TYPE)bitmap->height}; + texture_init(&object->m_texture, size, (p3d::Pixel*) bitmap->data); + object->m_object.mesh = mesh; + } + } + } + } + p3d::F_TYPE convert_scale_value(int32_t value) { + return 0; + } + + p3d::F_TYPE convert_rotation_value(int32_t value) { + return 0; + } + + p3d::F_TYPE convert_translation_value(int32_t value) { + return 0; } // VDU 23, 0, &A0, sid; &48, 6, oid; scalex; : Set Object X Scale Factor void set_object_x_scale_factor() { - + auto object = get_object(); + auto value = m_proc->readWord_t(); + if (object && (value >= 0)) { + object->m_scale.x = convert_scale_value(value); + } } // VDU 23, 0, &A0, sid; &48, 7, oid; scaley; : Set Object Y Scale Factor void set_object_y_scale_factor() { - + auto object = get_object(); + auto value = m_proc->readWord_t(); + if (object && (value >= 0)) { + object->m_scale.y = convert_scale_value(value); + } } // VDU 23, 0, &A0, sid; &48, 8, oid; scalez; : Set Object Z Scale Factor void set_object_z_scale_factor() { - + auto object = get_object(); + auto value = m_proc->readWord_t(); + if (object && (value >= 0)) { + object->m_scale.y = convert_scale_value(value); + } } // VDU 23, 0, &A0, sid; &48, 9, oid; scalex; scaley; scalez : Set Object XYZ Scale Factors void set_object_xyz_scale_factors() { - + auto object = get_object(); + auto valuex = m_proc->readWord_t(); + auto valuey = m_proc->readWord_t(); + auto valuez = m_proc->readWord_t(); + if (object && (valuex >= 0) && (valuey >= 0) && (valuez >= 0)) { + object->m_scale.x = convert_scale_value(valuex); + object->m_scale.y = convert_scale_value(valuey); + object->m_scale.z = convert_scale_value(valuez); + } } // VDU 23, 0, &A0, sid; &48, 10, oid; anglex; : Set Object X Rotation Angle void set_object_x_rotation_angle() { - + auto object = get_object(); + auto value = m_proc->readWord_t(); + if (object && (value >= 0)) { + object->m_rotation.x = convert_rotation_value(value); + } } // VDU 23, 0, &A0, sid; &48, 11, oid; angley; : Set Object Y Rotation Angle void set_object_y_rotation_angle() { - + auto object = get_object(); + auto value = m_proc->readWord_t(); + if (object && (value >= 0)) { + object->m_rotation.y = convert_rotation_value(value); + } } // VDU 23, 0, &A0, sid; &48, 12, oid; anglez; : Set Object Z Rotation Angle void set_object_z_rotation_angle() { - + auto object = get_object(); + auto value = m_proc->readWord_t(); + if (object && (value >= 0)) { + object->m_rotation.z = convert_rotation_value(value); + } } // VDU 23, 0, &A0, sid; &48, 13, oid; anglex; angley; anglez; : Set Object XYZ Rotation Angles void set_object_xyz_rotation_angles() { - + auto object = get_object(); + auto valuex = m_proc->readWord_t(); + auto valuey = m_proc->readWord_t(); + auto valuez = m_proc->readWord_t(); + if (object && (valuex >= 0) && (valuey >= 0) && (valuez >= 0)) { + object->m_rotation.x = convert_rotation_value(valuex); + object->m_rotation.y = convert_rotation_value(valuey); + object->m_rotation.z = convert_rotation_value(valuez); + } } // VDU 23, 0, &A0, sid; &48, 14, oid; distx; : Set Object X Translation Distance void set_object_x_translation_distance() { - + auto object = get_object(); + auto value = m_proc->readWord_t(); + if (object && (value >= 0)) { + object->m_translation.x = convert_translation_value(value); + } } // VDU 23, 0, &A0, sid; &48, 15, oid; disty; : Set Object Y Translation Distance void set_object_y_translation_distance() { - + auto object = get_object(); + auto value = m_proc->readWord_t(); + if (object && (value >= 0)) { + object->m_translation.y = convert_translation_value(value); + } } // VDU 23, 0, &A0, sid; &48, 16, oid; distz; : Set Object Z Translation Distance void set_object_z_translation_distance() { - + auto object = get_object(); + auto value = m_proc->readWord_t(); + if (object && (value >= 0)) { + object->m_translation.z = convert_translation_value(value); + } } // VDU 23, 0, &A0, sid; &48, 17, oid; distx; disty; distz : Set Object XYZ Translation Distances - void set_object_xyz_translation_distances() { - + void set_object_xyz_translation_distances() { auto object = get_object(); + auto valuex = m_proc->readWord_t(); + auto valuey = m_proc->readWord_t(); + auto valuez = m_proc->readWord_t(); + if (object && (valuex >= 0) && (valuey >= 0) && (valuez >= 0)) { + object->m_translation.x = convert_translation_value(valuex); + object->m_translation.y = convert_translation_value(valuey); + object->m_translation.z = convert_translation_value(valuez); + } } // VDU 23, 0, &A0, sid; &48, 18, bmid; : Render To Bitmap From 609dccf149d72354571a10093a24e5fa0f8129d6 Mon Sep 17 00:00:00 2001 From: Curtis Whitley Date: Tue, 23 Apr 2024 11:42:07 -0400 Subject: [PATCH 16/49] working on conversions --- video/pingo/vdu_pingo.md | 18 +++++++++--------- video/pingo_3d.h | 33 +++++++++++++++++++++++++-------- 2 files changed, 34 insertions(+), 17 deletions(-) diff --git a/video/pingo/vdu_pingo.md b/video/pingo/vdu_pingo.md index e1eaf74a..a7b29ad3 100644 --- a/video/pingo/vdu_pingo.md +++ b/video/pingo/vdu_pingo.md @@ -25,7 +25,7 @@ The commands below use numbers with the following meaning and ranges:

x0, y0, z0: A prescaled 3D X, Y, or Z coordinate in the range -32767 to +32767. This number is divided by 32767 to yield a floating point number in the range -1.0 to +1.0, for 3D computations. To prescale a set of coordinates for use in a VDU command, scale them all to fit within the range -1.0 to +1.0, -then multiply the original floating point values by 32767. +then multiply the new floating point values by 32767. ``` F = FACTOR * 32767 PX = X * F @@ -34,17 +34,17 @@ PZ = Z * F VDU ... PX; PY; PZ; ... ```

i0: A zero-based index into a list of coordinates (mesh or texture). -

u0, v0: A texture coordinate ranging from 0 to the width or height of the texture. -This value is divided by the texture width or height to yield a floating point number, for 3D computations. +

u0, v0: A texture coordinate ranging from 0 to 65535. +This value is divided by 65535 to yield a floating point number, for 3D computations. To prescale a set of coordinates for use in a VDU command, scale them all to fit within the range 0.0 to +1.0, -then multiply the original floating point values by the texture width or height, as appropriate. +then multiply the new floating point values by 65535, as appropriate. ``` -PU = U * FACTOR * TEXWIDTH -PV = V * FACTOR * TEXHEIGHT +PU = U * HORIZ_FACTOR * 65535 +PV = V * VERT_FACTOR * 65535 VDU ... PU; PV; ... ```

scalex, scaley, scalez: A prescaled 3D X, Y, or Z scale value in the range 0 to 65535. -This number is divided by 256 to yield a floating point number in the approximate range 0.0 to 256.0, for 3D computations. +This number is divided by 256 to yield a floating point number in the approximate range 0.0 to near 256.0, for 3D computations. To prescale a set of scale factors for use in a VDU command, multiply them by 256. ``` F = 256 @@ -59,7 +59,7 @@ The resulting number is multiplied by 2PI, to yield an angle in radians. Thus, the passed value of -32767 means -2PI, and +32767 means +2PI. To prescale a set of angles in radians for use in a VDU command, divide the angles by 2PI, which will scale them all to fit within the range -1.0 to +1.0, -then multiply the original floating point values by 32767. +then multiply the new floating point values by 32767. ``` F = 32767 / TWOPI PAX = AX * F @@ -73,7 +73,7 @@ The resulting number is multiplied by 256.0. Thus, the passed value of -32767 means -256.0, and +32767 means +256.0. To prescale a set of distances for use in a VDU command, divide the distances by 256, scale them all to fit within the range -1.0 to +1.0, -then multiply the original floating point values by 32767. +then multiply the new floating point values by 32767. ``` F = 256 PDX = DX * F diff --git a/video/pingo_3d.h b/video/pingo_3d.h index c2c3ed8d..351bc293 100644 --- a/video/pingo_3d.h +++ b/video/pingo_3d.h @@ -188,9 +188,9 @@ typedef struct tag_Pingo3dControl { uint16_t y = m_proc->readWord_t(); uint16_t z = m_proc->readWord_t(); if (pos) { - pos->x = x; - pos->y = y; - pos->z = z; + pos->x = convert_position_value(x); + pos->y = convert_position_value(y); + pos->z = convert_position_value(z); pos++; } } @@ -234,8 +234,8 @@ typedef struct tag_Pingo3dControl { uint16_t u = m_proc->readWord_t(); uint16_t v = m_proc->readWord_t(); if (coord) { - coord->x = u; - coord->y = v; + coord->x = convert_texture_coordinate_value(u); + coord->y = convert_texture_coordinate_value(v); coord++; } } @@ -281,15 +281,32 @@ typedef struct tag_Pingo3dControl { } p3d::F_TYPE convert_scale_value(int32_t value) { - return 0; + return ((p3d::F_TYPE) value) / 256.0f; } p3d::F_TYPE convert_rotation_value(int32_t value) { - return 0; + if (value & 0x8000) { + value = (int32_t)(int16_t)(uint16_t) value; + } + return (((p3d::F_TYPE) value) * (2.0f * 3.1415926f)) / 32767.0f; } p3d::F_TYPE convert_translation_value(int32_t value) { - return 0; + if (value & 0x8000) { + value = (int32_t)(int16_t)(uint16_t) value; + } + return ((p3d::F_TYPE) value) / 256.0f; + } + + p3d::F_TYPE convert_position_value(int32_t value) { + if (value & 0x8000) { + value = (int32_t)(int16_t)(uint16_t) value; + } + return ((p3d::F_TYPE) value) / 32767.0f; + } + + p3d::F_TYPE convert_texture_coordinate_value(int32_t value) { + return ((p3d::F_TYPE) value) / 65535.0f; } // VDU 23, 0, &A0, sid; &48, 6, oid; scalex; : Set Object X Scale Factor From 7e055eae8834a29706cbccedf54303a29a3f8f9c Mon Sep 17 00:00:00 2001 From: Curtis Whitley Date: Tue, 23 Apr 2024 13:41:22 -0400 Subject: [PATCH 17/49] added render code --- video/pingo/vdu_pingo.md | 6 +- video/pingo_3d.h | 69 +++++++- video/video.ino.cpp | 348 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 420 insertions(+), 3 deletions(-) create mode 100644 video/video.ino.cpp diff --git a/video/pingo/vdu_pingo.md b/video/pingo/vdu_pingo.md index a7b29ad3..a6f35949 100644 --- a/video/pingo/vdu_pingo.md +++ b/video/pingo/vdu_pingo.md @@ -133,7 +133,8 @@ vertices are often referenced multiple times within a mesh, because they are often part of multiple surface triangles. Each index value ranges from 0 to the number of defined mesh vertices. -The "n" parameter is the number of indexes. +The "n" parameter is the number of indexes, and must match the "n" in subcommand 4 +(Set Texture Coordinate Indexes). ## Define Texture Coordinates VDU 23, 0, &A0, sid; &48, 3, mid; n; u0; v0; ... : Define Texture Coordinates @@ -152,7 +153,8 @@ but that is not required. The number of indexes passed in this command must matc the number of mesh indexes defining the mesh. Thus, each mesh vertex has texture coordinates associated with it. -The "n" parameter is the number of indexes. +The "n" parameter is the number of indexes, and must match the "n" in subcommand 2 +(Set Mesh Vertex Indexes). ## Define Object VDU 23, 0, &A0, sid; &48, 5, oid; mid; bmid; : Create Object diff --git a/video/pingo_3d.h b/video/pingo_3d.h index 351bc293..daf0e22b 100644 --- a/video/pingo_3d.h +++ b/video/pingo_3d.h @@ -37,6 +37,28 @@ typedef struct tag_TexObject { p3d::Vec3f m_scale; p3d::Vec3f m_rotation; p3d::Vec3f m_translation; + bool m_modified; + + void compute_transformation_matrix() { + m_object.transform = p3d::mat4Scale(m_scale); + if (m_rotation.x) { + auto t = p3d::mat4RotateX(m_rotation.x); + m_object.transform = mat4MultiplyM(&m_object.transform, &t); + } + if (m_rotation.y) { + auto t = p3d::mat4RotateY(m_rotation.y); + m_object.transform = mat4MultiplyM(&m_object.transform, &t); + } + if (m_rotation.z) { + auto t = p3d::mat4RotateY(m_rotation.z); + m_object.transform = mat4MultiplyM(&m_object.transform, &t); + } + if (m_translation.x || m_translation.y || m_translation.z) { + auto t = p3d::mat4Translate(m_translation); + m_object.transform = mat4MultiplyM(&m_object.transform, &t); + } + m_modified = false; + } } TexObject; typedef struct tag_Pingo3dControl { @@ -68,7 +90,7 @@ typedef struct tag_Pingo3dControl { m_backend.afterRender = &static_after_render; m_backend.getFrameBuffer = &static_get_frame_buffer; m_backend.getZetaBuffer = &static_get_zeta_buffer; - m_backend.drawPixel = 0; + m_backend.drawPixel = NULL; m_backend.clientCustomData = (void*) this; m_meshes = new std::map; @@ -315,6 +337,7 @@ typedef struct tag_Pingo3dControl { auto value = m_proc->readWord_t(); if (object && (value >= 0)) { object->m_scale.x = convert_scale_value(value); + object->m_modified = true; } } @@ -324,6 +347,7 @@ typedef struct tag_Pingo3dControl { auto value = m_proc->readWord_t(); if (object && (value >= 0)) { object->m_scale.y = convert_scale_value(value); + object->m_modified = true; } } @@ -333,6 +357,7 @@ typedef struct tag_Pingo3dControl { auto value = m_proc->readWord_t(); if (object && (value >= 0)) { object->m_scale.y = convert_scale_value(value); + object->m_modified = true; } } @@ -346,6 +371,7 @@ typedef struct tag_Pingo3dControl { object->m_scale.x = convert_scale_value(valuex); object->m_scale.y = convert_scale_value(valuey); object->m_scale.z = convert_scale_value(valuez); + object->m_modified = true; } } @@ -355,6 +381,7 @@ typedef struct tag_Pingo3dControl { auto value = m_proc->readWord_t(); if (object && (value >= 0)) { object->m_rotation.x = convert_rotation_value(value); + object->m_modified = true; } } @@ -364,6 +391,7 @@ typedef struct tag_Pingo3dControl { auto value = m_proc->readWord_t(); if (object && (value >= 0)) { object->m_rotation.y = convert_rotation_value(value); + object->m_modified = true; } } @@ -373,6 +401,7 @@ typedef struct tag_Pingo3dControl { auto value = m_proc->readWord_t(); if (object && (value >= 0)) { object->m_rotation.z = convert_rotation_value(value); + object->m_modified = true; } } @@ -386,6 +415,7 @@ typedef struct tag_Pingo3dControl { object->m_rotation.x = convert_rotation_value(valuex); object->m_rotation.y = convert_rotation_value(valuey); object->m_rotation.z = convert_rotation_value(valuez); + object->m_modified = true; } } @@ -395,6 +425,7 @@ typedef struct tag_Pingo3dControl { auto value = m_proc->readWord_t(); if (object && (value >= 0)) { object->m_translation.x = convert_translation_value(value); + object->m_modified = true; } } @@ -404,6 +435,7 @@ typedef struct tag_Pingo3dControl { auto value = m_proc->readWord_t(); if (object && (value >= 0)) { object->m_translation.y = convert_translation_value(value); + object->m_modified = true; } } @@ -413,6 +445,7 @@ typedef struct tag_Pingo3dControl { auto value = m_proc->readWord_t(); if (object && (value >= 0)) { object->m_translation.z = convert_translation_value(value); + object->m_modified = true; } } @@ -425,12 +458,46 @@ typedef struct tag_Pingo3dControl { object->m_translation.x = convert_translation_value(valuex); object->m_translation.y = convert_translation_value(valuey); object->m_translation.z = convert_translation_value(valuez); + object->m_modified = true; } } // VDU 23, 0, &A0, sid; &48, 18, bmid; : Render To Bitmap void render_to_bitmap() { + auto size = p3d::Vec2i{(p3d::I_TYPE)m_width, (p3d::I_TYPE)m_height}; + p3d::Renderer renderer; + rendererInit(&renderer, size, &m_backend ); + rendererSetCamera(&renderer,(p3d::Vec4i){0,0,size.x,size.y}); + + p3d::Scene scene; + sceneInit(&scene); + p3d::rendererSetScene(&renderer, &scene); + + for (auto object = m_objects->begin(); object != m_objects->end(); object++) { + if (object->second.m_modified) { + object->second.compute_transformation_matrix(); + } + sceneAddRenderable(&scene, p3d::object_as_renderable(&object->second.m_object)); + } + + p3d::F_TYPE phi = 0; + p3d::Mat4 t; + + // Set the projection matrix + renderer.camera_projection = + p3d::mat4Perspective( 1, 2500.0, (p3d::F_TYPE)size.x / (p3d::F_TYPE)size.y, 0.6); + + // Set the view matrix (position and orientation of the "camera") + p3d::Mat4 view = p3d::mat4Translate((p3d::Vec3f) {0,2,-35}); + + p3d::Mat4 rotateDown = p3d::mat4RotateX(-0.40); // Rotate around origin/orbit + renderer.camera_view = mat4MultiplyM(&rotateDown, &view); + + // Set the scene transformation matrix + scene.transform = p3d::mat4RotateY(phi); + phi += 0.01; + rendererRender(&renderer); } } Pingo3dControl; diff --git a/video/video.ino.cpp b/video/video.ino.cpp new file mode 100644 index 00000000..56bd7980 --- /dev/null +++ b/video/video.ino.cpp @@ -0,0 +1,348 @@ +# 1 "C:\\Users\\restd\\AppData\\Local\\Temp\\tmpoympx2pk" +#include +# 1 "D:/Console8/agon-vdp-otf/video/video.ino" +# 48 "D:/Console8/agon-vdp-otf/video/video.ino" +#include +#include +#include +#include + +#define DEBUG 0 +#define SERIALBAUDRATE 115200 + +HardwareSerial DBGSerial(0); + +#include "agon.h" + +TerminalState terminalState = TerminalState::Disabled; +bool consoleMode = false; +bool printerOn = false; +bool controlKeys = true; + +#include "version.h" +#include "agon_ps2.h" +#include "agon_audio.h" +#include "agon_screen.h" +#include "agon_ttxt.h" +#include "vdp_protocol.h" +#include "vdu_stream_processor.h" +#include "hexload.h" + +std::unique_ptr Terminal; +VDUStreamProcessor * processor; + +#include "zdi.h" + +void test_pingo_3d(); +void setup(); +void loop(); +void do_keyboard(); +void do_keyboard_terminal(); +void do_mouse(); +void boot_screen(); +void debug_log(const char *format, ...); +void setConsoleMode(bool mode); +void startTerminal(); +void stopTerminal(); +void suspendTerminal(); +bool processTerminal(); +void print(char const * text); +void printFmt(const char *format, ...); +#line 81 "D:/Console8/agon-vdp-otf/video/video.ino" +void setup() { + #ifndef VDP_USE_WDT + disableCore0WDT(); delay(200); + disableCore1WDT(); delay(200); + #endif + DBGSerial.begin(SERIALBAUDRATE, SERIAL_8N1, 3, 1); + changeMode(0); + copy_font(); + setupVDPProtocol(); + processor = new VDUStreamProcessor(&VDPSerial); + initAudio(); + boot_screen(); + processor->wait_eZ80(); + setupKeyboardAndMouse(); + processor->sendModeInformation(); + + test_pingo_3d(); +} + +void test_pingo_3d() { + +} + + + +void loop() { + while (true) { + #ifdef VDP_USE_WDT + esp_task_wdt_reset(); + #endif + if (processTerminal()) { + continue; + } + processor->doCursorFlash(); + + do_keyboard(); + do_mouse(); + + if (processor->byteAvailable()) { + processor->hideCursor(); + processor->processNext(); + if (!processor->byteAvailable()) { + processor->showCursor(); + } + } + } +} + + + +void do_keyboard() { + uint8_t keycode; + uint8_t modifiers; + uint8_t vk; + uint8_t down; + if (getKeyboardKey(&keycode, &modifiers, &vk, &down)) { + + + if (controlKeys && down) { + switch (keycode) { + case 2: + case 3: + case 6: + case 7: + case 12: + case 14 ... 15: + processor->vdu(keycode); + break; + case 16: + + printerOn = !printerOn; + } + } + + + uint8_t packet[] = { + keycode, + modifiers, + vk, + down, + }; + processor->send_packet(PACKET_KEYCODE, sizeof packet, packet); + } +} + + + +void do_keyboard_terminal() { + uint8_t ascii; + if (getKeyboardKey(&ascii)) { + + processor->writeByte(ascii); + } +} + + + +void do_mouse() { + + MouseDelta delta; + if (mouseMoved(&delta)) { + auto mouse = getMouse(); + auto mStatus = mouse->status(); + + setMouseCursorPos(mStatus.X, mStatus.Y); + processor->sendMouseData(&delta); + } +} + + + +void boot_screen() { + printFmt("Agon %s VDP Version %d.%d.%d", VERSION_VARIANT, VERSION_MAJOR, VERSION_MINOR, VERSION_PATCH); + #if VERSION_CANDIDATE > 0 + printFmt(" %s%d", VERSION_TYPE, VERSION_CANDIDATE); + #endif + + #ifdef VERSION_BUILD + printFmt(" Build %s", VERSION_BUILD); + #endif + printFmt("\n\r"); +} + + + +void debug_log(const char *format, ...) { + #if DEBUG == 1 + va_list ap; + va_start(ap, format); + auto size = vsnprintf(nullptr, 0, format, ap) + 1; + if (size > 0) { + va_end(ap); + va_start(ap, format); + char buf[size + 1]; + vsnprintf(buf, size, format, ap); + DBGSerial.print(buf); + } + va_end(ap); + #endif +} + + + + + +void setConsoleMode(bool mode) { + consoleMode = mode; +} + + + +void startTerminal() { + switch (terminalState) { + case TerminalState::Disabled: { + terminalState = TerminalState::Enabling; + } break; + case TerminalState::Suspending: { + terminalState = TerminalState::Enabled; + } break; + case TerminalState::Suspended: { + terminalState = TerminalState::Resuming; + } break; + } +} + +void stopTerminal() { + switch (terminalState) { + case TerminalState::Enabled: + case TerminalState::Resuming: + case TerminalState::Suspended: + case TerminalState::Suspending: { + terminalState = TerminalState::Disabling; + } break; + case TerminalState::Enabling: { + terminalState = TerminalState::Disabled; + } break; + } +} + +void suspendTerminal() { + switch (terminalState) { + case TerminalState::Enabled: + case TerminalState::Resuming: { + terminalState = TerminalState::Suspending; + processTerminal(); + } break; + case TerminalState::Enabling: { + + processTerminal(); + terminalState = TerminalState::Suspending; + } break; + } +} + + + +bool processTerminal() { + switch (terminalState) { + case TerminalState::Disabled: { + + return false; + } break; + case TerminalState::Suspended: { + + + do_keyboard_terminal(); + return false; + } break; + case TerminalState::Enabling: { + + Terminal = std::unique_ptr(new fabgl::Terminal()); + Terminal->begin(_VGAController.get()); + Terminal->connectSerialPort(VDPSerial); + Terminal->enableCursor(true); + + Terminal->onVirtualKeyItem = [&](VirtualKeyItem * vkItem) { + if (vkItem->vk == VirtualKey::VK_F12) { + if (vkItem->CTRL && (vkItem->LALT || vkItem->RALT)) { + + stopTerminal(); + } + } + }; + + + Terminal->onUserSequence = [&](char const * seq) { + + if (strcmp("Q!", seq) == 0) { + stopTerminal(); + } + if (strcmp("S!", seq) == 0) { + suspendTerminal(); + } + }; + debug_log("Terminal enabled\n\r"); + terminalState = TerminalState::Enabled; + } break; + case TerminalState::Enabled: { + do_keyboard_terminal(); + + + if (processor->byteAvailable()) { + Terminal->write(processor->readByte()); + } + } break; + case TerminalState::Disabling: { + Terminal->deactivate(); + Terminal = nullptr; + auto context = processor->getContext(); + + if (changeMode(videoMode) != 0) { + debug_log("processTerminal: Error %d changing back to mode %d\n\r", videoMode); + videoMode = 1; + changeMode(1); + } + context->reset(); + processor->sendModeInformation(); + debug_log("Terminal disabled\n\r"); + terminalState = TerminalState::Disabled; + } break; + case TerminalState::Suspending: { + + debug_log("Terminal suspended\n\r"); + terminalState = TerminalState::Suspended; + } break; + case TerminalState::Resuming: { + + debug_log("Terminal resumed\n\r"); + terminalState = TerminalState::Enabled; + } break; + default: { + debug_log("processTerminal: unknown terminal state %d\n\r", terminalState); + return false; + } break; + } + return true; +} + +void print(char const * text) { + for (auto i = 0; i < strlen(text); i++) { + processor->vdu(text[i]); + } +} + +void printFmt(const char *format, ...) { + va_list ap; + va_start(ap, format); + int size = vsnprintf(nullptr, 0, format, ap) + 1; + if (size > 0) { + va_end(ap); + va_start(ap, format); + char buf[size + 1]; + vsnprintf(buf, size, format, ap); + print(buf); + } + va_end(ap); +} \ No newline at end of file From 4a3ebce2fb337e45a254d58a157e3f0ebe048a1f Mon Sep 17 00:00:00 2001 From: Curtis Whitley Date: Tue, 23 Apr 2024 13:42:36 -0400 Subject: [PATCH 18/49] remove unwanted file --- video/video.ino.cpp | 348 -------------------------------------------- 1 file changed, 348 deletions(-) delete mode 100644 video/video.ino.cpp diff --git a/video/video.ino.cpp b/video/video.ino.cpp deleted file mode 100644 index 56bd7980..00000000 --- a/video/video.ino.cpp +++ /dev/null @@ -1,348 +0,0 @@ -# 1 "C:\\Users\\restd\\AppData\\Local\\Temp\\tmpoympx2pk" -#include -# 1 "D:/Console8/agon-vdp-otf/video/video.ino" -# 48 "D:/Console8/agon-vdp-otf/video/video.ino" -#include -#include -#include -#include - -#define DEBUG 0 -#define SERIALBAUDRATE 115200 - -HardwareSerial DBGSerial(0); - -#include "agon.h" - -TerminalState terminalState = TerminalState::Disabled; -bool consoleMode = false; -bool printerOn = false; -bool controlKeys = true; - -#include "version.h" -#include "agon_ps2.h" -#include "agon_audio.h" -#include "agon_screen.h" -#include "agon_ttxt.h" -#include "vdp_protocol.h" -#include "vdu_stream_processor.h" -#include "hexload.h" - -std::unique_ptr Terminal; -VDUStreamProcessor * processor; - -#include "zdi.h" - -void test_pingo_3d(); -void setup(); -void loop(); -void do_keyboard(); -void do_keyboard_terminal(); -void do_mouse(); -void boot_screen(); -void debug_log(const char *format, ...); -void setConsoleMode(bool mode); -void startTerminal(); -void stopTerminal(); -void suspendTerminal(); -bool processTerminal(); -void print(char const * text); -void printFmt(const char *format, ...); -#line 81 "D:/Console8/agon-vdp-otf/video/video.ino" -void setup() { - #ifndef VDP_USE_WDT - disableCore0WDT(); delay(200); - disableCore1WDT(); delay(200); - #endif - DBGSerial.begin(SERIALBAUDRATE, SERIAL_8N1, 3, 1); - changeMode(0); - copy_font(); - setupVDPProtocol(); - processor = new VDUStreamProcessor(&VDPSerial); - initAudio(); - boot_screen(); - processor->wait_eZ80(); - setupKeyboardAndMouse(); - processor->sendModeInformation(); - - test_pingo_3d(); -} - -void test_pingo_3d() { - -} - - - -void loop() { - while (true) { - #ifdef VDP_USE_WDT - esp_task_wdt_reset(); - #endif - if (processTerminal()) { - continue; - } - processor->doCursorFlash(); - - do_keyboard(); - do_mouse(); - - if (processor->byteAvailable()) { - processor->hideCursor(); - processor->processNext(); - if (!processor->byteAvailable()) { - processor->showCursor(); - } - } - } -} - - - -void do_keyboard() { - uint8_t keycode; - uint8_t modifiers; - uint8_t vk; - uint8_t down; - if (getKeyboardKey(&keycode, &modifiers, &vk, &down)) { - - - if (controlKeys && down) { - switch (keycode) { - case 2: - case 3: - case 6: - case 7: - case 12: - case 14 ... 15: - processor->vdu(keycode); - break; - case 16: - - printerOn = !printerOn; - } - } - - - uint8_t packet[] = { - keycode, - modifiers, - vk, - down, - }; - processor->send_packet(PACKET_KEYCODE, sizeof packet, packet); - } -} - - - -void do_keyboard_terminal() { - uint8_t ascii; - if (getKeyboardKey(&ascii)) { - - processor->writeByte(ascii); - } -} - - - -void do_mouse() { - - MouseDelta delta; - if (mouseMoved(&delta)) { - auto mouse = getMouse(); - auto mStatus = mouse->status(); - - setMouseCursorPos(mStatus.X, mStatus.Y); - processor->sendMouseData(&delta); - } -} - - - -void boot_screen() { - printFmt("Agon %s VDP Version %d.%d.%d", VERSION_VARIANT, VERSION_MAJOR, VERSION_MINOR, VERSION_PATCH); - #if VERSION_CANDIDATE > 0 - printFmt(" %s%d", VERSION_TYPE, VERSION_CANDIDATE); - #endif - - #ifdef VERSION_BUILD - printFmt(" Build %s", VERSION_BUILD); - #endif - printFmt("\n\r"); -} - - - -void debug_log(const char *format, ...) { - #if DEBUG == 1 - va_list ap; - va_start(ap, format); - auto size = vsnprintf(nullptr, 0, format, ap) + 1; - if (size > 0) { - va_end(ap); - va_start(ap, format); - char buf[size + 1]; - vsnprintf(buf, size, format, ap); - DBGSerial.print(buf); - } - va_end(ap); - #endif -} - - - - - -void setConsoleMode(bool mode) { - consoleMode = mode; -} - - - -void startTerminal() { - switch (terminalState) { - case TerminalState::Disabled: { - terminalState = TerminalState::Enabling; - } break; - case TerminalState::Suspending: { - terminalState = TerminalState::Enabled; - } break; - case TerminalState::Suspended: { - terminalState = TerminalState::Resuming; - } break; - } -} - -void stopTerminal() { - switch (terminalState) { - case TerminalState::Enabled: - case TerminalState::Resuming: - case TerminalState::Suspended: - case TerminalState::Suspending: { - terminalState = TerminalState::Disabling; - } break; - case TerminalState::Enabling: { - terminalState = TerminalState::Disabled; - } break; - } -} - -void suspendTerminal() { - switch (terminalState) { - case TerminalState::Enabled: - case TerminalState::Resuming: { - terminalState = TerminalState::Suspending; - processTerminal(); - } break; - case TerminalState::Enabling: { - - processTerminal(); - terminalState = TerminalState::Suspending; - } break; - } -} - - - -bool processTerminal() { - switch (terminalState) { - case TerminalState::Disabled: { - - return false; - } break; - case TerminalState::Suspended: { - - - do_keyboard_terminal(); - return false; - } break; - case TerminalState::Enabling: { - - Terminal = std::unique_ptr(new fabgl::Terminal()); - Terminal->begin(_VGAController.get()); - Terminal->connectSerialPort(VDPSerial); - Terminal->enableCursor(true); - - Terminal->onVirtualKeyItem = [&](VirtualKeyItem * vkItem) { - if (vkItem->vk == VirtualKey::VK_F12) { - if (vkItem->CTRL && (vkItem->LALT || vkItem->RALT)) { - - stopTerminal(); - } - } - }; - - - Terminal->onUserSequence = [&](char const * seq) { - - if (strcmp("Q!", seq) == 0) { - stopTerminal(); - } - if (strcmp("S!", seq) == 0) { - suspendTerminal(); - } - }; - debug_log("Terminal enabled\n\r"); - terminalState = TerminalState::Enabled; - } break; - case TerminalState::Enabled: { - do_keyboard_terminal(); - - - if (processor->byteAvailable()) { - Terminal->write(processor->readByte()); - } - } break; - case TerminalState::Disabling: { - Terminal->deactivate(); - Terminal = nullptr; - auto context = processor->getContext(); - - if (changeMode(videoMode) != 0) { - debug_log("processTerminal: Error %d changing back to mode %d\n\r", videoMode); - videoMode = 1; - changeMode(1); - } - context->reset(); - processor->sendModeInformation(); - debug_log("Terminal disabled\n\r"); - terminalState = TerminalState::Disabled; - } break; - case TerminalState::Suspending: { - - debug_log("Terminal suspended\n\r"); - terminalState = TerminalState::Suspended; - } break; - case TerminalState::Resuming: { - - debug_log("Terminal resumed\n\r"); - terminalState = TerminalState::Enabled; - } break; - default: { - debug_log("processTerminal: unknown terminal state %d\n\r", terminalState); - return false; - } break; - } - return true; -} - -void print(char const * text) { - for (auto i = 0; i < strlen(text); i++) { - processor->vdu(text[i]); - } -} - -void printFmt(const char *format, ...) { - va_list ap; - va_start(ap, format); - int size = vsnprintf(nullptr, 0, format, ap) + 1; - if (size > 0) { - va_end(ap); - va_start(ap, format); - char buf[size + 1]; - vsnprintf(buf, size, format, ap); - print(buf); - } - va_end(ap); -} \ No newline at end of file From a067e0db328460e94f1b661cd2083b569dd10600 Mon Sep 17 00:00:00 2001 From: Curtis Whitley Date: Tue, 23 Apr 2024 17:09:49 -0400 Subject: [PATCH 19/49] starting to test stuff --- video/pingo_3d.h | 1 + video/video.ino | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/video/pingo_3d.h b/video/pingo_3d.h index daf0e22b..03bcd671 100644 --- a/video/pingo_3d.h +++ b/video/pingo_3d.h @@ -206,6 +206,7 @@ typedef struct tag_Pingo3dControl { mesh->positions = (p3d::Vec3f*) heap_caps_malloc(n*sizeof(p3d::Vec3f), MALLOC_CAP_SPIRAM); auto pos = mesh->positions; for (uint32_t i = 0; i < n; i++) { + if (!(i & 0x1F)) debug_log("%u ", i); uint16_t x = m_proc->readWord_t(); uint16_t y = m_proc->readWord_t(); uint16_t z = m_proc->readWord_t(); diff --git a/video/video.ino b/video/video.ino index 570c2a79..125d30e0 100644 --- a/video/video.ino +++ b/video/video.ino @@ -50,7 +50,7 @@ #include #include -#define DEBUG 0 // Serial Debug Mode: 1 = enable +#define DEBUG 1 // Serial Debug Mode: 1 = enable #define SERIALBAUDRATE 115200 HardwareSerial DBGSerial(0); From 63807fe6bbcdb064b9432762b9aad7143a76cbbf Mon Sep 17 00:00:00 2001 From: Curtis Whitley Date: Wed, 24 Apr 2024 06:04:20 -0400 Subject: [PATCH 20/49] debugging --- video/pingo/assets/teapot.bas | 662 ++++++++++++++++++++++++++++++++++ video/pingo_3d.h | 3 + 2 files changed, 665 insertions(+) create mode 100644 video/pingo/assets/teapot.bas diff --git a/video/pingo/assets/teapot.bas b/video/pingo/assets/teapot.bas new file mode 100644 index 00000000..8df23cc1 --- /dev/null +++ b/video/pingo/assets/teapot.bas @@ -0,0 +1,662 @@ + 10 REM teapot.bas + 20 REM Sample app to illustrate Pingo 3D on Agon + 30 REM + 40 REM -- VERTICES -- + 50 teapot_vertices%=1728 + 60 DATA 0.700000,-1.200000,0.000000,0.605600,-1.200000,-0.355700,0.598800,-1.243700,-0.351700,0.598800,-1.243700,-0.351700 + 70 DATA 0.692100,-1.243700,0.000000,0.700000,-1.200000,0.000000,0.692100,-1.243700,0.000000,0.598800,-1.243700,-0.351700 + 80 DATA 0.619600,-1.243700,-0.363900,0.619600,-1.243700,-0.363900,0.716200,-1.243700,0.000000,0.692100,-1.243700,0.000000 + 90 DATA 0.716200,-1.243700,0.000000,0.619600,-1.243700,-0.363900,0.648900,-1.200000,-0.381100,0.648900,-1.200000,-0.381100 + 100 DATA 0.750000,-1.200000,0.000000,0.716200,-1.243700,0.000000,0.605600,-1.200000,-0.355700,0.355700,-1.200000,-0.605600 + 110 DATA 0.351700,-1.243700,-0.598800,0.351700,-1.243700,-0.598800,0.598800,-1.243700,-0.351700,0.605600,-1.200000,-0.355700 + 120 DATA 0.598800,-1.243700,-0.351700,0.351700,-1.243700,-0.598800,0.363900,-1.243800,-0.619600,0.363900,-1.243800,-0.619600 + 130 DATA 0.619600,-1.243700,-0.363900,0.598800,-1.243700,-0.351700,0.619600,-1.243700,-0.363900,0.363900,-1.243800,-0.619600 + 140 DATA 0.381100,-1.200000,-0.648900,0.381100,-1.200000,-0.648900,0.648900,-1.200000,-0.381100,0.619600,-1.243700,-0.363900 + 150 DATA 0.355700,-1.200000,-0.605600,0.000000,-1.200000,-0.700000,0.000000,-1.243700,-0.692100,0.000000,-1.243700,-0.692100 + 160 DATA 0.351700,-1.243700,-0.598800,0.355700,-1.200000,-0.605600,0.351700,-1.243700,-0.598800,0.000000,-1.243700,-0.692100 + 170 DATA 0.000000,-1.243800,-0.716200,0.000000,-1.243800,-0.716200,0.363900,-1.243800,-0.619600,0.351700,-1.243700,-0.598800 + 180 DATA 0.363900,-1.243800,-0.619600,0.000000,-1.243800,-0.716200,0.000000,-1.200000,-0.750000,0.000000,-1.200000,-0.750000 + 190 DATA 0.381100,-1.200000,-0.648900,0.363900,-1.243800,-0.619600,0.000000,-1.200000,-0.700000,-0.375700,-1.200000,-0.605600 + 200 DATA -0.357600,-1.243700,-0.598800,-0.357600,-1.243700,-0.598800,0.000000,-1.243700,-0.692100,0.000000,-1.200000,-0.700000 + 210 DATA 0.000000,-1.243700,-0.692100,-0.357600,-1.243700,-0.598800,-0.364700,-1.243700,-0.619600,-0.364700,-1.243700,-0.619600 + 220 DATA 0.000000,-1.243800,-0.716200,0.000000,-1.243700,-0.692100,0.000000,-1.243800,-0.716200,-0.364700,-1.243700,-0.619600 + 230 DATA -0.381100,-1.200000,-0.648900,-0.381100,-1.200000,-0.648900,0.000000,-1.200000,-0.750000,0.000000,-1.243800,-0.716200 + 240 DATA -0.375700,-1.200000,-0.605600,-0.615600,-1.200000,-0.355700,-0.601800,-1.243700,-0.351700,-0.601800,-1.243700,-0.351700 + 250 DATA -0.357600,-1.243700,-0.598800,-0.375700,-1.200000,-0.605600,-0.357600,-1.243700,-0.598800,-0.601800,-1.243700,-0.351700 + 260 DATA -0.620000,-1.243700,-0.363900,-0.620000,-1.243700,-0.363900,-0.364700,-1.243700,-0.619600,-0.357600,-1.243700,-0.598800 + 270 DATA -0.364700,-1.243700,-0.619600,-0.620000,-1.243700,-0.363900,-0.648900,-1.200000,-0.381100,-0.648900,-1.200000,-0.381100 + 280 DATA -0.381100,-1.200000,-0.648900,-0.364700,-1.243700,-0.619600,-0.615600,-1.200000,-0.355700,-0.700000,-1.200000,0.000000 + 290 DATA -0.692100,-1.243700,0.000000,-0.692100,-1.243700,0.000000,-0.601800,-1.243700,-0.351700,-0.615600,-1.200000,-0.355700 + 300 DATA -0.601800,-1.243700,-0.351700,-0.692100,-1.243700,0.000000,-0.716200,-1.243700,0.000000,-0.716200,-1.243700,0.000000 + 310 DATA -0.620000,-1.243700,-0.363900,-0.601800,-1.243700,-0.351700,-0.620000,-1.243700,-0.363900,-0.716200,-1.243700,0.000000 + 320 DATA -0.750000,-1.200000,0.000000,-0.750000,-1.200000,0.000000,-0.648900,-1.200000,-0.381100,-0.620000,-1.243700,-0.363900 + 330 DATA -0.700000,-1.200000,0.000000,-0.605600,-1.200000,0.355700,-0.598800,-1.243700,0.351700,-0.598800,-1.243700,0.351700 + 340 DATA -0.692100,-1.243700,0.000000,-0.700000,-1.200000,0.000000,-0.692100,-1.243700,0.000000,-0.598800,-1.243700,0.351700 + 350 DATA -0.619600,-1.243700,0.363900,-0.619600,-1.243700,0.363900,-0.716200,-1.243700,0.000000,-0.692100,-1.243700,0.000000 + 360 DATA -0.716200,-1.243700,0.000000,-0.619600,-1.243700,0.363900,-0.648900,-1.200000,0.381100,-0.648900,-1.200000,0.381100 + 370 DATA -0.750000,-1.200000,0.000000,-0.716200,-1.243700,0.000000,-0.605600,-1.200000,0.355700,-0.355700,-1.200000,0.605600 + 380 DATA -0.351700,-1.243700,0.598800,-0.351700,-1.243700,0.598800,-0.598800,-1.243700,0.351700,-0.605600,-1.200000,0.355700 + 390 DATA -0.598800,-1.243700,0.351700,-0.351700,-1.243700,0.598800,-0.363900,-1.243700,0.619600,-0.363900,-1.243700,0.619600 + 400 DATA -0.619600,-1.243700,0.363900,-0.598800,-1.243700,0.351700,-0.619600,-1.243700,0.363900,-0.363900,-1.243700,0.619600 + 410 DATA -0.381100,-1.200000,0.648900,-0.381100,-1.200000,0.648900,-0.648900,-1.200000,0.381100,-0.619600,-1.243700,0.363900 + 420 DATA -0.355700,-1.200000,0.605600,0.000000,-1.200000,0.700000,0.000000,-1.243700,0.692100,0.000000,-1.243700,0.692100 + 430 DATA -0.351700,-1.243700,0.598800,-0.355700,-1.200000,0.605600,-0.351700,-1.243700,0.598800,0.000000,-1.243700,0.692100 + 440 DATA 0.000000,-1.243700,0.716200,0.000000,-1.243700,0.716200,-0.363900,-1.243700,0.619600,-0.351700,-1.243700,0.598800 + 450 DATA -0.363900,-1.243700,0.619600,0.000000,-1.243700,0.716200,0.000000,-1.200000,0.750000,0.000000,-1.200000,0.750000 + 460 DATA -0.381100,-1.200000,0.648900,-0.363900,-1.243700,0.619600,0.000000,-1.200000,0.700000,0.355700,-1.200000,0.605600 + 470 DATA 0.351700,-1.243700,0.598800,0.351700,-1.243700,0.598800,0.000000,-1.243700,0.692100,0.000000,-1.200000,0.700000 + 480 DATA 0.000000,-1.243700,0.692100,0.351700,-1.243700,0.598800,0.363900,-1.243700,0.619600,0.363900,-1.243700,0.619600 + 490 DATA 0.000000,-1.243700,0.716200,0.000000,-1.243700,0.692100,0.000000,-1.243700,0.716200,0.363900,-1.243700,0.619600 + 500 DATA 0.381100,-1.200000,0.648900,0.381100,-1.200000,0.648900,0.000000,-1.200000,0.750000,0.000000,-1.243700,0.716200 + 510 DATA 0.355700,-1.200000,0.605600,0.605600,-1.200000,0.355700,0.598800,-1.243700,0.351700,0.598800,-1.243700,0.351700 + 520 DATA 0.351700,-1.243700,0.598800,0.355700,-1.200000,0.605600,0.351700,-1.243700,0.598800,0.598800,-1.243700,0.351700 + 530 DATA 0.619600,-1.243700,0.363900,0.619600,-1.243700,0.363900,0.363900,-1.243700,0.619600,0.351700,-1.243700,0.598800 + 540 DATA 0.363900,-1.243700,0.619600,0.619600,-1.243700,0.363900,0.648900,-1.200000,0.381100,0.648900,-1.200000,0.381100 + 550 DATA 0.381100,-1.200000,0.648900,0.363900,-1.243700,0.619600,0.605600,-1.200000,0.355700,0.700000,-1.200000,0.000000 + 560 DATA 0.692100,-1.243700,0.000000,0.692100,-1.243700,0.000000,0.598800,-1.243700,0.351700,0.605600,-1.200000,0.355700 + 570 DATA 0.598800,-1.243700,0.351700,0.692100,-1.243700,0.000000,0.716200,-1.243700,0.000000,0.716200,-1.243700,0.000000 + 580 DATA 0.619600,-1.243700,0.363900,0.598800,-1.243700,0.351700,0.619600,-1.243700,0.363900,0.716200,-1.243700,0.000000 + 590 DATA 0.750000,-1.200000,0.000000,0.750000,-1.200000,0.000000,0.648900,-1.200000,0.381100,0.619600,-1.243700,0.363900 + 600 DATA 0.750000,-1.200000,0.000000,0.648900,-1.200000,-0.381100,0.753000,-0.938900,-0.442300,0.753000,-0.938900,-0.442300 + 610 DATA 0.870400,-0.938900,0.000000,0.750000,-1.200000,0.000000,0.870400,-0.938900,0.000000,0.753000,-0.938900,-0.442300 + 620 DATA 0.833100,-0.686100,-0.489300,0.833100,-0.686100,-0.489300,0.963000,-0.686100,0.000000,0.870400,-0.938900,0.000000 + 630 DATA 0.963000,-0.686100,0.000000,0.833100,-0.686100,-0.489300,0.865200,-0.450000,-0.508100,0.865200,-0.450000,-0.508100 + 640 DATA 1.000000,-0.450000,0.000000,0.963000,-0.686100,0.000000,0.648900,-1.200000,-0.381100,0.381100,-1.200000,-0.648900 + 650 DATA 0.442300,-0.938900,-0.753000,0.442300,-0.938900,-0.753000,0.753000,-0.938900,-0.442300,0.648900,-1.200000,-0.381100 + 660 DATA 0.753000,-0.938900,-0.442300,0.442300,-0.938900,-0.753000,0.489300,-0.686100,-0.833100,0.489300,-0.686100,-0.833100 + 670 DATA 0.833100,-0.686100,-0.489300,0.753000,-0.938900,-0.442300,0.833100,-0.686100,-0.489300,0.489300,-0.686100,-0.833100 + 680 DATA 0.508100,-0.450000,-0.865200,0.508100,-0.450000,-0.865200,0.865200,-0.450000,-0.508100,0.833100,-0.686100,-0.489300 + 690 DATA 0.381100,-1.200000,-0.648900,0.000000,-1.200000,-0.750000,0.000000,-0.938900,-0.870400,0.000000,-0.938900,-0.870400 + 700 DATA 0.442300,-0.938900,-0.753000,0.381100,-1.200000,-0.648900,0.442300,-0.938900,-0.753000,0.000000,-0.938900,-0.870400 + 710 DATA 0.000000,-0.686100,-0.963000,0.000000,-0.686100,-0.963000,0.489300,-0.686100,-0.833100,0.442300,-0.938900,-0.753000 + 720 DATA 0.489300,-0.686100,-0.833100,0.000000,-0.686100,-0.963000,0.000000,-0.450000,-1.000000,0.000000,-0.450000,-1.000000 + 730 DATA 0.508100,-0.450000,-0.865200,0.489300,-0.686100,-0.833100,0.000000,-1.200000,-0.750000,-0.381100,-1.200000,-0.648900 + 740 DATA -0.442300,-0.938900,-0.753000,-0.442300,-0.938900,-0.753000,0.000000,-0.938900,-0.870400,0.000000,-1.200000,-0.750000 + 750 DATA 0.000000,-0.938900,-0.870400,-0.442300,-0.938900,-0.753000,-0.489300,-0.686100,-0.833100,-0.489300,-0.686100,-0.833100 + 760 DATA 0.000000,-0.686100,-0.963000,0.000000,-0.938900,-0.870400,0.000000,-0.686100,-0.963000,-0.489300,-0.686100,-0.833100 + 770 DATA -0.508100,-0.450000,-0.865200,-0.508100,-0.450000,-0.865200,0.000000,-0.450000,-1.000000,0.000000,-0.686100,-0.963000 + 780 DATA -0.381100,-1.200000,-0.648900,-0.648900,-1.200000,-0.381100,-0.753000,-0.938900,-0.442300,-0.753000,-0.938900,-0.442300 + 790 DATA -0.442300,-0.938900,-0.753000,-0.381100,-1.200000,-0.648900,-0.442300,-0.938900,-0.753000,-0.753000,-0.938900,-0.442300 + 800 DATA -0.833100,-0.686100,-0.489300,-0.833100,-0.686100,-0.489300,-0.489300,-0.686100,-0.833100,-0.442300,-0.938900,-0.753000 + 810 DATA -0.489300,-0.686100,-0.833100,-0.833100,-0.686100,-0.489300,-0.865200,-0.450000,-0.508100,-0.865200,-0.450000,-0.508100 + 820 DATA -0.508100,-0.450000,-0.865200,-0.489300,-0.686100,-0.833100,-0.648900,-1.200000,-0.381100,-0.750000,-1.200000,0.000000 + 830 DATA -0.870400,-0.938900,0.000000,-0.870400,-0.938900,0.000000,-0.753000,-0.938900,-0.442300,-0.648900,-1.200000,-0.381100 + 840 DATA -0.753000,-0.938900,-0.442300,-0.870400,-0.938900,0.000000,-0.963000,-0.686100,0.000000,-0.963000,-0.686100,0.000000 + 850 DATA -0.833100,-0.686100,-0.489300,-0.753000,-0.938900,-0.442300,-0.833100,-0.686100,-0.489300,-0.963000,-0.686100,0.000000 + 860 DATA -1.000000,-0.450000,0.000000,-1.000000,-0.450000,0.000000,-0.865200,-0.450000,-0.508100,-0.833100,-0.686100,-0.489300 + 870 DATA -0.750000,-1.200000,0.000000,-0.648900,-1.200000,0.381100,-0.753000,-0.938900,0.442300,-0.753000,-0.938900,0.442300 + 880 DATA -0.870400,-0.938900,0.000000,-0.750000,-1.200000,0.000000,-0.870400,-0.938900,0.000000,-0.753000,-0.938900,0.442300 + 890 DATA -0.833100,-0.686100,0.489300,-0.833100,-0.686100,0.489300,-0.963000,-0.686100,0.000000,-0.870400,-0.938900,0.000000 + 900 DATA -0.963000,-0.686100,0.000000,-0.833100,-0.686100,0.489300,-0.865200,-0.450000,0.508100,-0.865200,-0.450000,0.508100 + 910 DATA -1.000000,-0.450000,0.000000,-0.963000,-0.686100,0.000000,-0.648900,-1.200000,0.381100,-0.381100,-1.200000,0.648900 + 920 DATA -0.442300,-0.938900,0.753000,-0.442300,-0.938900,0.753000,-0.753000,-0.938900,0.442300,-0.648900,-1.200000,0.381100 + 930 DATA -0.753000,-0.938900,0.442300,-0.442300,-0.938900,0.753000,-0.489300,-0.686100,0.833100,-0.489300,-0.686100,0.833100 + 940 DATA -0.833100,-0.686100,0.489300,-0.753000,-0.938900,0.442300,-0.833100,-0.686100,0.489300,-0.489300,-0.686100,0.833100 + 950 DATA -0.508100,-0.450000,0.865200,-0.508100,-0.450000,0.865200,-0.865200,-0.450000,0.508100,-0.833100,-0.686100,0.489300 + 960 DATA -0.381100,-1.200000,0.648900,0.000000,-1.200000,0.750000,0.000000,-0.938900,0.870400,0.000000,-0.938900,0.870400 + 970 DATA -0.442300,-0.938900,0.753000,-0.381100,-1.200000,0.648900,-0.442300,-0.938900,0.753000,0.000000,-0.938900,0.870400 + 980 DATA 0.000000,-0.686100,0.963000,0.000000,-0.686100,0.963000,-0.489300,-0.686100,0.833100,-0.442300,-0.938900,0.753000 + 990 DATA -0.489300,-0.686100,0.833100,0.000000,-0.686100,0.963000,0.000000,-0.450000, 1.000000,0.000000,-0.450000, 1.000000 + 1000 DATA -0.508100,-0.450000,0.865200,-0.489300,-0.686100,0.833100,0.000000,-1.200000,0.750000,0.381100,-1.200000,0.648900 + 1010 DATA 0.442300,-0.938900,0.753000,0.442300,-0.938900,0.753000,0.000000,-0.938900,0.870400,0.000000,-1.200000,0.750000 + 1020 DATA 0.000000,-0.938900,0.870400,0.442300,-0.938900,0.753000,0.489300,-0.686100,0.833100,0.489300,-0.686100,0.833100 + 1030 DATA 0.000000,-0.686100,0.963000,0.000000,-0.938900,0.870400,0.000000,-0.686100,0.963000,0.489300,-0.686100,0.833100 + 1040 DATA 0.508100,-0.450000,0.865200,0.508100,-0.450000,0.865200,0.000000,-0.450000, 1.000000,0.000000,-0.686100,0.963000 + 1050 DATA 0.381100,-1.200000,0.648900,0.648900,-1.200000,0.381100,0.753000,-0.938900,0.442300,0.753000,-0.938900,0.442300 + 1060 DATA 0.442300,-0.938900,0.753000,0.381100,-1.200000,0.648900,0.442300,-0.938900,0.753000,0.753000,-0.938900,0.442300 + 1070 DATA 0.833100,-0.686100,0.489300,0.833100,-0.686100,0.489300,0.489300,-0.686100,0.833100,0.442300,-0.938900,0.753000 + 1080 DATA 0.489300,-0.686100,0.833100,0.833100,-0.686100,0.489300,0.865200,-0.450000,0.508100,0.865200,-0.450000,0.508100 + 1090 DATA 0.508100,-0.450000,0.865200,0.489300,-0.686100,0.833100,0.648900,-1.200000,0.381100,0.750000,-1.200000,0.000000 + 1100 DATA 0.870400,-0.938900,0.000000,0.870400,-0.938900,0.000000,0.753000,-0.938900,0.442300,0.648900,-1.200000,0.381100 + 1110 DATA 0.753000,-0.938900,0.442300,0.870400,-0.938900,0.000000,0.963000,-0.686100,0.000000,0.963000,-0.686100,0.000000 + 1120 DATA 0.833100,-0.686100,0.489300,0.753000,-0.938900,0.442300,0.833100,-0.686100,0.489300,0.963000,-0.686100,0.000000 + 1130 DATA 1.000000,-0.450000,0.000000,1.000000,-0.450000,0.000000,0.865200,-0.450000,0.508100,0.833100,-0.686100,0.489300 + 1140 DATA 1.000000,-0.450000,0.000000,0.865200,-0.450000,-0.508100,0.809100,-0.261100,-0.475200,0.809100,-0.261100,-0.475200 + 1150 DATA 0.935200,-0.261100,0.000000,1.000000,-0.450000,0.000000,0.935200,-0.261100,0.000000,0.809100,-0.261100,-0.475200 + 1160 DATA 0.705000,-0.138900,-0.414000,0.705000,-0.138900,-0.414000,0.814800,-0.138900,0.000000,0.935200,-0.261100,0.000000 + 1170 DATA 0.814800,-0.138900,0.000000,0.705000,-0.138900,-0.414000,0.648900,-0.075000,-0.381100,0.648900,-0.075000,-0.381100 + 1180 DATA 0.750000,-0.075000,0.000000,0.814800,-0.138900,0.000000,0.865200,-0.450000,-0.508100,0.508100,-0.450000,-0.865200 + 1190 DATA 0.475200,-0.261100,-0.809100,0.475200,-0.261100,-0.809100,0.809100,-0.261100,-0.475200,0.865200,-0.450000,-0.508100 + 1200 DATA 0.809100,-0.261100,-0.475200,0.475200,-0.261100,-0.809100,0.414000,-0.138900,-0.705000,0.414000,-0.138900,-0.705000 + 1210 DATA 0.705000,-0.138900,-0.414000,0.809100,-0.261100,-0.475200,0.705000,-0.138900,-0.414000,0.414000,-0.138900,-0.705000 + 1220 DATA 0.381100,-0.075000,-0.648900,0.381100,-0.075000,-0.648900,0.648900,-0.075000,-0.381100,0.705000,-0.138900,-0.414000 + 1230 DATA 0.508100,-0.450000,-0.865200,0.000000,-0.450000,-1.000000,0.000000,-0.261100,-0.935200,0.000000,-0.261100,-0.935200 + 1240 DATA 0.475200,-0.261100,-0.809100,0.508100,-0.450000,-0.865200,0.475200,-0.261100,-0.809100,0.000000,-0.261100,-0.935200 + 1250 DATA 0.000000,-0.138900,-0.814800,0.000000,-0.138900,-0.814800,0.414000,-0.138900,-0.705000,0.475200,-0.261100,-0.809100 + 1260 DATA 0.414000,-0.138900,-0.705000,0.000000,-0.138900,-0.814800,0.000000,-0.075000,-0.750000,0.000000,-0.075000,-0.750000 + 1270 DATA 0.381100,-0.075000,-0.648900,0.414000,-0.138900,-0.705000,0.000000,-0.450000,-1.000000,-0.508100,-0.450000,-0.865200 + 1280 DATA -0.475200,-0.261100,-0.809100,-0.475200,-0.261100,-0.809100,0.000000,-0.261100,-0.935200,0.000000,-0.450000,-1.000000 + 1290 DATA 0.000000,-0.261100,-0.935200,-0.475200,-0.261100,-0.809100,-0.414000,-0.138900,-0.705000,-0.414000,-0.138900,-0.705000 + 1300 DATA 0.000000,-0.138900,-0.814800,0.000000,-0.261100,-0.935200,0.000000,-0.138900,-0.814800,-0.414000,-0.138900,-0.705000 + 1310 DATA -0.381100,-0.075000,-0.648900,-0.381100,-0.075000,-0.648900,0.000000,-0.075000,-0.750000,0.000000,-0.138900,-0.814800 + 1320 DATA -0.508100,-0.450000,-0.865200,-0.865200,-0.450000,-0.508100,-0.809100,-0.261100,-0.475200,-0.809100,-0.261100,-0.475200 + 1330 DATA -0.475200,-0.261100,-0.809100,-0.508100,-0.450000,-0.865200,-0.475200,-0.261100,-0.809100,-0.809100,-0.261100,-0.475200 + 1340 DATA -0.705000,-0.138900,-0.414000,-0.705000,-0.138900,-0.414000,-0.414000,-0.138900,-0.705000,-0.475200,-0.261100,-0.809100 + 1350 DATA -0.414000,-0.138900,-0.705000,-0.705000,-0.138900,-0.414000,-0.648900,-0.075000,-0.381100,-0.648900,-0.075000,-0.381100 + 1360 DATA -0.381100,-0.075000,-0.648900,-0.414000,-0.138900,-0.705000,-0.865200,-0.450000,-0.508100,-1.000000,-0.450000,0.000000 + 1370 DATA -0.935200,-0.261100,0.000000,-0.935200,-0.261100,0.000000,-0.809100,-0.261100,-0.475200,-0.865200,-0.450000,-0.508100 + 1380 DATA -0.809100,-0.261100,-0.475200,-0.935200,-0.261100,0.000000,-0.814800,-0.138900,0.000000,-0.814800,-0.138900,0.000000 + 1390 DATA -0.705000,-0.138900,-0.414000,-0.809100,-0.261100,-0.475200,-0.705000,-0.138900,-0.414000,-0.814800,-0.138900,0.000000 + 1400 DATA -0.750000,-0.075000,0.000000,-0.750000,-0.075000,0.000000,-0.648900,-0.075000,-0.381100,-0.705000,-0.138900,-0.414000 + 1410 DATA -1.000000,-0.450000,0.000000,-0.865200,-0.450000,0.508100,-0.809100,-0.261100,0.475200,-0.809100,-0.261100,0.475200 + 1420 DATA -0.935200,-0.261100,0.000000,-1.000000,-0.450000,0.000000,-0.935200,-0.261100,0.000000,-0.809100,-0.261100,0.475200 + 1430 DATA -0.705000,-0.138900,0.414000,-0.705000,-0.138900,0.414000,-0.814800,-0.138900,0.000000,-0.935200,-0.261100,0.000000 + 1440 DATA -0.814800,-0.138900,0.000000,-0.705000,-0.138900,0.414000,-0.648900,-0.075000,0.381100,-0.648900,-0.075000,0.381100 + 1450 DATA -0.750000,-0.075000,0.000000,-0.814800,-0.138900,0.000000,-0.865200,-0.450000,0.508100,-0.508100,-0.450000,0.865200 + 1460 DATA -0.475200,-0.261100,0.809100,-0.475200,-0.261100,0.809100,-0.809100,-0.261100,0.475200,-0.865200,-0.450000,0.508100 + 1470 DATA -0.809100,-0.261100,0.475200,-0.475200,-0.261100,0.809100,-0.414000,-0.138900,0.705000,-0.414000,-0.138900,0.705000 + 1480 DATA -0.705000,-0.138900,0.414000,-0.809100,-0.261100,0.475200,-0.705000,-0.138900,0.414000,-0.414000,-0.138900,0.705000 + 1490 DATA -0.381100,-0.075000,0.648900,-0.381100,-0.075000,0.648900,-0.648900,-0.075000,0.381100,-0.705000,-0.138900,0.414000 + 1500 DATA -0.508100,-0.450000,0.865200,0.000000,-0.450000, 1.000000,0.000000,-0.261100,0.935200,0.000000,-0.261100,0.935200 + 1510 DATA -0.475200,-0.261100,0.809100,-0.508100,-0.450000,0.865200,-0.475200,-0.261100,0.809100,0.000000,-0.261100,0.935200 + 1520 DATA 0.000000,-0.138900,0.814800,0.000000,-0.138900,0.814800,-0.414000,-0.138900,0.705000,-0.475200,-0.261100,0.809100 + 1530 DATA -0.414000,-0.138900,0.705000,0.000000,-0.138900,0.814800,0.000000,-0.075000,0.750000,0.000000,-0.075000,0.750000 + 1540 DATA -0.381100,-0.075000,0.648900,-0.414000,-0.138900,0.705000,0.000000,-0.450000, 1.000000,0.508100,-0.450000,0.865200 + 1550 DATA 0.475200,-0.261100,0.809100,0.475200,-0.261100,0.809100,0.000000,-0.261100,0.935200,0.000000,-0.450000, 1.000000 + 1560 DATA 0.000000,-0.261100,0.935200,0.475200,-0.261100,0.809100,0.414000,-0.138900,0.705000,0.414000,-0.138900,0.705000 + 1570 DATA 0.000000,-0.138900,0.814800,0.000000,-0.261100,0.935200,0.000000,-0.138900,0.814800,0.414000,-0.138900,0.705000 + 1580 DATA 0.381100,-0.075000,0.648900,0.381100,-0.075000,0.648900,0.000000,-0.075000,0.750000,0.000000,-0.138900,0.814800 + 1590 DATA 0.508100,-0.450000,0.865200,0.865200,-0.450000,0.508100,0.809100,-0.261100,0.475200,0.809100,-0.261100,0.475200 + 1600 DATA 0.475200,-0.261100,0.809100,0.508100,-0.450000,0.865200,0.475200,-0.261100,0.809100,0.809100,-0.261100,0.475200 + 1610 DATA 0.705000,-0.138900,0.414000,0.705000,-0.138900,0.414000,0.414000,-0.138900,0.705000,0.475200,-0.261100,0.809100 + 1620 DATA 0.414000,-0.138900,0.705000,0.705000,-0.138900,0.414000,0.648900,-0.075000,0.381100,0.648900,-0.075000,0.381100 + 1630 DATA 0.381100,-0.075000,0.648900,0.414000,-0.138900,0.705000,0.865200,-0.450000,0.508100,1.000000,-0.450000,0.000000 + 1640 DATA 0.935200,-0.261100,0.000000,0.935200,-0.261100,0.000000,0.809100,-0.261100,0.475200,0.865200,-0.450000,0.508100 + 1650 DATA 0.809100,-0.261100,0.475200,0.935200,-0.261100,0.000000,0.814800,-0.138900,0.000000,0.814800,-0.138900,0.000000 + 1660 DATA 0.705000,-0.138900,0.414000,0.809100,-0.261100,0.475200,0.705000,-0.138900,0.414000,0.814800,-0.138900,0.000000 + 1670 DATA 0.750000,-0.075000,0.000000,0.750000,-0.075000,0.000000,0.648900,-0.075000,0.381100,0.705000,-0.138900,0.414000 + 1680 DATA 0.750000,-0.075000,0.000000,0.648900,-0.075000,-0.381100,0.617600,-0.038900,-0.362800,0.617600,-0.038900,-0.362800 + 1690 DATA 0.713900,-0.038900,0.000000,0.750000,-0.075000,0.000000,0.713900,-0.038900,0.000000,0.617600,-0.038900,-0.362800 + 1700 DATA 0.442200,-0.011100,-0.259700,0.442200,-0.011100,-0.259700,0.511100,-0.011100,0.000000,0.713900,-0.038900,0.000000 + 1710 DATA 0.511100,-0.011100,0.000000,0.442200,-0.011100,-0.259700,0.000000,0.000000,-0.000000,0.000000,0.000000,-0.000000 + 1720 DATA 0.000000,0.000000,-0.000000,0.511100,-0.011100,0.000000,0.648900,-0.075000,-0.381100,0.381100,-0.075000,-0.648900 + 1730 DATA 0.362800,-0.038900,-0.617600,0.362800,-0.038900,-0.617600,0.617600,-0.038900,-0.362800,0.648900,-0.075000,-0.381100 + 1740 DATA 0.617600,-0.038900,-0.362800,0.362800,-0.038900,-0.617600,0.259700,-0.011100,-0.442200,0.259700,-0.011100,-0.442200 + 1750 DATA 0.442200,-0.011100,-0.259700,0.617600,-0.038900,-0.362800,0.442200,-0.011100,-0.259700,0.259700,-0.011100,-0.442200 + 1760 DATA 0.000000,0.000000,-0.000000,0.000000,0.000000,-0.000000,0.000000,0.000000,-0.000000,0.442200,-0.011100,-0.259700 + 1770 DATA 0.381100,-0.075000,-0.648900,0.000000,-0.075000,-0.750000,0.000000,-0.038900,-0.713900,0.000000,-0.038900,-0.713900 + 1780 DATA 0.362800,-0.038900,-0.617600,0.381100,-0.075000,-0.648900,0.362800,-0.038900,-0.617600,0.000000,-0.038900,-0.713900 + 1790 DATA 0.000000,-0.011100,-0.511100,0.000000,-0.011100,-0.511100,0.259700,-0.011100,-0.442200,0.362800,-0.038900,-0.617600 + 1800 DATA 0.259700,-0.011100,-0.442200,0.000000,-0.011100,-0.511100,0.000000,0.000000,-0.000000,0.000000,0.000000,-0.000000 + 1810 DATA 0.000000,0.000000,-0.000000,0.259700,-0.011100,-0.442200,0.000000,-0.075000,-0.750000,-0.381100,-0.075000,-0.648900 + 1820 DATA -0.362800,-0.038900,-0.617600,-0.362800,-0.038900,-0.617600,0.000000,-0.038900,-0.713900,0.000000,-0.075000,-0.750000 + 1830 DATA 0.000000,-0.038900,-0.713900,-0.362800,-0.038900,-0.617600,-0.259700,-0.011100,-0.442200,-0.259700,-0.011100,-0.442200 + 1840 DATA 0.000000,-0.011100,-0.511100,0.000000,-0.038900,-0.713900,0.000000,-0.011100,-0.511100,-0.259700,-0.011100,-0.442200 + 1850 DATA 0.000000,0.000000,-0.000000,0.000000,0.000000,-0.000000,0.000000,0.000000,-0.000000,0.000000,-0.011100,-0.511100 + 1860 DATA -0.381100,-0.075000,-0.648900,-0.648900,-0.075000,-0.381100,-0.617600,-0.038900,-0.362800,-0.617600,-0.038900,-0.362800 + 1870 DATA -0.362800,-0.038900,-0.617600,-0.381100,-0.075000,-0.648900,-0.362800,-0.038900,-0.617600,-0.617600,-0.038900,-0.362800 + 1880 DATA -0.442200,-0.011100,-0.259700,-0.442200,-0.011100,-0.259700,-0.259700,-0.011100,-0.442200,-0.362800,-0.038900,-0.617600 + 1890 DATA -0.259700,-0.011100,-0.442200,-0.442200,-0.011100,-0.259700,0.000000,0.000000,-0.000000,0.000000,0.000000,-0.000000 + 1900 DATA 0.000000,0.000000,-0.000000,-0.259700,-0.011100,-0.442200,-0.648900,-0.075000,-0.381100,-0.750000,-0.075000,0.000000 + 1910 DATA -0.713900,-0.038900,0.000000,-0.713900,-0.038900,0.000000,-0.617600,-0.038900,-0.362800,-0.648900,-0.075000,-0.381100 + 1920 DATA -0.617600,-0.038900,-0.362800,-0.713900,-0.038900,0.000000,-0.511100,-0.011100,0.000000,-0.511100,-0.011100,0.000000 + 1930 DATA -0.442200,-0.011100,-0.259700,-0.617600,-0.038900,-0.362800,-0.442200,-0.011100,-0.259700,-0.511100,-0.011100,0.000000 + 1940 DATA 0.000000,0.000000,-0.000000,0.000000,0.000000,-0.000000,0.000000,0.000000,-0.000000,-0.442200,-0.011100,-0.259700 + 1950 DATA -0.750000,-0.075000,0.000000,-0.648900,-0.075000,0.381100,-0.617600,-0.038900,0.362800,-0.617600,-0.038900,0.362800 + 1960 DATA -0.713900,-0.038900,0.000000,-0.750000,-0.075000,0.000000,-0.713900,-0.038900,0.000000,-0.617600,-0.038900,0.362800 + 1970 DATA -0.442200,-0.011100,0.259700,-0.442200,-0.011100,0.259700,-0.511100,-0.011100,0.000000,-0.713900,-0.038900,0.000000 + 1980 DATA -0.511100,-0.011100,0.000000,-0.442200,-0.011100,0.259700,0.000000,0.000000,-0.000000,0.000000,0.000000,-0.000000 + 1990 DATA 0.000000,0.000000,-0.000000,-0.511100,-0.011100,0.000000,-0.648900,-0.075000,0.381100,-0.381100,-0.075000,0.648900 + 2000 DATA -0.362800,-0.038900,0.617600,-0.362800,-0.038900,0.617600,-0.617600,-0.038900,0.362800,-0.648900,-0.075000,0.381100 + 2010 DATA -0.617600,-0.038900,0.362800,-0.362800,-0.038900,0.617600,-0.259700,-0.011100,0.442200,-0.259700,-0.011100,0.442200 + 2020 DATA -0.442200,-0.011100,0.259700,-0.617600,-0.038900,0.362800,-0.442200,-0.011100,0.259700,-0.259700,-0.011100,0.442200 + 2030 DATA 0.000000,0.000000,-0.000000,0.000000,0.000000,-0.000000,0.000000,0.000000,-0.000000,-0.442200,-0.011100,0.259700 + 2040 DATA -0.381100,-0.075000,0.648900,0.000000,-0.075000,0.750000,0.000000,-0.038900,0.713900,0.000000,-0.038900,0.713900 + 2050 DATA -0.362800,-0.038900,0.617600,-0.381100,-0.075000,0.648900,-0.362800,-0.038900,0.617600,0.000000,-0.038900,0.713900 + 2060 DATA 0.000000,-0.011100,0.511100,0.000000,-0.011100,0.511100,-0.259700,-0.011100,0.442200,-0.362800,-0.038900,0.617600 + 2070 DATA -0.259700,-0.011100,0.442200,0.000000,-0.011100,0.511100,0.000000,0.000000,-0.000000,0.000000,0.000000,-0.000000 + 2080 DATA 0.000000,0.000000,-0.000000,-0.259700,-0.011100,0.442200,0.000000,-0.075000,0.750000,0.381100,-0.075000,0.648900 + 2090 DATA 0.362800,-0.038900,0.617600,0.362800,-0.038900,0.617600,0.000000,-0.038900,0.713900,0.000000,-0.075000,0.750000 + 2100 DATA 0.000000,-0.038900,0.713900,0.362800,-0.038900,0.617600,0.259700,-0.011100,0.442200,0.259700,-0.011100,0.442200 + 2110 DATA 0.000000,-0.011100,0.511100,0.000000,-0.038900,0.713900,0.000000,-0.011100,0.511100,0.259700,-0.011100,0.442200 + 2120 DATA 0.000000,0.000000,-0.000000,0.000000,0.000000,-0.000000,0.000000,0.000000,-0.000000,0.000000,-0.011100,0.511100 + 2130 DATA 0.381100,-0.075000,0.648900,0.648900,-0.075000,0.381100,0.617600,-0.038900,0.362800,0.617600,-0.038900,0.362800 + 2140 DATA 0.362800,-0.038900,0.617600,0.381100,-0.075000,0.648900,0.362800,-0.038900,0.617600,0.617600,-0.038900,0.362800 + 2150 DATA 0.442200,-0.011100,0.259700,0.442200,-0.011100,0.259700,0.259700,-0.011100,0.442200,0.362800,-0.038900,0.617600 + 2160 DATA 0.259700,-0.011100,0.442200,0.442200,-0.011100,0.259700,0.000000,0.000000,-0.000000,0.000000,0.000000,-0.000000 + 2170 DATA 0.000000,0.000000,-0.000000,0.259700,-0.011100,0.442200,0.648900,-0.075000,0.381100,0.750000,-0.075000,0.000000 + 2180 DATA 0.713900,-0.038900,0.000000,0.713900,-0.038900,0.000000,0.617600,-0.038900,0.362800,0.648900,-0.075000,0.381100 + 2190 DATA 0.617600,-0.038900,0.362800,0.713900,-0.038900,0.000000,0.511100,-0.011100,0.000000,0.511100,-0.011100,0.000000 + 2200 DATA 0.442200,-0.011100,0.259700,0.617600,-0.038900,0.362800,0.442200,-0.011100,0.259700,0.511100,-0.011100,0.000000 + 2210 DATA 0.000000,0.000000,-0.000000,0.000000,0.000000,-0.000000,0.000000,0.000000,-0.000000,0.442200,-0.011100,0.259700 + 2220 DATA -0.800000,-1.012500,0.000000,-0.787000,-1.041700,-0.100000,-1.115900,-1.036400,-0.100000,-1.115900,-1.036400,-0.100000 + 2230 DATA -1.098100,-1.008300,0.000000,-0.800000,-1.012500,0.000000,-1.098100,-1.008300,0.000000,-1.115900,-1.036400,-0.100000 + 2240 DATA -1.319300,-0.999700,-0.100000,-1.319300,-0.999700,-0.100000,-1.285200,-0.979200,0.000000,-1.098100,-1.008300,0.000000 + 2250 DATA -1.285200,-0.979200,0.000000,-1.319300,-0.999700,-0.100000,-1.388900,-0.900000,-0.100000,-1.388900,-0.900000,-0.100000 + 2260 DATA -1.350000,-0.900000,0.000000,-1.285200,-0.979200,0.000000,-0.787000,-1.041700,-0.100000,-0.763000,-1.095800,-0.100000 + 2270 DATA -1.148900,-1.088600,-0.100000,-1.148900,-1.088600,-0.100000,-1.115900,-1.036400,-0.100000,-0.787000,-1.041700,-0.100000 + 2280 DATA -1.115900,-1.036400,-0.100000,-1.148900,-1.088600,-0.100000,-1.382600,-1.037800,-0.100000,-1.382600,-1.037800,-0.100000 + 2290 DATA -1.319300,-0.999700,-0.100000,-1.115900,-1.036400,-0.100000,-1.319300,-0.999700,-0.100000,-1.382600,-1.037800,-0.100000 + 2300 DATA -1.461100,-0.900000,-0.100000,-1.461100,-0.900000,-0.100000,-1.388900,-0.900000,-0.100000,-1.319300,-0.999700,-0.100000 + 2310 DATA -0.763000,-1.095800,-0.100000,-0.750000,-1.125000,0.000000,-1.166700,-1.116700,0.000000,-1.166700,-1.116700,0.000000 + 2320 DATA -1.148900,-1.088600,-0.100000,-0.763000,-1.095800,-0.100000,-1.148900,-1.088600,-0.100000,-1.166700,-1.116700,0.000000 + 2330 DATA -1.416700,-1.058300,0.000000,-1.416700,-1.058300,0.000000,-1.382600,-1.037800,-0.100000,-1.148900,-1.088600,-0.100000 + 2340 DATA -1.382600,-1.037800,-0.100000,-1.416700,-1.058300,0.000000,-1.500000,-0.900000,0.000000,-1.500000,-0.900000,0.000000 + 2350 DATA -1.461100,-0.900000,-0.100000,-1.382600,-1.037800,-0.100000,-0.750000,-1.125000,0.000000,-0.763000,-1.095800,0.100000 + 2360 DATA -1.148900,-1.088600,0.100000,-1.148900,-1.088600,0.100000,-1.166700,-1.116700,0.000000,-0.750000,-1.125000,0.000000 + 2370 DATA -1.166700,-1.116700,0.000000,-1.148900,-1.088600,0.100000,-1.382600,-1.037800,0.100000,-1.382600,-1.037800,0.100000 + 2380 DATA -1.416700,-1.058300,0.000000,-1.166700,-1.116700,0.000000,-1.416700,-1.058300,0.000000,-1.382600,-1.037800,0.100000 + 2390 DATA -1.461100,-0.900000,0.100000,-1.461100,-0.900000,0.100000,-1.500000,-0.900000,0.000000,-1.416700,-1.058300,0.000000 + 2400 DATA -0.763000,-1.095800,0.100000,-0.787000,-1.041700,0.100000,-1.115900,-1.036400,0.100000,-1.115900,-1.036400,0.100000 + 2410 DATA -1.148900,-1.088600,0.100000,-0.763000,-1.095800,0.100000,-1.148900,-1.088600,0.100000,-1.115900,-1.036400,0.100000 + 2420 DATA -1.319300,-0.999700,0.100000,-1.319300,-0.999700,0.100000,-1.382600,-1.037800,0.100000,-1.148900,-1.088600,0.100000 + 2430 DATA -1.382600,-1.037800,0.100000,-1.319300,-0.999700,0.100000,-1.388900,-0.900000,0.100000,-1.388900,-0.900000,0.100000 + 2440 DATA -1.461100,-0.900000,0.100000,-1.382600,-1.037800,0.100000,-0.787000,-1.041700,0.100000,-0.800000,-1.012500,0.000000 + 2450 DATA -1.098100,-1.008300,0.000000,-1.098100,-1.008300,0.000000,-1.115900,-1.036400,0.100000,-0.787000,-1.041700,0.100000 + 2460 DATA -1.115900,-1.036400,0.100000,-1.098100,-1.008300,0.000000,-1.285200,-0.979200,0.000000,-1.285200,-0.979200,0.000000 + 2470 DATA -1.319300,-0.999700,0.100000,-1.115900,-1.036400,0.100000,-1.319300,-0.999700,0.100000,-1.285200,-0.979200,0.000000 + 2480 DATA -1.350000,-0.900000,0.000000,-1.350000,-0.900000,0.000000,-1.388900,-0.900000,0.100000,-1.319300,-0.999700,0.100000 + 2490 DATA -1.350000,-0.900000,0.000000,-1.388900,-0.900000,-0.100000,-1.347500,-0.738500,-0.100000,-1.347500,-0.738500,-0.100000 + 2500 DATA -1.314800,-0.758300,0.000000,-1.350000,-0.900000,0.000000,-1.314800,-0.758300,0.000000,-1.347500,-0.738500,-0.100000 + 2510 DATA -1.216700,-0.562900,-0.100000,-1.216700,-0.562900,-0.100000,-1.201900,-0.591700,0.000000,-1.314800,-0.758300,0.000000 + 2520 DATA -1.201900,-0.591700,0.000000,-1.216700,-0.562900,-0.100000,-0.987000,-0.411100,-0.100000,-0.987000,-0.411100,-0.100000 + 2530 DATA -1.000000,-0.450000,0.000000,-1.201900,-0.591700,0.000000,-1.388900,-0.900000,-0.100000,-1.461100,-0.900000,-0.100000 + 2540 DATA -1.408100,-0.701700,-0.100000,-1.408100,-0.701700,-0.100000,-1.347500,-0.738500,-0.100000,-1.388900,-0.900000,-0.100000 + 2550 DATA -1.347500,-0.738500,-0.100000,-1.408100,-0.701700,-0.100000,-1.244400,-0.509400,-0.100000,-1.244400,-0.509400,-0.100000 + 2560 DATA -1.216700,-0.562900,-0.100000,-1.347500,-0.738500,-0.100000,-1.216700,-0.562900,-0.100000,-1.244400,-0.509400,-0.100000 + 2570 DATA -0.963000,-0.338900,-0.100000,-0.963000,-0.338900,-0.100000,-0.987000,-0.411100,-0.100000,-1.216700,-0.562900,-0.100000 + 2580 DATA -1.461100,-0.900000,-0.100000,-1.500000,-0.900000,0.000000,-1.440700,-0.681900,0.000000,-1.440700,-0.681900,0.000000 + 2590 DATA -1.408100,-0.701700,-0.100000,-1.461100,-0.900000,-0.100000,-1.408100,-0.701700,-0.100000,-1.440700,-0.681900,0.000000 + 2600 DATA -1.259300,-0.480600,0.000000,-1.259300,-0.480600,0.000000,-1.244400,-0.509400,-0.100000,-1.408100,-0.701700,-0.100000 + 2610 DATA -1.244400,-0.509400,-0.100000,-1.259300,-0.480600,0.000000,-0.950000,-0.300000,0.000000,-0.950000,-0.300000,0.000000 + 2620 DATA -0.963000,-0.338900,-0.100000,-1.244400,-0.509400,-0.100000,-1.500000,-0.900000,0.000000,-1.461100,-0.900000,0.100000 + 2630 DATA -1.408100,-0.701700,0.100000,-1.408100,-0.701700,0.100000,-1.440700,-0.681900,0.000000,-1.500000,-0.900000,0.000000 + 2640 DATA -1.440700,-0.681900,0.000000,-1.408100,-0.701700,0.100000,-1.244400,-0.509400,0.100000,-1.244400,-0.509400,0.100000 + 2650 DATA -1.259300,-0.480600,0.000000,-1.440700,-0.681900,0.000000,-1.259300,-0.480600,0.000000,-1.244400,-0.509400,0.100000 + 2660 DATA -0.963000,-0.338900,0.100000,-0.963000,-0.338900,0.100000,-0.950000,-0.300000,0.000000,-1.259300,-0.480600,0.000000 + 2670 DATA -1.461100,-0.900000,0.100000,-1.388900,-0.900000,0.100000,-1.347500,-0.738500,0.100000,-1.347500,-0.738500,0.100000 + 2680 DATA -1.408100,-0.701700,0.100000,-1.461100,-0.900000,0.100000,-1.408100,-0.701700,0.100000,-1.347500,-0.738500,0.100000 + 2690 DATA -1.216700,-0.562900,0.100000,-1.216700,-0.562900,0.100000,-1.244400,-0.509400,0.100000,-1.408100,-0.701700,0.100000 + 2700 DATA -1.244400,-0.509400,0.100000,-1.216700,-0.562900,0.100000,-0.987000,-0.411100,0.100000,-0.987000,-0.411100,0.100000 + 2710 DATA -0.963000,-0.338900,0.100000,-1.244400,-0.509400,0.100000,-1.388900,-0.900000,0.100000,-1.350000,-0.900000,0.000000 + 2720 DATA -1.314800,-0.758300,0.000000,-1.314800,-0.758300,0.000000,-1.347500,-0.738500,0.100000,-1.388900,-0.900000,0.100000 + 2730 DATA -1.347500,-0.738500,0.100000,-1.314800,-0.758300,0.000000,-1.201900,-0.591700,0.000000,-1.201900,-0.591700,0.000000 + 2740 DATA -1.216700,-0.562900,0.100000,-1.347500,-0.738500,0.100000,-1.216700,-0.562900,0.100000,-1.201900,-0.591700,0.000000 + 2750 DATA -1.000000,-0.450000,0.000000,-1.000000,-0.450000,0.000000,-0.987000,-0.411100,0.100000,-1.216700,-0.562900,0.100000 + 2760 DATA 0.850000,-0.712500,0.000000,0.850000,-0.605600,-0.220000,1.169800,-0.737100,-0.184600,1.169800,-0.737100,-0.184600 + 2770 DATA 1.135200,-0.805600,0.000000,0.850000,-0.712500,0.000000,1.135200,-0.805600,0.000000,1.169800,-0.737100,-0.184600 + 2780 DATA 1.274700,-0.981400,-0.118800,1.274700,-0.981400,-0.118800,1.231500,-1.006900,0.000000,1.135200,-0.805600,0.000000 + 2790 DATA 1.231500,-1.006900,0.000000,1.274700,-0.981400,-0.118800,1.427800,-1.200000,-0.083300,1.427800,-1.200000,-0.083300 + 2800 DATA 1.350000,-1.200000,0.000000,1.231500,-1.006900,0.000000,0.850000,-0.605600,-0.220000,0.850000,-0.406900,-0.220000 + 2810 DATA 1.234000,-0.610100,-0.184600,1.234000,-0.610100,-0.184600,1.169800,-0.737100,-0.184600,0.850000,-0.605600,-0.220000 + 2820 DATA 1.169800,-0.737100,-0.184600,1.234000,-0.610100,-0.184600,1.354900,-0.933900,-0.118800,1.354900,-0.933900,-0.118800 + 2830 DATA 1.274700,-0.981400,-0.118800,1.169800,-0.737100,-0.184600,1.274700,-0.981400,-0.118800,1.354900,-0.933900,-0.118800 + 2840 DATA 1.572200,-1.200000,-0.083300,1.572200,-1.200000,-0.083300,1.427800,-1.200000,-0.083300,1.274700,-0.981400,-0.118800 + 2850 DATA 0.850000,-0.406900,-0.220000,0.850000,-0.300000,0.000000,1.268500,-0.541700,0.000000,1.268500,-0.541700,0.000000 + 2860 DATA 1.234000,-0.610100,-0.184600,0.850000,-0.406900,-0.220000,1.234000,-0.610100,-0.184600,1.268500,-0.541700,0.000000 + 2870 DATA 1.398100,-0.908300,0.000000,1.398100,-0.908300,0.000000,1.354900,-0.933900,-0.118800,1.234000,-0.610100,-0.184600 + 2880 DATA 1.354900,-0.933900,-0.118800,1.398100,-0.908300,0.000000,1.650000,-1.200000,0.000000,1.650000,-1.200000,0.000000 + 2890 DATA 1.572200,-1.200000,-0.083300,1.354900,-0.933900,-0.118800,0.850000,-0.300000,0.000000,0.850000,-0.406900,0.220000 + 2900 DATA 1.234000,-0.610100,0.184600,1.234000,-0.610100,0.184600,1.268500,-0.541700,0.000000,0.850000,-0.300000,0.000000 + 2910 DATA 1.268500,-0.541700,0.000000,1.234000,-0.610100,0.184600,1.354900,-0.933900,0.118800,1.354900,-0.933900,0.118800 + 2920 DATA 1.398100,-0.908300,0.000000,1.268500,-0.541700,0.000000,1.398100,-0.908300,0.000000,1.354900,-0.933900,0.118800 + 2930 DATA 1.572200,-1.200000,0.083300,1.572200,-1.200000,0.083300,1.650000,-1.200000,0.000000,1.398100,-0.908300,0.000000 + 2940 DATA 0.850000,-0.406900,0.220000,0.850000,-0.605600,0.220000,1.169800,-0.737100,0.184600,1.169800,-0.737100,0.184600 + 2950 DATA 1.234000,-0.610100,0.184600,0.850000,-0.406900,0.220000,1.234000,-0.610100,0.184600,1.169800,-0.737100,0.184600 + 2960 DATA 1.274700,-0.981400,0.118800,1.274700,-0.981400,0.118800,1.354900,-0.933900,0.118800,1.234000,-0.610100,0.184600 + 2970 DATA 1.354900,-0.933900,0.118800,1.274700,-0.981400,0.118800,1.427800,-1.200000,0.083300,1.427800,-1.200000,0.083300 + 2980 DATA 1.572200,-1.200000,0.083300,1.354900,-0.933900,0.118800,0.850000,-0.605600,0.220000,0.850000,-0.712500,0.000000 + 2990 DATA 1.135200,-0.805600,0.000000,1.135200,-0.805600,0.000000,1.169800,-0.737100,0.184600,0.850000,-0.605600,0.220000 + 3000 DATA 1.169800,-0.737100,0.184600,1.135200,-0.805600,0.000000,1.231500,-1.006900,0.000000,1.231500,-1.006900,0.000000 + 3010 DATA 1.274700,-0.981400,0.118800,1.169800,-0.737100,0.184600,1.274700,-0.981400,0.118800,1.231500,-1.006900,0.000000 + 3020 DATA 1.350000,-1.200000,0.000000,1.350000,-1.200000,0.000000,1.427800,-1.200000,0.083300,1.274700,-0.981400,0.118800 + 3030 DATA 1.350000,-1.200000,0.000000,1.427800,-1.200000,-0.083300,1.478900,-1.227200,-0.074700,1.478900,-1.227200,-0.074700 + 3040 DATA 1.396300,-1.225000,0.000000,1.350000,-1.200000,0.000000,1.396300,-1.225000,0.000000,1.478900,-1.227200,-0.074700 + 3050 DATA 1.491200,-1.227700,-0.058600,1.491200,-1.227700,-0.058600,1.420400,-1.225000,0.000000,1.396300,-1.225000,0.000000 + 3060 DATA 1.420400,-1.225000,0.000000,1.491200,-1.227700,-0.058600,1.451900,-1.200000,-0.050000,1.451900,-1.200000,-0.050000 + 3070 DATA 1.400000,-1.200000,0.000000,1.420400,-1.225000,0.000000,1.427800,-1.200000,-0.083300,1.572200,-1.200000,-0.083300 + 3080 DATA 1.632200,-1.231200,-0.074700,1.632200,-1.231200,-0.074700,1.478900,-1.227200,-0.074700,1.427800,-1.200000,-0.083300 + 3090 DATA 1.478900,-1.227200,-0.074700,1.632200,-1.231200,-0.074700,1.622700,-1.232700,-0.058600,1.622700,-1.232700,-0.058600 + 3100 DATA 1.491200,-1.227700,-0.058600,1.478900,-1.227200,-0.074700,1.491200,-1.227700,-0.058600,1.622700,-1.232700,-0.058600 + 3110 DATA 1.548100,-1.200000,-0.050000,1.548100,-1.200000,-0.050000,1.451900,-1.200000,-0.050000,1.491200,-1.227700,-0.058600 + 3120 DATA 1.572200,-1.200000,-0.083300,1.650000,-1.200000,0.000000,1.714800,-1.233300,0.000000,1.714800,-1.233300,0.000000 + 3130 DATA 1.632200,-1.231200,-0.074700,1.572200,-1.200000,-0.083300,1.632200,-1.231200,-0.074700,1.714800,-1.233300,0.000000 + 3140 DATA 1.693500,-1.235400,0.000000,1.693500,-1.235400,0.000000,1.622700,-1.232700,-0.058600,1.632200,-1.231200,-0.074700 + 3150 DATA 1.622700,-1.232700,-0.058600,1.693500,-1.235400,0.000000,1.600000,-1.200000,0.000000,1.600000,-1.200000,0.000000 + 3160 DATA 1.548100,-1.200000,-0.050000,1.622700,-1.232700,-0.058600,1.650000,-1.200000,0.000000,1.572200,-1.200000,0.083300 + 3170 DATA 1.632200,-1.231200,0.074700,1.632200,-1.231200,0.074700,1.714800,-1.233300,0.000000,1.650000,-1.200000,0.000000 + 3180 DATA 1.714800,-1.233300,0.000000,1.632200,-1.231200,0.074700,1.622700,-1.232700,0.058600,1.622700,-1.232700,0.058600 + 3190 DATA 1.693500,-1.235400,0.000000,1.714800,-1.233300,0.000000,1.693500,-1.235400,0.000000,1.622700,-1.232700,0.058600 + 3200 DATA 1.548100,-1.200000,0.050000,1.548100,-1.200000,0.050000,1.600000,-1.200000,0.000000,1.693500,-1.235400,0.000000 + 3210 DATA 1.572200,-1.200000,0.083300,1.427800,-1.200000,0.083300,1.478900,-1.227200,0.074700,1.478900,-1.227200,0.074700 + 3220 DATA 1.632200,-1.231200,0.074700,1.572200,-1.200000,0.083300,1.632200,-1.231200,0.074700,1.478900,-1.227200,0.074700 + 3230 DATA 1.491200,-1.227700,0.058600,1.491200,-1.227700,0.058600,1.622700,-1.232700,0.058600,1.632200,-1.231200,0.074700 + 3240 DATA 1.622700,-1.232700,0.058600,1.491200,-1.227700,0.058600,1.451900,-1.200000,0.050000,1.451900,-1.200000,0.050000 + 3250 DATA 1.548100,-1.200000,0.050000,1.622700,-1.232700,0.058600,1.427800,-1.200000,0.083300,1.350000,-1.200000,0.000000 + 3260 DATA 1.396300,-1.225000,0.000000,1.396300,-1.225000,0.000000,1.478900,-1.227200,0.074700,1.427800,-1.200000,0.083300 + 3270 DATA 1.478900,-1.227200,0.074700,1.396300,-1.225000,0.000000,1.420400,-1.225000,0.000000,1.420400,-1.225000,0.000000 + 3280 DATA 1.491200,-1.227700,0.058600,1.478900,-1.227200,0.074700,1.491200,-1.227700,0.058600,1.420400,-1.225000,0.000000 + 3290 DATA 1.400000,-1.200000,0.000000,1.400000,-1.200000,0.000000,1.451900,-1.200000,0.050000,1.491200,-1.227700,0.058600 + 3300 DATA 0.000000,-1.575000,0.000000,0.000000,-1.575000,0.000000,0.157100,-1.533300,-0.092400,0.157100,-1.533300,-0.092400 + 3310 DATA 0.181500,-1.533300,0.000000,0.000000,-1.575000,0.000000,0.181500,-1.533300,0.000000,0.157100,-1.533300,-0.092400 + 3320 DATA 0.102600,-1.441700,-0.060300,0.102600,-1.441700,-0.060300,0.118500,-1.441700,0.000000,0.181500,-1.533300,0.000000 + 3330 DATA 0.118500,-1.441700,0.000000,0.102600,-1.441700,-0.060300,0.086500,-1.350000,-0.050800,0.086500,-1.350000,-0.050800 + 3340 DATA 0.100000,-1.350000,0.000000,0.118500,-1.441700,0.000000,0.000000,-1.575000,0.000000,0.000000,-1.575000,0.000000 + 3350 DATA 0.092400,-1.533300,-0.157100,0.092400,-1.533300,-0.157100,0.157100,-1.533300,-0.092400,0.000000,-1.575000,0.000000 + 3360 DATA 0.157100,-1.533300,-0.092400,0.092400,-1.533300,-0.157100,0.060300,-1.441700,-0.102600,0.060300,-1.441700,-0.102600 + 3370 DATA 0.102600,-1.441700,-0.060300,0.157100,-1.533300,-0.092400,0.102600,-1.441700,-0.060300,0.060300,-1.441700,-0.102600 + 3380 DATA 0.050800,-1.350000,-0.086500,0.050800,-1.350000,-0.086500,0.086500,-1.350000,-0.050800,0.102600,-1.441700,-0.060300 + 3390 DATA 0.000000,-1.575000,0.000000,0.000000,-1.575000,0.000000,0.000000,-1.533300,-0.181500,0.000000,-1.533300,-0.181500 + 3400 DATA 0.092400,-1.533300,-0.157100,0.000000,-1.575000,0.000000,0.092400,-1.533300,-0.157100,0.000000,-1.533300,-0.181500 + 3410 DATA 0.000000,-1.441700,-0.118500,0.000000,-1.441700,-0.118500,0.060300,-1.441700,-0.102600,0.092400,-1.533300,-0.157100 + 3420 DATA 0.060300,-1.441700,-0.102600,0.000000,-1.441700,-0.118500,0.000000,-1.350000,-0.100000,0.000000,-1.350000,-0.100000 + 3430 DATA 0.050800,-1.350000,-0.086500,0.060300,-1.441700,-0.102600,0.000000,-1.575000,0.000000,0.000000,-1.575000,0.000000 + 3440 DATA -0.092400,-1.533300,-0.157100,-0.092400,-1.533300,-0.157100,0.000000,-1.533300,-0.181500,0.000000,-1.575000,0.000000 + 3450 DATA 0.000000,-1.533300,-0.181500,-0.092400,-1.533300,-0.157100,-0.060300,-1.441700,-0.102600,-0.060300,-1.441700,-0.102600 + 3460 DATA 0.000000,-1.441700,-0.118500,0.000000,-1.533300,-0.181500,0.000000,-1.441700,-0.118500,-0.060300,-1.441700,-0.102600 + 3470 DATA -0.050800,-1.350000,-0.086500,-0.050800,-1.350000,-0.086500,0.000000,-1.350000,-0.100000,0.000000,-1.441700,-0.118500 + 3480 DATA 0.000000,-1.575000,0.000000,0.000000,-1.575000,0.000000,-0.157100,-1.533300,-0.092400,-0.157100,-1.533300,-0.092400 + 3490 DATA -0.092400,-1.533300,-0.157100,0.000000,-1.575000,0.000000,-0.092400,-1.533300,-0.157100,-0.157100,-1.533300,-0.092400 + 3500 DATA -0.102600,-1.441700,-0.060300,-0.102600,-1.441700,-0.060300,-0.060300,-1.441700,-0.102600,-0.092400,-1.533300,-0.157100 + 3510 DATA -0.060300,-1.441700,-0.102600,-0.102600,-1.441700,-0.060300,-0.086500,-1.350000,-0.050800,-0.086500,-1.350000,-0.050800 + 3520 DATA -0.050800,-1.350000,-0.086500,-0.060300,-1.441700,-0.102600,0.000000,-1.575000,0.000000,0.000000,-1.575000,0.000000 + 3530 DATA -0.181500,-1.533300,0.000000,-0.181500,-1.533300,0.000000,-0.157100,-1.533300,-0.092400,0.000000,-1.575000,0.000000 + 3540 DATA -0.157100,-1.533300,-0.092400,-0.181500,-1.533300,0.000000,-0.118500,-1.441700,0.000000,-0.118500,-1.441700,0.000000 + 3550 DATA -0.102600,-1.441700,-0.060300,-0.157100,-1.533300,-0.092400,-0.102600,-1.441700,-0.060300,-0.118500,-1.441700,0.000000 + 3560 DATA -0.100000,-1.350000,0.000000,-0.100000,-1.350000,0.000000,-0.086500,-1.350000,-0.050800,-0.102600,-1.441700,-0.060300 + 3570 DATA 0.000000,-1.575000,0.000000,0.000000,-1.575000,0.000000,-0.157100,-1.533300,0.092400,-0.157100,-1.533300,0.092400 + 3580 DATA -0.181500,-1.533300,0.000000,0.000000,-1.575000,0.000000,-0.181500,-1.533300,0.000000,-0.157100,-1.533300,0.092400 + 3590 DATA -0.102600,-1.441700,0.060300,-0.102600,-1.441700,0.060300,-0.118500,-1.441700,0.000000,-0.181500,-1.533300,0.000000 + 3600 DATA -0.118500,-1.441700,0.000000,-0.102600,-1.441700,0.060300,-0.086500,-1.350000,0.050800,-0.086500,-1.350000,0.050800 + 3610 DATA -0.100000,-1.350000,0.000000,-0.118500,-1.441700,0.000000,0.000000,-1.575000,0.000000,0.000000,-1.575000,0.000000 + 3620 DATA -0.092400,-1.533300,0.157100,-0.092400,-1.533300,0.157100,-0.157100,-1.533300,0.092400,0.000000,-1.575000,0.000000 + 3630 DATA -0.157100,-1.533300,0.092400,-0.092400,-1.533300,0.157100,-0.060300,-1.441700,0.102600,-0.060300,-1.441700,0.102600 + 3640 DATA -0.102600,-1.441700,0.060300,-0.157100,-1.533300,0.092400,-0.102600,-1.441700,0.060300,-0.060300,-1.441700,0.102600 + 3650 DATA -0.050800,-1.350000,0.086500,-0.050800,-1.350000,0.086500,-0.086500,-1.350000,0.050800,-0.102600,-1.441700,0.060300 + 3660 DATA 0.000000,-1.575000,0.000000,0.000000,-1.575000,0.000000,0.000000,-1.533300,0.181500,0.000000,-1.533300,0.181500 + 3670 DATA -0.092400,-1.533300,0.157100,0.000000,-1.575000,0.000000,-0.092400,-1.533300,0.157100,0.000000,-1.533300,0.181500 + 3680 DATA 0.000000,-1.441700,0.118500,0.000000,-1.441700,0.118500,-0.060300,-1.441700,0.102600,-0.092400,-1.533300,0.157100 + 3690 DATA -0.060300,-1.441700,0.102600,0.000000,-1.441700,0.118500,0.000000,-1.350000,0.100000,0.000000,-1.350000,0.100000 + 3700 DATA -0.050800,-1.350000,0.086500,-0.060300,-1.441700,0.102600,0.000000,-1.575000,0.000000,0.000000,-1.575000,0.000000 + 3710 DATA 0.092400,-1.533300,0.157100,0.092400,-1.533300,0.157100,0.000000,-1.533300,0.181500,0.000000,-1.575000,0.000000 + 3720 DATA 0.000000,-1.533300,0.181500,0.092400,-1.533300,0.157100,0.060300,-1.441700,0.102600,0.060300,-1.441700,0.102600 + 3730 DATA 0.000000,-1.441700,0.118500,0.000000,-1.533300,0.181500,0.000000,-1.441700,0.118500,0.060300,-1.441700,0.102600 + 3740 DATA 0.050800,-1.350000,0.086500,0.050800,-1.350000,0.086500,0.000000,-1.350000,0.100000,0.000000,-1.441700,0.118500 + 3750 DATA 0.000000,-1.575000,0.000000,0.000000,-1.575000,0.000000,0.157100,-1.533300,0.092400,0.157100,-1.533300,0.092400 + 3760 DATA 0.092400,-1.533300,0.157100,0.000000,-1.575000,0.000000,0.092400,-1.533300,0.157100,0.157100,-1.533300,0.092400 + 3770 DATA 0.102600,-1.441700,0.060300,0.102600,-1.441700,0.060300,0.060300,-1.441700,0.102600,0.092400,-1.533300,0.157100 + 3780 DATA 0.060300,-1.441700,0.102600,0.102600,-1.441700,0.060300,0.086500,-1.350000,0.050800,0.086500,-1.350000,0.050800 + 3790 DATA 0.050800,-1.350000,0.086500,0.060300,-1.441700,0.102600,0.000000,-1.575000,0.000000,0.000000,-1.575000,0.000000 + 3800 DATA 0.181500,-1.533300,0.000000,0.181500,-1.533300,0.000000,0.157100,-1.533300,0.092400,0.000000,-1.575000,0.000000 + 3810 DATA 0.157100,-1.533300,0.092400,0.181500,-1.533300,0.000000,0.118500,-1.441700,0.000000,0.118500,-1.441700,0.000000 + 3820 DATA 0.102600,-1.441700,0.060300,0.157100,-1.533300,0.092400,0.102600,-1.441700,0.060300,0.118500,-1.441700,0.000000 + 3830 DATA 0.100000,-1.350000,0.000000,0.100000,-1.350000,0.000000,0.086500,-1.350000,0.050800,0.102600,-1.441700,0.060300 + 3840 DATA 0.100000,-1.350000,0.000000,0.086500,-1.350000,-0.050800,0.248300,-1.294400,-0.145900,0.248300,-1.294400,-0.145900 + 3850 DATA 0.287000,-1.294400,0.000000,0.100000,-1.350000,0.000000,0.287000,-1.294400,0.000000,0.248300,-1.294400,-0.145900 + 3860 DATA 0.458200,-1.255600,-0.269100,0.458200,-1.255600,-0.269100,0.529600,-1.255600,0.000000,0.287000,-1.294400,0.000000 + 3870 DATA 0.529600,-1.255600,0.000000,0.458200,-1.255600,-0.269100,0.562400,-1.200000,-0.330300,0.562400,-1.200000,-0.330300 + 3880 DATA 0.650000,-1.200000,0.000000,0.529600,-1.255600,0.000000,0.086500,-1.350000,-0.050800,0.050800,-1.350000,-0.086500 + 3890 DATA 0.145900,-1.294400,-0.248300,0.145900,-1.294400,-0.248300,0.248300,-1.294400,-0.145900,0.086500,-1.350000,-0.050800 + 3900 DATA 0.248300,-1.294400,-0.145900,0.145900,-1.294400,-0.248300,0.269100,-1.255600,-0.458200,0.269100,-1.255600,-0.458200 + 3910 DATA 0.458200,-1.255600,-0.269100,0.248300,-1.294400,-0.145900,0.458200,-1.255600,-0.269100,0.269100,-1.255600,-0.458200 + 3920 DATA 0.330300,-1.200000,-0.562400,0.330300,-1.200000,-0.562400,0.562400,-1.200000,-0.330300,0.458200,-1.255600,-0.269100 + 3930 DATA 0.050800,-1.350000,-0.086500,0.000000,-1.350000,-0.100000,0.000000,-1.294400,-0.287000,0.000000,-1.294400,-0.287000 + 3940 DATA 0.145900,-1.294400,-0.248300,0.050800,-1.350000,-0.086500,0.145900,-1.294400,-0.248300,0.000000,-1.294400,-0.287000 + 3950 DATA 0.000000,-1.255600,-0.529600,0.000000,-1.255600,-0.529600,0.269100,-1.255600,-0.458200,0.145900,-1.294400,-0.248300 + 3960 DATA 0.269100,-1.255600,-0.458200,0.000000,-1.255600,-0.529600,0.000000,-1.200000,-0.650000,0.000000,-1.200000,-0.650000 + 3970 DATA 0.330300,-1.200000,-0.562400,0.269100,-1.255600,-0.458200,0.000000,-1.350000,-0.100000,-0.050800,-1.350000,-0.086500 + 3980 DATA -0.145900,-1.294400,-0.248300,-0.145900,-1.294400,-0.248300,0.000000,-1.294400,-0.287000,0.000000,-1.350000,-0.100000 + 3990 DATA 0.000000,-1.294400,-0.287000,-0.145900,-1.294400,-0.248300,-0.269100,-1.255600,-0.458200,-0.269100,-1.255600,-0.458200 + 4000 DATA 0.000000,-1.255600,-0.529600,0.000000,-1.294400,-0.287000,0.000000,-1.255600,-0.529600,-0.269100,-1.255600,-0.458200 + 4010 DATA -0.330300,-1.200000,-0.562400,-0.330300,-1.200000,-0.562400,0.000000,-1.200000,-0.650000,0.000000,-1.255600,-0.529600 + 4020 DATA -0.050800,-1.350000,-0.086500,-0.086500,-1.350000,-0.050800,-0.248300,-1.294400,-0.145900,-0.248300,-1.294400,-0.145900 + 4030 DATA -0.145900,-1.294400,-0.248300,-0.050800,-1.350000,-0.086500,-0.145900,-1.294400,-0.248300,-0.248300,-1.294400,-0.145900 + 4040 DATA -0.458200,-1.255600,-0.269100,-0.458200,-1.255600,-0.269100,-0.269100,-1.255600,-0.458200,-0.145900,-1.294400,-0.248300 + 4050 DATA -0.269100,-1.255600,-0.458200,-0.458200,-1.255600,-0.269100,-0.562400,-1.200000,-0.330300,-0.562400,-1.200000,-0.330300 + 4060 DATA -0.330300,-1.200000,-0.562400,-0.269100,-1.255600,-0.458200,-0.086500,-1.350000,-0.050800,-0.100000,-1.350000,0.000000 + 4070 DATA -0.287000,-1.294400,0.000000,-0.287000,-1.294400,0.000000,-0.248300,-1.294400,-0.145900,-0.086500,-1.350000,-0.050800 + 4080 DATA -0.248300,-1.294400,-0.145900,-0.287000,-1.294400,0.000000,-0.529600,-1.255600,0.000000,-0.529600,-1.255600,0.000000 + 4090 DATA -0.458200,-1.255600,-0.269100,-0.248300,-1.294400,-0.145900,-0.458200,-1.255600,-0.269100,-0.529600,-1.255600,0.000000 + 4100 DATA -0.650000,-1.200000,0.000000,-0.650000,-1.200000,0.000000,-0.562400,-1.200000,-0.330300,-0.458200,-1.255600,-0.269100 + 4110 DATA -0.100000,-1.350000,0.000000,-0.086500,-1.350000,0.050800,-0.248300,-1.294400,0.145900,-0.248300,-1.294400,0.145900 + 4120 DATA -0.287000,-1.294400,0.000000,-0.100000,-1.350000,0.000000,-0.287000,-1.294400,0.000000,-0.248300,-1.294400,0.145900 + 4130 DATA -0.458200,-1.255600,0.269100,-0.458200,-1.255600,0.269100,-0.529600,-1.255600,0.000000,-0.287000,-1.294400,0.000000 + 4140 DATA -0.529600,-1.255600,0.000000,-0.458200,-1.255600,0.269100,-0.562400,-1.200000,0.330300,-0.562400,-1.200000,0.330300 + 4150 DATA -0.650000,-1.200000,0.000000,-0.529600,-1.255600,0.000000,-0.086500,-1.350000,0.050800,-0.050800,-1.350000,0.086500 + 4160 DATA -0.145900,-1.294400,0.248300,-0.145900,-1.294400,0.248300,-0.248300,-1.294400,0.145900,-0.086500,-1.350000,0.050800 + 4170 DATA -0.248300,-1.294400,0.145900,-0.145900,-1.294400,0.248300,-0.269100,-1.255600,0.458200,-0.269100,-1.255600,0.458200 + 4180 DATA -0.458200,-1.255600,0.269100,-0.248300,-1.294400,0.145900,-0.458200,-1.255600,0.269100,-0.269100,-1.255600,0.458200 + 4190 DATA -0.330300,-1.200000,0.562400,-0.330300,-1.200000,0.562400,-0.562400,-1.200000,0.330300,-0.458200,-1.255600,0.269100 + 4200 DATA -0.050800,-1.350000,0.086500,0.000000,-1.350000,0.100000,0.000000,-1.294400,0.287000,0.000000,-1.294400,0.287000 + 4210 DATA -0.145900,-1.294400,0.248300,-0.050800,-1.350000,0.086500,-0.145900,-1.294400,0.248300,0.000000,-1.294400,0.287000 + 4220 DATA 0.000000,-1.255600,0.529600,0.000000,-1.255600,0.529600,-0.269100,-1.255600,0.458200,-0.145900,-1.294400,0.248300 + 4230 DATA -0.269100,-1.255600,0.458200,0.000000,-1.255600,0.529600,0.000000,-1.200000,0.650000,0.000000,-1.200000,0.650000 + 4240 DATA -0.330300,-1.200000,0.562400,-0.269100,-1.255600,0.458200,0.000000,-1.350000,0.100000,0.050800,-1.350000,0.086500 + 4250 DATA 0.145900,-1.294400,0.248300,0.145900,-1.294400,0.248300,0.000000,-1.294400,0.287000,0.000000,-1.350000,0.100000 + 4260 DATA 0.000000,-1.294400,0.287000,0.145900,-1.294400,0.248300,0.269100,-1.255600,0.458200,0.269100,-1.255600,0.458200 + 4270 DATA 0.000000,-1.255600,0.529600,0.000000,-1.294400,0.287000,0.000000,-1.255600,0.529600,0.269100,-1.255600,0.458200 + 4280 DATA 0.330300,-1.200000,0.562400,0.330300,-1.200000,0.562400,0.000000,-1.200000,0.650000,0.000000,-1.255600,0.529600 + 4290 DATA 0.050800,-1.350000,0.086500,0.086500,-1.350000,0.050800,0.248300,-1.294400,0.145900,0.248300,-1.294400,0.145900 + 4300 DATA 0.145900,-1.294400,0.248300,0.050800,-1.350000,0.086500,0.145900,-1.294400,0.248300,0.248300,-1.294400,0.145900 + 4310 DATA 0.458200,-1.255600,0.269100,0.458200,-1.255600,0.269100,0.269100,-1.255600,0.458200,0.145900,-1.294400,0.248300 + 4320 DATA 0.269100,-1.255600,0.458200,0.458200,-1.255600,0.269100,0.562400,-1.200000,0.330300,0.562400,-1.200000,0.330300 + 4330 DATA 0.330300,-1.200000,0.562400,0.269100,-1.255600,0.458200,0.086500,-1.350000,0.050800,0.100000,-1.350000,0.000000 + 4340 DATA 0.287000,-1.294400,0.000000,0.287000,-1.294400,0.000000,0.248300,-1.294400,0.145900,0.086500,-1.350000,0.050800 + 4350 DATA 0.248300,-1.294400,0.145900,0.287000,-1.294400,0.000000,0.529600,-1.255600,0.000000,0.529600,-1.255600,0.000000 + 4360 DATA 0.458200,-1.255600,0.269100,0.248300,-1.294400,0.145900,0.458200,-1.255600,0.269100,0.529600,-1.255600,0.000000 + 4370 DATA 0.650000,-1.200000,0.000000,0.650000,-1.200000,0.000000,0.562400,-1.200000,0.330300,0.458200,-1.255600,0.269100f + 4380 REM + 4390 REM -- VERTEX INDEXES -- + 4400 DATA 0,1,2,3,4,5,6,7,8,9 + 4410 DATA 10,11,12,13,14,15,16,17,18,19 + 4420 DATA 20,21,22,23,24,25,26,27,28,29 + 4430 DATA 30,31,32,33,34,35,36,37,38,39 + 4440 DATA 40,41,42,43,44,45,46,47,48,49 + 4450 DATA 50,51,52,53,54,55,56,57,58,59 + 4460 DATA 60,61,62,63,64,65,66,67,68,69 + 4470 DATA 70,71,72,73,74,75,76,77,78,79 + 4480 DATA 80,81,82,83,84,85,86,87,88,89 + 4490 DATA 90,91,92,93,94,95,96,97,98,99 + 4500 DATA 100,101,102,103,104,105,106,107,108,109 + 4510 DATA 110,111,112,113,114,115,116,117,118,119 + 4520 DATA 120,121,122,123,124,125,126,127,128,129 + 4530 DATA 130,131,132,133,134,135,136,137,138,139 + 4540 DATA 140,141,142,143,144,145,146,147,148,149 + 4550 DATA 150,151,152,153,154,155,156,157,158,159 + 4560 DATA 160,161,162,163,164,165,166,167,168,169 + 4570 DATA 170,171,172,173,174,175,176,177,178,179 + 4580 DATA 180,181,182,183,184,185,186,187,188,189 + 4590 DATA 190,191,192,193,194,195,196,197,198,199 + 4600 DATA 200,201,202,203,204,205,206,207,208,209 + 4610 DATA 210,211,212,213,214,215,216,217,218,219 + 4620 DATA 220,221,222,223,224,225,226,227,228,229 + 4630 DATA 230,231,232,233,234,235,236,237,238,239 + 4640 DATA 240,241,242,243,244,245,246,247,248,249 + 4650 DATA 250,251,252,253,254,255,256,257,258,259 + 4660 DATA 260,261,262,263,264,265,266,267,268,269 + 4670 DATA 270,271,272,273,274,275,276,277,278,279 + 4680 DATA 280,281,282,283,284,285,286,287,288,289 + 4690 DATA 290,291,292,293,294,295,296,297,298,299 + 4700 DATA 300,301,302,303,304,305,306,307,308,309 + 4710 DATA 310,311,312,313,314,315,316,317,318,319 + 4720 DATA 320,321,322,323,324,325,326,327,328,329 + 4730 DATA 330,331,332,333,334,335,336,337,338,339 + 4740 DATA 340,341,342,343,344,345,346,347,348,349 + 4750 DATA 350,351,352,353,354,355,356,357,358,359 + 4760 DATA 360,361,362,363,364,365,366,367,368,369 + 4770 DATA 370,371,372,373,374,375,376,377,378,379 + 4780 DATA 380,381,382,383,384,385,386,387,388,389 + 4790 DATA 390,391,392,393,394,395,396,397,398,399 + 4800 DATA 400,401,402,403,404,405,406,407,408,409 + 4810 DATA 410,411,412,413,414,415,416,417,418,419 + 4820 DATA 420,421,422,423,424,425,426,427,428,429 + 4830 DATA 430,431,432,433,434,435,436,437,438,439 + 4840 DATA 440,441,442,443,444,445,446,447,448,449 + 4850 DATA 450,451,452,453,454,455,456,457,458,459 + 4860 DATA 460,461,462,463,464,465,466,467,468,469 + 4870 DATA 470,471,472,473,474,475,476,477,478,479 + 4880 DATA 480,481,482,483,484,485,486,487,488,489 + 4890 DATA 490,491,492,493,494,495,496,497,498,499 + 4900 DATA 500,501,502,503,504,505,506,507,508,509 + 4910 DATA 510,511,512,513,514,515,516,517,518,519 + 4920 DATA 520,521,522,523,524,525,526,527,528,529 + 4930 DATA 530,531,532,533,534,535,536,537,538,539 + 4940 DATA 540,541,542,543,544,545,546,547,548,549 + 4950 DATA 550,551,552,553,554,555,556,557,558,559 + 4960 DATA 560,561,562,563,564,565,566,567,568,569 + 4970 DATA 570,571,572,573,574,575,576,577,578,579 + 4980 DATA 580,581,582,583,584,585,586,587,588,589 + 4990 DATA 590,591,592,593,594,595,596,597,598,599 + 5000 DATA 600,601,602,603,604,605,606,607,608,609 + 5010 DATA 610,611,612,613,614,615,616,617,618,619 + 5020 DATA 620,621,622,623,624,625,626,627,628,629 + 5030 DATA 630,631,632,633,634,635,636,637,638,639 + 5040 DATA 640,641,642,643,644,645,646,647,648,649 + 5050 DATA 650,651,652,653,654,655,656,657,658,659 + 5060 DATA 660,661,662,663,664,665,666,667,668,669 + 5070 DATA 670,671,672,673,674,675,676,677,678,679 + 5080 DATA 680,681,682,683,684,685,686,687,688,689 + 5090 DATA 690,691,692,693,694,695,696,697,698,699 + 5100 DATA 700,701,702,703,704,705,706,707,708,709 + 5110 DATA 710,711,712,713,714,715,716,717,718,719 + 5120 DATA 720,721,722,723,724,725,726,727,728,729 + 5130 DATA 730,731,732,733,734,735,736,737,738,739 + 5140 DATA 740,741,742,743,744,745,746,747,748,749 + 5150 DATA 750,751,752,753,754,755,756,757,758,759 + 5160 DATA 760,761,762,763,764,765,766,767,768,769 + 5170 DATA 770,771,772,773,774,775,776,777,778,779 + 5180 DATA 780,781,782,783,784,785,786,787,788,789 + 5190 DATA 790,791,792,793,794,795,796,797,798,799 + 5200 DATA 800,801,802,803,804,805,806,807,808,809 + 5210 DATA 810,811,812,813,814,815,816,817,818,819 + 5220 DATA 820,821,822,823,824,825,826,827,828,829 + 5230 DATA 830,831,832,833,834,835,836,837,838,839 + 5240 DATA 840,841,842,843,844,845,846,847,848,849 + 5250 DATA 850,851,852,853,854,855,856,857,858,859 + 5260 DATA 860,861,862,863,864,865,866,867,868,869 + 5270 DATA 870,871,872,873,874,875,876,877,878,879 + 5280 DATA 880,881,882,883,884,885,886,887,888,889 + 5290 DATA 890,891,892,893,894,895,896,897,898,899 + 5300 DATA 900,901,902,903,904,905,906,907,908,909 + 5310 DATA 910,911,912,913,914,915,916,917,918,919 + 5320 DATA 920,921,922,923,924,925,926,927,928,929 + 5330 DATA 930,931,932,933,934,935,936,937,938,939 + 5340 DATA 940,941,942,943,944,945,946,947,948,949 + 5350 DATA 950,951,952,953,954,955,956,957,958,959 + 5360 DATA 960,961,962,963,964,965,966,967,968,969 + 5370 DATA 970,971,972,973,974,975,976,977,978,979 + 5380 DATA 980,981,982,983,984,985,986,987,988,989 + 5390 DATA 990,991,992,993,994,995,996,997,998,999 + 5400 DATA 1000,1001,1002,1003,1004,1005,1006,1007,1008,1009 + 5410 DATA 1010,1011,1012,1013,1014,1015,1016,1017,1018,1019 + 5420 DATA 1020,1021,1022,1023,1024,1025,1026,1027,1028,1029 + 5430 DATA 1030,1031,1032,1033,1034,1035,1036,1037,1038,1039 + 5440 DATA 1040,1041,1042,1043,1044,1045,1046,1047,1048,1049 + 5450 DATA 1050,1051,1052,1053,1054,1055,1056,1057,1058,1059 + 5460 DATA 1060,1061,1062,1063,1064,1065,1066,1067,1068,1069 + 5470 DATA 1070,1071,1072,1073,1074,1075,1076,1077,1078,1079 + 5480 DATA 1080,1081,1082,1083,1084,1085,1086,1087,1088,1089 + 5490 DATA 1090,1091,1092,1093,1094,1095,1096,1097,1098,1099 + 5500 DATA 1100,1101,1102,1103,1104,1105,1106,1107,1108,1109 + 5510 DATA 1110,1111,1112,1113,1114,1115,1116,1117,1118,1119 + 5520 DATA 1120,1121,1122,1123,1124,1125,1126,1127,1128,1129 + 5530 DATA 1130,1131,1132,1133,1134,1135,1136,1137,1138,1139 + 5540 DATA 1140,1141,1142,1143,1144,1145,1146,1147,1148,1149 + 5550 DATA 1150,1151,1152,1153,1154,1155,1156,1157,1158,1159 + 5560 DATA 1160,1161,1162,1163,1164,1165,1166,1167,1168,1169 + 5570 DATA 1170,1171,1172,1173,1174,1175,1176,1177,1178,1179 + 5580 DATA 1180,1181,1182,1183,1184,1185,1186,1187,1188,1189 + 5590 DATA 1190,1191,1192,1193,1194,1195,1196,1197,1198,1199 + 5600 DATA 1200,1201,1202,1203,1204,1205,1206,1207,1208,1209 + 5610 DATA 1210,1211,1212,1213,1214,1215,1216,1217,1218,1219 + 5620 DATA 1220,1221,1222,1223,1224,1225,1226,1227,1228,1229 + 5630 DATA 1230,1231,1232,1233,1234,1235,1236,1237,1238,1239 + 5640 DATA 1240,1241,1242,1243,1244,1245,1246,1247,1248,1249 + 5650 DATA 1250,1251,1252,1253,1254,1255,1256,1257,1258,1259 + 5660 DATA 1260,1261,1262,1263,1264,1265,1266,1267,1268,1269 + 5670 DATA 1270,1271,1272,1273,1274,1275,1276,1277,1278,1279 + 5680 DATA 1280,1281,1282,1283,1284,1285,1286,1287,1288,1289 + 5690 DATA 1290,1291,1292,1293,1294,1295,1296,1297,1298,1299 + 5700 DATA 1300,1301,1302,1303,1304,1305,1306,1307,1308,1309 + 5710 DATA 1310,1311,1312,1313,1314,1315,1316,1317,1318,1319 + 5720 DATA 1320,1321,1322,1323,1324,1325,1326,1327,1328,1329 + 5730 DATA 1330,1331,1332,1333,1334,1335,1336,1337,1338,1339 + 5740 DATA 1340,1341,1342,1343,1344,1345,1346,1347,1348,1349 + 5750 DATA 1350,1351,1352,1353,1354,1355,1356,1357,1358,1359 + 5760 DATA 1360,1361,1362,1363,1364,1365,1366,1367,1368,1369 + 5770 DATA 1370,1371,1372,1373,1374,1375,1376,1377,1378,1379 + 5780 DATA 1380,1381,1382,1383,1384,1385,1386,1387,1388,1389 + 5790 DATA 1390,1391,1392,1393,1394,1395,1396,1397,1398,1399 + 5800 DATA 1400,1401,1402,1403,1404,1405,1406,1407,1408,1409 + 5810 DATA 1410,1411,1412,1413,1414,1415,1416,1417,1418,1419 + 5820 DATA 1420,1421,1422,1423,1424,1425,1426,1427,1428,1429 + 5830 DATA 1430,1431,1432,1433,1434,1435,1436,1437,1438,1439 + 5840 DATA 1440,1441,1442,1443,1444,1445,1446,1447,1448,1449 + 5850 DATA 1450,1451,1452,1453,1454,1455,1456,1457,1458,1459 + 5860 DATA 1460,1461,1462,1463,1464,1465,1466,1467,1468,1469 + 5870 DATA 1470,1471,1472,1473,1474,1475,1476,1477,1478,1479 + 5880 DATA 1480,1481,1482,1483,1484,1485,1486,1487,1488,1489 + 5890 DATA 1490,1491,1492,1493,1494,1495,1496,1497,1498,1499 + 5900 DATA 1500,1501,1502,1503,1504,1505,1506,1507,1508,1509 + 5910 DATA 1510,1511,1512,1513,1514,1515,1516,1517,1518,1519 + 5920 DATA 1520,1521,1522,1523,1524,1525,1526,1527,1528,1529 + 5930 DATA 1530,1531,1532,1533,1534,1535,1536,1537,1538,1539 + 5940 DATA 1540,1541,1542,1543,1544,1545,1546,1547,1548,1549 + 5950 DATA 1550,1551,1552,1553,1554,1555,1556,1557,1558,1559 + 5960 DATA 1560,1561,1562,1563,1564,1565,1566,1567,1568,1569 + 5970 DATA 1570,1571,1572,1573,1574,1575,1576,1577,1578,1579 + 5980 DATA 1580,1581,1582,1583,1584,1585,1586,1587,1588,1589 + 5990 DATA 1590,1591,1592,1593,1594,1595,1596,1597,1598,1599 + 6000 DATA 1600,1601,1602,1603,1604,1605,1606,1607,1608,1609 + 6010 DATA 1610,1611,1612,1613,1614,1615,1616,1617,1618,1619 + 6020 DATA 1620,1621,1622,1623,1624,1625,1626,1627,1628,1629 + 6030 DATA 1630,1631,1632,1633,1634,1635,1636,1637,1638,1639 + 6040 DATA 1640,1641,1642,1643,1644,1645,1646,1647,1648,1649 + 6050 DATA 1650,1651,1652,1653,1654,1655,1656,1657,1658,1659 + 6060 DATA 1660,1661,1662,1663,1664,1665,1666,1667,1668,1669 + 6070 DATA 1670,1671,1672,1673,1674,1675,1676,1677,1678,1679 + 6080 DATA 1680,1681,1682,1683,1684,1685,1686,1687,1688,1689 + 6090 DATA 1690,1691,1692,1693,1694,1695,1696,1697,1698,1699 + 6100 DATA 1700,1701,1702,1703,1704,1705,1706,1707,1708,1709 + 6110 DATA 1710,1711,1712,1713,1714,1715,1716,1717,1718,1719 + 6120 DATA 1720,1721,1722,1723,1724,1725,1726,1727 + 6130 REM + 6140 REM -- CODE -- + 6145 PRINT "Reading vertices" + 6150 total_coords%=teapot_vertices%*3 + 6160 max_abs=-99999 + 6170 DIM vertices(total_coords%) + 6180 FOR i%=0 TO total_coords%-1 + 6190 READ coord + 6200 vertices(i%)=coord + 6210 a=ABS(coord) + 6220 IF a>max_abs THEN max_abs=a + 6230 NEXT i% + 6232 factor=32767.0/max_abs + 6234 PRINT "Max absolute value = ";max_abs + 6236 PRINT "Factor = ";factor + 6240 sid%=100: mid%=1: oid%=1: bmid1%=101: bmid2%=102 + 6245 PRINT "Creating control structure" + 6250 VDU 23,0, &A0, sid%; &48,0, 150; 150; : REM Create Control Structure + 6255 PRINT "Sending vertices using factor ";factor + 6260 VDU 23,0, &A0, sid%; &48, 1, mid%; teapot_vertices%; : REM Define Mesh Vertices + 6270 FOR i%=0 TO total_coords%-1 + 6280 val%=vertices(i%)*factor + 6290 VDU val%; + 6295 T%=TIME + 6296 IF TIME-T%<5 GOTO 6296 + 6300 NEXT i% + 6305 PRINT "Reading and sending vertex indexes" + 6310 VDU 23,0, &A0, sid%; &48, 2, mid%; teapot_vertices%; : REM Set Mesh Vertex Indexes + 6320 FOR i%=0 TO teapot_vertices%-1 + 6330 READ val% + 6340 VDU val%; + 6345 T%=TIME + 6346 IF TIME-T%<5 GOTO 6346 + 6350 NEXT i% + 6355 PRINT "Defining texture coordinates" + 6360 VDU 23,0, &A0, sid%; &48, 3, mid%; 1; 32768; 32768; : REM Define Texture Coordinates + 6355 PRINT "Sending texture coordinate indexes" + 6370 VDU 23,0, &A0, sid%; &48, 4, mid%; teapot_vertices%; : REM Set Texture Coordinate Indexes + 6372 FOR i%=0 TO teapot_vertices%-1 + 6373 VDU 0; + 6374 NEXT i% + 6376 PRINT "Creating texture bitmap" + 6380 VDU 23, 27, 0, bmid1%: REM Create a bitmap for a texture + 6382 PRINT "Setting texture pixel" + 6390 VDU 23, 27, 1, 1; 1; &55, &A0, &FF, &C0 : REM Set a pixel in the bitmap + 6400 bmid1%=bmid1%+64000 : REM Further references to the bitmap use this ID + 6405 PRINT "Create 3D object" + 6410 VDU 23,0, &A0, sid%; &48, 5, oid%; mid%; bmid1%; : REM Create Object + 6415 PRINT "Render 3D object" + 6420 VDU 23,0, &A0, sid%; &48, 18, bmid2%; : REM Render To Bitmap \ No newline at end of file diff --git a/video/pingo_3d.h b/video/pingo_3d.h index 03bcd671..18820178 100644 --- a/video/pingo_3d.h +++ b/video/pingo_3d.h @@ -217,6 +217,7 @@ typedef struct tag_Pingo3dControl { pos++; } } + debug_log("\n"); } } @@ -234,11 +235,13 @@ typedef struct tag_Pingo3dControl { mesh->pos_indices = (uint16_t*) heap_caps_malloc(n*sizeof(uint16_t), MALLOC_CAP_SPIRAM); auto idx = mesh->pos_indices; for (uint32_t i = 0; i < n; i++) { + if (!(i & 0x1F)) debug_log("%u ", i); uint16_t index = m_proc->readWord_t(); if (idx) { *idx++ = index; } } + debug_log("\n"); } } From 91ee39203c26ae2c3d27e93f54743884439708f3 Mon Sep 17 00:00:00 2001 From: Curtis Whitley Date: Wed, 24 Apr 2024 09:49:14 -0400 Subject: [PATCH 21/49] got through the test app --- video/pingo/assets/teapot.bas | 8 ++-- video/pingo_3d.h | 78 ++++++++++++++++++++++++++++------- 2 files changed, 67 insertions(+), 19 deletions(-) diff --git a/video/pingo/assets/teapot.bas b/video/pingo/assets/teapot.bas index 8df23cc1..e65d9ff6 100644 --- a/video/pingo/assets/teapot.bas +++ b/video/pingo/assets/teapot.bas @@ -434,7 +434,7 @@ 4340 DATA 0.287000,-1.294400,0.000000,0.287000,-1.294400,0.000000,0.248300,-1.294400,0.145900,0.086500,-1.350000,0.050800 4350 DATA 0.248300,-1.294400,0.145900,0.287000,-1.294400,0.000000,0.529600,-1.255600,0.000000,0.529600,-1.255600,0.000000 4360 DATA 0.458200,-1.255600,0.269100,0.248300,-1.294400,0.145900,0.458200,-1.255600,0.269100,0.529600,-1.255600,0.000000 - 4370 DATA 0.650000,-1.200000,0.000000,0.650000,-1.200000,0.000000,0.562400,-1.200000,0.330300,0.458200,-1.255600,0.269100f + 4370 DATA 0.650000,-1.200000,0.000000,0.650000,-1.200000,0.000000,0.562400,-1.200000,0.330300,0.458200,-1.255600,0.269100 4380 REM 4390 REM -- VERTEX INDEXES -- 4400 DATA 0,1,2,3,4,5,6,7,8,9 @@ -634,7 +634,7 @@ 6280 val%=vertices(i%)*factor 6290 VDU val%; 6295 T%=TIME - 6296 IF TIME-T%<5 GOTO 6296 + 6296 IF TIME-T%<2 GOTO 6296 6300 NEXT i% 6305 PRINT "Reading and sending vertex indexes" 6310 VDU 23,0, &A0, sid%; &48, 2, mid%; teapot_vertices%; : REM Set Mesh Vertex Indexes @@ -642,7 +642,7 @@ 6330 READ val% 6340 VDU val%; 6345 T%=TIME - 6346 IF TIME-T%<5 GOTO 6346 + 6346 IF TIME-T%<2 GOTO 6346 6350 NEXT i% 6355 PRINT "Defining texture coordinates" 6360 VDU 23,0, &A0, sid%; &48, 3, mid%; 1; 32768; 32768; : REM Define Texture Coordinates @@ -659,4 +659,4 @@ 6405 PRINT "Create 3D object" 6410 VDU 23,0, &A0, sid%; &48, 5, oid%; mid%; bmid1%; : REM Create Object 6415 PRINT "Render 3D object" - 6420 VDU 23,0, &A0, sid%; &48, 18, bmid2%; : REM Render To Bitmap \ No newline at end of file + 6420 VDU 23,0, &A0, sid%; &48, 18, bmid2%; : REM Render To Bitmap diff --git a/video/pingo_3d.h b/video/pingo_3d.h index 18820178..9299bd4d 100644 --- a/video/pingo_3d.h +++ b/video/pingo_3d.h @@ -73,6 +73,10 @@ typedef struct tag_Pingo3dControl { std::map* m_meshes; // Map of meshes for use by objects std::map* m_objects; // Map of textured objects that use meshes and have transforms + void show_free_ram() { + debug_log("Free PSRAM: %u\n", heap_caps_get_free_size(MALLOC_CAP_SPIRAM)); + } + // VDU 23, 0, &A0, sid; &48, 0, 1 : Initialize Control Structure void initialize(VDUStreamProcessor& processor, uint16_t width, uint16_t height) { memset(this, 0, sizeof(tag_Pingo3dControl)); @@ -80,10 +84,20 @@ typedef struct tag_Pingo3dControl { m_size = sizeof(tag_Pingo3dControl); auto frame_size = (uint32_t) width * (uint32_t) height; - m_frame = (p3d::Pixel*) heap_caps_malloc(sizeof(p3d::Pixel) * frame_size, - MALLOC_CAP_8BIT | MALLOC_CAP_SPIRAM); - m_zeta = (p3d::PingoDepth*) heap_caps_malloc(sizeof(p3d::PingoDepth) * frame_size, - MALLOC_CAP_8BIT | MALLOC_CAP_SPIRAM); + + auto size = sizeof(p3d::Pixel) * frame_size; + m_frame = (p3d::Pixel*) heap_caps_malloc(size, MALLOC_CAP_SPIRAM); + if (!m_frame) { + debug_log("initialize: failed to allocate %u bytes for frame\n", size); + show_free_ram(); + } + + size = sizeof(p3d::PingoDepth) * frame_size; + m_zeta = (p3d::PingoDepth*) heap_caps_malloc(size, MALLOC_CAP_SPIRAM); + if (!m_zeta) { + debug_log("initialize: failed to allocate %u bytes for zeta\n", size); + show_free_ram(); + } m_backend.init = &static_init; m_backend.beforeRender = &static_before_render; @@ -203,10 +217,15 @@ typedef struct tag_Pingo3dControl { } auto n = (uint32_t) m_proc->readWord_t(); if (n > 0) { - mesh->positions = (p3d::Vec3f*) heap_caps_malloc(n*sizeof(p3d::Vec3f), MALLOC_CAP_SPIRAM); + auto size = n*sizeof(p3d::Vec3f); + mesh->positions = (p3d::Vec3f*) heap_caps_malloc(size, MALLOC_CAP_SPIRAM); auto pos = mesh->positions; + if (!pos) { + debug_log("define_mesh_vertices: failed to allocate %u bytes\n", size); + show_free_ram(); + } + debug_log("Reading %u vertices\n", n); for (uint32_t i = 0; i < n; i++) { - if (!(i & 0x1F)) debug_log("%u ", i); uint16_t x = m_proc->readWord_t(); uint16_t y = m_proc->readWord_t(); uint16_t z = m_proc->readWord_t(); @@ -214,6 +233,7 @@ typedef struct tag_Pingo3dControl { pos->x = convert_position_value(x); pos->y = convert_position_value(y); pos->z = convert_position_value(z); + if (!(i & 0x1F)) debug_log("%u %f %f %f\n", i, pos->x, pos->y, pos->z); pos++; } } @@ -232,14 +252,20 @@ typedef struct tag_Pingo3dControl { auto n = (uint32_t) m_proc->readWord_t(); if (n > 0) { mesh->indexes_count = n; - mesh->pos_indices = (uint16_t*) heap_caps_malloc(n*sizeof(uint16_t), MALLOC_CAP_SPIRAM); + auto size = n*sizeof(uint16_t); + mesh->pos_indices = (uint16_t*) heap_caps_malloc(size, MALLOC_CAP_SPIRAM); auto idx = mesh->pos_indices; + if (!idx) { + debug_log("set_mesh_vertex_indexes: failed to allocate %u bytes\n", size); + show_free_ram(); + } + debug_log("Reading %u vertex indexes\n", n); for (uint32_t i = 0; i < n; i++) { - if (!(i & 0x1F)) debug_log("%u ", i); uint16_t index = m_proc->readWord_t(); if (idx) { *idx++ = index; } + if (!(i & 0x1F)) debug_log("%u %hu\n", i, index); } debug_log("\n"); } @@ -254,8 +280,14 @@ typedef struct tag_Pingo3dControl { } auto n = (uint32_t) m_proc->readWord_t(); if (n > 0) { - mesh->textCoord = (p3d::Vec2f*) heap_caps_malloc(n*sizeof(p3d::Vec2f), MALLOC_CAP_SPIRAM); + auto size = n*sizeof(p3d::Vec2f); + mesh->textCoord = (p3d::Vec2f*) heap_caps_malloc(size, MALLOC_CAP_SPIRAM); auto coord = mesh->textCoord; + if (!coord) { + debug_log("set_mesh_vertex_indexes: failed to allocate %u bytes\n", size); + show_free_ram(); + } + debug_log("Reading %u texture coordinates\n", n); for (uint32_t i = 0; i < n; i++) { uint16_t u = m_proc->readWord_t(); uint16_t v = m_proc->readWord_t(); @@ -277,13 +309,20 @@ typedef struct tag_Pingo3dControl { } auto n = (uint32_t) m_proc->readWord_t(); if (n > 0) { - mesh->tex_indices = (uint16_t*) heap_caps_malloc(n*sizeof(uint16_t), MALLOC_CAP_SPIRAM); + auto size = n*sizeof(uint16_t); + mesh->tex_indices = (uint16_t*) heap_caps_malloc(size, MALLOC_CAP_SPIRAM); auto idx = mesh->tex_indices; + if (!idx) { + debug_log("set_texture_coordinate_indexes: failed to allocate %u bytes\n", size); + show_free_ram(); + } + debug_log("Reading %u texture coordinate indexes\n", n); for (uint32_t i = 0; i < n; i++) { uint16_t index = m_proc->readWord_t(); if (idx && (i < mesh->indexes_count)) { *idx++ = index; } + if (!(i & 0x1F)) debug_log("%u %hu\n", i, index); } } } @@ -307,32 +346,37 @@ typedef struct tag_Pingo3dControl { } p3d::F_TYPE convert_scale_value(int32_t value) { - return ((p3d::F_TYPE) value) / 256.0f; + static const p3d::F_TYPE factor = 1.0f / 256.0f; + return ((p3d::F_TYPE) value) * factor; } p3d::F_TYPE convert_rotation_value(int32_t value) { if (value & 0x8000) { value = (int32_t)(int16_t)(uint16_t) value; } - return (((p3d::F_TYPE) value) * (2.0f * 3.1415926f)) / 32767.0f; + static const p3d::F_TYPE factor = (2.0f * 3.1415926f) / 32767.0f; + return ((p3d::F_TYPE) value) * factor; } p3d::F_TYPE convert_translation_value(int32_t value) { if (value & 0x8000) { value = (int32_t)(int16_t)(uint16_t) value; } - return ((p3d::F_TYPE) value) / 256.0f; + static const p3d::F_TYPE factor = 1.0f / 256.0f; + return ((p3d::F_TYPE) value) * factor; } p3d::F_TYPE convert_position_value(int32_t value) { if (value & 0x8000) { value = (int32_t)(int16_t)(uint16_t) value; } - return ((p3d::F_TYPE) value) / 32767.0f; + static const p3d::F_TYPE factor = 1.0f / 32767.0f; + return ((p3d::F_TYPE) value) * factor; } p3d::F_TYPE convert_texture_coordinate_value(int32_t value) { - return ((p3d::F_TYPE) value) / 65535.0f; + static const p3d::F_TYPE factor = 1.0f / 65535.0f; + return ((p3d::F_TYPE) value) * factor; } // VDU 23, 0, &A0, sid; &48, 6, oid; scalex; : Set Object X Scale Factor @@ -468,6 +512,7 @@ typedef struct tag_Pingo3dControl { // VDU 23, 0, &A0, sid; &48, 18, bmid; : Render To Bitmap void render_to_bitmap() { + auto start = millis(); auto size = p3d::Vec2i{(p3d::I_TYPE)m_width, (p3d::I_TYPE)m_height}; p3d::Renderer renderer; rendererInit(&renderer, size, &m_backend ); @@ -502,6 +547,9 @@ typedef struct tag_Pingo3dControl { phi += 0.01; rendererRender(&renderer); + auto stop = millis(); + auto diff = stop - start; + debug_log("Render to %ux%u took %u ms\n", m_width, m_height, diff); } } Pingo3dControl; From 9056467aec99098371baed4706333e094a7fe17d Mon Sep 17 00:00:00 2001 From: Curtis Whitley Date: Wed, 24 Apr 2024 11:01:23 -0400 Subject: [PATCH 22/49] runs but outputs zeros --- video/pingo/assets/teapot.bas | 1327 +++++++++++++++++---------------- video/pingo_3d.h | 29 + video/video.ino | 6 - 3 files changed, 694 insertions(+), 668 deletions(-) diff --git a/video/pingo/assets/teapot.bas b/video/pingo/assets/teapot.bas index e65d9ff6..bb801085 100644 --- a/video/pingo/assets/teapot.bas +++ b/video/pingo/assets/teapot.bas @@ -1,662 +1,665 @@ - 10 REM teapot.bas - 20 REM Sample app to illustrate Pingo 3D on Agon - 30 REM - 40 REM -- VERTICES -- - 50 teapot_vertices%=1728 - 60 DATA 0.700000,-1.200000,0.000000,0.605600,-1.200000,-0.355700,0.598800,-1.243700,-0.351700,0.598800,-1.243700,-0.351700 - 70 DATA 0.692100,-1.243700,0.000000,0.700000,-1.200000,0.000000,0.692100,-1.243700,0.000000,0.598800,-1.243700,-0.351700 - 80 DATA 0.619600,-1.243700,-0.363900,0.619600,-1.243700,-0.363900,0.716200,-1.243700,0.000000,0.692100,-1.243700,0.000000 - 90 DATA 0.716200,-1.243700,0.000000,0.619600,-1.243700,-0.363900,0.648900,-1.200000,-0.381100,0.648900,-1.200000,-0.381100 - 100 DATA 0.750000,-1.200000,0.000000,0.716200,-1.243700,0.000000,0.605600,-1.200000,-0.355700,0.355700,-1.200000,-0.605600 - 110 DATA 0.351700,-1.243700,-0.598800,0.351700,-1.243700,-0.598800,0.598800,-1.243700,-0.351700,0.605600,-1.200000,-0.355700 - 120 DATA 0.598800,-1.243700,-0.351700,0.351700,-1.243700,-0.598800,0.363900,-1.243800,-0.619600,0.363900,-1.243800,-0.619600 - 130 DATA 0.619600,-1.243700,-0.363900,0.598800,-1.243700,-0.351700,0.619600,-1.243700,-0.363900,0.363900,-1.243800,-0.619600 - 140 DATA 0.381100,-1.200000,-0.648900,0.381100,-1.200000,-0.648900,0.648900,-1.200000,-0.381100,0.619600,-1.243700,-0.363900 - 150 DATA 0.355700,-1.200000,-0.605600,0.000000,-1.200000,-0.700000,0.000000,-1.243700,-0.692100,0.000000,-1.243700,-0.692100 - 160 DATA 0.351700,-1.243700,-0.598800,0.355700,-1.200000,-0.605600,0.351700,-1.243700,-0.598800,0.000000,-1.243700,-0.692100 - 170 DATA 0.000000,-1.243800,-0.716200,0.000000,-1.243800,-0.716200,0.363900,-1.243800,-0.619600,0.351700,-1.243700,-0.598800 - 180 DATA 0.363900,-1.243800,-0.619600,0.000000,-1.243800,-0.716200,0.000000,-1.200000,-0.750000,0.000000,-1.200000,-0.750000 - 190 DATA 0.381100,-1.200000,-0.648900,0.363900,-1.243800,-0.619600,0.000000,-1.200000,-0.700000,-0.375700,-1.200000,-0.605600 - 200 DATA -0.357600,-1.243700,-0.598800,-0.357600,-1.243700,-0.598800,0.000000,-1.243700,-0.692100,0.000000,-1.200000,-0.700000 - 210 DATA 0.000000,-1.243700,-0.692100,-0.357600,-1.243700,-0.598800,-0.364700,-1.243700,-0.619600,-0.364700,-1.243700,-0.619600 - 220 DATA 0.000000,-1.243800,-0.716200,0.000000,-1.243700,-0.692100,0.000000,-1.243800,-0.716200,-0.364700,-1.243700,-0.619600 - 230 DATA -0.381100,-1.200000,-0.648900,-0.381100,-1.200000,-0.648900,0.000000,-1.200000,-0.750000,0.000000,-1.243800,-0.716200 - 240 DATA -0.375700,-1.200000,-0.605600,-0.615600,-1.200000,-0.355700,-0.601800,-1.243700,-0.351700,-0.601800,-1.243700,-0.351700 - 250 DATA -0.357600,-1.243700,-0.598800,-0.375700,-1.200000,-0.605600,-0.357600,-1.243700,-0.598800,-0.601800,-1.243700,-0.351700 - 260 DATA -0.620000,-1.243700,-0.363900,-0.620000,-1.243700,-0.363900,-0.364700,-1.243700,-0.619600,-0.357600,-1.243700,-0.598800 - 270 DATA -0.364700,-1.243700,-0.619600,-0.620000,-1.243700,-0.363900,-0.648900,-1.200000,-0.381100,-0.648900,-1.200000,-0.381100 - 280 DATA -0.381100,-1.200000,-0.648900,-0.364700,-1.243700,-0.619600,-0.615600,-1.200000,-0.355700,-0.700000,-1.200000,0.000000 - 290 DATA -0.692100,-1.243700,0.000000,-0.692100,-1.243700,0.000000,-0.601800,-1.243700,-0.351700,-0.615600,-1.200000,-0.355700 - 300 DATA -0.601800,-1.243700,-0.351700,-0.692100,-1.243700,0.000000,-0.716200,-1.243700,0.000000,-0.716200,-1.243700,0.000000 - 310 DATA -0.620000,-1.243700,-0.363900,-0.601800,-1.243700,-0.351700,-0.620000,-1.243700,-0.363900,-0.716200,-1.243700,0.000000 - 320 DATA -0.750000,-1.200000,0.000000,-0.750000,-1.200000,0.000000,-0.648900,-1.200000,-0.381100,-0.620000,-1.243700,-0.363900 - 330 DATA -0.700000,-1.200000,0.000000,-0.605600,-1.200000,0.355700,-0.598800,-1.243700,0.351700,-0.598800,-1.243700,0.351700 - 340 DATA -0.692100,-1.243700,0.000000,-0.700000,-1.200000,0.000000,-0.692100,-1.243700,0.000000,-0.598800,-1.243700,0.351700 - 350 DATA -0.619600,-1.243700,0.363900,-0.619600,-1.243700,0.363900,-0.716200,-1.243700,0.000000,-0.692100,-1.243700,0.000000 - 360 DATA -0.716200,-1.243700,0.000000,-0.619600,-1.243700,0.363900,-0.648900,-1.200000,0.381100,-0.648900,-1.200000,0.381100 - 370 DATA -0.750000,-1.200000,0.000000,-0.716200,-1.243700,0.000000,-0.605600,-1.200000,0.355700,-0.355700,-1.200000,0.605600 - 380 DATA -0.351700,-1.243700,0.598800,-0.351700,-1.243700,0.598800,-0.598800,-1.243700,0.351700,-0.605600,-1.200000,0.355700 - 390 DATA -0.598800,-1.243700,0.351700,-0.351700,-1.243700,0.598800,-0.363900,-1.243700,0.619600,-0.363900,-1.243700,0.619600 - 400 DATA -0.619600,-1.243700,0.363900,-0.598800,-1.243700,0.351700,-0.619600,-1.243700,0.363900,-0.363900,-1.243700,0.619600 - 410 DATA -0.381100,-1.200000,0.648900,-0.381100,-1.200000,0.648900,-0.648900,-1.200000,0.381100,-0.619600,-1.243700,0.363900 - 420 DATA -0.355700,-1.200000,0.605600,0.000000,-1.200000,0.700000,0.000000,-1.243700,0.692100,0.000000,-1.243700,0.692100 - 430 DATA -0.351700,-1.243700,0.598800,-0.355700,-1.200000,0.605600,-0.351700,-1.243700,0.598800,0.000000,-1.243700,0.692100 - 440 DATA 0.000000,-1.243700,0.716200,0.000000,-1.243700,0.716200,-0.363900,-1.243700,0.619600,-0.351700,-1.243700,0.598800 - 450 DATA -0.363900,-1.243700,0.619600,0.000000,-1.243700,0.716200,0.000000,-1.200000,0.750000,0.000000,-1.200000,0.750000 - 460 DATA -0.381100,-1.200000,0.648900,-0.363900,-1.243700,0.619600,0.000000,-1.200000,0.700000,0.355700,-1.200000,0.605600 - 470 DATA 0.351700,-1.243700,0.598800,0.351700,-1.243700,0.598800,0.000000,-1.243700,0.692100,0.000000,-1.200000,0.700000 - 480 DATA 0.000000,-1.243700,0.692100,0.351700,-1.243700,0.598800,0.363900,-1.243700,0.619600,0.363900,-1.243700,0.619600 - 490 DATA 0.000000,-1.243700,0.716200,0.000000,-1.243700,0.692100,0.000000,-1.243700,0.716200,0.363900,-1.243700,0.619600 - 500 DATA 0.381100,-1.200000,0.648900,0.381100,-1.200000,0.648900,0.000000,-1.200000,0.750000,0.000000,-1.243700,0.716200 - 510 DATA 0.355700,-1.200000,0.605600,0.605600,-1.200000,0.355700,0.598800,-1.243700,0.351700,0.598800,-1.243700,0.351700 - 520 DATA 0.351700,-1.243700,0.598800,0.355700,-1.200000,0.605600,0.351700,-1.243700,0.598800,0.598800,-1.243700,0.351700 - 530 DATA 0.619600,-1.243700,0.363900,0.619600,-1.243700,0.363900,0.363900,-1.243700,0.619600,0.351700,-1.243700,0.598800 - 540 DATA 0.363900,-1.243700,0.619600,0.619600,-1.243700,0.363900,0.648900,-1.200000,0.381100,0.648900,-1.200000,0.381100 - 550 DATA 0.381100,-1.200000,0.648900,0.363900,-1.243700,0.619600,0.605600,-1.200000,0.355700,0.700000,-1.200000,0.000000 - 560 DATA 0.692100,-1.243700,0.000000,0.692100,-1.243700,0.000000,0.598800,-1.243700,0.351700,0.605600,-1.200000,0.355700 - 570 DATA 0.598800,-1.243700,0.351700,0.692100,-1.243700,0.000000,0.716200,-1.243700,0.000000,0.716200,-1.243700,0.000000 - 580 DATA 0.619600,-1.243700,0.363900,0.598800,-1.243700,0.351700,0.619600,-1.243700,0.363900,0.716200,-1.243700,0.000000 - 590 DATA 0.750000,-1.200000,0.000000,0.750000,-1.200000,0.000000,0.648900,-1.200000,0.381100,0.619600,-1.243700,0.363900 - 600 DATA 0.750000,-1.200000,0.000000,0.648900,-1.200000,-0.381100,0.753000,-0.938900,-0.442300,0.753000,-0.938900,-0.442300 - 610 DATA 0.870400,-0.938900,0.000000,0.750000,-1.200000,0.000000,0.870400,-0.938900,0.000000,0.753000,-0.938900,-0.442300 - 620 DATA 0.833100,-0.686100,-0.489300,0.833100,-0.686100,-0.489300,0.963000,-0.686100,0.000000,0.870400,-0.938900,0.000000 - 630 DATA 0.963000,-0.686100,0.000000,0.833100,-0.686100,-0.489300,0.865200,-0.450000,-0.508100,0.865200,-0.450000,-0.508100 - 640 DATA 1.000000,-0.450000,0.000000,0.963000,-0.686100,0.000000,0.648900,-1.200000,-0.381100,0.381100,-1.200000,-0.648900 - 650 DATA 0.442300,-0.938900,-0.753000,0.442300,-0.938900,-0.753000,0.753000,-0.938900,-0.442300,0.648900,-1.200000,-0.381100 - 660 DATA 0.753000,-0.938900,-0.442300,0.442300,-0.938900,-0.753000,0.489300,-0.686100,-0.833100,0.489300,-0.686100,-0.833100 - 670 DATA 0.833100,-0.686100,-0.489300,0.753000,-0.938900,-0.442300,0.833100,-0.686100,-0.489300,0.489300,-0.686100,-0.833100 - 680 DATA 0.508100,-0.450000,-0.865200,0.508100,-0.450000,-0.865200,0.865200,-0.450000,-0.508100,0.833100,-0.686100,-0.489300 - 690 DATA 0.381100,-1.200000,-0.648900,0.000000,-1.200000,-0.750000,0.000000,-0.938900,-0.870400,0.000000,-0.938900,-0.870400 - 700 DATA 0.442300,-0.938900,-0.753000,0.381100,-1.200000,-0.648900,0.442300,-0.938900,-0.753000,0.000000,-0.938900,-0.870400 - 710 DATA 0.000000,-0.686100,-0.963000,0.000000,-0.686100,-0.963000,0.489300,-0.686100,-0.833100,0.442300,-0.938900,-0.753000 - 720 DATA 0.489300,-0.686100,-0.833100,0.000000,-0.686100,-0.963000,0.000000,-0.450000,-1.000000,0.000000,-0.450000,-1.000000 - 730 DATA 0.508100,-0.450000,-0.865200,0.489300,-0.686100,-0.833100,0.000000,-1.200000,-0.750000,-0.381100,-1.200000,-0.648900 - 740 DATA -0.442300,-0.938900,-0.753000,-0.442300,-0.938900,-0.753000,0.000000,-0.938900,-0.870400,0.000000,-1.200000,-0.750000 - 750 DATA 0.000000,-0.938900,-0.870400,-0.442300,-0.938900,-0.753000,-0.489300,-0.686100,-0.833100,-0.489300,-0.686100,-0.833100 - 760 DATA 0.000000,-0.686100,-0.963000,0.000000,-0.938900,-0.870400,0.000000,-0.686100,-0.963000,-0.489300,-0.686100,-0.833100 - 770 DATA -0.508100,-0.450000,-0.865200,-0.508100,-0.450000,-0.865200,0.000000,-0.450000,-1.000000,0.000000,-0.686100,-0.963000 - 780 DATA -0.381100,-1.200000,-0.648900,-0.648900,-1.200000,-0.381100,-0.753000,-0.938900,-0.442300,-0.753000,-0.938900,-0.442300 - 790 DATA -0.442300,-0.938900,-0.753000,-0.381100,-1.200000,-0.648900,-0.442300,-0.938900,-0.753000,-0.753000,-0.938900,-0.442300 - 800 DATA -0.833100,-0.686100,-0.489300,-0.833100,-0.686100,-0.489300,-0.489300,-0.686100,-0.833100,-0.442300,-0.938900,-0.753000 - 810 DATA -0.489300,-0.686100,-0.833100,-0.833100,-0.686100,-0.489300,-0.865200,-0.450000,-0.508100,-0.865200,-0.450000,-0.508100 - 820 DATA -0.508100,-0.450000,-0.865200,-0.489300,-0.686100,-0.833100,-0.648900,-1.200000,-0.381100,-0.750000,-1.200000,0.000000 - 830 DATA -0.870400,-0.938900,0.000000,-0.870400,-0.938900,0.000000,-0.753000,-0.938900,-0.442300,-0.648900,-1.200000,-0.381100 - 840 DATA -0.753000,-0.938900,-0.442300,-0.870400,-0.938900,0.000000,-0.963000,-0.686100,0.000000,-0.963000,-0.686100,0.000000 - 850 DATA -0.833100,-0.686100,-0.489300,-0.753000,-0.938900,-0.442300,-0.833100,-0.686100,-0.489300,-0.963000,-0.686100,0.000000 - 860 DATA -1.000000,-0.450000,0.000000,-1.000000,-0.450000,0.000000,-0.865200,-0.450000,-0.508100,-0.833100,-0.686100,-0.489300 - 870 DATA -0.750000,-1.200000,0.000000,-0.648900,-1.200000,0.381100,-0.753000,-0.938900,0.442300,-0.753000,-0.938900,0.442300 - 880 DATA -0.870400,-0.938900,0.000000,-0.750000,-1.200000,0.000000,-0.870400,-0.938900,0.000000,-0.753000,-0.938900,0.442300 - 890 DATA -0.833100,-0.686100,0.489300,-0.833100,-0.686100,0.489300,-0.963000,-0.686100,0.000000,-0.870400,-0.938900,0.000000 - 900 DATA -0.963000,-0.686100,0.000000,-0.833100,-0.686100,0.489300,-0.865200,-0.450000,0.508100,-0.865200,-0.450000,0.508100 - 910 DATA -1.000000,-0.450000,0.000000,-0.963000,-0.686100,0.000000,-0.648900,-1.200000,0.381100,-0.381100,-1.200000,0.648900 - 920 DATA -0.442300,-0.938900,0.753000,-0.442300,-0.938900,0.753000,-0.753000,-0.938900,0.442300,-0.648900,-1.200000,0.381100 - 930 DATA -0.753000,-0.938900,0.442300,-0.442300,-0.938900,0.753000,-0.489300,-0.686100,0.833100,-0.489300,-0.686100,0.833100 - 940 DATA -0.833100,-0.686100,0.489300,-0.753000,-0.938900,0.442300,-0.833100,-0.686100,0.489300,-0.489300,-0.686100,0.833100 - 950 DATA -0.508100,-0.450000,0.865200,-0.508100,-0.450000,0.865200,-0.865200,-0.450000,0.508100,-0.833100,-0.686100,0.489300 - 960 DATA -0.381100,-1.200000,0.648900,0.000000,-1.200000,0.750000,0.000000,-0.938900,0.870400,0.000000,-0.938900,0.870400 - 970 DATA -0.442300,-0.938900,0.753000,-0.381100,-1.200000,0.648900,-0.442300,-0.938900,0.753000,0.000000,-0.938900,0.870400 - 980 DATA 0.000000,-0.686100,0.963000,0.000000,-0.686100,0.963000,-0.489300,-0.686100,0.833100,-0.442300,-0.938900,0.753000 - 990 DATA -0.489300,-0.686100,0.833100,0.000000,-0.686100,0.963000,0.000000,-0.450000, 1.000000,0.000000,-0.450000, 1.000000 - 1000 DATA -0.508100,-0.450000,0.865200,-0.489300,-0.686100,0.833100,0.000000,-1.200000,0.750000,0.381100,-1.200000,0.648900 - 1010 DATA 0.442300,-0.938900,0.753000,0.442300,-0.938900,0.753000,0.000000,-0.938900,0.870400,0.000000,-1.200000,0.750000 - 1020 DATA 0.000000,-0.938900,0.870400,0.442300,-0.938900,0.753000,0.489300,-0.686100,0.833100,0.489300,-0.686100,0.833100 - 1030 DATA 0.000000,-0.686100,0.963000,0.000000,-0.938900,0.870400,0.000000,-0.686100,0.963000,0.489300,-0.686100,0.833100 - 1040 DATA 0.508100,-0.450000,0.865200,0.508100,-0.450000,0.865200,0.000000,-0.450000, 1.000000,0.000000,-0.686100,0.963000 - 1050 DATA 0.381100,-1.200000,0.648900,0.648900,-1.200000,0.381100,0.753000,-0.938900,0.442300,0.753000,-0.938900,0.442300 - 1060 DATA 0.442300,-0.938900,0.753000,0.381100,-1.200000,0.648900,0.442300,-0.938900,0.753000,0.753000,-0.938900,0.442300 - 1070 DATA 0.833100,-0.686100,0.489300,0.833100,-0.686100,0.489300,0.489300,-0.686100,0.833100,0.442300,-0.938900,0.753000 - 1080 DATA 0.489300,-0.686100,0.833100,0.833100,-0.686100,0.489300,0.865200,-0.450000,0.508100,0.865200,-0.450000,0.508100 - 1090 DATA 0.508100,-0.450000,0.865200,0.489300,-0.686100,0.833100,0.648900,-1.200000,0.381100,0.750000,-1.200000,0.000000 - 1100 DATA 0.870400,-0.938900,0.000000,0.870400,-0.938900,0.000000,0.753000,-0.938900,0.442300,0.648900,-1.200000,0.381100 - 1110 DATA 0.753000,-0.938900,0.442300,0.870400,-0.938900,0.000000,0.963000,-0.686100,0.000000,0.963000,-0.686100,0.000000 - 1120 DATA 0.833100,-0.686100,0.489300,0.753000,-0.938900,0.442300,0.833100,-0.686100,0.489300,0.963000,-0.686100,0.000000 - 1130 DATA 1.000000,-0.450000,0.000000,1.000000,-0.450000,0.000000,0.865200,-0.450000,0.508100,0.833100,-0.686100,0.489300 - 1140 DATA 1.000000,-0.450000,0.000000,0.865200,-0.450000,-0.508100,0.809100,-0.261100,-0.475200,0.809100,-0.261100,-0.475200 - 1150 DATA 0.935200,-0.261100,0.000000,1.000000,-0.450000,0.000000,0.935200,-0.261100,0.000000,0.809100,-0.261100,-0.475200 - 1160 DATA 0.705000,-0.138900,-0.414000,0.705000,-0.138900,-0.414000,0.814800,-0.138900,0.000000,0.935200,-0.261100,0.000000 - 1170 DATA 0.814800,-0.138900,0.000000,0.705000,-0.138900,-0.414000,0.648900,-0.075000,-0.381100,0.648900,-0.075000,-0.381100 - 1180 DATA 0.750000,-0.075000,0.000000,0.814800,-0.138900,0.000000,0.865200,-0.450000,-0.508100,0.508100,-0.450000,-0.865200 - 1190 DATA 0.475200,-0.261100,-0.809100,0.475200,-0.261100,-0.809100,0.809100,-0.261100,-0.475200,0.865200,-0.450000,-0.508100 - 1200 DATA 0.809100,-0.261100,-0.475200,0.475200,-0.261100,-0.809100,0.414000,-0.138900,-0.705000,0.414000,-0.138900,-0.705000 - 1210 DATA 0.705000,-0.138900,-0.414000,0.809100,-0.261100,-0.475200,0.705000,-0.138900,-0.414000,0.414000,-0.138900,-0.705000 - 1220 DATA 0.381100,-0.075000,-0.648900,0.381100,-0.075000,-0.648900,0.648900,-0.075000,-0.381100,0.705000,-0.138900,-0.414000 - 1230 DATA 0.508100,-0.450000,-0.865200,0.000000,-0.450000,-1.000000,0.000000,-0.261100,-0.935200,0.000000,-0.261100,-0.935200 - 1240 DATA 0.475200,-0.261100,-0.809100,0.508100,-0.450000,-0.865200,0.475200,-0.261100,-0.809100,0.000000,-0.261100,-0.935200 - 1250 DATA 0.000000,-0.138900,-0.814800,0.000000,-0.138900,-0.814800,0.414000,-0.138900,-0.705000,0.475200,-0.261100,-0.809100 - 1260 DATA 0.414000,-0.138900,-0.705000,0.000000,-0.138900,-0.814800,0.000000,-0.075000,-0.750000,0.000000,-0.075000,-0.750000 - 1270 DATA 0.381100,-0.075000,-0.648900,0.414000,-0.138900,-0.705000,0.000000,-0.450000,-1.000000,-0.508100,-0.450000,-0.865200 - 1280 DATA -0.475200,-0.261100,-0.809100,-0.475200,-0.261100,-0.809100,0.000000,-0.261100,-0.935200,0.000000,-0.450000,-1.000000 - 1290 DATA 0.000000,-0.261100,-0.935200,-0.475200,-0.261100,-0.809100,-0.414000,-0.138900,-0.705000,-0.414000,-0.138900,-0.705000 - 1300 DATA 0.000000,-0.138900,-0.814800,0.000000,-0.261100,-0.935200,0.000000,-0.138900,-0.814800,-0.414000,-0.138900,-0.705000 - 1310 DATA -0.381100,-0.075000,-0.648900,-0.381100,-0.075000,-0.648900,0.000000,-0.075000,-0.750000,0.000000,-0.138900,-0.814800 - 1320 DATA -0.508100,-0.450000,-0.865200,-0.865200,-0.450000,-0.508100,-0.809100,-0.261100,-0.475200,-0.809100,-0.261100,-0.475200 - 1330 DATA -0.475200,-0.261100,-0.809100,-0.508100,-0.450000,-0.865200,-0.475200,-0.261100,-0.809100,-0.809100,-0.261100,-0.475200 - 1340 DATA -0.705000,-0.138900,-0.414000,-0.705000,-0.138900,-0.414000,-0.414000,-0.138900,-0.705000,-0.475200,-0.261100,-0.809100 - 1350 DATA -0.414000,-0.138900,-0.705000,-0.705000,-0.138900,-0.414000,-0.648900,-0.075000,-0.381100,-0.648900,-0.075000,-0.381100 - 1360 DATA -0.381100,-0.075000,-0.648900,-0.414000,-0.138900,-0.705000,-0.865200,-0.450000,-0.508100,-1.000000,-0.450000,0.000000 - 1370 DATA -0.935200,-0.261100,0.000000,-0.935200,-0.261100,0.000000,-0.809100,-0.261100,-0.475200,-0.865200,-0.450000,-0.508100 - 1380 DATA -0.809100,-0.261100,-0.475200,-0.935200,-0.261100,0.000000,-0.814800,-0.138900,0.000000,-0.814800,-0.138900,0.000000 - 1390 DATA -0.705000,-0.138900,-0.414000,-0.809100,-0.261100,-0.475200,-0.705000,-0.138900,-0.414000,-0.814800,-0.138900,0.000000 - 1400 DATA -0.750000,-0.075000,0.000000,-0.750000,-0.075000,0.000000,-0.648900,-0.075000,-0.381100,-0.705000,-0.138900,-0.414000 - 1410 DATA -1.000000,-0.450000,0.000000,-0.865200,-0.450000,0.508100,-0.809100,-0.261100,0.475200,-0.809100,-0.261100,0.475200 - 1420 DATA -0.935200,-0.261100,0.000000,-1.000000,-0.450000,0.000000,-0.935200,-0.261100,0.000000,-0.809100,-0.261100,0.475200 - 1430 DATA -0.705000,-0.138900,0.414000,-0.705000,-0.138900,0.414000,-0.814800,-0.138900,0.000000,-0.935200,-0.261100,0.000000 - 1440 DATA -0.814800,-0.138900,0.000000,-0.705000,-0.138900,0.414000,-0.648900,-0.075000,0.381100,-0.648900,-0.075000,0.381100 - 1450 DATA -0.750000,-0.075000,0.000000,-0.814800,-0.138900,0.000000,-0.865200,-0.450000,0.508100,-0.508100,-0.450000,0.865200 - 1460 DATA -0.475200,-0.261100,0.809100,-0.475200,-0.261100,0.809100,-0.809100,-0.261100,0.475200,-0.865200,-0.450000,0.508100 - 1470 DATA -0.809100,-0.261100,0.475200,-0.475200,-0.261100,0.809100,-0.414000,-0.138900,0.705000,-0.414000,-0.138900,0.705000 - 1480 DATA -0.705000,-0.138900,0.414000,-0.809100,-0.261100,0.475200,-0.705000,-0.138900,0.414000,-0.414000,-0.138900,0.705000 - 1490 DATA -0.381100,-0.075000,0.648900,-0.381100,-0.075000,0.648900,-0.648900,-0.075000,0.381100,-0.705000,-0.138900,0.414000 - 1500 DATA -0.508100,-0.450000,0.865200,0.000000,-0.450000, 1.000000,0.000000,-0.261100,0.935200,0.000000,-0.261100,0.935200 - 1510 DATA -0.475200,-0.261100,0.809100,-0.508100,-0.450000,0.865200,-0.475200,-0.261100,0.809100,0.000000,-0.261100,0.935200 - 1520 DATA 0.000000,-0.138900,0.814800,0.000000,-0.138900,0.814800,-0.414000,-0.138900,0.705000,-0.475200,-0.261100,0.809100 - 1530 DATA -0.414000,-0.138900,0.705000,0.000000,-0.138900,0.814800,0.000000,-0.075000,0.750000,0.000000,-0.075000,0.750000 - 1540 DATA -0.381100,-0.075000,0.648900,-0.414000,-0.138900,0.705000,0.000000,-0.450000, 1.000000,0.508100,-0.450000,0.865200 - 1550 DATA 0.475200,-0.261100,0.809100,0.475200,-0.261100,0.809100,0.000000,-0.261100,0.935200,0.000000,-0.450000, 1.000000 - 1560 DATA 0.000000,-0.261100,0.935200,0.475200,-0.261100,0.809100,0.414000,-0.138900,0.705000,0.414000,-0.138900,0.705000 - 1570 DATA 0.000000,-0.138900,0.814800,0.000000,-0.261100,0.935200,0.000000,-0.138900,0.814800,0.414000,-0.138900,0.705000 - 1580 DATA 0.381100,-0.075000,0.648900,0.381100,-0.075000,0.648900,0.000000,-0.075000,0.750000,0.000000,-0.138900,0.814800 - 1590 DATA 0.508100,-0.450000,0.865200,0.865200,-0.450000,0.508100,0.809100,-0.261100,0.475200,0.809100,-0.261100,0.475200 - 1600 DATA 0.475200,-0.261100,0.809100,0.508100,-0.450000,0.865200,0.475200,-0.261100,0.809100,0.809100,-0.261100,0.475200 - 1610 DATA 0.705000,-0.138900,0.414000,0.705000,-0.138900,0.414000,0.414000,-0.138900,0.705000,0.475200,-0.261100,0.809100 - 1620 DATA 0.414000,-0.138900,0.705000,0.705000,-0.138900,0.414000,0.648900,-0.075000,0.381100,0.648900,-0.075000,0.381100 - 1630 DATA 0.381100,-0.075000,0.648900,0.414000,-0.138900,0.705000,0.865200,-0.450000,0.508100,1.000000,-0.450000,0.000000 - 1640 DATA 0.935200,-0.261100,0.000000,0.935200,-0.261100,0.000000,0.809100,-0.261100,0.475200,0.865200,-0.450000,0.508100 - 1650 DATA 0.809100,-0.261100,0.475200,0.935200,-0.261100,0.000000,0.814800,-0.138900,0.000000,0.814800,-0.138900,0.000000 - 1660 DATA 0.705000,-0.138900,0.414000,0.809100,-0.261100,0.475200,0.705000,-0.138900,0.414000,0.814800,-0.138900,0.000000 - 1670 DATA 0.750000,-0.075000,0.000000,0.750000,-0.075000,0.000000,0.648900,-0.075000,0.381100,0.705000,-0.138900,0.414000 - 1680 DATA 0.750000,-0.075000,0.000000,0.648900,-0.075000,-0.381100,0.617600,-0.038900,-0.362800,0.617600,-0.038900,-0.362800 - 1690 DATA 0.713900,-0.038900,0.000000,0.750000,-0.075000,0.000000,0.713900,-0.038900,0.000000,0.617600,-0.038900,-0.362800 - 1700 DATA 0.442200,-0.011100,-0.259700,0.442200,-0.011100,-0.259700,0.511100,-0.011100,0.000000,0.713900,-0.038900,0.000000 - 1710 DATA 0.511100,-0.011100,0.000000,0.442200,-0.011100,-0.259700,0.000000,0.000000,-0.000000,0.000000,0.000000,-0.000000 - 1720 DATA 0.000000,0.000000,-0.000000,0.511100,-0.011100,0.000000,0.648900,-0.075000,-0.381100,0.381100,-0.075000,-0.648900 - 1730 DATA 0.362800,-0.038900,-0.617600,0.362800,-0.038900,-0.617600,0.617600,-0.038900,-0.362800,0.648900,-0.075000,-0.381100 - 1740 DATA 0.617600,-0.038900,-0.362800,0.362800,-0.038900,-0.617600,0.259700,-0.011100,-0.442200,0.259700,-0.011100,-0.442200 - 1750 DATA 0.442200,-0.011100,-0.259700,0.617600,-0.038900,-0.362800,0.442200,-0.011100,-0.259700,0.259700,-0.011100,-0.442200 - 1760 DATA 0.000000,0.000000,-0.000000,0.000000,0.000000,-0.000000,0.000000,0.000000,-0.000000,0.442200,-0.011100,-0.259700 - 1770 DATA 0.381100,-0.075000,-0.648900,0.000000,-0.075000,-0.750000,0.000000,-0.038900,-0.713900,0.000000,-0.038900,-0.713900 - 1780 DATA 0.362800,-0.038900,-0.617600,0.381100,-0.075000,-0.648900,0.362800,-0.038900,-0.617600,0.000000,-0.038900,-0.713900 - 1790 DATA 0.000000,-0.011100,-0.511100,0.000000,-0.011100,-0.511100,0.259700,-0.011100,-0.442200,0.362800,-0.038900,-0.617600 - 1800 DATA 0.259700,-0.011100,-0.442200,0.000000,-0.011100,-0.511100,0.000000,0.000000,-0.000000,0.000000,0.000000,-0.000000 - 1810 DATA 0.000000,0.000000,-0.000000,0.259700,-0.011100,-0.442200,0.000000,-0.075000,-0.750000,-0.381100,-0.075000,-0.648900 - 1820 DATA -0.362800,-0.038900,-0.617600,-0.362800,-0.038900,-0.617600,0.000000,-0.038900,-0.713900,0.000000,-0.075000,-0.750000 - 1830 DATA 0.000000,-0.038900,-0.713900,-0.362800,-0.038900,-0.617600,-0.259700,-0.011100,-0.442200,-0.259700,-0.011100,-0.442200 - 1840 DATA 0.000000,-0.011100,-0.511100,0.000000,-0.038900,-0.713900,0.000000,-0.011100,-0.511100,-0.259700,-0.011100,-0.442200 - 1850 DATA 0.000000,0.000000,-0.000000,0.000000,0.000000,-0.000000,0.000000,0.000000,-0.000000,0.000000,-0.011100,-0.511100 - 1860 DATA -0.381100,-0.075000,-0.648900,-0.648900,-0.075000,-0.381100,-0.617600,-0.038900,-0.362800,-0.617600,-0.038900,-0.362800 - 1870 DATA -0.362800,-0.038900,-0.617600,-0.381100,-0.075000,-0.648900,-0.362800,-0.038900,-0.617600,-0.617600,-0.038900,-0.362800 - 1880 DATA -0.442200,-0.011100,-0.259700,-0.442200,-0.011100,-0.259700,-0.259700,-0.011100,-0.442200,-0.362800,-0.038900,-0.617600 - 1890 DATA -0.259700,-0.011100,-0.442200,-0.442200,-0.011100,-0.259700,0.000000,0.000000,-0.000000,0.000000,0.000000,-0.000000 - 1900 DATA 0.000000,0.000000,-0.000000,-0.259700,-0.011100,-0.442200,-0.648900,-0.075000,-0.381100,-0.750000,-0.075000,0.000000 - 1910 DATA -0.713900,-0.038900,0.000000,-0.713900,-0.038900,0.000000,-0.617600,-0.038900,-0.362800,-0.648900,-0.075000,-0.381100 - 1920 DATA -0.617600,-0.038900,-0.362800,-0.713900,-0.038900,0.000000,-0.511100,-0.011100,0.000000,-0.511100,-0.011100,0.000000 - 1930 DATA -0.442200,-0.011100,-0.259700,-0.617600,-0.038900,-0.362800,-0.442200,-0.011100,-0.259700,-0.511100,-0.011100,0.000000 - 1940 DATA 0.000000,0.000000,-0.000000,0.000000,0.000000,-0.000000,0.000000,0.000000,-0.000000,-0.442200,-0.011100,-0.259700 - 1950 DATA -0.750000,-0.075000,0.000000,-0.648900,-0.075000,0.381100,-0.617600,-0.038900,0.362800,-0.617600,-0.038900,0.362800 - 1960 DATA -0.713900,-0.038900,0.000000,-0.750000,-0.075000,0.000000,-0.713900,-0.038900,0.000000,-0.617600,-0.038900,0.362800 - 1970 DATA -0.442200,-0.011100,0.259700,-0.442200,-0.011100,0.259700,-0.511100,-0.011100,0.000000,-0.713900,-0.038900,0.000000 - 1980 DATA -0.511100,-0.011100,0.000000,-0.442200,-0.011100,0.259700,0.000000,0.000000,-0.000000,0.000000,0.000000,-0.000000 - 1990 DATA 0.000000,0.000000,-0.000000,-0.511100,-0.011100,0.000000,-0.648900,-0.075000,0.381100,-0.381100,-0.075000,0.648900 - 2000 DATA -0.362800,-0.038900,0.617600,-0.362800,-0.038900,0.617600,-0.617600,-0.038900,0.362800,-0.648900,-0.075000,0.381100 - 2010 DATA -0.617600,-0.038900,0.362800,-0.362800,-0.038900,0.617600,-0.259700,-0.011100,0.442200,-0.259700,-0.011100,0.442200 - 2020 DATA -0.442200,-0.011100,0.259700,-0.617600,-0.038900,0.362800,-0.442200,-0.011100,0.259700,-0.259700,-0.011100,0.442200 - 2030 DATA 0.000000,0.000000,-0.000000,0.000000,0.000000,-0.000000,0.000000,0.000000,-0.000000,-0.442200,-0.011100,0.259700 - 2040 DATA -0.381100,-0.075000,0.648900,0.000000,-0.075000,0.750000,0.000000,-0.038900,0.713900,0.000000,-0.038900,0.713900 - 2050 DATA -0.362800,-0.038900,0.617600,-0.381100,-0.075000,0.648900,-0.362800,-0.038900,0.617600,0.000000,-0.038900,0.713900 - 2060 DATA 0.000000,-0.011100,0.511100,0.000000,-0.011100,0.511100,-0.259700,-0.011100,0.442200,-0.362800,-0.038900,0.617600 - 2070 DATA -0.259700,-0.011100,0.442200,0.000000,-0.011100,0.511100,0.000000,0.000000,-0.000000,0.000000,0.000000,-0.000000 - 2080 DATA 0.000000,0.000000,-0.000000,-0.259700,-0.011100,0.442200,0.000000,-0.075000,0.750000,0.381100,-0.075000,0.648900 - 2090 DATA 0.362800,-0.038900,0.617600,0.362800,-0.038900,0.617600,0.000000,-0.038900,0.713900,0.000000,-0.075000,0.750000 - 2100 DATA 0.000000,-0.038900,0.713900,0.362800,-0.038900,0.617600,0.259700,-0.011100,0.442200,0.259700,-0.011100,0.442200 - 2110 DATA 0.000000,-0.011100,0.511100,0.000000,-0.038900,0.713900,0.000000,-0.011100,0.511100,0.259700,-0.011100,0.442200 - 2120 DATA 0.000000,0.000000,-0.000000,0.000000,0.000000,-0.000000,0.000000,0.000000,-0.000000,0.000000,-0.011100,0.511100 - 2130 DATA 0.381100,-0.075000,0.648900,0.648900,-0.075000,0.381100,0.617600,-0.038900,0.362800,0.617600,-0.038900,0.362800 - 2140 DATA 0.362800,-0.038900,0.617600,0.381100,-0.075000,0.648900,0.362800,-0.038900,0.617600,0.617600,-0.038900,0.362800 - 2150 DATA 0.442200,-0.011100,0.259700,0.442200,-0.011100,0.259700,0.259700,-0.011100,0.442200,0.362800,-0.038900,0.617600 - 2160 DATA 0.259700,-0.011100,0.442200,0.442200,-0.011100,0.259700,0.000000,0.000000,-0.000000,0.000000,0.000000,-0.000000 - 2170 DATA 0.000000,0.000000,-0.000000,0.259700,-0.011100,0.442200,0.648900,-0.075000,0.381100,0.750000,-0.075000,0.000000 - 2180 DATA 0.713900,-0.038900,0.000000,0.713900,-0.038900,0.000000,0.617600,-0.038900,0.362800,0.648900,-0.075000,0.381100 - 2190 DATA 0.617600,-0.038900,0.362800,0.713900,-0.038900,0.000000,0.511100,-0.011100,0.000000,0.511100,-0.011100,0.000000 - 2200 DATA 0.442200,-0.011100,0.259700,0.617600,-0.038900,0.362800,0.442200,-0.011100,0.259700,0.511100,-0.011100,0.000000 - 2210 DATA 0.000000,0.000000,-0.000000,0.000000,0.000000,-0.000000,0.000000,0.000000,-0.000000,0.442200,-0.011100,0.259700 - 2220 DATA -0.800000,-1.012500,0.000000,-0.787000,-1.041700,-0.100000,-1.115900,-1.036400,-0.100000,-1.115900,-1.036400,-0.100000 - 2230 DATA -1.098100,-1.008300,0.000000,-0.800000,-1.012500,0.000000,-1.098100,-1.008300,0.000000,-1.115900,-1.036400,-0.100000 - 2240 DATA -1.319300,-0.999700,-0.100000,-1.319300,-0.999700,-0.100000,-1.285200,-0.979200,0.000000,-1.098100,-1.008300,0.000000 - 2250 DATA -1.285200,-0.979200,0.000000,-1.319300,-0.999700,-0.100000,-1.388900,-0.900000,-0.100000,-1.388900,-0.900000,-0.100000 - 2260 DATA -1.350000,-0.900000,0.000000,-1.285200,-0.979200,0.000000,-0.787000,-1.041700,-0.100000,-0.763000,-1.095800,-0.100000 - 2270 DATA -1.148900,-1.088600,-0.100000,-1.148900,-1.088600,-0.100000,-1.115900,-1.036400,-0.100000,-0.787000,-1.041700,-0.100000 - 2280 DATA -1.115900,-1.036400,-0.100000,-1.148900,-1.088600,-0.100000,-1.382600,-1.037800,-0.100000,-1.382600,-1.037800,-0.100000 - 2290 DATA -1.319300,-0.999700,-0.100000,-1.115900,-1.036400,-0.100000,-1.319300,-0.999700,-0.100000,-1.382600,-1.037800,-0.100000 - 2300 DATA -1.461100,-0.900000,-0.100000,-1.461100,-0.900000,-0.100000,-1.388900,-0.900000,-0.100000,-1.319300,-0.999700,-0.100000 - 2310 DATA -0.763000,-1.095800,-0.100000,-0.750000,-1.125000,0.000000,-1.166700,-1.116700,0.000000,-1.166700,-1.116700,0.000000 - 2320 DATA -1.148900,-1.088600,-0.100000,-0.763000,-1.095800,-0.100000,-1.148900,-1.088600,-0.100000,-1.166700,-1.116700,0.000000 - 2330 DATA -1.416700,-1.058300,0.000000,-1.416700,-1.058300,0.000000,-1.382600,-1.037800,-0.100000,-1.148900,-1.088600,-0.100000 - 2340 DATA -1.382600,-1.037800,-0.100000,-1.416700,-1.058300,0.000000,-1.500000,-0.900000,0.000000,-1.500000,-0.900000,0.000000 - 2350 DATA -1.461100,-0.900000,-0.100000,-1.382600,-1.037800,-0.100000,-0.750000,-1.125000,0.000000,-0.763000,-1.095800,0.100000 - 2360 DATA -1.148900,-1.088600,0.100000,-1.148900,-1.088600,0.100000,-1.166700,-1.116700,0.000000,-0.750000,-1.125000,0.000000 - 2370 DATA -1.166700,-1.116700,0.000000,-1.148900,-1.088600,0.100000,-1.382600,-1.037800,0.100000,-1.382600,-1.037800,0.100000 - 2380 DATA -1.416700,-1.058300,0.000000,-1.166700,-1.116700,0.000000,-1.416700,-1.058300,0.000000,-1.382600,-1.037800,0.100000 - 2390 DATA -1.461100,-0.900000,0.100000,-1.461100,-0.900000,0.100000,-1.500000,-0.900000,0.000000,-1.416700,-1.058300,0.000000 - 2400 DATA -0.763000,-1.095800,0.100000,-0.787000,-1.041700,0.100000,-1.115900,-1.036400,0.100000,-1.115900,-1.036400,0.100000 - 2410 DATA -1.148900,-1.088600,0.100000,-0.763000,-1.095800,0.100000,-1.148900,-1.088600,0.100000,-1.115900,-1.036400,0.100000 - 2420 DATA -1.319300,-0.999700,0.100000,-1.319300,-0.999700,0.100000,-1.382600,-1.037800,0.100000,-1.148900,-1.088600,0.100000 - 2430 DATA -1.382600,-1.037800,0.100000,-1.319300,-0.999700,0.100000,-1.388900,-0.900000,0.100000,-1.388900,-0.900000,0.100000 - 2440 DATA -1.461100,-0.900000,0.100000,-1.382600,-1.037800,0.100000,-0.787000,-1.041700,0.100000,-0.800000,-1.012500,0.000000 - 2450 DATA -1.098100,-1.008300,0.000000,-1.098100,-1.008300,0.000000,-1.115900,-1.036400,0.100000,-0.787000,-1.041700,0.100000 - 2460 DATA -1.115900,-1.036400,0.100000,-1.098100,-1.008300,0.000000,-1.285200,-0.979200,0.000000,-1.285200,-0.979200,0.000000 - 2470 DATA -1.319300,-0.999700,0.100000,-1.115900,-1.036400,0.100000,-1.319300,-0.999700,0.100000,-1.285200,-0.979200,0.000000 - 2480 DATA -1.350000,-0.900000,0.000000,-1.350000,-0.900000,0.000000,-1.388900,-0.900000,0.100000,-1.319300,-0.999700,0.100000 - 2490 DATA -1.350000,-0.900000,0.000000,-1.388900,-0.900000,-0.100000,-1.347500,-0.738500,-0.100000,-1.347500,-0.738500,-0.100000 - 2500 DATA -1.314800,-0.758300,0.000000,-1.350000,-0.900000,0.000000,-1.314800,-0.758300,0.000000,-1.347500,-0.738500,-0.100000 - 2510 DATA -1.216700,-0.562900,-0.100000,-1.216700,-0.562900,-0.100000,-1.201900,-0.591700,0.000000,-1.314800,-0.758300,0.000000 - 2520 DATA -1.201900,-0.591700,0.000000,-1.216700,-0.562900,-0.100000,-0.987000,-0.411100,-0.100000,-0.987000,-0.411100,-0.100000 - 2530 DATA -1.000000,-0.450000,0.000000,-1.201900,-0.591700,0.000000,-1.388900,-0.900000,-0.100000,-1.461100,-0.900000,-0.100000 - 2540 DATA -1.408100,-0.701700,-0.100000,-1.408100,-0.701700,-0.100000,-1.347500,-0.738500,-0.100000,-1.388900,-0.900000,-0.100000 - 2550 DATA -1.347500,-0.738500,-0.100000,-1.408100,-0.701700,-0.100000,-1.244400,-0.509400,-0.100000,-1.244400,-0.509400,-0.100000 - 2560 DATA -1.216700,-0.562900,-0.100000,-1.347500,-0.738500,-0.100000,-1.216700,-0.562900,-0.100000,-1.244400,-0.509400,-0.100000 - 2570 DATA -0.963000,-0.338900,-0.100000,-0.963000,-0.338900,-0.100000,-0.987000,-0.411100,-0.100000,-1.216700,-0.562900,-0.100000 - 2580 DATA -1.461100,-0.900000,-0.100000,-1.500000,-0.900000,0.000000,-1.440700,-0.681900,0.000000,-1.440700,-0.681900,0.000000 - 2590 DATA -1.408100,-0.701700,-0.100000,-1.461100,-0.900000,-0.100000,-1.408100,-0.701700,-0.100000,-1.440700,-0.681900,0.000000 - 2600 DATA -1.259300,-0.480600,0.000000,-1.259300,-0.480600,0.000000,-1.244400,-0.509400,-0.100000,-1.408100,-0.701700,-0.100000 - 2610 DATA -1.244400,-0.509400,-0.100000,-1.259300,-0.480600,0.000000,-0.950000,-0.300000,0.000000,-0.950000,-0.300000,0.000000 - 2620 DATA -0.963000,-0.338900,-0.100000,-1.244400,-0.509400,-0.100000,-1.500000,-0.900000,0.000000,-1.461100,-0.900000,0.100000 - 2630 DATA -1.408100,-0.701700,0.100000,-1.408100,-0.701700,0.100000,-1.440700,-0.681900,0.000000,-1.500000,-0.900000,0.000000 - 2640 DATA -1.440700,-0.681900,0.000000,-1.408100,-0.701700,0.100000,-1.244400,-0.509400,0.100000,-1.244400,-0.509400,0.100000 - 2650 DATA -1.259300,-0.480600,0.000000,-1.440700,-0.681900,0.000000,-1.259300,-0.480600,0.000000,-1.244400,-0.509400,0.100000 - 2660 DATA -0.963000,-0.338900,0.100000,-0.963000,-0.338900,0.100000,-0.950000,-0.300000,0.000000,-1.259300,-0.480600,0.000000 - 2670 DATA -1.461100,-0.900000,0.100000,-1.388900,-0.900000,0.100000,-1.347500,-0.738500,0.100000,-1.347500,-0.738500,0.100000 - 2680 DATA -1.408100,-0.701700,0.100000,-1.461100,-0.900000,0.100000,-1.408100,-0.701700,0.100000,-1.347500,-0.738500,0.100000 - 2690 DATA -1.216700,-0.562900,0.100000,-1.216700,-0.562900,0.100000,-1.244400,-0.509400,0.100000,-1.408100,-0.701700,0.100000 - 2700 DATA -1.244400,-0.509400,0.100000,-1.216700,-0.562900,0.100000,-0.987000,-0.411100,0.100000,-0.987000,-0.411100,0.100000 - 2710 DATA -0.963000,-0.338900,0.100000,-1.244400,-0.509400,0.100000,-1.388900,-0.900000,0.100000,-1.350000,-0.900000,0.000000 - 2720 DATA -1.314800,-0.758300,0.000000,-1.314800,-0.758300,0.000000,-1.347500,-0.738500,0.100000,-1.388900,-0.900000,0.100000 - 2730 DATA -1.347500,-0.738500,0.100000,-1.314800,-0.758300,0.000000,-1.201900,-0.591700,0.000000,-1.201900,-0.591700,0.000000 - 2740 DATA -1.216700,-0.562900,0.100000,-1.347500,-0.738500,0.100000,-1.216700,-0.562900,0.100000,-1.201900,-0.591700,0.000000 - 2750 DATA -1.000000,-0.450000,0.000000,-1.000000,-0.450000,0.000000,-0.987000,-0.411100,0.100000,-1.216700,-0.562900,0.100000 - 2760 DATA 0.850000,-0.712500,0.000000,0.850000,-0.605600,-0.220000,1.169800,-0.737100,-0.184600,1.169800,-0.737100,-0.184600 - 2770 DATA 1.135200,-0.805600,0.000000,0.850000,-0.712500,0.000000,1.135200,-0.805600,0.000000,1.169800,-0.737100,-0.184600 - 2780 DATA 1.274700,-0.981400,-0.118800,1.274700,-0.981400,-0.118800,1.231500,-1.006900,0.000000,1.135200,-0.805600,0.000000 - 2790 DATA 1.231500,-1.006900,0.000000,1.274700,-0.981400,-0.118800,1.427800,-1.200000,-0.083300,1.427800,-1.200000,-0.083300 - 2800 DATA 1.350000,-1.200000,0.000000,1.231500,-1.006900,0.000000,0.850000,-0.605600,-0.220000,0.850000,-0.406900,-0.220000 - 2810 DATA 1.234000,-0.610100,-0.184600,1.234000,-0.610100,-0.184600,1.169800,-0.737100,-0.184600,0.850000,-0.605600,-0.220000 - 2820 DATA 1.169800,-0.737100,-0.184600,1.234000,-0.610100,-0.184600,1.354900,-0.933900,-0.118800,1.354900,-0.933900,-0.118800 - 2830 DATA 1.274700,-0.981400,-0.118800,1.169800,-0.737100,-0.184600,1.274700,-0.981400,-0.118800,1.354900,-0.933900,-0.118800 - 2840 DATA 1.572200,-1.200000,-0.083300,1.572200,-1.200000,-0.083300,1.427800,-1.200000,-0.083300,1.274700,-0.981400,-0.118800 - 2850 DATA 0.850000,-0.406900,-0.220000,0.850000,-0.300000,0.000000,1.268500,-0.541700,0.000000,1.268500,-0.541700,0.000000 - 2860 DATA 1.234000,-0.610100,-0.184600,0.850000,-0.406900,-0.220000,1.234000,-0.610100,-0.184600,1.268500,-0.541700,0.000000 - 2870 DATA 1.398100,-0.908300,0.000000,1.398100,-0.908300,0.000000,1.354900,-0.933900,-0.118800,1.234000,-0.610100,-0.184600 - 2880 DATA 1.354900,-0.933900,-0.118800,1.398100,-0.908300,0.000000,1.650000,-1.200000,0.000000,1.650000,-1.200000,0.000000 - 2890 DATA 1.572200,-1.200000,-0.083300,1.354900,-0.933900,-0.118800,0.850000,-0.300000,0.000000,0.850000,-0.406900,0.220000 - 2900 DATA 1.234000,-0.610100,0.184600,1.234000,-0.610100,0.184600,1.268500,-0.541700,0.000000,0.850000,-0.300000,0.000000 - 2910 DATA 1.268500,-0.541700,0.000000,1.234000,-0.610100,0.184600,1.354900,-0.933900,0.118800,1.354900,-0.933900,0.118800 - 2920 DATA 1.398100,-0.908300,0.000000,1.268500,-0.541700,0.000000,1.398100,-0.908300,0.000000,1.354900,-0.933900,0.118800 - 2930 DATA 1.572200,-1.200000,0.083300,1.572200,-1.200000,0.083300,1.650000,-1.200000,0.000000,1.398100,-0.908300,0.000000 - 2940 DATA 0.850000,-0.406900,0.220000,0.850000,-0.605600,0.220000,1.169800,-0.737100,0.184600,1.169800,-0.737100,0.184600 - 2950 DATA 1.234000,-0.610100,0.184600,0.850000,-0.406900,0.220000,1.234000,-0.610100,0.184600,1.169800,-0.737100,0.184600 - 2960 DATA 1.274700,-0.981400,0.118800,1.274700,-0.981400,0.118800,1.354900,-0.933900,0.118800,1.234000,-0.610100,0.184600 - 2970 DATA 1.354900,-0.933900,0.118800,1.274700,-0.981400,0.118800,1.427800,-1.200000,0.083300,1.427800,-1.200000,0.083300 - 2980 DATA 1.572200,-1.200000,0.083300,1.354900,-0.933900,0.118800,0.850000,-0.605600,0.220000,0.850000,-0.712500,0.000000 - 2990 DATA 1.135200,-0.805600,0.000000,1.135200,-0.805600,0.000000,1.169800,-0.737100,0.184600,0.850000,-0.605600,0.220000 - 3000 DATA 1.169800,-0.737100,0.184600,1.135200,-0.805600,0.000000,1.231500,-1.006900,0.000000,1.231500,-1.006900,0.000000 - 3010 DATA 1.274700,-0.981400,0.118800,1.169800,-0.737100,0.184600,1.274700,-0.981400,0.118800,1.231500,-1.006900,0.000000 - 3020 DATA 1.350000,-1.200000,0.000000,1.350000,-1.200000,0.000000,1.427800,-1.200000,0.083300,1.274700,-0.981400,0.118800 - 3030 DATA 1.350000,-1.200000,0.000000,1.427800,-1.200000,-0.083300,1.478900,-1.227200,-0.074700,1.478900,-1.227200,-0.074700 - 3040 DATA 1.396300,-1.225000,0.000000,1.350000,-1.200000,0.000000,1.396300,-1.225000,0.000000,1.478900,-1.227200,-0.074700 - 3050 DATA 1.491200,-1.227700,-0.058600,1.491200,-1.227700,-0.058600,1.420400,-1.225000,0.000000,1.396300,-1.225000,0.000000 - 3060 DATA 1.420400,-1.225000,0.000000,1.491200,-1.227700,-0.058600,1.451900,-1.200000,-0.050000,1.451900,-1.200000,-0.050000 - 3070 DATA 1.400000,-1.200000,0.000000,1.420400,-1.225000,0.000000,1.427800,-1.200000,-0.083300,1.572200,-1.200000,-0.083300 - 3080 DATA 1.632200,-1.231200,-0.074700,1.632200,-1.231200,-0.074700,1.478900,-1.227200,-0.074700,1.427800,-1.200000,-0.083300 - 3090 DATA 1.478900,-1.227200,-0.074700,1.632200,-1.231200,-0.074700,1.622700,-1.232700,-0.058600,1.622700,-1.232700,-0.058600 - 3100 DATA 1.491200,-1.227700,-0.058600,1.478900,-1.227200,-0.074700,1.491200,-1.227700,-0.058600,1.622700,-1.232700,-0.058600 - 3110 DATA 1.548100,-1.200000,-0.050000,1.548100,-1.200000,-0.050000,1.451900,-1.200000,-0.050000,1.491200,-1.227700,-0.058600 - 3120 DATA 1.572200,-1.200000,-0.083300,1.650000,-1.200000,0.000000,1.714800,-1.233300,0.000000,1.714800,-1.233300,0.000000 - 3130 DATA 1.632200,-1.231200,-0.074700,1.572200,-1.200000,-0.083300,1.632200,-1.231200,-0.074700,1.714800,-1.233300,0.000000 - 3140 DATA 1.693500,-1.235400,0.000000,1.693500,-1.235400,0.000000,1.622700,-1.232700,-0.058600,1.632200,-1.231200,-0.074700 - 3150 DATA 1.622700,-1.232700,-0.058600,1.693500,-1.235400,0.000000,1.600000,-1.200000,0.000000,1.600000,-1.200000,0.000000 - 3160 DATA 1.548100,-1.200000,-0.050000,1.622700,-1.232700,-0.058600,1.650000,-1.200000,0.000000,1.572200,-1.200000,0.083300 - 3170 DATA 1.632200,-1.231200,0.074700,1.632200,-1.231200,0.074700,1.714800,-1.233300,0.000000,1.650000,-1.200000,0.000000 - 3180 DATA 1.714800,-1.233300,0.000000,1.632200,-1.231200,0.074700,1.622700,-1.232700,0.058600,1.622700,-1.232700,0.058600 - 3190 DATA 1.693500,-1.235400,0.000000,1.714800,-1.233300,0.000000,1.693500,-1.235400,0.000000,1.622700,-1.232700,0.058600 - 3200 DATA 1.548100,-1.200000,0.050000,1.548100,-1.200000,0.050000,1.600000,-1.200000,0.000000,1.693500,-1.235400,0.000000 - 3210 DATA 1.572200,-1.200000,0.083300,1.427800,-1.200000,0.083300,1.478900,-1.227200,0.074700,1.478900,-1.227200,0.074700 - 3220 DATA 1.632200,-1.231200,0.074700,1.572200,-1.200000,0.083300,1.632200,-1.231200,0.074700,1.478900,-1.227200,0.074700 - 3230 DATA 1.491200,-1.227700,0.058600,1.491200,-1.227700,0.058600,1.622700,-1.232700,0.058600,1.632200,-1.231200,0.074700 - 3240 DATA 1.622700,-1.232700,0.058600,1.491200,-1.227700,0.058600,1.451900,-1.200000,0.050000,1.451900,-1.200000,0.050000 - 3250 DATA 1.548100,-1.200000,0.050000,1.622700,-1.232700,0.058600,1.427800,-1.200000,0.083300,1.350000,-1.200000,0.000000 - 3260 DATA 1.396300,-1.225000,0.000000,1.396300,-1.225000,0.000000,1.478900,-1.227200,0.074700,1.427800,-1.200000,0.083300 - 3270 DATA 1.478900,-1.227200,0.074700,1.396300,-1.225000,0.000000,1.420400,-1.225000,0.000000,1.420400,-1.225000,0.000000 - 3280 DATA 1.491200,-1.227700,0.058600,1.478900,-1.227200,0.074700,1.491200,-1.227700,0.058600,1.420400,-1.225000,0.000000 - 3290 DATA 1.400000,-1.200000,0.000000,1.400000,-1.200000,0.000000,1.451900,-1.200000,0.050000,1.491200,-1.227700,0.058600 - 3300 DATA 0.000000,-1.575000,0.000000,0.000000,-1.575000,0.000000,0.157100,-1.533300,-0.092400,0.157100,-1.533300,-0.092400 - 3310 DATA 0.181500,-1.533300,0.000000,0.000000,-1.575000,0.000000,0.181500,-1.533300,0.000000,0.157100,-1.533300,-0.092400 - 3320 DATA 0.102600,-1.441700,-0.060300,0.102600,-1.441700,-0.060300,0.118500,-1.441700,0.000000,0.181500,-1.533300,0.000000 - 3330 DATA 0.118500,-1.441700,0.000000,0.102600,-1.441700,-0.060300,0.086500,-1.350000,-0.050800,0.086500,-1.350000,-0.050800 - 3340 DATA 0.100000,-1.350000,0.000000,0.118500,-1.441700,0.000000,0.000000,-1.575000,0.000000,0.000000,-1.575000,0.000000 - 3350 DATA 0.092400,-1.533300,-0.157100,0.092400,-1.533300,-0.157100,0.157100,-1.533300,-0.092400,0.000000,-1.575000,0.000000 - 3360 DATA 0.157100,-1.533300,-0.092400,0.092400,-1.533300,-0.157100,0.060300,-1.441700,-0.102600,0.060300,-1.441700,-0.102600 - 3370 DATA 0.102600,-1.441700,-0.060300,0.157100,-1.533300,-0.092400,0.102600,-1.441700,-0.060300,0.060300,-1.441700,-0.102600 - 3380 DATA 0.050800,-1.350000,-0.086500,0.050800,-1.350000,-0.086500,0.086500,-1.350000,-0.050800,0.102600,-1.441700,-0.060300 - 3390 DATA 0.000000,-1.575000,0.000000,0.000000,-1.575000,0.000000,0.000000,-1.533300,-0.181500,0.000000,-1.533300,-0.181500 - 3400 DATA 0.092400,-1.533300,-0.157100,0.000000,-1.575000,0.000000,0.092400,-1.533300,-0.157100,0.000000,-1.533300,-0.181500 - 3410 DATA 0.000000,-1.441700,-0.118500,0.000000,-1.441700,-0.118500,0.060300,-1.441700,-0.102600,0.092400,-1.533300,-0.157100 - 3420 DATA 0.060300,-1.441700,-0.102600,0.000000,-1.441700,-0.118500,0.000000,-1.350000,-0.100000,0.000000,-1.350000,-0.100000 - 3430 DATA 0.050800,-1.350000,-0.086500,0.060300,-1.441700,-0.102600,0.000000,-1.575000,0.000000,0.000000,-1.575000,0.000000 - 3440 DATA -0.092400,-1.533300,-0.157100,-0.092400,-1.533300,-0.157100,0.000000,-1.533300,-0.181500,0.000000,-1.575000,0.000000 - 3450 DATA 0.000000,-1.533300,-0.181500,-0.092400,-1.533300,-0.157100,-0.060300,-1.441700,-0.102600,-0.060300,-1.441700,-0.102600 - 3460 DATA 0.000000,-1.441700,-0.118500,0.000000,-1.533300,-0.181500,0.000000,-1.441700,-0.118500,-0.060300,-1.441700,-0.102600 - 3470 DATA -0.050800,-1.350000,-0.086500,-0.050800,-1.350000,-0.086500,0.000000,-1.350000,-0.100000,0.000000,-1.441700,-0.118500 - 3480 DATA 0.000000,-1.575000,0.000000,0.000000,-1.575000,0.000000,-0.157100,-1.533300,-0.092400,-0.157100,-1.533300,-0.092400 - 3490 DATA -0.092400,-1.533300,-0.157100,0.000000,-1.575000,0.000000,-0.092400,-1.533300,-0.157100,-0.157100,-1.533300,-0.092400 - 3500 DATA -0.102600,-1.441700,-0.060300,-0.102600,-1.441700,-0.060300,-0.060300,-1.441700,-0.102600,-0.092400,-1.533300,-0.157100 - 3510 DATA -0.060300,-1.441700,-0.102600,-0.102600,-1.441700,-0.060300,-0.086500,-1.350000,-0.050800,-0.086500,-1.350000,-0.050800 - 3520 DATA -0.050800,-1.350000,-0.086500,-0.060300,-1.441700,-0.102600,0.000000,-1.575000,0.000000,0.000000,-1.575000,0.000000 - 3530 DATA -0.181500,-1.533300,0.000000,-0.181500,-1.533300,0.000000,-0.157100,-1.533300,-0.092400,0.000000,-1.575000,0.000000 - 3540 DATA -0.157100,-1.533300,-0.092400,-0.181500,-1.533300,0.000000,-0.118500,-1.441700,0.000000,-0.118500,-1.441700,0.000000 - 3550 DATA -0.102600,-1.441700,-0.060300,-0.157100,-1.533300,-0.092400,-0.102600,-1.441700,-0.060300,-0.118500,-1.441700,0.000000 - 3560 DATA -0.100000,-1.350000,0.000000,-0.100000,-1.350000,0.000000,-0.086500,-1.350000,-0.050800,-0.102600,-1.441700,-0.060300 - 3570 DATA 0.000000,-1.575000,0.000000,0.000000,-1.575000,0.000000,-0.157100,-1.533300,0.092400,-0.157100,-1.533300,0.092400 - 3580 DATA -0.181500,-1.533300,0.000000,0.000000,-1.575000,0.000000,-0.181500,-1.533300,0.000000,-0.157100,-1.533300,0.092400 - 3590 DATA -0.102600,-1.441700,0.060300,-0.102600,-1.441700,0.060300,-0.118500,-1.441700,0.000000,-0.181500,-1.533300,0.000000 - 3600 DATA -0.118500,-1.441700,0.000000,-0.102600,-1.441700,0.060300,-0.086500,-1.350000,0.050800,-0.086500,-1.350000,0.050800 - 3610 DATA -0.100000,-1.350000,0.000000,-0.118500,-1.441700,0.000000,0.000000,-1.575000,0.000000,0.000000,-1.575000,0.000000 - 3620 DATA -0.092400,-1.533300,0.157100,-0.092400,-1.533300,0.157100,-0.157100,-1.533300,0.092400,0.000000,-1.575000,0.000000 - 3630 DATA -0.157100,-1.533300,0.092400,-0.092400,-1.533300,0.157100,-0.060300,-1.441700,0.102600,-0.060300,-1.441700,0.102600 - 3640 DATA -0.102600,-1.441700,0.060300,-0.157100,-1.533300,0.092400,-0.102600,-1.441700,0.060300,-0.060300,-1.441700,0.102600 - 3650 DATA -0.050800,-1.350000,0.086500,-0.050800,-1.350000,0.086500,-0.086500,-1.350000,0.050800,-0.102600,-1.441700,0.060300 - 3660 DATA 0.000000,-1.575000,0.000000,0.000000,-1.575000,0.000000,0.000000,-1.533300,0.181500,0.000000,-1.533300,0.181500 - 3670 DATA -0.092400,-1.533300,0.157100,0.000000,-1.575000,0.000000,-0.092400,-1.533300,0.157100,0.000000,-1.533300,0.181500 - 3680 DATA 0.000000,-1.441700,0.118500,0.000000,-1.441700,0.118500,-0.060300,-1.441700,0.102600,-0.092400,-1.533300,0.157100 - 3690 DATA -0.060300,-1.441700,0.102600,0.000000,-1.441700,0.118500,0.000000,-1.350000,0.100000,0.000000,-1.350000,0.100000 - 3700 DATA -0.050800,-1.350000,0.086500,-0.060300,-1.441700,0.102600,0.000000,-1.575000,0.000000,0.000000,-1.575000,0.000000 - 3710 DATA 0.092400,-1.533300,0.157100,0.092400,-1.533300,0.157100,0.000000,-1.533300,0.181500,0.000000,-1.575000,0.000000 - 3720 DATA 0.000000,-1.533300,0.181500,0.092400,-1.533300,0.157100,0.060300,-1.441700,0.102600,0.060300,-1.441700,0.102600 - 3730 DATA 0.000000,-1.441700,0.118500,0.000000,-1.533300,0.181500,0.000000,-1.441700,0.118500,0.060300,-1.441700,0.102600 - 3740 DATA 0.050800,-1.350000,0.086500,0.050800,-1.350000,0.086500,0.000000,-1.350000,0.100000,0.000000,-1.441700,0.118500 - 3750 DATA 0.000000,-1.575000,0.000000,0.000000,-1.575000,0.000000,0.157100,-1.533300,0.092400,0.157100,-1.533300,0.092400 - 3760 DATA 0.092400,-1.533300,0.157100,0.000000,-1.575000,0.000000,0.092400,-1.533300,0.157100,0.157100,-1.533300,0.092400 - 3770 DATA 0.102600,-1.441700,0.060300,0.102600,-1.441700,0.060300,0.060300,-1.441700,0.102600,0.092400,-1.533300,0.157100 - 3780 DATA 0.060300,-1.441700,0.102600,0.102600,-1.441700,0.060300,0.086500,-1.350000,0.050800,0.086500,-1.350000,0.050800 - 3790 DATA 0.050800,-1.350000,0.086500,0.060300,-1.441700,0.102600,0.000000,-1.575000,0.000000,0.000000,-1.575000,0.000000 - 3800 DATA 0.181500,-1.533300,0.000000,0.181500,-1.533300,0.000000,0.157100,-1.533300,0.092400,0.000000,-1.575000,0.000000 - 3810 DATA 0.157100,-1.533300,0.092400,0.181500,-1.533300,0.000000,0.118500,-1.441700,0.000000,0.118500,-1.441700,0.000000 - 3820 DATA 0.102600,-1.441700,0.060300,0.157100,-1.533300,0.092400,0.102600,-1.441700,0.060300,0.118500,-1.441700,0.000000 - 3830 DATA 0.100000,-1.350000,0.000000,0.100000,-1.350000,0.000000,0.086500,-1.350000,0.050800,0.102600,-1.441700,0.060300 - 3840 DATA 0.100000,-1.350000,0.000000,0.086500,-1.350000,-0.050800,0.248300,-1.294400,-0.145900,0.248300,-1.294400,-0.145900 - 3850 DATA 0.287000,-1.294400,0.000000,0.100000,-1.350000,0.000000,0.287000,-1.294400,0.000000,0.248300,-1.294400,-0.145900 - 3860 DATA 0.458200,-1.255600,-0.269100,0.458200,-1.255600,-0.269100,0.529600,-1.255600,0.000000,0.287000,-1.294400,0.000000 - 3870 DATA 0.529600,-1.255600,0.000000,0.458200,-1.255600,-0.269100,0.562400,-1.200000,-0.330300,0.562400,-1.200000,-0.330300 - 3880 DATA 0.650000,-1.200000,0.000000,0.529600,-1.255600,0.000000,0.086500,-1.350000,-0.050800,0.050800,-1.350000,-0.086500 - 3890 DATA 0.145900,-1.294400,-0.248300,0.145900,-1.294400,-0.248300,0.248300,-1.294400,-0.145900,0.086500,-1.350000,-0.050800 - 3900 DATA 0.248300,-1.294400,-0.145900,0.145900,-1.294400,-0.248300,0.269100,-1.255600,-0.458200,0.269100,-1.255600,-0.458200 - 3910 DATA 0.458200,-1.255600,-0.269100,0.248300,-1.294400,-0.145900,0.458200,-1.255600,-0.269100,0.269100,-1.255600,-0.458200 - 3920 DATA 0.330300,-1.200000,-0.562400,0.330300,-1.200000,-0.562400,0.562400,-1.200000,-0.330300,0.458200,-1.255600,-0.269100 - 3930 DATA 0.050800,-1.350000,-0.086500,0.000000,-1.350000,-0.100000,0.000000,-1.294400,-0.287000,0.000000,-1.294400,-0.287000 - 3940 DATA 0.145900,-1.294400,-0.248300,0.050800,-1.350000,-0.086500,0.145900,-1.294400,-0.248300,0.000000,-1.294400,-0.287000 - 3950 DATA 0.000000,-1.255600,-0.529600,0.000000,-1.255600,-0.529600,0.269100,-1.255600,-0.458200,0.145900,-1.294400,-0.248300 - 3960 DATA 0.269100,-1.255600,-0.458200,0.000000,-1.255600,-0.529600,0.000000,-1.200000,-0.650000,0.000000,-1.200000,-0.650000 - 3970 DATA 0.330300,-1.200000,-0.562400,0.269100,-1.255600,-0.458200,0.000000,-1.350000,-0.100000,-0.050800,-1.350000,-0.086500 - 3980 DATA -0.145900,-1.294400,-0.248300,-0.145900,-1.294400,-0.248300,0.000000,-1.294400,-0.287000,0.000000,-1.350000,-0.100000 - 3990 DATA 0.000000,-1.294400,-0.287000,-0.145900,-1.294400,-0.248300,-0.269100,-1.255600,-0.458200,-0.269100,-1.255600,-0.458200 - 4000 DATA 0.000000,-1.255600,-0.529600,0.000000,-1.294400,-0.287000,0.000000,-1.255600,-0.529600,-0.269100,-1.255600,-0.458200 - 4010 DATA -0.330300,-1.200000,-0.562400,-0.330300,-1.200000,-0.562400,0.000000,-1.200000,-0.650000,0.000000,-1.255600,-0.529600 - 4020 DATA -0.050800,-1.350000,-0.086500,-0.086500,-1.350000,-0.050800,-0.248300,-1.294400,-0.145900,-0.248300,-1.294400,-0.145900 - 4030 DATA -0.145900,-1.294400,-0.248300,-0.050800,-1.350000,-0.086500,-0.145900,-1.294400,-0.248300,-0.248300,-1.294400,-0.145900 - 4040 DATA -0.458200,-1.255600,-0.269100,-0.458200,-1.255600,-0.269100,-0.269100,-1.255600,-0.458200,-0.145900,-1.294400,-0.248300 - 4050 DATA -0.269100,-1.255600,-0.458200,-0.458200,-1.255600,-0.269100,-0.562400,-1.200000,-0.330300,-0.562400,-1.200000,-0.330300 - 4060 DATA -0.330300,-1.200000,-0.562400,-0.269100,-1.255600,-0.458200,-0.086500,-1.350000,-0.050800,-0.100000,-1.350000,0.000000 - 4070 DATA -0.287000,-1.294400,0.000000,-0.287000,-1.294400,0.000000,-0.248300,-1.294400,-0.145900,-0.086500,-1.350000,-0.050800 - 4080 DATA -0.248300,-1.294400,-0.145900,-0.287000,-1.294400,0.000000,-0.529600,-1.255600,0.000000,-0.529600,-1.255600,0.000000 - 4090 DATA -0.458200,-1.255600,-0.269100,-0.248300,-1.294400,-0.145900,-0.458200,-1.255600,-0.269100,-0.529600,-1.255600,0.000000 - 4100 DATA -0.650000,-1.200000,0.000000,-0.650000,-1.200000,0.000000,-0.562400,-1.200000,-0.330300,-0.458200,-1.255600,-0.269100 - 4110 DATA -0.100000,-1.350000,0.000000,-0.086500,-1.350000,0.050800,-0.248300,-1.294400,0.145900,-0.248300,-1.294400,0.145900 - 4120 DATA -0.287000,-1.294400,0.000000,-0.100000,-1.350000,0.000000,-0.287000,-1.294400,0.000000,-0.248300,-1.294400,0.145900 - 4130 DATA -0.458200,-1.255600,0.269100,-0.458200,-1.255600,0.269100,-0.529600,-1.255600,0.000000,-0.287000,-1.294400,0.000000 - 4140 DATA -0.529600,-1.255600,0.000000,-0.458200,-1.255600,0.269100,-0.562400,-1.200000,0.330300,-0.562400,-1.200000,0.330300 - 4150 DATA -0.650000,-1.200000,0.000000,-0.529600,-1.255600,0.000000,-0.086500,-1.350000,0.050800,-0.050800,-1.350000,0.086500 - 4160 DATA -0.145900,-1.294400,0.248300,-0.145900,-1.294400,0.248300,-0.248300,-1.294400,0.145900,-0.086500,-1.350000,0.050800 - 4170 DATA -0.248300,-1.294400,0.145900,-0.145900,-1.294400,0.248300,-0.269100,-1.255600,0.458200,-0.269100,-1.255600,0.458200 - 4180 DATA -0.458200,-1.255600,0.269100,-0.248300,-1.294400,0.145900,-0.458200,-1.255600,0.269100,-0.269100,-1.255600,0.458200 - 4190 DATA -0.330300,-1.200000,0.562400,-0.330300,-1.200000,0.562400,-0.562400,-1.200000,0.330300,-0.458200,-1.255600,0.269100 - 4200 DATA -0.050800,-1.350000,0.086500,0.000000,-1.350000,0.100000,0.000000,-1.294400,0.287000,0.000000,-1.294400,0.287000 - 4210 DATA -0.145900,-1.294400,0.248300,-0.050800,-1.350000,0.086500,-0.145900,-1.294400,0.248300,0.000000,-1.294400,0.287000 - 4220 DATA 0.000000,-1.255600,0.529600,0.000000,-1.255600,0.529600,-0.269100,-1.255600,0.458200,-0.145900,-1.294400,0.248300 - 4230 DATA -0.269100,-1.255600,0.458200,0.000000,-1.255600,0.529600,0.000000,-1.200000,0.650000,0.000000,-1.200000,0.650000 - 4240 DATA -0.330300,-1.200000,0.562400,-0.269100,-1.255600,0.458200,0.000000,-1.350000,0.100000,0.050800,-1.350000,0.086500 - 4250 DATA 0.145900,-1.294400,0.248300,0.145900,-1.294400,0.248300,0.000000,-1.294400,0.287000,0.000000,-1.350000,0.100000 - 4260 DATA 0.000000,-1.294400,0.287000,0.145900,-1.294400,0.248300,0.269100,-1.255600,0.458200,0.269100,-1.255600,0.458200 - 4270 DATA 0.000000,-1.255600,0.529600,0.000000,-1.294400,0.287000,0.000000,-1.255600,0.529600,0.269100,-1.255600,0.458200 - 4280 DATA 0.330300,-1.200000,0.562400,0.330300,-1.200000,0.562400,0.000000,-1.200000,0.650000,0.000000,-1.255600,0.529600 - 4290 DATA 0.050800,-1.350000,0.086500,0.086500,-1.350000,0.050800,0.248300,-1.294400,0.145900,0.248300,-1.294400,0.145900 - 4300 DATA 0.145900,-1.294400,0.248300,0.050800,-1.350000,0.086500,0.145900,-1.294400,0.248300,0.248300,-1.294400,0.145900 - 4310 DATA 0.458200,-1.255600,0.269100,0.458200,-1.255600,0.269100,0.269100,-1.255600,0.458200,0.145900,-1.294400,0.248300 - 4320 DATA 0.269100,-1.255600,0.458200,0.458200,-1.255600,0.269100,0.562400,-1.200000,0.330300,0.562400,-1.200000,0.330300 - 4330 DATA 0.330300,-1.200000,0.562400,0.269100,-1.255600,0.458200,0.086500,-1.350000,0.050800,0.100000,-1.350000,0.000000 - 4340 DATA 0.287000,-1.294400,0.000000,0.287000,-1.294400,0.000000,0.248300,-1.294400,0.145900,0.086500,-1.350000,0.050800 - 4350 DATA 0.248300,-1.294400,0.145900,0.287000,-1.294400,0.000000,0.529600,-1.255600,0.000000,0.529600,-1.255600,0.000000 - 4360 DATA 0.458200,-1.255600,0.269100,0.248300,-1.294400,0.145900,0.458200,-1.255600,0.269100,0.529600,-1.255600,0.000000 - 4370 DATA 0.650000,-1.200000,0.000000,0.650000,-1.200000,0.000000,0.562400,-1.200000,0.330300,0.458200,-1.255600,0.269100 - 4380 REM - 4390 REM -- VERTEX INDEXES -- - 4400 DATA 0,1,2,3,4,5,6,7,8,9 - 4410 DATA 10,11,12,13,14,15,16,17,18,19 - 4420 DATA 20,21,22,23,24,25,26,27,28,29 - 4430 DATA 30,31,32,33,34,35,36,37,38,39 - 4440 DATA 40,41,42,43,44,45,46,47,48,49 - 4450 DATA 50,51,52,53,54,55,56,57,58,59 - 4460 DATA 60,61,62,63,64,65,66,67,68,69 - 4470 DATA 70,71,72,73,74,75,76,77,78,79 - 4480 DATA 80,81,82,83,84,85,86,87,88,89 - 4490 DATA 90,91,92,93,94,95,96,97,98,99 - 4500 DATA 100,101,102,103,104,105,106,107,108,109 - 4510 DATA 110,111,112,113,114,115,116,117,118,119 - 4520 DATA 120,121,122,123,124,125,126,127,128,129 - 4530 DATA 130,131,132,133,134,135,136,137,138,139 - 4540 DATA 140,141,142,143,144,145,146,147,148,149 - 4550 DATA 150,151,152,153,154,155,156,157,158,159 - 4560 DATA 160,161,162,163,164,165,166,167,168,169 - 4570 DATA 170,171,172,173,174,175,176,177,178,179 - 4580 DATA 180,181,182,183,184,185,186,187,188,189 - 4590 DATA 190,191,192,193,194,195,196,197,198,199 - 4600 DATA 200,201,202,203,204,205,206,207,208,209 - 4610 DATA 210,211,212,213,214,215,216,217,218,219 - 4620 DATA 220,221,222,223,224,225,226,227,228,229 - 4630 DATA 230,231,232,233,234,235,236,237,238,239 - 4640 DATA 240,241,242,243,244,245,246,247,248,249 - 4650 DATA 250,251,252,253,254,255,256,257,258,259 - 4660 DATA 260,261,262,263,264,265,266,267,268,269 - 4670 DATA 270,271,272,273,274,275,276,277,278,279 - 4680 DATA 280,281,282,283,284,285,286,287,288,289 - 4690 DATA 290,291,292,293,294,295,296,297,298,299 - 4700 DATA 300,301,302,303,304,305,306,307,308,309 - 4710 DATA 310,311,312,313,314,315,316,317,318,319 - 4720 DATA 320,321,322,323,324,325,326,327,328,329 - 4730 DATA 330,331,332,333,334,335,336,337,338,339 - 4740 DATA 340,341,342,343,344,345,346,347,348,349 - 4750 DATA 350,351,352,353,354,355,356,357,358,359 - 4760 DATA 360,361,362,363,364,365,366,367,368,369 - 4770 DATA 370,371,372,373,374,375,376,377,378,379 - 4780 DATA 380,381,382,383,384,385,386,387,388,389 - 4790 DATA 390,391,392,393,394,395,396,397,398,399 - 4800 DATA 400,401,402,403,404,405,406,407,408,409 - 4810 DATA 410,411,412,413,414,415,416,417,418,419 - 4820 DATA 420,421,422,423,424,425,426,427,428,429 - 4830 DATA 430,431,432,433,434,435,436,437,438,439 - 4840 DATA 440,441,442,443,444,445,446,447,448,449 - 4850 DATA 450,451,452,453,454,455,456,457,458,459 - 4860 DATA 460,461,462,463,464,465,466,467,468,469 - 4870 DATA 470,471,472,473,474,475,476,477,478,479 - 4880 DATA 480,481,482,483,484,485,486,487,488,489 - 4890 DATA 490,491,492,493,494,495,496,497,498,499 - 4900 DATA 500,501,502,503,504,505,506,507,508,509 - 4910 DATA 510,511,512,513,514,515,516,517,518,519 - 4920 DATA 520,521,522,523,524,525,526,527,528,529 - 4930 DATA 530,531,532,533,534,535,536,537,538,539 - 4940 DATA 540,541,542,543,544,545,546,547,548,549 - 4950 DATA 550,551,552,553,554,555,556,557,558,559 - 4960 DATA 560,561,562,563,564,565,566,567,568,569 - 4970 DATA 570,571,572,573,574,575,576,577,578,579 - 4980 DATA 580,581,582,583,584,585,586,587,588,589 - 4990 DATA 590,591,592,593,594,595,596,597,598,599 - 5000 DATA 600,601,602,603,604,605,606,607,608,609 - 5010 DATA 610,611,612,613,614,615,616,617,618,619 - 5020 DATA 620,621,622,623,624,625,626,627,628,629 - 5030 DATA 630,631,632,633,634,635,636,637,638,639 - 5040 DATA 640,641,642,643,644,645,646,647,648,649 - 5050 DATA 650,651,652,653,654,655,656,657,658,659 - 5060 DATA 660,661,662,663,664,665,666,667,668,669 - 5070 DATA 670,671,672,673,674,675,676,677,678,679 - 5080 DATA 680,681,682,683,684,685,686,687,688,689 - 5090 DATA 690,691,692,693,694,695,696,697,698,699 - 5100 DATA 700,701,702,703,704,705,706,707,708,709 - 5110 DATA 710,711,712,713,714,715,716,717,718,719 - 5120 DATA 720,721,722,723,724,725,726,727,728,729 - 5130 DATA 730,731,732,733,734,735,736,737,738,739 - 5140 DATA 740,741,742,743,744,745,746,747,748,749 - 5150 DATA 750,751,752,753,754,755,756,757,758,759 - 5160 DATA 760,761,762,763,764,765,766,767,768,769 - 5170 DATA 770,771,772,773,774,775,776,777,778,779 - 5180 DATA 780,781,782,783,784,785,786,787,788,789 - 5190 DATA 790,791,792,793,794,795,796,797,798,799 - 5200 DATA 800,801,802,803,804,805,806,807,808,809 - 5210 DATA 810,811,812,813,814,815,816,817,818,819 - 5220 DATA 820,821,822,823,824,825,826,827,828,829 - 5230 DATA 830,831,832,833,834,835,836,837,838,839 - 5240 DATA 840,841,842,843,844,845,846,847,848,849 - 5250 DATA 850,851,852,853,854,855,856,857,858,859 - 5260 DATA 860,861,862,863,864,865,866,867,868,869 - 5270 DATA 870,871,872,873,874,875,876,877,878,879 - 5280 DATA 880,881,882,883,884,885,886,887,888,889 - 5290 DATA 890,891,892,893,894,895,896,897,898,899 - 5300 DATA 900,901,902,903,904,905,906,907,908,909 - 5310 DATA 910,911,912,913,914,915,916,917,918,919 - 5320 DATA 920,921,922,923,924,925,926,927,928,929 - 5330 DATA 930,931,932,933,934,935,936,937,938,939 - 5340 DATA 940,941,942,943,944,945,946,947,948,949 - 5350 DATA 950,951,952,953,954,955,956,957,958,959 - 5360 DATA 960,961,962,963,964,965,966,967,968,969 - 5370 DATA 970,971,972,973,974,975,976,977,978,979 - 5380 DATA 980,981,982,983,984,985,986,987,988,989 - 5390 DATA 990,991,992,993,994,995,996,997,998,999 - 5400 DATA 1000,1001,1002,1003,1004,1005,1006,1007,1008,1009 - 5410 DATA 1010,1011,1012,1013,1014,1015,1016,1017,1018,1019 - 5420 DATA 1020,1021,1022,1023,1024,1025,1026,1027,1028,1029 - 5430 DATA 1030,1031,1032,1033,1034,1035,1036,1037,1038,1039 - 5440 DATA 1040,1041,1042,1043,1044,1045,1046,1047,1048,1049 - 5450 DATA 1050,1051,1052,1053,1054,1055,1056,1057,1058,1059 - 5460 DATA 1060,1061,1062,1063,1064,1065,1066,1067,1068,1069 - 5470 DATA 1070,1071,1072,1073,1074,1075,1076,1077,1078,1079 - 5480 DATA 1080,1081,1082,1083,1084,1085,1086,1087,1088,1089 - 5490 DATA 1090,1091,1092,1093,1094,1095,1096,1097,1098,1099 - 5500 DATA 1100,1101,1102,1103,1104,1105,1106,1107,1108,1109 - 5510 DATA 1110,1111,1112,1113,1114,1115,1116,1117,1118,1119 - 5520 DATA 1120,1121,1122,1123,1124,1125,1126,1127,1128,1129 - 5530 DATA 1130,1131,1132,1133,1134,1135,1136,1137,1138,1139 - 5540 DATA 1140,1141,1142,1143,1144,1145,1146,1147,1148,1149 - 5550 DATA 1150,1151,1152,1153,1154,1155,1156,1157,1158,1159 - 5560 DATA 1160,1161,1162,1163,1164,1165,1166,1167,1168,1169 - 5570 DATA 1170,1171,1172,1173,1174,1175,1176,1177,1178,1179 - 5580 DATA 1180,1181,1182,1183,1184,1185,1186,1187,1188,1189 - 5590 DATA 1190,1191,1192,1193,1194,1195,1196,1197,1198,1199 - 5600 DATA 1200,1201,1202,1203,1204,1205,1206,1207,1208,1209 - 5610 DATA 1210,1211,1212,1213,1214,1215,1216,1217,1218,1219 - 5620 DATA 1220,1221,1222,1223,1224,1225,1226,1227,1228,1229 - 5630 DATA 1230,1231,1232,1233,1234,1235,1236,1237,1238,1239 - 5640 DATA 1240,1241,1242,1243,1244,1245,1246,1247,1248,1249 - 5650 DATA 1250,1251,1252,1253,1254,1255,1256,1257,1258,1259 - 5660 DATA 1260,1261,1262,1263,1264,1265,1266,1267,1268,1269 - 5670 DATA 1270,1271,1272,1273,1274,1275,1276,1277,1278,1279 - 5680 DATA 1280,1281,1282,1283,1284,1285,1286,1287,1288,1289 - 5690 DATA 1290,1291,1292,1293,1294,1295,1296,1297,1298,1299 - 5700 DATA 1300,1301,1302,1303,1304,1305,1306,1307,1308,1309 - 5710 DATA 1310,1311,1312,1313,1314,1315,1316,1317,1318,1319 - 5720 DATA 1320,1321,1322,1323,1324,1325,1326,1327,1328,1329 - 5730 DATA 1330,1331,1332,1333,1334,1335,1336,1337,1338,1339 - 5740 DATA 1340,1341,1342,1343,1344,1345,1346,1347,1348,1349 - 5750 DATA 1350,1351,1352,1353,1354,1355,1356,1357,1358,1359 - 5760 DATA 1360,1361,1362,1363,1364,1365,1366,1367,1368,1369 - 5770 DATA 1370,1371,1372,1373,1374,1375,1376,1377,1378,1379 - 5780 DATA 1380,1381,1382,1383,1384,1385,1386,1387,1388,1389 - 5790 DATA 1390,1391,1392,1393,1394,1395,1396,1397,1398,1399 - 5800 DATA 1400,1401,1402,1403,1404,1405,1406,1407,1408,1409 - 5810 DATA 1410,1411,1412,1413,1414,1415,1416,1417,1418,1419 - 5820 DATA 1420,1421,1422,1423,1424,1425,1426,1427,1428,1429 - 5830 DATA 1430,1431,1432,1433,1434,1435,1436,1437,1438,1439 - 5840 DATA 1440,1441,1442,1443,1444,1445,1446,1447,1448,1449 - 5850 DATA 1450,1451,1452,1453,1454,1455,1456,1457,1458,1459 - 5860 DATA 1460,1461,1462,1463,1464,1465,1466,1467,1468,1469 - 5870 DATA 1470,1471,1472,1473,1474,1475,1476,1477,1478,1479 - 5880 DATA 1480,1481,1482,1483,1484,1485,1486,1487,1488,1489 - 5890 DATA 1490,1491,1492,1493,1494,1495,1496,1497,1498,1499 - 5900 DATA 1500,1501,1502,1503,1504,1505,1506,1507,1508,1509 - 5910 DATA 1510,1511,1512,1513,1514,1515,1516,1517,1518,1519 - 5920 DATA 1520,1521,1522,1523,1524,1525,1526,1527,1528,1529 - 5930 DATA 1530,1531,1532,1533,1534,1535,1536,1537,1538,1539 - 5940 DATA 1540,1541,1542,1543,1544,1545,1546,1547,1548,1549 - 5950 DATA 1550,1551,1552,1553,1554,1555,1556,1557,1558,1559 - 5960 DATA 1560,1561,1562,1563,1564,1565,1566,1567,1568,1569 - 5970 DATA 1570,1571,1572,1573,1574,1575,1576,1577,1578,1579 - 5980 DATA 1580,1581,1582,1583,1584,1585,1586,1587,1588,1589 - 5990 DATA 1590,1591,1592,1593,1594,1595,1596,1597,1598,1599 - 6000 DATA 1600,1601,1602,1603,1604,1605,1606,1607,1608,1609 - 6010 DATA 1610,1611,1612,1613,1614,1615,1616,1617,1618,1619 - 6020 DATA 1620,1621,1622,1623,1624,1625,1626,1627,1628,1629 - 6030 DATA 1630,1631,1632,1633,1634,1635,1636,1637,1638,1639 - 6040 DATA 1640,1641,1642,1643,1644,1645,1646,1647,1648,1649 - 6050 DATA 1650,1651,1652,1653,1654,1655,1656,1657,1658,1659 - 6060 DATA 1660,1661,1662,1663,1664,1665,1666,1667,1668,1669 - 6070 DATA 1670,1671,1672,1673,1674,1675,1676,1677,1678,1679 - 6080 DATA 1680,1681,1682,1683,1684,1685,1686,1687,1688,1689 - 6090 DATA 1690,1691,1692,1693,1694,1695,1696,1697,1698,1699 - 6100 DATA 1700,1701,1702,1703,1704,1705,1706,1707,1708,1709 - 6110 DATA 1710,1711,1712,1713,1714,1715,1716,1717,1718,1719 - 6120 DATA 1720,1721,1722,1723,1724,1725,1726,1727 - 6130 REM - 6140 REM -- CODE -- - 6145 PRINT "Reading vertices" - 6150 total_coords%=teapot_vertices%*3 - 6160 max_abs=-99999 - 6170 DIM vertices(total_coords%) - 6180 FOR i%=0 TO total_coords%-1 - 6190 READ coord - 6200 vertices(i%)=coord - 6210 a=ABS(coord) - 6220 IF a>max_abs THEN max_abs=a - 6230 NEXT i% - 6232 factor=32767.0/max_abs - 6234 PRINT "Max absolute value = ";max_abs - 6236 PRINT "Factor = ";factor - 6240 sid%=100: mid%=1: oid%=1: bmid1%=101: bmid2%=102 - 6245 PRINT "Creating control structure" - 6250 VDU 23,0, &A0, sid%; &48,0, 150; 150; : REM Create Control Structure - 6255 PRINT "Sending vertices using factor ";factor - 6260 VDU 23,0, &A0, sid%; &48, 1, mid%; teapot_vertices%; : REM Define Mesh Vertices - 6270 FOR i%=0 TO total_coords%-1 - 6280 val%=vertices(i%)*factor - 6290 VDU val%; - 6295 T%=TIME - 6296 IF TIME-T%<2 GOTO 6296 - 6300 NEXT i% - 6305 PRINT "Reading and sending vertex indexes" - 6310 VDU 23,0, &A0, sid%; &48, 2, mid%; teapot_vertices%; : REM Set Mesh Vertex Indexes - 6320 FOR i%=0 TO teapot_vertices%-1 - 6330 READ val% - 6340 VDU val%; - 6345 T%=TIME - 6346 IF TIME-T%<2 GOTO 6346 - 6350 NEXT i% - 6355 PRINT "Defining texture coordinates" - 6360 VDU 23,0, &A0, sid%; &48, 3, mid%; 1; 32768; 32768; : REM Define Texture Coordinates - 6355 PRINT "Sending texture coordinate indexes" - 6370 VDU 23,0, &A0, sid%; &48, 4, mid%; teapot_vertices%; : REM Set Texture Coordinate Indexes - 6372 FOR i%=0 TO teapot_vertices%-1 - 6373 VDU 0; - 6374 NEXT i% - 6376 PRINT "Creating texture bitmap" - 6380 VDU 23, 27, 0, bmid1%: REM Create a bitmap for a texture - 6382 PRINT "Setting texture pixel" - 6390 VDU 23, 27, 1, 1; 1; &55, &A0, &FF, &C0 : REM Set a pixel in the bitmap - 6400 bmid1%=bmid1%+64000 : REM Further references to the bitmap use this ID - 6405 PRINT "Create 3D object" - 6410 VDU 23,0, &A0, sid%; &48, 5, oid%; mid%; bmid1%; : REM Create Object - 6415 PRINT "Render 3D object" - 6420 VDU 23,0, &A0, sid%; &48, 18, bmid2%; : REM Render To Bitmap +10 REM teapot.bas +20 REM Sample app to illustrate Pingo 3D on Agon +30 REM +40 REM -- VERTICES -- +50 teapot_vertices%=1728 +60 DATA 0.700000,-1.200000,0.000000,0.605600,-1.200000,-0.355700,0.598800,-1.243700,-0.351700,0.598800,-1.243700,-0.351700 +70 DATA 0.692100,-1.243700,0.000000,0.700000,-1.200000,0.000000,0.692100,-1.243700,0.000000,0.598800,-1.243700,-0.351700 +80 DATA 0.619600,-1.243700,-0.363900,0.619600,-1.243700,-0.363900,0.716200,-1.243700,0.000000,0.692100,-1.243700,0.000000 +90 DATA 0.716200,-1.243700,0.000000,0.619600,-1.243700,-0.363900,0.648900,-1.200000,-0.381100,0.648900,-1.200000,-0.381100 +100 DATA 0.750000,-1.200000,0.000000,0.716200,-1.243700,0.000000,0.605600,-1.200000,-0.355700,0.355700,-1.200000,-0.605600 +110 DATA 0.351700,-1.243700,-0.598800,0.351700,-1.243700,-0.598800,0.598800,-1.243700,-0.351700,0.605600,-1.200000,-0.355700 +120 DATA 0.598800,-1.243700,-0.351700,0.351700,-1.243700,-0.598800,0.363900,-1.243800,-0.619600,0.363900,-1.243800,-0.619600 +130 DATA 0.619600,-1.243700,-0.363900,0.598800,-1.243700,-0.351700,0.619600,-1.243700,-0.363900,0.363900,-1.243800,-0.619600 +140 DATA 0.381100,-1.200000,-0.648900,0.381100,-1.200000,-0.648900,0.648900,-1.200000,-0.381100,0.619600,-1.243700,-0.363900 +150 DATA 0.355700,-1.200000,-0.605600,0.000000,-1.200000,-0.700000,0.000000,-1.243700,-0.692100,0.000000,-1.243700,-0.692100 +160 DATA 0.351700,-1.243700,-0.598800,0.355700,-1.200000,-0.605600,0.351700,-1.243700,-0.598800,0.000000,-1.243700,-0.692100 +170 DATA 0.000000,-1.243800,-0.716200,0.000000,-1.243800,-0.716200,0.363900,-1.243800,-0.619600,0.351700,-1.243700,-0.598800 +180 DATA 0.363900,-1.243800,-0.619600,0.000000,-1.243800,-0.716200,0.000000,-1.200000,-0.750000,0.000000,-1.200000,-0.750000 +190 DATA 0.381100,-1.200000,-0.648900,0.363900,-1.243800,-0.619600,0.000000,-1.200000,-0.700000,-0.375700,-1.200000,-0.605600 +200 DATA -0.357600,-1.243700,-0.598800,-0.357600,-1.243700,-0.598800,0.000000,-1.243700,-0.692100,0.000000,-1.200000,-0.700000 +210 DATA 0.000000,-1.243700,-0.692100,-0.357600,-1.243700,-0.598800,-0.364700,-1.243700,-0.619600,-0.364700,-1.243700,-0.619600 +220 DATA 0.000000,-1.243800,-0.716200,0.000000,-1.243700,-0.692100,0.000000,-1.243800,-0.716200,-0.364700,-1.243700,-0.619600 +230 DATA -0.381100,-1.200000,-0.648900,-0.381100,-1.200000,-0.648900,0.000000,-1.200000,-0.750000,0.000000,-1.243800,-0.716200 +240 DATA -0.375700,-1.200000,-0.605600,-0.615600,-1.200000,-0.355700,-0.601800,-1.243700,-0.351700,-0.601800,-1.243700,-0.351700 +250 DATA -0.357600,-1.243700,-0.598800,-0.375700,-1.200000,-0.605600,-0.357600,-1.243700,-0.598800,-0.601800,-1.243700,-0.351700 +260 DATA -0.620000,-1.243700,-0.363900,-0.620000,-1.243700,-0.363900,-0.364700,-1.243700,-0.619600,-0.357600,-1.243700,-0.598800 +270 DATA -0.364700,-1.243700,-0.619600,-0.620000,-1.243700,-0.363900,-0.648900,-1.200000,-0.381100,-0.648900,-1.200000,-0.381100 +280 DATA -0.381100,-1.200000,-0.648900,-0.364700,-1.243700,-0.619600,-0.615600,-1.200000,-0.355700,-0.700000,-1.200000,0.000000 +290 DATA -0.692100,-1.243700,0.000000,-0.692100,-1.243700,0.000000,-0.601800,-1.243700,-0.351700,-0.615600,-1.200000,-0.355700 +300 DATA -0.601800,-1.243700,-0.351700,-0.692100,-1.243700,0.000000,-0.716200,-1.243700,0.000000,-0.716200,-1.243700,0.000000 +310 DATA -0.620000,-1.243700,-0.363900,-0.601800,-1.243700,-0.351700,-0.620000,-1.243700,-0.363900,-0.716200,-1.243700,0.000000 +320 DATA -0.750000,-1.200000,0.000000,-0.750000,-1.200000,0.000000,-0.648900,-1.200000,-0.381100,-0.620000,-1.243700,-0.363900 +330 DATA -0.700000,-1.200000,0.000000,-0.605600,-1.200000,0.355700,-0.598800,-1.243700,0.351700,-0.598800,-1.243700,0.351700 +340 DATA -0.692100,-1.243700,0.000000,-0.700000,-1.200000,0.000000,-0.692100,-1.243700,0.000000,-0.598800,-1.243700,0.351700 +350 DATA -0.619600,-1.243700,0.363900,-0.619600,-1.243700,0.363900,-0.716200,-1.243700,0.000000,-0.692100,-1.243700,0.000000 +360 DATA -0.716200,-1.243700,0.000000,-0.619600,-1.243700,0.363900,-0.648900,-1.200000,0.381100,-0.648900,-1.200000,0.381100 +370 DATA -0.750000,-1.200000,0.000000,-0.716200,-1.243700,0.000000,-0.605600,-1.200000,0.355700,-0.355700,-1.200000,0.605600 +380 DATA -0.351700,-1.243700,0.598800,-0.351700,-1.243700,0.598800,-0.598800,-1.243700,0.351700,-0.605600,-1.200000,0.355700 +390 DATA -0.598800,-1.243700,0.351700,-0.351700,-1.243700,0.598800,-0.363900,-1.243700,0.619600,-0.363900,-1.243700,0.619600 +400 DATA -0.619600,-1.243700,0.363900,-0.598800,-1.243700,0.351700,-0.619600,-1.243700,0.363900,-0.363900,-1.243700,0.619600 +410 DATA -0.381100,-1.200000,0.648900,-0.381100,-1.200000,0.648900,-0.648900,-1.200000,0.381100,-0.619600,-1.243700,0.363900 +420 DATA -0.355700,-1.200000,0.605600,0.000000,-1.200000,0.700000,0.000000,-1.243700,0.692100,0.000000,-1.243700,0.692100 +430 DATA -0.351700,-1.243700,0.598800,-0.355700,-1.200000,0.605600,-0.351700,-1.243700,0.598800,0.000000,-1.243700,0.692100 +440 DATA 0.000000,-1.243700,0.716200,0.000000,-1.243700,0.716200,-0.363900,-1.243700,0.619600,-0.351700,-1.243700,0.598800 +450 DATA -0.363900,-1.243700,0.619600,0.000000,-1.243700,0.716200,0.000000,-1.200000,0.750000,0.000000,-1.200000,0.750000 +460 DATA -0.381100,-1.200000,0.648900,-0.363900,-1.243700,0.619600,0.000000,-1.200000,0.700000,0.355700,-1.200000,0.605600 +470 DATA 0.351700,-1.243700,0.598800,0.351700,-1.243700,0.598800,0.000000,-1.243700,0.692100,0.000000,-1.200000,0.700000 +480 DATA 0.000000,-1.243700,0.692100,0.351700,-1.243700,0.598800,0.363900,-1.243700,0.619600,0.363900,-1.243700,0.619600 +490 DATA 0.000000,-1.243700,0.716200,0.000000,-1.243700,0.692100,0.000000,-1.243700,0.716200,0.363900,-1.243700,0.619600 +500 DATA 0.381100,-1.200000,0.648900,0.381100,-1.200000,0.648900,0.000000,-1.200000,0.750000,0.000000,-1.243700,0.716200 +510 DATA 0.355700,-1.200000,0.605600,0.605600,-1.200000,0.355700,0.598800,-1.243700,0.351700,0.598800,-1.243700,0.351700 +520 DATA 0.351700,-1.243700,0.598800,0.355700,-1.200000,0.605600,0.351700,-1.243700,0.598800,0.598800,-1.243700,0.351700 +530 DATA 0.619600,-1.243700,0.363900,0.619600,-1.243700,0.363900,0.363900,-1.243700,0.619600,0.351700,-1.243700,0.598800 +540 DATA 0.363900,-1.243700,0.619600,0.619600,-1.243700,0.363900,0.648900,-1.200000,0.381100,0.648900,-1.200000,0.381100 +550 DATA 0.381100,-1.200000,0.648900,0.363900,-1.243700,0.619600,0.605600,-1.200000,0.355700,0.700000,-1.200000,0.000000 +560 DATA 0.692100,-1.243700,0.000000,0.692100,-1.243700,0.000000,0.598800,-1.243700,0.351700,0.605600,-1.200000,0.355700 +570 DATA 0.598800,-1.243700,0.351700,0.692100,-1.243700,0.000000,0.716200,-1.243700,0.000000,0.716200,-1.243700,0.000000 +580 DATA 0.619600,-1.243700,0.363900,0.598800,-1.243700,0.351700,0.619600,-1.243700,0.363900,0.716200,-1.243700,0.000000 +590 DATA 0.750000,-1.200000,0.000000,0.750000,-1.200000,0.000000,0.648900,-1.200000,0.381100,0.619600,-1.243700,0.363900 +600 DATA 0.750000,-1.200000,0.000000,0.648900,-1.200000,-0.381100,0.753000,-0.938900,-0.442300,0.753000,-0.938900,-0.442300 +610 DATA 0.870400,-0.938900,0.000000,0.750000,-1.200000,0.000000,0.870400,-0.938900,0.000000,0.753000,-0.938900,-0.442300 +620 DATA 0.833100,-0.686100,-0.489300,0.833100,-0.686100,-0.489300,0.963000,-0.686100,0.000000,0.870400,-0.938900,0.000000 +630 DATA 0.963000,-0.686100,0.000000,0.833100,-0.686100,-0.489300,0.865200,-0.450000,-0.508100,0.865200,-0.450000,-0.508100 +640 DATA 1.000000,-0.450000,0.000000,0.963000,-0.686100,0.000000,0.648900,-1.200000,-0.381100,0.381100,-1.200000,-0.648900 +650 DATA 0.442300,-0.938900,-0.753000,0.442300,-0.938900,-0.753000,0.753000,-0.938900,-0.442300,0.648900,-1.200000,-0.381100 +660 DATA 0.753000,-0.938900,-0.442300,0.442300,-0.938900,-0.753000,0.489300,-0.686100,-0.833100,0.489300,-0.686100,-0.833100 +670 DATA 0.833100,-0.686100,-0.489300,0.753000,-0.938900,-0.442300,0.833100,-0.686100,-0.489300,0.489300,-0.686100,-0.833100 +680 DATA 0.508100,-0.450000,-0.865200,0.508100,-0.450000,-0.865200,0.865200,-0.450000,-0.508100,0.833100,-0.686100,-0.489300 +690 DATA 0.381100,-1.200000,-0.648900,0.000000,-1.200000,-0.750000,0.000000,-0.938900,-0.870400,0.000000,-0.938900,-0.870400 +700 DATA 0.442300,-0.938900,-0.753000,0.381100,-1.200000,-0.648900,0.442300,-0.938900,-0.753000,0.000000,-0.938900,-0.870400 +710 DATA 0.000000,-0.686100,-0.963000,0.000000,-0.686100,-0.963000,0.489300,-0.686100,-0.833100,0.442300,-0.938900,-0.753000 +720 DATA 0.489300,-0.686100,-0.833100,0.000000,-0.686100,-0.963000,0.000000,-0.450000,-1.000000,0.000000,-0.450000,-1.000000 +730 DATA 0.508100,-0.450000,-0.865200,0.489300,-0.686100,-0.833100,0.000000,-1.200000,-0.750000,-0.381100,-1.200000,-0.648900 +740 DATA -0.442300,-0.938900,-0.753000,-0.442300,-0.938900,-0.753000,0.000000,-0.938900,-0.870400,0.000000,-1.200000,-0.750000 +750 DATA 0.000000,-0.938900,-0.870400,-0.442300,-0.938900,-0.753000,-0.489300,-0.686100,-0.833100,-0.489300,-0.686100,-0.833100 +760 DATA 0.000000,-0.686100,-0.963000,0.000000,-0.938900,-0.870400,0.000000,-0.686100,-0.963000,-0.489300,-0.686100,-0.833100 +770 DATA -0.508100,-0.450000,-0.865200,-0.508100,-0.450000,-0.865200,0.000000,-0.450000,-1.000000,0.000000,-0.686100,-0.963000 +780 DATA -0.381100,-1.200000,-0.648900,-0.648900,-1.200000,-0.381100,-0.753000,-0.938900,-0.442300,-0.753000,-0.938900,-0.442300 +790 DATA -0.442300,-0.938900,-0.753000,-0.381100,-1.200000,-0.648900,-0.442300,-0.938900,-0.753000,-0.753000,-0.938900,-0.442300 +800 DATA -0.833100,-0.686100,-0.489300,-0.833100,-0.686100,-0.489300,-0.489300,-0.686100,-0.833100,-0.442300,-0.938900,-0.753000 +810 DATA -0.489300,-0.686100,-0.833100,-0.833100,-0.686100,-0.489300,-0.865200,-0.450000,-0.508100,-0.865200,-0.450000,-0.508100 +820 DATA -0.508100,-0.450000,-0.865200,-0.489300,-0.686100,-0.833100,-0.648900,-1.200000,-0.381100,-0.750000,-1.200000,0.000000 +830 DATA -0.870400,-0.938900,0.000000,-0.870400,-0.938900,0.000000,-0.753000,-0.938900,-0.442300,-0.648900,-1.200000,-0.381100 +840 DATA -0.753000,-0.938900,-0.442300,-0.870400,-0.938900,0.000000,-0.963000,-0.686100,0.000000,-0.963000,-0.686100,0.000000 +850 DATA -0.833100,-0.686100,-0.489300,-0.753000,-0.938900,-0.442300,-0.833100,-0.686100,-0.489300,-0.963000,-0.686100,0.000000 +860 DATA -1.000000,-0.450000,0.000000,-1.000000,-0.450000,0.000000,-0.865200,-0.450000,-0.508100,-0.833100,-0.686100,-0.489300 +870 DATA -0.750000,-1.200000,0.000000,-0.648900,-1.200000,0.381100,-0.753000,-0.938900,0.442300,-0.753000,-0.938900,0.442300 +880 DATA -0.870400,-0.938900,0.000000,-0.750000,-1.200000,0.000000,-0.870400,-0.938900,0.000000,-0.753000,-0.938900,0.442300 +890 DATA -0.833100,-0.686100,0.489300,-0.833100,-0.686100,0.489300,-0.963000,-0.686100,0.000000,-0.870400,-0.938900,0.000000 +900 DATA -0.963000,-0.686100,0.000000,-0.833100,-0.686100,0.489300,-0.865200,-0.450000,0.508100,-0.865200,-0.450000,0.508100 +910 DATA -1.000000,-0.450000,0.000000,-0.963000,-0.686100,0.000000,-0.648900,-1.200000,0.381100,-0.381100,-1.200000,0.648900 +920 DATA -0.442300,-0.938900,0.753000,-0.442300,-0.938900,0.753000,-0.753000,-0.938900,0.442300,-0.648900,-1.200000,0.381100 +930 DATA -0.753000,-0.938900,0.442300,-0.442300,-0.938900,0.753000,-0.489300,-0.686100,0.833100,-0.489300,-0.686100,0.833100 +940 DATA -0.833100,-0.686100,0.489300,-0.753000,-0.938900,0.442300,-0.833100,-0.686100,0.489300,-0.489300,-0.686100,0.833100 +950 DATA -0.508100,-0.450000,0.865200,-0.508100,-0.450000,0.865200,-0.865200,-0.450000,0.508100,-0.833100,-0.686100,0.489300 +960 DATA -0.381100,-1.200000,0.648900,0.000000,-1.200000,0.750000,0.000000,-0.938900,0.870400,0.000000,-0.938900,0.870400 +970 DATA -0.442300,-0.938900,0.753000,-0.381100,-1.200000,0.648900,-0.442300,-0.938900,0.753000,0.000000,-0.938900,0.870400 +980 DATA 0.000000,-0.686100,0.963000,0.000000,-0.686100,0.963000,-0.489300,-0.686100,0.833100,-0.442300,-0.938900,0.753000 +990 DATA -0.489300,-0.686100,0.833100,0.000000,-0.686100,0.963000,0.000000,-0.450000, 1.000000,0.000000,-0.450000, 1.000000 +1000 DATA -0.508100,-0.450000,0.865200,-0.489300,-0.686100,0.833100,0.000000,-1.200000,0.750000,0.381100,-1.200000,0.648900 +1010 DATA 0.442300,-0.938900,0.753000,0.442300,-0.938900,0.753000,0.000000,-0.938900,0.870400,0.000000,-1.200000,0.750000 +1020 DATA 0.000000,-0.938900,0.870400,0.442300,-0.938900,0.753000,0.489300,-0.686100,0.833100,0.489300,-0.686100,0.833100 +1030 DATA 0.000000,-0.686100,0.963000,0.000000,-0.938900,0.870400,0.000000,-0.686100,0.963000,0.489300,-0.686100,0.833100 +1040 DATA 0.508100,-0.450000,0.865200,0.508100,-0.450000,0.865200,0.000000,-0.450000, 1.000000,0.000000,-0.686100,0.963000 +1050 DATA 0.381100,-1.200000,0.648900,0.648900,-1.200000,0.381100,0.753000,-0.938900,0.442300,0.753000,-0.938900,0.442300 +1060 DATA 0.442300,-0.938900,0.753000,0.381100,-1.200000,0.648900,0.442300,-0.938900,0.753000,0.753000,-0.938900,0.442300 +1070 DATA 0.833100,-0.686100,0.489300,0.833100,-0.686100,0.489300,0.489300,-0.686100,0.833100,0.442300,-0.938900,0.753000 +1080 DATA 0.489300,-0.686100,0.833100,0.833100,-0.686100,0.489300,0.865200,-0.450000,0.508100,0.865200,-0.450000,0.508100 +1090 DATA 0.508100,-0.450000,0.865200,0.489300,-0.686100,0.833100,0.648900,-1.200000,0.381100,0.750000,-1.200000,0.000000 +1100 DATA 0.870400,-0.938900,0.000000,0.870400,-0.938900,0.000000,0.753000,-0.938900,0.442300,0.648900,-1.200000,0.381100 +1110 DATA 0.753000,-0.938900,0.442300,0.870400,-0.938900,0.000000,0.963000,-0.686100,0.000000,0.963000,-0.686100,0.000000 +1120 DATA 0.833100,-0.686100,0.489300,0.753000,-0.938900,0.442300,0.833100,-0.686100,0.489300,0.963000,-0.686100,0.000000 +1130 DATA 1.000000,-0.450000,0.000000,1.000000,-0.450000,0.000000,0.865200,-0.450000,0.508100,0.833100,-0.686100,0.489300 +1140 DATA 1.000000,-0.450000,0.000000,0.865200,-0.450000,-0.508100,0.809100,-0.261100,-0.475200,0.809100,-0.261100,-0.475200 +1150 DATA 0.935200,-0.261100,0.000000,1.000000,-0.450000,0.000000,0.935200,-0.261100,0.000000,0.809100,-0.261100,-0.475200 +1160 DATA 0.705000,-0.138900,-0.414000,0.705000,-0.138900,-0.414000,0.814800,-0.138900,0.000000,0.935200,-0.261100,0.000000 +1170 DATA 0.814800,-0.138900,0.000000,0.705000,-0.138900,-0.414000,0.648900,-0.075000,-0.381100,0.648900,-0.075000,-0.381100 +1180 DATA 0.750000,-0.075000,0.000000,0.814800,-0.138900,0.000000,0.865200,-0.450000,-0.508100,0.508100,-0.450000,-0.865200 +1190 DATA 0.475200,-0.261100,-0.809100,0.475200,-0.261100,-0.809100,0.809100,-0.261100,-0.475200,0.865200,-0.450000,-0.508100 +1200 DATA 0.809100,-0.261100,-0.475200,0.475200,-0.261100,-0.809100,0.414000,-0.138900,-0.705000,0.414000,-0.138900,-0.705000 +1210 DATA 0.705000,-0.138900,-0.414000,0.809100,-0.261100,-0.475200,0.705000,-0.138900,-0.414000,0.414000,-0.138900,-0.705000 +1220 DATA 0.381100,-0.075000,-0.648900,0.381100,-0.075000,-0.648900,0.648900,-0.075000,-0.381100,0.705000,-0.138900,-0.414000 +1230 DATA 0.508100,-0.450000,-0.865200,0.000000,-0.450000,-1.000000,0.000000,-0.261100,-0.935200,0.000000,-0.261100,-0.935200 +1240 DATA 0.475200,-0.261100,-0.809100,0.508100,-0.450000,-0.865200,0.475200,-0.261100,-0.809100,0.000000,-0.261100,-0.935200 +1250 DATA 0.000000,-0.138900,-0.814800,0.000000,-0.138900,-0.814800,0.414000,-0.138900,-0.705000,0.475200,-0.261100,-0.809100 +1260 DATA 0.414000,-0.138900,-0.705000,0.000000,-0.138900,-0.814800,0.000000,-0.075000,-0.750000,0.000000,-0.075000,-0.750000 +1270 DATA 0.381100,-0.075000,-0.648900,0.414000,-0.138900,-0.705000,0.000000,-0.450000,-1.000000,-0.508100,-0.450000,-0.865200 +1280 DATA -0.475200,-0.261100,-0.809100,-0.475200,-0.261100,-0.809100,0.000000,-0.261100,-0.935200,0.000000,-0.450000,-1.000000 +1290 DATA 0.000000,-0.261100,-0.935200,-0.475200,-0.261100,-0.809100,-0.414000,-0.138900,-0.705000,-0.414000,-0.138900,-0.705000 +1300 DATA 0.000000,-0.138900,-0.814800,0.000000,-0.261100,-0.935200,0.000000,-0.138900,-0.814800,-0.414000,-0.138900,-0.705000 +1310 DATA -0.381100,-0.075000,-0.648900,-0.381100,-0.075000,-0.648900,0.000000,-0.075000,-0.750000,0.000000,-0.138900,-0.814800 +1320 DATA -0.508100,-0.450000,-0.865200,-0.865200,-0.450000,-0.508100,-0.809100,-0.261100,-0.475200,-0.809100,-0.261100,-0.475200 +1330 DATA -0.475200,-0.261100,-0.809100,-0.508100,-0.450000,-0.865200,-0.475200,-0.261100,-0.809100,-0.809100,-0.261100,-0.475200 +1340 DATA -0.705000,-0.138900,-0.414000,-0.705000,-0.138900,-0.414000,-0.414000,-0.138900,-0.705000,-0.475200,-0.261100,-0.809100 +1350 DATA -0.414000,-0.138900,-0.705000,-0.705000,-0.138900,-0.414000,-0.648900,-0.075000,-0.381100,-0.648900,-0.075000,-0.381100 +1360 DATA -0.381100,-0.075000,-0.648900,-0.414000,-0.138900,-0.705000,-0.865200,-0.450000,-0.508100,-1.000000,-0.450000,0.000000 +1370 DATA -0.935200,-0.261100,0.000000,-0.935200,-0.261100,0.000000,-0.809100,-0.261100,-0.475200,-0.865200,-0.450000,-0.508100 +1380 DATA -0.809100,-0.261100,-0.475200,-0.935200,-0.261100,0.000000,-0.814800,-0.138900,0.000000,-0.814800,-0.138900,0.000000 +1390 DATA -0.705000,-0.138900,-0.414000,-0.809100,-0.261100,-0.475200,-0.705000,-0.138900,-0.414000,-0.814800,-0.138900,0.000000 +1400 DATA -0.750000,-0.075000,0.000000,-0.750000,-0.075000,0.000000,-0.648900,-0.075000,-0.381100,-0.705000,-0.138900,-0.414000 +1410 DATA -1.000000,-0.450000,0.000000,-0.865200,-0.450000,0.508100,-0.809100,-0.261100,0.475200,-0.809100,-0.261100,0.475200 +1420 DATA -0.935200,-0.261100,0.000000,-1.000000,-0.450000,0.000000,-0.935200,-0.261100,0.000000,-0.809100,-0.261100,0.475200 +1430 DATA -0.705000,-0.138900,0.414000,-0.705000,-0.138900,0.414000,-0.814800,-0.138900,0.000000,-0.935200,-0.261100,0.000000 +1440 DATA -0.814800,-0.138900,0.000000,-0.705000,-0.138900,0.414000,-0.648900,-0.075000,0.381100,-0.648900,-0.075000,0.381100 +1450 DATA -0.750000,-0.075000,0.000000,-0.814800,-0.138900,0.000000,-0.865200,-0.450000,0.508100,-0.508100,-0.450000,0.865200 +1460 DATA -0.475200,-0.261100,0.809100,-0.475200,-0.261100,0.809100,-0.809100,-0.261100,0.475200,-0.865200,-0.450000,0.508100 +1470 DATA -0.809100,-0.261100,0.475200,-0.475200,-0.261100,0.809100,-0.414000,-0.138900,0.705000,-0.414000,-0.138900,0.705000 +1480 DATA -0.705000,-0.138900,0.414000,-0.809100,-0.261100,0.475200,-0.705000,-0.138900,0.414000,-0.414000,-0.138900,0.705000 +1490 DATA -0.381100,-0.075000,0.648900,-0.381100,-0.075000,0.648900,-0.648900,-0.075000,0.381100,-0.705000,-0.138900,0.414000 +1500 DATA -0.508100,-0.450000,0.865200,0.000000,-0.450000, 1.000000,0.000000,-0.261100,0.935200,0.000000,-0.261100,0.935200 +1510 DATA -0.475200,-0.261100,0.809100,-0.508100,-0.450000,0.865200,-0.475200,-0.261100,0.809100,0.000000,-0.261100,0.935200 +1520 DATA 0.000000,-0.138900,0.814800,0.000000,-0.138900,0.814800,-0.414000,-0.138900,0.705000,-0.475200,-0.261100,0.809100 +1530 DATA -0.414000,-0.138900,0.705000,0.000000,-0.138900,0.814800,0.000000,-0.075000,0.750000,0.000000,-0.075000,0.750000 +1540 DATA -0.381100,-0.075000,0.648900,-0.414000,-0.138900,0.705000,0.000000,-0.450000, 1.000000,0.508100,-0.450000,0.865200 +1550 DATA 0.475200,-0.261100,0.809100,0.475200,-0.261100,0.809100,0.000000,-0.261100,0.935200,0.000000,-0.450000, 1.000000 +1560 DATA 0.000000,-0.261100,0.935200,0.475200,-0.261100,0.809100,0.414000,-0.138900,0.705000,0.414000,-0.138900,0.705000 +1570 DATA 0.000000,-0.138900,0.814800,0.000000,-0.261100,0.935200,0.000000,-0.138900,0.814800,0.414000,-0.138900,0.705000 +1580 DATA 0.381100,-0.075000,0.648900,0.381100,-0.075000,0.648900,0.000000,-0.075000,0.750000,0.000000,-0.138900,0.814800 +1590 DATA 0.508100,-0.450000,0.865200,0.865200,-0.450000,0.508100,0.809100,-0.261100,0.475200,0.809100,-0.261100,0.475200 +1600 DATA 0.475200,-0.261100,0.809100,0.508100,-0.450000,0.865200,0.475200,-0.261100,0.809100,0.809100,-0.261100,0.475200 +1610 DATA 0.705000,-0.138900,0.414000,0.705000,-0.138900,0.414000,0.414000,-0.138900,0.705000,0.475200,-0.261100,0.809100 +1620 DATA 0.414000,-0.138900,0.705000,0.705000,-0.138900,0.414000,0.648900,-0.075000,0.381100,0.648900,-0.075000,0.381100 +1630 DATA 0.381100,-0.075000,0.648900,0.414000,-0.138900,0.705000,0.865200,-0.450000,0.508100,1.000000,-0.450000,0.000000 +1640 DATA 0.935200,-0.261100,0.000000,0.935200,-0.261100,0.000000,0.809100,-0.261100,0.475200,0.865200,-0.450000,0.508100 +1650 DATA 0.809100,-0.261100,0.475200,0.935200,-0.261100,0.000000,0.814800,-0.138900,0.000000,0.814800,-0.138900,0.000000 +1660 DATA 0.705000,-0.138900,0.414000,0.809100,-0.261100,0.475200,0.705000,-0.138900,0.414000,0.814800,-0.138900,0.000000 +1670 DATA 0.750000,-0.075000,0.000000,0.750000,-0.075000,0.000000,0.648900,-0.075000,0.381100,0.705000,-0.138900,0.414000 +1680 DATA 0.750000,-0.075000,0.000000,0.648900,-0.075000,-0.381100,0.617600,-0.038900,-0.362800,0.617600,-0.038900,-0.362800 +1690 DATA 0.713900,-0.038900,0.000000,0.750000,-0.075000,0.000000,0.713900,-0.038900,0.000000,0.617600,-0.038900,-0.362800 +1700 DATA 0.442200,-0.011100,-0.259700,0.442200,-0.011100,-0.259700,0.511100,-0.011100,0.000000,0.713900,-0.038900,0.000000 +1710 DATA 0.511100,-0.011100,0.000000,0.442200,-0.011100,-0.259700,0.000000,0.000000,-0.000000,0.000000,0.000000,-0.000000 +1720 DATA 0.000000,0.000000,-0.000000,0.511100,-0.011100,0.000000,0.648900,-0.075000,-0.381100,0.381100,-0.075000,-0.648900 +1730 DATA 0.362800,-0.038900,-0.617600,0.362800,-0.038900,-0.617600,0.617600,-0.038900,-0.362800,0.648900,-0.075000,-0.381100 +1740 DATA 0.617600,-0.038900,-0.362800,0.362800,-0.038900,-0.617600,0.259700,-0.011100,-0.442200,0.259700,-0.011100,-0.442200 +1750 DATA 0.442200,-0.011100,-0.259700,0.617600,-0.038900,-0.362800,0.442200,-0.011100,-0.259700,0.259700,-0.011100,-0.442200 +1760 DATA 0.000000,0.000000,-0.000000,0.000000,0.000000,-0.000000,0.000000,0.000000,-0.000000,0.442200,-0.011100,-0.259700 +1770 DATA 0.381100,-0.075000,-0.648900,0.000000,-0.075000,-0.750000,0.000000,-0.038900,-0.713900,0.000000,-0.038900,-0.713900 +1780 DATA 0.362800,-0.038900,-0.617600,0.381100,-0.075000,-0.648900,0.362800,-0.038900,-0.617600,0.000000,-0.038900,-0.713900 +1790 DATA 0.000000,-0.011100,-0.511100,0.000000,-0.011100,-0.511100,0.259700,-0.011100,-0.442200,0.362800,-0.038900,-0.617600 +1800 DATA 0.259700,-0.011100,-0.442200,0.000000,-0.011100,-0.511100,0.000000,0.000000,-0.000000,0.000000,0.000000,-0.000000 +1810 DATA 0.000000,0.000000,-0.000000,0.259700,-0.011100,-0.442200,0.000000,-0.075000,-0.750000,-0.381100,-0.075000,-0.648900 +1820 DATA -0.362800,-0.038900,-0.617600,-0.362800,-0.038900,-0.617600,0.000000,-0.038900,-0.713900,0.000000,-0.075000,-0.750000 +1830 DATA 0.000000,-0.038900,-0.713900,-0.362800,-0.038900,-0.617600,-0.259700,-0.011100,-0.442200,-0.259700,-0.011100,-0.442200 +1840 DATA 0.000000,-0.011100,-0.511100,0.000000,-0.038900,-0.713900,0.000000,-0.011100,-0.511100,-0.259700,-0.011100,-0.442200 +1850 DATA 0.000000,0.000000,-0.000000,0.000000,0.000000,-0.000000,0.000000,0.000000,-0.000000,0.000000,-0.011100,-0.511100 +1860 DATA -0.381100,-0.075000,-0.648900,-0.648900,-0.075000,-0.381100,-0.617600,-0.038900,-0.362800,-0.617600,-0.038900,-0.362800 +1870 DATA -0.362800,-0.038900,-0.617600,-0.381100,-0.075000,-0.648900,-0.362800,-0.038900,-0.617600,-0.617600,-0.038900,-0.362800 +1880 DATA -0.442200,-0.011100,-0.259700,-0.442200,-0.011100,-0.259700,-0.259700,-0.011100,-0.442200,-0.362800,-0.038900,-0.617600 +1890 DATA -0.259700,-0.011100,-0.442200,-0.442200,-0.011100,-0.259700,0.000000,0.000000,-0.000000,0.000000,0.000000,-0.000000 +1900 DATA 0.000000,0.000000,-0.000000,-0.259700,-0.011100,-0.442200,-0.648900,-0.075000,-0.381100,-0.750000,-0.075000,0.000000 +1910 DATA -0.713900,-0.038900,0.000000,-0.713900,-0.038900,0.000000,-0.617600,-0.038900,-0.362800,-0.648900,-0.075000,-0.381100 +1920 DATA -0.617600,-0.038900,-0.362800,-0.713900,-0.038900,0.000000,-0.511100,-0.011100,0.000000,-0.511100,-0.011100,0.000000 +1930 DATA -0.442200,-0.011100,-0.259700,-0.617600,-0.038900,-0.362800,-0.442200,-0.011100,-0.259700,-0.511100,-0.011100,0.000000 +1940 DATA 0.000000,0.000000,-0.000000,0.000000,0.000000,-0.000000,0.000000,0.000000,-0.000000,-0.442200,-0.011100,-0.259700 +1950 DATA -0.750000,-0.075000,0.000000,-0.648900,-0.075000,0.381100,-0.617600,-0.038900,0.362800,-0.617600,-0.038900,0.362800 +1960 DATA -0.713900,-0.038900,0.000000,-0.750000,-0.075000,0.000000,-0.713900,-0.038900,0.000000,-0.617600,-0.038900,0.362800 +1970 DATA -0.442200,-0.011100,0.259700,-0.442200,-0.011100,0.259700,-0.511100,-0.011100,0.000000,-0.713900,-0.038900,0.000000 +1980 DATA -0.511100,-0.011100,0.000000,-0.442200,-0.011100,0.259700,0.000000,0.000000,-0.000000,0.000000,0.000000,-0.000000 +1990 DATA 0.000000,0.000000,-0.000000,-0.511100,-0.011100,0.000000,-0.648900,-0.075000,0.381100,-0.381100,-0.075000,0.648900 +2000 DATA -0.362800,-0.038900,0.617600,-0.362800,-0.038900,0.617600,-0.617600,-0.038900,0.362800,-0.648900,-0.075000,0.381100 +2010 DATA -0.617600,-0.038900,0.362800,-0.362800,-0.038900,0.617600,-0.259700,-0.011100,0.442200,-0.259700,-0.011100,0.442200 +2020 DATA -0.442200,-0.011100,0.259700,-0.617600,-0.038900,0.362800,-0.442200,-0.011100,0.259700,-0.259700,-0.011100,0.442200 +2030 DATA 0.000000,0.000000,-0.000000,0.000000,0.000000,-0.000000,0.000000,0.000000,-0.000000,-0.442200,-0.011100,0.259700 +2040 DATA -0.381100,-0.075000,0.648900,0.000000,-0.075000,0.750000,0.000000,-0.038900,0.713900,0.000000,-0.038900,0.713900 +2050 DATA -0.362800,-0.038900,0.617600,-0.381100,-0.075000,0.648900,-0.362800,-0.038900,0.617600,0.000000,-0.038900,0.713900 +2060 DATA 0.000000,-0.011100,0.511100,0.000000,-0.011100,0.511100,-0.259700,-0.011100,0.442200,-0.362800,-0.038900,0.617600 +2070 DATA -0.259700,-0.011100,0.442200,0.000000,-0.011100,0.511100,0.000000,0.000000,-0.000000,0.000000,0.000000,-0.000000 +2080 DATA 0.000000,0.000000,-0.000000,-0.259700,-0.011100,0.442200,0.000000,-0.075000,0.750000,0.381100,-0.075000,0.648900 +2090 DATA 0.362800,-0.038900,0.617600,0.362800,-0.038900,0.617600,0.000000,-0.038900,0.713900,0.000000,-0.075000,0.750000 +2100 DATA 0.000000,-0.038900,0.713900,0.362800,-0.038900,0.617600,0.259700,-0.011100,0.442200,0.259700,-0.011100,0.442200 +2110 DATA 0.000000,-0.011100,0.511100,0.000000,-0.038900,0.713900,0.000000,-0.011100,0.511100,0.259700,-0.011100,0.442200 +2120 DATA 0.000000,0.000000,-0.000000,0.000000,0.000000,-0.000000,0.000000,0.000000,-0.000000,0.000000,-0.011100,0.511100 +2130 DATA 0.381100,-0.075000,0.648900,0.648900,-0.075000,0.381100,0.617600,-0.038900,0.362800,0.617600,-0.038900,0.362800 +2140 DATA 0.362800,-0.038900,0.617600,0.381100,-0.075000,0.648900,0.362800,-0.038900,0.617600,0.617600,-0.038900,0.362800 +2150 DATA 0.442200,-0.011100,0.259700,0.442200,-0.011100,0.259700,0.259700,-0.011100,0.442200,0.362800,-0.038900,0.617600 +2160 DATA 0.259700,-0.011100,0.442200,0.442200,-0.011100,0.259700,0.000000,0.000000,-0.000000,0.000000,0.000000,-0.000000 +2170 DATA 0.000000,0.000000,-0.000000,0.259700,-0.011100,0.442200,0.648900,-0.075000,0.381100,0.750000,-0.075000,0.000000 +2180 DATA 0.713900,-0.038900,0.000000,0.713900,-0.038900,0.000000,0.617600,-0.038900,0.362800,0.648900,-0.075000,0.381100 +2190 DATA 0.617600,-0.038900,0.362800,0.713900,-0.038900,0.000000,0.511100,-0.011100,0.000000,0.511100,-0.011100,0.000000 +2200 DATA 0.442200,-0.011100,0.259700,0.617600,-0.038900,0.362800,0.442200,-0.011100,0.259700,0.511100,-0.011100,0.000000 +2210 DATA 0.000000,0.000000,-0.000000,0.000000,0.000000,-0.000000,0.000000,0.000000,-0.000000,0.442200,-0.011100,0.259700 +2220 DATA -0.800000,-1.012500,0.000000,-0.787000,-1.041700,-0.100000,-1.115900,-1.036400,-0.100000,-1.115900,-1.036400,-0.100000 +2230 DATA -1.098100,-1.008300,0.000000,-0.800000,-1.012500,0.000000,-1.098100,-1.008300,0.000000,-1.115900,-1.036400,-0.100000 +2240 DATA -1.319300,-0.999700,-0.100000,-1.319300,-0.999700,-0.100000,-1.285200,-0.979200,0.000000,-1.098100,-1.008300,0.000000 +2250 DATA -1.285200,-0.979200,0.000000,-1.319300,-0.999700,-0.100000,-1.388900,-0.900000,-0.100000,-1.388900,-0.900000,-0.100000 +2260 DATA -1.350000,-0.900000,0.000000,-1.285200,-0.979200,0.000000,-0.787000,-1.041700,-0.100000,-0.763000,-1.095800,-0.100000 +2270 DATA -1.148900,-1.088600,-0.100000,-1.148900,-1.088600,-0.100000,-1.115900,-1.036400,-0.100000,-0.787000,-1.041700,-0.100000 +2280 DATA -1.115900,-1.036400,-0.100000,-1.148900,-1.088600,-0.100000,-1.382600,-1.037800,-0.100000,-1.382600,-1.037800,-0.100000 +2290 DATA -1.319300,-0.999700,-0.100000,-1.115900,-1.036400,-0.100000,-1.319300,-0.999700,-0.100000,-1.382600,-1.037800,-0.100000 +2300 DATA -1.461100,-0.900000,-0.100000,-1.461100,-0.900000,-0.100000,-1.388900,-0.900000,-0.100000,-1.319300,-0.999700,-0.100000 +2310 DATA -0.763000,-1.095800,-0.100000,-0.750000,-1.125000,0.000000,-1.166700,-1.116700,0.000000,-1.166700,-1.116700,0.000000 +2320 DATA -1.148900,-1.088600,-0.100000,-0.763000,-1.095800,-0.100000,-1.148900,-1.088600,-0.100000,-1.166700,-1.116700,0.000000 +2330 DATA -1.416700,-1.058300,0.000000,-1.416700,-1.058300,0.000000,-1.382600,-1.037800,-0.100000,-1.148900,-1.088600,-0.100000 +2340 DATA -1.382600,-1.037800,-0.100000,-1.416700,-1.058300,0.000000,-1.500000,-0.900000,0.000000,-1.500000,-0.900000,0.000000 +2350 DATA -1.461100,-0.900000,-0.100000,-1.382600,-1.037800,-0.100000,-0.750000,-1.125000,0.000000,-0.763000,-1.095800,0.100000 +2360 DATA -1.148900,-1.088600,0.100000,-1.148900,-1.088600,0.100000,-1.166700,-1.116700,0.000000,-0.750000,-1.125000,0.000000 +2370 DATA -1.166700,-1.116700,0.000000,-1.148900,-1.088600,0.100000,-1.382600,-1.037800,0.100000,-1.382600,-1.037800,0.100000 +2380 DATA -1.416700,-1.058300,0.000000,-1.166700,-1.116700,0.000000,-1.416700,-1.058300,0.000000,-1.382600,-1.037800,0.100000 +2390 DATA -1.461100,-0.900000,0.100000,-1.461100,-0.900000,0.100000,-1.500000,-0.900000,0.000000,-1.416700,-1.058300,0.000000 +2400 DATA -0.763000,-1.095800,0.100000,-0.787000,-1.041700,0.100000,-1.115900,-1.036400,0.100000,-1.115900,-1.036400,0.100000 +2410 DATA -1.148900,-1.088600,0.100000,-0.763000,-1.095800,0.100000,-1.148900,-1.088600,0.100000,-1.115900,-1.036400,0.100000 +2420 DATA -1.319300,-0.999700,0.100000,-1.319300,-0.999700,0.100000,-1.382600,-1.037800,0.100000,-1.148900,-1.088600,0.100000 +2430 DATA -1.382600,-1.037800,0.100000,-1.319300,-0.999700,0.100000,-1.388900,-0.900000,0.100000,-1.388900,-0.900000,0.100000 +2440 DATA -1.461100,-0.900000,0.100000,-1.382600,-1.037800,0.100000,-0.787000,-1.041700,0.100000,-0.800000,-1.012500,0.000000 +2450 DATA -1.098100,-1.008300,0.000000,-1.098100,-1.008300,0.000000,-1.115900,-1.036400,0.100000,-0.787000,-1.041700,0.100000 +2460 DATA -1.115900,-1.036400,0.100000,-1.098100,-1.008300,0.000000,-1.285200,-0.979200,0.000000,-1.285200,-0.979200,0.000000 +2470 DATA -1.319300,-0.999700,0.100000,-1.115900,-1.036400,0.100000,-1.319300,-0.999700,0.100000,-1.285200,-0.979200,0.000000 +2480 DATA -1.350000,-0.900000,0.000000,-1.350000,-0.900000,0.000000,-1.388900,-0.900000,0.100000,-1.319300,-0.999700,0.100000 +2490 DATA -1.350000,-0.900000,0.000000,-1.388900,-0.900000,-0.100000,-1.347500,-0.738500,-0.100000,-1.347500,-0.738500,-0.100000 +2500 DATA -1.314800,-0.758300,0.000000,-1.350000,-0.900000,0.000000,-1.314800,-0.758300,0.000000,-1.347500,-0.738500,-0.100000 +2510 DATA -1.216700,-0.562900,-0.100000,-1.216700,-0.562900,-0.100000,-1.201900,-0.591700,0.000000,-1.314800,-0.758300,0.000000 +2520 DATA -1.201900,-0.591700,0.000000,-1.216700,-0.562900,-0.100000,-0.987000,-0.411100,-0.100000,-0.987000,-0.411100,-0.100000 +2530 DATA -1.000000,-0.450000,0.000000,-1.201900,-0.591700,0.000000,-1.388900,-0.900000,-0.100000,-1.461100,-0.900000,-0.100000 +2540 DATA -1.408100,-0.701700,-0.100000,-1.408100,-0.701700,-0.100000,-1.347500,-0.738500,-0.100000,-1.388900,-0.900000,-0.100000 +2550 DATA -1.347500,-0.738500,-0.100000,-1.408100,-0.701700,-0.100000,-1.244400,-0.509400,-0.100000,-1.244400,-0.509400,-0.100000 +2560 DATA -1.216700,-0.562900,-0.100000,-1.347500,-0.738500,-0.100000,-1.216700,-0.562900,-0.100000,-1.244400,-0.509400,-0.100000 +2570 DATA -0.963000,-0.338900,-0.100000,-0.963000,-0.338900,-0.100000,-0.987000,-0.411100,-0.100000,-1.216700,-0.562900,-0.100000 +2580 DATA -1.461100,-0.900000,-0.100000,-1.500000,-0.900000,0.000000,-1.440700,-0.681900,0.000000,-1.440700,-0.681900,0.000000 +2590 DATA -1.408100,-0.701700,-0.100000,-1.461100,-0.900000,-0.100000,-1.408100,-0.701700,-0.100000,-1.440700,-0.681900,0.000000 +2600 DATA -1.259300,-0.480600,0.000000,-1.259300,-0.480600,0.000000,-1.244400,-0.509400,-0.100000,-1.408100,-0.701700,-0.100000 +2610 DATA -1.244400,-0.509400,-0.100000,-1.259300,-0.480600,0.000000,-0.950000,-0.300000,0.000000,-0.950000,-0.300000,0.000000 +2620 DATA -0.963000,-0.338900,-0.100000,-1.244400,-0.509400,-0.100000,-1.500000,-0.900000,0.000000,-1.461100,-0.900000,0.100000 +2630 DATA -1.408100,-0.701700,0.100000,-1.408100,-0.701700,0.100000,-1.440700,-0.681900,0.000000,-1.500000,-0.900000,0.000000 +2640 DATA -1.440700,-0.681900,0.000000,-1.408100,-0.701700,0.100000,-1.244400,-0.509400,0.100000,-1.244400,-0.509400,0.100000 +2650 DATA -1.259300,-0.480600,0.000000,-1.440700,-0.681900,0.000000,-1.259300,-0.480600,0.000000,-1.244400,-0.509400,0.100000 +2660 DATA -0.963000,-0.338900,0.100000,-0.963000,-0.338900,0.100000,-0.950000,-0.300000,0.000000,-1.259300,-0.480600,0.000000 +2670 DATA -1.461100,-0.900000,0.100000,-1.388900,-0.900000,0.100000,-1.347500,-0.738500,0.100000,-1.347500,-0.738500,0.100000 +2680 DATA -1.408100,-0.701700,0.100000,-1.461100,-0.900000,0.100000,-1.408100,-0.701700,0.100000,-1.347500,-0.738500,0.100000 +2690 DATA -1.216700,-0.562900,0.100000,-1.216700,-0.562900,0.100000,-1.244400,-0.509400,0.100000,-1.408100,-0.701700,0.100000 +2700 DATA -1.244400,-0.509400,0.100000,-1.216700,-0.562900,0.100000,-0.987000,-0.411100,0.100000,-0.987000,-0.411100,0.100000 +2710 DATA -0.963000,-0.338900,0.100000,-1.244400,-0.509400,0.100000,-1.388900,-0.900000,0.100000,-1.350000,-0.900000,0.000000 +2720 DATA -1.314800,-0.758300,0.000000,-1.314800,-0.758300,0.000000,-1.347500,-0.738500,0.100000,-1.388900,-0.900000,0.100000 +2730 DATA -1.347500,-0.738500,0.100000,-1.314800,-0.758300,0.000000,-1.201900,-0.591700,0.000000,-1.201900,-0.591700,0.000000 +2740 DATA -1.216700,-0.562900,0.100000,-1.347500,-0.738500,0.100000,-1.216700,-0.562900,0.100000,-1.201900,-0.591700,0.000000 +2750 DATA -1.000000,-0.450000,0.000000,-1.000000,-0.450000,0.000000,-0.987000,-0.411100,0.100000,-1.216700,-0.562900,0.100000 +2760 DATA 0.850000,-0.712500,0.000000,0.850000,-0.605600,-0.220000,1.169800,-0.737100,-0.184600,1.169800,-0.737100,-0.184600 +2770 DATA 1.135200,-0.805600,0.000000,0.850000,-0.712500,0.000000,1.135200,-0.805600,0.000000,1.169800,-0.737100,-0.184600 +2780 DATA 1.274700,-0.981400,-0.118800,1.274700,-0.981400,-0.118800,1.231500,-1.006900,0.000000,1.135200,-0.805600,0.000000 +2790 DATA 1.231500,-1.006900,0.000000,1.274700,-0.981400,-0.118800,1.427800,-1.200000,-0.083300,1.427800,-1.200000,-0.083300 +2800 DATA 1.350000,-1.200000,0.000000,1.231500,-1.006900,0.000000,0.850000,-0.605600,-0.220000,0.850000,-0.406900,-0.220000 +2810 DATA 1.234000,-0.610100,-0.184600,1.234000,-0.610100,-0.184600,1.169800,-0.737100,-0.184600,0.850000,-0.605600,-0.220000 +2820 DATA 1.169800,-0.737100,-0.184600,1.234000,-0.610100,-0.184600,1.354900,-0.933900,-0.118800,1.354900,-0.933900,-0.118800 +2830 DATA 1.274700,-0.981400,-0.118800,1.169800,-0.737100,-0.184600,1.274700,-0.981400,-0.118800,1.354900,-0.933900,-0.118800 +2840 DATA 1.572200,-1.200000,-0.083300,1.572200,-1.200000,-0.083300,1.427800,-1.200000,-0.083300,1.274700,-0.981400,-0.118800 +2850 DATA 0.850000,-0.406900,-0.220000,0.850000,-0.300000,0.000000,1.268500,-0.541700,0.000000,1.268500,-0.541700,0.000000 +2860 DATA 1.234000,-0.610100,-0.184600,0.850000,-0.406900,-0.220000,1.234000,-0.610100,-0.184600,1.268500,-0.541700,0.000000 +2870 DATA 1.398100,-0.908300,0.000000,1.398100,-0.908300,0.000000,1.354900,-0.933900,-0.118800,1.234000,-0.610100,-0.184600 +2880 DATA 1.354900,-0.933900,-0.118800,1.398100,-0.908300,0.000000,1.650000,-1.200000,0.000000,1.650000,-1.200000,0.000000 +2890 DATA 1.572200,-1.200000,-0.083300,1.354900,-0.933900,-0.118800,0.850000,-0.300000,0.000000,0.850000,-0.406900,0.220000 +2900 DATA 1.234000,-0.610100,0.184600,1.234000,-0.610100,0.184600,1.268500,-0.541700,0.000000,0.850000,-0.300000,0.000000 +2910 DATA 1.268500,-0.541700,0.000000,1.234000,-0.610100,0.184600,1.354900,-0.933900,0.118800,1.354900,-0.933900,0.118800 +2920 DATA 1.398100,-0.908300,0.000000,1.268500,-0.541700,0.000000,1.398100,-0.908300,0.000000,1.354900,-0.933900,0.118800 +2930 DATA 1.572200,-1.200000,0.083300,1.572200,-1.200000,0.083300,1.650000,-1.200000,0.000000,1.398100,-0.908300,0.000000 +2940 DATA 0.850000,-0.406900,0.220000,0.850000,-0.605600,0.220000,1.169800,-0.737100,0.184600,1.169800,-0.737100,0.184600 +2950 DATA 1.234000,-0.610100,0.184600,0.850000,-0.406900,0.220000,1.234000,-0.610100,0.184600,1.169800,-0.737100,0.184600 +2960 DATA 1.274700,-0.981400,0.118800,1.274700,-0.981400,0.118800,1.354900,-0.933900,0.118800,1.234000,-0.610100,0.184600 +2970 DATA 1.354900,-0.933900,0.118800,1.274700,-0.981400,0.118800,1.427800,-1.200000,0.083300,1.427800,-1.200000,0.083300 +2980 DATA 1.572200,-1.200000,0.083300,1.354900,-0.933900,0.118800,0.850000,-0.605600,0.220000,0.850000,-0.712500,0.000000 +2990 DATA 1.135200,-0.805600,0.000000,1.135200,-0.805600,0.000000,1.169800,-0.737100,0.184600,0.850000,-0.605600,0.220000 +3000 DATA 1.169800,-0.737100,0.184600,1.135200,-0.805600,0.000000,1.231500,-1.006900,0.000000,1.231500,-1.006900,0.000000 +3010 DATA 1.274700,-0.981400,0.118800,1.169800,-0.737100,0.184600,1.274700,-0.981400,0.118800,1.231500,-1.006900,0.000000 +3020 DATA 1.350000,-1.200000,0.000000,1.350000,-1.200000,0.000000,1.427800,-1.200000,0.083300,1.274700,-0.981400,0.118800 +3030 DATA 1.350000,-1.200000,0.000000,1.427800,-1.200000,-0.083300,1.478900,-1.227200,-0.074700,1.478900,-1.227200,-0.074700 +3040 DATA 1.396300,-1.225000,0.000000,1.350000,-1.200000,0.000000,1.396300,-1.225000,0.000000,1.478900,-1.227200,-0.074700 +3050 DATA 1.491200,-1.227700,-0.058600,1.491200,-1.227700,-0.058600,1.420400,-1.225000,0.000000,1.396300,-1.225000,0.000000 +3060 DATA 1.420400,-1.225000,0.000000,1.491200,-1.227700,-0.058600,1.451900,-1.200000,-0.050000,1.451900,-1.200000,-0.050000 +3070 DATA 1.400000,-1.200000,0.000000,1.420400,-1.225000,0.000000,1.427800,-1.200000,-0.083300,1.572200,-1.200000,-0.083300 +3080 DATA 1.632200,-1.231200,-0.074700,1.632200,-1.231200,-0.074700,1.478900,-1.227200,-0.074700,1.427800,-1.200000,-0.083300 +3090 DATA 1.478900,-1.227200,-0.074700,1.632200,-1.231200,-0.074700,1.622700,-1.232700,-0.058600,1.622700,-1.232700,-0.058600 +3100 DATA 1.491200,-1.227700,-0.058600,1.478900,-1.227200,-0.074700,1.491200,-1.227700,-0.058600,1.622700,-1.232700,-0.058600 +3110 DATA 1.548100,-1.200000,-0.050000,1.548100,-1.200000,-0.050000,1.451900,-1.200000,-0.050000,1.491200,-1.227700,-0.058600 +3120 DATA 1.572200,-1.200000,-0.083300,1.650000,-1.200000,0.000000,1.714800,-1.233300,0.000000,1.714800,-1.233300,0.000000 +3130 DATA 1.632200,-1.231200,-0.074700,1.572200,-1.200000,-0.083300,1.632200,-1.231200,-0.074700,1.714800,-1.233300,0.000000 +3140 DATA 1.693500,-1.235400,0.000000,1.693500,-1.235400,0.000000,1.622700,-1.232700,-0.058600,1.632200,-1.231200,-0.074700 +3150 DATA 1.622700,-1.232700,-0.058600,1.693500,-1.235400,0.000000,1.600000,-1.200000,0.000000,1.600000,-1.200000,0.000000 +3160 DATA 1.548100,-1.200000,-0.050000,1.622700,-1.232700,-0.058600,1.650000,-1.200000,0.000000,1.572200,-1.200000,0.083300 +3170 DATA 1.632200,-1.231200,0.074700,1.632200,-1.231200,0.074700,1.714800,-1.233300,0.000000,1.650000,-1.200000,0.000000 +3180 DATA 1.714800,-1.233300,0.000000,1.632200,-1.231200,0.074700,1.622700,-1.232700,0.058600,1.622700,-1.232700,0.058600 +3190 DATA 1.693500,-1.235400,0.000000,1.714800,-1.233300,0.000000,1.693500,-1.235400,0.000000,1.622700,-1.232700,0.058600 +3200 DATA 1.548100,-1.200000,0.050000,1.548100,-1.200000,0.050000,1.600000,-1.200000,0.000000,1.693500,-1.235400,0.000000 +3210 DATA 1.572200,-1.200000,0.083300,1.427800,-1.200000,0.083300,1.478900,-1.227200,0.074700,1.478900,-1.227200,0.074700 +3220 DATA 1.632200,-1.231200,0.074700,1.572200,-1.200000,0.083300,1.632200,-1.231200,0.074700,1.478900,-1.227200,0.074700 +3230 DATA 1.491200,-1.227700,0.058600,1.491200,-1.227700,0.058600,1.622700,-1.232700,0.058600,1.632200,-1.231200,0.074700 +3240 DATA 1.622700,-1.232700,0.058600,1.491200,-1.227700,0.058600,1.451900,-1.200000,0.050000,1.451900,-1.200000,0.050000 +3250 DATA 1.548100,-1.200000,0.050000,1.622700,-1.232700,0.058600,1.427800,-1.200000,0.083300,1.350000,-1.200000,0.000000 +3260 DATA 1.396300,-1.225000,0.000000,1.396300,-1.225000,0.000000,1.478900,-1.227200,0.074700,1.427800,-1.200000,0.083300 +3270 DATA 1.478900,-1.227200,0.074700,1.396300,-1.225000,0.000000,1.420400,-1.225000,0.000000,1.420400,-1.225000,0.000000 +3280 DATA 1.491200,-1.227700,0.058600,1.478900,-1.227200,0.074700,1.491200,-1.227700,0.058600,1.420400,-1.225000,0.000000 +3290 DATA 1.400000,-1.200000,0.000000,1.400000,-1.200000,0.000000,1.451900,-1.200000,0.050000,1.491200,-1.227700,0.058600 +3300 DATA 0.000000,-1.575000,0.000000,0.000000,-1.575000,0.000000,0.157100,-1.533300,-0.092400,0.157100,-1.533300,-0.092400 +3310 DATA 0.181500,-1.533300,0.000000,0.000000,-1.575000,0.000000,0.181500,-1.533300,0.000000,0.157100,-1.533300,-0.092400 +3320 DATA 0.102600,-1.441700,-0.060300,0.102600,-1.441700,-0.060300,0.118500,-1.441700,0.000000,0.181500,-1.533300,0.000000 +3330 DATA 0.118500,-1.441700,0.000000,0.102600,-1.441700,-0.060300,0.086500,-1.350000,-0.050800,0.086500,-1.350000,-0.050800 +3340 DATA 0.100000,-1.350000,0.000000,0.118500,-1.441700,0.000000,0.000000,-1.575000,0.000000,0.000000,-1.575000,0.000000 +3350 DATA 0.092400,-1.533300,-0.157100,0.092400,-1.533300,-0.157100,0.157100,-1.533300,-0.092400,0.000000,-1.575000,0.000000 +3360 DATA 0.157100,-1.533300,-0.092400,0.092400,-1.533300,-0.157100,0.060300,-1.441700,-0.102600,0.060300,-1.441700,-0.102600 +3370 DATA 0.102600,-1.441700,-0.060300,0.157100,-1.533300,-0.092400,0.102600,-1.441700,-0.060300,0.060300,-1.441700,-0.102600 +3380 DATA 0.050800,-1.350000,-0.086500,0.050800,-1.350000,-0.086500,0.086500,-1.350000,-0.050800,0.102600,-1.441700,-0.060300 +3390 DATA 0.000000,-1.575000,0.000000,0.000000,-1.575000,0.000000,0.000000,-1.533300,-0.181500,0.000000,-1.533300,-0.181500 +3400 DATA 0.092400,-1.533300,-0.157100,0.000000,-1.575000,0.000000,0.092400,-1.533300,-0.157100,0.000000,-1.533300,-0.181500 +3410 DATA 0.000000,-1.441700,-0.118500,0.000000,-1.441700,-0.118500,0.060300,-1.441700,-0.102600,0.092400,-1.533300,-0.157100 +3420 DATA 0.060300,-1.441700,-0.102600,0.000000,-1.441700,-0.118500,0.000000,-1.350000,-0.100000,0.000000,-1.350000,-0.100000 +3430 DATA 0.050800,-1.350000,-0.086500,0.060300,-1.441700,-0.102600,0.000000,-1.575000,0.000000,0.000000,-1.575000,0.000000 +3440 DATA -0.092400,-1.533300,-0.157100,-0.092400,-1.533300,-0.157100,0.000000,-1.533300,-0.181500,0.000000,-1.575000,0.000000 +3450 DATA 0.000000,-1.533300,-0.181500,-0.092400,-1.533300,-0.157100,-0.060300,-1.441700,-0.102600,-0.060300,-1.441700,-0.102600 +3460 DATA 0.000000,-1.441700,-0.118500,0.000000,-1.533300,-0.181500,0.000000,-1.441700,-0.118500,-0.060300,-1.441700,-0.102600 +3470 DATA -0.050800,-1.350000,-0.086500,-0.050800,-1.350000,-0.086500,0.000000,-1.350000,-0.100000,0.000000,-1.441700,-0.118500 +3480 DATA 0.000000,-1.575000,0.000000,0.000000,-1.575000,0.000000,-0.157100,-1.533300,-0.092400,-0.157100,-1.533300,-0.092400 +3490 DATA -0.092400,-1.533300,-0.157100,0.000000,-1.575000,0.000000,-0.092400,-1.533300,-0.157100,-0.157100,-1.533300,-0.092400 +3500 DATA -0.102600,-1.441700,-0.060300,-0.102600,-1.441700,-0.060300,-0.060300,-1.441700,-0.102600,-0.092400,-1.533300,-0.157100 +3510 DATA -0.060300,-1.441700,-0.102600,-0.102600,-1.441700,-0.060300,-0.086500,-1.350000,-0.050800,-0.086500,-1.350000,-0.050800 +3520 DATA -0.050800,-1.350000,-0.086500,-0.060300,-1.441700,-0.102600,0.000000,-1.575000,0.000000,0.000000,-1.575000,0.000000 +3530 DATA -0.181500,-1.533300,0.000000,-0.181500,-1.533300,0.000000,-0.157100,-1.533300,-0.092400,0.000000,-1.575000,0.000000 +3540 DATA -0.157100,-1.533300,-0.092400,-0.181500,-1.533300,0.000000,-0.118500,-1.441700,0.000000,-0.118500,-1.441700,0.000000 +3550 DATA -0.102600,-1.441700,-0.060300,-0.157100,-1.533300,-0.092400,-0.102600,-1.441700,-0.060300,-0.118500,-1.441700,0.000000 +3560 DATA -0.100000,-1.350000,0.000000,-0.100000,-1.350000,0.000000,-0.086500,-1.350000,-0.050800,-0.102600,-1.441700,-0.060300 +3570 DATA 0.000000,-1.575000,0.000000,0.000000,-1.575000,0.000000,-0.157100,-1.533300,0.092400,-0.157100,-1.533300,0.092400 +3580 DATA -0.181500,-1.533300,0.000000,0.000000,-1.575000,0.000000,-0.181500,-1.533300,0.000000,-0.157100,-1.533300,0.092400 +3590 DATA -0.102600,-1.441700,0.060300,-0.102600,-1.441700,0.060300,-0.118500,-1.441700,0.000000,-0.181500,-1.533300,0.000000 +3600 DATA -0.118500,-1.441700,0.000000,-0.102600,-1.441700,0.060300,-0.086500,-1.350000,0.050800,-0.086500,-1.350000,0.050800 +3610 DATA -0.100000,-1.350000,0.000000,-0.118500,-1.441700,0.000000,0.000000,-1.575000,0.000000,0.000000,-1.575000,0.000000 +3620 DATA -0.092400,-1.533300,0.157100,-0.092400,-1.533300,0.157100,-0.157100,-1.533300,0.092400,0.000000,-1.575000,0.000000 +3630 DATA -0.157100,-1.533300,0.092400,-0.092400,-1.533300,0.157100,-0.060300,-1.441700,0.102600,-0.060300,-1.441700,0.102600 +3640 DATA -0.102600,-1.441700,0.060300,-0.157100,-1.533300,0.092400,-0.102600,-1.441700,0.060300,-0.060300,-1.441700,0.102600 +3650 DATA -0.050800,-1.350000,0.086500,-0.050800,-1.350000,0.086500,-0.086500,-1.350000,0.050800,-0.102600,-1.441700,0.060300 +3660 DATA 0.000000,-1.575000,0.000000,0.000000,-1.575000,0.000000,0.000000,-1.533300,0.181500,0.000000,-1.533300,0.181500 +3670 DATA -0.092400,-1.533300,0.157100,0.000000,-1.575000,0.000000,-0.092400,-1.533300,0.157100,0.000000,-1.533300,0.181500 +3680 DATA 0.000000,-1.441700,0.118500,0.000000,-1.441700,0.118500,-0.060300,-1.441700,0.102600,-0.092400,-1.533300,0.157100 +3690 DATA -0.060300,-1.441700,0.102600,0.000000,-1.441700,0.118500,0.000000,-1.350000,0.100000,0.000000,-1.350000,0.100000 +3700 DATA -0.050800,-1.350000,0.086500,-0.060300,-1.441700,0.102600,0.000000,-1.575000,0.000000,0.000000,-1.575000,0.000000 +3710 DATA 0.092400,-1.533300,0.157100,0.092400,-1.533300,0.157100,0.000000,-1.533300,0.181500,0.000000,-1.575000,0.000000 +3720 DATA 0.000000,-1.533300,0.181500,0.092400,-1.533300,0.157100,0.060300,-1.441700,0.102600,0.060300,-1.441700,0.102600 +3730 DATA 0.000000,-1.441700,0.118500,0.000000,-1.533300,0.181500,0.000000,-1.441700,0.118500,0.060300,-1.441700,0.102600 +3740 DATA 0.050800,-1.350000,0.086500,0.050800,-1.350000,0.086500,0.000000,-1.350000,0.100000,0.000000,-1.441700,0.118500 +3750 DATA 0.000000,-1.575000,0.000000,0.000000,-1.575000,0.000000,0.157100,-1.533300,0.092400,0.157100,-1.533300,0.092400 +3760 DATA 0.092400,-1.533300,0.157100,0.000000,-1.575000,0.000000,0.092400,-1.533300,0.157100,0.157100,-1.533300,0.092400 +3770 DATA 0.102600,-1.441700,0.060300,0.102600,-1.441700,0.060300,0.060300,-1.441700,0.102600,0.092400,-1.533300,0.157100 +3780 DATA 0.060300,-1.441700,0.102600,0.102600,-1.441700,0.060300,0.086500,-1.350000,0.050800,0.086500,-1.350000,0.050800 +3790 DATA 0.050800,-1.350000,0.086500,0.060300,-1.441700,0.102600,0.000000,-1.575000,0.000000,0.000000,-1.575000,0.000000 +3800 DATA 0.181500,-1.533300,0.000000,0.181500,-1.533300,0.000000,0.157100,-1.533300,0.092400,0.000000,-1.575000,0.000000 +3810 DATA 0.157100,-1.533300,0.092400,0.181500,-1.533300,0.000000,0.118500,-1.441700,0.000000,0.118500,-1.441700,0.000000 +3820 DATA 0.102600,-1.441700,0.060300,0.157100,-1.533300,0.092400,0.102600,-1.441700,0.060300,0.118500,-1.441700,0.000000 +3830 DATA 0.100000,-1.350000,0.000000,0.100000,-1.350000,0.000000,0.086500,-1.350000,0.050800,0.102600,-1.441700,0.060300 +3840 DATA 0.100000,-1.350000,0.000000,0.086500,-1.350000,-0.050800,0.248300,-1.294400,-0.145900,0.248300,-1.294400,-0.145900 +3850 DATA 0.287000,-1.294400,0.000000,0.100000,-1.350000,0.000000,0.287000,-1.294400,0.000000,0.248300,-1.294400,-0.145900 +3860 DATA 0.458200,-1.255600,-0.269100,0.458200,-1.255600,-0.269100,0.529600,-1.255600,0.000000,0.287000,-1.294400,0.000000 +3870 DATA 0.529600,-1.255600,0.000000,0.458200,-1.255600,-0.269100,0.562400,-1.200000,-0.330300,0.562400,-1.200000,-0.330300 +3880 DATA 0.650000,-1.200000,0.000000,0.529600,-1.255600,0.000000,0.086500,-1.350000,-0.050800,0.050800,-1.350000,-0.086500 +3890 DATA 0.145900,-1.294400,-0.248300,0.145900,-1.294400,-0.248300,0.248300,-1.294400,-0.145900,0.086500,-1.350000,-0.050800 +3900 DATA 0.248300,-1.294400,-0.145900,0.145900,-1.294400,-0.248300,0.269100,-1.255600,-0.458200,0.269100,-1.255600,-0.458200 +3910 DATA 0.458200,-1.255600,-0.269100,0.248300,-1.294400,-0.145900,0.458200,-1.255600,-0.269100,0.269100,-1.255600,-0.458200 +3920 DATA 0.330300,-1.200000,-0.562400,0.330300,-1.200000,-0.562400,0.562400,-1.200000,-0.330300,0.458200,-1.255600,-0.269100 +3930 DATA 0.050800,-1.350000,-0.086500,0.000000,-1.350000,-0.100000,0.000000,-1.294400,-0.287000,0.000000,-1.294400,-0.287000 +3940 DATA 0.145900,-1.294400,-0.248300,0.050800,-1.350000,-0.086500,0.145900,-1.294400,-0.248300,0.000000,-1.294400,-0.287000 +3950 DATA 0.000000,-1.255600,-0.529600,0.000000,-1.255600,-0.529600,0.269100,-1.255600,-0.458200,0.145900,-1.294400,-0.248300 +3960 DATA 0.269100,-1.255600,-0.458200,0.000000,-1.255600,-0.529600,0.000000,-1.200000,-0.650000,0.000000,-1.200000,-0.650000 +3970 DATA 0.330300,-1.200000,-0.562400,0.269100,-1.255600,-0.458200,0.000000,-1.350000,-0.100000,-0.050800,-1.350000,-0.086500 +3980 DATA -0.145900,-1.294400,-0.248300,-0.145900,-1.294400,-0.248300,0.000000,-1.294400,-0.287000,0.000000,-1.350000,-0.100000 +3990 DATA 0.000000,-1.294400,-0.287000,-0.145900,-1.294400,-0.248300,-0.269100,-1.255600,-0.458200,-0.269100,-1.255600,-0.458200 +4000 DATA 0.000000,-1.255600,-0.529600,0.000000,-1.294400,-0.287000,0.000000,-1.255600,-0.529600,-0.269100,-1.255600,-0.458200 +4010 DATA -0.330300,-1.200000,-0.562400,-0.330300,-1.200000,-0.562400,0.000000,-1.200000,-0.650000,0.000000,-1.255600,-0.529600 +4020 DATA -0.050800,-1.350000,-0.086500,-0.086500,-1.350000,-0.050800,-0.248300,-1.294400,-0.145900,-0.248300,-1.294400,-0.145900 +4030 DATA -0.145900,-1.294400,-0.248300,-0.050800,-1.350000,-0.086500,-0.145900,-1.294400,-0.248300,-0.248300,-1.294400,-0.145900 +4040 DATA -0.458200,-1.255600,-0.269100,-0.458200,-1.255600,-0.269100,-0.269100,-1.255600,-0.458200,-0.145900,-1.294400,-0.248300 +4050 DATA -0.269100,-1.255600,-0.458200,-0.458200,-1.255600,-0.269100,-0.562400,-1.200000,-0.330300,-0.562400,-1.200000,-0.330300 +4060 DATA -0.330300,-1.200000,-0.562400,-0.269100,-1.255600,-0.458200,-0.086500,-1.350000,-0.050800,-0.100000,-1.350000,0.000000 +4070 DATA -0.287000,-1.294400,0.000000,-0.287000,-1.294400,0.000000,-0.248300,-1.294400,-0.145900,-0.086500,-1.350000,-0.050800 +4080 DATA -0.248300,-1.294400,-0.145900,-0.287000,-1.294400,0.000000,-0.529600,-1.255600,0.000000,-0.529600,-1.255600,0.000000 +4090 DATA -0.458200,-1.255600,-0.269100,-0.248300,-1.294400,-0.145900,-0.458200,-1.255600,-0.269100,-0.529600,-1.255600,0.000000 +4100 DATA -0.650000,-1.200000,0.000000,-0.650000,-1.200000,0.000000,-0.562400,-1.200000,-0.330300,-0.458200,-1.255600,-0.269100 +4110 DATA -0.100000,-1.350000,0.000000,-0.086500,-1.350000,0.050800,-0.248300,-1.294400,0.145900,-0.248300,-1.294400,0.145900 +4120 DATA -0.287000,-1.294400,0.000000,-0.100000,-1.350000,0.000000,-0.287000,-1.294400,0.000000,-0.248300,-1.294400,0.145900 +4130 DATA -0.458200,-1.255600,0.269100,-0.458200,-1.255600,0.269100,-0.529600,-1.255600,0.000000,-0.287000,-1.294400,0.000000 +4140 DATA -0.529600,-1.255600,0.000000,-0.458200,-1.255600,0.269100,-0.562400,-1.200000,0.330300,-0.562400,-1.200000,0.330300 +4150 DATA -0.650000,-1.200000,0.000000,-0.529600,-1.255600,0.000000,-0.086500,-1.350000,0.050800,-0.050800,-1.350000,0.086500 +4160 DATA -0.145900,-1.294400,0.248300,-0.145900,-1.294400,0.248300,-0.248300,-1.294400,0.145900,-0.086500,-1.350000,0.050800 +4170 DATA -0.248300,-1.294400,0.145900,-0.145900,-1.294400,0.248300,-0.269100,-1.255600,0.458200,-0.269100,-1.255600,0.458200 +4180 DATA -0.458200,-1.255600,0.269100,-0.248300,-1.294400,0.145900,-0.458200,-1.255600,0.269100,-0.269100,-1.255600,0.458200 +4190 DATA -0.330300,-1.200000,0.562400,-0.330300,-1.200000,0.562400,-0.562400,-1.200000,0.330300,-0.458200,-1.255600,0.269100 +4200 DATA -0.050800,-1.350000,0.086500,0.000000,-1.350000,0.100000,0.000000,-1.294400,0.287000,0.000000,-1.294400,0.287000 +4210 DATA -0.145900,-1.294400,0.248300,-0.050800,-1.350000,0.086500,-0.145900,-1.294400,0.248300,0.000000,-1.294400,0.287000 +4220 DATA 0.000000,-1.255600,0.529600,0.000000,-1.255600,0.529600,-0.269100,-1.255600,0.458200,-0.145900,-1.294400,0.248300 +4230 DATA -0.269100,-1.255600,0.458200,0.000000,-1.255600,0.529600,0.000000,-1.200000,0.650000,0.000000,-1.200000,0.650000 +4240 DATA -0.330300,-1.200000,0.562400,-0.269100,-1.255600,0.458200,0.000000,-1.350000,0.100000,0.050800,-1.350000,0.086500 +4250 DATA 0.145900,-1.294400,0.248300,0.145900,-1.294400,0.248300,0.000000,-1.294400,0.287000,0.000000,-1.350000,0.100000 +4260 DATA 0.000000,-1.294400,0.287000,0.145900,-1.294400,0.248300,0.269100,-1.255600,0.458200,0.269100,-1.255600,0.458200 +4270 DATA 0.000000,-1.255600,0.529600,0.000000,-1.294400,0.287000,0.000000,-1.255600,0.529600,0.269100,-1.255600,0.458200 +4280 DATA 0.330300,-1.200000,0.562400,0.330300,-1.200000,0.562400,0.000000,-1.200000,0.650000,0.000000,-1.255600,0.529600 +4290 DATA 0.050800,-1.350000,0.086500,0.086500,-1.350000,0.050800,0.248300,-1.294400,0.145900,0.248300,-1.294400,0.145900 +4300 DATA 0.145900,-1.294400,0.248300,0.050800,-1.350000,0.086500,0.145900,-1.294400,0.248300,0.248300,-1.294400,0.145900 +4310 DATA 0.458200,-1.255600,0.269100,0.458200,-1.255600,0.269100,0.269100,-1.255600,0.458200,0.145900,-1.294400,0.248300 +4320 DATA 0.269100,-1.255600,0.458200,0.458200,-1.255600,0.269100,0.562400,-1.200000,0.330300,0.562400,-1.200000,0.330300 +4330 DATA 0.330300,-1.200000,0.562400,0.269100,-1.255600,0.458200,0.086500,-1.350000,0.050800,0.100000,-1.350000,0.000000 +4340 DATA 0.287000,-1.294400,0.000000,0.287000,-1.294400,0.000000,0.248300,-1.294400,0.145900,0.086500,-1.350000,0.050800 +4350 DATA 0.248300,-1.294400,0.145900,0.287000,-1.294400,0.000000,0.529600,-1.255600,0.000000,0.529600,-1.255600,0.000000 +4360 DATA 0.458200,-1.255600,0.269100,0.248300,-1.294400,0.145900,0.458200,-1.255600,0.269100,0.529600,-1.255600,0.000000 +4370 DATA 0.650000,-1.200000,0.000000,0.650000,-1.200000,0.000000,0.562400,-1.200000,0.330300,0.458200,-1.255600,0.269100 +4380 REM +4390 REM -- VERTEX INDEXES -- +4400 DATA 0,1,2,3,4,5,6,7,8,9 +4410 DATA 10,11,12,13,14,15,16,17,18,19 +4420 DATA 20,21,22,23,24,25,26,27,28,29 +4430 DATA 30,31,32,33,34,35,36,37,38,39 +4440 DATA 40,41,42,43,44,45,46,47,48,49 +4450 DATA 50,51,52,53,54,55,56,57,58,59 +4460 DATA 60,61,62,63,64,65,66,67,68,69 +4470 DATA 70,71,72,73,74,75,76,77,78,79 +4480 DATA 80,81,82,83,84,85,86,87,88,89 +4490 DATA 90,91,92,93,94,95,96,97,98,99 +4500 DATA 100,101,102,103,104,105,106,107,108,109 +4510 DATA 110,111,112,113,114,115,116,117,118,119 +4520 DATA 120,121,122,123,124,125,126,127,128,129 +4530 DATA 130,131,132,133,134,135,136,137,138,139 +4540 DATA 140,141,142,143,144,145,146,147,148,149 +4550 DATA 150,151,152,153,154,155,156,157,158,159 +4560 DATA 160,161,162,163,164,165,166,167,168,169 +4570 DATA 170,171,172,173,174,175,176,177,178,179 +4580 DATA 180,181,182,183,184,185,186,187,188,189 +4590 DATA 190,191,192,193,194,195,196,197,198,199 +4600 DATA 200,201,202,203,204,205,206,207,208,209 +4610 DATA 210,211,212,213,214,215,216,217,218,219 +4620 DATA 220,221,222,223,224,225,226,227,228,229 +4630 DATA 230,231,232,233,234,235,236,237,238,239 +4640 DATA 240,241,242,243,244,245,246,247,248,249 +4650 DATA 250,251,252,253,254,255,256,257,258,259 +4660 DATA 260,261,262,263,264,265,266,267,268,269 +4670 DATA 270,271,272,273,274,275,276,277,278,279 +4680 DATA 280,281,282,283,284,285,286,287,288,289 +4690 DATA 290,291,292,293,294,295,296,297,298,299 +4700 DATA 300,301,302,303,304,305,306,307,308,309 +4710 DATA 310,311,312,313,314,315,316,317,318,319 +4720 DATA 320,321,322,323,324,325,326,327,328,329 +4730 DATA 330,331,332,333,334,335,336,337,338,339 +4740 DATA 340,341,342,343,344,345,346,347,348,349 +4750 DATA 350,351,352,353,354,355,356,357,358,359 +4760 DATA 360,361,362,363,364,365,366,367,368,369 +4770 DATA 370,371,372,373,374,375,376,377,378,379 +4780 DATA 380,381,382,383,384,385,386,387,388,389 +4790 DATA 390,391,392,393,394,395,396,397,398,399 +4800 DATA 400,401,402,403,404,405,406,407,408,409 +4810 DATA 410,411,412,413,414,415,416,417,418,419 +4820 DATA 420,421,422,423,424,425,426,427,428,429 +4830 DATA 430,431,432,433,434,435,436,437,438,439 +4840 DATA 440,441,442,443,444,445,446,447,448,449 +4850 DATA 450,451,452,453,454,455,456,457,458,459 +4860 DATA 460,461,462,463,464,465,466,467,468,469 +4870 DATA 470,471,472,473,474,475,476,477,478,479 +4880 DATA 480,481,482,483,484,485,486,487,488,489 +4890 DATA 490,491,492,493,494,495,496,497,498,499 +4900 DATA 500,501,502,503,504,505,506,507,508,509 +4910 DATA 510,511,512,513,514,515,516,517,518,519 +4920 DATA 520,521,522,523,524,525,526,527,528,529 +4930 DATA 530,531,532,533,534,535,536,537,538,539 +4940 DATA 540,541,542,543,544,545,546,547,548,549 +4950 DATA 550,551,552,553,554,555,556,557,558,559 +4960 DATA 560,561,562,563,564,565,566,567,568,569 +4970 DATA 570,571,572,573,574,575,576,577,578,579 +4980 DATA 580,581,582,583,584,585,586,587,588,589 +4990 DATA 590,591,592,593,594,595,596,597,598,599 +5000 DATA 600,601,602,603,604,605,606,607,608,609 +5010 DATA 610,611,612,613,614,615,616,617,618,619 +5020 DATA 620,621,622,623,624,625,626,627,628,629 +5030 DATA 630,631,632,633,634,635,636,637,638,639 +5040 DATA 640,641,642,643,644,645,646,647,648,649 +5050 DATA 650,651,652,653,654,655,656,657,658,659 +5060 DATA 660,661,662,663,664,665,666,667,668,669 +5070 DATA 670,671,672,673,674,675,676,677,678,679 +5080 DATA 680,681,682,683,684,685,686,687,688,689 +5090 DATA 690,691,692,693,694,695,696,697,698,699 +5100 DATA 700,701,702,703,704,705,706,707,708,709 +5110 DATA 710,711,712,713,714,715,716,717,718,719 +5120 DATA 720,721,722,723,724,725,726,727,728,729 +5130 DATA 730,731,732,733,734,735,736,737,738,739 +5140 DATA 740,741,742,743,744,745,746,747,748,749 +5150 DATA 750,751,752,753,754,755,756,757,758,759 +5160 DATA 760,761,762,763,764,765,766,767,768,769 +5170 DATA 770,771,772,773,774,775,776,777,778,779 +5180 DATA 780,781,782,783,784,785,786,787,788,789 +5190 DATA 790,791,792,793,794,795,796,797,798,799 +5200 DATA 800,801,802,803,804,805,806,807,808,809 +5210 DATA 810,811,812,813,814,815,816,817,818,819 +5220 DATA 820,821,822,823,824,825,826,827,828,829 +5230 DATA 830,831,832,833,834,835,836,837,838,839 +5240 DATA 840,841,842,843,844,845,846,847,848,849 +5250 DATA 850,851,852,853,854,855,856,857,858,859 +5260 DATA 860,861,862,863,864,865,866,867,868,869 +5270 DATA 870,871,872,873,874,875,876,877,878,879 +5280 DATA 880,881,882,883,884,885,886,887,888,889 +5290 DATA 890,891,892,893,894,895,896,897,898,899 +5300 DATA 900,901,902,903,904,905,906,907,908,909 +5310 DATA 910,911,912,913,914,915,916,917,918,919 +5320 DATA 920,921,922,923,924,925,926,927,928,929 +5330 DATA 930,931,932,933,934,935,936,937,938,939 +5340 DATA 940,941,942,943,944,945,946,947,948,949 +5350 DATA 950,951,952,953,954,955,956,957,958,959 +5360 DATA 960,961,962,963,964,965,966,967,968,969 +5370 DATA 970,971,972,973,974,975,976,977,978,979 +5380 DATA 980,981,982,983,984,985,986,987,988,989 +5390 DATA 990,991,992,993,994,995,996,997,998,999 +5400 DATA 1000,1001,1002,1003,1004,1005,1006,1007,1008,1009 +5410 DATA 1010,1011,1012,1013,1014,1015,1016,1017,1018,1019 +5420 DATA 1020,1021,1022,1023,1024,1025,1026,1027,1028,1029 +5430 DATA 1030,1031,1032,1033,1034,1035,1036,1037,1038,1039 +5440 DATA 1040,1041,1042,1043,1044,1045,1046,1047,1048,1049 +5450 DATA 1050,1051,1052,1053,1054,1055,1056,1057,1058,1059 +5460 DATA 1060,1061,1062,1063,1064,1065,1066,1067,1068,1069 +5470 DATA 1070,1071,1072,1073,1074,1075,1076,1077,1078,1079 +5480 DATA 1080,1081,1082,1083,1084,1085,1086,1087,1088,1089 +5490 DATA 1090,1091,1092,1093,1094,1095,1096,1097,1098,1099 +5500 DATA 1100,1101,1102,1103,1104,1105,1106,1107,1108,1109 +5510 DATA 1110,1111,1112,1113,1114,1115,1116,1117,1118,1119 +5520 DATA 1120,1121,1122,1123,1124,1125,1126,1127,1128,1129 +5530 DATA 1130,1131,1132,1133,1134,1135,1136,1137,1138,1139 +5540 DATA 1140,1141,1142,1143,1144,1145,1146,1147,1148,1149 +5550 DATA 1150,1151,1152,1153,1154,1155,1156,1157,1158,1159 +5560 DATA 1160,1161,1162,1163,1164,1165,1166,1167,1168,1169 +5570 DATA 1170,1171,1172,1173,1174,1175,1176,1177,1178,1179 +5580 DATA 1180,1181,1182,1183,1184,1185,1186,1187,1188,1189 +5590 DATA 1190,1191,1192,1193,1194,1195,1196,1197,1198,1199 +5600 DATA 1200,1201,1202,1203,1204,1205,1206,1207,1208,1209 +5610 DATA 1210,1211,1212,1213,1214,1215,1216,1217,1218,1219 +5620 DATA 1220,1221,1222,1223,1224,1225,1226,1227,1228,1229 +5630 DATA 1230,1231,1232,1233,1234,1235,1236,1237,1238,1239 +5640 DATA 1240,1241,1242,1243,1244,1245,1246,1247,1248,1249 +5650 DATA 1250,1251,1252,1253,1254,1255,1256,1257,1258,1259 +5660 DATA 1260,1261,1262,1263,1264,1265,1266,1267,1268,1269 +5670 DATA 1270,1271,1272,1273,1274,1275,1276,1277,1278,1279 +5680 DATA 1280,1281,1282,1283,1284,1285,1286,1287,1288,1289 +5690 DATA 1290,1291,1292,1293,1294,1295,1296,1297,1298,1299 +5700 DATA 1300,1301,1302,1303,1304,1305,1306,1307,1308,1309 +5710 DATA 1310,1311,1312,1313,1314,1315,1316,1317,1318,1319 +5720 DATA 1320,1321,1322,1323,1324,1325,1326,1327,1328,1329 +5730 DATA 1330,1331,1332,1333,1334,1335,1336,1337,1338,1339 +5740 DATA 1340,1341,1342,1343,1344,1345,1346,1347,1348,1349 +5750 DATA 1350,1351,1352,1353,1354,1355,1356,1357,1358,1359 +5760 DATA 1360,1361,1362,1363,1364,1365,1366,1367,1368,1369 +5770 DATA 1370,1371,1372,1373,1374,1375,1376,1377,1378,1379 +5780 DATA 1380,1381,1382,1383,1384,1385,1386,1387,1388,1389 +5790 DATA 1390,1391,1392,1393,1394,1395,1396,1397,1398,1399 +5800 DATA 1400,1401,1402,1403,1404,1405,1406,1407,1408,1409 +5810 DATA 1410,1411,1412,1413,1414,1415,1416,1417,1418,1419 +5820 DATA 1420,1421,1422,1423,1424,1425,1426,1427,1428,1429 +5830 DATA 1430,1431,1432,1433,1434,1435,1436,1437,1438,1439 +5840 DATA 1440,1441,1442,1443,1444,1445,1446,1447,1448,1449 +5850 DATA 1450,1451,1452,1453,1454,1455,1456,1457,1458,1459 +5860 DATA 1460,1461,1462,1463,1464,1465,1466,1467,1468,1469 +5870 DATA 1470,1471,1472,1473,1474,1475,1476,1477,1478,1479 +5880 DATA 1480,1481,1482,1483,1484,1485,1486,1487,1488,1489 +5890 DATA 1490,1491,1492,1493,1494,1495,1496,1497,1498,1499 +5900 DATA 1500,1501,1502,1503,1504,1505,1506,1507,1508,1509 +5910 DATA 1510,1511,1512,1513,1514,1515,1516,1517,1518,1519 +5920 DATA 1520,1521,1522,1523,1524,1525,1526,1527,1528,1529 +5930 DATA 1530,1531,1532,1533,1534,1535,1536,1537,1538,1539 +5940 DATA 1540,1541,1542,1543,1544,1545,1546,1547,1548,1549 +5950 DATA 1550,1551,1552,1553,1554,1555,1556,1557,1558,1559 +5960 DATA 1560,1561,1562,1563,1564,1565,1566,1567,1568,1569 +5970 DATA 1570,1571,1572,1573,1574,1575,1576,1577,1578,1579 +5980 DATA 1580,1581,1582,1583,1584,1585,1586,1587,1588,1589 +5990 DATA 1590,1591,1592,1593,1594,1595,1596,1597,1598,1599 +6000 DATA 1600,1601,1602,1603,1604,1605,1606,1607,1608,1609 +6010 DATA 1610,1611,1612,1613,1614,1615,1616,1617,1618,1619 +6020 DATA 1620,1621,1622,1623,1624,1625,1626,1627,1628,1629 +6030 DATA 1630,1631,1632,1633,1634,1635,1636,1637,1638,1639 +6040 DATA 1640,1641,1642,1643,1644,1645,1646,1647,1648,1649 +6050 DATA 1650,1651,1652,1653,1654,1655,1656,1657,1658,1659 +6060 DATA 1660,1661,1662,1663,1664,1665,1666,1667,1668,1669 +6070 DATA 1670,1671,1672,1673,1674,1675,1676,1677,1678,1679 +6080 DATA 1680,1681,1682,1683,1684,1685,1686,1687,1688,1689 +6090 DATA 1690,1691,1692,1693,1694,1695,1696,1697,1698,1699 +6100 DATA 1700,1701,1702,1703,1704,1705,1706,1707,1708,1709 +6110 DATA 1710,1711,1712,1713,1714,1715,1716,1717,1718,1719 +6120 DATA 1720,1721,1722,1723,1724,1725,1726,1727 +6130 REM +6140 REM -- CODE -- +6145 PRINT "Reading vertices" +6150 total_coords%=teapot_vertices%*3 +6160 max_abs=-99999 +6170 DIM vertices(total_coords%) +6180 FOR i%=0 TO total_coords%-1 +6190 READ coord +6200 vertices(i%)=coord +6210 a=ABS(coord) +6220 IF a>max_abs THEN max_abs=a +6230 NEXT i% +6232 factor=32767.0/max_abs +6234 PRINT "Max absolute value = ";max_abs +6236 PRINT "Factor = ";factor +6240 sid%=100: mid%=1: oid%=1: bmid1%=101: bmid2%=102 +6245 PRINT "Creating control structure" +6250 VDU 23,0, &A0, sid%; &48,0, 150; 150; : REM Create Control Structure +6255 PRINT "Sending vertices using factor ";factor +6260 VDU 23,0, &A0, sid%; &48, 1, mid%; teapot_vertices%; : REM Define Mesh Vertices +6270 FOR i%=0 TO total_coords%-1 +6280 val%=vertices(i%)*factor +6290 VDU val%; +6295 T%=TIME +6296 IF TIME-T%<1 GOTO 6296 +6300 NEXT i% +6305 PRINT "Reading and sending vertex indexes" +6310 VDU 23,0, &A0, sid%; &48, 2, mid%; teapot_vertices%; : REM Set Mesh Vertex Indexes +6320 FOR i%=0 TO teapot_vertices%-1 +6330 READ val% +6340 VDU val%; +6345 T%=TIME +6346 IF TIME-T%<1 GOTO 6346 +6350 NEXT i% +6355 PRINT "Defining texture coordinates" +6360 VDU 23,0, &A0, sid%; &48, 3, mid%; 1; 32768; 32768; : REM Define Texture Coordinates +6355 PRINT "Sending texture coordinate indexes" +6370 VDU 23,0, &A0, sid%; &48, 4, mid%; teapot_vertices%; : REM Set Texture Coordinate Indexes +6372 FOR i%=0 TO teapot_vertices%-1 +6373 VDU 0; +6374 NEXT i% +6376 PRINT "Creating texture bitmap" +6380 VDU 23, 27, 0, bmid1%: REM Create a bitmap for a texture +6382 PRINT "Setting texture pixel" +6390 VDU 23, 27, 1, 1; 1; &55, &A0, &FF, &C0 : REM Set a pixel in the bitmap +6405 PRINT "Create 3D object" +6410 VDU 23,0, &A0, sid%; &48, 5, oid%; mid%; bmid1%+64000; : REM Create Object +6412 PRINT "Create target bitmap" +6413 VDU 23, 27, 0, bmid2% : REM Select output bitmap +6414 VDU 23, 27, 2, 150; 150; &0000; &00C0; : REM Create solid color bitmap +6415 PRINT "Render 3D object" +6420 VDU 23, 0, &A0, sid%; &48, 18, bmid2%+64000; : REM Render To Bitmap +6510 VDU 23, 27, 3, 300; 300; : REM Display output bitmap diff --git a/video/pingo_3d.h b/video/pingo_3d.h index 9299bd4d..ec012797 100644 --- a/video/pingo_3d.h +++ b/video/pingo_3d.h @@ -79,9 +79,12 @@ typedef struct tag_Pingo3dControl { // VDU 23, 0, &A0, sid; &48, 0, 1 : Initialize Control Structure void initialize(VDUStreamProcessor& processor, uint16_t width, uint16_t height) { + debug_log("initialize: pingo creating control structure for %ux%u scene\n", width, height); memset(this, 0, sizeof(tag_Pingo3dControl)); m_tag = PINGO_3D_CONTROL_TAG; m_size = sizeof(tag_Pingo3dControl); + m_width = width; + m_height = height; auto frame_size = (uint32_t) width * (uint32_t) height; @@ -512,6 +515,24 @@ typedef struct tag_Pingo3dControl { // VDU 23, 0, &A0, sid; &48, 18, bmid; : Render To Bitmap void render_to_bitmap() { + auto bmid = m_proc->readWord_t(); + if (bmid < 0) { + return; + } + + p3d::Pixel* dst_pix = NULL; + auto old_bitmap = getBitmap(bmid); + if (old_bitmap) { + auto bitmap = old_bitmap.get(); + if (bitmap && bitmap->width == m_width && bitmap->height == m_height) { + dst_pix = (p3d::Pixel*) bitmap->data; + } + } + + if (!dst_pix) { + debug_log("render_to_bitmap: output bitmap %u not found or invalid\n", bmid); + } + auto start = millis(); auto size = p3d::Vec2i{(p3d::I_TYPE)m_width, (p3d::I_TYPE)m_height}; p3d::Renderer renderer; @@ -546,10 +567,18 @@ typedef struct tag_Pingo3dControl { scene.transform = p3d::mat4RotateY(phi); phi += 0.01; + debug_log("Frame data: %02hX %02hX %02hX %02hX\n", m_frame->r, m_frame->g, m_frame->b, m_frame->a); + debug_log("Destination: %02hX %02hX %02hX %02hX\n", dst_pix->r, dst_pix->g, dst_pix->b, dst_pix->a); + rendererRender(&renderer); + + memcpy(dst_pix, m_frame, sizeof(p3d::Pixel) * m_width * m_height); + auto stop = millis(); auto diff = stop - start; debug_log("Render to %ux%u took %u ms\n", m_width, m_height, diff); + debug_log("Frame data: %02hX %02hX %02hX %02hX\n", m_frame->r, m_frame->g, m_frame->b, m_frame->a); + debug_log("Final data: %02hX %02hX %02hX %02hX\n", dst_pix->r, dst_pix->g, dst_pix->b, dst_pix->a); } } Pingo3dControl; diff --git a/video/video.ino b/video/video.ino index 125d30e0..6eefe784 100644 --- a/video/video.ino +++ b/video/video.ino @@ -93,12 +93,6 @@ void setup() { processor->wait_eZ80(); setupKeyboardAndMouse(); processor->sendModeInformation(); - - test_pingo_3d(); -} - -void test_pingo_3d() { - } // The main loop From bf886ea5b5da075f7e8628d3572e9bbff2472f7b Mon Sep 17 00:00:00 2001 From: Curtis Whitley Date: Wed, 24 Apr 2024 15:01:50 -0400 Subject: [PATCH 23/49] draws a teapot --- video/pingo/assets/teapot.bas | 13 ++-- video/pingo/render/renderer.c | 8 ++- video/pingo/vdu_pingo.md | 8 +-- video/pingo_3d.h | 110 ++++++++++++++++++++++++---------- 4 files changed, 98 insertions(+), 41 deletions(-) diff --git a/video/pingo/assets/teapot.bas b/video/pingo/assets/teapot.bas index bb801085..9f0078e2 100644 --- a/video/pingo/assets/teapot.bas +++ b/video/pingo/assets/teapot.bas @@ -627,7 +627,7 @@ 6236 PRINT "Factor = ";factor 6240 sid%=100: mid%=1: oid%=1: bmid1%=101: bmid2%=102 6245 PRINT "Creating control structure" -6250 VDU 23,0, &A0, sid%; &48,0, 150; 150; : REM Create Control Structure +6250 VDU 23,0, &A0, sid%; &48,0, 256; 256; : REM Create Control Structure 6255 PRINT "Sending vertices using factor ";factor 6260 VDU 23,0, &A0, sid%; &48, 1, mid%; teapot_vertices%; : REM Define Mesh Vertices 6270 FOR i%=0 TO total_coords%-1 @@ -654,12 +654,15 @@ 6376 PRINT "Creating texture bitmap" 6380 VDU 23, 27, 0, bmid1%: REM Create a bitmap for a texture 6382 PRINT "Setting texture pixel" -6390 VDU 23, 27, 1, 1; 1; &55, &A0, &FF, &C0 : REM Set a pixel in the bitmap +6390 VDU 23, 27, 1, 1; 1; &55, &AA, &FF, &C0 : REM Set a pixel in the bitmap 6405 PRINT "Create 3D object" -6410 VDU 23,0, &A0, sid%; &48, 5, oid%; mid%; bmid1%+64000; : REM Create Object +6407 VDU 23,0, &A0, sid%; &48, 5, oid%; mid%; bmid1%+64000; : REM Create Object +6409 PRINT "Scale object" +6410 scale=6.0*256.0 +6411 VDU 23, 0, &A0, sid%; &48, 9, oid%; scale; scale; scale; : REM Set Object XYZ Scale Factors 6412 PRINT "Create target bitmap" 6413 VDU 23, 27, 0, bmid2% : REM Select output bitmap -6414 VDU 23, 27, 2, 150; 150; &0000; &00C0; : REM Create solid color bitmap +6414 VDU 23, 27, 2, 256; 256; &0000; &00C0; : REM Create solid color bitmap 6415 PRINT "Render 3D object" 6420 VDU 23, 0, &A0, sid%; &48, 18, bmid2%+64000; : REM Render To Bitmap -6510 VDU 23, 27, 3, 300; 300; : REM Display output bitmap +6510 VDU 23, 27, 3, 100; 100; : REM Display output bitmap diff --git a/video/pingo/render/renderer.c b/video/pingo/render/renderer.c index 02502e66..2a1b3214 100644 --- a/video/pingo/render/renderer.c +++ b/video/pingo/render/renderer.c @@ -10,7 +10,9 @@ #include "object.h" /*#include "../backend/ttgobackend.h"*/ -extern void show_pixel(uint8_t a, uint8_t b, uint8_t g, uint8_t r); +#if DEBUG +extern void show_pixel(float x, float y, uint8_t a, uint8_t b, uint8_t g, uint8_t r); +#endif int renderFrame(Renderer * r, Renderable ren) { Texture * f = ren.impl; @@ -229,7 +231,9 @@ int renderObject(Mat4 object_transform, Renderer * r, Renderable ren) { float textCoordy = -(w0 * tca.y + w1 * tcb.y + w2 * tcc.y)* areaInverse * depth; Pixel text = texture_readF(o->material->texture, (Vec2f){textCoordx,textCoordy}); - //show_pixel(text.a, text.b, text.g, text.r); +#if DEBUG + //show_pixel(textCoordx, textCoordy, text.a, text.b, text.g, text.r); +#endif backendDrawPixel(r, &r->frameBuffer, (Vec2i){x,y}, text, diffuseLight); } else { diff --git a/video/pingo/vdu_pingo.md b/video/pingo/vdu_pingo.md index a6f35949..7b481c07 100644 --- a/video/pingo/vdu_pingo.md +++ b/video/pingo/vdu_pingo.md @@ -96,7 +96,7 @@ VDU ... PDX; PDY; PDZ; ... VDU 23, 0, &A0, sid; &48, 6, oid; scalex; : Set Object X Scale Factor
VDU 23, 0, &A0, sid; &48, 7, oid; scaley; : Set Object Y Scale Factor
VDU 23, 0, &A0, sid; &48, 8, oid; scalez; : Set Object Z Scale Factor
-VDU 23, 0, &A0, sid; &48, 9, oid; scalex; scaley; scalez : Set Object XYZ Scale Factors
+VDU 23, 0, &A0, sid; &48, 9, oid; scalex; scaley; scalez; : Set Object XYZ Scale Factors
VDU 23, 0, &A0, sid; &48, 10, oid; anglex; : Set Object X Rotation Angle
VDU 23, 0, &A0, sid; &48, 11, oid; angley; : Set Object Y Rotation Angle
VDU 23, 0, &A0, sid; &48, 12, oid; anglez; : Set Object Z Rotation Angle
@@ -104,7 +104,7 @@ VDU ... PDX; PDY; PDZ; ... VDU 23, 0, &A0, sid; &48, 14, oid; distx; : Set Object X Translation Distance
VDU 23, 0, &A0, sid; &48, 15, oid; disty; : Set Object Y Translation Distance
VDU 23, 0, &A0, sid; &48, 16, oid; distz; : Set Object Z Translation Distance
-VDU 23, 0, &A0, sid; &48, 17, oid; distx; disty; distz : Set Object XYZ Translation Distances
+VDU 23, 0, &A0, sid; &48, 17, oid; distx; disty; distz; : Set Object XYZ Translation Distances
VDU 23, 0, &A0, sid; &48, 18, bmid; : Render To Bitmap
VDU 23, 0, &A0, sid; &48, 19 : Delete Control Structure
@@ -181,7 +181,7 @@ This command sets the Y scale factor for an object. This command sets the Z scale factor for an object. ## Set Object XYZ Scale Factors -VDU 23, 0, &A0, sid; &48, 9, oid; scalex; scaley; scalez : Set Object XYZ Scale Factors +VDU 23, 0, &A0, sid; &48, 9, oid; scalex; scaley; scalez; : Set Object XYZ Scale Factors This command sets the X, Y, and Z scale factors for an object. @@ -227,7 +227,7 @@ Note that 3D translation of an object is independent of 2D translation of the bi belonging to the render primitive. ## Set Object XYZ Translation Distances -VDU 23, 0, &A0, sid; &48, 17, oid; distx; disty; distz : Set Object XYZ Translation Distances +VDU 23, 0, &A0, sid; &48, 17, oid; distx; disty; distz; : Set Object XYZ Translation Distances This command sets the X, Y, and Z translation distances for an object. Note that 3D translation of an object is independent of 2D translation of the bitmap diff --git a/video/pingo_3d.h b/video/pingo_3d.h index ec012797..838a7605 100644 --- a/video/pingo_3d.h +++ b/video/pingo_3d.h @@ -31,15 +31,18 @@ namespace p3d { class VDUStreamProcessor; typedef struct tag_TexObject { + p3d::Object m_object; p3d::Texture m_texture; p3d::Material m_material; - p3d::Object m_object; p3d::Vec3f m_scale; p3d::Vec3f m_rotation; p3d::Vec3f m_translation; + uint16_t m_oid; bool m_modified; void compute_transformation_matrix() { + m_object.material = &m_material; + m_material.texture = &m_texture; m_object.transform = p3d::mat4Scale(m_scale); if (m_rotation.x) { auto t = p3d::mat4RotateX(m_rotation.x); @@ -59,8 +62,39 @@ typedef struct tag_TexObject { } m_modified = false; } + + void dump() { + debug_log("TObject: %p %u\n", this, m_oid); + debug_log("Object: %p %p %p %p\n", &m_object, m_object.material, m_object.mesh, + m_object.transform.elements); + for (int i = 0; i < 16; i++) { + debug_log(" [%i] %f\n", i, m_object.transform.elements[i]); + } + debug_log("Scale: %f %f %f\n", m_scale.x, m_scale.y, m_scale.z); + debug_log("Rotation: %f %f %f\n", m_rotation.x, m_rotation.y, m_rotation.z); + debug_log("Translation: %f %f %f\n", m_translation.x, m_translation.y, m_translation.z); + debug_log("Texture: %p %u %u %p\n", &m_texture, m_texture.size.x, m_texture.size.y, m_texture.frameBuffer); + debug_log("Material: %p %p %u %u %p\n", &m_material, m_material.texture, m_material.texture->size.x, + m_material.texture->size.y, m_material.texture->frameBuffer); + } } TexObject; +typedef struct tag_Pingo3dControl; + +extern "C" { + + void static_init(p3d::Renderer* ren, p3d::BackEnd* backEnd, p3d::Vec4i _rect); + + void static_before_render(p3d::Renderer* ren, p3d::BackEnd* backEnd); + + void static_after_render(p3d::Renderer* ren, p3d::BackEnd* backEnd); + + p3d::Pixel* static_get_frame_buffer(p3d::Renderer* ren, p3d::BackEnd* backEnd); + + p3d::PingoDepth* static_get_zeta_buffer(p3d::Renderer* ren, p3d::BackEnd* backEnd); + +} // extern "C" + typedef struct tag_Pingo3dControl { uint32_t m_tag; // Used to verify the existence of this structure uint32_t m_size; // Used to verify the existence of this structure @@ -114,26 +148,6 @@ typedef struct tag_Pingo3dControl { m_objects = new std::map; } - static void static_init(p3d::Renderer* ren, p3d::BackEnd* backEnd, p3d::Vec4i _rect) { - //rect = _rect; - } - - static void static_before_render(p3d::Renderer* ren, p3d::BackEnd* backEnd) { - } - - static void static_after_render(p3d::Renderer* ren, p3d::BackEnd* backEnd) { - } - - static p3d::Pixel* static_get_frame_buffer(p3d::Renderer* ren, p3d::BackEnd* backEnd) { - auto p_this = (struct tag_Pingo3dControl*) backEnd->clientCustomData; - return p_this->m_frame; - } - - static p3d::PingoDepth* static_get_zeta_buffer(p3d::Renderer* ren, p3d::BackEnd* backEnd) { - auto p_this = (struct tag_Pingo3dControl*) backEnd->clientCustomData; - return p_this->m_zeta; - } - // VDU 23, 0, &A0, sid; &48, 0, 0 : Deinitialize Control Structure void deinitialize(VDUStreamProcessor& processor) { } @@ -188,25 +202,27 @@ typedef struct tag_Pingo3dControl { return NULL; } - TexObject* establish_object(uint16_t mid) { - auto object_iter = m_objects->find(mid); + TexObject* establish_object(uint16_t oid) { + auto object_iter = m_objects->find(oid); if (object_iter == m_objects->end()) { TexObject object; memset(&object, 0, sizeof(object)); + object.m_oid = oid; object.m_object.material = &object.m_material; object.m_material.texture = &object.m_texture; object.m_scale = p3d::Vec3f { 1.0f, 1.0f, 1.0f }; - (*m_objects).insert(std::pair(mid, object)); - return &m_objects->find(mid)->second; + object.m_modified = true; + (*m_objects).insert(std::pair(oid, object)); + return &m_objects->find(oid)->second; } else { return &object_iter->second; } } TexObject* get_object() { - auto mid = m_proc->readWord_t(); - if (mid >= 0) { - return establish_object(mid); + auto oid = m_proc->readWord_t(); + if (oid >= 0) { + return establish_object(oid); } return NULL; } @@ -336,13 +352,16 @@ typedef struct tag_Pingo3dControl { auto mesh = get_mesh(); auto bmid = m_proc->readWord_t(); if (object && mesh && bmid) { + debug_log("Creating 3D object %u with bitmap %u\n", object->m_oid, bmid); auto stored_bitmap = getBitmap(bmid); if (stored_bitmap) { auto bitmap = stored_bitmap.get(); if (bitmap) { auto size = p3d::Vec2i{(p3d::I_TYPE)bitmap->width, (p3d::I_TYPE)bitmap->height}; - texture_init(&object->m_texture, size, (p3d::Pixel*) bitmap->data); + auto pix = (p3d::Pixel*) bitmap->data; + texture_init(&object->m_texture, size, pix); object->m_object.mesh = mesh; + debug_log("Texture data: %02hX %02hX %02hX %02hX\n", pix->r, pix->g, pix->b, pix->a); } } } @@ -546,6 +565,7 @@ typedef struct tag_Pingo3dControl { for (auto object = m_objects->begin(); object != m_objects->end(); object++) { if (object->second.m_modified) { object->second.compute_transformation_matrix(); + object->second.dump(); } sceneAddRenderable(&scene, p3d::object_as_renderable(&object->second.m_object)); } @@ -558,7 +578,7 @@ typedef struct tag_Pingo3dControl { p3d::mat4Perspective( 1, 2500.0, (p3d::F_TYPE)size.x / (p3d::F_TYPE)size.y, 0.6); // Set the view matrix (position and orientation of the "camera") - p3d::Mat4 view = p3d::mat4Translate((p3d::Vec3f) {0,2,-35}); + p3d::Mat4 view = p3d::mat4Translate((p3d::Vec3f) {0, 2, -60.0}); p3d::Mat4 rotateDown = p3d::mat4RotateX(-0.40); // Rotate around origin/orbit renderer.camera_view = mat4MultiplyM(&rotateDown, &view); @@ -583,4 +603,34 @@ typedef struct tag_Pingo3dControl { } Pingo3dControl; +extern "C" { + + void static_init(p3d::Renderer* ren, p3d::BackEnd* backEnd, p3d::Vec4i _rect) { + //rect = _rect; + } + + void static_before_render(p3d::Renderer* ren, p3d::BackEnd* backEnd) { + } + + void static_after_render(p3d::Renderer* ren, p3d::BackEnd* backEnd) { + } + + p3d::Pixel* static_get_frame_buffer(p3d::Renderer* ren, p3d::BackEnd* backEnd) { + auto p_this = (struct tag_Pingo3dControl*) backEnd->clientCustomData; + return p_this->m_frame; + } + + p3d::PingoDepth* static_get_zeta_buffer(p3d::Renderer* ren, p3d::BackEnd* backEnd) { + auto p_this = (struct tag_Pingo3dControl*) backEnd->clientCustomData; + return p_this->m_zeta; + } + +#if DEBUG + void show_pixel(float x, float y, uint8_t a, uint8_t b, uint8_t g, uint8_t r) { + debug_log("%f %f %02hX %02hX %02hX %02hX\n", x, y, a, b, g, r); + } +#endif + +} // extern "C" + #endif // PINGO_3D_H From 0fb44c4168a3fd9368140b8be07982613fcdf612 Mon Sep 17 00:00:00 2001 From: Curtis Whitley Date: Wed, 24 Apr 2024 15:36:47 -0400 Subject: [PATCH 24/49] canvas size of 64x64 --- video/pingo/assets/teapot.bas | 5 +++-- video/pingo_3d.h | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/video/pingo/assets/teapot.bas b/video/pingo/assets/teapot.bas index 9f0078e2..5401bf20 100644 --- a/video/pingo/assets/teapot.bas +++ b/video/pingo/assets/teapot.bas @@ -627,7 +627,8 @@ 6236 PRINT "Factor = ";factor 6240 sid%=100: mid%=1: oid%=1: bmid1%=101: bmid2%=102 6245 PRINT "Creating control structure" -6250 VDU 23,0, &A0, sid%; &48,0, 256; 256; : REM Create Control Structure +6247 scene_width%=64: scene_height%=64 +6250 VDU 23,0, &A0, sid%; &48,0, scene_width%; scene_height%; : REM Create Control Structure 6255 PRINT "Sending vertices using factor ";factor 6260 VDU 23,0, &A0, sid%; &48, 1, mid%; teapot_vertices%; : REM Define Mesh Vertices 6270 FOR i%=0 TO total_coords%-1 @@ -662,7 +663,7 @@ 6411 VDU 23, 0, &A0, sid%; &48, 9, oid%; scale; scale; scale; : REM Set Object XYZ Scale Factors 6412 PRINT "Create target bitmap" 6413 VDU 23, 27, 0, bmid2% : REM Select output bitmap -6414 VDU 23, 27, 2, 256; 256; &0000; &00C0; : REM Create solid color bitmap +6414 VDU 23, 27, 2, scene_width%; scene_height%; &0000; &00C0; : REM Create solid color bitmap 6415 PRINT "Render 3D object" 6420 VDU 23, 0, &A0, sid%; &48, 18, bmid2%+64000; : REM Render To Bitmap 6510 VDU 23, 27, 3, 100; 100; : REM Display output bitmap diff --git a/video/pingo_3d.h b/video/pingo_3d.h index 838a7605..3d9c5b74 100644 --- a/video/pingo_3d.h +++ b/video/pingo_3d.h @@ -578,7 +578,7 @@ typedef struct tag_Pingo3dControl { p3d::mat4Perspective( 1, 2500.0, (p3d::F_TYPE)size.x / (p3d::F_TYPE)size.y, 0.6); // Set the view matrix (position and orientation of the "camera") - p3d::Mat4 view = p3d::mat4Translate((p3d::Vec3f) {0, 2, -60.0}); + p3d::Mat4 view = p3d::mat4Translate((p3d::Vec3f) {0, 2, -20.0}); p3d::Mat4 rotateDown = p3d::mat4RotateX(-0.40); // Rotate around origin/orbit renderer.camera_view = mat4MultiplyM(&rotateDown, &view); From f43d5930c51260901cf19ecc6b3f59f43180f7e0 Mon Sep 17 00:00:00 2001 From: Curtis Whitley Date: Wed, 24 Apr 2024 16:03:35 -0400 Subject: [PATCH 25/49] rotating --- video/pingo/assets/teapot.bas | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/video/pingo/assets/teapot.bas b/video/pingo/assets/teapot.bas index 5401bf20..4bee99c9 100644 --- a/video/pingo/assets/teapot.bas +++ b/video/pingo/assets/teapot.bas @@ -665,5 +665,15 @@ 6413 VDU 23, 27, 0, bmid2% : REM Select output bitmap 6414 VDU 23, 27, 2, scene_width%; scene_height%; &0000; &00C0; : REM Create solid color bitmap 6415 PRINT "Render 3D object" +6417 rotatex=0.0: rotatey=0.0: rotatez=0.0 +6418 incx=PI/16.0: incy=PI/32.0: incz=PI/64.0: pi2=PI*2.0 +6419 factor=32767.0/pi2 6420 VDU 23, 0, &A0, sid%; &48, 18, bmid2%+64000; : REM Render To Bitmap 6510 VDU 23, 27, 3, 100; 100; : REM Display output bitmap +6512 *FX 19 +6520 rotatex=rotatex+incx: IF rotatex>=pi2 THEN rotatex=rotatex-pi2 +6530 rotatey=rotatey+incy: IF rotatey>=pi2 THEN rotatey=rotatey-pi2 +6540 rotatez=rotatez+incz: IF rotatez>=pi2 THEN rotatez=rotatez-pi2 +6550 rx=rotatex*factor: ry=rotatey*factor: rz=rotatez*factor +6560 VDU 23, 0, &A0, sid%; &48, 13, oid%; rx; ry; rz; : REM Set Object XYZ Rotation Angles +6570 GOTO 6420 From 0695de53138df37a2db92f181e2eb7ef39ed7240 Mon Sep 17 00:00:00 2001 From: Curtis Whitley Date: Mon, 6 May 2024 13:48:23 -0400 Subject: [PATCH 26/49] starting to add camera subcommands --- video/pingo/assets/teapot.bas | 2 +- video/pingo/vdu_pingo.md | 16 ++- video/pingo_3d.h | 199 ++++++++++++++++++++++++++++++---- video/vdu_buffered.h | 18 ++- 4 files changed, 208 insertions(+), 27 deletions(-) diff --git a/video/pingo/assets/teapot.bas b/video/pingo/assets/teapot.bas index 4bee99c9..fb332437 100644 --- a/video/pingo/assets/teapot.bas +++ b/video/pingo/assets/teapot.bas @@ -668,7 +668,7 @@ 6417 rotatex=0.0: rotatey=0.0: rotatez=0.0 6418 incx=PI/16.0: incy=PI/32.0: incz=PI/64.0: pi2=PI*2.0 6419 factor=32767.0/pi2 -6420 VDU 23, 0, &A0, sid%; &48, 18, bmid2%+64000; : REM Render To Bitmap +6420 VDU 23, 0, &A0, sid%; &48, 30, bmid2%+64000; : REM Render To Bitmap 6510 VDU 23, 27, 3, 100; 100; : REM Display output bitmap 6512 *FX 19 6520 rotatex=rotatex+incx: IF rotatex>=pi2 THEN rotatex=rotatex-pi2 diff --git a/video/pingo/vdu_pingo.md b/video/pingo/vdu_pingo.md index 7b481c07..c1e77963 100644 --- a/video/pingo/vdu_pingo.md +++ b/video/pingo/vdu_pingo.md @@ -105,8 +105,20 @@ VDU ... PDX; PDY; PDZ; ... VDU 23, 0, &A0, sid; &48, 15, oid; disty; : Set Object Y Translation Distance
VDU 23, 0, &A0, sid; &48, 16, oid; distz; : Set Object Z Translation Distance
VDU 23, 0, &A0, sid; &48, 17, oid; distx; disty; distz; : Set Object XYZ Translation Distances
-VDU 23, 0, &A0, sid; &48, 18, bmid; : Render To Bitmap
-VDU 23, 0, &A0, sid; &48, 19 : Delete Control Structure
+VDU 23, 0, &A0, sid; &48, 18, scalex; : Set Camera X Scale Factor
+VDU 23, 0, &A0, sid; &48, 19, scaley; : Set Camera Y Scale Factor
+VDU 23, 0, &A0, sid; &48, 20, scalez; : Set Camera Z Scale Factor
+VDU 23, 0, &A0, sid; &48, 21, scalex; scaley; scalez; : Set Camera XYZ Scale Factors
+VDU 23, 0, &A0, sid; &48, 22, anglex; : Set Camera X Rotation Angle
+VDU 23, 0, &A0, sid; &48, 23, angley; : Set Camera Y Rotation Angle
+VDU 23, 0, &A0, sid; &48, 24, anglez; : Set Camera Z Rotation Angle
+VDU 23, 0, &A0, sid; &48, 25, anglex; angley; anglez; : Set Camera XYZ Rotation Angles
+VDU 23, 0, &A0, sid; &48, 26, distx; : Set Camera X Translation Distance
+VDU 23, 0, &A0, sid; &48, 27, disty; : Set Camera Y Translation Distance
+VDU 23, 0, &A0, sid; &48, 28, distz; : Set Camera Z Translation Distance
+VDU 23, 0, &A0, sid; &48, 29, distx; disty; distz; : Set Camera XYZ Translation Distances
+VDU 23, 0, &A0, sid; &48, 30, bmid; : Render To Bitmap
+VDU 23, 0, &A0, sid; &48, 31 : Delete Control Structure
## Create Control Structure VDU 23, 0, &A0, sid; &48, 0, w; h; : Create Control Structure
diff --git a/video/pingo_3d.h b/video/pingo_3d.h index 3d9c5b74..e2d14737 100644 --- a/video/pingo_3d.h +++ b/video/pingo_3d.h @@ -30,56 +30,69 @@ namespace p3d { class VDUStreamProcessor; -typedef struct tag_TexObject { - p3d::Object m_object; - p3d::Texture m_texture; - p3d::Material m_material; +typedef struct tag_Transformable { p3d::Vec3f m_scale; p3d::Vec3f m_rotation; p3d::Vec3f m_translation; - uint16_t m_oid; + p3d::Mat4 m_transform; bool m_modified; void compute_transformation_matrix() { - m_object.material = &m_material; - m_material.texture = &m_texture; - m_object.transform = p3d::mat4Scale(m_scale); + m_transform = p3d::mat4Scale(m_scale); if (m_rotation.x) { auto t = p3d::mat4RotateX(m_rotation.x); - m_object.transform = mat4MultiplyM(&m_object.transform, &t); + m_transform = mat4MultiplyM(&m_transform, &t); } if (m_rotation.y) { auto t = p3d::mat4RotateY(m_rotation.y); - m_object.transform = mat4MultiplyM(&m_object.transform, &t); + m_transform = mat4MultiplyM(&m_transform, &t); } if (m_rotation.z) { auto t = p3d::mat4RotateY(m_rotation.z); - m_object.transform = mat4MultiplyM(&m_object.transform, &t); + m_transform = mat4MultiplyM(&m_transform, &t); } if (m_translation.x || m_translation.y || m_translation.z) { auto t = p3d::mat4Translate(m_translation); - m_object.transform = mat4MultiplyM(&m_object.transform, &t); + m_transform = mat4MultiplyM(&m_transform, &t); } m_modified = false; } void dump() { - debug_log("TObject: %p %u\n", this, m_oid); - debug_log("Object: %p %p %p %p\n", &m_object, m_object.material, m_object.mesh, - m_object.transform.elements); for (int i = 0; i < 16; i++) { - debug_log(" [%i] %f\n", i, m_object.transform.elements[i]); + debug_log(" [%i] %f\n", i, m_transform.elements[i]); } debug_log("Scale: %f %f %f\n", m_scale.x, m_scale.y, m_scale.z); debug_log("Rotation: %f %f %f\n", m_rotation.x, m_rotation.y, m_rotation.z); debug_log("Translation: %f %f %f\n", m_translation.x, m_translation.y, m_translation.z); + } +} Transformable; + +typedef struct tag_TexObject : public Transformable { + p3d::Object m_object; + p3d::Texture m_texture; + p3d::Material m_material; + uint16_t m_oid; + + void update_transformation_matrix() { + m_object.material = &m_material; + m_material.texture = &m_texture; + compute_transformation_matrix(); + m_object.transform = m_transform; + } + + void dump() { + Transformable::dump(); + debug_log("TObject: %p %u\n", this, m_oid); + debug_log("Object: %p %p %p %p\n", &m_object, m_object.material, m_object.mesh, + m_object.transform.elements); debug_log("Texture: %p %u %u %p\n", &m_texture, m_texture.size.x, m_texture.size.y, m_texture.frameBuffer); debug_log("Material: %p %p %u %u %p\n", &m_material, m_material.texture, m_material.texture->size.x, m_material.texture->size.y, m_material.texture->frameBuffer); } } TexObject; -typedef struct tag_Pingo3dControl; +struct tag_Pingo3dControl; extern "C" { @@ -178,7 +191,20 @@ typedef struct tag_Pingo3dControl { case 15: set_object_y_translation_distance(); break; case 16: set_object_z_translation_distance(); break; case 17: set_object_xyz_translation_distances(); break; - case 18: render_to_bitmap(); break; + + case 18: set_camera_x_scale_factor(); break; + case 19: set_camera_y_scale_factor(); break; + case 20: set_camera_z_scale_factor(); break; + case 21: set_camera_xyz_scale_factors(); break; + case 22: set_camera_x_rotation_angle(); break; + case 23: set_camera_y_rotation_angle(); break; + case 24: set_camera_z_rotation_angle(); break; + case 25: set_camera_xyz_rotation_angles(); break; + case 26: set_camera_x_translation_distance(); break; + case 27: set_camera_y_translation_distance(); break; + case 28: set_camera_z_translation_distance(); break; + case 29: set_camera_xyz_translation_distances(); break; + case 30: render_to_bitmap(); break; } } @@ -532,7 +558,138 @@ typedef struct tag_Pingo3dControl { } } - // VDU 23, 0, &A0, sid; &48, 18, bmid; : Render To Bitmap + // VDU 23, 0, &A0, sid; &48, 18, oid; scalex; : Set Camera X Scale Factor + void set_camera_x_scale_factor() { + auto object = get_object(); + auto value = m_proc->readWord_t(); + if (object && (value >= 0)) { + object->m_scale.x = convert_scale_value(value); + object->m_modified = true; + } + } + + // VDU 23, 0, &A0, sid; &48, 19, oid; scaley; : Set Camera Y Scale Factor + void set_camera_y_scale_factor() { + auto object = get_object(); + auto value = m_proc->readWord_t(); + if (object && (value >= 0)) { + object->m_scale.y = convert_scale_value(value); + object->m_modified = true; + } + } + + // VDU 23, 0, &A0, sid; &48, 20, oid; scalez; : Set Camera Z Scale Factor + void set_camera_z_scale_factor() { + auto object = get_object(); + auto value = m_proc->readWord_t(); + if (object && (value >= 0)) { + object->m_scale.y = convert_scale_value(value); + object->m_modified = true; + } + } + + // VDU 23, 0, &A0, sid; &48, 21, oid; scalex; scaley; scalez : Set Camera XYZ Scale Factors + void set_camera_xyz_scale_factors() { + auto object = get_object(); + auto valuex = m_proc->readWord_t(); + auto valuey = m_proc->readWord_t(); + auto valuez = m_proc->readWord_t(); + if (object && (valuex >= 0) && (valuey >= 0) && (valuez >= 0)) { + object->m_scale.x = convert_scale_value(valuex); + object->m_scale.y = convert_scale_value(valuey); + object->m_scale.z = convert_scale_value(valuez); + object->m_modified = true; + } + } + + // VDU 23, 0, &A0, sid; &48, 22, oid; anglex; : Set Camera X Rotation Angle + void set_camera_x_rotation_angle() { + auto object = get_object(); + auto value = m_proc->readWord_t(); + if (object && (value >= 0)) { + object->m_rotation.x = convert_rotation_value(value); + object->m_modified = true; + } + } + + // VDU 23, 0, &A0, sid; &48, 23, oid; angley; : Set Camera Y Rotation Angle + void set_camera_y_rotation_angle() { + auto object = get_object(); + auto value = m_proc->readWord_t(); + if (object && (value >= 0)) { + object->m_rotation.y = convert_rotation_value(value); + object->m_modified = true; + } + } + + // VDU 23, 0, &A0, sid; &48, 24, oid; anglez; : Set Camera Z Rotation Angle + void set_camera_z_rotation_angle() { + auto object = get_object(); + auto value = m_proc->readWord_t(); + if (object && (value >= 0)) { + object->m_rotation.z = convert_rotation_value(value); + object->m_modified = true; + } + } + + // VDU 23, 0, &A0, sid; &48, 25, oid; anglex; angley; anglez; : Set Camera XYZ Rotation Angles + void set_camera_xyz_rotation_angles() { + auto object = get_object(); + auto valuex = m_proc->readWord_t(); + auto valuey = m_proc->readWord_t(); + auto valuez = m_proc->readWord_t(); + if (object && (valuex >= 0) && (valuey >= 0) && (valuez >= 0)) { + object->m_rotation.x = convert_rotation_value(valuex); + object->m_rotation.y = convert_rotation_value(valuey); + object->m_rotation.z = convert_rotation_value(valuez); + object->m_modified = true; + } + } + + // VDU 23, 0, &A0, sid; &48, 26, oid; distx; : Set Camera X Translation Distance + void set_camera_x_translation_distance() { + auto object = get_object(); + auto value = m_proc->readWord_t(); + if (object && (value >= 0)) { + object->m_translation.x = convert_translation_value(value); + object->m_modified = true; + } + } + + // VDU 23, 0, &A0, sid; &48, 27, oid; disty; : Set Camera Y Translation Distance + void set_camera_y_translation_distance() { + auto object = get_object(); + auto value = m_proc->readWord_t(); + if (object && (value >= 0)) { + object->m_translation.y = convert_translation_value(value); + object->m_modified = true; + } + } + + // VDU 23, 0, &A0, sid; &48, 28, oid; distz; : Set Camera Z Translation Distance + void set_camera_z_translation_distance() { + auto object = get_object(); + auto value = m_proc->readWord_t(); + if (object && (value >= 0)) { + object->m_translation.z = convert_translation_value(value); + object->m_modified = true; + } + } + + // VDU 23, 0, &A0, sid; &48, 29, oid; distx; disty; distz : Set Camera XYZ Translation Distances + void set_camera_xyz_translation_distances() { auto object = get_object(); + auto valuex = m_proc->readWord_t(); + auto valuey = m_proc->readWord_t(); + auto valuez = m_proc->readWord_t(); + if (object && (valuex >= 0) && (valuey >= 0) && (valuez >= 0)) { + object->m_translation.x = convert_translation_value(valuex); + object->m_translation.y = convert_translation_value(valuey); + object->m_translation.z = convert_translation_value(valuez); + object->m_modified = true; + } + } + + // VDU 23, 0, &A0, sid; &48, 30, bmid; : Render To Bitmap void render_to_bitmap() { auto bmid = m_proc->readWord_t(); if (bmid < 0) { @@ -564,8 +721,8 @@ typedef struct tag_Pingo3dControl { for (auto object = m_objects->begin(); object != m_objects->end(); object++) { if (object->second.m_modified) { - object->second.compute_transformation_matrix(); - object->second.dump(); + object->second.update_transformation_matrix(); + //object->second.dump(); } sceneAddRenderable(&scene, p3d::object_as_renderable(&object->second.m_object)); } diff --git a/video/vdu_buffered.h b/video/vdu_buffered.h index 03f22639..9f1ffdae 100644 --- a/video/vdu_buffered.h +++ b/video/vdu_buffered.h @@ -1734,8 +1734,20 @@ void VDUStreamProcessor::bufferDecompress(uint16_t bufferId, uint16_t sourceBuff // VDU 23, 0, &A0, sid; &48, 15, oid; disty; : Set Object Y Translation Distance // VDU 23, 0, &A0, sid; &48, 16, oid; distz; : Set Object Z Translation Distance // VDU 23, 0, &A0, sid; &48, 17, oid; distx; disty; distz : Set Object XYZ Translation Distances -// VDU 23, 0, &A0, sid; &48, 18, bmid; : Render To Bitmap -// VDU 23, 0, &A0, sid; &48, 19 : Delete Control Structure +// VDU 23, 0, &A0, sid; &48, 18, scalex;
: Set Camera X Scale Factor +// VDU 23, 0, &A0, sid; &48, 19, scaley;
: Set Camera Y Scale Factor +// VDU 23, 0, &A0, sid; &48, 20, scalez;
: Set Camera Z Scale Factor +// VDU 23, 0, &A0, sid; &48, 21, scalex; scaley; scalez; : Set Camera XYZ Scale Factors +// VDU 23, 0, &A0, sid; &48, 22, anglex; : Set Camera X Rotation Angle +// VDU 23, 0, &A0, sid; &48, 23, angley; : Set Camera Y Rotation Angle +// VDU 23, 0, &A0, sid; &48, 24, anglez; : Set Camera Z Rotation Angle +// VDU 23, 0, &A0, sid; &48, 25, anglex; angley; anglez; : Set Camera XYZ Rotation Angles +// VDU 23, 0, &A0, sid; &48, 26, distx; : Set Camera X Translation Distance +// VDU 23, 0, &A0, sid; &48, 27, disty; : Set Camera Y Translation Distance +// VDU 23, 0, &A0, sid; &48, 28, distz; : Set Camera Z Translation Distance +// VDU 23, 0, &A0, sid; &48, 29, distx; disty; distz; : Set Camera XYZ Translation Distances +// VDU 23, 0, &A0, sid; &48, 30, bmid; : Render To Bitmap +// VDU 23, 0, &A0, sid; &48, 31 : Delete Control Structure // void VDUStreamProcessor::bufferUsePingo3D(uint16_t bufferId) { auto subcmd = readByte_t(); @@ -1757,7 +1769,7 @@ void VDUStreamProcessor::bufferUsePingo3D(uint16_t bufferId) { } else { debug_log("bufferUsePingo3D: buffer %d missing width\n\r", bufferId); } - } else if (subcmd == 19) { + } else if (subcmd == 31) { // Deinitialize the control structure // Delete the buffer auto bufferIter = buffers.find(bufferId); From 920290d6bea495c551415af40d93dc92c1f3db2c Mon Sep 17 00:00:00 2001 From: Curtis Whitley Date: Mon, 6 May 2024 14:54:33 -0400 Subject: [PATCH 27/49] interim; adding subcommands --- video/pingo/assets/teapot.bas | 13 +++- video/pingo_3d.h | 118 ++++++++++++++++------------------ 2 files changed, 67 insertions(+), 64 deletions(-) diff --git a/video/pingo/assets/teapot.bas b/video/pingo/assets/teapot.bas index fb332437..3030a2a6 100644 --- a/video/pingo/assets/teapot.bas +++ b/video/pingo/assets/teapot.bas @@ -626,9 +626,16 @@ 6234 PRINT "Max absolute value = ";max_abs 6236 PRINT "Factor = ";factor 6240 sid%=100: mid%=1: oid%=1: bmid1%=101: bmid2%=102 -6245 PRINT "Creating control structure" -6247 scene_width%=64: scene_height%=64 -6250 VDU 23,0, &A0, sid%; &48,0, scene_width%; scene_height%; : REM Create Control Structure +6241 PRINT "Creating control structure" +6242 scene_width%=64: scene_height%=64 +6243 VDU 23,0, &A0, sid%; &48,0, scene_width%; scene_height%; : REM Create Control Structure +6244 f=32767.0/256.0 +6245 distx=0*f: disty=2*f: distz=-20*f +6246 VDU 23,0, &A0, sid%; &48, 29, distx; disty; distz; : REM Set Camera XYZ Translation Distances +6247 pi2=PI*2.0: f=32767.0/pi2 +6248 anglex=-0.4*f +6249 VDU 23,0, &A0, sid%; &48, 22, anglex; : REM Set Camera X Rotation Angle + 6255 PRINT "Sending vertices using factor ";factor 6260 VDU 23,0, &A0, sid%; &48, 1, mid%; teapot_vertices%; : REM Define Mesh Vertices 6270 FOR i%=0 TO total_coords%-1 diff --git a/video/pingo_3d.h b/video/pingo_3d.h index e2d14737..d1c26cc4 100644 --- a/video/pingo_3d.h +++ b/video/pingo_3d.h @@ -37,6 +37,14 @@ typedef struct tag_Transformable { p3d::Mat4 m_transform; bool m_modified; + void initialize() { + memset(this, 0, sizeof(struct tag_Transformable)); + m_scale.x = 1.0f; + m_scale.y = 1.0f; + m_scale.z = 1.0f; + m_modified = true; + } + void compute_transformation_matrix() { m_transform = p3d::mat4Scale(m_scale); if (m_rotation.x) { @@ -117,6 +125,7 @@ typedef struct tag_Pingo3dControl { p3d::PingoDepth* m_zeta; // Zeta buffer for depth information uint16_t m_width; // Width of final render in pixels uint16_t m_height; // Height of final render in pixels + Transformable m_camera; // Camera settings std::map* m_meshes; // Map of meshes for use by objects std::map* m_objects; // Map of textured objects that use meshes and have transforms @@ -132,6 +141,7 @@ typedef struct tag_Pingo3dControl { m_size = sizeof(tag_Pingo3dControl); m_width = width; m_height = height; + m_camera.initialize(); auto frame_size = (uint32_t) width * (uint32_t) height; @@ -236,8 +246,7 @@ typedef struct tag_Pingo3dControl { object.m_oid = oid; object.m_object.material = &object.m_material; object.m_material.texture = &object.m_texture; - object.m_scale = p3d::Vec3f { 1.0f, 1.0f, 1.0f }; - object.m_modified = true; + object.initialize(); (*m_objects).insert(std::pair(oid, object)); return &m_objects->find(oid)->second; } else { @@ -560,119 +569,108 @@ typedef struct tag_Pingo3dControl { // VDU 23, 0, &A0, sid; &48, 18, oid; scalex; : Set Camera X Scale Factor void set_camera_x_scale_factor() { - auto object = get_object(); auto value = m_proc->readWord_t(); - if (object && (value >= 0)) { - object->m_scale.x = convert_scale_value(value); - object->m_modified = true; + if (value >= 0) { + m_camera.m_scale.x = convert_scale_value(value); + m_camera.m_modified = true; } } // VDU 23, 0, &A0, sid; &48, 19, oid; scaley; : Set Camera Y Scale Factor void set_camera_y_scale_factor() { - auto object = get_object(); auto value = m_proc->readWord_t(); - if (object && (value >= 0)) { - object->m_scale.y = convert_scale_value(value); - object->m_modified = true; + if (value >= 0) { + m_camera.m_scale.y = convert_scale_value(value); + m_camera.m_modified = true; } } // VDU 23, 0, &A0, sid; &48, 20, oid; scalez; : Set Camera Z Scale Factor void set_camera_z_scale_factor() { - auto object = get_object(); auto value = m_proc->readWord_t(); - if (object && (value >= 0)) { - object->m_scale.y = convert_scale_value(value); - object->m_modified = true; + if (value >= 0) { + m_camera.m_scale.y = convert_scale_value(value); + m_camera.m_modified = true; } } // VDU 23, 0, &A0, sid; &48, 21, oid; scalex; scaley; scalez : Set Camera XYZ Scale Factors void set_camera_xyz_scale_factors() { - auto object = get_object(); auto valuex = m_proc->readWord_t(); auto valuey = m_proc->readWord_t(); auto valuez = m_proc->readWord_t(); - if (object && (valuex >= 0) && (valuey >= 0) && (valuez >= 0)) { - object->m_scale.x = convert_scale_value(valuex); - object->m_scale.y = convert_scale_value(valuey); - object->m_scale.z = convert_scale_value(valuez); - object->m_modified = true; + if ((valuex >= 0) && (valuey >= 0) && (valuez >= 0)) { + m_camera.m_scale.x = convert_scale_value(valuex); + m_camera.m_scale.y = convert_scale_value(valuey); + m_camera.m_scale.z = convert_scale_value(valuez); + m_camera.m_modified = true; } } // VDU 23, 0, &A0, sid; &48, 22, oid; anglex; : Set Camera X Rotation Angle void set_camera_x_rotation_angle() { - auto object = get_object(); auto value = m_proc->readWord_t(); - if (object && (value >= 0)) { - object->m_rotation.x = convert_rotation_value(value); - object->m_modified = true; + if (value >= 0) { + m_camera.m_rotation.x = convert_rotation_value(value); + m_camera.m_modified = true; } } // VDU 23, 0, &A0, sid; &48, 23, oid; angley; : Set Camera Y Rotation Angle void set_camera_y_rotation_angle() { - auto object = get_object(); auto value = m_proc->readWord_t(); - if (object && (value >= 0)) { - object->m_rotation.y = convert_rotation_value(value); - object->m_modified = true; + if (value >= 0) { + m_camera.m_rotation.y = convert_rotation_value(value); + m_camera.m_modified = true; } } // VDU 23, 0, &A0, sid; &48, 24, oid; anglez; : Set Camera Z Rotation Angle void set_camera_z_rotation_angle() { - auto object = get_object(); auto value = m_proc->readWord_t(); - if (object && (value >= 0)) { - object->m_rotation.z = convert_rotation_value(value); - object->m_modified = true; + if (value >= 0) { + m_camera.m_rotation.z = convert_rotation_value(value); + m_camera.m_modified = true; } } // VDU 23, 0, &A0, sid; &48, 25, oid; anglex; angley; anglez; : Set Camera XYZ Rotation Angles void set_camera_xyz_rotation_angles() { - auto object = get_object(); auto valuex = m_proc->readWord_t(); auto valuey = m_proc->readWord_t(); auto valuez = m_proc->readWord_t(); - if (object && (valuex >= 0) && (valuey >= 0) && (valuez >= 0)) { - object->m_rotation.x = convert_rotation_value(valuex); - object->m_rotation.y = convert_rotation_value(valuey); - object->m_rotation.z = convert_rotation_value(valuez); - object->m_modified = true; + if ((valuex >= 0) && (valuey >= 0) && (valuez >= 0)) { + m_camera.m_rotation.x = convert_rotation_value(valuex); + m_camera.m_rotation.y = convert_rotation_value(valuey); + m_camera.m_rotation.z = convert_rotation_value(valuez); + m_camera.m_modified = true; } } // VDU 23, 0, &A0, sid; &48, 26, oid; distx; : Set Camera X Translation Distance void set_camera_x_translation_distance() { - auto object = get_object(); auto value = m_proc->readWord_t(); - if (object && (value >= 0)) { - object->m_translation.x = convert_translation_value(value); - object->m_modified = true; + if (value >= 0) { + m_camera.m_translation.x = convert_translation_value(value); + m_camera.m_modified = true; } } // VDU 23, 0, &A0, sid; &48, 27, oid; disty; : Set Camera Y Translation Distance void set_camera_y_translation_distance() { - auto object = get_object(); auto value = m_proc->readWord_t(); - if (object && (value >= 0)) { - object->m_translation.y = convert_translation_value(value); - object->m_modified = true; + if (value >= 0) { + m_camera.m_translation.y = convert_translation_value(value); + m_camera.m_modified = true; } } // VDU 23, 0, &A0, sid; &48, 28, oid; distz; : Set Camera Z Translation Distance void set_camera_z_translation_distance() { - auto object = get_object(); auto value = m_proc->readWord_t(); - if (object && (value >= 0)) { - object->m_translation.z = convert_translation_value(value); - object->m_modified = true; + if (value >= 0) { + m_camera.m_translation.z = convert_translation_value(value); + m_camera.m_modified = true; } } @@ -681,11 +679,11 @@ typedef struct tag_Pingo3dControl { auto valuex = m_proc->readWord_t(); auto valuey = m_proc->readWord_t(); auto valuez = m_proc->readWord_t(); - if (object && (valuex >= 0) && (valuey >= 0) && (valuez >= 0)) { - object->m_translation.x = convert_translation_value(valuex); - object->m_translation.y = convert_translation_value(valuey); - object->m_translation.z = convert_translation_value(valuez); - object->m_modified = true; + if ((valuex >= 0) && (valuey >= 0) && (valuez >= 0)) { + m_camera.m_translation.x = convert_translation_value(valuex); + m_camera.m_translation.y = convert_translation_value(valuey); + m_camera.m_translation.z = convert_translation_value(valuez); + m_camera.m_modified = true; } } @@ -728,17 +726,15 @@ typedef struct tag_Pingo3dControl { } p3d::F_TYPE phi = 0; - p3d::Mat4 t; // Set the projection matrix renderer.camera_projection = p3d::mat4Perspective( 1, 2500.0, (p3d::F_TYPE)size.x / (p3d::F_TYPE)size.y, 0.6); - // Set the view matrix (position and orientation of the "camera") - p3d::Mat4 view = p3d::mat4Translate((p3d::Vec3f) {0, 2, -20.0}); - - p3d::Mat4 rotateDown = p3d::mat4RotateX(-0.40); // Rotate around origin/orbit - renderer.camera_view = mat4MultiplyM(&rotateDown, &view); + if (m_camera.m_modified) { + m_camera.compute_transformation_matrix(); + } + renderer.camera_view = m_camera.m_transform; // Set the scene transformation matrix scene.transform = p3d::mat4RotateY(phi); From 8b7382caafe46ea56c11895f1ce57a44e98c35ff Mon Sep 17 00:00:00 2001 From: Curtis Whitley Date: Mon, 6 May 2024 16:59:10 -0400 Subject: [PATCH 28/49] debugging edits --- video/pingo/assets/teapot.bas | 2 +- video/pingo_3d.h | 92 ++++++++++++++++------------------- 2 files changed, 44 insertions(+), 50 deletions(-) diff --git a/video/pingo/assets/teapot.bas b/video/pingo/assets/teapot.bas index 3030a2a6..ab4f400a 100644 --- a/video/pingo/assets/teapot.bas +++ b/video/pingo/assets/teapot.bas @@ -673,7 +673,7 @@ 6414 VDU 23, 27, 2, scene_width%; scene_height%; &0000; &00C0; : REM Create solid color bitmap 6415 PRINT "Render 3D object" 6417 rotatex=0.0: rotatey=0.0: rotatez=0.0 -6418 incx=PI/16.0: incy=PI/32.0: incz=PI/64.0: pi2=PI*2.0 +6418 incx=PI/16.0: incy=PI/32.0: incz=PI/64.0 6419 factor=32767.0/pi2 6420 VDU 23, 0, &A0, sid%; &48, 30, bmid2%+64000; : REM Render To Bitmap 6510 VDU 23, 27, 3, 100; 100; : REM Display output bitmap diff --git a/video/pingo_3d.h b/video/pingo_3d.h index d1c26cc4..2d443b85 100644 --- a/video/pingo_3d.h +++ b/video/pingo_3d.h @@ -37,14 +37,18 @@ typedef struct tag_Transformable { p3d::Mat4 m_transform; bool m_modified; - void initialize() { - memset(this, 0, sizeof(struct tag_Transformable)); + void initialize_scale() { m_scale.x = 1.0f; m_scale.y = 1.0f; m_scale.z = 1.0f; m_modified = true; } + void initialize() { + memset(this, 0, sizeof(struct tag_Transformable)); + initialize_scale(); + } + void compute_transformation_matrix() { m_transform = p3d::mat4Scale(m_scale); if (m_rotation.x) { @@ -82,9 +86,13 @@ typedef struct tag_TexObject : public Transformable { p3d::Material m_material; uint16_t m_oid; - void update_transformation_matrix() { + void initialize() { + Transformable::initialize(); m_object.material = &m_material; m_material.texture = &m_texture; + } + + void update_transformation_matrix() { compute_transformation_matrix(); m_object.transform = m_transform; } @@ -141,7 +149,7 @@ typedef struct tag_Pingo3dControl { m_size = sizeof(tag_Pingo3dControl); m_width = width; m_height = height; - m_camera.initialize(); + m_camera.initialize_scale(); auto frame_size = (uint32_t) width * (uint32_t) height; @@ -484,7 +492,7 @@ typedef struct tag_Pingo3dControl { void set_object_x_rotation_angle() { auto object = get_object(); auto value = m_proc->readWord_t(); - if (object && (value >= 0)) { + if (object) { object->m_rotation.x = convert_rotation_value(value); object->m_modified = true; } @@ -494,7 +502,7 @@ typedef struct tag_Pingo3dControl { void set_object_y_rotation_angle() { auto object = get_object(); auto value = m_proc->readWord_t(); - if (object && (value >= 0)) { + if (object) { object->m_rotation.y = convert_rotation_value(value); object->m_modified = true; } @@ -504,7 +512,7 @@ typedef struct tag_Pingo3dControl { void set_object_z_rotation_angle() { auto object = get_object(); auto value = m_proc->readWord_t(); - if (object && (value >= 0)) { + if (object) { object->m_rotation.z = convert_rotation_value(value); object->m_modified = true; } @@ -516,7 +524,7 @@ typedef struct tag_Pingo3dControl { auto valuex = m_proc->readWord_t(); auto valuey = m_proc->readWord_t(); auto valuez = m_proc->readWord_t(); - if (object && (valuex >= 0) && (valuey >= 0) && (valuez >= 0)) { + if (object) { object->m_rotation.x = convert_rotation_value(valuex); object->m_rotation.y = convert_rotation_value(valuey); object->m_rotation.z = convert_rotation_value(valuez); @@ -528,7 +536,7 @@ typedef struct tag_Pingo3dControl { void set_object_x_translation_distance() { auto object = get_object(); auto value = m_proc->readWord_t(); - if (object && (value >= 0)) { + if (object) { object->m_translation.x = convert_translation_value(value); object->m_modified = true; } @@ -538,7 +546,7 @@ typedef struct tag_Pingo3dControl { void set_object_y_translation_distance() { auto object = get_object(); auto value = m_proc->readWord_t(); - if (object && (value >= 0)) { + if (object) { object->m_translation.y = convert_translation_value(value); object->m_modified = true; } @@ -548,7 +556,7 @@ typedef struct tag_Pingo3dControl { void set_object_z_translation_distance() { auto object = get_object(); auto value = m_proc->readWord_t(); - if (object && (value >= 0)) { + if (object) { object->m_translation.z = convert_translation_value(value); object->m_modified = true; } @@ -559,7 +567,7 @@ typedef struct tag_Pingo3dControl { auto valuex = m_proc->readWord_t(); auto valuey = m_proc->readWord_t(); auto valuez = m_proc->readWord_t(); - if (object && (valuex >= 0) && (valuey >= 0) && (valuez >= 0)) { + if (object) { object->m_translation.x = convert_translation_value(valuex); object->m_translation.y = convert_translation_value(valuey); object->m_translation.z = convert_translation_value(valuez); @@ -610,28 +618,22 @@ typedef struct tag_Pingo3dControl { // VDU 23, 0, &A0, sid; &48, 22, oid; anglex; : Set Camera X Rotation Angle void set_camera_x_rotation_angle() { auto value = m_proc->readWord_t(); - if (value >= 0) { - m_camera.m_rotation.x = convert_rotation_value(value); - m_camera.m_modified = true; - } + m_camera.m_rotation.x = convert_rotation_value(value); + m_camera.m_modified = true; } // VDU 23, 0, &A0, sid; &48, 23, oid; angley; : Set Camera Y Rotation Angle void set_camera_y_rotation_angle() { auto value = m_proc->readWord_t(); - if (value >= 0) { - m_camera.m_rotation.y = convert_rotation_value(value); - m_camera.m_modified = true; - } + m_camera.m_rotation.y = convert_rotation_value(value); + m_camera.m_modified = true; } // VDU 23, 0, &A0, sid; &48, 24, oid; anglez; : Set Camera Z Rotation Angle void set_camera_z_rotation_angle() { auto value = m_proc->readWord_t(); - if (value >= 0) { - m_camera.m_rotation.z = convert_rotation_value(value); - m_camera.m_modified = true; - } + m_camera.m_rotation.z = convert_rotation_value(value); + m_camera.m_modified = true; } // VDU 23, 0, &A0, sid; &48, 25, oid; anglex; angley; anglez; : Set Camera XYZ Rotation Angles @@ -639,39 +641,31 @@ typedef struct tag_Pingo3dControl { auto valuex = m_proc->readWord_t(); auto valuey = m_proc->readWord_t(); auto valuez = m_proc->readWord_t(); - if ((valuex >= 0) && (valuey >= 0) && (valuez >= 0)) { - m_camera.m_rotation.x = convert_rotation_value(valuex); - m_camera.m_rotation.y = convert_rotation_value(valuey); - m_camera.m_rotation.z = convert_rotation_value(valuez); - m_camera.m_modified = true; - } + m_camera.m_rotation.x = convert_rotation_value(valuex); + m_camera.m_rotation.y = convert_rotation_value(valuey); + m_camera.m_rotation.z = convert_rotation_value(valuez); + m_camera.m_modified = true; } // VDU 23, 0, &A0, sid; &48, 26, oid; distx; : Set Camera X Translation Distance void set_camera_x_translation_distance() { auto value = m_proc->readWord_t(); - if (value >= 0) { - m_camera.m_translation.x = convert_translation_value(value); - m_camera.m_modified = true; - } + m_camera.m_translation.x = convert_translation_value(value); + m_camera.m_modified = true; } // VDU 23, 0, &A0, sid; &48, 27, oid; disty; : Set Camera Y Translation Distance void set_camera_y_translation_distance() { auto value = m_proc->readWord_t(); - if (value >= 0) { - m_camera.m_translation.y = convert_translation_value(value); - m_camera.m_modified = true; - } + m_camera.m_translation.y = convert_translation_value(value); + m_camera.m_modified = true; } // VDU 23, 0, &A0, sid; &48, 28, oid; distz; : Set Camera Z Translation Distance void set_camera_z_translation_distance() { auto value = m_proc->readWord_t(); - if (value >= 0) { - m_camera.m_translation.z = convert_translation_value(value); - m_camera.m_modified = true; - } + m_camera.m_translation.z = convert_translation_value(value); + m_camera.m_modified = true; } // VDU 23, 0, &A0, sid; &48, 29, oid; distx; disty; distz : Set Camera XYZ Translation Distances @@ -679,12 +673,10 @@ typedef struct tag_Pingo3dControl { auto valuex = m_proc->readWord_t(); auto valuey = m_proc->readWord_t(); auto valuez = m_proc->readWord_t(); - if ((valuex >= 0) && (valuey >= 0) && (valuez >= 0)) { - m_camera.m_translation.x = convert_translation_value(valuex); - m_camera.m_translation.y = convert_translation_value(valuey); - m_camera.m_translation.z = convert_translation_value(valuez); - m_camera.m_modified = true; - } + m_camera.m_translation.x = convert_translation_value(valuex); + m_camera.m_translation.y = convert_translation_value(valuey); + m_camera.m_translation.z = convert_translation_value(valuez); + m_camera.m_modified = true; } // VDU 23, 0, &A0, sid; &48, 30, bmid; : Render To Bitmap @@ -720,7 +712,7 @@ typedef struct tag_Pingo3dControl { for (auto object = m_objects->begin(); object != m_objects->end(); object++) { if (object->second.m_modified) { object->second.update_transformation_matrix(); - //object->second.dump(); + object->second.dump(); } sceneAddRenderable(&scene, p3d::object_as_renderable(&object->second.m_object)); } @@ -734,6 +726,8 @@ typedef struct tag_Pingo3dControl { if (m_camera.m_modified) { m_camera.compute_transformation_matrix(); } + debug_log("Camera:\n"); + m_camera.dump(); renderer.camera_view = m_camera.m_transform; // Set the scene transformation matrix From c42a64a72fc7fe64c4ab7da07f5df70410627f7a Mon Sep 17 00:00:00 2001 From: Curtis Whitley Date: Tue, 7 May 2024 10:30:48 -0400 Subject: [PATCH 29/49] has most camera settings commands --- video/pingo/assets/teapot.bas | 17 +++++++++----- video/pingo/vdu_pingo.md | 2 +- video/pingo_3d.h | 43 +++++++++++++++++++---------------- 3 files changed, 36 insertions(+), 26 deletions(-) diff --git a/video/pingo/assets/teapot.bas b/video/pingo/assets/teapot.bas index ab4f400a..10906a9a 100644 --- a/video/pingo/assets/teapot.bas +++ b/video/pingo/assets/teapot.bas @@ -627,8 +627,8 @@ 6236 PRINT "Factor = ";factor 6240 sid%=100: mid%=1: oid%=1: bmid1%=101: bmid2%=102 6241 PRINT "Creating control structure" -6242 scene_width%=64: scene_height%=64 -6243 VDU 23,0, &A0, sid%; &48,0, scene_width%; scene_height%; : REM Create Control Structure +6242 scene_width%=96: scene_height%=96 +6243 VDU 23,0, &A0, sid%; &48, 0, scene_width%; scene_height%; : REM Create Control Structure 6244 f=32767.0/256.0 6245 distx=0*f: disty=2*f: distz=-20*f 6246 VDU 23,0, &A0, sid%; &48, 29, distx; disty; distz; : REM Set Camera XYZ Translation Distances @@ -672,15 +672,20 @@ 6413 VDU 23, 27, 0, bmid2% : REM Select output bitmap 6414 VDU 23, 27, 2, scene_width%; scene_height%; &0000; &00C0; : REM Create solid color bitmap 6415 PRINT "Render 3D object" +6416 VDU 23, 0, &C3: REM Flip buffer 6417 rotatex=0.0: rotatey=0.0: rotatez=0.0 6418 incx=PI/16.0: incy=PI/32.0: incz=PI/64.0 6419 factor=32767.0/pi2 -6420 VDU 23, 0, &A0, sid%; &48, 30, bmid2%+64000; : REM Render To Bitmap -6510 VDU 23, 27, 3, 100; 100; : REM Display output bitmap -6512 *FX 19 +6420 VDU 22, 136: REM 320x240x64 +6421 VDU 23, 0, &C0, 0: REM Normal coordinates +6422 CLG +6423 VDU 23, 0, &A0, sid%; &48, 30, bmid2%+64000; : REM Render To Bitmap +6510 VDU 23, 27, 3, 50; 50; : REM Display output bitmap +6512 VDU 23, 0, &C3: REM Flip buffer +6514 *FX 19 6520 rotatex=rotatex+incx: IF rotatex>=pi2 THEN rotatex=rotatex-pi2 6530 rotatey=rotatey+incy: IF rotatey>=pi2 THEN rotatey=rotatey-pi2 6540 rotatez=rotatez+incz: IF rotatez>=pi2 THEN rotatez=rotatez-pi2 6550 rx=rotatex*factor: ry=rotatey*factor: rz=rotatez*factor 6560 VDU 23, 0, &A0, sid%; &48, 13, oid%; rx; ry; rz; : REM Set Object XYZ Rotation Angles -6570 GOTO 6420 +6570 GOTO 6422 diff --git a/video/pingo/vdu_pingo.md b/video/pingo/vdu_pingo.md index c1e77963..8a52af0a 100644 --- a/video/pingo/vdu_pingo.md +++ b/video/pingo/vdu_pingo.md @@ -75,7 +75,7 @@ To prescale a set of distances for use in a VDU command, divide the distances by scale them all to fit within the range -1.0 to +1.0, then multiply the new floating point values by 32767. ``` -F = 256 +F = 32767 / 256 PDX = DX * F PDY = DY * F PDZ = DZ * F diff --git a/video/pingo_3d.h b/video/pingo_3d.h index 2d443b85..a62f6cba 100644 --- a/video/pingo_3d.h +++ b/video/pingo_3d.h @@ -86,12 +86,16 @@ typedef struct tag_TexObject : public Transformable { p3d::Material m_material; uint16_t m_oid; - void initialize() { - Transformable::initialize(); + void bind() { m_object.material = &m_material; m_material.texture = &m_texture; } + void initialize() { + Transformable::initialize(); + bind(); + } + void update_transformation_matrix() { compute_transformation_matrix(); m_object.transform = m_transform; @@ -189,7 +193,7 @@ typedef struct tag_Pingo3dControl { } void handle_subcommand(VDUStreamProcessor& processor, uint8_t subcmd) { - debug_log("P3D: handle_subcommand(%hu)\n", subcmd); + //debug_log("P3D: handle_subcommand(%hu)\n", subcmd); m_proc = &processor; switch (subcmd) { case 1: define_mesh_vertices(); break; @@ -252,8 +256,6 @@ typedef struct tag_Pingo3dControl { TexObject object; memset(&object, 0, sizeof(object)); object.m_oid = oid; - object.m_object.material = &object.m_material; - object.m_material.texture = &object.m_texture; object.initialize(); (*m_objects).insert(std::pair(oid, object)); return &m_objects->find(oid)->second; @@ -402,6 +404,7 @@ typedef struct tag_Pingo3dControl { if (bitmap) { auto size = p3d::Vec2i{(p3d::I_TYPE)bitmap->width, (p3d::I_TYPE)bitmap->height}; auto pix = (p3d::Pixel*) bitmap->data; + object->bind(); texture_init(&object->m_texture, size, pix); object->m_object.mesh = mesh; debug_log("Texture data: %02hX %02hX %02hX %02hX\n", pix->r, pix->g, pix->b, pix->a); @@ -427,7 +430,7 @@ typedef struct tag_Pingo3dControl { if (value & 0x8000) { value = (int32_t)(int16_t)(uint16_t) value; } - static const p3d::F_TYPE factor = 1.0f / 256.0f; + static const p3d::F_TYPE factor = 256.0f / 32767.0f; return ((p3d::F_TYPE) value) * factor; } @@ -563,7 +566,8 @@ typedef struct tag_Pingo3dControl { } // VDU 23, 0, &A0, sid; &48, 17, oid; distx; disty; distz : Set Object XYZ Translation Distances - void set_object_xyz_translation_distances() { auto object = get_object(); + void set_object_xyz_translation_distances() { + auto object = get_object(); auto valuex = m_proc->readWord_t(); auto valuey = m_proc->readWord_t(); auto valuez = m_proc->readWord_t(); @@ -669,7 +673,7 @@ typedef struct tag_Pingo3dControl { } // VDU 23, 0, &A0, sid; &48, 29, oid; distx; disty; distz : Set Camera XYZ Translation Distances - void set_camera_xyz_translation_distances() { auto object = get_object(); + void set_camera_xyz_translation_distances() { auto valuex = m_proc->readWord_t(); auto valuey = m_proc->readWord_t(); auto valuez = m_proc->readWord_t(); @@ -699,7 +703,7 @@ typedef struct tag_Pingo3dControl { debug_log("render_to_bitmap: output bitmap %u not found or invalid\n", bmid); } - auto start = millis(); + //auto start = millis(); auto size = p3d::Vec2i{(p3d::I_TYPE)m_width, (p3d::I_TYPE)m_height}; p3d::Renderer renderer; rendererInit(&renderer, size, &m_backend ); @@ -710,9 +714,10 @@ typedef struct tag_Pingo3dControl { p3d::rendererSetScene(&renderer, &scene); for (auto object = m_objects->begin(); object != m_objects->end(); object++) { + object->second.bind(); if (object->second.m_modified) { object->second.update_transformation_matrix(); - object->second.dump(); + //object->second.dump(); } sceneAddRenderable(&scene, p3d::object_as_renderable(&object->second.m_object)); } @@ -726,26 +731,26 @@ typedef struct tag_Pingo3dControl { if (m_camera.m_modified) { m_camera.compute_transformation_matrix(); } - debug_log("Camera:\n"); - m_camera.dump(); + //debug_log("Camera:\n"); + //m_camera.dump(); renderer.camera_view = m_camera.m_transform; // Set the scene transformation matrix scene.transform = p3d::mat4RotateY(phi); phi += 0.01; - debug_log("Frame data: %02hX %02hX %02hX %02hX\n", m_frame->r, m_frame->g, m_frame->b, m_frame->a); - debug_log("Destination: %02hX %02hX %02hX %02hX\n", dst_pix->r, dst_pix->g, dst_pix->b, dst_pix->a); + //debug_log("Frame data: %02hX %02hX %02hX %02hX\n", m_frame->r, m_frame->g, m_frame->b, m_frame->a); + //debug_log("Destination: %02hX %02hX %02hX %02hX\n", dst_pix->r, dst_pix->g, dst_pix->b, dst_pix->a); rendererRender(&renderer); memcpy(dst_pix, m_frame, sizeof(p3d::Pixel) * m_width * m_height); - auto stop = millis(); - auto diff = stop - start; - debug_log("Render to %ux%u took %u ms\n", m_width, m_height, diff); - debug_log("Frame data: %02hX %02hX %02hX %02hX\n", m_frame->r, m_frame->g, m_frame->b, m_frame->a); - debug_log("Final data: %02hX %02hX %02hX %02hX\n", dst_pix->r, dst_pix->g, dst_pix->b, dst_pix->a); + //auto stop = millis(); + //auto diff = stop - start; + //debug_log("Render to %ux%u took %u ms\n", m_width, m_height, diff); + //debug_log("Frame data: %02hX %02hX %02hX %02hX\n", m_frame->r, m_frame->g, m_frame->b, m_frame->a); + //debug_log("Final data: %02hX %02hX %02hX %02hX\n", dst_pix->r, dst_pix->g, dst_pix->b, dst_pix->a); } } Pingo3dControl; From c63e4c352c24065dac5423a9c0a023e5d023b306 Mon Sep 17 00:00:00 2001 From: Curtis Whitley Date: Tue, 7 May 2024 11:46:35 -0400 Subject: [PATCH 30/49] fix bugs and renumber sample app --- video/pingo/assets/teapot.bas | 1380 ++++++++++++++++----------------- video/pingo/vdu_pingo.md | 160 +++- video/pingo_3d.h | 211 +++-- video/vdu_buffered.h | 38 +- 4 files changed, 990 insertions(+), 799 deletions(-) diff --git a/video/pingo/assets/teapot.bas b/video/pingo/assets/teapot.bas index 10906a9a..858b6930 100644 --- a/video/pingo/assets/teapot.bas +++ b/video/pingo/assets/teapot.bas @@ -1,691 +1,689 @@ -10 REM teapot.bas -20 REM Sample app to illustrate Pingo 3D on Agon -30 REM -40 REM -- VERTICES -- -50 teapot_vertices%=1728 -60 DATA 0.700000,-1.200000,0.000000,0.605600,-1.200000,-0.355700,0.598800,-1.243700,-0.351700,0.598800,-1.243700,-0.351700 -70 DATA 0.692100,-1.243700,0.000000,0.700000,-1.200000,0.000000,0.692100,-1.243700,0.000000,0.598800,-1.243700,-0.351700 -80 DATA 0.619600,-1.243700,-0.363900,0.619600,-1.243700,-0.363900,0.716200,-1.243700,0.000000,0.692100,-1.243700,0.000000 -90 DATA 0.716200,-1.243700,0.000000,0.619600,-1.243700,-0.363900,0.648900,-1.200000,-0.381100,0.648900,-1.200000,-0.381100 -100 DATA 0.750000,-1.200000,0.000000,0.716200,-1.243700,0.000000,0.605600,-1.200000,-0.355700,0.355700,-1.200000,-0.605600 -110 DATA 0.351700,-1.243700,-0.598800,0.351700,-1.243700,-0.598800,0.598800,-1.243700,-0.351700,0.605600,-1.200000,-0.355700 -120 DATA 0.598800,-1.243700,-0.351700,0.351700,-1.243700,-0.598800,0.363900,-1.243800,-0.619600,0.363900,-1.243800,-0.619600 -130 DATA 0.619600,-1.243700,-0.363900,0.598800,-1.243700,-0.351700,0.619600,-1.243700,-0.363900,0.363900,-1.243800,-0.619600 -140 DATA 0.381100,-1.200000,-0.648900,0.381100,-1.200000,-0.648900,0.648900,-1.200000,-0.381100,0.619600,-1.243700,-0.363900 -150 DATA 0.355700,-1.200000,-0.605600,0.000000,-1.200000,-0.700000,0.000000,-1.243700,-0.692100,0.000000,-1.243700,-0.692100 -160 DATA 0.351700,-1.243700,-0.598800,0.355700,-1.200000,-0.605600,0.351700,-1.243700,-0.598800,0.000000,-1.243700,-0.692100 -170 DATA 0.000000,-1.243800,-0.716200,0.000000,-1.243800,-0.716200,0.363900,-1.243800,-0.619600,0.351700,-1.243700,-0.598800 -180 DATA 0.363900,-1.243800,-0.619600,0.000000,-1.243800,-0.716200,0.000000,-1.200000,-0.750000,0.000000,-1.200000,-0.750000 -190 DATA 0.381100,-1.200000,-0.648900,0.363900,-1.243800,-0.619600,0.000000,-1.200000,-0.700000,-0.375700,-1.200000,-0.605600 -200 DATA -0.357600,-1.243700,-0.598800,-0.357600,-1.243700,-0.598800,0.000000,-1.243700,-0.692100,0.000000,-1.200000,-0.700000 -210 DATA 0.000000,-1.243700,-0.692100,-0.357600,-1.243700,-0.598800,-0.364700,-1.243700,-0.619600,-0.364700,-1.243700,-0.619600 -220 DATA 0.000000,-1.243800,-0.716200,0.000000,-1.243700,-0.692100,0.000000,-1.243800,-0.716200,-0.364700,-1.243700,-0.619600 -230 DATA -0.381100,-1.200000,-0.648900,-0.381100,-1.200000,-0.648900,0.000000,-1.200000,-0.750000,0.000000,-1.243800,-0.716200 -240 DATA -0.375700,-1.200000,-0.605600,-0.615600,-1.200000,-0.355700,-0.601800,-1.243700,-0.351700,-0.601800,-1.243700,-0.351700 -250 DATA -0.357600,-1.243700,-0.598800,-0.375700,-1.200000,-0.605600,-0.357600,-1.243700,-0.598800,-0.601800,-1.243700,-0.351700 -260 DATA -0.620000,-1.243700,-0.363900,-0.620000,-1.243700,-0.363900,-0.364700,-1.243700,-0.619600,-0.357600,-1.243700,-0.598800 -270 DATA -0.364700,-1.243700,-0.619600,-0.620000,-1.243700,-0.363900,-0.648900,-1.200000,-0.381100,-0.648900,-1.200000,-0.381100 -280 DATA -0.381100,-1.200000,-0.648900,-0.364700,-1.243700,-0.619600,-0.615600,-1.200000,-0.355700,-0.700000,-1.200000,0.000000 -290 DATA -0.692100,-1.243700,0.000000,-0.692100,-1.243700,0.000000,-0.601800,-1.243700,-0.351700,-0.615600,-1.200000,-0.355700 -300 DATA -0.601800,-1.243700,-0.351700,-0.692100,-1.243700,0.000000,-0.716200,-1.243700,0.000000,-0.716200,-1.243700,0.000000 -310 DATA -0.620000,-1.243700,-0.363900,-0.601800,-1.243700,-0.351700,-0.620000,-1.243700,-0.363900,-0.716200,-1.243700,0.000000 -320 DATA -0.750000,-1.200000,0.000000,-0.750000,-1.200000,0.000000,-0.648900,-1.200000,-0.381100,-0.620000,-1.243700,-0.363900 -330 DATA -0.700000,-1.200000,0.000000,-0.605600,-1.200000,0.355700,-0.598800,-1.243700,0.351700,-0.598800,-1.243700,0.351700 -340 DATA -0.692100,-1.243700,0.000000,-0.700000,-1.200000,0.000000,-0.692100,-1.243700,0.000000,-0.598800,-1.243700,0.351700 -350 DATA -0.619600,-1.243700,0.363900,-0.619600,-1.243700,0.363900,-0.716200,-1.243700,0.000000,-0.692100,-1.243700,0.000000 -360 DATA -0.716200,-1.243700,0.000000,-0.619600,-1.243700,0.363900,-0.648900,-1.200000,0.381100,-0.648900,-1.200000,0.381100 -370 DATA -0.750000,-1.200000,0.000000,-0.716200,-1.243700,0.000000,-0.605600,-1.200000,0.355700,-0.355700,-1.200000,0.605600 -380 DATA -0.351700,-1.243700,0.598800,-0.351700,-1.243700,0.598800,-0.598800,-1.243700,0.351700,-0.605600,-1.200000,0.355700 -390 DATA -0.598800,-1.243700,0.351700,-0.351700,-1.243700,0.598800,-0.363900,-1.243700,0.619600,-0.363900,-1.243700,0.619600 -400 DATA -0.619600,-1.243700,0.363900,-0.598800,-1.243700,0.351700,-0.619600,-1.243700,0.363900,-0.363900,-1.243700,0.619600 -410 DATA -0.381100,-1.200000,0.648900,-0.381100,-1.200000,0.648900,-0.648900,-1.200000,0.381100,-0.619600,-1.243700,0.363900 -420 DATA -0.355700,-1.200000,0.605600,0.000000,-1.200000,0.700000,0.000000,-1.243700,0.692100,0.000000,-1.243700,0.692100 -430 DATA -0.351700,-1.243700,0.598800,-0.355700,-1.200000,0.605600,-0.351700,-1.243700,0.598800,0.000000,-1.243700,0.692100 -440 DATA 0.000000,-1.243700,0.716200,0.000000,-1.243700,0.716200,-0.363900,-1.243700,0.619600,-0.351700,-1.243700,0.598800 -450 DATA -0.363900,-1.243700,0.619600,0.000000,-1.243700,0.716200,0.000000,-1.200000,0.750000,0.000000,-1.200000,0.750000 -460 DATA -0.381100,-1.200000,0.648900,-0.363900,-1.243700,0.619600,0.000000,-1.200000,0.700000,0.355700,-1.200000,0.605600 -470 DATA 0.351700,-1.243700,0.598800,0.351700,-1.243700,0.598800,0.000000,-1.243700,0.692100,0.000000,-1.200000,0.700000 -480 DATA 0.000000,-1.243700,0.692100,0.351700,-1.243700,0.598800,0.363900,-1.243700,0.619600,0.363900,-1.243700,0.619600 -490 DATA 0.000000,-1.243700,0.716200,0.000000,-1.243700,0.692100,0.000000,-1.243700,0.716200,0.363900,-1.243700,0.619600 -500 DATA 0.381100,-1.200000,0.648900,0.381100,-1.200000,0.648900,0.000000,-1.200000,0.750000,0.000000,-1.243700,0.716200 -510 DATA 0.355700,-1.200000,0.605600,0.605600,-1.200000,0.355700,0.598800,-1.243700,0.351700,0.598800,-1.243700,0.351700 -520 DATA 0.351700,-1.243700,0.598800,0.355700,-1.200000,0.605600,0.351700,-1.243700,0.598800,0.598800,-1.243700,0.351700 -530 DATA 0.619600,-1.243700,0.363900,0.619600,-1.243700,0.363900,0.363900,-1.243700,0.619600,0.351700,-1.243700,0.598800 -540 DATA 0.363900,-1.243700,0.619600,0.619600,-1.243700,0.363900,0.648900,-1.200000,0.381100,0.648900,-1.200000,0.381100 -550 DATA 0.381100,-1.200000,0.648900,0.363900,-1.243700,0.619600,0.605600,-1.200000,0.355700,0.700000,-1.200000,0.000000 -560 DATA 0.692100,-1.243700,0.000000,0.692100,-1.243700,0.000000,0.598800,-1.243700,0.351700,0.605600,-1.200000,0.355700 -570 DATA 0.598800,-1.243700,0.351700,0.692100,-1.243700,0.000000,0.716200,-1.243700,0.000000,0.716200,-1.243700,0.000000 -580 DATA 0.619600,-1.243700,0.363900,0.598800,-1.243700,0.351700,0.619600,-1.243700,0.363900,0.716200,-1.243700,0.000000 -590 DATA 0.750000,-1.200000,0.000000,0.750000,-1.200000,0.000000,0.648900,-1.200000,0.381100,0.619600,-1.243700,0.363900 -600 DATA 0.750000,-1.200000,0.000000,0.648900,-1.200000,-0.381100,0.753000,-0.938900,-0.442300,0.753000,-0.938900,-0.442300 -610 DATA 0.870400,-0.938900,0.000000,0.750000,-1.200000,0.000000,0.870400,-0.938900,0.000000,0.753000,-0.938900,-0.442300 -620 DATA 0.833100,-0.686100,-0.489300,0.833100,-0.686100,-0.489300,0.963000,-0.686100,0.000000,0.870400,-0.938900,0.000000 -630 DATA 0.963000,-0.686100,0.000000,0.833100,-0.686100,-0.489300,0.865200,-0.450000,-0.508100,0.865200,-0.450000,-0.508100 -640 DATA 1.000000,-0.450000,0.000000,0.963000,-0.686100,0.000000,0.648900,-1.200000,-0.381100,0.381100,-1.200000,-0.648900 -650 DATA 0.442300,-0.938900,-0.753000,0.442300,-0.938900,-0.753000,0.753000,-0.938900,-0.442300,0.648900,-1.200000,-0.381100 -660 DATA 0.753000,-0.938900,-0.442300,0.442300,-0.938900,-0.753000,0.489300,-0.686100,-0.833100,0.489300,-0.686100,-0.833100 -670 DATA 0.833100,-0.686100,-0.489300,0.753000,-0.938900,-0.442300,0.833100,-0.686100,-0.489300,0.489300,-0.686100,-0.833100 -680 DATA 0.508100,-0.450000,-0.865200,0.508100,-0.450000,-0.865200,0.865200,-0.450000,-0.508100,0.833100,-0.686100,-0.489300 -690 DATA 0.381100,-1.200000,-0.648900,0.000000,-1.200000,-0.750000,0.000000,-0.938900,-0.870400,0.000000,-0.938900,-0.870400 -700 DATA 0.442300,-0.938900,-0.753000,0.381100,-1.200000,-0.648900,0.442300,-0.938900,-0.753000,0.000000,-0.938900,-0.870400 -710 DATA 0.000000,-0.686100,-0.963000,0.000000,-0.686100,-0.963000,0.489300,-0.686100,-0.833100,0.442300,-0.938900,-0.753000 -720 DATA 0.489300,-0.686100,-0.833100,0.000000,-0.686100,-0.963000,0.000000,-0.450000,-1.000000,0.000000,-0.450000,-1.000000 -730 DATA 0.508100,-0.450000,-0.865200,0.489300,-0.686100,-0.833100,0.000000,-1.200000,-0.750000,-0.381100,-1.200000,-0.648900 -740 DATA -0.442300,-0.938900,-0.753000,-0.442300,-0.938900,-0.753000,0.000000,-0.938900,-0.870400,0.000000,-1.200000,-0.750000 -750 DATA 0.000000,-0.938900,-0.870400,-0.442300,-0.938900,-0.753000,-0.489300,-0.686100,-0.833100,-0.489300,-0.686100,-0.833100 -760 DATA 0.000000,-0.686100,-0.963000,0.000000,-0.938900,-0.870400,0.000000,-0.686100,-0.963000,-0.489300,-0.686100,-0.833100 -770 DATA -0.508100,-0.450000,-0.865200,-0.508100,-0.450000,-0.865200,0.000000,-0.450000,-1.000000,0.000000,-0.686100,-0.963000 -780 DATA -0.381100,-1.200000,-0.648900,-0.648900,-1.200000,-0.381100,-0.753000,-0.938900,-0.442300,-0.753000,-0.938900,-0.442300 -790 DATA -0.442300,-0.938900,-0.753000,-0.381100,-1.200000,-0.648900,-0.442300,-0.938900,-0.753000,-0.753000,-0.938900,-0.442300 -800 DATA -0.833100,-0.686100,-0.489300,-0.833100,-0.686100,-0.489300,-0.489300,-0.686100,-0.833100,-0.442300,-0.938900,-0.753000 -810 DATA -0.489300,-0.686100,-0.833100,-0.833100,-0.686100,-0.489300,-0.865200,-0.450000,-0.508100,-0.865200,-0.450000,-0.508100 -820 DATA -0.508100,-0.450000,-0.865200,-0.489300,-0.686100,-0.833100,-0.648900,-1.200000,-0.381100,-0.750000,-1.200000,0.000000 -830 DATA -0.870400,-0.938900,0.000000,-0.870400,-0.938900,0.000000,-0.753000,-0.938900,-0.442300,-0.648900,-1.200000,-0.381100 -840 DATA -0.753000,-0.938900,-0.442300,-0.870400,-0.938900,0.000000,-0.963000,-0.686100,0.000000,-0.963000,-0.686100,0.000000 -850 DATA -0.833100,-0.686100,-0.489300,-0.753000,-0.938900,-0.442300,-0.833100,-0.686100,-0.489300,-0.963000,-0.686100,0.000000 -860 DATA -1.000000,-0.450000,0.000000,-1.000000,-0.450000,0.000000,-0.865200,-0.450000,-0.508100,-0.833100,-0.686100,-0.489300 -870 DATA -0.750000,-1.200000,0.000000,-0.648900,-1.200000,0.381100,-0.753000,-0.938900,0.442300,-0.753000,-0.938900,0.442300 -880 DATA -0.870400,-0.938900,0.000000,-0.750000,-1.200000,0.000000,-0.870400,-0.938900,0.000000,-0.753000,-0.938900,0.442300 -890 DATA -0.833100,-0.686100,0.489300,-0.833100,-0.686100,0.489300,-0.963000,-0.686100,0.000000,-0.870400,-0.938900,0.000000 -900 DATA -0.963000,-0.686100,0.000000,-0.833100,-0.686100,0.489300,-0.865200,-0.450000,0.508100,-0.865200,-0.450000,0.508100 -910 DATA -1.000000,-0.450000,0.000000,-0.963000,-0.686100,0.000000,-0.648900,-1.200000,0.381100,-0.381100,-1.200000,0.648900 -920 DATA -0.442300,-0.938900,0.753000,-0.442300,-0.938900,0.753000,-0.753000,-0.938900,0.442300,-0.648900,-1.200000,0.381100 -930 DATA -0.753000,-0.938900,0.442300,-0.442300,-0.938900,0.753000,-0.489300,-0.686100,0.833100,-0.489300,-0.686100,0.833100 -940 DATA -0.833100,-0.686100,0.489300,-0.753000,-0.938900,0.442300,-0.833100,-0.686100,0.489300,-0.489300,-0.686100,0.833100 -950 DATA -0.508100,-0.450000,0.865200,-0.508100,-0.450000,0.865200,-0.865200,-0.450000,0.508100,-0.833100,-0.686100,0.489300 -960 DATA -0.381100,-1.200000,0.648900,0.000000,-1.200000,0.750000,0.000000,-0.938900,0.870400,0.000000,-0.938900,0.870400 -970 DATA -0.442300,-0.938900,0.753000,-0.381100,-1.200000,0.648900,-0.442300,-0.938900,0.753000,0.000000,-0.938900,0.870400 -980 DATA 0.000000,-0.686100,0.963000,0.000000,-0.686100,0.963000,-0.489300,-0.686100,0.833100,-0.442300,-0.938900,0.753000 -990 DATA -0.489300,-0.686100,0.833100,0.000000,-0.686100,0.963000,0.000000,-0.450000, 1.000000,0.000000,-0.450000, 1.000000 -1000 DATA -0.508100,-0.450000,0.865200,-0.489300,-0.686100,0.833100,0.000000,-1.200000,0.750000,0.381100,-1.200000,0.648900 -1010 DATA 0.442300,-0.938900,0.753000,0.442300,-0.938900,0.753000,0.000000,-0.938900,0.870400,0.000000,-1.200000,0.750000 -1020 DATA 0.000000,-0.938900,0.870400,0.442300,-0.938900,0.753000,0.489300,-0.686100,0.833100,0.489300,-0.686100,0.833100 -1030 DATA 0.000000,-0.686100,0.963000,0.000000,-0.938900,0.870400,0.000000,-0.686100,0.963000,0.489300,-0.686100,0.833100 -1040 DATA 0.508100,-0.450000,0.865200,0.508100,-0.450000,0.865200,0.000000,-0.450000, 1.000000,0.000000,-0.686100,0.963000 -1050 DATA 0.381100,-1.200000,0.648900,0.648900,-1.200000,0.381100,0.753000,-0.938900,0.442300,0.753000,-0.938900,0.442300 -1060 DATA 0.442300,-0.938900,0.753000,0.381100,-1.200000,0.648900,0.442300,-0.938900,0.753000,0.753000,-0.938900,0.442300 -1070 DATA 0.833100,-0.686100,0.489300,0.833100,-0.686100,0.489300,0.489300,-0.686100,0.833100,0.442300,-0.938900,0.753000 -1080 DATA 0.489300,-0.686100,0.833100,0.833100,-0.686100,0.489300,0.865200,-0.450000,0.508100,0.865200,-0.450000,0.508100 -1090 DATA 0.508100,-0.450000,0.865200,0.489300,-0.686100,0.833100,0.648900,-1.200000,0.381100,0.750000,-1.200000,0.000000 -1100 DATA 0.870400,-0.938900,0.000000,0.870400,-0.938900,0.000000,0.753000,-0.938900,0.442300,0.648900,-1.200000,0.381100 -1110 DATA 0.753000,-0.938900,0.442300,0.870400,-0.938900,0.000000,0.963000,-0.686100,0.000000,0.963000,-0.686100,0.000000 -1120 DATA 0.833100,-0.686100,0.489300,0.753000,-0.938900,0.442300,0.833100,-0.686100,0.489300,0.963000,-0.686100,0.000000 -1130 DATA 1.000000,-0.450000,0.000000,1.000000,-0.450000,0.000000,0.865200,-0.450000,0.508100,0.833100,-0.686100,0.489300 -1140 DATA 1.000000,-0.450000,0.000000,0.865200,-0.450000,-0.508100,0.809100,-0.261100,-0.475200,0.809100,-0.261100,-0.475200 -1150 DATA 0.935200,-0.261100,0.000000,1.000000,-0.450000,0.000000,0.935200,-0.261100,0.000000,0.809100,-0.261100,-0.475200 -1160 DATA 0.705000,-0.138900,-0.414000,0.705000,-0.138900,-0.414000,0.814800,-0.138900,0.000000,0.935200,-0.261100,0.000000 -1170 DATA 0.814800,-0.138900,0.000000,0.705000,-0.138900,-0.414000,0.648900,-0.075000,-0.381100,0.648900,-0.075000,-0.381100 -1180 DATA 0.750000,-0.075000,0.000000,0.814800,-0.138900,0.000000,0.865200,-0.450000,-0.508100,0.508100,-0.450000,-0.865200 -1190 DATA 0.475200,-0.261100,-0.809100,0.475200,-0.261100,-0.809100,0.809100,-0.261100,-0.475200,0.865200,-0.450000,-0.508100 -1200 DATA 0.809100,-0.261100,-0.475200,0.475200,-0.261100,-0.809100,0.414000,-0.138900,-0.705000,0.414000,-0.138900,-0.705000 -1210 DATA 0.705000,-0.138900,-0.414000,0.809100,-0.261100,-0.475200,0.705000,-0.138900,-0.414000,0.414000,-0.138900,-0.705000 -1220 DATA 0.381100,-0.075000,-0.648900,0.381100,-0.075000,-0.648900,0.648900,-0.075000,-0.381100,0.705000,-0.138900,-0.414000 -1230 DATA 0.508100,-0.450000,-0.865200,0.000000,-0.450000,-1.000000,0.000000,-0.261100,-0.935200,0.000000,-0.261100,-0.935200 -1240 DATA 0.475200,-0.261100,-0.809100,0.508100,-0.450000,-0.865200,0.475200,-0.261100,-0.809100,0.000000,-0.261100,-0.935200 -1250 DATA 0.000000,-0.138900,-0.814800,0.000000,-0.138900,-0.814800,0.414000,-0.138900,-0.705000,0.475200,-0.261100,-0.809100 -1260 DATA 0.414000,-0.138900,-0.705000,0.000000,-0.138900,-0.814800,0.000000,-0.075000,-0.750000,0.000000,-0.075000,-0.750000 -1270 DATA 0.381100,-0.075000,-0.648900,0.414000,-0.138900,-0.705000,0.000000,-0.450000,-1.000000,-0.508100,-0.450000,-0.865200 -1280 DATA -0.475200,-0.261100,-0.809100,-0.475200,-0.261100,-0.809100,0.000000,-0.261100,-0.935200,0.000000,-0.450000,-1.000000 -1290 DATA 0.000000,-0.261100,-0.935200,-0.475200,-0.261100,-0.809100,-0.414000,-0.138900,-0.705000,-0.414000,-0.138900,-0.705000 -1300 DATA 0.000000,-0.138900,-0.814800,0.000000,-0.261100,-0.935200,0.000000,-0.138900,-0.814800,-0.414000,-0.138900,-0.705000 -1310 DATA -0.381100,-0.075000,-0.648900,-0.381100,-0.075000,-0.648900,0.000000,-0.075000,-0.750000,0.000000,-0.138900,-0.814800 -1320 DATA -0.508100,-0.450000,-0.865200,-0.865200,-0.450000,-0.508100,-0.809100,-0.261100,-0.475200,-0.809100,-0.261100,-0.475200 -1330 DATA -0.475200,-0.261100,-0.809100,-0.508100,-0.450000,-0.865200,-0.475200,-0.261100,-0.809100,-0.809100,-0.261100,-0.475200 -1340 DATA -0.705000,-0.138900,-0.414000,-0.705000,-0.138900,-0.414000,-0.414000,-0.138900,-0.705000,-0.475200,-0.261100,-0.809100 -1350 DATA -0.414000,-0.138900,-0.705000,-0.705000,-0.138900,-0.414000,-0.648900,-0.075000,-0.381100,-0.648900,-0.075000,-0.381100 -1360 DATA -0.381100,-0.075000,-0.648900,-0.414000,-0.138900,-0.705000,-0.865200,-0.450000,-0.508100,-1.000000,-0.450000,0.000000 -1370 DATA -0.935200,-0.261100,0.000000,-0.935200,-0.261100,0.000000,-0.809100,-0.261100,-0.475200,-0.865200,-0.450000,-0.508100 -1380 DATA -0.809100,-0.261100,-0.475200,-0.935200,-0.261100,0.000000,-0.814800,-0.138900,0.000000,-0.814800,-0.138900,0.000000 -1390 DATA -0.705000,-0.138900,-0.414000,-0.809100,-0.261100,-0.475200,-0.705000,-0.138900,-0.414000,-0.814800,-0.138900,0.000000 -1400 DATA -0.750000,-0.075000,0.000000,-0.750000,-0.075000,0.000000,-0.648900,-0.075000,-0.381100,-0.705000,-0.138900,-0.414000 -1410 DATA -1.000000,-0.450000,0.000000,-0.865200,-0.450000,0.508100,-0.809100,-0.261100,0.475200,-0.809100,-0.261100,0.475200 -1420 DATA -0.935200,-0.261100,0.000000,-1.000000,-0.450000,0.000000,-0.935200,-0.261100,0.000000,-0.809100,-0.261100,0.475200 -1430 DATA -0.705000,-0.138900,0.414000,-0.705000,-0.138900,0.414000,-0.814800,-0.138900,0.000000,-0.935200,-0.261100,0.000000 -1440 DATA -0.814800,-0.138900,0.000000,-0.705000,-0.138900,0.414000,-0.648900,-0.075000,0.381100,-0.648900,-0.075000,0.381100 -1450 DATA -0.750000,-0.075000,0.000000,-0.814800,-0.138900,0.000000,-0.865200,-0.450000,0.508100,-0.508100,-0.450000,0.865200 -1460 DATA -0.475200,-0.261100,0.809100,-0.475200,-0.261100,0.809100,-0.809100,-0.261100,0.475200,-0.865200,-0.450000,0.508100 -1470 DATA -0.809100,-0.261100,0.475200,-0.475200,-0.261100,0.809100,-0.414000,-0.138900,0.705000,-0.414000,-0.138900,0.705000 -1480 DATA -0.705000,-0.138900,0.414000,-0.809100,-0.261100,0.475200,-0.705000,-0.138900,0.414000,-0.414000,-0.138900,0.705000 -1490 DATA -0.381100,-0.075000,0.648900,-0.381100,-0.075000,0.648900,-0.648900,-0.075000,0.381100,-0.705000,-0.138900,0.414000 -1500 DATA -0.508100,-0.450000,0.865200,0.000000,-0.450000, 1.000000,0.000000,-0.261100,0.935200,0.000000,-0.261100,0.935200 -1510 DATA -0.475200,-0.261100,0.809100,-0.508100,-0.450000,0.865200,-0.475200,-0.261100,0.809100,0.000000,-0.261100,0.935200 -1520 DATA 0.000000,-0.138900,0.814800,0.000000,-0.138900,0.814800,-0.414000,-0.138900,0.705000,-0.475200,-0.261100,0.809100 -1530 DATA -0.414000,-0.138900,0.705000,0.000000,-0.138900,0.814800,0.000000,-0.075000,0.750000,0.000000,-0.075000,0.750000 -1540 DATA -0.381100,-0.075000,0.648900,-0.414000,-0.138900,0.705000,0.000000,-0.450000, 1.000000,0.508100,-0.450000,0.865200 -1550 DATA 0.475200,-0.261100,0.809100,0.475200,-0.261100,0.809100,0.000000,-0.261100,0.935200,0.000000,-0.450000, 1.000000 -1560 DATA 0.000000,-0.261100,0.935200,0.475200,-0.261100,0.809100,0.414000,-0.138900,0.705000,0.414000,-0.138900,0.705000 -1570 DATA 0.000000,-0.138900,0.814800,0.000000,-0.261100,0.935200,0.000000,-0.138900,0.814800,0.414000,-0.138900,0.705000 -1580 DATA 0.381100,-0.075000,0.648900,0.381100,-0.075000,0.648900,0.000000,-0.075000,0.750000,0.000000,-0.138900,0.814800 -1590 DATA 0.508100,-0.450000,0.865200,0.865200,-0.450000,0.508100,0.809100,-0.261100,0.475200,0.809100,-0.261100,0.475200 -1600 DATA 0.475200,-0.261100,0.809100,0.508100,-0.450000,0.865200,0.475200,-0.261100,0.809100,0.809100,-0.261100,0.475200 -1610 DATA 0.705000,-0.138900,0.414000,0.705000,-0.138900,0.414000,0.414000,-0.138900,0.705000,0.475200,-0.261100,0.809100 -1620 DATA 0.414000,-0.138900,0.705000,0.705000,-0.138900,0.414000,0.648900,-0.075000,0.381100,0.648900,-0.075000,0.381100 -1630 DATA 0.381100,-0.075000,0.648900,0.414000,-0.138900,0.705000,0.865200,-0.450000,0.508100,1.000000,-0.450000,0.000000 -1640 DATA 0.935200,-0.261100,0.000000,0.935200,-0.261100,0.000000,0.809100,-0.261100,0.475200,0.865200,-0.450000,0.508100 -1650 DATA 0.809100,-0.261100,0.475200,0.935200,-0.261100,0.000000,0.814800,-0.138900,0.000000,0.814800,-0.138900,0.000000 -1660 DATA 0.705000,-0.138900,0.414000,0.809100,-0.261100,0.475200,0.705000,-0.138900,0.414000,0.814800,-0.138900,0.000000 -1670 DATA 0.750000,-0.075000,0.000000,0.750000,-0.075000,0.000000,0.648900,-0.075000,0.381100,0.705000,-0.138900,0.414000 -1680 DATA 0.750000,-0.075000,0.000000,0.648900,-0.075000,-0.381100,0.617600,-0.038900,-0.362800,0.617600,-0.038900,-0.362800 -1690 DATA 0.713900,-0.038900,0.000000,0.750000,-0.075000,0.000000,0.713900,-0.038900,0.000000,0.617600,-0.038900,-0.362800 -1700 DATA 0.442200,-0.011100,-0.259700,0.442200,-0.011100,-0.259700,0.511100,-0.011100,0.000000,0.713900,-0.038900,0.000000 -1710 DATA 0.511100,-0.011100,0.000000,0.442200,-0.011100,-0.259700,0.000000,0.000000,-0.000000,0.000000,0.000000,-0.000000 -1720 DATA 0.000000,0.000000,-0.000000,0.511100,-0.011100,0.000000,0.648900,-0.075000,-0.381100,0.381100,-0.075000,-0.648900 -1730 DATA 0.362800,-0.038900,-0.617600,0.362800,-0.038900,-0.617600,0.617600,-0.038900,-0.362800,0.648900,-0.075000,-0.381100 -1740 DATA 0.617600,-0.038900,-0.362800,0.362800,-0.038900,-0.617600,0.259700,-0.011100,-0.442200,0.259700,-0.011100,-0.442200 -1750 DATA 0.442200,-0.011100,-0.259700,0.617600,-0.038900,-0.362800,0.442200,-0.011100,-0.259700,0.259700,-0.011100,-0.442200 -1760 DATA 0.000000,0.000000,-0.000000,0.000000,0.000000,-0.000000,0.000000,0.000000,-0.000000,0.442200,-0.011100,-0.259700 -1770 DATA 0.381100,-0.075000,-0.648900,0.000000,-0.075000,-0.750000,0.000000,-0.038900,-0.713900,0.000000,-0.038900,-0.713900 -1780 DATA 0.362800,-0.038900,-0.617600,0.381100,-0.075000,-0.648900,0.362800,-0.038900,-0.617600,0.000000,-0.038900,-0.713900 -1790 DATA 0.000000,-0.011100,-0.511100,0.000000,-0.011100,-0.511100,0.259700,-0.011100,-0.442200,0.362800,-0.038900,-0.617600 -1800 DATA 0.259700,-0.011100,-0.442200,0.000000,-0.011100,-0.511100,0.000000,0.000000,-0.000000,0.000000,0.000000,-0.000000 -1810 DATA 0.000000,0.000000,-0.000000,0.259700,-0.011100,-0.442200,0.000000,-0.075000,-0.750000,-0.381100,-0.075000,-0.648900 -1820 DATA -0.362800,-0.038900,-0.617600,-0.362800,-0.038900,-0.617600,0.000000,-0.038900,-0.713900,0.000000,-0.075000,-0.750000 -1830 DATA 0.000000,-0.038900,-0.713900,-0.362800,-0.038900,-0.617600,-0.259700,-0.011100,-0.442200,-0.259700,-0.011100,-0.442200 -1840 DATA 0.000000,-0.011100,-0.511100,0.000000,-0.038900,-0.713900,0.000000,-0.011100,-0.511100,-0.259700,-0.011100,-0.442200 -1850 DATA 0.000000,0.000000,-0.000000,0.000000,0.000000,-0.000000,0.000000,0.000000,-0.000000,0.000000,-0.011100,-0.511100 -1860 DATA -0.381100,-0.075000,-0.648900,-0.648900,-0.075000,-0.381100,-0.617600,-0.038900,-0.362800,-0.617600,-0.038900,-0.362800 -1870 DATA -0.362800,-0.038900,-0.617600,-0.381100,-0.075000,-0.648900,-0.362800,-0.038900,-0.617600,-0.617600,-0.038900,-0.362800 -1880 DATA -0.442200,-0.011100,-0.259700,-0.442200,-0.011100,-0.259700,-0.259700,-0.011100,-0.442200,-0.362800,-0.038900,-0.617600 -1890 DATA -0.259700,-0.011100,-0.442200,-0.442200,-0.011100,-0.259700,0.000000,0.000000,-0.000000,0.000000,0.000000,-0.000000 -1900 DATA 0.000000,0.000000,-0.000000,-0.259700,-0.011100,-0.442200,-0.648900,-0.075000,-0.381100,-0.750000,-0.075000,0.000000 -1910 DATA -0.713900,-0.038900,0.000000,-0.713900,-0.038900,0.000000,-0.617600,-0.038900,-0.362800,-0.648900,-0.075000,-0.381100 -1920 DATA -0.617600,-0.038900,-0.362800,-0.713900,-0.038900,0.000000,-0.511100,-0.011100,0.000000,-0.511100,-0.011100,0.000000 -1930 DATA -0.442200,-0.011100,-0.259700,-0.617600,-0.038900,-0.362800,-0.442200,-0.011100,-0.259700,-0.511100,-0.011100,0.000000 -1940 DATA 0.000000,0.000000,-0.000000,0.000000,0.000000,-0.000000,0.000000,0.000000,-0.000000,-0.442200,-0.011100,-0.259700 -1950 DATA -0.750000,-0.075000,0.000000,-0.648900,-0.075000,0.381100,-0.617600,-0.038900,0.362800,-0.617600,-0.038900,0.362800 -1960 DATA -0.713900,-0.038900,0.000000,-0.750000,-0.075000,0.000000,-0.713900,-0.038900,0.000000,-0.617600,-0.038900,0.362800 -1970 DATA -0.442200,-0.011100,0.259700,-0.442200,-0.011100,0.259700,-0.511100,-0.011100,0.000000,-0.713900,-0.038900,0.000000 -1980 DATA -0.511100,-0.011100,0.000000,-0.442200,-0.011100,0.259700,0.000000,0.000000,-0.000000,0.000000,0.000000,-0.000000 -1990 DATA 0.000000,0.000000,-0.000000,-0.511100,-0.011100,0.000000,-0.648900,-0.075000,0.381100,-0.381100,-0.075000,0.648900 -2000 DATA -0.362800,-0.038900,0.617600,-0.362800,-0.038900,0.617600,-0.617600,-0.038900,0.362800,-0.648900,-0.075000,0.381100 -2010 DATA -0.617600,-0.038900,0.362800,-0.362800,-0.038900,0.617600,-0.259700,-0.011100,0.442200,-0.259700,-0.011100,0.442200 -2020 DATA -0.442200,-0.011100,0.259700,-0.617600,-0.038900,0.362800,-0.442200,-0.011100,0.259700,-0.259700,-0.011100,0.442200 -2030 DATA 0.000000,0.000000,-0.000000,0.000000,0.000000,-0.000000,0.000000,0.000000,-0.000000,-0.442200,-0.011100,0.259700 -2040 DATA -0.381100,-0.075000,0.648900,0.000000,-0.075000,0.750000,0.000000,-0.038900,0.713900,0.000000,-0.038900,0.713900 -2050 DATA -0.362800,-0.038900,0.617600,-0.381100,-0.075000,0.648900,-0.362800,-0.038900,0.617600,0.000000,-0.038900,0.713900 -2060 DATA 0.000000,-0.011100,0.511100,0.000000,-0.011100,0.511100,-0.259700,-0.011100,0.442200,-0.362800,-0.038900,0.617600 -2070 DATA -0.259700,-0.011100,0.442200,0.000000,-0.011100,0.511100,0.000000,0.000000,-0.000000,0.000000,0.000000,-0.000000 -2080 DATA 0.000000,0.000000,-0.000000,-0.259700,-0.011100,0.442200,0.000000,-0.075000,0.750000,0.381100,-0.075000,0.648900 -2090 DATA 0.362800,-0.038900,0.617600,0.362800,-0.038900,0.617600,0.000000,-0.038900,0.713900,0.000000,-0.075000,0.750000 -2100 DATA 0.000000,-0.038900,0.713900,0.362800,-0.038900,0.617600,0.259700,-0.011100,0.442200,0.259700,-0.011100,0.442200 -2110 DATA 0.000000,-0.011100,0.511100,0.000000,-0.038900,0.713900,0.000000,-0.011100,0.511100,0.259700,-0.011100,0.442200 -2120 DATA 0.000000,0.000000,-0.000000,0.000000,0.000000,-0.000000,0.000000,0.000000,-0.000000,0.000000,-0.011100,0.511100 -2130 DATA 0.381100,-0.075000,0.648900,0.648900,-0.075000,0.381100,0.617600,-0.038900,0.362800,0.617600,-0.038900,0.362800 -2140 DATA 0.362800,-0.038900,0.617600,0.381100,-0.075000,0.648900,0.362800,-0.038900,0.617600,0.617600,-0.038900,0.362800 -2150 DATA 0.442200,-0.011100,0.259700,0.442200,-0.011100,0.259700,0.259700,-0.011100,0.442200,0.362800,-0.038900,0.617600 -2160 DATA 0.259700,-0.011100,0.442200,0.442200,-0.011100,0.259700,0.000000,0.000000,-0.000000,0.000000,0.000000,-0.000000 -2170 DATA 0.000000,0.000000,-0.000000,0.259700,-0.011100,0.442200,0.648900,-0.075000,0.381100,0.750000,-0.075000,0.000000 -2180 DATA 0.713900,-0.038900,0.000000,0.713900,-0.038900,0.000000,0.617600,-0.038900,0.362800,0.648900,-0.075000,0.381100 -2190 DATA 0.617600,-0.038900,0.362800,0.713900,-0.038900,0.000000,0.511100,-0.011100,0.000000,0.511100,-0.011100,0.000000 -2200 DATA 0.442200,-0.011100,0.259700,0.617600,-0.038900,0.362800,0.442200,-0.011100,0.259700,0.511100,-0.011100,0.000000 -2210 DATA 0.000000,0.000000,-0.000000,0.000000,0.000000,-0.000000,0.000000,0.000000,-0.000000,0.442200,-0.011100,0.259700 -2220 DATA -0.800000,-1.012500,0.000000,-0.787000,-1.041700,-0.100000,-1.115900,-1.036400,-0.100000,-1.115900,-1.036400,-0.100000 -2230 DATA -1.098100,-1.008300,0.000000,-0.800000,-1.012500,0.000000,-1.098100,-1.008300,0.000000,-1.115900,-1.036400,-0.100000 -2240 DATA -1.319300,-0.999700,-0.100000,-1.319300,-0.999700,-0.100000,-1.285200,-0.979200,0.000000,-1.098100,-1.008300,0.000000 -2250 DATA -1.285200,-0.979200,0.000000,-1.319300,-0.999700,-0.100000,-1.388900,-0.900000,-0.100000,-1.388900,-0.900000,-0.100000 -2260 DATA -1.350000,-0.900000,0.000000,-1.285200,-0.979200,0.000000,-0.787000,-1.041700,-0.100000,-0.763000,-1.095800,-0.100000 -2270 DATA -1.148900,-1.088600,-0.100000,-1.148900,-1.088600,-0.100000,-1.115900,-1.036400,-0.100000,-0.787000,-1.041700,-0.100000 -2280 DATA -1.115900,-1.036400,-0.100000,-1.148900,-1.088600,-0.100000,-1.382600,-1.037800,-0.100000,-1.382600,-1.037800,-0.100000 -2290 DATA -1.319300,-0.999700,-0.100000,-1.115900,-1.036400,-0.100000,-1.319300,-0.999700,-0.100000,-1.382600,-1.037800,-0.100000 -2300 DATA -1.461100,-0.900000,-0.100000,-1.461100,-0.900000,-0.100000,-1.388900,-0.900000,-0.100000,-1.319300,-0.999700,-0.100000 -2310 DATA -0.763000,-1.095800,-0.100000,-0.750000,-1.125000,0.000000,-1.166700,-1.116700,0.000000,-1.166700,-1.116700,0.000000 -2320 DATA -1.148900,-1.088600,-0.100000,-0.763000,-1.095800,-0.100000,-1.148900,-1.088600,-0.100000,-1.166700,-1.116700,0.000000 -2330 DATA -1.416700,-1.058300,0.000000,-1.416700,-1.058300,0.000000,-1.382600,-1.037800,-0.100000,-1.148900,-1.088600,-0.100000 -2340 DATA -1.382600,-1.037800,-0.100000,-1.416700,-1.058300,0.000000,-1.500000,-0.900000,0.000000,-1.500000,-0.900000,0.000000 -2350 DATA -1.461100,-0.900000,-0.100000,-1.382600,-1.037800,-0.100000,-0.750000,-1.125000,0.000000,-0.763000,-1.095800,0.100000 -2360 DATA -1.148900,-1.088600,0.100000,-1.148900,-1.088600,0.100000,-1.166700,-1.116700,0.000000,-0.750000,-1.125000,0.000000 -2370 DATA -1.166700,-1.116700,0.000000,-1.148900,-1.088600,0.100000,-1.382600,-1.037800,0.100000,-1.382600,-1.037800,0.100000 -2380 DATA -1.416700,-1.058300,0.000000,-1.166700,-1.116700,0.000000,-1.416700,-1.058300,0.000000,-1.382600,-1.037800,0.100000 -2390 DATA -1.461100,-0.900000,0.100000,-1.461100,-0.900000,0.100000,-1.500000,-0.900000,0.000000,-1.416700,-1.058300,0.000000 -2400 DATA -0.763000,-1.095800,0.100000,-0.787000,-1.041700,0.100000,-1.115900,-1.036400,0.100000,-1.115900,-1.036400,0.100000 -2410 DATA -1.148900,-1.088600,0.100000,-0.763000,-1.095800,0.100000,-1.148900,-1.088600,0.100000,-1.115900,-1.036400,0.100000 -2420 DATA -1.319300,-0.999700,0.100000,-1.319300,-0.999700,0.100000,-1.382600,-1.037800,0.100000,-1.148900,-1.088600,0.100000 -2430 DATA -1.382600,-1.037800,0.100000,-1.319300,-0.999700,0.100000,-1.388900,-0.900000,0.100000,-1.388900,-0.900000,0.100000 -2440 DATA -1.461100,-0.900000,0.100000,-1.382600,-1.037800,0.100000,-0.787000,-1.041700,0.100000,-0.800000,-1.012500,0.000000 -2450 DATA -1.098100,-1.008300,0.000000,-1.098100,-1.008300,0.000000,-1.115900,-1.036400,0.100000,-0.787000,-1.041700,0.100000 -2460 DATA -1.115900,-1.036400,0.100000,-1.098100,-1.008300,0.000000,-1.285200,-0.979200,0.000000,-1.285200,-0.979200,0.000000 -2470 DATA -1.319300,-0.999700,0.100000,-1.115900,-1.036400,0.100000,-1.319300,-0.999700,0.100000,-1.285200,-0.979200,0.000000 -2480 DATA -1.350000,-0.900000,0.000000,-1.350000,-0.900000,0.000000,-1.388900,-0.900000,0.100000,-1.319300,-0.999700,0.100000 -2490 DATA -1.350000,-0.900000,0.000000,-1.388900,-0.900000,-0.100000,-1.347500,-0.738500,-0.100000,-1.347500,-0.738500,-0.100000 -2500 DATA -1.314800,-0.758300,0.000000,-1.350000,-0.900000,0.000000,-1.314800,-0.758300,0.000000,-1.347500,-0.738500,-0.100000 -2510 DATA -1.216700,-0.562900,-0.100000,-1.216700,-0.562900,-0.100000,-1.201900,-0.591700,0.000000,-1.314800,-0.758300,0.000000 -2520 DATA -1.201900,-0.591700,0.000000,-1.216700,-0.562900,-0.100000,-0.987000,-0.411100,-0.100000,-0.987000,-0.411100,-0.100000 -2530 DATA -1.000000,-0.450000,0.000000,-1.201900,-0.591700,0.000000,-1.388900,-0.900000,-0.100000,-1.461100,-0.900000,-0.100000 -2540 DATA -1.408100,-0.701700,-0.100000,-1.408100,-0.701700,-0.100000,-1.347500,-0.738500,-0.100000,-1.388900,-0.900000,-0.100000 -2550 DATA -1.347500,-0.738500,-0.100000,-1.408100,-0.701700,-0.100000,-1.244400,-0.509400,-0.100000,-1.244400,-0.509400,-0.100000 -2560 DATA -1.216700,-0.562900,-0.100000,-1.347500,-0.738500,-0.100000,-1.216700,-0.562900,-0.100000,-1.244400,-0.509400,-0.100000 -2570 DATA -0.963000,-0.338900,-0.100000,-0.963000,-0.338900,-0.100000,-0.987000,-0.411100,-0.100000,-1.216700,-0.562900,-0.100000 -2580 DATA -1.461100,-0.900000,-0.100000,-1.500000,-0.900000,0.000000,-1.440700,-0.681900,0.000000,-1.440700,-0.681900,0.000000 -2590 DATA -1.408100,-0.701700,-0.100000,-1.461100,-0.900000,-0.100000,-1.408100,-0.701700,-0.100000,-1.440700,-0.681900,0.000000 -2600 DATA -1.259300,-0.480600,0.000000,-1.259300,-0.480600,0.000000,-1.244400,-0.509400,-0.100000,-1.408100,-0.701700,-0.100000 -2610 DATA -1.244400,-0.509400,-0.100000,-1.259300,-0.480600,0.000000,-0.950000,-0.300000,0.000000,-0.950000,-0.300000,0.000000 -2620 DATA -0.963000,-0.338900,-0.100000,-1.244400,-0.509400,-0.100000,-1.500000,-0.900000,0.000000,-1.461100,-0.900000,0.100000 -2630 DATA -1.408100,-0.701700,0.100000,-1.408100,-0.701700,0.100000,-1.440700,-0.681900,0.000000,-1.500000,-0.900000,0.000000 -2640 DATA -1.440700,-0.681900,0.000000,-1.408100,-0.701700,0.100000,-1.244400,-0.509400,0.100000,-1.244400,-0.509400,0.100000 -2650 DATA -1.259300,-0.480600,0.000000,-1.440700,-0.681900,0.000000,-1.259300,-0.480600,0.000000,-1.244400,-0.509400,0.100000 -2660 DATA -0.963000,-0.338900,0.100000,-0.963000,-0.338900,0.100000,-0.950000,-0.300000,0.000000,-1.259300,-0.480600,0.000000 -2670 DATA -1.461100,-0.900000,0.100000,-1.388900,-0.900000,0.100000,-1.347500,-0.738500,0.100000,-1.347500,-0.738500,0.100000 -2680 DATA -1.408100,-0.701700,0.100000,-1.461100,-0.900000,0.100000,-1.408100,-0.701700,0.100000,-1.347500,-0.738500,0.100000 -2690 DATA -1.216700,-0.562900,0.100000,-1.216700,-0.562900,0.100000,-1.244400,-0.509400,0.100000,-1.408100,-0.701700,0.100000 -2700 DATA -1.244400,-0.509400,0.100000,-1.216700,-0.562900,0.100000,-0.987000,-0.411100,0.100000,-0.987000,-0.411100,0.100000 -2710 DATA -0.963000,-0.338900,0.100000,-1.244400,-0.509400,0.100000,-1.388900,-0.900000,0.100000,-1.350000,-0.900000,0.000000 -2720 DATA -1.314800,-0.758300,0.000000,-1.314800,-0.758300,0.000000,-1.347500,-0.738500,0.100000,-1.388900,-0.900000,0.100000 -2730 DATA -1.347500,-0.738500,0.100000,-1.314800,-0.758300,0.000000,-1.201900,-0.591700,0.000000,-1.201900,-0.591700,0.000000 -2740 DATA -1.216700,-0.562900,0.100000,-1.347500,-0.738500,0.100000,-1.216700,-0.562900,0.100000,-1.201900,-0.591700,0.000000 -2750 DATA -1.000000,-0.450000,0.000000,-1.000000,-0.450000,0.000000,-0.987000,-0.411100,0.100000,-1.216700,-0.562900,0.100000 -2760 DATA 0.850000,-0.712500,0.000000,0.850000,-0.605600,-0.220000,1.169800,-0.737100,-0.184600,1.169800,-0.737100,-0.184600 -2770 DATA 1.135200,-0.805600,0.000000,0.850000,-0.712500,0.000000,1.135200,-0.805600,0.000000,1.169800,-0.737100,-0.184600 -2780 DATA 1.274700,-0.981400,-0.118800,1.274700,-0.981400,-0.118800,1.231500,-1.006900,0.000000,1.135200,-0.805600,0.000000 -2790 DATA 1.231500,-1.006900,0.000000,1.274700,-0.981400,-0.118800,1.427800,-1.200000,-0.083300,1.427800,-1.200000,-0.083300 -2800 DATA 1.350000,-1.200000,0.000000,1.231500,-1.006900,0.000000,0.850000,-0.605600,-0.220000,0.850000,-0.406900,-0.220000 -2810 DATA 1.234000,-0.610100,-0.184600,1.234000,-0.610100,-0.184600,1.169800,-0.737100,-0.184600,0.850000,-0.605600,-0.220000 -2820 DATA 1.169800,-0.737100,-0.184600,1.234000,-0.610100,-0.184600,1.354900,-0.933900,-0.118800,1.354900,-0.933900,-0.118800 -2830 DATA 1.274700,-0.981400,-0.118800,1.169800,-0.737100,-0.184600,1.274700,-0.981400,-0.118800,1.354900,-0.933900,-0.118800 -2840 DATA 1.572200,-1.200000,-0.083300,1.572200,-1.200000,-0.083300,1.427800,-1.200000,-0.083300,1.274700,-0.981400,-0.118800 -2850 DATA 0.850000,-0.406900,-0.220000,0.850000,-0.300000,0.000000,1.268500,-0.541700,0.000000,1.268500,-0.541700,0.000000 -2860 DATA 1.234000,-0.610100,-0.184600,0.850000,-0.406900,-0.220000,1.234000,-0.610100,-0.184600,1.268500,-0.541700,0.000000 -2870 DATA 1.398100,-0.908300,0.000000,1.398100,-0.908300,0.000000,1.354900,-0.933900,-0.118800,1.234000,-0.610100,-0.184600 -2880 DATA 1.354900,-0.933900,-0.118800,1.398100,-0.908300,0.000000,1.650000,-1.200000,0.000000,1.650000,-1.200000,0.000000 -2890 DATA 1.572200,-1.200000,-0.083300,1.354900,-0.933900,-0.118800,0.850000,-0.300000,0.000000,0.850000,-0.406900,0.220000 -2900 DATA 1.234000,-0.610100,0.184600,1.234000,-0.610100,0.184600,1.268500,-0.541700,0.000000,0.850000,-0.300000,0.000000 -2910 DATA 1.268500,-0.541700,0.000000,1.234000,-0.610100,0.184600,1.354900,-0.933900,0.118800,1.354900,-0.933900,0.118800 -2920 DATA 1.398100,-0.908300,0.000000,1.268500,-0.541700,0.000000,1.398100,-0.908300,0.000000,1.354900,-0.933900,0.118800 -2930 DATA 1.572200,-1.200000,0.083300,1.572200,-1.200000,0.083300,1.650000,-1.200000,0.000000,1.398100,-0.908300,0.000000 -2940 DATA 0.850000,-0.406900,0.220000,0.850000,-0.605600,0.220000,1.169800,-0.737100,0.184600,1.169800,-0.737100,0.184600 -2950 DATA 1.234000,-0.610100,0.184600,0.850000,-0.406900,0.220000,1.234000,-0.610100,0.184600,1.169800,-0.737100,0.184600 -2960 DATA 1.274700,-0.981400,0.118800,1.274700,-0.981400,0.118800,1.354900,-0.933900,0.118800,1.234000,-0.610100,0.184600 -2970 DATA 1.354900,-0.933900,0.118800,1.274700,-0.981400,0.118800,1.427800,-1.200000,0.083300,1.427800,-1.200000,0.083300 -2980 DATA 1.572200,-1.200000,0.083300,1.354900,-0.933900,0.118800,0.850000,-0.605600,0.220000,0.850000,-0.712500,0.000000 -2990 DATA 1.135200,-0.805600,0.000000,1.135200,-0.805600,0.000000,1.169800,-0.737100,0.184600,0.850000,-0.605600,0.220000 -3000 DATA 1.169800,-0.737100,0.184600,1.135200,-0.805600,0.000000,1.231500,-1.006900,0.000000,1.231500,-1.006900,0.000000 -3010 DATA 1.274700,-0.981400,0.118800,1.169800,-0.737100,0.184600,1.274700,-0.981400,0.118800,1.231500,-1.006900,0.000000 -3020 DATA 1.350000,-1.200000,0.000000,1.350000,-1.200000,0.000000,1.427800,-1.200000,0.083300,1.274700,-0.981400,0.118800 -3030 DATA 1.350000,-1.200000,0.000000,1.427800,-1.200000,-0.083300,1.478900,-1.227200,-0.074700,1.478900,-1.227200,-0.074700 -3040 DATA 1.396300,-1.225000,0.000000,1.350000,-1.200000,0.000000,1.396300,-1.225000,0.000000,1.478900,-1.227200,-0.074700 -3050 DATA 1.491200,-1.227700,-0.058600,1.491200,-1.227700,-0.058600,1.420400,-1.225000,0.000000,1.396300,-1.225000,0.000000 -3060 DATA 1.420400,-1.225000,0.000000,1.491200,-1.227700,-0.058600,1.451900,-1.200000,-0.050000,1.451900,-1.200000,-0.050000 -3070 DATA 1.400000,-1.200000,0.000000,1.420400,-1.225000,0.000000,1.427800,-1.200000,-0.083300,1.572200,-1.200000,-0.083300 -3080 DATA 1.632200,-1.231200,-0.074700,1.632200,-1.231200,-0.074700,1.478900,-1.227200,-0.074700,1.427800,-1.200000,-0.083300 -3090 DATA 1.478900,-1.227200,-0.074700,1.632200,-1.231200,-0.074700,1.622700,-1.232700,-0.058600,1.622700,-1.232700,-0.058600 -3100 DATA 1.491200,-1.227700,-0.058600,1.478900,-1.227200,-0.074700,1.491200,-1.227700,-0.058600,1.622700,-1.232700,-0.058600 -3110 DATA 1.548100,-1.200000,-0.050000,1.548100,-1.200000,-0.050000,1.451900,-1.200000,-0.050000,1.491200,-1.227700,-0.058600 -3120 DATA 1.572200,-1.200000,-0.083300,1.650000,-1.200000,0.000000,1.714800,-1.233300,0.000000,1.714800,-1.233300,0.000000 -3130 DATA 1.632200,-1.231200,-0.074700,1.572200,-1.200000,-0.083300,1.632200,-1.231200,-0.074700,1.714800,-1.233300,0.000000 -3140 DATA 1.693500,-1.235400,0.000000,1.693500,-1.235400,0.000000,1.622700,-1.232700,-0.058600,1.632200,-1.231200,-0.074700 -3150 DATA 1.622700,-1.232700,-0.058600,1.693500,-1.235400,0.000000,1.600000,-1.200000,0.000000,1.600000,-1.200000,0.000000 -3160 DATA 1.548100,-1.200000,-0.050000,1.622700,-1.232700,-0.058600,1.650000,-1.200000,0.000000,1.572200,-1.200000,0.083300 -3170 DATA 1.632200,-1.231200,0.074700,1.632200,-1.231200,0.074700,1.714800,-1.233300,0.000000,1.650000,-1.200000,0.000000 -3180 DATA 1.714800,-1.233300,0.000000,1.632200,-1.231200,0.074700,1.622700,-1.232700,0.058600,1.622700,-1.232700,0.058600 -3190 DATA 1.693500,-1.235400,0.000000,1.714800,-1.233300,0.000000,1.693500,-1.235400,0.000000,1.622700,-1.232700,0.058600 -3200 DATA 1.548100,-1.200000,0.050000,1.548100,-1.200000,0.050000,1.600000,-1.200000,0.000000,1.693500,-1.235400,0.000000 -3210 DATA 1.572200,-1.200000,0.083300,1.427800,-1.200000,0.083300,1.478900,-1.227200,0.074700,1.478900,-1.227200,0.074700 -3220 DATA 1.632200,-1.231200,0.074700,1.572200,-1.200000,0.083300,1.632200,-1.231200,0.074700,1.478900,-1.227200,0.074700 -3230 DATA 1.491200,-1.227700,0.058600,1.491200,-1.227700,0.058600,1.622700,-1.232700,0.058600,1.632200,-1.231200,0.074700 -3240 DATA 1.622700,-1.232700,0.058600,1.491200,-1.227700,0.058600,1.451900,-1.200000,0.050000,1.451900,-1.200000,0.050000 -3250 DATA 1.548100,-1.200000,0.050000,1.622700,-1.232700,0.058600,1.427800,-1.200000,0.083300,1.350000,-1.200000,0.000000 -3260 DATA 1.396300,-1.225000,0.000000,1.396300,-1.225000,0.000000,1.478900,-1.227200,0.074700,1.427800,-1.200000,0.083300 -3270 DATA 1.478900,-1.227200,0.074700,1.396300,-1.225000,0.000000,1.420400,-1.225000,0.000000,1.420400,-1.225000,0.000000 -3280 DATA 1.491200,-1.227700,0.058600,1.478900,-1.227200,0.074700,1.491200,-1.227700,0.058600,1.420400,-1.225000,0.000000 -3290 DATA 1.400000,-1.200000,0.000000,1.400000,-1.200000,0.000000,1.451900,-1.200000,0.050000,1.491200,-1.227700,0.058600 -3300 DATA 0.000000,-1.575000,0.000000,0.000000,-1.575000,0.000000,0.157100,-1.533300,-0.092400,0.157100,-1.533300,-0.092400 -3310 DATA 0.181500,-1.533300,0.000000,0.000000,-1.575000,0.000000,0.181500,-1.533300,0.000000,0.157100,-1.533300,-0.092400 -3320 DATA 0.102600,-1.441700,-0.060300,0.102600,-1.441700,-0.060300,0.118500,-1.441700,0.000000,0.181500,-1.533300,0.000000 -3330 DATA 0.118500,-1.441700,0.000000,0.102600,-1.441700,-0.060300,0.086500,-1.350000,-0.050800,0.086500,-1.350000,-0.050800 -3340 DATA 0.100000,-1.350000,0.000000,0.118500,-1.441700,0.000000,0.000000,-1.575000,0.000000,0.000000,-1.575000,0.000000 -3350 DATA 0.092400,-1.533300,-0.157100,0.092400,-1.533300,-0.157100,0.157100,-1.533300,-0.092400,0.000000,-1.575000,0.000000 -3360 DATA 0.157100,-1.533300,-0.092400,0.092400,-1.533300,-0.157100,0.060300,-1.441700,-0.102600,0.060300,-1.441700,-0.102600 -3370 DATA 0.102600,-1.441700,-0.060300,0.157100,-1.533300,-0.092400,0.102600,-1.441700,-0.060300,0.060300,-1.441700,-0.102600 -3380 DATA 0.050800,-1.350000,-0.086500,0.050800,-1.350000,-0.086500,0.086500,-1.350000,-0.050800,0.102600,-1.441700,-0.060300 -3390 DATA 0.000000,-1.575000,0.000000,0.000000,-1.575000,0.000000,0.000000,-1.533300,-0.181500,0.000000,-1.533300,-0.181500 -3400 DATA 0.092400,-1.533300,-0.157100,0.000000,-1.575000,0.000000,0.092400,-1.533300,-0.157100,0.000000,-1.533300,-0.181500 -3410 DATA 0.000000,-1.441700,-0.118500,0.000000,-1.441700,-0.118500,0.060300,-1.441700,-0.102600,0.092400,-1.533300,-0.157100 -3420 DATA 0.060300,-1.441700,-0.102600,0.000000,-1.441700,-0.118500,0.000000,-1.350000,-0.100000,0.000000,-1.350000,-0.100000 -3430 DATA 0.050800,-1.350000,-0.086500,0.060300,-1.441700,-0.102600,0.000000,-1.575000,0.000000,0.000000,-1.575000,0.000000 -3440 DATA -0.092400,-1.533300,-0.157100,-0.092400,-1.533300,-0.157100,0.000000,-1.533300,-0.181500,0.000000,-1.575000,0.000000 -3450 DATA 0.000000,-1.533300,-0.181500,-0.092400,-1.533300,-0.157100,-0.060300,-1.441700,-0.102600,-0.060300,-1.441700,-0.102600 -3460 DATA 0.000000,-1.441700,-0.118500,0.000000,-1.533300,-0.181500,0.000000,-1.441700,-0.118500,-0.060300,-1.441700,-0.102600 -3470 DATA -0.050800,-1.350000,-0.086500,-0.050800,-1.350000,-0.086500,0.000000,-1.350000,-0.100000,0.000000,-1.441700,-0.118500 -3480 DATA 0.000000,-1.575000,0.000000,0.000000,-1.575000,0.000000,-0.157100,-1.533300,-0.092400,-0.157100,-1.533300,-0.092400 -3490 DATA -0.092400,-1.533300,-0.157100,0.000000,-1.575000,0.000000,-0.092400,-1.533300,-0.157100,-0.157100,-1.533300,-0.092400 -3500 DATA -0.102600,-1.441700,-0.060300,-0.102600,-1.441700,-0.060300,-0.060300,-1.441700,-0.102600,-0.092400,-1.533300,-0.157100 -3510 DATA -0.060300,-1.441700,-0.102600,-0.102600,-1.441700,-0.060300,-0.086500,-1.350000,-0.050800,-0.086500,-1.350000,-0.050800 -3520 DATA -0.050800,-1.350000,-0.086500,-0.060300,-1.441700,-0.102600,0.000000,-1.575000,0.000000,0.000000,-1.575000,0.000000 -3530 DATA -0.181500,-1.533300,0.000000,-0.181500,-1.533300,0.000000,-0.157100,-1.533300,-0.092400,0.000000,-1.575000,0.000000 -3540 DATA -0.157100,-1.533300,-0.092400,-0.181500,-1.533300,0.000000,-0.118500,-1.441700,0.000000,-0.118500,-1.441700,0.000000 -3550 DATA -0.102600,-1.441700,-0.060300,-0.157100,-1.533300,-0.092400,-0.102600,-1.441700,-0.060300,-0.118500,-1.441700,0.000000 -3560 DATA -0.100000,-1.350000,0.000000,-0.100000,-1.350000,0.000000,-0.086500,-1.350000,-0.050800,-0.102600,-1.441700,-0.060300 -3570 DATA 0.000000,-1.575000,0.000000,0.000000,-1.575000,0.000000,-0.157100,-1.533300,0.092400,-0.157100,-1.533300,0.092400 -3580 DATA -0.181500,-1.533300,0.000000,0.000000,-1.575000,0.000000,-0.181500,-1.533300,0.000000,-0.157100,-1.533300,0.092400 -3590 DATA -0.102600,-1.441700,0.060300,-0.102600,-1.441700,0.060300,-0.118500,-1.441700,0.000000,-0.181500,-1.533300,0.000000 -3600 DATA -0.118500,-1.441700,0.000000,-0.102600,-1.441700,0.060300,-0.086500,-1.350000,0.050800,-0.086500,-1.350000,0.050800 -3610 DATA -0.100000,-1.350000,0.000000,-0.118500,-1.441700,0.000000,0.000000,-1.575000,0.000000,0.000000,-1.575000,0.000000 -3620 DATA -0.092400,-1.533300,0.157100,-0.092400,-1.533300,0.157100,-0.157100,-1.533300,0.092400,0.000000,-1.575000,0.000000 -3630 DATA -0.157100,-1.533300,0.092400,-0.092400,-1.533300,0.157100,-0.060300,-1.441700,0.102600,-0.060300,-1.441700,0.102600 -3640 DATA -0.102600,-1.441700,0.060300,-0.157100,-1.533300,0.092400,-0.102600,-1.441700,0.060300,-0.060300,-1.441700,0.102600 -3650 DATA -0.050800,-1.350000,0.086500,-0.050800,-1.350000,0.086500,-0.086500,-1.350000,0.050800,-0.102600,-1.441700,0.060300 -3660 DATA 0.000000,-1.575000,0.000000,0.000000,-1.575000,0.000000,0.000000,-1.533300,0.181500,0.000000,-1.533300,0.181500 -3670 DATA -0.092400,-1.533300,0.157100,0.000000,-1.575000,0.000000,-0.092400,-1.533300,0.157100,0.000000,-1.533300,0.181500 -3680 DATA 0.000000,-1.441700,0.118500,0.000000,-1.441700,0.118500,-0.060300,-1.441700,0.102600,-0.092400,-1.533300,0.157100 -3690 DATA -0.060300,-1.441700,0.102600,0.000000,-1.441700,0.118500,0.000000,-1.350000,0.100000,0.000000,-1.350000,0.100000 -3700 DATA -0.050800,-1.350000,0.086500,-0.060300,-1.441700,0.102600,0.000000,-1.575000,0.000000,0.000000,-1.575000,0.000000 -3710 DATA 0.092400,-1.533300,0.157100,0.092400,-1.533300,0.157100,0.000000,-1.533300,0.181500,0.000000,-1.575000,0.000000 -3720 DATA 0.000000,-1.533300,0.181500,0.092400,-1.533300,0.157100,0.060300,-1.441700,0.102600,0.060300,-1.441700,0.102600 -3730 DATA 0.000000,-1.441700,0.118500,0.000000,-1.533300,0.181500,0.000000,-1.441700,0.118500,0.060300,-1.441700,0.102600 -3740 DATA 0.050800,-1.350000,0.086500,0.050800,-1.350000,0.086500,0.000000,-1.350000,0.100000,0.000000,-1.441700,0.118500 -3750 DATA 0.000000,-1.575000,0.000000,0.000000,-1.575000,0.000000,0.157100,-1.533300,0.092400,0.157100,-1.533300,0.092400 -3760 DATA 0.092400,-1.533300,0.157100,0.000000,-1.575000,0.000000,0.092400,-1.533300,0.157100,0.157100,-1.533300,0.092400 -3770 DATA 0.102600,-1.441700,0.060300,0.102600,-1.441700,0.060300,0.060300,-1.441700,0.102600,0.092400,-1.533300,0.157100 -3780 DATA 0.060300,-1.441700,0.102600,0.102600,-1.441700,0.060300,0.086500,-1.350000,0.050800,0.086500,-1.350000,0.050800 -3790 DATA 0.050800,-1.350000,0.086500,0.060300,-1.441700,0.102600,0.000000,-1.575000,0.000000,0.000000,-1.575000,0.000000 -3800 DATA 0.181500,-1.533300,0.000000,0.181500,-1.533300,0.000000,0.157100,-1.533300,0.092400,0.000000,-1.575000,0.000000 -3810 DATA 0.157100,-1.533300,0.092400,0.181500,-1.533300,0.000000,0.118500,-1.441700,0.000000,0.118500,-1.441700,0.000000 -3820 DATA 0.102600,-1.441700,0.060300,0.157100,-1.533300,0.092400,0.102600,-1.441700,0.060300,0.118500,-1.441700,0.000000 -3830 DATA 0.100000,-1.350000,0.000000,0.100000,-1.350000,0.000000,0.086500,-1.350000,0.050800,0.102600,-1.441700,0.060300 -3840 DATA 0.100000,-1.350000,0.000000,0.086500,-1.350000,-0.050800,0.248300,-1.294400,-0.145900,0.248300,-1.294400,-0.145900 -3850 DATA 0.287000,-1.294400,0.000000,0.100000,-1.350000,0.000000,0.287000,-1.294400,0.000000,0.248300,-1.294400,-0.145900 -3860 DATA 0.458200,-1.255600,-0.269100,0.458200,-1.255600,-0.269100,0.529600,-1.255600,0.000000,0.287000,-1.294400,0.000000 -3870 DATA 0.529600,-1.255600,0.000000,0.458200,-1.255600,-0.269100,0.562400,-1.200000,-0.330300,0.562400,-1.200000,-0.330300 -3880 DATA 0.650000,-1.200000,0.000000,0.529600,-1.255600,0.000000,0.086500,-1.350000,-0.050800,0.050800,-1.350000,-0.086500 -3890 DATA 0.145900,-1.294400,-0.248300,0.145900,-1.294400,-0.248300,0.248300,-1.294400,-0.145900,0.086500,-1.350000,-0.050800 -3900 DATA 0.248300,-1.294400,-0.145900,0.145900,-1.294400,-0.248300,0.269100,-1.255600,-0.458200,0.269100,-1.255600,-0.458200 -3910 DATA 0.458200,-1.255600,-0.269100,0.248300,-1.294400,-0.145900,0.458200,-1.255600,-0.269100,0.269100,-1.255600,-0.458200 -3920 DATA 0.330300,-1.200000,-0.562400,0.330300,-1.200000,-0.562400,0.562400,-1.200000,-0.330300,0.458200,-1.255600,-0.269100 -3930 DATA 0.050800,-1.350000,-0.086500,0.000000,-1.350000,-0.100000,0.000000,-1.294400,-0.287000,0.000000,-1.294400,-0.287000 -3940 DATA 0.145900,-1.294400,-0.248300,0.050800,-1.350000,-0.086500,0.145900,-1.294400,-0.248300,0.000000,-1.294400,-0.287000 -3950 DATA 0.000000,-1.255600,-0.529600,0.000000,-1.255600,-0.529600,0.269100,-1.255600,-0.458200,0.145900,-1.294400,-0.248300 -3960 DATA 0.269100,-1.255600,-0.458200,0.000000,-1.255600,-0.529600,0.000000,-1.200000,-0.650000,0.000000,-1.200000,-0.650000 -3970 DATA 0.330300,-1.200000,-0.562400,0.269100,-1.255600,-0.458200,0.000000,-1.350000,-0.100000,-0.050800,-1.350000,-0.086500 -3980 DATA -0.145900,-1.294400,-0.248300,-0.145900,-1.294400,-0.248300,0.000000,-1.294400,-0.287000,0.000000,-1.350000,-0.100000 -3990 DATA 0.000000,-1.294400,-0.287000,-0.145900,-1.294400,-0.248300,-0.269100,-1.255600,-0.458200,-0.269100,-1.255600,-0.458200 -4000 DATA 0.000000,-1.255600,-0.529600,0.000000,-1.294400,-0.287000,0.000000,-1.255600,-0.529600,-0.269100,-1.255600,-0.458200 -4010 DATA -0.330300,-1.200000,-0.562400,-0.330300,-1.200000,-0.562400,0.000000,-1.200000,-0.650000,0.000000,-1.255600,-0.529600 -4020 DATA -0.050800,-1.350000,-0.086500,-0.086500,-1.350000,-0.050800,-0.248300,-1.294400,-0.145900,-0.248300,-1.294400,-0.145900 -4030 DATA -0.145900,-1.294400,-0.248300,-0.050800,-1.350000,-0.086500,-0.145900,-1.294400,-0.248300,-0.248300,-1.294400,-0.145900 -4040 DATA -0.458200,-1.255600,-0.269100,-0.458200,-1.255600,-0.269100,-0.269100,-1.255600,-0.458200,-0.145900,-1.294400,-0.248300 -4050 DATA -0.269100,-1.255600,-0.458200,-0.458200,-1.255600,-0.269100,-0.562400,-1.200000,-0.330300,-0.562400,-1.200000,-0.330300 -4060 DATA -0.330300,-1.200000,-0.562400,-0.269100,-1.255600,-0.458200,-0.086500,-1.350000,-0.050800,-0.100000,-1.350000,0.000000 -4070 DATA -0.287000,-1.294400,0.000000,-0.287000,-1.294400,0.000000,-0.248300,-1.294400,-0.145900,-0.086500,-1.350000,-0.050800 -4080 DATA -0.248300,-1.294400,-0.145900,-0.287000,-1.294400,0.000000,-0.529600,-1.255600,0.000000,-0.529600,-1.255600,0.000000 -4090 DATA -0.458200,-1.255600,-0.269100,-0.248300,-1.294400,-0.145900,-0.458200,-1.255600,-0.269100,-0.529600,-1.255600,0.000000 -4100 DATA -0.650000,-1.200000,0.000000,-0.650000,-1.200000,0.000000,-0.562400,-1.200000,-0.330300,-0.458200,-1.255600,-0.269100 -4110 DATA -0.100000,-1.350000,0.000000,-0.086500,-1.350000,0.050800,-0.248300,-1.294400,0.145900,-0.248300,-1.294400,0.145900 -4120 DATA -0.287000,-1.294400,0.000000,-0.100000,-1.350000,0.000000,-0.287000,-1.294400,0.000000,-0.248300,-1.294400,0.145900 -4130 DATA -0.458200,-1.255600,0.269100,-0.458200,-1.255600,0.269100,-0.529600,-1.255600,0.000000,-0.287000,-1.294400,0.000000 -4140 DATA -0.529600,-1.255600,0.000000,-0.458200,-1.255600,0.269100,-0.562400,-1.200000,0.330300,-0.562400,-1.200000,0.330300 -4150 DATA -0.650000,-1.200000,0.000000,-0.529600,-1.255600,0.000000,-0.086500,-1.350000,0.050800,-0.050800,-1.350000,0.086500 -4160 DATA -0.145900,-1.294400,0.248300,-0.145900,-1.294400,0.248300,-0.248300,-1.294400,0.145900,-0.086500,-1.350000,0.050800 -4170 DATA -0.248300,-1.294400,0.145900,-0.145900,-1.294400,0.248300,-0.269100,-1.255600,0.458200,-0.269100,-1.255600,0.458200 -4180 DATA -0.458200,-1.255600,0.269100,-0.248300,-1.294400,0.145900,-0.458200,-1.255600,0.269100,-0.269100,-1.255600,0.458200 -4190 DATA -0.330300,-1.200000,0.562400,-0.330300,-1.200000,0.562400,-0.562400,-1.200000,0.330300,-0.458200,-1.255600,0.269100 -4200 DATA -0.050800,-1.350000,0.086500,0.000000,-1.350000,0.100000,0.000000,-1.294400,0.287000,0.000000,-1.294400,0.287000 -4210 DATA -0.145900,-1.294400,0.248300,-0.050800,-1.350000,0.086500,-0.145900,-1.294400,0.248300,0.000000,-1.294400,0.287000 -4220 DATA 0.000000,-1.255600,0.529600,0.000000,-1.255600,0.529600,-0.269100,-1.255600,0.458200,-0.145900,-1.294400,0.248300 -4230 DATA -0.269100,-1.255600,0.458200,0.000000,-1.255600,0.529600,0.000000,-1.200000,0.650000,0.000000,-1.200000,0.650000 -4240 DATA -0.330300,-1.200000,0.562400,-0.269100,-1.255600,0.458200,0.000000,-1.350000,0.100000,0.050800,-1.350000,0.086500 -4250 DATA 0.145900,-1.294400,0.248300,0.145900,-1.294400,0.248300,0.000000,-1.294400,0.287000,0.000000,-1.350000,0.100000 -4260 DATA 0.000000,-1.294400,0.287000,0.145900,-1.294400,0.248300,0.269100,-1.255600,0.458200,0.269100,-1.255600,0.458200 -4270 DATA 0.000000,-1.255600,0.529600,0.000000,-1.294400,0.287000,0.000000,-1.255600,0.529600,0.269100,-1.255600,0.458200 -4280 DATA 0.330300,-1.200000,0.562400,0.330300,-1.200000,0.562400,0.000000,-1.200000,0.650000,0.000000,-1.255600,0.529600 -4290 DATA 0.050800,-1.350000,0.086500,0.086500,-1.350000,0.050800,0.248300,-1.294400,0.145900,0.248300,-1.294400,0.145900 -4300 DATA 0.145900,-1.294400,0.248300,0.050800,-1.350000,0.086500,0.145900,-1.294400,0.248300,0.248300,-1.294400,0.145900 -4310 DATA 0.458200,-1.255600,0.269100,0.458200,-1.255600,0.269100,0.269100,-1.255600,0.458200,0.145900,-1.294400,0.248300 -4320 DATA 0.269100,-1.255600,0.458200,0.458200,-1.255600,0.269100,0.562400,-1.200000,0.330300,0.562400,-1.200000,0.330300 -4330 DATA 0.330300,-1.200000,0.562400,0.269100,-1.255600,0.458200,0.086500,-1.350000,0.050800,0.100000,-1.350000,0.000000 -4340 DATA 0.287000,-1.294400,0.000000,0.287000,-1.294400,0.000000,0.248300,-1.294400,0.145900,0.086500,-1.350000,0.050800 -4350 DATA 0.248300,-1.294400,0.145900,0.287000,-1.294400,0.000000,0.529600,-1.255600,0.000000,0.529600,-1.255600,0.000000 -4360 DATA 0.458200,-1.255600,0.269100,0.248300,-1.294400,0.145900,0.458200,-1.255600,0.269100,0.529600,-1.255600,0.000000 -4370 DATA 0.650000,-1.200000,0.000000,0.650000,-1.200000,0.000000,0.562400,-1.200000,0.330300,0.458200,-1.255600,0.269100 -4380 REM -4390 REM -- VERTEX INDEXES -- -4400 DATA 0,1,2,3,4,5,6,7,8,9 -4410 DATA 10,11,12,13,14,15,16,17,18,19 -4420 DATA 20,21,22,23,24,25,26,27,28,29 -4430 DATA 30,31,32,33,34,35,36,37,38,39 -4440 DATA 40,41,42,43,44,45,46,47,48,49 -4450 DATA 50,51,52,53,54,55,56,57,58,59 -4460 DATA 60,61,62,63,64,65,66,67,68,69 -4470 DATA 70,71,72,73,74,75,76,77,78,79 -4480 DATA 80,81,82,83,84,85,86,87,88,89 -4490 DATA 90,91,92,93,94,95,96,97,98,99 -4500 DATA 100,101,102,103,104,105,106,107,108,109 -4510 DATA 110,111,112,113,114,115,116,117,118,119 -4520 DATA 120,121,122,123,124,125,126,127,128,129 -4530 DATA 130,131,132,133,134,135,136,137,138,139 -4540 DATA 140,141,142,143,144,145,146,147,148,149 -4550 DATA 150,151,152,153,154,155,156,157,158,159 -4560 DATA 160,161,162,163,164,165,166,167,168,169 -4570 DATA 170,171,172,173,174,175,176,177,178,179 -4580 DATA 180,181,182,183,184,185,186,187,188,189 -4590 DATA 190,191,192,193,194,195,196,197,198,199 -4600 DATA 200,201,202,203,204,205,206,207,208,209 -4610 DATA 210,211,212,213,214,215,216,217,218,219 -4620 DATA 220,221,222,223,224,225,226,227,228,229 -4630 DATA 230,231,232,233,234,235,236,237,238,239 -4640 DATA 240,241,242,243,244,245,246,247,248,249 -4650 DATA 250,251,252,253,254,255,256,257,258,259 -4660 DATA 260,261,262,263,264,265,266,267,268,269 -4670 DATA 270,271,272,273,274,275,276,277,278,279 -4680 DATA 280,281,282,283,284,285,286,287,288,289 -4690 DATA 290,291,292,293,294,295,296,297,298,299 -4700 DATA 300,301,302,303,304,305,306,307,308,309 -4710 DATA 310,311,312,313,314,315,316,317,318,319 -4720 DATA 320,321,322,323,324,325,326,327,328,329 -4730 DATA 330,331,332,333,334,335,336,337,338,339 -4740 DATA 340,341,342,343,344,345,346,347,348,349 -4750 DATA 350,351,352,353,354,355,356,357,358,359 -4760 DATA 360,361,362,363,364,365,366,367,368,369 -4770 DATA 370,371,372,373,374,375,376,377,378,379 -4780 DATA 380,381,382,383,384,385,386,387,388,389 -4790 DATA 390,391,392,393,394,395,396,397,398,399 -4800 DATA 400,401,402,403,404,405,406,407,408,409 -4810 DATA 410,411,412,413,414,415,416,417,418,419 -4820 DATA 420,421,422,423,424,425,426,427,428,429 -4830 DATA 430,431,432,433,434,435,436,437,438,439 -4840 DATA 440,441,442,443,444,445,446,447,448,449 -4850 DATA 450,451,452,453,454,455,456,457,458,459 -4860 DATA 460,461,462,463,464,465,466,467,468,469 -4870 DATA 470,471,472,473,474,475,476,477,478,479 -4880 DATA 480,481,482,483,484,485,486,487,488,489 -4890 DATA 490,491,492,493,494,495,496,497,498,499 -4900 DATA 500,501,502,503,504,505,506,507,508,509 -4910 DATA 510,511,512,513,514,515,516,517,518,519 -4920 DATA 520,521,522,523,524,525,526,527,528,529 -4930 DATA 530,531,532,533,534,535,536,537,538,539 -4940 DATA 540,541,542,543,544,545,546,547,548,549 -4950 DATA 550,551,552,553,554,555,556,557,558,559 -4960 DATA 560,561,562,563,564,565,566,567,568,569 -4970 DATA 570,571,572,573,574,575,576,577,578,579 -4980 DATA 580,581,582,583,584,585,586,587,588,589 -4990 DATA 590,591,592,593,594,595,596,597,598,599 -5000 DATA 600,601,602,603,604,605,606,607,608,609 -5010 DATA 610,611,612,613,614,615,616,617,618,619 -5020 DATA 620,621,622,623,624,625,626,627,628,629 -5030 DATA 630,631,632,633,634,635,636,637,638,639 -5040 DATA 640,641,642,643,644,645,646,647,648,649 -5050 DATA 650,651,652,653,654,655,656,657,658,659 -5060 DATA 660,661,662,663,664,665,666,667,668,669 -5070 DATA 670,671,672,673,674,675,676,677,678,679 -5080 DATA 680,681,682,683,684,685,686,687,688,689 -5090 DATA 690,691,692,693,694,695,696,697,698,699 -5100 DATA 700,701,702,703,704,705,706,707,708,709 -5110 DATA 710,711,712,713,714,715,716,717,718,719 -5120 DATA 720,721,722,723,724,725,726,727,728,729 -5130 DATA 730,731,732,733,734,735,736,737,738,739 -5140 DATA 740,741,742,743,744,745,746,747,748,749 -5150 DATA 750,751,752,753,754,755,756,757,758,759 -5160 DATA 760,761,762,763,764,765,766,767,768,769 -5170 DATA 770,771,772,773,774,775,776,777,778,779 -5180 DATA 780,781,782,783,784,785,786,787,788,789 -5190 DATA 790,791,792,793,794,795,796,797,798,799 -5200 DATA 800,801,802,803,804,805,806,807,808,809 -5210 DATA 810,811,812,813,814,815,816,817,818,819 -5220 DATA 820,821,822,823,824,825,826,827,828,829 -5230 DATA 830,831,832,833,834,835,836,837,838,839 -5240 DATA 840,841,842,843,844,845,846,847,848,849 -5250 DATA 850,851,852,853,854,855,856,857,858,859 -5260 DATA 860,861,862,863,864,865,866,867,868,869 -5270 DATA 870,871,872,873,874,875,876,877,878,879 -5280 DATA 880,881,882,883,884,885,886,887,888,889 -5290 DATA 890,891,892,893,894,895,896,897,898,899 -5300 DATA 900,901,902,903,904,905,906,907,908,909 -5310 DATA 910,911,912,913,914,915,916,917,918,919 -5320 DATA 920,921,922,923,924,925,926,927,928,929 -5330 DATA 930,931,932,933,934,935,936,937,938,939 -5340 DATA 940,941,942,943,944,945,946,947,948,949 -5350 DATA 950,951,952,953,954,955,956,957,958,959 -5360 DATA 960,961,962,963,964,965,966,967,968,969 -5370 DATA 970,971,972,973,974,975,976,977,978,979 -5380 DATA 980,981,982,983,984,985,986,987,988,989 -5390 DATA 990,991,992,993,994,995,996,997,998,999 -5400 DATA 1000,1001,1002,1003,1004,1005,1006,1007,1008,1009 -5410 DATA 1010,1011,1012,1013,1014,1015,1016,1017,1018,1019 -5420 DATA 1020,1021,1022,1023,1024,1025,1026,1027,1028,1029 -5430 DATA 1030,1031,1032,1033,1034,1035,1036,1037,1038,1039 -5440 DATA 1040,1041,1042,1043,1044,1045,1046,1047,1048,1049 -5450 DATA 1050,1051,1052,1053,1054,1055,1056,1057,1058,1059 -5460 DATA 1060,1061,1062,1063,1064,1065,1066,1067,1068,1069 -5470 DATA 1070,1071,1072,1073,1074,1075,1076,1077,1078,1079 -5480 DATA 1080,1081,1082,1083,1084,1085,1086,1087,1088,1089 -5490 DATA 1090,1091,1092,1093,1094,1095,1096,1097,1098,1099 -5500 DATA 1100,1101,1102,1103,1104,1105,1106,1107,1108,1109 -5510 DATA 1110,1111,1112,1113,1114,1115,1116,1117,1118,1119 -5520 DATA 1120,1121,1122,1123,1124,1125,1126,1127,1128,1129 -5530 DATA 1130,1131,1132,1133,1134,1135,1136,1137,1138,1139 -5540 DATA 1140,1141,1142,1143,1144,1145,1146,1147,1148,1149 -5550 DATA 1150,1151,1152,1153,1154,1155,1156,1157,1158,1159 -5560 DATA 1160,1161,1162,1163,1164,1165,1166,1167,1168,1169 -5570 DATA 1170,1171,1172,1173,1174,1175,1176,1177,1178,1179 -5580 DATA 1180,1181,1182,1183,1184,1185,1186,1187,1188,1189 -5590 DATA 1190,1191,1192,1193,1194,1195,1196,1197,1198,1199 -5600 DATA 1200,1201,1202,1203,1204,1205,1206,1207,1208,1209 -5610 DATA 1210,1211,1212,1213,1214,1215,1216,1217,1218,1219 -5620 DATA 1220,1221,1222,1223,1224,1225,1226,1227,1228,1229 -5630 DATA 1230,1231,1232,1233,1234,1235,1236,1237,1238,1239 -5640 DATA 1240,1241,1242,1243,1244,1245,1246,1247,1248,1249 -5650 DATA 1250,1251,1252,1253,1254,1255,1256,1257,1258,1259 -5660 DATA 1260,1261,1262,1263,1264,1265,1266,1267,1268,1269 -5670 DATA 1270,1271,1272,1273,1274,1275,1276,1277,1278,1279 -5680 DATA 1280,1281,1282,1283,1284,1285,1286,1287,1288,1289 -5690 DATA 1290,1291,1292,1293,1294,1295,1296,1297,1298,1299 -5700 DATA 1300,1301,1302,1303,1304,1305,1306,1307,1308,1309 -5710 DATA 1310,1311,1312,1313,1314,1315,1316,1317,1318,1319 -5720 DATA 1320,1321,1322,1323,1324,1325,1326,1327,1328,1329 -5730 DATA 1330,1331,1332,1333,1334,1335,1336,1337,1338,1339 -5740 DATA 1340,1341,1342,1343,1344,1345,1346,1347,1348,1349 -5750 DATA 1350,1351,1352,1353,1354,1355,1356,1357,1358,1359 -5760 DATA 1360,1361,1362,1363,1364,1365,1366,1367,1368,1369 -5770 DATA 1370,1371,1372,1373,1374,1375,1376,1377,1378,1379 -5780 DATA 1380,1381,1382,1383,1384,1385,1386,1387,1388,1389 -5790 DATA 1390,1391,1392,1393,1394,1395,1396,1397,1398,1399 -5800 DATA 1400,1401,1402,1403,1404,1405,1406,1407,1408,1409 -5810 DATA 1410,1411,1412,1413,1414,1415,1416,1417,1418,1419 -5820 DATA 1420,1421,1422,1423,1424,1425,1426,1427,1428,1429 -5830 DATA 1430,1431,1432,1433,1434,1435,1436,1437,1438,1439 -5840 DATA 1440,1441,1442,1443,1444,1445,1446,1447,1448,1449 -5850 DATA 1450,1451,1452,1453,1454,1455,1456,1457,1458,1459 -5860 DATA 1460,1461,1462,1463,1464,1465,1466,1467,1468,1469 -5870 DATA 1470,1471,1472,1473,1474,1475,1476,1477,1478,1479 -5880 DATA 1480,1481,1482,1483,1484,1485,1486,1487,1488,1489 -5890 DATA 1490,1491,1492,1493,1494,1495,1496,1497,1498,1499 -5900 DATA 1500,1501,1502,1503,1504,1505,1506,1507,1508,1509 -5910 DATA 1510,1511,1512,1513,1514,1515,1516,1517,1518,1519 -5920 DATA 1520,1521,1522,1523,1524,1525,1526,1527,1528,1529 -5930 DATA 1530,1531,1532,1533,1534,1535,1536,1537,1538,1539 -5940 DATA 1540,1541,1542,1543,1544,1545,1546,1547,1548,1549 -5950 DATA 1550,1551,1552,1553,1554,1555,1556,1557,1558,1559 -5960 DATA 1560,1561,1562,1563,1564,1565,1566,1567,1568,1569 -5970 DATA 1570,1571,1572,1573,1574,1575,1576,1577,1578,1579 -5980 DATA 1580,1581,1582,1583,1584,1585,1586,1587,1588,1589 -5990 DATA 1590,1591,1592,1593,1594,1595,1596,1597,1598,1599 -6000 DATA 1600,1601,1602,1603,1604,1605,1606,1607,1608,1609 -6010 DATA 1610,1611,1612,1613,1614,1615,1616,1617,1618,1619 -6020 DATA 1620,1621,1622,1623,1624,1625,1626,1627,1628,1629 -6030 DATA 1630,1631,1632,1633,1634,1635,1636,1637,1638,1639 -6040 DATA 1640,1641,1642,1643,1644,1645,1646,1647,1648,1649 -6050 DATA 1650,1651,1652,1653,1654,1655,1656,1657,1658,1659 -6060 DATA 1660,1661,1662,1663,1664,1665,1666,1667,1668,1669 -6070 DATA 1670,1671,1672,1673,1674,1675,1676,1677,1678,1679 -6080 DATA 1680,1681,1682,1683,1684,1685,1686,1687,1688,1689 -6090 DATA 1690,1691,1692,1693,1694,1695,1696,1697,1698,1699 -6100 DATA 1700,1701,1702,1703,1704,1705,1706,1707,1708,1709 -6110 DATA 1710,1711,1712,1713,1714,1715,1716,1717,1718,1719 -6120 DATA 1720,1721,1722,1723,1724,1725,1726,1727 -6130 REM -6140 REM -- CODE -- -6145 PRINT "Reading vertices" -6150 total_coords%=teapot_vertices%*3 -6160 max_abs=-99999 -6170 DIM vertices(total_coords%) -6180 FOR i%=0 TO total_coords%-1 -6190 READ coord -6200 vertices(i%)=coord -6210 a=ABS(coord) -6220 IF a>max_abs THEN max_abs=a -6230 NEXT i% -6232 factor=32767.0/max_abs -6234 PRINT "Max absolute value = ";max_abs -6236 PRINT "Factor = ";factor -6240 sid%=100: mid%=1: oid%=1: bmid1%=101: bmid2%=102 -6241 PRINT "Creating control structure" -6242 scene_width%=96: scene_height%=96 -6243 VDU 23,0, &A0, sid%; &48, 0, scene_width%; scene_height%; : REM Create Control Structure -6244 f=32767.0/256.0 -6245 distx=0*f: disty=2*f: distz=-20*f -6246 VDU 23,0, &A0, sid%; &48, 29, distx; disty; distz; : REM Set Camera XYZ Translation Distances -6247 pi2=PI*2.0: f=32767.0/pi2 -6248 anglex=-0.4*f -6249 VDU 23,0, &A0, sid%; &48, 22, anglex; : REM Set Camera X Rotation Angle - -6255 PRINT "Sending vertices using factor ";factor -6260 VDU 23,0, &A0, sid%; &48, 1, mid%; teapot_vertices%; : REM Define Mesh Vertices -6270 FOR i%=0 TO total_coords%-1 -6280 val%=vertices(i%)*factor -6290 VDU val%; -6295 T%=TIME -6296 IF TIME-T%<1 GOTO 6296 -6300 NEXT i% -6305 PRINT "Reading and sending vertex indexes" -6310 VDU 23,0, &A0, sid%; &48, 2, mid%; teapot_vertices%; : REM Set Mesh Vertex Indexes -6320 FOR i%=0 TO teapot_vertices%-1 -6330 READ val% -6340 VDU val%; -6345 T%=TIME -6346 IF TIME-T%<1 GOTO 6346 -6350 NEXT i% -6355 PRINT "Defining texture coordinates" -6360 VDU 23,0, &A0, sid%; &48, 3, mid%; 1; 32768; 32768; : REM Define Texture Coordinates -6355 PRINT "Sending texture coordinate indexes" -6370 VDU 23,0, &A0, sid%; &48, 4, mid%; teapot_vertices%; : REM Set Texture Coordinate Indexes -6372 FOR i%=0 TO teapot_vertices%-1 -6373 VDU 0; -6374 NEXT i% -6376 PRINT "Creating texture bitmap" -6380 VDU 23, 27, 0, bmid1%: REM Create a bitmap for a texture -6382 PRINT "Setting texture pixel" -6390 VDU 23, 27, 1, 1; 1; &55, &AA, &FF, &C0 : REM Set a pixel in the bitmap -6405 PRINT "Create 3D object" -6407 VDU 23,0, &A0, sid%; &48, 5, oid%; mid%; bmid1%+64000; : REM Create Object -6409 PRINT "Scale object" -6410 scale=6.0*256.0 -6411 VDU 23, 0, &A0, sid%; &48, 9, oid%; scale; scale; scale; : REM Set Object XYZ Scale Factors -6412 PRINT "Create target bitmap" -6413 VDU 23, 27, 0, bmid2% : REM Select output bitmap -6414 VDU 23, 27, 2, scene_width%; scene_height%; &0000; &00C0; : REM Create solid color bitmap -6415 PRINT "Render 3D object" -6416 VDU 23, 0, &C3: REM Flip buffer -6417 rotatex=0.0: rotatey=0.0: rotatez=0.0 -6418 incx=PI/16.0: incy=PI/32.0: incz=PI/64.0 -6419 factor=32767.0/pi2 -6420 VDU 22, 136: REM 320x240x64 -6421 VDU 23, 0, &C0, 0: REM Normal coordinates -6422 CLG -6423 VDU 23, 0, &A0, sid%; &48, 30, bmid2%+64000; : REM Render To Bitmap -6510 VDU 23, 27, 3, 50; 50; : REM Display output bitmap -6512 VDU 23, 0, &C3: REM Flip buffer -6514 *FX 19 -6520 rotatex=rotatex+incx: IF rotatex>=pi2 THEN rotatex=rotatex-pi2 -6530 rotatey=rotatey+incy: IF rotatey>=pi2 THEN rotatey=rotatey-pi2 -6540 rotatez=rotatez+incz: IF rotatez>=pi2 THEN rotatez=rotatez-pi2 -6550 rx=rotatex*factor: ry=rotatey*factor: rz=rotatez*factor -6560 VDU 23, 0, &A0, sid%; &48, 13, oid%; rx; ry; rz; : REM Set Object XYZ Rotation Angles -6570 GOTO 6422 + 10 REM teapot.bas + 20 REM Sample app to illustrate Pingo 3D on Agon + 30 REM + 40 REM -- VERTICES -- + 50 teapot_vertices%=1728 + 60 DATA 0.700000,-1.200000,0.000000,0.605600,-1.200000,-0.355700,0.598800,-1.243700,-0.351700,0.598800,-1.243700,-0.351700 + 70 DATA 0.692100,-1.243700,0.000000,0.700000,-1.200000,0.000000,0.692100,-1.243700,0.000000,0.598800,-1.243700,-0.351700 + 80 DATA 0.619600,-1.243700,-0.363900,0.619600,-1.243700,-0.363900,0.716200,-1.243700,0.000000,0.692100,-1.243700,0.000000 + 90 DATA 0.716200,-1.243700,0.000000,0.619600,-1.243700,-0.363900,0.648900,-1.200000,-0.381100,0.648900,-1.200000,-0.381100 + 100 DATA 0.750000,-1.200000,0.000000,0.716200,-1.243700,0.000000,0.605600,-1.200000,-0.355700,0.355700,-1.200000,-0.605600 + 110 DATA 0.351700,-1.243700,-0.598800,0.351700,-1.243700,-0.598800,0.598800,-1.243700,-0.351700,0.605600,-1.200000,-0.355700 + 120 DATA 0.598800,-1.243700,-0.351700,0.351700,-1.243700,-0.598800,0.363900,-1.243800,-0.619600,0.363900,-1.243800,-0.619600 + 130 DATA 0.619600,-1.243700,-0.363900,0.598800,-1.243700,-0.351700,0.619600,-1.243700,-0.363900,0.363900,-1.243800,-0.619600 + 140 DATA 0.381100,-1.200000,-0.648900,0.381100,-1.200000,-0.648900,0.648900,-1.200000,-0.381100,0.619600,-1.243700,-0.363900 + 150 DATA 0.355700,-1.200000,-0.605600,0.000000,-1.200000,-0.700000,0.000000,-1.243700,-0.692100,0.000000,-1.243700,-0.692100 + 160 DATA 0.351700,-1.243700,-0.598800,0.355700,-1.200000,-0.605600,0.351700,-1.243700,-0.598800,0.000000,-1.243700,-0.692100 + 170 DATA 0.000000,-1.243800,-0.716200,0.000000,-1.243800,-0.716200,0.363900,-1.243800,-0.619600,0.351700,-1.243700,-0.598800 + 180 DATA 0.363900,-1.243800,-0.619600,0.000000,-1.243800,-0.716200,0.000000,-1.200000,-0.750000,0.000000,-1.200000,-0.750000 + 190 DATA 0.381100,-1.200000,-0.648900,0.363900,-1.243800,-0.619600,0.000000,-1.200000,-0.700000,-0.375700,-1.200000,-0.605600 + 200 DATA -0.357600,-1.243700,-0.598800,-0.357600,-1.243700,-0.598800,0.000000,-1.243700,-0.692100,0.000000,-1.200000,-0.700000 + 210 DATA 0.000000,-1.243700,-0.692100,-0.357600,-1.243700,-0.598800,-0.364700,-1.243700,-0.619600,-0.364700,-1.243700,-0.619600 + 220 DATA 0.000000,-1.243800,-0.716200,0.000000,-1.243700,-0.692100,0.000000,-1.243800,-0.716200,-0.364700,-1.243700,-0.619600 + 230 DATA -0.381100,-1.200000,-0.648900,-0.381100,-1.200000,-0.648900,0.000000,-1.200000,-0.750000,0.000000,-1.243800,-0.716200 + 240 DATA -0.375700,-1.200000,-0.605600,-0.615600,-1.200000,-0.355700,-0.601800,-1.243700,-0.351700,-0.601800,-1.243700,-0.351700 + 250 DATA -0.357600,-1.243700,-0.598800,-0.375700,-1.200000,-0.605600,-0.357600,-1.243700,-0.598800,-0.601800,-1.243700,-0.351700 + 260 DATA -0.620000,-1.243700,-0.363900,-0.620000,-1.243700,-0.363900,-0.364700,-1.243700,-0.619600,-0.357600,-1.243700,-0.598800 + 270 DATA -0.364700,-1.243700,-0.619600,-0.620000,-1.243700,-0.363900,-0.648900,-1.200000,-0.381100,-0.648900,-1.200000,-0.381100 + 280 DATA -0.381100,-1.200000,-0.648900,-0.364700,-1.243700,-0.619600,-0.615600,-1.200000,-0.355700,-0.700000,-1.200000,0.000000 + 290 DATA -0.692100,-1.243700,0.000000,-0.692100,-1.243700,0.000000,-0.601800,-1.243700,-0.351700,-0.615600,-1.200000,-0.355700 + 300 DATA -0.601800,-1.243700,-0.351700,-0.692100,-1.243700,0.000000,-0.716200,-1.243700,0.000000,-0.716200,-1.243700,0.000000 + 310 DATA -0.620000,-1.243700,-0.363900,-0.601800,-1.243700,-0.351700,-0.620000,-1.243700,-0.363900,-0.716200,-1.243700,0.000000 + 320 DATA -0.750000,-1.200000,0.000000,-0.750000,-1.200000,0.000000,-0.648900,-1.200000,-0.381100,-0.620000,-1.243700,-0.363900 + 330 DATA -0.700000,-1.200000,0.000000,-0.605600,-1.200000,0.355700,-0.598800,-1.243700,0.351700,-0.598800,-1.243700,0.351700 + 340 DATA -0.692100,-1.243700,0.000000,-0.700000,-1.200000,0.000000,-0.692100,-1.243700,0.000000,-0.598800,-1.243700,0.351700 + 350 DATA -0.619600,-1.243700,0.363900,-0.619600,-1.243700,0.363900,-0.716200,-1.243700,0.000000,-0.692100,-1.243700,0.000000 + 360 DATA -0.716200,-1.243700,0.000000,-0.619600,-1.243700,0.363900,-0.648900,-1.200000,0.381100,-0.648900,-1.200000,0.381100 + 370 DATA -0.750000,-1.200000,0.000000,-0.716200,-1.243700,0.000000,-0.605600,-1.200000,0.355700,-0.355700,-1.200000,0.605600 + 380 DATA -0.351700,-1.243700,0.598800,-0.351700,-1.243700,0.598800,-0.598800,-1.243700,0.351700,-0.605600,-1.200000,0.355700 + 390 DATA -0.598800,-1.243700,0.351700,-0.351700,-1.243700,0.598800,-0.363900,-1.243700,0.619600,-0.363900,-1.243700,0.619600 + 400 DATA -0.619600,-1.243700,0.363900,-0.598800,-1.243700,0.351700,-0.619600,-1.243700,0.363900,-0.363900,-1.243700,0.619600 + 410 DATA -0.381100,-1.200000,0.648900,-0.381100,-1.200000,0.648900,-0.648900,-1.200000,0.381100,-0.619600,-1.243700,0.363900 + 420 DATA -0.355700,-1.200000,0.605600,0.000000,-1.200000,0.700000,0.000000,-1.243700,0.692100,0.000000,-1.243700,0.692100 + 430 DATA -0.351700,-1.243700,0.598800,-0.355700,-1.200000,0.605600,-0.351700,-1.243700,0.598800,0.000000,-1.243700,0.692100 + 440 DATA 0.000000,-1.243700,0.716200,0.000000,-1.243700,0.716200,-0.363900,-1.243700,0.619600,-0.351700,-1.243700,0.598800 + 450 DATA -0.363900,-1.243700,0.619600,0.000000,-1.243700,0.716200,0.000000,-1.200000,0.750000,0.000000,-1.200000,0.750000 + 460 DATA -0.381100,-1.200000,0.648900,-0.363900,-1.243700,0.619600,0.000000,-1.200000,0.700000,0.355700,-1.200000,0.605600 + 470 DATA 0.351700,-1.243700,0.598800,0.351700,-1.243700,0.598800,0.000000,-1.243700,0.692100,0.000000,-1.200000,0.700000 + 480 DATA 0.000000,-1.243700,0.692100,0.351700,-1.243700,0.598800,0.363900,-1.243700,0.619600,0.363900,-1.243700,0.619600 + 490 DATA 0.000000,-1.243700,0.716200,0.000000,-1.243700,0.692100,0.000000,-1.243700,0.716200,0.363900,-1.243700,0.619600 + 500 DATA 0.381100,-1.200000,0.648900,0.381100,-1.200000,0.648900,0.000000,-1.200000,0.750000,0.000000,-1.243700,0.716200 + 510 DATA 0.355700,-1.200000,0.605600,0.605600,-1.200000,0.355700,0.598800,-1.243700,0.351700,0.598800,-1.243700,0.351700 + 520 DATA 0.351700,-1.243700,0.598800,0.355700,-1.200000,0.605600,0.351700,-1.243700,0.598800,0.598800,-1.243700,0.351700 + 530 DATA 0.619600,-1.243700,0.363900,0.619600,-1.243700,0.363900,0.363900,-1.243700,0.619600,0.351700,-1.243700,0.598800 + 540 DATA 0.363900,-1.243700,0.619600,0.619600,-1.243700,0.363900,0.648900,-1.200000,0.381100,0.648900,-1.200000,0.381100 + 550 DATA 0.381100,-1.200000,0.648900,0.363900,-1.243700,0.619600,0.605600,-1.200000,0.355700,0.700000,-1.200000,0.000000 + 560 DATA 0.692100,-1.243700,0.000000,0.692100,-1.243700,0.000000,0.598800,-1.243700,0.351700,0.605600,-1.200000,0.355700 + 570 DATA 0.598800,-1.243700,0.351700,0.692100,-1.243700,0.000000,0.716200,-1.243700,0.000000,0.716200,-1.243700,0.000000 + 580 DATA 0.619600,-1.243700,0.363900,0.598800,-1.243700,0.351700,0.619600,-1.243700,0.363900,0.716200,-1.243700,0.000000 + 590 DATA 0.750000,-1.200000,0.000000,0.750000,-1.200000,0.000000,0.648900,-1.200000,0.381100,0.619600,-1.243700,0.363900 + 600 DATA 0.750000,-1.200000,0.000000,0.648900,-1.200000,-0.381100,0.753000,-0.938900,-0.442300,0.753000,-0.938900,-0.442300 + 610 DATA 0.870400,-0.938900,0.000000,0.750000,-1.200000,0.000000,0.870400,-0.938900,0.000000,0.753000,-0.938900,-0.442300 + 620 DATA 0.833100,-0.686100,-0.489300,0.833100,-0.686100,-0.489300,0.963000,-0.686100,0.000000,0.870400,-0.938900,0.000000 + 630 DATA 0.963000,-0.686100,0.000000,0.833100,-0.686100,-0.489300,0.865200,-0.450000,-0.508100,0.865200,-0.450000,-0.508100 + 640 DATA 1.000000,-0.450000,0.000000,0.963000,-0.686100,0.000000,0.648900,-1.200000,-0.381100,0.381100,-1.200000,-0.648900 + 650 DATA 0.442300,-0.938900,-0.753000,0.442300,-0.938900,-0.753000,0.753000,-0.938900,-0.442300,0.648900,-1.200000,-0.381100 + 660 DATA 0.753000,-0.938900,-0.442300,0.442300,-0.938900,-0.753000,0.489300,-0.686100,-0.833100,0.489300,-0.686100,-0.833100 + 670 DATA 0.833100,-0.686100,-0.489300,0.753000,-0.938900,-0.442300,0.833100,-0.686100,-0.489300,0.489300,-0.686100,-0.833100 + 680 DATA 0.508100,-0.450000,-0.865200,0.508100,-0.450000,-0.865200,0.865200,-0.450000,-0.508100,0.833100,-0.686100,-0.489300 + 690 DATA 0.381100,-1.200000,-0.648900,0.000000,-1.200000,-0.750000,0.000000,-0.938900,-0.870400,0.000000,-0.938900,-0.870400 + 700 DATA 0.442300,-0.938900,-0.753000,0.381100,-1.200000,-0.648900,0.442300,-0.938900,-0.753000,0.000000,-0.938900,-0.870400 + 710 DATA 0.000000,-0.686100,-0.963000,0.000000,-0.686100,-0.963000,0.489300,-0.686100,-0.833100,0.442300,-0.938900,-0.753000 + 720 DATA 0.489300,-0.686100,-0.833100,0.000000,-0.686100,-0.963000,0.000000,-0.450000,-1.000000,0.000000,-0.450000,-1.000000 + 730 DATA 0.508100,-0.450000,-0.865200,0.489300,-0.686100,-0.833100,0.000000,-1.200000,-0.750000,-0.381100,-1.200000,-0.648900 + 740 DATA -0.442300,-0.938900,-0.753000,-0.442300,-0.938900,-0.753000,0.000000,-0.938900,-0.870400,0.000000,-1.200000,-0.750000 + 750 DATA 0.000000,-0.938900,-0.870400,-0.442300,-0.938900,-0.753000,-0.489300,-0.686100,-0.833100,-0.489300,-0.686100,-0.833100 + 760 DATA 0.000000,-0.686100,-0.963000,0.000000,-0.938900,-0.870400,0.000000,-0.686100,-0.963000,-0.489300,-0.686100,-0.833100 + 770 DATA -0.508100,-0.450000,-0.865200,-0.508100,-0.450000,-0.865200,0.000000,-0.450000,-1.000000,0.000000,-0.686100,-0.963000 + 780 DATA -0.381100,-1.200000,-0.648900,-0.648900,-1.200000,-0.381100,-0.753000,-0.938900,-0.442300,-0.753000,-0.938900,-0.442300 + 790 DATA -0.442300,-0.938900,-0.753000,-0.381100,-1.200000,-0.648900,-0.442300,-0.938900,-0.753000,-0.753000,-0.938900,-0.442300 + 800 DATA -0.833100,-0.686100,-0.489300,-0.833100,-0.686100,-0.489300,-0.489300,-0.686100,-0.833100,-0.442300,-0.938900,-0.753000 + 810 DATA -0.489300,-0.686100,-0.833100,-0.833100,-0.686100,-0.489300,-0.865200,-0.450000,-0.508100,-0.865200,-0.450000,-0.508100 + 820 DATA -0.508100,-0.450000,-0.865200,-0.489300,-0.686100,-0.833100,-0.648900,-1.200000,-0.381100,-0.750000,-1.200000,0.000000 + 830 DATA -0.870400,-0.938900,0.000000,-0.870400,-0.938900,0.000000,-0.753000,-0.938900,-0.442300,-0.648900,-1.200000,-0.381100 + 840 DATA -0.753000,-0.938900,-0.442300,-0.870400,-0.938900,0.000000,-0.963000,-0.686100,0.000000,-0.963000,-0.686100,0.000000 + 850 DATA -0.833100,-0.686100,-0.489300,-0.753000,-0.938900,-0.442300,-0.833100,-0.686100,-0.489300,-0.963000,-0.686100,0.000000 + 860 DATA -1.000000,-0.450000,0.000000,-1.000000,-0.450000,0.000000,-0.865200,-0.450000,-0.508100,-0.833100,-0.686100,-0.489300 + 870 DATA -0.750000,-1.200000,0.000000,-0.648900,-1.200000,0.381100,-0.753000,-0.938900,0.442300,-0.753000,-0.938900,0.442300 + 880 DATA -0.870400,-0.938900,0.000000,-0.750000,-1.200000,0.000000,-0.870400,-0.938900,0.000000,-0.753000,-0.938900,0.442300 + 890 DATA -0.833100,-0.686100,0.489300,-0.833100,-0.686100,0.489300,-0.963000,-0.686100,0.000000,-0.870400,-0.938900,0.000000 + 900 DATA -0.963000,-0.686100,0.000000,-0.833100,-0.686100,0.489300,-0.865200,-0.450000,0.508100,-0.865200,-0.450000,0.508100 + 910 DATA -1.000000,-0.450000,0.000000,-0.963000,-0.686100,0.000000,-0.648900,-1.200000,0.381100,-0.381100,-1.200000,0.648900 + 920 DATA -0.442300,-0.938900,0.753000,-0.442300,-0.938900,0.753000,-0.753000,-0.938900,0.442300,-0.648900,-1.200000,0.381100 + 930 DATA -0.753000,-0.938900,0.442300,-0.442300,-0.938900,0.753000,-0.489300,-0.686100,0.833100,-0.489300,-0.686100,0.833100 + 940 DATA -0.833100,-0.686100,0.489300,-0.753000,-0.938900,0.442300,-0.833100,-0.686100,0.489300,-0.489300,-0.686100,0.833100 + 950 DATA -0.508100,-0.450000,0.865200,-0.508100,-0.450000,0.865200,-0.865200,-0.450000,0.508100,-0.833100,-0.686100,0.489300 + 960 DATA -0.381100,-1.200000,0.648900,0.000000,-1.200000,0.750000,0.000000,-0.938900,0.870400,0.000000,-0.938900,0.870400 + 970 DATA -0.442300,-0.938900,0.753000,-0.381100,-1.200000,0.648900,-0.442300,-0.938900,0.753000,0.000000,-0.938900,0.870400 + 980 DATA 0.000000,-0.686100,0.963000,0.000000,-0.686100,0.963000,-0.489300,-0.686100,0.833100,-0.442300,-0.938900,0.753000 + 990 DATA -0.489300,-0.686100,0.833100,0.000000,-0.686100,0.963000,0.000000,-0.450000, 1.000000,0.000000,-0.450000, 1.000000 + 1000 DATA -0.508100,-0.450000,0.865200,-0.489300,-0.686100,0.833100,0.000000,-1.200000,0.750000,0.381100,-1.200000,0.648900 + 1010 DATA 0.442300,-0.938900,0.753000,0.442300,-0.938900,0.753000,0.000000,-0.938900,0.870400,0.000000,-1.200000,0.750000 + 1020 DATA 0.000000,-0.938900,0.870400,0.442300,-0.938900,0.753000,0.489300,-0.686100,0.833100,0.489300,-0.686100,0.833100 + 1030 DATA 0.000000,-0.686100,0.963000,0.000000,-0.938900,0.870400,0.000000,-0.686100,0.963000,0.489300,-0.686100,0.833100 + 1040 DATA 0.508100,-0.450000,0.865200,0.508100,-0.450000,0.865200,0.000000,-0.450000, 1.000000,0.000000,-0.686100,0.963000 + 1050 DATA 0.381100,-1.200000,0.648900,0.648900,-1.200000,0.381100,0.753000,-0.938900,0.442300,0.753000,-0.938900,0.442300 + 1060 DATA 0.442300,-0.938900,0.753000,0.381100,-1.200000,0.648900,0.442300,-0.938900,0.753000,0.753000,-0.938900,0.442300 + 1070 DATA 0.833100,-0.686100,0.489300,0.833100,-0.686100,0.489300,0.489300,-0.686100,0.833100,0.442300,-0.938900,0.753000 + 1080 DATA 0.489300,-0.686100,0.833100,0.833100,-0.686100,0.489300,0.865200,-0.450000,0.508100,0.865200,-0.450000,0.508100 + 1090 DATA 0.508100,-0.450000,0.865200,0.489300,-0.686100,0.833100,0.648900,-1.200000,0.381100,0.750000,-1.200000,0.000000 + 1100 DATA 0.870400,-0.938900,0.000000,0.870400,-0.938900,0.000000,0.753000,-0.938900,0.442300,0.648900,-1.200000,0.381100 + 1110 DATA 0.753000,-0.938900,0.442300,0.870400,-0.938900,0.000000,0.963000,-0.686100,0.000000,0.963000,-0.686100,0.000000 + 1120 DATA 0.833100,-0.686100,0.489300,0.753000,-0.938900,0.442300,0.833100,-0.686100,0.489300,0.963000,-0.686100,0.000000 + 1130 DATA 1.000000,-0.450000,0.000000,1.000000,-0.450000,0.000000,0.865200,-0.450000,0.508100,0.833100,-0.686100,0.489300 + 1140 DATA 1.000000,-0.450000,0.000000,0.865200,-0.450000,-0.508100,0.809100,-0.261100,-0.475200,0.809100,-0.261100,-0.475200 + 1150 DATA 0.935200,-0.261100,0.000000,1.000000,-0.450000,0.000000,0.935200,-0.261100,0.000000,0.809100,-0.261100,-0.475200 + 1160 DATA 0.705000,-0.138900,-0.414000,0.705000,-0.138900,-0.414000,0.814800,-0.138900,0.000000,0.935200,-0.261100,0.000000 + 1170 DATA 0.814800,-0.138900,0.000000,0.705000,-0.138900,-0.414000,0.648900,-0.075000,-0.381100,0.648900,-0.075000,-0.381100 + 1180 DATA 0.750000,-0.075000,0.000000,0.814800,-0.138900,0.000000,0.865200,-0.450000,-0.508100,0.508100,-0.450000,-0.865200 + 1190 DATA 0.475200,-0.261100,-0.809100,0.475200,-0.261100,-0.809100,0.809100,-0.261100,-0.475200,0.865200,-0.450000,-0.508100 + 1200 DATA 0.809100,-0.261100,-0.475200,0.475200,-0.261100,-0.809100,0.414000,-0.138900,-0.705000,0.414000,-0.138900,-0.705000 + 1210 DATA 0.705000,-0.138900,-0.414000,0.809100,-0.261100,-0.475200,0.705000,-0.138900,-0.414000,0.414000,-0.138900,-0.705000 + 1220 DATA 0.381100,-0.075000,-0.648900,0.381100,-0.075000,-0.648900,0.648900,-0.075000,-0.381100,0.705000,-0.138900,-0.414000 + 1230 DATA 0.508100,-0.450000,-0.865200,0.000000,-0.450000,-1.000000,0.000000,-0.261100,-0.935200,0.000000,-0.261100,-0.935200 + 1240 DATA 0.475200,-0.261100,-0.809100,0.508100,-0.450000,-0.865200,0.475200,-0.261100,-0.809100,0.000000,-0.261100,-0.935200 + 1250 DATA 0.000000,-0.138900,-0.814800,0.000000,-0.138900,-0.814800,0.414000,-0.138900,-0.705000,0.475200,-0.261100,-0.809100 + 1260 DATA 0.414000,-0.138900,-0.705000,0.000000,-0.138900,-0.814800,0.000000,-0.075000,-0.750000,0.000000,-0.075000,-0.750000 + 1270 DATA 0.381100,-0.075000,-0.648900,0.414000,-0.138900,-0.705000,0.000000,-0.450000,-1.000000,-0.508100,-0.450000,-0.865200 + 1280 DATA -0.475200,-0.261100,-0.809100,-0.475200,-0.261100,-0.809100,0.000000,-0.261100,-0.935200,0.000000,-0.450000,-1.000000 + 1290 DATA 0.000000,-0.261100,-0.935200,-0.475200,-0.261100,-0.809100,-0.414000,-0.138900,-0.705000,-0.414000,-0.138900,-0.705000 + 1300 DATA 0.000000,-0.138900,-0.814800,0.000000,-0.261100,-0.935200,0.000000,-0.138900,-0.814800,-0.414000,-0.138900,-0.705000 + 1310 DATA -0.381100,-0.075000,-0.648900,-0.381100,-0.075000,-0.648900,0.000000,-0.075000,-0.750000,0.000000,-0.138900,-0.814800 + 1320 DATA -0.508100,-0.450000,-0.865200,-0.865200,-0.450000,-0.508100,-0.809100,-0.261100,-0.475200,-0.809100,-0.261100,-0.475200 + 1330 DATA -0.475200,-0.261100,-0.809100,-0.508100,-0.450000,-0.865200,-0.475200,-0.261100,-0.809100,-0.809100,-0.261100,-0.475200 + 1340 DATA -0.705000,-0.138900,-0.414000,-0.705000,-0.138900,-0.414000,-0.414000,-0.138900,-0.705000,-0.475200,-0.261100,-0.809100 + 1350 DATA -0.414000,-0.138900,-0.705000,-0.705000,-0.138900,-0.414000,-0.648900,-0.075000,-0.381100,-0.648900,-0.075000,-0.381100 + 1360 DATA -0.381100,-0.075000,-0.648900,-0.414000,-0.138900,-0.705000,-0.865200,-0.450000,-0.508100,-1.000000,-0.450000,0.000000 + 1370 DATA -0.935200,-0.261100,0.000000,-0.935200,-0.261100,0.000000,-0.809100,-0.261100,-0.475200,-0.865200,-0.450000,-0.508100 + 1380 DATA -0.809100,-0.261100,-0.475200,-0.935200,-0.261100,0.000000,-0.814800,-0.138900,0.000000,-0.814800,-0.138900,0.000000 + 1390 DATA -0.705000,-0.138900,-0.414000,-0.809100,-0.261100,-0.475200,-0.705000,-0.138900,-0.414000,-0.814800,-0.138900,0.000000 + 1400 DATA -0.750000,-0.075000,0.000000,-0.750000,-0.075000,0.000000,-0.648900,-0.075000,-0.381100,-0.705000,-0.138900,-0.414000 + 1410 DATA -1.000000,-0.450000,0.000000,-0.865200,-0.450000,0.508100,-0.809100,-0.261100,0.475200,-0.809100,-0.261100,0.475200 + 1420 DATA -0.935200,-0.261100,0.000000,-1.000000,-0.450000,0.000000,-0.935200,-0.261100,0.000000,-0.809100,-0.261100,0.475200 + 1430 DATA -0.705000,-0.138900,0.414000,-0.705000,-0.138900,0.414000,-0.814800,-0.138900,0.000000,-0.935200,-0.261100,0.000000 + 1440 DATA -0.814800,-0.138900,0.000000,-0.705000,-0.138900,0.414000,-0.648900,-0.075000,0.381100,-0.648900,-0.075000,0.381100 + 1450 DATA -0.750000,-0.075000,0.000000,-0.814800,-0.138900,0.000000,-0.865200,-0.450000,0.508100,-0.508100,-0.450000,0.865200 + 1460 DATA -0.475200,-0.261100,0.809100,-0.475200,-0.261100,0.809100,-0.809100,-0.261100,0.475200,-0.865200,-0.450000,0.508100 + 1470 DATA -0.809100,-0.261100,0.475200,-0.475200,-0.261100,0.809100,-0.414000,-0.138900,0.705000,-0.414000,-0.138900,0.705000 + 1480 DATA -0.705000,-0.138900,0.414000,-0.809100,-0.261100,0.475200,-0.705000,-0.138900,0.414000,-0.414000,-0.138900,0.705000 + 1490 DATA -0.381100,-0.075000,0.648900,-0.381100,-0.075000,0.648900,-0.648900,-0.075000,0.381100,-0.705000,-0.138900,0.414000 + 1500 DATA -0.508100,-0.450000,0.865200,0.000000,-0.450000, 1.000000,0.000000,-0.261100,0.935200,0.000000,-0.261100,0.935200 + 1510 DATA -0.475200,-0.261100,0.809100,-0.508100,-0.450000,0.865200,-0.475200,-0.261100,0.809100,0.000000,-0.261100,0.935200 + 1520 DATA 0.000000,-0.138900,0.814800,0.000000,-0.138900,0.814800,-0.414000,-0.138900,0.705000,-0.475200,-0.261100,0.809100 + 1530 DATA -0.414000,-0.138900,0.705000,0.000000,-0.138900,0.814800,0.000000,-0.075000,0.750000,0.000000,-0.075000,0.750000 + 1540 DATA -0.381100,-0.075000,0.648900,-0.414000,-0.138900,0.705000,0.000000,-0.450000, 1.000000,0.508100,-0.450000,0.865200 + 1550 DATA 0.475200,-0.261100,0.809100,0.475200,-0.261100,0.809100,0.000000,-0.261100,0.935200,0.000000,-0.450000, 1.000000 + 1560 DATA 0.000000,-0.261100,0.935200,0.475200,-0.261100,0.809100,0.414000,-0.138900,0.705000,0.414000,-0.138900,0.705000 + 1570 DATA 0.000000,-0.138900,0.814800,0.000000,-0.261100,0.935200,0.000000,-0.138900,0.814800,0.414000,-0.138900,0.705000 + 1580 DATA 0.381100,-0.075000,0.648900,0.381100,-0.075000,0.648900,0.000000,-0.075000,0.750000,0.000000,-0.138900,0.814800 + 1590 DATA 0.508100,-0.450000,0.865200,0.865200,-0.450000,0.508100,0.809100,-0.261100,0.475200,0.809100,-0.261100,0.475200 + 1600 DATA 0.475200,-0.261100,0.809100,0.508100,-0.450000,0.865200,0.475200,-0.261100,0.809100,0.809100,-0.261100,0.475200 + 1610 DATA 0.705000,-0.138900,0.414000,0.705000,-0.138900,0.414000,0.414000,-0.138900,0.705000,0.475200,-0.261100,0.809100 + 1620 DATA 0.414000,-0.138900,0.705000,0.705000,-0.138900,0.414000,0.648900,-0.075000,0.381100,0.648900,-0.075000,0.381100 + 1630 DATA 0.381100,-0.075000,0.648900,0.414000,-0.138900,0.705000,0.865200,-0.450000,0.508100,1.000000,-0.450000,0.000000 + 1640 DATA 0.935200,-0.261100,0.000000,0.935200,-0.261100,0.000000,0.809100,-0.261100,0.475200,0.865200,-0.450000,0.508100 + 1650 DATA 0.809100,-0.261100,0.475200,0.935200,-0.261100,0.000000,0.814800,-0.138900,0.000000,0.814800,-0.138900,0.000000 + 1660 DATA 0.705000,-0.138900,0.414000,0.809100,-0.261100,0.475200,0.705000,-0.138900,0.414000,0.814800,-0.138900,0.000000 + 1670 DATA 0.750000,-0.075000,0.000000,0.750000,-0.075000,0.000000,0.648900,-0.075000,0.381100,0.705000,-0.138900,0.414000 + 1680 DATA 0.750000,-0.075000,0.000000,0.648900,-0.075000,-0.381100,0.617600,-0.038900,-0.362800,0.617600,-0.038900,-0.362800 + 1690 DATA 0.713900,-0.038900,0.000000,0.750000,-0.075000,0.000000,0.713900,-0.038900,0.000000,0.617600,-0.038900,-0.362800 + 1700 DATA 0.442200,-0.011100,-0.259700,0.442200,-0.011100,-0.259700,0.511100,-0.011100,0.000000,0.713900,-0.038900,0.000000 + 1710 DATA 0.511100,-0.011100,0.000000,0.442200,-0.011100,-0.259700,0.000000,0.000000,-0.000000,0.000000,0.000000,-0.000000 + 1720 DATA 0.000000,0.000000,-0.000000,0.511100,-0.011100,0.000000,0.648900,-0.075000,-0.381100,0.381100,-0.075000,-0.648900 + 1730 DATA 0.362800,-0.038900,-0.617600,0.362800,-0.038900,-0.617600,0.617600,-0.038900,-0.362800,0.648900,-0.075000,-0.381100 + 1740 DATA 0.617600,-0.038900,-0.362800,0.362800,-0.038900,-0.617600,0.259700,-0.011100,-0.442200,0.259700,-0.011100,-0.442200 + 1750 DATA 0.442200,-0.011100,-0.259700,0.617600,-0.038900,-0.362800,0.442200,-0.011100,-0.259700,0.259700,-0.011100,-0.442200 + 1760 DATA 0.000000,0.000000,-0.000000,0.000000,0.000000,-0.000000,0.000000,0.000000,-0.000000,0.442200,-0.011100,-0.259700 + 1770 DATA 0.381100,-0.075000,-0.648900,0.000000,-0.075000,-0.750000,0.000000,-0.038900,-0.713900,0.000000,-0.038900,-0.713900 + 1780 DATA 0.362800,-0.038900,-0.617600,0.381100,-0.075000,-0.648900,0.362800,-0.038900,-0.617600,0.000000,-0.038900,-0.713900 + 1790 DATA 0.000000,-0.011100,-0.511100,0.000000,-0.011100,-0.511100,0.259700,-0.011100,-0.442200,0.362800,-0.038900,-0.617600 + 1800 DATA 0.259700,-0.011100,-0.442200,0.000000,-0.011100,-0.511100,0.000000,0.000000,-0.000000,0.000000,0.000000,-0.000000 + 1810 DATA 0.000000,0.000000,-0.000000,0.259700,-0.011100,-0.442200,0.000000,-0.075000,-0.750000,-0.381100,-0.075000,-0.648900 + 1820 DATA -0.362800,-0.038900,-0.617600,-0.362800,-0.038900,-0.617600,0.000000,-0.038900,-0.713900,0.000000,-0.075000,-0.750000 + 1830 DATA 0.000000,-0.038900,-0.713900,-0.362800,-0.038900,-0.617600,-0.259700,-0.011100,-0.442200,-0.259700,-0.011100,-0.442200 + 1840 DATA 0.000000,-0.011100,-0.511100,0.000000,-0.038900,-0.713900,0.000000,-0.011100,-0.511100,-0.259700,-0.011100,-0.442200 + 1850 DATA 0.000000,0.000000,-0.000000,0.000000,0.000000,-0.000000,0.000000,0.000000,-0.000000,0.000000,-0.011100,-0.511100 + 1860 DATA -0.381100,-0.075000,-0.648900,-0.648900,-0.075000,-0.381100,-0.617600,-0.038900,-0.362800,-0.617600,-0.038900,-0.362800 + 1870 DATA -0.362800,-0.038900,-0.617600,-0.381100,-0.075000,-0.648900,-0.362800,-0.038900,-0.617600,-0.617600,-0.038900,-0.362800 + 1880 DATA -0.442200,-0.011100,-0.259700,-0.442200,-0.011100,-0.259700,-0.259700,-0.011100,-0.442200,-0.362800,-0.038900,-0.617600 + 1890 DATA -0.259700,-0.011100,-0.442200,-0.442200,-0.011100,-0.259700,0.000000,0.000000,-0.000000,0.000000,0.000000,-0.000000 + 1900 DATA 0.000000,0.000000,-0.000000,-0.259700,-0.011100,-0.442200,-0.648900,-0.075000,-0.381100,-0.750000,-0.075000,0.000000 + 1910 DATA -0.713900,-0.038900,0.000000,-0.713900,-0.038900,0.000000,-0.617600,-0.038900,-0.362800,-0.648900,-0.075000,-0.381100 + 1920 DATA -0.617600,-0.038900,-0.362800,-0.713900,-0.038900,0.000000,-0.511100,-0.011100,0.000000,-0.511100,-0.011100,0.000000 + 1930 DATA -0.442200,-0.011100,-0.259700,-0.617600,-0.038900,-0.362800,-0.442200,-0.011100,-0.259700,-0.511100,-0.011100,0.000000 + 1940 DATA 0.000000,0.000000,-0.000000,0.000000,0.000000,-0.000000,0.000000,0.000000,-0.000000,-0.442200,-0.011100,-0.259700 + 1950 DATA -0.750000,-0.075000,0.000000,-0.648900,-0.075000,0.381100,-0.617600,-0.038900,0.362800,-0.617600,-0.038900,0.362800 + 1960 DATA -0.713900,-0.038900,0.000000,-0.750000,-0.075000,0.000000,-0.713900,-0.038900,0.000000,-0.617600,-0.038900,0.362800 + 1970 DATA -0.442200,-0.011100,0.259700,-0.442200,-0.011100,0.259700,-0.511100,-0.011100,0.000000,-0.713900,-0.038900,0.000000 + 1980 DATA -0.511100,-0.011100,0.000000,-0.442200,-0.011100,0.259700,0.000000,0.000000,-0.000000,0.000000,0.000000,-0.000000 + 1990 DATA 0.000000,0.000000,-0.000000,-0.511100,-0.011100,0.000000,-0.648900,-0.075000,0.381100,-0.381100,-0.075000,0.648900 + 2000 DATA -0.362800,-0.038900,0.617600,-0.362800,-0.038900,0.617600,-0.617600,-0.038900,0.362800,-0.648900,-0.075000,0.381100 + 2010 DATA -0.617600,-0.038900,0.362800,-0.362800,-0.038900,0.617600,-0.259700,-0.011100,0.442200,-0.259700,-0.011100,0.442200 + 2020 DATA -0.442200,-0.011100,0.259700,-0.617600,-0.038900,0.362800,-0.442200,-0.011100,0.259700,-0.259700,-0.011100,0.442200 + 2030 DATA 0.000000,0.000000,-0.000000,0.000000,0.000000,-0.000000,0.000000,0.000000,-0.000000,-0.442200,-0.011100,0.259700 + 2040 DATA -0.381100,-0.075000,0.648900,0.000000,-0.075000,0.750000,0.000000,-0.038900,0.713900,0.000000,-0.038900,0.713900 + 2050 DATA -0.362800,-0.038900,0.617600,-0.381100,-0.075000,0.648900,-0.362800,-0.038900,0.617600,0.000000,-0.038900,0.713900 + 2060 DATA 0.000000,-0.011100,0.511100,0.000000,-0.011100,0.511100,-0.259700,-0.011100,0.442200,-0.362800,-0.038900,0.617600 + 2070 DATA -0.259700,-0.011100,0.442200,0.000000,-0.011100,0.511100,0.000000,0.000000,-0.000000,0.000000,0.000000,-0.000000 + 2080 DATA 0.000000,0.000000,-0.000000,-0.259700,-0.011100,0.442200,0.000000,-0.075000,0.750000,0.381100,-0.075000,0.648900 + 2090 DATA 0.362800,-0.038900,0.617600,0.362800,-0.038900,0.617600,0.000000,-0.038900,0.713900,0.000000,-0.075000,0.750000 + 2100 DATA 0.000000,-0.038900,0.713900,0.362800,-0.038900,0.617600,0.259700,-0.011100,0.442200,0.259700,-0.011100,0.442200 + 2110 DATA 0.000000,-0.011100,0.511100,0.000000,-0.038900,0.713900,0.000000,-0.011100,0.511100,0.259700,-0.011100,0.442200 + 2120 DATA 0.000000,0.000000,-0.000000,0.000000,0.000000,-0.000000,0.000000,0.000000,-0.000000,0.000000,-0.011100,0.511100 + 2130 DATA 0.381100,-0.075000,0.648900,0.648900,-0.075000,0.381100,0.617600,-0.038900,0.362800,0.617600,-0.038900,0.362800 + 2140 DATA 0.362800,-0.038900,0.617600,0.381100,-0.075000,0.648900,0.362800,-0.038900,0.617600,0.617600,-0.038900,0.362800 + 2150 DATA 0.442200,-0.011100,0.259700,0.442200,-0.011100,0.259700,0.259700,-0.011100,0.442200,0.362800,-0.038900,0.617600 + 2160 DATA 0.259700,-0.011100,0.442200,0.442200,-0.011100,0.259700,0.000000,0.000000,-0.000000,0.000000,0.000000,-0.000000 + 2170 DATA 0.000000,0.000000,-0.000000,0.259700,-0.011100,0.442200,0.648900,-0.075000,0.381100,0.750000,-0.075000,0.000000 + 2180 DATA 0.713900,-0.038900,0.000000,0.713900,-0.038900,0.000000,0.617600,-0.038900,0.362800,0.648900,-0.075000,0.381100 + 2190 DATA 0.617600,-0.038900,0.362800,0.713900,-0.038900,0.000000,0.511100,-0.011100,0.000000,0.511100,-0.011100,0.000000 + 2200 DATA 0.442200,-0.011100,0.259700,0.617600,-0.038900,0.362800,0.442200,-0.011100,0.259700,0.511100,-0.011100,0.000000 + 2210 DATA 0.000000,0.000000,-0.000000,0.000000,0.000000,-0.000000,0.000000,0.000000,-0.000000,0.442200,-0.011100,0.259700 + 2220 DATA -0.800000,-1.012500,0.000000,-0.787000,-1.041700,-0.100000,-1.115900,-1.036400,-0.100000,-1.115900,-1.036400,-0.100000 + 2230 DATA -1.098100,-1.008300,0.000000,-0.800000,-1.012500,0.000000,-1.098100,-1.008300,0.000000,-1.115900,-1.036400,-0.100000 + 2240 DATA -1.319300,-0.999700,-0.100000,-1.319300,-0.999700,-0.100000,-1.285200,-0.979200,0.000000,-1.098100,-1.008300,0.000000 + 2250 DATA -1.285200,-0.979200,0.000000,-1.319300,-0.999700,-0.100000,-1.388900,-0.900000,-0.100000,-1.388900,-0.900000,-0.100000 + 2260 DATA -1.350000,-0.900000,0.000000,-1.285200,-0.979200,0.000000,-0.787000,-1.041700,-0.100000,-0.763000,-1.095800,-0.100000 + 2270 DATA -1.148900,-1.088600,-0.100000,-1.148900,-1.088600,-0.100000,-1.115900,-1.036400,-0.100000,-0.787000,-1.041700,-0.100000 + 2280 DATA -1.115900,-1.036400,-0.100000,-1.148900,-1.088600,-0.100000,-1.382600,-1.037800,-0.100000,-1.382600,-1.037800,-0.100000 + 2290 DATA -1.319300,-0.999700,-0.100000,-1.115900,-1.036400,-0.100000,-1.319300,-0.999700,-0.100000,-1.382600,-1.037800,-0.100000 + 2300 DATA -1.461100,-0.900000,-0.100000,-1.461100,-0.900000,-0.100000,-1.388900,-0.900000,-0.100000,-1.319300,-0.999700,-0.100000 + 2310 DATA -0.763000,-1.095800,-0.100000,-0.750000,-1.125000,0.000000,-1.166700,-1.116700,0.000000,-1.166700,-1.116700,0.000000 + 2320 DATA -1.148900,-1.088600,-0.100000,-0.763000,-1.095800,-0.100000,-1.148900,-1.088600,-0.100000,-1.166700,-1.116700,0.000000 + 2330 DATA -1.416700,-1.058300,0.000000,-1.416700,-1.058300,0.000000,-1.382600,-1.037800,-0.100000,-1.148900,-1.088600,-0.100000 + 2340 DATA -1.382600,-1.037800,-0.100000,-1.416700,-1.058300,0.000000,-1.500000,-0.900000,0.000000,-1.500000,-0.900000,0.000000 + 2350 DATA -1.461100,-0.900000,-0.100000,-1.382600,-1.037800,-0.100000,-0.750000,-1.125000,0.000000,-0.763000,-1.095800,0.100000 + 2360 DATA -1.148900,-1.088600,0.100000,-1.148900,-1.088600,0.100000,-1.166700,-1.116700,0.000000,-0.750000,-1.125000,0.000000 + 2370 DATA -1.166700,-1.116700,0.000000,-1.148900,-1.088600,0.100000,-1.382600,-1.037800,0.100000,-1.382600,-1.037800,0.100000 + 2380 DATA -1.416700,-1.058300,0.000000,-1.166700,-1.116700,0.000000,-1.416700,-1.058300,0.000000,-1.382600,-1.037800,0.100000 + 2390 DATA -1.461100,-0.900000,0.100000,-1.461100,-0.900000,0.100000,-1.500000,-0.900000,0.000000,-1.416700,-1.058300,0.000000 + 2400 DATA -0.763000,-1.095800,0.100000,-0.787000,-1.041700,0.100000,-1.115900,-1.036400,0.100000,-1.115900,-1.036400,0.100000 + 2410 DATA -1.148900,-1.088600,0.100000,-0.763000,-1.095800,0.100000,-1.148900,-1.088600,0.100000,-1.115900,-1.036400,0.100000 + 2420 DATA -1.319300,-0.999700,0.100000,-1.319300,-0.999700,0.100000,-1.382600,-1.037800,0.100000,-1.148900,-1.088600,0.100000 + 2430 DATA -1.382600,-1.037800,0.100000,-1.319300,-0.999700,0.100000,-1.388900,-0.900000,0.100000,-1.388900,-0.900000,0.100000 + 2440 DATA -1.461100,-0.900000,0.100000,-1.382600,-1.037800,0.100000,-0.787000,-1.041700,0.100000,-0.800000,-1.012500,0.000000 + 2450 DATA -1.098100,-1.008300,0.000000,-1.098100,-1.008300,0.000000,-1.115900,-1.036400,0.100000,-0.787000,-1.041700,0.100000 + 2460 DATA -1.115900,-1.036400,0.100000,-1.098100,-1.008300,0.000000,-1.285200,-0.979200,0.000000,-1.285200,-0.979200,0.000000 + 2470 DATA -1.319300,-0.999700,0.100000,-1.115900,-1.036400,0.100000,-1.319300,-0.999700,0.100000,-1.285200,-0.979200,0.000000 + 2480 DATA -1.350000,-0.900000,0.000000,-1.350000,-0.900000,0.000000,-1.388900,-0.900000,0.100000,-1.319300,-0.999700,0.100000 + 2490 DATA -1.350000,-0.900000,0.000000,-1.388900,-0.900000,-0.100000,-1.347500,-0.738500,-0.100000,-1.347500,-0.738500,-0.100000 + 2500 DATA -1.314800,-0.758300,0.000000,-1.350000,-0.900000,0.000000,-1.314800,-0.758300,0.000000,-1.347500,-0.738500,-0.100000 + 2510 DATA -1.216700,-0.562900,-0.100000,-1.216700,-0.562900,-0.100000,-1.201900,-0.591700,0.000000,-1.314800,-0.758300,0.000000 + 2520 DATA -1.201900,-0.591700,0.000000,-1.216700,-0.562900,-0.100000,-0.987000,-0.411100,-0.100000,-0.987000,-0.411100,-0.100000 + 2530 DATA -1.000000,-0.450000,0.000000,-1.201900,-0.591700,0.000000,-1.388900,-0.900000,-0.100000,-1.461100,-0.900000,-0.100000 + 2540 DATA -1.408100,-0.701700,-0.100000,-1.408100,-0.701700,-0.100000,-1.347500,-0.738500,-0.100000,-1.388900,-0.900000,-0.100000 + 2550 DATA -1.347500,-0.738500,-0.100000,-1.408100,-0.701700,-0.100000,-1.244400,-0.509400,-0.100000,-1.244400,-0.509400,-0.100000 + 2560 DATA -1.216700,-0.562900,-0.100000,-1.347500,-0.738500,-0.100000,-1.216700,-0.562900,-0.100000,-1.244400,-0.509400,-0.100000 + 2570 DATA -0.963000,-0.338900,-0.100000,-0.963000,-0.338900,-0.100000,-0.987000,-0.411100,-0.100000,-1.216700,-0.562900,-0.100000 + 2580 DATA -1.461100,-0.900000,-0.100000,-1.500000,-0.900000,0.000000,-1.440700,-0.681900,0.000000,-1.440700,-0.681900,0.000000 + 2590 DATA -1.408100,-0.701700,-0.100000,-1.461100,-0.900000,-0.100000,-1.408100,-0.701700,-0.100000,-1.440700,-0.681900,0.000000 + 2600 DATA -1.259300,-0.480600,0.000000,-1.259300,-0.480600,0.000000,-1.244400,-0.509400,-0.100000,-1.408100,-0.701700,-0.100000 + 2610 DATA -1.244400,-0.509400,-0.100000,-1.259300,-0.480600,0.000000,-0.950000,-0.300000,0.000000,-0.950000,-0.300000,0.000000 + 2620 DATA -0.963000,-0.338900,-0.100000,-1.244400,-0.509400,-0.100000,-1.500000,-0.900000,0.000000,-1.461100,-0.900000,0.100000 + 2630 DATA -1.408100,-0.701700,0.100000,-1.408100,-0.701700,0.100000,-1.440700,-0.681900,0.000000,-1.500000,-0.900000,0.000000 + 2640 DATA -1.440700,-0.681900,0.000000,-1.408100,-0.701700,0.100000,-1.244400,-0.509400,0.100000,-1.244400,-0.509400,0.100000 + 2650 DATA -1.259300,-0.480600,0.000000,-1.440700,-0.681900,0.000000,-1.259300,-0.480600,0.000000,-1.244400,-0.509400,0.100000 + 2660 DATA -0.963000,-0.338900,0.100000,-0.963000,-0.338900,0.100000,-0.950000,-0.300000,0.000000,-1.259300,-0.480600,0.000000 + 2670 DATA -1.461100,-0.900000,0.100000,-1.388900,-0.900000,0.100000,-1.347500,-0.738500,0.100000,-1.347500,-0.738500,0.100000 + 2680 DATA -1.408100,-0.701700,0.100000,-1.461100,-0.900000,0.100000,-1.408100,-0.701700,0.100000,-1.347500,-0.738500,0.100000 + 2690 DATA -1.216700,-0.562900,0.100000,-1.216700,-0.562900,0.100000,-1.244400,-0.509400,0.100000,-1.408100,-0.701700,0.100000 + 2700 DATA -1.244400,-0.509400,0.100000,-1.216700,-0.562900,0.100000,-0.987000,-0.411100,0.100000,-0.987000,-0.411100,0.100000 + 2710 DATA -0.963000,-0.338900,0.100000,-1.244400,-0.509400,0.100000,-1.388900,-0.900000,0.100000,-1.350000,-0.900000,0.000000 + 2720 DATA -1.314800,-0.758300,0.000000,-1.314800,-0.758300,0.000000,-1.347500,-0.738500,0.100000,-1.388900,-0.900000,0.100000 + 2730 DATA -1.347500,-0.738500,0.100000,-1.314800,-0.758300,0.000000,-1.201900,-0.591700,0.000000,-1.201900,-0.591700,0.000000 + 2740 DATA -1.216700,-0.562900,0.100000,-1.347500,-0.738500,0.100000,-1.216700,-0.562900,0.100000,-1.201900,-0.591700,0.000000 + 2750 DATA -1.000000,-0.450000,0.000000,-1.000000,-0.450000,0.000000,-0.987000,-0.411100,0.100000,-1.216700,-0.562900,0.100000 + 2760 DATA 0.850000,-0.712500,0.000000,0.850000,-0.605600,-0.220000,1.169800,-0.737100,-0.184600,1.169800,-0.737100,-0.184600 + 2770 DATA 1.135200,-0.805600,0.000000,0.850000,-0.712500,0.000000,1.135200,-0.805600,0.000000,1.169800,-0.737100,-0.184600 + 2780 DATA 1.274700,-0.981400,-0.118800,1.274700,-0.981400,-0.118800,1.231500,-1.006900,0.000000,1.135200,-0.805600,0.000000 + 2790 DATA 1.231500,-1.006900,0.000000,1.274700,-0.981400,-0.118800,1.427800,-1.200000,-0.083300,1.427800,-1.200000,-0.083300 + 2800 DATA 1.350000,-1.200000,0.000000,1.231500,-1.006900,0.000000,0.850000,-0.605600,-0.220000,0.850000,-0.406900,-0.220000 + 2810 DATA 1.234000,-0.610100,-0.184600,1.234000,-0.610100,-0.184600,1.169800,-0.737100,-0.184600,0.850000,-0.605600,-0.220000 + 2820 DATA 1.169800,-0.737100,-0.184600,1.234000,-0.610100,-0.184600,1.354900,-0.933900,-0.118800,1.354900,-0.933900,-0.118800 + 2830 DATA 1.274700,-0.981400,-0.118800,1.169800,-0.737100,-0.184600,1.274700,-0.981400,-0.118800,1.354900,-0.933900,-0.118800 + 2840 DATA 1.572200,-1.200000,-0.083300,1.572200,-1.200000,-0.083300,1.427800,-1.200000,-0.083300,1.274700,-0.981400,-0.118800 + 2850 DATA 0.850000,-0.406900,-0.220000,0.850000,-0.300000,0.000000,1.268500,-0.541700,0.000000,1.268500,-0.541700,0.000000 + 2860 DATA 1.234000,-0.610100,-0.184600,0.850000,-0.406900,-0.220000,1.234000,-0.610100,-0.184600,1.268500,-0.541700,0.000000 + 2870 DATA 1.398100,-0.908300,0.000000,1.398100,-0.908300,0.000000,1.354900,-0.933900,-0.118800,1.234000,-0.610100,-0.184600 + 2880 DATA 1.354900,-0.933900,-0.118800,1.398100,-0.908300,0.000000,1.650000,-1.200000,0.000000,1.650000,-1.200000,0.000000 + 2890 DATA 1.572200,-1.200000,-0.083300,1.354900,-0.933900,-0.118800,0.850000,-0.300000,0.000000,0.850000,-0.406900,0.220000 + 2900 DATA 1.234000,-0.610100,0.184600,1.234000,-0.610100,0.184600,1.268500,-0.541700,0.000000,0.850000,-0.300000,0.000000 + 2910 DATA 1.268500,-0.541700,0.000000,1.234000,-0.610100,0.184600,1.354900,-0.933900,0.118800,1.354900,-0.933900,0.118800 + 2920 DATA 1.398100,-0.908300,0.000000,1.268500,-0.541700,0.000000,1.398100,-0.908300,0.000000,1.354900,-0.933900,0.118800 + 2930 DATA 1.572200,-1.200000,0.083300,1.572200,-1.200000,0.083300,1.650000,-1.200000,0.000000,1.398100,-0.908300,0.000000 + 2940 DATA 0.850000,-0.406900,0.220000,0.850000,-0.605600,0.220000,1.169800,-0.737100,0.184600,1.169800,-0.737100,0.184600 + 2950 DATA 1.234000,-0.610100,0.184600,0.850000,-0.406900,0.220000,1.234000,-0.610100,0.184600,1.169800,-0.737100,0.184600 + 2960 DATA 1.274700,-0.981400,0.118800,1.274700,-0.981400,0.118800,1.354900,-0.933900,0.118800,1.234000,-0.610100,0.184600 + 2970 DATA 1.354900,-0.933900,0.118800,1.274700,-0.981400,0.118800,1.427800,-1.200000,0.083300,1.427800,-1.200000,0.083300 + 2980 DATA 1.572200,-1.200000,0.083300,1.354900,-0.933900,0.118800,0.850000,-0.605600,0.220000,0.850000,-0.712500,0.000000 + 2990 DATA 1.135200,-0.805600,0.000000,1.135200,-0.805600,0.000000,1.169800,-0.737100,0.184600,0.850000,-0.605600,0.220000 + 3000 DATA 1.169800,-0.737100,0.184600,1.135200,-0.805600,0.000000,1.231500,-1.006900,0.000000,1.231500,-1.006900,0.000000 + 3010 DATA 1.274700,-0.981400,0.118800,1.169800,-0.737100,0.184600,1.274700,-0.981400,0.118800,1.231500,-1.006900,0.000000 + 3020 DATA 1.350000,-1.200000,0.000000,1.350000,-1.200000,0.000000,1.427800,-1.200000,0.083300,1.274700,-0.981400,0.118800 + 3030 DATA 1.350000,-1.200000,0.000000,1.427800,-1.200000,-0.083300,1.478900,-1.227200,-0.074700,1.478900,-1.227200,-0.074700 + 3040 DATA 1.396300,-1.225000,0.000000,1.350000,-1.200000,0.000000,1.396300,-1.225000,0.000000,1.478900,-1.227200,-0.074700 + 3050 DATA 1.491200,-1.227700,-0.058600,1.491200,-1.227700,-0.058600,1.420400,-1.225000,0.000000,1.396300,-1.225000,0.000000 + 3060 DATA 1.420400,-1.225000,0.000000,1.491200,-1.227700,-0.058600,1.451900,-1.200000,-0.050000,1.451900,-1.200000,-0.050000 + 3070 DATA 1.400000,-1.200000,0.000000,1.420400,-1.225000,0.000000,1.427800,-1.200000,-0.083300,1.572200,-1.200000,-0.083300 + 3080 DATA 1.632200,-1.231200,-0.074700,1.632200,-1.231200,-0.074700,1.478900,-1.227200,-0.074700,1.427800,-1.200000,-0.083300 + 3090 DATA 1.478900,-1.227200,-0.074700,1.632200,-1.231200,-0.074700,1.622700,-1.232700,-0.058600,1.622700,-1.232700,-0.058600 + 3100 DATA 1.491200,-1.227700,-0.058600,1.478900,-1.227200,-0.074700,1.491200,-1.227700,-0.058600,1.622700,-1.232700,-0.058600 + 3110 DATA 1.548100,-1.200000,-0.050000,1.548100,-1.200000,-0.050000,1.451900,-1.200000,-0.050000,1.491200,-1.227700,-0.058600 + 3120 DATA 1.572200,-1.200000,-0.083300,1.650000,-1.200000,0.000000,1.714800,-1.233300,0.000000,1.714800,-1.233300,0.000000 + 3130 DATA 1.632200,-1.231200,-0.074700,1.572200,-1.200000,-0.083300,1.632200,-1.231200,-0.074700,1.714800,-1.233300,0.000000 + 3140 DATA 1.693500,-1.235400,0.000000,1.693500,-1.235400,0.000000,1.622700,-1.232700,-0.058600,1.632200,-1.231200,-0.074700 + 3150 DATA 1.622700,-1.232700,-0.058600,1.693500,-1.235400,0.000000,1.600000,-1.200000,0.000000,1.600000,-1.200000,0.000000 + 3160 DATA 1.548100,-1.200000,-0.050000,1.622700,-1.232700,-0.058600,1.650000,-1.200000,0.000000,1.572200,-1.200000,0.083300 + 3170 DATA 1.632200,-1.231200,0.074700,1.632200,-1.231200,0.074700,1.714800,-1.233300,0.000000,1.650000,-1.200000,0.000000 + 3180 DATA 1.714800,-1.233300,0.000000,1.632200,-1.231200,0.074700,1.622700,-1.232700,0.058600,1.622700,-1.232700,0.058600 + 3190 DATA 1.693500,-1.235400,0.000000,1.714800,-1.233300,0.000000,1.693500,-1.235400,0.000000,1.622700,-1.232700,0.058600 + 3200 DATA 1.548100,-1.200000,0.050000,1.548100,-1.200000,0.050000,1.600000,-1.200000,0.000000,1.693500,-1.235400,0.000000 + 3210 DATA 1.572200,-1.200000,0.083300,1.427800,-1.200000,0.083300,1.478900,-1.227200,0.074700,1.478900,-1.227200,0.074700 + 3220 DATA 1.632200,-1.231200,0.074700,1.572200,-1.200000,0.083300,1.632200,-1.231200,0.074700,1.478900,-1.227200,0.074700 + 3230 DATA 1.491200,-1.227700,0.058600,1.491200,-1.227700,0.058600,1.622700,-1.232700,0.058600,1.632200,-1.231200,0.074700 + 3240 DATA 1.622700,-1.232700,0.058600,1.491200,-1.227700,0.058600,1.451900,-1.200000,0.050000,1.451900,-1.200000,0.050000 + 3250 DATA 1.548100,-1.200000,0.050000,1.622700,-1.232700,0.058600,1.427800,-1.200000,0.083300,1.350000,-1.200000,0.000000 + 3260 DATA 1.396300,-1.225000,0.000000,1.396300,-1.225000,0.000000,1.478900,-1.227200,0.074700,1.427800,-1.200000,0.083300 + 3270 DATA 1.478900,-1.227200,0.074700,1.396300,-1.225000,0.000000,1.420400,-1.225000,0.000000,1.420400,-1.225000,0.000000 + 3280 DATA 1.491200,-1.227700,0.058600,1.478900,-1.227200,0.074700,1.491200,-1.227700,0.058600,1.420400,-1.225000,0.000000 + 3290 DATA 1.400000,-1.200000,0.000000,1.400000,-1.200000,0.000000,1.451900,-1.200000,0.050000,1.491200,-1.227700,0.058600 + 3300 DATA 0.000000,-1.575000,0.000000,0.000000,-1.575000,0.000000,0.157100,-1.533300,-0.092400,0.157100,-1.533300,-0.092400 + 3310 DATA 0.181500,-1.533300,0.000000,0.000000,-1.575000,0.000000,0.181500,-1.533300,0.000000,0.157100,-1.533300,-0.092400 + 3320 DATA 0.102600,-1.441700,-0.060300,0.102600,-1.441700,-0.060300,0.118500,-1.441700,0.000000,0.181500,-1.533300,0.000000 + 3330 DATA 0.118500,-1.441700,0.000000,0.102600,-1.441700,-0.060300,0.086500,-1.350000,-0.050800,0.086500,-1.350000,-0.050800 + 3340 DATA 0.100000,-1.350000,0.000000,0.118500,-1.441700,0.000000,0.000000,-1.575000,0.000000,0.000000,-1.575000,0.000000 + 3350 DATA 0.092400,-1.533300,-0.157100,0.092400,-1.533300,-0.157100,0.157100,-1.533300,-0.092400,0.000000,-1.575000,0.000000 + 3360 DATA 0.157100,-1.533300,-0.092400,0.092400,-1.533300,-0.157100,0.060300,-1.441700,-0.102600,0.060300,-1.441700,-0.102600 + 3370 DATA 0.102600,-1.441700,-0.060300,0.157100,-1.533300,-0.092400,0.102600,-1.441700,-0.060300,0.060300,-1.441700,-0.102600 + 3380 DATA 0.050800,-1.350000,-0.086500,0.050800,-1.350000,-0.086500,0.086500,-1.350000,-0.050800,0.102600,-1.441700,-0.060300 + 3390 DATA 0.000000,-1.575000,0.000000,0.000000,-1.575000,0.000000,0.000000,-1.533300,-0.181500,0.000000,-1.533300,-0.181500 + 3400 DATA 0.092400,-1.533300,-0.157100,0.000000,-1.575000,0.000000,0.092400,-1.533300,-0.157100,0.000000,-1.533300,-0.181500 + 3410 DATA 0.000000,-1.441700,-0.118500,0.000000,-1.441700,-0.118500,0.060300,-1.441700,-0.102600,0.092400,-1.533300,-0.157100 + 3420 DATA 0.060300,-1.441700,-0.102600,0.000000,-1.441700,-0.118500,0.000000,-1.350000,-0.100000,0.000000,-1.350000,-0.100000 + 3430 DATA 0.050800,-1.350000,-0.086500,0.060300,-1.441700,-0.102600,0.000000,-1.575000,0.000000,0.000000,-1.575000,0.000000 + 3440 DATA -0.092400,-1.533300,-0.157100,-0.092400,-1.533300,-0.157100,0.000000,-1.533300,-0.181500,0.000000,-1.575000,0.000000 + 3450 DATA 0.000000,-1.533300,-0.181500,-0.092400,-1.533300,-0.157100,-0.060300,-1.441700,-0.102600,-0.060300,-1.441700,-0.102600 + 3460 DATA 0.000000,-1.441700,-0.118500,0.000000,-1.533300,-0.181500,0.000000,-1.441700,-0.118500,-0.060300,-1.441700,-0.102600 + 3470 DATA -0.050800,-1.350000,-0.086500,-0.050800,-1.350000,-0.086500,0.000000,-1.350000,-0.100000,0.000000,-1.441700,-0.118500 + 3480 DATA 0.000000,-1.575000,0.000000,0.000000,-1.575000,0.000000,-0.157100,-1.533300,-0.092400,-0.157100,-1.533300,-0.092400 + 3490 DATA -0.092400,-1.533300,-0.157100,0.000000,-1.575000,0.000000,-0.092400,-1.533300,-0.157100,-0.157100,-1.533300,-0.092400 + 3500 DATA -0.102600,-1.441700,-0.060300,-0.102600,-1.441700,-0.060300,-0.060300,-1.441700,-0.102600,-0.092400,-1.533300,-0.157100 + 3510 DATA -0.060300,-1.441700,-0.102600,-0.102600,-1.441700,-0.060300,-0.086500,-1.350000,-0.050800,-0.086500,-1.350000,-0.050800 + 3520 DATA -0.050800,-1.350000,-0.086500,-0.060300,-1.441700,-0.102600,0.000000,-1.575000,0.000000,0.000000,-1.575000,0.000000 + 3530 DATA -0.181500,-1.533300,0.000000,-0.181500,-1.533300,0.000000,-0.157100,-1.533300,-0.092400,0.000000,-1.575000,0.000000 + 3540 DATA -0.157100,-1.533300,-0.092400,-0.181500,-1.533300,0.000000,-0.118500,-1.441700,0.000000,-0.118500,-1.441700,0.000000 + 3550 DATA -0.102600,-1.441700,-0.060300,-0.157100,-1.533300,-0.092400,-0.102600,-1.441700,-0.060300,-0.118500,-1.441700,0.000000 + 3560 DATA -0.100000,-1.350000,0.000000,-0.100000,-1.350000,0.000000,-0.086500,-1.350000,-0.050800,-0.102600,-1.441700,-0.060300 + 3570 DATA 0.000000,-1.575000,0.000000,0.000000,-1.575000,0.000000,-0.157100,-1.533300,0.092400,-0.157100,-1.533300,0.092400 + 3580 DATA -0.181500,-1.533300,0.000000,0.000000,-1.575000,0.000000,-0.181500,-1.533300,0.000000,-0.157100,-1.533300,0.092400 + 3590 DATA -0.102600,-1.441700,0.060300,-0.102600,-1.441700,0.060300,-0.118500,-1.441700,0.000000,-0.181500,-1.533300,0.000000 + 3600 DATA -0.118500,-1.441700,0.000000,-0.102600,-1.441700,0.060300,-0.086500,-1.350000,0.050800,-0.086500,-1.350000,0.050800 + 3610 DATA -0.100000,-1.350000,0.000000,-0.118500,-1.441700,0.000000,0.000000,-1.575000,0.000000,0.000000,-1.575000,0.000000 + 3620 DATA -0.092400,-1.533300,0.157100,-0.092400,-1.533300,0.157100,-0.157100,-1.533300,0.092400,0.000000,-1.575000,0.000000 + 3630 DATA -0.157100,-1.533300,0.092400,-0.092400,-1.533300,0.157100,-0.060300,-1.441700,0.102600,-0.060300,-1.441700,0.102600 + 3640 DATA -0.102600,-1.441700,0.060300,-0.157100,-1.533300,0.092400,-0.102600,-1.441700,0.060300,-0.060300,-1.441700,0.102600 + 3650 DATA -0.050800,-1.350000,0.086500,-0.050800,-1.350000,0.086500,-0.086500,-1.350000,0.050800,-0.102600,-1.441700,0.060300 + 3660 DATA 0.000000,-1.575000,0.000000,0.000000,-1.575000,0.000000,0.000000,-1.533300,0.181500,0.000000,-1.533300,0.181500 + 3670 DATA -0.092400,-1.533300,0.157100,0.000000,-1.575000,0.000000,-0.092400,-1.533300,0.157100,0.000000,-1.533300,0.181500 + 3680 DATA 0.000000,-1.441700,0.118500,0.000000,-1.441700,0.118500,-0.060300,-1.441700,0.102600,-0.092400,-1.533300,0.157100 + 3690 DATA -0.060300,-1.441700,0.102600,0.000000,-1.441700,0.118500,0.000000,-1.350000,0.100000,0.000000,-1.350000,0.100000 + 3700 DATA -0.050800,-1.350000,0.086500,-0.060300,-1.441700,0.102600,0.000000,-1.575000,0.000000,0.000000,-1.575000,0.000000 + 3710 DATA 0.092400,-1.533300,0.157100,0.092400,-1.533300,0.157100,0.000000,-1.533300,0.181500,0.000000,-1.575000,0.000000 + 3720 DATA 0.000000,-1.533300,0.181500,0.092400,-1.533300,0.157100,0.060300,-1.441700,0.102600,0.060300,-1.441700,0.102600 + 3730 DATA 0.000000,-1.441700,0.118500,0.000000,-1.533300,0.181500,0.000000,-1.441700,0.118500,0.060300,-1.441700,0.102600 + 3740 DATA 0.050800,-1.350000,0.086500,0.050800,-1.350000,0.086500,0.000000,-1.350000,0.100000,0.000000,-1.441700,0.118500 + 3750 DATA 0.000000,-1.575000,0.000000,0.000000,-1.575000,0.000000,0.157100,-1.533300,0.092400,0.157100,-1.533300,0.092400 + 3760 DATA 0.092400,-1.533300,0.157100,0.000000,-1.575000,0.000000,0.092400,-1.533300,0.157100,0.157100,-1.533300,0.092400 + 3770 DATA 0.102600,-1.441700,0.060300,0.102600,-1.441700,0.060300,0.060300,-1.441700,0.102600,0.092400,-1.533300,0.157100 + 3780 DATA 0.060300,-1.441700,0.102600,0.102600,-1.441700,0.060300,0.086500,-1.350000,0.050800,0.086500,-1.350000,0.050800 + 3790 DATA 0.050800,-1.350000,0.086500,0.060300,-1.441700,0.102600,0.000000,-1.575000,0.000000,0.000000,-1.575000,0.000000 + 3800 DATA 0.181500,-1.533300,0.000000,0.181500,-1.533300,0.000000,0.157100,-1.533300,0.092400,0.000000,-1.575000,0.000000 + 3810 DATA 0.157100,-1.533300,0.092400,0.181500,-1.533300,0.000000,0.118500,-1.441700,0.000000,0.118500,-1.441700,0.000000 + 3820 DATA 0.102600,-1.441700,0.060300,0.157100,-1.533300,0.092400,0.102600,-1.441700,0.060300,0.118500,-1.441700,0.000000 + 3830 DATA 0.100000,-1.350000,0.000000,0.100000,-1.350000,0.000000,0.086500,-1.350000,0.050800,0.102600,-1.441700,0.060300 + 3840 DATA 0.100000,-1.350000,0.000000,0.086500,-1.350000,-0.050800,0.248300,-1.294400,-0.145900,0.248300,-1.294400,-0.145900 + 3850 DATA 0.287000,-1.294400,0.000000,0.100000,-1.350000,0.000000,0.287000,-1.294400,0.000000,0.248300,-1.294400,-0.145900 + 3860 DATA 0.458200,-1.255600,-0.269100,0.458200,-1.255600,-0.269100,0.529600,-1.255600,0.000000,0.287000,-1.294400,0.000000 + 3870 DATA 0.529600,-1.255600,0.000000,0.458200,-1.255600,-0.269100,0.562400,-1.200000,-0.330300,0.562400,-1.200000,-0.330300 + 3880 DATA 0.650000,-1.200000,0.000000,0.529600,-1.255600,0.000000,0.086500,-1.350000,-0.050800,0.050800,-1.350000,-0.086500 + 3890 DATA 0.145900,-1.294400,-0.248300,0.145900,-1.294400,-0.248300,0.248300,-1.294400,-0.145900,0.086500,-1.350000,-0.050800 + 3900 DATA 0.248300,-1.294400,-0.145900,0.145900,-1.294400,-0.248300,0.269100,-1.255600,-0.458200,0.269100,-1.255600,-0.458200 + 3910 DATA 0.458200,-1.255600,-0.269100,0.248300,-1.294400,-0.145900,0.458200,-1.255600,-0.269100,0.269100,-1.255600,-0.458200 + 3920 DATA 0.330300,-1.200000,-0.562400,0.330300,-1.200000,-0.562400,0.562400,-1.200000,-0.330300,0.458200,-1.255600,-0.269100 + 3930 DATA 0.050800,-1.350000,-0.086500,0.000000,-1.350000,-0.100000,0.000000,-1.294400,-0.287000,0.000000,-1.294400,-0.287000 + 3940 DATA 0.145900,-1.294400,-0.248300,0.050800,-1.350000,-0.086500,0.145900,-1.294400,-0.248300,0.000000,-1.294400,-0.287000 + 3950 DATA 0.000000,-1.255600,-0.529600,0.000000,-1.255600,-0.529600,0.269100,-1.255600,-0.458200,0.145900,-1.294400,-0.248300 + 3960 DATA 0.269100,-1.255600,-0.458200,0.000000,-1.255600,-0.529600,0.000000,-1.200000,-0.650000,0.000000,-1.200000,-0.650000 + 3970 DATA 0.330300,-1.200000,-0.562400,0.269100,-1.255600,-0.458200,0.000000,-1.350000,-0.100000,-0.050800,-1.350000,-0.086500 + 3980 DATA -0.145900,-1.294400,-0.248300,-0.145900,-1.294400,-0.248300,0.000000,-1.294400,-0.287000,0.000000,-1.350000,-0.100000 + 3990 DATA 0.000000,-1.294400,-0.287000,-0.145900,-1.294400,-0.248300,-0.269100,-1.255600,-0.458200,-0.269100,-1.255600,-0.458200 + 4000 DATA 0.000000,-1.255600,-0.529600,0.000000,-1.294400,-0.287000,0.000000,-1.255600,-0.529600,-0.269100,-1.255600,-0.458200 + 4010 DATA -0.330300,-1.200000,-0.562400,-0.330300,-1.200000,-0.562400,0.000000,-1.200000,-0.650000,0.000000,-1.255600,-0.529600 + 4020 DATA -0.050800,-1.350000,-0.086500,-0.086500,-1.350000,-0.050800,-0.248300,-1.294400,-0.145900,-0.248300,-1.294400,-0.145900 + 4030 DATA -0.145900,-1.294400,-0.248300,-0.050800,-1.350000,-0.086500,-0.145900,-1.294400,-0.248300,-0.248300,-1.294400,-0.145900 + 4040 DATA -0.458200,-1.255600,-0.269100,-0.458200,-1.255600,-0.269100,-0.269100,-1.255600,-0.458200,-0.145900,-1.294400,-0.248300 + 4050 DATA -0.269100,-1.255600,-0.458200,-0.458200,-1.255600,-0.269100,-0.562400,-1.200000,-0.330300,-0.562400,-1.200000,-0.330300 + 4060 DATA -0.330300,-1.200000,-0.562400,-0.269100,-1.255600,-0.458200,-0.086500,-1.350000,-0.050800,-0.100000,-1.350000,0.000000 + 4070 DATA -0.287000,-1.294400,0.000000,-0.287000,-1.294400,0.000000,-0.248300,-1.294400,-0.145900,-0.086500,-1.350000,-0.050800 + 4080 DATA -0.248300,-1.294400,-0.145900,-0.287000,-1.294400,0.000000,-0.529600,-1.255600,0.000000,-0.529600,-1.255600,0.000000 + 4090 DATA -0.458200,-1.255600,-0.269100,-0.248300,-1.294400,-0.145900,-0.458200,-1.255600,-0.269100,-0.529600,-1.255600,0.000000 + 4100 DATA -0.650000,-1.200000,0.000000,-0.650000,-1.200000,0.000000,-0.562400,-1.200000,-0.330300,-0.458200,-1.255600,-0.269100 + 4110 DATA -0.100000,-1.350000,0.000000,-0.086500,-1.350000,0.050800,-0.248300,-1.294400,0.145900,-0.248300,-1.294400,0.145900 + 4120 DATA -0.287000,-1.294400,0.000000,-0.100000,-1.350000,0.000000,-0.287000,-1.294400,0.000000,-0.248300,-1.294400,0.145900 + 4130 DATA -0.458200,-1.255600,0.269100,-0.458200,-1.255600,0.269100,-0.529600,-1.255600,0.000000,-0.287000,-1.294400,0.000000 + 4140 DATA -0.529600,-1.255600,0.000000,-0.458200,-1.255600,0.269100,-0.562400,-1.200000,0.330300,-0.562400,-1.200000,0.330300 + 4150 DATA -0.650000,-1.200000,0.000000,-0.529600,-1.255600,0.000000,-0.086500,-1.350000,0.050800,-0.050800,-1.350000,0.086500 + 4160 DATA -0.145900,-1.294400,0.248300,-0.145900,-1.294400,0.248300,-0.248300,-1.294400,0.145900,-0.086500,-1.350000,0.050800 + 4170 DATA -0.248300,-1.294400,0.145900,-0.145900,-1.294400,0.248300,-0.269100,-1.255600,0.458200,-0.269100,-1.255600,0.458200 + 4180 DATA -0.458200,-1.255600,0.269100,-0.248300,-1.294400,0.145900,-0.458200,-1.255600,0.269100,-0.269100,-1.255600,0.458200 + 4190 DATA -0.330300,-1.200000,0.562400,-0.330300,-1.200000,0.562400,-0.562400,-1.200000,0.330300,-0.458200,-1.255600,0.269100 + 4200 DATA -0.050800,-1.350000,0.086500,0.000000,-1.350000,0.100000,0.000000,-1.294400,0.287000,0.000000,-1.294400,0.287000 + 4210 DATA -0.145900,-1.294400,0.248300,-0.050800,-1.350000,0.086500,-0.145900,-1.294400,0.248300,0.000000,-1.294400,0.287000 + 4220 DATA 0.000000,-1.255600,0.529600,0.000000,-1.255600,0.529600,-0.269100,-1.255600,0.458200,-0.145900,-1.294400,0.248300 + 4230 DATA -0.269100,-1.255600,0.458200,0.000000,-1.255600,0.529600,0.000000,-1.200000,0.650000,0.000000,-1.200000,0.650000 + 4240 DATA -0.330300,-1.200000,0.562400,-0.269100,-1.255600,0.458200,0.000000,-1.350000,0.100000,0.050800,-1.350000,0.086500 + 4250 DATA 0.145900,-1.294400,0.248300,0.145900,-1.294400,0.248300,0.000000,-1.294400,0.287000,0.000000,-1.350000,0.100000 + 4260 DATA 0.000000,-1.294400,0.287000,0.145900,-1.294400,0.248300,0.269100,-1.255600,0.458200,0.269100,-1.255600,0.458200 + 4270 DATA 0.000000,-1.255600,0.529600,0.000000,-1.294400,0.287000,0.000000,-1.255600,0.529600,0.269100,-1.255600,0.458200 + 4280 DATA 0.330300,-1.200000,0.562400,0.330300,-1.200000,0.562400,0.000000,-1.200000,0.650000,0.000000,-1.255600,0.529600 + 4290 DATA 0.050800,-1.350000,0.086500,0.086500,-1.350000,0.050800,0.248300,-1.294400,0.145900,0.248300,-1.294400,0.145900 + 4300 DATA 0.145900,-1.294400,0.248300,0.050800,-1.350000,0.086500,0.145900,-1.294400,0.248300,0.248300,-1.294400,0.145900 + 4310 DATA 0.458200,-1.255600,0.269100,0.458200,-1.255600,0.269100,0.269100,-1.255600,0.458200,0.145900,-1.294400,0.248300 + 4320 DATA 0.269100,-1.255600,0.458200,0.458200,-1.255600,0.269100,0.562400,-1.200000,0.330300,0.562400,-1.200000,0.330300 + 4330 DATA 0.330300,-1.200000,0.562400,0.269100,-1.255600,0.458200,0.086500,-1.350000,0.050800,0.100000,-1.350000,0.000000 + 4340 DATA 0.287000,-1.294400,0.000000,0.287000,-1.294400,0.000000,0.248300,-1.294400,0.145900,0.086500,-1.350000,0.050800 + 4350 DATA 0.248300,-1.294400,0.145900,0.287000,-1.294400,0.000000,0.529600,-1.255600,0.000000,0.529600,-1.255600,0.000000 + 4360 DATA 0.458200,-1.255600,0.269100,0.248300,-1.294400,0.145900,0.458200,-1.255600,0.269100,0.529600,-1.255600,0.000000 + 4370 DATA 0.650000,-1.200000,0.000000,0.650000,-1.200000,0.000000,0.562400,-1.200000,0.330300,0.458200,-1.255600,0.269100 + 4380 REM + 4390 REM -- VERTEX INDEXES -- + 4400 DATA 0,1,2,3,4,5,6,7,8,9 + 4410 DATA 10,11,12,13,14,15,16,17,18,19 + 4420 DATA 20,21,22,23,24,25,26,27,28,29 + 4430 DATA 30,31,32,33,34,35,36,37,38,39 + 4440 DATA 40,41,42,43,44,45,46,47,48,49 + 4450 DATA 50,51,52,53,54,55,56,57,58,59 + 4460 DATA 60,61,62,63,64,65,66,67,68,69 + 4470 DATA 70,71,72,73,74,75,76,77,78,79 + 4480 DATA 80,81,82,83,84,85,86,87,88,89 + 4490 DATA 90,91,92,93,94,95,96,97,98,99 + 4500 DATA 100,101,102,103,104,105,106,107,108,109 + 4510 DATA 110,111,112,113,114,115,116,117,118,119 + 4520 DATA 120,121,122,123,124,125,126,127,128,129 + 4530 DATA 130,131,132,133,134,135,136,137,138,139 + 4540 DATA 140,141,142,143,144,145,146,147,148,149 + 4550 DATA 150,151,152,153,154,155,156,157,158,159 + 4560 DATA 160,161,162,163,164,165,166,167,168,169 + 4570 DATA 170,171,172,173,174,175,176,177,178,179 + 4580 DATA 180,181,182,183,184,185,186,187,188,189 + 4590 DATA 190,191,192,193,194,195,196,197,198,199 + 4600 DATA 200,201,202,203,204,205,206,207,208,209 + 4610 DATA 210,211,212,213,214,215,216,217,218,219 + 4620 DATA 220,221,222,223,224,225,226,227,228,229 + 4630 DATA 230,231,232,233,234,235,236,237,238,239 + 4640 DATA 240,241,242,243,244,245,246,247,248,249 + 4650 DATA 250,251,252,253,254,255,256,257,258,259 + 4660 DATA 260,261,262,263,264,265,266,267,268,269 + 4670 DATA 270,271,272,273,274,275,276,277,278,279 + 4680 DATA 280,281,282,283,284,285,286,287,288,289 + 4690 DATA 290,291,292,293,294,295,296,297,298,299 + 4700 DATA 300,301,302,303,304,305,306,307,308,309 + 4710 DATA 310,311,312,313,314,315,316,317,318,319 + 4720 DATA 320,321,322,323,324,325,326,327,328,329 + 4730 DATA 330,331,332,333,334,335,336,337,338,339 + 4740 DATA 340,341,342,343,344,345,346,347,348,349 + 4750 DATA 350,351,352,353,354,355,356,357,358,359 + 4760 DATA 360,361,362,363,364,365,366,367,368,369 + 4770 DATA 370,371,372,373,374,375,376,377,378,379 + 4780 DATA 380,381,382,383,384,385,386,387,388,389 + 4790 DATA 390,391,392,393,394,395,396,397,398,399 + 4800 DATA 400,401,402,403,404,405,406,407,408,409 + 4810 DATA 410,411,412,413,414,415,416,417,418,419 + 4820 DATA 420,421,422,423,424,425,426,427,428,429 + 4830 DATA 430,431,432,433,434,435,436,437,438,439 + 4840 DATA 440,441,442,443,444,445,446,447,448,449 + 4850 DATA 450,451,452,453,454,455,456,457,458,459 + 4860 DATA 460,461,462,463,464,465,466,467,468,469 + 4870 DATA 470,471,472,473,474,475,476,477,478,479 + 4880 DATA 480,481,482,483,484,485,486,487,488,489 + 4890 DATA 490,491,492,493,494,495,496,497,498,499 + 4900 DATA 500,501,502,503,504,505,506,507,508,509 + 4910 DATA 510,511,512,513,514,515,516,517,518,519 + 4920 DATA 520,521,522,523,524,525,526,527,528,529 + 4930 DATA 530,531,532,533,534,535,536,537,538,539 + 4940 DATA 540,541,542,543,544,545,546,547,548,549 + 4950 DATA 550,551,552,553,554,555,556,557,558,559 + 4960 DATA 560,561,562,563,564,565,566,567,568,569 + 4970 DATA 570,571,572,573,574,575,576,577,578,579 + 4980 DATA 580,581,582,583,584,585,586,587,588,589 + 4990 DATA 590,591,592,593,594,595,596,597,598,599 + 5000 DATA 600,601,602,603,604,605,606,607,608,609 + 5010 DATA 610,611,612,613,614,615,616,617,618,619 + 5020 DATA 620,621,622,623,624,625,626,627,628,629 + 5030 DATA 630,631,632,633,634,635,636,637,638,639 + 5040 DATA 640,641,642,643,644,645,646,647,648,649 + 5050 DATA 650,651,652,653,654,655,656,657,658,659 + 5060 DATA 660,661,662,663,664,665,666,667,668,669 + 5070 DATA 670,671,672,673,674,675,676,677,678,679 + 5080 DATA 680,681,682,683,684,685,686,687,688,689 + 5090 DATA 690,691,692,693,694,695,696,697,698,699 + 5100 DATA 700,701,702,703,704,705,706,707,708,709 + 5110 DATA 710,711,712,713,714,715,716,717,718,719 + 5120 DATA 720,721,722,723,724,725,726,727,728,729 + 5130 DATA 730,731,732,733,734,735,736,737,738,739 + 5140 DATA 740,741,742,743,744,745,746,747,748,749 + 5150 DATA 750,751,752,753,754,755,756,757,758,759 + 5160 DATA 760,761,762,763,764,765,766,767,768,769 + 5170 DATA 770,771,772,773,774,775,776,777,778,779 + 5180 DATA 780,781,782,783,784,785,786,787,788,789 + 5190 DATA 790,791,792,793,794,795,796,797,798,799 + 5200 DATA 800,801,802,803,804,805,806,807,808,809 + 5210 DATA 810,811,812,813,814,815,816,817,818,819 + 5220 DATA 820,821,822,823,824,825,826,827,828,829 + 5230 DATA 830,831,832,833,834,835,836,837,838,839 + 5240 DATA 840,841,842,843,844,845,846,847,848,849 + 5250 DATA 850,851,852,853,854,855,856,857,858,859 + 5260 DATA 860,861,862,863,864,865,866,867,868,869 + 5270 DATA 870,871,872,873,874,875,876,877,878,879 + 5280 DATA 880,881,882,883,884,885,886,887,888,889 + 5290 DATA 890,891,892,893,894,895,896,897,898,899 + 5300 DATA 900,901,902,903,904,905,906,907,908,909 + 5310 DATA 910,911,912,913,914,915,916,917,918,919 + 5320 DATA 920,921,922,923,924,925,926,927,928,929 + 5330 DATA 930,931,932,933,934,935,936,937,938,939 + 5340 DATA 940,941,942,943,944,945,946,947,948,949 + 5350 DATA 950,951,952,953,954,955,956,957,958,959 + 5360 DATA 960,961,962,963,964,965,966,967,968,969 + 5370 DATA 970,971,972,973,974,975,976,977,978,979 + 5380 DATA 980,981,982,983,984,985,986,987,988,989 + 5390 DATA 990,991,992,993,994,995,996,997,998,999 + 5400 DATA 1000,1001,1002,1003,1004,1005,1006,1007,1008,1009 + 5410 DATA 1010,1011,1012,1013,1014,1015,1016,1017,1018,1019 + 5420 DATA 1020,1021,1022,1023,1024,1025,1026,1027,1028,1029 + 5430 DATA 1030,1031,1032,1033,1034,1035,1036,1037,1038,1039 + 5440 DATA 1040,1041,1042,1043,1044,1045,1046,1047,1048,1049 + 5450 DATA 1050,1051,1052,1053,1054,1055,1056,1057,1058,1059 + 5460 DATA 1060,1061,1062,1063,1064,1065,1066,1067,1068,1069 + 5470 DATA 1070,1071,1072,1073,1074,1075,1076,1077,1078,1079 + 5480 DATA 1080,1081,1082,1083,1084,1085,1086,1087,1088,1089 + 5490 DATA 1090,1091,1092,1093,1094,1095,1096,1097,1098,1099 + 5500 DATA 1100,1101,1102,1103,1104,1105,1106,1107,1108,1109 + 5510 DATA 1110,1111,1112,1113,1114,1115,1116,1117,1118,1119 + 5520 DATA 1120,1121,1122,1123,1124,1125,1126,1127,1128,1129 + 5530 DATA 1130,1131,1132,1133,1134,1135,1136,1137,1138,1139 + 5540 DATA 1140,1141,1142,1143,1144,1145,1146,1147,1148,1149 + 5550 DATA 1150,1151,1152,1153,1154,1155,1156,1157,1158,1159 + 5560 DATA 1160,1161,1162,1163,1164,1165,1166,1167,1168,1169 + 5570 DATA 1170,1171,1172,1173,1174,1175,1176,1177,1178,1179 + 5580 DATA 1180,1181,1182,1183,1184,1185,1186,1187,1188,1189 + 5590 DATA 1190,1191,1192,1193,1194,1195,1196,1197,1198,1199 + 5600 DATA 1200,1201,1202,1203,1204,1205,1206,1207,1208,1209 + 5610 DATA 1210,1211,1212,1213,1214,1215,1216,1217,1218,1219 + 5620 DATA 1220,1221,1222,1223,1224,1225,1226,1227,1228,1229 + 5630 DATA 1230,1231,1232,1233,1234,1235,1236,1237,1238,1239 + 5640 DATA 1240,1241,1242,1243,1244,1245,1246,1247,1248,1249 + 5650 DATA 1250,1251,1252,1253,1254,1255,1256,1257,1258,1259 + 5660 DATA 1260,1261,1262,1263,1264,1265,1266,1267,1268,1269 + 5670 DATA 1270,1271,1272,1273,1274,1275,1276,1277,1278,1279 + 5680 DATA 1280,1281,1282,1283,1284,1285,1286,1287,1288,1289 + 5690 DATA 1290,1291,1292,1293,1294,1295,1296,1297,1298,1299 + 5700 DATA 1300,1301,1302,1303,1304,1305,1306,1307,1308,1309 + 5710 DATA 1310,1311,1312,1313,1314,1315,1316,1317,1318,1319 + 5720 DATA 1320,1321,1322,1323,1324,1325,1326,1327,1328,1329 + 5730 DATA 1330,1331,1332,1333,1334,1335,1336,1337,1338,1339 + 5740 DATA 1340,1341,1342,1343,1344,1345,1346,1347,1348,1349 + 5750 DATA 1350,1351,1352,1353,1354,1355,1356,1357,1358,1359 + 5760 DATA 1360,1361,1362,1363,1364,1365,1366,1367,1368,1369 + 5770 DATA 1370,1371,1372,1373,1374,1375,1376,1377,1378,1379 + 5780 DATA 1380,1381,1382,1383,1384,1385,1386,1387,1388,1389 + 5790 DATA 1390,1391,1392,1393,1394,1395,1396,1397,1398,1399 + 5800 DATA 1400,1401,1402,1403,1404,1405,1406,1407,1408,1409 + 5810 DATA 1410,1411,1412,1413,1414,1415,1416,1417,1418,1419 + 5820 DATA 1420,1421,1422,1423,1424,1425,1426,1427,1428,1429 + 5830 DATA 1430,1431,1432,1433,1434,1435,1436,1437,1438,1439 + 5840 DATA 1440,1441,1442,1443,1444,1445,1446,1447,1448,1449 + 5850 DATA 1450,1451,1452,1453,1454,1455,1456,1457,1458,1459 + 5860 DATA 1460,1461,1462,1463,1464,1465,1466,1467,1468,1469 + 5870 DATA 1470,1471,1472,1473,1474,1475,1476,1477,1478,1479 + 5880 DATA 1480,1481,1482,1483,1484,1485,1486,1487,1488,1489 + 5890 DATA 1490,1491,1492,1493,1494,1495,1496,1497,1498,1499 + 5900 DATA 1500,1501,1502,1503,1504,1505,1506,1507,1508,1509 + 5910 DATA 1510,1511,1512,1513,1514,1515,1516,1517,1518,1519 + 5920 DATA 1520,1521,1522,1523,1524,1525,1526,1527,1528,1529 + 5930 DATA 1530,1531,1532,1533,1534,1535,1536,1537,1538,1539 + 5940 DATA 1540,1541,1542,1543,1544,1545,1546,1547,1548,1549 + 5950 DATA 1550,1551,1552,1553,1554,1555,1556,1557,1558,1559 + 5960 DATA 1560,1561,1562,1563,1564,1565,1566,1567,1568,1569 + 5970 DATA 1570,1571,1572,1573,1574,1575,1576,1577,1578,1579 + 5980 DATA 1580,1581,1582,1583,1584,1585,1586,1587,1588,1589 + 5990 DATA 1590,1591,1592,1593,1594,1595,1596,1597,1598,1599 + 6000 DATA 1600,1601,1602,1603,1604,1605,1606,1607,1608,1609 + 6010 DATA 1610,1611,1612,1613,1614,1615,1616,1617,1618,1619 + 6020 DATA 1620,1621,1622,1623,1624,1625,1626,1627,1628,1629 + 6030 DATA 1630,1631,1632,1633,1634,1635,1636,1637,1638,1639 + 6040 DATA 1640,1641,1642,1643,1644,1645,1646,1647,1648,1649 + 6050 DATA 1650,1651,1652,1653,1654,1655,1656,1657,1658,1659 + 6060 DATA 1660,1661,1662,1663,1664,1665,1666,1667,1668,1669 + 6070 DATA 1670,1671,1672,1673,1674,1675,1676,1677,1678,1679 + 6080 DATA 1680,1681,1682,1683,1684,1685,1686,1687,1688,1689 + 6090 DATA 1690,1691,1692,1693,1694,1695,1696,1697,1698,1699 + 6100 DATA 1700,1701,1702,1703,1704,1705,1706,1707,1708,1709 + 6110 DATA 1710,1711,1712,1713,1714,1715,1716,1717,1718,1719 + 6120 DATA 1720,1721,1722,1723,1724,1725,1726,1727 + 6130 REM + 6140 REM -- CODE -- + 6150 PRINT "Reading vertices" + 6160 total_coords%=teapot_vertices%*3 + 6170 max_abs=-99999 + 6180 DIM vertices(total_coords%) + 6190 FOR i%=0 TO total_coords%-1 + 6200 READ coord + 6210 vertices(i%)=coord + 6220 a=ABS(coord) + 6230 IF a>max_abs THEN max_abs=a + 6240 NEXT i% + 6250 factor=32767.0/max_abs + 6260 PRINT "Max absolute value = ";max_abs + 6270 PRINT "Factor = ";factor + 6280 sid%=100: mid%=1: oid%=1: bmid1%=101: bmid2%=102 + 6290 PRINT "Creating control structure" + 6300 scene_width%=96: scene_height%=96 + 6310 VDU 23,0, &A0, sid%; &48, 0, scene_width%; scene_height%; : REM Create Control Structure + 6320 f=32767.0/256.0 + 6330 distx=0*f: disty=2*f: distz=-20*f + 6340 VDU 23,0, &A0, sid%; &48, 25, distx; disty; distz; : REM Set Camera XYZ Translation Distances + 6350 pi2=PI*2.0: f=32767.0/pi2 + 6360 anglex=-0.4*f + 6370 VDU 23,0, &A0, sid%; &48, 18, anglex; : REM Set Camera X Rotation Angle + 6380 PRINT "Sending vertices using factor ";factor + 6390 VDU 23,0, &A0, sid%; &48, 1, mid%; teapot_vertices%; : REM Define Mesh Vertices + 6400 FOR i%=0 TO total_coords%-1 + 6410 val%=vertices(i%)*factor + 6420 VDU val%; + 6430 T%=TIME + 6440 IF TIME-T%<1 GOTO 6440 + 6450 NEXT i% + 6460 PRINT "Reading and sending vertex indexes" + 6470 VDU 23,0, &A0, sid%; &48, 2, mid%; teapot_vertices%; : REM Set Mesh Vertex Indexes + 6480 FOR i%=0 TO teapot_vertices%-1 + 6490 READ val% + 6500 VDU val%; + 6510 T%=TIME + 6520 IF TIME-T%<1 GOTO 6520 + 6530 NEXT i% + 6540 PRINT "Sending texture coordinate indexes" + 6550 VDU 23,0, &A0, sid%; &48, 3, mid%; 1; 32768; 32768; : REM Define Texture Coordinates + 6560 VDU 23,0, &A0, sid%; &48, 4, mid%; teapot_vertices%; : REM Set Texture Coordinate Indexes + 6570 FOR i%=0 TO teapot_vertices%-1 + 6580 VDU 0; + 6590 NEXT i% + 6600 PRINT "Creating texture bitmap" + 6610 VDU 23, 27, 0, bmid1%: REM Create a bitmap for a texture + 6620 PRINT "Setting texture pixel" + 6630 VDU 23, 27, 1, 1; 1; &55, &AA, &FF, &C0 : REM Set a pixel in the bitmap + 6640 PRINT "Create 3D object" + 6650 VDU 23,0, &A0, sid%; &48, 5, oid%; mid%; bmid1%+64000; : REM Create Object + 6660 PRINT "Scale object" + 6670 scale=6.0*256.0 + 6680 VDU 23, 0, &A0, sid%; &48, 9, oid%; scale; scale; scale; : REM Set Object XYZ Scale Factors + 6690 PRINT "Create target bitmap" + 6700 VDU 23, 27, 0, bmid2% : REM Select output bitmap + 6710 VDU 23, 27, 2, scene_width%; scene_height%; &0000; &00C0; : REM Create solid color bitmap + 6720 PRINT "Render 3D object" + 6730 VDU 23, 0, &C3: REM Flip buffer + 6740 rotatex=0.0: rotatey=0.0: rotatez=0.0 + 6750 incx=PI/16.0: incy=PI/32.0: incz=PI/64.0 + 6760 factor=32767.0/pi2 + 6770 VDU 22, 136: REM 320x240x64 + 6780 VDU 23, 0, &C0, 0: REM Normal coordinates + 6790 CLG + 6800 VDU 23, 0, &A0, sid%; &48, 38, bmid2%+64000; : REM Render To Bitmap + 6810 VDU 23, 27, 3, 50; 50; : REM Display output bitmap + 6820 VDU 23, 0, &C3: REM Flip buffer + 6830 *FX 19 + 6840 rotatex=rotatex+incx: IF rotatex>=pi2 THEN rotatex=rotatex-pi2 + 6850 rotatey=rotatey+incy: IF rotatey>=pi2 THEN rotatey=rotatey-pi2 + 6860 rotatez=rotatez+incz: IF rotatez>=pi2 THEN rotatez=rotatez-pi2 + 6870 rx=rotatex*factor: ry=rotatey*factor: rz=rotatez*factor + 6880 VDU 23, 0, &A0, sid%; &48, 13, oid%; rx; ry; rz; : REM Set Object XYZ Rotation Angles + 6890 GOTO 6790 diff --git a/video/pingo/vdu_pingo.md b/video/pingo/vdu_pingo.md index 8a52af0a..0d3682a7 100644 --- a/video/pingo/vdu_pingo.md +++ b/video/pingo/vdu_pingo.md @@ -105,20 +105,28 @@ VDU ... PDX; PDY; PDZ; ... VDU 23, 0, &A0, sid; &48, 15, oid; disty; : Set Object Y Translation Distance
VDU 23, 0, &A0, sid; &48, 16, oid; distz; : Set Object Z Translation Distance
VDU 23, 0, &A0, sid; &48, 17, oid; distx; disty; distz; : Set Object XYZ Translation Distances
-VDU 23, 0, &A0, sid; &48, 18, scalex; : Set Camera X Scale Factor
-VDU 23, 0, &A0, sid; &48, 19, scaley; : Set Camera Y Scale Factor
-VDU 23, 0, &A0, sid; &48, 20, scalez; : Set Camera Z Scale Factor
-VDU 23, 0, &A0, sid; &48, 21, scalex; scaley; scalez; : Set Camera XYZ Scale Factors
-VDU 23, 0, &A0, sid; &48, 22, anglex; : Set Camera X Rotation Angle
-VDU 23, 0, &A0, sid; &48, 23, angley; : Set Camera Y Rotation Angle
-VDU 23, 0, &A0, sid; &48, 24, anglez; : Set Camera Z Rotation Angle
-VDU 23, 0, &A0, sid; &48, 25, anglex; angley; anglez; : Set Camera XYZ Rotation Angles
-VDU 23, 0, &A0, sid; &48, 26, distx; : Set Camera X Translation Distance
-VDU 23, 0, &A0, sid; &48, 27, disty; : Set Camera Y Translation Distance
-VDU 23, 0, &A0, sid; &48, 28, distz; : Set Camera Z Translation Distance
-VDU 23, 0, &A0, sid; &48, 29, distx; disty; distz; : Set Camera XYZ Translation Distances
-VDU 23, 0, &A0, sid; &48, 30, bmid; : Render To Bitmap
-VDU 23, 0, &A0, sid; &48, 31 : Delete Control Structure
+VDU 23, 0, &A0, sid; &48, 18, anglex; : Set Camera X Rotation Angle
+VDU 23, 0, &A0, sid; &48, 19, angley; : Set Camera Y Rotation Angle
+VDU 23, 0, &A0, sid; &48, 20, anglez; : Set Camera Z Rotation Angle
+VDU 23, 0, &A0, sid; &48, 21, anglex; angley; anglez; : Set Camera XYZ Rotation Angles
+VDU 23, 0, &A0, sid; &48, 22, distx; : Set Camera X Translation Distance
+VDU 23, 0, &A0, sid; &48, 23, disty; : Set Camera Y Translation Distance
+VDU 23, 0, &A0, sid; &48, 24, distz; : Set Camera Z Translation Distance
+VDU 23, 0, &A0, sid; &48, 25, distx; disty; distz; : Set Camera XYZ Translation Distances
+VDU 23, 0, &A0, sid; &48, 26, scalex; : Set Scene X Scale Factor
+VDU 23, 0, &A0, sid; &48, 27, scaley; : Set Scene Y Scale Factor
+VDU 23, 0, &A0, sid; &48, 28, scalez; : Set Scene Z Scale Factor
+VDU 23, 0, &A0, sid; &48, 29, scalex; scaley; scalez; : Set Scene XYZ Scale Factors
+VDU 23, 0, &A0, sid; &48, 30, anglex; : Set Scene X Rotation Angle
+VDU 23, 0, &A0, sid; &48, 31, angley; : Set Scene Y Rotation Angle
+VDU 23, 0, &A0, sid; &48, 32, anglez; : Set Scene Z Rotation Angle
+VDU 23, 0, &A0, sid; &48, 33, anglex; angley; anglez; : Set Scene XYZ Rotation Angles
+VDU 23, 0, &A0, sid; &48, 34, distx; : Set Scene X Translation Distance
+VDU 23, 0, &A0, sid; &48, 35, disty; : Set Scene Y Translation Distance
+VDU 23, 0, &A0, sid; &48, 36, distz; : Set Scene Z Translation Distance
+VDU 23, 0, &A0, sid; &48, 37, distx; disty; distz; : Set Scene XYZ Translation Distances
+VDU 23, 0, &A0, sid; &48, 38, bmid; : Render To Bitmap
+VDU 23, 0, &A0, sid; &48, 39 : Delete Control Structure
## Create Control Structure VDU 23, 0, &A0, sid; &48, 0, w; h; : Create Control Structure
@@ -221,32 +229,136 @@ This command sets the X, Y, and Z rotation angles for an object. VDU 23, 0, &A0, sid; &48, 14, oid; distx; : Set Object X Translation Distance This command sets the X translation distance for an object. -Note that 3D translation of an object is independent of 2D translation of the bitmap -belonging to the render primitive. +Note that 3D translation of an object is independent of 2D translation of the the rendered bitmap. ## Set Object Y Translation Distance VDU 23, 0, &A0, sid; &48, 15, oid; disty; : Set Object Y Translation Distance This command sets the Y translation distance for an object. -Note that 3D translation of an object is independent of 2D translation of the bitmap -belonging to the render primitive. +Note that 3D translation of an object is independent of 2D translation of the the rendered bitmap. ## Set Object Z Translation Distance VDU 23, 0, &A0, sid; &48, 16, oid; distz; : Set Object Z Translation Distance This command sets the Z translation distance for an object. -Note that 3D translation of an object is independent of 2D translation of the bitmap -belonging to the render primitive. +Note that 3D translation of an object is independent of 2D translation of the the rendered bitmap. ## Set Object XYZ Translation Distances VDU 23, 0, &A0, sid; &48, 17, oid; distx; disty; distz; : Set Object XYZ Translation Distances This command sets the X, Y, and Z translation distances for an object. -Note that 3D translation of an object is independent of 2D translation of the bitmap -belonging to the render primitive. +Note that 3D translation of an object is independent of 2D translation of the the rendered bitmap. + +## Set Camera X Rotation Angle +VDU 23, 0, &A0, sid; &48, 18, oid; anglex; : Set Camera X Rotation Angle + +This command sets the X rotation angle for the camera. + +## Set Camera Y Rotation Angle +VDU 23, 0, &A0, sid; &48, 19, oid; angley; : Set Camera Y Rotation Angle + +This command sets the Y rotation angle for the camera. + +## Set Camera Z Rotation Angle +VDU 23, 0, &A0, sid; &48, 20, oid; anglez; : Set Camera Z Rotation Angle + +This command sets the Z rotation angle for the camera. + +## Set Camera XYZ Rotation Angles +VDU 23, 0, &A0, sid; &48, 21, oid; anglex; angley; anglez; : Set Camera XYZ Rotation Angles + +This command sets the X, Y, and Z rotation angles for the camera. + +## Set Camera X Translation Distance +VDU 23, 0, &A0, sid; &48, 22, oid; distx; : Set Camera X Translation Distance + +This command sets the X translation distance for the camera. +Note that 3D translation of the camera is independent of 2D translation of the the rendered bitmap. + +## Set Camera Y Translation Distance +VDU 23, 0, &A0, sid; &48, 23, oid; disty; : Set Camera Y Translation Distance + +This command sets the Y translation distance for the camera. +Note that 3D translation of the camera is independent of 2D translation of the the rendered bitmap. + +## Set Camera Z Translation Distance +VDU 23, 0, &A0, sid; &48, 24, oid; distz; : Set Camera Z Translation Distance + +This command sets the Z translation distance for the camera. +Note that 3D translation of the camera is independent of 2D translation of the the rendered bitmap. + +## Set Camera XYZ Translation Distances +VDU 23, 0, &A0, sid; &48, 25, oid; distx; disty; distz; : Set Camera XYZ Translation Distances + +This command sets the X, Y, and Z translation distances for the camera. +Note that 3D translation of the camera is independent of 2D translation of the the rendered bitmap. + +## Set Scene X Scale Factor +VDU 23, 0, &A0, sid; &48, 26, oid; scalex; : Set Scene X Scale Factor + +This command sets the X scale factor for the scene. + +## Set Scene Y Scale Factor +VDU 23, 0, &A0, sid; &48, 27, oid; scaley; : Set Scene Y Scale Factor + +This command sets the Y scale factor for the scene. + +## Set Scene Z Scale Factor +VDU 23, 0, &A0, sid; &48, 28, oid; scalez; : Set Scene Z Scale Factor + +This command sets the Z scale factor for the scene. + +## Set Scene XYZ Scale Factors +VDU 23, 0, &A0, sid; &48, 29, oid; scalex; scaley; scalez; : Set Scene XYZ Scale Factors + +This command sets the X, Y, and Z scale factors for the scene. + +## Set Scene X Rotation Angle +VDU 23, 0, &A0, sid; &48, 30, oid; anglex; : Set Scene X Rotation Angle + +This command sets the X rotation angle for the scene. + +## Set Scene Y Rotation Angle +VDU 23, 0, &A0, sid; &48, 31, oid; angley; : Set Scene Y Rotation Angle + +This command sets the Y rotation angle for the scene. + +## Set Scene Z Rotation Angle +VDU 23, 0, &A0, sid; &48, 32, oid; anglez; : Set Scene Z Rotation Angle + +This command sets the Z rotation angle for the scene. + +## Set Scene XYZ Rotation Angles +VDU 23, 0, &A0, sid; &48, 33, oid; anglex; angley; anglez; : Set Scene XYZ Rotation Angles + +This command sets the X, Y, and Z rotation angles for the scene. + +## Set Scene X Translation Distance +VDU 23, 0, &A0, sid; &48, 34, oid; distx; : Set Scene X Translation Distance + +This command sets the X translation distance for the scene. +Note that 3D translation of the scene is independent of 2D translation of the the rendered bitmap. + +## Set Scene Y Translation Distance +VDU 23, 0, &A0, sid; &48, 35, oid; disty; : Set Scene Y Translation Distance + +This command sets the Y translation distance for the scene. +Note that 3D translation of the scene is independent of 2D translation of the the rendered bitmap. + +## Set Scene Z Translation Distance +VDU 23, 0, &A0, sid; &48, 36, oid; distz; : Set Scene Z Translation Distance + +This command sets the Z translation distance for the scene. +Note that 3D translation of the scene is independent of 2D translation of the the rendered bitmap. + +## Set Scene XYZ Translation Distances +VDU 23, 0, &A0, sid; &48, 37, oid; distx; disty; distz; : Set Scene XYZ Translation Distances + +This command sets the X, Y, and Z translation distances for the scene. +Note that 3D translation of the scene is independent of 2D translation of the the rendered bitmap. ## Render To Bitmap -VDU 23, 0, &A0, sid; &48, 18, bmid; : Render To Bitmap +VDU 23, 0, &A0, sid; &48, 38, bmid; : Render To Bitmap This command uses information provided by the above commands to render the 3D scene onto the specified bitmap. This command must be used in @@ -254,7 +366,7 @@ order to perform the render operation; it does not happen automatically, commands change some of the render parameters. ## Delete Control Structure -VDU 23, 0, &A0, sid; &48, 19 : Delete Control Structure
+VDU 23, 0, &A0, sid; &48, 39 : Delete Control Structure
This command deinitializes an existing control structure, assuming that it exists in the designated buffer. The buffer is subsequently diff --git a/video/pingo_3d.h b/video/pingo_3d.h index a62f6cba..6c9d6af5 100644 --- a/video/pingo_3d.h +++ b/video/pingo_3d.h @@ -137,7 +137,8 @@ typedef struct tag_Pingo3dControl { p3d::PingoDepth* m_zeta; // Zeta buffer for depth information uint16_t m_width; // Width of final render in pixels uint16_t m_height; // Height of final render in pixels - Transformable m_camera; // Camera settings + Transformable m_camera; // Camera transformation settings + Transformable m_scene; // Scene transformation settings std::map* m_meshes; // Map of meshes for use by objects std::map* m_objects; // Map of textured objects that use meshes and have transforms @@ -154,6 +155,7 @@ typedef struct tag_Pingo3dControl { m_width = width; m_height = height; m_camera.initialize_scale(); + m_scene.initialize_scale(); auto frame_size = (uint32_t) width * (uint32_t) height; @@ -213,20 +215,27 @@ typedef struct tag_Pingo3dControl { case 15: set_object_y_translation_distance(); break; case 16: set_object_z_translation_distance(); break; case 17: set_object_xyz_translation_distances(); break; - - case 18: set_camera_x_scale_factor(); break; - case 19: set_camera_y_scale_factor(); break; - case 20: set_camera_z_scale_factor(); break; - case 21: set_camera_xyz_scale_factors(); break; - case 22: set_camera_x_rotation_angle(); break; - case 23: set_camera_y_rotation_angle(); break; - case 24: set_camera_z_rotation_angle(); break; - case 25: set_camera_xyz_rotation_angles(); break; - case 26: set_camera_x_translation_distance(); break; - case 27: set_camera_y_translation_distance(); break; - case 28: set_camera_z_translation_distance(); break; - case 29: set_camera_xyz_translation_distances(); break; - case 30: render_to_bitmap(); break; + case 18: set_camera_x_rotation_angle(); break; + case 19: set_camera_y_rotation_angle(); break; + case 20: set_camera_z_rotation_angle(); break; + case 21: set_camera_xyz_rotation_angles(); break; + case 22: set_camera_x_translation_distance(); break; + case 23: set_camera_y_translation_distance(); break; + case 24: set_camera_z_translation_distance(); break; + case 25: set_camera_xyz_translation_distances(); break; + case 26: set_scene_x_scale_factor(); break; + case 27: set_scene_y_scale_factor(); break; + case 28: set_scene_z_scale_factor(); break; + case 29: set_scene_xyz_scale_factors(); break; + case 30: set_scene_x_rotation_angle(); break; + case 31: set_scene_y_rotation_angle(); break; + case 32: set_scene_z_rotation_angle(); break; + case 33: set_scene_xyz_rotation_angles(); break; + case 34: set_scene_x_translation_distance(); break; + case 35: set_scene_y_translation_distance(); break; + case 36: set_scene_z_translation_distance(); break; + case 37: set_scene_xyz_translation_distances(); break; + case 38: render_to_bitmap(); break; } } @@ -579,68 +588,28 @@ typedef struct tag_Pingo3dControl { } } - // VDU 23, 0, &A0, sid; &48, 18, oid; scalex; : Set Camera X Scale Factor - void set_camera_x_scale_factor() { - auto value = m_proc->readWord_t(); - if (value >= 0) { - m_camera.m_scale.x = convert_scale_value(value); - m_camera.m_modified = true; - } - } - - // VDU 23, 0, &A0, sid; &48, 19, oid; scaley; : Set Camera Y Scale Factor - void set_camera_y_scale_factor() { - auto value = m_proc->readWord_t(); - if (value >= 0) { - m_camera.m_scale.y = convert_scale_value(value); - m_camera.m_modified = true; - } - } - - // VDU 23, 0, &A0, sid; &48, 20, oid; scalez; : Set Camera Z Scale Factor - void set_camera_z_scale_factor() { - auto value = m_proc->readWord_t(); - if (value >= 0) { - m_camera.m_scale.y = convert_scale_value(value); - m_camera.m_modified = true; - } - } - - // VDU 23, 0, &A0, sid; &48, 21, oid; scalex; scaley; scalez : Set Camera XYZ Scale Factors - void set_camera_xyz_scale_factors() { - auto valuex = m_proc->readWord_t(); - auto valuey = m_proc->readWord_t(); - auto valuez = m_proc->readWord_t(); - if ((valuex >= 0) && (valuey >= 0) && (valuez >= 0)) { - m_camera.m_scale.x = convert_scale_value(valuex); - m_camera.m_scale.y = convert_scale_value(valuey); - m_camera.m_scale.z = convert_scale_value(valuez); - m_camera.m_modified = true; - } - } - - // VDU 23, 0, &A0, sid; &48, 22, oid; anglex; : Set Camera X Rotation Angle + // VDU 23, 0, &A0, sid; &48, 18, oid; anglex; : Set Camera X Rotation Angle void set_camera_x_rotation_angle() { auto value = m_proc->readWord_t(); m_camera.m_rotation.x = convert_rotation_value(value); m_camera.m_modified = true; } - // VDU 23, 0, &A0, sid; &48, 23, oid; angley; : Set Camera Y Rotation Angle + // VDU 23, 0, &A0, sid; &48, 19, oid; angley; : Set Camera Y Rotation Angle void set_camera_y_rotation_angle() { auto value = m_proc->readWord_t(); m_camera.m_rotation.y = convert_rotation_value(value); m_camera.m_modified = true; } - // VDU 23, 0, &A0, sid; &48, 24, oid; anglez; : Set Camera Z Rotation Angle + // VDU 23, 0, &A0, sid; &48, 20, oid; anglez; : Set Camera Z Rotation Angle void set_camera_z_rotation_angle() { auto value = m_proc->readWord_t(); m_camera.m_rotation.z = convert_rotation_value(value); m_camera.m_modified = true; } - // VDU 23, 0, &A0, sid; &48, 25, oid; anglex; angley; anglez; : Set Camera XYZ Rotation Angles + // VDU 23, 0, &A0, sid; &48, 21, oid; anglex; angley; anglez; : Set Camera XYZ Rotation Angles void set_camera_xyz_rotation_angles() { auto valuex = m_proc->readWord_t(); auto valuey = m_proc->readWord_t(); @@ -651,28 +620,28 @@ typedef struct tag_Pingo3dControl { m_camera.m_modified = true; } - // VDU 23, 0, &A0, sid; &48, 26, oid; distx; : Set Camera X Translation Distance + // VDU 23, 0, &A0, sid; &48, 22, oid; distx; : Set Camera X Translation Distance void set_camera_x_translation_distance() { auto value = m_proc->readWord_t(); m_camera.m_translation.x = convert_translation_value(value); m_camera.m_modified = true; } - // VDU 23, 0, &A0, sid; &48, 27, oid; disty; : Set Camera Y Translation Distance + // VDU 23, 0, &A0, sid; &48, 23, oid; disty; : Set Camera Y Translation Distance void set_camera_y_translation_distance() { auto value = m_proc->readWord_t(); m_camera.m_translation.y = convert_translation_value(value); m_camera.m_modified = true; } - // VDU 23, 0, &A0, sid; &48, 28, oid; distz; : Set Camera Z Translation Distance + // VDU 23, 0, &A0, sid; &48, 24, oid; distz; : Set Camera Z Translation Distance void set_camera_z_translation_distance() { auto value = m_proc->readWord_t(); m_camera.m_translation.z = convert_translation_value(value); m_camera.m_modified = true; } - // VDU 23, 0, &A0, sid; &48, 29, oid; distx; disty; distz : Set Camera XYZ Translation Distances + // VDU 23, 0, &A0, sid; &48, 25, oid; distx; disty; distz : Set Camera XYZ Translation Distances void set_camera_xyz_translation_distances() { auto valuex = m_proc->readWord_t(); auto valuey = m_proc->readWord_t(); @@ -683,7 +652,111 @@ typedef struct tag_Pingo3dControl { m_camera.m_modified = true; } - // VDU 23, 0, &A0, sid; &48, 30, bmid; : Render To Bitmap + // VDU 23, 0, &A0, sid; &48, 26, oid; scalex; : Set Scene X Scale Factor + void set_scene_x_scale_factor() { + auto value = m_proc->readWord_t(); + if (value >= 0) { + m_scene.m_scale.x = convert_scale_value(value); + m_scene.m_modified = true; + } + } + + // VDU 23, 0, &A0, sid; &48, 27, oid; scaley; : Set Scene Y Scale Factor + void set_scene_y_scale_factor() { + auto value = m_proc->readWord_t(); + if (value >= 0) { + m_scene.m_scale.y = convert_scale_value(value); + m_scene.m_modified = true; + } + } + + // VDU 23, 0, &A0, sid; &48, 28, oid; scalez; : Set Scene Z Scale Factor + void set_scene_z_scale_factor() { + auto value = m_proc->readWord_t(); + if (value >= 0) { + m_scene.m_scale.y = convert_scale_value(value); + m_scene.m_modified = true; + } + } + + // VDU 23, 0, &A0, sid; &48, 29, oid; scalex; scaley; scalez : Set Scene XYZ Scale Factors + void set_scene_xyz_scale_factors() { + auto valuex = m_proc->readWord_t(); + auto valuey = m_proc->readWord_t(); + auto valuez = m_proc->readWord_t(); + if ((valuex >= 0) && (valuey >= 0) && (valuez >= 0)) { + m_scene.m_scale.x = convert_scale_value(valuex); + m_scene.m_scale.y = convert_scale_value(valuey); + m_scene.m_scale.z = convert_scale_value(valuez); + m_scene.m_modified = true; + } + } + + // VDU 23, 0, &A0, sid; &48, 30, oid; anglex; : Set Scene X Rotation Angle + void set_scene_x_rotation_angle() { + auto value = m_proc->readWord_t(); + m_scene.m_rotation.x = convert_rotation_value(value); + m_scene.m_modified = true; + } + + // VDU 23, 0, &A0, sid; &48, 31, oid; angley; : Set Scene Y Rotation Angle + void set_scene_y_rotation_angle() { + auto value = m_proc->readWord_t(); + m_scene.m_rotation.y = convert_rotation_value(value); + m_scene.m_modified = true; + } + + // VDU 23, 0, &A0, sid; &48, 32, oid; anglez; : Set Scene Z Rotation Angle + void set_scene_z_rotation_angle() { + auto value = m_proc->readWord_t(); + m_scene.m_rotation.z = convert_rotation_value(value); + m_scene.m_modified = true; + } + + // VDU 23, 0, &A0, sid; &48, 33, oid; anglex; angley; anglez; : Set Scene XYZ Rotation Angles + void set_scene_xyz_rotation_angles() { + auto valuex = m_proc->readWord_t(); + auto valuey = m_proc->readWord_t(); + auto valuez = m_proc->readWord_t(); + m_scene.m_rotation.x = convert_rotation_value(valuex); + m_scene.m_rotation.y = convert_rotation_value(valuey); + m_scene.m_rotation.z = convert_rotation_value(valuez); + m_scene.m_modified = true; + } + + // VDU 23, 0, &A0, sid; &48, 34, oid; distx; : Set Scene X Translation Distance + void set_scene_x_translation_distance() { + auto value = m_proc->readWord_t(); + m_scene.m_translation.x = convert_translation_value(value); + m_scene.m_modified = true; + } + + // VDU 23, 0, &A0, sid; &48, 35, oid; disty; : Set Scene Y Translation Distance + void set_scene_y_translation_distance() { + auto value = m_proc->readWord_t(); + m_scene.m_translation.y = convert_translation_value(value); + m_scene.m_modified = true; + } + + // VDU 23, 0, &A0, sid; &48, 36, oid; distz; : Set Scene Z Translation Distance + void set_scene_z_translation_distance() { + auto value = m_proc->readWord_t(); + m_scene.m_translation.z = convert_translation_value(value); + m_scene.m_modified = true; + } + + // VDU 23, 0, &A0, sid; &48, 37, oid; distx; disty; distz : Set Scene XYZ Translation Distances + void set_scene_xyz_translation_distances() { + auto valuex = m_proc->readWord_t(); + auto valuey = m_proc->readWord_t(); + auto valuez = m_proc->readWord_t(); + m_scene.m_translation.x = convert_translation_value(valuex); + m_scene.m_translation.y = convert_translation_value(valuey); + m_scene.m_translation.z = convert_translation_value(valuez); + m_scene.m_modified = true; + } + + // VDU 23, 0, &A0, sid; &48, 38, bmid; : Render To Bitmap void render_to_bitmap() { auto bmid = m_proc->readWord_t(); if (bmid < 0) { @@ -701,6 +774,7 @@ typedef struct tag_Pingo3dControl { if (!dst_pix) { debug_log("render_to_bitmap: output bitmap %u not found or invalid\n", bmid); + return; } //auto start = millis(); @@ -722,8 +796,6 @@ typedef struct tag_Pingo3dControl { sceneAddRenderable(&scene, p3d::object_as_renderable(&object->second.m_object)); } - p3d::F_TYPE phi = 0; - // Set the projection matrix renderer.camera_projection = p3d::mat4Perspective( 1, 2500.0, (p3d::F_TYPE)size.x / (p3d::F_TYPE)size.y, 0.6); @@ -735,9 +807,10 @@ typedef struct tag_Pingo3dControl { //m_camera.dump(); renderer.camera_view = m_camera.m_transform; - // Set the scene transformation matrix - scene.transform = p3d::mat4RotateY(phi); - phi += 0.01; + if (m_scene.m_modified) { + m_scene.compute_transformation_matrix(); + } + scene.transform = m_scene.m_transform; //debug_log("Frame data: %02hX %02hX %02hX %02hX\n", m_frame->r, m_frame->g, m_frame->b, m_frame->a); //debug_log("Destination: %02hX %02hX %02hX %02hX\n", dst_pix->r, dst_pix->g, dst_pix->b, dst_pix->a); diff --git a/video/vdu_buffered.h b/video/vdu_buffered.h index 9f1ffdae..244d3d4a 100644 --- a/video/vdu_buffered.h +++ b/video/vdu_buffered.h @@ -1734,20 +1734,28 @@ void VDUStreamProcessor::bufferDecompress(uint16_t bufferId, uint16_t sourceBuff // VDU 23, 0, &A0, sid; &48, 15, oid; disty; : Set Object Y Translation Distance // VDU 23, 0, &A0, sid; &48, 16, oid; distz; : Set Object Z Translation Distance // VDU 23, 0, &A0, sid; &48, 17, oid; distx; disty; distz : Set Object XYZ Translation Distances -// VDU 23, 0, &A0, sid; &48, 18, scalex; : Set Camera X Scale Factor -// VDU 23, 0, &A0, sid; &48, 19, scaley; : Set Camera Y Scale Factor -// VDU 23, 0, &A0, sid; &48, 20, scalez; : Set Camera Z Scale Factor -// VDU 23, 0, &A0, sid; &48, 21, scalex; scaley; scalez; : Set Camera XYZ Scale Factors -// VDU 23, 0, &A0, sid; &48, 22, anglex; : Set Camera X Rotation Angle -// VDU 23, 0, &A0, sid; &48, 23, angley; : Set Camera Y Rotation Angle -// VDU 23, 0, &A0, sid; &48, 24, anglez; : Set Camera Z Rotation Angle -// VDU 23, 0, &A0, sid; &48, 25, anglex; angley; anglez; : Set Camera XYZ Rotation Angles -// VDU 23, 0, &A0, sid; &48, 26, distx; : Set Camera X Translation Distance -// VDU 23, 0, &A0, sid; &48, 27, disty; : Set Camera Y Translation Distance -// VDU 23, 0, &A0, sid; &48, 28, distz; : Set Camera Z Translation Distance -// VDU 23, 0, &A0, sid; &48, 29, distx; disty; distz; : Set Camera XYZ Translation Distances -// VDU 23, 0, &A0, sid; &48, 30, bmid; : Render To Bitmap -// VDU 23, 0, &A0, sid; &48, 31 : Delete Control Structure +// VDU 23, 0, &A0, sid; &48, 18, anglex; : Set Camera X Rotation Angle +// VDU 23, 0, &A0, sid; &48, 19, angley; : Set Camera Y Rotation Angle +// VDU 23, 0, &A0, sid; &48, 20, anglez; : Set Camera Z Rotation Angle +// VDU 23, 0, &A0, sid; &48, 21, anglex; angley; anglez; : Set Camera XYZ Rotation Angles +// VDU 23, 0, &A0, sid; &48, 22, distx; : Set Camera X Translation Distance +// VDU 23, 0, &A0, sid; &48, 23, disty; : Set Camera Y Translation Distance +// VDU 23, 0, &A0, sid; &48, 24, distz; : Set Camera Z Translation Distance +// VDU 23, 0, &A0, sid; &48, 25, distx; disty; distz; : Set Camera XYZ Translation Distances +// VDU 23, 0, &A0, sid; &48, 26, scalex; : Set Scene X Scale Factor +// VDU 23, 0, &A0, sid; &48, 27, scaley; : Set Scene Y Scale Factor +// VDU 23, 0, &A0, sid; &48, 28, scalez; : Set Scene Z Scale Factor +// VDU 23, 0, &A0, sid; &48, 29, scalex; scaley; scalez; : Set Scene XYZ Scale Factors +// VDU 23, 0, &A0, sid; &48, 30, anglex; : Set Scene X Rotation Angle +// VDU 23, 0, &A0, sid; &48, 31, angley; : Set Scene Y Rotation Angle +// VDU 23, 0, &A0, sid; &48, 32, anglez; : Set Scene Z Rotation Angle +// VDU 23, 0, &A0, sid; &48, 33, anglex; angley; anglez; : Set Scene XYZ Rotation Angles +// VDU 23, 0, &A0, sid; &48, 34, distx; : Set Scene X Translation Distance +// VDU 23, 0, &A0, sid; &48, 35, disty; : Set Scene Y Translation Distance +// VDU 23, 0, &A0, sid; &48, 36, distz; : Set Scene Z Translation Distance +// VDU 23, 0, &A0, sid; &48, 37, distx; disty; distz; : Set Scene XYZ Translation Distances +// VDU 23, 0, &A0, sid; &48, 38, bmid; : Render To Bitmap +// VDU 23, 0, &A0, sid; &48, 39 : Delete Control Structure // void VDUStreamProcessor::bufferUsePingo3D(uint16_t bufferId) { auto subcmd = readByte_t(); @@ -1769,7 +1777,7 @@ void VDUStreamProcessor::bufferUsePingo3D(uint16_t bufferId) { } else { debug_log("bufferUsePingo3D: buffer %d missing width\n\r", bufferId); } - } else if (subcmd == 31) { + } else if (subcmd == 39) { // Deinitialize the control structure // Delete the buffer auto bufferIter = buffers.find(bufferId); From 40d0f31b15ff59c726ad9103503f41405d31846c Mon Sep 17 00:00:00 2001 From: Curtis Whitley Date: Mon, 10 Jun 2024 16:41:54 -0400 Subject: [PATCH 31/49] turn OFF DEBUG flag --- video/video.ino | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/video/video.ino b/video/video.ino index 5cac3c35..431843cb 100644 --- a/video/video.ino +++ b/video/video.ino @@ -50,7 +50,7 @@ #include #include -#define DEBUG 1 // Serial Debug Mode: 1 = enable +#define DEBUG 0 // Serial Debug Mode: 1 = enable #define SERIALBAUDRATE 115200 HardwareSerial DBGSerial(0); From 0f2fa9489ade7cf8f57cae92d719b2a489df8eb6 Mon Sep 17 00:00:00 2001 From: Curtis Whitley Date: Sat, 15 Jun 2024 21:29:32 -0400 Subject: [PATCH 32/49] fix typos --- video/pingo/vdu_pingo.md | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/video/pingo/vdu_pingo.md b/video/pingo/vdu_pingo.md index 0d3682a7..3bcc0d47 100644 --- a/video/pingo/vdu_pingo.md +++ b/video/pingo/vdu_pingo.md @@ -250,109 +250,109 @@ This command sets the X, Y, and Z translation distances for an object. Note that 3D translation of an object is independent of 2D translation of the the rendered bitmap. ## Set Camera X Rotation Angle -VDU 23, 0, &A0, sid; &48, 18, oid; anglex; : Set Camera X Rotation Angle +VDU 23, 0, &A0, sid; &48, 18, anglex; : Set Camera X Rotation Angle This command sets the X rotation angle for the camera. ## Set Camera Y Rotation Angle -VDU 23, 0, &A0, sid; &48, 19, oid; angley; : Set Camera Y Rotation Angle +VDU 23, 0, &A0, sid; &48, 19, angley; : Set Camera Y Rotation Angle This command sets the Y rotation angle for the camera. ## Set Camera Z Rotation Angle -VDU 23, 0, &A0, sid; &48, 20, oid; anglez; : Set Camera Z Rotation Angle +VDU 23, 0, &A0, sid; &48, 20, anglez; : Set Camera Z Rotation Angle This command sets the Z rotation angle for the camera. ## Set Camera XYZ Rotation Angles -VDU 23, 0, &A0, sid; &48, 21, oid; anglex; angley; anglez; : Set Camera XYZ Rotation Angles +VDU 23, 0, &A0, sid; &48, 21, anglex; angley; anglez; : Set Camera XYZ Rotation Angles This command sets the X, Y, and Z rotation angles for the camera. ## Set Camera X Translation Distance -VDU 23, 0, &A0, sid; &48, 22, oid; distx; : Set Camera X Translation Distance +VDU 23, 0, &A0, sid; &48, 22, distx; : Set Camera X Translation Distance This command sets the X translation distance for the camera. Note that 3D translation of the camera is independent of 2D translation of the the rendered bitmap. ## Set Camera Y Translation Distance -VDU 23, 0, &A0, sid; &48, 23, oid; disty; : Set Camera Y Translation Distance +VDU 23, 0, &A0, sid; &48, 23, disty; : Set Camera Y Translation Distance This command sets the Y translation distance for the camera. Note that 3D translation of the camera is independent of 2D translation of the the rendered bitmap. ## Set Camera Z Translation Distance -VDU 23, 0, &A0, sid; &48, 24, oid; distz; : Set Camera Z Translation Distance +VDU 23, 0, &A0, sid; &48, 24, distz; : Set Camera Z Translation Distance This command sets the Z translation distance for the camera. Note that 3D translation of the camera is independent of 2D translation of the the rendered bitmap. ## Set Camera XYZ Translation Distances -VDU 23, 0, &A0, sid; &48, 25, oid; distx; disty; distz; : Set Camera XYZ Translation Distances +VDU 23, 0, &A0, sid; &48, 25, distx; disty; distz; : Set Camera XYZ Translation Distances This command sets the X, Y, and Z translation distances for the camera. Note that 3D translation of the camera is independent of 2D translation of the the rendered bitmap. ## Set Scene X Scale Factor -VDU 23, 0, &A0, sid; &48, 26, oid; scalex; : Set Scene X Scale Factor +VDU 23, 0, &A0, sid; &48, 26, scalex; : Set Scene X Scale Factor This command sets the X scale factor for the scene. ## Set Scene Y Scale Factor -VDU 23, 0, &A0, sid; &48, 27, oid; scaley; : Set Scene Y Scale Factor +VDU 23, 0, &A0, sid; &48, 27, scaley; : Set Scene Y Scale Factor This command sets the Y scale factor for the scene. ## Set Scene Z Scale Factor -VDU 23, 0, &A0, sid; &48, 28, oid; scalez; : Set Scene Z Scale Factor +VDU 23, 0, &A0, sid; &48, 28, scalez; : Set Scene Z Scale Factor This command sets the Z scale factor for the scene. ## Set Scene XYZ Scale Factors -VDU 23, 0, &A0, sid; &48, 29, oid; scalex; scaley; scalez; : Set Scene XYZ Scale Factors +VDU 23, 0, &A0, sid; &48, 29, scalex; scaley; scalez; : Set Scene XYZ Scale Factors This command sets the X, Y, and Z scale factors for the scene. ## Set Scene X Rotation Angle -VDU 23, 0, &A0, sid; &48, 30, oid; anglex; : Set Scene X Rotation Angle +VDU 23, 0, &A0, sid; &48, 30, anglex; : Set Scene X Rotation Angle This command sets the X rotation angle for the scene. ## Set Scene Y Rotation Angle -VDU 23, 0, &A0, sid; &48, 31, oid; angley; : Set Scene Y Rotation Angle +VDU 23, 0, &A0, sid; &48, 31, angley; : Set Scene Y Rotation Angle This command sets the Y rotation angle for the scene. ## Set Scene Z Rotation Angle -VDU 23, 0, &A0, sid; &48, 32, oid; anglez; : Set Scene Z Rotation Angle +VDU 23, 0, &A0, sid; &48, 32, anglez; : Set Scene Z Rotation Angle This command sets the Z rotation angle for the scene. ## Set Scene XYZ Rotation Angles -VDU 23, 0, &A0, sid; &48, 33, oid; anglex; angley; anglez; : Set Scene XYZ Rotation Angles +VDU 23, 0, &A0, sid; &48, 33, anglex; angley; anglez; : Set Scene XYZ Rotation Angles This command sets the X, Y, and Z rotation angles for the scene. ## Set Scene X Translation Distance -VDU 23, 0, &A0, sid; &48, 34, oid; distx; : Set Scene X Translation Distance +VDU 23, 0, &A0, sid; &48, 34, distx; : Set Scene X Translation Distance This command sets the X translation distance for the scene. Note that 3D translation of the scene is independent of 2D translation of the the rendered bitmap. ## Set Scene Y Translation Distance -VDU 23, 0, &A0, sid; &48, 35, oid; disty; : Set Scene Y Translation Distance +VDU 23, 0, &A0, sid; &48, 35, disty; : Set Scene Y Translation Distance This command sets the Y translation distance for the scene. Note that 3D translation of the scene is independent of 2D translation of the the rendered bitmap. ## Set Scene Z Translation Distance -VDU 23, 0, &A0, sid; &48, 36, oid; distz; : Set Scene Z Translation Distance +VDU 23, 0, &A0, sid; &48, 36, distz; : Set Scene Z Translation Distance This command sets the Z translation distance for the scene. Note that 3D translation of the scene is independent of 2D translation of the the rendered bitmap. ## Set Scene XYZ Translation Distances -VDU 23, 0, &A0, sid; &48, 37, oid; distx; disty; distz; : Set Scene XYZ Translation Distances +VDU 23, 0, &A0, sid; &48, 37, distx; disty; distz; : Set Scene XYZ Translation Distances This command sets the X, Y, and Z translation distances for the scene. Note that 3D translation of the scene is independent of 2D translation of the the rendered bitmap. From 4e22eccdb7dbba9754ebcdf2160cbea6608bf794 Mon Sep 17 00:00:00 2001 From: Curtis Whitley Date: Mon, 17 Jun 2024 11:41:38 -0400 Subject: [PATCH 33/49] change buffer code from 48h to 49h --- video/pingo/assets/teapot.bas | 22 ++--- video/pingo/vdu_pingo.md | 160 +++++++++++++++++----------------- 2 files changed, 91 insertions(+), 91 deletions(-) diff --git a/video/pingo/assets/teapot.bas b/video/pingo/assets/teapot.bas index 858b6930..327d461b 100644 --- a/video/pingo/assets/teapot.bas +++ b/video/pingo/assets/teapot.bas @@ -628,15 +628,15 @@ 6280 sid%=100: mid%=1: oid%=1: bmid1%=101: bmid2%=102 6290 PRINT "Creating control structure" 6300 scene_width%=96: scene_height%=96 - 6310 VDU 23,0, &A0, sid%; &48, 0, scene_width%; scene_height%; : REM Create Control Structure + 6310 VDU 23,0, &A0, sid%; &49, 0, scene_width%; scene_height%; : REM Create Control Structure 6320 f=32767.0/256.0 6330 distx=0*f: disty=2*f: distz=-20*f - 6340 VDU 23,0, &A0, sid%; &48, 25, distx; disty; distz; : REM Set Camera XYZ Translation Distances + 6340 VDU 23,0, &A0, sid%; &49, 25, distx; disty; distz; : REM Set Camera XYZ Translation Distances 6350 pi2=PI*2.0: f=32767.0/pi2 6360 anglex=-0.4*f - 6370 VDU 23,0, &A0, sid%; &48, 18, anglex; : REM Set Camera X Rotation Angle + 6370 VDU 23,0, &A0, sid%; &49, 18, anglex; : REM Set Camera X Rotation Angle 6380 PRINT "Sending vertices using factor ";factor - 6390 VDU 23,0, &A0, sid%; &48, 1, mid%; teapot_vertices%; : REM Define Mesh Vertices + 6390 VDU 23,0, &A0, sid%; &49, 1, mid%; teapot_vertices%; : REM Define Mesh Vertices 6400 FOR i%=0 TO total_coords%-1 6410 val%=vertices(i%)*factor 6420 VDU val%; @@ -644,7 +644,7 @@ 6440 IF TIME-T%<1 GOTO 6440 6450 NEXT i% 6460 PRINT "Reading and sending vertex indexes" - 6470 VDU 23,0, &A0, sid%; &48, 2, mid%; teapot_vertices%; : REM Set Mesh Vertex Indexes + 6470 VDU 23,0, &A0, sid%; &49, 2, mid%; teapot_vertices%; : REM Set Mesh Vertex Indexes 6480 FOR i%=0 TO teapot_vertices%-1 6490 READ val% 6500 VDU val%; @@ -652,8 +652,8 @@ 6520 IF TIME-T%<1 GOTO 6520 6530 NEXT i% 6540 PRINT "Sending texture coordinate indexes" - 6550 VDU 23,0, &A0, sid%; &48, 3, mid%; 1; 32768; 32768; : REM Define Texture Coordinates - 6560 VDU 23,0, &A0, sid%; &48, 4, mid%; teapot_vertices%; : REM Set Texture Coordinate Indexes + 6550 VDU 23,0, &A0, sid%; &49, 3, mid%; 1; 32768; 32768; : REM Define Texture Coordinates + 6560 VDU 23,0, &A0, sid%; &49, 4, mid%; teapot_vertices%; : REM Set Texture Coordinate Indexes 6570 FOR i%=0 TO teapot_vertices%-1 6580 VDU 0; 6590 NEXT i% @@ -662,10 +662,10 @@ 6620 PRINT "Setting texture pixel" 6630 VDU 23, 27, 1, 1; 1; &55, &AA, &FF, &C0 : REM Set a pixel in the bitmap 6640 PRINT "Create 3D object" - 6650 VDU 23,0, &A0, sid%; &48, 5, oid%; mid%; bmid1%+64000; : REM Create Object + 6650 VDU 23,0, &A0, sid%; &49, 5, oid%; mid%; bmid1%+64000; : REM Create Object 6660 PRINT "Scale object" 6670 scale=6.0*256.0 - 6680 VDU 23, 0, &A0, sid%; &48, 9, oid%; scale; scale; scale; : REM Set Object XYZ Scale Factors + 6680 VDU 23, 0, &A0, sid%; &49, 9, oid%; scale; scale; scale; : REM Set Object XYZ Scale Factors 6690 PRINT "Create target bitmap" 6700 VDU 23, 27, 0, bmid2% : REM Select output bitmap 6710 VDU 23, 27, 2, scene_width%; scene_height%; &0000; &00C0; : REM Create solid color bitmap @@ -677,7 +677,7 @@ 6770 VDU 22, 136: REM 320x240x64 6780 VDU 23, 0, &C0, 0: REM Normal coordinates 6790 CLG - 6800 VDU 23, 0, &A0, sid%; &48, 38, bmid2%+64000; : REM Render To Bitmap + 6800 VDU 23, 0, &A0, sid%; &49, 38, bmid2%+64000; : REM Render To Bitmap 6810 VDU 23, 27, 3, 50; 50; : REM Display output bitmap 6820 VDU 23, 0, &C3: REM Flip buffer 6830 *FX 19 @@ -685,5 +685,5 @@ 6850 rotatey=rotatey+incy: IF rotatey>=pi2 THEN rotatey=rotatey-pi2 6860 rotatez=rotatez+incz: IF rotatez>=pi2 THEN rotatez=rotatez-pi2 6870 rx=rotatex*factor: ry=rotatey*factor: rz=rotatez*factor - 6880 VDU 23, 0, &A0, sid%; &48, 13, oid%; rx; ry; rz; : REM Set Object XYZ Rotation Angles + 6880 VDU 23, 0, &A0, sid%; &49, 13, oid%; rx; ry; rz; : REM Set Object XYZ Rotation Angles 6890 GOTO 6790 diff --git a/video/pingo/vdu_pingo.md b/video/pingo/vdu_pingo.md index 3bcc0d47..16250961 100644 --- a/video/pingo/vdu_pingo.md +++ b/video/pingo/vdu_pingo.md @@ -87,49 +87,49 @@ VDU ... PDX; PDY; PDZ; ... ## Overview of Commands -VDU 23, 0, &A0, sid; &48, 0, w; h; : Create Control Structure
-VDU 23, 0, &A0, sid; &48, 1, mid; n; x0; y0; z0; ... : Define Mesh Vertices
-VDU 23, 0, &A0, sid; &48, 2, mid; n; i0; ... : Set Mesh Vertex Indexes
-VDU 23, 0, &A0, sid; &48, 3, mid; n; u0; v0; ... : Define Texture Coordinates
-VDU 23, 0, &A0, sid; &48, 4, mid; n; i0; ... : Set Texture Coordinate Indexes
-VDU 23, 0, &A0, sid; &48, 5, oid; mid; bmid; : Create Object
-VDU 23, 0, &A0, sid; &48, 6, oid; scalex; : Set Object X Scale Factor
-VDU 23, 0, &A0, sid; &48, 7, oid; scaley; : Set Object Y Scale Factor
-VDU 23, 0, &A0, sid; &48, 8, oid; scalez; : Set Object Z Scale Factor
-VDU 23, 0, &A0, sid; &48, 9, oid; scalex; scaley; scalez; : Set Object XYZ Scale Factors
-VDU 23, 0, &A0, sid; &48, 10, oid; anglex; : Set Object X Rotation Angle
-VDU 23, 0, &A0, sid; &48, 11, oid; angley; : Set Object Y Rotation Angle
-VDU 23, 0, &A0, sid; &48, 12, oid; anglez; : Set Object Z Rotation Angle
-VDU 23, 0, &A0, sid; &48, 13, oid; anglex; angley; anglez; : Set Object XYZ Rotation Angles
-VDU 23, 0, &A0, sid; &48, 14, oid; distx; : Set Object X Translation Distance
-VDU 23, 0, &A0, sid; &48, 15, oid; disty; : Set Object Y Translation Distance
-VDU 23, 0, &A0, sid; &48, 16, oid; distz; : Set Object Z Translation Distance
-VDU 23, 0, &A0, sid; &48, 17, oid; distx; disty; distz; : Set Object XYZ Translation Distances
-VDU 23, 0, &A0, sid; &48, 18, anglex; : Set Camera X Rotation Angle
-VDU 23, 0, &A0, sid; &48, 19, angley; : Set Camera Y Rotation Angle
-VDU 23, 0, &A0, sid; &48, 20, anglez; : Set Camera Z Rotation Angle
-VDU 23, 0, &A0, sid; &48, 21, anglex; angley; anglez; : Set Camera XYZ Rotation Angles
-VDU 23, 0, &A0, sid; &48, 22, distx; : Set Camera X Translation Distance
-VDU 23, 0, &A0, sid; &48, 23, disty; : Set Camera Y Translation Distance
-VDU 23, 0, &A0, sid; &48, 24, distz; : Set Camera Z Translation Distance
-VDU 23, 0, &A0, sid; &48, 25, distx; disty; distz; : Set Camera XYZ Translation Distances
-VDU 23, 0, &A0, sid; &48, 26, scalex; : Set Scene X Scale Factor
-VDU 23, 0, &A0, sid; &48, 27, scaley; : Set Scene Y Scale Factor
-VDU 23, 0, &A0, sid; &48, 28, scalez; : Set Scene Z Scale Factor
-VDU 23, 0, &A0, sid; &48, 29, scalex; scaley; scalez; : Set Scene XYZ Scale Factors
-VDU 23, 0, &A0, sid; &48, 30, anglex; : Set Scene X Rotation Angle
-VDU 23, 0, &A0, sid; &48, 31, angley; : Set Scene Y Rotation Angle
-VDU 23, 0, &A0, sid; &48, 32, anglez; : Set Scene Z Rotation Angle
-VDU 23, 0, &A0, sid; &48, 33, anglex; angley; anglez; : Set Scene XYZ Rotation Angles
-VDU 23, 0, &A0, sid; &48, 34, distx; : Set Scene X Translation Distance
-VDU 23, 0, &A0, sid; &48, 35, disty; : Set Scene Y Translation Distance
-VDU 23, 0, &A0, sid; &48, 36, distz; : Set Scene Z Translation Distance
-VDU 23, 0, &A0, sid; &48, 37, distx; disty; distz; : Set Scene XYZ Translation Distances
-VDU 23, 0, &A0, sid; &48, 38, bmid; : Render To Bitmap
-VDU 23, 0, &A0, sid; &48, 39 : Delete Control Structure
+VDU 23, 0, &A0, sid; &49, 0, w; h; : Create Control Structure
+VDU 23, 0, &A0, sid; &49, 1, mid; n; x0; y0; z0; ... : Define Mesh Vertices
+VDU 23, 0, &A0, sid; &49, 2, mid; n; i0; ... : Set Mesh Vertex Indexes
+VDU 23, 0, &A0, sid; &49, 3, mid; n; u0; v0; ... : Define Texture Coordinates
+VDU 23, 0, &A0, sid; &49, 4, mid; n; i0; ... : Set Texture Coordinate Indexes
+VDU 23, 0, &A0, sid; &49, 5, oid; mid; bmid; : Create Object
+VDU 23, 0, &A0, sid; &49, 6, oid; scalex; : Set Object X Scale Factor
+VDU 23, 0, &A0, sid; &49, 7, oid; scaley; : Set Object Y Scale Factor
+VDU 23, 0, &A0, sid; &49, 8, oid; scalez; : Set Object Z Scale Factor
+VDU 23, 0, &A0, sid; &49, 9, oid; scalex; scaley; scalez; : Set Object XYZ Scale Factors
+VDU 23, 0, &A0, sid; &49, 10, oid; anglex; : Set Object X Rotation Angle
+VDU 23, 0, &A0, sid; &49, 11, oid; angley; : Set Object Y Rotation Angle
+VDU 23, 0, &A0, sid; &49, 12, oid; anglez; : Set Object Z Rotation Angle
+VDU 23, 0, &A0, sid; &49, 13, oid; anglex; angley; anglez; : Set Object XYZ Rotation Angles
+VDU 23, 0, &A0, sid; &49, 14, oid; distx; : Set Object X Translation Distance
+VDU 23, 0, &A0, sid; &49, 15, oid; disty; : Set Object Y Translation Distance
+VDU 23, 0, &A0, sid; &49, 16, oid; distz; : Set Object Z Translation Distance
+VDU 23, 0, &A0, sid; &49, 17, oid; distx; disty; distz; : Set Object XYZ Translation Distances
+VDU 23, 0, &A0, sid; &49, 18, anglex; : Set Camera X Rotation Angle
+VDU 23, 0, &A0, sid; &49, 19, angley; : Set Camera Y Rotation Angle
+VDU 23, 0, &A0, sid; &49, 20, anglez; : Set Camera Z Rotation Angle
+VDU 23, 0, &A0, sid; &49, 21, anglex; angley; anglez; : Set Camera XYZ Rotation Angles
+VDU 23, 0, &A0, sid; &49, 22, distx; : Set Camera X Translation Distance
+VDU 23, 0, &A0, sid; &49, 23, disty; : Set Camera Y Translation Distance
+VDU 23, 0, &A0, sid; &49, 24, distz; : Set Camera Z Translation Distance
+VDU 23, 0, &A0, sid; &49, 25, distx; disty; distz; : Set Camera XYZ Translation Distances
+VDU 23, 0, &A0, sid; &49, 26, scalex; : Set Scene X Scale Factor
+VDU 23, 0, &A0, sid; &49, 27, scaley; : Set Scene Y Scale Factor
+VDU 23, 0, &A0, sid; &49, 28, scalez; : Set Scene Z Scale Factor
+VDU 23, 0, &A0, sid; &49, 29, scalex; scaley; scalez; : Set Scene XYZ Scale Factors
+VDU 23, 0, &A0, sid; &49, 30, anglex; : Set Scene X Rotation Angle
+VDU 23, 0, &A0, sid; &49, 31, angley; : Set Scene Y Rotation Angle
+VDU 23, 0, &A0, sid; &49, 32, anglez; : Set Scene Z Rotation Angle
+VDU 23, 0, &A0, sid; &49, 33, anglex; angley; anglez; : Set Scene XYZ Rotation Angles
+VDU 23, 0, &A0, sid; &49, 34, distx; : Set Scene X Translation Distance
+VDU 23, 0, &A0, sid; &49, 35, disty; : Set Scene Y Translation Distance
+VDU 23, 0, &A0, sid; &49, 36, distz; : Set Scene Z Translation Distance
+VDU 23, 0, &A0, sid; &49, 37, distx; disty; distz; : Set Scene XYZ Translation Distances
+VDU 23, 0, &A0, sid; &49, 38, bmid; : Render To Bitmap
+VDU 23, 0, &A0, sid; &49, 39 : Delete Control Structure
## Create Control Structure -VDU 23, 0, &A0, sid; &48, 0, w; h; : Create Control Structure
+VDU 23, 0, &A0, sid; &49, 0, w; h; : Create Control Structure
This command initializes a control structure used to do 3D rendering. The structure is housed inside the designated buffer. The buffer @@ -138,7 +138,7 @@ referred to by the scene ID (sid) is created, if it does not already exist. The given width and height determine the size of the final rendered scene. ## Define Mesh Vertices -VDU 23, 0, &A0, sid; &48, 1, mid; n; x0; y0; z0; ... : Define Mesh Vertices +VDU 23, 0, &A0, sid; &49, 1, mid; n; x0; y0; z0; ... : Define Mesh Vertices This command establishes the list of mesh coordinates to be used to define a surface structure. The mesh may be referenced by multiple objects. @@ -146,7 +146,7 @@ a surface structure. The mesh may be referenced by multiple objects. The "n" parameter is the number of vertices, so the total number of coordinates specified equals n*3. ## Set Mesh Vertex Indexes -VDU 23, 0, &A0, sid; &48, 2, mid; n; i0; ... : Set Mesh Vertex Indexes +VDU 23, 0, &A0, sid; &49, 2, mid; n; i0; ... : Set Mesh Vertex Indexes This command lists the indexes of the vertices that define a 3D mesh. Individual vertices are often referenced multiple times within a mesh, because they are @@ -157,7 +157,7 @@ The "n" parameter is the number of indexes, and must match the "n" in subcommand (Set Texture Coordinate Indexes). ## Define Texture Coordinates -VDU 23, 0, &A0, sid; &48, 3, mid; n; u0; v0; ... : Define Texture Coordinates +VDU 23, 0, &A0, sid; &49, 3, mid; n; u0; v0; ... : Define Texture Coordinates This command establishes the list of U/V texture coordinates that define texturing for a mesh. @@ -165,7 +165,7 @@ for a mesh. The "n" parameter is the number of coordinate pairs, so the total number of coordinates specified equals n*2. ## Set Texture Coordinate Indexes -VDU 23, 0, &A0, sid; &48, 4, mid; n; i0; ... : Set Texture Coordinate Indexes +VDU 23, 0, &A0, sid; &49, 4, mid; n; i0; ... : Set Texture Coordinate Indexes This command lists the indexes of the coordinates that define a 3D texture for a mesh. Individual coordinates may be referenced multiple times within a texture, @@ -177,7 +177,7 @@ The "n" parameter is the number of indexes, and must match the "n" in subcommand (Set Mesh Vertex Indexes). ## Define Object -VDU 23, 0, &A0, sid; &48, 5, oid; mid; bmid; : Create Object +VDU 23, 0, &A0, sid; &49, 5, oid; mid; bmid; : Create Object This command defines a renderable object in terms of its already-defined mesh, plus a reference to an existing bitmap that provides its coloring, via the @@ -186,179 +186,179 @@ with the same or different bitmaps for coloring. The bitmap must be in the RGBA8888 format (4 bytes per pixel). ## Set Object X Scale Factor -VDU 23, 0, &A0, sid; &48, 6, oid; scalex; : Set Object X Scale Factor +VDU 23, 0, &A0, sid; &49, 6, oid; scalex; : Set Object X Scale Factor This command sets the X scale factor for an object. ## Set Object Y Scale Factor -VDU 23, 0, &A0, sid; &48, 7, oid; scaley; : Set Object Y Scale Factor +VDU 23, 0, &A0, sid; &49, 7, oid; scaley; : Set Object Y Scale Factor This command sets the Y scale factor for an object. ## Set Object Z Scale Factor -VDU 23, 0, &A0, sid; &48, 8, oid; scalez; : Set Object Z Scale Factor +VDU 23, 0, &A0, sid; &49, 8, oid; scalez; : Set Object Z Scale Factor This command sets the Z scale factor for an object. ## Set Object XYZ Scale Factors -VDU 23, 0, &A0, sid; &48, 9, oid; scalex; scaley; scalez; : Set Object XYZ Scale Factors +VDU 23, 0, &A0, sid; &49, 9, oid; scalex; scaley; scalez; : Set Object XYZ Scale Factors This command sets the X, Y, and Z scale factors for an object. ## Set Object X Rotation Angle -VDU 23, 0, &A0, sid; &48, 10, oid; anglex; : Set Object X Rotation Angle +VDU 23, 0, &A0, sid; &49, 10, oid; anglex; : Set Object X Rotation Angle This command sets the X rotation angle for an object. ## Set Object Y Rotation Angle -VDU 23, 0, &A0, sid; &48, 11, oid; angley; : Set Object Y Rotation Angle +VDU 23, 0, &A0, sid; &49, 11, oid; angley; : Set Object Y Rotation Angle This command sets the Y rotation angle for an object. ## Set Object Z Rotation Angle -VDU 23, 0, &A0, sid; &48, 12, oid; anglez; : Set Object Z Rotation Angle +VDU 23, 0, &A0, sid; &49, 12, oid; anglez; : Set Object Z Rotation Angle This command sets the Z rotation angle for an object. ## Set Object XYZ Rotation Angles -VDU 23, 0, &A0, sid; &48, 13, oid; anglex; angley; anglez; : Set Object XYZ Rotation Angles +VDU 23, 0, &A0, sid; &49, 13, oid; anglex; angley; anglez; : Set Object XYZ Rotation Angles This command sets the X, Y, and Z rotation angles for an object. ## Set Object X Translation Distance -VDU 23, 0, &A0, sid; &48, 14, oid; distx; : Set Object X Translation Distance +VDU 23, 0, &A0, sid; &49, 14, oid; distx; : Set Object X Translation Distance This command sets the X translation distance for an object. Note that 3D translation of an object is independent of 2D translation of the the rendered bitmap. ## Set Object Y Translation Distance -VDU 23, 0, &A0, sid; &48, 15, oid; disty; : Set Object Y Translation Distance +VDU 23, 0, &A0, sid; &49, 15, oid; disty; : Set Object Y Translation Distance This command sets the Y translation distance for an object. Note that 3D translation of an object is independent of 2D translation of the the rendered bitmap. ## Set Object Z Translation Distance -VDU 23, 0, &A0, sid; &48, 16, oid; distz; : Set Object Z Translation Distance +VDU 23, 0, &A0, sid; &49, 16, oid; distz; : Set Object Z Translation Distance This command sets the Z translation distance for an object. Note that 3D translation of an object is independent of 2D translation of the the rendered bitmap. ## Set Object XYZ Translation Distances -VDU 23, 0, &A0, sid; &48, 17, oid; distx; disty; distz; : Set Object XYZ Translation Distances +VDU 23, 0, &A0, sid; &49, 17, oid; distx; disty; distz; : Set Object XYZ Translation Distances This command sets the X, Y, and Z translation distances for an object. Note that 3D translation of an object is independent of 2D translation of the the rendered bitmap. ## Set Camera X Rotation Angle -VDU 23, 0, &A0, sid; &48, 18, anglex; : Set Camera X Rotation Angle +VDU 23, 0, &A0, sid; &49, 18, anglex; : Set Camera X Rotation Angle This command sets the X rotation angle for the camera. ## Set Camera Y Rotation Angle -VDU 23, 0, &A0, sid; &48, 19, angley; : Set Camera Y Rotation Angle +VDU 23, 0, &A0, sid; &49, 19, angley; : Set Camera Y Rotation Angle This command sets the Y rotation angle for the camera. ## Set Camera Z Rotation Angle -VDU 23, 0, &A0, sid; &48, 20, anglez; : Set Camera Z Rotation Angle +VDU 23, 0, &A0, sid; &49, 20, anglez; : Set Camera Z Rotation Angle This command sets the Z rotation angle for the camera. ## Set Camera XYZ Rotation Angles -VDU 23, 0, &A0, sid; &48, 21, anglex; angley; anglez; : Set Camera XYZ Rotation Angles +VDU 23, 0, &A0, sid; &49, 21, anglex; angley; anglez; : Set Camera XYZ Rotation Angles This command sets the X, Y, and Z rotation angles for the camera. ## Set Camera X Translation Distance -VDU 23, 0, &A0, sid; &48, 22, distx; : Set Camera X Translation Distance +VDU 23, 0, &A0, sid; &49, 22, distx; : Set Camera X Translation Distance This command sets the X translation distance for the camera. Note that 3D translation of the camera is independent of 2D translation of the the rendered bitmap. ## Set Camera Y Translation Distance -VDU 23, 0, &A0, sid; &48, 23, disty; : Set Camera Y Translation Distance +VDU 23, 0, &A0, sid; &49, 23, disty; : Set Camera Y Translation Distance This command sets the Y translation distance for the camera. Note that 3D translation of the camera is independent of 2D translation of the the rendered bitmap. ## Set Camera Z Translation Distance -VDU 23, 0, &A0, sid; &48, 24, distz; : Set Camera Z Translation Distance +VDU 23, 0, &A0, sid; &49, 24, distz; : Set Camera Z Translation Distance This command sets the Z translation distance for the camera. Note that 3D translation of the camera is independent of 2D translation of the the rendered bitmap. ## Set Camera XYZ Translation Distances -VDU 23, 0, &A0, sid; &48, 25, distx; disty; distz; : Set Camera XYZ Translation Distances +VDU 23, 0, &A0, sid; &49, 25, distx; disty; distz; : Set Camera XYZ Translation Distances This command sets the X, Y, and Z translation distances for the camera. Note that 3D translation of the camera is independent of 2D translation of the the rendered bitmap. ## Set Scene X Scale Factor -VDU 23, 0, &A0, sid; &48, 26, scalex; : Set Scene X Scale Factor +VDU 23, 0, &A0, sid; &49, 26, scalex; : Set Scene X Scale Factor This command sets the X scale factor for the scene. ## Set Scene Y Scale Factor -VDU 23, 0, &A0, sid; &48, 27, scaley; : Set Scene Y Scale Factor +VDU 23, 0, &A0, sid; &49, 27, scaley; : Set Scene Y Scale Factor This command sets the Y scale factor for the scene. ## Set Scene Z Scale Factor -VDU 23, 0, &A0, sid; &48, 28, scalez; : Set Scene Z Scale Factor +VDU 23, 0, &A0, sid; &49, 28, scalez; : Set Scene Z Scale Factor This command sets the Z scale factor for the scene. ## Set Scene XYZ Scale Factors -VDU 23, 0, &A0, sid; &48, 29, scalex; scaley; scalez; : Set Scene XYZ Scale Factors +VDU 23, 0, &A0, sid; &49, 29, scalex; scaley; scalez; : Set Scene XYZ Scale Factors This command sets the X, Y, and Z scale factors for the scene. ## Set Scene X Rotation Angle -VDU 23, 0, &A0, sid; &48, 30, anglex; : Set Scene X Rotation Angle +VDU 23, 0, &A0, sid; &49, 30, anglex; : Set Scene X Rotation Angle This command sets the X rotation angle for the scene. ## Set Scene Y Rotation Angle -VDU 23, 0, &A0, sid; &48, 31, angley; : Set Scene Y Rotation Angle +VDU 23, 0, &A0, sid; &49, 31, angley; : Set Scene Y Rotation Angle This command sets the Y rotation angle for the scene. ## Set Scene Z Rotation Angle -VDU 23, 0, &A0, sid; &48, 32, anglez; : Set Scene Z Rotation Angle +VDU 23, 0, &A0, sid; &49, 32, anglez; : Set Scene Z Rotation Angle This command sets the Z rotation angle for the scene. ## Set Scene XYZ Rotation Angles -VDU 23, 0, &A0, sid; &48, 33, anglex; angley; anglez; : Set Scene XYZ Rotation Angles +VDU 23, 0, &A0, sid; &49, 33, anglex; angley; anglez; : Set Scene XYZ Rotation Angles This command sets the X, Y, and Z rotation angles for the scene. ## Set Scene X Translation Distance -VDU 23, 0, &A0, sid; &48, 34, distx; : Set Scene X Translation Distance +VDU 23, 0, &A0, sid; &49, 34, distx; : Set Scene X Translation Distance This command sets the X translation distance for the scene. Note that 3D translation of the scene is independent of 2D translation of the the rendered bitmap. ## Set Scene Y Translation Distance -VDU 23, 0, &A0, sid; &48, 35, disty; : Set Scene Y Translation Distance +VDU 23, 0, &A0, sid; &49, 35, disty; : Set Scene Y Translation Distance This command sets the Y translation distance for the scene. Note that 3D translation of the scene is independent of 2D translation of the the rendered bitmap. ## Set Scene Z Translation Distance -VDU 23, 0, &A0, sid; &48, 36, distz; : Set Scene Z Translation Distance +VDU 23, 0, &A0, sid; &49, 36, distz; : Set Scene Z Translation Distance This command sets the Z translation distance for the scene. Note that 3D translation of the scene is independent of 2D translation of the the rendered bitmap. ## Set Scene XYZ Translation Distances -VDU 23, 0, &A0, sid; &48, 37, distx; disty; distz; : Set Scene XYZ Translation Distances +VDU 23, 0, &A0, sid; &49, 37, distx; disty; distz; : Set Scene XYZ Translation Distances This command sets the X, Y, and Z translation distances for the scene. Note that 3D translation of the scene is independent of 2D translation of the the rendered bitmap. ## Render To Bitmap -VDU 23, 0, &A0, sid; &48, 38, bmid; : Render To Bitmap +VDU 23, 0, &A0, sid; &49, 38, bmid; : Render To Bitmap This command uses information provided by the above commands to render the 3D scene onto the specified bitmap. This command must be used in @@ -366,7 +366,7 @@ order to perform the render operation; it does not happen automatically, commands change some of the render parameters. ## Delete Control Structure -VDU 23, 0, &A0, sid; &48, 39 : Delete Control Structure
+VDU 23, 0, &A0, sid; &49, 39 : Delete Control Structure
This command deinitializes an existing control structure, assuming that it exists in the designated buffer. The buffer is subsequently From 8e547a3be41824d6c39c4f55787b8b32bcb55e92 Mon Sep 17 00:00:00 2001 From: Curtis Whitley Date: Wed, 19 Jun 2024 13:53:52 -0400 Subject: [PATCH 34/49] fix color reversal --- video/pingo/render/pixel.c | 2 +- video/pingo/render/renderer.c | 13 ++++++++----- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/video/pingo/render/pixel.c b/video/pingo/render/pixel.c index 759c24fb..51fa918f 100644 --- a/video/pingo/render/pixel.c +++ b/video/pingo/render/pixel.c @@ -82,7 +82,7 @@ extern Pixel pixelFromRGBA( uint8_t r, uint8_t g, uint8_t b, uint8_t a){ extern Pixel pixelMul(Pixel p, float f) { - return (Pixel){p.b*f,p.g*f,p.r*f,p.a}; + return (Pixel){p.r*f, p.g*f, p.b*f, p.a}; } #endif diff --git a/video/pingo/render/renderer.c b/video/pingo/render/renderer.c index 2a1b3214..5c4a5df7 100644 --- a/video/pingo/render/renderer.c +++ b/video/pingo/render/renderer.c @@ -84,12 +84,15 @@ int orient2d( Vec2i a, Vec2i b, Vec2i c) } void backendDrawPixel (Renderer * r, Texture * f, Vec2i pos, Pixel color, float illumination) { - //If backend spcifies something.. - if (r->backEnd->drawPixel != 0) + // If backend specifies something.. + if (r->backEnd->drawPixel != 0) { + // Draw using the backend r->backEnd->drawPixel(f, pos, color, illumination); - - //By default call this - texture_draw(f, pos, pixelMul(color,illumination)); + } + else { + // By default call this + texture_draw(f, pos, pixelMul(color,illumination)); + } } int renderObject(Mat4 object_transform, Renderer * r, Renderable ren) { From 8464d3d12ff7ea1e0424bef40b8699008ec91f09 Mon Sep 17 00:00:00 2001 From: Curtis Whitley Date: Thu, 20 Jun 2024 09:27:51 -0400 Subject: [PATCH 35/49] post fighter aircraft model --- video/pingo/assets/Fighter_Aircraft.obj | 6733 +++++++++++++++++++++++ 1 file changed, 6733 insertions(+) create mode 100644 video/pingo/assets/Fighter_Aircraft.obj diff --git a/video/pingo/assets/Fighter_Aircraft.obj b/video/pingo/assets/Fighter_Aircraft.obj new file mode 100644 index 00000000..e28d9929 --- /dev/null +++ b/video/pingo/assets/Fighter_Aircraft.obj @@ -0,0 +1,6733 @@ +# https://www.turbosquid.com/3d-models/3d-fighter-aircraft-1906731 +# Blender v3.1.2 OBJ File: 'Fighter Aircraft.blend' +# www.blender.org +mtllib Fighter Aircraft.mtl +o Aircraft_Cube.004 +v 0.804035 0.116237 0.100951 +v 0.804915 0.116237 -0.089206 +v 0.693270 0.179018 0.005142 +v -0.434146 -0.031883 -0.002517 +v -0.307193 -0.012814 0.461256 +v -0.300903 -0.012814 -0.464523 +v 0.804062 -0.075453 0.117048 +v 0.805160 -0.075453 -0.105303 +v 0.804475 -0.076481 0.005898 +v 0.993375 -0.075887 0.007181 +v 0.805238 0.062111 -0.148940 +v 0.953609 0.000099 -0.208476 +v 0.803259 0.062111 0.160690 +v 0.950682 0.000099 0.222281 +v -0.718328 0.000099 -0.944289 +v -0.532372 0.013013 -0.739865 +v -0.730220 0.000099 -0.908103 +v -0.742497 0.000099 0.898964 +v -0.542381 0.013013 0.733425 +v -0.731098 0.000099 0.935308 +v 1.394720 0.000099 0.009909 +v 1.131950 0.099700 0.008123 +v -0.883704 0.000099 -0.026834 +v -0.656182 0.061683 -0.004026 +v -0.883993 0.000099 0.015690 +v -0.603615 0.000099 -1.014392 +v -0.562433 0.000099 -1.012231 +v -0.576141 0.000099 1.005362 +v -0.617348 0.000099 1.006963 +v -0.589584 0.000099 0.538086 +v -0.592835 0.000099 0.493716 +v -0.438363 0.016845 0.353603 +v 1.184045 0.000099 0.116172 +v 0.983137 0.099700 0.075787 +v 1.185508 0.000099 -0.099206 +v 0.984070 0.099700 -0.061557 +v -0.586077 0.000099 -0.500859 +v -0.582224 0.000099 -0.545181 +v -0.433524 0.016845 -0.358663 +v 0.804795 -0.013919 -0.148171 +v 0.802827 -0.013920 0.159915 +v -0.532372 -0.012814 -0.739865 +v -0.542381 -0.012814 0.733425 +v 1.124381 -0.017340 0.008072 +v -0.671993 -0.029788 -0.004133 +v -0.426183 -0.012814 -0.804480 +v -0.437080 -0.012814 0.799477 +v -0.411266 -0.012814 0.424324 +v 0.985882 -0.075460 0.071969 +v 0.986763 -0.075460 -0.057702 +v -0.405468 -0.012814 -0.429008 +v -0.656015 0.010810 -0.004025 +v -0.671993 0.066718 -0.004133 +v -0.411266 0.013013 0.424324 +v -0.405468 0.013013 -0.429008 +v -0.671993 0.005783 -0.004133 +v -0.468884 0.010160 0.492475 +v -0.564176 0.010162 0.717124 +v -0.675903 0.002948 0.809545 +v -0.568473 0.002950 0.556009 +v -0.466452 0.011750 -0.811015 +v -0.527456 0.011753 -0.773895 +v -0.677105 0.001359 -0.938406 +v -0.609205 0.001361 -0.979901 +v -0.444862 0.011568 -0.416123 +v -0.685634 0.004668 -0.032279 +v -0.838676 0.001616 -0.048699 +v -0.575368 0.001177 -0.468040 +v -0.537927 0.011753 0.767518 +v -0.477433 0.011750 0.805464 +v -0.622470 0.001361 0.972399 +v -0.689800 0.001359 0.929986 +v -0.686015 0.004668 0.023824 +v -0.450480 0.011568 0.410904 +v -0.581681 0.001177 0.461046 +v -0.839267 0.001616 0.038165 +v -0.554387 0.010162 -0.723862 +v -0.462155 0.010160 -0.497935 +v -0.560871 0.002950 -0.562816 +v -0.664847 0.002948 -0.817791 +v -0.469471 0.020678 0.492471 +v -0.564764 0.020680 0.717120 +v -0.569060 0.013469 0.556005 +v -0.676490 0.013466 0.809541 +v -0.467039 0.022268 -0.811019 +v -0.528043 0.022271 -0.773899 +v -0.609793 0.011879 -0.979905 +v -0.677693 0.011877 -0.938410 +v -0.445449 0.022086 -0.416127 +v -0.686221 0.015186 -0.032283 +v -0.575956 0.011695 -0.468044 +v -0.839264 0.012134 -0.048703 +v -0.538515 0.022271 0.767514 +v -0.478020 0.022268 0.805460 +v -0.690387 0.011877 0.929982 +v -0.623057 0.011879 0.972395 +v -0.686602 0.015186 0.023820 +v -0.451068 0.022086 0.410900 +v -0.839854 0.012134 0.038161 +v -0.582268 0.011695 0.461042 +v -0.554974 0.020680 -0.723866 +v -0.462742 0.020678 -0.497939 +v -0.665434 0.013466 -0.817795 +v -0.561458 0.013469 -0.562820 +v 0.680919 -0.075780 0.131307 +v 0.682302 -0.075781 -0.121222 +v 0.680840 -0.076481 0.005058 +v 0.679385 0.052922 0.199509 +v 0.797388 0.000099 0.270250 +v 0.681926 0.052922 -0.189431 +v 0.800980 0.000099 -0.258524 +v 0.680211 -0.013548 0.198681 +v 0.682738 -0.013548 -0.188593 +v 0.660750 0.093885 0.128841 +v 0.699634 0.099951 0.121272 +v 0.680009 0.086966 0.141898 +v 0.700884 0.099954 -0.110932 +v 0.662091 0.093882 -0.119033 +v 0.681587 0.086965 -0.131824 +v 0.568231 0.173101 0.004293 +v 0.612665 0.175204 0.004595 +v -0.224520 0.000455 -0.174609 +v 0.525663 -0.126397 -0.182173 +v -0.223697 -0.024335 -0.164374 +v 0.525573 -0.158537 -0.168860 +v -0.221709 -0.034603 -0.139664 +v 0.525354 -0.171850 -0.136721 +v -0.219722 -0.024335 -0.114955 +v 0.525136 -0.158537 -0.104581 +v -0.218899 0.000455 -0.104720 +v 0.525045 -0.126397 -0.091268 +v -0.219722 0.025244 -0.114955 +v 0.525136 -0.094256 -0.104581 +v -0.221709 0.035512 -0.139664 +v 0.525354 -0.080943 -0.136721 +v -0.223697 0.025244 -0.164374 +v 0.525573 -0.094256 -0.168860 +v 0.072338 -0.066643 -0.205453 +v 0.072388 -0.101649 -0.190959 +v 0.072510 -0.116149 -0.155967 +v 0.072631 -0.101649 -0.120975 +v 0.072682 -0.066643 -0.106481 +v 0.072631 -0.031638 -0.120975 +v 0.072510 -0.017138 -0.155967 +v 0.072388 -0.031638 -0.190959 +v 0.353094 -0.116744 -0.205251 +v 0.352975 -0.159096 -0.187708 +v 0.352687 -0.176639 -0.145357 +v 0.352399 -0.159096 -0.103005 +v 0.352280 -0.116744 -0.085463 +v 0.352399 -0.074391 -0.103005 +v 0.352687 -0.056848 -0.145357 +v 0.352975 -0.074391 -0.187708 +v 0.507875 -0.167733 -0.179066 +v 0.507991 -0.126397 -0.196187 +v 0.507594 -0.184856 -0.137730 +v 0.507313 -0.167733 -0.096394 +v 0.507197 -0.126397 -0.079272 +v 0.507313 -0.085060 -0.096394 +v 0.507594 -0.067938 -0.137730 +v 0.507875 -0.085060 -0.179066 +v 0.497081 -0.141159 -0.151675 +v 0.497123 -0.126397 -0.157789 +v 0.496981 -0.147273 -0.136913 +v 0.496881 -0.141159 -0.122151 +v 0.496839 -0.126397 -0.116037 +v 0.496881 -0.111635 -0.122151 +v 0.496981 -0.105520 -0.136913 +v 0.497081 -0.111635 -0.151675 +v -0.226878 0.000455 0.172408 +v 0.523133 -0.126397 0.190165 +v -0.225916 -0.024335 0.162186 +v 0.523224 -0.158537 0.176853 +v -0.223593 -0.034603 0.137506 +v 0.523442 -0.171850 0.144713 +v -0.221270 -0.024335 0.112825 +v 0.523660 -0.158537 0.112573 +v -0.220307 0.000455 0.102603 +v 0.523751 -0.126397 0.099261 +v -0.221270 0.025244 0.112825 +v 0.523660 -0.094256 0.112573 +v -0.223593 0.035512 0.137506 +v 0.523442 -0.080943 0.144713 +v -0.225916 0.025244 0.162186 +v 0.523224 -0.094256 0.176853 +v 0.069534 -0.066643 0.207283 +v 0.069781 -0.101649 0.192791 +v 0.070378 -0.116149 0.157805 +v 0.070975 -0.101649 0.122818 +v 0.071222 -0.066643 0.108326 +v 0.070975 -0.031638 0.122818 +v 0.070378 -0.017138 0.157805 +v 0.069781 -0.031638 0.192791 +v 0.350266 -0.116744 0.210896 +v 0.350386 -0.159096 0.193354 +v 0.350673 -0.176639 0.151002 +v 0.350961 -0.159096 0.108651 +v 0.351080 -0.116744 0.091108 +v 0.350961 -0.074391 0.108651 +v 0.350673 -0.056848 0.151002 +v 0.350386 -0.074391 0.193354 +v 0.505389 -0.167733 0.186817 +v 0.505272 -0.126397 0.203938 +v 0.505670 -0.184856 0.145481 +v 0.505950 -0.167733 0.104145 +v 0.506067 -0.126397 0.087023 +v 0.505950 -0.085060 0.104145 +v 0.505670 -0.067938 0.145481 +v 0.505389 -0.085060 0.186817 +v 0.494969 -0.141159 0.159282 +v 0.494927 -0.126397 0.165396 +v 0.495069 -0.147273 0.144520 +v 0.495169 -0.141159 0.129758 +v 0.495211 -0.126397 0.123644 +v 0.495169 -0.111635 0.129758 +v 0.495069 -0.105520 0.144520 +v 0.494969 -0.111635 0.159282 +v -0.224464 -0.006371 -0.173917 +v -0.224303 -0.012946 -0.171911 +v -0.224044 -0.019017 -0.168696 +v 0.507924 -0.158867 -0.186296 +v 0.507960 -0.148742 -0.191675 +v 0.507983 -0.137779 -0.195030 +v 0.406279 -0.122324 -0.203108 +v 0.449842 -0.125190 -0.200879 +v 0.483755 -0.126246 -0.198570 +v -0.002460 -0.083010 -0.186801 +v -0.076600 -0.063780 -0.180510 +v -0.150266 -0.044156 -0.172798 +v -0.223271 -0.028671 -0.159074 +v -0.222784 -0.031897 -0.153021 +v -0.222257 -0.033909 -0.146468 +v 0.507671 -0.183699 -0.149112 +v 0.507746 -0.180344 -0.160075 +v 0.507814 -0.174964 -0.170199 +v -0.001991 -0.096488 -0.154288 +v -0.075681 -0.076206 -0.150555 +v -0.148830 -0.055508 -0.145452 +v -0.221162 -0.033909 -0.132860 +v -0.220635 -0.031897 -0.126307 +v -0.220148 -0.028671 -0.120255 +v 0.507373 -0.174964 -0.105260 +v 0.507442 -0.180344 -0.115385 +v 0.507517 -0.183699 -0.126348 +v -0.001521 -0.083010 -0.121775 +v -0.074762 -0.063780 -0.120600 +v -0.147394 -0.044156 -0.118107 +v -0.219374 -0.019017 -0.110633 +v -0.219116 -0.012946 -0.107417 +v -0.218954 -0.006371 -0.105412 +v 0.507205 -0.137779 -0.080429 +v 0.507227 -0.148742 -0.083784 +v 0.507264 -0.158867 -0.089164 +v -0.001327 -0.050471 -0.108308 +v -0.074381 -0.033783 -0.108192 +v -0.146799 -0.016750 -0.106780 +v -0.218954 0.007280 -0.105412 +v -0.219116 0.013855 -0.107417 +v -0.219374 0.019926 -0.110633 +v 0.507264 -0.093927 -0.089164 +v 0.507227 -0.104051 -0.083784 +v 0.507205 -0.115014 -0.080429 +v -0.001521 -0.017932 -0.121775 +v -0.074762 -0.003786 -0.120600 +v -0.147394 0.010655 -0.118107 +v -0.220148 0.029580 -0.120255 +v -0.220635 0.032806 -0.126307 +v -0.221162 0.034818 -0.132860 +v 0.507517 -0.069095 -0.126348 +v 0.507442 -0.072450 -0.115385 +v 0.507373 -0.077829 -0.105260 +v -0.001991 -0.004454 -0.154288 +v -0.075681 0.008640 -0.150555 +v -0.148830 0.022007 -0.145452 +v -0.222257 0.034818 -0.146468 +v -0.222784 0.032806 -0.153021 +v -0.223271 0.029580 -0.159074 +v 0.507814 -0.077829 -0.170199 +v 0.507746 -0.072450 -0.160075 +v 0.507671 -0.069095 -0.149112 +v -0.002460 -0.017932 -0.186801 +v -0.076600 -0.003786 -0.180510 +v -0.150266 0.010655 -0.172798 +v -0.224044 0.019926 -0.168696 +v -0.224303 0.013855 -0.171911 +v -0.224464 0.007280 -0.173917 +v 0.507983 -0.115014 -0.195030 +v 0.507960 -0.104051 -0.191675 +v 0.507924 -0.093927 -0.186296 +v -0.150861 -0.016750 -0.184124 +v -0.076980 -0.033783 -0.192918 +v -0.002655 -0.050471 -0.200268 +v 0.290632 -0.148987 -0.190134 +v 0.221330 -0.135457 -0.191989 +v 0.147704 -0.119386 -0.192517 +v 0.290358 -0.166040 -0.148965 +v 0.221107 -0.151800 -0.152536 +v 0.147602 -0.134858 -0.155171 +v 0.290084 -0.148987 -0.107796 +v 0.220884 -0.135457 -0.113083 +v 0.147499 -0.119386 -0.117825 +v 0.289970 -0.107816 -0.090743 +v 0.220791 -0.096002 -0.096741 +v 0.147457 -0.082033 -0.102355 +v 0.290084 -0.066646 -0.107796 +v 0.220884 -0.056546 -0.113083 +v 0.147499 -0.044681 -0.117825 +v 0.290358 -0.049593 -0.148965 +v 0.221107 -0.040203 -0.152536 +v 0.147602 -0.029209 -0.155171 +v 0.290632 -0.066646 -0.190134 +v 0.221330 -0.056546 -0.191989 +v 0.147704 -0.044681 -0.192517 +v 0.072367 -0.039146 -0.197079 +v 0.072351 -0.047720 -0.201633 +v 0.072341 -0.057004 -0.204473 +v 0.072476 -0.018118 -0.165602 +v 0.072444 -0.020959 -0.174883 +v 0.072414 -0.025515 -0.183453 +v 0.072605 -0.025515 -0.128481 +v 0.072575 -0.020959 -0.137051 +v 0.072543 -0.018118 -0.146332 +v 0.072678 -0.057004 -0.107461 +v 0.072668 -0.047720 -0.110301 +v 0.072653 -0.039146 -0.114855 +v 0.072653 -0.094140 -0.114855 +v 0.072668 -0.085566 -0.110301 +v 0.072678 -0.076282 -0.107461 +v 0.072543 -0.115169 -0.146332 +v 0.072575 -0.112328 -0.137051 +v 0.072605 -0.107772 -0.128481 +v 0.072414 -0.107772 -0.183453 +v 0.072444 -0.112328 -0.174883 +v 0.072476 -0.115169 -0.165602 +v 0.072341 -0.076282 -0.204473 +v 0.072351 -0.085566 -0.201633 +v 0.072367 -0.094140 -0.197079 +v 0.147746 -0.082033 -0.207986 +v 0.221422 -0.096002 -0.208331 +v 0.290745 -0.107816 -0.207186 +v 0.483635 -0.168548 -0.181048 +v 0.449721 -0.168041 -0.183130 +v 0.406158 -0.165221 -0.185340 +v 0.483348 -0.186070 -0.138747 +v 0.449430 -0.185791 -0.140279 +v 0.405867 -0.182990 -0.142444 +v 0.483061 -0.168548 -0.096446 +v 0.449139 -0.168041 -0.097429 +v 0.405575 -0.165221 -0.099548 +v 0.482942 -0.126246 -0.078924 +v 0.449018 -0.125190 -0.079680 +v 0.405455 -0.122324 -0.081780 +v 0.483061 -0.083944 -0.096446 +v 0.449139 -0.082339 -0.097429 +v 0.405575 -0.079428 -0.099548 +v 0.483348 -0.066421 -0.138747 +v 0.449430 -0.064589 -0.140279 +v 0.405867 -0.061659 -0.142444 +v 0.483635 -0.083944 -0.181048 +v 0.449721 -0.082339 -0.183129 +v 0.406158 -0.079428 -0.185340 +v 0.353025 -0.083476 -0.195116 +v 0.353062 -0.093849 -0.200628 +v 0.353086 -0.105082 -0.204065 +v 0.352766 -0.058034 -0.157018 +v 0.352843 -0.061471 -0.168251 +v 0.352913 -0.066983 -0.178624 +v 0.352461 -0.066983 -0.112089 +v 0.352531 -0.061471 -0.122463 +v 0.352608 -0.058034 -0.133695 +v 0.352288 -0.105082 -0.086648 +v 0.352311 -0.093849 -0.090085 +v 0.352349 -0.083476 -0.095597 +v 0.352349 -0.150012 -0.095597 +v 0.352311 -0.139638 -0.090085 +v 0.352288 -0.128406 -0.086648 +v 0.352608 -0.175454 -0.133695 +v 0.352531 -0.172016 -0.122463 +v 0.352461 -0.166504 -0.112089 +v 0.352913 -0.166504 -0.178624 +v 0.352843 -0.172016 -0.168251 +v 0.352766 -0.175454 -0.157018 +v 0.353086 -0.128406 -0.204065 +v 0.353062 -0.139638 -0.200628 +v 0.353025 -0.150012 -0.195116 +v 0.525611 -0.151643 -0.174482 +v 0.525639 -0.143771 -0.178665 +v 0.525657 -0.135247 -0.181273 +v 0.525414 -0.170950 -0.145570 +v 0.525472 -0.168342 -0.154094 +v 0.525526 -0.164159 -0.161966 +v 0.525183 -0.164159 -0.111475 +v 0.525236 -0.168342 -0.119347 +v 0.525294 -0.170950 -0.127871 +v 0.525052 -0.135247 -0.092168 +v 0.525069 -0.143771 -0.094777 +v 0.525098 -0.151643 -0.098959 +v 0.525098 -0.101150 -0.098959 +v 0.525069 -0.109022 -0.094777 +v 0.525052 -0.117547 -0.092168 +v 0.525294 -0.081843 -0.127871 +v 0.525236 -0.084452 -0.119347 +v 0.525183 -0.088634 -0.111475 +v 0.525526 -0.088634 -0.161966 +v 0.525472 -0.084452 -0.154094 +v 0.525414 -0.081843 -0.145570 +v 0.525657 -0.117547 -0.181273 +v 0.525639 -0.109022 -0.178665 +v 0.525611 -0.101150 -0.174482 +v 0.522806 -0.126397 -0.193677 +v 0.529581 -0.126397 -0.190742 +v 0.529979 -0.126397 -0.187026 +v 0.529878 -0.161980 -0.172288 +v 0.529473 -0.164537 -0.174944 +v 0.522693 -0.166393 -0.177110 +v 0.529637 -0.176719 -0.136705 +v 0.529214 -0.180335 -0.136805 +v 0.522422 -0.182960 -0.137115 +v 0.529395 -0.161980 -0.101123 +v 0.528955 -0.164537 -0.098666 +v 0.522150 -0.166393 -0.097120 +v 0.529295 -0.126397 -0.086384 +v 0.528848 -0.126397 -0.082869 +v 0.522037 -0.126397 -0.080554 +v 0.529395 -0.090814 -0.101123 +v 0.528955 -0.088257 -0.098666 +v 0.522150 -0.086401 -0.097120 +v 0.529637 -0.076075 -0.136705 +v 0.529214 -0.072459 -0.136805 +v 0.522422 -0.069834 -0.137115 +v 0.529878 -0.090814 -0.172288 +v 0.529473 -0.088257 -0.174944 +v 0.522693 -0.086401 -0.177110 +v 0.495309 -0.137542 -0.151939 +v 0.494426 -0.133061 -0.153020 +v 0.495333 -0.129132 -0.155422 +v 0.495226 -0.144894 -0.139661 +v 0.494362 -0.142485 -0.143595 +v 0.495283 -0.141411 -0.148070 +v 0.495132 -0.141411 -0.125780 +v 0.494271 -0.142485 -0.130267 +v 0.495189 -0.144894 -0.134190 +v 0.495082 -0.129132 -0.118428 +v 0.494207 -0.133061 -0.120843 +v 0.495105 -0.137542 -0.121912 +v 0.495105 -0.115252 -0.121912 +v 0.494207 -0.119733 -0.120843 +v 0.495082 -0.123661 -0.118428 +v 0.495189 -0.107899 -0.134190 +v 0.494271 -0.110308 -0.130267 +v 0.495132 -0.111383 -0.125780 +v 0.495283 -0.111383 -0.148070 +v 0.494362 -0.110308 -0.143595 +v 0.495226 -0.107899 -0.139661 +v 0.495333 -0.123661 -0.155422 +v 0.494426 -0.119733 -0.153020 +v 0.495309 -0.115252 -0.151939 +v 0.518262 -0.098637 -0.164529 +v 0.509822 -0.103476 -0.159747 +v 0.502116 -0.108146 -0.155129 +v 0.502168 -0.126397 -0.162688 +v 0.509887 -0.126397 -0.169240 +v 0.518340 -0.126397 -0.176027 +v 0.517885 -0.098637 -0.109011 +v 0.509511 -0.103476 -0.113907 +v 0.501868 -0.108146 -0.118629 +v 0.501992 -0.100587 -0.136879 +v 0.509667 -0.093982 -0.136827 +v 0.518073 -0.087139 -0.136770 +v 0.517885 -0.154156 -0.109011 +v 0.509511 -0.149317 -0.113907 +v 0.501868 -0.144647 -0.118629 +v 0.501817 -0.126397 -0.111070 +v 0.509446 -0.126397 -0.104414 +v 0.517807 -0.126397 -0.097513 +v 0.518262 -0.154156 -0.164529 +v 0.509822 -0.149317 -0.159747 +v 0.502116 -0.144647 -0.155129 +v 0.501992 -0.152207 -0.136879 +v 0.509667 -0.158811 -0.136827 +v 0.518073 -0.165654 -0.136770 +v -0.226813 -0.006371 0.171718 +v -0.226624 -0.012946 0.169714 +v -0.226322 -0.019017 0.166503 +v 0.505340 -0.158867 0.194047 +v 0.505303 -0.148742 0.199426 +v 0.505280 -0.137779 0.202781 +v 0.403476 -0.122324 0.209476 +v 0.447065 -0.125190 0.207839 +v 0.481006 -0.126246 0.205991 +v -0.005004 -0.083010 0.187617 +v -0.079051 -0.063780 0.180319 +v -0.152606 -0.044156 0.171606 +v -0.225417 -0.028671 0.156892 +v -0.224848 -0.031897 0.150847 +v -0.224232 -0.033909 0.144301 +v 0.505592 -0.183699 0.156863 +v 0.505518 -0.180344 0.167826 +v 0.505449 -0.174964 0.177950 +v -0.004093 -0.096488 0.155114 +v -0.077725 -0.076206 0.150379 +v -0.150799 -0.055508 0.144283 +v -0.222953 -0.033909 0.130710 +v -0.222337 -0.031897 0.124164 +v -0.221768 -0.028671 0.118119 +v 0.505890 -0.174964 0.113011 +v 0.505821 -0.180344 0.123136 +v 0.505747 -0.183699 0.134099 +v -0.003182 -0.083010 0.122610 +v -0.076399 -0.063780 0.120439 +v -0.148991 -0.044156 0.116960 +v -0.220863 -0.019017 0.108509 +v -0.220561 -0.012946 0.105297 +v -0.220372 -0.006371 0.103293 +v 0.506059 -0.137779 0.088180 +v 0.506036 -0.148742 0.091535 +v 0.506000 -0.158867 0.096915 +v -0.002804 -0.050471 0.109147 +v -0.075850 -0.033783 0.108038 +v -0.148242 -0.016750 0.105642 +v -0.220372 0.007280 0.103293 +v -0.220561 0.013855 0.105297 +v -0.220863 0.019926 0.108509 +v 0.506000 -0.093927 0.096915 +v 0.506036 -0.104051 0.091535 +v 0.506059 -0.115014 0.088180 +v -0.003182 -0.017932 0.122610 +v -0.076399 -0.003786 0.120439 +v -0.148991 0.010655 0.116960 +v -0.221768 0.029580 0.118119 +v -0.222337 0.032806 0.124164 +v -0.222953 0.034818 0.130710 +v 0.505747 -0.069095 0.134099 +v 0.505821 -0.072450 0.123136 +v 0.505890 -0.077829 0.113011 +v -0.004093 -0.004454 0.155114 +v -0.077725 0.008640 0.150379 +v -0.150799 0.022007 0.144283 +v -0.224232 0.034818 0.144301 +v -0.224848 0.032806 0.150847 +v -0.225417 0.029580 0.156892 +v 0.505449 -0.077829 0.177950 +v 0.505518 -0.072450 0.167826 +v 0.505592 -0.069095 0.156863 +v -0.005004 -0.017932 0.187617 +v -0.079051 -0.003786 0.180320 +v -0.152606 0.010655 0.171606 +v -0.226322 0.019926 0.166503 +v -0.226624 0.013855 0.169714 +v -0.226813 0.007280 0.171718 +v 0.505280 -0.115014 0.202781 +v 0.505303 -0.104051 0.199426 +v 0.505340 -0.093927 0.194047 +v -0.153355 -0.016750 0.182924 +v -0.079600 -0.033783 0.192721 +v -0.005382 -0.050471 0.201080 +v 0.288016 -0.148987 0.194932 +v 0.218695 -0.135457 0.195846 +v 0.145068 -0.119386 0.195373 +v 0.288301 -0.166040 0.153763 +v 0.219008 -0.151800 0.156393 +v 0.145474 -0.134858 0.158029 +v 0.288586 -0.148987 0.112594 +v 0.219321 -0.135457 0.116941 +v 0.145879 -0.119386 0.120685 +v 0.288704 -0.107816 0.095541 +v 0.219450 -0.096002 0.100599 +v 0.146047 -0.082033 0.105216 +v 0.288586 -0.066646 0.112594 +v 0.219321 -0.056546 0.116941 +v 0.145879 -0.044681 0.120685 +v 0.288301 -0.049593 0.153763 +v 0.219008 -0.040203 0.156393 +v 0.145474 -0.029209 0.158029 +v 0.288016 -0.066646 0.194932 +v 0.218695 -0.056546 0.195846 +v 0.145068 -0.044681 0.195373 +v 0.069677 -0.039146 0.198911 +v 0.069599 -0.047720 0.203464 +v 0.069551 -0.057004 0.206304 +v 0.070214 -0.018118 0.167438 +v 0.070055 -0.020959 0.176717 +v 0.069909 -0.025515 0.185287 +v 0.070847 -0.025515 0.130322 +v 0.070701 -0.020959 0.138892 +v 0.070542 -0.018118 0.148171 +v 0.071205 -0.057004 0.109305 +v 0.071157 -0.047720 0.112145 +v 0.071079 -0.039146 0.116698 +v 0.071079 -0.094140 0.116698 +v 0.071157 -0.085566 0.112145 +v 0.071205 -0.076282 0.109305 +v 0.070542 -0.115169 0.148171 +v 0.070701 -0.112328 0.138892 +v 0.070847 -0.107772 0.130322 +v 0.069909 -0.107772 0.185287 +v 0.070055 -0.112328 0.176717 +v 0.070214 -0.115169 0.167438 +v 0.069551 -0.076282 0.206304 +v 0.069599 -0.085566 0.203464 +v 0.069677 -0.094140 0.198911 +v 0.144901 -0.082033 0.210841 +v 0.218565 -0.096002 0.212187 +v 0.287897 -0.107816 0.211985 +v 0.481125 -0.168548 0.188470 +v 0.447185 -0.168041 0.190090 +v 0.403597 -0.165221 0.191708 +v 0.481412 -0.186070 0.146168 +v 0.447476 -0.185791 0.147240 +v 0.403888 -0.182990 0.148812 +v 0.481700 -0.168548 0.103867 +v 0.447767 -0.168041 0.104390 +v 0.404179 -0.165221 0.105916 +v 0.481819 -0.126246 0.086345 +v 0.447888 -0.125190 0.086641 +v 0.404300 -0.122324 0.088148 +v 0.481700 -0.083944 0.103867 +v 0.447767 -0.082339 0.104390 +v 0.404179 -0.079428 0.105916 +v 0.481412 -0.066421 0.146168 +v 0.447476 -0.064589 0.147240 +v 0.403888 -0.061659 0.148812 +v 0.481125 -0.083944 0.188470 +v 0.447185 -0.082339 0.190090 +v 0.403597 -0.079428 0.191708 +v 0.350335 -0.083476 0.200762 +v 0.350298 -0.093849 0.206273 +v 0.350275 -0.105082 0.209711 +v 0.350594 -0.058034 0.162664 +v 0.350518 -0.061471 0.173896 +v 0.350447 -0.066983 0.184269 +v 0.350899 -0.066983 0.117735 +v 0.350829 -0.061471 0.128108 +v 0.350753 -0.058034 0.139340 +v 0.351072 -0.105082 0.092293 +v 0.351049 -0.093849 0.095731 +v 0.351011 -0.083476 0.101243 +v 0.351011 -0.150012 0.101243 +v 0.351049 -0.139638 0.095731 +v 0.351072 -0.128406 0.092293 +v 0.350753 -0.175454 0.139340 +v 0.350829 -0.172016 0.128108 +v 0.350899 -0.166504 0.117735 +v 0.350447 -0.166504 0.184269 +v 0.350518 -0.172016 0.173896 +v 0.350594 -0.175454 0.162664 +v 0.350275 -0.128406 0.209711 +v 0.350298 -0.139638 0.206273 +v 0.350335 -0.150012 0.200762 +v 0.523186 -0.151643 0.182474 +v 0.523157 -0.143771 0.186657 +v 0.523139 -0.135247 0.189266 +v 0.523382 -0.170950 0.153563 +v 0.523324 -0.168342 0.162087 +v 0.523271 -0.164159 0.169959 +v 0.523614 -0.164159 0.119467 +v 0.523560 -0.168342 0.127339 +v 0.523502 -0.170950 0.135863 +v 0.523745 -0.135247 0.100160 +v 0.523727 -0.143771 0.102769 +v 0.523699 -0.151643 0.106952 +v 0.523699 -0.101150 0.106952 +v 0.523727 -0.109022 0.102769 +v 0.523745 -0.117547 0.100160 +v 0.523502 -0.081843 0.135863 +v 0.523560 -0.084452 0.127339 +v 0.523614 -0.088634 0.119467 +v 0.523271 -0.088634 0.169959 +v 0.523324 -0.084452 0.162087 +v 0.523382 -0.081843 0.153563 +v 0.523139 -0.117547 0.189266 +v 0.523157 -0.109022 0.186657 +v 0.523186 -0.101150 0.182474 +v 0.520120 -0.126397 0.201629 +v 0.526934 -0.126397 0.198787 +v 0.527383 -0.126397 0.195077 +v 0.527483 -0.161980 0.180338 +v 0.527041 -0.164537 0.182989 +v 0.520233 -0.166393 0.185063 +v 0.527724 -0.176719 0.144756 +v 0.527301 -0.180335 0.144850 +v 0.520504 -0.182960 0.145068 +v 0.527966 -0.161980 0.109174 +v 0.527560 -0.164537 0.106711 +v 0.520776 -0.166393 0.105073 +v 0.528066 -0.126397 0.094435 +v 0.527667 -0.126397 0.090914 +v 0.520889 -0.126397 0.088506 +v 0.527966 -0.090814 0.109174 +v 0.527560 -0.088257 0.106711 +v 0.520776 -0.086401 0.105073 +v 0.527724 -0.076075 0.144756 +v 0.527301 -0.072459 0.144850 +v 0.520504 -0.069834 0.145068 +v 0.527483 -0.090814 0.180338 +v 0.527041 -0.088257 0.182989 +v 0.520233 -0.086401 0.185063 +v 0.493193 -0.137542 0.159522 +v 0.492295 -0.133061 0.160590 +v 0.493169 -0.129132 0.163005 +v 0.493277 -0.144894 0.147244 +v 0.492359 -0.142485 0.151166 +v 0.493219 -0.141411 0.155653 +v 0.493371 -0.141411 0.133363 +v 0.492449 -0.142485 0.137838 +v 0.493314 -0.144894 0.141772 +v 0.493421 -0.129132 0.126011 +v 0.492513 -0.133061 0.128414 +v 0.493397 -0.137542 0.129494 +v 0.493397 -0.115252 0.129494 +v 0.492513 -0.119733 0.128414 +v 0.493421 -0.123661 0.126011 +v 0.493314 -0.107899 0.141772 +v 0.492449 -0.110308 0.137838 +v 0.493371 -0.111383 0.133363 +v 0.493219 -0.111383 0.155653 +v 0.492359 -0.110308 0.151166 +v 0.493276 -0.107899 0.147244 +v 0.493169 -0.123661 0.163005 +v 0.492295 -0.119733 0.160590 +v 0.493193 -0.115252 0.159522 +v 0.515973 -0.098637 0.172422 +v 0.507599 -0.103476 0.167526 +v 0.499956 -0.108146 0.162804 +v 0.499905 -0.126397 0.170363 +v 0.507534 -0.126397 0.177020 +v 0.515894 -0.126397 0.183920 +v 0.516350 -0.098637 0.116905 +v 0.507910 -0.103476 0.121687 +v 0.500204 -0.108146 0.126304 +v 0.500080 -0.100587 0.144554 +v 0.507754 -0.093983 0.144606 +v 0.516161 -0.087139 0.144663 +v 0.516350 -0.154156 0.116905 +v 0.507910 -0.149317 0.121687 +v 0.500204 -0.144647 0.126304 +v 0.500255 -0.126397 0.118745 +v 0.507974 -0.126397 0.112193 +v 0.516428 -0.126397 0.105407 +v 0.515972 -0.154156 0.172422 +v 0.507599 -0.149317 0.167526 +v 0.499956 -0.144647 0.162804 +v 0.500080 -0.152207 0.144554 +v 0.507754 -0.158811 0.144606 +v 0.516161 -0.165654 0.144664 +v 0.406271 -0.134136 -0.201907 +v 0.449833 -0.136989 -0.199679 +v 0.483746 -0.137894 -0.197386 +v 0.406247 -0.145513 -0.198425 +v 0.449810 -0.148354 -0.196201 +v 0.483723 -0.149113 -0.193952 +v 0.406209 -0.156020 -0.192843 +v 0.449772 -0.158850 -0.190625 +v 0.483686 -0.159474 -0.188447 +v 0.406096 -0.172724 -0.176139 +v 0.449659 -0.175537 -0.173938 +v 0.483574 -0.175947 -0.171974 +v 0.406024 -0.178307 -0.165632 +v 0.449587 -0.181113 -0.163443 +v 0.483503 -0.181453 -0.161614 +v 0.405947 -0.181789 -0.154256 +v 0.449510 -0.184591 -0.152078 +v 0.483427 -0.184886 -0.150395 +v 0.405787 -0.181789 -0.130632 +v 0.449350 -0.184591 -0.128480 +v 0.483269 -0.184886 -0.127099 +v 0.405709 -0.178307 -0.119256 +v 0.449272 -0.181113 -0.117116 +v 0.483193 -0.181453 -0.115880 +v 0.405638 -0.172724 -0.108749 +v 0.449201 -0.175537 -0.106621 +v 0.483122 -0.175947 -0.105519 +v 0.405524 -0.156020 -0.092045 +v 0.449088 -0.158850 -0.089934 +v 0.483010 -0.159474 -0.089046 +v 0.405487 -0.145513 -0.086462 +v 0.449050 -0.148354 -0.084357 +v 0.482973 -0.149113 -0.083541 +v 0.405463 -0.134136 -0.082981 +v 0.449026 -0.136989 -0.080879 +v 0.482950 -0.137894 -0.080108 +v 0.405463 -0.110512 -0.082981 +v 0.449026 -0.113391 -0.080879 +v 0.482950 -0.114598 -0.080108 +v 0.405487 -0.099136 -0.086462 +v 0.449050 -0.102026 -0.084357 +v 0.482973 -0.103378 -0.083541 +v 0.405524 -0.088629 -0.092045 +v 0.449088 -0.091530 -0.089934 +v 0.483010 -0.093017 -0.089046 +v 0.405638 -0.071924 -0.108749 +v 0.449201 -0.074844 -0.106621 +v 0.483122 -0.076544 -0.105519 +v 0.405709 -0.066342 -0.119256 +v 0.449272 -0.069267 -0.117116 +v 0.483193 -0.071039 -0.115880 +v 0.405787 -0.062860 -0.130632 +v 0.449350 -0.065789 -0.128480 +v 0.483269 -0.067605 -0.127099 +v 0.518318 -0.118765 -0.175233 +v 0.518286 -0.111405 -0.172962 +v 0.518278 -0.104595 -0.169364 +v 0.509750 -0.120182 -0.168466 +v 0.509605 -0.114122 -0.166462 +v 0.509717 -0.108419 -0.163593 +v 0.501670 -0.121746 -0.161675 +v 0.501227 -0.116947 -0.159699 +v 0.501643 -0.112154 -0.157702 +v 0.405947 -0.062860 -0.154256 +v 0.449510 -0.065789 -0.152078 +v 0.483427 -0.067605 -0.150395 +v 0.406024 -0.066342 -0.165632 +v 0.449587 -0.069267 -0.163443 +v 0.483503 -0.071039 -0.161614 +v 0.406096 -0.071924 -0.176139 +v 0.449659 -0.074844 -0.173938 +v 0.483574 -0.076544 -0.171974 +v 0.406209 -0.088629 -0.192843 +v 0.449772 -0.091530 -0.190625 +v 0.483686 -0.093017 -0.188447 +v 0.406247 -0.099136 -0.198425 +v 0.449810 -0.102026 -0.196201 +v 0.483723 -0.103378 -0.193952 +v 0.406271 -0.110512 -0.201907 +v 0.449833 -0.113391 -0.199679 +v 0.483746 -0.114598 -0.197386 +v -0.150518 0.004777 -0.177581 +v -0.076760 -0.010220 -0.185750 +v -0.002542 -0.024912 -0.192488 +v -0.150705 -0.001935 -0.181139 +v -0.076880 -0.017567 -0.189648 +v -0.002603 -0.032882 -0.196719 +v -0.150821 -0.009204 -0.183359 +v -0.076955 -0.025523 -0.192080 +v -0.002641 -0.041511 -0.199358 +v -0.149226 0.021240 -0.152982 +v -0.075934 0.007800 -0.158803 +v -0.002120 -0.005365 -0.163241 +v -0.149607 0.019016 -0.160234 +v -0.076177 0.005365 -0.166748 +v -0.002244 -0.008006 -0.171864 +v -0.149958 0.015449 -0.166932 +v -0.076403 0.001461 -0.174085 +v -0.002359 -0.012241 -0.179827 +v -0.147702 0.015449 -0.123972 +v -0.074959 0.001461 -0.127025 +v -0.001622 -0.012241 -0.128749 +v -0.148054 0.019016 -0.130670 +v -0.075184 0.005365 -0.134362 +v -0.001737 -0.008006 -0.136713 +v -0.148435 0.021240 -0.137922 +v -0.075428 0.007800 -0.142306 +v -0.001861 -0.005365 -0.145336 +v -0.146839 -0.009204 -0.107545 +v -0.074407 -0.025523 -0.109030 +v -0.001340 -0.041511 -0.109218 +v -0.146956 -0.001935 -0.109765 +v -0.074481 -0.017567 -0.111461 +v -0.001378 -0.032882 -0.111857 +v -0.147143 0.004777 -0.113323 +v -0.074601 -0.010220 -0.115360 +v -0.001439 -0.024912 -0.116088 +v -0.147143 -0.038278 -0.113323 +v -0.074601 -0.057346 -0.115360 +v -0.001439 -0.076031 -0.116088 +v -0.146956 -0.031565 -0.109765 +v -0.074481 -0.049999 -0.111461 +v -0.001378 -0.068061 -0.111857 +v -0.146839 -0.024297 -0.107545 +v -0.074407 -0.042043 -0.109030 +v -0.001340 -0.059431 -0.109218 +v -0.148435 -0.054741 -0.137922 +v -0.075428 -0.075366 -0.142306 +v -0.001861 -0.095578 -0.145336 +v -0.148054 -0.052516 -0.130670 +v -0.075184 -0.072931 -0.134362 +v -0.001737 -0.092937 -0.136713 +v -0.147702 -0.048950 -0.123972 +v -0.074959 -0.069027 -0.127025 +v -0.001622 -0.088702 -0.128749 +v -0.149958 -0.048950 -0.166932 +v -0.076403 -0.069027 -0.174085 +v -0.002359 -0.088702 -0.179827 +v -0.149607 -0.052516 -0.160234 +v -0.076177 -0.072931 -0.166748 +v -0.002244 -0.092937 -0.171864 +v -0.149226 -0.054741 -0.152982 +v -0.075934 -0.075366 -0.158803 +v -0.002120 -0.095578 -0.163241 +v -0.150821 -0.024297 -0.183359 +v -0.076955 -0.042043 -0.192080 +v -0.002642 -0.059431 -0.199358 +v -0.150705 -0.031565 -0.181139 +v -0.076880 -0.049999 -0.189648 +v -0.002603 -0.068061 -0.196719 +v -0.150518 -0.038278 -0.177581 +v -0.076760 -0.057346 -0.185750 +v -0.002542 -0.076031 -0.192488 +v 0.147722 -0.052693 -0.199050 +v 0.221369 -0.065010 -0.198890 +v 0.290680 -0.075477 -0.197335 +v 0.147735 -0.061842 -0.203910 +v 0.221398 -0.074673 -0.204025 +v 0.290715 -0.085561 -0.202693 +v 0.147743 -0.071748 -0.206941 +v 0.221416 -0.085138 -0.207227 +v 0.290738 -0.096480 -0.206034 +v 0.147630 -0.030254 -0.165454 +v 0.221168 -0.041308 -0.163400 +v 0.290433 -0.050745 -0.160301 +v 0.147657 -0.033286 -0.175359 +v 0.221227 -0.044510 -0.173864 +v 0.290506 -0.054087 -0.171219 +v 0.147682 -0.038147 -0.184506 +v 0.221282 -0.049645 -0.183527 +v 0.290573 -0.059445 -0.181303 +v 0.147521 -0.038147 -0.125835 +v 0.220932 -0.049645 -0.121546 +v 0.290142 -0.059445 -0.116626 +v 0.147546 -0.033286 -0.134982 +v 0.220986 -0.044510 -0.131209 +v 0.290210 -0.054087 -0.126710 +v 0.147574 -0.030254 -0.144887 +v 0.221045 -0.041308 -0.141673 +v 0.290282 -0.050745 -0.137628 +v 0.147460 -0.071748 -0.103401 +v 0.220797 -0.085138 -0.097846 +v 0.289978 -0.096480 -0.091895 +v 0.147468 -0.061842 -0.106432 +v 0.220816 -0.074673 -0.101048 +v 0.290000 -0.085561 -0.095237 +v 0.147482 -0.052693 -0.111292 +v 0.220845 -0.065010 -0.106182 +v 0.290036 -0.075477 -0.100594 +v 0.147482 -0.111374 -0.111292 +v 0.220845 -0.126994 -0.106182 +v 0.290036 -0.140156 -0.100594 +v 0.147468 -0.102225 -0.106432 +v 0.220816 -0.117331 -0.101048 +v 0.290000 -0.130072 -0.095237 +v 0.147460 -0.092319 -0.103401 +v 0.220797 -0.106866 -0.097846 +v 0.289978 -0.119153 -0.091895 +v 0.147574 -0.133812 -0.144887 +v 0.221045 -0.150696 -0.141673 +v 0.290282 -0.164888 -0.137628 +v 0.147546 -0.130781 -0.134982 +v 0.220986 -0.147494 -0.131209 +v 0.290210 -0.161546 -0.126710 +v 0.147521 -0.125920 -0.125835 +v 0.220932 -0.142359 -0.121546 +v 0.290142 -0.156188 -0.116626 +v 0.147682 -0.125920 -0.184506 +v 0.221282 -0.142359 -0.183527 +v 0.290573 -0.156188 -0.181303 +v 0.147657 -0.130781 -0.175359 +v 0.221227 -0.147494 -0.173864 +v 0.290506 -0.161546 -0.171219 +v 0.147630 -0.133812 -0.165454 +v 0.221168 -0.150696 -0.163400 +v 0.290433 -0.164888 -0.160301 +v 0.147743 -0.092319 -0.206941 +v 0.221416 -0.106866 -0.207227 +v 0.290738 -0.119153 -0.206034 +v 0.147735 -0.102225 -0.203910 +v 0.221398 -0.117331 -0.204025 +v 0.290715 -0.130072 -0.202693 +v 0.147722 -0.111374 -0.199050 +v 0.221369 -0.126994 -0.198890 +v 0.290680 -0.140156 -0.197335 +v 0.529972 -0.136195 -0.186030 +v 0.529952 -0.145632 -0.183142 +v 0.529921 -0.154347 -0.178512 +v 0.529573 -0.136899 -0.189675 +v 0.529553 -0.147014 -0.186579 +v 0.529519 -0.156356 -0.181616 +v 0.522798 -0.137410 -0.192557 +v 0.522776 -0.148017 -0.189311 +v 0.522741 -0.157814 -0.184106 +v 0.529827 -0.168204 -0.164655 +v 0.529767 -0.172835 -0.155940 +v 0.529703 -0.175723 -0.146503 +v 0.529418 -0.171208 -0.166764 +v 0.529354 -0.176171 -0.157422 +v 0.529286 -0.179267 -0.147307 +v 0.522635 -0.173389 -0.168531 +v 0.522569 -0.178594 -0.158736 +v 0.522496 -0.181840 -0.148128 +v 0.529570 -0.175723 -0.126907 +v 0.529506 -0.172835 -0.117471 +v 0.529447 -0.168204 -0.108755 +v 0.529143 -0.179267 -0.126304 +v 0.529074 -0.176171 -0.116189 +v 0.529011 -0.171208 -0.106847 +v 0.522347 -0.181840 -0.126102 +v 0.522275 -0.178594 -0.115495 +v 0.522208 -0.173389 -0.105699 +v 0.529353 -0.154347 -0.094899 +v 0.529321 -0.145632 -0.090268 +v 0.529302 -0.136195 -0.087380 +v 0.528910 -0.156356 -0.091995 +v 0.528876 -0.147014 -0.087032 +v 0.528855 -0.136899 -0.083936 +v 0.522102 -0.157814 -0.090124 +v 0.522067 -0.148017 -0.084919 +v 0.522045 -0.137410 -0.081673 +v 0.529302 -0.116599 -0.087380 +v 0.529321 -0.107161 -0.090268 +v 0.529353 -0.098446 -0.094899 +v 0.528855 -0.115895 -0.083936 +v 0.528876 -0.105779 -0.087032 +v 0.528910 -0.096438 -0.091995 +v 0.522045 -0.115383 -0.081673 +v 0.522067 -0.104776 -0.084919 +v 0.522102 -0.094980 -0.090124 +v 0.529447 -0.084590 -0.108755 +v 0.529506 -0.079959 -0.117471 +v 0.529570 -0.077071 -0.126907 +v 0.529011 -0.081586 -0.106847 +v 0.529074 -0.076622 -0.116189 +v 0.529143 -0.073526 -0.126304 +v 0.522208 -0.079405 -0.105699 +v 0.522275 -0.074200 -0.115495 +v 0.522347 -0.070953 -0.126102 +v 0.529703 -0.077071 -0.146503 +v 0.529767 -0.079959 -0.155940 +v 0.529827 -0.084590 -0.164655 +v 0.529286 -0.073526 -0.147307 +v 0.529354 -0.076622 -0.157422 +v 0.529418 -0.081586 -0.166764 +v 0.522496 -0.070953 -0.148128 +v 0.522569 -0.074200 -0.158736 +v 0.522635 -0.079405 -0.168531 +v 0.529921 -0.098446 -0.178512 +v 0.529952 -0.107161 -0.183142 +v 0.529972 -0.116599 -0.186030 +v 0.529519 -0.096438 -0.181615 +v 0.529553 -0.105779 -0.186579 +v 0.529573 -0.115895 -0.189675 +v 0.522741 -0.094980 -0.184106 +v 0.522776 -0.104776 -0.189311 +v 0.522798 -0.115383 -0.192557 +v 0.487523 -0.126397 -0.136977 +v 0.491434 -0.135702 -0.146257 +v 0.490027 -0.130315 -0.146419 +v 0.491460 -0.126397 -0.150111 +v 0.490027 -0.122479 -0.146419 +v 0.491434 -0.117091 -0.146257 +v 0.489989 -0.116938 -0.140879 +v 0.491371 -0.113236 -0.136951 +v 0.489936 -0.116938 -0.133043 +v 0.491308 -0.117091 -0.127646 +v 0.489898 -0.122479 -0.127502 +v 0.491282 -0.126397 -0.123791 +v 0.489899 -0.130315 -0.127502 +v 0.491308 -0.135702 -0.127646 +v 0.489936 -0.135855 -0.133043 +v 0.491371 -0.139557 -0.136951 +v 0.489989 -0.135855 -0.140879 +v 0.518005 -0.087933 -0.129139 +v 0.517939 -0.090204 -0.121779 +v 0.517909 -0.093802 -0.114969 +v 0.509493 -0.094758 -0.130614 +v 0.509320 -0.096762 -0.124554 +v 0.509413 -0.099631 -0.118851 +v 0.501470 -0.101604 -0.132232 +v 0.501008 -0.103582 -0.127436 +v 0.501405 -0.105577 -0.122640 +v 0.517795 -0.134028 -0.098307 +v 0.517795 -0.141388 -0.100578 +v 0.517835 -0.148198 -0.104176 +v 0.509320 -0.132611 -0.105190 +v 0.509202 -0.138672 -0.107195 +v 0.509353 -0.144374 -0.110062 +v 0.501333 -0.131047 -0.112090 +v 0.500917 -0.135847 -0.114072 +v 0.501360 -0.140640 -0.116063 +v 0.518109 -0.164861 -0.144402 +v 0.518142 -0.162589 -0.151761 +v 0.518205 -0.158991 -0.158571 +v 0.509577 -0.158035 -0.143042 +v 0.509487 -0.156031 -0.149103 +v 0.509657 -0.153163 -0.154805 +v 0.501533 -0.151190 -0.141533 +v 0.501136 -0.149211 -0.146335 +v 0.501598 -0.147216 -0.151125 +v 0.518205 -0.093802 -0.158571 +v 0.518142 -0.090204 -0.151761 +v 0.518109 -0.087933 -0.144402 +v 0.509657 -0.099631 -0.154805 +v 0.509487 -0.096762 -0.149103 +v 0.509577 -0.094758 -0.143042 +v 0.501598 -0.105577 -0.151125 +v 0.501136 -0.103582 -0.146335 +v 0.501533 -0.101604 -0.141533 +v 0.517835 -0.104595 -0.104176 +v 0.517795 -0.111405 -0.100578 +v 0.517795 -0.118765 -0.098307 +v 0.509353 -0.108419 -0.110062 +v 0.509202 -0.114122 -0.107195 +v 0.509320 -0.120182 -0.105190 +v 0.501360 -0.112154 -0.116063 +v 0.500917 -0.116947 -0.114072 +v 0.501333 -0.121746 -0.112090 +v 0.517909 -0.158991 -0.114969 +v 0.517939 -0.162589 -0.121779 +v 0.518005 -0.164861 -0.129139 +v 0.509413 -0.153163 -0.118851 +v 0.509320 -0.156031 -0.124554 +v 0.509493 -0.158035 -0.130614 +v 0.501405 -0.147216 -0.122640 +v 0.501008 -0.149211 -0.127436 +v 0.501470 -0.151190 -0.132232 +v 0.518278 -0.148198 -0.169364 +v 0.518286 -0.141388 -0.172962 +v 0.518318 -0.134028 -0.175233 +v 0.509717 -0.144374 -0.163593 +v 0.509605 -0.138672 -0.166462 +v 0.509750 -0.132611 -0.168466 +v 0.501643 -0.140640 -0.157702 +v 0.501227 -0.135847 -0.159699 +v 0.501670 -0.131047 -0.161675 +v 0.403484 -0.134136 0.208275 +v 0.403508 -0.145513 0.204794 +v 0.403546 -0.156020 0.199211 +v 0.447073 -0.136989 0.206640 +v 0.447096 -0.148354 0.203162 +v 0.447134 -0.158850 0.197585 +v 0.481014 -0.137894 0.204807 +v 0.481037 -0.149113 0.201374 +v 0.481075 -0.159474 0.195869 +v 0.403659 -0.172724 0.182507 +v 0.403730 -0.178307 0.172000 +v 0.403808 -0.181789 0.160624 +v 0.447248 -0.175537 0.180899 +v 0.447319 -0.181113 0.170403 +v 0.447396 -0.184591 0.159039 +v 0.481186 -0.175947 0.179396 +v 0.481257 -0.181453 0.169035 +v 0.481333 -0.184886 0.157816 +v 0.403968 -0.181789 0.137000 +v 0.404046 -0.178307 0.125624 +v 0.404117 -0.172724 0.115118 +v 0.447556 -0.184591 0.135441 +v 0.447634 -0.181113 0.124076 +v 0.447705 -0.175537 0.113581 +v 0.481491 -0.184886 0.134520 +v 0.481568 -0.181453 0.123301 +v 0.481638 -0.175947 0.112941 +v 0.404230 -0.156020 0.098413 +v 0.404268 -0.145513 0.092831 +v 0.404292 -0.134136 0.089349 +v 0.447818 -0.158850 0.096895 +v 0.447856 -0.148354 0.091318 +v 0.447880 -0.136989 0.087840 +v 0.481750 -0.159474 0.096468 +v 0.481787 -0.149113 0.090963 +v 0.481811 -0.137894 0.087529 +v 0.404292 -0.110512 0.089349 +v 0.404268 -0.099136 0.092831 +v 0.404230 -0.088629 0.098413 +v 0.447880 -0.113391 0.087840 +v 0.447856 -0.102026 0.091318 +v 0.447818 -0.091530 0.096895 +v 0.481811 -0.114598 0.087529 +v 0.481787 -0.103378 0.090963 +v 0.481750 -0.093017 0.096468 +v 0.404117 -0.071924 0.115118 +v 0.404046 -0.066342 0.125624 +v 0.403968 -0.062860 0.137001 +v 0.447705 -0.074844 0.113581 +v 0.447634 -0.069267 0.124076 +v 0.447556 -0.065789 0.135441 +v 0.481638 -0.076544 0.112941 +v 0.481568 -0.071039 0.123301 +v 0.481491 -0.067605 0.134520 +v 0.515883 -0.118765 0.183126 +v 0.507408 -0.120182 0.176243 +v 0.499421 -0.121746 0.169343 +v 0.515882 -0.111405 0.180855 +v 0.507290 -0.114122 0.174238 +v 0.499005 -0.116947 0.167362 +v 0.515923 -0.104595 0.177257 +v 0.507441 -0.108419 0.171371 +v 0.499448 -0.112154 0.165370 +v 0.403808 -0.062860 0.160624 +v 0.403730 -0.066342 0.172000 +v 0.403659 -0.071924 0.182507 +v 0.447396 -0.065789 0.159039 +v 0.447319 -0.069267 0.170403 +v 0.447248 -0.074844 0.180899 +v 0.481333 -0.067605 0.157816 +v 0.481257 -0.071039 0.169035 +v 0.481186 -0.076544 0.179396 +v 0.403546 -0.088629 0.199211 +v 0.403508 -0.099136 0.204794 +v 0.403484 -0.110512 0.208275 +v 0.447134 -0.091530 0.197585 +v 0.447096 -0.102026 0.203162 +v 0.447073 -0.113391 0.206640 +v 0.481075 -0.093017 0.195869 +v 0.481037 -0.103378 0.201374 +v 0.481014 -0.114598 0.204807 +v -0.152923 0.004777 0.176386 +v -0.153158 -0.001935 0.179942 +v -0.153305 -0.009204 0.182159 +v -0.079283 -0.010220 0.185557 +v -0.079456 -0.017567 0.189453 +v -0.079563 -0.025523 0.191883 +v -0.005163 -0.024912 0.193302 +v -0.005282 -0.032882 0.197532 +v -0.005356 -0.041512 0.200171 +v -0.151296 0.021240 0.151807 +v -0.151776 0.019016 0.159053 +v -0.152219 0.015449 0.165746 +v -0.078090 0.007800 0.158624 +v -0.078442 0.005365 0.166564 +v -0.078767 0.001461 0.173897 +v -0.004344 -0.005365 0.164064 +v -0.004585 -0.008006 0.172684 +v -0.004809 -0.012241 0.180645 +v -0.149379 0.015449 0.122820 +v -0.149821 0.019016 0.129513 +v -0.150301 0.021240 0.136759 +v -0.076684 0.001461 0.126861 +v -0.077009 0.005365 0.134195 +v -0.077360 0.007800 0.142135 +v -0.003377 -0.012241 0.129582 +v -0.003600 -0.008006 0.137543 +v -0.003842 -0.005365 0.146163 +v -0.148293 -0.009204 0.106407 +v -0.148439 -0.001936 0.108624 +v -0.148675 0.004777 0.112180 +v -0.075887 -0.025523 0.108876 +v -0.075995 -0.017567 0.111306 +v -0.076167 -0.010220 0.115202 +v -0.002830 -0.041512 0.110056 +v -0.002904 -0.032882 0.112695 +v -0.003022 -0.024912 0.116925 +v -0.148675 -0.038278 0.112180 +v -0.148439 -0.031565 0.108624 +v -0.148293 -0.024297 0.106407 +v -0.076167 -0.057346 0.115202 +v -0.075995 -0.049999 0.111306 +v -0.075887 -0.042043 0.108876 +v -0.003022 -0.076031 0.116925 +v -0.002904 -0.068061 0.112695 +v -0.002830 -0.059431 0.110056 +v -0.150301 -0.054741 0.136759 +v -0.149821 -0.052516 0.129513 +v -0.149379 -0.048950 0.122820 +v -0.077360 -0.075366 0.142135 +v -0.077009 -0.072931 0.134195 +v -0.076684 -0.069027 0.126861 +v -0.003842 -0.095578 0.146163 +v -0.003600 -0.092937 0.137543 +v -0.003377 -0.088702 0.129582 +v -0.152219 -0.048950 0.165746 +v -0.151776 -0.052516 0.159053 +v -0.151296 -0.054741 0.151807 +v -0.078767 -0.069027 0.173897 +v -0.078442 -0.072931 0.166564 +v -0.078090 -0.075366 0.158624 +v -0.004809 -0.088702 0.180645 +v -0.004585 -0.092937 0.172684 +v -0.004344 -0.095578 0.164064 +v -0.153305 -0.024297 0.182159 +v -0.153158 -0.031565 0.179942 +v -0.152923 -0.038278 0.176386 +v -0.079563 -0.042043 0.191883 +v -0.079456 -0.049999 0.189453 +v -0.079283 -0.057346 0.185557 +v -0.005356 -0.059431 0.200171 +v -0.005282 -0.068061 0.197532 +v -0.005163 -0.076031 0.193302 +v 0.144998 -0.052693 0.201905 +v 0.144945 -0.061842 0.206765 +v 0.144912 -0.071748 0.209796 +v 0.218640 -0.065010 0.202746 +v 0.218599 -0.074673 0.207881 +v 0.218574 -0.085138 0.211083 +v 0.287966 -0.075477 0.202133 +v 0.287929 -0.085561 0.207491 +v 0.287905 -0.096480 0.210832 +v 0.145362 -0.030254 0.168312 +v 0.145255 -0.033286 0.178216 +v 0.145155 -0.038147 0.187363 +v 0.218922 -0.041308 0.167257 +v 0.218839 -0.044510 0.177720 +v 0.218762 -0.049645 0.187383 +v 0.288222 -0.050745 0.165099 +v 0.288147 -0.054087 0.176018 +v 0.288077 -0.059445 0.186101 +v 0.145792 -0.038147 0.128695 +v 0.145693 -0.033286 0.137842 +v 0.145585 -0.030254 0.147746 +v 0.219254 -0.049645 0.125403 +v 0.219177 -0.044510 0.135066 +v 0.219094 -0.041308 0.145530 +v 0.288525 -0.059445 0.121425 +v 0.288455 -0.054087 0.131508 +v 0.288379 -0.050745 0.142427 +v 0.146035 -0.071748 0.106261 +v 0.146003 -0.061842 0.109292 +v 0.145950 -0.052693 0.114153 +v 0.219442 -0.085138 0.101703 +v 0.219416 -0.074673 0.104906 +v 0.219376 -0.065010 0.110040 +v 0.288696 -0.096480 0.096693 +v 0.288673 -0.085561 0.100035 +v 0.288636 -0.075477 0.105393 +v 0.145950 -0.111374 0.114153 +v 0.146003 -0.102225 0.109292 +v 0.146035 -0.092319 0.106261 +v 0.219376 -0.126994 0.110040 +v 0.219416 -0.117331 0.104906 +v 0.219442 -0.106866 0.101703 +v 0.288636 -0.140156 0.105393 +v 0.288673 -0.130072 0.100035 +v 0.288696 -0.119153 0.096693 +v 0.145585 -0.133812 0.147746 +v 0.145693 -0.130781 0.137842 +v 0.145792 -0.125920 0.128695 +v 0.219094 -0.150696 0.145530 +v 0.219177 -0.147494 0.135066 +v 0.219254 -0.142359 0.125403 +v 0.288379 -0.164888 0.142427 +v 0.288455 -0.161546 0.131508 +v 0.288525 -0.156188 0.121425 +v 0.145155 -0.125920 0.187363 +v 0.145255 -0.130781 0.178216 +v 0.145362 -0.133812 0.168312 +v 0.218762 -0.142359 0.187383 +v 0.218839 -0.147494 0.177720 +v 0.218922 -0.150696 0.167257 +v 0.288077 -0.156188 0.186101 +v 0.288147 -0.161546 0.176018 +v 0.288222 -0.164888 0.165099 +v 0.144912 -0.092319 0.209796 +v 0.144945 -0.102225 0.206765 +v 0.144998 -0.111374 0.201905 +v 0.218574 -0.106866 0.211083 +v 0.218599 -0.117331 0.207881 +v 0.218640 -0.126994 0.202746 +v 0.287905 -0.119153 0.210832 +v 0.287928 -0.130072 0.207491 +v 0.287966 -0.140156 0.202133 +v 0.527389 -0.136195 0.194081 +v 0.526941 -0.136899 0.197719 +v 0.520128 -0.137410 0.200510 +v 0.527409 -0.145632 0.191193 +v 0.526962 -0.147014 0.194624 +v 0.520150 -0.148017 0.197264 +v 0.527440 -0.154347 0.186562 +v 0.526996 -0.156356 0.189660 +v 0.520185 -0.157814 0.192059 +v 0.527535 -0.168204 0.172706 +v 0.527097 -0.171208 0.174809 +v 0.520291 -0.173389 0.176484 +v 0.527594 -0.172835 0.163991 +v 0.527161 -0.176171 0.165467 +v 0.520357 -0.178594 0.166688 +v 0.527658 -0.175723 0.154554 +v 0.527229 -0.179267 0.155352 +v 0.520430 -0.181840 0.156081 +v 0.527791 -0.175723 0.134958 +v 0.527372 -0.179267 0.134348 +v 0.520579 -0.181840 0.134055 +v 0.527855 -0.172835 0.125521 +v 0.527441 -0.176171 0.124233 +v 0.520651 -0.178594 0.123448 +v 0.527914 -0.168204 0.116806 +v 0.527504 -0.171208 0.114892 +v 0.520718 -0.173389 0.113652 +v 0.528008 -0.154347 0.102950 +v 0.527605 -0.156356 0.100040 +v 0.520824 -0.157814 0.098077 +v 0.528040 -0.145632 0.098319 +v 0.527639 -0.147014 0.095077 +v 0.520859 -0.148017 0.092872 +v 0.528060 -0.136195 0.095431 +v 0.527660 -0.136899 0.091981 +v 0.520881 -0.137410 0.089626 +v 0.528060 -0.116599 0.095431 +v 0.527660 -0.115895 0.091981 +v 0.520881 -0.115383 0.089626 +v 0.528040 -0.107161 0.098319 +v 0.527639 -0.105779 0.095077 +v 0.520859 -0.104776 0.092872 +v 0.528008 -0.098446 0.102950 +v 0.527605 -0.096438 0.100040 +v 0.520824 -0.094980 0.098077 +v 0.527914 -0.084590 0.116806 +v 0.527504 -0.081586 0.114892 +v 0.520718 -0.079405 0.113652 +v 0.527855 -0.079959 0.125521 +v 0.527441 -0.076622 0.124233 +v 0.520651 -0.074200 0.123448 +v 0.527791 -0.077071 0.134958 +v 0.527372 -0.073526 0.134348 +v 0.520579 -0.070953 0.134055 +v 0.527658 -0.077071 0.154554 +v 0.527229 -0.073526 0.155352 +v 0.520430 -0.070953 0.156081 +v 0.527594 -0.079959 0.163991 +v 0.527161 -0.076622 0.165467 +v 0.520357 -0.074200 0.166688 +v 0.527535 -0.084590 0.172706 +v 0.527097 -0.081586 0.174808 +v 0.520291 -0.079405 0.176484 +v 0.527440 -0.098446 0.186562 +v 0.526996 -0.096438 0.189660 +v 0.520185 -0.094980 0.192059 +v 0.527409 -0.107161 0.191193 +v 0.526962 -0.105779 0.194624 +v 0.520150 -0.104776 0.197264 +v 0.527389 -0.116599 0.194081 +v 0.526941 -0.115895 0.197719 +v 0.520128 -0.115383 0.200510 +v 0.485611 -0.126397 0.144456 +v 0.489396 -0.135702 0.153787 +v 0.488024 -0.135855 0.148390 +v 0.489459 -0.139557 0.144482 +v 0.488077 -0.135855 0.140555 +v 0.489522 -0.135702 0.135176 +v 0.488115 -0.130315 0.135014 +v 0.489548 -0.126397 0.131322 +v 0.488115 -0.122479 0.135014 +v 0.489522 -0.117091 0.135176 +v 0.488077 -0.116938 0.140555 +v 0.489459 -0.113236 0.144482 +v 0.488024 -0.116938 0.148390 +v 0.489396 -0.117091 0.153787 +v 0.487986 -0.122479 0.153931 +v 0.489369 -0.126397 0.157642 +v 0.487986 -0.130315 0.153931 +v 0.516197 -0.087933 0.137032 +v 0.507665 -0.094758 0.138391 +v 0.499621 -0.101604 0.139901 +v 0.516230 -0.090204 0.129672 +v 0.507575 -0.096762 0.132330 +v 0.499224 -0.103582 0.135098 +v 0.516293 -0.093802 0.122862 +v 0.507745 -0.099631 0.126628 +v 0.499686 -0.105577 0.130308 +v 0.516406 -0.134028 0.106200 +v 0.507838 -0.132611 0.112968 +v 0.499758 -0.131047 0.119758 +v 0.516374 -0.141388 0.108471 +v 0.507693 -0.138672 0.114971 +v 0.499315 -0.135847 0.121734 +v 0.516366 -0.148198 0.112070 +v 0.507805 -0.144374 0.117840 +v 0.499731 -0.140640 0.123732 +v 0.516093 -0.164861 0.152295 +v 0.507581 -0.158035 0.150820 +v 0.499558 -0.151190 0.149201 +v 0.516026 -0.162589 0.159654 +v 0.507408 -0.156031 0.156879 +v 0.499095 -0.149211 0.153998 +v 0.515997 -0.158991 0.166465 +v 0.507501 -0.153163 0.162583 +v 0.499492 -0.147216 0.158794 +v 0.515997 -0.093802 0.166465 +v 0.507501 -0.099631 0.162583 +v 0.499492 -0.105577 0.158794 +v 0.516026 -0.090204 0.159654 +v 0.507408 -0.096762 0.156879 +v 0.499095 -0.103582 0.153998 +v 0.516093 -0.087933 0.152295 +v 0.507581 -0.094758 0.150820 +v 0.499558 -0.101604 0.149201 +v 0.516366 -0.104595 0.112070 +v 0.507805 -0.108419 0.117840 +v 0.499731 -0.112154 0.123732 +v 0.516374 -0.111405 0.108471 +v 0.507693 -0.114122 0.114971 +v 0.499315 -0.116947 0.121734 +v 0.516406 -0.118765 0.106200 +v 0.507838 -0.120182 0.112968 +v 0.499758 -0.121746 0.119758 +v 0.516293 -0.158991 0.122862 +v 0.507745 -0.153163 0.126628 +v 0.499686 -0.147216 0.130308 +v 0.516230 -0.162589 0.129672 +v 0.507575 -0.156031 0.132330 +v 0.499224 -0.149211 0.135098 +v 0.516196 -0.164861 0.137032 +v 0.507665 -0.158035 0.138391 +v 0.499621 -0.151190 0.139901 +v 0.515923 -0.148198 0.177257 +v 0.507441 -0.144374 0.171371 +v 0.499448 -0.140640 0.165370 +v 0.515882 -0.141388 0.180855 +v 0.507290 -0.138672 0.174238 +v 0.499005 -0.135847 0.167362 +v 0.515883 -0.134028 0.183126 +v 0.507408 -0.132611 0.176243 +v 0.499421 -0.131047 0.169343 +v 0.809288 0.112043 -0.089728 +v 0.697644 0.174823 0.004620 +v 0.808409 0.112043 0.100428 +v 0.996462 0.154354 0.006650 +v 0.987511 0.095505 0.075265 +v 1.136323 0.095505 0.007601 +v 0.988444 0.095505 -0.062079 +v 0.665123 0.089690 0.128319 +v 0.704007 0.095756 0.120750 +v 0.705258 0.095759 -0.111454 +v 0.666465 0.089687 -0.119555 +v 0.572605 0.168906 0.003771 +v 0.617038 0.171009 0.004072 +v 0.139064 0.152757 0.001377 +v 0.148580 0.153244 0.001442 +v -0.438403 0.120271 -0.002546 +v -0.428615 0.121551 -0.002480 +v 0.147037 0.013746 0.228834 +v 0.137616 0.013013 0.232180 +v -0.302312 0.013013 0.458741 +v -0.311979 0.013013 0.459557 +v 0.140753 0.013013 -0.229424 +v 0.150127 0.013747 -0.225950 +v -0.305712 0.013013 -0.462890 +v -0.296056 0.013013 -0.461942 +v 0.148619 -0.076481 0.001442 +v 0.139076 -0.076110 0.001377 +v 0.137765 -0.075800 0.197041 +v 0.147315 -0.076481 0.193624 +v 0.149926 -0.076481 -0.190740 +v 0.140423 -0.075800 -0.194287 +v 0.136363 0.000099 0.477098 +v 0.126879 0.000099 0.482114 +v 0.136655 0.013013 0.371639 +v 0.146134 0.013364 0.366618 +v 0.151096 0.013364 -0.363737 +v 0.141687 0.013013 -0.368886 +v 0.133412 0.000099 -0.479478 +v 0.142827 0.000099 -0.474334 +v -0.420693 0.013013 -0.800269 +v -0.430589 0.013013 -0.801799 +v -0.430801 0.012868 -0.805230 +v -0.429202 0.012793 -0.808052 +v -0.428748 0.012770 -0.808390 +v -0.441449 0.013013 0.796736 +v -0.431532 0.013013 0.795340 +v -0.439697 0.012770 0.803351 +v -0.440147 0.012793 0.803007 +v -0.441708 0.012868 0.800163 +v 0.146128 -0.012814 0.366620 +v 0.136664 -0.012814 0.371633 +v 0.151091 -0.012814 -0.363739 +v 0.141695 -0.012814 -0.368880 +v -0.428766 0.005595 -0.808216 +v -0.420697 0.005835 -0.800228 +v -0.430601 0.005836 -0.801690 +v -0.430820 0.005693 -0.805056 +v -0.429221 0.005618 -0.807878 +v -0.441724 0.005693 0.799989 +v -0.441459 0.005836 0.796627 +v -0.431536 0.005835 0.795299 +v -0.439713 0.005595 0.803177 +v -0.440163 0.005618 0.802833 +v 0.147036 0.006858 0.227163 +v 0.137718 0.005955 0.231105 +v 0.138842 0.145583 0.001376 +v 0.148358 0.146070 0.001440 +v -0.302162 0.005882 0.458077 +v -0.311853 0.005868 0.459000 +v -0.438136 0.113100 -0.002545 +v -0.428349 0.114380 -0.002478 +v 0.140840 0.005955 -0.228348 +v 0.150103 0.006859 -0.224280 +v -0.305594 0.005868 -0.462331 +v -0.295915 0.005882 -0.461276 +v 0.137506 -0.068743 0.195985 +v 0.147250 -0.069350 0.192953 +v 0.148888 -0.069310 0.001444 +v 0.139346 -0.068939 0.001379 +v 0.149853 -0.069350 -0.190070 +v 0.140151 -0.068743 -0.193234 +v 0.133913 0.000078 0.471698 +v 0.124429 0.000074 0.476714 +v 0.136598 0.005851 0.371239 +v 0.146249 0.006191 0.366420 +v 0.151209 0.006191 -0.363538 +v 0.141624 0.005851 -0.368487 +v 0.130889 0.000074 -0.474112 +v 0.140304 0.000078 -0.468968 +v 0.145628 -0.005850 0.365274 +v 0.136254 -0.005751 0.370656 +v 0.150572 -0.005850 -0.362400 +v 0.141272 -0.005751 -0.367909 +v 0.124314 0.148326 -0.013453 +v -0.403552 0.114103 -0.020106 +v -0.284796 0.021112 -0.437134 +v 0.126999 0.016455 -0.221598 +v 0.123970 0.016455 0.224168 +v -0.290716 0.021112 0.434088 +v -0.403794 0.114103 0.015485 +v 0.124113 0.148326 0.016005 +v -0.403270 0.122167 -0.022030 +v 0.124595 0.156390 -0.015378 +v 0.127281 0.024519 -0.223522 +v -0.284515 0.029177 -0.439059 +v 0.124226 0.024519 0.226096 +v -0.290460 0.029177 0.436017 +v 0.124369 0.156390 0.017934 +v -0.403538 0.122167 0.017413 +v 0.987155 -0.076481 0.011474 +v 0.809480 -0.076481 0.010962 +v 0.808926 -0.076481 0.110052 +v 0.979289 -0.076481 0.072280 +v 0.980169 -0.076481 -0.058096 +v 0.809960 -0.076481 -0.098226 +v 0.809531 -0.076481 0.000901 +v 0.987214 -0.076481 0.002804 +v 0.809480 -0.082514 0.010962 +v 0.987155 -0.082514 0.011474 +v 0.979289 -0.082514 0.072280 +v 0.808926 -0.082514 0.110052 +v 0.809960 -0.082514 -0.098226 +v 0.980169 -0.082514 -0.058096 +v 0.987214 -0.082514 0.002804 +v 0.809531 -0.082514 0.000901 +v 1.131950 -0.012814 0.008123 +v 0.974968 -0.075115 0.078583 +v 0.975928 -0.075114 -0.064466 +v 0.992088 -0.076481 0.007173 +v 1.119941 -0.016136 0.008041 +v 0.981481 -0.053804 0.007101 +v 0.974138 -0.052296 0.071889 +v 0.975019 -0.052296 -0.057781 +v 0.680152 -0.076481 0.130852 +v 0.803931 -0.076481 0.116270 +v 0.681527 -0.076481 -0.120778 +v 0.805019 -0.076481 -0.104525 +v 0.805238 -0.012814 -0.148940 +v 0.984070 -0.076481 -0.061557 +v 0.681926 -0.012814 -0.189431 +v 0.983137 -0.076481 0.075787 +v 0.803259 -0.012814 0.160690 +v 0.679385 -0.012814 0.199509 +v 0.804111 -0.010442 -0.145249 +v 0.804458 -0.072049 -0.102326 +v 0.802182 -0.010444 0.156983 +v 0.803399 -0.072053 0.114060 +v 0.680316 -0.072139 0.128507 +v 0.681660 -0.072138 -0.118432 +v 0.975176 -0.071929 -0.061341 +v 0.682096 -0.009904 -0.185802 +v 0.974258 -0.071933 0.075446 +v 0.679607 -0.009906 0.195881 +v -0.307265 -0.034117 0.461255 +v -0.434987 -0.046871 -0.002523 +v -0.300975 -0.034117 -0.464523 +v -0.672455 -0.033274 -0.004137 +v -0.405417 -0.029071 -0.429008 +v -0.411215 -0.029071 0.424324 +vt 0.309092 0.571615 +vt 0.262940 0.532073 +vt 0.261124 0.531843 +vt 0.307275 0.571386 +vt 0.765188 0.579014 +vt 0.545699 0.577740 +vt 0.545587 0.578541 +vt 0.765076 0.579815 +vt 0.314358 0.490750 +vt 0.314337 0.514702 +vt 0.322406 0.520075 +vt 0.535567 0.477069 +vt 0.535553 0.419778 +vt 0.361082 0.571615 +vt 0.535568 0.571615 +vt 0.779628 0.571615 +vt 0.876752 0.571615 +vt 0.767139 0.394213 +vt 0.725760 0.379844 +vt 0.778637 0.903940 +vt 0.820780 0.877903 +vt 0.767139 0.749018 +vt 0.725760 0.763386 +vt 0.262713 0.617829 +vt 0.313871 0.624106 +vt 0.314130 0.622943 +vt 0.262997 0.616589 +vt 0.188375 0.600168 +vt 0.262769 0.611136 +vt 0.260952 0.610907 +vt 0.186558 0.599939 +vt 0.776812 0.905068 +vt 0.723765 0.764079 +vt 0.767139 0.749018 +vt 0.820780 0.877903 +vt 0.535553 0.723451 +vt 0.314316 0.652466 +vt 0.265055 0.681545 +vt 0.539304 0.769413 +vt 0.129842 0.571615 +vt 0.187245 0.544658 +vt 0.192128 0.544658 +vt 0.131688 0.571615 +vt 0.260759 0.573707 +vt 0.260710 0.614907 +vt 0.260710 0.614907 +vt 0.260759 0.573707 +vt 0.539519 0.571615 +vt 0.539512 0.490261 +vt 0.723765 0.379152 +vt 0.777858 0.571615 +vt 0.184312 0.571615 +vt 0.189258 0.571615 +vt 0.314358 0.490750 +vt 0.535556 0.419778 +vt 0.535551 0.491708 +vt 0.314330 0.519295 +vt 0.314191 0.623918 +vt 0.535551 0.651523 +vt 0.535556 0.723452 +vt 0.314316 0.652466 +vt 0.776813 0.238162 +vt 0.820780 0.265327 +vt 0.767139 0.394213 +vt 0.535552 0.571615 +vt 0.314261 0.571615 +vt 0.876752 0.571615 +vt 0.767118 0.749018 +vt 0.876944 0.571615 +vt 0.778208 0.571615 +vt 0.723795 0.764079 +vt 0.539476 0.417667 +vt 0.263157 0.507558 +vt 0.314019 0.491096 +vt 0.314277 0.492258 +vt 0.263433 0.508774 +vt 0.539476 0.725563 +vt 0.539512 0.652970 +vt 0.189987 0.544512 +vt 0.260868 0.528309 +vt 0.260868 0.528309 +vt 0.189987 0.544512 +vt 0.188375 0.543062 +vt 0.262975 0.507236 +vt 0.342607 0.571615 +vt 0.306255 0.523334 +vt 0.539474 0.475651 +vt 0.721743 0.380211 +vt 0.774518 0.239897 +vt 0.539480 0.417664 +vt 0.322264 0.623137 +vt 0.314220 0.628511 +vt 0.535567 0.666162 +vt 0.359265 0.571386 +vt 0.320447 0.622908 +vt 0.539480 0.725565 +vt 0.774518 0.903332 +vt 0.721743 0.763020 +vt 0.539474 0.667580 +vt 0.126695 0.571615 +vt 0.124878 0.571386 +vt 0.262923 0.635976 +vt 0.898672 0.180859 +vt 0.820780 0.265327 +vt 0.903514 0.195938 +vt 0.903514 0.947294 +vt 0.898672 0.962372 +vt 0.964839 0.562775 +vt 0.876752 0.571615 +vt 0.964839 0.580456 +vt 0.778735 0.237863 +vt 0.778637 0.239289 +vt 0.818833 0.251165 +vt 0.793574 0.235559 +vt 0.778735 0.905366 +vt 0.778078 0.906544 +vt 0.851176 0.991843 +vt 0.853403 0.977487 +vt 0.793573 0.907671 +vt 0.840957 0.796821 +vt 0.842434 0.778382 +vt 0.842434 0.364850 +vt 0.840957 0.346411 +vt 0.851176 0.151388 +vt 0.834048 0.152171 +vt 0.834048 0.991061 +vt 0.201455 0.482064 +vt 0.104730 0.526840 +vt 0.201455 0.661168 +vt 0.829888 0.871187 +vt 0.876079 0.909929 +vt 0.876323 0.909929 +vt 0.830132 0.871187 +vt 0.818832 0.892065 +vt 0.793817 0.907671 +vt 0.819076 0.892065 +vt 0.543233 0.771525 +vt 0.777890 0.236544 +vt 0.543233 0.371707 +vt 0.017438 0.571616 +vt 0.104730 0.616392 +vt 0.853403 0.165745 +vt 0.793818 0.235559 +vt 0.853648 0.165745 +vt 0.783482 0.399682 +vt 0.882503 0.559952 +vt 0.882747 0.559952 +vt 0.783726 0.399682 +vt 0.832129 0.804213 +vt 0.790903 0.777516 +vt 0.791147 0.777516 +vt 0.832373 0.804213 +vt 0.819077 0.251165 +vt 0.262975 0.507236 +vt 0.188375 0.543062 +vt 0.262923 0.635976 +vt 0.539304 0.373819 +vt 0.265055 0.461687 +vt 0.778078 0.236686 +vt 0.126695 0.571615 +vt 0.188375 0.600168 +vt 0.778606 0.719691 +vt 0.870178 0.571615 +vt 0.778606 0.423540 +vt 0.870108 0.571615 +vt 0.777890 0.906686 +vt 0.881517 0.183189 +vt 0.946180 0.553557 +vt 0.837889 0.378465 +vt 0.881517 0.960043 +vt 0.783482 0.743549 +vt 0.882503 0.583279 +vt 0.837889 0.764767 +vt 0.946180 0.589674 +vt 0.790903 0.365716 +vt 0.829888 0.272043 +vt 0.832129 0.339019 +vt 0.876079 0.233302 +vt 0.881761 0.183189 +vt 0.946424 0.553557 +vt 0.838133 0.378465 +vt 0.853648 0.977487 +vt 0.881761 0.960043 +vt 0.882747 0.583279 +vt 0.783726 0.743549 +vt 0.838133 0.764767 +vt 0.946424 0.589674 +vt 0.830132 0.272043 +vt 0.791147 0.365716 +vt 0.832373 0.339019 +vt 0.876324 0.233302 +vt 0.765188 0.564216 +vt 0.716991 0.390494 +vt 0.716879 0.389693 +vt 0.765076 0.563415 +vt 0.262855 0.571615 +vt 0.262769 0.617506 +vt 0.262940 0.525703 +vt 0.191764 0.601354 +vt 0.192068 0.600051 +vt 0.314010 0.519108 +vt 0.314268 0.520270 +vt 0.306119 0.619880 +vt 0.320589 0.519846 +vt 0.186558 0.542833 +vt 0.429002 0.486341 +vt 0.410884 0.487145 +vt 0.410884 0.488591 +vt 0.429002 0.487789 +vt 0.396778 0.488002 +vt 0.396778 0.489430 +vt 0.410884 0.490909 +vt 0.429002 0.490110 +vt 0.396778 0.491719 +vt 0.451121 0.485101 +vt 0.429002 0.485842 +vt 0.451121 0.485594 +vt 0.410884 0.486646 +vt 0.396778 0.487510 +vt 0.386694 0.488432 +vt 0.386694 0.488913 +vt 0.386694 0.490308 +vt 0.386694 0.492545 +vt 0.386694 0.495551 +vt 0.396778 0.494795 +vt 0.410884 0.494026 +vt 0.429002 0.493230 +vt 0.451121 0.489315 +vt 0.451121 0.492395 +vt 0.451121 0.487024 +vt 0.429002 0.497056 +vt 0.410884 0.497847 +vt 0.410884 0.502211 +vt 0.429002 0.501424 +vt 0.396778 0.498568 +vt 0.396778 0.502876 +vt 0.410884 0.506936 +vt 0.429002 0.506154 +vt 0.396778 0.507541 +vt 0.451121 0.496172 +vt 0.386694 0.499238 +vt 0.386694 0.503447 +vt 0.386694 0.508006 +vt 0.386694 0.512738 +vt 0.396778 0.512384 +vt 0.410884 0.511842 +vt 0.429002 0.511065 +vt 0.451121 0.505156 +vt 0.451121 0.510005 +vt 0.451121 0.500486 +vt 0.429002 0.515977 +vt 0.410884 0.516748 +vt 0.410884 0.521473 +vt 0.429002 0.520707 +vt 0.396778 0.517227 +vt 0.396778 0.521891 +vt 0.410884 0.525837 +vt 0.429002 0.525075 +vt 0.396778 0.526199 +vt 0.451121 0.514853 +vt 0.386694 0.517471 +vt 0.386694 0.522029 +vt 0.386694 0.526239 +vt 0.386694 0.529925 +vt 0.396778 0.529972 +vt 0.410884 0.529659 +vt 0.429002 0.528901 +vt 0.451121 0.523837 +vt 0.451121 0.527614 +vt 0.451121 0.519524 +vt 0.429002 0.532021 +vt 0.410884 0.532775 +vt 0.410884 0.535094 +vt 0.429002 0.534342 +vt 0.396778 0.533049 +vt 0.396778 0.535337 +vt 0.410884 0.536540 +vt 0.429002 0.535790 +vt 0.396778 0.536765 +vt 0.451121 0.530694 +vt 0.386694 0.532931 +vt 0.386694 0.535168 +vt 0.386694 0.536563 +vt 0.386694 0.537044 +vt 0.396778 0.537257 +vt 0.410884 0.537039 +vt 0.429002 0.536289 +vt 0.451121 0.534415 +vt 0.451121 0.534908 +vt 0.451121 0.532986 +vt 0.429002 0.535790 +vt 0.410884 0.536540 +vt 0.410884 0.535094 +vt 0.429002 0.534342 +vt 0.396778 0.536765 +vt 0.396778 0.535337 +vt 0.410884 0.532775 +vt 0.429002 0.532021 +vt 0.396778 0.533049 +vt 0.451121 0.534415 +vt 0.386694 0.536563 +vt 0.386694 0.535168 +vt 0.386694 0.532931 +vt 0.386694 0.529925 +vt 0.396778 0.529972 +vt 0.410884 0.529659 +vt 0.429002 0.528901 +vt 0.451121 0.530694 +vt 0.451121 0.527614 +vt 0.451121 0.532986 +vt 0.429002 0.525075 +vt 0.410884 0.525837 +vt 0.410884 0.521473 +vt 0.429002 0.520707 +vt 0.396778 0.526199 +vt 0.396778 0.521891 +vt 0.410884 0.516748 +vt 0.429002 0.515977 +vt 0.396778 0.517227 +vt 0.451121 0.523837 +vt 0.386694 0.526239 +vt 0.386694 0.522029 +vt 0.386694 0.517471 +vt 0.386694 0.512738 +vt 0.396778 0.512384 +vt 0.410884 0.511842 +vt 0.429002 0.511065 +vt 0.451121 0.514853 +vt 0.451121 0.510005 +vt 0.451121 0.519524 +vt 0.382341 0.497115 +vt 0.382348 0.498059 +vt 0.385939 0.500786 +vt 0.385885 0.499953 +vt 0.382341 0.499555 +vt 0.385885 0.501979 +vt 0.389404 0.503622 +vt 0.389225 0.502799 +vt 0.389225 0.504451 +vt 0.379307 0.494209 +vt 0.379307 0.494583 +vt 0.382335 0.496785 +vt 0.379307 0.495668 +vt 0.379307 0.497407 +vt 0.379307 0.499744 +vt 0.382335 0.501566 +vt 0.385830 0.503578 +vt 0.389021 0.505519 +vt 0.391104 0.506970 +vt 0.391842 0.506865 +vt 0.392212 0.506418 +vt 0.391842 0.505417 +vt 0.389021 0.502376 +vt 0.391104 0.504427 +vt 0.385830 0.499630 +vt 0.429002 0.506154 +vt 0.410884 0.506936 +vt 0.410884 0.502211 +vt 0.429002 0.501424 +vt 0.396778 0.507541 +vt 0.396778 0.502876 +vt 0.410884 0.497847 +vt 0.429002 0.497056 +vt 0.396778 0.498568 +vt 0.451121 0.505156 +vt 0.386694 0.508006 +vt 0.386694 0.503447 +vt 0.386694 0.499238 +vt 0.386694 0.495551 +vt 0.396778 0.494795 +vt 0.410884 0.494026 +vt 0.429002 0.493230 +vt 0.451121 0.496172 +vt 0.451121 0.492395 +vt 0.451121 0.500486 +vt 0.429002 0.490110 +vt 0.410884 0.490909 +vt 0.410884 0.488591 +vt 0.429002 0.487789 +vt 0.396778 0.491719 +vt 0.396778 0.489430 +vt 0.410884 0.487145 +vt 0.429002 0.486341 +vt 0.396778 0.488002 +vt 0.451121 0.489315 +vt 0.386694 0.492545 +vt 0.386694 0.490308 +vt 0.386694 0.488913 +vt 0.451121 0.485594 +vt 0.451121 0.487024 +vt 0.660429 0.498028 +vt 0.629786 0.494424 +vt 0.629847 0.492803 +vt 0.660517 0.496549 +vt 0.598948 0.491412 +vt 0.598985 0.489653 +vt 0.629885 0.491792 +vt 0.660571 0.495627 +vt 0.599008 0.488556 +vt 0.690817 0.503726 +vt 0.660311 0.500016 +vt 0.690974 0.501930 +vt 0.629704 0.496601 +vt 0.598897 0.493777 +vt 0.567789 0.491837 +vt 0.567816 0.489292 +vt 0.567835 0.487399 +vt 0.567847 0.486218 +vt 0.567851 0.485811 +vt 0.599016 0.488178 +vt 0.629898 0.491444 +vt 0.660590 0.495309 +vt 0.691163 0.499761 +vt 0.691188 0.499473 +vt 0.691091 0.500594 +vt 0.659822 0.508252 +vt 0.629366 0.505625 +vt 0.629490 0.502322 +vt 0.660001 0.505238 +vt 0.598689 0.503571 +vt 0.598765 0.499986 +vt 0.629604 0.499272 +vt 0.660166 0.502454 +vt 0.598836 0.496676 +vt 0.689921 0.513994 +vt 0.659637 0.511382 +vt 0.690168 0.511167 +vt 0.629238 0.509053 +vt 0.598610 0.507293 +vt 0.567640 0.506385 +vt 0.567681 0.502379 +vt 0.567721 0.498520 +vt 0.567757 0.494957 +vt 0.690625 0.505929 +vt 0.690405 0.508443 +vt 0.659107 0.520309 +vt 0.628871 0.518834 +vt 0.628985 0.515785 +vt 0.659272 0.517526 +vt 0.598385 0.517910 +vt 0.598455 0.514600 +vt 0.629109 0.512482 +vt 0.659451 0.514511 +vt 0.598531 0.511015 +vt 0.689025 0.524262 +vt 0.658962 0.522747 +vt 0.689217 0.522059 +vt 0.628771 0.521505 +vt 0.598323 0.520810 +vt 0.567491 0.520933 +vt 0.567523 0.517812 +vt 0.567559 0.514249 +vt 0.567599 0.510391 +vt 0.689674 0.516821 +vt 0.689437 0.519544 +vt 0.658702 0.527136 +vt 0.628591 0.526315 +vt 0.628629 0.525304 +vt 0.658756 0.526214 +vt 0.598212 0.526030 +vt 0.598236 0.524933 +vt 0.628689 0.523683 +vt 0.658844 0.524735 +vt 0.598273 0.523174 +vt 0.688654 0.528515 +vt 0.658683 0.527455 +vt 0.688679 0.528227 +vt 0.628578 0.526663 +vt 0.598204 0.526408 +vt 0.567429 0.526959 +vt 0.567433 0.526552 +vt 0.567445 0.525371 +vt 0.567465 0.523477 +vt 0.688868 0.526058 +vt 0.688752 0.527394 +vt 0.658844 0.524735 +vt 0.628689 0.523683 +vt 0.628629 0.525304 +vt 0.658756 0.526214 +vt 0.598273 0.523174 +vt 0.598236 0.524933 +vt 0.628591 0.526315 +vt 0.658702 0.527136 +vt 0.598212 0.526030 +vt 0.689025 0.524262 +vt 0.658962 0.522747 +vt 0.688868 0.526058 +vt 0.628771 0.521505 +vt 0.598323 0.520810 +vt 0.567491 0.520933 +vt 0.567465 0.523477 +vt 0.567445 0.525371 +vt 0.567433 0.526552 +vt 0.688679 0.528227 +vt 0.688752 0.527394 +vt 0.659451 0.514511 +vt 0.629109 0.512482 +vt 0.628985 0.515785 +vt 0.659272 0.517526 +vt 0.598531 0.511015 +vt 0.598455 0.514600 +vt 0.628871 0.518834 +vt 0.659107 0.520309 +vt 0.598385 0.517910 +vt 0.689921 0.513994 +vt 0.659637 0.511382 +vt 0.689674 0.516821 +vt 0.629238 0.509053 +vt 0.598610 0.507293 +vt 0.567640 0.506385 +vt 0.567599 0.510391 +vt 0.567559 0.514249 +vt 0.567523 0.517812 +vt 0.689217 0.522059 +vt 0.689437 0.519544 +vt 0.660166 0.502454 +vt 0.629604 0.499272 +vt 0.629490 0.502322 +vt 0.660001 0.505238 +vt 0.598836 0.496676 +vt 0.598765 0.499986 +vt 0.629366 0.505625 +vt 0.659822 0.508252 +vt 0.598689 0.503571 +vt 0.690817 0.503726 +vt 0.660311 0.500016 +vt 0.690625 0.505929 +vt 0.629704 0.496601 +vt 0.598897 0.493777 +vt 0.567789 0.491837 +vt 0.567757 0.494957 +vt 0.567721 0.498520 +vt 0.567681 0.502379 +vt 0.690168 0.511167 +vt 0.690405 0.508443 +vt 0.660571 0.495627 +vt 0.629885 0.491792 +vt 0.629847 0.492803 +vt 0.660517 0.496549 +vt 0.599008 0.488556 +vt 0.598985 0.489653 +vt 0.629786 0.494424 +vt 0.660429 0.498028 +vt 0.598948 0.491412 +vt 0.691163 0.499761 +vt 0.567847 0.486218 +vt 0.567835 0.487399 +vt 0.567816 0.489292 +vt 0.690974 0.501930 +vt 0.691091 0.500594 +vt 0.536491 0.488260 +vt 0.505870 0.488118 +vt 0.505873 0.485983 +vt 0.536499 0.486239 +vt 0.477049 0.488569 +vt 0.477049 0.486341 +vt 0.505874 0.484652 +vt 0.536504 0.484979 +vt 0.477049 0.484952 +vt 0.536480 0.490976 +vt 0.505867 0.490987 +vt 0.477048 0.491563 +vt 0.477049 0.484473 +vt 0.505875 0.484193 +vt 0.536506 0.484544 +vt 0.536434 0.502228 +vt 0.505854 0.502874 +vt 0.505859 0.498524 +vt 0.536451 0.498110 +vt 0.477047 0.503967 +vt 0.477047 0.499427 +vt 0.505863 0.494506 +vt 0.536466 0.494307 +vt 0.477048 0.495235 +vt 0.536417 0.506504 +vt 0.505848 0.507391 +vt 0.477046 0.508681 +vt 0.536367 0.518701 +vt 0.505834 0.520276 +vt 0.505838 0.516259 +vt 0.536383 0.514897 +vt 0.477044 0.522126 +vt 0.477045 0.517934 +vt 0.505843 0.511908 +vt 0.536400 0.510779 +vt 0.477045 0.513394 +vt 0.536354 0.522031 +vt 0.505830 0.523795 +vt 0.477044 0.525798 +vt 0.536330 0.528028 +vt 0.505823 0.530131 +vt 0.505824 0.528799 +vt 0.536335 0.526768 +vt 0.477043 0.532409 +vt 0.477043 0.531020 +vt 0.505826 0.526664 +vt 0.536343 0.524747 +vt 0.477043 0.528792 +vt 0.536328 0.528463 +vt 0.505822 0.530590 +vt 0.477043 0.532888 +vt 0.536343 0.524747 +vt 0.505826 0.526664 +vt 0.505824 0.528799 +vt 0.536335 0.526768 +vt 0.477043 0.528792 +vt 0.477043 0.531020 +vt 0.505823 0.530131 +vt 0.536330 0.528028 +vt 0.477043 0.532409 +vt 0.536354 0.522031 +vt 0.505830 0.523795 +vt 0.477044 0.525798 +vt 0.536400 0.510779 +vt 0.505843 0.511908 +vt 0.505838 0.516259 +vt 0.536383 0.514897 +vt 0.477045 0.513394 +vt 0.477045 0.517934 +vt 0.505834 0.520276 +vt 0.536367 0.518701 +vt 0.477044 0.522126 +vt 0.536417 0.506504 +vt 0.505848 0.507391 +vt 0.477046 0.508681 +vt 0.536466 0.494307 +vt 0.505863 0.494506 +vt 0.505859 0.498524 +vt 0.536451 0.498110 +vt 0.477048 0.495235 +vt 0.477047 0.499427 +vt 0.505854 0.502874 +vt 0.536434 0.502228 +vt 0.477047 0.503967 +vt 0.536480 0.490976 +vt 0.505867 0.490987 +vt 0.477048 0.491563 +vt 0.536504 0.484979 +vt 0.505874 0.484652 +vt 0.505873 0.485983 +vt 0.536499 0.486239 +vt 0.477049 0.484952 +vt 0.477049 0.486341 +vt 0.505870 0.488118 +vt 0.536491 0.488260 +vt 0.477049 0.488569 +vt 0.377527 0.492593 +vt 0.377527 0.493794 +vt 0.377703 0.492366 +vt 0.377703 0.491079 +vt 0.377527 0.495719 +vt 0.377703 0.494430 +vt 0.380528 0.491249 +vt 0.380528 0.489900 +vt 0.380528 0.493414 +vt 0.379307 0.494583 +vt 0.377527 0.492179 +vt 0.379307 0.495668 +vt 0.379307 0.497407 +vt 0.379307 0.499744 +vt 0.377527 0.498307 +vt 0.377703 0.497204 +vt 0.380528 0.496322 +vt 0.380528 0.489434 +vt 0.377703 0.490635 +vt 0.377527 0.501481 +vt 0.377527 0.505104 +vt 0.377703 0.504489 +vt 0.377703 0.500605 +vt 0.377527 0.509028 +vt 0.377703 0.508695 +vt 0.380528 0.503962 +vt 0.380528 0.499889 +vt 0.380528 0.508373 +vt 0.379307 0.502611 +vt 0.379307 0.505884 +vt 0.379307 0.509428 +vt 0.379307 0.513107 +vt 0.377527 0.513102 +vt 0.377703 0.513061 +vt 0.380528 0.512952 +vt 0.377527 0.517175 +vt 0.377527 0.521099 +vt 0.377703 0.521634 +vt 0.377703 0.517428 +vt 0.377527 0.524723 +vt 0.377703 0.525518 +vt 0.380528 0.521941 +vt 0.380528 0.517531 +vt 0.380528 0.526014 +vt 0.379307 0.516787 +vt 0.379307 0.520331 +vt 0.379307 0.523604 +vt 0.379307 0.526471 +vt 0.377527 0.527896 +vt 0.377703 0.528919 +vt 0.380528 0.529581 +vt 0.377527 0.530484 +vt 0.377527 0.532410 +vt 0.377703 0.533757 +vt 0.377703 0.531693 +vt 0.377527 0.533610 +vt 0.377703 0.535044 +vt 0.380528 0.534654 +vt 0.380528 0.532490 +vt 0.380528 0.536004 +vt 0.379307 0.528808 +vt 0.379307 0.530547 +vt 0.379307 0.531632 +vt 0.379307 0.532006 +vt 0.377527 0.534025 +vt 0.377703 0.535487 +vt 0.380528 0.536469 +vt 0.377527 0.533610 +vt 0.377527 0.532410 +vt 0.377703 0.533757 +vt 0.377703 0.535044 +vt 0.377527 0.530484 +vt 0.377703 0.531693 +vt 0.380528 0.534654 +vt 0.380528 0.536004 +vt 0.380528 0.532490 +vt 0.379307 0.531632 +vt 0.379307 0.530547 +vt 0.379307 0.528808 +vt 0.379307 0.526471 +vt 0.377527 0.527896 +vt 0.377703 0.528919 +vt 0.380528 0.529581 +vt 0.377527 0.524723 +vt 0.377527 0.521099 +vt 0.377703 0.521634 +vt 0.377703 0.525518 +vt 0.377527 0.517175 +vt 0.377703 0.517428 +vt 0.380528 0.521941 +vt 0.380528 0.526014 +vt 0.380528 0.517531 +vt 0.379307 0.523604 +vt 0.379307 0.520331 +vt 0.379307 0.516787 +vt 0.379307 0.513107 +vt 0.377527 0.513102 +vt 0.377703 0.513061 +vt 0.380528 0.512952 +vt 0.377527 0.509028 +vt 0.377527 0.505104 +vt 0.377703 0.504489 +vt 0.377703 0.508695 +vt 0.377527 0.501481 +vt 0.377703 0.500605 +vt 0.380528 0.503962 +vt 0.380528 0.508373 +vt 0.380528 0.499889 +vt 0.379307 0.509428 +vt 0.379307 0.505884 +vt 0.379307 0.502611 +vt 0.377527 0.498307 +vt 0.377703 0.497204 +vt 0.380528 0.496322 +vt 0.377527 0.495719 +vt 0.377527 0.493794 +vt 0.377703 0.492366 +vt 0.377703 0.494430 +vt 0.377527 0.492593 +vt 0.377703 0.491079 +vt 0.380528 0.491249 +vt 0.380528 0.493414 +vt 0.380528 0.489900 +vt 0.393437 0.509238 +vt 0.394023 0.509175 +vt 0.395037 0.513108 +vt 0.394023 0.511479 +vt 0.393437 0.507636 +vt 0.394023 0.509175 +vt 0.393437 0.509238 +vt 0.394023 0.511479 +vt 0.393437 0.513108 +vt 0.394023 0.514737 +vt 0.393437 0.516977 +vt 0.394023 0.517040 +vt 0.393437 0.518579 +vt 0.394023 0.517040 +vt 0.393437 0.516977 +vt 0.394023 0.514737 +vt 0.393437 0.513108 +vt 0.391104 0.506970 +vt 0.391842 0.506865 +vt 0.391842 0.508474 +vt 0.392212 0.506418 +vt 0.392212 0.510337 +vt 0.391842 0.505417 +vt 0.391842 0.508474 +vt 0.392212 0.510337 +vt 0.391104 0.513108 +vt 0.391842 0.514245 +vt 0.391842 0.511970 +vt 0.392212 0.515878 +vt 0.391104 0.519245 +vt 0.391842 0.519350 +vt 0.391842 0.517741 +vt 0.392212 0.519797 +vt 0.391104 0.521788 +vt 0.391842 0.520798 +vt 0.391842 0.520798 +vt 0.392212 0.519797 +vt 0.391104 0.519245 +vt 0.391842 0.517741 +vt 0.391842 0.519350 +vt 0.392212 0.515878 +vt 0.391104 0.513108 +vt 0.391842 0.511970 +vt 0.391842 0.514245 +vt 0.382341 0.516281 +vt 0.382348 0.519341 +vt 0.385939 0.518211 +vt 0.385885 0.515691 +vt 0.382341 0.522172 +vt 0.385885 0.520582 +vt 0.389404 0.517037 +vt 0.389225 0.515041 +vt 0.389225 0.519030 +vt 0.382335 0.513107 +vt 0.382335 0.524649 +vt 0.385830 0.522637 +vt 0.389021 0.520696 +vt 0.389021 0.513108 +vt 0.385830 0.513108 +vt 0.382341 0.529100 +vt 0.382348 0.528156 +vt 0.385939 0.525429 +vt 0.385885 0.526262 +vt 0.382341 0.526660 +vt 0.385885 0.524236 +vt 0.389404 0.522593 +vt 0.389225 0.523416 +vt 0.389225 0.521764 +vt 0.382335 0.529430 +vt 0.382335 0.524649 +vt 0.385830 0.522637 +vt 0.389021 0.520696 +vt 0.389021 0.523839 +vt 0.385830 0.526585 +vt 0.382341 0.509934 +vt 0.382348 0.506874 +vt 0.385939 0.508004 +vt 0.385885 0.510524 +vt 0.382341 0.504043 +vt 0.385885 0.505633 +vt 0.389404 0.509178 +vt 0.389225 0.511174 +vt 0.389225 0.507186 +vt 0.382335 0.513107 +vt 0.382335 0.501566 +vt 0.385830 0.503578 +vt 0.389021 0.505519 +vt 0.389021 0.513108 +vt 0.385830 0.513108 +vt 0.382341 0.504043 +vt 0.382348 0.506874 +vt 0.385939 0.508004 +vt 0.385885 0.505633 +vt 0.382341 0.509934 +vt 0.385885 0.510524 +vt 0.389404 0.509178 +vt 0.389225 0.507186 +vt 0.389225 0.511174 +vt 0.382341 0.526660 +vt 0.382348 0.528156 +vt 0.385939 0.525429 +vt 0.385885 0.524236 +vt 0.382341 0.529100 +vt 0.385885 0.526262 +vt 0.389404 0.522593 +vt 0.389225 0.521764 +vt 0.389225 0.523416 +vt 0.382341 0.522172 +vt 0.382348 0.519341 +vt 0.385939 0.518211 +vt 0.385885 0.520582 +vt 0.382341 0.516281 +vt 0.385885 0.515691 +vt 0.389404 0.517037 +vt 0.389225 0.519030 +vt 0.389225 0.515041 +vt 0.382341 0.499555 +vt 0.382348 0.498059 +vt 0.385939 0.500786 +vt 0.385885 0.501979 +vt 0.382341 0.497115 +vt 0.385885 0.499953 +vt 0.389404 0.503622 +vt 0.389225 0.504451 +vt 0.389225 0.502799 +vt 0.429002 0.656890 +vt 0.429002 0.655443 +vt 0.410884 0.654641 +vt 0.410884 0.656087 +vt 0.429002 0.653121 +vt 0.410884 0.652322 +vt 0.396778 0.653802 +vt 0.396778 0.655229 +vt 0.396778 0.651513 +vt 0.451121 0.658130 +vt 0.451121 0.657637 +vt 0.429002 0.657389 +vt 0.451121 0.656208 +vt 0.451121 0.653916 +vt 0.451121 0.650836 +vt 0.429002 0.650002 +vt 0.410884 0.649206 +vt 0.396778 0.648436 +vt 0.386694 0.647680 +vt 0.386694 0.650687 +vt 0.386694 0.652924 +vt 0.386694 0.654318 +vt 0.396778 0.655722 +vt 0.386694 0.654799 +vt 0.410884 0.656586 +vt 0.429002 0.646176 +vt 0.429002 0.641808 +vt 0.410884 0.641020 +vt 0.410884 0.645384 +vt 0.429002 0.637077 +vt 0.410884 0.636295 +vt 0.396778 0.640356 +vt 0.396778 0.644664 +vt 0.396778 0.635691 +vt 0.451121 0.647059 +vt 0.451121 0.642746 +vt 0.451121 0.638076 +vt 0.451121 0.633227 +vt 0.429002 0.632166 +vt 0.410884 0.631389 +vt 0.396778 0.630848 +vt 0.386694 0.630494 +vt 0.386694 0.635226 +vt 0.386694 0.639784 +vt 0.386694 0.643994 +vt 0.429002 0.627255 +vt 0.429002 0.622525 +vt 0.410884 0.621758 +vt 0.410884 0.626483 +vt 0.429002 0.618156 +vt 0.410884 0.617394 +vt 0.396778 0.621340 +vt 0.396778 0.626005 +vt 0.396778 0.617032 +vt 0.451121 0.628378 +vt 0.451121 0.623708 +vt 0.451121 0.619395 +vt 0.451121 0.615618 +vt 0.429002 0.614331 +vt 0.410884 0.613573 +vt 0.396778 0.613260 +vt 0.386694 0.613307 +vt 0.386694 0.616993 +vt 0.386694 0.621203 +vt 0.386694 0.625761 +vt 0.429002 0.611211 +vt 0.429002 0.608890 +vt 0.410884 0.608138 +vt 0.410884 0.610456 +vt 0.429002 0.607442 +vt 0.410884 0.606691 +vt 0.396778 0.607894 +vt 0.396778 0.610183 +vt 0.396778 0.606467 +vt 0.451121 0.612538 +vt 0.451121 0.610246 +vt 0.451121 0.608817 +vt 0.451121 0.608324 +vt 0.429002 0.606943 +vt 0.410884 0.606193 +vt 0.396778 0.605974 +vt 0.386694 0.606188 +vt 0.386694 0.606669 +vt 0.386694 0.608064 +vt 0.386694 0.610300 +vt 0.429002 0.607442 +vt 0.429002 0.608890 +vt 0.410884 0.608138 +vt 0.410884 0.606692 +vt 0.429002 0.611211 +vt 0.410884 0.610456 +vt 0.396778 0.607894 +vt 0.396778 0.606467 +vt 0.396778 0.610183 +vt 0.451121 0.608817 +vt 0.451121 0.610246 +vt 0.451121 0.612538 +vt 0.451121 0.615618 +vt 0.429002 0.614331 +vt 0.410884 0.613573 +vt 0.396778 0.613260 +vt 0.386694 0.613307 +vt 0.386694 0.610300 +vt 0.386694 0.608064 +vt 0.386694 0.606669 +vt 0.429002 0.618156 +vt 0.429002 0.622525 +vt 0.410884 0.621758 +vt 0.410884 0.617394 +vt 0.429002 0.627255 +vt 0.410884 0.626483 +vt 0.396778 0.621340 +vt 0.396778 0.617032 +vt 0.396778 0.626005 +vt 0.451121 0.619395 +vt 0.451121 0.623708 +vt 0.451121 0.628378 +vt 0.451121 0.633227 +vt 0.429002 0.632166 +vt 0.410884 0.631389 +vt 0.396778 0.630848 +vt 0.386694 0.630494 +vt 0.386694 0.625761 +vt 0.386694 0.621203 +vt 0.386694 0.616993 +vt 0.382341 0.646117 +vt 0.385885 0.643279 +vt 0.385939 0.642445 +vt 0.382348 0.645172 +vt 0.389225 0.640433 +vt 0.389404 0.639610 +vt 0.385885 0.641253 +vt 0.382341 0.643676 +vt 0.389225 0.638780 +vt 0.379307 0.649023 +vt 0.382335 0.646447 +vt 0.379307 0.648649 +vt 0.385830 0.643601 +vt 0.389021 0.640855 +vt 0.391104 0.638804 +vt 0.391842 0.637815 +vt 0.392212 0.636813 +vt 0.391842 0.636367 +vt 0.391104 0.636262 +vt 0.389021 0.637712 +vt 0.385830 0.639654 +vt 0.382335 0.641666 +vt 0.379307 0.645825 +vt 0.379307 0.643487 +vt 0.379307 0.647564 +vt 0.429002 0.637077 +vt 0.429002 0.641807 +vt 0.410884 0.641020 +vt 0.410884 0.636295 +vt 0.429002 0.646176 +vt 0.410884 0.645384 +vt 0.396778 0.640356 +vt 0.396778 0.635691 +vt 0.396778 0.644664 +vt 0.451121 0.638076 +vt 0.451121 0.642746 +vt 0.451121 0.647059 +vt 0.451121 0.650836 +vt 0.429002 0.650002 +vt 0.410884 0.649206 +vt 0.396778 0.648436 +vt 0.386694 0.647680 +vt 0.386694 0.643994 +vt 0.386694 0.639784 +vt 0.386694 0.635226 +vt 0.429002 0.653121 +vt 0.429002 0.655443 +vt 0.410884 0.654641 +vt 0.410884 0.652322 +vt 0.429002 0.656890 +vt 0.410884 0.656087 +vt 0.396778 0.653802 +vt 0.396778 0.651513 +vt 0.396778 0.655229 +vt 0.451121 0.653916 +vt 0.451121 0.656208 +vt 0.451121 0.657637 +vt 0.386694 0.654318 +vt 0.386694 0.652924 +vt 0.386694 0.650687 +vt 0.660429 0.645203 +vt 0.660517 0.646682 +vt 0.629847 0.650429 +vt 0.629786 0.648808 +vt 0.660571 0.647605 +vt 0.629885 0.651439 +vt 0.598985 0.653578 +vt 0.598948 0.651819 +vt 0.599008 0.654675 +vt 0.690817 0.639505 +vt 0.690974 0.641301 +vt 0.660311 0.643215 +vt 0.691091 0.642638 +vt 0.691163 0.643471 +vt 0.691188 0.643759 +vt 0.660590 0.647923 +vt 0.629898 0.651788 +vt 0.599016 0.655054 +vt 0.567851 0.657421 +vt 0.567847 0.657014 +vt 0.567835 0.655833 +vt 0.567816 0.653940 +vt 0.598897 0.649455 +vt 0.567789 0.651395 +vt 0.629704 0.646630 +vt 0.659822 0.634980 +vt 0.660001 0.637994 +vt 0.629490 0.640909 +vt 0.629366 0.637607 +vt 0.660166 0.640778 +vt 0.629604 0.643959 +vt 0.598765 0.643245 +vt 0.598689 0.639660 +vt 0.598836 0.646556 +vt 0.689921 0.629238 +vt 0.690168 0.632065 +vt 0.659637 0.631850 +vt 0.690405 0.634788 +vt 0.690625 0.637303 +vt 0.567757 0.648274 +vt 0.567721 0.644711 +vt 0.567681 0.640853 +vt 0.598610 0.635939 +vt 0.567640 0.636847 +vt 0.629238 0.634178 +vt 0.659107 0.622922 +vt 0.659272 0.625706 +vt 0.628985 0.627447 +vt 0.628871 0.624397 +vt 0.659451 0.628720 +vt 0.629109 0.630750 +vt 0.598455 0.628632 +vt 0.598385 0.625321 +vt 0.598531 0.632217 +vt 0.689025 0.618970 +vt 0.689217 0.621172 +vt 0.658962 0.620485 +vt 0.689437 0.623687 +vt 0.689674 0.626410 +vt 0.567599 0.632841 +vt 0.567559 0.628983 +vt 0.567523 0.625420 +vt 0.598323 0.622422 +vt 0.567491 0.622299 +vt 0.628771 0.621726 +vt 0.658702 0.616095 +vt 0.658756 0.617018 +vt 0.628629 0.617928 +vt 0.628591 0.616917 +vt 0.658844 0.618497 +vt 0.628689 0.619548 +vt 0.598236 0.618299 +vt 0.598212 0.617202 +vt 0.598273 0.620058 +vt 0.688654 0.614717 +vt 0.688679 0.615004 +vt 0.658683 0.615777 +vt 0.688752 0.615838 +vt 0.688868 0.617174 +vt 0.567465 0.619754 +vt 0.567445 0.617861 +vt 0.567433 0.616680 +vt 0.598204 0.616823 +vt 0.567429 0.616273 +vt 0.628578 0.616569 +vt 0.658844 0.618497 +vt 0.658756 0.617018 +vt 0.628629 0.617928 +vt 0.628689 0.619548 +vt 0.658702 0.616095 +vt 0.628591 0.616917 +vt 0.598236 0.618299 +vt 0.598273 0.620058 +vt 0.598212 0.617202 +vt 0.689025 0.618970 +vt 0.688868 0.617174 +vt 0.658962 0.620485 +vt 0.688752 0.615838 +vt 0.688679 0.615004 +vt 0.567433 0.616680 +vt 0.567445 0.617861 +vt 0.567465 0.619754 +vt 0.598323 0.622422 +vt 0.567491 0.622299 +vt 0.628771 0.621726 +vt 0.659451 0.628720 +vt 0.659272 0.625706 +vt 0.628985 0.627447 +vt 0.629109 0.630750 +vt 0.659107 0.622923 +vt 0.628871 0.624397 +vt 0.598455 0.628632 +vt 0.598531 0.632217 +vt 0.598385 0.625321 +vt 0.689921 0.629238 +vt 0.689674 0.626410 +vt 0.659637 0.631850 +vt 0.689437 0.623687 +vt 0.689217 0.621172 +vt 0.567523 0.625420 +vt 0.567559 0.628983 +vt 0.567599 0.632841 +vt 0.598610 0.635939 +vt 0.567640 0.636847 +vt 0.629238 0.634178 +vt 0.660166 0.640778 +vt 0.660001 0.637994 +vt 0.629490 0.640909 +vt 0.629604 0.643959 +vt 0.659822 0.634980 +vt 0.629366 0.637607 +vt 0.598765 0.643245 +vt 0.598836 0.646556 +vt 0.598689 0.639660 +vt 0.690817 0.639505 +vt 0.690625 0.637303 +vt 0.660311 0.643215 +vt 0.690405 0.634788 +vt 0.690168 0.632065 +vt 0.567681 0.640853 +vt 0.567721 0.644711 +vt 0.567757 0.648274 +vt 0.598897 0.649455 +vt 0.567789 0.651395 +vt 0.629704 0.646630 +vt 0.660571 0.647605 +vt 0.660517 0.646682 +vt 0.629847 0.650429 +vt 0.629885 0.651439 +vt 0.660429 0.645203 +vt 0.629786 0.648808 +vt 0.598985 0.653578 +vt 0.599008 0.654675 +vt 0.598948 0.651819 +vt 0.691163 0.643471 +vt 0.691091 0.642638 +vt 0.690974 0.641301 +vt 0.567816 0.653940 +vt 0.567835 0.655833 +vt 0.567847 0.657014 +vt 0.536491 0.654972 +vt 0.536499 0.656992 +vt 0.505873 0.657248 +vt 0.505870 0.655114 +vt 0.536504 0.658253 +vt 0.505874 0.658580 +vt 0.477049 0.656890 +vt 0.477049 0.654663 +vt 0.477049 0.658280 +vt 0.536480 0.652256 +vt 0.536506 0.658688 +vt 0.505875 0.659039 +vt 0.477049 0.658759 +vt 0.477048 0.651669 +vt 0.505867 0.652244 +vt 0.536434 0.641004 +vt 0.536451 0.645122 +vt 0.505859 0.644708 +vt 0.505854 0.640357 +vt 0.536467 0.648925 +vt 0.505863 0.648726 +vt 0.477047 0.643804 +vt 0.477047 0.639264 +vt 0.477048 0.647997 +vt 0.536417 0.636728 +vt 0.477046 0.634551 +vt 0.505848 0.635840 +vt 0.536367 0.624531 +vt 0.536383 0.628334 +vt 0.505838 0.626973 +vt 0.505834 0.622955 +vt 0.536400 0.632452 +vt 0.505843 0.631323 +vt 0.477045 0.625298 +vt 0.477044 0.621105 +vt 0.477045 0.629838 +vt 0.536354 0.621200 +vt 0.477044 0.617433 +vt 0.505830 0.619436 +vt 0.536330 0.615203 +vt 0.536335 0.616464 +vt 0.505824 0.614432 +vt 0.505823 0.613101 +vt 0.536343 0.618484 +vt 0.505827 0.616567 +vt 0.477043 0.612212 +vt 0.477043 0.610822 +vt 0.477043 0.614439 +vt 0.536328 0.614769 +vt 0.477043 0.610343 +vt 0.505822 0.612642 +vt 0.536343 0.618484 +vt 0.536335 0.616464 +vt 0.505824 0.614432 +vt 0.505827 0.616567 +vt 0.536330 0.615203 +vt 0.505823 0.613101 +vt 0.477043 0.612212 +vt 0.477043 0.614439 +vt 0.477043 0.610822 +vt 0.536354 0.621200 +vt 0.477044 0.617433 +vt 0.505830 0.619436 +vt 0.536400 0.632452 +vt 0.536383 0.628334 +vt 0.505838 0.626973 +vt 0.505843 0.631323 +vt 0.536367 0.624531 +vt 0.505834 0.622955 +vt 0.477045 0.625298 +vt 0.477045 0.629838 +vt 0.477044 0.621105 +vt 0.536417 0.636728 +vt 0.477046 0.634551 +vt 0.505848 0.635840 +vt 0.536467 0.648925 +vt 0.536451 0.645122 +vt 0.505859 0.644708 +vt 0.505863 0.648726 +vt 0.536434 0.641004 +vt 0.505854 0.640357 +vt 0.477047 0.643804 +vt 0.477048 0.647997 +vt 0.477047 0.639264 +vt 0.536480 0.652256 +vt 0.477048 0.651669 +vt 0.505867 0.652244 +vt 0.536504 0.658253 +vt 0.536499 0.656993 +vt 0.505873 0.657248 +vt 0.505874 0.658580 +vt 0.536491 0.654972 +vt 0.505870 0.655114 +vt 0.477049 0.656890 +vt 0.477049 0.658280 +vt 0.477049 0.654663 +vt 0.377527 0.650639 +vt 0.377703 0.652153 +vt 0.377703 0.650866 +vt 0.377527 0.649438 +vt 0.380528 0.653332 +vt 0.380528 0.651982 +vt 0.377703 0.648802 +vt 0.377527 0.647512 +vt 0.380528 0.649818 +vt 0.377527 0.651053 +vt 0.379307 0.648649 +vt 0.377703 0.652597 +vt 0.380528 0.653798 +vt 0.380528 0.646909 +vt 0.377703 0.646028 +vt 0.377527 0.644925 +vt 0.379307 0.645825 +vt 0.379307 0.643487 +vt 0.379307 0.647564 +vt 0.377527 0.641751 +vt 0.377703 0.642627 +vt 0.377703 0.638743 +vt 0.377527 0.638127 +vt 0.380528 0.643342 +vt 0.380528 0.639269 +vt 0.377703 0.634537 +vt 0.377527 0.634204 +vt 0.380528 0.634859 +vt 0.379307 0.640621 +vt 0.380528 0.630280 +vt 0.377703 0.630170 +vt 0.377527 0.630130 +vt 0.379307 0.633804 +vt 0.379307 0.630124 +vt 0.379307 0.637348 +vt 0.377527 0.626056 +vt 0.377703 0.625804 +vt 0.377703 0.621598 +vt 0.377527 0.622132 +vt 0.380528 0.625701 +vt 0.380528 0.621291 +vt 0.377703 0.617714 +vt 0.377527 0.618509 +vt 0.380528 0.617218 +vt 0.379307 0.626444 +vt 0.380528 0.613651 +vt 0.377703 0.614313 +vt 0.377527 0.615335 +vt 0.379307 0.619627 +vt 0.379307 0.616761 +vt 0.379307 0.622900 +vt 0.377527 0.612747 +vt 0.377703 0.611539 +vt 0.377703 0.609475 +vt 0.377527 0.610822 +vt 0.380528 0.610742 +vt 0.380528 0.608577 +vt 0.377703 0.608188 +vt 0.377527 0.609621 +vt 0.380528 0.607228 +vt 0.379307 0.614423 +vt 0.380528 0.606762 +vt 0.377703 0.607744 +vt 0.377527 0.609207 +vt 0.379307 0.611600 +vt 0.379307 0.611226 +vt 0.379307 0.612684 +vt 0.377527 0.609621 +vt 0.377703 0.608188 +vt 0.377703 0.609475 +vt 0.377527 0.610822 +vt 0.380528 0.607228 +vt 0.380528 0.608577 +vt 0.377703 0.611539 +vt 0.377527 0.612747 +vt 0.380528 0.610742 +vt 0.379307 0.611600 +vt 0.380528 0.613651 +vt 0.377703 0.614313 +vt 0.377527 0.615335 +vt 0.379307 0.614423 +vt 0.379307 0.616761 +vt 0.379307 0.612684 +vt 0.377527 0.618509 +vt 0.377703 0.617714 +vt 0.377703 0.621598 +vt 0.377527 0.622132 +vt 0.380528 0.617218 +vt 0.380528 0.621291 +vt 0.377703 0.625804 +vt 0.377527 0.626056 +vt 0.380528 0.625701 +vt 0.379307 0.619627 +vt 0.380528 0.630280 +vt 0.377703 0.630170 +vt 0.377527 0.630130 +vt 0.379307 0.626445 +vt 0.379307 0.630124 +vt 0.379307 0.622900 +vt 0.377527 0.634204 +vt 0.377703 0.634537 +vt 0.377703 0.638743 +vt 0.377527 0.638127 +vt 0.380528 0.634859 +vt 0.380528 0.639269 +vt 0.377703 0.642627 +vt 0.377527 0.641751 +vt 0.380528 0.643342 +vt 0.379307 0.633804 +vt 0.380528 0.646909 +vt 0.377703 0.646028 +vt 0.377527 0.644925 +vt 0.379307 0.640621 +vt 0.379307 0.637348 +vt 0.377527 0.647512 +vt 0.377703 0.648802 +vt 0.377703 0.650866 +vt 0.377527 0.649438 +vt 0.380528 0.649818 +vt 0.380528 0.651982 +vt 0.377703 0.652153 +vt 0.377527 0.650639 +vt 0.380528 0.653332 +vt 0.393437 0.633993 +vt 0.394023 0.631753 +vt 0.395037 0.630124 +vt 0.394023 0.634057 +vt 0.393437 0.630124 +vt 0.394023 0.628495 +vt 0.393437 0.626255 +vt 0.394023 0.626191 +vt 0.393437 0.624652 +vt 0.394023 0.626191 +vt 0.393437 0.626255 +vt 0.394023 0.628495 +vt 0.393437 0.630124 +vt 0.394023 0.631753 +vt 0.393437 0.633993 +vt 0.394023 0.634057 +vt 0.393437 0.635596 +vt 0.391104 0.636262 +vt 0.391842 0.634758 +vt 0.391842 0.636367 +vt 0.392212 0.632895 +vt 0.392212 0.636813 +vt 0.391104 0.630124 +vt 0.391842 0.628987 +vt 0.391842 0.631262 +vt 0.392212 0.627353 +vt 0.391104 0.623986 +vt 0.391842 0.623882 +vt 0.391842 0.625490 +vt 0.392212 0.623435 +vt 0.391104 0.621444 +vt 0.391842 0.622433 +vt 0.391842 0.622433 +vt 0.392212 0.623435 +vt 0.391104 0.623986 +vt 0.391842 0.625490 +vt 0.391842 0.623882 +vt 0.392212 0.627353 +vt 0.391104 0.630124 +vt 0.391842 0.631262 +vt 0.391842 0.628987 +vt 0.392212 0.632895 +vt 0.391842 0.634758 +vt 0.391842 0.637815 +vt 0.382341 0.626951 +vt 0.385885 0.627540 +vt 0.385939 0.625021 +vt 0.382348 0.623891 +vt 0.389225 0.628191 +vt 0.389404 0.626195 +vt 0.385885 0.622649 +vt 0.382341 0.621060 +vt 0.389225 0.624202 +vt 0.382335 0.630124 +vt 0.385830 0.630124 +vt 0.389021 0.630124 +vt 0.389021 0.622536 +vt 0.385830 0.620594 +vt 0.382335 0.618582 +vt 0.382341 0.614132 +vt 0.385885 0.616969 +vt 0.385939 0.617803 +vt 0.382348 0.615076 +vt 0.389225 0.619816 +vt 0.389404 0.620638 +vt 0.385885 0.618995 +vt 0.382341 0.616572 +vt 0.389225 0.621468 +vt 0.382335 0.613802 +vt 0.385830 0.616647 +vt 0.389021 0.619393 +vt 0.389021 0.622536 +vt 0.385830 0.620594 +vt 0.382335 0.618583 +vt 0.382341 0.633297 +vt 0.385885 0.632708 +vt 0.385939 0.635228 +vt 0.382348 0.636357 +vt 0.389225 0.632058 +vt 0.389404 0.634053 +vt 0.385885 0.637599 +vt 0.382341 0.639189 +vt 0.389225 0.636046 +vt 0.382335 0.630124 +vt 0.385830 0.630124 +vt 0.389021 0.630124 +vt 0.389021 0.637712 +vt 0.385830 0.639654 +vt 0.382335 0.641666 +vt 0.382341 0.639189 +vt 0.385885 0.637599 +vt 0.385939 0.635228 +vt 0.382348 0.636357 +vt 0.389225 0.636046 +vt 0.389404 0.634053 +vt 0.385885 0.632708 +vt 0.382341 0.633297 +vt 0.389225 0.632058 +vt 0.382341 0.616572 +vt 0.385885 0.618995 +vt 0.385939 0.617803 +vt 0.382348 0.615076 +vt 0.389225 0.621468 +vt 0.389404 0.620638 +vt 0.385885 0.616969 +vt 0.382341 0.614132 +vt 0.389225 0.619816 +vt 0.382341 0.621060 +vt 0.385885 0.622649 +vt 0.385939 0.625020 +vt 0.382348 0.623891 +vt 0.389225 0.624202 +vt 0.389404 0.626195 +vt 0.385885 0.627540 +vt 0.382341 0.626951 +vt 0.389225 0.628191 +vt 0.382341 0.643676 +vt 0.385885 0.641253 +vt 0.385939 0.642445 +vt 0.382348 0.645172 +vt 0.389225 0.638780 +vt 0.389404 0.639610 +vt 0.385885 0.643279 +vt 0.382341 0.646117 +vt 0.389225 0.640433 +vt 0.340790 0.571386 +vt 0.304438 0.523104 +vt 0.304302 0.619651 +vt 0.778641 0.903895 +vt 0.778742 0.905294 +vt 0.535506 0.723369 +vt 0.535572 0.665468 +vt 0.539524 0.571615 +vt 0.539435 0.476098 +vt 0.539617 0.571615 +vt 0.777897 0.236616 +vt 0.778085 0.236758 +vt 0.539435 0.667133 +vt 0.539505 0.725399 +vt 0.775559 0.571615 +vt 0.721682 0.762743 +vt 0.775448 0.571615 +vt 0.539407 0.571615 +vt 0.539622 0.490699 +vt 0.778742 0.237936 +vt 0.535768 0.722894 +vt 0.540338 0.767174 +vt 0.540337 0.376057 +vt 0.535768 0.420336 +vt 0.778642 0.239334 +vt 0.544266 0.769287 +vt 0.539650 0.725158 +vt 0.779517 0.571615 +vt 0.725709 0.763154 +vt 0.539650 0.418072 +vt 0.544266 0.373945 +vt 0.535580 0.491987 +vt 0.535440 0.571615 +vt 0.535580 0.651244 +vt 0.539622 0.652532 +vt 0.774520 0.239914 +vt 0.774519 0.903315 +vt 0.777897 0.906613 +vt 0.778085 0.906472 +vt 0.535660 0.571615 +vt 0.535572 0.477763 +vt 0.725709 0.380076 +vt 0.721682 0.380488 +vt 0.539505 0.417830 +vt 0.535506 0.419861 +vt 0.545699 0.565491 +vt 0.545171 0.478943 +vt 0.716991 0.752737 +vt 0.545171 0.664287 +vt 0.545587 0.564690 +vt 0.545059 0.478143 +vt 0.545059 0.665088 +vt 0.716879 0.753538 +vt 0.184848 0.571615 +vt 0.186886 0.573418 +vt 0.189985 0.598721 +vt 0.260767 0.569523 +vt 0.186886 0.569813 +vt 0.186886 0.573418 +vt 0.189985 0.598721 +vt 0.260767 0.569523 +vt 0.186886 0.569813 +vt 0.187245 0.598573 +vt 0.192128 0.598573 +vt 0.262884 0.525380 +vt 0.191769 0.541876 +vt 0.263105 0.635655 +vt 0.313975 0.652120 +vt 0.192072 0.543177 +vt 0.263167 0.526619 +vt 0.263381 0.634438 +vt 0.314234 0.650957 +vt 0.723795 0.379152 +vt 0.767118 0.394213 +vt 0.370661 0.625002 +vt 0.365099 0.677168 +vt 0.370663 0.624987 +vt 0.365099 0.572832 +vt 0.130800 0.625000 +vt 0.147673 0.625000 +vt 0.130800 0.674333 +vt 0.131099 0.673881 +vt 0.170307 0.625000 +vt 0.152679 0.687500 +vt 0.130800 0.575667 +vt 0.131099 0.576119 +vt 0.152618 0.562500 +vt 0.173706 0.562500 +vt 0.188445 0.625000 +vt 0.181999 0.625000 +vt 0.167983 0.562500 +vt 0.173756 0.687500 +vt 0.168031 0.687500 +vn -0.6685 -0.6526 -0.3568 +vn 0.0141 -0.2329 0.9724 +vn -0.0408 -0.9296 0.3663 +vn 0.0015 -0.8971 0.4417 +vn 0.0440 -0.9297 0.3656 +vn 0.0458 -0.9354 0.3507 +vn -0.0195 -0.9634 0.2673 +vn 0.0277 -0.8448 0.5344 +vn 0.1850 -0.9827 0.0013 +vn 0.1000 -0.9897 0.1029 +vn 0.0696 -0.9926 0.0993 +vn 0.0151 -0.9996 -0.0241 +vn 0.0501 -0.9987 0.0061 +vn 0.1014 -0.9897 -0.1015 +vn 0.0709 -0.9926 -0.0983 +vn -0.1239 -0.6674 -0.7344 +vn -0.0877 -0.6419 -0.7618 +vn -0.1225 -0.6664 -0.7355 +vn 0.2067 0.0943 0.9738 +vn 0.1413 0.0241 0.9897 +vn 0.3426 0.2443 0.9072 +vn -0.0380 0.9963 -0.0774 +vn 0.0107 0.9974 -0.0713 +vn 0.0525 0.9984 -0.0206 +vn 0.0500 0.9987 0.0061 +vn -0.0158 -0.9634 -0.2675 +vn -0.0358 -0.9297 -0.3667 +vn -0.1090 -0.8901 -0.4424 +vn -0.0648 -0.9493 -0.3075 +vn 0.3479 0.2270 -0.9096 +vn 1.0000 0.0000 0.0056 +vn 0.0925 0.9957 0.0006 +vn 0.0532 0.9958 0.0744 +vn 0.0097 0.9974 0.0714 +vn -0.8835 -0.4613 0.0821 +vn -0.8863 -0.4631 -0.0060 +vn -0.0975 0.9277 0.3604 +vn -0.0667 0.9636 0.2589 +vn -0.0591 0.9646 0.2570 +vn -0.0626 0.9437 0.3248 +vn -0.0582 0.9436 -0.3259 +vn -0.0556 0.9646 -0.2579 +vn -0.0632 0.9636 -0.2598 +vn -0.0926 0.9277 -0.3617 +vn -0.0391 0.9963 0.0769 +vn 0.0501 0.9987 -0.0055 +vn 0.0522 0.9984 0.0213 +vn 0.0000 1.0000 0.0000 +vn 0.8541 -0.0177 -0.5198 +vn -0.9642 0.0242 0.2639 +vn -0.0463 0.9909 0.1266 +vn 0.3845 0.6424 -0.6629 +vn 0.2456 0.6340 -0.7332 +vn 0.3813 0.6424 -0.6648 +vn -0.0446 0.9909 -0.1273 +vn 0.0542 0.9958 -0.0736 +vn -0.2295 0.0000 0.9733 +vn -0.2185 -0.7794 0.5872 +vn -0.0856 -0.7838 0.6150 +vn -0.1317 -0.8132 0.5669 +vn 0.0219 -0.8256 0.5638 +vn -0.0212 -0.8209 0.5706 +vn -0.0911 -0.9553 0.2812 +vn -0.0370 -0.9944 0.0991 +vn -0.0794 -0.9914 0.1037 +vn -0.0261 -0.9991 0.0341 +vn 0.0489 -0.9297 -0.3650 +vn 0.0074 -0.8971 -0.4418 +vn 0.0505 -0.9354 -0.3501 +vn -0.6881 -0.7238 0.0508 +vn -0.6923 -0.7216 -0.0023 +vn -0.6928 -0.7210 -0.0114 +vn -0.0256 -0.9991 -0.0344 +vn -0.0780 -0.9914 -0.1047 +vn -0.0357 -0.9944 -0.0996 +vn -0.0873 -0.9553 -0.2824 +vn 0.3944 0.3032 0.8675 +vn -0.1240 -0.8132 -0.5686 +vn -0.0775 -0.7836 -0.6165 +vn -0.2106 -0.7793 -0.5902 +vn 0.0361 -0.9989 0.0302 +vn 0.0501 -0.9987 -0.0055 +vn 0.0605 -0.9982 0.0054 +vn 0.0606 -0.9982 -0.0046 +vn 0.0365 -0.9989 -0.0298 +vn 0.0292 -0.9995 0.0072 +vn 0.1215 -0.9926 0.0008 +vn 0.0293 -0.9995 -0.0068 +vn 0.0247 -0.9989 0.0406 +vn 0.0148 -0.9996 0.0243 +vn 0.0253 -0.9989 -0.0402 +vn 0.0125 -0.9986 -0.0513 +vn 0.0164 -0.9987 -0.0480 +vn 0.0899 -0.9956 0.0279 +vn 0.0609 -0.9980 -0.0162 +vn 0.0607 -0.9980 0.0170 +vn 0.0903 -0.9956 -0.0266 +vn 0.0361 0.9989 0.0302 +vn 0.0605 0.9982 0.0054 +vn 0.0606 0.9982 -0.0046 +vn 0.0365 0.9989 -0.0298 +vn 0.1184 0.9924 0.0332 +vn 0.1188 0.9924 -0.0315 +vn 0.0932 0.9956 0.0006 +vn 0.0157 0.9987 0.0482 +vn -0.0155 0.9973 0.0721 +vn -0.0146 0.9973 -0.0723 +vn 0.0163 0.9987 -0.0480 +vn 0.0899 0.9956 0.0279 +vn 0.0798 0.9961 -0.0386 +vn 0.0793 0.9961 0.0396 +vn 0.0903 0.9956 -0.0267 +vn -0.1864 -0.8094 0.5569 +vn -0.2664 -0.7749 0.5732 +vn -0.1788 -0.8094 -0.5594 +vn -0.8011 -0.0450 -0.5968 +vn -0.6356 -0.0358 -0.7712 +vn -0.7998 -0.0449 -0.5986 +vn -0.5312 -0.0293 0.8468 +vn -0.0925 0.9879 -0.1242 +vn -0.0618 -0.9928 0.1021 +vn -0.0155 -0.9973 0.0722 +vn -0.0942 -0.9879 0.1229 +vn -0.2782 -0.7694 -0.5751 +vn -0.2586 -0.7749 -0.5768 +vn -0.7618 -0.0423 0.6465 +vn -0.0942 0.9879 0.1229 +vn -0.8458 -0.0474 -0.5314 +vn 0.5360 0.0303 0.8437 +vn -0.2860 -0.7693 0.5712 +vn -0.5196 -0.0293 -0.8539 +vn -0.1690 0.9770 0.1299 +vn -0.0806 0.9141 0.3973 +vn -0.1362 0.8526 0.5045 +vn -0.1447 0.9557 0.2563 +vn -0.0373 0.9922 -0.1190 +vn -0.0751 0.9142 -0.3983 +vn -0.1295 0.8524 -0.5065 +vn -0.0690 -0.9493 0.3066 +vn -0.1151 -0.8901 0.4410 +vn 0.0157 -0.9987 0.0482 +vn 0.0118 -0.9986 0.0514 +vn 0.0248 -0.9989 0.0405 +vn -0.1672 0.9770 -0.1322 +vn -0.1873 0.9823 -0.0013 +vn -0.2275 0.9738 -0.0015 +vn -0.1412 0.9557 -0.2583 +vn -0.0389 0.9922 0.1185 +vn -0.0389 0.9922 0.1186 +vn 0.3017 0.9512 -0.0644 +vn 0.3019 0.9533 0.0021 +vn 0.2945 -0.9406 0.1688 +vn 0.2999 -0.9540 0.0020 +vn 0.3008 0.9512 0.0685 +vn 0.2968 -0.9406 -0.1647 +vn 0.0988 -0.9942 0.0419 +vn 0.0987 -0.9942 0.0419 +vn 0.0987 -0.9942 0.0418 +vn -0.0146 -0.9973 -0.0724 +vn -0.0604 -0.9929 -0.1029 +vn 0.0248 -0.9989 0.0406 +vn 0.0342 -0.9994 0.0087 +vn 0.0537 -0.9983 0.0210 +vn 0.0323 -0.9993 0.0165 +vn 0.0518 -0.9982 0.0288 +vn 0.0253 -0.9989 -0.0403 +vn 0.0540 -0.9983 -0.0202 +vn 0.0343 -0.9994 -0.0082 +vn 0.0522 -0.9982 -0.0281 +vn 0.0325 -0.9993 -0.0161 +vn 0.0993 -0.9942 -0.0405 +vn 0.0994 -0.9942 -0.0406 +vn 0.0428 -0.9989 0.0188 +vn 0.0431 -0.9989 -0.0183 +vn -0.3682 -0.0202 0.9295 +vn -0.8529 -0.0474 0.5199 +vn 0.7378 0.0409 -0.6738 +vn 0.7286 0.0409 0.6837 +vn -0.8091 -0.0450 0.5859 +vn -0.9246 -0.0515 0.3775 +vn -0.8078 -0.0449 0.5877 +vn 0.9195 0.0515 0.3896 +vn 0.1066 0.0056 -0.9943 +vn 0.0931 0.0056 0.9956 +vn 0.5212 0.0294 0.8529 +vn -0.7529 -0.0423 -0.6568 +vn -0.6460 -0.0358 0.7625 +vn 0.8460 0.0474 0.5311 +vn -0.3555 -0.0202 -0.9344 +vn 0.5328 0.0294 -0.8457 +vn 0.5474 0.0302 -0.8363 +vn 0.8531 0.0474 -0.5196 +vn 0.9247 0.0515 -0.3771 +vn -0.9194 -0.0515 -0.3900 +vn -0.0925 -0.9879 -0.1242 +vn -0.0373 0.9922 -0.1191 +vn 0.9631 0.0302 0.2675 +vn -0.1583 -0.6901 -0.7062 +vn -0.9902 -0.0992 -0.0981 +vn -0.0135 -0.8209 -0.5710 +vn -0.6948 -0.7159 -0.0689 +vn 0.1723 0.2967 -0.9393 +vn 0.2291 0.3519 -0.9076 +vn 0.3270 0.4448 -0.8338 +vn 0.0294 -0.8255 -0.5636 +vn 0.0276 -0.1990 -0.9796 +vn 0.0489 -0.1987 -0.9788 +vn 0.0373 -0.3835 -0.9228 +vn 0.0089 -0.3837 -0.9234 +vn 0.0782 -0.1981 -0.9771 +vn 0.0723 -0.3825 -0.9211 +vn 0.0247 -0.5540 -0.8322 +vn -0.0104 -0.5541 -0.8324 +vn 0.0652 -0.5529 -0.8307 +vn 0.0353 -0.0012 -0.9994 +vn 0.0455 -0.0013 -0.9990 +vn 0.0097 -0.1990 -0.9800 +vn 0.0594 -0.0011 -0.9982 +vn 0.0828 -0.0008 -0.9966 +vn 0.1323 -0.0002 -0.9912 +vn 0.1308 -0.1965 -0.9717 +vn 0.1279 -0.3800 -0.9161 +vn 0.1237 -0.5495 -0.8263 +vn 0.1181 -0.7027 -0.7016 +vn 0.0569 -0.7066 -0.7053 +vn 0.0113 -0.7077 -0.7064 +vn -0.0300 -0.7074 -0.7062 +vn -0.0425 -0.5534 -0.8318 +vn -0.0684 -0.7058 -0.7051 +vn -0.0163 -0.3836 -0.9234 +vn -0.0487 -0.8323 -0.5522 +vn -0.0020 -0.8334 -0.5527 +vn -0.0145 -0.9239 -0.3823 +vn -0.0651 -0.9220 -0.3818 +vn 0.0479 -0.8325 -0.5520 +vn 0.0388 -0.9234 -0.3818 +vn -0.0259 -0.9799 -0.1976 +vn -0.0794 -0.9771 -0.1974 +vn 0.0298 -0.9799 -0.1973 +vn -0.0923 -0.8295 -0.5508 +vn 0.1114 -0.8283 -0.5492 +vn 0.1041 -0.9192 -0.3799 +vn 0.0964 -0.9758 -0.1962 +vn 0.0883 -0.9961 0.0007 +vn 0.0209 -0.9998 0.0003 +vn -0.0362 -0.9993 -0.0001 +vn -0.0912 -0.9958 -0.0005 +vn -0.1297 -0.9718 -0.1968 +vn -0.1429 -0.9897 -0.0010 +vn -0.1128 -0.9179 -0.3805 +vn -0.0997 -0.9755 0.1961 +vn -0.0445 -0.9793 0.1973 +vn -0.0505 -0.9229 0.3816 +vn -0.1045 -0.9192 0.3797 +vn 0.0126 -0.9802 0.1978 +vn 0.0056 -0.9239 0.3825 +vn -0.0542 -0.8322 0.5518 +vn -0.1057 -0.8290 0.5492 +vn -0.0001 -0.8332 0.5530 +vn -0.1513 -0.9692 0.1944 +vn 0.0801 -0.9770 0.1977 +vn 0.0726 -0.9213 0.3821 +vn 0.0659 -0.8310 0.5523 +vn 0.0600 -0.7057 0.7060 +vn -0.0044 -0.7075 0.7067 +vn -0.0554 -0.7067 0.7054 +vn -0.1031 -0.7042 0.7025 +vn -0.1531 -0.8240 0.5456 +vn -0.1465 -0.7004 0.6985 +vn -0.1546 -0.9133 0.3769 +vn -0.0967 -0.5517 0.8284 +vn -0.0540 -0.5533 0.8312 +vn -0.0501 -0.3831 0.9223 +vn -0.0871 -0.3823 0.9199 +vn -0.0070 -0.5537 0.8327 +vn -0.0078 -0.3833 0.9236 +vn -0.0439 -0.1987 0.9791 +vn -0.0745 -0.1984 0.9773 +vn -0.0068 -0.1985 0.9801 +vn -0.1350 -0.5493 0.8247 +vn 0.0552 -0.5523 0.8318 +vn 0.0520 -0.3822 0.9226 +vn 0.0503 -0.1977 0.9790 +vn 0.0501 -0.0002 0.9987 +vn -0.0040 -0.0008 1.0000 +vn -0.0353 -0.0011 0.9994 +vn -0.0588 -0.0012 0.9983 +vn -0.1001 -0.1980 0.9751 +vn -0.0770 -0.0011 0.9970 +vn -0.1194 -0.3811 0.9168 +vn -0.0410 0.1966 0.9796 +vn -0.0248 0.1967 0.9801 +vn -0.0132 0.3817 0.9242 +vn -0.0223 0.3816 0.9241 +vn 0.0005 0.1971 0.9804 +vn 0.0064 0.3820 0.9242 +vn -0.0007 0.5524 0.8336 +vn -0.0030 0.5523 0.8336 +vn 0.0135 0.5526 0.8334 +vn -0.0515 0.1965 0.9791 +vn 0.0515 0.1973 0.9790 +vn 0.0543 0.3818 0.9226 +vn 0.0587 0.5519 0.8318 +vn 0.0644 0.7053 0.7060 +vn 0.0219 0.7064 0.7075 +vn 0.0128 0.7064 0.7077 +vn 0.0167 0.7062 0.7078 +vn 0.0008 0.5524 0.8336 +vn 0.0270 0.7061 0.7076 +vn -0.0255 0.3816 0.9240 +vn 0.0355 0.8319 0.5538 +vn 0.0262 0.8322 0.5538 +vn 0.0387 0.9229 0.3831 +vn 0.0522 0.9223 0.3831 +vn 0.0309 0.8322 0.5536 +vn 0.0400 0.9229 0.3830 +vn 0.0502 0.9789 0.1983 +vn 0.0667 0.9779 0.1982 +vn 0.0491 0.9789 0.1982 +vn 0.0513 0.8313 0.5534 +vn 0.0711 0.8306 0.5523 +vn 0.0784 0.9208 0.3821 +vn 0.0862 0.9765 0.1977 +vn 0.0945 0.9955 0.0007 +vn 0.0581 0.9983 0.0005 +vn 0.0605 0.9982 0.0006 +vn 0.0786 0.9969 0.0007 +vn 0.0894 0.9761 0.1980 +vn 0.1029 0.9947 0.0008 +vn 0.0722 0.9211 0.3826 +vn 0.6358 -0.1531 0.7565 +vn 0.6365 -0.2936 0.7132 +vn 0.6424 -0.2917 0.7087 +vn 0.6400 -0.1570 0.7522 +vn 0.6366 -0.4236 0.6444 +vn 0.6407 -0.4178 0.6441 +vn 0.6921 -0.2746 0.6676 +vn 0.6836 -0.1608 0.7119 +vn 0.6843 -0.3864 0.6184 +vn 0.6994 0.0000 0.7148 +vn 0.6992 -0.1406 0.7009 +vn 0.6354 0.0000 0.7722 +vn 0.6993 -0.2719 0.6611 +vn 0.6998 -0.3929 0.5965 +vn 0.7006 -0.5022 0.5069 +vn 0.6369 -0.5430 0.5473 +vn 0.6395 -0.5414 0.5458 +vn 0.6773 -0.5179 0.5225 +vn 0.7345 -0.4774 0.4824 +vn 0.7797 -0.3501 0.5191 +vn 0.7973 -0.2291 0.5585 +vn 0.7790 -0.1157 0.6162 +vn 0.6758 0.0000 0.7370 +vn 0.7331 0.0000 0.6801 +vn 0.6380 0.0000 0.7700 +vn 0.0872 0.9766 -0.1966 +vn 0.0689 0.9780 -0.1970 +vn 0.0749 0.9214 -0.3814 +vn 0.0920 0.9201 -0.3808 +vn 0.0663 0.9782 -0.1970 +vn 0.0733 0.9215 -0.3814 +vn 0.0786 0.8304 -0.5516 +vn 0.0931 0.8294 -0.5509 +vn 0.0790 0.8305 -0.5514 +vn 0.1115 0.9742 -0.1960 +vn 0.1025 0.9752 -0.1961 +vn 0.1098 0.9185 -0.3798 +vn 0.1166 0.8277 -0.5490 +vn 0.1225 0.7021 -0.7014 +vn 0.0833 0.7046 -0.7047 +vn 0.0797 0.7046 -0.7051 +vn 0.0904 0.7039 -0.7045 +vn 0.1132 0.8277 -0.5497 +vn 0.1063 0.7029 -0.7033 +vn 0.1149 0.9179 -0.3798 +vn 0.0839 0.5508 -0.8304 +vn 0.0782 0.5511 -0.8308 +vn 0.0743 0.3809 -0.9216 +vn 0.0741 0.3808 -0.9217 +vn 0.0859 0.5510 -0.8301 +vn 0.0866 0.3808 -0.9206 +vn 0.0680 0.1964 -0.9782 +vn 0.0613 0.1964 -0.9786 +vn 0.0856 0.1965 -0.9768 +vn 0.0944 0.5502 -0.8297 +vn 0.1271 0.5491 -0.8261 +vn 0.1303 0.3796 -0.9159 +vn 0.1320 0.1961 -0.9717 +vn 0.0588 0.1964 -0.9788 +vn 0.0785 0.3807 -0.9214 +vn 0.0163 0.5517 -0.8339 +vn 0.0266 0.5517 -0.8336 +vn -0.0175 0.3820 -0.9240 +vn -0.0297 0.3822 -0.9236 +vn 0.0435 0.5515 -0.8331 +vn 0.0028 0.3819 -0.9242 +vn -0.0627 0.1974 -0.9783 +vn -0.0764 0.1976 -0.9773 +vn -0.0398 0.1973 -0.9795 +vn 0.0606 0.7101 -0.7015 +vn 0.0610 0.7031 -0.7085 +vn 0.0157 0.5614 -0.8274 +vn 0.0689 0.7034 -0.7075 +vn 0.0817 0.7032 -0.7063 +vn 0.0981 0.7025 -0.7049 +vn 0.0653 0.5510 -0.8320 +vn 0.0291 0.3817 -0.9238 +vn -0.0099 0.1973 -0.9803 +vn -0.0514 -0.0002 -0.9987 +vn -0.0837 -0.0001 -0.9965 +vn -0.1083 0.0000 -0.9941 +vn -0.1232 0.0001 -0.9924 +vn -0.0776 0.2113 -0.9743 +vn -0.1247 0.0147 -0.9921 +vn -0.0306 0.3941 -0.9186 +vn 0.1610 0.9656 -0.2043 +vn 0.1607 0.9663 -0.2011 +vn 0.1371 0.9131 -0.3839 +vn 0.1346 0.9124 -0.3865 +vn 0.1597 0.9669 -0.1988 +vn 0.1408 0.9134 -0.3819 +vn 0.1065 0.8260 -0.5536 +vn 0.1012 0.8254 -0.5554 +vn 0.1148 0.8259 -0.5520 +vn 0.1813 0.9834 -0.0120 +vn 0.1803 0.9836 -0.0100 +vn 0.1614 0.9657 -0.2033 +vn 0.1770 0.9842 -0.0063 +vn 0.1713 0.9852 -0.0036 +vn 0.1633 0.9866 -0.0018 +vn 0.1579 0.9676 -0.1972 +vn 0.1450 0.9134 -0.3804 +vn 0.1252 0.8255 -0.5504 +vn 0.1010 0.8293 -0.5496 +vn 0.1345 0.9140 -0.3829 +vn 0.1844 0.8227 0.5377 +vn 0.1737 0.8227 0.5413 +vn 0.1835 0.9102 0.3713 +vn 0.1921 0.9100 0.3673 +vn 0.1562 0.8240 0.5447 +vn 0.1694 0.9116 0.3746 +vn 0.1847 0.9646 0.1885 +vn 0.1907 0.9641 0.1845 +vn 0.1745 0.9658 0.1916 +vn 0.1727 0.7085 0.6842 +vn 0.1674 0.7008 0.6934 +vn 0.1885 0.8274 0.5291 +vn 0.1549 0.7006 0.6965 +vn 0.1346 0.7016 0.6997 +vn 0.1078 0.7033 0.7026 +vn 0.1330 0.8261 0.5476 +vn 0.1505 0.9138 0.3772 +vn 0.1607 0.9678 0.1938 +vn 0.1926 0.9647 0.1796 +vn 0.1949 0.9122 0.3603 +vn 0.0693 0.1976 0.9778 +vn 0.0551 0.1975 0.9788 +vn 0.0944 0.3815 0.9195 +vn 0.1086 0.3817 0.9179 +vn 0.0319 0.1975 0.9798 +vn 0.0711 0.3818 0.9215 +vn 0.1278 0.5501 0.8253 +vn 0.1415 0.5503 0.8229 +vn 0.1055 0.5507 0.8280 +vn 0.0322 0.0151 0.9994 +vn 0.0240 -0.0000 0.9997 +vn 0.0772 0.2117 0.9743 +vn 0.0105 -0.0002 0.9999 +vn -0.0117 -0.0002 0.9999 +vn -0.0401 -0.0003 0.9992 +vn 0.0019 0.1976 0.9803 +vn 0.0408 0.3823 0.9231 +vn 0.0764 0.5518 0.8305 +vn 0.1479 0.5605 0.8148 +vn 0.1158 0.3940 0.9118 +vn -0.1174 -0.5456 0.8298 +vn -0.1260 -0.5466 0.8278 +vn -0.0822 -0.3802 0.9213 +vn -0.0715 -0.3796 0.9224 +vn -0.1396 -0.5469 0.8255 +vn -0.0993 -0.3803 0.9195 +vn -0.0365 -0.1974 0.9797 +vn -0.0241 -0.1971 0.9801 +vn -0.0565 -0.1975 0.9787 +vn -0.1566 -0.6848 0.7117 +vn -0.1612 -0.6927 0.7030 +vn -0.1115 -0.5353 0.8373 +vn -0.1674 -0.6942 0.7001 +vn -0.1768 -0.6947 0.6972 +vn -0.1881 -0.6944 0.6945 +vn -0.1564 -0.5465 0.8227 +vn -0.1208 -0.3800 0.9171 +vn -0.0819 -0.1974 0.9769 +vn -0.0164 -0.1831 0.9830 +vn -0.0646 -0.3674 0.9278 +vn -0.2555 -0.9449 0.2046 +vn -0.2537 -0.9466 0.1989 +vn -0.2319 -0.8960 0.3786 +vn -0.2310 -0.8942 0.3835 +vn -0.2498 -0.9485 0.1947 +vn -0.2325 -0.8974 0.3749 +vn -0.2033 -0.8125 0.5464 +vn -0.1997 -0.8107 0.5503 +vn -0.2083 -0.8134 0.5432 +vn -0.2744 -0.9615 0.0180 +vn -0.2729 -0.9619 0.0143 +vn -0.2556 -0.9436 0.2106 +vn -0.2683 -0.9633 0.0080 +vn -0.2601 -0.9656 0.0032 +vn -0.2483 -0.9687 0.0001 +vn -0.2438 -0.9506 0.1921 +vn -0.2322 -0.8985 0.3725 +vn -0.2137 -0.8137 0.5406 +vn -0.1968 -0.8056 0.5588 +vn -0.2297 -0.8913 0.3910 +vn -0.2751 -0.8068 -0.5229 +vn -0.2634 -0.8068 -0.5289 +vn -0.2729 -0.8914 -0.3617 +vn -0.2826 -0.8910 -0.3552 +vn -0.2441 -0.8090 -0.5348 +vn -0.2569 -0.8939 -0.3674 +vn -0.2747 -0.9440 -0.1827 +vn -0.2820 -0.9431 -0.1761 +vn -0.2623 -0.9465 -0.1879 +vn -0.2625 -0.6827 -0.6819 +vn -0.2589 -0.6888 -0.6771 +vn -0.2787 -0.8035 -0.5261 +vn -0.2455 -0.6885 -0.6825 +vn -0.2235 -0.6902 -0.6883 +vn -0.1941 -0.6934 -0.6939 +vn -0.2182 -0.8128 -0.5401 +vn -0.2351 -0.8980 -0.3720 +vn -0.2453 -0.9503 -0.1917 +vn -0.2845 -0.9426 -0.1749 +vn -0.2858 -0.8896 -0.3563 +vn -0.1664 -0.1962 -0.9663 +vn -0.1511 -0.1960 -0.9689 +vn -0.1883 -0.3772 -0.9068 +vn -0.2035 -0.3775 -0.9033 +vn -0.1257 -0.1963 -0.9724 +vn -0.1631 -0.3779 -0.9114 +vn -0.2199 -0.5420 -0.8111 +vn -0.2345 -0.5424 -0.8067 +vn -0.1959 -0.5432 -0.8164 +vn -0.1687 -0.1830 -0.9685 +vn -0.0922 -0.1969 -0.9761 +vn -0.1299 -0.3792 -0.9161 +vn -0.1640 -0.5455 -0.8219 +vn -0.2379 -0.5337 -0.8115 +vn -0.2065 -0.3665 -0.9072 +vn 0.0854 0.5505 -0.8305 +vn 0.0976 0.5501 -0.8294 +vn 0.0711 0.3811 -0.9218 +vn 0.0541 0.3814 -0.9228 +vn 0.1008 0.5500 -0.8291 +vn 0.0792 0.3808 -0.9213 +vn 0.0404 0.1970 -0.9796 +vn 0.0191 0.1972 -0.9802 +vn 0.0534 0.1967 -0.9790 +vn 0.1124 0.7019 -0.7033 +vn 0.1195 0.7017 -0.7024 +vn 0.1178 0.7020 -0.7024 +vn 0.0235 -0.0009 -0.9997 +vn 0.0057 -0.0006 -1.0000 +vn -0.0193 -0.0004 -0.9998 +vn 0.1539 0.9684 -0.1961 +vn 0.1461 0.9697 -0.1956 +vn 0.1440 0.9142 -0.3787 +vn 0.1472 0.9135 -0.3792 +vn 0.1326 0.9717 -0.1956 +vn 0.1338 0.9157 -0.3790 +vn 0.1352 0.8252 -0.5484 +vn 0.1334 0.8251 -0.5490 +vn 0.1290 0.8261 -0.5486 +vn 0.1534 0.9882 -0.0005 +vn 0.1412 0.9900 0.0003 +vn 0.1250 0.9922 0.0007 +vn 0.1090 0.8281 0.5499 +vn 0.0880 0.8295 0.5515 +vn 0.1116 0.9179 0.3807 +vn 0.1304 0.9160 0.3793 +vn 0.0693 0.8306 0.5526 +vn 0.0927 0.9196 0.3818 +vn 0.1294 0.9719 0.1966 +vn 0.1453 0.9699 0.1954 +vn 0.1114 0.9740 0.1973 +vn 0.0808 0.7047 0.7049 +vn 0.0588 0.7056 0.7062 +vn 0.0412 0.7060 0.7070 +vn -0.0263 0.1975 0.9800 +vn -0.0451 0.1972 0.9793 +vn -0.0093 0.3823 0.9240 +vn 0.0117 0.3825 0.9239 +vn -0.0537 0.1969 0.9789 +vn -0.0216 0.3820 0.9239 +vn 0.0255 0.5527 0.8330 +vn 0.0476 0.5525 0.8322 +vn 0.0101 0.5527 0.8333 +vn -0.0659 -0.0004 0.9978 +vn -0.0816 -0.0005 0.9967 +vn -0.0857 -0.0007 0.9963 +vn -0.1692 -0.5458 0.8206 +vn -0.1718 -0.5459 0.8201 +vn -0.1460 -0.3793 0.9137 +vn -0.1387 -0.3795 0.9147 +vn -0.1614 -0.5470 0.8214 +vn -0.1404 -0.3798 0.9144 +vn -0.1159 -0.1971 0.9735 +vn -0.1042 -0.1972 0.9748 +vn -0.1151 -0.1973 0.9736 +vn -0.1953 -0.6941 0.6929 +vn -0.1929 -0.6947 0.6930 +vn -0.1778 -0.6968 0.6949 +vn -0.2339 -0.9533 0.1912 +vn -0.2177 -0.9571 0.1915 +vn -0.2159 -0.9027 0.3722 +vn -0.2278 -0.9000 0.3716 +vn -0.1917 -0.9624 0.1926 +vn -0.1930 -0.9071 0.3740 +vn -0.2077 -0.8156 0.5400 +vn -0.2151 -0.8140 0.5395 +vn -0.1884 -0.8189 0.5421 +vn -0.2330 -0.9725 -0.0013 +vn -0.2128 -0.9771 -0.0017 +vn -0.1843 -0.9829 -0.0015 +vn -0.1897 -0.8173 -0.5440 +vn -0.1611 -0.8216 -0.5469 +vn -0.1839 -0.9076 -0.3774 +vn -0.2104 -0.9028 -0.3752 +vn -0.1300 -0.8256 -0.5491 +vn -0.1527 -0.9127 -0.3791 +vn -0.2012 -0.9599 -0.1953 +vn -0.2249 -0.9549 -0.1940 +vn -0.1710 -0.9656 -0.1962 +vn -0.1627 -0.6971 -0.6983 +vn -0.1327 -0.7004 -0.7013 +vn -0.1025 -0.7032 -0.7035 +vn -0.0584 -0.1976 -0.9785 +vn -0.0306 -0.1981 -0.9797 +vn -0.0661 -0.3819 -0.9218 +vn -0.0956 -0.3807 -0.9197 +vn -0.0085 -0.1985 -0.9801 +vn -0.0405 -0.3828 -0.9229 +vn -0.1003 -0.5502 -0.8290 +vn -0.1305 -0.5481 -0.8262 +vn -0.0719 -0.5520 -0.8308 +vn 0.9943 -0.0225 -0.1044 +vn 0.9942 -0.0435 -0.0982 +vn 0.9942 -0.0434 -0.0982 +vn 0.9943 -0.0224 -0.1044 +vn 0.9941 -0.0630 -0.0880 +vn 0.9941 -0.0629 -0.0881 +vn 0.3966 -0.1826 -0.8997 +vn 0.3944 -0.3533 -0.8483 +vn 0.2793 -0.3682 -0.8868 +vn 0.2815 -0.1902 -0.9405 +vn 0.3912 -0.5113 -0.7652 +vn 0.2758 -0.5327 -0.8001 +vn 0.6992 0.1406 0.7009 +vn 0.7472 0.1304 0.6517 +vn 0.7473 0.0000 0.6645 +vn 0.6993 0.2719 0.6611 +vn 0.7472 0.2525 0.6148 +vn 0.6998 0.3929 0.5965 +vn 0.7477 0.3651 0.5547 +vn 0.7006 0.5022 0.5069 +vn 0.7483 0.4664 0.4716 +vn 0.9940 -0.0808 -0.0738 +vn 0.9940 -0.0806 -0.0740 +vn 0.3867 -0.6545 -0.6497 +vn 0.2711 -0.6816 -0.6797 +vn 0.2823 0.0000 -0.9593 +vn 0.3975 0.0000 -0.9176 +vn 0.9943 0.0000 -0.1065 +vn 0.9938 -0.0956 -0.0565 +vn 0.9936 -0.1065 -0.0372 +vn 0.9936 -0.1064 -0.0375 +vn 0.9938 -0.0954 -0.0568 +vn 0.9934 -0.1135 -0.0160 +vn 0.9934 -0.1134 -0.0163 +vn 0.3808 -0.7725 -0.5082 +vn 0.3743 -0.8583 -0.3509 +vn 0.2584 -0.8932 -0.3681 +vn 0.2650 -0.8041 -0.5322 +vn 0.3675 -0.9125 -0.1796 +vn 0.2512 -0.9492 -0.1897 +vn 0.7010 0.5919 0.3977 +vn 0.7487 0.5498 0.3704 +vn 0.7016 0.6566 0.2767 +vn 0.7491 0.6102 0.2579 +vn 0.7026 0.6966 0.1454 +vn 0.7499 0.6474 0.1358 +vn 0.7037 0.7105 0.0047 +vn 0.7509 0.6604 0.0052 +vn 0.9932 -0.1163 0.0070 +vn 0.9932 -0.1163 0.0066 +vn 0.3603 -0.9328 0.0047 +vn 0.2435 -0.9699 0.0017 +vn 0.9930 -0.1146 0.0301 +vn 0.9927 -0.1086 0.0519 +vn 0.9927 -0.1087 0.0516 +vn 0.9930 -0.1147 0.0297 +vn 0.9925 -0.0983 0.0722 +vn 0.9925 -0.0984 0.0720 +vn 0.3526 -0.9164 0.1896 +vn 0.3453 -0.8654 0.3630 +vn 0.2283 -0.8989 0.3740 +vn 0.2357 -0.9523 0.1939 +vn 0.3389 -0.7817 0.5236 +vn 0.2216 -0.8116 0.5406 +vn 0.7043 0.6968 -0.1360 +vn 0.7513 0.6479 -0.1255 +vn 0.7049 0.6570 -0.2674 +vn 0.7518 0.6110 -0.2479 +vn 0.7058 0.5924 -0.3885 +vn 0.7526 0.5509 -0.3608 +vn 0.7067 0.5027 -0.4979 +vn 0.7534 0.4676 -0.4624 +vn 0.9924 -0.0837 0.0906 +vn 0.9924 -0.0839 0.0904 +vn 0.3332 -0.6644 0.6690 +vn 0.2156 -0.6897 0.6913 +vn 0.9922 -0.0657 0.1059 +vn 0.9921 -0.0456 0.1170 +vn 0.9921 -0.0457 0.1170 +vn 0.9922 -0.0659 0.1058 +vn 0.9920 -0.0236 0.1238 +vn 0.3281 -0.5205 0.7883 +vn 0.3244 -0.3604 0.8746 +vn 0.2067 -0.3739 0.9041 +vn 0.2104 -0.5402 0.8148 +vn 0.3224 -0.1865 0.9281 +vn 0.2045 -0.1933 0.9596 +vn 0.7070 0.3933 -0.5877 +vn 0.7536 0.3661 -0.5459 +vn 0.7072 0.2722 -0.6525 +vn 0.7538 0.2533 -0.6064 +vn 0.7076 0.1408 -0.6924 +vn 0.7541 0.1308 -0.6436 +vn 0.7080 -0.0000 -0.7063 +vn 0.7544 -0.0000 -0.6564 +vn 0.9920 0.0000 0.1262 +vn 0.3218 -0.0000 0.9468 +vn 0.2038 0.0000 0.9790 +vn 0.9920 0.0236 0.1238 +vn 0.9921 0.0456 0.1170 +vn 0.9921 0.0457 0.1170 +vn 0.9922 0.0657 0.1059 +vn 0.9922 0.0659 0.1058 +vn 0.3224 0.1865 0.9281 +vn 0.3244 0.3604 0.8746 +vn 0.2067 0.3739 0.9041 +vn 0.2045 0.1933 0.9596 +vn 0.3281 0.5205 0.7883 +vn 0.2104 0.5402 0.8148 +vn 0.7076 -0.1408 -0.6924 +vn 0.7541 -0.1308 -0.6436 +vn 0.7072 -0.2722 -0.6525 +vn 0.7538 -0.2533 -0.6064 +vn 0.7070 -0.3933 -0.5877 +vn 0.7536 -0.3661 -0.5459 +vn 0.7067 -0.5027 -0.4979 +vn 0.7534 -0.4676 -0.4624 +vn 0.9924 0.0837 0.0906 +vn 0.9924 0.0839 0.0904 +vn 0.3332 0.6644 0.6690 +vn 0.2156 0.6897 0.6913 +vn 0.9925 0.0983 0.0722 +vn 0.9927 0.1086 0.0519 +vn 0.9927 0.1087 0.0516 +vn 0.9925 0.0984 0.0720 +vn 0.9930 0.1146 0.0301 +vn 0.9930 0.1147 0.0297 +vn 0.3389 0.7817 0.5236 +vn 0.3453 0.8654 0.3630 +vn 0.2283 0.8989 0.3740 +vn 0.2216 0.8116 0.5406 +vn 0.3526 0.9164 0.1896 +vn 0.2357 0.9523 0.1939 +vn 0.7058 -0.5923 -0.3885 +vn 0.7526 -0.5508 -0.3608 +vn 0.7049 -0.6570 -0.2674 +vn 0.7518 -0.6110 -0.2479 +vn 0.7043 -0.6968 -0.1360 +vn 0.7513 -0.6479 -0.1255 +vn 0.7037 -0.7105 0.0047 +vn 0.7509 -0.6604 0.0052 +vn 0.9932 0.1163 0.0070 +vn 0.9932 0.1163 0.0066 +vn 0.3603 0.9328 0.0047 +vn 0.2435 0.9699 0.0017 +vn 0.9934 0.1135 -0.0160 +vn 0.9936 0.1065 -0.0372 +vn 0.9936 0.1064 -0.0375 +vn 0.9934 0.1134 -0.0163 +vn 0.9938 0.0956 -0.0565 +vn 0.9938 0.0954 -0.0568 +vn 0.3675 0.9125 -0.1796 +vn 0.3743 0.8583 -0.3509 +vn 0.2584 0.8932 -0.3681 +vn 0.2512 0.9492 -0.1897 +vn 0.3808 0.7725 -0.5082 +vn 0.2650 0.8041 -0.5322 +vn 0.7026 -0.6966 0.1454 +vn 0.7499 -0.6474 0.1358 +vn 0.7016 -0.6566 0.2767 +vn 0.7491 -0.6102 0.2579 +vn 0.7010 -0.5919 0.3977 +vn 0.7487 -0.5498 0.3704 +vn 0.7483 -0.4664 0.4716 +vn 0.9940 0.0808 -0.0738 +vn 0.9940 0.0806 -0.0740 +vn 0.3867 0.6545 -0.6497 +vn 0.2711 0.6816 -0.6797 +vn 0.9941 0.0630 -0.0880 +vn 0.9942 0.0435 -0.0982 +vn 0.9942 0.0434 -0.0982 +vn 0.9941 0.0629 -0.0881 +vn 0.9943 0.0225 -0.1044 +vn 0.9943 0.0224 -0.1044 +vn 0.3912 0.5113 -0.7652 +vn 0.3944 0.3533 -0.8483 +vn 0.2793 0.3682 -0.8868 +vn 0.2758 0.5327 -0.8001 +vn 0.3966 0.1826 -0.8997 +vn 0.2815 0.1902 -0.9405 +vn 0.7477 -0.3651 0.5547 +vn 0.7472 -0.2525 0.6148 +vn 0.7472 -0.1304 0.6517 +vn 0.8805 0.3322 0.3381 +vn 0.9296 0.1388 0.3414 +vn 1.0000 -0.0000 0.0068 +vn 0.9309 0.3351 0.1451 +vn 0.8796 -0.0000 0.4757 +vn 0.9296 -0.1388 0.3414 +vn 0.8805 -0.3322 0.3381 +vn 0.9309 -0.3351 0.1451 +vn 0.8828 -0.4697 0.0060 +vn 0.9328 -0.3351 -0.1325 +vn 0.8850 -0.3322 -0.3262 +vn 0.9342 -0.1388 -0.3288 +vn 0.8860 -0.0000 -0.4637 +vn 0.9342 0.1388 -0.3288 +vn 0.8850 0.3322 -0.3262 +vn 0.9328 0.3351 -0.1325 +vn 0.8828 0.4697 0.0060 +vn 0.7345 0.4774 0.4824 +vn 0.7797 0.3501 0.5191 +vn 0.7808 0.5138 0.3554 +vn 0.7973 0.2291 0.5585 +vn 0.7995 0.5531 0.2345 +vn 0.7790 0.1157 0.6162 +vn 0.7808 -0.5138 0.3554 +vn 0.7995 -0.5531 0.2345 +vn 0.7377 -0.6751 0.0050 +vn 0.7840 -0.6109 -0.1104 +vn 0.7824 -0.6109 0.1211 +vn 0.8026 -0.5531 -0.2236 +vn 0.7409 -0.4774 -0.4724 +vn 0.7867 -0.3501 -0.5085 +vn 0.7856 -0.5138 -0.3448 +vn 0.8048 -0.2291 -0.5476 +vn 0.7423 -0.0000 -0.6701 +vn 0.7873 0.1157 -0.6055 +vn 0.7873 -0.1157 -0.6055 +vn 0.8048 0.2291 -0.5476 +vn 0.7409 0.4774 -0.4724 +vn 0.7856 0.5138 -0.3448 +vn 0.7867 0.3501 -0.5085 +vn 0.8026 0.5531 -0.2236 +vn 0.7377 0.6751 0.0050 +vn 0.7824 0.6109 0.1211 +vn 0.7840 0.6109 -0.1104 +vn 0.6420 -0.7522 -0.1487 +vn 0.6433 -0.7089 -0.2893 +vn 0.6491 -0.7043 -0.2873 +vn 0.6462 -0.7478 -0.1526 +vn 0.6438 -0.6401 -0.4193 +vn 0.6479 -0.6398 -0.4134 +vn 0.6984 -0.6629 -0.2698 +vn 0.6895 -0.7072 -0.1561 +vn 0.6911 -0.6138 -0.3817 +vn 0.6406 -0.7679 0.0044 +vn 0.6443 -0.5430 -0.5386 +vn 0.6469 -0.5414 -0.5370 +vn 0.6843 -0.5179 -0.5133 +vn 0.6808 -0.7324 0.0046 +vn 0.6432 -0.7657 0.0044 +vn 0.6460 0.1531 -0.7478 +vn 0.6461 0.2936 -0.7045 +vn 0.6519 0.2917 -0.6999 +vn 0.6502 0.1570 -0.7434 +vn 0.6453 0.4236 -0.6357 +vn 0.6494 0.4178 -0.6354 +vn 0.7011 0.2746 -0.6581 +vn 0.6932 0.1608 -0.7025 +vn 0.6926 0.3864 -0.6091 +vn 0.6458 -0.0000 -0.7635 +vn 0.6443 0.5430 -0.5386 +vn 0.6469 0.5414 -0.5370 +vn 0.6843 0.5179 -0.5133 +vn 0.6858 -0.0000 -0.7278 +vn 0.6484 -0.0000 -0.7613 +vn 0.6399 0.7522 0.1574 +vn 0.6393 0.7089 0.2980 +vn 0.6452 0.7043 0.2961 +vn 0.6440 0.7478 0.1613 +vn 0.6381 0.6401 0.4280 +vn 0.6422 0.6398 0.4222 +vn 0.6947 0.6629 0.2793 +vn 0.6873 0.7072 0.1655 +vn 0.6858 0.6138 0.3911 +vn 0.6406 0.7679 0.0044 +vn 0.6369 0.5430 0.5473 +vn 0.6395 0.5414 0.5458 +vn 0.6773 0.5179 0.5225 +vn 0.6808 0.7324 0.0046 +vn 0.6432 0.7657 0.0044 +vn 0.6381 -0.6401 0.4280 +vn 0.6393 -0.7089 0.2980 +vn 0.6452 -0.7043 0.2961 +vn 0.6422 -0.6398 0.4222 +vn 0.6399 -0.7522 0.1574 +vn 0.6440 -0.7478 0.1613 +vn 0.6947 -0.6629 0.2793 +vn 0.6858 -0.6138 0.3911 +vn 0.6873 -0.7072 0.1655 +vn 0.6453 -0.4236 -0.6357 +vn 0.6461 -0.2936 -0.7045 +vn 0.6519 -0.2917 -0.6999 +vn 0.6494 -0.4178 -0.6354 +vn 0.6460 -0.1531 -0.7478 +vn 0.6502 -0.1570 -0.7434 +vn 0.7011 -0.2746 -0.6581 +vn 0.6926 -0.3864 -0.6091 +vn 0.6932 -0.1608 -0.7025 +vn 0.6438 0.6401 -0.4193 +vn 0.6433 0.7089 -0.2893 +vn 0.6491 0.7043 -0.2873 +vn 0.6479 0.6398 -0.4134 +vn 0.6420 0.7522 -0.1487 +vn 0.6462 0.7478 -0.1526 +vn 0.6984 0.6629 -0.2698 +vn 0.6911 0.6138 -0.3817 +vn 0.6895 0.7072 -0.1561 +vn 0.6366 0.4236 0.6444 +vn 0.6365 0.2936 0.7132 +vn 0.6424 0.2917 0.7087 +vn 0.6407 0.4178 0.6441 +vn 0.6358 0.1531 0.7565 +vn 0.6400 0.1570 0.7522 +vn 0.6921 0.2746 0.6676 +vn 0.6843 0.3864 0.6184 +vn 0.6836 0.1608 0.7119 +vn 0.0142 -0.1990 0.9799 +vn -0.0037 -0.3837 0.9234 +vn 0.0247 -0.3835 0.9232 +vn 0.0356 -0.1987 0.9794 +vn -0.0217 -0.5541 0.8322 +vn 0.0134 -0.5540 0.8324 +vn 0.0598 -0.3825 0.9220 +vn 0.0649 -0.1981 0.9780 +vn 0.0539 -0.5529 0.8315 +vn 0.0218 -0.0013 0.9998 +vn -0.0036 -0.1990 0.9800 +vn 0.0319 -0.0013 0.9995 +vn -0.0289 -0.3836 0.9231 +vn -0.0538 -0.5534 0.8312 +vn -0.0780 -0.7058 0.7041 +vn -0.0396 -0.7074 0.7057 +vn 0.0017 -0.7077 0.7065 +vn 0.0474 -0.7066 0.7060 +vn 0.1086 -0.7027 0.7032 +vn 0.1125 -0.5495 0.8279 +vn 0.1154 -0.3800 0.9177 +vn 0.1176 -0.1965 0.9734 +vn 0.0692 -0.0008 0.9976 +vn 0.1188 -0.0002 0.9929 +vn 0.0458 -0.0011 0.9989 +vn -0.0561 -0.8323 0.5515 +vn -0.0703 -0.9220 0.3808 +vn -0.0197 -0.9239 0.3820 +vn -0.0095 -0.8334 0.5526 +vn -0.0821 -0.9771 0.1963 +vn -0.0286 -0.9799 0.1972 +vn 0.0336 -0.9234 0.3823 +vn 0.0404 -0.8325 0.5526 +vn 0.0271 -0.9799 0.1977 +vn -0.0998 -0.8295 0.5495 +vn -0.1179 -0.9179 0.3790 +vn -0.1324 -0.9718 0.1950 +vn -0.0912 -0.9958 -0.0007 +vn -0.0362 -0.9993 -0.0004 +vn 0.0209 -0.9998 0.0000 +vn 0.0883 -0.9961 0.0005 +vn 0.0937 -0.9758 0.1975 +vn 0.0989 -0.9192 0.3813 +vn 0.1039 -0.8283 0.5506 +vn -0.0971 -0.9755 -0.1974 +vn -0.0993 -0.9192 -0.3811 +vn -0.0454 -0.9229 -0.3823 +vn -0.0419 -0.9793 -0.1978 +vn -0.0982 -0.8290 -0.5506 +vn -0.0467 -0.8322 -0.5525 +vn 0.0108 -0.9239 -0.3824 +vn 0.0153 -0.9802 -0.1977 +vn 0.0074 -0.8332 -0.5529 +vn -0.1486 -0.9692 -0.1964 +vn -0.1495 -0.9133 -0.3789 +vn -0.1457 -0.8240 -0.5476 +vn -0.1370 -0.7004 -0.7004 +vn -0.0935 -0.7042 -0.7038 +vn -0.0458 -0.7067 -0.7060 +vn 0.0052 -0.7075 -0.7067 +vn 0.0696 -0.7057 -0.7051 +vn 0.0734 -0.8310 -0.5514 +vn 0.0778 -0.9213 -0.3811 +vn 0.0828 -0.9770 -0.1966 +vn -0.0854 -0.5517 -0.8297 +vn -0.0746 -0.3823 -0.9210 +vn -0.0376 -0.3831 -0.9229 +vn -0.0427 -0.5533 -0.8319 +vn -0.0612 -0.1984 -0.9782 +vn -0.0306 -0.1987 -0.9796 +vn 0.0047 -0.3833 -0.9236 +vn 0.0043 -0.5537 -0.8327 +vn 0.0065 -0.1985 -0.9801 +vn -0.1237 -0.5493 -0.8264 +vn -0.1069 -0.3811 -0.9183 +vn -0.0868 -0.1980 -0.9764 +vn -0.0635 -0.0011 -0.9980 +vn -0.0452 -0.0012 -0.9990 +vn -0.0217 -0.0011 -0.9998 +vn 0.0096 -0.0008 -1.0000 +vn 0.0637 -0.0002 -0.9980 +vn 0.0636 -0.1977 -0.9782 +vn 0.0645 -0.3822 -0.9218 +vn 0.0665 -0.5523 -0.8310 +vn -0.0277 0.1966 -0.9801 +vn -0.0097 0.3816 -0.9243 +vn -0.0007 0.3817 -0.9243 +vn -0.0115 0.1967 -0.9804 +vn 0.0083 0.5523 -0.8336 +vn 0.0107 0.5524 -0.8335 +vn 0.0189 0.3820 -0.9240 +vn 0.0138 0.1971 -0.9803 +vn 0.0249 0.5526 -0.8331 +vn -0.0382 0.1965 -0.9797 +vn -0.0129 0.3816 -0.9242 +vn 0.0121 0.5524 -0.8335 +vn 0.0366 0.7061 -0.7072 +vn 0.0263 0.7062 -0.7075 +vn 0.0224 0.7064 -0.7075 +vn 0.0315 0.7064 -0.7071 +vn 0.0740 0.7053 -0.7051 +vn 0.0700 0.5519 -0.8309 +vn 0.0669 0.3818 -0.9218 +vn 0.0648 0.1973 -0.9782 +vn 0.0431 0.8319 -0.5532 +vn 0.0574 0.9223 -0.3823 +vn 0.0439 0.9229 -0.3826 +vn 0.0337 0.8322 -0.5534 +vn 0.0693 0.9779 -0.1973 +vn 0.0529 0.9789 -0.1976 +vn 0.0452 0.9229 -0.3824 +vn 0.0385 0.8322 -0.5531 +vn 0.0518 0.9789 -0.1975 +vn 0.0588 0.8313 -0.5527 +vn 0.0774 0.9211 -0.3816 +vn 0.0921 0.9761 -0.1968 +vn 0.1029 0.9947 0.0006 +vn 0.0786 0.9969 0.0003 +vn 0.0605 0.9982 0.0002 +vn 0.0581 0.9983 0.0003 +vn 0.0945 0.9955 0.0006 +vn 0.0889 0.9765 -0.1966 +vn 0.0836 0.9208 -0.3810 +vn 0.0786 0.8306 -0.5513 +vn 0.6520 -0.2917 -0.6999 +vn 0.7090 0.0000 -0.7052 +vn 0.7087 -0.1406 -0.6914 +vn 0.7079 -0.3929 -0.5870 +vn 0.7074 -0.5022 -0.4973 +vn 0.7082 -0.2719 -0.6515 +vn 0.0845 0.9766 0.1977 +vn 0.0868 0.9201 0.3820 +vn 0.0697 0.9214 0.3824 +vn 0.0662 0.9780 0.1979 +vn 0.0856 0.8294 0.5521 +vn 0.0711 0.8304 0.5526 +vn 0.0681 0.9215 0.3824 +vn 0.0636 0.9782 0.1979 +vn 0.0715 0.8305 0.5525 +vn 0.1088 0.9742 0.1975 +vn 0.1097 0.9179 0.3813 +vn 0.1057 0.8277 0.5512 +vn 0.0967 0.7029 0.7047 +vn 0.0808 0.7039 0.7056 +vn 0.0702 0.7046 0.7061 +vn 0.0737 0.7046 0.7058 +vn 0.1130 0.7021 0.7030 +vn 0.1091 0.8277 0.5505 +vn 0.1047 0.9185 0.3812 +vn 0.0998 0.9752 0.1975 +vn 0.0726 0.5508 0.8315 +vn 0.0616 0.3808 0.9226 +vn 0.0618 0.3809 0.9225 +vn 0.0669 0.5511 0.8318 +vn 0.0480 0.1964 0.9794 +vn 0.0547 0.1964 0.9790 +vn 0.0741 0.3808 0.9217 +vn 0.0746 0.5510 0.8312 +vn 0.0723 0.1965 0.9778 +vn 0.0831 0.5502 0.8309 +vn 0.0659 0.3807 0.9224 +vn 0.0455 0.1964 0.9795 +vn 0.1188 0.1961 0.9734 +vn 0.1178 0.3796 0.9176 +vn 0.1159 0.5490 0.8277 +vn 0.0050 0.5517 0.8341 +vn -0.0423 0.3822 0.9231 +vn -0.0300 0.3820 0.9237 +vn 0.0152 0.5517 0.8339 +vn -0.0897 0.1976 0.9762 +vn -0.0760 0.1974 0.9774 +vn -0.0098 0.3819 0.9242 +vn 0.0321 0.5515 0.8336 +vn -0.0531 0.1973 0.9789 +vn 0.0511 0.7101 0.7023 +vn 0.0045 0.5614 0.8275 +vn 0.0513 0.7031 0.7093 +vn -0.0431 0.3941 0.9180 +vn -0.0908 0.2113 0.9732 +vn -0.1382 0.0147 0.9903 +vn -0.1366 0.0001 0.9906 +vn -0.1218 0.0000 0.9926 +vn -0.0972 -0.0001 0.9953 +vn -0.0649 -0.0002 0.9979 +vn -0.0232 0.1973 0.9801 +vn 0.0166 0.3817 0.9242 +vn 0.0540 0.5510 0.8328 +vn 0.0721 0.7032 0.7074 +vn 0.0885 0.7025 0.7061 +vn 0.0593 0.7034 0.7084 +vn 0.1583 0.9656 0.2065 +vn 0.1293 0.9124 0.3882 +vn 0.1318 0.9131 0.3857 +vn 0.1579 0.9663 0.2033 +vn 0.0937 0.8254 0.5567 +vn 0.0989 0.8260 0.5550 +vn 0.1356 0.9134 0.3838 +vn 0.1570 0.9669 0.2010 +vn 0.1073 0.8259 0.5535 +vn 0.1811 0.9834 0.0145 +vn 0.1587 0.9657 0.2055 +vn 0.1801 0.9836 0.0125 +vn 0.1293 0.9140 0.3847 +vn 0.0935 0.8293 0.5510 +vn 0.1177 0.8255 0.5521 +vn 0.1399 0.9134 0.3823 +vn 0.1552 0.9676 0.1993 +vn 0.1712 0.9852 0.0059 +vn 0.1633 0.9866 0.0040 +vn 0.1769 0.9842 0.0087 +vn 0.1917 0.8227 -0.5351 +vn 0.1970 0.9100 -0.3647 +vn 0.1885 0.9102 -0.3688 +vn 0.1811 0.8227 -0.5389 +vn 0.1932 0.9641 -0.1819 +vn 0.1872 0.9646 -0.1860 +vn 0.1744 0.9116 -0.3723 +vn 0.1636 0.8240 -0.5425 +vn 0.1771 0.9658 -0.1892 +vn 0.1820 0.7085 -0.6818 +vn 0.1957 0.8274 -0.5265 +vn 0.1768 0.7008 -0.6911 +vn 0.1998 0.9122 -0.3576 +vn 0.1950 0.9647 -0.1770 +vn 0.1633 0.9678 -0.1916 +vn 0.1557 0.9138 -0.3751 +vn 0.1404 0.8261 -0.5458 +vn 0.1441 0.7016 -0.6978 +vn 0.1174 0.7033 -0.7011 +vn 0.1644 0.7006 -0.6943 +vn 0.0826 0.1976 -0.9768 +vn 0.1211 0.3817 -0.9163 +vn 0.1069 0.3815 -0.9182 +vn 0.0684 0.1975 -0.9779 +vn 0.1526 0.5503 -0.8209 +vn 0.1390 0.5501 -0.8235 +vn 0.0836 0.3818 -0.9204 +vn 0.0452 0.1975 -0.9793 +vn 0.1168 0.5507 -0.8265 +vn 0.0457 0.0151 -0.9988 +vn 0.0904 0.2117 -0.9731 +vn 0.0376 -0.0000 -0.9993 +vn 0.1282 0.3940 -0.9101 +vn 0.1589 0.5605 -0.8127 +vn 0.0876 0.5518 -0.8294 +vn 0.0534 0.3823 -0.9225 +vn 0.0152 0.1976 -0.9802 +vn 0.0019 -0.0002 -1.0000 +vn -0.0265 -0.0003 -0.9996 +vn 0.0240 -0.0002 -0.9997 +vn -0.1061 -0.5456 -0.8313 +vn -0.0590 -0.3796 -0.9233 +vn -0.0696 -0.3802 -0.9223 +vn -0.1148 -0.5466 -0.8295 +vn -0.0108 -0.1971 -0.9803 +vn -0.0231 -0.1974 -0.9801 +vn -0.0868 -0.3803 -0.9208 +vn -0.1284 -0.5469 -0.8273 +vn -0.0432 -0.1975 -0.9794 +vn -0.1469 -0.6848 -0.7138 +vn -0.1001 -0.5353 -0.8387 +vn -0.1516 -0.6927 -0.7051 +vn -0.0520 -0.3674 -0.9286 +vn -0.0031 -0.1831 -0.9831 +vn -0.0686 -0.1974 -0.9779 +vn -0.1083 -0.3800 -0.9186 +vn -0.1452 -0.5465 -0.8248 +vn -0.1673 -0.6947 -0.6996 +vn -0.1786 -0.6944 -0.6970 +vn -0.1578 -0.6941 -0.7023 +vn -0.2527 -0.9449 -0.2080 +vn -0.2258 -0.8942 -0.3866 +vn -0.2267 -0.8960 -0.3817 +vn -0.2509 -0.9466 -0.2023 +vn -0.1922 -0.8107 -0.5530 +vn -0.1958 -0.8125 -0.5491 +vn -0.2274 -0.8974 -0.3781 +vn -0.2472 -0.9485 -0.1981 +vn -0.2009 -0.8134 -0.5459 +vn -0.2741 -0.9615 -0.0217 +vn -0.2527 -0.9436 -0.2140 +vn -0.2727 -0.9619 -0.0180 +vn -0.2244 -0.8913 -0.3940 +vn -0.1892 -0.8056 -0.5614 +vn -0.2064 -0.8137 -0.5435 +vn -0.2271 -0.8985 -0.3756 +vn -0.2411 -0.9506 -0.1954 +vn -0.2600 -0.9656 -0.0068 +vn -0.2483 -0.9687 -0.0035 +vn -0.2682 -0.9633 -0.0116 +vn -0.2822 -0.8068 0.5191 +vn -0.2874 -0.8910 0.3514 +vn -0.2778 -0.8914 0.3580 +vn -0.2705 -0.8068 0.5253 +vn -0.2844 -0.9431 0.1722 +vn -0.2772 -0.9440 0.1789 +vn -0.2618 -0.8939 0.3639 +vn -0.2513 -0.8090 0.5314 +vn -0.2649 -0.9465 0.1843 +vn -0.2718 -0.6827 0.6783 +vn -0.2858 -0.8035 0.5222 +vn -0.2681 -0.6888 0.6735 +vn -0.2906 -0.8896 0.3524 +vn -0.2868 -0.9426 0.1710 +vn -0.2479 -0.9503 0.1884 +vn -0.2402 -0.8980 0.3688 +vn -0.2255 -0.8128 0.5371 +vn -0.2328 -0.6902 0.6852 +vn -0.2035 -0.6934 0.6912 +vn -0.2547 -0.6885 0.6791 +vn -0.1795 -0.1962 0.9640 +vn -0.2158 -0.3775 0.9005 +vn -0.2006 -0.3772 0.9042 +vn -0.1642 -0.1960 0.9667 +vn -0.2455 -0.5424 0.8034 +vn -0.2309 -0.5420 0.8080 +vn -0.1755 -0.3779 0.9091 +vn -0.1389 -0.1963 0.9706 +vn -0.2069 -0.5432 0.8137 +vn -0.1819 -0.1830 0.9661 +vn -0.2188 -0.3665 0.9043 +vn -0.2489 -0.5337 0.8082 +vn -0.1751 -0.5455 0.8196 +vn -0.1423 -0.3792 0.9143 +vn -0.1055 -0.1969 0.9747 +vn 0.0741 0.5505 0.8316 +vn 0.0416 0.3814 0.9235 +vn 0.0586 0.3811 0.9227 +vn 0.0863 0.5501 0.8306 +vn 0.0058 0.1972 0.9804 +vn 0.0271 0.1970 0.9800 +vn 0.0667 0.3808 0.9222 +vn 0.0895 0.5500 0.8304 +vn 0.0401 0.1967 0.9796 +vn 0.1029 0.7019 0.7048 +vn -0.0329 -0.0004 0.9995 +vn -0.0079 -0.0006 1.0000 +vn 0.0099 -0.0009 1.0000 +vn 0.1082 0.7020 0.7039 +vn 0.1099 0.7017 0.7040 +vn 0.1512 0.9684 0.1981 +vn 0.1420 0.9135 0.3812 +vn 0.1388 0.9142 0.3806 +vn 0.1434 0.9697 0.1975 +vn 0.1259 0.8251 0.5508 +vn 0.1278 0.8252 0.5502 +vn 0.1287 0.9157 0.3808 +vn 0.1299 0.9717 0.1974 +vn 0.1215 0.8261 0.5503 +vn 0.1534 0.9882 0.0026 +vn 0.1250 0.9922 0.0010 +vn 0.1412 0.9900 0.0016 +vn 0.1165 0.8281 -0.5484 +vn 0.1356 0.9160 -0.3775 +vn 0.1167 0.9179 -0.3792 +vn 0.0955 0.8295 -0.5502 +vn 0.1480 0.9699 -0.1935 +vn 0.1321 0.9719 -0.1948 +vn 0.0979 0.9196 -0.3805 +vn 0.0768 0.8306 -0.5516 +vn 0.1141 0.9740 -0.1958 +vn 0.0904 0.7047 -0.7037 +vn 0.0508 0.7060 -0.7064 +vn 0.0683 0.7056 -0.7053 +vn -0.0130 0.1975 -0.9802 +vn 0.0243 0.3825 -0.9237 +vn 0.0033 0.3823 -0.9240 +vn -0.0318 0.1972 -0.9798 +vn 0.0589 0.5525 -0.8314 +vn 0.0369 0.5527 -0.8325 +vn -0.0091 0.3820 -0.9241 +vn -0.0404 0.1969 -0.9796 +vn 0.0214 0.5527 -0.8331 +vn -0.0524 -0.0004 -0.9986 +vn -0.0721 -0.0007 -0.9974 +vn -0.0680 -0.0005 -0.9977 +vn -0.1581 -0.5458 -0.8229 +vn -0.1263 -0.3795 -0.9165 +vn -0.1336 -0.3793 -0.9156 +vn -0.1606 -0.5459 -0.8223 +vn -0.0910 -0.1972 -0.9761 +vn -0.1027 -0.1971 -0.9750 +vn -0.1279 -0.3798 -0.9162 +vn -0.1502 -0.5470 -0.8236 +vn -0.1019 -0.1973 -0.9750 +vn -0.1859 -0.6941 -0.6955 +vn -0.1683 -0.6968 -0.6972 +vn -0.1834 -0.6947 -0.6955 +vn -0.2313 -0.9533 -0.1943 +vn -0.2227 -0.9000 -0.3747 +vn -0.2108 -0.9027 -0.3751 +vn -0.2150 -0.9571 -0.1944 +vn -0.2077 -0.8141 -0.5424 +vn -0.2004 -0.8156 -0.5428 +vn -0.1879 -0.9071 -0.3766 +vn -0.1890 -0.9624 -0.1952 +vn -0.1811 -0.8189 -0.5446 +vn -0.2330 -0.9725 -0.0019 +vn -0.1843 -0.9829 -0.0010 +vn -0.2128 -0.9771 -0.0012 +vn -0.1971 -0.8173 0.5414 +vn -0.2155 -0.9028 0.3723 +vn -0.1890 -0.9076 0.3748 +vn -0.1685 -0.8216 0.5446 +vn -0.2275 -0.9549 0.1909 +vn -0.2038 -0.9599 0.1925 +vn -0.1579 -0.9127 0.3770 +vn -0.1374 -0.8256 0.5472 +vn -0.1736 -0.9656 0.1938 +vn -0.1721 -0.6971 0.6960 +vn -0.1120 -0.7032 0.7021 +vn -0.1423 -0.7004 0.6995 +vn -0.0717 -0.1976 0.9777 +vn -0.1081 -0.3807 0.9183 +vn -0.0786 -0.3819 0.9209 +vn -0.0439 -0.1981 0.9792 +vn -0.1417 -0.5481 0.8243 +vn -0.1116 -0.5502 0.8275 +vn -0.0530 -0.3828 0.9223 +vn -0.0219 -0.1985 0.9799 +vn -0.0832 -0.5520 0.8297 +vn 0.9928 -0.0225 0.1179 +vn 0.9928 -0.0224 0.1179 +vn 0.9928 -0.0434 0.1117 +vn 0.9928 -0.0435 0.1117 +vn 0.3843 -0.1826 0.9050 +vn 0.2687 -0.1902 0.9443 +vn 0.2672 -0.3682 0.8905 +vn 0.3828 -0.3533 0.8536 +vn 0.9928 -0.0629 0.1016 +vn 0.9928 -0.0630 0.1015 +vn 0.2649 -0.5327 0.8038 +vn 0.3807 -0.5113 0.7705 +vn 0.7563 0.0000 -0.6543 +vn 0.7559 0.1304 -0.6415 +vn 0.7087 0.1406 -0.6914 +vn 0.9928 0.0000 0.1200 +vn 0.3850 -0.0000 0.9229 +vn 0.2692 -0.0000 0.9631 +vn 0.2618 -0.6816 0.6833 +vn 0.3779 -0.6545 0.6549 +vn 0.9929 -0.0806 0.0875 +vn 0.9929 -0.0808 0.0873 +vn 0.7079 0.3929 -0.5870 +vn 0.7552 0.3651 -0.5445 +vn 0.7547 0.4664 -0.4614 +vn 0.7074 0.5022 -0.4973 +vn 0.7082 0.2719 -0.6515 +vn 0.7555 0.2525 -0.6046 +vn 0.9930 -0.0956 0.0700 +vn 0.9930 -0.0954 0.0703 +vn 0.9930 -0.1064 0.0510 +vn 0.9930 -0.1065 0.0507 +vn 0.3739 -0.7725 0.5134 +vn 0.2578 -0.8041 0.5357 +vn 0.2533 -0.8932 0.3716 +vn 0.3695 -0.8583 0.3560 +vn 0.9931 -0.1134 0.0298 +vn 0.9931 -0.1135 0.0295 +vn 0.2486 -0.9492 0.1931 +vn 0.3651 -0.9125 0.1846 +vn 0.7536 0.5498 -0.3602 +vn 0.7064 0.5919 -0.3881 +vn 0.2435 -0.9699 0.0016 +vn 0.3603 -0.9328 0.0002 +vn 0.9932 -0.1162 0.0069 +vn 0.9932 -0.1163 0.0065 +vn 0.7045 0.6966 -0.1359 +vn 0.7517 0.6474 -0.1255 +vn 0.7509 0.6604 0.0050 +vn 0.7037 0.7105 0.0048 +vn 0.7053 0.6566 -0.2671 +vn 0.7525 0.6102 -0.2477 +vn 0.9933 -0.1146 -0.0166 +vn 0.9933 -0.1147 -0.0162 +vn 0.9933 -0.1087 -0.0381 +vn 0.9933 -0.1086 -0.0384 +vn 0.3551 -0.9164 -0.1848 +vn 0.2383 -0.9523 -0.1906 +vn 0.2334 -0.8989 -0.3708 +vn 0.3502 -0.8654 -0.3582 +vn 0.9934 -0.0984 -0.0585 +vn 0.9934 -0.0983 -0.0587 +vn 0.2289 -0.8116 -0.5375 +vn 0.3460 -0.7817 -0.5189 +vn 0.7496 0.6479 0.1357 +vn 0.7024 0.6968 0.1456 +vn 0.2249 -0.6897 -0.6883 +vn 0.3423 -0.6644 -0.6644 +vn 0.9935 -0.0839 -0.0769 +vn 0.9935 -0.0837 -0.0771 +vn 0.7005 0.5923 0.3981 +vn 0.7476 0.5508 0.3710 +vn 0.7470 0.4676 0.4726 +vn 0.6999 0.5027 0.5075 +vn 0.7012 0.6570 0.2769 +vn 0.7484 0.6110 0.2581 +vn 0.9936 -0.0657 -0.0924 +vn 0.9936 -0.0659 -0.0923 +vn 0.9936 -0.0457 -0.1034 +vn 0.9936 -0.0456 -0.1035 +vn 0.3388 -0.5205 -0.7838 +vn 0.2215 -0.5402 -0.8119 +vn 0.2190 -0.3739 -0.9012 +vn 0.3363 -0.3604 -0.8701 +vn 0.9936 -0.0236 -0.1103 +vn 0.2176 -0.1933 -0.9567 +vn 0.3350 -0.1865 -0.9236 +vn 0.7461 0.3661 0.5561 +vn 0.6990 0.3933 0.5973 +vn 0.2171 -0.0000 -0.9761 +vn 0.3347 -0.0000 -0.9423 +vn 0.9936 -0.0000 -0.1127 +vn 0.6982 0.1408 0.7020 +vn 0.7453 0.1308 0.6538 +vn 0.7454 0.0000 0.6666 +vn 0.6983 0.0000 0.7158 +vn 0.6983 0.2722 0.6620 +vn 0.7454 0.2533 0.6166 +vn 0.9936 0.0236 -0.1103 +vn 0.9936 0.0457 -0.1034 +vn 0.9936 0.0456 -0.1035 +vn 0.3350 0.1865 -0.9236 +vn 0.2176 0.1933 -0.9567 +vn 0.2190 0.3739 -0.9012 +vn 0.3363 0.3604 -0.8701 +vn 0.9936 0.0659 -0.0923 +vn 0.9936 0.0657 -0.0924 +vn 0.2215 0.5402 -0.8119 +vn 0.3388 0.5205 -0.7838 +vn 0.7453 -0.1308 0.6538 +vn 0.6982 -0.1408 0.7020 +vn 0.2249 0.6897 -0.6883 +vn 0.3423 0.6644 -0.6644 +vn 0.9935 0.0839 -0.0769 +vn 0.9935 0.0837 -0.0771 +vn 0.6990 -0.3933 0.5973 +vn 0.7461 -0.3661 0.5561 +vn 0.7470 -0.4676 0.4726 +vn 0.6999 -0.5027 0.5075 +vn 0.6983 -0.2722 0.6620 +vn 0.7454 -0.2533 0.6166 +vn 0.9934 0.0983 -0.0587 +vn 0.9934 0.0984 -0.0585 +vn 0.9933 0.1087 -0.0381 +vn 0.9933 0.1085 -0.0384 +vn 0.3460 0.7817 -0.5189 +vn 0.2289 0.8116 -0.5375 +vn 0.2334 0.8989 -0.3708 +vn 0.3502 0.8654 -0.3582 +vn 0.9933 0.1147 -0.0162 +vn 0.9933 0.1146 -0.0166 +vn 0.2383 0.9523 -0.1906 +vn 0.3551 0.9164 -0.1848 +vn 0.7476 -0.5509 0.3710 +vn 0.7005 -0.5924 0.3981 +vn 0.2435 0.9699 0.0016 +vn 0.3603 0.9328 0.0002 +vn 0.9932 0.1162 0.0069 +vn 0.9932 0.1163 0.0065 +vn 0.7024 -0.6968 0.1456 +vn 0.7496 -0.6479 0.1357 +vn 0.7509 -0.6605 0.0050 +vn 0.7037 -0.7105 0.0048 +vn 0.7012 -0.6570 0.2769 +vn 0.7484 -0.6110 0.2581 +vn 0.9931 0.1135 0.0295 +vn 0.9931 0.1134 0.0298 +vn 0.9930 0.1064 0.0510 +vn 0.9930 0.1065 0.0507 +vn 0.3651 0.9125 0.1846 +vn 0.2486 0.9492 0.1931 +vn 0.2533 0.8932 0.3716 +vn 0.3695 0.8583 0.3560 +vn 0.9930 0.0954 0.0703 +vn 0.9930 0.0956 0.0700 +vn 0.2578 0.8041 0.5357 +vn 0.3739 0.7725 0.5133 +vn 0.7517 -0.6474 -0.1256 +vn 0.7045 -0.6966 -0.1359 +vn 0.2618 0.6816 0.6833 +vn 0.3779 0.6545 0.6549 +vn 0.9929 0.0806 0.0875 +vn 0.9929 0.0808 0.0873 +vn 0.7064 -0.5919 -0.3881 +vn 0.7536 -0.5498 -0.3602 +vn 0.7547 -0.4664 -0.4614 +vn 0.7053 -0.6566 -0.2671 +vn 0.7525 -0.6102 -0.2477 +vn 0.9928 0.0630 0.1015 +vn 0.9928 0.0629 0.1016 +vn 0.9928 0.0434 0.1117 +vn 0.9928 0.0435 0.1117 +vn 0.3807 0.5113 0.7705 +vn 0.2649 0.5327 0.8038 +vn 0.2672 0.3682 0.8905 +vn 0.3828 0.3533 0.8536 +vn 0.9928 0.0224 0.1179 +vn 0.9928 0.0225 0.1179 +vn 0.2687 0.1902 0.9443 +vn 0.3843 0.1826 0.9050 +vn 0.7552 -0.3651 -0.5445 +vn 0.7559 -0.1304 -0.6415 +vn 0.7555 -0.2525 -0.6046 +vn 0.8850 -0.3322 -0.3261 +vn 0.7409 0.4774 -0.4723 +vn 0.7972 -0.2291 0.5585 +vn 0.7874 0.1157 -0.6055 +vn 0.6758 0.0000 0.7371 +vn 0.6433 0.7089 -0.2892 +vn 0.6406 0.7679 0.0043 +vn 0.6947 0.7164 0.0639 +vn 0.6923 0.7216 0.0024 +vn 0.6928 0.7210 0.0108 +vn 0.3724 0.4867 -0.7903 +vn -0.6462 -0.7090 0.2825 +vn 0.1543 0.2789 -0.9478 +vn 0.1807 0.0662 0.9813 +vn 0.6885 0.7237 -0.0465 +vn -0.9970 0.0034 -0.0768 +vn -0.9754 0.0063 -0.2205 +vn -0.9756 0.0063 -0.2193 +vn 1.0000 -0.0043 0.0014 +vn 0.9845 -0.1718 0.0350 +vn 0.9837 -0.1761 0.0357 +vn 1.0000 -0.0037 0.0016 +vn -0.9999 0.0085 -0.0068 +vn -0.9999 0.0034 -0.0099 +vn -1.0000 0.0025 -0.0093 +vn -0.7510 -0.0141 -0.6602 +vn -0.5974 -0.0179 -0.8017 +vn -0.7487 -0.0141 -0.6627 +vn -0.9814 0.1885 -0.0352 +vn -1.0000 0.0034 -0.0037 +vn -1.0000 0.0026 -0.0043 +vn -0.9820 0.1855 -0.0348 +vn 0.9661 0.0400 -0.2552 +vn -0.9996 -0.0224 -0.0143 +vn -1.0000 0.0002 -0.0068 +vn -0.9996 -0.0232 -0.0146 +vn -0.8701 -0.0097 -0.4928 +vn 0.9001 0.4326 0.0516 +vn 0.9716 0.2354 0.0223 +vn 0.9696 0.2435 0.0235 +vn 0.9719 0.2354 -0.0091 +vn 0.9007 0.4326 -0.0393 +vn 0.9698 0.2435 -0.0103 +vn -0.9783 0.0063 0.2072 +vn -0.9980 0.0034 0.0632 +vn -0.9785 0.0063 0.2060 +vn -0.9740 -0.2254 -0.0208 +vn -0.9069 -0.4177 -0.0544 +vn -0.9692 -0.2451 -0.0242 +vn -0.9660 -0.0364 0.2558 +vn -0.9076 -0.4177 0.0420 +vn -0.9742 -0.2254 0.0076 +vn -0.9694 -0.2451 0.0111 +vn 0.9999 -0.0140 0.0068 +vn 0.9999 0.0110 0.0125 +vn 0.9998 0.0139 0.0132 +vn 0.9999 0.0110 0.0011 +vn 0.9999 0.0139 0.0004 +vn -0.9997 -0.0224 0.0007 +vn -0.9997 -0.0232 0.0010 +vn 0.7069 -0.0117 -0.7072 +vn 0.8428 -0.0102 -0.5382 +vn 0.8418 -0.0102 -0.5397 +vn 0.0349 -0.8448 -0.5340 +vn -0.0003 -1.0000 0.0083 +vn -0.0020 -0.9998 0.0222 +vn -0.0037 -0.9994 0.0356 +vn -0.0017 -0.9998 -0.0222 +vn -0.0002 -1.0000 -0.0083 +vn -0.0032 -0.9994 -0.0357 +vn -0.0445 -0.8519 -0.5218 +vn 0.0253 -0.9934 -0.1121 +vn 0.0537 -0.9986 0.0004 +vn 0.0306 -0.9903 -0.1358 +vn -0.0516 -0.8519 0.5211 +vn 0.0238 -0.9934 0.1124 +vn 0.0287 -0.9903 0.1362 +vn -0.0163 0.9901 -0.1392 +vn 0.0506 0.9987 0.0003 +vn -0.0499 0.9769 -0.2080 +vn -0.0182 0.9901 0.1390 +vn -0.0527 0.9769 0.2073 +vn -0.0117 -0.9983 -0.0577 +vn 0.0141 -0.9991 -0.0390 +vn 0.0395 -0.9990 -0.0204 +vn 0.0135 -0.9991 0.0392 +vn -0.0125 -0.9983 0.0575 +vn 0.0393 -0.9990 0.0210 +vn 0.0644 -0.9979 0.0032 +vn -0.0567 0.9867 -0.1524 +vn -0.0271 0.9979 -0.0582 +vn -0.0889 0.9628 -0.2552 +vn 0.0644 -0.9979 -0.0023 +vn -0.0588 0.9867 0.1516 +vn -0.0924 0.9628 0.2540 +vn -0.0279 0.9979 0.0578 +vn -0.9258 0.3728 -0.0618 +vn 0.9384 -0.0081 -0.3456 +vn 0.9999 -0.0043 0.0122 +vn 0.9999 -0.0155 0.0068 +vn 0.9999 -0.0037 0.0120 +vn -0.9383 0.0092 0.3457 +vn 0.8354 -0.0102 0.5496 +vn 0.6973 -0.0117 0.7167 +vn 0.8344 -0.0102 0.5511 +vn 0.9335 -0.3528 0.0640 +vn -0.9625 -0.0364 -0.2690 +vn 0.9336 -0.0081 0.3583 +vn -0.6082 -0.0179 0.7936 +vn -0.7599 -0.0141 0.6499 +vn -0.7577 -0.0141 0.6525 +vn -0.9335 0.0092 -0.3584 +vn -0.8767 -0.0097 0.4809 +vn -0.9818 0.1885 0.0219 +vn -0.9266 0.3728 0.0492 +vn -0.9824 0.1855 0.0215 +vn 0.9625 0.0400 0.2683 +vn 0.9343 -0.3528 -0.0513 +vn 0.9849 -0.1718 -0.0217 +vn 0.9841 -0.1761 -0.0223 +vn -0.0242 -0.8956 0.4442 +vn 0.0141 -0.9570 0.2896 +vn 0.0132 -0.9575 0.2881 +vn -0.0231 -0.8962 0.4430 +vn -0.0988 -0.9584 0.2677 +vn -0.1367 -0.8959 0.4227 +vn -0.0951 -0.9584 -0.2690 +vn -0.1309 -0.8959 -0.4246 +vn 0.0180 -0.9570 -0.2894 +vn 0.0171 -0.9575 -0.2879 +vn -0.0181 -0.8956 -0.4445 +vn -0.0171 -0.8962 -0.4433 +vn -0.0483 -0.9428 0.3297 +vn -0.0438 -0.9428 -0.3304 +vn 0.0274 -0.2329 -0.9721 +vn -0.9995 0.0277 0.0168 +vn -0.4502 0.2221 0.8649 +vn -0.9992 0.0277 -0.0304 +vn 0.9666 0.0302 -0.2544 +vn -0.4384 0.2221 -0.8709 +vn -0.2287 0.9735 -0.0016 +vn 0.0107 0.0000 -0.9999 +vn -0.0029 0.0000 1.0000 +vn -0.9934 0.0000 0.1149 +vn -0.2165 0.0000 -0.9763 +vn -0.9917 0.0000 -0.1283 +vn 1.0000 0.0000 0.0043 +vn -0.4720 0.8816 -0.0032 +vn -0.4396 0.8885 -0.1316 +vn -0.4414 0.8885 0.1256 +vn -0.4161 0.9093 -0.0028 +vn -0.2625 0.9649 -0.0018 +vn -0.2625 0.9637 0.0485 +vn -0.2618 0.9637 -0.0521 +vn -0.8823 -0.4613 -0.0941 +vn 0.3355 0.2270 0.9143 +vn -0.1186 0.6715 -0.7315 +vn -0.1363 0.5963 -0.7911 +vn -0.1363 0.5962 -0.7911 +vn -0.1469 0.5967 0.7889 +vn -0.1285 0.6717 0.7295 +vn -0.2131 0.5961 0.7742 +vn -0.1849 0.5823 0.7917 +vn -0.1995 0.6710 0.7141 +vn -0.1744 0.5817 -0.7945 +vn -0.2027 0.5956 -0.7773 +vn -0.1898 0.6707 -0.7170 +vn -0.1938 0.5601 0.8055 +vn -0.1786 0.6209 0.7633 +vn -0.1826 0.6057 0.7745 +vn -0.1684 0.6206 -0.7658 +vn -0.1831 0.5595 -0.8083 +vn -0.1723 0.6051 -0.7773 +vn -0.1592 0.6552 -0.7385 +vn -0.1691 0.6556 0.7360 +vn 0.2356 0.6343 0.7363 +vn 0.3755 0.6427 0.6678 +vn 0.3723 0.6427 0.6696 +vn 0.5034 0.6358 0.5850 +vn -0.0981 -0.6414 0.7609 +vn -0.1339 -0.6669 0.7330 +vn -0.1325 -0.6659 0.7342 +vn -0.9915 -0.1008 0.0827 +vn -0.1679 -0.6896 0.7045 +vn 0.5112 0.6355 -0.5786 +vn 0.0593 0.9982 0.0004 +vn 0.0589 0.9972 0.0457 +vn 0.0595 0.9972 -0.0449 +vn 0.8470 -0.0177 0.5314 +vn 0.3218 -0.0002 0.9468 +vn -0.9606 0.0242 -0.2770 +vn 0.3346 -0.0002 -0.9424 +vn 0.8471 0.0028 0.5315 +vn 0.8542 0.0028 -0.5199 +vn -0.3016 -0.7066 0.6402 +vn -0.1975 -0.7751 0.6001 +vn -0.1817 -0.7843 0.5933 +vn -0.0984 -0.8267 0.5540 +vn -0.1736 -0.7843 -0.5956 +vn -0.1894 -0.7752 -0.6027 +vn -0.2929 -0.7065 -0.6442 +vn -0.0909 -0.8267 -0.5553 +vn 0.0329 -0.8304 -0.5562 +vn 0.0254 -0.8305 0.5564 +usemtl Metal +s 1 +f 3/1/1 2/2/1 1500/3/1 1501/4/1 +f 1599/5/2 1600/6/2 1607/7/2 1608/8/2 +f 110/9/3 119/10/4 118/11/5 1522/12/6 1535/13/7 +f 118/11/5 120/14/8 1514/15/8 1522/12/6 +f 1515/16/9 53/17/9 55/18/10 1523/19/11 +f 1544/20/12 19/21/13 54/22/14 1520/23/15 +f 7/24/16 105/25/17 1647/26/17 1646/27/18 +f 34/28/19 1/29/20 1502/30/20 1504/31/21 +f 47/32/22 5/33/23 48/34/24 43/35/25 +f 1534/36/26 108/37/27 109/38/28 1531/39/29 +f 44/40/30 50/41/30 1632/42/30 1629/43/30 +f 1610/44/31 1611/45/31 1620/46/31 1617/47/31 +f 1526/48/32 1530/49/33 6/50/34 4/51/32 +f 50/41/35 10/52/36 1630/53/36 1632/42/35 +f 1639/54/37 1551/55/38 1529/56/39 1635/57/40 +f 1633/58/41 1528/59/42 1549/60/43 1642/61/44 +f 6/50/34 46/62/45 42/63/46 51/64/47 +f 1635/57/40 1529/56/39 1525/65/48 107/66/48 +f 45/67/49 48/34/49 1658/68/49 1656/69/49 +f 5/33/50 4/51/50 1654/70/50 1653/71/50 +f 1530/49/33 1552/72/51 46/62/45 6/50/34 +f 40/73/52 113/74/53 1650/75/53 1643/76/54 +f 1550/77/55 1527/78/56 5/33/23 47/32/22 +f 1527/78/56 1526/48/32 4/51/32 5/33/23 +f 1613/79/57 1614/80/57 1621/81/57 1622/82/57 +f 36/83/58 2/2/59 11/84/60 +f 2/2/59 3/1/61 121/85/61 117/86/62 +f 1521/87/63 1524/88/64 1539/89/65 1536/90/66 +f 107/66/48 1525/65/48 1528/59/42 1633/58/41 +f 114/91/67 116/92/68 108/37/27 1534/36/26 1517/93/69 +f 11/84/60 2/2/59 117/86/62 119/10/4 110/9/3 +f 114/91/70 120/14/71 1511/94/72 1507/95/70 +f 1533/96/73 1545/97/74 1519/98/75 1518/99/76 +f 22/100/77 34/28/19 1504/31/21 1505/101/77 +f 13/102/78 1/29/79 34/28/80 +f 15/103/81 16/104/82 17/105/83 +f 18/106/84 19/21/13 20/107/85 +f 23/108/86 56/109/87 25/110/88 +f 1541/111/89 1540/112/90 16/104/82 62/113/89 61/114/89 +f 1548/115/91 1547/116/92 29/117/93 71/118/91 70/119/91 +f 30/120/94 31/121/95 54/22/14 +f 37/122/96 38/123/97 55/18/10 +f 15/103/98 17/105/99 42/63/46 +f 18/106/100 20/107/101 43/35/25 +f 23/108/102 25/110/103 45/67/104 +f 26/124/105 46/62/45 27/125/106 +f 28/126/107 47/32/22 29/117/108 +f 30/120/109 48/34/24 31/121/110 +f 37/122/111 51/64/47 38/123/112 +f 36/83/58 11/84/60 12/127/113 35/128/114 +f 108/37/27 13/102/78 14/129/115 109/38/28 +f 58/130/116 59/131/117 84/132/117 82/133/118 +f 69/134/119 70/119/119 94/135/119 93/136/119 +f 28/126/107 1532/137/120 1550/77/55 47/32/22 +f 1536/90/66 1539/89/65 1543/138/121 27/125/122 1537/139/123 +f 34/28/80 22/100/124 21/140/124 33/141/125 +f 64/142/126 61/114/126 85/143/126 87/144/126 +f 1537/139/127 27/125/106 46/62/45 1552/72/51 +f 65/145/128 66/146/128 90/147/128 89/148/128 +f 60/149/129 57/150/129 81/151/129 83/152/129 +f 13/102/78 34/28/80 33/141/125 14/129/115 +f 22/100/130 36/83/58 35/128/114 21/140/130 +f 61/114/131 62/113/131 86/153/131 85/143/131 +f 35/128/132 12/127/133 1637/154/134 1638/155/135 +f 109/38/136 14/129/137 1641/156/138 1642/61/44 +f 30/120/109 18/106/100 43/35/25 48/34/24 +f 26/124/105 15/103/98 42/63/46 46/62/45 +f 110/9/3 1535/13/7 1538/157/139 111/158/140 +f 26/124/141 1542/159/142 1541/111/89 61/114/89 64/142/143 +f 33/141/144 21/140/145 1625/160/146 1640/161/147 +f 37/122/111 23/108/102 45/67/104 51/64/47 +f 111/158/148 1538/157/149 1551/55/38 1639/54/37 +f 20/107/101 29/117/108 47/32/22 43/35/25 +f 25/110/103 31/121/110 48/34/24 45/67/104 +f 14/129/137 33/141/144 1640/161/147 1641/156/138 +f 21/140/145 35/128/132 1638/155/135 1625/160/146 +f 17/105/99 38/123/112 51/64/47 42/63/46 +f 32/162/150 24/163/151 53/17/151 54/22/150 +f 39/164/152 52/165/153 56/109/87 55/18/10 +f 24/163/151 39/164/154 55/18/154 53/17/151 +f 52/165/153 32/162/155 54/22/14 56/109/87 +f 54/22/14 19/21/13 58/130/156 57/150/157 +f 19/21/13 18/106/84 59/131/156 58/130/156 +f 18/106/84 30/120/94 60/149/158 59/131/156 +f 30/120/94 54/22/14 57/150/157 60/149/158 +f 28/126/159 29/117/93 1547/116/92 1546/166/160 +f 16/104/82 15/103/81 63/167/161 62/113/89 +f 15/103/81 26/124/141 64/142/143 63/167/161 +f 26/124/141 27/125/122 1543/138/121 1542/159/142 +f 55/18/10 56/109/87 66/146/162 65/145/163 +f 56/109/87 23/108/86 67/168/164 66/146/162 +f 23/108/86 37/122/96 68/169/165 67/168/164 +f 37/122/96 55/18/10 65/145/163 68/169/165 +f 19/21/13 1544/20/12 1548/115/91 70/119/91 69/134/166 +f 29/117/93 20/107/85 72/170/91 71/118/91 +f 20/107/85 19/21/13 69/134/166 72/170/91 +f 56/109/87 54/22/14 74/171/167 73/172/168 +f 54/22/14 31/121/95 75/173/169 74/171/167 +f 31/121/95 25/110/88 76/174/170 75/173/169 +f 25/110/88 56/109/87 73/172/168 76/174/170 +f 16/104/82 55/18/10 78/175/171 77/176/172 +f 55/18/10 38/123/97 79/177/171 78/175/171 +f 38/123/97 17/105/83 80/178/171 79/177/171 +f 17/105/83 16/104/82 77/176/172 80/178/171 +f 81/151/156 82/133/156 84/132/156 83/152/156 +f 85/143/89 86/153/89 88/179/89 87/144/89 +f 89/148/173 90/147/173 92/180/173 91/181/173 +f 93/136/91 94/135/91 96/182/91 95/183/91 +f 97/184/174 98/185/174 100/186/174 99/187/174 +f 101/188/171 102/189/171 104/190/171 103/191/171 +f 68/169/175 65/145/175 89/148/175 91/181/175 +f 73/172/176 74/171/176 98/185/176 97/184/176 +f 62/113/177 63/167/177 88/179/177 86/153/177 +f 72/170/178 69/134/178 93/136/178 95/183/178 +f 77/176/179 78/175/180 102/189/180 101/188/181 +f 59/131/182 60/149/182 83/152/182 84/132/182 +f 66/146/183 67/168/183 92/180/183 90/147/183 +f 76/174/184 73/172/184 97/184/184 99/187/184 +f 63/167/185 64/142/185 87/144/185 88/179/185 +f 70/119/186 71/118/186 96/182/186 94/135/186 +f 80/178/187 77/176/179 101/188/181 103/191/187 +f 67/168/188 68/169/188 91/181/188 92/180/188 +f 74/171/189 75/173/189 100/186/189 98/185/189 +f 71/118/190 72/170/190 95/183/190 96/182/190 +f 78/175/191 79/177/191 104/190/191 102/189/191 +f 75/173/192 76/174/192 99/187/192 100/186/192 +f 79/177/193 80/178/193 103/191/193 104/190/193 +f 57/150/194 58/130/116 82/133/118 81/151/194 +f 12/127/133 111/158/148 1639/54/37 1637/154/134 +f 1546/166/160 1545/97/74 1533/96/73 1532/137/195 28/126/159 +f 11/84/60 110/9/3 111/158/140 12/127/113 +f 1531/39/196 109/38/136 1642/61/44 1549/60/43 +f 1520/23/15 54/22/14 53/17/9 1515/16/9 +f 1594/192/197 1595/193/197 1604/194/197 1601/195/197 +f 9/196/48 107/66/48 1633/58/41 1634/197/48 +f 1636/198/48 1635/57/40 107/66/48 9/196/48 +f 1626/199/198 7/24/16 1646/27/18 1651/200/198 +f 113/74/199 106/201/199 1648/202/199 1650/75/199 +f 1/29/79 13/102/78 108/37/27 116/92/68 115/203/200 +f 1523/19/11 55/18/10 16/104/82 1540/112/90 +f 114/91/67 115/203/200 116/92/68 +f 117/86/62 118/11/5 119/10/4 +f 120/14/71 118/11/201 1510/204/201 1511/94/72 +f 2/2/202 36/83/203 1506/205/204 1500/3/202 +f 3/1/205 1/29/79 115/203/200 121/85/205 +f 746/206/206 747/207/207 750/208/208 749/209/209 +f 747/207/207 748/210/210 751/211/211 750/208/208 +f 749/209/209 750/208/208 753/212/212 752/213/213 +f 750/208/208 751/211/211 754/214/214 753/212/212 +f 146/215/215 224/216/216 746/206/206 383/217/217 +f 224/216/216 225/218/218 747/207/207 746/206/206 +f 225/218/218 226/219/219 748/210/210 747/207/207 +f 226/219/219 155/220/220 223/221/221 748/210/210 +f 748/210/210 223/221/221 222/222/222 751/211/211 +f 751/211/211 222/222/222 221/223/223 754/214/214 +f 754/214/214 221/223/223 154/224/224 341/225/225 +f 753/212/212 754/214/214 341/225/225 342/226/226 +f 752/213/213 753/212/212 342/226/226 343/227/227 +f 385/228/228 752/213/213 343/227/227 147/229/229 +f 384/230/230 749/209/209 752/213/213 385/228/228 +f 383/217/217 746/206/206 749/209/209 384/230/230 +f 755/231/231 756/232/232 759/233/233 758/234/234 +f 756/232/232 757/235/235 760/236/236 759/233/233 +f 758/234/234 759/233/233 762/237/237 761/238/238 +f 759/233/233 760/236/236 763/239/239 762/237/237 +f 147/229/229 343/227/227 755/231/231 380/240/240 +f 343/227/227 342/226/226 756/232/232 755/231/231 +f 342/226/226 341/225/225 757/235/235 756/232/232 +f 341/225/225 154/224/224 235/241/241 757/235/235 +f 757/235/235 235/241/241 234/242/242 760/236/236 +f 760/236/236 234/242/242 233/243/243 763/239/239 +f 763/239/239 233/243/243 156/244/244 344/245/245 +f 762/237/237 763/239/239 344/245/245 345/246/246 +f 761/238/238 762/237/237 345/246/246 346/247/247 +f 382/248/248 761/238/238 346/247/247 148/249/249 +f 381/250/250 758/234/234 761/238/238 382/248/248 +f 380/240/240 755/231/231 758/234/234 381/250/250 +f 764/251/251 765/252/252 768/253/253 767/254/254 +f 765/252/252 766/255/255 769/256/256 768/253/253 +f 767/254/254 768/253/253 771/257/257 770/258/258 +f 768/253/253 769/256/256 772/259/259 771/257/257 +f 148/249/249 346/247/247 764/251/251 377/260/260 +f 346/247/247 345/246/246 765/252/252 764/251/251 +f 345/246/246 344/245/245 766/255/255 765/252/252 +f 344/245/245 156/244/244 244/261/261 766/255/255 +f 766/255/255 244/261/261 243/262/262 769/256/256 +f 769/256/256 243/262/262 242/263/263 772/259/259 +f 772/259/259 242/263/263 157/264/264 347/265/265 +f 771/257/257 772/259/259 347/265/265 348/266/266 +f 770/258/258 771/257/257 348/266/266 349/267/267 +f 379/268/268 770/258/258 349/267/267 149/269/269 +f 378/270/270 767/254/254 770/258/258 379/268/268 +f 377/260/260 764/251/251 767/254/254 378/270/270 +f 773/271/271 774/272/272 777/273/273 776/274/274 +f 774/272/272 775/275/275 778/276/276 777/273/273 +f 776/274/274 777/273/273 780/277/277 779/278/278 +f 777/273/273 778/276/276 781/279/279 780/277/277 +f 149/269/269 349/267/267 773/271/271 374/280/280 +f 349/267/267 348/266/266 774/272/272 773/271/271 +f 348/266/266 347/265/265 775/275/275 774/272/272 +f 347/265/265 157/264/264 253/281/281 775/275/275 +f 775/275/275 253/281/281 252/282/282 778/276/276 +f 778/276/276 252/282/282 251/283/283 781/279/279 +f 781/279/279 251/283/283 158/284/284 350/285/285 +f 780/277/277 781/279/279 350/285/285 351/286/286 +f 779/278/278 780/277/277 351/286/286 352/287/287 +f 376/288/288 779/278/278 352/287/287 150/289/289 +f 375/290/290 776/274/274 779/278/278 376/288/288 +f 374/280/280 773/271/271 776/274/274 375/290/290 +f 782/291/291 783/292/292 786/293/293 785/294/294 +f 783/292/292 784/295/295 787/296/296 786/293/293 +f 785/294/294 786/293/293 789/297/297 788/298/298 +f 786/293/293 787/296/296 790/299/299 789/297/297 +f 150/289/289 352/287/287 782/291/291 371/300/300 +f 352/287/287 351/286/286 783/292/292 782/291/291 +f 351/286/286 350/285/285 784/295/295 783/292/292 +f 350/285/285 158/284/284 262/301/301 784/295/295 +f 784/295/295 262/301/301 261/302/302 787/296/296 +f 787/296/296 261/302/302 260/303/303 790/299/299 +f 790/299/299 260/303/303 159/304/304 353/305/305 +f 789/297/297 790/299/299 353/305/305 354/306/306 +f 788/298/298 789/297/297 354/306/306 355/307/307 +f 373/308/308 788/298/298 355/307/307 151/309/309 +f 372/310/310 785/294/294 788/298/298 373/308/308 +f 371/300/300 782/291/291 785/294/294 372/310/310 +f 791/311/311 792/312/312 795/313/313 794/314/314 +f 792/312/312 793/315/315 796/316/316 795/313/313 +f 794/314/314 795/313/313 798/317/317 797/318/318 +f 795/313/313 796/316/316 799/319/319 798/317/317 +f 151/309/309 355/307/307 791/311/311 368/320/320 +f 355/307/307 354/306/306 792/312/312 791/311/311 +f 354/306/306 353/305/305 793/315/315 792/312/312 +f 353/305/305 159/304/304 271/321/321 793/315/315 +f 793/315/315 271/321/321 270/322/322 796/316/316 +f 796/316/316 270/322/322 269/323/323 799/319/319 +f 799/319/319 269/323/323 160/324/324 356/325/325 +f 798/317/317 799/319/319 356/325/325 357/326/326 +f 797/318/318 798/317/317 357/326/326 358/327/327 +f 370/328/328 797/318/318 358/327/327 152/329/329 +f 369/330/330 794/314/314 797/318/318 370/328/328 +f 368/320/320 791/311/311 794/314/314 369/330/330 +f 800/331/331 801/332/332 804/333/333 803/334/334 +f 801/332/332 802/335/335 805/336/336 804/333/333 +f 803/334/334 804/333/333 807/337/337 806/338/338 +f 804/333/333 805/336/336 808/339/339 807/337/337 +f 123/340/340 407/341/341 800/331/331 463/342/342 +f 407/341/341 408/343/343 801/332/332 800/331/331 +f 408/343/343 409/344/344 802/335/335 801/332/332 +f 409/344/344 137/345/345 458/346/346 802/335/335 +f 802/335/335 458/346/346 459/347/347 805/336/336 +f 805/336/336 459/347/347 460/348/348 808/339/339 +f 808/339/339 460/348/348 169/349/349 457/350/350 +f 807/337/337 808/339/339 457/350/350 456/351/351 +f 806/338/338 807/337/337 456/351/351 455/352/352 +f 461/353/353 806/338/338 455/352/352 163/354/354 +f 462/355/355 803/334/334 806/338/338 461/353/353 +f 463/342/342 800/331/331 803/334/334 462/355/355 +f 809/356/356 810/357/357 813/358/358 812/359/359 +f 810/357/357 811/360/360 814/361/361 813/358/358 +f 812/359/359 813/358/358 816/362/362 815/363/363 +f 813/358/358 814/361/361 817/364/364 816/362/362 +f 152/329/329 358/327/327 809/356/356 365/365/365 +f 358/327/327 357/326/326 810/357/357 809/356/356 +f 357/326/326 356/325/325 811/360/360 810/357/357 +f 356/325/325 160/324/324 280/366/366 811/360/360 +f 811/360/360 280/366/366 279/367/367 814/361/361 +f 814/361/361 279/367/367 278/368/368 817/364/364 +f 817/364/364 278/368/368 161/369/369 359/370/370 +f 816/362/362 817/364/364 359/370/370 360/371/371 +f 815/363/363 816/362/362 360/371/371 361/372/372 +f 367/373/373 815/363/363 361/372/372 153/374/374 +f 366/375/375 812/359/359 815/363/363 367/373/373 +f 365/365/365 809/356/356 812/359/359 366/375/375 +f 818/376/376 819/377/377 822/378/378 821/379/379 +f 819/377/377 820/380/380 823/381/381 822/378/378 +f 821/379/379 822/378/378 825/382/382 824/383/383 +f 822/378/378 823/381/381 826/384/384 825/382/382 +f 153/374/374 361/372/372 818/376/376 362/385/385 +f 361/372/372 360/371/371 819/377/377 818/376/376 +f 360/371/371 359/370/370 820/380/380 819/377/377 +f 359/370/370 161/369/369 289/386/386 820/380/380 +f 820/380/380 289/386/386 288/387/387 823/381/381 +f 823/381/381 288/387/387 287/388/388 826/384/384 +f 826/384/384 287/388/388 155/220/220 226/219/219 +f 825/382/382 826/384/384 226/219/219 225/218/218 +f 824/383/383 825/382/382 225/218/218 224/216/216 +f 364/389/389 824/383/383 224/216/216 146/215/215 +f 363/390/390 821/379/379 824/383/383 364/389/389 +f 362/385/385 818/376/376 821/379/379 363/390/390 +f 827/391/391 828/392/392 831/393/393 830/394/394 +f 828/392/392 829/395/395 832/396/396 831/393/393 +f 830/394/394 831/393/393 834/397/397 833/398/398 +f 831/393/393 832/396/396 835/399/399 834/397/397 +f 136/400/400 283/401/401 827/391/391 284/402/402 +f 283/401/401 282/403/403 828/392/392 827/391/391 +f 282/403/403 281/404/404 829/395/395 828/392/392 +f 281/404/404 145/405/405 314/406/406 829/395/395 +f 829/395/395 314/406/406 315/407/407 832/396/396 +f 832/396/396 315/407/407 316/408/408 835/399/399 +f 835/399/399 316/408/408 138/409/409 292/410/410 +f 834/397/397 835/399/399 292/410/410 291/411/411 +f 833/398/398 834/397/397 291/411/411 290/412/412 +f 286/413/413 833/398/398 290/412/412 122/414/414 +f 285/415/415 830/394/394 833/398/398 286/413/413 +f 284/402/402 827/391/391 830/394/394 285/415/415 +f 836/416/416 837/417/417 840/418/418 839/419/419 +f 837/417/417 838/420/420 841/421/421 840/418/418 +f 839/419/419 840/418/418 843/422/422 842/423/423 +f 840/418/418 841/421/421 844/424/424 843/422/422 +f 134/425/425 274/426/426 836/416/416 275/427/427 +f 274/426/426 273/428/428 837/417/417 836/416/416 +f 273/428/428 272/429/429 838/420/420 837/417/417 +f 272/429/429 144/430/430 317/431/431 838/420/420 +f 838/420/420 317/431/431 318/432/432 841/421/421 +f 841/421/421 318/432/432 319/433/433 844/424/424 +f 844/424/424 319/433/433 145/405/405 281/404/404 +f 843/422/422 844/424/424 281/404/404 282/403/403 +f 842/423/423 843/422/422 282/403/403 283/401/401 +f 277/434/434 842/423/423 283/401/401 136/400/400 +f 276/435/435 839/419/419 842/423/423 277/434/434 +f 275/427/427 836/416/416 839/419/419 276/435/435 +f 845/436/436 846/437/437 849/438/438 848/439/439 +f 846/437/437 847/440/440 850/441/441 849/438/438 +f 848/439/439 849/438/438 852/442/442 851/443/443 +f 849/438/438 850/441/441 853/444/444 852/442/442 +f 132/445/445 265/446/446 845/436/436 266/447/447 +f 265/446/446 264/448/448 846/437/437 845/436/436 +f 264/448/448 263/449/449 847/440/440 846/437/437 +f 263/449/449 143/450/450 320/451/451 847/440/440 +f 847/440/440 320/451/451 321/452/452 850/441/441 +f 850/441/441 321/452/452 322/453/453 853/444/444 +f 853/444/444 322/453/453 144/430/430 272/429/429 +f 852/442/442 853/444/444 272/429/429 273/428/428 +f 851/443/443 852/442/442 273/428/428 274/426/426 +f 268/454/454 851/443/443 274/426/426 134/425/425 +f 267/455/455 848/439/439 851/443/443 268/454/454 +f 266/447/447 845/436/436 848/439/439 267/455/455 +f 854/456/456 855/457/457 858/458/458 857/459/459 +f 855/457/457 856/460/460 859/461/461 858/458/458 +f 857/459/459 858/458/458 861/462/462 860/463/463 +f 858/458/458 859/461/461 862/464/464 861/462/462 +f 130/465/465 256/466/466 854/456/456 257/467/467 +f 256/466/466 255/468/468 855/457/457 854/456/456 +f 255/468/468 254/469/469 856/460/460 855/457/457 +f 254/469/469 142/470/470 323/471/471 856/460/460 +f 856/460/460 323/471/471 324/472/472 859/461/461 +f 859/461/461 324/472/472 325/473/473 862/464/464 +f 862/464/464 325/473/473 143/450/450 263/449/449 +f 861/462/462 862/464/464 263/449/449 264/448/448 +f 860/463/463 861/462/462 264/448/448 265/446/446 +f 259/474/474 860/463/463 265/446/446 132/445/445 +f 258/475/475 857/459/459 860/463/463 259/474/474 +f 257/467/467 854/456/456 857/459/459 258/475/475 +f 863/476/476 864/477/477 867/478/478 866/479/479 +f 864/477/477 865/480/480 868/481/481 867/478/478 +f 866/479/479 867/478/478 870/482/482 869/483/483 +f 867/478/478 868/481/481 871/484/484 870/482/482 +f 128/485/485 247/486/486 863/476/476 248/487/487 +f 247/486/486 246/488/488 864/477/477 863/476/476 +f 246/488/488 245/489/489 865/480/480 864/477/477 +f 245/489/489 141/490/490 326/491/491 865/480/480 +f 865/480/480 326/491/491 327/492/492 868/481/481 +f 868/481/481 327/492/492 328/493/493 871/484/484 +f 871/484/484 328/493/493 142/470/470 254/469/469 +f 870/482/482 871/484/484 254/469/469 255/468/468 +f 869/483/483 870/482/482 255/468/468 256/466/466 +f 250/494/494 869/483/483 256/466/466 130/465/465 +f 249/495/495 866/479/479 869/483/483 250/494/494 +f 248/487/487 863/476/476 866/479/479 249/495/495 +f 872/496/496 873/497/497 876/498/498 875/499/499 +f 873/497/497 874/500/500 877/501/501 876/498/498 +f 875/499/499 876/498/498 879/502/502 878/503/503 +f 876/498/498 877/501/501 880/504/504 879/502/502 +f 126/505/505 238/506/506 872/496/496 239/507/507 +f 238/506/506 237/508/508 873/497/497 872/496/496 +f 237/508/508 236/509/509 874/500/500 873/497/497 +f 236/509/509 140/510/510 329/511/511 874/500/500 +f 874/500/500 329/511/511 330/512/512 877/501/501 +f 877/501/501 330/512/512 331/513/513 880/504/504 +f 880/504/504 331/513/513 141/490/490 245/489/489 +f 879/502/502 880/504/504 245/489/489 246/488/488 +f 878/503/503 879/502/502 246/488/488 247/486/486 +f 241/514/514 878/503/503 247/486/486 128/485/485 +f 240/515/515 875/499/499 878/503/503 241/514/514 +f 239/507/507 872/496/496 875/499/499 240/515/515 +f 881/516/516 882/517/517 885/518/518 884/519/519 +f 882/517/517 883/520/520 886/521/521 885/518/518 +f 884/519/519 885/518/518 888/522/522 887/523/523 +f 885/518/518 886/521/521 889/524/524 888/522/522 +f 124/525/525 229/526/526 881/516/516 230/527/527 +f 229/526/526 228/528/528 882/517/517 881/516/516 +f 228/528/528 227/529/529 883/520/520 882/517/517 +f 227/529/529 139/530/530 332/531/531 883/520/520 +f 883/520/520 332/531/531 333/532/532 886/521/521 +f 886/521/521 333/532/532 334/533/533 889/524/524 +f 889/524/524 334/533/533 140/510/510 236/509/509 +f 888/522/522 889/524/524 236/509/509 237/508/508 +f 887/523/523 888/522/522 237/508/508 238/506/506 +f 232/534/534 887/523/523 238/506/506 126/505/505 +f 231/535/535 884/519/519 887/523/523 232/534/534 +f 230/527/527 881/516/516 884/519/519 231/535/535 +f 890/536/536 891/537/537 894/538/538 893/539/539 +f 891/537/537 892/540/540 895/541/541 894/538/538 +f 893/539/539 894/538/538 897/542/542 896/543/543 +f 894/538/538 895/541/541 898/544/544 897/542/542 +f 122/414/414 290/412/412 890/536/536 218/545/545 +f 290/412/412 291/411/411 891/537/537 890/536/536 +f 291/411/411 292/410/410 892/540/540 891/537/537 +f 292/410/410 138/409/409 335/546/546 892/540/540 +f 892/540/540 335/546/546 336/547/547 895/541/541 +f 895/541/541 336/547/547 337/548/548 898/544/544 +f 898/544/544 337/548/548 139/530/530 227/529/529 +f 897/542/542 898/544/544 227/529/529 228/528/528 +f 896/543/543 897/542/542 228/528/528 229/526/526 +f 220/549/549 896/543/543 229/526/526 124/525/525 +f 219/550/550 893/539/539 896/543/543 220/549/549 +f 218/545/545 890/536/536 893/539/539 219/550/550 +f 899/551/551 900/552/552 903/553/553 902/554/554 +f 900/552/552 901/555/555 904/556/556 903/553/553 +f 902/554/554 903/553/553 906/557/557 905/558/558 +f 903/553/553 904/556/556 907/559/559 906/557/557 +f 145/405/405 313/560/560 899/551/551 314/406/406 +f 313/560/560 312/561/561 900/552/552 899/551/551 +f 312/561/561 311/562/562 901/555/555 900/552/552 +f 311/562/562 153/374/374 362/385/385 901/555/555 +f 901/555/555 362/385/385 363/390/390 904/556/556 +f 904/556/556 363/390/390 364/389/389 907/559/559 +f 907/559/559 364/389/389 146/215/215 340/563/563 +f 906/557/557 907/559/559 340/563/563 339/564/564 +f 905/558/558 906/557/557 339/564/564 338/565/565 +f 316/408/408 905/558/558 338/565/565 138/409/409 +f 315/407/407 902/554/554 905/558/558 316/408/408 +f 314/406/406 899/551/551 902/554/554 315/407/407 +f 908/566/566 909/567/567 912/568/568 911/569/569 +f 909/567/567 910/570/570 913/571/571 912/568/568 +f 911/569/569 912/568/568 915/572/572 914/573/573 +f 912/568/568 913/571/571 916/574/574 915/572/572 +f 144/430/430 310/575/575 908/566/566 317/431/431 +f 310/575/575 309/576/576 909/567/567 908/566/566 +f 309/576/576 308/577/577 910/570/570 909/567/567 +f 308/577/577 152/329/329 365/365/365 910/570/570 +f 910/570/570 365/365/365 366/375/375 913/571/571 +f 913/571/571 366/375/375 367/373/373 916/574/574 +f 916/574/574 367/373/373 153/374/374 311/562/562 +f 915/572/572 916/574/574 311/562/562 312/561/561 +f 914/573/573 915/572/572 312/561/561 313/560/560 +f 319/433/433 914/573/573 313/560/560 145/405/405 +f 318/432/432 911/569/569 914/573/573 319/433/433 +f 317/431/431 908/566/566 911/569/569 318/432/432 +f 917/578/578 918/579/579 921/580/580 920/581/581 +f 918/579/579 919/582/582 922/583/583 921/580/580 +f 920/581/581 921/580/580 924/584/584 923/585/585 +f 921/580/580 922/583/583 925/586/586 924/584/584 +f 143/450/450 307/587/587 917/578/578 320/451/451 +f 307/587/587 306/588/588 918/579/579 917/578/578 +f 306/588/588 305/589/589 919/582/582 918/579/579 +f 305/589/589 151/309/309 368/320/320 919/582/582 +f 919/582/582 368/320/320 369/330/330 922/583/583 +f 922/583/583 369/330/330 370/328/328 925/586/586 +f 925/586/586 370/328/328 152/329/329 308/577/577 +f 924/584/584 925/586/586 308/577/577 309/576/576 +f 923/585/585 924/584/584 309/576/576 310/575/575 +f 322/453/453 923/585/585 310/575/575 144/430/430 +f 321/452/452 920/581/581 923/585/585 322/453/453 +f 320/451/451 917/578/578 920/581/581 321/452/452 +f 926/590/590 927/591/591 930/592/592 929/593/593 +f 927/591/591 928/594/594 931/595/595 930/592/592 +f 929/593/593 930/592/592 933/596/596 932/597/597 +f 930/592/592 931/595/595 934/598/598 933/596/596 +f 142/470/470 304/599/599 926/590/590 323/471/471 +f 304/599/599 303/600/600 927/591/591 926/590/590 +f 303/600/600 302/601/601 928/594/594 927/591/591 +f 302/601/601 150/289/289 371/300/300 928/594/594 +f 928/594/594 371/300/300 372/310/310 931/595/595 +f 931/595/595 372/310/310 373/308/308 934/598/598 +f 934/598/598 373/308/308 151/309/309 305/589/589 +f 933/596/596 934/598/598 305/589/589 306/588/588 +f 932/597/597 933/596/596 306/588/588 307/587/587 +f 325/473/473 932/597/597 307/587/587 143/450/450 +f 324/472/472 929/593/593 932/597/597 325/473/473 +f 323/471/471 926/590/590 929/593/593 324/472/472 +f 935/602/602 936/603/603 939/604/604 938/605/605 +f 936/603/603 937/606/606 940/607/607 939/604/604 +f 938/605/605 939/604/604 942/608/608 941/609/609 +f 939/604/604 940/607/607 943/610/610 942/608/608 +f 141/490/490 301/611/611 935/602/602 326/491/491 +f 301/611/611 300/612/612 936/603/603 935/602/602 +f 300/612/612 299/613/613 937/606/606 936/603/603 +f 299/613/613 149/269/269 374/280/280 937/606/606 +f 937/606/606 374/280/280 375/290/290 940/607/607 +f 940/607/607 375/290/290 376/288/288 943/610/610 +f 943/610/610 376/288/288 150/289/289 302/601/601 +f 942/608/608 943/610/610 302/601/601 303/600/600 +f 941/609/609 942/608/608 303/600/600 304/599/599 +f 328/493/493 941/609/609 304/599/599 142/470/470 +f 327/492/492 938/605/605 941/609/609 328/493/493 +f 326/491/491 935/602/602 938/605/605 327/492/492 +f 944/614/614 945/615/615 948/616/616 947/617/617 +f 945/615/615 946/618/618 949/619/619 948/616/616 +f 947/617/617 948/616/616 951/620/620 950/621/621 +f 948/616/616 949/619/619 952/622/622 951/620/620 +f 140/510/510 298/623/623 944/614/614 329/511/511 +f 298/623/623 297/624/624 945/615/615 944/614/614 +f 297/624/624 296/625/625 946/618/618 945/615/615 +f 296/625/625 148/249/249 377/260/260 946/618/618 +f 946/618/618 377/260/260 378/270/270 949/619/619 +f 949/619/619 378/270/270 379/268/268 952/622/622 +f 952/622/622 379/268/268 149/269/269 299/613/613 +f 951/620/620 952/622/622 299/613/613 300/612/612 +f 950/621/621 951/620/620 300/612/612 301/611/611 +f 331/513/513 950/621/621 301/611/611 141/490/490 +f 330/512/512 947/617/617 950/621/621 331/513/513 +f 329/511/511 944/614/614 947/617/617 330/512/512 +f 953/626/626 954/627/627 957/628/628 956/629/629 +f 954/627/627 955/630/630 958/631/631 957/628/628 +f 956/629/629 957/628/628 960/632/632 959/633/633 +f 957/628/628 958/631/631 961/634/634 960/632/632 +f 139/530/530 295/635/635 953/626/626 332/531/531 +f 295/635/635 294/636/636 954/627/627 953/626/626 +f 294/636/636 293/637/637 955/630/630 954/627/627 +f 293/637/637 147/229/229 380/240/240 955/630/630 +f 955/630/630 380/240/240 381/250/250 958/631/631 +f 958/631/631 381/250/250 382/248/248 961/634/634 +f 961/634/634 382/248/248 148/249/249 296/625/625 +f 960/632/632 961/634/634 296/625/625 297/624/624 +f 959/633/633 960/632/632 297/624/624 298/623/623 +f 334/533/533 959/633/633 298/623/623 140/510/510 +f 333/532/532 956/629/629 959/633/633 334/533/533 +f 332/531/531 953/626/626 956/629/629 333/532/532 +f 962/638/638 963/639/639 966/640/640 965/641/641 +f 963/639/639 964/642/642 967/643/643 966/640/640 +f 965/641/641 966/640/640 969/644/644 968/645/645 +f 966/640/640 967/643/643 970/646/646 969/644/644 +f 138/409/409 338/565/565 962/638/638 335/546/546 +f 338/565/565 339/564/564 963/639/639 962/638/638 +f 339/564/564 340/563/563 964/642/642 963/639/639 +f 340/563/563 146/215/215 383/217/217 964/642/642 +f 964/642/642 383/217/217 384/230/230 967/643/643 +f 967/643/643 384/230/230 385/228/228 970/646/646 +f 970/646/646 385/228/228 147/229/229 293/637/637 +f 969/644/644 970/646/646 293/637/637 294/636/636 +f 968/645/645 969/644/644 294/636/636 295/635/635 +f 337/548/548 968/645/645 295/635/635 139/530/530 +f 336/547/547 965/641/641 968/645/645 337/548/548 +f 335/546/546 962/638/638 965/641/641 336/547/547 +f 971/647/647 972/648/648 975/649/649 974/650/650 +f 972/648/648 973/651/651 976/652/652 975/649/649 +f 974/650/653 975/649/654 978/653/655 977/654/656 +f 975/649/654 976/652/657 979/655/658 978/653/655 +f 123/340/340 388/656/659 971/647/660 412/657/661 +f 388/656/659 387/658/662 972/648/663 971/647/660 +f 387/658/662 386/659/664 973/651/665 972/648/663 +f 386/659/664 125/660/666 413/661/667 973/651/665 +f 973/651/651 413/661/668 414/662/669 976/652/652 +f 976/652/657 414/662/670 415/663/671 979/655/658 +f 979/655/658 415/663/671 154/224/224 221/223/223 +f 978/653/655 979/655/658 221/223/223 222/222/222 +f 977/654/656 978/653/655 222/222/222 223/221/221 +f 410/664/672 977/654/656 223/221/221 155/220/220 +f 411/665/673 974/650/653 977/654/656 410/664/672 +f 412/657/674 971/647/647 974/650/650 411/665/674 +f 980/666/675 981/667/676 984/668/677 983/669/678 +f 981/667/676 982/670/679 985/671/680 984/668/677 +f 983/669/681 984/668/682 987/672/683 986/673/684 +f 984/668/682 985/671/685 988/674/686 987/672/683 +f 125/660/666 391/675/687 980/666/688 413/661/667 +f 391/675/687 390/676/689 981/667/690 980/666/688 +f 390/676/689 389/677/691 982/670/692 981/667/690 +f 389/677/691 127/678/693 416/679/694 982/670/692 +f 982/670/679 416/679/695 417/680/696 985/671/680 +f 985/671/685 417/680/697 418/681/698 988/674/686 +f 988/674/686 418/681/698 156/244/244 233/243/243 +f 987/672/683 988/674/686 233/243/243 234/242/242 +f 986/673/684 987/672/683 234/242/242 235/241/241 +f 415/663/671 986/673/684 235/241/241 154/224/224 +f 414/662/670 983/669/681 986/673/684 415/663/671 +f 413/661/668 980/666/675 983/669/678 414/662/669 +f 989/682/699 990/683/700 993/684/701 992/685/702 +f 990/683/700 991/686/703 994/687/704 993/684/701 +f 992/685/705 993/684/706 996/688/707 995/689/708 +f 993/684/706 994/687/709 997/690/710 996/688/707 +f 127/678/693 394/691/711 989/682/712 416/679/694 +f 394/691/711 393/692/713 990/683/714 989/682/712 +f 393/692/713 392/693/715 991/686/716 990/683/714 +f 392/693/715 129/694/717 419/695/718 991/686/716 +f 991/686/703 419/695/719 420/696/720 994/687/704 +f 994/687/709 420/696/721 421/697/722 997/690/710 +f 997/690/710 421/697/722 157/264/264 242/263/263 +f 996/688/707 997/690/710 242/263/263 243/262/262 +f 995/689/708 996/688/707 243/262/262 244/261/261 +f 418/681/698 995/689/708 244/261/261 156/244/244 +f 417/680/697 992/685/705 995/689/708 418/681/698 +f 416/679/695 989/682/699 992/685/702 417/680/696 +f 998/698/723 999/699/724 1002/700/725 1001/701/726 +f 999/699/724 1000/702/727 1003/703/727 1002/700/725 +f 1001/701/728 1002/700/729 1005/704/730 1004/705/731 +f 1002/700/729 1003/703/732 1006/706/733 1005/704/730 +f 129/694/717 397/707/734 998/698/735 419/695/718 +f 397/707/734 396/708/736 999/699/737 998/698/735 +f 396/708/736 395/709/738 1000/702/739 999/699/737 +f 395/709/738 131/710/740 422/711/741 1000/702/739 +f 1000/702/727 422/711/742 423/712/742 1003/703/727 +f 1003/703/732 423/712/743 424/713/744 1006/706/733 +f 1006/706/733 424/713/744 158/284/284 251/283/283 +f 1005/704/730 1006/706/733 251/283/283 252/282/282 +f 1004/705/731 1005/704/730 252/282/282 253/281/281 +f 421/697/722 1004/705/731 253/281/281 157/264/264 +f 420/696/721 1001/701/728 1004/705/731 421/697/722 +f 419/695/719 998/698/723 1001/701/726 420/696/720 +f 1007/714/745 1008/715/746 1011/716/747 1010/717/745 +f 1008/715/746 1009/718/748 1012/719/749 1011/716/747 +f 1010/717/750 1011/716/751 1014/720/752 1013/721/753 +f 1011/716/751 1012/719/754 1015/722/755 1014/720/752 +f 131/710/740 400/723/756 1007/714/757 422/711/741 +f 400/723/756 399/724/758 1008/715/759 1007/714/757 +f 399/724/758 398/725/760 1009/718/761 1008/715/759 +f 398/725/760 133/726/762 425/727/763 1009/718/761 +f 1009/718/748 425/727/764 426/728/765 1012/719/749 +f 1012/719/754 426/728/766 427/729/767 1015/722/755 +f 1015/722/755 427/729/767 159/304/304 260/303/303 +f 1014/720/752 1015/722/755 260/303/303 261/302/302 +f 1013/721/753 1014/720/752 261/302/302 262/301/301 +f 424/713/744 1013/721/753 262/301/301 158/284/284 +f 423/712/743 1010/717/750 1013/721/753 424/713/744 +f 422/711/742 1007/714/745 1010/717/745 423/712/742 +f 1016/730/768 1017/731/769 1020/732/770 1019/733/771 +f 1017/731/769 1018/734/772 1021/735/773 1020/732/770 +f 1019/733/774 1020/732/775 1023/736/776 1022/737/777 +f 1020/732/775 1021/735/778 1024/738/779 1023/736/776 +f 133/726/762 403/739/780 1016/730/781 425/727/763 +f 403/739/780 402/740/782 1017/731/783 1016/730/781 +f 402/740/782 401/741/784 1018/734/785 1017/731/783 +f 401/741/784 135/742/786 428/743/787 1018/734/785 +f 1018/734/772 428/743/788 429/744/789 1021/735/773 +f 1021/735/778 429/744/790 430/745/791 1024/738/779 +f 1024/738/779 430/745/791 160/324/324 269/323/323 +f 1023/736/776 1024/738/779 269/323/323 270/322/322 +f 1022/737/777 1023/736/776 270/322/322 271/321/321 +f 427/729/767 1022/737/777 271/321/321 159/304/304 +f 426/728/766 1019/733/774 1022/737/777 427/729/767 +f 425/727/764 1016/730/768 1019/733/771 426/728/765 +f 1025/746/792 1026/747/793 1029/748/794 1028/749/795 +f 1026/747/793 1027/750/796 1030/751/797 1029/748/794 +f 1028/749/798 1029/748/799 1032/752/800 1031/753/801 +f 1029/748/799 1030/751/802 1033/754/803 1032/752/800 +f 135/742/786 406/755/804 1025/746/805 428/743/787 +f 406/755/804 405/756/806 1026/747/807 1025/746/805 +f 405/756/806 404/757/808 1027/750/809 1026/747/807 +f 404/757/808 137/345/345 431/758/810 1027/750/809 +f 1027/750/796 431/758/811 432/759/812 1030/751/797 +f 1030/751/802 432/759/813 433/760/814 1033/754/803 +f 1033/754/803 433/760/814 161/369/369 278/368/368 +f 1032/752/800 1033/754/803 278/368/368 279/367/367 +f 1031/753/801 1032/752/800 279/367/367 280/366/366 +f 430/745/791 1031/753/801 280/366/366 160/324/324 +f 429/744/790 1028/749/798 1031/753/801 430/745/791 +f 428/743/788 1025/746/792 1028/749/795 429/744/789 +f 1034/761/815 1035/762/816 1038/763/817 1037/764/818 +f 1035/762/816 1036/765/819 1039/766/820 1038/763/817 +f 1037/764/821 1038/763/822 1041/767/823 1040/768/824 +f 1038/763/822 1039/766/825 1042/769/826 1041/767/823 +f 137/345/345 409/344/344 1034/761/827 431/758/810 +f 409/344/344 408/343/343 1035/762/828 1034/761/827 +f 408/343/343 407/341/341 1036/765/829 1035/762/828 +f 407/341/341 123/340/340 412/657/661 1036/765/829 +f 1036/765/819 412/657/674 411/665/674 1039/766/820 +f 1039/766/825 411/665/673 410/664/672 1042/769/826 +f 1042/769/826 410/664/672 155/220/220 287/388/388 +f 1041/767/823 1042/769/826 287/388/388 288/387/387 +f 1040/768/824 1041/767/823 288/387/387 289/386/386 +f 433/760/814 1040/768/824 289/386/386 161/369/369 +f 432/759/813 1037/764/821 1040/768/824 433/760/814 +f 431/758/811 1034/761/815 1037/764/818 432/759/812 +f 1044/770/830 1045/771/831 1043/772/832 1059/773/833 +f 1046/774/834 1047/775/835 1043/772/832 1045/771/831 +f 1048/776/836 1049/777/837 1043/772/832 1047/775/835 +f 1050/778/838 1051/779/839 1043/772/832 1049/777/837 +f 1052/780/840 1053/781/841 1043/772/832 1051/779/839 +f 1054/782/842 1055/783/843 1043/772/832 1053/781/841 +f 1056/784/844 1057/785/845 1043/772/832 1055/783/843 +f 1058/786/846 1059/773/833 1043/772/832 1057/785/845 +f 162/787/847 434/788/848 1044/770/830 439/789/849 +f 434/788/848 435/790/850 1045/771/831 1044/770/830 +f 439/789/849 1044/770/830 1059/773/833 438/791/851 +f 163/354/354 455/352/352 1046/774/834 436/792/852 +f 455/352/352 456/351/351 1047/775/835 1046/774/834 +f 436/792/852 1046/774/834 1045/771/831 435/790/850 +f 169/349/349 452/793/853 1048/776/836 457/350/350 +f 452/793/853 453/794/854 1049/777/837 1048/776/836 +f 457/350/350 1048/776/836 1047/775/835 456/351/351 +f 168/795/855 449/796/856 1050/778/838 454/797/857 +f 449/796/856 450/798/858 1051/779/839 1050/778/838 +f 454/797/857 1050/778/838 1049/777/837 453/794/854 +f 167/799/859 446/800/860 1052/780/840 451/801/861 +f 446/800/860 447/802/862 1053/781/841 1052/780/840 +f 451/801/861 1052/780/840 1051/779/839 450/798/858 +f 166/803/863 443/804/864 1054/782/842 448/805/865 +f 443/804/864 444/806/866 1055/783/843 1054/782/842 +f 448/805/865 1054/782/842 1053/781/841 447/802/862 +f 165/807/867 440/808/868 1056/784/844 445/809/869 +f 440/808/868 441/810/870 1057/785/845 1056/784/844 +f 445/809/869 1056/784/844 1055/783/843 444/806/866 +f 164/811/871 437/812/872 1058/786/846 442/813/873 +f 437/812/872 438/791/851 1059/773/833 1058/786/846 +f 442/813/873 1058/786/846 1057/785/845 441/810/870 +f 1060/814/874 1061/815/875 1064/816/876 1063/817/877 +f 1061/815/875 1062/818/878 1065/819/879 1064/816/876 +f 1063/817/877 1064/816/876 1067/820/880 1066/821/881 +f 1064/816/876 1065/819/879 1068/822/882 1067/820/880 +f 135/742/786 401/741/784 1060/814/874 469/823/883 +f 401/741/784 402/740/782 1061/815/875 1060/814/874 +f 402/740/782 403/739/780 1062/818/878 1061/815/875 +f 403/739/780 133/726/762 464/824/884 1062/818/878 +f 1062/818/878 464/824/884 465/825/885 1065/819/879 +f 1065/819/879 465/825/885 466/826/886 1068/822/882 +f 1068/822/882 466/826/886 167/799/859 451/801/861 +f 1067/820/880 1068/822/882 451/801/861 450/798/858 +f 1066/821/881 1067/820/880 450/798/858 449/796/856 +f 467/827/887 1066/821/881 449/796/856 168/795/855 +f 468/828/888 1063/817/877 1066/821/881 467/827/887 +f 469/823/883 1060/814/874 1063/817/877 468/828/888 +f 1069/829/889 1070/830/890 1073/831/891 1072/832/892 +f 1070/830/890 1071/833/893 1074/834/894 1073/831/891 +f 1072/832/892 1073/831/891 1076/835/895 1075/836/896 +f 1073/831/891 1074/834/894 1077/837/897 1076/835/895 +f 131/710/740 395/709/738 1069/829/889 475/838/898 +f 395/709/738 396/708/736 1070/830/890 1069/829/889 +f 396/708/736 397/707/734 1071/833/893 1070/830/890 +f 397/707/734 129/694/717 470/839/899 1071/833/893 +f 1071/833/893 470/839/899 471/840/900 1074/834/894 +f 1074/834/894 471/840/900 472/841/901 1077/837/897 +f 1077/837/897 472/841/901 165/807/867 445/809/869 +f 1076/835/895 1077/837/897 445/809/869 444/806/866 +f 1075/836/896 1076/835/895 444/806/866 443/804/864 +f 473/842/902 1075/836/896 443/804/864 166/803/863 +f 474/843/903 1072/832/892 1075/836/896 473/842/902 +f 475/838/898 1069/829/889 1072/832/892 474/843/903 +f 1078/844/904 1079/845/905 1082/846/906 1081/847/907 +f 1079/845/905 1080/848/908 1083/849/909 1082/846/906 +f 1081/847/907 1082/846/906 1085/850/910 1084/851/911 +f 1082/846/906 1083/849/909 1086/852/912 1085/850/910 +f 127/678/693 389/677/691 1078/844/904 481/853/913 +f 389/677/691 390/676/689 1079/845/905 1078/844/904 +f 390/676/689 391/675/687 1080/848/908 1079/845/905 +f 391/675/687 125/660/666 476/854/914 1080/848/908 +f 1080/848/908 476/854/914 477/855/915 1083/849/909 +f 1083/849/909 477/855/915 478/856/916 1086/852/912 +f 1086/852/912 478/856/916 162/787/847 439/789/849 +f 1085/850/910 1086/852/912 439/789/849 438/791/851 +f 1084/851/911 1085/850/910 438/791/851 437/812/872 +f 479/857/917 1084/851/911 437/812/872 164/811/871 +f 480/858/918 1081/847/907 1084/851/911 479/857/917 +f 481/853/913 1078/844/904 1081/847/907 480/858/918 +f 1087/859/919 1088/860/920 1091/861/921 1090/862/922 +f 1088/860/920 1089/863/923 1092/864/924 1091/861/921 +f 1090/862/922 1091/861/921 1094/865/925 1093/866/926 +f 1091/861/921 1092/864/924 1095/867/927 1094/865/925 +f 137/345/345 404/757/808 1087/859/919 458/346/346 +f 404/757/808 405/756/806 1088/860/920 1087/859/919 +f 405/756/806 406/755/804 1089/863/923 1088/860/920 +f 406/755/804 135/742/786 469/823/883 1089/863/923 +f 1089/863/923 469/823/883 468/828/888 1092/864/924 +f 1092/864/924 468/828/888 467/827/887 1095/867/927 +f 1095/867/927 467/827/887 168/795/855 454/797/857 +f 1094/865/925 1095/867/927 454/797/857 453/794/854 +f 1093/866/926 1094/865/925 453/794/854 452/793/853 +f 460/348/348 1093/866/926 452/793/853 169/349/349 +f 459/347/347 1090/862/922 1093/866/926 460/348/348 +f 458/346/346 1087/859/919 1090/862/922 459/347/347 +f 1096/868/928 1097/869/929 1100/870/930 1099/871/931 +f 1097/869/929 1098/872/932 1101/873/933 1100/870/930 +f 1099/871/931 1100/870/930 1103/874/934 1102/875/935 +f 1100/870/930 1101/873/933 1104/876/936 1103/874/934 +f 133/726/762 398/725/760 1096/868/928 464/824/884 +f 398/725/760 399/724/758 1097/869/929 1096/868/928 +f 399/724/758 400/723/756 1098/872/932 1097/869/929 +f 400/723/756 131/710/740 475/838/898 1098/872/932 +f 1098/872/932 475/838/898 474/843/903 1101/873/933 +f 1101/873/933 474/843/903 473/842/902 1104/876/936 +f 1104/876/936 473/842/902 166/803/863 448/805/865 +f 1103/874/934 1104/876/936 448/805/865 447/802/862 +f 1102/875/935 1103/874/934 447/802/862 446/800/860 +f 466/826/886 1102/875/935 446/800/860 167/799/859 +f 465/825/885 1099/871/931 1102/875/935 466/826/886 +f 464/824/884 1096/868/928 1099/871/931 465/825/885 +f 1105/877/937 1106/878/938 1109/879/939 1108/880/940 +f 1106/878/938 1107/881/941 1110/882/942 1109/879/939 +f 1108/880/940 1109/879/939 1112/883/943 1111/884/944 +f 1109/879/939 1110/882/942 1113/885/945 1112/883/943 +f 129/694/717 392/693/715 1105/877/937 470/839/899 +f 392/693/715 393/692/713 1106/878/938 1105/877/937 +f 393/692/713 394/691/711 1107/881/941 1106/878/938 +f 394/691/711 127/678/693 481/853/913 1107/881/941 +f 1107/881/941 481/853/913 480/858/918 1110/882/942 +f 1110/882/942 480/858/918 479/857/917 1113/885/945 +f 1113/885/945 479/857/917 164/811/871 442/813/873 +f 1112/883/943 1113/885/945 442/813/873 441/810/870 +f 1111/884/944 1112/883/943 441/810/870 440/808/868 +f 472/841/901 1111/884/944 440/808/868 165/807/867 +f 471/840/900 1108/880/940 1111/884/944 472/841/901 +f 470/839/899 1105/877/937 1108/880/940 471/840/900 +f 1114/886/946 1115/887/947 1118/888/948 1117/889/949 +f 1115/887/947 1116/890/950 1119/891/951 1118/888/948 +f 1117/889/949 1118/888/948 1121/892/952 1120/893/953 +f 1118/888/948 1119/891/951 1122/894/954 1121/892/952 +f 125/660/666 386/659/664 1114/886/946 476/854/914 +f 386/659/664 387/658/662 1115/887/947 1114/886/946 +f 387/658/662 388/656/659 1116/890/950 1115/887/947 +f 388/656/659 123/340/340 463/342/342 1116/890/950 +f 1116/890/950 463/342/342 462/355/355 1119/891/951 +f 1119/891/951 462/355/355 461/353/353 1122/894/954 +f 1122/894/954 461/353/353 163/354/354 436/792/852 +f 1121/892/952 1122/894/954 436/792/852 435/790/850 +f 1120/893/953 1121/892/952 435/790/850 434/788/848 +f 478/856/916 1120/893/953 434/788/848 162/787/847 +f 477/855/915 1117/889/949 1120/893/953 478/856/916 +f 476/854/914 1114/886/946 1117/889/949 477/855/915 +f 1123/895/955 1124/896/956 1127/897/957 1126/898/958 +f 1124/896/956 1125/899/959 1128/900/960 1127/897/957 +f 1126/898/958 1127/897/957 1130/901/961 1129/902/962 +f 1127/897/957 1128/900/960 1131/903/963 1130/901/961 +f 194/904/964 647/905/965 1123/895/955 488/906/966 +f 647/905/965 648/907/967 1124/896/956 1123/895/955 +f 648/907/967 649/908/968 1125/899/959 1124/896/956 +f 649/908/968 195/909/969 607/910/970 1125/899/959 +f 1125/899/959 607/910/970 606/911/971 1128/900/960 +f 1128/900/960 606/911/971 605/912/972 1131/903/963 +f 1131/903/963 605/912/972 202/913/973 485/914/974 +f 1130/901/961 1131/903/963 485/914/974 486/915/975 +f 1129/902/962 1130/901/961 486/915/975 487/916/976 +f 490/917/977 1129/902/962 487/916/976 203/918/978 +f 489/919/979 1126/898/958 1129/902/962 490/917/977 +f 488/906/966 1123/895/955 1126/898/958 489/919/979 +f 1132/920/980 1133/921/981 1136/922/982 1135/923/983 +f 1133/921/981 1134/924/984 1137/925/985 1136/922/982 +f 1135/923/983 1136/922/982 1139/926/986 1138/927/987 +f 1136/922/982 1137/925/985 1140/928/988 1139/926/986 +f 195/909/969 644/929/989 1132/920/980 607/910/970 +f 644/929/989 645/930/990 1133/921/981 1132/920/980 +f 645/930/990 646/931/991 1134/924/984 1133/921/981 +f 646/931/991 196/932/249 610/933/992 1134/924/984 +f 1134/924/984 610/933/992 609/934/993 1137/925/985 +f 1137/925/985 609/934/993 608/935/994 1140/928/988 +f 1140/928/988 608/935/994 204/936/995 497/937/996 +f 1139/926/986 1140/928/988 497/937/996 498/938/997 +f 1138/927/987 1139/926/986 498/938/997 499/939/998 +f 605/912/972 1138/927/987 499/939/998 202/913/973 +f 606/911/971 1135/923/983 1138/927/987 605/912/972 +f 607/910/970 1132/920/980 1135/923/983 606/911/971 +f 1141/940/999 1142/941/1000 1145/942/1001 1144/943/1002 +f 1142/941/1000 1143/944/1003 1146/945/1004 1145/942/1001 +f 1144/943/1002 1145/942/1001 1148/946/1005 1147/947/1006 +f 1145/942/1001 1146/945/1004 1149/948/1007 1148/946/1005 +f 196/932/249 641/949/1008 1141/940/999 610/933/992 +f 641/949/1008 642/950/1009 1142/941/1000 1141/940/999 +f 642/950/1009 643/951/1010 1143/944/1003 1142/941/1000 +f 643/951/1010 197/952/1011 613/953/1012 1143/944/1003 +f 1143/944/1003 613/953/1012 612/954/1013 1146/945/1004 +f 1146/945/1004 612/954/1013 611/955/1014 1149/948/1007 +f 1149/948/1007 611/955/1014 205/956/1015 506/957/1016 +f 1148/946/1005 1149/948/1007 506/957/1016 507/958/1017 +f 1147/947/1006 1148/946/1005 507/958/1017 508/959/1018 +f 608/935/994 1147/947/1006 508/959/1018 204/936/995 +f 609/934/993 1144/943/1002 1147/947/1006 608/935/994 +f 610/933/992 1141/940/999 1144/943/1002 609/934/993 +f 1150/960/1019 1151/961/1020 1154/962/1021 1153/963/1022 +f 1151/961/1020 1152/964/1023 1155/965/1024 1154/962/1021 +f 1153/963/1022 1154/962/1021 1157/966/1025 1156/967/1026 +f 1154/962/1021 1155/965/1024 1158/968/1027 1157/966/1025 +f 197/952/1011 638/969/1028 1150/960/1019 613/953/1012 +f 638/969/1028 639/970/1029 1151/961/1020 1150/960/1019 +f 639/970/1029 640/971/1030 1152/964/1023 1151/961/1020 +f 640/971/1030 198/972/1031 616/973/1032 1152/964/1023 +f 1152/964/1023 616/973/1032 615/974/1033 1155/965/1024 +f 1155/965/1024 615/974/1033 614/975/1034 1158/968/1027 +f 1158/968/1027 614/975/1034 206/976/1035 515/977/1036 +f 1157/966/1025 1158/968/1027 515/977/1036 516/978/1037 +f 1156/967/1026 1157/966/1025 516/978/1037 517/979/1038 +f 611/955/1014 1156/967/1026 517/979/1038 205/956/1015 +f 612/954/1013 1153/963/1022 1156/967/1026 611/955/1014 +f 613/953/1012 1150/960/1019 1153/963/1022 612/954/1013 +f 1159/980/1039 1160/981/1040 1163/982/1041 1162/983/1042 +f 1160/981/1040 1161/984/1043 1164/985/1044 1163/982/1041 +f 1162/983/1042 1163/982/1041 1166/986/1045 1165/987/1046 +f 1163/982/1041 1164/985/1044 1167/988/1047 1166/986/1045 +f 198/972/1031 635/989/1048 1159/980/1039 616/973/1032 +f 635/989/1048 636/990/1049 1160/981/1040 1159/980/1039 +f 636/990/1049 637/991/1050 1161/984/1043 1160/981/1040 +f 637/991/1050 199/992/1051 619/993/1052 1161/984/1043 +f 1161/984/1043 619/993/1052 618/994/1053 1164/985/1044 +f 1164/985/1044 618/994/1053 617/995/1054 1167/988/1047 +f 1167/988/1047 617/995/1054 207/996/1055 524/997/1056 +f 1166/986/1045 1167/988/1047 524/997/1056 525/998/1057 +f 1165/987/1046 1166/986/1045 525/998/1057 526/999/1058 +f 614/975/1034 1165/987/1046 526/999/1058 206/976/1035 +f 615/974/1033 1162/983/1042 1165/987/1046 614/975/1034 +f 616/973/1032 1159/980/1039 1162/983/1042 615/974/1033 +f 1168/1000/1059 1169/1001/1060 1172/1002/1061 1171/1003/1062 +f 1169/1001/1060 1170/1004/1063 1173/1005/1064 1172/1002/1061 +f 1171/1003/1062 1172/1002/1061 1175/1006/1065 1174/1007/1066 +f 1172/1002/1061 1173/1005/1064 1176/1008/1067 1175/1006/1065 +f 199/992/1051 632/1009/1068 1168/1000/1059 619/993/1052 +f 632/1009/1068 633/1010/1069 1169/1001/1060 1168/1000/1059 +f 633/1010/1069 634/1011/1070 1170/1004/1063 1169/1001/1060 +f 634/1011/1070 200/1012/1071 622/1013/1072 1170/1004/1063 +f 1170/1004/1063 622/1013/1072 621/1014/1073 1173/1005/1064 +f 1173/1005/1064 621/1014/1073 620/1015/1074 1176/1008/1067 +f 1176/1008/1067 620/1015/1074 208/1016/1075 533/1017/1076 +f 1175/1006/1065 1176/1008/1067 533/1017/1076 534/1018/1077 +f 1174/1007/1066 1175/1006/1065 534/1018/1077 535/1019/1078 +f 617/995/1054 1174/1007/1066 535/1019/1078 207/996/1055 +f 618/994/1053 1171/1003/1062 1174/1007/1066 617/995/1054 +f 619/993/1052 1168/1000/1059 1171/1003/1062 618/994/1053 +f 1177/1020/932 1178/1021/933 1181/1022/1079 1180/1023/929 +f 1178/1021/933 1179/1024/936 1182/1025/934 1181/1022/1079 +f 1180/1023/929 1181/1022/1079 1184/1026/931 1183/1027/928 +f 1181/1022/1079 1182/1025/934 1185/1028/935 1184/1026/931 +f 171/1029/1080 727/1030/898 1177/1020/932 671/1031/1081 +f 727/1030/898 726/1032/903 1178/1021/933 1177/1020/932 +f 726/1032/903 725/1033/902 1179/1024/936 1178/1021/933 +f 725/1033/902 211/1034/863 719/1035/865 1179/1024/936 +f 1179/1024/936 719/1035/865 720/1036/862 1182/1025/934 +f 1182/1025/934 720/1036/862 721/1037/860 1185/1028/935 +f 1185/1028/935 721/1037/860 217/1038/859 724/1039/886 +f 1184/1026/931 1185/1028/935 724/1039/886 723/1040/885 +f 1183/1027/928 1184/1026/931 723/1040/885 722/1041/884 +f 673/1042/1082 1183/1027/928 722/1041/884 185/1043/1083 +f 672/1044/1084 1180/1023/929 1183/1027/928 673/1042/1082 +f 671/1031/1081 1177/1020/932 1180/1023/929 672/1044/1084 +f 1186/1045/1085 1187/1046/1086 1190/1047/1087 1189/1048/1088 +f 1187/1046/1086 1188/1049/1089 1191/1050/1090 1190/1047/1087 +f 1189/1048/1088 1190/1047/1087 1193/1051/1091 1192/1052/1092 +f 1190/1047/1087 1191/1050/1090 1194/1053/1093 1193/1051/1091 +f 200/1012/1071 629/1054/1094 1186/1045/1085 622/1013/1072 +f 629/1054/1094 630/1055/1095 1187/1046/1086 1186/1045/1085 +f 630/1055/1095 631/1056/1096 1188/1049/1089 1187/1046/1086 +f 631/1056/1096 201/1057/1097 625/1058/1098 1188/1049/1089 +f 1188/1049/1089 625/1058/1098 624/1059/1099 1191/1050/1090 +f 1191/1050/1090 624/1059/1099 623/1060/1100 1194/1053/1093 +f 1194/1053/1093 623/1060/1100 209/1061/1101 542/1062/1102 +f 1193/1051/1091 1194/1053/1093 542/1062/1102 543/1063/1103 +f 1192/1052/1092 1193/1051/1091 543/1063/1103 544/1064/1104 +f 620/1015/1074 1192/1052/1092 544/1064/1104 208/1016/1075 +f 621/1014/1073 1189/1048/1088 1192/1052/1092 620/1015/1074 +f 622/1013/1072 1186/1045/1085 1189/1048/1088 621/1014/1073 +f 1195/1065/1105 1196/1066/1106 1199/1067/1107 1198/1068/1108 +f 1196/1066/1106 1197/1069/1109 1200/1070/1110 1199/1067/1107 +f 1198/1068/1108 1199/1067/1107 1202/1071/1111 1201/1072/1112 +f 1199/1067/1107 1200/1070/1110 1203/1073/1113 1202/1071/1111 +f 201/1057/1097 626/1074/1114 1195/1065/1105 625/1058/1098 +f 626/1074/1114 627/1075/1115 1196/1066/1106 1195/1065/1105 +f 627/1075/1115 628/1076/1116 1197/1069/1109 1196/1066/1106 +f 628/1076/1116 194/904/964 488/906/966 1197/1069/1109 +f 1197/1069/1109 488/906/966 489/919/979 1200/1070/1110 +f 1200/1070/1110 489/919/979 490/917/977 1203/1073/1113 +f 1203/1073/1113 490/917/977 203/918/978 551/1077/1117 +f 1202/1071/1111 1203/1073/1113 551/1077/1117 552/1078/1118 +f 1201/1072/1112 1202/1071/1111 552/1078/1118 553/1079/1119 +f 623/1060/1100 1201/1072/1112 553/1079/1119 209/1061/1101 +f 624/1059/1099 1198/1068/1108 1201/1072/1112 623/1060/1100 +f 625/1058/1098 1195/1065/1105 1198/1068/1108 624/1059/1099 +f 1204/1080/1120 1205/1081/1121 1208/1082/1122 1207/1083/1123 +f 1205/1081/1121 1206/1084/1124 1209/1085/1125 1208/1082/1122 +f 1207/1083/1123 1208/1082/1122 1211/1086/1126 1210/1087/1127 +f 1208/1082/1122 1209/1085/1125 1212/1088/1128 1211/1086/1126 +f 184/1089/1129 548/1090/1130 1204/1080/1120 547/1091/1131 +f 548/1090/1130 549/1092/1132 1205/1081/1121 1204/1080/1120 +f 549/1092/1132 550/1093/1133 1206/1084/1124 1205/1081/1121 +f 550/1093/1133 170/1094/1134 554/1095/1135 1206/1084/1124 +f 1206/1084/1124 554/1095/1135 555/1096/1136 1209/1085/1125 +f 1209/1085/1125 555/1096/1136 556/1097/1137 1212/1088/1128 +f 1212/1088/1128 556/1097/1137 186/1098/1138 580/1099/1139 +f 1211/1086/1126 1212/1088/1128 580/1099/1139 579/1100/1140 +f 1210/1087/1127 1211/1086/1126 579/1100/1140 578/1101/1141 +f 545/1102/1142 1210/1087/1127 578/1101/1141 193/1103/1143 +f 546/1104/1144 1207/1083/1123 1210/1087/1127 545/1102/1142 +f 547/1091/1131 1204/1080/1120 1207/1083/1123 546/1104/1144 +f 1213/1105/1145 1214/1106/1146 1217/1107/1147 1216/1108/1148 +f 1214/1106/1146 1215/1109/1149 1218/1110/1150 1217/1107/1147 +f 1216/1108/1148 1217/1107/1147 1220/1111/1151 1219/1112/1152 +f 1217/1107/1147 1218/1110/1150 1221/1113/1153 1220/1111/1151 +f 182/1114/1154 539/1115/1155 1213/1105/1145 538/1116/1156 +f 539/1115/1155 540/1117/1157 1214/1106/1146 1213/1105/1145 +f 540/1117/1157 541/1118/1158 1215/1109/1149 1214/1106/1146 +f 541/1118/1158 184/1089/1129 547/1091/1131 1215/1109/1149 +f 1215/1109/1149 547/1091/1131 546/1104/1144 1218/1110/1150 +f 1218/1110/1150 546/1104/1144 545/1102/1142 1221/1113/1153 +f 1221/1113/1153 545/1102/1142 193/1103/1143 583/1119/1159 +f 1220/1111/1151 1221/1113/1153 583/1119/1159 582/1120/1160 +f 1219/1112/1152 1220/1111/1151 582/1120/1160 581/1121/1161 +f 536/1122/1162 1219/1112/1152 581/1121/1161 192/1123/1163 +f 537/1124/1164 1216/1108/1148 1219/1112/1152 536/1122/1162 +f 538/1116/1156 1213/1105/1145 1216/1108/1148 537/1124/1164 +f 1222/1125/1165 1223/1126/1166 1226/1127/1167 1225/1128/1168 +f 1223/1126/1166 1224/1129/1169 1227/1130/1170 1226/1127/1167 +f 1225/1128/1168 1226/1127/1167 1229/1131/1171 1228/1132/1172 +f 1226/1127/1167 1227/1130/1170 1230/1133/1173 1229/1131/1171 +f 180/1134/1174 530/1135/1175 1222/1125/1165 529/1136/1176 +f 530/1135/1175 531/1137/1177 1223/1126/1166 1222/1125/1165 +f 531/1137/1177 532/1138/1178 1224/1129/1169 1223/1126/1166 +f 532/1138/1178 182/1114/1154 538/1116/1156 1224/1129/1169 +f 1224/1129/1169 538/1116/1156 537/1124/1164 1227/1130/1170 +f 1227/1130/1170 537/1124/1164 536/1122/1162 1230/1133/1173 +f 1230/1133/1173 536/1122/1162 192/1123/1163 586/1139/1179 +f 1229/1131/1171 1230/1133/1173 586/1139/1179 585/1140/1180 +f 1228/1132/1172 1229/1131/1171 585/1140/1180 584/1141/1181 +f 527/1142/1182 1228/1132/1172 584/1141/1181 191/1143/1183 +f 528/1144/1184 1225/1128/1168 1228/1132/1172 527/1142/1182 +f 529/1136/1176 1222/1125/1165 1225/1128/1168 528/1144/1184 +f 1231/1145/1185 1232/1146/1186 1235/1147/1187 1234/1148/1188 +f 1232/1146/1186 1233/1149/1189 1236/1150/1190 1235/1147/1187 +f 1234/1148/1188 1235/1147/1187 1238/1151/1191 1237/1152/1192 +f 1235/1147/1187 1236/1150/1190 1239/1153/1193 1238/1151/1191 +f 178/1154/1194 521/1155/1195 1231/1145/1185 520/1156/1196 +f 521/1155/1195 522/1157/1197 1232/1146/1186 1231/1145/1185 +f 522/1157/1197 523/1158/1198 1233/1149/1189 1232/1146/1186 +f 523/1158/1198 180/1134/1174 529/1136/1176 1233/1149/1189 +f 1233/1149/1189 529/1136/1176 528/1144/1184 1236/1150/1190 +f 1236/1150/1190 528/1144/1184 527/1142/1182 1239/1153/1193 +f 1239/1153/1193 527/1142/1182 191/1143/1183 589/1159/1199 +f 1238/1151/1191 1239/1153/1193 589/1159/1199 588/1160/1200 +f 1237/1152/1192 1238/1151/1191 588/1160/1200 587/1161/1201 +f 518/1162/1202 1237/1152/1192 587/1161/1201 190/1163/1203 +f 519/1164/1204 1234/1148/1188 1237/1152/1192 518/1162/1202 +f 520/1156/1196 1231/1145/1185 1234/1148/1188 519/1164/1204 +f 1240/1165/1205 1241/1166/1206 1244/1167/1207 1243/1168/1208 +f 1241/1166/1206 1242/1169/1209 1245/1170/1210 1244/1167/1207 +f 1243/1168/1208 1244/1167/1207 1247/1171/1211 1246/1172/1212 +f 1244/1167/1207 1245/1170/1210 1248/1173/1213 1247/1171/1211 +f 176/1174/1214 512/1175/1215 1240/1165/1205 511/1176/1216 +f 512/1175/1215 513/1177/1217 1241/1166/1206 1240/1165/1205 +f 513/1177/1217 514/1178/1218 1242/1169/1209 1241/1166/1206 +f 514/1178/1218 178/1154/1194 520/1156/1196 1242/1169/1209 +f 1242/1169/1209 520/1156/1196 519/1164/1204 1245/1170/1210 +f 1245/1170/1210 519/1164/1204 518/1162/1202 1248/1173/1213 +f 1248/1173/1213 518/1162/1202 190/1163/1203 592/1179/1219 +f 1247/1171/1211 1248/1173/1213 592/1179/1219 591/1180/1220 +f 1246/1172/1212 1247/1171/1211 591/1180/1220 590/1181/1221 +f 509/1182/1222 1246/1172/1212 590/1181/1221 189/1183/1223 +f 510/1184/1224 1243/1168/1208 1246/1172/1212 509/1182/1222 +f 511/1176/1216 1240/1165/1205 1243/1168/1208 510/1184/1224 +f 1249/1185/1225 1250/1186/1226 1253/1187/1227 1252/1188/1228 +f 1250/1186/1226 1251/1189/1229 1254/1190/1230 1253/1187/1227 +f 1252/1188/1228 1253/1187/1227 1256/1191/1231 1255/1192/1232 +f 1253/1187/1227 1254/1190/1230 1257/1193/1233 1256/1191/1231 +f 174/1194/1234 503/1195/1235 1249/1185/1225 502/1196/1236 +f 503/1195/1235 504/1197/1237 1250/1186/1226 1249/1185/1225 +f 504/1197/1237 505/1198/1238 1251/1189/1229 1250/1186/1226 +f 505/1198/1238 176/1174/1214 511/1176/1216 1251/1189/1229 +f 1251/1189/1229 511/1176/1216 510/1184/1224 1254/1190/1230 +f 1254/1190/1230 510/1184/1224 509/1182/1222 1257/1193/1233 +f 1257/1193/1233 509/1182/1222 189/1183/1223 595/1199/1239 +f 1256/1191/1231 1257/1193/1233 595/1199/1239 594/1200/1240 +f 1255/1192/1232 1256/1191/1231 594/1200/1240 593/1201/1241 +f 500/1202/1242 1255/1192/1232 593/1201/1241 188/1203/1243 +f 501/1204/1244 1252/1188/1228 1255/1192/1232 500/1202/1242 +f 502/1196/1236 1249/1185/1225 1252/1188/1228 501/1204/1244 +f 1258/1205/1245 1259/1206/1246 1262/1207/1247 1261/1208/1248 +f 1259/1206/1246 1260/1209/1249 1263/1210/1250 1262/1207/1247 +f 1261/1208/1248 1262/1207/1247 1265/1211/1251 1264/1212/1252 +f 1262/1207/1247 1263/1210/1250 1266/1213/1253 1265/1211/1251 +f 172/1214/1254 494/1215/1255 1258/1205/1245 493/1216/1256 +f 494/1215/1255 495/1217/1257 1259/1206/1246 1258/1205/1245 +f 495/1217/1257 496/1218/1258 1260/1209/1249 1259/1206/1246 +f 496/1218/1258 174/1194/1234 502/1196/1236 1260/1209/1249 +f 1260/1209/1249 502/1196/1236 501/1204/1244 1263/1210/1250 +f 1263/1210/1250 501/1204/1244 500/1202/1242 1266/1213/1253 +f 1266/1213/1253 500/1202/1242 188/1203/1243 598/1219/1259 +f 1265/1211/1251 1266/1213/1253 598/1219/1259 597/1220/1260 +f 1264/1212/1252 1265/1211/1251 597/1220/1260 596/1221/1261 +f 491/1222/1262 1264/1212/1252 596/1221/1261 187/1223/1263 +f 492/1224/1264 1261/1208/1248 1264/1212/1252 491/1222/1262 +f 493/1216/1256 1258/1205/1245 1261/1208/1248 492/1224/1264 +f 1267/1225/1265 1268/1226/1266 1271/1227/1267 1270/1228/1268 +f 1268/1226/1266 1269/1229/1269 1272/1230/1270 1271/1227/1267 +f 1270/1228/1268 1271/1227/1267 1274/1231/1271 1273/1232/1272 +f 1271/1227/1267 1272/1230/1270 1275/1233/1273 1274/1231/1271 +f 170/1094/1134 482/1234/1274 1267/1225/1265 554/1095/1135 +f 482/1234/1274 483/1235/1275 1268/1226/1266 1267/1225/1265 +f 483/1235/1275 484/1236/1276 1269/1229/1269 1268/1226/1266 +f 484/1236/1276 172/1214/1254 493/1216/1256 1269/1229/1269 +f 1269/1229/1269 493/1216/1256 492/1224/1264 1272/1230/1270 +f 1272/1230/1270 492/1224/1264 491/1222/1262 1275/1233/1273 +f 1275/1233/1273 491/1222/1262 187/1223/1263 601/1237/1277 +f 1274/1231/1271 1275/1233/1273 601/1237/1277 600/1238/1278 +f 1273/1232/1272 1274/1231/1271 600/1238/1278 599/1239/1279 +f 556/1097/1137 1273/1232/1272 599/1239/1279 186/1098/1138 +f 555/1096/1136 1270/1228/1268 1273/1232/1272 556/1097/1137 +f 554/1095/1135 1267/1225/1265 1270/1228/1268 555/1096/1136 +f 1276/1240/1280 1277/1241/1281 1280/1242/1282 1279/1243/1283 +f 1277/1241/1281 1278/1244/1284 1281/1245/1285 1280/1242/1282 +f 1279/1243/1283 1280/1242/1282 1283/1246/1286 1282/1247/1287 +f 1280/1242/1282 1281/1245/1285 1284/1248/1288 1283/1246/1286 +f 193/1103/1143 578/1101/1141 1276/1240/1280 577/1249/1289 +f 578/1101/1141 579/1100/1140 1277/1241/1281 1276/1240/1280 +f 579/1100/1140 580/1099/1139 1278/1244/1284 1277/1241/1281 +f 580/1099/1139 186/1098/1138 602/1250/1290 1278/1244/1284 +f 1278/1244/1284 602/1250/1290 603/1251/1291 1281/1245/1285 +f 1281/1245/1285 603/1251/1291 604/1252/1292 1284/1248/1288 +f 1284/1248/1288 604/1252/1292 194/904/964 628/1076/1116 +f 1283/1246/1286 1284/1248/1288 628/1076/1116 627/1075/1115 +f 1282/1247/1287 1283/1246/1286 627/1075/1115 626/1074/1114 +f 575/1253/1293 1282/1247/1287 626/1074/1114 201/1057/1097 +f 576/1254/1294 1279/1243/1283 1282/1247/1287 575/1253/1293 +f 577/1249/1289 1276/1240/1280 1279/1243/1283 576/1254/1294 +f 1285/1255/1295 1286/1256/1296 1289/1257/1297 1288/1258/1298 +f 1286/1256/1296 1287/1259/1299 1290/1260/1300 1289/1257/1297 +f 1288/1258/1298 1289/1257/1297 1292/1261/1301 1291/1262/1302 +f 1289/1257/1297 1290/1260/1300 1293/1263/1303 1292/1261/1301 +f 192/1123/1163 581/1121/1161 1285/1255/1295 574/1264/1304 +f 581/1121/1161 582/1120/1160 1286/1256/1296 1285/1255/1295 +f 582/1120/1160 583/1119/1159 1287/1259/1299 1286/1256/1296 +f 583/1119/1159 193/1103/1143 577/1249/1289 1287/1259/1299 +f 1287/1259/1299 577/1249/1289 576/1254/1294 1290/1260/1300 +f 1290/1260/1300 576/1254/1294 575/1253/1293 1293/1263/1303 +f 1293/1263/1303 575/1253/1293 201/1057/1097 631/1056/1096 +f 1292/1261/1301 1293/1263/1303 631/1056/1096 630/1055/1095 +f 1291/1262/1302 1292/1261/1301 630/1055/1095 629/1054/1094 +f 572/1265/1305 1291/1262/1302 629/1054/1094 200/1012/1071 +f 573/1266/1306 1288/1258/1298 1291/1262/1302 572/1265/1305 +f 574/1264/1304 1285/1255/1295 1288/1258/1298 573/1266/1306 +f 1294/1267/1307 1295/1268/1308 1298/1269/1309 1297/1270/1310 +f 1295/1268/1308 1296/1271/1311 1299/1272/1312 1298/1269/1309 +f 1297/1270/1310 1298/1269/1309 1301/1273/1313 1300/1274/1314 +f 1298/1269/1309 1299/1272/1312 1302/1275/1315 1301/1273/1313 +f 191/1143/1183 584/1141/1181 1294/1267/1307 571/1276/1316 +f 584/1141/1181 585/1140/1180 1295/1268/1308 1294/1267/1307 +f 585/1140/1180 586/1139/1179 1296/1271/1311 1295/1268/1308 +f 586/1139/1179 192/1123/1163 574/1264/1304 1296/1271/1311 +f 1296/1271/1311 574/1264/1304 573/1266/1306 1299/1272/1312 +f 1299/1272/1312 573/1266/1306 572/1265/1305 1302/1275/1315 +f 1302/1275/1315 572/1265/1305 200/1012/1071 634/1011/1070 +f 1301/1273/1313 1302/1275/1315 634/1011/1070 633/1010/1069 +f 1300/1274/1314 1301/1273/1313 633/1010/1069 632/1009/1068 +f 569/1277/1317 1300/1274/1314 632/1009/1068 199/992/1051 +f 570/1278/1318 1297/1270/1310 1300/1274/1314 569/1277/1317 +f 571/1276/1316 1294/1267/1307 1297/1270/1310 570/1278/1318 +f 1303/1279/1319 1304/1280/1320 1307/1281/1321 1306/1282/1322 +f 1304/1280/1320 1305/1283/1323 1308/1284/1324 1307/1281/1321 +f 1306/1282/1322 1307/1281/1321 1310/1285/1325 1309/1286/1326 +f 1307/1281/1321 1308/1284/1324 1311/1287/1327 1310/1285/1325 +f 190/1163/1203 587/1161/1201 1303/1279/1319 568/1288/1328 +f 587/1161/1201 588/1160/1200 1304/1280/1320 1303/1279/1319 +f 588/1160/1200 589/1159/1199 1305/1283/1323 1304/1280/1320 +f 589/1159/1199 191/1143/1183 571/1276/1316 1305/1283/1323 +f 1305/1283/1323 571/1276/1316 570/1278/1318 1308/1284/1324 +f 1308/1284/1324 570/1278/1318 569/1277/1317 1311/1287/1327 +f 1311/1287/1327 569/1277/1317 199/992/1051 637/991/1050 +f 1310/1285/1325 1311/1287/1327 637/991/1050 636/990/1049 +f 1309/1286/1326 1310/1285/1325 636/990/1049 635/989/1048 +f 566/1289/1329 1309/1286/1326 635/989/1048 198/972/1031 +f 567/1290/1330 1306/1282/1322 1309/1286/1326 566/1289/1329 +f 568/1288/1328 1303/1279/1319 1306/1282/1322 567/1290/1330 +f 1312/1291/1331 1313/1292/1332 1316/1293/1333 1315/1294/1334 +f 1313/1292/1332 1314/1295/1335 1317/1296/1336 1316/1293/1333 +f 1315/1294/1334 1316/1293/1333 1319/1297/1337 1318/1298/1338 +f 1316/1293/1333 1317/1296/1336 1320/1299/1339 1319/1297/1337 +f 189/1183/1223 590/1181/1221 1312/1291/1331 565/1300/1340 +f 590/1181/1221 591/1180/1220 1313/1292/1332 1312/1291/1331 +f 591/1180/1220 592/1179/1219 1314/1295/1335 1313/1292/1332 +f 592/1179/1219 190/1163/1203 568/1288/1328 1314/1295/1335 +f 1314/1295/1335 568/1288/1328 567/1290/1330 1317/1296/1336 +f 1317/1296/1336 567/1290/1330 566/1289/1329 1320/1299/1339 +f 1320/1299/1339 566/1289/1329 198/972/1031 640/971/1030 +f 1319/1297/1337 1320/1299/1339 640/971/1030 639/970/1029 +f 1318/1298/1338 1319/1297/1337 639/970/1029 638/969/1028 +f 563/1301/1341 1318/1298/1338 638/969/1028 197/952/1011 +f 564/1302/1342 1315/1294/1334 1318/1298/1338 563/1301/1341 +f 565/1300/1340 1312/1291/1331 1315/1294/1334 564/1302/1342 +f 1321/1303/1343 1322/1304/1344 1325/1305/1345 1324/1306/1346 +f 1322/1304/1344 1323/1307/1347 1326/1308/1348 1325/1305/1345 +f 1324/1306/1346 1325/1305/1345 1328/1309/1349 1327/1310/1350 +f 1325/1305/1345 1326/1308/1348 1329/1311/1351 1328/1309/1349 +f 188/1203/1243 593/1201/1241 1321/1303/1343 562/1312/1352 +f 593/1201/1241 594/1200/1240 1322/1304/1344 1321/1303/1343 +f 594/1200/1240 595/1199/1239 1323/1307/1347 1322/1304/1344 +f 595/1199/1239 189/1183/1223 565/1300/1340 1323/1307/1347 +f 1323/1307/1347 565/1300/1340 564/1302/1342 1326/1308/1348 +f 1326/1308/1348 564/1302/1342 563/1301/1341 1329/1311/1351 +f 1329/1311/1351 563/1301/1341 197/952/1011 643/951/1010 +f 1328/1309/1349 1329/1311/1351 643/951/1010 642/950/1009 +f 1327/1310/1350 1328/1309/1349 642/950/1009 641/949/1008 +f 560/1313/1353 1327/1310/1350 641/949/1008 196/932/249 +f 561/1314/1354 1324/1306/1346 1327/1310/1350 560/1313/1353 +f 562/1312/1352 1321/1303/1343 1324/1306/1346 561/1314/1354 +f 1330/1315/1355 1331/1316/1356 1334/1317/1357 1333/1318/1358 +f 1331/1316/1356 1332/1319/1359 1335/1320/1360 1334/1317/1357 +f 1333/1318/1358 1334/1317/1357 1337/1321/1361 1336/1322/1362 +f 1334/1317/1357 1335/1320/1360 1338/1323/1363 1337/1321/1361 +f 187/1223/1263 596/1221/1261 1330/1315/1355 559/1324/1364 +f 596/1221/1261 597/1220/1260 1331/1316/1356 1330/1315/1355 +f 597/1220/1260 598/1219/1259 1332/1319/1359 1331/1316/1356 +f 598/1219/1259 188/1203/1243 562/1312/1352 1332/1319/1359 +f 1332/1319/1359 562/1312/1352 561/1314/1354 1335/1320/1360 +f 1335/1320/1360 561/1314/1354 560/1313/1353 1338/1323/1363 +f 1338/1323/1363 560/1313/1353 196/932/249 646/931/991 +f 1337/1321/1361 1338/1323/1363 646/931/991 645/930/990 +f 1336/1322/1362 1337/1321/1361 645/930/990 644/929/989 +f 557/1325/1365 1336/1322/1362 644/929/989 195/909/969 +f 558/1326/1366 1333/1318/1358 1336/1322/1362 557/1325/1365 +f 559/1324/1364 1330/1315/1355 1333/1318/1358 558/1326/1366 +f 1339/1327/1367 1340/1328/1368 1343/1329/1369 1342/1330/1370 +f 1340/1328/1368 1341/1331/1371 1344/1332/1372 1343/1329/1369 +f 1342/1330/1370 1343/1329/1369 1346/1333/1373 1345/1334/1374 +f 1343/1329/1369 1344/1332/1372 1347/1335/1375 1346/1333/1373 +f 186/1098/1138 599/1239/1279 1339/1327/1367 602/1250/1290 +f 599/1239/1279 600/1238/1278 1340/1328/1368 1339/1327/1367 +f 600/1238/1278 601/1237/1277 1341/1331/1371 1340/1328/1368 +f 601/1237/1277 187/1223/1263 559/1324/1364 1341/1331/1371 +f 1341/1331/1371 559/1324/1364 558/1326/1366 1344/1332/1372 +f 1344/1332/1372 558/1326/1366 557/1325/1365 1347/1335/1375 +f 1347/1335/1375 557/1325/1365 195/909/969 649/908/968 +f 1346/1333/1373 1347/1335/1375 649/908/968 648/907/967 +f 1345/1334/1374 1346/1333/1373 648/907/967 647/905/965 +f 604/1252/1292 1345/1334/1374 647/905/965 194/904/964 +f 603/1251/1291 1342/1330/1370 1345/1334/1374 604/1252/1292 +f 602/1250/1290 1339/1327/1367 1342/1330/1370 603/1251/1291 +f 1348/1336/1376 1349/1337/1377 1352/1338/1378 1351/1339/1379 +f 1349/1337/1380 1350/1340/1381 1353/1341/1382 1352/1338/1383 +f 1351/1339/1379 1352/1338/1378 1355/1342/1384 1354/1343/1385 +f 1352/1338/1383 1353/1341/1382 1356/1344/1386 1355/1342/1387 +f 171/1029/1080 676/1345/1388 1348/1336/1389 652/1346/1390 +f 676/1345/1391 675/1347/1391 1349/1337/1377 1348/1336/1376 +f 675/1347/1392 674/1348/1393 1350/1340/1381 1349/1337/1380 +f 674/1348/1393 203/918/978 487/916/976 1350/1340/1381 +f 1350/1340/1381 487/916/976 486/915/975 1353/1341/1382 +f 1353/1341/1382 486/915/975 485/914/974 1356/1344/1386 +f 1356/1344/1386 485/914/974 202/913/973 679/1349/1394 +f 1355/1342/1387 1356/1344/1386 679/1349/1394 678/1350/1395 +f 1354/1343/1385 1355/1342/1384 678/1350/1396 677/1351/1397 +f 650/1352/1398 1354/1343/1399 677/1351/1400 173/1353/1401 +f 651/1354/1402 1351/1339/1403 1354/1343/1399 650/1352/1398 +f 652/1346/1390 1348/1336/1389 1351/1339/1403 651/1354/1402 +f 1357/1355/1404 1358/1356/1405 1361/1357/1406 1360/1358/1407 +f 1358/1356/1408 1359/1359/1409 1362/1360/1410 1361/1357/1411 +f 1360/1358/1407 1361/1357/1406 1364/1361/1412 1363/1362/1413 +f 1361/1357/1411 1362/1360/1410 1365/1363/1414 1364/1361/1415 +f 173/1353/1401 677/1351/1400 1357/1355/1416 655/1364/1417 +f 677/1351/1397 678/1350/1396 1358/1356/1405 1357/1355/1404 +f 678/1350/1395 679/1349/1394 1359/1359/1409 1358/1356/1408 +f 679/1349/1394 202/913/973 499/939/998 1359/1359/1409 +f 1359/1359/1409 499/939/998 498/938/997 1362/1360/1410 +f 1362/1360/1410 498/938/997 497/937/996 1365/1363/1414 +f 1365/1363/1414 497/937/996 204/936/995 682/1365/1418 +f 1364/1361/1415 1365/1363/1414 682/1365/1418 681/1366/1419 +f 1363/1362/1413 1364/1361/1412 681/1366/1420 680/1367/1421 +f 653/1368/1422 1363/1362/1423 680/1367/1424 175/1369/1425 +f 654/1370/1426 1360/1358/1427 1363/1362/1423 653/1368/1422 +f 655/1364/1417 1357/1355/1416 1360/1358/1427 654/1370/1426 +f 1366/1371/1428 1367/1372/1429 1370/1373/1430 1369/1374/1431 +f 1367/1372/1432 1368/1375/1433 1371/1376/1434 1370/1373/1435 +f 1369/1374/1431 1370/1373/1430 1373/1377/1436 1372/1378/1437 +f 1370/1373/1435 1371/1376/1434 1374/1379/1438 1373/1377/1439 +f 175/1369/1425 680/1367/1424 1366/1371/1440 658/1380/1441 +f 680/1367/1421 681/1366/1420 1367/1372/1429 1366/1371/1428 +f 681/1366/1419 682/1365/1418 1368/1375/1433 1367/1372/1432 +f 682/1365/1418 204/936/995 508/959/1018 1368/1375/1433 +f 1368/1375/1433 508/959/1018 507/958/1017 1371/1376/1434 +f 1371/1376/1434 507/958/1017 506/957/1016 1374/1379/1438 +f 1374/1379/1438 506/957/1016 205/956/1015 685/1381/1442 +f 1373/1377/1439 1374/1379/1438 685/1381/1442 684/1382/1443 +f 1372/1378/1437 1373/1377/1436 684/1382/1444 683/1383/1445 +f 656/1384/1446 1372/1378/1447 683/1383/1448 177/1385/1449 +f 657/1386/1450 1369/1374/1451 1372/1378/1447 656/1384/1446 +f 658/1380/1441 1366/1371/1440 1369/1374/1451 657/1386/1450 +f 1375/1387/1452 1376/1388/1453 1379/1389/1454 1378/1390/1455 +f 1376/1388/1456 1377/1391/1457 1380/1392/1458 1379/1389/1459 +f 1378/1390/1455 1379/1389/1454 1382/1393/1460 1381/1394/1460 +f 1379/1389/1459 1380/1392/1458 1383/1395/1461 1382/1393/1462 +f 177/1385/1449 683/1383/1448 1375/1387/1463 661/1396/1464 +f 683/1383/1445 684/1382/1444 1376/1388/1453 1375/1387/1452 +f 684/1382/1443 685/1381/1442 1377/1391/1457 1376/1388/1456 +f 685/1381/1442 205/956/1015 517/979/1038 1377/1391/1457 +f 1377/1391/1457 517/979/1038 516/978/1037 1380/1392/1458 +f 1380/1392/1458 516/978/1037 515/977/1036 1383/1395/1461 +f 1383/1395/1461 515/977/1036 206/976/1035 688/1397/1465 +f 1382/1393/1462 1383/1395/1461 688/1397/1465 687/1398/1466 +f 1381/1394/1460 1382/1393/1460 687/1398/1467 686/1399/1467 +f 659/1400/1468 1381/1394/1469 686/1399/1470 179/1401/1471 +f 660/1402/1472 1378/1390/1473 1381/1394/1469 659/1400/1468 +f 661/1396/1464 1375/1387/1463 1378/1390/1473 660/1402/1472 +f 1384/1403/1474 1385/1404/1474 1388/1405/1475 1387/1406/1476 +f 1385/1404/1477 1386/1407/1478 1389/1408/1479 1388/1405/1480 +f 1387/1406/1476 1388/1405/1475 1391/1409/1481 1390/1410/1482 +f 1388/1405/1480 1389/1408/1479 1392/1411/1483 1391/1409/1484 +f 179/1401/1471 686/1399/1470 1384/1403/1485 664/1412/1486 +f 686/1399/1467 687/1398/1467 1385/1404/1474 1384/1403/1474 +f 687/1398/1466 688/1397/1465 1386/1407/1478 1385/1404/1477 +f 688/1397/1465 206/976/1035 526/999/1058 1386/1407/1478 +f 1386/1407/1478 526/999/1058 525/998/1057 1389/1408/1479 +f 1389/1408/1479 525/998/1057 524/997/1056 1392/1411/1483 +f 1392/1411/1483 524/997/1056 207/996/1055 691/1413/1487 +f 1391/1409/1484 1392/1411/1483 691/1413/1487 690/1414/1488 +f 1390/1410/1482 1391/1409/1481 690/1414/1489 689/1415/1490 +f 662/1416/1491 1390/1410/1492 689/1415/1493 181/1417/1494 +f 663/1418/1495 1387/1406/1496 1390/1410/1492 662/1416/1491 +f 664/1412/1486 1384/1403/1485 1387/1406/1496 663/1418/1495 +f 1393/1419/1497 1394/1420/1498 1397/1421/1499 1396/1422/1500 +f 1394/1420/1501 1395/1423/1502 1398/1424/1503 1397/1421/1504 +f 1396/1422/1500 1397/1421/1499 1400/1425/1505 1399/1426/1506 +f 1397/1421/1504 1398/1424/1503 1401/1427/1507 1400/1425/1508 +f 181/1417/1494 689/1415/1493 1393/1419/1509 667/1428/1510 +f 689/1415/1490 690/1414/1489 1394/1420/1498 1393/1419/1497 +f 690/1414/1488 691/1413/1487 1395/1423/1502 1394/1420/1501 +f 691/1413/1487 207/996/1055 535/1019/1078 1395/1423/1502 +f 1395/1423/1502 535/1019/1078 534/1018/1077 1398/1424/1503 +f 1398/1424/1503 534/1018/1077 533/1017/1076 1401/1427/1507 +f 1401/1427/1507 533/1017/1076 208/1016/1075 694/1429/1511 +f 1400/1425/1508 1401/1427/1507 694/1429/1511 693/1430/1512 +f 1399/1426/1506 1400/1425/1505 693/1430/1513 692/1431/1514 +f 665/1432/1515 1399/1426/1516 692/1431/1517 183/1433/1518 +f 666/1434/1519 1396/1422/1520 1399/1426/1516 665/1432/1515 +f 667/1428/1510 1393/1419/1509 1396/1422/1520 666/1434/1519 +f 1402/1435/1521 1403/1436/1522 1406/1437/1523 1405/1438/1524 +f 1403/1436/1525 1404/1439/1526 1407/1440/1527 1406/1437/1528 +f 1405/1438/1524 1406/1437/1523 1409/1441/1529 1408/1442/1530 +f 1406/1437/1528 1407/1440/1527 1410/1443/1531 1409/1441/1532 +f 183/1433/1518 692/1431/1517 1402/1435/1533 670/1444/1534 +f 692/1431/1514 693/1430/1513 1403/1436/1522 1402/1435/1521 +f 693/1430/1512 694/1429/1511 1404/1439/1526 1403/1436/1525 +f 694/1429/1511 208/1016/1075 544/1064/1104 1404/1439/1526 +f 1404/1439/1526 544/1064/1104 543/1063/1103 1407/1440/1527 +f 1407/1440/1527 543/1063/1103 542/1062/1102 1410/1443/1531 +f 1410/1443/1531 542/1062/1102 209/1061/1101 697/1445/1535 +f 1409/1441/1532 1410/1443/1531 697/1445/1535 696/1446/1536 +f 1408/1442/1530 1409/1441/1529 696/1446/1537 695/1447/1538 +f 668/1448/1539 1408/1442/1540 695/1447/1541 185/1043/1083 +f 669/1449/1542 1405/1438/1543 1408/1442/1540 668/1448/1539 +f 670/1444/1534 1402/1435/1533 1405/1438/1543 669/1449/1542 +f 1411/1450/1544 1412/1451/1545 1415/1452/1546 1414/1453/1547 +f 1412/1451/1548 1413/1454/1549 1416/1455/1550 1415/1452/1551 +f 1414/1453/1547 1415/1452/1546 1418/1456/1552 1417/1457/1553 +f 1415/1452/1551 1416/1455/1550 1419/1458/1554 1418/1456/1555 +f 185/1043/1083 695/1447/1541 1411/1450/1556 673/1042/1082 +f 695/1447/1538 696/1446/1537 1412/1451/1545 1411/1450/1544 +f 696/1446/1536 697/1445/1535 1413/1454/1549 1412/1451/1548 +f 697/1445/1535 209/1061/1101 553/1079/1119 1413/1454/1549 +f 1413/1454/1549 553/1079/1119 552/1078/1118 1416/1455/1550 +f 1416/1455/1550 552/1078/1118 551/1077/1117 1419/1458/1554 +f 1419/1458/1554 551/1077/1117 203/918/978 674/1348/1393 +f 1418/1456/1555 1419/1458/1554 674/1348/1393 675/1347/1392 +f 1417/1457/1553 1418/1456/1552 675/1347/1391 676/1345/1391 +f 671/1031/1081 1417/1457/1557 676/1345/1388 171/1029/1080 +f 672/1044/1084 1414/1453/1558 1417/1457/1557 671/1031/1081 +f 673/1042/1082 1411/1450/1556 1414/1453/1558 672/1044/1084 +f 1421/1459/844 1422/1460/845 1420/1461/832 1436/1462/843 +f 1423/1463/846 1424/1464/833 1420/1461/832 1422/1460/845 +f 1425/1465/830 1426/1466/831 1420/1461/832 1424/1464/833 +f 1427/1467/834 1428/1468/835 1420/1461/832 1426/1466/831 +f 1429/1469/836 1430/1470/837 1420/1461/832 1428/1468/835 +f 1431/1471/838 1432/1472/839 1420/1461/832 1430/1470/837 +f 1433/1473/1559 1434/1474/841 1420/1461/832 1432/1472/839 +f 1435/1475/842 1436/1462/843 1420/1461/832 1434/1474/841 +f 210/1476/1560 703/1477/868 1421/1459/844 698/1478/869 +f 703/1477/868 702/1479/870 1422/1460/845 1421/1459/844 +f 698/1478/869 1421/1459/844 1436/1462/843 699/1480/866 +f 212/1481/871 706/1482/872 1423/1463/846 701/1483/873 +f 706/1482/872 705/1484/851 1424/1464/833 1423/1463/846 +f 701/1483/873 1423/1463/846 1422/1460/845 702/1479/870 +f 213/1485/847 709/1486/848 1425/1465/830 704/1487/849 +f 709/1486/848 708/1488/850 1426/1466/831 1425/1465/830 +f 704/1487/849 1425/1465/830 1424/1464/833 705/1484/851 +f 214/1489/354 712/1490/352 1427/1467/834 707/1491/852 +f 712/1490/352 711/1492/1561 1428/1468/835 1427/1467/834 +f 707/1491/852 1427/1467/834 1426/1466/831 708/1488/850 +f 215/1493/349 715/1494/853 1429/1469/836 710/1495/350 +f 715/1494/853 714/1496/854 1430/1470/837 1429/1469/836 +f 710/1495/350 1429/1469/836 1428/1468/835 711/1492/1561 +f 216/1497/855 718/1498/856 1431/1471/838 713/1499/857 +f 718/1498/856 717/1500/858 1432/1472/839 1431/1471/838 +f 713/1499/857 1431/1471/838 1430/1470/837 714/1496/854 +f 217/1038/859 721/1037/860 1433/1473/1559 716/1501/861 +f 721/1037/860 720/1036/862 1434/1474/841 1433/1473/1559 +f 716/1501/861 1433/1473/1559 1432/1472/839 717/1500/858 +f 211/1034/863 700/1502/1562 1435/1475/842 719/1035/865 +f 700/1502/1562 699/1480/866 1436/1462/843 1435/1475/842 +f 719/1035/865 1435/1475/842 1434/1474/841 720/1036/862 +f 1437/1503/923 1438/1504/924 1441/1505/921 1440/1506/920 +f 1438/1504/924 1439/1507/927 1442/1508/925 1441/1505/921 +f 1440/1506/920 1441/1505/921 1444/1509/922 1443/1510/919 +f 1441/1505/921 1442/1508/925 1445/1511/926 1444/1509/922 +f 183/1433/1518 733/1512/883 1437/1503/923 665/1432/1515 +f 733/1512/883 732/1513/888 1438/1504/924 1437/1503/923 +f 732/1513/888 731/1514/887 1439/1507/927 1438/1504/924 +f 731/1514/887 216/1497/855 713/1499/857 1439/1507/927 +f 1439/1507/927 713/1499/857 714/1496/854 1442/1508/925 +f 1442/1508/925 714/1496/854 715/1494/853 1445/1511/926 +f 1445/1511/926 715/1494/853 215/1493/349 730/1515/348 +f 1444/1509/922 1445/1511/926 730/1515/348 729/1516/347 +f 1443/1510/919 1444/1509/922 729/1516/347 728/1517/346 +f 667/1428/1510 1443/1510/919 728/1517/346 181/1417/1494 +f 666/1434/1519 1440/1506/920 1443/1510/919 667/1428/1510 +f 665/1432/1515 1437/1503/923 1440/1506/920 666/1434/1519 +f 1446/1518/950 1447/1519/951 1450/1520/948 1449/1521/947 +f 1447/1519/951 1448/1522/954 1451/1523/952 1450/1520/948 +f 1449/1521/947 1450/1520/948 1453/1524/949 1452/1525/946 +f 1450/1520/948 1451/1523/952 1454/1526/953 1453/1524/949 +f 179/1401/1471 739/1527/342 1446/1518/950 659/1400/1468 +f 739/1527/342 738/1528/355 1447/1519/951 1446/1518/950 +f 738/1528/355 737/1529/1563 1448/1522/954 1447/1519/951 +f 737/1529/1563 214/1489/354 707/1491/852 1448/1522/954 +f 1448/1522/954 707/1491/852 708/1488/850 1451/1523/952 +f 1451/1523/952 708/1488/850 709/1486/848 1454/1526/953 +f 1454/1526/953 709/1486/848 213/1485/847 736/1530/916 +f 1453/1524/949 1454/1526/953 736/1530/916 735/1531/915 +f 1452/1525/946 1453/1524/949 735/1531/915 734/1532/914 +f 661/1396/1464 1452/1525/946 734/1532/914 177/1385/1449 +f 660/1402/1472 1449/1521/947 1452/1525/946 661/1396/1464 +f 659/1400/1468 1446/1518/950 1449/1521/947 660/1402/1472 +f 1455/1533/941 1456/1534/942 1459/1535/939 1458/1536/1564 +f 1456/1534/942 1457/1537/945 1460/1538/943 1459/1535/939 +f 1458/1536/1564 1459/1535/939 1462/1539/940 1461/1540/937 +f 1459/1535/939 1460/1538/943 1463/1541/944 1462/1539/940 +f 175/1369/1425 745/1542/1565 1455/1533/941 653/1368/1422 +f 745/1542/1565 744/1543/918 1456/1534/942 1455/1533/941 +f 744/1543/918 743/1544/917 1457/1537/945 1456/1534/942 +f 743/1544/917 212/1481/871 701/1483/873 1457/1537/945 +f 1457/1537/945 701/1483/873 702/1479/870 1460/1538/943 +f 1460/1538/943 702/1479/870 703/1477/868 1463/1541/944 +f 1463/1541/944 703/1477/868 210/1476/1560 742/1545/901 +f 1462/1539/940 1463/1541/944 742/1545/901 741/1546/900 +f 1461/1540/937 1462/1539/940 741/1546/900 740/1547/899 +f 655/1364/1417 1461/1540/937 740/1547/899 173/1353/1401 +f 654/1370/1426 1458/1536/1564 1461/1540/937 655/1364/1417 +f 653/1368/1422 1455/1533/941 1458/1536/1564 654/1370/1426 +f 1464/1548/878 1465/1549/879 1468/1550/876 1467/1551/875 +f 1465/1549/879 1466/1552/882 1469/1553/880 1468/1550/876 +f 1467/1551/875 1468/1550/876 1471/1554/877 1470/1555/874 +f 1468/1550/876 1469/1553/880 1472/1556/881 1471/1554/877 +f 185/1043/1083 722/1041/884 1464/1548/878 668/1448/1539 +f 722/1041/884 723/1040/885 1465/1549/879 1464/1548/878 +f 723/1040/885 724/1039/886 1466/1552/882 1465/1549/879 +f 724/1039/886 217/1038/859 716/1501/861 1466/1552/882 +f 1466/1552/882 716/1501/861 717/1500/858 1469/1553/880 +f 1469/1553/880 717/1500/858 718/1498/856 1472/1556/881 +f 1472/1556/881 718/1498/856 216/1497/855 731/1514/887 +f 1471/1554/877 1472/1556/881 731/1514/887 732/1513/888 +f 1470/1555/874 1471/1554/877 732/1513/888 733/1512/883 +f 670/1444/1534 1470/1555/874 733/1512/883 183/1433/1518 +f 669/1449/1542 1467/1551/875 1470/1555/874 670/1444/1534 +f 668/1448/1539 1464/1548/878 1467/1551/875 669/1449/1542 +f 1473/1557/335 1474/1558/336 1477/1559/333 1476/1560/332 +f 1474/1558/336 1475/1561/339 1478/1562/337 1477/1559/333 +f 1476/1560/332 1477/1559/333 1480/1563/334 1479/1564/331 +f 1477/1559/333 1478/1562/337 1481/1565/338 1480/1563/334 +f 181/1417/1494 728/1517/346 1473/1557/335 662/1416/1491 +f 728/1517/346 729/1516/347 1474/1558/336 1473/1557/335 +f 729/1516/347 730/1515/348 1475/1561/339 1474/1558/336 +f 730/1515/348 215/1493/349 710/1495/350 1475/1561/339 +f 1475/1561/339 710/1495/350 711/1492/1561 1478/1562/337 +f 1478/1562/337 711/1492/1561 712/1490/352 1481/1565/338 +f 1481/1565/338 712/1490/352 214/1489/354 737/1529/1563 +f 1480/1563/334 1481/1565/338 737/1529/1563 738/1528/355 +f 1479/1564/331 1480/1563/334 738/1528/355 739/1527/342 +f 664/1412/1486 1479/1564/331 739/1527/342 179/1401/1471 +f 663/1418/1495 1476/1560/332 1479/1564/331 664/1412/1486 +f 662/1416/1491 1473/1557/335 1476/1560/332 663/1418/1495 +f 1482/1566/908 1483/1567/909 1486/1568/906 1485/1569/905 +f 1483/1567/909 1484/1570/912 1487/1571/910 1486/1568/906 +f 1485/1569/905 1486/1568/906 1489/1572/907 1488/1573/904 +f 1486/1568/906 1487/1571/910 1490/1574/911 1489/1572/907 +f 177/1385/1449 734/1532/914 1482/1566/908 656/1384/1446 +f 734/1532/914 735/1531/915 1483/1567/909 1482/1566/908 +f 735/1531/915 736/1530/916 1484/1570/912 1483/1567/909 +f 736/1530/916 213/1485/847 704/1487/849 1484/1570/912 +f 1484/1570/912 704/1487/849 705/1484/851 1487/1571/910 +f 1487/1571/910 705/1484/851 706/1482/872 1490/1574/911 +f 1490/1574/911 706/1482/872 212/1481/871 743/1544/917 +f 1489/1572/907 1490/1574/911 743/1544/917 744/1543/918 +f 1488/1573/904 1489/1572/907 744/1543/918 745/1542/1565 +f 658/1380/1441 1488/1573/904 745/1542/1565 175/1369/1425 +f 657/1386/1450 1485/1569/905 1488/1573/904 658/1380/1441 +f 656/1384/1446 1482/1566/908 1485/1569/905 657/1386/1450 +f 1491/1575/893 1492/1576/894 1495/1577/891 1494/1578/890 +f 1492/1576/894 1493/1579/897 1496/1580/895 1495/1577/891 +f 1494/1578/890 1495/1577/891 1498/1581/892 1497/1582/889 +f 1495/1577/891 1496/1580/895 1499/1583/896 1498/1581/892 +f 173/1353/1401 740/1547/899 1491/1575/893 650/1352/1398 +f 740/1547/899 741/1546/900 1492/1576/894 1491/1575/893 +f 741/1546/900 742/1545/901 1493/1579/897 1492/1576/894 +f 742/1545/901 210/1476/1560 698/1478/869 1493/1579/897 +f 1493/1579/897 698/1478/869 699/1480/866 1496/1580/895 +f 1496/1580/895 699/1480/866 700/1502/1562 1499/1583/896 +f 1499/1583/896 700/1502/1562 211/1034/863 725/1033/902 +f 1498/1581/892 1499/1583/896 725/1033/902 726/1032/903 +f 1497/1582/889 1498/1581/892 726/1032/903 727/1030/898 +f 652/1346/1390 1497/1582/889 727/1030/898 171/1029/1080 +f 651/1354/1402 1494/1578/890 1497/1582/889 652/1346/1390 +f 650/1352/1398 1491/1575/893 1494/1578/890 651/1354/1402 +f 117/86/1566 121/85/1567 1512/1584/1568 1509/1585/1566 +f 36/83/203 22/100/1569 1505/101/1569 1506/205/204 +f 1/29/1570 3/1/1570 1501/4/1570 1502/30/1570 +f 118/11/1571 117/86/1571 1509/1585/1571 1510/204/1571 +f 115/203/1572 114/91/1572 1507/95/1572 1508/1586/1572 +f 121/85/1567 115/203/1573 1508/1586/1573 1512/1584/1568 +f 1548/115/1574 1544/20/1575 1559/1587/1576 1558/1588/1574 +f 1517/93/1577 1534/36/1578 1584/1589/1579 1563/1590/1580 +f 1513/1591/1581 1521/87/1582 1571/1592/1583 1565/1593/1581 +f 1542/159/1584 1543/138/1585 1553/1594/1585 1557/1595/1586 +f 1533/96/1587 1518/99/1588 1564/1596/1589 1583/1597/1590 +f 1516/1598/1591 1519/98/1591 1567/1599/1591 1570/1600/1591 +f 1530/49/1592 1526/48/1593 1578/1601/1593 1580/1602/1594 +f 1541/111/1595 1542/159/1584 1557/1595/1586 1556/1603/1595 +f 1531/39/1596 1549/60/1597 1589/1604/1598 1581/1605/1596 +f 1551/55/1599 1538/157/1600 1588/1606/1600 1591/1607/1601 +f 1540/112/1602 1541/111/1603 1556/1603/1603 1555/1608/1604 +f 1550/77/1605 1532/137/1606 1582/1609/1606 1590/1610/1607 +f 1520/23/1608 1515/16/1608 1569/1611/1608 1568/1612/1608 +f 1537/139/1609 1552/72/1610 1592/1613/1611 1587/1614/1609 +f 1525/65/1612 1529/56/1613 1579/1615/1614 1577/1616/1612 +f 1549/60/1597 1528/59/1615 1576/1617/1616 1589/1604/1598 +f 1526/48/1593 1527/78/1617 1575/1618/1618 1578/1601/1593 +f 1543/138/1619 1539/89/1620 1554/1619/1621 1553/1594/1619 +f 120/14/1622 114/91/67 1517/93/69 1514/15/1622 +f 1554/1619/1623 1555/1608/1624 1556/1603/1625 1557/1595/1625 1553/1594/1625 +f 1559/1587/1626 1560/1620/1627 1561/1621/1628 1562/1622/1628 1558/1588/1628 +f 1564/1596/1629 1565/1593/1629 1566/1623/1629 1563/1590/1629 +f 1568/1612/1630 1569/1611/1631 1570/1600/1631 1567/1599/1632 +f 1565/1593/1633 1571/1592/1633 1572/1624/1633 1566/1623/1633 +f 1569/1611/1631 1573/1625/1634 1574/1626/1635 1570/1600/1631 +f 1576/1617/1636 1577/1616/1637 1578/1601/1637 1575/1618/1638 +f 1577/1616/1637 1579/1615/1639 1580/1602/1640 1578/1601/1637 +f 1582/1609/1641 1583/1597/1642 1584/1589/1643 1581/1605/1641 +f 1586/1627/1644 1587/1614/1645 1588/1606/1645 1585/1628/1646 +f 1571/1592/1647 1586/1627/1644 1585/1628/1646 1572/1624/1647 +f 1590/1610/1648 1582/1609/1649 1581/1605/1649 1589/1604/1650 +f 1583/1597/1642 1564/1596/1651 1563/1590/1651 1584/1589/1643 +f 1554/1619/1623 1574/1626/1635 1573/1625/1634 1555/1608/1624 +f 1567/1599/1632 1560/1620/1627 1559/1587/1626 1568/1612/1630 +f 1592/1613/1652 1580/1602/1640 1579/1615/1639 1591/1607/1653 +f 1575/1618/1638 1590/1610/1648 1589/1604/1650 1576/1617/1636 +f 1587/1614/1654 1592/1613/1652 1591/1607/1653 1588/1606/1654 +f 1532/137/1655 1533/96/1587 1583/1597/1590 1582/1609/1655 +f 1539/89/1620 1524/88/1656 1574/1626/1656 1554/1619/1621 +f 1522/12/1657 1514/15/1658 1566/1623/1658 1572/1624/1659 +f 1523/19/1660 1540/112/1602 1555/1608/1604 1573/1625/1660 +f 1545/97/1661 1546/166/1662 1561/1621/1662 1560/1620/1663 +f 1534/36/1578 1531/39/1664 1581/1605/1664 1584/1589/1579 +f 1515/16/1665 1523/19/1665 1573/1625/1665 1569/1611/1665 +f 1519/98/1666 1545/97/1661 1560/1620/1663 1567/1599/1666 +f 1546/166/1667 1547/116/1668 1562/1622/1669 1561/1621/1667 +f 1544/20/1575 1520/23/1670 1568/1612/1670 1559/1587/1576 +f 1547/116/1668 1548/115/1671 1558/1588/1671 1562/1622/1669 +f 1536/90/1672 1537/139/1673 1587/1614/1673 1586/1627/1674 +f 1524/88/1675 1516/1598/1675 1570/1600/1675 1574/1626/1675 +f 1552/72/1610 1530/49/1592 1580/1602/1594 1592/1613/1611 +f 1518/99/1588 1513/1591/1581 1565/1593/1581 1564/1596/1589 +f 1538/157/1676 1535/13/1677 1585/1628/1678 1588/1606/1676 +f 1528/59/1615 1525/65/1612 1577/1616/1612 1576/1617/1616 +f 1529/56/1613 1551/55/1599 1591/1607/1601 1579/1615/1614 +f 1521/87/1582 1536/90/1672 1586/1627/1674 1571/1592/1583 +f 1527/78/1617 1550/77/1605 1590/1610/1607 1575/1618/1618 +f 1514/15/1658 1517/93/1577 1563/1590/1580 1566/1623/1658 +f 1535/13/1677 1522/12/1657 1572/1624/1659 1585/1628/1678 +f 1513/1591/1679 1516/1598/1680 1594/192/1681 1593/1629/1682 +f 1516/1598/1680 1524/88/64 1595/193/1683 1594/192/1681 +f 1524/88/64 1521/87/63 1596/1630/1684 1595/193/1683 +f 1521/87/63 1513/1591/1679 1593/1629/1682 1596/1630/1684 +f 1518/99/76 1519/98/75 1598/1631/1685 1597/1632/1686 +f 1519/98/75 1516/1598/1687 1599/5/1688 1598/1631/1685 +f 1516/1598/1687 1513/1591/1689 1600/6/1690 1599/5/1688 +f 1513/1591/1689 1518/99/76 1597/1632/1686 1600/6/1690 +f 1602/1633/1691 1601/195/1691 1604/194/1691 1603/1634/1691 +f 1605/1635/1692 1606/1636/1692 1608/8/1692 1607/7/1692 +f 1593/1629/1693 1594/192/1693 1601/195/1693 1602/1633/1693 +f 1600/6/1694 1597/1632/1694 1605/1635/1694 1607/7/1694 +f 1595/193/1695 1596/1630/1695 1603/1634/1695 1604/194/1695 +f 1596/1630/1696 1593/1629/1696 1602/1633/1696 1603/1634/1696 +f 1598/1631/1697 1599/5/1697 1608/8/1697 1606/1636/1697 +f 1597/1632/1698 1598/1631/1698 1606/1636/1698 1605/1635/1698 +f 1628/1637/1699 9/196/48 1610/44/48 1609/1638/48 +f 9/196/48 1634/197/48 1611/45/48 1610/44/48 +f 1634/197/48 1640/161/147 1612/1639/48 1611/45/48 +f 1640/161/147 1628/1637/1699 1609/1638/48 1612/1639/48 +f 1638/155/135 1636/198/48 1614/80/48 1613/79/48 +f 1636/198/48 9/196/48 1615/1640/48 1614/80/48 +f 9/196/48 1628/1637/1699 1616/1641/48 1615/1640/48 +f 1628/1637/1699 1638/155/135 1613/79/48 1616/1641/48 +f 1618/1642/48 1617/47/48 1620/46/48 1619/1643/48 +f 1622/82/48 1621/81/48 1624/1644/48 1623/1645/48 +f 1615/1640/1700 1616/1641/1700 1623/1645/1700 1624/1644/1700 +f 1609/1638/1701 1610/44/1701 1617/47/1701 1618/1642/1701 +f 1616/1641/1702 1613/79/1702 1622/82/1702 1623/1645/1702 +f 1611/45/1703 1612/1639/1703 1619/1643/1703 1620/46/1703 +f 1612/1639/1704 1609/1638/1704 1618/1642/1704 1619/1643/1704 +f 1614/80/1705 1615/1640/1705 1624/1644/1705 1621/81/1705 +f 44/40/1706 49/1646/1707 1640/161/147 1625/160/146 +f 50/41/1708 44/40/1706 1625/160/146 1638/155/135 +f 49/1646/1707 10/52/1709 1628/1637/1699 1640/161/147 +f 10/52/1709 50/41/1708 1638/155/135 1628/1637/1699 +f 1629/43/1710 1632/42/1711 1630/53/1710 +f 1631/1647/1712 1629/43/1710 1630/53/1710 +f 10/52/36 49/1646/1713 1631/1647/1713 1630/53/36 +f 49/1646/1714 44/40/1714 1629/43/1714 1631/1647/1714 +f 105/25/1715 7/24/1716 1634/197/1717 1633/58/41 +f 8/1648/1718 106/201/1719 1635/57/40 1636/198/1718 +f 40/73/1720 1627/1649/1721 1638/155/135 1637/154/134 +f 113/74/1722 40/73/1720 1637/154/134 1639/54/37 +f 1626/199/1723 41/1650/1724 1641/156/138 1640/161/147 +f 1627/1649/1721 8/1648/1718 1636/198/1718 1638/155/135 +f 7/24/1716 1626/199/1723 1640/161/147 1634/197/1717 +f 41/1650/1724 112/1651/1725 1642/61/44 1641/156/138 +f 112/1651/1725 105/25/1715 1633/58/41 1642/61/44 +f 106/201/1719 113/74/1722 1639/54/37 1635/57/40 +f 1649/1652/1726 1643/76/1727 1644/1653/1728 +f 1645/1654/1729 1651/200/1730 1646/27/1731 +f 1646/27/1731 1647/26/1732 1652/1655/1732 1645/1654/1729 +f 1643/76/1727 1650/75/1733 1648/202/1733 1644/1653/1728 +f 112/1651/1734 41/1650/1735 1645/1654/1736 1652/1655/1734 +f 41/1650/1735 1626/199/1737 1651/200/1737 1645/1654/1736 +f 106/201/1738 8/1648/1739 1644/1653/1740 1648/202/1738 +f 105/25/1741 112/1651/1741 1652/1655/1741 1647/26/1741 +f 8/1648/1739 1627/1649/1742 1649/1652/1742 1644/1653/1740 +f 1627/1649/1743 40/73/52 1643/76/54 1649/1652/1743 +f 1654/70/1744 1655/1656/1745 1657/1657/1745 1656/69/1744 +f 1653/71/1746 1654/70/1744 1656/69/1744 1658/68/1746 +f 51/64/1747 45/67/1747 1656/69/1747 1657/1657/1747 +f 6/50/1748 51/64/1748 1657/1657/1748 1655/1656/1748 +f 4/51/1749 6/50/1749 1655/1656/1749 1654/70/1749 +f 48/34/1750 5/33/1750 1653/71/1750 1658/68/1750 +usemtl Light +f 52/1658/1751 39/1659/1751 24/1660/1751 +f 32/1661/1752 52/1658/1752 24/1660/1752 +usemtl Material +f 1505/1662/1753 1503/1663/1754 1506/1664/1755 +f 1506/1665/1755 1503/1663/1754 1501/1666/1756 1500/1667/1756 +f 1504/1668/1757 1503/1663/1758 1505/1662/1759 +f 1503/1663/1758 1504/1669/1757 1502/1670/1760 1501/1666/1760 +f 1507/1671/1761 1511/1672/1761 1512/1673/1761 1508/1674/1761 +f 1511/1672/1762 1510/1675/1762 1509/1676/1762 1512/1673/1762 From e772042baf50129a6da8e7c1ff5669061300d879 Mon Sep 17 00:00:00 2001 From: Curtis Whitley Date: Tue, 25 Jun 2024 21:56:03 -0400 Subject: [PATCH 36/49] added OSCLI/RST demo --- video/pingo/assets/oscli_rst.bas | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 video/pingo/assets/oscli_rst.bas diff --git a/video/pingo/assets/oscli_rst.bas b/video/pingo/assets/oscli_rst.bas new file mode 100644 index 00000000..8c6c7398 --- /dev/null +++ b/video/pingo/assets/oscli_rst.bas @@ -0,0 +1,23 @@ +10 REM oscli_rst.bas +20 REM Sample showing loading and sending bulk data to VDP. +30 REM This app will list itself to the screen. +40 REM On Linux, it only has LF, not CRLF, so the listing shows that. +100 DIM text% 750: REM # of bytes for load area +105 PRINT "Text load area at &"; ~text% +110 DIM code% 20: REM # of bytes for assembler area +115 PRINT "Assembler area at &"; ~code% +120 OSCLI "LOAD oscli_rst.bas " + STR$(text%) +130 size%=703: REM # of characters in this program +160 PROC_assemble_rst +170 CALL code% +190 END +50000 DEF PROC_assemble_rst +50010 P%=code% +50020 [OPT 2 +50030 LD BC,size% +50040 LD HL,text% +50050 RST.LIL &18 +50060 RET +50070 ] +50080 REM PRINT "total code: ";P%-code% +50090 ENDPROC From a774f7394de1d5786a59018a5fb3c869fd647d5e Mon Sep 17 00:00:00 2001 From: Curtis Whitley Date: Wed, 26 Jun 2024 06:01:52 -0400 Subject: [PATCH 37/49] started obj2vdu app --- video/pingo/assets/obj2vdu.c | 136 +++++++++++++++++++++++++++++++++++ 1 file changed, 136 insertions(+) create mode 100644 video/pingo/assets/obj2vdu.c diff --git a/video/pingo/assets/obj2vdu.c b/video/pingo/assets/obj2vdu.c new file mode 100644 index 00000000..96e9dcc1 --- /dev/null +++ b/video/pingo/assets/obj2vdu.c @@ -0,0 +1,136 @@ +// File: obj2vdu.c +// Purpose: Convert OBJ files to Agon VDU commands for Pingo 3D +// By: Curtis Whitley +// +// Apache License +// +// The following OBJ lines are used; all others are ignored. +// +// # +// o +// g +// v +// vt +// f [ ...] + +#include +#include +#include +#include +#include + +#define MAX_VERTEXES 100000 +#define MAX_TEX_COORDS 100000 + +typedef struct { + double x; + double y; + double z; +} Vertex; + +typedef struct { + double u; + double v; +} TexCoord; + +int num_files; +int num_vertexes; +int num_tex_coords; +Vertex vertexes[MAX_VERTEXES]; +TexCoord tex_coords[MAX_TEX_COORDS]; + +int convert(FILE* fin, FILE* fout) { + char line[200]; + char *cmd, *tkn; + double x, y, z, u, v, a, max_coord; + int iv, ivt, ivn; + num_vertexes = 0; + num_tex_coords = 0; + max_coord = -99999999.0; + + while (fgets(line, sizeof(line)-1, fin)) { + cmd = strtok(line, " "); + if (!strcasecmp(cmd, "o")) { + tkn = strtok(NULL, "\r\n"); + printf("Object: %s\n", tkn); + } else if (!strcasecmp(cmd, "g")) { + tkn = strtok(NULL, "\r\n"); + printf("Group: %s\n", tkn); + } else if (!strcasecmp(cmd, "v")) { + tkn = strtok(NULL, " "); + x = atof(tkn); + tkn = strtok(NULL, " "); + y = atof(tkn); + tkn = strtok(NULL, " "); + z = atof(tkn); + if (num_vertexes < MAX_VERTEXES) { + Vertex* pv = &vertexes[num_vertexes++]; + pv->x = x; + pv->y = y; + pv->z = z; + a = fabs(x); + if (a > max_coord) max_coord = a; + a = fabs(y); + if (a > max_coord) max_coord = a; + a = fabs(z); + if (a > max_coord) max_coord = a; + } else { + printf("Too many vertexes!\n"); + return 3; + } + } else if (!strcasecmp(cmd, "vt")) { + tkn = strtok(NULL, " "); + u = atof(tkn); + tkn = strtok(NULL, " "); + v = atof(tkn); + if (num_tex_coords < MAX_TEX_COORDS) { + TexCoord* pt = &tex_coords[num_tex_coords++]; + pt->u = u; + pt->v = v; + } else { + printf("Too many texture coordinates!\n"); + return 4; + } + } else if (!strcasecmp(cmd, "f")) { + + } + } +} + +int main(int argc, const char* argv[]) { + printf("OBJ-to-VDU File Convertor V0.1\n"); + if (argc < 2) { + printf("Usage: obj2vdu file1 [file2, ...]\n"); + return 0; + } + + for (int i = 1; i < argc; i++) { + FILE* fin = fopen(argv[i], "r"); + if (fin) { + char oname[128]; + int len = strlen(argv[i]); + strcpy(oname, argv[i]); + if (len >= 4 && !strcasecmp(&oname[len-4], ".obj")) { + strcpy(&oname[len-4], ".vdu"); + } else { + strcat(oname, ".vdu"); + } + FILE* fout = fopen(oname, "w"); + if (fout) { + printf("Converting '%s' to '%s'\n", argv[i], oname); + int rc = convert(fin, fout); + fclose(fout); + fclose(fin); + return rc; + } else { + printf("Cannot open '%s'\n", oname); + fclose(fin); + return 2; + } + } else { + printf("Cannot open '%s'\n", argv[i]); + return 1; + } + + } +} \ No newline at end of file From 643bb27e7835515c8fbebe862b039a83c2fe81d6 Mon Sep 17 00:00:00 2001 From: Curtis Whitley Date: Wed, 26 Jun 2024 09:24:26 -0400 Subject: [PATCH 38/49] interim checkin --- video/pingo/assets/obj2vdu.c | 154 +++++++++++++++++++++++++++++++++-- 1 file changed, 146 insertions(+), 8 deletions(-) diff --git a/video/pingo/assets/obj2vdu.c b/video/pingo/assets/obj2vdu.c index 96e9dcc1..6750c19d 100644 --- a/video/pingo/assets/obj2vdu.c +++ b/video/pingo/assets/obj2vdu.c @@ -6,21 +6,25 @@ // // The following OBJ lines are used; all others are ignored. // -// # // o // g // v // vt // f [ ...] +// usemtl #include #include #include #include #include +#include +#include #define MAX_VERTEXES 100000 #define MAX_TEX_COORDS 100000 +#define MAX_FACES 100000 +#define MAX_POLY_PTS 8 typedef struct { double x; @@ -33,30 +37,140 @@ typedef struct { double v; } TexCoord; +typedef struct { + int ivertex; + int itexture; + int inormal; +} PolyPoint; + +typedef struct { + int num_pts; + PolyPoint points[MAX_POLY_PTS]; +} Face; + int num_files; int num_vertexes; int num_tex_coords; +int num_faces; Vertex vertexes[MAX_VERTEXES]; TexCoord tex_coords[MAX_TEX_COORDS]; +Face faces[MAX_FACES]; +char line[200]; +char obj_name[50]; +char grp_name[50]; +char *cmd, *tkn; +double x, y, z, u, v, a, max_coord; +int iv, ivt, ivn, line_nbr; +bool in_vertexes; +bool in_tex_coords; +bool in_faces; + +void extract_point(const char* pt_info, Face* face) { + PolyPoint *pt = &face->points[face->num_pts++]; + pt->ivertex = 0; + pt->itexture = 0; + pt->inormal = 0; + while (isdigit(*pt_info)) { + pt->ivertex = (pt->ivertex * 10) + (*pt_info - '0'); + pt_info++; + } + pt_info++; + while (isdigit(*pt_info)) { + pt->itexture = (pt->itexture * 10) + (*pt_info - '0'); + pt_info++; + } + pt_info++; + while (isdigit(*pt_info)) { + pt->inormal = (pt->inormal * 10) + (*pt_info - '0'); + pt_info++; + } +} + +void clean_name(char* name) { + while (*name) { + if (!(isalnum(*name) || + (*name == '-') || + (*name == '_') || + (*name == '.'))) { + *name = '_'; + } + name++; + } +} + +void note_vertexes() { + if (in_vertexes) { + printf("[%06i] End of %i vertexes\n", line_nbr-1, num_vertexes); + in_vertexes = false; + } +} + +void note_tex_coords() { + if (in_tex_coords) { + printf("[%06i] End of %i texture coordinates\n", line_nbr-1, num_tex_coords); + in_tex_coords = false; + } +} + +void note_faces() { + if (in_faces) { + printf("[%06i] End of %i faces\n", line_nbr-1, num_faces); + in_faces = false; + } +} + +int write_object(FILE* fout) { + note_vertexes(); + note_tex_coords(); + note_faces(); + + num_vertexes = 0; + num_tex_coords = 0; + num_faces = 0; + max_coord = -99999999.0; + *obj_name = 0; + *grp_name = 0; +} int convert(FILE* fin, FILE* fout) { - char line[200]; - char *cmd, *tkn; - double x, y, z, u, v, a, max_coord; - int iv, ivt, ivn; + int rc; + in_vertexes = false; + in_tex_coords = false; + in_faces = false; num_vertexes = 0; num_tex_coords = 0; + num_faces = 0; max_coord = -99999999.0; + *obj_name = 0; + *grp_name = 0; + line_nbr = 0; while (fgets(line, sizeof(line)-1, fin)) { + line_nbr++; + int len = strlen(line); + while (len && isspace(line[len-1])) { + line[--len] = 0; + } cmd = strtok(line, " "); if (!strcasecmp(cmd, "o")) { + rc = write_object(fout); + if (rc) return rc; tkn = strtok(NULL, "\r\n"); - printf("Object: %s\n", tkn); + strcpy(obj_name, tkn); + clean_name(obj_name); + printf("[%06i] Object: %s => %s\n", line_nbr, tkn, obj_name); } else if (!strcasecmp(cmd, "g")) { + note_vertexes(); + note_tex_coords(); + note_faces(); tkn = strtok(NULL, "\r\n"); - printf("Group: %s\n", tkn); + strcpy(grp_name, tkn); + clean_name(grp_name); + printf("[%06i] Group: %s => %s\n", line_nbr, tkn, grp_name); } else if (!strcasecmp(cmd, "v")) { + if (!num_vertexes) { + printf("[%06i] Start of vertexes\n", line_nbr); + } tkn = strtok(NULL, " "); x = atof(tkn); tkn = strtok(NULL, " "); @@ -74,11 +188,16 @@ int convert(FILE* fin, FILE* fout) { if (a > max_coord) max_coord = a; a = fabs(z); if (a > max_coord) max_coord = a; + in_vertexes = true; } else { printf("Too many vertexes!\n"); return 3; } } else if (!strcasecmp(cmd, "vt")) { + note_vertexes(); + if (!num_tex_coords) { + printf("[%06i] Start of texture coordinates\n", line_nbr); + } tkn = strtok(NULL, " "); u = atof(tkn); tkn = strtok(NULL, " "); @@ -87,14 +206,33 @@ int convert(FILE* fin, FILE* fout) { TexCoord* pt = &tex_coords[num_tex_coords++]; pt->u = u; pt->v = v; + in_tex_coords = true; } else { printf("Too many texture coordinates!\n"); return 4; } } else if (!strcasecmp(cmd, "f")) { - + note_vertexes(); + note_tex_coords(); + if (!num_faces) { + printf("[%06i] Start of faces\n", line_nbr); + } + Face* face = &faces[num_faces++]; + face->num_pts = 0; + while (tkn = strtok(NULL, " ")) { + char pt_info[50]; + strcpy(pt_info, tkn); + extract_point(tkn, face); + } + in_faces = true; + } else if (!strcasecmp(cmd, "usemtl")) { + } else { + note_vertexes(); + note_tex_coords(); + note_faces(); } } + write_object(fout); } int main(int argc, const char* argv[]) { From e72e86c8d1c6ffaec1da5dd1e560b0e6e2c3db78 Mon Sep 17 00:00:00 2001 From: Curtis Whitley Date: Wed, 26 Jun 2024 11:26:30 -0400 Subject: [PATCH 39/49] first checkin of conversion app --- video/pingo/assets/Fighter_Aircraft.vdu | Bin 0 -> 36126 bytes video/pingo/assets/obj2vdu | Bin 0 -> 21816 bytes video/pingo/assets/obj2vdu.c | 91 ++++++++++++++++++++++++ 3 files changed, 91 insertions(+) create mode 100644 video/pingo/assets/Fighter_Aircraft.vdu create mode 100755 video/pingo/assets/obj2vdu diff --git a/video/pingo/assets/Fighter_Aircraft.vdu b/video/pingo/assets/Fighter_Aircraft.vdu new file mode 100644 index 0000000000000000000000000000000000000000..e86cfe04e61f4668000e977f71da97c127da2873 GIT binary patch literal 36126 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 O20{o literal 0 HcmV?d00001 diff --git a/video/pingo/assets/obj2vdu b/video/pingo/assets/obj2vdu new file mode 100755 index 0000000000000000000000000000000000000000..5d23dc6372742e76db0173c3ee9446f8ab5f13b0 GIT binary patch literal 21816 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 literal 0 HcmV?d00001 diff --git a/video/pingo/assets/obj2vdu.c b/video/pingo/assets/obj2vdu.c index 6750c19d..a9f47f17 100644 --- a/video/pingo/assets/obj2vdu.c +++ b/video/pingo/assets/obj2vdu.c @@ -119,17 +119,108 @@ void note_faces() { } } +void write_ivalue(FILE* fout, int16_t value) { + fwrite(&value, sizeof(value), 1, fout); +} + +void write_uvalue(FILE* fout, uint16_t value) { + fwrite(&value, sizeof(value), 1, fout); +} + +void write_vertex_coord(FILE* fout, double coord) { + int16_t value = (int16_t)(value*32767.0/max_coord); + write_ivalue(fout, value); +} + +void write_tex_coord(FILE* fout, double coord) { + uint16_t value = (uint16_t)(value*65535.0); + write_uvalue(fout, value); +} + int write_object(FILE* fout) { + long start; + int face_pts; + int pt_inc; + int ipt0, ipt1, ipt2; + int cnt; + + if (!num_vertexes && !num_tex_coords && !num_faces) return 0; + note_vertexes(); note_tex_coords(); note_faces(); + start = ftell(fout); + printf("Vertexes start at file position %lu\n", start); + int16_t zero = 0; + write_ivalue(fout, zero); // dummy x + write_ivalue(fout, zero); // dummy y + write_ivalue(fout, zero); // dummy z + for (int i = 0; i < num_vertexes; i++) { + Vertex* vertex = &vertexes[i]; + write_vertex_coord(fout, vertex->x); + write_vertex_coord(fout, vertex->y); + write_vertex_coord(fout, vertex->z); + } + printf("Size of %i vertexes is %lu bytes\n", + num_vertexes+1, ftell(fout)-start); + + start = ftell(fout); + printf("Texture coordinates start at file position %lu\n", ftell(fout)); + write_uvalue(fout, zero); // dummy u + write_uvalue(fout, zero); // dummy v + for (int i = 0; i < num_tex_coords; i++) { + TexCoord* t = &tex_coords[i]; + write_tex_coord(fout, t->u); + write_tex_coord(fout, t->v); + } + printf("Size of %i texture coordinates is %lu bytes\n", + num_tex_coords+1, ftell(fout)-start); + + start = ftell(fout); + printf("Vertex indexes start at file position %lu\n", ftell(fout)); + cnt = 0; + for (int i = 0; i < num_faces; i++) { + Face* face = &faces[i]; + face_pts = face->num_pts; + pt_inc = 1; + ipt0 = 0; + while (face_pts >= 3) { + ipt1 = ipt0 + pt_inc; + ipt2 = ipt1 + pt_inc; + if (ipt2 >= face->num_pts) { + ipt2 = 0; + } + + PolyPoint* pt = &face->points[ipt0]; + write_uvalue(fout, (uint16_t)(pt->ivertex)); + + pt = &face->points[ipt1]; + write_uvalue(fout, (uint16_t)(pt->ivertex)); + + pt = &face->points[ipt2]; + write_uvalue(fout, (uint16_t)(pt->ivertex)); + + cnt++; + ipt0 = ipt2; + face_pts--; + if (!ipt0) { + pt_inc *= 2; + } + } + } + printf("Size of %i vertex indexes is %lu bytes\n", + cnt, ftell(fout)-start); + + printf("Total file size is %lu bytes\n", ftell(fout)); + num_vertexes = 0; num_tex_coords = 0; num_faces = 0; max_coord = -99999999.0; *obj_name = 0; *grp_name = 0; + return 0; } int convert(FILE* fin, FILE* fout) { From 8c17ae0259c370c7d70261eeb9ad84f079c821f1 Mon Sep 17 00:00:00 2001 From: Curtis Whitley Date: Wed, 26 Jun 2024 20:13:09 -0400 Subject: [PATCH 40/49] working on orientation sample --- video/pingo/assets/Fighter_Aircraft.vdu | Bin 36126 -> 55590 bytes video/pingo/assets/obj2vdu | Bin 21816 -> 21856 bytes video/pingo/assets/obj2vdu.c | 99 ++++++++++++++++++++++-- video/pingo/assets/orientation.bas | 97 +++++++++++++++++++++++ 4 files changed, 188 insertions(+), 8 deletions(-) create mode 100644 video/pingo/assets/orientation.bas diff --git a/video/pingo/assets/Fighter_Aircraft.vdu b/video/pingo/assets/Fighter_Aircraft.vdu index e86cfe04e61f4668000e977f71da97c127da2873..1e79177e916fdd2cc77ca91931150ab2a68407f3 100644 GIT binary patch delta 19627 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 delta 9 QcmZ3siFw{ErVVnv02Lbp@c;k- diff --git a/video/pingo/assets/obj2vdu b/video/pingo/assets/obj2vdu index 5d23dc6372742e76db0173c3ee9446f8ab5f13b0..0573bd62dfe83bdae4f3b304c4bf744d041e4d90 100755 GIT binary patch delta 4504 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 diff --git a/video/pingo/assets/obj2vdu.c b/video/pingo/assets/obj2vdu.c index a9f47f17..af0eede8 100644 --- a/video/pingo/assets/obj2vdu.c +++ b/video/pingo/assets/obj2vdu.c @@ -64,6 +64,11 @@ int iv, ivt, ivn, line_nbr; bool in_vertexes; bool in_tex_coords; bool in_faces; +bool reverse_coords; +bool dump_vertexes; +bool dump_tex_coords; +bool dump_vertex_indexes; +bool dump_tex_indexes; void extract_point(const char* pt_info, Face* face) { PolyPoint *pt = &face->points[face->num_pts++]; @@ -195,11 +200,17 @@ int write_object(FILE* fout) { PolyPoint* pt = &face->points[ipt0]; write_uvalue(fout, (uint16_t)(pt->ivertex)); - pt = &face->points[ipt1]; - write_uvalue(fout, (uint16_t)(pt->ivertex)); - - pt = &face->points[ipt2]; - write_uvalue(fout, (uint16_t)(pt->ivertex)); + if (reverse_coords) { + pt = &face->points[ipt1]; + write_uvalue(fout, (uint16_t)(pt->ivertex)); + pt = &face->points[ipt2]; + write_uvalue(fout, (uint16_t)(pt->ivertex)); + } else { + pt = &face->points[ipt2]; + write_uvalue(fout, (uint16_t)(pt->ivertex)); + pt = &face->points[ipt1]; + write_uvalue(fout, (uint16_t)(pt->ivertex)); + } cnt++; ipt0 = ipt2; @@ -212,6 +223,47 @@ int write_object(FILE* fout) { printf("Size of %i vertex indexes is %lu bytes\n", cnt, ftell(fout)-start); + start = ftell(fout); + printf("Texture indexes start at file position %lu\n", ftell(fout)); + cnt = 0; + for (int i = 0; i < num_faces; i++) { + Face* face = &faces[i]; + face_pts = face->num_pts; + pt_inc = 1; + ipt0 = 0; + while (face_pts >= 3) { + ipt1 = ipt0 + pt_inc; + ipt2 = ipt1 + pt_inc; + if (ipt2 >= face->num_pts) { + ipt2 = 0; + } + + PolyPoint* pt = &face->points[ipt0]; + write_uvalue(fout, (uint16_t)(pt->itexture)); + + if (reverse_coords) { + pt = &face->points[ipt1]; + write_uvalue(fout, (uint16_t)(pt->itexture)); + pt = &face->points[ipt2]; + write_uvalue(fout, (uint16_t)(pt->itexture)); + } else { + pt = &face->points[ipt2]; + write_uvalue(fout, (uint16_t)(pt->itexture)); + pt = &face->points[ipt1]; + write_uvalue(fout, (uint16_t)(pt->itexture)); + } + + cnt++; + ipt0 = ipt2; + face_pts--; + if (!ipt0) { + pt_inc *= 2; + } + } + } + printf("Size of %i texture indexes is %lu bytes\n", + cnt, ftell(fout)-start); + printf("Total file size is %lu bytes\n", ftell(fout)); num_vertexes = 0; @@ -327,13 +379,45 @@ int convert(FILE* fin, FILE* fout) { } int main(int argc, const char* argv[]) { + int iarg = 1; + printf("OBJ-to-VDU File Convertor V0.1\n"); if (argc < 2) { - printf("Usage: obj2vdu file1 [file2, ...]\n"); + printf("Usage: [-r] [-vc] [-tc] [-vi] [-ti] obj2vdu file1 [file2, ...]\n"); + printf(" '-r' reverse coordinate winding\n"); + printf(" '-vc' dump vertex coordinates\n"); + printf(" '-tc' dump texture coordinates\n"); + printf(" '-vi' dump vertex indexes\n"); + printf(" '-ti' dump texture indexes\n"); return 0; } - for (int i = 1; i < argc; i++) { + if (!strcasecmp(argv[iarg], "-r")) { + reverse_coords = true; + iarg++; + } + + if (!strcasecmp(argv[iarg], "-vc")) { + dump_vertexes = true; + iarg++; + } + + if (!strcasecmp(argv[iarg], "-tc")) { + dump_tex_coords = true; + iarg++; + } + + if (!strcasecmp(argv[iarg], "-vi")) { + dump_vertex_indexes = true; + iarg++; + } + + if (!strcasecmp(argv[iarg], "-ti")) { + dump_tex_indexes = true; + iarg++; + } + + for (int i = iarg; i < argc; i++) { FILE* fin = fopen(argv[i], "r"); if (fin) { char oname[128]; @@ -360,6 +444,5 @@ int main(int argc, const char* argv[]) { printf("Cannot open '%s'\n", argv[i]); return 1; } - } } \ No newline at end of file diff --git a/video/pingo/assets/orientation.bas b/video/pingo/assets/orientation.bas new file mode 100644 index 00000000..df3f898f --- /dev/null +++ b/video/pingo/assets/orientation.bas @@ -0,0 +1,97 @@ + 10 REM orientation.bas + 20 REM Sample app to show Pingo 3D axes on Agon + 30 REM + 40 REM -- VERTICES -- + 50 arrow_vertices%=14 + 60 DATA -1,0.1,-0.1, 0.5,0.1,-0.1 + 70 DATA 0.5,0.2,-0.1, 1.0,0.0,-0.1 + 80 DATA 0.5,-0.2,-0.1, 0.5,-0.1,-0.1 + 90 DATA -1.0,-0.1,-0.1 + 100 DATA -1,0.1,0.1, 0.5,0.1,0.1 + 110 DATA 0.5,0.2,0.1, 1.0,0.0,0.1 + 120 DATA 0.5,-0.2,0.1, 0.5,-0.1,0.1 + 130 DATA -1.0,-0.1,0.1 + 4380 REM + 4390 REM -- VERTEX INDEXES -- + 4400 DATA 0,1,5, 5,6,0, 1,2,3, 3,4,5, 5,1,3 + 4410 DATA 7,8,12, 12,13,7, 8,9,10, 10,11,12, 12,8,10 + 6130 REM + 6140 REM -- CODE -- + 6150 PRINT "Reading vertices" + 6160 total_coords%=arrow_vertices%*3 + 6165 total_indexes%=10*3 + 6170 max_abs=-99999 + 6180 DIM vertices(total_coords%) + 6190 FOR i%=0 TO total_coords%-1 + 6200 READ coord + 6210 vertices(i%)=coord + 6220 a=ABS(coord) + 6230 IF a>max_abs THEN max_abs=a + 6240 NEXT i% + 6250 factor=32767.0/max_abs + 6260 PRINT "Max absolute value = ";max_abs + 6270 PRINT "Factor = ";factor + 6280 sid%=100: mid%=1: oid%=1: bmid1%=101: bmid2%=102 + 6290 PRINT "Creating control structure" + 6300 scene_width%=96: scene_height%=96 + 6310 VDU 23,0, &A0, sid%; &49, 0, scene_width%; scene_height%; : REM Create Control Structure + 6320 f=32767.0/256.0 + 6330 distx=0*f: disty=2*f: distz=-20*f + 6340 VDU 23,0, &A0, sid%; &49, 25, distx; disty; distz; : REM Set Camera XYZ Translation Distances + 6350 pi2=PI*2.0: f=32767.0/pi2 + 6360 anglex=-0.4*f + 6370 VDU 23,0, &A0, sid%; &49, 18, anglex; : REM Set Camera X Rotation Angle + 6380 PRINT "Sending vertices using factor ";factor + 6390 VDU 23,0, &A0, sid%; &49, 1, mid%; arrow_vertices%; : REM Define Mesh Vertices + 6400 FOR i%=0 TO total_coords%-1 + 6410 val%=vertices(i%)*factor + 6420 VDU val%; + 6430 T%=TIME + 6440 IF TIME-T%<1 GOTO 6440 + 6450 NEXT i% + 6460 PRINT "Reading and sending vertex indexes" + 6470 VDU 23,0, &A0, sid%; &49, 2, mid%; total_indexes%; : REM Set Mesh Vertex Indexes + 6480 FOR i%=0 TO total_indexes%-1 + 6490 READ val% + 6500 VDU val%; + 6510 T%=TIME + 6520 IF TIME-T%<1 GOTO 6520 + 6530 NEXT i% + 6540 PRINT "Sending texture coordinate indexes" + 6545 RESTORE 4400 + 6550 VDU 23,0, &A0, sid%; &49, 3, mid%; 1; 32768; 32768; : REM Define Texture Coordinates + 6560 VDU 23,0, &A0, sid%; &49, 4, mid%; total_indexes%; : REM Set Texture Coordinate Indexes + 6570 FOR i%=0 TO total_indexes%-1 + 6575 READ val% + 6580 VDU val%; + 6590 NEXT i% + 6600 PRINT "Creating texture bitmap" + 6610 VDU 23, 27, 0, bmid1%: REM Create a bitmap for a texture + 6620 PRINT "Setting texture pixel" + 6630 VDU 23, 27, 1, 1; 1; &55, &AA, &FF, &C0 : REM Set a pixel in the bitmap + 6640 PRINT "Create 3D object" + 6650 VDU 23,0, &A0, sid%; &49, 5, oid%; mid%; bmid1%+64000; : REM Create Object + 6660 PRINT "Scale object" + 6670 scale=6.0*256.0 + 6680 VDU 23, 0, &A0, sid%; &49, 9, oid%; scale; scale; scale; : REM Set Object XYZ Scale Factors + 6690 PRINT "Create target bitmap" + 6700 VDU 23, 27, 0, bmid2% : REM Select output bitmap + 6710 VDU 23, 27, 2, scene_width%; scene_height%; &0000; &00C0; : REM Create solid color bitmap + 6720 PRINT "Render 3D object" + 6730 VDU 23, 0, &C3: REM Flip buffer + 6740 rotatex=0.0: rotatey=0.0: rotatez=0.0 + 6750 incx=PI/16.0: incy=PI/32.0: incz=PI/64.0 + 6760 factor=32767.0/pi2 + 6770 VDU 22, 136: REM 320x240x64 + 6780 VDU 23, 0, &C0, 0: REM Normal coordinates + 6790 CLG + 6800 VDU 23, 0, &A0, sid%; &49, 38, bmid2%+64000; : REM Render To Bitmap + 6810 VDU 23, 27, 3, 50; 50; : REM Display output bitmap + 6820 VDU 23, 0, &C3: REM Flip buffer + 6830 *FX 19 + 6840 rotatex=rotatex+incx: IF rotatex>=pi2 THEN rotatex=rotatex-pi2 + 6850 rotatey=rotatey+incy: IF rotatey>=pi2 THEN rotatey=rotatey-pi2 + 6860 rotatez=rotatez+incz: IF rotatez>=pi2 THEN rotatez=rotatez-pi2 + 6870 rx=rotatex*factor: ry=rotatey*factor: rz=rotatez*factor + 6880 VDU 23, 0, &A0, sid%; &49, 13, oid%; rx; ry; rz; : REM Set Object XYZ Rotation Angles + 6890 GOTO 6790 From 5d1eb0560a7da863e0bb7dea9b9ca4120c071793 Mon Sep 17 00:00:00 2001 From: Curtis Whitley Date: Thu, 27 Jun 2024 10:39:19 -0400 Subject: [PATCH 41/49] some vertex fixes --- video/pingo/assets/orientation.bas | 31 ++++++++++++++++++++---------- 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/video/pingo/assets/orientation.bas b/video/pingo/assets/orientation.bas index df3f898f..6385bbff 100644 --- a/video/pingo/assets/orientation.bas +++ b/video/pingo/assets/orientation.bas @@ -14,12 +14,16 @@ 4380 REM 4390 REM -- VERTEX INDEXES -- 4400 DATA 0,1,5, 5,6,0, 1,2,3, 3,4,5, 5,1,3 - 4410 DATA 7,8,12, 12,13,7, 8,9,10, 10,11,12, 12,8,10 + 4410 DATA 8,7,12, 12,7,13, 9,8,10, 10,12,11, 12,10,8 + 4420 DATA 13,7,6, 7,0,6, 7,8,0, 0,8,1 + 4430 DATA 13,12,6, 6,12,5, 8,9,2, 8,2,1 + 4440 DATA 11,12,5, 11,5,4, 2,9,10, 3,2,10 + 4450 DATA 3,4,11, 3,11,10 6130 REM 6140 REM -- CODE -- 6150 PRINT "Reading vertices" 6160 total_coords%=arrow_vertices%*3 - 6165 total_indexes%=10*3 + 6165 total_indexes%=24*3 6170 max_abs=-99999 6180 DIM vertices(total_coords%) 6190 FOR i%=0 TO total_coords%-1 @@ -36,7 +40,7 @@ 6300 scene_width%=96: scene_height%=96 6310 VDU 23,0, &A0, sid%; &49, 0, scene_width%; scene_height%; : REM Create Control Structure 6320 f=32767.0/256.0 - 6330 distx=0*f: disty=2*f: distz=-20*f + 6330 distx=0.6*f: disty=2*f: distz=-20*f 6340 VDU 23,0, &A0, sid%; &49, 25, distx; disty; distz; : REM Set Camera XYZ Translation Distances 6350 pi2=PI*2.0: f=32767.0/pi2 6360 anglex=-0.4*f @@ -49,7 +53,7 @@ 6430 T%=TIME 6440 IF TIME-T%<1 GOTO 6440 6450 NEXT i% - 6460 PRINT "Reading and sending vertex indexes" + 6460 PRINT "Sending vertex indexes" 6470 VDU 23,0, &A0, sid%; &49, 2, mid%; total_indexes%; : REM Set Mesh Vertex Indexes 6480 FOR i%=0 TO total_indexes%-1 6490 READ val% @@ -57,10 +61,15 @@ 6510 T%=TIME 6520 IF TIME-T%<1 GOTO 6520 6530 NEXT i% - 6540 PRINT "Sending texture coordinate indexes" - 6545 RESTORE 4400 - 6550 VDU 23,0, &A0, sid%; &49, 3, mid%; 1; 32768; 32768; : REM Define Texture Coordinates - 6560 VDU 23,0, &A0, sid%; &49, 4, mid%; total_indexes%; : REM Set Texture Coordinate Indexes + 6540 PRINT "Sending texture coordinates" + 6550 VDU 23,0, &A0, sid%; &49, 3, mid%; arrow_vertices%; : REM Define Texture Coordinates + 6552 FOR i%=0 TO arrow_vertices%-1 + 6554 VDU 0; + 6556 VDU 0; + 6558 NEXT i% + 6560 PRINT "Sending texture coordinate indexes" + 6562 RESTORE 4400 + 6564 VDU 23,0, &A0, sid%; &49, 4, mid%; total_indexes%; : REM Set Texture Coordinate Indexes 6570 FOR i%=0 TO total_indexes%-1 6575 READ val% 6580 VDU val%; @@ -68,7 +77,9 @@ 6600 PRINT "Creating texture bitmap" 6610 VDU 23, 27, 0, bmid1%: REM Create a bitmap for a texture 6620 PRINT "Setting texture pixel" - 6630 VDU 23, 27, 1, 1; 1; &55, &AA, &FF, &C0 : REM Set a pixel in the bitmap + 6630 VDU 23, 27, 1, 3; 1; &FF, &00, &00, &C0 : REM Set a RED pixel in the bitmap + 6632 VDU &00, &FF, &00, &C0 : REM Set a GREEN pixel in the bitmap + 6634 VDU &00, &00, &FF, &C0 : REM Set a BLUE pixel in the bitmap 6640 PRINT "Create 3D object" 6650 VDU 23,0, &A0, sid%; &49, 5, oid%; mid%; bmid1%+64000; : REM Create Object 6660 PRINT "Scale object" @@ -80,7 +91,7 @@ 6720 PRINT "Render 3D object" 6730 VDU 23, 0, &C3: REM Flip buffer 6740 rotatex=0.0: rotatey=0.0: rotatez=0.0 - 6750 incx=PI/16.0: incy=PI/32.0: incz=PI/64.0 + 6750 incx=PI/155.0: incy=PI/143.0: incz=PI/137.0 6760 factor=32767.0/pi2 6770 VDU 22, 136: REM 320x240x64 6780 VDU 23, 0, &C0, 0: REM Normal coordinates From a6dc931a79389c6a670324f88976f754172a5ecf Mon Sep 17 00:00:00 2001 From: Curtis Whitley Date: Thu, 27 Jun 2024 11:18:20 -0400 Subject: [PATCH 42/49] adding more objects --- video/pingo/assets/orientation.bas | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/video/pingo/assets/orientation.bas b/video/pingo/assets/orientation.bas index 6385bbff..40a4d58d 100644 --- a/video/pingo/assets/orientation.bas +++ b/video/pingo/assets/orientation.bas @@ -16,9 +16,9 @@ 4400 DATA 0,1,5, 5,6,0, 1,2,3, 3,4,5, 5,1,3 4410 DATA 8,7,12, 12,7,13, 9,8,10, 10,12,11, 12,10,8 4420 DATA 13,7,6, 7,0,6, 7,8,0, 0,8,1 - 4430 DATA 13,12,6, 6,12,5, 8,9,2, 8,2,1 + 4430 DATA 13,6,12, 6,5,12, 8,9,2, 8,2,1 4440 DATA 11,12,5, 11,5,4, 2,9,10, 3,2,10 - 4450 DATA 3,4,11, 3,11,10 + 4450 DATA 3,11,4, 3,10,11 6130 REM 6140 REM -- CODE -- 6150 PRINT "Reading vertices" @@ -35,12 +35,13 @@ 6250 factor=32767.0/max_abs 6260 PRINT "Max absolute value = ";max_abs 6270 PRINT "Factor = ";factor - 6280 sid%=100: mid%=1: oid%=1: bmid1%=101: bmid2%=102 + 6280 sid%=100: mid%=1: oid1%=1: oid2%=2: oid3%=3 + 6282 bmid1%=101: bmid2%=102 6290 PRINT "Creating control structure" - 6300 scene_width%=96: scene_height%=96 + 6300 scene_width%=200: scene_height%=200 6310 VDU 23,0, &A0, sid%; &49, 0, scene_width%; scene_height%; : REM Create Control Structure 6320 f=32767.0/256.0 - 6330 distx=0.6*f: disty=2*f: distz=-20*f + 6330 distx=0.6*f: disty=2*f: distz=-25*f 6340 VDU 23,0, &A0, sid%; &49, 25, distx; disty; distz; : REM Set Camera XYZ Translation Distances 6350 pi2=PI*2.0: f=32767.0/pi2 6360 anglex=-0.4*f @@ -81,10 +82,14 @@ 6632 VDU &00, &FF, &00, &C0 : REM Set a GREEN pixel in the bitmap 6634 VDU &00, &00, &FF, &C0 : REM Set a BLUE pixel in the bitmap 6640 PRINT "Create 3D object" - 6650 VDU 23,0, &A0, sid%; &49, 5, oid%; mid%; bmid1%+64000; : REM Create Object + 6650 VDU 23,0, &A0, sid%; &49, 5, oid1%; mid%; bmid1%+64000; : REM Create Object + 6652 VDU 23,0, &A0, sid%; &49, 5, oid2%; mid%; bmid1%+64000; : REM Create Object + 6654 VDU 23,0, &A0, sid%; &49, 5, oid3%; mid%; bmid1%+64000; : REM Create Object 6660 PRINT "Scale object" - 6670 scale=6.0*256.0 - 6680 VDU 23, 0, &A0, sid%; &49, 9, oid%; scale; scale; scale; : REM Set Object XYZ Scale Factors + 6670 scale=5.0*256.0 + 6680 VDU 23, 0, &A0, sid%; &49, 9, oid1%; scale; scale; scale; : REM Set Object XYZ Scale Factors + 6682 VDU 23, 0, &A0, sid%; &49, 9, oid2%; scale; scale; scale; : REM Set Object XYZ Scale Factors + 6684 VDU 23, 0, &A0, sid%; &49, 9, oid3%; scale; scale; scale; : REM Set Object XYZ Scale Factors 6690 PRINT "Create target bitmap" 6700 VDU 23, 27, 0, bmid2% : REM Select output bitmap 6710 VDU 23, 27, 2, scene_width%; scene_height%; &0000; &00C0; : REM Create solid color bitmap @@ -95,14 +100,16 @@ 6760 factor=32767.0/pi2 6770 VDU 22, 136: REM 320x240x64 6780 VDU 23, 0, &C0, 0: REM Normal coordinates - 6790 CLG + 6790 GCOL 0,136: CLG 6800 VDU 23, 0, &A0, sid%; &49, 38, bmid2%+64000; : REM Render To Bitmap - 6810 VDU 23, 27, 3, 50; 50; : REM Display output bitmap + 6810 VDU 23, 27, 3, 320/2-200/2; 240/2-200/2; : REM Display output bitmap 6820 VDU 23, 0, &C3: REM Flip buffer 6830 *FX 19 6840 rotatex=rotatex+incx: IF rotatex>=pi2 THEN rotatex=rotatex-pi2 6850 rotatey=rotatey+incy: IF rotatey>=pi2 THEN rotatey=rotatey-pi2 6860 rotatez=rotatez+incz: IF rotatez>=pi2 THEN rotatez=rotatez-pi2 6870 rx=rotatex*factor: ry=rotatey*factor: rz=rotatez*factor - 6880 VDU 23, 0, &A0, sid%; &49, 13, oid%; rx; ry; rz; : REM Set Object XYZ Rotation Angles + 6880 VDU 23, 0, &A0, sid%; &49, 13, oid1%; rx; 0; 0; : REM Set Object XYZ Rotation Angles + 6880 VDU 23, 0, &A0, sid%; &49, 13, oid2%; 0; ry; 0; : REM Set Object XYZ Rotation Angles + 6880 VDU 23, 0, &A0, sid%; &49, 13, oid3%; 0; 0; rz; : REM Set Object XYZ Rotation Angles 6890 GOTO 6790 From 04206b3cc15949ec05eedbaaab2932367da9319e Mon Sep 17 00:00:00 2001 From: Curtis Whitley Date: Thu, 27 Jun 2024 11:29:42 -0400 Subject: [PATCH 43/49] fix copy monster --- video/pingo/assets/orientation.bas | 8 ++++---- video/pingo_3d.h | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/video/pingo/assets/orientation.bas b/video/pingo/assets/orientation.bas index 40a4d58d..1dee60e8 100644 --- a/video/pingo/assets/orientation.bas +++ b/video/pingo/assets/orientation.bas @@ -5,12 +5,12 @@ 50 arrow_vertices%=14 60 DATA -1,0.1,-0.1, 0.5,0.1,-0.1 70 DATA 0.5,0.2,-0.1, 1.0,0.0,-0.1 - 80 DATA 0.5,-0.2,-0.1, 0.5,-0.1,-0.1 - 90 DATA -1.0,-0.1,-0.1 + 80 DATA 0.5,-0.2,-0.2, 0.5,-0.1,-0.1 + 90 DATA -1.0,-0.1,-0.2 100 DATA -1,0.1,0.1, 0.5,0.1,0.1 110 DATA 0.5,0.2,0.1, 1.0,0.0,0.1 - 120 DATA 0.5,-0.2,0.1, 0.5,-0.1,0.1 - 130 DATA -1.0,-0.1,0.1 + 120 DATA 0.5,-0.2,0.2, 0.5,-0.1,0.1 + 130 DATA -1.0,-0.1,0.2 4380 REM 4390 REM -- VERTEX INDEXES -- 4400 DATA 0,1,5, 5,6,0, 1,2,3, 3,4,5, 5,1,3 diff --git a/video/pingo_3d.h b/video/pingo_3d.h index 6c9d6af5..084b7c64 100644 --- a/video/pingo_3d.h +++ b/video/pingo_3d.h @@ -60,7 +60,7 @@ typedef struct tag_Transformable { m_transform = mat4MultiplyM(&m_transform, &t); } if (m_rotation.z) { - auto t = p3d::mat4RotateY(m_rotation.z); + auto t = p3d::mat4RotateZ(m_rotation.z); m_transform = mat4MultiplyM(&m_transform, &t); } if (m_translation.x || m_translation.y || m_translation.z) { From 3a801950b4e66085d48770907361d7fdb009a4b1 Mon Sep 17 00:00:00 2001 From: Curtis Whitley Date: Thu, 27 Jun 2024 12:40:54 -0400 Subject: [PATCH 44/49] got 3 arrows rotating --- video/pingo/assets/orientation.bas | 29 ++++++++++++++++------------- video/pingo/math/mat4.c | 22 +++++++++++----------- 2 files changed, 27 insertions(+), 24 deletions(-) diff --git a/video/pingo/assets/orientation.bas b/video/pingo/assets/orientation.bas index 1dee60e8..ba1efd78 100644 --- a/video/pingo/assets/orientation.bas +++ b/video/pingo/assets/orientation.bas @@ -96,20 +96,23 @@ 6720 PRINT "Render 3D object" 6730 VDU 23, 0, &C3: REM Flip buffer 6740 rotatex=0.0: rotatey=0.0: rotatez=0.0 - 6750 incx=PI/155.0: incy=PI/143.0: incz=PI/137.0 + 6750 incx=PI/67.0: incy=PI/59.0: incz=PI/73.0 6760 factor=32767.0/pi2 6770 VDU 22, 136: REM 320x240x64 6780 VDU 23, 0, &C0, 0: REM Normal coordinates 6790 GCOL 0,136: CLG - 6800 VDU 23, 0, &A0, sid%; &49, 38, bmid2%+64000; : REM Render To Bitmap - 6810 VDU 23, 27, 3, 320/2-200/2; 240/2-200/2; : REM Display output bitmap - 6820 VDU 23, 0, &C3: REM Flip buffer - 6830 *FX 19 - 6840 rotatex=rotatex+incx: IF rotatex>=pi2 THEN rotatex=rotatex-pi2 - 6850 rotatey=rotatey+incy: IF rotatey>=pi2 THEN rotatey=rotatey-pi2 - 6860 rotatez=rotatez+incz: IF rotatez>=pi2 THEN rotatez=rotatez-pi2 - 6870 rx=rotatex*factor: ry=rotatey*factor: rz=rotatez*factor - 6880 VDU 23, 0, &A0, sid%; &49, 13, oid1%; rx; 0; 0; : REM Set Object XYZ Rotation Angles - 6880 VDU 23, 0, &A0, sid%; &49, 13, oid2%; 0; ry; 0; : REM Set Object XYZ Rotation Angles - 6880 VDU 23, 0, &A0, sid%; &49, 13, oid3%; 0; 0; rz; : REM Set Object XYZ Rotation Angles - 6890 GOTO 6790 + 6810 rotatex=rotatex+incx: IF rotatex>=pi2 THEN rotatex=rotatex-pi2 + 6820 rotatey=rotatey+incy: IF rotatey>=pi2 THEN rotatey=rotatey-pi2 + 6830 rotatez=rotatez+incz: IF rotatez>=pi2 THEN rotatez=rotatez-pi2 + 6840 rx=rotatex*factor: ry=rotatey*factor: rz=rotatez*factor + 6850 PRINT TAB(1,1) rx,rotatex + 6852 PRINT TAB(1,2) ry,rotatey + 6854 PRINT TAB(1,3) rz,rotatez + 6860 VDU 23, 0, &A0, sid%; &49, 10, oid1%; rx; : REM Set Object X Rotation Angle + 6870 VDU 23, 0, &A0, sid%; &49, 11, oid2%; ry; : REM Set Object Y Rotation Angle + 6880 VDU 23, 0, &A0, sid%; &49, 12, oid3%; rz; : REM Set Object Z Rotation Angle + 6890 VDU 23, 0, &A0, sid%; &49, 38, bmid2%+64000; : REM Render To Bitmap + 6900 VDU 23, 27, 3, 320/2-200/2; 240/2-200/2; : REM Display output bitmap + 6910 VDU 23, 0, &C3: REM Flip buffer + 6920 *FX 19 + 6930 GOTO 6790 diff --git a/video/pingo/math/mat4.c b/video/pingo/math/mat4.c index 2d16b56e..b229f7d7 100644 --- a/video/pingo/math/mat4.c +++ b/video/pingo/math/mat4.c @@ -21,9 +21,9 @@ Mat4 mat4Translate(Vec3f l) { F_TYPE z = l.z; return (Mat4){{ 1, 0, 0, x, - 0, 1, 0, y, - 0, 0, 1, z, - 0, 0, 0, 1, + 0, 1, 0, y, + 0, 0, 1, z, + 0, 0, 0, 1, }}; } @@ -33,8 +33,8 @@ Mat4 mat4RotateX(F_TYPE phi) { return (Mat4){{ 1, 0, 0, 0, 0, c, -s, 0, - 0, s, c, 0, - 0, 0, 0, 1, + 0, s, c, 0, + 0, 0, 0, 1, }}; } Mat4 mat4RotateY(F_TYPE phi) { @@ -42,9 +42,9 @@ Mat4 mat4RotateY(F_TYPE phi) { F_TYPE c = cos(phi); return (Mat4){{ c, 0, s, 0, - 0, 1, 0, 0, - -s, 0, c, 0, - 0, 0, 0, 1, + 0, 1, 0, 0, + -s, 0, c, 0, + 0, 0, 0, 1, }}; } Mat4 mat4RotateZ(F_TYPE phi) { @@ -52,9 +52,9 @@ Mat4 mat4RotateZ(F_TYPE phi) { F_TYPE c = cos(phi); return (Mat4){{ c, -s, 0, 0, - s, c, 0, 0, - 0, 0, 1, 0, - 0, 0, 0, 1, + s, c, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1, }}; } From 0c3f168a9a89525b2da8ece459aa86ff37192f19 Mon Sep 17 00:00:00 2001 From: Curtis Whitley Date: Thu, 27 Jun 2024 12:50:29 -0400 Subject: [PATCH 45/49] add arrow obj --- video/pingo/assets/arrow.obj | 40 ++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 video/pingo/assets/arrow.obj diff --git a/video/pingo/assets/arrow.obj b/video/pingo/assets/arrow.obj new file mode 100644 index 00000000..1514f306 --- /dev/null +++ b/video/pingo/assets/arrow.obj @@ -0,0 +1,40 @@ +o arrow +v -1 0.1 -0.1 +v 0.5 0.1 -0.1 +v 0.5 0.2 -0.1 +v 1.0 0.0 -0.1 +v 0.5 -0.2 -0.2 +v 0.5 -0.1 -0.1 +v -1.0 -0.1 -0.2 +v -1 0.1 0.1 +v 0.5 0.1 0.1 +v 0.5 0.2 0.1 +v 1.0 0.0 0.1 +v 0.5 -0.2 0.2 +v 0.5 -0.1 0.1 +v -1.0 -0.1 0.2 +vt 0.0 0.0 +f 0/0 1/0 5/0 +f 5/0 6/0 0/0 +f 1/0 2/0 3/0 +f 3/0 4/0 5/0 +f 5/0 1/0 3/0 +f 8/0 7/0 12/0 +f 12/0 7/0 13/0 +f 9/0 8/0 10/0 +f 10/0 12/0 11/0 +f 12/0 10/0 8/0 +f 13/0 7/0 6/0 +f 7/0 0/0 6/0 +f 7/0 8/0 0/0 +f 0/0 8/0 1/0 +f 13/0 6/0 12/0 +f 6/0 5/0 12/0 +f 8/0 9/0 2/0 +f 8/0 2/0 1/0 +f 11/0 12/0 5/0 +f 11/0 5/0 4/0 +f 2/0 9/0 10/0 +f 3/0 2/0 10/0 +f 3/0 11/0 4/0 +f 3/0 10/0 11/0 From d29ca53152d8ad1d2e69cb74d0bbd18894c8e219 Mon Sep 17 00:00:00 2001 From: Curtis Whitley Date: Thu, 27 Jun 2024 15:44:32 -0400 Subject: [PATCH 46/49] rgb arrows --- video/pingo/assets/orientation.bas | 31 +++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/video/pingo/assets/orientation.bas b/video/pingo/assets/orientation.bas index ba1efd78..42a5100d 100644 --- a/video/pingo/assets/orientation.bas +++ b/video/pingo/assets/orientation.bas @@ -35,8 +35,8 @@ 6250 factor=32767.0/max_abs 6260 PRINT "Max absolute value = ";max_abs 6270 PRINT "Factor = ";factor - 6280 sid%=100: mid%=1: oid1%=1: oid2%=2: oid3%=3 - 6282 bmid1%=101: bmid2%=102 + 6280 sid%=100: mid1%=1: oid1%=1: oid2%=2: oid3%=3 + 6282 bmid1%=101: bmid2%=102: bmid3%=103: bmido%=104 6290 PRINT "Creating control structure" 6300 scene_width%=200: scene_height%=200 6310 VDU 23,0, &A0, sid%; &49, 0, scene_width%; scene_height%; : REM Create Control Structure @@ -47,7 +47,7 @@ 6360 anglex=-0.4*f 6370 VDU 23,0, &A0, sid%; &49, 18, anglex; : REM Set Camera X Rotation Angle 6380 PRINT "Sending vertices using factor ";factor - 6390 VDU 23,0, &A0, sid%; &49, 1, mid%; arrow_vertices%; : REM Define Mesh Vertices + 6390 VDU 23,0, &A0, sid%; &49, 1, mid1%; arrow_vertices%; : REM Define Mesh Vertices 6400 FOR i%=0 TO total_coords%-1 6410 val%=vertices(i%)*factor 6420 VDU val%; @@ -55,7 +55,7 @@ 6440 IF TIME-T%<1 GOTO 6440 6450 NEXT i% 6460 PRINT "Sending vertex indexes" - 6470 VDU 23,0, &A0, sid%; &49, 2, mid%; total_indexes%; : REM Set Mesh Vertex Indexes + 6470 VDU 23,0, &A0, sid%; &49, 2, mid1%; total_indexes%; : REM Set Mesh Vertex Indexes 6480 FOR i%=0 TO total_indexes%-1 6490 READ val% 6500 VDU val%; @@ -63,35 +63,36 @@ 6520 IF TIME-T%<1 GOTO 6520 6530 NEXT i% 6540 PRINT "Sending texture coordinates" - 6550 VDU 23,0, &A0, sid%; &49, 3, mid%; arrow_vertices%; : REM Define Texture Coordinates + 6550 VDU 23,0, &A0, sid%; &49, 3, mid1%; arrow_vertices%; : REM Define Texture Coordinates 6552 FOR i%=0 TO arrow_vertices%-1 6554 VDU 0; 6556 VDU 0; 6558 NEXT i% 6560 PRINT "Sending texture coordinate indexes" 6562 RESTORE 4400 - 6564 VDU 23,0, &A0, sid%; &49, 4, mid%; total_indexes%; : REM Set Texture Coordinate Indexes + 6564 VDU 23,0, &A0, sid%; &49, 4, mid1%; total_indexes%; : REM Set Texture Coordinate Indexes 6570 FOR i%=0 TO total_indexes%-1 6575 READ val% 6580 VDU val%; 6590 NEXT i% 6600 PRINT "Creating texture bitmap" 6610 VDU 23, 27, 0, bmid1%: REM Create a bitmap for a texture - 6620 PRINT "Setting texture pixel" - 6630 VDU 23, 27, 1, 3; 1; &FF, &00, &00, &C0 : REM Set a RED pixel in the bitmap - 6632 VDU &00, &FF, &00, &C0 : REM Set a GREEN pixel in the bitmap - 6634 VDU &00, &00, &FF, &C0 : REM Set a BLUE pixel in the bitmap + 6612 VDU 23, 27, 1, 1; 1; &FF, &00, &00, &C0 : REM Set a RED pixel in the bitmap + 6614 VDU 23, 27, 0, bmid2%: REM Create a bitmap for a texture + 6616 VDU 23, 27, 1, 1; 1; &00, &FF, &00, &C0 : REM Set a GREEN pixel in the bitmap + 6618 VDU 23, 27, 0, bmid3%: REM Create a bitmap for a texture + 6620 VDU 23, 27, 1, 1; 1; &00, &00, &FF, &C0 : REM Set a BLUE pixel in the bitmap 6640 PRINT "Create 3D object" - 6650 VDU 23,0, &A0, sid%; &49, 5, oid1%; mid%; bmid1%+64000; : REM Create Object - 6652 VDU 23,0, &A0, sid%; &49, 5, oid2%; mid%; bmid1%+64000; : REM Create Object - 6654 VDU 23,0, &A0, sid%; &49, 5, oid3%; mid%; bmid1%+64000; : REM Create Object + 6650 VDU 23,0, &A0, sid%; &49, 5, oid1%; mid1%; bmid1%+64000; : REM Create Object + 6652 VDU 23,0, &A0, sid%; &49, 5, oid2%; mid1%; bmid2%+64000; : REM Create Object + 6654 VDU 23,0, &A0, sid%; &49, 5, oid3%; mid1%; bmid3%+64000; : REM Create Object 6660 PRINT "Scale object" 6670 scale=5.0*256.0 6680 VDU 23, 0, &A0, sid%; &49, 9, oid1%; scale; scale; scale; : REM Set Object XYZ Scale Factors 6682 VDU 23, 0, &A0, sid%; &49, 9, oid2%; scale; scale; scale; : REM Set Object XYZ Scale Factors 6684 VDU 23, 0, &A0, sid%; &49, 9, oid3%; scale; scale; scale; : REM Set Object XYZ Scale Factors 6690 PRINT "Create target bitmap" - 6700 VDU 23, 27, 0, bmid2% : REM Select output bitmap + 6700 VDU 23, 27, 0, bmido% : REM Select output bitmap 6710 VDU 23, 27, 2, scene_width%; scene_height%; &0000; &00C0; : REM Create solid color bitmap 6720 PRINT "Render 3D object" 6730 VDU 23, 0, &C3: REM Flip buffer @@ -111,7 +112,7 @@ 6860 VDU 23, 0, &A0, sid%; &49, 10, oid1%; rx; : REM Set Object X Rotation Angle 6870 VDU 23, 0, &A0, sid%; &49, 11, oid2%; ry; : REM Set Object Y Rotation Angle 6880 VDU 23, 0, &A0, sid%; &49, 12, oid3%; rz; : REM Set Object Z Rotation Angle - 6890 VDU 23, 0, &A0, sid%; &49, 38, bmid2%+64000; : REM Render To Bitmap + 6890 VDU 23, 0, &A0, sid%; &49, 38, bmido%+64000; : REM Render To Bitmap 6900 VDU 23, 27, 3, 320/2-200/2; 240/2-200/2; : REM Display output bitmap 6910 VDU 23, 0, &C3: REM Flip buffer 6920 *FX 19 From c7bfc584f30313097c44a72fe445bb17b34c9628 Mon Sep 17 00:00:00 2001 From: Curtis Whitley Date: Thu, 27 Jun 2024 19:13:47 -0400 Subject: [PATCH 47/49] support texture coords for object --- video/pingo/assets/orientation.bas | 2 +- video/pingo/assets/teapot.bas | 2 +- video/pingo/render/object.h | 1 + video/pingo/render/renderer.c | 10 ++++++--- video/pingo/vdu_pingo.md | 28 ++++++++++++++++++----- video/pingo_3d.h | 36 +++++++++++++++++++++++++++--- video/vdu_buffered.h | 5 +++-- 7 files changed, 68 insertions(+), 16 deletions(-) diff --git a/video/pingo/assets/orientation.bas b/video/pingo/assets/orientation.bas index 42a5100d..a28ea98b 100644 --- a/video/pingo/assets/orientation.bas +++ b/video/pingo/assets/orientation.bas @@ -63,7 +63,7 @@ 6520 IF TIME-T%<1 GOTO 6520 6530 NEXT i% 6540 PRINT "Sending texture coordinates" - 6550 VDU 23,0, &A0, sid%; &49, 3, mid1%; arrow_vertices%; : REM Define Texture Coordinates + 6550 VDU 23,0, &A0, sid%; &49, 3, mid1%; arrow_vertices%; : REM Define Mesh Texture Coordinates 6552 FOR i%=0 TO arrow_vertices%-1 6554 VDU 0; 6556 VDU 0; diff --git a/video/pingo/assets/teapot.bas b/video/pingo/assets/teapot.bas index 327d461b..41cd08c6 100644 --- a/video/pingo/assets/teapot.bas +++ b/video/pingo/assets/teapot.bas @@ -652,7 +652,7 @@ 6520 IF TIME-T%<1 GOTO 6520 6530 NEXT i% 6540 PRINT "Sending texture coordinate indexes" - 6550 VDU 23,0, &A0, sid%; &49, 3, mid%; 1; 32768; 32768; : REM Define Texture Coordinates + 6550 VDU 23,0, &A0, sid%; &49, 3, mid%; 1; 32768; 32768; : REM Define Mesh Texture Coordinates 6560 VDU 23,0, &A0, sid%; &49, 4, mid%; teapot_vertices%; : REM Set Texture Coordinate Indexes 6570 FOR i%=0 TO teapot_vertices%-1 6580 VDU 0; diff --git a/video/pingo/render/object.h b/video/pingo/render/object.h index 0d3205f4..6a68b83e 100644 --- a/video/pingo/render/object.h +++ b/video/pingo/render/object.h @@ -10,6 +10,7 @@ typedef struct Object { Mesh * mesh; Mat4 transform; Material * material; + Vec2f * textCoord; } Object; Renderable object_as_renderable(Object * object); diff --git a/video/pingo/render/renderer.c b/video/pingo/render/renderer.c index 5c4a5df7..b16552f3 100644 --- a/video/pingo/render/renderer.c +++ b/video/pingo/render/renderer.c @@ -99,6 +99,10 @@ int renderObject(Mat4 object_transform, Renderer * r, Renderable ren) { const Vec2i scrSize = r->frameBuffer.size; Object * o = ren.impl; + Vec2f * tex_coords = o->textCoord; + if (!tex_coords) { + tex_coords = o->mesh->textCoord; + } // MODEL MATRIX Mat4 m = mat4MultiplyM( &o->transform, &object_transform ); @@ -117,9 +121,9 @@ int renderObject(Mat4 object_transform, Renderer * r, Renderable ren) { Vec2f tcc = {0,0}; if (o->material != 0) { - tca = o->mesh->textCoord[o->mesh->tex_indices[i+0]]; - tcb = o->mesh->textCoord[o->mesh->tex_indices[i+1]]; - tcc = o->mesh->textCoord[o->mesh->tex_indices[i+2]]; + tca = tex_coords[o->mesh->tex_indices[i+0]]; + tcb = tex_coords[o->mesh->tex_indices[i+1]]; + tcc = tex_coords[o->mesh->tex_indices[i+2]]; } Vec4f a = { ver1->x, ver1->y, ver1->z, 1 }; diff --git a/video/pingo/vdu_pingo.md b/video/pingo/vdu_pingo.md index 16250961..62b80709 100644 --- a/video/pingo/vdu_pingo.md +++ b/video/pingo/vdu_pingo.md @@ -90,9 +90,10 @@ VDU ... PDX; PDY; PDZ; ... VDU 23, 0, &A0, sid; &49, 0, w; h; : Create Control Structure
VDU 23, 0, &A0, sid; &49, 1, mid; n; x0; y0; z0; ... : Define Mesh Vertices
VDU 23, 0, &A0, sid; &49, 2, mid; n; i0; ... : Set Mesh Vertex Indexes
-VDU 23, 0, &A0, sid; &49, 3, mid; n; u0; v0; ... : Define Texture Coordinates
+VDU 23, 0, &A0, sid; &49, 3, mid; n; u0; v0; ... : Define Mesh Texture Coordinates
VDU 23, 0, &A0, sid; &49, 4, mid; n; i0; ... : Set Texture Coordinate Indexes
VDU 23, 0, &A0, sid; &49, 5, oid; mid; bmid; : Create Object
+VDU 23, 0, &A0, sid; &49, 40, oid; n; u0; v0; ... : Define Object Texture Coordinates
VDU 23, 0, &A0, sid; &49, 6, oid; scalex; : Set Object X Scale Factor
VDU 23, 0, &A0, sid; &49, 7, oid; scaley; : Set Object Y Scale Factor
VDU 23, 0, &A0, sid; &49, 8, oid; scalez; : Set Object Z Scale Factor
@@ -126,7 +127,7 @@ VDU ... PDX; PDY; PDZ; ... VDU 23, 0, &A0, sid; &49, 36, distz; : Set Scene Z Translation Distance
VDU 23, 0, &A0, sid; &49, 37, distx; disty; distz; : Set Scene XYZ Translation Distances
VDU 23, 0, &A0, sid; &49, 38, bmid; : Render To Bitmap
-VDU 23, 0, &A0, sid; &49, 39 : Delete Control Structure
+VDU 23, 0, &A0, sid; &49, 39 : Delete Control Structure (not implemented yet)
## Create Control Structure VDU 23, 0, &A0, sid; &49, 0, w; h; : Create Control Structure
@@ -156,11 +157,15 @@ the number of defined mesh vertices. The "n" parameter is the number of indexes, and must match the "n" in subcommand 4 (Set Texture Coordinate Indexes). -## Define Texture Coordinates -VDU 23, 0, &A0, sid; &49, 3, mid; n; u0; v0; ... : Define Texture Coordinates +## Define Mesh Texture Coordinates +VDU 23, 0, &A0, sid; &49, 3, mid; n; u0; v0; ... : Define Mesh Texture Coordinates This command establishes the list of U/V texture coordinates that define texturing -for a mesh. +for a mesh. For any object that does not have its texture coordinates set separately, +those texture coordinates belonging to the mesh that is referenced by the object +will be employed. See also subcommand #40. + +The mesh must still have texture indexes established. The "n" parameter is the number of coordinate pairs, so the total number of coordinates specified equals n*2. @@ -185,6 +190,17 @@ texture coordinates used by the mesh. The same mesh can be used multiple times, with the same or different bitmaps for coloring. The bitmap must be in the RGBA8888 format (4 bytes per pixel). +## Define Object Texture Coordinates +VDU 23, 0, &A0, sid; &49, 40, oid; n; u0; v0; ... : Define Object Texture Coordinates + +This command establishes the list of U/V texture coordinates that define texturing +for an object, as opposed to a mesh. For that object, it will override any texture coordinates defined +for the mesh that the object references. See also subcommand #3. + +The mesh must still have texture indexes established. + +The "n" parameter is the number of coordinate pairs, so the total number of coordinates specified equals n*2. + ## Set Object X Scale Factor VDU 23, 0, &A0, sid; &49, 6, oid; scalex; : Set Object X Scale Factor @@ -366,7 +382,7 @@ order to perform the render operation; it does not happen automatically, commands change some of the render parameters. ## Delete Control Structure -VDU 23, 0, &A0, sid; &49, 39 : Delete Control Structure
+VDU 23, 0, &A0, sid; &49, 39 : Delete Control Structure (not implemented yet)
This command deinitializes an existing control structure, assuming that it exists in the designated buffer. The buffer is subsequently diff --git a/video/pingo_3d.h b/video/pingo_3d.h index 084b7c64..d7f59e2d 100644 --- a/video/pingo_3d.h +++ b/video/pingo_3d.h @@ -200,9 +200,10 @@ typedef struct tag_Pingo3dControl { switch (subcmd) { case 1: define_mesh_vertices(); break; case 2: set_mesh_vertex_indexes(); break; - case 3: define_texture_coordinates(); break; + case 3: define_mesh_texture_coordinates(); break; case 4: set_texture_coordinate_indexes(); break; case 5: create_object(); break; + case 40: define_object_texture_coordinates(); break; case 6: set_object_x_scale_factor(); break; case 7: set_object_y_scale_factor(); break; case 8: set_object_z_scale_factor(); break; @@ -344,8 +345,8 @@ typedef struct tag_Pingo3dControl { } } - // VDU 23, 0, &A0, sid; &48, 3, mid; n; u0; v0; ... : Define Texture Coordinates - void define_texture_coordinates() { + // VDU 23, 0, &A0, sid; &48, 3, mid; n; u0; v0; ... : Define Mesh Texture Coordinates + void define_mesh_texture_coordinates() { auto mesh = get_mesh(); if (mesh->textCoord) { heap_caps_free(mesh->textCoord); @@ -373,6 +374,35 @@ typedef struct tag_Pingo3dControl { } } + // VDU 23, 0, &A0, sid; &48, 40, oid; n; u0; v0; ... : Define Object Texture Coordinates + void define_object_texture_coordinates() { + auto object = get_object(); + if (object->m_object.textCoord) { + heap_caps_free(object->m_object.textCoord); + object->m_object.textCoord = NULL; + } + auto n = (uint32_t) m_proc->readWord_t(); + if (n > 0) { + auto size = n*sizeof(p3d::Vec2f); + object->m_object.textCoord = (p3d::Vec2f*) heap_caps_malloc(size, MALLOC_CAP_SPIRAM); + auto coord = object->m_object.textCoord; + if (!coord) { + debug_log("set_object_vertex_indexes: failed to allocate %u bytes\n", size); + show_free_ram(); + } + debug_log("Reading %u texture coordinates\n", n); + for (uint32_t i = 0; i < n; i++) { + uint16_t u = m_proc->readWord_t(); + uint16_t v = m_proc->readWord_t(); + if (coord) { + coord->x = convert_texture_coordinate_value(u); + coord->y = convert_texture_coordinate_value(v); + coord++; + } + } + } + } + // VDU 23, 0, &A0, sid; &48, 4, mid; n; i0; ... : Set Texture Coordinate Indexes void set_texture_coordinate_indexes() { auto mesh = get_mesh(); diff --git a/video/vdu_buffered.h b/video/vdu_buffered.h index b68871cd..97a508bd 100644 --- a/video/vdu_buffered.h +++ b/video/vdu_buffered.h @@ -2215,9 +2215,10 @@ void VDUStreamProcessor::bufferExpandBitmap(uint16_t bufferId, uint8_t options, // VDU 23, 0, &A0, sid; &49, 0, w; h; : Create Control Structure // VDU 23, 0, &A0, sid; &49, 1, mid; n; x0; y0; z0; ... : Define Mesh Vertices // VDU 23, 0, &A0, sid; &49, 2, mid; n; i0; ... : Set Mesh Vertex Indexes -// VDU 23, 0, &A0, sid; &49, 3, mid; n; u0; v0; ... : Define Texture Coordinates +// VDU 23, 0, &A0, sid; &49, 3, mid; n; u0; v0; ... : Define Mesh Texture Coordinates // VDU 23, 0, &A0, sid; &49, 4, mid; n; i0; ... : Set Texture Coordinate Indexes // VDU 23, 0, &A0, sid; &49, 5, oid; mid; bmid; : Create Object +// VDU 23, 0, &A0, sid; &49, 40, oid; n; u0; v0; ... : Define Object Texture Coordinates // VDU 23, 0, &A0, sid; &49, 6, oid; scalex; : Set Object X Scale Factor // VDU 23, 0, &A0, sid; &49, 7, oid; scaley; : Set Object Y Scale Factor // VDU 23, 0, &A0, sid; &49, 8, oid; scalez; : Set Object Z Scale Factor @@ -2251,7 +2252,7 @@ void VDUStreamProcessor::bufferExpandBitmap(uint16_t bufferId, uint8_t options, // VDU 23, 0, &A0, sid; &49, 36, distz; : Set Scene Z Translation Distance // VDU 23, 0, &A0, sid; &49, 37, distx; disty; distz; : Set Scene XYZ Translation Distances // VDU 23, 0, &A0, sid; &49, 38, bmid; : Render To Bitmap -// VDU 23, 0, &A0, sid; &49, 39 : Delete Control Structure +// VDU 23, 0, &A0, sid; &49, 39 : Delete Control Structure (not implemented yet) // void VDUStreamProcessor::bufferUsePingo3D(uint16_t bufferId) { auto subcmd = readByte_t(); From f0a12923963c90acd358f9ab7656afe7b7478d52 Mon Sep 17 00:00:00 2001 From: Curtis Whitley Date: Thu, 27 Jun 2024 19:25:45 -0400 Subject: [PATCH 48/49] invert Y for light --- video/pingo/render/renderer.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/video/pingo/render/renderer.c b/video/pingo/render/renderer.c index b16552f3..1c279604 100644 --- a/video/pingo/render/renderer.c +++ b/video/pingo/render/renderer.c @@ -138,7 +138,7 @@ int renderObject(Mat4 object_transform, Renderer * r, Renderable ren) { Vec3f na = vec3fsubV(*((Vec3f*)(&a)), *((Vec3f*)(&b))); Vec3f nb = vec3fsubV(*((Vec3f*)(&a)), *((Vec3f*)(&c))); Vec3f normal = vec3Normalize(vec3Cross(na, nb)); - Vec3f light = vec3Normalize((Vec3f){-8,5,5}); + Vec3f light = vec3Normalize((Vec3f){-8,-5,5}); float diffuseLight = (1.0 + vec3Dot(normal, light)) *0.5; diffuseLight = MIN(1.0, MAX(diffuseLight, 0)); From f4814813e8155780c5ad2602cd45f82ca5a72eec Mon Sep 17 00:00:00 2001 From: Curtis Whitley Date: Fri, 28 Jun 2024 13:32:37 -0400 Subject: [PATCH 49/49] added lara.bas --- video/pingo/assets/lara.bas | 427 ++++ video/pingo/assets/lara.obj | 4194 +++++++++++++++++++++++++++++++++++ 2 files changed, 4621 insertions(+) create mode 100644 video/pingo/assets/lara.bas create mode 100644 video/pingo/assets/lara.obj diff --git a/video/pingo/assets/lara.bas b/video/pingo/assets/lara.bas new file mode 100644 index 00000000..372a7e4c --- /dev/null +++ b/video/pingo/assets/lara.bas @@ -0,0 +1,427 @@ + 10 REM lara.bas + 20 REM Sample app to illustrate Pingo 3D on Agon + 30 REM + 50 lara_vertices%=127 + 60 lara_indexes%=42*3 + 6130 REM + 6140 REM -- CODE -- + 6150 PRINT "Reading vertices" + 6160 total_coords%=lara_vertices%*3 + 6170 max_abs=-99999 + 6180 DIM vertices(total_coords%) + 6190 FOR i%=0 TO total_coords%-1 + 6200 READ coord + 6210 vertices(i%)=coord + 6220 a=ABS(coord) + 6230 IF a>max_abs THEN max_abs=a + 6240 NEXT i% + 6250 factor=32767.0/max_abs + 6260 PRINT "Max absolute value = ";max_abs + 6270 PRINT "Factor = ";factor + 6280 sid%=100: mid%=1: oid%=1: bmid1%=101: bmid2%=102 + 6290 PRINT "Creating control structure" + 6300 scene_width%=96: scene_height%=96 + 6310 VDU 23,0, &A0, sid%; &49, 0, scene_width%; scene_height%; : REM Create Control Structure + 6320 f=32767.0/256.0 + 6330 distx=0*f: disty=2*f: distz=-20*f + 6340 VDU 23,0, &A0, sid%; &49, 25, distx; disty; distz; : REM Set Camera XYZ Translation Distances + 6350 pi2=PI*2.0: f=32767.0/pi2 + 6360 anglex=-0.4*f + 6370 VDU 23,0, &A0, sid%; &49, 18, anglex; : REM Set Camera X Rotation Angle + 6380 PRINT "Sending vertices using factor ";factor + 6390 VDU 23,0, &A0, sid%; &49, 1, mid%; lara_vertices%; : REM Define Mesh Vertices + 6400 FOR i%=0 TO total_coords%-1 + 6410 val%=vertices(i%)*factor + 6420 VDU val%; + 6430 T%=TIME + 6440 IF TIME-T%<1 GOTO 6440 + 6450 NEXT i% + 6460 PRINT "Reading and sending vertex indexes" + 6470 VDU 23,0, &A0, sid%; &49, 2, mid%; lara_indexes%; : REM Set Mesh Vertex Indexes + 6480 FOR i%=0 TO lara_indexes%-1 + 6490 READ val% + 6500 VDU val%; + 6510 T%=TIME + 6520 IF TIME-T%<1 GOTO 6520 + 6530 NEXT i% + 6540 PRINT "Sending texture coordinate indexes" + 6550 VDU 23,0, &A0, sid%; &49, 3, mid%; 1; 32768; 32768; : REM Define Mesh Texture Coordinates + 6560 VDU 23,0, &A0, sid%; &49, 4, mid%; lara_indexes%; : REM Set Texture Coordinate Indexes + 6570 FOR i%=0 TO lara_indexes%-1 + 6580 READ val% + 6585 VDU val%; + 6587 T%=TIME + 6588 IF TIME-T%<1 GOTO 6588 + 6590 NEXT i% + 6600 PRINT "Creating texture bitmap" + 6610 VDU 23, 27, 0, bmid1%: REM Create a bitmap for a texture + 6620 PRINT "Setting texture pixel" + 6630 VDU 23, 27, 1, 1; 1; &55, &AA, &FF, &C0 : REM Set a pixel in the bitmap + 6640 PRINT "Create 3D object" + 6650 VDU 23,0, &A0, sid%; &49, 5, oid%; mid%; bmid1%+64000; : REM Create Object + 6660 PRINT "Scale object" + 6670 scale=6.0*256.0 + 6680 VDU 23, 0, &A0, sid%; &49, 9, oid%; scale; scale; scale; : REM Set Object XYZ Scale Factors + 6690 PRINT "Create target bitmap" + 6700 VDU 23, 27, 0, bmid2% : REM Select output bitmap + 6710 VDU 23, 27, 2, scene_width%; scene_height%; &0000; &00C0; : REM Create solid color bitmap + 6720 PRINT "Render 3D object" + 6730 VDU 23, 0, &C3: REM Flip buffer + 6740 rotatex=0.0: rotatey=0.0: rotatez=0.0 + 6750 incx=PI/16.0: incy=PI/32.0: incz=PI/64.0 + 6760 factor=32767.0/pi2 + 6770 VDU 22, 136: REM 320x240x64 + 6780 VDU 23, 0, &C0, 0: REM Normal coordinates + 6790 GCOL 0,136: CLG + 6800 VDU 23, 0, &A0, sid%; &49, 38, bmid2%+64000; : REM Render To Bitmap + 6810 VDU 23, 27, 3, 50; 50; : REM Display output bitmap + 6820 VDU 23, 0, &C3: REM Flip buffer + 6830 *FX 19 + 6840 rotatex=rotatex+incx: IF rotatex>=pi2 THEN rotatex=rotatex-pi2 + 6850 rotatey=rotatey+incy: IF rotatey>=pi2 THEN rotatey=rotatey-pi2 + 6860 rotatez=rotatez+incz: IF rotatez>=pi2 THEN rotatez=rotatez-pi2 + 6870 rx=rotatex*factor: ry=rotatey*factor: rz=rotatez*factor + 6880 VDU 23, 0, &A0, sid%; &49, 13, oid%; rx; ry; rz; : REM Set Object XYZ Rotation Angles + 6890 GOTO 6790 +20010 REM Vertex coordinates +20011 DATA 0.0 0.0 0.0 +20012 DATA 0.360000 -2.810000 -0.200000 +20013 DATA 0.360000 -3.150000 -0.180001 +20014 DATA 0.130000 -3.150000 0.039999 +20015 DATA 0.360000 -2.810000 -0.200000 +20016 DATA 0.130000 -3.150000 0.039999 +20017 DATA 0.040000 -2.810000 0.060000 +20018 DATA 0.590000 -3.150000 0.039999 +20019 DATA 0.360000 -3.150000 -0.180001 +20020 DATA 0.360000 -2.810000 -0.200000 +20021 DATA 0.590000 -3.150000 0.039999 +20022 DATA 0.360000 -2.810000 -0.200000 +20023 DATA 0.670000 -2.810000 0.050000 +20024 DATA 0.510000 -3.140000 0.279999 +20025 DATA 0.590000 -3.150000 0.039999 +20026 DATA 0.670000 -2.810000 0.050000 +20027 DATA 0.510000 -3.140000 0.279999 +20028 DATA 0.670000 -2.810000 0.050000 +20029 DATA 0.550000 -2.690000 0.380000 +20030 DATA 0.160000 -2.690000 0.380000 +20031 DATA 0.220000 -3.140000 0.279999 +20032 DATA 0.510000 -3.140000 0.279999 +20033 DATA 0.160000 -2.690000 0.380000 +20034 DATA 0.510000 -3.140000 0.279999 +20035 DATA 0.550000 -2.690000 0.380000 +20036 DATA 0.040000 -2.810000 0.060000 +20037 DATA 0.130000 -3.150000 0.039999 +20038 DATA 0.220000 -3.140000 0.279999 +20039 DATA 0.040000 -2.810000 0.060000 +20040 DATA 0.220000 -3.140000 0.279999 +20041 DATA 0.160000 -2.690000 0.380000 +20042 DATA 0.430000 -2.050000 0.110000 +20043 DATA 0.490000 -2.050000 -0.060000 +20044 DATA 0.170000 -2.050000 -0.060000 +20045 DATA 0.430000 -2.050000 0.110000 +20046 DATA 0.170000 -2.050000 -0.060000 +20047 DATA 0.230000 -2.050000 0.120000 +20048 DATA 0.490000 -2.050000 -0.060000 +20049 DATA 0.430000 -2.050000 0.110000 +20050 DATA 0.550000 -2.690000 0.380000 +20051 DATA 0.490000 -2.050000 -0.060000 +20052 DATA 0.550000 -2.690000 0.380000 +20053 DATA 0.670000 -2.810000 0.050000 +20054 DATA 0.430000 -2.050000 0.110000 +20055 DATA 0.230000 -2.050000 0.120000 +20056 DATA 0.160000 -2.690000 0.380000 +20057 DATA 0.430000 -2.050000 0.110000 +20058 DATA 0.160000 -2.690000 0.380000 +20059 DATA 0.550000 -2.690000 0.380000 +20060 DATA 0.170000 -2.050000 -0.060000 +20061 DATA 0.040000 -2.810000 0.060000 +20062 DATA 0.160000 -2.690000 0.380000 +20063 DATA 0.170000 -2.050000 -0.060000 +20064 DATA 0.160000 -2.690000 0.380000 +20065 DATA 0.230000 -2.050000 0.120000 +20066 DATA 0.180000 -3.940000 -0.060001 +20067 DATA 0.130000 -3.150000 0.039999 +20068 DATA 0.360000 -3.150000 -0.180001 +20069 DATA 0.180000 -3.940000 -0.060001 +20070 DATA 0.360000 -3.150000 -0.180001 +20071 DATA 0.330000 -3.940000 -0.190001 +20072 DATA 0.330000 -3.940000 -0.190001 +20073 DATA 0.360000 -3.150000 -0.180001 +20074 DATA 0.590000 -3.150000 0.039999 +20075 DATA 0.330000 -3.940000 -0.190001 +20076 DATA 0.590000 -3.150000 0.039999 +20077 DATA 0.490000 -3.940000 -0.060001 +20078 DATA 0.490000 -3.940000 -0.060001 +20079 DATA 0.590000 -3.150000 0.039999 +20080 DATA 0.510000 -3.140000 0.279999 +20081 DATA 0.490000 -3.940000 -0.060001 +20082 DATA 0.510000 -3.140000 0.279999 +20083 DATA 0.430000 -3.940000 0.159999 +20084 DATA 0.430000 -3.940000 0.159999 +20085 DATA 0.510000 -3.140000 0.279999 +20086 DATA 0.220000 -3.140000 0.279999 +20087 DATA 0.430000 -3.940000 0.159999 +20088 DATA 0.220000 -3.140000 0.279999 +20089 DATA 0.230000 -3.940000 0.159999 +20090 DATA 0.240000 -4.050000 -0.080001 +20091 DATA 0.450000 -4.050000 -0.090001 +20092 DATA 0.350000 -4.050000 0.099999 +20093 DATA 0.490000 -2.050000 -0.060000 +20094 DATA 0.330000 -2.050000 -0.230000 +20095 DATA 0.170000 -2.050000 -0.060000 +20096 DATA 0.360000 -2.810000 -0.200000 +20097 DATA 0.170000 -2.050000 -0.060000 +20098 DATA 0.330000 -2.050000 -0.230000 +20099 DATA 0.360000 -2.810000 -0.200000 +20100 DATA 0.040000 -2.810000 0.060000 +20101 DATA 0.170000 -2.050000 -0.060000 +20102 DATA 0.490000 -2.050000 -0.060000 +20103 DATA 0.670000 -2.810000 0.050000 +20104 DATA 0.360000 -2.810000 -0.200000 +20105 DATA 0.360000 -2.810000 -0.200000 +20106 DATA 0.330000 -2.050000 -0.230000 +20107 DATA 0.490000 -2.050000 -0.060000 +20108 DATA 0.240000 -4.050000 -0.080001 +20109 DATA 0.180000 -3.940000 -0.060001 +20110 DATA 0.330000 -3.940000 -0.190001 +20111 DATA 0.450000 -4.050000 -0.090001 +20112 DATA 0.330000 -3.940000 -0.190001 +20113 DATA 0.490000 -3.940000 -0.060001 +20114 DATA 0.450000 -4.050000 -0.090001 +20115 DATA 0.240000 -4.050000 -0.080001 +20116 DATA 0.330000 -3.940000 -0.190001 +20117 DATA 0.430000 -3.940000 0.159999 +20118 DATA 0.350000 -4.050000 0.099999 +20119 DATA 0.450000 -4.050000 -0.090001 +20120 DATA 0.450000 -4.050000 -0.090001 +20121 DATA 0.490000 -3.940000 -0.060001 +20122 DATA 0.430000 -3.940000 0.159999 +20123 DATA 0.350000 -4.050000 0.099999 +20124 DATA 0.430000 -3.940000 0.159999 +20125 DATA 0.230000 -3.940000 0.159999 +20126 DATA 0.240000 -4.050000 -0.080001 +20127 DATA 0.230000 -3.940000 0.159999 +20128 DATA 0.180000 -3.940000 -0.060001 +20129 DATA 0.240000 -4.050000 -0.080001 +20130 DATA 0.350000 -4.050000 0.099999 +20131 DATA 0.230000 -3.940000 0.159999 +20132 DATA 0.220000 -3.140000 0.279999 +20133 DATA 0.180000 -3.940000 -0.060001 +20134 DATA 0.230000 -3.940000 0.159999 +20135 DATA 0.180000 -3.940000 -0.060001 +20136 DATA 0.220000 -3.140000 0.279999 +20137 DATA 0.130000 -3.150000 0.039999 +20138 REM Texture coordinates +20139 DATA 0.0 0.0 +20140 DATA 0.968627 0.759563 +20141 DATA 0.968627 0.759563 +20142 DATA 0.968627 0.759563 +20143 DATA 0.968627 0.759563 +20144 DATA 0.968627 0.759563 +20145 DATA 0.968627 0.759563 +20146 DATA 0.968627 0.759563 +20147 DATA 0.968627 0.759563 +20148 DATA 0.968627 0.759563 +20149 DATA 0.968627 0.759563 +20150 DATA 0.968627 0.759563 +20151 DATA 0.968627 0.759563 +20152 DATA 0.968627 0.759563 +20153 DATA 0.968627 0.759563 +20154 DATA 0.968627 0.759563 +20155 DATA 0.968627 0.759563 +20156 DATA 0.968627 0.759563 +20157 DATA 0.968627 0.759563 +20158 DATA 0.968627 0.759563 +20159 DATA 0.968627 0.759563 +20160 DATA 0.968627 0.759563 +20161 DATA 0.968627 0.759563 +20162 DATA 0.968627 0.759563 +20163 DATA 0.968627 0.759563 +20164 DATA 0.968627 0.759563 +20165 DATA 0.968627 0.759563 +20166 DATA 0.968627 0.759563 +20167 DATA 0.968627 0.759563 +20168 DATA 0.968627 0.759563 +20169 DATA 0.968627 0.759563 +20170 DATA 0.968627 0.759563 +20171 DATA 0.968627 0.759563 +20172 DATA 0.968627 0.759563 +20173 DATA 0.968627 0.759563 +20174 DATA 0.968627 0.759563 +20175 DATA 0.968627 0.759563 +20176 DATA 0.968627 0.759563 +20177 DATA 0.968627 0.759563 +20178 DATA 0.968627 0.759563 +20179 DATA 0.968627 0.759563 +20180 DATA 0.968627 0.759563 +20181 DATA 0.968627 0.759563 +20182 DATA 0.968627 0.759563 +20183 DATA 0.968627 0.759563 +20184 DATA 0.968627 0.759563 +20185 DATA 0.968627 0.759563 +20186 DATA 0.968627 0.759563 +20187 DATA 0.968627 0.759563 +20188 DATA 0.968627 0.759563 +20189 DATA 0.968627 0.759563 +20190 DATA 0.968627 0.759563 +20191 DATA 0.968627 0.759563 +20192 DATA 0.968627 0.759563 +20193 DATA 0.968627 0.759563 +20194 DATA 0.054902 0.442623 +20195 DATA 0.054902 0.644809 +20196 DATA 0.003922 0.644809 +20197 DATA 0.054902 0.442623 +20198 DATA 0.003922 0.644809 +20199 DATA 0.003922 0.442623 +20200 DATA 0.003922 0.442623 +20201 DATA 0.003922 0.644809 +20202 DATA 0.054902 0.644809 +20203 DATA 0.003922 0.442623 +20204 DATA 0.054902 0.644809 +20205 DATA 0.054902 0.442623 +20206 DATA 0.996078 0.792350 +20207 DATA 0.996078 0.994536 +20208 DATA 0.945098 0.994536 +20209 DATA 0.996078 0.792350 +20210 DATA 0.945098 0.994536 +20211 DATA 0.945098 0.792350 +20212 DATA 0.996078 0.792350 +20213 DATA 0.996078 0.994536 +20214 DATA 0.945098 0.994536 +20215 DATA 0.996078 0.792350 +20216 DATA 0.945098 0.994536 +20217 DATA 0.945098 0.792350 +20218 DATA 0.956863 0.759563 +20219 DATA 0.956863 0.759563 +20220 DATA 0.956863 0.759563 +20221 DATA 0.968627 0.759563 +20222 DATA 0.968627 0.759563 +20223 DATA 0.968627 0.759563 +20224 DATA 0.968627 0.759563 +20225 DATA 0.968627 0.759563 +20226 DATA 0.968627 0.759563 +20227 DATA 0.968627 0.759563 +20228 DATA 0.968627 0.759563 +20229 DATA 0.968627 0.759563 +20230 DATA 0.968627 0.759563 +20231 DATA 0.968627 0.759563 +20232 DATA 0.968627 0.759563 +20233 DATA 0.968627 0.759563 +20234 DATA 0.968627 0.759563 +20235 DATA 0.968627 0.759563 +20236 DATA 0.956863 0.759563 +20237 DATA 0.956863 0.759563 +20238 DATA 0.956863 0.759563 +20239 DATA 0.956863 0.759563 +20240 DATA 0.956863 0.759563 +20241 DATA 0.956863 0.759563 +20242 DATA 0.956863 0.759563 +20243 DATA 0.956863 0.759563 +20244 DATA 0.956863 0.759563 +20245 DATA 0.956863 0.759563 +20246 DATA 0.956863 0.759563 +20247 DATA 0.956863 0.759563 +20248 DATA 0.956863 0.759563 +20249 DATA 0.956863 0.759563 +20250 DATA 0.956863 0.759563 +20251 DATA 0.956863 0.759563 +20252 DATA 0.956863 0.759563 +20253 DATA 0.956863 0.759563 +20254 DATA 0.956863 0.759563 +20255 DATA 0.956863 0.759563 +20256 DATA 0.956863 0.759563 +20257 DATA 0.956863 0.759563 +20258 DATA 0.956863 0.759563 +20259 DATA 0.956863 0.759563 +20260 DATA 0.996078 0.994536 +20261 DATA 0.945098 0.792350 +20262 DATA 0.996078 0.792350 +20263 DATA 0.945098 0.792350 +20264 DATA 0.996078 0.994536 +20265 DATA 0.945098 0.994536 +20266 REM Vertex indexes +20267 DATA 1 2 3 +20268 DATA 4 5 6 +20269 DATA 7 8 9 +20270 DATA 10 11 12 +20271 DATA 13 14 15 +20272 DATA 16 17 18 +20273 DATA 19 20 21 +20274 DATA 22 23 24 +20275 DATA 25 26 27 +20276 DATA 28 29 30 +20277 DATA 31 32 33 +20278 DATA 34 35 36 +20279 DATA 37 38 39 +20280 DATA 40 41 42 +20281 DATA 43 44 45 +20282 DATA 46 47 48 +20283 DATA 49 50 51 +20284 DATA 52 53 54 +20285 DATA 55 56 57 +20286 DATA 58 59 60 +20287 DATA 61 62 63 +20288 DATA 64 65 66 +20289 DATA 67 68 69 +20290 DATA 70 71 72 +20291 DATA 73 74 75 +20292 DATA 76 77 78 +20293 DATA 79 80 81 +20294 DATA 82 83 84 +20295 DATA 85 86 87 +20296 DATA 88 89 90 +20297 DATA 91 92 93 +20298 DATA 94 95 96 +20299 DATA 97 98 99 +20300 DATA 100 101 102 +20301 DATA 103 104 105 +20302 DATA 106 107 108 +20303 DATA 109 110 111 +20304 DATA 112 113 114 +20305 DATA 115 116 117 +20306 DATA 118 119 120 +20307 DATA 121 122 123 +20308 DATA 124 125 126 +20309 REM Texture indexes +20310 DATA 1 2 3 +20311 DATA 4 5 6 +20312 DATA 7 8 9 +20313 DATA 10 11 12 +20314 DATA 13 14 15 +20315 DATA 16 17 18 +20316 DATA 19 20 21 +20317 DATA 22 23 24 +20318 DATA 25 26 27 +20319 DATA 28 29 30 +20320 DATA 31 32 33 +20321 DATA 34 35 36 +20322 DATA 37 38 39 +20323 DATA 40 41 42 +20324 DATA 43 44 45 +20325 DATA 46 47 48 +20326 DATA 49 50 51 +20327 DATA 52 53 54 +20328 DATA 55 56 57 +20329 DATA 58 59 60 +20330 DATA 61 62 63 +20331 DATA 64 65 66 +20332 DATA 67 68 69 +20333 DATA 70 71 72 +20334 DATA 73 74 75 +20335 DATA 76 77 78 +20336 DATA 79 80 81 +20337 DATA 82 83 84 +20338 DATA 85 86 87 +20339 DATA 88 89 90 +20340 DATA 91 92 93 +20341 DATA 94 95 96 +20342 DATA 97 98 99 +20343 DATA 100 101 102 +20344 DATA 103 104 105 +20345 DATA 106 107 108 +20346 DATA 109 110 111 +20347 DATA 112 113 114 +20348 DATA 115 116 117 +20349 DATA 118 119 120 +20350 DATA 121 122 123 +20351 DATA 124 125 126 diff --git a/video/pingo/assets/lara.obj b/video/pingo/assets/lara.obj new file mode 100644 index 00000000..758768ef --- /dev/null +++ b/video/pingo/assets/lara.obj @@ -0,0 +1,4194 @@ +# Blender v2.79 (sub 0) OBJ File: '' +# www.blender.org +mtllib Lara.mtl +o M005 +v 0.360000 -2.810000 -0.200000 +v 0.360000 -3.150000 -0.180001 +v 0.130000 -3.150000 0.039999 +v 0.360000 -2.810000 -0.200000 +v 0.130000 -3.150000 0.039999 +v 0.040000 -2.810000 0.060000 +v 0.590000 -3.150000 0.039999 +v 0.360000 -3.150000 -0.180001 +v 0.360000 -2.810000 -0.200000 +v 0.590000 -3.150000 0.039999 +v 0.360000 -2.810000 -0.200000 +v 0.670000 -2.810000 0.050000 +v 0.510000 -3.140000 0.279999 +v 0.590000 -3.150000 0.039999 +v 0.670000 -2.810000 0.050000 +v 0.510000 -3.140000 0.279999 +v 0.670000 -2.810000 0.050000 +v 0.550000 -2.690000 0.380000 +v 0.160000 -2.690000 0.380000 +v 0.220000 -3.140000 0.279999 +v 0.510000 -3.140000 0.279999 +v 0.160000 -2.690000 0.380000 +v 0.510000 -3.140000 0.279999 +v 0.550000 -2.690000 0.380000 +v 0.040000 -2.810000 0.060000 +v 0.130000 -3.150000 0.039999 +v 0.220000 -3.140000 0.279999 +v 0.040000 -2.810000 0.060000 +v 0.220000 -3.140000 0.279999 +v 0.160000 -2.690000 0.380000 +v 0.430000 -2.050000 0.110000 +v 0.490000 -2.050000 -0.060000 +v 0.170000 -2.050000 -0.060000 +v 0.430000 -2.050000 0.110000 +v 0.170000 -2.050000 -0.060000 +v 0.230000 -2.050000 0.120000 +v 0.490000 -2.050000 -0.060000 +v 0.430000 -2.050000 0.110000 +v 0.550000 -2.690000 0.380000 +v 0.490000 -2.050000 -0.060000 +v 0.550000 -2.690000 0.380000 +v 0.670000 -2.810000 0.050000 +v 0.430000 -2.050000 0.110000 +v 0.230000 -2.050000 0.120000 +v 0.160000 -2.690000 0.380000 +v 0.430000 -2.050000 0.110000 +v 0.160000 -2.690000 0.380000 +v 0.550000 -2.690000 0.380000 +v 0.170000 -2.050000 -0.060000 +v 0.040000 -2.810000 0.060000 +v 0.160000 -2.690000 0.380000 +v 0.170000 -2.050000 -0.060000 +v 0.160000 -2.690000 0.380000 +v 0.230000 -2.050000 0.120000 +v 0.180000 -3.940000 -0.060001 +v 0.130000 -3.150000 0.039999 +v 0.360000 -3.150000 -0.180001 +v 0.180000 -3.940000 -0.060001 +v 0.360000 -3.150000 -0.180001 +v 0.330000 -3.940000 -0.190001 +v 0.330000 -3.940000 -0.190001 +v 0.360000 -3.150000 -0.180001 +v 0.590000 -3.150000 0.039999 +v 0.330000 -3.940000 -0.190001 +v 0.590000 -3.150000 0.039999 +v 0.490000 -3.940000 -0.060001 +v 0.490000 -3.940000 -0.060001 +v 0.590000 -3.150000 0.039999 +v 0.510000 -3.140000 0.279999 +v 0.490000 -3.940000 -0.060001 +v 0.510000 -3.140000 0.279999 +v 0.430000 -3.940000 0.159999 +v 0.430000 -3.940000 0.159999 +v 0.510000 -3.140000 0.279999 +v 0.220000 -3.140000 0.279999 +v 0.430000 -3.940000 0.159999 +v 0.220000 -3.140000 0.279999 +v 0.230000 -3.940000 0.159999 +v 0.240000 -4.050000 -0.080001 +v 0.450000 -4.050000 -0.090001 +v 0.350000 -4.050000 0.099999 +v 0.490000 -2.050000 -0.060000 +v 0.330000 -2.050000 -0.230000 +v 0.170000 -2.050000 -0.060000 +v 0.360000 -2.810000 -0.200000 +v 0.170000 -2.050000 -0.060000 +v 0.330000 -2.050000 -0.230000 +v 0.360000 -2.810000 -0.200000 +v 0.040000 -2.810000 0.060000 +v 0.170000 -2.050000 -0.060000 +v 0.490000 -2.050000 -0.060000 +v 0.670000 -2.810000 0.050000 +v 0.360000 -2.810000 -0.200000 +v 0.360000 -2.810000 -0.200000 +v 0.330000 -2.050000 -0.230000 +v 0.490000 -2.050000 -0.060000 +v 0.240000 -4.050000 -0.080001 +v 0.180000 -3.940000 -0.060001 +v 0.330000 -3.940000 -0.190001 +v 0.450000 -4.050000 -0.090001 +v 0.330000 -3.940000 -0.190001 +v 0.490000 -3.940000 -0.060001 +v 0.450000 -4.050000 -0.090001 +v 0.240000 -4.050000 -0.080001 +v 0.330000 -3.940000 -0.190001 +v 0.430000 -3.940000 0.159999 +v 0.350000 -4.050000 0.099999 +v 0.450000 -4.050000 -0.090001 +v 0.450000 -4.050000 -0.090001 +v 0.490000 -3.940000 -0.060001 +v 0.430000 -3.940000 0.159999 +v 0.350000 -4.050000 0.099999 +v 0.430000 -3.940000 0.159999 +v 0.230000 -3.940000 0.159999 +v 0.240000 -4.050000 -0.080001 +v 0.230000 -3.940000 0.159999 +v 0.180000 -3.940000 -0.060001 +v 0.240000 -4.050000 -0.080001 +v 0.350000 -4.050000 0.099999 +v 0.230000 -3.940000 0.159999 +v 0.220000 -3.140000 0.279999 +v 0.180000 -3.940000 -0.060001 +v 0.230000 -3.940000 0.159999 +v 0.180000 -3.940000 -0.060001 +v 0.220000 -3.140000 0.279999 +v 0.130000 -3.150000 0.039999 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.054902 0.442623 +vt 0.054902 0.644809 +vt 0.003922 0.644809 +vt 0.054902 0.442623 +vt 0.003922 0.644809 +vt 0.003922 0.442623 +vt 0.003922 0.442623 +vt 0.003922 0.644809 +vt 0.054902 0.644809 +vt 0.003922 0.442623 +vt 0.054902 0.644809 +vt 0.054902 0.442623 +vt 0.996078 0.792350 +vt 0.996078 0.994536 +vt 0.945098 0.994536 +vt 0.996078 0.792350 +vt 0.945098 0.994536 +vt 0.945098 0.792350 +vt 0.996078 0.792350 +vt 0.996078 0.994536 +vt 0.945098 0.994536 +vt 0.996078 0.792350 +vt 0.945098 0.994536 +vt 0.945098 0.792350 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.996078 0.994536 +vt 0.945098 0.792350 +vt 0.996078 0.792350 +vt 0.945098 0.792350 +vt 0.996078 0.994536 +vt 0.945098 0.994536 +vn -0.6906 -0.0425 -0.7220 +vn -0.6260 -0.1204 -0.7705 +vn 0.6906 -0.0425 -0.7220 +vn 0.6229 -0.1239 -0.7724 +vn 0.9213 -0.2261 0.3165 +vn 0.9055 -0.1672 0.3901 +vn 0.0000 -0.2169 0.9762 +vn -0.9008 -0.2590 0.3486 +vn -0.8871 -0.2097 0.4113 +vn 0.0000 1.0000 0.0000 +vn 0.8988 0.3024 0.3172 +vn 0.9345 0.2570 0.2464 +vn 0.0464 0.3716 0.9272 +vn 0.0000 0.3887 0.9214 +vn -0.9393 0.2042 0.2757 +vn -0.9241 0.2262 0.3080 +vn -0.6904 0.0477 -0.7218 +vn -0.6545 0.0344 -0.7552 +vn 0.6911 -0.0171 -0.7225 +vn 0.6305 0.0184 -0.7760 +vn 0.9347 -0.1586 0.3182 +vn 0.9560 -0.1347 0.2607 +vn 0.0000 -0.1483 0.9889 +vn 0.0000 -1.0000 -0.0000 +vn -0.7271 -0.0557 -0.6843 +vn -0.6305 -0.0147 -0.7760 +vn 0.6273 0.0360 -0.7779 +vn 0.7282 0.0017 -0.6854 +vn -0.6397 -0.2147 -0.7381 +vn 0.6305 -0.0176 -0.7760 +vn -0.0343 -0.6925 -0.7206 +vn 0.6585 -0.6680 0.3466 +vn 0.8887 -0.3893 0.2424 +vn 0.0000 -0.4789 0.8779 +vn -0.8464 -0.4966 0.1924 +vn -0.5422 -0.7722 0.3313 +vn -0.9741 -0.0454 0.2214 +vn -0.9299 -0.1035 0.3530 +usemtl tile0 +s 1 +f 1/1/1 2/2/1 3/3/1 +f 4/4/2 5/5/2 6/6/2 +f 7/7/3 8/8/3 9/9/3 +f 10/10/4 11/11/4 12/12/4 +f 13/13/5 14/14/5 15/15/5 +f 16/16/6 17/17/6 18/18/6 +f 19/19/7 20/20/7 21/21/7 +f 22/22/7 23/23/7 24/24/7 +f 25/25/8 26/26/8 27/27/8 +f 28/28/9 29/29/9 30/30/9 +f 31/31/10 32/32/10 33/33/10 +f 34/34/10 35/35/10 36/36/10 +f 37/37/11 38/38/11 39/39/11 +f 40/40/12 41/41/12 42/42/12 +f 43/43/13 44/44/13 45/45/13 +f 46/46/14 47/47/14 48/48/14 +f 49/49/15 50/50/15 51/51/15 +f 52/52/16 53/53/16 54/54/16 +f 55/55/17 56/56/17 57/57/17 +f 58/58/18 59/59/18 60/60/18 +f 61/61/19 62/62/19 63/63/19 +f 64/64/20 65/65/20 66/66/20 +f 67/67/21 68/68/21 69/69/21 +f 70/70/22 71/71/22 72/72/22 +f 73/73/23 74/74/23 75/75/23 +f 76/76/23 77/77/23 78/78/23 +f 79/79/24 80/80/24 81/81/24 +f 82/82/10 83/83/10 84/84/10 +f 85/85/25 86/86/25 87/87/25 +f 88/88/26 89/89/26 90/90/26 +f 91/91/27 92/92/27 93/93/27 +f 94/94/28 95/95/28 96/96/28 +f 97/97/29 98/98/29 99/99/29 +f 100/100/30 101/101/30 102/102/30 +f 103/103/31 104/104/31 105/105/31 +f 106/106/32 107/107/32 108/108/32 +f 109/109/33 110/110/33 111/111/33 +f 112/112/34 113/113/34 114/114/34 +f 115/115/35 116/116/35 117/117/35 +f 118/118/36 119/119/36 120/120/36 +f 121/121/37 122/122/37 123/123/37 +f 124/124/38 125/125/38 126/126/38 +o M006 +v 0.190000 -4.320000 -0.890001 +v 0.170000 -4.520000 -0.910001 +v 0.070000 -4.530000 -0.370001 +v 0.190000 -4.320000 -0.890001 +v 0.070000 -4.530000 -0.370001 +v 0.110000 -4.160000 -0.380001 +v 0.460000 -4.520000 -0.910001 +v 0.440000 -4.320000 -0.890001 +v 0.520000 -4.160000 -0.380001 +v 0.460000 -4.520000 -0.910001 +v 0.520000 -4.160000 -0.380001 +v 0.560000 -4.530000 -0.470001 +v 0.170000 -4.520000 -0.910001 +v 0.460000 -4.520000 -0.910001 +v 0.560000 -4.530000 -0.470001 +v 0.170000 -4.520000 -0.910001 +v 0.560000 -4.530000 -0.470001 +v 0.070000 -4.530000 -0.370001 +v 0.460000 -3.960000 0.179999 +v 0.170000 -3.960000 0.179999 +v 0.140000 -4.180000 0.249999 +v 0.460000 -3.960000 0.179999 +v 0.140000 -4.180000 0.249999 +v 0.490000 -4.180000 0.249999 +v 0.160000 -4.530000 0.289999 +v 0.470000 -4.530000 0.289999 +v 0.490000 -4.180000 0.249999 +v 0.160000 -4.530000 0.289999 +v 0.490000 -4.180000 0.249999 +v 0.140000 -4.180000 0.249999 +v 0.460000 -3.980000 -0.170001 +v 0.170000 -3.980000 -0.170001 +v 0.170000 -3.960000 0.179999 +v 0.460000 -3.980000 -0.170001 +v 0.170000 -3.960000 0.179999 +v 0.460000 -3.960000 0.179999 +v 0.070000 -4.530000 -0.370001 +v 0.560000 -4.530000 -0.470001 +v 0.470000 -4.530000 0.289999 +v 0.070000 -4.530000 -0.370001 +v 0.470000 -4.530000 0.289999 +v 0.160000 -4.530000 0.289999 +v 0.170000 -4.520000 -0.910001 +v 0.190000 -4.320000 -0.890001 +v 0.440000 -4.320000 -0.890001 +v 0.170000 -4.520000 -0.910001 +v 0.440000 -4.320000 -0.890001 +v 0.460000 -4.520000 -0.910001 +v 0.190000 -4.320000 -0.890001 +v 0.110000 -4.160000 -0.380001 +v 0.520000 -4.160000 -0.380001 +v 0.190000 -4.320000 -0.890001 +v 0.520000 -4.160000 -0.380001 +v 0.440000 -4.320000 -0.890001 +v 0.110000 -4.160000 -0.380001 +v 0.170000 -3.980000 -0.170001 +v 0.460000 -3.980000 -0.170001 +v 0.110000 -4.160000 -0.380001 +v 0.460000 -3.980000 -0.170001 +v 0.520000 -4.160000 -0.380001 +v 0.170000 -3.960000 0.179999 +v 0.170000 -3.980000 -0.170001 +v 0.110000 -4.160000 -0.380001 +v 0.110000 -4.160000 -0.380001 +v 0.140000 -4.180000 0.249999 +v 0.170000 -3.960000 0.179999 +v 0.460000 -3.980000 -0.170001 +v 0.460000 -3.960000 0.179999 +v 0.490000 -4.180000 0.249999 +v 0.490000 -4.180000 0.249999 +v 0.520000 -4.160000 -0.380001 +v 0.460000 -3.980000 -0.170001 +v 0.070000 -4.530000 -0.370001 +v 0.160000 -4.530000 0.289999 +v 0.110000 -4.160000 -0.380001 +v 0.160000 -4.530000 0.289999 +v 0.140000 -4.180000 0.249999 +v 0.110000 -4.160000 -0.380001 +v 0.470000 -4.530000 0.289999 +v 0.560000 -4.530000 -0.470001 +v 0.520000 -4.160000 -0.380001 +v 0.520000 -4.160000 -0.380001 +v 0.490000 -4.180000 0.249999 +v 0.470000 -4.530000 0.289999 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.968627 0.775956 +vt 0.968627 0.775956 +vt 0.968627 0.775956 +vt 0.968627 0.775956 +vt 0.968627 0.775956 +vt 0.968627 0.775956 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.968627 0.775956 +vt 0.968627 0.775956 +vt 0.968627 0.775956 +vt 0.968627 0.775956 +vt 0.968627 0.775956 +vt 0.968627 0.775956 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.807843 0.136612 +vt 0.807843 0.251366 +vt 0.756863 0.251366 +vt 0.807843 0.136612 +vt 0.756863 0.251366 +vt 0.756863 0.136612 +vt 0.117647 0.005464 +vt 0.117647 0.120219 +vt 0.066667 0.120219 +vt 0.117647 0.005464 +vt 0.066667 0.120219 +vt 0.066667 0.005464 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vn -0.9771 0.1156 -0.1788 +vn -0.9776 0.1007 -0.1849 +vn 0.9750 0.1164 -0.1895 +vn 0.9639 0.1566 -0.2155 +vn 0.0000 -0.9997 -0.0227 +vn -0.0039 -0.9998 -0.0192 +vn 0.0000 0.3032 0.9529 +vn 0.0000 0.1135 0.9935 +vn 0.0000 0.9984 -0.0570 +vn 0.0000 -1.0000 -0.0000 +vn 0.0000 0.0995 -0.9950 +vn 0.0000 0.9541 -0.2993 +vn 0.0000 0.7593 -0.6508 +vn -0.9416 0.3363 -0.0192 +vn -0.9872 0.1511 0.0518 +vn 0.9911 0.1327 -0.0076 +vn 0.9645 0.2584 0.0541 +vn -0.9848 0.1101 0.1343 +vn -0.9976 -0.0518 0.0459 +vn 0.9900 0.0785 0.1172 +vn 0.9976 -0.0518 0.0459 +usemtl tile0 +s 1 +f 127/127/39 128/128/39 129/129/39 +f 130/130/40 131/131/40 132/132/40 +f 133/133/41 134/134/41 135/135/41 +f 136/136/42 137/137/42 138/138/42 +f 139/139/43 140/140/43 141/141/43 +f 142/142/44 143/143/44 144/144/44 +f 145/145/45 146/146/45 147/147/45 +f 148/148/45 149/149/45 150/150/45 +f 151/151/46 152/152/46 153/153/46 +f 154/154/46 155/155/46 156/156/46 +f 157/157/47 158/158/47 159/159/47 +f 160/160/47 161/161/47 162/162/47 +f 163/163/48 164/164/48 165/165/48 +f 166/166/48 167/167/48 168/168/48 +f 169/169/49 170/170/49 171/171/49 +f 172/172/49 173/173/49 174/174/49 +f 175/175/50 176/176/50 177/177/50 +f 178/178/50 179/179/50 180/180/50 +f 181/181/51 182/182/51 183/183/51 +f 184/184/51 185/185/51 186/186/51 +f 187/187/52 188/188/52 189/189/52 +f 190/190/53 191/191/53 192/192/53 +f 193/193/54 194/194/54 195/195/54 +f 196/196/55 197/197/55 198/198/55 +f 199/199/56 200/200/56 201/201/56 +f 202/202/57 203/203/57 204/204/57 +f 205/205/58 206/206/58 207/207/58 +f 208/208/59 209/209/59 210/210/59 +o M012 +v -0.710000 0.930000 0.180000 +v -0.540000 0.940000 0.120000 +v -0.540000 0.940000 -0.060000 +v -0.710000 0.930000 0.180000 +v -0.540000 0.940000 -0.060000 +v -0.710000 0.930000 -0.120000 +v -0.780000 -0.080000 0.030000 +v -0.820000 0.920000 0.030000 +v -0.710000 0.930000 -0.120000 +v -0.780000 -0.080000 0.030000 +v -0.710000 0.930000 -0.120000 +v -0.710000 -0.070000 -0.070000 +v -0.710000 -0.070000 0.130000 +v -0.710000 0.930000 0.180000 +v -0.820000 0.920000 0.030000 +v -0.710000 -0.070000 0.130000 +v -0.820000 0.920000 0.030000 +v -0.780000 -0.080000 0.030000 +v -0.590000 -0.070000 0.090000 +v -0.540000 0.940000 0.120000 +v -0.710000 0.930000 0.180000 +v -0.590000 -0.070000 0.090000 +v -0.710000 0.930000 0.180000 +v -0.710000 -0.070000 0.130000 +v -0.590000 -0.070000 -0.030000 +v -0.540000 0.940000 -0.060000 +v -0.540000 0.940000 0.120000 +v -0.590000 -0.070000 -0.030000 +v -0.540000 0.940000 0.120000 +v -0.590000 -0.070000 0.090000 +v -0.710000 -0.070000 -0.070000 +v -0.710000 0.930000 -0.120000 +v -0.540000 0.940000 -0.060000 +v -0.710000 -0.070000 -0.070000 +v -0.540000 0.940000 -0.060000 +v -0.590000 -0.070000 -0.030000 +v -0.630000 -0.160000 0.030000 +v -0.690000 -0.160000 0.080000 +v -0.690000 -0.160000 -0.020000 +v -0.710000 0.930000 0.180000 +v -0.710000 0.930000 -0.120000 +v -0.820000 0.920000 0.030000 +v -0.780000 -0.080000 0.030000 +v -0.710000 -0.070000 -0.070000 +v -0.690000 -0.160000 -0.020000 +v -0.710000 -0.070000 0.130000 +v -0.780000 -0.080000 0.030000 +v -0.690000 -0.160000 0.080000 +v -0.780000 -0.080000 0.030000 +v -0.690000 -0.160000 -0.020000 +v -0.690000 -0.160000 0.080000 +v -0.690000 -0.160000 0.080000 +v -0.630000 -0.160000 0.030000 +v -0.590000 -0.070000 0.090000 +v -0.590000 -0.070000 0.090000 +v -0.710000 -0.070000 0.130000 +v -0.690000 -0.160000 0.080000 +v -0.590000 -0.070000 -0.030000 +v -0.590000 -0.070000 0.090000 +v -0.630000 -0.160000 0.030000 +v -0.710000 -0.070000 -0.070000 +v -0.590000 -0.070000 -0.030000 +v -0.690000 -0.160000 -0.020000 +v -0.590000 -0.070000 -0.030000 +v -0.630000 -0.160000 0.030000 +v -0.690000 -0.160000 -0.020000 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vn -0.0587 0.9983 0.0000 +vn -0.8050 -0.0322 -0.5925 +vn -0.8175 -0.0288 -0.5752 +vn -0.8051 -0.0296 0.5924 +vn -0.8173 -0.0327 0.5753 +vn 0.3348 -0.0445 0.9412 +vn 0.3159 -0.0474 0.9476 +vn 0.9988 -0.0494 0.0000 +vn 0.3349 -0.0471 -0.9411 +vn 0.3159 -0.0438 -0.9478 +vn 0.0000 -1.0000 0.0000 +vn -0.0905 0.9959 0.0000 +vn -0.7065 -0.4571 -0.5403 +vn -0.7065 -0.4571 0.5403 +vn -0.6644 -0.7474 0.0000 +vn 0.5007 -0.6231 0.6009 +vn 0.2876 -0.4155 0.8629 +vn 0.9138 -0.4061 -0.0000 +vn 0.2876 -0.4155 -0.8629 +vn 0.5007 -0.6231 -0.6009 +usemtl tile0 +s 1 +f 211/211/60 212/212/60 213/213/60 +f 214/214/60 215/215/60 216/216/60 +f 217/217/61 218/218/61 219/219/61 +f 220/220/62 221/221/62 222/222/62 +f 223/223/63 224/224/63 225/225/63 +f 226/226/64 227/227/64 228/228/64 +f 229/229/65 230/230/65 231/231/65 +f 232/232/66 233/233/66 234/234/66 +f 235/235/67 236/236/67 237/237/67 +f 238/238/67 239/239/67 240/240/67 +f 241/241/68 242/242/68 243/243/68 +f 244/244/69 245/245/69 246/246/69 +f 247/247/70 248/248/70 249/249/70 +f 250/250/71 251/251/71 252/252/71 +f 253/253/72 254/254/72 255/255/72 +f 256/256/73 257/257/73 258/258/73 +f 259/259/74 260/260/74 261/261/74 +f 262/262/75 263/263/75 264/264/75 +f 265/265/76 266/266/76 267/267/76 +f 268/268/77 269/269/77 270/270/77 +f 271/271/78 272/272/78 273/273/78 +f 274/274/79 275/275/79 276/276/79 +o M009 +v 0.530000 0.940000 -0.060000 +v 0.530000 0.940000 0.120000 +v 0.710000 0.940000 0.180000 +v 0.530000 0.940000 -0.060000 +v 0.710000 0.940000 0.180000 +v 0.710000 0.940000 -0.120000 +v 0.710000 0.940000 -0.120000 +v 0.810000 0.930000 0.030000 +v 0.780000 -0.070000 0.030000 +v 0.710000 0.940000 -0.120000 +v 0.780000 -0.070000 0.030000 +v 0.700000 -0.070000 -0.070000 +v 0.810000 0.930000 0.030000 +v 0.710000 0.940000 0.180000 +v 0.710000 -0.070000 0.130000 +v 0.810000 0.930000 0.030000 +v 0.710000 -0.070000 0.130000 +v 0.780000 -0.070000 0.030000 +v 0.710000 0.940000 0.180000 +v 0.530000 0.940000 0.120000 +v 0.580000 -0.070000 0.090000 +v 0.710000 0.940000 0.180000 +v 0.580000 -0.070000 0.090000 +v 0.710000 -0.070000 0.130000 +v 0.530000 0.940000 0.120000 +v 0.530000 0.940000 -0.060000 +v 0.580000 -0.070000 -0.030000 +v 0.530000 0.940000 0.120000 +v 0.580000 -0.070000 -0.030000 +v 0.580000 -0.070000 0.090000 +v 0.530000 0.940000 -0.060000 +v 0.710000 0.940000 -0.120000 +v 0.700000 -0.070000 -0.070000 +v 0.530000 0.940000 -0.060000 +v 0.700000 -0.070000 -0.070000 +v 0.580000 -0.070000 -0.030000 +v 0.690000 -0.160000 -0.020000 +v 0.690000 -0.160000 0.080000 +v 0.630000 -0.160000 0.030000 +v 0.810000 0.930000 0.030000 +v 0.710000 0.940000 -0.120000 +v 0.710000 0.940000 0.180000 +v 0.690000 -0.160000 -0.020000 +v 0.700000 -0.070000 -0.070000 +v 0.780000 -0.070000 0.030000 +v 0.690000 -0.160000 0.080000 +v 0.780000 -0.070000 0.030000 +v 0.710000 -0.070000 0.130000 +v 0.690000 -0.160000 0.080000 +v 0.690000 -0.160000 -0.020000 +v 0.780000 -0.070000 0.030000 +v 0.580000 -0.070000 0.090000 +v 0.630000 -0.160000 0.030000 +v 0.690000 -0.160000 0.080000 +v 0.690000 -0.160000 0.080000 +v 0.710000 -0.070000 0.130000 +v 0.580000 -0.070000 0.090000 +v 0.630000 -0.160000 0.030000 +v 0.580000 -0.070000 0.090000 +v 0.580000 -0.070000 -0.030000 +v 0.690000 -0.160000 -0.020000 +v 0.580000 -0.070000 -0.030000 +v 0.700000 -0.070000 -0.070000 +v 0.690000 -0.160000 -0.020000 +v 0.630000 -0.160000 0.030000 +v 0.580000 -0.070000 -0.030000 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vn 0.0000 1.0000 0.0000 +vn 0.8310 -0.0249 -0.5557 +vn 0.7803 -0.0386 -0.6242 +vn 0.8309 -0.0275 0.5558 +vn 0.8190 -0.0246 0.5733 +vn -0.3159 -0.0438 0.9478 +vn -0.2938 -0.0473 0.9547 +vn -0.9988 -0.0494 0.0000 +vn -0.3159 -0.0438 -0.9478 +vn -0.0000 -1.0000 0.0000 +vn 0.0995 0.9950 0.0000 +vn 0.7164 -0.3980 -0.5731 +vn 0.7326 -0.4477 0.5128 +vn 0.7071 -0.7071 -0.0000 +vn -0.4835 -0.6554 0.5802 +vn -0.2666 -0.4221 0.8665 +vn -0.8742 -0.4856 -0.0000 +vn -0.2838 -0.4414 -0.8513 +vn -0.4835 -0.6554 -0.5802 +usemtl tile0 +s 1 +f 277/277/80 278/278/80 279/279/80 +f 280/280/80 281/281/80 282/282/80 +f 283/283/81 284/284/81 285/285/81 +f 286/286/82 287/287/82 288/288/82 +f 289/289/83 290/290/83 291/291/83 +f 292/292/84 293/293/84 294/294/84 +f 295/295/85 296/296/85 297/297/85 +f 298/298/86 299/299/86 300/300/86 +f 301/301/87 302/302/87 303/303/87 +f 304/304/87 305/305/87 306/306/87 +f 307/307/88 308/308/88 309/309/88 +f 310/310/88 311/311/88 312/312/88 +f 313/313/89 314/314/89 315/315/89 +f 316/316/90 317/317/90 318/318/90 +f 319/319/91 320/320/91 321/321/91 +f 322/322/92 323/323/92 324/324/92 +f 325/325/93 326/326/93 327/327/93 +f 328/328/94 329/329/94 330/330/94 +f 331/331/95 332/332/95 333/333/95 +f 334/334/96 335/335/96 336/336/96 +f 337/337/97 338/338/97 339/339/97 +f 340/340/98 341/341/98 342/342/98 +o M002 +v -0.120000 -3.150000 0.049999 +v -0.350000 -3.150000 -0.170001 +v -0.340000 -2.810000 -0.190000 +v -0.120000 -3.150000 0.049999 +v -0.340000 -2.810000 -0.190000 +v -0.030000 -2.810000 0.060000 +v -0.580000 -3.150000 0.039999 +v -0.660000 -2.810000 0.060000 +v -0.340000 -2.810000 -0.190000 +v -0.580000 -3.150000 0.039999 +v -0.340000 -2.810000 -0.190000 +v -0.350000 -3.150000 -0.170001 +v -0.490000 -3.140000 0.289999 +v -0.540000 -2.690000 0.390000 +v -0.660000 -2.810000 0.060000 +v -0.490000 -3.140000 0.289999 +v -0.660000 -2.810000 0.060000 +v -0.580000 -3.150000 0.039999 +v -0.490000 -3.140000 0.289999 +v -0.210000 -3.140000 0.289999 +v -0.150000 -2.690000 0.390000 +v -0.490000 -3.140000 0.289999 +v -0.150000 -2.690000 0.390000 +v -0.540000 -2.690000 0.390000 +v -0.210000 -3.140000 0.289999 +v -0.120000 -3.150000 0.049999 +v -0.030000 -2.810000 0.060000 +v -0.210000 -3.140000 0.289999 +v -0.030000 -2.810000 0.060000 +v -0.150000 -2.690000 0.390000 +v -0.470000 -2.050000 -0.050000 +v -0.220000 -2.050000 0.120000 +v -0.160000 -2.050000 -0.050000 +v -0.470000 -2.050000 -0.050000 +v -0.160000 -2.050000 -0.050000 +v -0.320000 -2.050000 -0.220000 +v -0.540000 -2.690000 0.390000 +v -0.410000 -2.050000 0.120000 +v -0.470000 -2.050000 -0.050000 +v -0.540000 -2.690000 0.390000 +v -0.470000 -2.050000 -0.050000 +v -0.660000 -2.810000 0.060000 +v -0.150000 -2.690000 0.390000 +v -0.220000 -2.050000 0.120000 +v -0.410000 -2.050000 0.120000 +v -0.150000 -2.690000 0.390000 +v -0.410000 -2.050000 0.120000 +v -0.540000 -2.690000 0.390000 +v -0.160000 -2.050000 -0.050000 +v -0.220000 -2.050000 0.120000 +v -0.150000 -2.690000 0.390000 +v -0.160000 -2.050000 -0.050000 +v -0.150000 -2.690000 0.390000 +v -0.030000 -2.810000 0.060000 +v -0.320000 -3.940000 -0.190001 +v -0.350000 -3.150000 -0.170001 +v -0.120000 -3.150000 0.049999 +v -0.320000 -3.940000 -0.190001 +v -0.120000 -3.150000 0.049999 +v -0.170000 -3.940000 -0.050001 +v -0.480000 -3.940000 -0.050001 +v -0.580000 -3.150000 0.039999 +v -0.350000 -3.150000 -0.170001 +v -0.480000 -3.940000 -0.050001 +v -0.350000 -3.150000 -0.170001 +v -0.320000 -3.940000 -0.190001 +v -0.420000 -3.940000 0.169999 +v -0.490000 -3.140000 0.289999 +v -0.580000 -3.150000 0.039999 +v -0.420000 -3.940000 0.169999 +v -0.580000 -3.150000 0.039999 +v -0.480000 -3.940000 -0.050001 +v -0.220000 -3.940000 0.169999 +v -0.210000 -3.140000 0.289999 +v -0.490000 -3.140000 0.289999 +v -0.220000 -3.940000 0.169999 +v -0.490000 -3.140000 0.289999 +v -0.420000 -3.940000 0.169999 +v -0.340000 -4.050000 0.109999 +v -0.440000 -4.050000 -0.080001 +v -0.230000 -4.050000 -0.080001 +v -0.470000 -2.050000 -0.050000 +v -0.410000 -2.050000 0.120000 +v -0.220000 -2.050000 0.120000 +v -0.320000 -2.050000 -0.220000 +v -0.160000 -2.050000 -0.050000 +v -0.340000 -2.810000 -0.190000 +v -0.160000 -2.050000 -0.050000 +v -0.030000 -2.810000 0.060000 +v -0.340000 -2.810000 -0.190000 +v -0.470000 -2.050000 -0.050000 +v -0.320000 -2.050000 -0.220000 +v -0.340000 -2.810000 -0.190000 +v -0.340000 -2.810000 -0.190000 +v -0.660000 -2.810000 0.060000 +v -0.470000 -2.050000 -0.050000 +v -0.320000 -3.940000 -0.190001 +v -0.170000 -3.940000 -0.050001 +v -0.230000 -4.050000 -0.080001 +v -0.480000 -3.940000 -0.050001 +v -0.320000 -3.940000 -0.190001 +v -0.440000 -4.050000 -0.080001 +v -0.320000 -3.940000 -0.190001 +v -0.230000 -4.050000 -0.080001 +v -0.440000 -4.050000 -0.080001 +v -0.440000 -4.050000 -0.080001 +v -0.340000 -4.050000 0.109999 +v -0.420000 -3.940000 0.169999 +v -0.420000 -3.940000 0.169999 +v -0.480000 -3.940000 -0.050001 +v -0.440000 -4.050000 -0.080001 +v -0.220000 -3.940000 0.169999 +v -0.420000 -3.940000 0.169999 +v -0.340000 -4.050000 0.109999 +v -0.170000 -3.940000 -0.050001 +v -0.220000 -3.940000 0.169999 +v -0.230000 -4.050000 -0.080001 +v -0.220000 -3.940000 0.169999 +v -0.340000 -4.050000 0.109999 +v -0.230000 -4.050000 -0.080001 +v -0.210000 -3.140000 0.289999 +v -0.170000 -3.940000 -0.050001 +v -0.120000 -3.150000 0.049999 +v -0.170000 -3.940000 -0.050001 +v -0.210000 -3.140000 0.289999 +v -0.220000 -3.940000 0.169999 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.003922 0.442623 +vt 0.003922 0.644809 +vt 0.054902 0.644809 +vt 0.003922 0.442623 +vt 0.054902 0.644809 +vt 0.054902 0.442623 +vt 0.054902 0.442623 +vt 0.054902 0.644809 +vt 0.003922 0.644809 +vt 0.054902 0.442623 +vt 0.003922 0.644809 +vt 0.003922 0.442623 +vt 0.996078 0.792350 +vt 0.996078 0.994536 +vt 0.945098 0.994536 +vt 0.996078 0.792350 +vt 0.945098 0.994536 +vt 0.945098 0.792350 +vt 0.996078 0.792350 +vt 0.996078 0.994536 +vt 0.945098 0.994536 +vt 0.996078 0.792350 +vt 0.945098 0.994536 +vt 0.945098 0.792350 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.945098 0.994536 +vt 0.996078 0.792350 +vt 0.996078 0.994536 +vt 0.996078 0.792350 +vt 0.945098 0.994536 +vt 0.945098 0.792350 +vn 0.6899 -0.0627 -0.7212 +vn 0.6214 -0.1418 -0.7705 +vn -0.6127 -0.0980 -0.7842 +vn -0.6741 -0.0236 -0.7383 +vn -0.8992 -0.1877 0.3952 +vn -0.9117 -0.2344 0.3376 +vn 0.0000 -0.2169 0.9762 +vn 0.9033 -0.2494 0.3491 +vn 0.8925 -0.2079 0.4002 +vn 0.0000 1.0000 -0.0000 +vn -0.8950 0.3150 0.3159 +vn -0.9326 0.2681 0.2416 +vn 0.0000 0.3887 0.9214 +vn 0.9162 0.2366 0.3234 +vn 0.9419 0.2002 0.2697 +vn 0.6905 0.0445 -0.7219 +vn 0.6815 0.0493 -0.7302 +vn -0.6743 -0.0012 -0.7385 +vn -0.6585 -0.0060 -0.7526 +vn -0.9309 -0.1325 0.3404 +vn -0.9538 -0.1504 0.2601 +vn 0.0000 -0.1483 0.9889 +vn 0.0000 -1.0000 0.0000 +vn 0.7274 -0.0462 -0.6846 +vn 0.6277 -0.0053 -0.7784 +vn -0.7498 -0.0064 -0.6616 +vn -0.6152 0.0398 -0.7874 +vn 0.6724 -0.1703 -0.7204 +vn -0.6581 -0.0342 -0.7521 +vn 0.0000 -0.7071 -0.7071 +vn -0.6585 -0.6680 0.3466 +vn -0.8887 -0.3893 0.2424 +vn 0.0000 -0.4789 0.8779 +vn 0.8390 -0.5096 0.1907 +vn 0.5493 -0.7727 0.3180 +vn 0.9299 -0.1035 0.3530 +vn 0.9741 -0.0454 0.2214 +usemtl tile0 +s 1 +f 343/343/99 344/344/99 345/345/99 +f 346/346/100 347/347/100 348/348/100 +f 349/349/101 350/350/101 351/351/101 +f 352/352/102 353/353/102 354/354/102 +f 355/355/103 356/356/103 357/357/103 +f 358/358/104 359/359/104 360/360/104 +f 361/361/105 362/362/105 363/363/105 +f 364/364/105 365/365/105 366/366/105 +f 367/367/106 368/368/106 369/369/106 +f 370/370/107 371/371/107 372/372/107 +f 373/373/108 374/374/108 375/375/108 +f 376/376/108 377/377/108 378/378/108 +f 379/379/109 380/380/109 381/381/109 +f 382/382/110 383/383/110 384/384/110 +f 385/385/111 386/386/111 387/387/111 +f 388/388/111 389/389/111 390/390/111 +f 391/391/112 392/392/112 393/393/112 +f 394/394/113 395/395/113 396/396/113 +f 397/397/114 398/398/114 399/399/114 +f 400/400/115 401/401/115 402/402/115 +f 403/403/116 404/404/116 405/405/116 +f 406/406/117 407/407/117 408/408/117 +f 409/409/118 410/410/118 411/411/118 +f 412/412/119 413/413/119 414/414/119 +f 415/415/120 416/416/120 417/417/120 +f 418/418/120 419/419/120 420/420/120 +f 421/421/121 422/422/121 423/423/121 +f 424/424/108 425/425/108 426/426/108 +f 427/427/122 428/428/122 429/429/122 +f 430/430/123 431/431/123 432/432/123 +f 433/433/124 434/434/124 435/435/124 +f 436/436/125 437/437/125 438/438/125 +f 439/439/126 440/440/126 441/441/126 +f 442/442/127 443/443/127 444/444/127 +f 445/445/128 446/446/128 447/447/128 +f 448/448/129 449/449/129 450/450/129 +f 451/451/130 452/452/130 453/453/130 +f 454/454/131 455/455/131 456/456/131 +f 457/457/132 458/458/132 459/459/132 +f 460/460/133 461/461/133 462/462/133 +f 463/463/134 464/464/134 465/465/134 +f 466/466/135 467/467/135 468/468/135 +o M000 +v 0.110000 -0.480000 -0.130000 +v 0.470000 -0.530000 0.300000 +v -0.470000 -0.530000 0.290000 +v 0.110000 -0.480000 -0.130000 +v -0.470000 -0.530000 0.290000 +v -0.090000 -0.480000 -0.140000 +v 0.110000 -0.480000 -0.130000 +v -0.090000 -0.480000 -0.140000 +v -0.330000 -0.250000 -0.370000 +v 0.110000 -0.480000 -0.130000 +v -0.330000 -0.250000 -0.370000 +v 0.360000 -0.250000 -0.360000 +v -0.660000 0.210000 -0.120000 +v -0.350000 0.550000 -0.320000 +v -0.280000 0.210000 -0.400000 +v -0.660000 0.210000 -0.120000 +v -0.280000 0.210000 -0.400000 +v -0.790000 -0.250000 -0.070000 +v -0.640000 -0.280000 0.450000 +v -0.520000 0.240000 0.380000 +v -0.660000 0.210000 -0.120000 +v -0.640000 -0.280000 0.450000 +v -0.660000 0.210000 -0.120000 +v -0.790000 -0.250000 -0.070000 +v 0.370000 0.580000 0.080000 +v 0.360000 0.550000 -0.310000 +v -0.350000 0.550000 -0.320000 +v 0.370000 0.580000 0.080000 +v -0.350000 0.550000 -0.320000 +v -0.350000 0.580000 0.070000 +v -0.280000 0.210000 -0.400000 +v -0.350000 0.550000 -0.320000 +v 0.360000 0.550000 -0.310000 +v -0.280000 0.210000 -0.400000 +v 0.360000 0.550000 -0.310000 +v 0.290000 0.210000 -0.390000 +v 0.540000 0.240000 0.390000 +v 0.370000 0.580000 0.080000 +v -0.350000 0.580000 0.070000 +v 0.540000 0.240000 0.390000 +v -0.350000 0.580000 0.070000 +v -0.520000 0.240000 0.380000 +v -0.330000 -0.250000 -0.370000 +v -0.280000 0.210000 -0.400000 +v 0.290000 0.210000 -0.390000 +v -0.330000 -0.250000 -0.370000 +v 0.290000 0.210000 -0.390000 +v 0.360000 -0.250000 -0.360000 +v 0.790000 -0.250000 -0.070000 +v 0.290000 0.210000 -0.390000 +v 0.360000 0.550000 -0.310000 +v 0.790000 -0.250000 -0.070000 +v 0.360000 0.550000 -0.310000 +v 0.660000 0.210000 -0.120000 +v 0.790000 -0.250000 -0.070000 +v 0.660000 0.210000 -0.120000 +v 0.540000 0.240000 0.390000 +v 0.790000 -0.250000 -0.070000 +v 0.540000 0.240000 0.390000 +v 0.640000 -0.280000 0.460000 +v 0.640000 -0.280000 0.460000 +v 0.540000 0.240000 0.390000 +v -0.520000 0.240000 0.380000 +v 0.640000 -0.280000 0.460000 +v -0.520000 0.240000 0.380000 +v -0.640000 -0.280000 0.450000 +v 0.470000 -0.530000 0.300000 +v 0.640000 -0.280000 0.460000 +v -0.640000 -0.280000 0.450000 +v 0.470000 -0.530000 0.300000 +v -0.640000 -0.280000 0.450000 +v -0.470000 -0.530000 0.290000 +v -0.090000 -0.480000 -0.140000 +v -0.470000 -0.530000 0.290000 +v -0.790000 -0.250000 -0.070000 +v -0.790000 -0.250000 -0.070000 +v -0.330000 -0.250000 -0.370000 +v -0.090000 -0.480000 -0.140000 +v -0.640000 -0.280000 0.450000 +v -0.790000 -0.250000 -0.070000 +v -0.470000 -0.530000 0.290000 +v 0.790000 -0.250000 -0.070000 +v 0.470000 -0.530000 0.300000 +v 0.110000 -0.480000 -0.130000 +v 0.110000 -0.480000 -0.130000 +v 0.360000 -0.250000 -0.360000 +v 0.790000 -0.250000 -0.070000 +v 0.470000 -0.530000 0.300000 +v 0.790000 -0.250000 -0.070000 +v 0.640000 -0.280000 0.460000 +v -0.660000 0.210000 -0.120000 +v -0.350000 0.580000 0.070000 +v -0.350000 0.550000 -0.320000 +v -0.350000 0.580000 0.070000 +v -0.660000 0.210000 -0.120000 +v -0.520000 0.240000 0.380000 +v -0.790000 -0.250000 -0.070000 +v -0.280000 0.210000 -0.400000 +v -0.330000 -0.250000 -0.370000 +v 0.370000 0.580000 0.080000 +v 0.660000 0.210000 -0.120000 +v 0.360000 0.550000 -0.310000 +v 0.660000 0.210000 -0.120000 +v 0.370000 0.580000 0.080000 +v 0.540000 0.240000 0.390000 +v 0.290000 0.210000 -0.390000 +v 0.790000 -0.250000 -0.070000 +v 0.360000 -0.250000 -0.360000 +vt 0.945098 0.775956 +vt 0.945098 0.775956 +vt 0.945098 0.775956 +vt 0.945098 0.775956 +vt 0.945098 0.775956 +vt 0.945098 0.775956 +vt 0.945098 0.775956 +vt 0.945098 0.775956 +vt 0.945098 0.775956 +vt 0.945098 0.775956 +vt 0.945098 0.775956 +vt 0.945098 0.775956 +vt 0.243137 0.661202 +vt 0.243137 0.994536 +vt 0.160784 0.994536 +vt 0.243137 0.661202 +vt 0.160784 0.994536 +vt 0.160784 0.661202 +vt 0.745098 0.136612 +vt 0.745098 0.251366 +vt 0.662745 0.251366 +vt 0.745098 0.136612 +vt 0.662745 0.251366 +vt 0.662745 0.136612 +vt 0.933333 0.748634 +vt 0.933333 0.775956 +vt 0.882353 0.775956 +vt 0.933333 0.748634 +vt 0.882353 0.775956 +vt 0.882353 0.748634 +vt 0.694118 0.049180 +vt 0.694118 0.120219 +vt 0.839216 0.120219 +vt 0.694118 0.049180 +vt 0.839216 0.120219 +vt 0.839216 0.049180 +vt 0.211765 0.136612 +vt 0.211765 0.251366 +vt 0.003922 0.251366 +vt 0.211765 0.136612 +vt 0.003922 0.251366 +vt 0.003922 0.136612 +vt 0.380392 0.136612 +vt 0.380392 0.251366 +vt 0.525490 0.251366 +vt 0.380392 0.136612 +vt 0.525490 0.251366 +vt 0.525490 0.136612 +vt 0.160784 0.661202 +vt 0.160784 0.994536 +vt 0.243137 0.994536 +vt 0.160784 0.661202 +vt 0.243137 0.994536 +vt 0.243137 0.661202 +vt 0.662745 0.136612 +vt 0.662745 0.251366 +vt 0.745098 0.251366 +vt 0.662745 0.136612 +vt 0.745098 0.251366 +vt 0.745098 0.136612 +vt 0.682353 0.486339 +vt 0.682353 0.644809 +vt 0.505882 0.644809 +vt 0.682353 0.486339 +vt 0.505882 0.644809 +vt 0.505882 0.486339 +vt 0.494118 0.049180 +vt 0.494118 0.120219 +vt 0.317647 0.120219 +vt 0.494118 0.049180 +vt 0.317647 0.120219 +vt 0.317647 0.049180 +vt 0.945098 0.759563 +vt 0.945098 0.759563 +vt 0.945098 0.759563 +vt 0.945098 0.759563 +vt 0.945098 0.759563 +vt 0.945098 0.759563 +vt 0.945098 0.759563 +vt 0.945098 0.759563 +vt 0.945098 0.759563 +vt 0.945098 0.759563 +vt 0.945098 0.759563 +vt 0.945098 0.759563 +vt 0.945098 0.759563 +vt 0.945098 0.759563 +vt 0.945098 0.759563 +vt 0.945098 0.759563 +vt 0.945098 0.759563 +vt 0.945098 0.759563 +vt 0.537255 0.136612 +vt 0.650980 0.251366 +vt 0.537255 0.251366 +vt 0.650980 0.251366 +vt 0.537255 0.136612 +vt 0.650980 0.136612 +vt 0.913725 0.049180 +vt 0.964706 0.120219 +vt 0.964706 0.049180 +vt 0.650980 0.251366 +vt 0.537255 0.136612 +vt 0.537255 0.251366 +vt 0.537255 0.136612 +vt 0.650980 0.251366 +vt 0.650980 0.136612 +vt 0.964706 0.120219 +vt 0.913725 0.049180 +vt 0.964706 0.049180 +vn 0.0012 -0.9932 -0.1165 +vn 0.0055 -0.9938 -0.1107 +vn 0.0363 -0.6875 -0.7253 +vn 0.0102 -0.7126 -0.7015 +vn -0.5919 0.0671 -0.8032 +vn -0.5913 0.0799 -0.8025 +vn -0.9363 0.2494 0.2472 +vn -0.9152 0.2892 0.2807 +vn 0.0011 0.9971 -0.0767 +vn 0.0137 0.2317 -0.9727 +vn 0.0171 0.2257 -0.9741 +vn -0.0103 0.6709 0.7415 +vn -0.0070 0.6756 0.7372 +vn 0.0175 -0.0670 -0.9976 +vn 0.0145 -0.0629 -0.9979 +vn 0.5829 0.0705 -0.8095 +vn 0.5982 0.0824 -0.7971 +vn 0.9362 0.2867 0.2034 +vn 0.9359 0.2173 0.2772 +vn -0.0094 0.1316 0.9913 +vn -0.0077 0.1352 0.9908 +vn -0.0066 -0.5359 0.8443 +vn -0.0089 -0.5433 0.8395 +vn -0.3226 -0.8644 -0.3856 +vn -0.3164 -0.8152 -0.4851 +vn -0.7553 -0.6298 0.1815 +vn 0.3266 -0.8679 -0.3743 +vn 0.3194 -0.8208 -0.4736 +vn 0.7567 -0.6289 0.1786 +vn -0.7526 0.6565 -0.0505 +vn -0.7983 0.5717 0.1892 +vn -0.5463 0.0048 -0.8376 +vn 0.7668 0.6382 -0.0688 +vn 0.8170 0.5541 0.1596 +vn 0.5589 0.0310 -0.8287 +usemtl tile0 +s 1 +f 469/469/136 470/470/136 471/471/136 +f 472/472/137 473/473/137 474/474/137 +f 475/475/138 476/476/138 477/477/138 +f 478/478/139 479/479/139 480/480/139 +f 481/481/140 482/482/140 483/483/140 +f 484/484/141 485/485/141 486/486/141 +f 487/487/142 488/488/142 489/489/142 +f 490/490/143 491/491/143 492/492/143 +f 493/493/144 494/494/144 495/495/144 +f 496/496/144 497/497/144 498/498/144 +f 499/499/145 500/500/145 501/501/145 +f 502/502/146 503/503/146 504/504/146 +f 505/505/147 506/506/147 507/507/147 +f 508/508/148 509/509/148 510/510/148 +f 511/511/149 512/512/149 513/513/149 +f 514/514/150 515/515/150 516/516/150 +f 517/517/151 518/518/151 519/519/151 +f 520/520/152 521/521/152 522/522/152 +f 523/523/153 524/524/153 525/525/153 +f 526/526/154 527/527/154 528/528/154 +f 529/529/155 530/530/155 531/531/155 +f 532/532/156 533/533/156 534/534/156 +f 535/535/157 536/536/157 537/537/157 +f 538/538/158 539/539/158 540/540/158 +f 541/541/159 542/542/159 543/543/159 +f 544/544/160 545/545/160 546/546/160 +f 547/547/161 548/548/161 549/549/161 +f 550/550/162 551/551/162 552/552/162 +f 553/553/163 554/554/163 555/555/163 +f 556/556/164 557/557/164 558/558/164 +f 559/559/165 560/560/165 561/561/165 +f 562/562/166 563/563/166 564/564/166 +f 565/565/167 566/566/167 567/567/167 +f 568/568/168 569/569/168 570/570/168 +f 571/571/169 572/572/169 573/573/169 +f 574/574/170 575/575/170 576/576/170 +o M011 +v -0.830000 0.940000 0.010000 +v -0.790000 1.830000 0.010000 +v -0.670000 1.880000 -0.150000 +v -0.830000 0.940000 0.010000 +v -0.670000 1.880000 -0.150000 +v -0.710000 0.940000 -0.140000 +v -0.720000 0.940000 0.160000 +v -0.670000 1.880000 0.170000 +v -0.790000 1.830000 0.010000 +v -0.720000 0.940000 0.160000 +v -0.790000 1.830000 0.010000 +v -0.830000 0.940000 0.010000 +v -0.540000 0.940000 0.110000 +v -0.480000 1.940000 0.110000 +v -0.670000 1.880000 0.170000 +v -0.540000 0.940000 0.110000 +v -0.670000 1.880000 0.170000 +v -0.720000 0.940000 0.160000 +v -0.530000 0.940000 -0.080000 +v -0.470000 1.940000 -0.090000 +v -0.480000 1.940000 0.110000 +v -0.530000 0.940000 -0.080000 +v -0.480000 1.940000 0.110000 +v -0.540000 0.940000 0.110000 +v -0.710000 0.940000 -0.140000 +v -0.670000 1.880000 -0.150000 +v -0.470000 1.940000 -0.090000 +v -0.710000 0.940000 -0.140000 +v -0.470000 1.940000 -0.090000 +v -0.530000 0.940000 -0.080000 +v -0.550000 2.020000 0.010000 +v -0.640000 2.020000 -0.070000 +v -0.640000 2.020000 0.090000 +v -0.610000 0.850000 0.010000 +v -0.700000 0.850000 0.090000 +v -0.700000 0.850000 -0.070000 +v -0.640000 2.020000 0.090000 +v -0.640000 2.020000 -0.070000 +v -0.790000 1.830000 0.010000 +v -0.640000 2.020000 -0.070000 +v -0.670000 1.880000 -0.150000 +v -0.790000 1.830000 0.010000 +v -0.790000 1.830000 0.010000 +v -0.670000 1.880000 0.170000 +v -0.640000 2.020000 0.090000 +v -0.550000 2.020000 0.010000 +v -0.640000 2.020000 0.090000 +v -0.480000 1.940000 0.110000 +v -0.640000 2.020000 0.090000 +v -0.670000 1.880000 0.170000 +v -0.480000 1.940000 0.110000 +v -0.550000 2.020000 0.010000 +v -0.480000 1.940000 0.110000 +v -0.470000 1.940000 -0.090000 +v -0.470000 1.940000 -0.090000 +v -0.670000 1.880000 -0.150000 +v -0.640000 2.020000 -0.070000 +v -0.640000 2.020000 -0.070000 +v -0.550000 2.020000 0.010000 +v -0.470000 1.940000 -0.090000 +v -0.830000 0.940000 0.010000 +v -0.710000 0.940000 -0.140000 +v -0.700000 0.850000 -0.070000 +v -0.720000 0.940000 0.160000 +v -0.830000 0.940000 0.010000 +v -0.700000 0.850000 0.090000 +v -0.830000 0.940000 0.010000 +v -0.700000 0.850000 -0.070000 +v -0.700000 0.850000 0.090000 +v -0.700000 0.850000 0.090000 +v -0.610000 0.850000 0.010000 +v -0.540000 0.940000 0.110000 +v -0.540000 0.940000 0.110000 +v -0.720000 0.940000 0.160000 +v -0.700000 0.850000 0.090000 +v -0.530000 0.940000 -0.080000 +v -0.540000 0.940000 0.110000 +v -0.610000 0.850000 0.010000 +v -0.710000 0.940000 -0.140000 +v -0.530000 0.940000 -0.080000 +v -0.700000 0.850000 -0.070000 +v -0.530000 0.940000 -0.080000 +v -0.610000 0.850000 0.010000 +v -0.700000 0.850000 -0.070000 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vn -0.8049 0.0362 -0.5923 +vn -0.7806 0.0266 -0.6245 +vn -0.8049 0.0365 0.5923 +vn -0.8059 0.0362 0.5910 +vn 0.3064 -0.0184 0.9517 +vn 0.2676 -0.0245 0.9632 +vn 0.9970 -0.0593 0.0498 +vn 0.9968 -0.0598 0.0525 +vn 0.2935 -0.0227 -0.9557 +vn 0.3161 -0.0284 -0.9483 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn -0.7849 0.6196 0.0000 +vn -0.7824 0.4268 -0.4535 +vn -0.7824 0.4268 0.4535 +vn 0.3659 0.8347 0.4116 +vn 0.1267 0.4715 0.8727 +vn 0.7291 0.6835 0.0365 +vn 0.1199 0.4731 -0.8728 +vn 0.3523 0.8478 -0.3964 +vn -0.6776 -0.4969 -0.5421 +vn -0.6795 -0.5385 0.4983 +vn -0.5692 -0.8222 0.0000 +vn 0.3960 -0.8030 0.4455 +vn 0.2203 -0.5679 0.7931 +vn 0.7665 -0.6410 0.0403 +vn 0.2587 -0.5750 -0.7762 +vn 0.3977 -0.8010 -0.4475 +usemtl tile0 +s 1 +f 577/577/171 578/578/171 579/579/171 +f 580/580/172 581/581/172 582/582/172 +f 583/583/173 584/584/173 585/585/173 +f 586/586/174 587/587/174 588/588/174 +f 589/589/175 590/590/175 591/591/175 +f 592/592/176 593/593/176 594/594/176 +f 595/595/177 596/596/177 597/597/177 +f 598/598/178 599/599/178 600/600/178 +f 601/601/179 602/602/179 603/603/179 +f 604/604/180 605/605/180 606/606/180 +f 607/607/181 608/608/181 609/609/181 +f 610/610/182 611/611/182 612/612/182 +f 613/613/183 614/614/183 615/615/183 +f 616/616/184 617/617/184 618/618/184 +f 619/619/185 620/620/185 621/621/185 +f 622/622/186 623/623/186 624/624/186 +f 625/625/187 626/626/187 627/627/187 +f 628/628/188 629/629/188 630/630/188 +f 631/631/189 632/632/189 633/633/189 +f 634/634/190 635/635/190 636/636/190 +f 637/637/191 638/638/191 639/639/191 +f 640/640/192 641/641/192 642/642/192 +f 643/643/193 644/644/193 645/645/193 +f 646/646/194 647/647/194 648/648/194 +f 649/649/195 650/650/195 651/651/195 +f 652/652/196 653/653/196 654/654/196 +f 655/655/197 656/656/197 657/657/197 +f 658/658/198 659/659/198 660/660/198 +o M008 +v 0.670000 1.880000 -0.150000 +v 0.800000 1.830000 0.010000 +v 0.820000 0.930000 0.010000 +v 0.670000 1.880000 -0.150000 +v 0.820000 0.930000 0.010000 +v 0.700000 0.940000 -0.140000 +v 0.800000 1.830000 0.010000 +v 0.680000 1.880000 0.170000 +v 0.710000 0.940000 0.160000 +v 0.800000 1.830000 0.010000 +v 0.710000 0.940000 0.160000 +v 0.820000 0.930000 0.010000 +v 0.680000 1.880000 0.170000 +v 0.480000 1.940000 0.110000 +v 0.530000 0.940000 0.110000 +v 0.680000 1.880000 0.170000 +v 0.530000 0.940000 0.110000 +v 0.710000 0.940000 0.160000 +v 0.480000 1.940000 0.110000 +v 0.480000 1.940000 -0.090000 +v 0.530000 0.940000 -0.080000 +v 0.480000 1.940000 0.110000 +v 0.530000 0.940000 -0.080000 +v 0.530000 0.940000 0.110000 +v 0.480000 1.940000 -0.090000 +v 0.670000 1.880000 -0.150000 +v 0.700000 0.940000 -0.140000 +v 0.480000 1.940000 -0.090000 +v 0.700000 0.940000 -0.140000 +v 0.530000 0.940000 -0.080000 +v 0.650000 2.020000 0.090000 +v 0.650000 2.020000 -0.070000 +v 0.550000 2.020000 0.010000 +v 0.690000 0.850000 -0.070000 +v 0.690000 0.850000 0.090000 +v 0.600000 0.850000 0.010000 +v 0.800000 1.830000 0.010000 +v 0.650000 2.020000 -0.070000 +v 0.650000 2.020000 0.090000 +v 0.800000 1.830000 0.010000 +v 0.670000 1.880000 -0.150000 +v 0.650000 2.020000 -0.070000 +v 0.650000 2.020000 0.090000 +v 0.680000 1.880000 0.170000 +v 0.800000 1.830000 0.010000 +v 0.480000 1.940000 0.110000 +v 0.650000 2.020000 0.090000 +v 0.550000 2.020000 0.010000 +v 0.480000 1.940000 0.110000 +v 0.680000 1.880000 0.170000 +v 0.650000 2.020000 0.090000 +v 0.480000 1.940000 -0.090000 +v 0.480000 1.940000 0.110000 +v 0.550000 2.020000 0.010000 +v 0.650000 2.020000 -0.070000 +v 0.670000 1.880000 -0.150000 +v 0.480000 1.940000 -0.090000 +v 0.480000 1.940000 -0.090000 +v 0.550000 2.020000 0.010000 +v 0.650000 2.020000 -0.070000 +v 0.690000 0.850000 -0.070000 +v 0.700000 0.940000 -0.140000 +v 0.820000 0.930000 0.010000 +v 0.690000 0.850000 0.090000 +v 0.820000 0.930000 0.010000 +v 0.710000 0.940000 0.160000 +v 0.690000 0.850000 0.090000 +v 0.690000 0.850000 -0.070000 +v 0.820000 0.930000 0.010000 +v 0.530000 0.940000 0.110000 +v 0.600000 0.850000 0.010000 +v 0.690000 0.850000 0.090000 +v 0.690000 0.850000 0.090000 +v 0.710000 0.940000 0.160000 +v 0.530000 0.940000 0.110000 +v 0.600000 0.850000 0.010000 +v 0.530000 0.940000 0.110000 +v 0.530000 0.940000 -0.080000 +v 0.690000 0.850000 -0.070000 +v 0.530000 0.940000 -0.080000 +v 0.700000 0.940000 -0.140000 +v 0.690000 0.850000 -0.070000 +v 0.600000 0.850000 0.010000 +v 0.530000 0.940000 -0.080000 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vn 0.7786 0.0173 -0.6272 +vn 0.7813 0.0183 -0.6238 +vn 0.8027 0.0193 0.5960 +vn 0.8068 0.0179 0.5905 +vn -0.2913 -0.0146 0.9565 +vn -0.2676 -0.0188 0.9633 +vn -0.9988 -0.0499 0.0000 +vn -0.3068 -0.0199 -0.9516 +vn -0.3327 -0.0261 -0.9427 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.7849 0.6196 0.0000 +vn 0.7693 0.3963 -0.5012 +vn 0.7824 0.4268 0.4535 +vn -0.3429 0.8359 0.4286 +vn -0.1199 0.4731 0.8728 +vn -0.7526 0.6585 0.0000 +vn -0.1232 0.4790 -0.8691 +vn -0.3429 0.8359 -0.4286 +vn 0.6561 -0.5074 -0.5587 +vn 0.6563 -0.5487 0.5179 +vn 0.5241 -0.8517 0.0000 +vn -0.3960 -0.8030 0.4455 +vn -0.2203 -0.5679 0.7931 +vn -0.7894 -0.6139 0.0000 +vn -0.2731 -0.5715 -0.7738 +vn -0.4122 -0.7843 -0.4637 +usemtl tile0 +s 1 +f 661/661/199 662/662/199 663/663/199 +f 664/664/200 665/665/200 666/666/200 +f 667/667/201 668/668/201 669/669/201 +f 670/670/202 671/671/202 672/672/202 +f 673/673/203 674/674/203 675/675/203 +f 676/676/204 677/677/204 678/678/204 +f 679/679/205 680/680/205 681/681/205 +f 682/682/205 683/683/205 684/684/205 +f 685/685/206 686/686/206 687/687/206 +f 688/688/207 689/689/207 690/690/207 +f 691/691/208 692/692/208 693/693/208 +f 694/694/209 695/695/209 696/696/209 +f 697/697/210 698/698/210 699/699/210 +f 700/700/211 701/701/211 702/702/211 +f 703/703/212 704/704/212 705/705/212 +f 706/706/213 707/707/213 708/708/213 +f 709/709/214 710/710/214 711/711/214 +f 712/712/215 713/713/215 714/714/215 +f 715/715/216 716/716/216 717/717/216 +f 718/718/217 719/719/217 720/720/217 +f 721/721/218 722/722/218 723/723/218 +f 724/724/219 725/725/219 726/726/219 +f 727/727/220 728/728/220 729/729/220 +f 730/730/221 731/731/221 732/732/221 +f 733/733/222 734/734/222 735/735/222 +f 736/736/223 737/737/223 738/738/223 +f 739/739/224 740/740/224 741/741/224 +f 742/742/225 743/743/225 744/744/225 +o M014 +v -0.200000 2.630000 0.550000 +v -0.130000 2.490000 0.650000 +v 0.110000 2.490000 0.650000 +v -0.200000 2.630000 0.550000 +v 0.110000 2.490000 0.650000 +v 0.170000 2.630000 0.550000 +v -0.130000 2.490000 0.650000 +v -0.100000 1.930000 0.620000 +v 0.070000 1.930000 0.620000 +v -0.130000 2.490000 0.650000 +v 0.070000 1.930000 0.620000 +v 0.110000 2.490000 0.650000 +v 0.170000 2.630000 0.550000 +v 0.170000 3.150000 0.420000 +v -0.200000 3.140000 0.420000 +v 0.170000 2.630000 0.550000 +v -0.200000 3.140000 0.420000 +v -0.200000 2.630000 0.550000 +v -0.120000 2.350000 -0.380000 +v -0.330000 2.800000 -0.340000 +v -0.140000 2.640000 -0.460000 +v -0.270000 2.450000 0.030000 +v -0.120000 2.350000 -0.380000 +v -0.010000 2.340000 0.080000 +v -0.010000 2.330000 -0.450000 +v 0.090000 2.350000 -0.380000 +v -0.010000 2.340000 0.080000 +v 0.310000 2.800000 -0.340000 +v 0.240000 2.450000 0.030000 +v 0.090000 2.350000 -0.380000 +v 0.110000 2.650000 -0.460000 +v 0.310000 2.800000 -0.340000 +v 0.090000 2.350000 -0.380000 +v -0.120000 2.350000 -0.380000 +v -0.270000 2.450000 0.030000 +v -0.330000 2.800000 -0.340000 +v 0.090000 2.350000 -0.380000 +v 0.240000 2.450000 0.030000 +v -0.010000 2.340000 0.080000 +v -0.120000 2.350000 -0.380000 +v -0.010000 2.330000 -0.450000 +v -0.010000 2.340000 0.080000 +v -0.150000 2.280000 0.430000 +v -0.100000 1.930000 0.620000 +v -0.130000 2.490000 0.650000 +v -0.200000 2.630000 0.550000 +v -0.150000 2.280000 0.430000 +v -0.130000 2.490000 0.650000 +v 0.070000 1.930000 0.620000 +v 0.120000 2.280000 0.430000 +v 0.110000 2.490000 0.650000 +v 0.120000 2.280000 0.430000 +v 0.170000 2.630000 0.550000 +v 0.110000 2.490000 0.650000 +v -0.020000 2.100000 0.350000 +v 0.070000 1.930000 0.620000 +v -0.010000 1.950000 0.440000 +v 0.070000 1.930000 0.620000 +v -0.020000 2.100000 0.350000 +v 0.120000 2.280000 0.430000 +v -0.100000 1.930000 0.620000 +v -0.020000 2.100000 0.350000 +v -0.010000 1.950000 0.440000 +v -0.020000 2.100000 0.350000 +v -0.100000 1.930000 0.620000 +v -0.150000 2.280000 0.430000 +v -0.300000 2.170000 0.260000 +v -0.010000 2.340000 0.080000 +v -0.020000 2.100000 0.350000 +v -0.270000 2.450000 0.030000 +v -0.300000 2.170000 0.260000 +v -0.530000 2.410000 0.110000 +v -0.150000 2.280000 0.430000 +v -0.530000 2.410000 0.110000 +v -0.300000 2.170000 0.260000 +v -0.530000 2.410000 0.110000 +v -0.150000 2.280000 0.430000 +v -0.200000 2.630000 0.550000 +v -0.010000 2.340000 0.080000 +v 0.270000 2.170000 0.260000 +v -0.020000 2.100000 0.350000 +v 0.240000 2.450000 0.030000 +v 0.270000 2.170000 0.260000 +v -0.010000 2.340000 0.080000 +v 0.510000 2.410000 0.110000 +v 0.120000 2.280000 0.430000 +v 0.270000 2.170000 0.260000 +v 0.120000 2.280000 0.430000 +v 0.510000 2.410000 0.110000 +v 0.170000 2.630000 0.550000 +v 0.460000 2.820000 -0.020000 +v 0.320000 3.230000 0.130001 +v 0.510000 2.410000 0.110000 +v 0.300000 2.850000 0.020000 +v 0.320000 3.190000 -0.239999 +v 0.460000 2.820000 -0.020000 +v -0.320000 2.850000 0.020000 +v -0.530000 2.410000 0.110000 +v -0.470000 2.830000 0.070000 +v -0.470000 2.830000 0.070000 +v -0.340000 3.230000 0.130001 +v -0.330000 3.210000 -0.159999 +v -0.240000 3.220000 -0.209999 +v -0.330000 3.210000 -0.159999 +v -0.170000 3.360000 -0.329999 +v -0.330000 3.210000 -0.159999 +v -0.320000 2.850000 0.020000 +v -0.470000 2.830000 0.070000 +v 0.320000 3.190000 -0.239999 +v 0.300000 2.850000 0.020000 +v 0.240000 3.220000 -0.209999 +v 0.150000 3.350000 -0.379999 +v 0.320000 3.230000 0.130001 +v 0.320000 3.190000 -0.239999 +v -0.010000 3.350000 0.030001 +v -0.010000 3.230000 -0.359999 +v -0.170000 3.360000 -0.329999 +v -0.340000 3.230000 0.130001 +v -0.170000 3.360000 -0.329999 +v -0.330000 3.210000 -0.159999 +v 0.320000 3.230000 0.130001 +v 0.150000 3.350000 -0.379999 +v -0.010000 3.350000 0.030001 +v 0.240000 3.220000 -0.209999 +v -0.010000 3.230000 -0.359999 +v 0.150000 3.350000 -0.379999 +v 0.290000 2.980000 -0.360000 +v 0.300000 2.850000 0.020000 +v 0.310000 2.800000 -0.340000 +v 0.300000 2.850000 0.020000 +v 0.510000 2.410000 0.110000 +v 0.240000 2.450000 0.030000 +v -0.340000 3.230000 0.130001 +v -0.470000 2.830000 0.070000 +v -0.530000 2.410000 0.110000 +v -0.330000 2.800000 -0.340000 +v -0.270000 2.450000 0.030000 +v -0.320000 2.850000 0.020000 +v -0.020000 2.100000 0.350000 +v -0.150000 2.280000 0.430000 +v -0.300000 2.170000 0.260000 +v -0.530000 2.410000 0.110000 +v -0.320000 2.850000 0.020000 +v -0.270000 2.450000 0.030000 +v -0.310000 2.980000 -0.350000 +v -0.320000 2.850000 0.020000 +v -0.240000 3.220000 -0.209999 +v -0.170000 3.360000 -0.329999 +v -0.340000 3.230000 0.130001 +v -0.010000 3.350000 0.030001 +v 0.270000 2.170000 0.260000 +v 0.240000 2.450000 0.030000 +v 0.510000 2.410000 0.110000 +v 0.320000 3.230000 0.130001 +v 0.170000 2.630000 0.550000 +v 0.510000 2.410000 0.110000 +v 0.320000 3.230000 0.130001 +v -0.010000 3.350000 0.030001 +v 0.170000 3.150000 0.420000 +v 0.240000 2.450000 0.030000 +v 0.310000 2.800000 -0.340000 +v 0.300000 2.850000 0.020000 +v -0.310000 2.980000 -0.350000 +v -0.010000 3.230000 -0.359999 +v -0.010000 2.970000 -0.490000 +v -0.010000 3.230000 -0.359999 +v 0.290000 2.980000 -0.360000 +v -0.010000 2.970000 -0.490000 +v 0.290000 2.980000 -0.360000 +v -0.010000 2.810000 -0.480000 +v -0.010000 2.970000 -0.490000 +v 0.320000 3.190000 -0.239999 +v 0.320000 3.230000 0.130001 +v 0.460000 2.820000 -0.020000 +v -0.320000 2.850000 0.020000 +v -0.310000 2.980000 -0.350000 +v -0.330000 2.800000 -0.340000 +v -0.310000 2.980000 -0.350000 +v -0.010000 2.810000 -0.480000 +v -0.330000 2.800000 -0.340000 +v 0.090000 2.350000 -0.380000 +v -0.010000 2.640000 -0.520000 +v 0.110000 2.650000 -0.460000 +v -0.010000 2.810000 -0.480000 +v 0.110000 2.650000 -0.460000 +v -0.010000 2.670000 -0.580000 +v -0.010000 2.640000 -0.520000 +v -0.140000 2.640000 -0.460000 +v -0.010000 2.670000 -0.580000 +v -0.010000 2.640000 -0.520000 +v -0.120000 2.350000 -0.380000 +v -0.140000 2.640000 -0.460000 +v -0.330000 2.800000 -0.340000 +v -0.010000 2.810000 -0.480000 +v -0.140000 2.640000 -0.460000 +v -0.010000 2.810000 -0.480000 +v -0.310000 2.980000 -0.350000 +v -0.010000 2.970000 -0.490000 +v -0.010000 2.810000 -0.480000 +v 0.290000 2.980000 -0.360000 +v 0.310000 2.800000 -0.340000 +v -0.320000 2.850000 0.020000 +v -0.330000 3.210000 -0.159999 +v -0.240000 3.220000 -0.209999 +v -0.010000 2.810000 -0.480000 +v 0.310000 2.800000 -0.340000 +v 0.110000 2.650000 -0.460000 +v 0.300000 2.850000 0.020000 +v 0.290000 2.980000 -0.360000 +v 0.240000 3.220000 -0.209999 +v 0.110000 2.650000 -0.460000 +v -0.010000 2.640000 -0.520000 +v -0.010000 2.670000 -0.580000 +v -0.140000 2.640000 -0.460000 +v -0.010000 2.810000 -0.480000 +v -0.010000 2.670000 -0.580000 +v -0.010000 3.230000 -0.359999 +v -0.010000 3.350000 0.030001 +v 0.150000 3.350000 -0.379999 +v 0.320000 3.190000 -0.239999 +v 0.240000 3.220000 -0.209999 +v 0.150000 3.350000 -0.379999 +v 0.170000 3.150000 0.420000 +v -0.010000 3.350000 0.030001 +v -0.200000 3.140000 0.420000 +v -0.010000 3.350000 0.030001 +v -0.340000 3.230000 0.130001 +v -0.200000 3.140000 0.420000 +v -0.010000 3.230000 -0.359999 +v -0.240000 3.220000 -0.209999 +v -0.170000 3.360000 -0.329999 +v 0.120000 2.280000 0.430000 +v -0.020000 2.100000 0.350000 +v 0.270000 2.170000 0.260000 +v 0.070000 1.930000 0.620000 +v -0.100000 1.930000 0.620000 +v -0.010000 1.950000 0.440000 +v -0.300000 2.170000 0.260000 +v -0.270000 2.450000 0.030000 +v -0.010000 2.340000 0.080000 +v -0.010000 2.640000 -0.520000 +v 0.090000 2.350000 -0.380000 +v -0.010000 2.330000 -0.450000 +v 0.290000 2.980000 -0.360000 +v -0.010000 3.230000 -0.359999 +v 0.240000 3.220000 -0.209999 +v 0.510000 2.410000 0.110000 +v 0.300000 2.850000 0.020000 +v 0.460000 2.820000 -0.020000 +v 0.170000 2.630000 0.550000 +v 0.320000 3.230000 0.130001 +v 0.170000 3.150000 0.420000 +v -0.200000 2.630000 0.550000 +v -0.340000 3.230000 0.130001 +v -0.530000 2.410000 0.110000 +v -0.340000 3.230000 0.130001 +v -0.200000 2.630000 0.550000 +v -0.200000 3.140000 0.420000 +v -0.120000 2.350000 -0.380000 +v -0.010000 2.640000 -0.520000 +v -0.010000 2.330000 -0.450000 +v -0.010000 3.230000 -0.359999 +v -0.310000 2.980000 -0.350000 +v -0.240000 3.220000 -0.209999 +vt 0.839216 0.792350 +vt 0.839216 0.994536 +vt 0.725490 0.994536 +vt 0.839216 0.792350 +vt 0.725490 0.994536 +vt 0.725490 0.792350 +vt 0.996078 0.136612 +vt 0.996078 0.251366 +vt 0.945098 0.251366 +vt 0.996078 0.136612 +vt 0.945098 0.251366 +vt 0.945098 0.136612 +vt 0.839216 0.792350 +vt 0.839216 0.994536 +vt 0.725490 0.994536 +vt 0.839216 0.792350 +vt 0.725490 0.994536 +vt 0.725490 0.792350 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.992157 0.775956 +vt 0.992157 0.775956 +vt 0.992157 0.775956 +vt 0.992157 0.775956 +vt 0.992157 0.775956 +vt 0.992157 0.775956 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.992157 0.775956 +vt 0.992157 0.775956 +vt 0.992157 0.775956 +vt 0.992157 0.775956 +vt 0.992157 0.775956 +vt 0.992157 0.775956 +vt 0.003922 0.120219 +vt 0.054902 0.005464 +vt 0.054902 0.120219 +vt 0.933333 0.251366 +vt 0.882353 0.136612 +vt 0.933333 0.136612 +vt 0.819608 0.136612 +vt 0.870588 0.251366 +vt 0.819608 0.251366 +vt 0.882353 0.136612 +vt 0.933333 0.251366 +vt 0.933333 0.136612 +vt 0.129412 0.120219 +vt 0.180392 0.005464 +vt 0.129412 0.005464 +vt 0.180392 0.005464 +vt 0.129412 0.120219 +vt 0.180392 0.120219 +vt 0.243137 0.005464 +vt 0.192157 0.120219 +vt 0.192157 0.005464 +vt 0.192157 0.120219 +vt 0.243137 0.005464 +vt 0.243137 0.120219 +vt 0.725490 0.792350 +vt 0.839216 0.994536 +vt 0.725490 0.994536 +vt 0.839216 0.792350 +vt 0.725490 0.994536 +vt 0.725490 0.792350 +vt 0.725490 0.994536 +vt 0.839216 0.792350 +vt 0.839216 0.994536 +vt 0.839216 0.792350 +vt 0.725490 0.994536 +vt 0.725490 0.792350 +vt 0.725490 0.994536 +vt 0.839216 0.792350 +vt 0.839216 0.994536 +vt 0.839216 0.994536 +vt 0.725490 0.792350 +vt 0.839216 0.792350 +vt 0.725490 0.792350 +vt 0.839216 0.994536 +vt 0.725490 0.994536 +vt 0.839216 0.994536 +vt 0.725490 0.792350 +vt 0.839216 0.792350 +vt 0.725490 0.994536 +vt 0.839216 0.792350 +vt 0.839216 0.994536 +vt 0.725490 0.792350 +vt 0.839216 0.994536 +vt 0.725490 0.994536 +vt 0.725490 0.994536 +vt 0.839216 0.792350 +vt 0.839216 0.994536 +vt 0.839216 0.994536 +vt 0.725490 0.792350 +vt 0.839216 0.792350 +vt 0.725490 0.994536 +vt 0.839216 0.792350 +vt 0.839216 0.994536 +vt 0.725490 0.994536 +vt 0.839216 0.792350 +vt 0.839216 0.994536 +vt 0.839216 0.994536 +vt 0.725490 0.792350 +vt 0.839216 0.792350 +vt 0.839216 0.994536 +vt 0.725490 0.792350 +vt 0.839216 0.792350 +vt 0.725490 0.994536 +vt 0.839216 0.792350 +vt 0.839216 0.994536 +vt 0.839216 0.792350 +vt 0.725490 0.994536 +vt 0.725490 0.792350 +vt 0.725490 0.792350 +vt 0.839216 0.994536 +vt 0.725490 0.994536 +vt 0.725490 0.994536 +vt 0.839216 0.792350 +vt 0.839216 0.994536 +vt 0.494118 0.426230 +vt 0.411765 0.267760 +vt 0.494118 0.267760 +vt 0.839216 0.994536 +vt 0.725490 0.792350 +vt 0.839216 0.792350 +vt 0.725490 0.792350 +vt 0.839216 0.994536 +vt 0.725490 0.994536 +vt 0.588235 0.426230 +vt 0.505882 0.267760 +vt 0.505882 0.426230 +vt 0.725490 0.792350 +vt 0.839216 0.994536 +vt 0.725490 0.994536 +vt 0.839216 0.792350 +vt 0.725490 0.994536 +vt 0.725490 0.792350 +vt 0.494118 0.426230 +vt 0.411765 0.267760 +vt 0.411765 0.426230 +vt 0.725490 0.994536 +vt 0.839216 0.792350 +vt 0.839216 0.994536 +vt 0.839216 0.994536 +vt 0.725490 0.792350 +vt 0.839216 0.792350 +vt 0.839216 0.994536 +vt 0.725490 0.792350 +vt 0.839216 0.792350 +vt 0.725490 0.994536 +vt 0.839216 0.792350 +vt 0.839216 0.994536 +vt 0.505882 0.267760 +vt 0.588235 0.426230 +vt 0.505882 0.426230 +vt 0.901961 0.120219 +vt 0.850980 0.049180 +vt 0.901961 0.049180 +vt 0.850980 0.049180 +vt 0.901961 0.120219 +vt 0.901961 0.049180 +vt 0.286275 0.644809 +vt 0.494118 0.486339 +vt 0.494118 0.644809 +vt 0.839216 0.994536 +vt 0.725490 0.792350 +vt 0.839216 0.792350 +vt 0.411765 0.267760 +vt 0.494118 0.426230 +vt 0.494118 0.267760 +vt 0.286275 0.644809 +vt 0.494118 0.486339 +vt 0.286275 0.486339 +vt 0.003922 0.661202 +vt 0.149020 0.994536 +vt 0.003922 0.994536 +vt 0.149020 0.426230 +vt 0.003922 0.267760 +vt 0.149020 0.267760 +vt 0.160784 0.267760 +vt 0.305882 0.426230 +vt 0.160784 0.426230 +vt 0.149020 0.994536 +vt 0.003922 0.661202 +vt 0.003922 0.994536 +vt 0.839216 0.644809 +vt 0.694118 0.486339 +vt 0.694118 0.644809 +vt 0.494118 0.486339 +vt 0.286275 0.644809 +vt 0.494118 0.644809 +vt 0.494118 0.486339 +vt 0.286275 0.644809 +vt 0.286275 0.486339 +vt 0.839216 0.792350 +vt 0.725490 0.994536 +vt 0.725490 0.792350 +vt 0.694118 0.486339 +vt 0.839216 0.644809 +vt 0.694118 0.644809 +vt 0.411765 0.267760 +vt 0.494118 0.426230 +vt 0.411765 0.426230 +vt 0.305882 0.426230 +vt 0.160784 0.267760 +vt 0.160784 0.426230 +vt 0.003922 0.267760 +vt 0.149020 0.426230 +vt 0.149020 0.267760 +vt 0.725490 0.792350 +vt 0.839216 0.994536 +vt 0.725490 0.994536 +vt 0.725490 0.994536 +vt 0.839216 0.792350 +vt 0.839216 0.994536 +vt 0.725490 0.994536 +vt 0.839216 0.792350 +vt 0.839216 0.994536 +vt 0.725490 0.792350 +vt 0.839216 0.994536 +vt 0.725490 0.994536 +vt 0.725490 0.792350 +vt 0.839216 0.994536 +vt 0.725490 0.994536 +vt 0.725490 0.994536 +vt 0.839216 0.792350 +vt 0.839216 0.994536 +vt 0.725490 0.994536 +vt 0.839216 0.792350 +vt 0.725490 0.792350 +vt 0.839216 0.792350 +vt 0.725490 0.994536 +vt 0.725490 0.792350 +vt 0.149020 0.994536 +vt 0.003922 0.661202 +vt 0.149020 0.661202 +vt 0.901961 0.120219 +vt 0.850980 0.049180 +vt 0.850980 0.120219 +vt 0.725490 0.792350 +vt 0.839216 0.994536 +vt 0.725490 0.994536 +vt 0.725490 0.792350 +vt 0.839216 0.994536 +vt 0.725490 0.994536 +vt 0.839216 0.792350 +vt 0.725490 0.994536 +vt 0.725490 0.792350 +vt 0.725490 0.994536 +vt 0.839216 0.792350 +vt 0.839216 0.994536 +vt 0.003922 0.661202 +vt 0.149020 0.994536 +vt 0.149020 0.661202 +vt 0.850980 0.049180 +vt 0.901961 0.120219 +vt 0.850980 0.120219 +vn 0.0000 0.5812 0.8137 +vn 0.0000 -0.0535 0.9986 +vn -0.0066 0.2425 0.9701 +vn 0.0000 0.2470 0.9690 +vn -0.6557 -0.2425 -0.7150 +vn -0.4009 -0.9130 0.0760 +vn 0.1836 -0.9828 0.0185 +vn 0.8835 -0.4121 -0.2227 +vn 0.6254 -0.2397 -0.7426 +vn -0.8897 -0.3948 -0.2292 +vn 0.4135 -0.9078 0.0701 +vn -0.1674 -0.9857 0.0186 +vn -0.9872 -0.0608 0.1478 +vn -0.9202 -0.2380 0.3109 +vn 0.9900 -0.0771 0.1186 +vn 0.9413 -0.2217 0.2544 +vn 0.8890 -0.1905 -0.4163 +vn 0.7772 -0.3823 -0.4998 +vn -0.8305 -0.3263 -0.4515 +vn -0.8013 -0.3698 -0.4702 +vn 0.0264 -0.7476 -0.6636 +vn -0.1424 -0.6191 -0.7723 +vn -0.6699 -0.1941 0.7167 +vn -0.6718 -0.3243 0.6660 +vn -0.0260 -0.7467 -0.6647 +vn 0.1192 -0.6226 -0.7734 +vn 0.6611 -0.2111 0.7200 +vn 0.6622 -0.3259 0.6747 +vn 0.9311 0.2084 0.2993 +vn -0.2983 -0.5687 -0.7666 +vn -0.3104 -0.0461 -0.9495 +vn -0.9472 0.3160 -0.0545 +vn -0.3837 -0.4829 -0.7872 +vn -0.2305 -0.4403 -0.8678 +vn -0.4640 -0.5207 -0.7166 +vn 0.7155 0.6945 -0.0751 +vn 0.5851 0.7751 -0.2385 +vn -0.7220 0.6881 -0.0724 +vn 0.3070 0.9441 0.1198 +vn 0.3833 -0.6245 -0.6805 +vn 0.9937 0.1117 0.0121 +vn 0.2746 -0.0652 -0.9593 +vn -0.7912 0.1690 0.5877 +vn -0.9914 -0.1228 0.0446 +vn -0.3770 -0.5897 0.7142 +vn -0.2852 -0.0596 -0.9566 +vn -0.9672 0.2468 0.0606 +vn -0.2950 0.9424 0.1573 +vn 0.1371 -0.6199 -0.7726 +vn 0.8196 0.1766 0.5450 +vn 0.2192 0.9056 0.3632 +vn 0.9880 -0.1470 0.0479 +vn -0.3734 0.4149 -0.8297 +vn 0.3492 0.4191 -0.8381 +vn 0.3986 -0.0572 -0.9154 +vn 0.9416 0.3348 -0.0362 +vn -0.9937 0.1111 0.0122 +vn -0.4006 -0.0064 -0.9162 +vn 0.4492 -0.2580 -0.8554 +vn 0.6733 0.4298 -0.6017 +vn -0.2021 -0.8760 -0.4380 +vn -0.4036 -0.2691 -0.8745 +vn -0.3980 0.1990 -0.8955 +vn -0.4238 -0.0565 -0.9040 +vn 0.3987 -0.0574 -0.9153 +vn -0.4053 -0.4178 -0.8131 +vn 0.3987 0.1868 -0.8979 +vn 0.9826 0.1820 0.0364 +vn 0.2857 -0.8571 -0.4286 +vn -0.6628 0.4352 -0.6093 +vn -0.6018 0.7633 -0.2349 +vn -0.4467 -0.8090 -0.3822 +vn -0.0239 0.8850 0.4649 +vn -0.2116 0.8998 0.3814 +vn -0.4835 -0.4176 -0.7693 +vn 0.3656 -0.6005 0.7112 +vn 0.0000 -0.9939 -0.1104 +vn -0.1149 -0.6232 -0.7736 +vn 0.5880 -0.1782 -0.7890 +vn 0.4491 0.5390 -0.7126 +vn -0.2859 -0.3211 -0.9028 +vn 0.8678 0.1205 0.4821 +vn -0.8279 0.1789 0.5315 +vn -0.8795 0.1175 0.4611 +vn -0.5513 -0.1838 -0.8138 +vn -0.4753 0.5426 -0.6926 +usemtl tile0 +s 1 +f 745/745/226 746/746/226 747/747/226 +f 748/748/226 749/749/226 750/750/226 +f 751/751/227 752/752/227 753/753/227 +f 754/754/227 755/755/227 756/756/227 +f 757/757/228 758/758/228 759/759/228 +f 760/760/229 761/761/229 762/762/229 +f 763/763/230 764/764/230 765/765/230 +f 766/766/231 767/767/231 768/768/231 +f 769/769/232 770/770/232 771/771/232 +f 772/772/233 773/773/233 774/774/233 +f 775/775/234 776/776/234 777/777/234 +f 778/778/235 779/779/235 780/780/235 +f 781/781/236 782/782/236 783/783/236 +f 784/784/237 785/785/237 786/786/237 +f 787/787/238 788/788/238 789/789/238 +f 790/790/239 791/791/239 792/792/239 +f 793/793/240 794/794/240 795/795/240 +f 796/796/241 797/797/241 798/798/241 +f 799/799/242 800/800/242 801/801/242 +f 802/802/243 803/803/243 804/804/243 +f 805/805/244 806/806/244 807/807/244 +f 808/808/245 809/809/245 810/810/245 +f 811/811/246 812/812/246 813/813/246 +f 814/814/247 815/815/247 816/816/247 +f 817/817/248 818/818/248 819/819/248 +f 820/820/249 821/821/249 822/822/249 +f 823/823/250 824/824/250 825/825/250 +f 826/826/251 827/827/251 828/828/251 +f 829/829/252 830/830/252 831/831/252 +f 832/832/253 833/833/253 834/834/253 +f 835/835/254 836/836/254 837/837/254 +f 838/838/255 839/839/255 840/840/255 +f 841/841/256 842/842/256 843/843/256 +f 844/844/257 845/845/257 846/846/257 +f 847/847/258 848/848/258 849/849/258 +f 850/850/259 851/851/259 852/852/259 +f 853/853/260 854/854/260 855/855/260 +f 856/856/261 857/857/261 858/858/261 +f 859/859/262 860/860/262 861/861/262 +f 862/862/263 863/863/263 864/864/263 +f 865/865/264 866/866/264 867/867/264 +f 868/868/265 869/869/265 870/870/265 +f 871/871/266 872/872/266 873/873/266 +f 874/874/267 875/875/267 876/876/267 +f 877/877/268 878/878/268 879/879/268 +f 880/880/269 881/881/269 882/882/269 +f 883/883/270 884/884/270 885/885/270 +f 886/886/271 887/887/271 888/888/271 +f 889/889/272 890/890/272 891/891/272 +f 892/892/273 893/893/273 894/894/273 +f 895/895/274 896/896/274 897/897/274 +f 898/898/275 899/899/275 900/900/275 +f 901/901/276 902/902/276 903/903/276 +f 904/904/277 905/905/277 906/906/277 +f 907/907/278 908/908/278 909/909/278 +f 910/910/279 911/911/279 912/912/279 +f 913/913/280 914/914/280 915/915/280 +f 916/916/281 917/917/281 918/918/281 +f 919/919/282 920/920/282 921/921/282 +f 922/922/283 923/923/283 924/924/283 +f 925/925/284 926/926/284 927/927/284 +f 928/928/285 929/929/285 930/930/285 +f 931/931/286 932/932/286 933/933/286 +f 934/934/287 935/935/287 936/936/287 +f 937/937/288 938/938/288 939/939/288 +f 940/940/289 941/941/289 942/942/289 +f 943/943/290 944/944/290 945/945/290 +f 946/946/291 947/947/291 948/948/291 +f 949/949/292 950/950/292 951/951/292 +f 952/952/293 953/953/293 954/954/293 +f 955/955/294 956/956/294 957/957/294 +f 958/958/295 959/959/295 960/960/295 +f 961/961/296 962/962/296 963/963/296 +f 964/964/297 965/965/297 966/966/297 +f 967/967/298 968/968/298 969/969/298 +f 970/970/299 971/971/299 972/972/299 +f 973/973/300 974/974/300 975/975/300 +f 976/976/301 977/977/301 978/978/301 +f 979/979/302 980/980/302 981/981/302 +f 982/982/303 983/983/303 984/984/303 +f 985/985/304 986/986/304 987/987/304 +f 988/988/305 989/989/305 990/990/305 +f 991/991/306 992/992/306 993/993/306 +f 994/994/307 995/995/307 996/996/307 +f 997/997/308 998/998/308 999/999/308 +f 1000/1000/309 1001/1001/309 1002/1002/309 +f 1003/1003/310 1004/1004/310 1005/1005/310 +f 1006/1006/311 1007/1007/311 1008/1008/311 +o M013 +v -0.580000 -0.060000 -0.090000 +v -0.770000 -0.090000 -0.090000 +v -0.770000 -0.090000 0.140000 +v -0.580000 -0.060000 -0.090000 +v -0.770000 -0.090000 0.140000 +v -0.580000 -0.060000 0.140000 +v -0.770000 -0.090000 0.140000 +v -0.750000 -0.530000 0.170000 +v -0.460000 -0.540000 0.170000 +v -0.770000 -0.090000 0.140000 +v -0.460000 -0.540000 0.170000 +v -0.580000 -0.060000 0.140000 +v -0.770000 -0.090000 -0.090000 +v -0.750000 -0.560000 -0.180000 +v -0.750000 -0.530000 0.170000 +v -0.770000 -0.090000 -0.090000 +v -0.750000 -0.530000 0.170000 +v -0.770000 -0.090000 0.140000 +v -0.580000 -0.060000 0.140000 +v -0.460000 -0.540000 0.170000 +v -0.460000 -0.570000 -0.180000 +v -0.580000 -0.060000 0.140000 +v -0.460000 -0.570000 -0.180000 +v -0.580000 -0.060000 -0.090000 +v -0.750000 -0.530000 0.170000 +v -0.750000 -0.560000 -0.180000 +v -0.460000 -0.570000 -0.180000 +v -0.750000 -0.530000 0.170000 +v -0.460000 -0.570000 -0.180000 +v -0.460000 -0.540000 0.170000 +v -0.580000 -0.060000 -0.090000 +v -0.460000 -0.570000 -0.180000 +v -0.750000 -0.560000 -0.180000 +v -0.580000 -0.060000 -0.090000 +v -0.750000 -0.560000 -0.180000 +v -0.770000 -0.090000 -0.090000 +vt 0.968627 0.775956 +vt 0.968627 0.775956 +vt 0.968627 0.775956 +vt 0.968627 0.775956 +vt 0.968627 0.775956 +vt 0.968627 0.775956 +vt 0.317647 0.267760 +vt 0.317647 0.426230 +vt 0.400000 0.426230 +vt 0.317647 0.267760 +vt 0.400000 0.426230 +vt 0.400000 0.267760 +vt 0.882353 0.267760 +vt 0.882353 0.426230 +vt 0.964706 0.426230 +vt 0.882353 0.267760 +vt 0.964706 0.426230 +vt 0.964706 0.267760 +vt 0.788235 0.267760 +vt 0.788235 0.426230 +vt 0.870588 0.426230 +vt 0.788235 0.267760 +vt 0.870588 0.426230 +vt 0.870588 0.267760 +vt 0.694118 0.267760 +vt 0.694118 0.426230 +vt 0.776471 0.426230 +vt 0.694118 0.267760 +vt 0.776471 0.426230 +vt 0.776471 0.267760 +vt 0.600000 0.267760 +vt 0.600000 0.426230 +vt 0.682353 0.426230 +vt 0.600000 0.267760 +vt 0.682353 0.426230 +vt 0.682353 0.267760 +vn -0.1560 0.9878 0.0000 +vn 0.0023 0.0681 0.9977 +vn -0.0095 0.0600 0.9982 +vn -0.9991 -0.0432 0.0037 +vn -0.9990 -0.0454 -0.0000 +vn 0.9702 0.2413 -0.0207 +vn 0.9734 0.2290 0.0000 +vn -0.0343 -0.9958 0.0854 +vn 0.0060 0.1752 -0.9845 +vn -0.0295 0.1868 -0.9820 +usemtl tile0 +s 1 +f 1009/1009/312 1010/1010/312 1011/1011/312 +f 1012/1012/312 1013/1013/312 1014/1014/312 +f 1015/1015/313 1016/1016/313 1017/1017/313 +f 1018/1018/314 1019/1019/314 1020/1020/314 +f 1021/1021/315 1022/1022/315 1023/1023/315 +f 1024/1024/316 1025/1025/316 1026/1026/316 +f 1027/1027/317 1028/1028/317 1029/1029/317 +f 1030/1030/318 1031/1031/318 1032/1032/318 +f 1033/1033/319 1034/1034/319 1035/1035/319 +f 1036/1036/319 1037/1037/319 1038/1038/319 +f 1039/1039/320 1040/1040/320 1041/1041/320 +f 1042/1042/321 1043/1043/321 1044/1044/321 +o M003 +v -0.080000 -4.520000 -0.380001 +v -0.190000 -4.510000 -0.910001 +v -0.210000 -4.310000 -0.900001 +v -0.080000 -4.520000 -0.380001 +v -0.210000 -4.310000 -0.900001 +v -0.120000 -4.150000 -0.390001 +v -0.540000 -4.150000 -0.390001 +v -0.450000 -4.310000 -0.900001 +v -0.470000 -4.510000 -0.910001 +v -0.540000 -4.150000 -0.390001 +v -0.470000 -4.510000 -0.910001 +v -0.570000 -4.520000 -0.470001 +v -0.570000 -4.520000 -0.470001 +v -0.470000 -4.510000 -0.910001 +v -0.190000 -4.510000 -0.910001 +v -0.570000 -4.520000 -0.470001 +v -0.190000 -4.510000 -0.910001 +v -0.080000 -4.520000 -0.380001 +v -0.150000 -4.170000 0.239999 +v -0.190000 -3.950000 0.169999 +v -0.470000 -3.950000 0.169999 +v -0.150000 -4.170000 0.239999 +v -0.470000 -3.950000 0.169999 +v -0.510000 -4.170000 0.239999 +v -0.510000 -4.170000 0.239999 +v -0.480000 -4.520000 0.289999 +v -0.180000 -4.520000 0.289999 +v -0.510000 -4.170000 0.239999 +v -0.180000 -4.520000 0.289999 +v -0.150000 -4.170000 0.239999 +v -0.190000 -3.950000 0.169999 +v -0.190000 -3.970000 -0.180001 +v -0.470000 -3.970000 -0.180001 +v -0.190000 -3.950000 0.169999 +v -0.470000 -3.970000 -0.180001 +v -0.470000 -3.950000 0.169999 +v -0.480000 -4.520000 0.289999 +v -0.570000 -4.520000 -0.470001 +v -0.080000 -4.520000 -0.380001 +v -0.480000 -4.520000 0.289999 +v -0.080000 -4.520000 -0.380001 +v -0.180000 -4.520000 0.289999 +v -0.450000 -4.310000 -0.900001 +v -0.210000 -4.310000 -0.900001 +v -0.190000 -4.510000 -0.910001 +v -0.450000 -4.310000 -0.900001 +v -0.190000 -4.510000 -0.910001 +v -0.470000 -4.510000 -0.910001 +v -0.450000 -4.310000 -0.900001 +v -0.540000 -4.150000 -0.390001 +v -0.120000 -4.150000 -0.390001 +v -0.450000 -4.310000 -0.900001 +v -0.120000 -4.150000 -0.390001 +v -0.210000 -4.310000 -0.900001 +v -0.190000 -3.970000 -0.180001 +v -0.120000 -4.150000 -0.390001 +v -0.540000 -4.150000 -0.390001 +v -0.190000 -3.970000 -0.180001 +v -0.540000 -4.150000 -0.390001 +v -0.470000 -3.970000 -0.180001 +v -0.120000 -4.150000 -0.390001 +v -0.190000 -3.970000 -0.180001 +v -0.190000 -3.950000 0.169999 +v -0.190000 -3.950000 0.169999 +v -0.150000 -4.170000 0.239999 +v -0.120000 -4.150000 -0.390001 +v -0.510000 -4.170000 0.239999 +v -0.470000 -3.950000 0.169999 +v -0.470000 -3.970000 -0.180001 +v -0.470000 -3.970000 -0.180001 +v -0.540000 -4.150000 -0.390001 +v -0.510000 -4.170000 0.239999 +v -0.120000 -4.150000 -0.390001 +v -0.180000 -4.520000 0.289999 +v -0.080000 -4.520000 -0.380001 +v -0.120000 -4.150000 -0.390001 +v -0.150000 -4.170000 0.239999 +v -0.180000 -4.520000 0.289999 +v -0.540000 -4.150000 -0.390001 +v -0.570000 -4.520000 -0.470001 +v -0.480000 -4.520000 0.289999 +v -0.480000 -4.520000 0.289999 +v -0.510000 -4.170000 0.239999 +v -0.540000 -4.150000 -0.390001 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.968627 0.775956 +vt 0.968627 0.775956 +vt 0.968627 0.775956 +vt 0.968627 0.775956 +vt 0.968627 0.775956 +vt 0.968627 0.775956 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.968627 0.775956 +vt 0.968627 0.775956 +vt 0.968627 0.775956 +vt 0.968627 0.775956 +vt 0.968627 0.775956 +vt 0.968627 0.775956 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.756863 0.136612 +vt 0.756863 0.251366 +vt 0.807843 0.251366 +vt 0.756863 0.136612 +vt 0.807843 0.251366 +vt 0.807843 0.136612 +vt 0.117647 0.005464 +vt 0.117647 0.120219 +vt 0.066667 0.120219 +vt 0.117647 0.005464 +vt 0.066667 0.120219 +vt 0.066667 0.005464 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vt 0.956863 0.759563 +vn 0.9739 0.1074 -0.2001 +vn 0.9740 0.0998 -0.2032 +vn -0.9728 0.1075 -0.2054 +vn -0.9680 0.1254 -0.2172 +vn 0.0000 -0.9997 -0.0227 +vn 0.0036 -0.9998 -0.0196 +vn 0.0000 0.3032 0.9529 +vn 0.0000 0.1414 0.9899 +vn 0.0000 0.9984 -0.0570 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 0.0499 -0.9988 +vn 0.0000 0.9541 -0.2993 +vn 0.0000 0.7593 -0.6508 +vn 0.9229 0.3845 -0.0220 +vn 0.9794 0.1949 0.0528 +vn -0.9844 0.1758 -0.0100 +vn -0.9506 0.3055 0.0550 +vn 0.9830 0.1102 0.1467 +vn 0.9959 -0.0789 0.0449 +vn -0.9916 0.0550 0.1174 +vn -0.9959 -0.0789 0.0449 +usemtl tile0 +s 1 +f 1045/1045/322 1046/1046/322 1047/1047/322 +f 1048/1048/323 1049/1049/323 1050/1050/323 +f 1051/1051/324 1052/1052/324 1053/1053/324 +f 1054/1054/325 1055/1055/325 1056/1056/325 +f 1057/1057/326 1058/1058/326 1059/1059/326 +f 1060/1060/327 1061/1061/327 1062/1062/327 +f 1063/1063/328 1064/1064/328 1065/1065/328 +f 1066/1066/328 1067/1067/328 1068/1068/328 +f 1069/1069/329 1070/1070/329 1071/1071/329 +f 1072/1072/329 1073/1073/329 1074/1074/329 +f 1075/1075/330 1076/1076/330 1077/1077/330 +f 1078/1078/330 1079/1079/330 1080/1080/330 +f 1081/1081/331 1082/1082/331 1083/1083/331 +f 1084/1084/331 1085/1085/331 1086/1086/331 +f 1087/1087/332 1088/1088/332 1089/1089/332 +f 1090/1090/332 1091/1091/332 1092/1092/332 +f 1093/1093/333 1094/1094/333 1095/1095/333 +f 1096/1096/333 1097/1097/333 1098/1098/333 +f 1099/1099/334 1100/1100/334 1101/1101/334 +f 1102/1102/334 1103/1103/334 1104/1104/334 +f 1105/1105/335 1106/1106/335 1107/1107/335 +f 1108/1108/336 1109/1109/336 1110/1110/336 +f 1111/1111/337 1112/1112/337 1113/1113/337 +f 1114/1114/338 1115/1115/338 1116/1116/338 +f 1117/1117/339 1118/1118/339 1119/1119/339 +f 1120/1120/340 1121/1121/340 1122/1122/340 +f 1123/1123/341 1124/1124/341 1125/1125/341 +f 1126/1126/342 1127/1127/342 1128/1128/342 +o M004 +v 0.800000 -0.010000 -0.140000 +v 0.720000 -0.920000 -0.160000 +v 0.680000 -0.910000 0.170000 +v 0.800000 -0.010000 -0.140000 +v 0.680000 -0.910000 0.170000 +v 0.750000 -0.000000 0.300000 +v 1.060000 -0.030000 -0.120000 +v 0.980000 -0.940000 -0.140000 +v 0.720000 -0.920000 -0.160000 +v 1.060000 -0.030000 -0.120000 +v 0.720000 -0.920000 -0.160000 +v 0.800000 -0.010000 -0.140000 +v 1.010000 -0.030000 0.320000 +v 1.060000 -0.030000 -0.120000 +v 0.800000 -0.010000 -0.140000 +v 1.010000 -0.030000 0.320000 +v 0.800000 -0.010000 -0.140000 +v 0.750000 -0.000000 0.300000 +v 0.940000 -0.940000 0.190000 +v 1.010000 -0.030000 0.320000 +v 0.750000 -0.000000 0.300000 +v 0.940000 -0.940000 0.190000 +v 0.750000 -0.000000 0.300000 +v 0.680000 -0.910000 0.170000 +v 0.980000 -0.940000 -0.140000 +v 0.940000 -0.940000 0.190000 +v 0.680000 -0.910000 0.170000 +v 0.980000 -0.940000 -0.140000 +v 0.680000 -0.910000 0.170000 +v 0.720000 -0.920000 -0.160000 +v 0.980000 -0.940000 -0.140000 +v 1.060000 -0.030000 -0.120000 +v 1.010000 -0.030000 0.320000 +v 0.980000 -0.940000 -0.140000 +v 1.010000 -0.030000 0.320000 +v 0.940000 -0.940000 0.190000 +v 0.650000 -0.180000 0.310000 +v 0.810000 -0.170000 -0.100000 +v -0.010000 -0.170000 -0.100000 +v 0.650000 -0.180000 0.310000 +v -0.010000 -0.170000 -0.100000 +v 0.150000 -0.180000 0.310000 +v 0.020000 -1.150000 -0.110000 +v 0.370000 -1.150000 -0.370000 +v 0.340000 -2.060000 -0.220000 +v 0.020000 -1.150000 -0.110000 +v 0.340000 -2.060000 -0.220000 +v 0.150000 -2.060000 -0.040000 +v 0.370000 -1.150000 -0.370000 +v 0.720000 -1.150000 -0.110000 +v 0.520000 -2.060000 -0.050000 +v 0.370000 -1.150000 -0.370000 +v 0.520000 -2.060000 -0.050000 +v 0.340000 -2.060000 -0.220000 +v 0.720000 -1.150000 -0.110000 +v 0.590000 -1.150000 0.290000 +v 0.450000 -2.060000 0.130000 +v 0.720000 -1.150000 -0.110000 +v 0.450000 -2.060000 0.130000 +v 0.520000 -2.060000 -0.050000 +v 0.590000 -1.150000 0.290000 +v 0.150000 -1.150000 0.290000 +v 0.220000 -2.060000 0.130000 +v 0.590000 -1.150000 0.290000 +v 0.220000 -2.060000 0.130000 +v 0.450000 -2.060000 0.130000 +v 0.150000 -1.150000 0.290000 +v 0.020000 -1.150000 -0.110000 +v 0.150000 -2.060000 -0.040000 +v 0.150000 -1.150000 0.290000 +v 0.150000 -2.060000 -0.040000 +v 0.220000 -2.060000 0.130000 +v 0.450000 -2.060000 0.130000 +v 0.340000 -2.170000 0.070000 +v 0.440000 -2.170000 -0.120000 +v 0.450000 -2.060000 0.130000 +v 0.440000 -2.170000 -0.120000 +v 0.520000 -2.060000 -0.050000 +v 0.220000 -2.060000 0.130000 +v 0.150000 -2.060000 -0.040000 +v 0.230000 -2.170000 -0.120000 +v 0.220000 -2.060000 0.130000 +v 0.230000 -2.170000 -0.120000 +v 0.340000 -2.170000 0.070000 +v 0.020000 -1.150000 -0.110000 +v -0.010000 -0.170000 -0.100000 +v 0.400000 -0.170000 -0.360000 +v 0.020000 -1.150000 -0.110000 +v 0.400000 -0.170000 -0.360000 +v 0.370000 -1.150000 -0.370000 +v 0.370000 -1.150000 -0.370000 +v 0.400000 -0.170000 -0.360000 +v 0.810000 -0.170000 -0.100000 +v 0.370000 -1.150000 -0.370000 +v 0.810000 -0.170000 -0.100000 +v 0.720000 -1.150000 -0.110000 +v 0.720000 -1.150000 -0.110000 +v 0.810000 -0.170000 -0.100000 +v 0.650000 -0.180000 0.310000 +v 0.720000 -1.150000 -0.110000 +v 0.650000 -0.180000 0.310000 +v 0.590000 -1.150000 0.290000 +v 0.590000 -1.150000 0.290000 +v 0.650000 -0.180000 0.310000 +v 0.150000 -0.180000 0.310000 +v 0.590000 -1.150000 0.290000 +v 0.150000 -0.180000 0.310000 +v 0.150000 -1.150000 0.290000 +v 0.150000 -1.150000 0.290000 +v 0.150000 -0.180000 0.310000 +v -0.010000 -0.170000 -0.100000 +v 0.150000 -1.150000 0.290000 +v -0.010000 -0.170000 -0.100000 +v 0.020000 -1.150000 -0.110000 +v 0.230000 -2.170000 -0.120000 +v 0.440000 -2.170000 -0.120000 +v 0.340000 -2.170000 0.070000 +v 0.810000 -0.170000 -0.100000 +v 0.400000 -0.170000 -0.360000 +v -0.010000 -0.170000 -0.100000 +v 0.230000 -2.170000 -0.120000 +v 0.150000 -2.060000 -0.040000 +v 0.340000 -2.060000 -0.220000 +v 0.440000 -2.170000 -0.120000 +v 0.340000 -2.060000 -0.220000 +v 0.520000 -2.060000 -0.050000 +v 0.440000 -2.170000 -0.120000 +v 0.230000 -2.170000 -0.120000 +v 0.340000 -2.060000 -0.220000 +v 0.340000 -2.170000 0.070000 +v 0.450000 -2.060000 0.130000 +v 0.220000 -2.060000 0.130000 +vt 0.968627 0.775956 +vt 0.968627 0.775956 +vt 0.968627 0.775956 +vt 0.968627 0.775956 +vt 0.968627 0.775956 +vt 0.968627 0.775956 +vt 0.968627 0.775956 +vt 0.968627 0.775956 +vt 0.968627 0.775956 +vt 0.968627 0.775956 +vt 0.968627 0.775956 +vt 0.968627 0.775956 +vt 0.968627 0.775956 +vt 0.968627 0.775956 +vt 0.968627 0.775956 +vt 0.968627 0.775956 +vt 0.968627 0.775956 +vt 0.968627 0.775956 +vt 0.968627 0.775956 +vt 0.968627 0.775956 +vt 0.968627 0.775956 +vt 0.968627 0.775956 +vt 0.968627 0.775956 +vt 0.968627 0.775956 +vt 0.968627 0.775956 +vt 0.968627 0.775956 +vt 0.968627 0.775956 +vt 0.968627 0.775956 +vt 0.968627 0.775956 +vt 0.968627 0.775956 +vt 0.968627 0.775956 +vt 0.968627 0.775956 +vt 0.968627 0.775956 +vt 0.968627 0.775956 +vt 0.968627 0.775956 +vt 0.968627 0.775956 +vt 0.945098 0.759563 +vt 0.945098 0.759563 +vt 0.945098 0.759563 +vt 0.945098 0.759563 +vt 0.945098 0.759563 +vt 0.945098 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.600000 0.704918 +vt 0.600000 0.994536 +vt 0.619608 0.994536 +vt 0.600000 0.704918 +vt 0.619608 0.994536 +vt 0.619608 0.704918 +vt 0.619608 0.704918 +vt 0.619608 0.994536 +vt 0.600000 0.994536 +vt 0.619608 0.704918 +vt 0.600000 0.994536 +vt 0.600000 0.704918 +vt 0.474510 0.704918 +vt 0.474510 0.994536 +vt 0.525490 0.994536 +vt 0.474510 0.704918 +vt 0.525490 0.994536 +vt 0.525490 0.704918 +vt 0.588235 0.704918 +vt 0.588235 0.994536 +vt 0.537255 0.994536 +vt 0.588235 0.704918 +vt 0.537255 0.994536 +vt 0.537255 0.704918 +vt 0.525490 0.704918 +vt 0.525490 0.994536 +vt 0.474510 0.994536 +vt 0.525490 0.704918 +vt 0.474510 0.994536 +vt 0.474510 0.704918 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.945098 0.759563 +vt 0.945098 0.759563 +vt 0.945098 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vn -0.9884 0.0896 -0.1225 +vn -0.9891 0.0924 -0.1145 +vn 0.0778 0.0151 -0.9969 +vn 0.0760 0.9971 0.0086 +vn 0.1153 0.9933 -0.0095 +vn -0.0914 -0.1339 0.9868 +vn -0.1136 -0.9934 -0.0138 +vn -0.0783 -0.9967 0.0207 +vn 0.9896 -0.0895 0.1125 +vn 0.9884 -0.0931 0.1198 +vn 0.0000 0.9997 0.0244 +vn -0.5926 -0.1120 -0.7977 +vn -0.6797 -0.1523 -0.7175 +vn 0.5865 -0.1810 -0.7895 +vn 0.6798 -0.1410 -0.7197 +vn 0.9324 -0.1967 0.3030 +vn 0.9171 -0.1780 0.3567 +vn 0.0000 -0.1732 0.9849 +vn -0.9451 -0.1114 0.3072 +vn -0.9160 -0.1368 0.3772 +vn 0.5838 -0.7515 0.3073 +vn 0.6898 -0.6724 0.2683 +vn -0.6706 -0.6885 0.2761 +vn -0.5493 -0.7727 0.3180 +vn -0.5355 -0.0078 -0.8445 +vn -0.5961 0.0264 -0.8025 +vn 0.5355 -0.0078 -0.8445 +vn 0.5957 -0.0465 -0.8019 +vn 0.9286 -0.0890 0.3602 +vn 0.9490 -0.0651 0.3084 +vn 0.0000 -0.0206 0.9998 +vn -0.9316 -0.0075 0.3634 +vn -0.9505 -0.0323 0.3089 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn -0.6875 0.0278 -0.7257 +vn 0.6862 -0.0367 -0.7265 +vn 0.0000 -0.6727 -0.7399 +vn 0.0000 -0.4789 0.8779 +usemtl tile0 +s 1 +f 1129/1129/343 1130/1130/343 1131/1131/343 +f 1132/1132/344 1133/1133/344 1134/1134/344 +f 1135/1135/345 1136/1136/345 1137/1137/345 +f 1138/1138/345 1139/1139/345 1140/1140/345 +f 1141/1141/346 1142/1142/346 1143/1143/346 +f 1144/1144/347 1145/1145/347 1146/1146/347 +f 1147/1147/348 1148/1148/348 1149/1149/348 +f 1150/1150/348 1151/1151/348 1152/1152/348 +f 1153/1153/349 1154/1154/349 1155/1155/349 +f 1156/1156/350 1157/1157/350 1158/1158/350 +f 1159/1159/351 1160/1160/351 1161/1161/351 +f 1162/1162/352 1163/1163/352 1164/1164/352 +f 1165/1165/353 1166/1166/353 1167/1167/353 +f 1168/1168/353 1169/1169/353 1170/1170/353 +f 1171/1171/354 1172/1172/354 1173/1173/354 +f 1174/1174/355 1175/1175/355 1176/1176/355 +f 1177/1177/356 1178/1178/356 1179/1179/356 +f 1180/1180/357 1181/1181/357 1182/1182/357 +f 1183/1183/358 1184/1184/358 1185/1185/358 +f 1186/1186/359 1187/1187/359 1188/1188/359 +f 1189/1189/360 1190/1190/360 1191/1191/360 +f 1192/1192/360 1193/1193/360 1194/1194/360 +f 1195/1195/361 1196/1196/361 1197/1197/361 +f 1198/1198/362 1199/1199/362 1200/1200/362 +f 1201/1201/363 1202/1202/363 1203/1203/363 +f 1204/1204/364 1205/1205/364 1206/1206/364 +f 1207/1207/365 1208/1208/365 1209/1209/365 +f 1210/1210/366 1211/1211/366 1212/1212/366 +f 1213/1213/367 1214/1214/367 1215/1215/367 +f 1216/1216/368 1217/1217/368 1218/1218/368 +f 1219/1219/369 1220/1220/369 1221/1221/369 +f 1222/1222/370 1223/1223/370 1224/1224/370 +f 1225/1225/371 1226/1226/371 1227/1227/371 +f 1228/1228/372 1229/1229/372 1230/1230/372 +f 1231/1231/373 1232/1232/373 1233/1233/373 +f 1234/1234/373 1235/1235/373 1236/1236/373 +f 1237/1237/374 1238/1238/374 1239/1239/374 +f 1240/1240/375 1241/1241/375 1242/1242/375 +f 1243/1243/376 1244/1244/376 1245/1245/376 +f 1246/1246/377 1247/1247/377 1248/1248/377 +f 1249/1249/378 1250/1250/378 1251/1251/378 +f 1252/1252/379 1253/1253/379 1254/1254/379 +f 1255/1255/380 1256/1256/380 1257/1257/380 +f 1258/1258/381 1259/1259/381 1260/1260/381 +o M007 +v -0.560000 2.030000 0.240000 +v -0.410000 2.000000 0.540000 +v 0.390000 2.000000 0.540000 +v -0.560000 2.030000 0.240000 +v 0.390000 2.000000 0.540000 +v 0.540000 2.030000 0.240000 +v 0.480000 1.270000 0.270000 +v 0.410000 1.350000 0.610000 +v -0.430000 1.350000 0.610000 +v 0.480000 1.270000 0.270000 +v -0.430000 1.350000 0.610000 +v -0.490000 1.270000 0.270000 +v -0.300000 0.890000 -0.320000 +v -0.370000 0.540000 -0.300000 +v -0.370000 0.540000 0.110000 +v -0.300000 0.890000 -0.320000 +v -0.370000 0.540000 0.110000 +v -0.300000 0.910000 0.140000 +v -0.300000 0.910000 0.140000 +v -0.370000 0.540000 0.110000 +v 0.350000 0.540000 0.110000 +v -0.300000 0.910000 0.140000 +v 0.350000 0.540000 0.110000 +v 0.310000 0.910000 0.140000 +v 0.310000 0.910000 0.140000 +v 0.350000 0.540000 0.110000 +v 0.350000 0.540000 -0.300000 +v 0.310000 0.910000 0.140000 +v 0.350000 0.540000 -0.300000 +v 0.310000 0.890000 -0.320000 +v -0.130000 2.430000 0.210000 +v -0.160000 2.030000 0.230000 +v 0.130000 2.030000 0.230000 +v -0.130000 2.430000 0.210000 +v 0.130000 2.030000 0.230000 +v 0.100000 2.430000 0.210000 +v 0.130000 2.030000 0.230000 +v 0.130000 2.030000 -0.110000 +v 0.100000 2.430000 -0.060000 +v 0.130000 2.030000 0.230000 +v 0.100000 2.430000 -0.060000 +v 0.100000 2.430000 0.210000 +v 0.100000 2.430000 0.210000 +v 0.100000 2.430000 -0.060000 +v -0.130000 2.430000 -0.060000 +v 0.100000 2.430000 0.210000 +v -0.130000 2.430000 -0.060000 +v -0.130000 2.430000 0.210000 +v -0.130000 2.430000 0.210000 +v -0.130000 2.430000 -0.060000 +v -0.160000 2.030000 -0.110000 +v -0.130000 2.430000 0.210000 +v -0.160000 2.030000 -0.110000 +v -0.160000 2.030000 0.230000 +v -0.130000 2.430000 -0.060000 +v 0.100000 2.430000 -0.060000 +v 0.130000 2.030000 -0.110000 +v -0.130000 2.430000 -0.060000 +v 0.130000 2.030000 -0.110000 +v -0.160000 2.030000 -0.110000 +v -0.490000 1.270000 0.270000 +v -0.300000 0.910000 0.140000 +v 0.310000 0.910000 0.140000 +v -0.490000 1.270000 0.270000 +v 0.310000 0.910000 0.140000 +v 0.480000 1.270000 0.270000 +v -0.370000 0.540000 0.110000 +v -0.370000 0.540000 -0.300000 +v 0.350000 0.540000 -0.300000 +v -0.370000 0.540000 0.110000 +v 0.350000 0.540000 -0.300000 +v 0.350000 0.540000 0.110000 +v -0.370000 0.540000 -0.300000 +v -0.300000 0.890000 -0.320000 +v 0.310000 0.890000 -0.320000 +v -0.370000 0.540000 -0.300000 +v 0.310000 0.890000 -0.320000 +v 0.350000 0.540000 -0.300000 +v -0.480000 1.200000 -0.340000 +v -0.480000 1.490000 -0.720000 +v 0.460000 1.490000 -0.720000 +v -0.480000 1.200000 -0.340000 +v 0.460000 1.490000 -0.720000 +v 0.460000 1.200000 -0.340000 +v -0.480000 1.490000 -0.720000 +v -0.560000 2.030000 -0.160000 +v 0.540000 2.030000 -0.160000 +v -0.480000 1.490000 -0.720000 +v 0.540000 2.030000 -0.160000 +v 0.460000 1.490000 -0.720000 +v 0.410000 1.350000 0.610000 +v 0.390000 2.000000 0.540000 +v -0.410000 2.000000 0.540000 +v 0.410000 1.350000 0.610000 +v -0.410000 2.000000 0.540000 +v -0.430000 1.350000 0.610000 +v 0.540000 2.030000 0.240000 +v 0.540000 2.030000 -0.160000 +v -0.560000 2.030000 -0.160000 +v 0.540000 2.030000 0.240000 +v -0.560000 2.030000 -0.160000 +v -0.560000 2.030000 0.240000 +v -0.300000 0.890000 -0.320000 +v -0.480000 1.200000 -0.340000 +v 0.460000 1.200000 -0.340000 +v -0.300000 0.890000 -0.320000 +v 0.460000 1.200000 -0.340000 +v 0.310000 0.890000 -0.320000 +v 0.460000 1.200000 -0.340000 +v 0.310000 0.910000 0.140000 +v 0.310000 0.890000 -0.320000 +v 0.460000 1.200000 -0.340000 +v 0.480000 1.270000 0.270000 +v 0.310000 0.910000 0.140000 +v -0.300000 0.890000 -0.320000 +v -0.490000 1.270000 0.270000 +v -0.480000 1.200000 -0.340000 +v -0.300000 0.890000 -0.320000 +v -0.300000 0.910000 0.140000 +v -0.490000 1.270000 0.270000 +v 0.410000 1.350000 0.610000 +v 0.540000 2.030000 0.240000 +v 0.390000 2.000000 0.540000 +v 0.540000 2.030000 0.240000 +v 0.410000 1.350000 0.610000 +v 0.480000 1.270000 0.270000 +v -0.410000 2.000000 0.540000 +v -0.490000 1.270000 0.270000 +v -0.430000 1.350000 0.610000 +v -0.490000 1.270000 0.270000 +v -0.410000 2.000000 0.540000 +v -0.560000 2.030000 0.240000 +v -0.560000 2.030000 -0.160000 +v -0.480000 1.490000 -0.720000 +v -0.480000 1.200000 -0.340000 +v 0.460000 1.490000 -0.720000 +v 0.540000 2.030000 -0.160000 +v 0.460000 1.200000 -0.340000 +v 0.540000 2.030000 0.240000 +v 0.460000 1.200000 -0.340000 +v 0.540000 2.030000 -0.160000 +v 0.460000 1.200000 -0.340000 +v 0.540000 2.030000 0.240000 +v 0.480000 1.270000 0.270000 +v -0.560000 2.030000 -0.160000 +v -0.490000 1.270000 0.270000 +v -0.560000 2.030000 0.240000 +v -0.490000 1.270000 0.270000 +v -0.560000 2.030000 -0.160000 +v -0.480000 1.200000 -0.340000 +vt 0.956863 0.775956 +vt 0.956863 0.775956 +vt 0.956863 0.775956 +vt 0.956863 0.775956 +vt 0.956863 0.775956 +vt 0.956863 0.775956 +vt 0.945098 0.775956 +vt 0.945098 0.775956 +vt 0.945098 0.775956 +vt 0.945098 0.775956 +vt 0.945098 0.775956 +vt 0.945098 0.775956 +vt 0.980392 0.775956 +vt 0.980392 0.775956 +vt 0.980392 0.775956 +vt 0.980392 0.775956 +vt 0.980392 0.775956 +vt 0.980392 0.775956 +vt 0.980392 0.775956 +vt 0.980392 0.775956 +vt 0.980392 0.775956 +vt 0.980392 0.775956 +vt 0.980392 0.775956 +vt 0.980392 0.775956 +vt 0.980392 0.775956 +vt 0.980392 0.775956 +vt 0.980392 0.775956 +vt 0.980392 0.775956 +vt 0.980392 0.775956 +vt 0.980392 0.775956 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.980392 0.775956 +vt 0.980392 0.775956 +vt 0.980392 0.775956 +vt 0.980392 0.775956 +vt 0.980392 0.775956 +vt 0.980392 0.775956 +vt 0.980392 0.775956 +vt 0.980392 0.775956 +vt 0.980392 0.775956 +vt 0.980392 0.775956 +vt 0.980392 0.775956 +vt 0.980392 0.775956 +vt 0.368627 0.136612 +vt 0.368627 0.251366 +vt 0.223529 0.251366 +vt 0.368627 0.136612 +vt 0.223529 0.251366 +vt 0.223529 0.136612 +vt 0.870588 0.748634 +vt 0.870588 0.775956 +vt 0.725490 0.775956 +vt 0.870588 0.748634 +vt 0.725490 0.775956 +vt 0.725490 0.748634 +vt 0.274510 0.486339 +vt 0.274510 0.644809 +vt 0.066667 0.644809 +vt 0.274510 0.486339 +vt 0.066667 0.644809 +vt 0.066667 0.486339 +vt 0.462745 0.704918 +vt 0.462745 0.994536 +vt 0.254902 0.994536 +vt 0.462745 0.704918 +vt 0.254902 0.994536 +vt 0.254902 0.704918 +vt 0.505882 0.049180 +vt 0.505882 0.120219 +vt 0.682353 0.120219 +vt 0.505882 0.049180 +vt 0.682353 0.120219 +vt 0.682353 0.049180 +vt 0.996078 0.486339 +vt 0.996078 0.644809 +vt 0.850980 0.644809 +vt 0.996078 0.486339 +vt 0.850980 0.644809 +vt 0.850980 0.486339 +vt 0.980392 0.775956 +vt 0.980392 0.775956 +vt 0.980392 0.775956 +vt 0.980392 0.775956 +vt 0.980392 0.775956 +vt 0.980392 0.775956 +vt 0.980392 0.775956 +vt 0.980392 0.775956 +vt 0.980392 0.775956 +vt 0.980392 0.775956 +vt 0.980392 0.775956 +vt 0.980392 0.775956 +vt 0.631373 0.748634 +vt 0.713726 0.994536 +vt 0.631373 0.994536 +vt 0.713726 0.994536 +vt 0.631373 0.748634 +vt 0.713726 0.748634 +vt 0.631373 0.994536 +vt 0.713726 0.748634 +vt 0.631373 0.748634 +vt 0.713726 0.748634 +vt 0.631373 0.994536 +vt 0.713726 0.994536 +vt 0.254902 0.120219 +vt 0.305882 0.005464 +vt 0.254902 0.005464 +vt 0.305882 0.005464 +vt 0.254902 0.120219 +vt 0.254902 0.005464 +vt 0.850980 0.994536 +vt 0.933333 0.792350 +vt 0.933333 0.994536 +vt 0.933333 0.792350 +vt 0.850980 0.994536 +vt 0.850980 0.792350 +vt 0.933333 0.994536 +vt 0.850980 0.792350 +vt 0.850980 0.994536 +vt 0.850980 0.792350 +vt 0.933333 0.994536 +vt 0.933333 0.792350 +vn 0.0000 0.9950 0.0995 +vn 0.0000 -0.9734 0.2290 +vn -0.9806 0.1961 0.0000 +vn -0.9824 0.1865 -0.0081 +vn 0.0000 -0.0808 0.9967 +vn 0.9942 0.1075 0.0000 +vn 0.9936 0.1133 -0.0049 +vn 0.0000 0.0499 0.9988 +vn 0.9972 0.0748 0.0000 +vn 0.0000 1.0000 0.0000 +vn -0.9972 0.0748 0.0000 +vn 0.0000 0.1240 -0.9923 +vn 0.0000 -0.3396 0.9406 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 -0.0570 -0.9984 +vn 0.0000 -0.7950 -0.6067 +vn 0.0000 0.7198 -0.6941 +vn 0.0000 0.1071 0.9943 +vn 0.0000 -0.0644 -0.9979 +vn 0.9005 -0.4345 0.0189 +vn 0.9012 -0.4329 0.0201 +vn -0.8652 -0.4996 0.0431 +vn -0.8811 -0.4725 0.0205 +vn 0.8888 0.0760 0.4520 +vn 0.9739 -0.0683 0.2166 +vn -0.9855 0.0478 0.1627 +vn -0.8951 -0.0650 0.4411 +vn -0.9946 -0.0823 -0.0628 +vn 0.9946 -0.0823 -0.0628 +vn 0.9954 -0.0959 0.0000 +vn 0.9965 -0.0796 -0.0235 +vn -0.9958 -0.0917 0.0000 +vn -0.9955 -0.0948 -0.0054 +usemtl tile0 +s 1 +f 1261/1261/382 1262/1262/382 1263/1263/382 +f 1264/1264/382 1265/1265/382 1266/1266/382 +f 1267/1267/383 1268/1268/383 1269/1269/383 +f 1270/1270/383 1271/1271/383 1272/1272/383 +f 1273/1273/384 1274/1274/384 1275/1275/384 +f 1276/1276/385 1277/1277/385 1278/1278/385 +f 1279/1279/386 1280/1280/386 1281/1281/386 +f 1282/1282/386 1283/1283/386 1284/1284/386 +f 1285/1285/387 1286/1286/387 1287/1287/387 +f 1288/1288/388 1289/1289/388 1290/1290/388 +f 1291/1291/389 1292/1292/389 1293/1293/389 +f 1294/1294/389 1295/1295/389 1296/1296/389 +f 1297/1297/390 1298/1298/390 1299/1299/390 +f 1300/1300/390 1301/1301/390 1302/1302/390 +f 1303/1303/391 1304/1304/391 1305/1305/391 +f 1306/1306/391 1307/1307/391 1308/1308/391 +f 1309/1309/392 1310/1310/392 1311/1311/392 +f 1312/1312/392 1313/1313/392 1314/1314/392 +f 1315/1315/393 1316/1316/393 1317/1317/393 +f 1318/1318/393 1319/1319/393 1320/1320/393 +f 1321/1321/394 1322/1322/394 1323/1323/394 +f 1324/1324/394 1325/1325/394 1326/1326/394 +f 1327/1327/395 1328/1328/395 1329/1329/395 +f 1330/1330/395 1331/1331/395 1332/1332/395 +f 1333/1333/396 1334/1334/396 1335/1335/396 +f 1336/1336/396 1337/1337/396 1338/1338/396 +f 1339/1339/397 1340/1340/397 1341/1341/397 +f 1342/1342/397 1343/1343/397 1344/1344/397 +f 1345/1345/398 1346/1346/398 1347/1347/398 +f 1348/1348/398 1349/1349/398 1350/1350/398 +f 1351/1351/399 1352/1352/399 1353/1353/399 +f 1354/1354/399 1355/1355/399 1356/1356/399 +f 1357/1357/391 1358/1358/391 1359/1359/391 +f 1360/1360/391 1361/1361/391 1362/1362/391 +f 1363/1363/400 1364/1364/400 1365/1365/400 +f 1366/1366/400 1367/1367/400 1368/1368/400 +f 1369/1369/401 1370/1370/401 1371/1371/401 +f 1372/1372/402 1373/1373/402 1374/1374/402 +f 1375/1375/403 1376/1376/403 1377/1377/403 +f 1378/1378/404 1379/1379/404 1380/1380/404 +f 1381/1381/405 1382/1382/405 1383/1383/405 +f 1384/1384/406 1385/1385/406 1386/1386/406 +f 1387/1387/407 1388/1388/407 1389/1389/407 +f 1390/1390/408 1391/1391/408 1392/1392/408 +f 1393/1393/409 1394/1394/409 1395/1395/409 +f 1396/1396/410 1397/1397/410 1398/1398/410 +f 1399/1399/411 1400/1400/411 1401/1401/411 +f 1402/1402/412 1403/1403/412 1404/1404/412 +f 1405/1405/413 1406/1406/413 1407/1407/413 +f 1408/1408/414 1409/1409/414 1410/1410/414 +o M001 +v -0.740000 -0.010000 0.290000 +v -0.670000 -0.920000 0.160000 +v -0.710000 -0.930000 -0.170000 +v -0.740000 -0.010000 0.290000 +v -0.710000 -0.930000 -0.170000 +v -0.790000 -0.020000 -0.140000 +v -0.710000 -0.930000 -0.170000 +v -0.970000 -0.950000 -0.150000 +v -1.050000 -0.040000 -0.120000 +v -0.710000 -0.930000 -0.170000 +v -1.050000 -0.040000 -0.120000 +v -0.790000 -0.020000 -0.140000 +v -0.790000 -0.020000 -0.140000 +v -1.050000 -0.040000 -0.120000 +v -1.000000 -0.030000 0.310000 +v -0.790000 -0.020000 -0.140000 +v -1.000000 -0.030000 0.310000 +v -0.740000 -0.010000 0.290000 +v -0.740000 -0.010000 0.290000 +v -1.000000 -0.030000 0.310000 +v -0.930000 -0.940000 0.190000 +v -0.740000 -0.010000 0.290000 +v -0.930000 -0.940000 0.190000 +v -0.670000 -0.920000 0.160000 +v -0.670000 -0.920000 0.160000 +v -0.930000 -0.940000 0.190000 +v -0.970000 -0.950000 -0.150000 +v -0.670000 -0.920000 0.160000 +v -0.970000 -0.950000 -0.150000 +v -0.710000 -0.930000 -0.170000 +v -1.000000 -0.030000 0.310000 +v -1.050000 -0.040000 -0.120000 +v -0.970000 -0.950000 -0.150000 +v -1.000000 -0.030000 0.310000 +v -0.970000 -0.950000 -0.150000 +v -0.930000 -0.940000 0.190000 +v -0.800000 -0.180000 -0.110000 +v -0.150000 -0.190000 0.310000 +v 0.010000 -0.180000 -0.100000 +v -0.800000 -0.180000 -0.110000 +v 0.010000 -0.180000 -0.100000 +v -0.390000 -0.180000 -0.360000 +v -0.330000 -2.060000 -0.220000 +v -0.360000 -1.160000 -0.380000 +v -0.010000 -1.160000 -0.110000 +v -0.330000 -2.060000 -0.220000 +v -0.010000 -1.160000 -0.110000 +v -0.140000 -2.060000 -0.050000 +v -0.510000 -2.060000 -0.050000 +v -0.710000 -1.160000 -0.110000 +v -0.360000 -1.160000 -0.380000 +v -0.510000 -2.060000 -0.050000 +v -0.360000 -1.160000 -0.380000 +v -0.330000 -2.060000 -0.220000 +v -0.440000 -2.060000 0.120000 +v -0.580000 -1.160000 0.290000 +v -0.710000 -1.160000 -0.110000 +v -0.440000 -2.060000 0.120000 +v -0.710000 -1.160000 -0.110000 +v -0.510000 -2.060000 -0.050000 +v -0.210000 -2.060000 0.120000 +v -0.150000 -1.160000 0.290000 +v -0.580000 -1.160000 0.290000 +v -0.210000 -2.060000 0.120000 +v -0.580000 -1.160000 0.290000 +v -0.440000 -2.060000 0.120000 +v -0.140000 -2.060000 -0.050000 +v -0.010000 -1.160000 -0.110000 +v -0.150000 -1.160000 0.290000 +v -0.140000 -2.060000 -0.050000 +v -0.150000 -1.160000 0.290000 +v -0.210000 -2.060000 0.120000 +v -0.430000 -2.180000 -0.130000 +v -0.330000 -2.180000 0.070000 +v -0.440000 -2.060000 0.120000 +v -0.430000 -2.180000 -0.130000 +v -0.440000 -2.060000 0.120000 +v -0.510000 -2.060000 -0.050000 +v -0.230000 -2.180000 -0.130000 +v -0.140000 -2.060000 -0.050000 +v -0.210000 -2.060000 0.120000 +v -0.230000 -2.180000 -0.130000 +v -0.210000 -2.060000 0.120000 +v -0.330000 -2.180000 0.070000 +v -0.360000 -1.160000 -0.380000 +v -0.390000 -0.180000 -0.360000 +v 0.010000 -0.180000 -0.100000 +v -0.360000 -1.160000 -0.380000 +v 0.010000 -0.180000 -0.100000 +v -0.010000 -1.160000 -0.110000 +v -0.710000 -1.160000 -0.110000 +v -0.800000 -0.180000 -0.110000 +v -0.390000 -0.180000 -0.360000 +v -0.710000 -1.160000 -0.110000 +v -0.390000 -0.180000 -0.360000 +v -0.360000 -1.160000 -0.380000 +v -0.580000 -1.160000 0.290000 +v -0.650000 -0.190000 0.310000 +v -0.800000 -0.180000 -0.110000 +v -0.580000 -1.160000 0.290000 +v -0.800000 -0.180000 -0.110000 +v -0.710000 -1.160000 -0.110000 +v -0.150000 -1.160000 0.290000 +v -0.150000 -0.190000 0.310000 +v -0.650000 -0.190000 0.310000 +v -0.150000 -1.160000 0.290000 +v -0.650000 -0.190000 0.310000 +v -0.580000 -1.160000 0.290000 +v -0.010000 -1.160000 -0.110000 +v 0.010000 -0.180000 -0.100000 +v -0.150000 -0.190000 0.310000 +v -0.010000 -1.160000 -0.110000 +v -0.150000 -0.190000 0.310000 +v -0.150000 -1.160000 0.290000 +v -0.330000 -2.180000 0.070000 +v -0.430000 -2.180000 -0.130000 +v -0.230000 -2.180000 -0.130000 +v -0.800000 -0.180000 -0.110000 +v -0.650000 -0.190000 0.310000 +v -0.150000 -0.190000 0.310000 +v -0.330000 -2.060000 -0.220000 +v -0.140000 -2.060000 -0.050000 +v -0.230000 -2.180000 -0.130000 +v -0.510000 -2.060000 -0.050000 +v -0.330000 -2.060000 -0.220000 +v -0.430000 -2.180000 -0.130000 +v -0.330000 -2.060000 -0.220000 +v -0.230000 -2.180000 -0.130000 +v -0.430000 -2.180000 -0.130000 +v -0.210000 -2.060000 0.120000 +v -0.440000 -2.060000 0.120000 +v -0.330000 -2.180000 0.070000 +vt 0.968627 0.775956 +vt 0.968627 0.775956 +vt 0.968627 0.775956 +vt 0.968627 0.775956 +vt 0.968627 0.775956 +vt 0.968627 0.775956 +vt 0.968627 0.775956 +vt 0.968627 0.775956 +vt 0.968627 0.775956 +vt 0.968627 0.775956 +vt 0.968627 0.775956 +vt 0.968627 0.775956 +vt 0.968627 0.775956 +vt 0.968627 0.775956 +vt 0.968627 0.775956 +vt 0.968627 0.775956 +vt 0.968627 0.775956 +vt 0.968627 0.775956 +vt 0.968627 0.775956 +vt 0.968627 0.775956 +vt 0.968627 0.775956 +vt 0.968627 0.775956 +vt 0.968627 0.775956 +vt 0.968627 0.775956 +vt 0.968627 0.775956 +vt 0.968627 0.775956 +vt 0.968627 0.775956 +vt 0.968627 0.775956 +vt 0.968627 0.775956 +vt 0.968627 0.775956 +vt 0.968627 0.775956 +vt 0.968627 0.775956 +vt 0.968627 0.775956 +vt 0.968627 0.775956 +vt 0.968627 0.775956 +vt 0.968627 0.775956 +vt 0.945098 0.759563 +vt 0.945098 0.759563 +vt 0.945098 0.759563 +vt 0.945098 0.759563 +vt 0.945098 0.759563 +vt 0.945098 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.619608 0.704918 +vt 0.619608 0.994536 +vt 0.600000 0.994536 +vt 0.619608 0.704918 +vt 0.600000 0.994536 +vt 0.600000 0.704918 +vt 0.600000 0.704918 +vt 0.600000 0.994536 +vt 0.619608 0.994536 +vt 0.600000 0.704918 +vt 0.619608 0.994536 +vt 0.619608 0.704918 +vt 0.525490 0.704918 +vt 0.525490 0.994536 +vt 0.474510 0.994536 +vt 0.525490 0.704918 +vt 0.474510 0.994536 +vt 0.474510 0.704918 +vt 0.588235 0.704918 +vt 0.588235 0.994536 +vt 0.537255 0.994536 +vt 0.588235 0.704918 +vt 0.537255 0.994536 +vt 0.537255 0.704918 +vt 0.474510 0.704918 +vt 0.474510 0.994536 +vt 0.525490 0.994536 +vt 0.474510 0.704918 +vt 0.525490 0.994536 +vt 0.525490 0.704918 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.945098 0.759563 +vt 0.945098 0.759563 +vt 0.945098 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vt 0.968627 0.759563 +vn 0.9880 0.0935 -0.1226 +vn 0.9890 0.0908 -0.1171 +vn -0.0787 0.0259 -0.9966 +vn -0.0778 0.9969 -0.0141 +vn 0.0856 -0.1238 0.9886 +vn 0.1236 -0.1310 0.9836 +vn 0.0790 -0.9967 0.0200 +vn 0.0783 -0.9967 0.0207 +vn -0.9890 -0.0908 0.1171 +vn -0.9886 -0.0917 0.1190 +vn -0.0003 0.9997 0.0243 +vn -0.0000 1.0000 0.0000 +vn 0.6064 -0.1195 -0.7861 +vn 0.6598 -0.1445 -0.7374 +vn -0.6002 -0.1853 -0.7781 +vn -0.6788 -0.1504 -0.7187 +vn -0.9314 -0.2021 0.3027 +vn -0.9100 -0.1772 0.3747 +vn 0.0000 -0.1856 0.9826 +vn 0.9378 -0.1136 0.3282 +vn 0.9165 -0.1324 0.3774 +vn -0.6305 -0.7093 0.3152 +vn -0.6975 -0.6565 0.2872 +vn 0.6713 -0.6877 0.2764 +vn 0.6074 -0.7340 0.3037 +vn 0.5447 0.0338 -0.8380 +vn 0.6108 -0.0044 -0.7918 +vn -0.5200 -0.0478 -0.8528 +vn -0.6108 -0.0025 -0.7918 +vn -0.9397 -0.0747 0.3338 +vn -0.9474 -0.0870 0.3079 +vn 0.0000 -0.0206 0.9998 +vn 0.9315 -0.0227 0.3630 +vn 0.9438 -0.0068 0.3303 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 0.9997 0.0238 +vn 0.6668 -0.0033 -0.7452 +vn -0.6864 0.0269 -0.7267 +vn 0.0000 -0.6000 -0.8000 +vn 0.0000 -0.3846 0.9231 +usemtl tile0 +s 1 +f 1411/1411/415 1412/1412/415 1413/1413/415 +f 1414/1414/416 1415/1415/416 1416/1416/416 +f 1417/1417/417 1418/1418/417 1419/1419/417 +f 1420/1420/417 1421/1421/417 1422/1422/417 +f 1423/1423/418 1424/1424/418 1425/1425/418 +f 1426/1426/418 1427/1427/418 1428/1428/418 +f 1429/1429/419 1430/1430/419 1431/1431/419 +f 1432/1432/420 1433/1433/420 1434/1434/420 +f 1435/1435/421 1436/1436/421 1437/1437/421 +f 1438/1438/422 1439/1439/422 1440/1440/422 +f 1441/1441/423 1442/1442/423 1443/1443/423 +f 1444/1444/424 1445/1445/424 1446/1446/424 +f 1447/1447/425 1448/1448/425 1449/1449/425 +f 1450/1450/426 1451/1451/426 1452/1452/426 +f 1453/1453/427 1454/1454/427 1455/1455/427 +f 1456/1456/428 1457/1457/428 1458/1458/428 +f 1459/1459/429 1460/1460/429 1461/1461/429 +f 1462/1462/430 1463/1463/430 1464/1464/430 +f 1465/1465/431 1466/1466/431 1467/1467/431 +f 1468/1468/432 1469/1469/432 1470/1470/432 +f 1471/1471/433 1472/1472/433 1473/1473/433 +f 1474/1474/433 1475/1475/433 1476/1476/433 +f 1477/1477/434 1478/1478/434 1479/1479/434 +f 1480/1480/435 1481/1481/435 1482/1482/435 +f 1483/1483/436 1484/1484/436 1485/1485/436 +f 1486/1486/437 1487/1487/437 1488/1488/437 +f 1489/1489/438 1490/1490/438 1491/1491/438 +f 1492/1492/439 1493/1493/439 1494/1494/439 +f 1495/1495/440 1496/1496/440 1497/1497/440 +f 1498/1498/441 1499/1499/441 1500/1500/441 +f 1501/1501/442 1502/1502/442 1503/1503/442 +f 1504/1504/443 1505/1505/443 1506/1506/443 +f 1507/1507/444 1508/1508/444 1509/1509/444 +f 1510/1510/445 1511/1511/445 1512/1512/445 +f 1513/1513/446 1514/1514/446 1515/1515/446 +f 1516/1516/446 1517/1517/446 1518/1518/446 +f 1519/1519/447 1520/1520/447 1521/1521/447 +f 1522/1522/448 1523/1523/448 1524/1524/448 +f 1525/1525/449 1526/1526/449 1527/1527/449 +f 1528/1528/450 1529/1529/450 1530/1530/450 +f 1531/1531/451 1532/1532/451 1533/1533/451 +f 1534/1534/452 1535/1535/452 1536/1536/452 +f 1537/1537/453 1538/1538/453 1539/1539/453 +f 1540/1540/454 1541/1541/454 1542/1542/454 +o M010 +v 0.780000 -0.090000 0.150000 +v 0.780000 -0.090000 -0.080000 +v 0.580000 -0.060000 -0.080000 +v 0.780000 -0.090000 0.150000 +v 0.580000 -0.060000 -0.080000 +v 0.580000 -0.060000 0.150000 +v 0.580000 -0.060000 0.150000 +v 0.470000 -0.540000 0.180000 +v 0.760000 -0.530000 0.180000 +v 0.580000 -0.060000 0.150000 +v 0.760000 -0.530000 0.180000 +v 0.780000 -0.090000 0.150000 +v 0.750000 -0.560000 -0.170000 +v 0.780000 -0.090000 -0.080000 +v 0.780000 -0.090000 0.150000 +v 0.750000 -0.560000 -0.170000 +v 0.780000 -0.090000 0.150000 +v 0.760000 -0.530000 0.180000 +v 0.580000 -0.060000 -0.080000 +v 0.460000 -0.570000 -0.170000 +v 0.470000 -0.540000 0.180000 +v 0.580000 -0.060000 -0.080000 +v 0.470000 -0.540000 0.180000 +v 0.580000 -0.060000 0.150000 +v 0.470000 -0.540000 0.180000 +v 0.460000 -0.570000 -0.170000 +v 0.750000 -0.560000 -0.170000 +v 0.470000 -0.540000 0.180000 +v 0.750000 -0.560000 -0.170000 +v 0.760000 -0.530000 0.180000 +v 0.780000 -0.090000 -0.080000 +v 0.750000 -0.560000 -0.170000 +v 0.460000 -0.570000 -0.170000 +v 0.780000 -0.090000 -0.080000 +v 0.460000 -0.570000 -0.170000 +v 0.580000 -0.060000 -0.080000 +vt 0.968627 0.775956 +vt 0.968627 0.775956 +vt 0.968627 0.775956 +vt 0.968627 0.775956 +vt 0.968627 0.775956 +vt 0.968627 0.775956 +vt 0.400000 0.267760 +vt 0.400000 0.426230 +vt 0.317647 0.426230 +vt 0.400000 0.267760 +vt 0.317647 0.426230 +vt 0.317647 0.267760 +vt 0.882353 0.267760 +vt 0.882353 0.426230 +vt 0.964706 0.426230 +vt 0.882353 0.267760 +vt 0.964706 0.426230 +vt 0.964706 0.267760 +vt 0.870588 0.267760 +vt 0.870588 0.426230 +vt 0.788235 0.426230 +vt 0.870588 0.267760 +vt 0.788235 0.426230 +vt 0.788235 0.267760 +vt 0.776471 0.267760 +vt 0.776471 0.426230 +vt 0.694118 0.426230 +vt 0.776471 0.267760 +vt 0.694118 0.426230 +vt 0.694118 0.267760 +vt 0.682353 0.267760 +vt 0.682353 0.426230 +vt 0.600000 0.426230 +vt 0.682353 0.267760 +vt 0.600000 0.426230 +vt 0.600000 0.267760 +vn 0.1483 0.9889 0.0000 +vn -0.0022 0.0629 0.9980 +vn 0.0101 0.0676 0.9977 +vn 0.9980 -0.0637 -0.0000 +vn 0.9986 -0.0471 -0.0245 +vn -0.9737 0.2276 0.0083 +vn -0.9747 0.2234 0.0000 +vn 0.0343 -0.9958 0.0844 +vn -0.0065 0.1885 -0.9821 +vn 0.0252 0.1680 -0.9855 +usemtl tile0 +s 1 +f 1543/1543/455 1544/1544/455 1545/1545/455 +f 1546/1546/455 1547/1547/455 1548/1548/455 +f 1549/1549/456 1550/1550/456 1551/1551/456 +f 1552/1552/457 1553/1553/457 1554/1554/457 +f 1555/1555/458 1556/1556/458 1557/1557/458 +f 1558/1558/459 1559/1559/459 1560/1560/459 +f 1561/1561/460 1562/1562/460 1563/1563/460 +f 1564/1564/461 1565/1565/461 1566/1566/461 +f 1567/1567/462 1568/1568/462 1569/1569/462 +f 1570/1570/462 1571/1571/462 1572/1572/462 +f 1573/1573/463 1574/1574/463 1575/1575/463 +f 1576/1576/464 1577/1577/464 1578/1578/464

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%0AJAzdilWeRX*yliU)H&zd=JfeeoLsmy@ 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%0Dq|6hLeGcx(Fl4x%0A{Rfy#{$+M;GXqD+TEugip4a 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�pwE$ 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 z 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 Dg~bbk26EASwi=@0W|=QNGd8Iw zjQNxO%-u>!bSjPSV_~6iDX)iZ2gvya0iF!|XVXwB>-(S#TbX-Q_6BGqa(6mbbME?m zh&~;$VSi0wRZ#X->viKmN8E;ixT01?i4pPpRqIvFCTn@Qm9a1|yurH&}uf8#ez+0m1-dEHNR?Na}JB58h z5jQ9U__ZdGH)ID&xT5o`j6Yf9#NR}O^41&}#uPq(NZcWGYZo!1nA6(QI?jWy)EY9D z>q9smjyL36jP{HRZgEC$6&&0QqhoU;4INjPa6|%$71mMX6qh9 zIhRXf&h>eZ_86_5e6{EoEElAaevgh^IisD!YzLh|&h=cmwcM*EytwM=0O%5{t31CI z1Kvsz(+?TI!RscD4!AqBQ9#6?W}Z5RPfAN?LPy+;iba%i3tyK_9neGC(%S@(_5iAu z+3tCZ_g6p2-+8D#k?OPBdxc{52x=?*l&gg%?cb#7?8>3Xha0l81Ugi&CLw+NttLfj zwfoP89Wb4W{%4|PJ?`2&trvpSBDQrb>fg8hIIH`2xUX>;VF0NLoaMJK( zQtbQW(Y$53_ALb!_+B?^x8d#9Io77C;EW!uaP-l=iPwAStw$(xqz%e5IQS$CZzHrKBW=QCJso+AyDb6)e=Qr=6&q!M^p zMeV06v*u7yP9lQ;r zjjgm=N3R@WEH5`lyxuNxsf6NJehvdy;3?It_>VOoMjL0o=pJ5Y-PxbMQdOwzGZ&$Q z6eZF|N-#x%mp;wiDVuKo*cj7zRxap<{_s%%77Vg!g%&Syq!Vdas8Tc z+*LS6V#_+1RBuC}OmH)ZzI2dc<+egt5o&W@h>^V4>c}MSvR1q)EHMzwov>5m3tFz~ z)NDR52-Mgs8Lu2?UkRpO+p1|?+k<9TFH^kJwx?fv(BYx6!}ymNh5!gfRN0+%R@8;uGo?C!{4%ZK{Sy(iRD z`>-40OIWQwW>!~vs;%>B%?{*IcOiRK{9!?M9j zA|#M`XsklCKn&BS z{2h%cAH{W!P}@Cs1LUx0itRXYvKPU@HR~6;`jhANuMs+Y@IwDAX+n9!L7Wq=j`OT< zHybxn{NHJ;w-s5A%a{i=njGI$7X&j`o9d+YF!ppoxA=jeyUU`TdF?F$@EJzC)dqga96K|{S^s% znrHC!2y-@Tb+2U8tw(F{U6#+qSlFHxbyCL`Dm*|m%G;w8T|6&=T1?5_VTx3Wu3Yj7ImM(~zXSUTFn^h0+~ zjCpRjt-Cu5FkM2XYMFCCuvK69|}40xKO}~SAAhMIZ6YM<9%@1&Lk1I5UxAfa|A`b2g7Y6r`d4k zKYz0Rm?w4@JrURB<5)T7%V2I##I(mWtjWqp{b%=jLhe}q+71Td0pq!ipq2~v&Q;^g zbFB@*(zPV8rv=SF=jYF1KMFyLTH_(%V(5u&;Ioy|1P*clU^7aC9k4;(1A+)BI-=oJTy187(Jy<^hyButk4Rz^N`AriJ` z6z<>IzW$o0%b&kzBLk{G2>o6c4tJsPY}ICBerrW^2BjX?20W>sQ_NW#Y5l-{Z9yIp z2-+zZn#>ekWLcP_p0@ub9k_8t#`2W)%%3|4bDPbvci*fxyUq&k70-0!>nIN!Ru-@mHH^ReHA5`8~3fA z4Kc0)CY7Pl*%G*#>}c%I1=sx;|L>jp!icC`Tp7$JWW0^+WD@x-g3k4- z$U0Aa8~(- zyV~*c_l1uEP!)`i#{=BloB9ju-_J_5e{{--bIZx0t-!j-n4EaOtj;)VRc5s+I*|8(C-s`dfLj(zh@t*!iY*f$;xxyU)*k?px=7% zh!mn(rTiRJq3q^wIa@r z?JFtfnP7&{AyR7E$X?xFpGvw|$V_Wc)L3B8xHp=CZ|ZG$|7hg#8rP}jEKx}l=XTMjd)*SSUDxXI&?kkwP1^25&hT#Mu7Bu8 z!DnW^3#Tu-1ZL^ruavBkU#^y65iSHSNjr%G6g(@wVtI=wx+f-&T^} zCXw;_RmVH9KUs6sUBS#cGbO39xIQPGId3r>=;3x3_|(OOFyD67nztrXJ`M0Med_ct zig5@zK)lOv>3m`mwsV53+^JK!h2>B1PdMk@lLo+^Oiv4~QX^%k_d;^)e)Pr^h~9A! zN!HarUYQiN*c=Z$x!Ma#Zn*4IN^mh8YVZ4 zbOb9F=QP_b9&nHqk@CP}^HRXtyAyT`7bJ4iS;fpwXL)N6laTtR^^IarH!76np^gLa7gOs5#RusM(HBAM1pciep z3u8A4o6Et~4%N^lf7{g& zT&V-q8YaYk$!4yu*(RjgJUW++;eJu_R#?r(ew1tV)fmmpgv8))15Y-XipheL?&R>p z;tj}Jv_|8edviYfP-Y;K5bG*Gcki-HihG+ZIx|rCr9{)To}6pr8m`S$H|6YmG_rCNaHqU&W_4Rl?$Ss_1^!uMj~uV~&}48=%$B7Ext= zej!xBrWEu|JUht5FVrY73V#x}m;CGkGWPm)5vQ)?uVd>3BD%6wT3IiBHi!L(L=(MY z4Nsap+L5I!crH;sZQ6fH2vnNcmfzI6I`?br;Nr-9ZUWq4aZg1mvrzjp5)S+J#*XNu zX<~HN|E?1>a_Hq(17=G8HPB?T4s=GtX4kive`w=}hRNhTVuA~^+JY5RaVx1G! z=$W&RA;#u~`kV1P-0{78&oZlOcXWlH%&11P$Rw5JhWa%*tVQk$b^>AyZcoPTr`@YR zB8LG6Heg0r{?#u?;(or>QCJWz5?<{~5p@9}MiM5XMSs~rvjCVsbAi4qKg3DhcF8O0 zhJTQ;>Jcc{Rkw_Q{~A$>z%Pd7AC})OGorWuCNn4RMfvWQ82YY6hQ_D)W+R!O8h1ot zI9>c|UgKs?+Uw;i1`P_Tkz%?P8>W?mo`e3_X(Nga7ISw7+^PF!oCyL`4Jvb4j)O*K zj^Sgq!S&;H6cT!4d-pC!3c`m~HDV~fE4w=qmAVq3uWA&*n^wUlS(k=?+Gl18RMc9V zQP{(2@)*NZjA=e^lsp^8w-`N5qRye=czlg4%Jy#*s3S0K=&`9l<`8gQt?EP{OnO6I`#V z=PJ?<+bhMB%QNP+}>85 zJoQTbPo(dxTXh2Y-Pe@?UNiEbyb|mo=%B{M*5$oaYUKmsUEli-ts>ZjCeg07d#)E3 z?L07%nZ4lq(7Hq3;JL*Ui(zqlI1ky-@Ki!yHT+Vmr(epqL<^Bw9i6rB@sHuf7>V3s zHrQ@l(TKEz1p)>EobjI{w0vyO9?)Q|NxghwU-OkWpvAakqv?KsB^RQ-rir}JHx2Tu?&CAx|w@XeW>azrS1HM*o{7}@YOD`;-(A#w4* zjjBu&jk9U~mt5pkYky5wU!2(Z7fPn^Vd#7m0~;31NrLT6Fr&hV+f^lcL%zgOLmVsT z0O3nF)UF{cL-`2P#%7u&slth?UbzP+J7A4`s;6Pw>`vyG?u4&baCnKgAAKm>Q1o%q=ef{Gg5F=O=5c3J& z&jd~QO7Qs(jEP5a)Ze!CL9~a4)K6zLUMGM+)sfi?hWh?XBnbn^xEFz|>e80n!{FJ2 zM1d#gGVIpYjgzxOX$%4%y=%vya2$5S>RFS1p)0x#dzVGl!?3(p0TV9lEU=q**eQzC z1rS-ldG`)BH_$A|#R>vf8ai(BwJV_e^F{u(fqpPuxwR1ew3YF?4lh8De>JXIKH)Xi zJcYZO>6q6)>;-W#A@VB~Xw-#FsknA=r03XI0d|{~MdsE++aUUZgIbb?zrJ$4K$JEa zOgBg{(D}x%82+5mTz)8H(B)OHGbeSJgvGDF3Z(}+Fq$}&2{4;) zgTug3MW`MNG&FQKdmPR|7G{IN-cf{C{}P-be^*d1dJ)Te7Q60}$dUFVJT1Hi(Y=ZR%Lr zd|iq?W=Mvu7<2A$aB28P-efR8fhmVyChuLemMAbRIHbflc*iVsrJF-4AqH<$h4-{v zKNx(238N&$(rWbf@+-bphx9+s#J)uy9ik=Le5$z^Cttqt9FXZ4pl>_SZisc7Gdo=& zM~^6I?k?VAW^NBX85WhKwbY>&kk|8uLkWg8?AP-9NZ+^4oQN1l9(=hT2v-CIO>lp^ zIsSUU^cm)ZyAiZx!_VKaW{TuW=)U=W#aY#{p75N`3YUW(X?J%OHgpc?6Z>wBD{|yj zf%KVJ&1|zWCH7EX?oAg3)zG&)cwNJv8U>5D&bnQ{@Dcx^q4OGu9yoXaakyNwlcBlzV5mZ$`%pU2vgkjH^=oR#$v2E;V6BE>NkIeepJzbkz&0C2 zFpCk3!GX`Y=i1DD)S>D7??CA1?lR&Rh0U(q7^c>6ZaJPair(U! zv)*yW#MU+OaAYQF4OmT9%|-oa+!X7n;<*sUt#b|ceksNtjF#w))6+)ru^(64Vg5_Y z7I>SlR;}e(R7dC2PObW8Gg_1!S*oW>Qc~}1-#m{Ii3>ccLJxK@WX+q#UVYW!V;l$7 zTfnrFD3|O|+~2+`7XHQPmjiy3Iv~Q0%%Eumq18k3yA)}s0A$9{Mlcz|#z?&1D%bV+ z#lkRwCgj;a*4w?qvf96@l7fb2jsdP^t31$dEwW^qHWRO#Rh|X?rtVkbU)QO__D)8^ zhA;4(5(2YUjb|q>4;fGt%qD80V;JhQtMWTRjECRJHYd)9V~lYkb7>nQi;K2Hj`yOX z#CdJcjq)96Z~rk4dqkZ%I(WLfcEr!dhWeT#!3!j)pE>d}QBSYlH83{b@T@lA==(|d-y2b7gS;SfJY^BQtkL-qAWEgUsEnvRN(=&k`*Hfq7 z)a*!=iidAP-&D5R=28^4x&1T0PBDHoo{;e2d z&$y|OZp=k&uUk7xHq<-iIOEb1@Kvapx7*b~w?g<%2ZA%Lip2rSsXKdgnRk0$#~5Y}~Lu4JWl)ed}UxW}PqB&lQjzKFrOEHA!$6L0}tt zuI`AU@?G*=?hKzsZjK}ce7c$t9+q|obv&Vy4y}Y&!Jkes z(^Z|g2YuB|*|tRaw(7A2l*eF(R*xXm)v8pL8FXB=@ejyXT`=^QUZ20lcf9}8-GS~E zspdyzn47EYXl+^Q)4(*To*0Q4p<&r;XeZ6Z8oqDnn8VK|szI{C&Ah8}3XpHYT2k%9 zz#vQH9Ti&mm7RZQ;=EFC)`yX)rvY7BtA=?3P8%-*nw>sIZelbOu20VQ zH8D|??RF-JYlv>-C9Uvst9RQ8YwgTANXQtUgl2wYj#Jo!C5?y)Yf4R5we#8uPLmPe zjev=lG65f)@oR%;rL-g!WD{PDih~1sr+ejr(nnkl2dU1VPDmyjCjE$X)#l2~waAqy zKn!5j`kyg>7uSFkA9tcVLkD=GAx2x{EbC_Y{vMC)R{5Oke$|?!Cx+eCw&MmA-+G$= z6Cm^J<(3gAJ0tvFJ51J|~a4#=2fmLS!^h@@+{n+SOrTd5lto_IiZySkzF; z1`+UiK#AI-Xi(}hd4lrBpnH+9j#@Zcq+RSuB-ZrigLYFA%VmMyxAlh%&-mwNcVV3D zdNq528AQR>E(J-Z)Y3|yR?bHNw1^GZAs_pJG8#NpW(guMcI%?1f4C$}RjBsZ1ld48 zzrjJL0`TdAsZyhNY?L3l#2>OyGhbYtQ@!416Q#7c{zLqXUB!7|ftD%z3~Xo8W}SU= z@Tp3W{>f{8WxwAkLkzS%51#;s_lQUv#3`|DKS{jpuY?+rro)Njar{?fBjJ%ELHbX3 z#FMjZXrdKh5$s^pxRwcf3)J$(17vnh{DB( z<0SeZnL=M4UfH7iUG5!;&K5X$XY#DS*7c+m^JAXvpVJeKPlTRYTGe}snTdd&I@@|F zhus8!1NFh^y-$4FUSU4)Jn59Wq@&>LlY*B|%pYhZ6j1O3uhPDMT%paZgu;ffutvYc z_vx@kWCmhAD_O;6P7|F$U?`>_B+m}o0s2Xdd#O@M!PO^fvc;Y8>Zeu@HDKH&Soykyr9#%;`eD@L2LZ11YvqjVSu5D4Niz@K0OOJES`bqs_fM z?fC$PKzz%O+X7bZKama?AA(WjQ#2d)cPnpYxsu;kAMzS)h@5z%qh^^m#yGcg$ew#C z*nM0Kq=gKx1c6#L$a4la1C3s($t=bk!E7azy6M)@4SFNgR}o4FCL@H4I>VGSf>Xsc zOd>eaHGY45z^|R==g-6|PEbY~hGU^BtfQlTT)SN!8c0}g(QM^F*78Gk+`F%DCz+}l z<4*L`zHnaacmiKKW)E?B(Tj*1w1$mKeULs(ckRN69$xAa=5Nbb#-kF@$jK*!8J0#@ ziZmk7$NqBK#6&#Zg&-A-uR5YjK&fb;=&y{nyJl+;zLym1LUg1x)y!#Oy0{hJS!K7- ztRGbo^Wyc7=YuQv&Ce)A)lNA&%Tc+-55J3ZL?FG(K7Lj`HpHa{9dq774T_eabCNXH zCLRAiX)lTPFVlDnfMKk7UE-F;0zWBd6Zl)2trNF&KVV8{ppOx0H+jDdqU$f#=x*5q znMH>)y?A-qx;9Cg#Jxn%IjpH{!cNjhJF$M!Ea2s3Ej?Fd`rT(qs`OUvuP6PyF%dvqVp-y{1#E#b;zugzQZyS30eue#D6hW5+svwTmzsxr?%+WHv z2UlN$S$@7I&EaOM1&P~WF5=>m`^m=^uxcsauBE=W8&8ZRih69Y)&z{M{AbHH1rJ84 zBxA%9f>Su~C$We?8ue|QSYl{fuoX*->F@0Q~~C}1%8@JnUDv*dTq!zG@_zk9HL z?3dQ6HSMRcs;xQ%Ivrj!GdE3o>hyXqA8pY-G=JuKKk;PA)v$*jUJH-x8?!DrcB{5? z{qDQPEdkw%es_dy0?qdd+v9tBzxhnp;zCWRCu9iTO>~E_@F5{3a^sv6S=+*Ey;q4X z1oS$jt~qdHz@krx;L9|9-%$g|YvG&?hW2`%y2N`lk^R~quYM1Z7Ga>%$h35tupY*p zxB@zdH!1?~-n{ocZBaxvFEjoUZy+Y)?fY2lS?5ED<8y-|;Bt`1wyi?- z)ivVpy4&9UWH?D0>05_5_=R!RmH!w$rOJH$7`SoDlZ7(Uw^^E`zN@4Q47J4k7koSf zHy&7ElVfk;ldI(NGUZkJN}dX=U;6JY<;Qb!_m?NHw?Ac{TU&NK^OkAp_9Bb|yR46^mJGYagQ z5(6Owx|VV8C)WE5ioLs%$~maH0v4LLO^|WnF)yt}VUd?|YIhuwv;Quw&887fP&hma zs8K9FX`wM4qMz*2_|a(q4mExK9gY3Gp*JitI@VQ`Ju1zb?HhP$TQXoVrn)^uKG(B5-tMI4%Zu}I9U8$*}mPDIUF{b z@ByJ9weC-R&Mkiqe}pJ5^O-gl&WI`keiS?U2^vP%=t$}A((E9260)u*4qS*%jbk>v$@BI6ycH{Ew%=U&fwC`<+H4uad5wZ)^d^RI#WNq5a7d}B}<>xag~ zY~y7El3#=W9e)qAoOGCC)#DKICO6a4-izLLJ2Mk<>~`wR1JGIL+s}Uls`|h5Kco1l zP7;em7+P;n03jh$)V2Jmo@Ra~$Db3w$H_E@xl57_$4)%IdPOesiOb?@zK)W9a=Z#m zqOPH$HSZodL=baXE~?=`#!-WI@4S7&=ho+&A)krh%l4gVW;M#hcC6K}Mg?h+dsh3wl9T$8>p zmv~~-d=yZYiY$?PY<)~D`+$Iy|6hQFlnu_Qte8Gs3WRm?WbBc6!BK$|aM>!yZ05~BzPiYQzOs0V*ktwLa+E_q<$M{eNCZra6bVT*7~Zy~ z7l^aGa;3_q7_QEM&(=VBHMs-Qs$wMVWue!^r{nGtW)5kBjYFbYx{DPCzE)oqDudrV z%-Q^+V}iw~x)m-&>5Svs5T>5F>0%u+{cYNm)bh(i=V1x!s|nmrGpmcBlTO_>0LDIC zMmqH8yUv3Hu-&{EZBV2#>aWqm>NB&MGWLbGWNTh?4o$G31qjV`P{bcW6$k9^KobAx z3~oq(*m@U1w*?H&1)D@YsW;cTd=d2fS*cLyt!!9oyM4q3wH2rwb77QMl%6_)h&yRb3d2Rn~_y_*C5;f_f2UT=zmc+=( zmvipZWEX@Me~q$J#fqe`y^wUd9wLNiw;Raqr|cB=p}zpPF?%AYMfLP@IlT{p(EI>$ zir(F(>^iKaQg)sjtuM#=^QZe{#$s!jOV8DoepdC>T^(HcF1m3hKsH>iM)VIGCk6sJ zhK!9awhZmyq`T_bZ4S(G?gP-(le|kU`c+>pJ?xy|{SGEdtsso>s|A|POun_ee&A(Y zV6p0xkG5^GCG#Ge7o*Cpi#Q$mil8ro?0+k7iFpkp+Fu8u%9t(lLX3im(a@s=fGcW` z!j8y9mH=kzr41eiHmJh%K{l)P3PTnXTC>6>FES9ms)$KFrB`As`BpmHEs{!No?sms z0Q;A9-Kh4szC9xS@@gkDY;qh3vDsH}(eSUF8T@Fh*)M^=f}gsdO|Jb@?2&$sXacwg z+*=^;mtL6*KJf~l@})**BH+uUd7c003-K}Y)|Y0^T9R41XVt-n&q{DT||du--0#}xvk{l+t(z%sA>@VZr@#TzSrQ?xo7iwhbxsNvYZ%> zpEC*XU(x=0_l-Ix)Yb#3LKYCo-8Gk;K0SXo4g8h^wmH62ce=T}V1(BE?XR$U<^-+$ z-0i0yyE;0PsS)#9DF91n=?l-8D$v-Q7(ylR!+`0E=Se!+`SB9G_O11k^Yrh0r=0jy zqvRtE-10NiqOSKU-r6XxALW-mXHJA^N?Vt7bn`-}I~!}Wb_D6|uhrD~KInqw%V`yY zKqvKeP#S1{_o~jx8Dl}c6#)-#)Teh{_VV#(1kr;S(O(uBK~D`c%f)ZFv(q#2T^tnWZjW50o? zq3<`83;iPMXqR``=WJj>j6}zPPx4F2B8ta`{JW3X<-(hY)x4M4fMic-BjC=g`nI&9 z;71fj5wMXgj4&I}G6B;rc3=IEs@GlnV?m{3ZjN@Lftozd_VRr1^1iaK%W4=EYlwTDg;%Bzn2 zd<+_^L90$Q1YCLu1VR}DW=PHtZ1bF4|JpYT$gz#g#}LOPZo&9SrRsxq5fN2oV9uazeMjSrfp)u-m##Ewyvdi z*XxoT=`PFXm?I~_ZBrn|CLs2n30iA^jQY}Yz_$(;M2u@&gWNB`$F z;vL}#^5v+d#Y13W5ylqW(66aNKyi`E`i;(!%ga>3K-HOfN5)(#-51@_OM#1=PhZ3j zpOEg$kaj)0x^?#0i&;Uz zzbml`XXA!*8>J#c$Hsp_DlB(0PW!l*f79=cqT-(M_Gv+0dpylNakA-}jZatyuPI`G z|0)0(ZrbH*jHL6&U>*78GU4X3kdHNn)u2uyaJo8Yw}7P?#vvq7974c3A=7J{vdNC4 z$dMk_OCvuLb0|D2!1=$XuziTah}m`rML9OtP3)zXZ2U`|SFJK2xw-QT0WHUK^C)&l zMObPQEOQ%Q;6)d)YB{HrB;CJdRt_!>+fUpu3V#$sFXlnBul!vtr|bW&s8UFNS(X2}8q2hmUMXFmEWTv;b3upphVAt123dGng-{YNwrzozuUO}V@{xbjatUhz`k?6y&j zq!4D-37`ef$6Qvq%o#9<%`On{9C5$-LtK)a!bq&yDAf$w*dO`t*Q+eyf;bmVTI8Vu zYw$zu9~&1Yw@Yz2_%y2z>c8IoEqw(PyTTpH^bg>BWZ64LH!AWqsWRC}^`kz%KIXxG zN;~yUBctT^PYOY>W#{*WVE%Fl#eG5!I~JmjgX?^*9>#RqVVhf-=FXd0&t}1swr3ul zk?WR+$VsS!FfK!_vs2{UXvo?OrkTJY>>fGJgwAc1>KH8kl-;^w11vh6-u`MUo$ zRcK2^u9XMXYLI7;3IW!>+*|w-ont)lypqW9+gGe?YTv^G3`HT&nxo9F`+;5@_R{}X z`K{FbzlkOfhCuHFn&5(4(_V!*t+qxi&2ZpFPP&0HWgz`D^n^|#JXbrRJu}C2WA0pu zYa%m!n+52aQhT0H&dKV()?_|++1074`(~cJ{2*RFAuU!cY%LRB5#6jf=LfcU+;iZA$^iJf&5q^OUr1qg)^;Xh04Ld-f30cM zF}`X-JL@Pj^uq(11T%_EEbJ#JHvcHERV>bh&2#_f^k+}!eXQb-@EN{%<)Lld+U59Q0^tFs|>TgkoeR;%2>g>k-U{&@ubgI#XGd zXDDF^U7D^0FY^)ec;lFPBj?WW6!EKLnrVjT$gMgYK?Bf>Trw$CbPWS^poqaoCjqM; zsGqnvvAWut#N2&pVI6{=+&;u&yJ)WapRV|~f97p=xVQcHJv(ewI{)O9r|lv2s}>6T z2qzY7^$&TyNcKxRK7Q*Kamt8#hkhY{B)>UYMfc9_$ICstorM=#h_;_iIMF=3u;_xC zg*f}EK<~%&o&BW^Q*B7W><;tJ(MZ52!xZZx!=nA!H5bV1Z)+-vLM5yDnKDlEd08W# zFq4`M!JZN632NW(Pwg?^5m9ekEV4wZm5c(y)p=&~II+qckEYBZEsG)CtB%(Oh)HlBSb1aJU2-xidaIiZ)ZXd(kUhohmF@&HhGQdm`2HB;ZY*@zAqGi-h&Mt{swrgqx!| zs7~WfrvuCZh(HdM%B2q*kSfYRU+vD^9&5FiD5q~38ht$?HHNae=V60I_$VZ_aa}}>mK_*0Ej?$zuTHI28#xy0OtO|a1ck1tj64GCw}$oUxvx`VSS(-LVf*T|^9K34KJyUj`r3Ly z;Va{a04Rfxz~oNMm_iwnGhU@iA(&d22nOuAlJ^+IHkcE5Ypph5w*U zrq}5j=&j}52L$ty_63f%t;FUha5r@lY8l4NNUoau05tNub8I^d^Veg- zJRAeG3wvB|4f53CK7@z!D_1w|C+Y>RAG-4Z-PA$e^_o}zjp~HQb6Q&mWkB2+888 zikC0F99OPuL$SUd_wQeiTeq~qxP3M5-MtZa?p%wl-u>9v*i^h7x9{JLt(~p7-`muI zy&qfsovdq4eg|9u=W#Syq78uRk!kXLtSv9bXFu?n_||W~92chF9sj4l{=Zg%)J#DZL-t{jFGdcr9j*qDz~T`_eCCS<7%<#MQKw<1D`#sf`AAS@=M})vH&< zH#6FR;G4S7_$wLd+1J=?=1%>m@z9SeZ(fNnzx?HV0e$i8QhpVT_ai`F98};=2XP*kCUrN8xAEm#>WdK_}-hj)2d90(>2i(^7JDtF`fOehc zt;=nH4d{e&+#PHmG5Oq>HF_M^uuLuMdg^{6&H8HGrov}g^AWJscQwcZcxrvfgSKq` zDTYqFK-LG*w?rKPHw+v!!Ze2DEYb`n)%SJ*zI;hLKb5M6R>3?q4gSMIt(RcBWvPP= zl!KZ%3Jh>I2n@42UDF7BmCAu<5GMt;9DeSYTS{~U-?`3rMw-9@=QIwsKig1|z#!vA zHV$Bks!a?AItV%B(|?T~2kLFpkR?Xf2x{PTXd>L}#(ZZnmS&b?X?7)UzqT7IJ7?ni zp87!i^bfu-W(MlpyP7m5(w)=)JinQnk2EsjK}o3Vt^tojod-3qbx`JmstwE5<>YC* zgY^)|gUqX+cs`Va<)}6tYs;(o-SdUnrC91N#@sZ&Eix6|868Xm_3a@)>eB}OGHezO zhXI==wFj_40?4DweeHw(L3$qq%R1OEw&gH;+ORJP?-ZU)+#ldU?QmP)3EYmuP`BCR z#N*&FxNc(l(tc{A)=jx%hnh~^bsrKYp_T`e_-b0M&-6NN)Ou^(b+C=@uXh5=J_vOk zhvA*_9EQ4WwJt*Kd*HZ6EnmaDZMyZ0$NI z{{&=fo5))S`MRz>oo9CX+xY_a;_^}~uN;Xbe#B4g{ry2q@oog?T$O7*pXheF^0)HS zoWM1&Dx~`6d|ZCdQstcMrD%^Yu;{GEyCnR!$F)~)#i@8KKKrrn)j}m=Ze9!7p?J5I z-R|Wp9=+Z5=$um7<5RJ%1%7B>vv9VwjUeR*kZobD)n}gHjWcIX8XX#B(nek=x?+p)i?b(c)=5BSxO#?e;mOuH)hoa5ukwzv6^w|zA%e^{7= zn*MgYhU>2ZZIWH+YLBftnAf)ZxH7D_janaY-HhkDp0=F^bOQBRzjYb4Y+H}z+qQL{ z;2jXQ@9Z|w$IgnVVsttip_p=+oPo5%q`dD8i~pzhLX43cu?+@a8^5F5t2eMJVxsLNw^N|VISUMy+@a%}EoTzU0I zoVfqd_{_QQjeqZFKdI?Tvr=a+rZo|2K8)AjxEedd-I!nGmye{2s~jD!{83M7i|bB% z`&-P}>XYbPdKy zyKE9K`dz=ni#ROmA{cJf>R))cOH=%4_`u z^tjCB=65?t(-va$8rDZ#>#4)oih`oM$ksA7YWc(9jW$=#ty*5^O!^i@`aa@$fb zPHW_EO*F86Wb)Wn9$H;5y40eiVQW1H_76=}Dvwml57XUz z?=XM!Of?P%T5$9GIzxVof>~6`< z3yU%PoL)oGJ=VkJKCw8uEmpZiwD*Z*vGLjMW4}G~GbIbE_{mpx^-P_XmDR*V; zGeT)^Qk(ya&uA-ahNao1c<rF6a*f}hZz z`V`ot!6%wyhm@<*!2M^qjCQumj9MO$_c-?X96)RHLOX2Eu)UytCl|Vd2nY0%PFrleU3Q-gIk3q&0<`OTX8E#17v_=Sjs^ux@ZK`Ij+h{y_Ah)9XDlJzk)x(nz9Hh z4UKd;;Aym|O$<%Ldn9jJLe{6a*j;GET>XX*dg{<3Kl#-*7W|oRY$7JOeR<$FdWegs zR3aaxvqj8KDpXApvLW@9wr97954FfPRh0lwsk|yzZ!pkQ1~JLbc@oy?A=~AFWBW2z;6N;ovrxvs+>4F|U_Pd#G`DWEy((uS0rr*CIKc-K z2LZYX(7b^0pdStNCQn)Yg4EvhQ0}PV}sbxJT2t_^REa=K(9RzsYzka;K@-9cG z$Dji!vT9A^H-|<%VL8WuV;?@xDFl3y-PD9UA!eHSWBe$QZ9^AzlSL1{upac+w$}mF zwwMmhx*daJW8pPMzQFIuHpf|-t3T6;^LzdHU+L7^(8m`{GYan@}<1+5kE%lRm2At}e*oQe z%w2!_fTsW?kYS*Cl27L%4<8%1Two~869)WfZC-Fhf%1;sKiC7DuiIR=Df^#sE}xTT zOfWX^JT#9HVgh4Hp2~4d7h)r}0zpBq;M%dS#UC8o$9Jpy4PgyV)y0bI6xy~h85Q*)Z(Kzx;z=j;W>Tc=+5SaOVr^U2SUc_ntOe>3#Z! zv4jH}@ZNF#SXSwD(bHbirB8`-t$-}bgnE2~I?q`2c=OmReOkT(Mc)tAk343_k4={k z63{k{3#yPPGVoaksK>O+iLsG1f%J$cWtl6~k80;wPiY4H_=MQNPUo!$xE(dfdtP#| z9i&~K=?2Fd$1;KODv3PK=ri8&ffE{k5-!H-KlB)+@mc5b$1Z%np^c2sP}%CriF3i* zf@P4$Xd4ddN^3f(>mv%!CV=YICzh!33jbaXE-#q_<^c<<>C#f1|O$15+t z7=!sitSzmmUv)sL@Asy(pq2~g)!wOQvx9EH$(oZo6A%-c?F9U9d)slMuq7-5%3`me zrUUW>x3gXTAk@6=v_shx6#Y!D*h@d#Zu|S7{CF&ud`Z`f)S4e%4mHqI*W=;W!3UwU6ySQu?IC_}#6Ezf_$Z(hq9)`KnB%Q=z_#@5zW>OcnAOYjnC17)0J zZ4*%LuvfRU4t%P6BWqSP$S_30yYD z!E;^l$xJ>?0n$IJYgYY`5Ix%_8W*qVueu(*oQvvAHFdEF)@I@4+VQyZ;-#3qcQ$_R z&-^K#-il673u?ZO$uEtsYu$6Z7pspg$JBAHVWwouzK*B9HeI|+DxQ27_&T4Loh$XQ zq2MV89slejump3u3$wAZvZQn2ZfvY?#k|HA$7w!dCI1zZ$38VOzsLG%H{T_>{MzgB z^5xgGIbM(XlglwTKNo|2UanU^vEf5c{#X2MeFXJT((17Qh|2}9B1gHA?NE751C|B! zN$vBx%ySO%PSbzLKqGKEN5;W)A17^FO|N-CEo)s4QZnMH!(n#UX;AaF%i3t`W!PE9 zblYg3wBZYA4)Eu(P;Wr&7(!K@==_fna&}$N06EJ#?Lg;Hnd2Ii8@}QN#RtFT4dhL? zEae2;QPT|_4>?dBC?%9%7Ds9v5X~T=vdCg0P|?216?~<%Iqivry<@prPs$eJ0oca! z$=rrtby%Lb$dyjA9m%QsIefW8WfIfoV=5;gUfLf5I|$ zDUQ>Cu|Cj zPa521N&QN*C&NUpfTR}~Bgixp-^4MmwkI#z52VNKsMCNv0bNeNQ`Efew1XD_*y+i` zd8a`wk6%kXo*Y5Na)7^1*Wg49Xd8gf`r7i?(WW1iD<=T>YG1YOujO3^>NMkud`$y+ zb-dE;U^eP!eA+I?qxG1#Myrpi+#j3Pu<46OV{84UFpL% zAm*dpbvtYMx=#r;C?n8rBuE460{qT^bx;p+T~6A10Ce*MHUYjv3Jo8ym?k|65=EwN zgHfm3sCm(EKNzH`ueKK+kC9rQ*!^#QY~q3k7e4B-L7Kn<6@8$t$Nn%c?S;421Gu;Z z4gUc1yBweg8ViQZt3LY>I^_Tfx8HRGdY1IK&T-qFHb3&j=rG(S;yMjT*TJas-0c9) zyG{n2b%L?XSk`v6^G-Xs4%=tA98gBx=_8q7U%~IPnPwxiy}g}z%Muqm)whj)S(Wh) zk2dQ3^S+Bu#pUO(M(5tC__u!MM`B9n_1F=Ex@}Jzo1V_+)AQPRKGcoc5i9EV2#8}=QFY+&u__=cJL#FgZ^&ZxOPW|u+c7eZIVZJb4L-l z{l)gi$LOWaI^8_|)YI|M!;i*|H*UsPUj4)TvA*SFOOapj6wi$29seldNWKYdgo)A5 zc(kudc_v5o8}$anHUVgc`vnjeeI)?P!e{-InU|HO(Uz^#z-i0cR_pXJ=dm!7Z|oyY z8S;c0$=9Gx1IxAPHENp<=$44(Tu#7N+u61SA=_wvc*`SL6M#6(Fwwc77(H&d18`%k z+y;>L#8{UVU1J&7WjV*L10M4mq~T*Aw0B14W%45ptSjY;7e}GK<<9|?a;7zD9v|X1 zDd2cao1x3LkzVDAlSd2L{GALo3rslNxlo!#z85ESnq>*)HgA!)-{D2hzL!@^#8rOr zX2?Iu_pxU-pX*$iU5?$ms_)X7I2q^TulhgkxPJ9^T)%rg zZfxImT`IEDaQb|0A$>LFyy5j0 zjneu%Ob0N%mZ?D=d8H1NS!agk#7%G?fV54)w$?nvbs2yLYJSHoD6Ee>0iW_{6#S+W z+Xm<^GprMk_Elt$i&{T{tN9wm2igT4!0S4IV|2NV)(uG4x`ET^vOa8b9uU`UG94Pa z8RNE};Cfsy$8dcvfleKyts5C{yZ|v@=40+;lY@-gWI5Y`e)=M9)L4LSJCP&J<4tY@ zfR=NM(ykYq+$Qr7$h$5BI=ndsnlj4)+X>8TeKnd3=n3RK-*HTthAeeZmmdwS^#juG z2g|r#aW=B$d}bR+8^}UOPq}dQ);4HlX3VA;edY(HKFR10I9^*j8e8j|asK#)c z#Y+Ep{OphYNPazPYJf)dqc#k)I_^N!N^ zrz^YU!2CQfcBt=*O~rS!GyH(&RDNI)vf+-&i#P8-3L-Qs>3mLkj5rt;Da9;vYemI1MFY& zj-k~7IsrIFw|SuvlPB=|Af_|k8T;gGSdW1mz*fqv(|jHaBQ$B#hzYdU@?JC9RzOUd z{b^og&0`w20P6N!l0m+8+Vwi^@lF~!bee`fXs(;M^Y~-q4aleh1^w4h57NB`9_1@# z`mmiLIcRv+B|3g0+Pad0znQbN?wO8`I#Kq%eJpajsem+f$ zzP$CR8EJK8J{A^NSVw{R@I4cl``s_0TNiZVJXo24RCl*CtBF))YS(aTHaCBp>l<dihrv7q9xW-0o94I>YI%G^e%w!E`)XKU(#2AjkLZ<1T}}ad-PeF} z*JVIEFdhV-Bx;Q66YP_gs)YIE^#d{nvK$LuTu$OSVB>^3K=z%ECj-3>pw?N}(XI>B zZLN6$)swd`iHCX8D*fg%bP#*oLx;bu&oHenC-!(Ki{vs6eS#$Iy3FsG;I_M7V0zug z2iavEuFo+4q+r+|1nfr_f%(GafO6=JGulP~o=2INDI=frW~G;M@($35eIB$?f50^VYE5T33eFd<8B2AXV0f3@CLKpG~R* znAfr(KNBn2b{X=d36#}!w~=+}ykP#xkZqdl(oV6!*VTFL@rN$Pulx_c6Dz~B@z4M6 ze;vcy>Idd_eg{l?2gAM`sN;$Aj?RVL^_bd~XUH=oFq@4=>}pQ!$Nrsu%uZ=6&5Dd) z8*^B0P$%!UbY``IUF^h-Yj^W8td-Rx>FHg*%GL54ZF4}G&g98681BZ-)=oTq{)u?x z^x1gj+b_q9SHBaFUc3;SgDq`7ieCw}Pw=HEMPCJvInKfG+vkqu*^x}<#pBq)oMHMk*!J_9*+iVuiBQwkmIC5&1+e=nb6in-u`qtWmIMv z!}eK+)8_H{8Jcxb*7DpKykFqJI|t==DJHX9VO@D0*8>Q?I+*7{fM-$w==h^xk}jv~ zwwE@yf)?-mVtIKVrsOAv7MMUCT&I0D2_E2%N2qi&F_g)n(73(HCT4kIIi|FMUD$mn ze)O}Si0}LO(R{g@Hsu#XV5hAJHQ)c6+T-dFw`R42*J7GB9z8M_PhNaHE}p-jiLMj( zZ{3OA{y_7U4(cL35%y*AXLBWULf<>xhQ|xC_Lon19&biHzTn+sV&xa*75Kz%(q-%Z zKqpD@&vzH2J1754EyT`!$==#m!f5#@6;glj~~MJ)UaNc8?|2go#(7sKt2fOe-Iv2Uz_&b0D1SNZK(CN`<60j#C0D#U;Azn%u4`y zGXMWG+#XQ-)BZ3_ukDAY?T5PDpu7(61n{BT_D#|Y4%7Kg>zM@i`(Zj5+mpryusyY3 z4cfz|1W?{?Tbmz1Yu5$Li!Ibg-gAuuWzby?978i)-VTSM-8Rx~8*Rg+P@}F7|Imh- z2HY+#WDvW4e962z$v-t*PE0_b>+$jG7`VJ`D{voDX8VZAJCLUy+e@g?wilg*TAxD= z^VPhhjdndXYP%-!QP!rDcW}Lvcz|`=t~MX^NnveeEe1MYEp<-CljlAd{dFyRwcule z;gtiYe4T-#t00k>W@DiQP0wYF;?6*Moii7YEX3lm71hr=Kzw8OB(O1kCiApM$n^*B z7tyECSr?Qw$rx^b+N?E7KHeo;P_uo1CwA^^$M>E4MEtqW{%q{t8^$-j^o>|sI+~A@ zTfWvY3HAr5{meLI9M!UI-+ni6J=O(ky>&Tty8aq&4?Oi)cG~5K!R6NBP}8XwwCRL) zy^{cs?MKFG)1kc`;03M|Ip+zTi;rLYyozYKxOHGD4GYZNouCS?>JsOj1OY*e#~2m> z1Qfe6;7PskviM{mVE{CAP#wEl7MA6URHJekkUJ)J`tUYo@bg6}()IfnS=NyaO5yWq zzG5*=8S=&X@J#Ed^Cxb#&Xx|f7d<#e9E74*$Sdfw1xfLzC(sFB8eesK<5W=UqPWy! zzd-kZfQG)jsz{k=C6tzCN(6k!ol0!ad`=<7C(sCeO&Z(=9qtUGi=Q>c%+D;w!zUhz z`&YJOt@p0@`Op1{ILg-~`<)ovmE2yrokrdHJSnPZn-rH9a7(|ab@}+i^6}YNTANip zgz30``JE-Y$ zySG6ZGv!2Q|E0Z6nXf4LbBXCs1%EPg*i1IL>Cwzf{YYb8ZmjaEzv`2z^vU$zY^>kj zj!(Y-WAUl;pN!2nHsfno|1kFE_hKRDqdT*JCxRcfoRQspDTEjNR*tU5k+qfRZE-bb zHx|0{G0zuFc!^ySIo4*liaUrtCwhMKC2f&4D#K5tF@<(vZ+kJst$1LX{bJZJ#7-Ob z6|v>pJU%Y*N8V{uOb~nKxvP`D!sbyJqqd6%5ktfFaa)MtF7nn#8So+x*hb3QZFOBv zgRw06gQ2jNxK0nW5#`;aeEdLqT$k%EX37TmHMU1z`;c1usbOjYzAARwcBc)-BesGz zovX*L+w!()3@TUD1Z?B4w5iC|HV_zN^_{kcz05l#RmTBYkr8v?LIv&iqjhy1HPGXJ z$a)2F=Kr`t)Qp*5%4083#MjsZjVs6;m*~%9Qt`NNrHzY0dCX{0#XQG_l;+Ah$BoZb z7*2nI%nLq$@r-&_*|ghsgJS2j<_^wjvzex^d0CkA5#`iPy#$VF;JFBUt7kDO z+CL7pTun3TJbJC$X`gq|O`dpZX(`7OaNC$eD0dxBgHCs*jBj~{$71-R6n^5a1x?N$ zpFh;*WdMZBm;U9?) zzvrkV)aP0oWW5R;UumoKXR8oYGOwiXsV>|ll1}R}v(Sm{I~y_B8A^-JKjK4=IP))m zv=?__*=oev(dB#@{r>%}{BkCDO{6B<3EcJ(vJko=>QkF`*88!tax~s^@#*Mj)A8C% zug9fZSL5uH=c3o&iQ#Tf=T*j@lP~} z`}y)1sBOzJfi2LXFU1YHib@wbg}f25q$n-{Q9^A z&={i}!}}#y@k>*5`%p9EXVBjQan8WSnS_eiBG)esaWIXk9{2gTN-@wRhi(* zAXgQsHYXOrHf5UQ9Qt5Cf243}bv_p6=H=U=CWSq1D9RT+xN}mVSgUg;OMXdR^RfmT zgI{e|X}7zOk3_joXd|D}D;^pH8ywr8_MKs0;m7&}RVLeUUs#3>6bB`FzH>e|-z^hE zuOHpr+1R+d5l^0fEPmkAe!^LaOk&lB%U_tNxI%qjiSi?7Gk z*I$cwU3@&wo?VO0b=fk<=R`O2s~|gk{!k|^+E^A|Wn6*03spMvz@$~%>xrQ~2{?W` zctY{GbEt8cuD0(Ugt3mX3}HO}4=z?5Jno$)HtKYZ!|3l6)WcmRK20iZg($T3I!{cn zADn*>%ws;s_J>i^nUL%9S{^uG2l#85xAxURdBYnD@K%{I7(c*$mWwfb=GvF z)={THU5DFZowSkl0Jhh1lw%74vUSuvq}^7x#SmwcIvmK2!#K|Z620krowuObZr1^= zwx^Cc!x7^z)8Qv?xf*FJq>Re=(rC{zc|k#GHXu5NdC!|W1P`4$9ott2F?C}#KJ`7H zi1$8zJfcVcj*qpXw7@_3S86D6o{EHgluT{ycIVahZVc}BwIL8+v-wN`1$$pcXh7gv$W#Vnq;J~0qr0FpYObwFIG&&dT%@Wo4xq-M?Mkfj-QQR`|7X7&TcT~p2KfcX%-~>=NGVVjm@@P3}kNM)Wa{PM}0Zh-BT}zX0 z2cy>M%_nu64_mp&2cJW28}&Q(xF%2C)?;1*d0)^nJ^dkBm%IJgMVa|Vx*OOI>cw_o zy~GaaNm~?3d&=XT=550^F>g-8=& z`4f-CTAYY`FYLv|m51W&nZ=k{(jeR$hPEDMfDGBWAMEqmPRCgvS4eg>IQud}bsagf z6z9&Jja!gTQVzTt_8T!k#z2NV<-j~OtkVYoyo7Bn68hVFv2$Ao`Q3<>;c6^sE4MVi5XaWm z)P79@)7_Zs9LZmlf8V=49E&?^F}o$6!AhK2ITH_`en|d^n4e$N0XrvObYd<)2%rT7 zS8Yc9S=tE7dopi5_znBS$KH2~x~{haybg8#L9pF##|PSWxJ{Gf&0F{HzYcJP*mugP z!{J{iYQ2Z)ujwqfnBaY~fsSu#n7p-vP6w?gk9Dwa4CO{`GaIh`FH0w9b_K>c@xV8*w^C4?qw-MXh@@{*ZUc)@Koo@$Z z(Ak!;eFS*wa?+FRupcbvv|&2>-0r&ky9KXp&T6wT-(85k?S5=tm!GvLzj*#k4Exlf z-AQwf{jR`;12zO}N-uHUagd+ruVK4sM_+aGI>+f#r=qWO=+4eg%yNM-AF&#P_PWh= zsKL*14Yh{Z(>eHup8o#$v+w;k;?{Sr#jV$F#mf9j%&D#DV3Wf-0$(ytiS1YNZ9sQ$ zz76D!HveI8dAl7o+HK{SApqpDx8^aQ!5YQul^W)&ZFR7pNgK6Z^8xeKG^0(k4q}HI z=69L%wGL3zJMVh(iO+lT1hrxsLdS4Im;}mEVi|aAU6cdgeXwIj{M=p~@f3rJeFfX7 z%h>rNmV_L)TJyG)(uHr_LDmnj--8*DrY;Xqc-!^!KcU=xk=^=7 zzT93d_3=l0DN7zcd#g;jsv=&+<<`C?buHA3s=`zFv^YUd8;+%g75PZJX{D$47c~hj zYf-fnM?|06n2np?S&zY$rMNKtq4=vm|6_6Tyi_dco`LPqc|V zNP5;OW3u_Oi%m;&1%^8tCyp$}>EkEk@+)t~((H0{W#?W`lYngF`{RS1-PpLdm75qI z4;yHLnpPe2TA=eT$v&Uk%fC`L2P6j^z~}ZmAdNkvD-sHfO?*a~KQYN26))&~k|b?i z#4bZ0S6z8JD!;bVQ%`A5efa$OSejakFFp4gar5%6IPuWQ{5AR2?n->=555|gzqK2` z_&5HC_-lXZug29EZ^keE<6nyFFI|drk3JGdmXGFUYf%$sPm?#FK-}2c%v-2Si_1At zcW1l#5`Ax{r@G74RoYH?%lK;IQGc}Hc2S00&F3^avd_h9nt3Tpzg2ojQx32V9_y%K zI*?eRo>Y;o?|>j*>#_~jYdMFSXHuEdw&CqSyWAetmNd(|E?^t2A34U1^A46HUCX!m z#&s6h*U&*-20yS~=K*Qx__(&uq1MAB1Pu@)SIWn7W7_!mDt%VQit8aypq#wzhvpc% zb=GwQ(mwG5`_uXf`NM6JWf4P6IkD?<-KjqbrM@<72Qh6SZ9SwdL%C_xRf95uZ5Y)l zqz+}R%XN&(nlwPa`yRS&n$#wz4buR0WNc^KCi8mp20y&k?RHv*bn4bW`oJ`o6VqSJ zqqVI7I&Iw*~aDx2-;@w zSoE%R@R;?~w$7zIQ-w1h2e>PA5P3asz+m%fV({W^NHSVu(#&&Oz$47m95<9fp zK01DeJUXp&;+D=IJ5%xLk9{KEeB)ZY@WOL3y~vk2kHz+o-=5K2GSC=cJ=MsAS~qK( z)Y-sk%K&Jm^FRK;&jiLaus&$;5(DTOF`1`+pYw>_9?EKY;QDHt=_g{B!E1hxYmN=> zq*`CIq)u24kaqobT7p?l8+}Y$&h19G1-D>2Y~Af+}$L02|6n|AyMcW~8~hz)RMlu*WUf{L0fz%uOxC^6ZJ& zyRj5|cNXH|*$Z+0$fNNif8u;h9T{j3A^!F0=braiqc>i3a23=i+N^UzNWV6=!pmSrt{iaX)Wc837r*qo@ts#*iKziPF2=FrCt_}KDQ@1r9dq3|o#1$UjYUZrXVl&2 z3nh&`lgG-zao2`*uYp0Eab-b0gv~R52G-KRn2X)nSqs@14 z?szLNkuFdCAqXz%-+sHg8R@by-i1?`U)N14kG+FSdttv^FPE>p^CS(gL!x-A6iWiI8nDtMH! zu76T}=r!H)#L##glDV3@lICm2p0|+$@Ppdk8pv2b@Z+y-z++&$$0kn(P-ks-+SAel zZ(UD21{z5tKKl?jZbO{ONB#UbFFxkcVRYu*a#jFZ3kJiif7u6;Cq z@<%@&yF0y@(m8COrxqqxF*-6alQi$Ikji%-@UhxSQ)lM1vFqzR+*6tU*mxuw#X9Zh zI)Dpz?000EcxK|V&W|gr%kp2tFSOfR`vesKGKQ#YDti51EG#X>nbT+Dl~-Sm=U;yz z7LP1NXI_hO#-7ggd_tN&^0;$4gYxy`oTI*M%ph-Csk`*!Vf|x!Q-@G=9XxK)M?5O8 zV7lRa#&Tp`jvjyx#yWXo`wG z7q~RCGQfG@Ma9Y{bX!-}QR%Has&1cUGDg3OCIxEDAYRukDgBj$o=~n3qfgPOYRbm( zK94|&fei?YeXdTNK6N(EAALN|EIksh|L*13ySx~W@4hGggP;8?@e4ov*?8YWk3^@} zkJ&XX&|?^LOS3V1Tw#4ShJ6j}=0uQC#G;rAwIM^!FqmKnl;typ;%CA(;3K5(6a)CPJp%L``}>mNeLMM|&+l&D z@5RxDwfLbA|EXBnUx=^1@uj$N_j(+eJsSNxTd}dP3GmjLIKTQxJoWU+_{2v)8lQa6 z_r^*biSz1@-n~J5`#s6G(%kRb5capu>w+V40d{QZUR9YP!>f|DZmA z9Bm@@qZ7b9J_gNiwA<`32`)p1Fl-hmzHdxlkwAhdv`(@jyBA9-EOG?t5fO7yac6TDGr^!c+X#x)1H=UQ4U7taE z(nbb4yw+380M0qq?e^6EXhW?^zcO|>k8wA!yfZ0(<)&8~PuZc-9cNEGr1Qv3T>9GG z_~0X-jL&?}lMw^8fx8zS&D+$=LDhmOn2_mQsFd}R&Ze2>qcYU9w>=eG8#=Fwd5ZpL zJ=G{cY$`v}ASs28&inJSdtr7d?r*G1$M|kQ4f}&omvdc}PX}{BQ>~5doqn7@b3T6X zL!XUre*0VT^_QNBBS%-_#IfV~TVMPDBOil6-p9NB%K!D1{?S-b9i(es()^LnbW`SZ z9qN9|jh9fUQ_?GA)t$N1VfHVv3=&OaRzfIER)LBb zTsnBfmc{w!G#o0E4C+f2(kd3_<_0>Ui$~#l#Hz^4G z>S$V>dKGAn4wjke*}PKT=gSINt~z%$N#h4iJM*2@c>Mh1aq8%qxbebz-2A$>7O!;U z&wb?2#$WvG&&E%E{8MpZbvfo`_CilKZc1*MFG9#qsz;SdpIot}_G$9UI^>gSj(*j_ ztq76zuZY8^>`4%@~vX6~aPO91W@;(Q?(!25lFFNH_B=HUTb#=tmU&Ad;66&+1 z#YJs27PJwXirKj-ZB%A-;+cwt6~#xSObh=v-@H+L#8*YM!{JJgCl~H;pr0{GzffO2 z@wmVE^lr9SG`?I#3?Gvb8JDlU5x@F7zZ(DWfBNls{oC8|iFdy{KKiNm#Si}2XX8)*zz@gw zKK9X=yRjPGd)>JD(v|qu3$Mz?={SCBEqa?fF{cGEU+mh?Tif(CkJ+hh{a(z`2iZI7 zd(m=J1&=zg97U7iaZFo*eM1{v)-ETc4@5IB{_>|4bE0Vc3zY56h_(ud`EX1owA3qNfG*eZchnRV3mwaeP&wjujmW*wLp#Re-EWmJ&! z1u=7kMpv1CnhQ4hC8EQ#*yT+DXM7hb#x8OiJTPTq7v>95qI04*QG zZ7xRfxMulKg>p@sZFdId1==P#*Nr?baJz`98(Cs(L6$G_!Lg^Rc|6qh*LI|@$H`+SV|QaW`d1d>6Ce0YeC+*?#C~6P zOlwUd83qH7ZDT>|$y!vbGXA_d;+S9oqGX<@bFD%f6iPi)> z%Khn&eLQ+Mx8paS{oUBs+T`hvJsr1iU(@+ieW!lpBRzXFYR{}}q6)r*nhsQZbK^!| zYs~T$t!%&SZpM5*_NKq$0I@bPQd|@*(juv?#JL8_W0UqAoO}F*K4|F1wdr1!^O8P1 z&`Bf97p=0d8)QE<0Y6Ml;|rZ{=pU-U0;MS<7^HK2sgJUKV$SyQzwF_o0`wP;*X8&X zUw(yFf3!dOl8!DPgJrCePTgrIVO+0mg%7>98@OKyMYiw*^bK`fV{55u3zY z;UAeBcS>U%4isubKylDy9N<$L*)o|o#B{`DThbYgjGYRgIZT4fkORnCR|yZc*K)uz zBXBS!nvTukP>_5QO?mN6&uE}GC)fO>>s}`ox~tI}Y{#Mo(ydo-$L&{kV)_1K@!t81 zu{Kg?nB8B&Wj|ngdK2Xwr)#tv?4N=2Wrw#bZ!gDIGHt{%^ zpG8)UG1%UTE?4Jz_u^a6KO3*~FUKS2&c#C)PQ~urUVP`q3vp}zR@}J08Lzx>U(W5s zQs;QAotTSrXC96p`pl=}{b%1FU;fSCjx&2FV@AH;?(|~$#8FMmo3S|G)f}r$NHebS zJ8dZhojhePHrIB`vrTF;Xg8?kXs6riw96e#L!ReNiLoV5t^#H47@2nZFu-G3K-$Nb z(dGf|@*3}?&cop2nReEC>a^{FR_pR&&fzdv&haFfI$iUDN$HxFXv}T51HcEZ4v4n( zn6FK*VLEMRftkM`uIfxj-XP_12wV=$X^*QKF0)Ptqoy5fX{oQ~tzkNmlFxFIW*#v;^;L5jp#60@aZRf?Ak+!XdHp|61J`;m_W-m@2Jr&!xx8nY*`|+8NelDJV>{$8q?zH-7m$qrlWDg(2 zTk?$^1dW1H7b!MxbDHa9U*}$_pAueQ-JjBiWUuLa$-ytda@=bNu(CR@@xL6GuUw6z zYez-*S}YrYRKk5!Y@i%YaWzdvV_&{FaqMV3aq;o^?Js>PuHU^8FJF2oR*$aaCVFme zLAA3`Ps#GZ7cEV4?LwQ>&)L_UR>e;{f!mD@_|vFuBF$L#vE*{YI*6S&4b(E`srl>l zB-BMUpX+Gb!Y1138t|4trr20?P*#o!g6)LYG*H(gi6$N++tKil2G%vn7Rs1wIu|aC ze+j*fwjf~F1WIELI!{%NDhICI8<4iX9JCW)xf&d##Tjq4sSRY^$Qst$)(uRv{q796 zk>E1oTEBS!G4yubW4lXy_y$Dv@RxO{6Js_%o4ePai>R`{d#*ra`Hln$2_?-NrG^mU1xzf*5({Y zO?FJ{7nWf;QJ0*ItbewSCdrh1_cTO|kMN_N=4SQIiUKlaDqSF8@AK?%CC&5GpYIqQ zkOw^R+-j^qw^yuYjADaty(G{sB3W+{PUljetsmtuTjz-bl9L;a_xhbaD_bpnP`LY| z5vd8xd)6V;ogxG}qgbO}UVD*N!5SU6m>p!Aep|JFyYH2w&utZ}kBh&4iW62+?Fq|( z*$|T9md!@|bRcGRp)p+sP>wkxe6wz1GrR7TUUY9hCH20t(09YoUW+i!WQDtaE5nLh z&3lV}e436WovcmAM$YFuujSnc51>w-b|Ag@Pt^|d*?~SF96zYEe>*s>D|PBqixElz z%Mm*fJhtr*v;no!vGAF-9c2aj=1lP@l$G4r{6h>lA9f=h%x*UXa2cLX zwk}d8U~H><-ChXYy(e$V*SgIc)DItR%A68u{@fEBzAovPsWUo8R}@@E_~K|B8~}y+ z)zeq3FCrcEOsaFy*`o+u7%+<8=lN^f1ByJ7)i^@7ZGY)c^_Xoq_APhXq|~i0KyJK1 z(<2o9FQ~M+Aa6P*V&rxkq;_OHWw!|LDX$`{VIXVOd9j8_T{`mX9D_O)FDHC{K;JMB zjEa(aBYoz|4O?qjruu|juPx3Rvq)f6guZqh3jn_VNVD0R8xcWLbQpm|R=kTvGJavp zsIrb@mT94%QZ**!*94Ekk68SGQ`#+b(;j9IT@>QV1wCy6P6|iwq3O?QvIpnoyI#3c z8W>q}seg;t|0-YeAGa*g$=HL?i)*apY~B-BWX+50?!4$VBz|h1(x7>TW&8gC)@tj? zUHUuL%HcjV$}!MO(M-D86xju$`(@v5hBRpZwv!<#ReX-9 zyHLsxvp3BfG}_#s?14;_GE@cQY-_!#HgABbC#&8XF{7g80N`<>O$zWwGC8$8Dhd`) z&`41AXYbp0$DMd*CZqm2acNS1nk|SZZtitV=3kdB(vW;yn0nJeU_P~KSLv}__w#Q2 zFVU=lP+r#qXCl!^?v$Fq3_Lp^>|P%>GheTp5epJ#q8g3lR3#rH>Fx3q!?)A;Tv+zX z%XG8CwEkw&HgCb%y&J3>0iZV1rIMgso5+c~g+o2iibz0_v59$^Qe;c@ZeDHglN+bz z8FdMN67&l|X1DYvv~726oN^)x{pGt`AjS@FtlTme&KJ0(xH6YBmKn2_YBnMTV_t4A z*6nV_NQwoq>UHS^(c5a?loWPzyRAAbq>0WjZR;GBW%WvH;GUrpn)O4%e4N^ z&b~h+_;v22*nP*D8tz%od1B3UJqy3k7G|o$!g$A*|0=opyn4~`+OH|Q_Pl0N5fHXI znj3RRabH)FMG<+Z>x}S`Emm}Y5}Arr^}%F$I7on$;(P5WOy+J}vXn;e@r-~Al)N5i zm2gvG&wn#rJ<+Sf9R0{G+R36J_dTqFDoZ0|8@ML-VY)_R@JgbR$wwN8#Fyz*Ybzu< z6TmUAI-;t7b8q_Z<>-zdP%bL-^Arbu$v__o{RwtKz>7xc^`pEy%MU)op|FxLRJ z$r9q7er?iuLC(e-+$tC1!x@#9eO^!QDbM=jINsHP&KAGn$;C`2HNwhGCN`jO&B3im zN{Fzhlvj!5{3kbMMd8a^3{_IJJ*WYrKI2EJ-3~@eISJVa$~BTUJF-}6u5H}m_$H1C zdbec$c(n8nmD?#>>PWHoi!Y!Xa>noSMe}(L$>doT2;=GYedG3w|7wdpwWjF z8EseUY2U*yn8c31w%maBhS@#qsR{-kWBoRI-~5v$!s4=g5AXD|flh>oYTos7WX_Ju zRDIQbl||%*O7kADQ}`Rs!;|9QX#+K!gckvN!lHUGjzXo$B z8Ic=RBW0R+)|Ssf!vg^a?QzbN@?!$M3|hZjMV26H3})Q8?BqfgdGOEXX7p@m&cvup zT@9zS&~|(GOvmX2>iVVkMj!@)tWR(D=T?T7B5MOh1Z0~}#8Tpf&r@+5j!WgyqInu^ z+e&U%ccOKi;VRO@`Gmoo&n$plmpSzEaD(&OFF2(@S8RejW5Em%`D2$ zG0k*^%*Nr5TlB|}!fIexp-QH>G#3i&ELd#Z#5@jr)o|Si{H`*S6BD?yI5T>bV2~cR z>vO`tsJnaSbTPSm<9%v<1jW|t9+BL$m7L#_QYJ_Q_pls-p z;%NY!eN4HO`wMaAcX>}l#@KR#*q7y^{#J?Z%_b%;g zDpR@Z%T+R%xo6~ujx~|TZKi1xBxAw`vwRuVBtwMDC)H${r2acZw)`P7*@Ka)Wbl|y zC-pv!HZgl8{;;*-aCF-)uq*{60LJE4iwTKvfvaPx@)-X?3dwsfcz`ABga{>3Xu0Mr z?Sow@S9pTAS(Dj_cd#aso%b-enW>>`iSJoh2O%9gLfR zW*4cmq48;6qC%z(3C*jOr6MI~RhF-F9iWaKU;6$ud~Fm_Oh2mAJkc9-?^^kKJnX(6 z{JWuQ*2ktrE1y*5q$WT**VQtLMnF4Eo8%;5@jVd;dG#=QxDUv=``Or4FnQdmo?+a6 z|Kj-=4~baJ+rvsTL;hgECMD1^3juy=ca=Sn!6)YPHIz3ku*eO3wkgNhbxU#@ zrIC<_i1M)G$E^=+2~xOJCA&o!27A1bi*XD%y0an2__yN4xTt&*+g;w-pWkwG3H0LU zuA+(xtgfk}HLk9_E5ZB=Q!^8%a~;7IJUc4xS}}f2>ZY1!m%hUM4`4n!uuYx;w5Zod z{)k1BXDjd*Nr|iUu|IeF*1n=8xDKpWARF!K^gB!oGu!93G$_&9?Wvii=T6TP$Y~l4 z=;(UMvzi;=cssw9`}^*S_s+3e4ywnWcs+^pf48@lNWCjzmN=GKR{ZvZstf>83JxzePazv%Xk(x51>Z(1$f6MfJY?U|AN;51kxw^Q0y!cAVp}^q? zXE!rF-%(|&Q4=_wiqoHsn@&aUo2*u>*05ji>-i}bE6$RH&dmv^xId0lVZVn6tlqW@lKB;@XO@u$FMYmnc^y@5vA;xk(P^0H60_BIhB&NC#^;>~=4| z=;gTTPjEF?Y;u1xYKb)^m(gou2XMWEf5V|H1|ww{%*z;D-9NX{aNE` z+uX-rH+Ff`^Zn(`foaX^e#JuU(`v$pDwu7fXc;-$?J^kNL z1e*FY2hp~Ql=#hW_b%0BU3SK$)XPn%ZE3m(zH#H}Y(Vfjlj9rYrvCEFaD#olMpa*9 z_X2UqZPUpZqm~NRhhFTzKd(j!kTQncE2KP0vES@*A?cEZh|$Ov|`BzajW9=0s5Y&jf`&;c;I}Wi4RV4H5a0PQ^(!S@0#Sk0;5ETNKWm|;`j7G8t4&=5zldrEdv=VF zNXvlE@LelM7=Bsx14o)+^#LNvBK1)?)~?Cfqo8NqkYyTfjem_yp%yCq{{&{XFv@Q` zQ`v@cMpf|j1{l3#c;^l&W+r z4~s0GocIZ>bu2g|?!8!b&~qcg^C^A9v`&BX-9PuR;1-`W8=zeYS%4F54C$yftfuUG z-Q`8z*Xg9kgg>?HTB(7aq5f8w@ISx$B>$Cu0=Dl$6Sit>jy>M;`ewo&dzsnX%fQ_> z89|hV#{MQOQ6@^zJlo@X*j*M$J>~4ISZ`JuT}81r()*7YycRpI7urahC%ng$EIso_ z*6YlMQ?}~ftmk%OjobD2C1R_xtfO6i3^7~^?m!_KcMd{}@F$OrFKi?y6Zrksvb=i) zc1AX*Ri2m^X_*n&ITS$kv39A(02u zOiGd~vea@_bAJ8NxY1HnCLd39NOL5)P$`n^#g9cQz2ZI|ckv-tl+J9Hq!Acr)||xz%0mUq`={;TvUkFf@-d zNF1il2Y79AxIbMOZU{R1Z5MIl(Vma5+iNLz>wWiTQeqvz2YmP!GH*!dr1Znk^-nv; zuS97asfd;UpUb5$K1;_kq z7Wa*As4|HsAslJ?qFS4yb56VNB1!t&XPbfN05RBe(J!p&J;oc*Ax;GwOQ+q&oivL3sE5`qeBHW zxFrw{PgsM8M+&@kbc?~NLtjUtlc^>x%uyGZtdDyIZ}&fCC>#4e)YE(uR!)bOspQ14 z##bgNaHk&eI@{Sv&bVJ$78Tiwg}}gd?a-k=+uJxJ&i22x-x7RPe~(#NS{ZoCwO!of z7LL$S25%x6MB?Gr%wbVFHG3~dbEmgPGkydibrWFfls{DFEC9t3jU-MQ4)*YArjJwcqWGdXre zrTX%Pe%85 zcMmK9bn%)+jvR$MozC>@*#LK{o2}%*fz8M4n?Z6Wi~+%tbR55G+d69(p3tj z8UhE9VOqkZ@T3TlRs4~R*|6&i`z^i!7O;NHVjRsW)oN-nRIABuM$*nVILT^&1+Tx> zv4Q|3I;!c$c@UpGxMStiO8WF5RG6=v#|t(6a5S z4#YhG(>@Bx4j8ys-nFQkE!!{I&_d^MR>@rwG^|Vzv38R0rc3M_));*~H1%Qoh!nvz z`udG6H>-iM=}4`*pIl_(cd;^gE&DF6h#Cba~wrtm-c3#>=tD*%1#zHPnqqd6&w!y!Hh+=mue}N7A)7y zMg+Lozkh2``#ACGC+6cj?LU2LRd}@g{+6^356dRjKgjz?)TrRMobR*qUihVjIpMkv zIGqpnd+2*u07RurU%kxyURJ=?hP=<)wk zfMl161#t!;hN3T+3AlisnhQ4zdMdp|s2gv5*{CI-Ts%eh1)_hcI z2HCS+=?T3$S{3TpiO_7=9X#o5KH0r`pCU`rQ#2|$m`q0=B?Imha(uP6vOI22S&~ek z8ER9Gno>;|&GfP`W%i%!`3Wa?ujvnArw@#1O2}C~brWo~eqzNv*53TRxRI^+00iV{ zSY8P{b+LM~PE9Z3cE^T}D6h(nL}(0a&Yg*;N3IwgmCY~8e*DB<)cxwJ*x%~I&`kf% zHp4;mqvAA?DXe&1FU1G2Ipci$W@*U{035dQvY)lp?QuSB%1bP{g;!Ly$#T1HaW^4h zECZAGWw+yXf0 z8r@N$dD;w2)Q_1O4a?f^}C2I^{yqJnRR|z;8t%I_9oLu886PsKUvgtf* zVzq`oH{VUrN?2uE4GWue>!MzoEZy-OeC{6^&MLM<;?i=SZoHr79~%zZ&S>Jm+4@>m z&q7~WM^ri5#S$AinMPD>4klO!Xk#`=flCxsg~hY(aQ!JlBoLLD__`J>ES~kK(qiug(XL zrsrMrMzj_buaHA$8Onk-P?sU19PQ@M-_QLmGSr=DxgPQK* z0h@#Pbu7x^(?oteXqxvb*Ua7!!c6CBl*1%`KgX0WkS3r?tOTRyJjY4Tvw0h zezT z+d6ckSj>^>G&`^_oQ&rrgC?W`()0IJatoecU*r@Gjk%adoV`N0$?2l&>g3NdRkfG_ ziv#=y4sf~6q3jUB4LugU_aApYX=~}(`VK@1a9-e8EbMR}7~#54lWq*hc+1hUUB^_ zA49{`Tb*&dZZU`XmM6nRKsvi_!>;}stEaDZBDCl{pHbt!F8#-puRwK9?)1Rb>@BM? zX$mWFBq!sEeM^V2Ql3)`1*fz)QJF`L7Ljfu7pvhyo zk>^Zs@xBd@0DqGhGR5Wa56_cCLrt;+d}w;K)P2ZI50%|Brhes)&!Z?DoXN&UYn=jA zO0^BYZ2Z(+4-d*^vy}e*Rb^ad`P@)0XbX=@`E$zU4tO?$v#=T(0)~PXTWy!Q?sg zUxvw(^D=W!<}lSnQc>b9Pupx;dsrw2oSM?<{JCl`~I6CM7tB zA2t+e=5S3q?9r_bPa-p-@#bEGDBE89=|o}!a~Xd9ZCT1=(I+$okJaCilx9geDtv_h z>K$Ti(S8ncEB(UlJx^G!18ck%;p4tc>2`UoSp)o{1~$Ub|Az z;Pdj*bv_^S;R>OXvlX%xZ)JLFH}^eY_HhA3>b{A0Htp7Nub1fB_De@=@zeY6FvW6n z>vx>TXT*fj&gmvTY%g;61T1*Yy0CLpU#2E+B5Id{2Qz9H$40M;ig_z!`KEQKHu2?N zwl&sEFVe;PiU-MEp|};}7H!}7NTsGf9Z|dGbC~;n_0QR~MT)GCT(JrJZ>I5uwUI%6 znY=n+WX)lRfE-b;mEQ&?GZ(M~VGtBIYcs(5*F*=`MKHm{f#w0_%hjpkBH zG4xe4C4b>N_a}k<@MIc=0cbUrf4#S%=Rb|w#U5v&qSM}?;JQ1{xfLWc#wAEZaApO6dE4p-vx@I)&+CgRp9cez zpaD$!{6{}lMA@^zLALB-Rg_$7u0AdBmO!d?!I(EWu`q`L57o5r%F$)y)dZ`hovY}_ z_(%**f3wP}!%u=sUf+Ce+`t;T!zj*#01Y)fud;>DLZr?-+ad?FVAutXGmYcY-p_i!}M~Hs2t$hf!RkFPd6|=oFR0XamPcwbT@2j zBZWWo*wKjLa1maP4jqTb#$(naJ}uJ}R`-3WMAmOLg!JkCuF}_c9bB!MY%)A#s_MQ^ zaVYA0b0qbwAoDjy)lB-Rb@zDlw&uh{hs&3_Fnu!o>DQUQV+1|?#Ul+io1r8QyRsOA zwi(luF}}H;0%k&2VhkZ_ffP$L9>==a)$LLw_{=UV^X!ymCzj=i?#^2kxk2ET1YM*{ zaw_GQS2y_`S;%5V6Cve>KN0(C&zstO-H7>9gQLFT8p)kCYYtNS{AFr$3O^$|ePxRu zmZ%YbbUT)pr`Ik`JQ0@X-kL}U*v;9)xc=KA$!sj%u zN|vm9?*^itlfxsJhMax#bo{gXpBVE=3;&Z+?L`r}4DRvG=f3aiH{|7yACb~EGd%v5 ztQu`1N`3zZYGbvv>dhwi;a;lD&;QT>=0z`2frgG;TYz!1ERvW9J3{-&g8S=$vJ?zPi*@XZkS7bB;GXO%Eq+aDYW%S z;h!}b_he`)e6~fa$Jl^`8sQF}?AIJG1!GB4l51E1rzhV3<0j%XYfi*t@&&L)qc6GS zSY;X(4-6t-MW&*Pr)x-J%e9mCjep-x^RD;PF_p>59;=P6FOxOXz!SQ_T$)T&N?z-=gey~kX z9Q@6u^hiBLr)adYs{Or+#CfdIb6(J~l|&zWVH^yGIZj7LC=k^kiO&6wS$E<^xS3o2 zU+n;LM=@o#V~`OalSL)W{6mx62M`~|*gHl24I>O2E^T$aAlf)rE*KW11l8kek%$pu zU*LegZj)d*xSOQ;X^!%#eQ;Zp9!^(*Iul<(pv^QQ+!k7MD&EvsY?)Iza^-nn|l0+GmvN&WxPt}sq^2&h)eyHA*%9cfpKzZ&z+Y&g1v98G`T)Hd}QTYOXg%Y zj5_#{z9}MBQdg>!81(z0yY5+z*$Gk);(puRarU1YOzHF2Wm#^YjZW{pY}B)79f#(M z#f`pC&Kga7`v1k*LT}5-i4b$f*fntC^=KCt@Cs}0;vm0Pr><7|BA+Hb{0p}W9%;tE zxh-~#PAyEt?OrVqUTAVRT9u0_*5^meH%NUEnDn(-%=~AX@=m{VB%>te$Vt<8X<78_ zhenu`eOqJAXg%|RK<#z39}W6!@3)w^^Ww4OXo0A3vStr3{w0ADz~NwXzK5dQqTHd9_ywU$x4*%V{Rr(^ztz8#S? zK9_J4Xqx-2lMm$TnOm%>$* zJL~@x;Gm`JhQfSwo~wu)Y`XsbCVq2rkCRJbUvJWM#rTAQTuzL;9-coaq-^Ejy1u(h zJu=SycI}lGo<-_d%k_V(Z^RTwfi{c4w)MCPqEQ|qZcFUiB~n->PZ5$Q3g&BrmFiE z>+^HA6xAWbcOk~{detWJ&2Rquj&yn|{=5K~=7s=sXBoyYJ;xNk5U$%}hB7lB4Yu1t zAD=!Vtas=en@0XDsKnLRbM7jf4W8n>`qnZmqkABq0@sc_N-XuZx2%#UzV7{%on7B? zq+eK$FSaL4MX-|GzrxRq4etPj2nH;Cs7!YC>jp;~tl5 z-ERc*XCsUEvXrOwZ~G{Tw)vRGbbMiKVkg2r#?ZNQ#8t2x87GELWXUDC%~%Qd#0%D( zx4q`~Niv(#J`YO5AtWs9e$;zGOb~r`uJ25ztpDSXVip6do+E65$)JD7%Xg08ezpRL zm8wO(bfTU!^yIbt@ftIFJchNd9$oX;3$A_ec7@KB)LAcQ6Q5j40XYlpG$RBoFW<|1 zED?~i9pdNM$g|38)gZ_^A;%n0$PJ=Ec>aF~eiLZ<`jghlo6(+tb z5>lCL-mqalZ_O8ou?*+ENnXK`|C|7R;aA+Rn66_OE(hnZW7-*GM_a|l$RoT-F)BwD zI@pmqdnXEr>0E*^=4a=;8+$NSze;g`RShhUmY&VeIbu$DGwN5bV}aSl$OL}91H#HZ z{LezDs;UYCfr#&_uJFshHjReI#ABEkbQ;({VM3)QR(WlNjx%;Hb3tg<+L(cqsFY zu+J+np3h_4s5*}t`uRaS#TVDm{&LQeY;j@mM)F`oJMqJtA;uGrw33cCRQ9_#gaDId zziYSnHA|C&w&v^z1|zQhu4zevdz{gO(PoQ=MoRF=$U(MC5v4pqqCl0a*xCGxYMbq-m&g?-N)BFHt1YHPPK$@pE8Ud%0mLUceVOW0e*BIrSW&)pP7ZN&aiT71SorHjz=&Hf*ua0~Ab~_!Ljsb+D z&Hj!J=DbYInc9_wsm|&e4kJ|1a%~gew`CvxTgn+ei=>}d1OjZsw9jJDTGuR5{jz}- zFPe}gE-RK}`6P0n=&$0igLvB|*KDb7QZD4x_Zwo3gBC_kcfL(0I)D`v~EA0OndY3HL?tL0eh!T4j@~k#3>#jFXuD3Vpn}MO;(m|nB(Gy@j&O4~u zRGY{H;18)94#Va-dpa0fKVx=l2p;49@d2n5K9vD2e^GdXjzXQ&WXWMK1eP0 zj?1CMw2F09RgbBuDoP-JoMiGT0v^|ZUu@VT2Ul@$3+5QNG5*zD&fu?ZXqmLpR&kJI zJnB>9=7_HI_0L}YY1uowUKf@^RkF811q`_1?SxzuD4q=@^KFjs8CoFkIF4r@C9{K>adqK?9vo-SJ$tF%9 zC;Ib8Gs4pNN_^SfzJkTQVeU^olN+bZZ4~c$|A^Fjl5s<^*rqZ=C7Lnr0pIy?Kq|ISQUT&0*;roD>EHeSaAF%m7#-Ltk89k zY#xRKE#rOu-jMJw3fz{F5yO;f{w=K?Xr=xdp?aqNi<_>Aj-q)phm+kh{tla0*CKGg z>YqrjQ?1{PiRCpOsD7uEPUn|lUvaJx4@);$jZ#yGcGDU6f|5DIw3?mD$)G8H+JPcq zlr&JZfoJo587zJq9X=c<>d5tjBtPgeJB-Bkn5{uZh@6cJw(oD|^vIFh-?k8Ok^8+j#FOtX6y+myK{uk$PMvzx)Oirg5s^H@tXTpISSf z5+%(J2O%l^P5uAo9e)1g;NaLHq2;(#`_YFY(BUy_pNkbwp=dU|FC|i05-rfAn-|$J zIXGH#w({X;xyJxH@9*UkZvLgGa!s}u%CT1Amy%^~y}6(tb3x^DRds{2yO@&ZJv^b8 z#N{OLYj!a?Xm;bCB)1J+lW{Tnr{CU_DZqqaRp3=5i2mk{&so}nRyvx~9sv!56G3oY zQ`Em~$!*y9U{s7S=1q*0--~}m;N9(AXdnO!p;k-b(Tvgz;24Ar!#aXQ05iH znm?GG=F#$ZmQd3o>%==@^;w-sPV}LH9#^*faR#R(e=f$g#}W47F!H)>+XFdhY9-?^ z|KPwP+wFRvl?Uoywlk*qZ@XW~%vl$!@4d~8Hbda>N#DO+W=%%56k2kX)~ek|_*Hq{ ziv4TlaF5!d^QVPzJq6#3R5c;tVf^CwV!o=3jZd@f% z9q7Z}`AlFwBvQHsa|qEu8=%YBIPFcou9 zI3+|~Y^B_Hwbf#oF%~qkePdwK1~2x7g`H!?o)$Njz*KJENHD{CD=|aRZkF1T@m+?OUOGzf^CC=()W0X68eehNl)p zcd!XLx7-(E_(%5jqPA<#jJdQKo8H^e<~y!(&1o`KPhWXClR#MBNx$TMUpE#THCZ!{ z2_pF|(pmLFKVzKiZo60StayHg<;n|%J;QBjXThv{#Y34Y*5TJ&os=1a@!VRBF=V?S z^gj=zPlL7!;IsNYQ@mRKFmyTy%heKy95kThxWEm_`pu&+9=VyaSQBo3N~){Nwy!DU z$Q|rL$a;J!?5_w%$3Vq86XG+jlYV@OM!P(=ePNP*bhph~j-M6DfXzJs0OZ+7NE~7=|Mdi8*u?t9jl4ouA~UTvSK_QXAQC{5+UiQ!nrmhCYS_OcE70`wO89i-Urf_&Th6SK_@|2E)mn zz)`*RW03cvG2CAF>z~ve-;0%9(lo=Y`aK%!s3x5d^!-$t^70X=azrdNUr1kLPrvOF zYfrCqXMu{u9UuzmccRsnp)zp4l4~cYz0h&Y3mGWHz(;4KJ$dKfIpw_-|-$q%@q;14VnVAdF(2 zbFmp?+T+#x@dqPE?lEjPFuoJWQJDgx9(q-89g38vThTU?HJv( z?VQ|A>g5&tP0qpC{#tZ2prcndNZva#`cafrs`vheFl5ldC{7wf^(*M0*e^TpSBxWR zTXS<{5pB)kGEmN0_|)_{J(F$@hQVVp@L5$>aWhQIDE{bIVV_YN4(irSc^=atX*Tj= z<}=**@Sf3N>SEELnnM!gkfMoOP1c`ru9Z5Hd9$jqJ@;2~ePAy6f+63*nQL-Jay*C! z280`pNer#+Bga*(Wb0w*rxJC!VSkCS2;^oQIsW{ z`6mr`4Dc8iW#=%;jzjf|kl{&?Bn~Q4(Hz~$^NuNoKB?=Jvq2H@DD!BzLG6(-pBQ6* zwm_#|!;}K%?d-`pApiqr0SNbWu1^Oq1cOhIZYZ0DQJp^Bm%3cr>!a43f6;fGy^y?p zzE;ng&L-m*mjxW#yVomg>OB-m2RK}y##9_`Dm=?tOU2LncE9)KPZ_@pw2Y5sfM#f8 zssV${$7|aS8=fKX(3G#H-$n*z0jHBF#UsDp&Z|*>rfbg@xcq6xL9nF@c*`GO#z}SY zLp=Fzi)$C}@gIk~A%$2-^?4t;ejcEXkNc!=gb8p~@ZE{fx7zv%H6vDx(NLp{BeqRNe%_1_YN~KM4X>>VScny#=}82lFKY)^xFjTaDh;Ryh6&K z0OBDCM8E5x4Qm4280OvN`hmzT_dUClD`h;PVHND9vHxT9NZREuHF7D+UmucF->i5 zu=#tNEUg9Oy;!$dC03SN+-CE_@rwljfB404*N9xc;waQ^T} z(nBg}M7O)ULF=3gHT)zgf0>;0M@~K}xH)Mwu%=WMhoN4YV)B@h^1QU){W{6NR>ocZ z%an|A^HH`s<$g;=N_i||M$V2sK5yrBvqe*d@M_|JZxwJ$$7JKsgz7P^aCHswX&zK_ zNC37dT?P}-jfW@2W8Ra~!MB$5GsADlC$oO~MeH!yz*;xFQju<;!jsu~kxVq^G`5%w zA)wMz8I?)*6^jFi!E7TBNmT#(lzki*4~Xbg=^8m213Sy|ApBuYjBY-;pl#W#s{08a zk)2oO(mJ2EV*)Q@v<Q}x56v7p%r3;QH93uRd?*iH z`oK7r;FOa5a#|Xl4Lju@8owiggi_@vJAwikv<1~HVSHzks!mYd5pN1oPR*6Kv5~xi z_*Ki#TW_3SyfhF58ig;9%2v7yOVc~Nfz31|Ld2TQJ7VspY#HU_|J7xH#s_n)`LEV@ zuU#6dd=$3j5SAK%M_`%Ze#!jNf#xnEXT0kz%@qF;;k`=r({<$+>%#<`2*Xth^RLx( zvS;kr8$#ou^bl&9hz4xgPIuAB^hiK)oo3{C&=cFlB`puk9$+l}mm11Vx=Xe=VAURZ z`i}y;B0pI1;8*83^gpMf73#0`z?-7zY_Sy6e=o$nMPzIK#_G=Ge;x_%sb9F06u9I6 zE8~ac6fGj3gw|{6D>qrPw>IFzio*vq+hRhYk5WC4;+?ZFX9wT9f-q9I_kX;~90^Fk zzG)GUjZ1hBmX?)doo-CjUlYRQIGTmImIFhE#Z?w`(`zzb3B-sTiLkN9Zmfa4(9UlG z;g=Doy>FZEnE8=(cz*W$p1OEZkTg(04(XxtB3QYI%LJ>nynPbCK!`zgWT9*bT=;#* z>Wfk{*A`I&5uL%Y!+1VwDG>2R^utq%@fn33Rh!Js-)4!%W%n!IMjx&9Us2G@NpW{} zvC4}6Q_)wG``{U zIt)cFOp)#juQ}SVnnLbq9+vEOoF#+MaM#->#f}|Sns)&u#hnwFxXg1QjqqWkjsEpD zaB0Y(zP6}0=JMU3 z>Z-oYS|14K22;nw)T}lC-$6Py)79W zBKUZkb*qdMuJPr2Sp&lor_4uV8vZw%hsH9rN8bE9;qx7g*b$HOtXQsWUEt$&XP-)W z9*z7~Q5&P4c$*&sc6InAsX9U1UJr@{RE8m7Lmx=qJmI^)1BoOB2~$Gz&sc7cFK1{j z8XbWAM`ni@@=Hvr=PR}=1x2NlX=pZVx@`gZ%RO4`4J{JmpG}B&?hsn&nCK8gGsfBo zbJ3CnjNu=e8N^6Q(8_}-OsD4-ahhRh>{|nreBjTj z2=2uv`}0-{5?J7}%BcOd);#){((`9*?A;u}*#O)JJX~n*#=(RE^cIa5G3zUKdg642 zwWMQkhnKL{R=6+`-7qS$wW4yU-Q7c3_{!isdC|K2%N* zlIQuK^bNxs*-{=^74Znm9~Uj(RL>GhKB0Y+jMh4%bq$;IOJLJ=>tRoihZTEXy zkW%SKO%s}eb`T$8uYhw&`Tgr-vvZ~eBDTN1+f+eIu8-j^w(T+uWJkn6cZ>@88eg zpU3`dXy$a zPr5u%uu(SkqUXZv+;`g0xiK4(`KWqH;COab%kpT93D(tp8jz49>Ze-Jed}MtAm0@e zwkkm_RCR*Yr~Itxy8-^Gk#+HBh&^5H?~4qUr!xuhc<0`~5BA<}il2P7%ipg&ZV23z z-Nfzf^|cN>6S8uXztAKz*!eaO6k0C~3E+$|eAd4))^Ut#N>yO>OnDvwzdC@xlA2#_ z-@=+^r)y{Ck|B{6BkD7=e`GiHKw3F`-dP3NsixOz&U6B^J$KYJo+@nJ%Ua)3pGceC zo4zC7Se>mtx8P%kCdNw$>|H=5JXpDfRckIS@%YE(lQt%j8Da|2?h?KGY>*RmOntrH8t|L^#(h66FeT?2oa1o!jzeRnJCUs=O<|w z7%TsZRmHwQy#Shy+N;^nhm2Sq&+~9ers-=gcm9$j97U={*)hlyfxDr_i*}5UMW2Mdin+vNoONT_%avm#y(qoF#>&uf(SLbaP-YDm;9b`4<16Wnu`2&@c zTZ}r@6236Ac*mu@v0EUl&3&%xowzBFsd)d>34h4Yg-swD|D**39ff#Z=2ah|q>`Qa!v4HL5fC?u0XrX!7m#f#UUK zRW}6mcPr_!7~fC!&+$5*I!PT(VAmN1R@e7ff6T17Mg~`K<#57Zv^Qi%An#bhB?v`F z{Y-7SH1^BUo2OgeI+7|qK@*W_C^J{6}GG?DSxlH z|6Pv)ts8xm&dBR0qx&O{%^foNyRuJ4m$djZuc9P{Q-Alhh8o7`Z2iDPJ+7TqoBUg< zdpv>T6o)+v(mv*$?k1=5U)Q)sEN#^3E$XC5f3r#g{aA_Y-bN&6^S}yK{$Q!$`cK*s z?;*^|xGJ}m@9vrzG)hsDz9Ae7|GNxb`5ZS@>i4kWfx@hZ`LBL zAT>BWS|uInB^0lhmig@R(CDM{nLVfxrqXr?o!rZy; zz=6n{PSyf+*|QfN1z>HUW#~IvvIP4K$-dwG@hb@@iG```u224i^;Ks*Ul$#p5iM!P zl)z3mkP$~KV`$lXNZu4Md-k7)lG;P=nwtrp{kTX$DssXeysz!Bun@54!tjjFw{c4P zW3c0M_FW$VsmqP&-rNocOJ?qG1X46`8!nqOE~Tx3`mBsa7|aFLI-+*z7T>w+vEzWb z_s?rTEEL*iF3vZ9s;uyHzZmtTBjvK)Y=y}=g9Sv3l;Q+BJMG$Zvk>jiLV5a05jEMJ z{L*BIUM}y_;U{tET8TxK*jU!vI6o;UbRxphm4BnIq|(I6wp#Qe5cZ-cT!hi;85H~7 zU2HPi^XCr`I0|s@aI{Ct)I%%r>FZDD4MlXbH3#2M>|frje3mrg0efo59$u<^R^5!z z=IL$}sigX5y;$vj5FGAd9q}Q2&ST5t9wb|*{xq5J&?~_6Z+%JF;sj-rhN8!p=RU!6 za*y=1%lMuTyffBm;UMp+a&t1W6t_Rbm>I!}?b6rVh~=`{Jb_xlf2p0{jL@3GeafAL zZ^bnMOy}{sOX=);;=`iK)i+*ww|P-F-Y9I{`ER^@>Yl$Fi1v-#D8)Y^0ou-~E){&4Cl@#?a>lprO~-q=+@8AQ zWZh>|8uoqLiJZA(hr!*KcR^yxP3L5cOs8yFB?h2rpt5nl`R;k$R{uX@i&?|(^5zUy zU10~AJ;U+!$rv4t_4a)-b@VlABl=o(qi^^>_!8-W{9P!aQk{jhTx#FxU4c_45^EZR zWY?4@ViNJ%aMqu4u>&4B`mTchSPX=fh!f|AbC_Q!Db z(2o_KDZT5rs@__~%56TM-;j}U2NU)GtsFRnTv~Q&#;JZf{qAd-58gKl&8}?Vn{|fn z_>8(F|WJIW^Y{bax-d=L^9_`1OmpS|!^&mqCsb^LUvV0MkZ)Jiza|s}tt$bcdY# z!13P-A{`?gs_Iw?1kHf|NsX)1cwJ?!K!xF*aeyC!j*IzwF>f$JU(Y{jY~`uLe{%Y? z!lUF)i}Mv{FKA~;9r2SaLI-s57ys^PHSE#?Jo#OG#Lm0+>oLIgMBNB_!8%B#go+g_ zo%B~Mu{QnILrNdAebI8Ubn}?*)eUkJ_IwG+OKhs5r-xHyyzy_3{}<;&J3;&afoT^n z6xBTJmSOVq3G1A^t7Y9if&mcLgYW#|P>mDyBrnx47zKW-o8h)_C#4Z%Ml4cm6qEv} z{A!+J9n)K14_{a_OtaKEE1(U=w_AJd*8fVc`dT!a*(HF5O)_k)$(PZx03Oh``nbba z{q28KLz$x?oHG06hv|!}2oK=f|m#+GT5lL?2*_ygo zIt{ItkvUx~_$%>?q4*Leb;>>!8hoa_+YD>Ho`EwJZwXOZa zO5wcF%}fqxbI2fPY4LYorHw-Qc3D?w?0KHH20p_bgX~q$jQ=_^O15^>v|n)W_PeQLr5L;3P$yn$U4P0!Kj<3guPNu* z_^{I4wrpMwcs%;**q>KNuq}-`S0GDc<6{v&6T>u-2(1H4kusK%IvI@zA+H%{zO4UI zp&J|C+j}bu)4$Phr}<;{R&xLtGve#9H4gq2QvIuKUAR-pDf-I9L2=YX>cQw@q5i&~ z=4K8-^nA?!_v1Er%R)+fdmEp4>G(^P^{`cE-CESU6Q-^kaz1_(-mUTid)+Bd^ozV( zOQ5CC(Q5YMzD8Rrhk6MsyO=5{Brda^((LhZ8fg+0X+2)Yu}`age}RBtm`MgA6pbOe zr|=nO|K%(s+3x(+f+@^HZ^f@J0ZZDqC@G@^m*+Yll|bul{MQ`jqDPUX<$sNP5ja{O z#|E)i>oB7;VjTn7E9Po(nrYlC8Bz^mWI5BB0<`WKUk!J>0e${{f}o|=TT45OcaVv$ zS2~UY&0ehA=L~!;3~JB4X;(bh&)f?2=(b2YU}(V84v3O0q3v6NgsF=sdie4MEL^O9 zxJZW<4&)Bm%>x!aNG^JZ7jwKkPRD6v>EK6QXbyE-#Yb}*{GE0!7>APzva(N0tcYaT zSWra=l)(K;Kgp#^0LsgdZs&{#Src_!67Q(J-;#s!4?{ zJHhnZfUm{-r5c{|pM3U~)yyYI?l&Mm8h){?JBm7@KD?9NH}(0F*9-96;DcI!S5Poe zdKYI?Z$NFa6-g~{Yj4uOkc{U|S-IX1lTbKd10>ZV-*tet`$ma30m-N`TOaYeuB3nEj&it$p7s&?&`fUGiei;#7Y{?8@B^8-t_9Ij}J6) z@0Yz!6!6gMmPISAR=H<@R*O!4oP5)kf|r@RTDUvXGmf*a!55c>|04ITfCq8Oq$H?IUiF)qkrT(L|q=fdPayubz~3k)rY}>uQe& zpHnz(Rl3KcQvb^KvVRlIXQjY<$onnYDb~E{pdOXfQGEN|xHNvgGUM}_{p@XDqw_hR zB&YcME2IU_V5Dk~{T+rnJ6w)cPLGHgss7F#xP35LP&VD!gXngqbP9UfJKby7=X>B| zBWc|GuB6f*UoC1hCd|+{HkxD1su1PE5l~7he6}^xJcd2CXsp~84)#!@SDJUU)p54y;usN^Y=Ui2&A~oodE|l5tJHAH)}C;pa={^F zJk)$C@#+&z=dnT8o+3i)>T%tzo60{sS$m4y(gF!~kfV$ohILSP`(yk=l!G#+`iM&Pb!#3OofNZ5 z72DfpI^`$H6%}wU@Lp7{F zF@DrB7jfMF%$(mQsTA*yq-anwb(!6p5*kPiCme#FxmPJA4NQWn%8{B>r& zM{L|_ua%Y~18#f=D0qo5&G{gx-f0~&Xb8O$G@#H%^K$;J72{Y<5bzi3xj8KA061}Ez8cn_uC(x<3eaayDmlg8 zOz0^fOPBO=>;u;dn&K6(wQW2pm|5!Uij#Q?G+7Ddms31MX`U)>2tLp1^|!5MBb46(a2@t*rauh#uN^ z&Qoxh!K3Z;-T;%$>n`)9gj02*SzUy0Sxp;Dw5M z`vs*=E+K*4Jb5{EuHAN5KS zCK)1mQ^lAOTH+t-n)_V_>x=?YjdK-ten~AV=q%U%jXYsZdv9P4@CRTI&xxFX`AR8R zyZGB~1)FpluWy=bDGpZgYH9gu&)Xg#cVIfwG3fR__6E9j7q#WOiv2CM>$Yo49e>^< zP1$qM_Z>kiq16R*p|tkv$UPU_DHO$*6L6wZtCoSyqp8UI(DzCXi}3Ei^K3@sKD#OO zDYb45UzJK|(H!x=z+nM7W{7<#+Udq~qyq);9>6#~G4Zr+E^uga+D_-m zW8FVL-&CNE4XPYt3`2t*1Xi%J_O~t?$@$f$gZ4<|F?3*c0Gv7hx=5OG19d|yLpS#r z!Z^;sJPDNkUy{0YB$vkB<(}PTrvA0E>{L0_hY`BC%v*6I%74Vc##G|$j^cz^2PcH% zb+kR5EMLwV{HwXSSTHI%fws;ARSzGCo$ZZgUm$xsh>4NUhCANkkDRSGi@#KUK2_JM zeyB^pq*DT#v8fVV{5VCrFutE&;Vsftj@-b&Q$c3AN-dmo2^1r*{qG-a8cV7d&s8V+ zyyc_H7;40)>w@jXOl|^AEv|-+ z1l{N~?EZnZM?T?RSq})(ID4*c89KOi01$>5R0w*LbLRqeV}y3$)ADLl`$wf6)=XB* z8=!BIevwb^h=yPo;YWdd_#@s$#l?1yt?kjv#XH&I>bIahf0YR@URU#`_VX&Zo8^TF z(azDO)ca!t&d>iYS}!K63@ju+?S6rqRu^`y50Uh)(ci`Ypqs@et4hoJoD*mA;rvgS z#qtyr@?vxK`<(mB`QHKs-nXcJoOQ9yP!elNIo_{wDE2h!^HAD(@(%~P8faa)&COls z(+b(oV>(F1)9E~N>jqd7yip6B)%kCH+Gs=p?N-72In8@$^pzAQ*fVhWUi9P8H@O+m z4ZbT>(;!{poSoobu_0n(30{}Fb<&H()%e@#iPU84%owd=4f@%0T$$H5Eq>T4l_W^} zncYDw=$LLb#@tJU`MigO|o=?pw>|Iy|orx_ff zW8&5xmM0ynu?|67A@lFP$7xz^{ZwE+x7)7XtMR-=#Ah*&6EEIxaZIzfhR5DeB&6dr zrIQ#H`q+?vgT0z|B^bTgn@lOqgSocv$tOD^=6N0-Is9)n@^8oq+8LL}XwQ|=k^PwM zE6NkXi0M+3B#hbP$YBd0wq z1MT$n*_(1u|8GX}UKgg?6lyNvLqdhHje6a((3F0^%ki;9@-XkOci~|HZodZA?c>s* zUctRrn`!B;W*0MkpMTPx-td_Dcm7T;o9VCXdy_9hP4g`L4CT-bFqJ zWk#kCAze$IUchJVS0!;0Y>{24U!CYmUbU?8Dt>=8puvYdG%D%ZI;7Z1o{VnWs~sKw zW_tw!TVHQ&u>1t>zG&KR>%a68e*)Q2B97jBkl)>F3knIH1Kc5vFj}J?ca`&qqu!brt-pQ! zE02@0(5#;F?`(KFUBn}PO4};@UvNWd(NN_qY@q6KFJGE3YKQ_d!wPL^3xfS`3&!5^ zs*$wb9)^BU^9rTZ7K4|xv5ydCL5n&arif#YeZ{rQ+q8M?2%dy;tLRJJi4*B3mcREk zocHApdDjcgSjt?X23QJZ4PnG#Qu7riY3MGG3w?oBTc;M0^uKSt_MufarC9@pK2hn$Q;fTc7$A zf%%)03X5U`Z$9kmGG=6{y~>uaumtuuBL4EVq&EXQL|->UUz>xX`h_Tv%H6sp{F<$X zI$fP|P{JIz*-;x#Vf{nAGmQGmb}OPPwwqeB4aXNJVxf3+>oDQd3B2+t_kF&aOxB{R z%^>EJ$#cNsn*7$+f?HQB>1JI~IfuM1E_;T0s}A4SvF~k3cZQ^0SKjh&?044tbk(a*c{^mU(Sdp@?y^jq=r?4{k$G1rWgX*LU=jg%1?C+^B)Zh4<5lGF#K84e`& z#-CRW%b$4ac#U6-xBpuv^Nf`B?DMYQ&(L3nYmON3}$rdrkteu-v+S*RPOoCHB)2umhpkFEXbem9vw;s`4WS667e@-8- zx2%e{+L#?FOn#8;xS_}QES|68M9@(ft?Tt;GHK*8Oo?vaH8r>5SUdJMdJ(N08i&W# zK24JJ1$NLVA9^Z&S_<879M7P(XYA)!WWjH);)ipEiW*DQwSNcs8pg|-nl3qv4UuBx zH6StJ8QRh#U)S3wnT?SD^kCPK^L^|k&A`pa4J(Z%t+i1={EKyzsiog;nBQ!qCw!mP zsY%~(mPEZ%Jd1XEQK2SP=ny+gak$|@ogp?5TSn*HzFbCU8~f4TY|mZ(Ot}jUjgi-% zTNX&Vo3OMK=p4l=R#%-t=$^dX?1eUm+`~wg({3VGg+0B)uyDO$yQUV#*2OmX@m|$~ zl7|4rM=4w9=5HvgY$?gBy~_eUj^e}c1w1f06yP~v=x{#z_Q0=RR{~^^Ush%Hcm`Be zZFGEGvNx&i^-_!ePX|w$Nu8N<<_BFv3GtG}+Sno^-PRdGuct2tk#NgZ`|8w!YMxj| z_p$NfkDn_|oJ;W8^fPv|59%is_{RJCH$if;$UKMe@~f!Xik`~P7<*Z#(B((C2jPxL ztoWe!CBexbZ#RKX2jn_8&|AcB$B)DFHYWmF9yeKUZ6ts7K7KXtl`-d2$iQB*vc%K1 zFaKP|SgJ~9lACSiwYC0BE59nUYOz$-s$Qr)}15hd5Ic9SA@wD=xy1A0AMET8! zBZ(s=t*g&XX+U3>XFYFjKNR)im=j|m+-1=N(pEZS+(G}WZW%8yQ;yZ(R&`pIW?!5We~N|^Q7Mo zJ}rm77pmP<(k|(#9n@r+H&rOO<9BBm(`ctqwf&{Eo7aC^tTQiQYtt7ov~ASBEXNot z;#ui1L*`%_HcAar`n7yH<$bAtV{W)=KD4s8ej9pg%l?<9X!LBNdM4#CU-d1;7b`(0 z50p12uj%iAr5}0;e6+YQ!!j%2k@z=DPdSSQM~uWr@0oZ+3T<7oEzm>Gx*}Gh4uF6l z*LF&1)TRS&J#S_KwWUXVd)IY*n8#wVbv$fr(FVV2p#7@v?KO-$-L`B9?WFj9vWEEv zF+GMlQ=PZ&++2U^A3`F{DEfEqjOpcv#3gL%z@MZCu5V-KLS*iLkUjeF^pNYbA6Kfc zR$170(*cjNU)SW2j-%dx1doDNzb+j$@>_g;*TTl!xm&TISUuI*Irz$dhaBKM$Am5% z`+YsM#QhxKsU+uZ-E`*l9gX>GLQOjssW5rB$}Rt)UbjgB zMRirx6jaCc)orbnOQrrT&%5~h;sHT`aAvlsoGSL7b_@UFYga!9qVcSUtlJNUvtN+> zK}4YHz`f`^e#I5zzR#(yW;21LNk#{Xn1N)+Q|IT6>#?3WL33fsRY{Pbf}pv=KD#}Z z0OUacbxWQ)XKL-(huHh(v(sMXLnRLR?8S8N;blrK>(d%YI@O+@eI_}orQ)#mo)zKiu>o^&!#f^-WbjxX|8J;e~$J;{6R$F2c2!DlLmvaOkg z*t$5E9{QKBd-+?kuTa4ZbJ-oS&6;8;C>v{l77$kQsLGsED>X=sz7^zmX7AzFv5qTA z2Vo02*EL2{yKUOE(G}o;PbE#z=Wniw^}QXwe35!@Xo4woU&D(HJa+-0(%vwdY+yZ= zgGb($kOJ*|7n-~GwyC@pbB&k%7GS=`YiQ20Q;1h&ZB}tFe9d}hq%iNOZS>3(Fw+hY zUltg9pmd?ESrOt+--+9vrU?D@n=f4MKaYJmK?5kloE`OJ0hnuOW)qV7RDW$D0dKw_v1^KJ3v0t^vwl76hnAytr%b z9qkkgaGnUJpYpF!q!_&3b8Z?FI!h z2a+;jsEt(+Mh>+1HgLPyh`1+E&TWN%!c~>EfC=^F(@=}pwzLbWEHBmm<8KR-L~5MF z4()Lx&itWkYe>KqTijLEF|wI(4lan|L&8Y~PJE-*Xhk-VL0)dfjhjT{z|EiC)bTa| zahUj;WQksp((iDorw+vLR%s9{Vcg72W+`bMv5&sZZKmg-*6N{>x-+8syJ(^VcyElp znS?BbVKs&wEKSEXBRt{J#i;vE8NKeaSBMy%y)M<(ns&Yt5w@Kblsk1k2vi1Q*7rk}eZmqB5>$1Re#&x`Z zdCMdPmD7yCzMmHJlNyfdn*_(F*?k`mz5cMQ8r#wg1t^n{>yLlavOOex}im5Nfe$6&;it0e3lirL^v2B?aIC?dyIL3m?o}|Z6hbO2kjPeOO z&Rm2u^ZJS#=fdvi1&hxnU92OrZa#lp2W97<+EC6D>g>xCnJOB|&6Idq;=hUb_i1{- z?p}cbp)4VjruE9A?$WuVRMkxH&?=LroZe(z9~ZE?!H{Uq6T1*^d}!L?KFV|J!QX<0 zdk;$l4ARTtyuPlJo!s3ZCumnCJ2iKs?S)?S^QClNzb{$VY#nL8uN&eUpE9h2Hx`k4AIuPL_A?ezJZa zVwbjmXd|u^W;=q(_Z~2|fC$`8SHH_K*r&{D+>+X9E0>6Sz9o1Vmwmv{nPJiPt44?b z{q2|a$d!l8FbJ1Q-|K4_=ZsdPYOFN-YHZUt6(MPfws&nVuv-12QM-1t@P$Y zf2l}Udq@hCU()=}f9+`VNpo3?^7I;ycC{XNOkY9={ zfr?{puVW?yHYY2?aVwkj_TEC+`g^&pvsmWcCtALWckLZb6yrQ(jx6eGqMEcs2#|UB zjEX(-&U}Eq;IkBgIIV0{7x*q1b8+uB*ua0Pj(=IE{`gHHFQY7Tm;y}EfA+4G-3KTJQwn|bwb#o@~b zR{_yodeO5dHY#9;-_a!rY1fl|S3)PjwZC3>-}8M5n+e`pui_rO7+nHaVWMv+cXDp* z;;qTsKW)0HMp+_HpG~?+eM`-1M9>PUgj%-G9$lV_V+3-` z8sXkKun80vM#fi*2F163O|6F7SXY{)3tWF|?We;Jp2@u{_mOrX>WjNga_^7FE|v-L zvB)TA{hJ$eHPtf0YM)w1b%%V%{YsaR_&$wA{waacZ4$DW5*6>C#*xK>se5>9_ zNO&}WS;^1tIrj5#<@rh|?ovZn-WuZd*u&9WucFGrm~&v&VsIksvcxxX0Rlf6GTCsz3l$X=09Eg{Z- z%1DK}Aw7$mf!~CevrJrDpEUk4yAtyIB%+D2sF8PywI8Wz0I}EyR86vG%WrfJe~~=6 z=HvRO|LE>!Ithiq%|}YNmis#SR$duTj`FnLHI@V+<~j>$a=_n$(Etf+u{(q3CkJNt z{~lrf#$4Q&FI%Y-XCGQ7bBfP;U*AFWQNX^yn-N2o%=B^_Od3iaa!>d6s&m;F(A0oo}Y!d07|M#b%{s+iwaZr5uLL!AC*$f$$^a?tlg0 zn?R#c|BJCR22yc>EM5rVct<~foA zt>_c)g?dEIqO~ISS};C5zvp>m_)Id1+h*U<+Paj=gm(3hQV&N??nmEYw%=Hu?t4Cn z+;+Yi@fSLxKl3LRZy@CxyUXMZ0^4I~1J@1A?EFr8pVsX>mlp68+wFe=aC}RJ9_jEs z4m9a=Y1_R_L1xy8lqX1e|MUZATNF!ufo>seM!d!t3_7Z$2NlU)LR zORAHEAZ{*b7$$YWy{bDfiBw!=L7n;e2)65(MChWdHE+f@Z}^?%+ngFH zr-kp#a9yj-rKwf)jrLG#NK7~}v5#8Kq)R)kYjKOI%B&6?8N0(?*iXgJ+-~1H%+_iX zGu6kB;XCE7&ErLGOuf}ZaS+2}H4)GoZukARkBcL_;bkCEnlKQxSqa03c+44-m@H$` zEc&9`j>&Xw#G%~8h063tEX4)yT0*icu<1R?-Ho8CVMHD4!%nzaPB=}no|s??HH1io zr4T2y-p9`%j$Zm3ey%>GV!@FBqMeSA3n?QbvGm6O@{C3WZ(Jj=mqaO{RsMD>7hw+H%~mVD-QS*V-OF7qCPZjbU3 z(2?Ac9lU9{6)qKPu{|vdRcL<|q;oco^?O1L7YNcpZ$-C_{~$NCE@c6wMPUns9gV?k z6H6zDtvscRW#|+6S|utUqCF3J&iNnF!gplk6fXm6SJCiU>JP$>B5ubgw|v09Oil- zP-Iz-6srP_MD5>DpELMs#75w60#=4;Qy2Rmy>F^P6Kmu4+N;518O+v4)R?>x5{i!7 z2Uocxc5`4bxsn?lHkPBb++W+`8t(|eOC8!eMr!}qv!O_1wpwQ*6kzH5DnCA%ejB-q*5ig;gbW_ zNNS=_nRt-!Z4L%n&I;70!M+L07Dh>4H(}Xdp@|T*ey9S@KLUA^E_iBhLWu*$bFz=F zPO3NASN=wize(w?l{`2wR}%K28JcdD04Lz0M88JVQs~>KbN+88Xb1igy-#!cA?`=V z+APW>H9vmvo|YL;P6$yx+KmZva!9$d9e7<&@Uo7o2eJiOH zvj9f@Jb*SL%3y8$^*&c3!3!#GkM|90bRQ@vz4-&2wBJ~2n>QS9Gy+APJTyA0Da0rpM60Q$#AoQlFK@*^by8TTaJ}J2e^gKRTop(eWyppSfH2CZt?J7sP@#NY zII`BLV|_K{@Yy*D(~|0NX;hise#Xw(KvPnE`ACUn?Kp?t#{rW-6P%azv|xE6CmG=#@XTTp0&?+jaST1!@p;zg9lS)PPOCx0;H6_E$35YkVNwZNabAS z5wcHsovn=q<2hAyV;<2}sD2Ij%cII|@~Ewc$eF<^_n^qRPNLwNA1b^KYI%yiSDzEP zZg{*?V&$Z|RaCp-iP|Q5_buH|`t@)|Ju6hXDI73DnzdZ}H$({;d7+*|<^7-(Fby z%bi?)bnod)>Dbe%enmS9)AJraXBn#_F( z*PR?VzABM)U1_Qvz`lbEMrFKTa9#7@6E_cSYD4 z?$LuUyR5U{6R;}zG1Q;Ym8H=YO8Iu~dJzDAxdeP+@S^p61-#~OiC$p(NMKbjH3sA9 zP?{dJsLCJI7W$pfS$aF%{bY zc0@#mb~2xKspk>>$zH+Um)Sc-zzAs1&1?B9=u^LtqWJM2chalEqwDC;{`eLjVjiY` zPCEAODU%UJUz4|-6c^PG(`C;K9u+)s^?v;|6&{jw&vL)@#lqGHmimtXU=-u-?6W?> zt9CS0B$V&l5nizfPJ!ptRRMHexkWW_Blju_6(<0W@bl9JedZ)3ZiWe}eN~TW=?ryT zd4!S@yXc^&%=lx39Xcw(=xH0jGfE;y(ZBhy=|evLyNUEx--e1tW{U~t(fXJ(8nqEZ z@7J($H9;&&Q9FU)zZ2}nb;orU0Z;tDN1mRs9^lLDN?ahWBW9{eF76G(*0`-V_5Msl z%k4=auCVg%^0dB2y{4x4Ssb^+L9#`eJ;*FZwo1Ua#LjxQK+Q%+CrL1%en586bQJ1z zt^U7>okajqX99U1rP17b2kBByh&-<2OEh#P&VQ^8F$2y!gVj4jYaWb^PoxQrYQDu# zcw!s=8KoNK(cRbQV~&eHsowS3iq9dtFk#HsX^ZMmqZz>1trH(nmeUnl+eV2;!=50u zo$!~Nk7TYySRT#5XY*(DU&>C^$`+q;145d|!I4zIwf6{Be z-g#THs0UcP5WYU1Kez7r$NpRtx1WlC9DSqxJmkIZtly?+P>|Jtq2quMGyj#0Kmow= zpMmwgxdKQ5@fTjuJHk68=-m~X=C^m}KfCz;zViSQ6Q!*hN3TPGZJyd4II18^c+gA# zK^M!Yc6`@lh?GXY?Df@#E0%cQaKqg}QoBgMaOHM?WOh2|rH^hb-`9tUTN{Qjdrko!?ivZ%EM;fq0uaz;HzCB9cx1sOm!@^e6sDuS@U80A=LR?iEbgT!h~r zAYt95+I{lBC^P-U^+y7~7RpjJO7UT8lRR|ItcJL2DiR_e!Au^}X+-{Eu~5;TSK-we zR(0IxBodk?_U*XzY}#;u{_{t1yz>A@xdqi-9mD%ZKE{J9tLUJh*0g(i)Hd+QQe)_17M)CH z*U#pNKg*SLkI!`BWM>(>0Bc&Lyib$jha-0xQVD?w=|Lq z5H$s(cJ&rgqfpz=nNWA`1bv;o;agn+G&)gzVLp`!qs-L$u)7lJH!}BYeY{ufb(pPf zHQBXfA^&YH#MYu0O2Do)iIPq)8K+owTL%8d&b;x$Wx6DI$GoVU=kcCD`koy>qHyJt z<|Pd=M8r3(NMwo8)MoP~&^g`_z{jAV=f8&oi@LpwP$Q~u*%AN)p!vIT(=g~?A@yI1 z^9|CX(&)iK73nMMf)S|_({VZ2a_kvORM1+wiT)0>K)9bb-dIajZ1oh5l8#?F)G>?CZGCbSeSXtw zF0rumVC4{4+vqbl)qm7NWtG z?}x78AF#fs@U~b}x@P{?g@{+T1M99(W_0GDB0b4Dsa|Cp?(1YXX8AFFR);Kgel3O$ zz;SDR;FNNDEFLs7P*-R<*CzkUtGC=0o(WY8l@Nyp5pEIgmpS*q}x< zm1Gl$XM&v3NM@MNrj7A3JZHQ0^>~_ex|`RZA@fbj*S^{mVQI7(D&^;O1XB$k@Z!NZmc#6aI8QJI7Su zewarhV4LqV)a~pQ{uMy|&}Gb(=@-XWtWe^zt<~KLTH*fx%C`l)8?ji&UGOhb5T9MJ z_VzSiY8*xMrq2%TkIp+uzO0fo&*KN;{~|yts0O(hFPAWq5kUN>@wU%2lao@tjQfrh z$mZ&!0?$(+tp3hmPO=Honjx0RVw z;VIf_p|w|Q;46kq!n(f+bHG%81UbKe{MoqAGG-FoIk7ca(a;Fs8^)XSr~5V>Z%#&h zR6@U)i@C59ftNgK%CY~{$eX#y57H(A`+Ng9TBh@tPAUJ6q@aQKfRxLT|FpGcQ)V0; zs;iRd#BcH}!Lllh$jH%^U0AiJdsM9^NOeJjB(JPD$)SVU;nW=5ZWJ}inq|i9nO-32 zVA*6UD?W)xn%p&Gj&QetBoWbxNlrU=6YT7uTv9bI>@)M7BQtXprHtI!qkjgomVDkr zBp1+l{_SbEG=HdZWOCl^9;c>&o_1Sf8OChZ`p+O(N9ZrX5dEzxRGLLrP_y$AIt>N*bu^610&FTyhq+qrxL;D0=-J-+`T`Lt8zz1j|tXut3& zn@!zyI^A9eg~dG=B96|u;H!MNp-I0Rq%|%x!vkS*ZYPJUWxw9PM{fDr$57H3`iU}m zH+Dki-!U%Y{1>n#Ff|pPHL2V1*R90LU3AhryK&gs6|@%yaRaey9Y|}^D5rht z;`zO~JB;|!Co^3pmC#UY5?X7j`k?!kOGF0FVgbZ9&%Y>_YOBB<=Xtv0dKOF{L&jF_ z&iVYb>ejF*&Lnqf+1z*tacysN|9L6bY|CY%0BvG%e6#b6yJ#UEf9)J^pSKhDg6|E@ z&aav=Jr=jpN80u?pR)aX2BE#2&&KCm?v+$*L^jaRzb#Ot+zl6qUB=gKKH5FRs!-As zKdNr)R|0v;J_IdP!$bI2uU~dN6W9F7|KNm;Iir=|E;RKm(9W_jF|PK%sp zT#ibpDBX9^k08VA-GhJW{4sNGSk$TBD0@Zu^%gkja4+!%P}O=h+ePABh`XEqvS0-C z$SYIkR;0N3Uda>u(R>k&pR8K3r50)3V4;_!Wwig(Tw?K#R@$KHLe(Gm8#y0aoALdM z()lkQX9hznt!OgtLi2oS2@>w#(U{?J)^fADeXqRk;#5oA3*g94C2Pn zML^8^%x|TfLORJ5SFBKlqe~9 z==pwa(Kn5lO(_3Q@!`9~>eKsEn!#umIXI1yT2aec+eNm_2rC%m!OnaP!k>7|_uX(=D&ZsnYG)5>&E|4wXodpaM_~lPU*& zS{Qvu)Y=KWeP{9?rq8`9rp9q$<%a$(B8k+S8X=)kvH*HOix+F}kW*Sxp6%fCs=-?* z1%OeD%D4|FkowvQ5O_QP*sam%d(uf9Dq*gLHTWe}0=v~)D%Vm1sizgF)e# zWsXBC9Z@RE*+|8#k;AeBA>=ShsVJmEjtg_%6gKDcsSU&C5auwa*^J-5zklw>{ono1 zec$i*`?{Xj^;!&IJ@mE3&TH(zS>9iGO+izWtc`kg0Qr_}qx6fda(~Y8e}=`Vh_{Rc zgRg+OjMr<1j~Mhxt97+x`la8JA0)$_nE@S*s9{%}*7(Cc>;Xrn8yjZKxQVF{{s7?p zyp_4AjFsZzrIa1ZFORMaySi((#v1-LloqMpx`#d0lXG6G$Ll@CGvT8V1)TA!*JW8< zTbuk8HS1H+dcEf(yWlcfK{gUoF0XhMxFfGGGN`tOk9O6O!e^=QyKyR%L_g}ZU0YI~ z|3*V;qdphi&iB+KlUJboh0ckmklD2utqEZowOQehKJ@#d z)BRz64UPxneFkeEN)%9{MI!IjlxM^QB}m@=C{TtHpai*f)rIaWz^{o|4Cswl`)5Mr zudnmZ(i?ZAhYrxZD^^AIJ5wtFQnVYXu5b|dE$HzK$nfdzWU5&&WJNr~S1A-wwrRHR z$vnqyG{j(Wu8xg-@!M64?|BL{Ouguy;7bK|ivL=NhZskvI{m)PS3x9N&dO~2WRc`4 z^_I!uk3qErnjd;SlQl|xoQ9)(3LOs`xjQoCSNpt%Pug9vA!KY9VyQb@6fA+ycjdvU zV+X0k!>Rl5!X zQUN(~kRI#-0h#n+CW0|}d;u6Y0K_aoS?tbvynG|{q#n|_56u+1 zh^uN|xw1HrXFIfY`~8K-q}5mHzcS}4r4kzSyI=h(hloH*0LJW-vH7^d`5T!)d#127 z4k_8yB0HREMrq}qG-1C=Sl6Jhjy0(}T+|S9cT+tf)htUH?aH3J$>hOnAD91yexQ|(vol|Et5(C3jpJX#(iL$ohPnzMQ^`b zVTW8&jS0-ExgX-uP_ zW0=ub%Ny3pWgl6_TkZ7v{Z$X+7d?3#xt(GMxeogM^1j7`F!;Rs6(T0Y@yI%47v2e0 z)o5K!)q7JY+)c+}=y#Qr&LnZF!ApcHBpgE5u977_aWa?tl$1?k>Lz%)AKtIw&Up zD>Knj>7I+@J7%_38uRsBn$6MhAThpk(WWfc#X)>mDorwDtT!B&8;}`2Q%ef#3LoV? z7TEL5R}pV*F>D!4=gp)aTaxSB{hxz0zigjRfZzWkOiyfdKN7iUVLWX7*oL^IM1$Hu zsF)RdOdfjUpFB0H@CH5$R?b^8OEYVq>dVkd-Ss`7%VTY{g>LP?v-AFHtCd^TN|XsBxODuLQ2w^isH7%IrAJ)JJx=Mw&YV#( z(8a8cesrH1uAlC3hWR>p4?+tK|fWPXcpFc5_ zus&wx2UWH^V9?oN=x@0lM!cRL>3qZXG8veQn)^~lQIJ;h@=?j0B876kjek6lWE_ z)IDu^&50RXHU9E7Kl;V`cV~Vt#Y(ePDBv9VM}ka|Vwg4F8lBRFe z4_R$jB*`b5zJ@ZS&nN$uLiVH@?pX_9Yq(}|Gr!S8Vgcweg+}h56ZAKd%sIrdTw^Iu z=BaFS=f3G85tjr@rn2?UhX7`?IO)vu_-rj@|l9Ojft?${_ z9J)Hn@lLC9Xh)V!iOx0m;iPoqA+vAO`x^iIvlW#pzih$y`=R0UXBq-pGA8wPcgG6o zXYc3wga&{UI(SQEblwQ)e^i>QPergkm1nkm5EjAkLTiwRb}PTFUUWh`UoP0DY-w39 zZfAcsJ7*SyTDf|En~_{p9^F|ciOYaHf-7j)^|!la=pD8|HS5CsGUab;P-lwFXc&f_ z>r*R7c^Z$j3S&9$tnnD!$*c{w!1MWBd9AuSpwM(>xrVyxy6q7ZrksGSvve# zK-tm@T1Cas&bq*7ut8O#IXJWTI(;p0QZe}!=f)5%Xe4>05>v>Z0c|<507d8@&Zu2W z82@5pxgy0ienM*IDfzOghqqIw9uur8T{1>T6!NrPykeuzj4d)2jbPfDo_dV@|{dVXhxJ$J9w2ZwIXNhwJ|`**YoW8JB@_?7phX z=}wUEl*WVG?Dwy_55x^G4z7X-UmLZteJ?3kHr!|V)xq>^-M`};iq)}d&Y6G1?WoJ2 zZ7ltk$gwF=FI}41?t5`zEaeeDV}Y&KF=|g^;LL^xI|&CRMuSnX{LV?KB z)5T5UM46!tPK=}|uxez+r*(80q;dAd?d9F<3^1n=3d&H=`1pALq6ezyr)>13AV)Z*Rh6Q7Bx4TZ8`;`v>xrc1;8FaaM9jiDjU#1hi84dQJ{cS*oGD=93~FO* zNk2KNEG`~4wFkym>!VaL@2Mo(Ll3Q8y9abUvQecrgqb=O&TpLt4a|S++>UZPRD5ar z-CKT7eo^s3*g2r}r{PwVyIG9UaueY8q97a z1~CV!FD=Z^*EYp$eM=3zO&N%Vi#4DRoolv>rkknEWX_?kZ#-l%bvqHDv4mvqL(V}# zEuXl06g$CBtpY?j;WdqIl~h*+gyHRMUh5NDbSR{~Q-0gx1IWs1zD_w0z*BaZ4{MkDw;6PGw=ui(BP_1^r8l=d$R z(22PKcRifdkXF&0$2j)&i{!enezmphOxcQ6nnD=Twn&!ZngNfoDdU0Z{K`u}1@+@N zx8GfH><>D;(?4D3hR>Z?V;Xj8Mt^}rA`OYemN@ea0)7^}dj~r_>vO_im(>*)aK}7! zHaRXvD0$dlJ@Er}t|fLi$wKa|)ZCUaDJ&>H{6qWOUvtwpFPD>A@`m_H;UnKiucaCx zghR^kfL@nwOaY##aa=FsT>7sn7006FLwDR)B;^@BAnjvoAU{&e4`qBCF#BAr9rGbqVot^8vVbIQ_ z(2Xr6*5J;4o*s75SU~N~I?@0b%4P*_w|8m!Mu-a$tyiR{T~6Yr?nDr_s8c~}BkrNR zMOl_J99wC+yvQ0Pbe6Ss34X*R{~G5PbK!EE4_HHA1aK4pvk5A{LEnBxdx0ussj!%s z`t|))YLALqxGzX=!NYCkKxo1aBO3}MM`}#3XMl#T#SOEaentAo9NYgQtEg|jz{P7g<5W)o z`bor_K&x8H!d~3DO~SQT^Cyca{$^9&5@TVi5^}E;yZ7);sjtF~q~(oT(0X^^F9Y}f zmX;3^?Kj>n{H=Re(<5zLApp~Mc4aE|;m{8*p^tnx-$cmu=i8zM{7%cGCG#LbXsn{y z`#mzeJpRVnj}qOf@`i@*A6sQ`CF>8o)*@6iJi<+Ia;lx$5$e*w0KHgs4Y+?N`Phg_ z@Q=}vs=**YFxB1#S%u!}OQls{=PSxrY3}ML35%FR>LeK(Nb6L~L`>RH%xjdGN+f_N z*O{h;iIg+ZUIuqHsoY8*;{4|Pp2sULG*u7Bd{DPSj*EXNZQ2)Qp+$b*(0W4A;I&ek zbiz5QF@?6H`h$$H7td>0a1a5ztcNA>eSKdQ7YYKRJhGr$M_|7x)*R74HfCo zY0o}fMAN>K*wtr?k<=*@S z$;tilD077VoBu|;L#~$hXE${_4PTV&2Ewu~<(Yaev$zpm>Q>u$JIIllLQ}~|Bjn_t zxD`oOn2|U6wgu=p%2ac!S2_Nk^X>H)z)(%<$2d`?_KFwghSbq3W*PguQV}|oTXpZp zKhWLs-*((7K8t;~mi*!Q_+Oo$)~wLdRG?$x*@dg*`6>cc=t5$@PPNeAsD$x6$9Z$Z z#0%45hS`x0_SF7C5m``ow93^lFNT|@$EvAoP zllvTRkHvpj+Jn_dY+GKb@+S6UwsSDG{2j@RCmHDVj~m7ryI>X=vXv&dtf#Ri;K*-v zt2VVYb&Q&f$3sJYWj2_Ve?cX9x^~^FZ|F{Waaj(D{ZRl?qw#gTI(jbU2z7@_NbF`ySM5yxC3+A|;A>Py%oKk>&l0_)^bs82#r|7v0~2=VL)bGy8RMa< zrg_Vixsw-d9P=|_>ucV0{5Nr5hAh%!MkX#|6atJPzV0c4h54Grgqm&S6a8baP9B@E zJJp@XwJpD_qAJ=Xp!P2hetZth+K-&1)}f6VQ&p6SAHl+3C^sEtK**VchnZ0}gX4M> zC7-md23_q1!lc_Y{(C}02Vqp77U2jeqkvv_Fb4QRy!|?jm0P;Y-_Y0@4yAH~ zPEuaC4LP$@9T+2|@)irC(sm_2W_S`?b+XI1X}1#GVx#P#ckr{ZIR15|MP=D%uxf=F zG9NZZ^;43c%#2I9)F0=hvi!uN(M5+kc((nP&4HIB#KkcV`z8DoyYEMWF>8%#y{=D_0TY)=?o|@^}`+$32eN~!Yyb&F1NO7 z*vHHS*iaR+;xXNb$x1v9&7>>W{7e)xUo28uzAk|lSZKG~jfi@--+g@-6 zHTVN^Nzu1v5-!-(B+9lz^;*l6pmM*B_M-1TSa3M;1AUFg(Z_{B{1Fp>qLgPo8@MF5 z)#-8#bg~){mS!(ZH>QaBu;ve8uUh5!dnS0}i5=*@Vs)oqMZ2JsBs z(u5Xc#fb{L>$nm3DdMRmD5XmK7+i!DKu8+c8!(yu>=;kuh^LSVZ2d#1Gh`}+edpDO z_T#Xm7ivZEwfkojiI-~F&2eDaKh*?9+PgFM?9B`HTPhSagN&AFA%3$xovA&vjlsQj z5DN4#3o<$UO~v}YY>Jr4!*6H~r^|HQ?MZaZtOk8nWn^(ifNEfJSuRxr#BF0R&3KVF zy)jX`^kk;%i%+yM;z~Ls$@5Gn$iMWsRayYc8WR$nW6E)!p&COt8ykN*ePHv%N=S$7@R1j?DdQC~)KquTUnr8q384Y#%rNiY3i*Pf37l!C;5K_R` z*j?GJGDXtSEO8=>zh&QJS;$YtF6GcR`5)mv^c~pJQynaKJ%}YaM9YQ?@;>a}0b7)W zp`eJ#Z@U@0d{Pf)>K*-Qw2fbRwuazd!P4}VHoPUe#vHwQBXQTb?}Yiy#0-kjs+NNUR5^Fyhp_Vbb4s^CNXgF& z|IS{0d};l%iX+mkQPuw6T{p)E?xWu%8M%LPH7Uto|nX(_^2R*i)L9 zB_6QfU2$l~dw^T(RETfluPkp7B0-;u;V@=Y_s4*q-{2;DXx-?3{ID(icCMT8<`aE# z5?raR0vppRr{_Zw(jHpM3-~@86RndE0EGxy!+-&xliS6lV zDSa;VK%4Gz$SD-2vD$1jz5hds(pEhr48S#pS7|TqeXfkF--`-qbF!{Vd%Q@uUU4t@34g67vm(VJSJK!bc6LROKI#Zk>tyUM?#^~q@aTvl z{z5TUpjjkzm3#Y{^bt|3RU1)`T?CyG%n$UV89mm=QEzJM2C@H(8RvTF;&|1@$V31u zZ%GiwL5=4+Lju0nRj*zT-^0 z9gj$*5``!yw;4l*)pYQP1R&ElObt2K0dJRQW?U zlGLZwXCi%GKTf0VpB7S_@vvCIrJwUIlBs8W&ukT$3B;S(oNpaoTn86l$TV?N(Udki zaxbxJNaGn_^EelD(n~W1)tp%{%bNPMr|8Ln%UyVgFCMEy6n-FKv#cb2fN?%5d$+w^ zLw0Z1IUwM0mQ!I@%y9|-bO%O00oE7Y`IvO#D?ykZc2=8{?QBkiSU9>4+>g?@+?~<< zZ>3B4f&Awn6^$v~#v>Qv9;#Y~&MyRES|_JlvhBiV^fx&XSoi3NTQ&PSZqg$!kxLb$ zTRlcf0@4wBB|(P+x@I&5N`n3|?N?ptuo?X&A6~^$SwPl$^Hwx%i%+2{x&DQvrB+bE zraQ!qrQKOvSuhEnKU#$}W=kVYj57SLc1$K5UjdB)IvZPKKOB2ed$y8LQx1X4ba^+|J6o-C&N^>!|Mosjvsu|=#0)p+Y0zJnnNt$Y-CCvndab+nndV09 zILxK7TnYSXI(UI+Xh?bW;#kH5K&GYHug=c|)xncf zA=*3`yqHg38J{Of|tx*BzMRu;HboXaMUQn71qR( z@}Pb9hgir#x%K#{oPA$m1>|7q>co9a@NqMufKW z2uHvtgEux-(*Te~I)Mch-2*b|UzQh9;^Ibw|n`Q$prh@+sgDr?! z^Jy?M)Uy#!Yl8mP!nui~a-H)2CKp`-?#3GdY(HfHu=# z9L^=_qbo<}-};u}=f^H*xH)!XrXt=^yh{?q(%M1u&8P_KAzuh$t z*B@-Q@IB2rd!N;WMs8M}9SV#vPB0|9`v3Z^@G=@mOq?V?VzdX*9@ZpbM*tukiG|;& zkBX*Q@^BUM5WYXHnth3v2!8?RW$c|k>*dn%=nb7QJjJbi+F zh4??>V>dNpJB_tj3=wn!>y+KF`Rrqrh6s@3Tcs%Bu0UwL?*l1$11r5*XFCzL@kEU-lRC|z%1h@RIz-;!f^ zIW-sh6h z%`%MdH&WT2IH!S9Ka;tA+8aF@Qhp{OjUDTNwR{Nj0{s173h`*rIso)Xza9uSgxudB z^{90=;t+56*xs!_g##QFz|~OqINh13)vACe*@*-8r$wLV>AASRi`QH+3c5a{NbBzq zHHT1+GP+4@Ro+W`s1P#opb~`*zWwfd!swT11}~01qA8v8>wVRdK>1U#9|?P$j|2Su zz%$SYu>6BSJQAF`u#96H`=%#5Kb8jt1qgJ#Agv;BC!vm3g8)L(bc!cF!p6?NQaQAtf;0wM6Mws7q2FOqEQ244_X~DOYxX-Hpbyg1Knd>zL2KC0tAN zDRT+h=bLGVPw(pf?9s~gv|@53%UZa$?@@@GC14NvdW{UuReHn07}YL(Snqp6dGLak z!@H0ZQVn~=9QKfR*U z**g+I+5Nv$J}YTt+VFRHKY*5mIKaH`Yv$Jt8M}db1Bet?fOl-gI&`;)o>>saFd5*3 zzUe7c$J)1sQq^Sr^C6i(sRqzuJ%&5VE5F9~oWxN52#7 z=v5gBs7r154{<`+D$oy~v~^JgEp?tVE8;m3w=zG1`0}m`nNUtfRfh|4|Jh-Hl%W`f zz%|JycDw)xQ~BDqwiTm75069&j#t2bVgZn>f(=K;kKJ9I7j7F zD^l0r$9+hqgY~sN8VV6B5?)XLdOaZ--bX)f3;cSE8b*}K#wESxHg=^+9Zha?YPr$g zB-!->)W`mF88ZIXm_xSAfcYxupsv;|=jl*n&~^vAqjh4cZ9%P8y4mgE!CSZosx8-+ z+^SE?&LU;HAP-={jub{tqZH2W8LD@BvZ~csUl{Z=a8)(8As<|P4=~$B|0S)Vs}sH96X_{cAkx(Smb?a;fmgBViN!5isHc#@gv9Rh{+@0cehx@8NILCMQD+r57k zSX>CpFr`ZcZR#yXG}IAlNVLuJQll`)R2S`n{7a8ONcisW!1H3~A~Tnu0#rR&D#E$ew;E6}tZo;HSLr>4?A~ zHOijjdx~2(LKG~2m0}Jom+ENk#TVa%$8Qrs+j?qrS=+Y#D&rsC5cU<9Buwo09qbhj z$(mM8HCUuqCbnsUJ)1wg`@VqJ23P*nflIZjq?wZ;qa6WJ2k0Q=M}UPXTvO^rr^#<& z&z>FvqPtj!5~xXT!BxlM4`e+2*>G`9UkrhE=x zP`Y`N-1Na9X)7`^tyj`pr>yRCM35h!NGL}VO`lK0V0`jl0-qgK8E)X~-O#zyQ`oE~ zZtr_1zG8F;vdrXBceizRjkPvXx39cf)@zzbGlK6!ZAF2(8us#?(<;Hli#jM!qXnLX zA0mb@K5i&w@IpelTn$=zkm)g|UNS4FboBL9r>hIy2gDs)^7WA)qzPdI*wzE4iI5rg?V&Im6Xu>I9X0^qR@`|ZlYSw~`FgAqbq>(Ivcu{#SN;M||^+g?|;UQ;)wdu#hriP0Za)OGHE z5Y_14&tk6J-X7qdBV&%u>Xz8A$HBNb93vzixj-?|@{s&xW4e*})JhT3l>O~ie8J|} zke597wnv8Kciv)+&d?`*zg@I3XJ46E#`&W*1dX(!2e3Xl)XOKG|MBmg^&Tvj}0%%lOAOFJ5r**KnJbGs@JACQmHr%^H%sJOj9n-^|`Vm z*#Yp$uY*Ko2*91 zLKq1f&FVN!ln`Swex}I?VR!->D(lf@K8RPFAD$2v%pQ2$W~cM$9Ie%7s2WWT%Te(v z$u6i8YGfW%<|dvpbNlRX%Q&n!^q)=MO>P=wK`-&)Y5TzCTh{LyPFylumCQ(k3|Xc+ zV$Qr$J|3wx-wcgLI^vX%Mr3wMK5_shimFE6!n}2NcFmJTW)V-pE zw1UD{dTmZQz=aGKjBECqRv%grspfAU|Vn7t(c0+j+?nLo=pBA}2H)OO#Otsf#|AfsCo5{glA|w5L^>4P0 z9F(ZGJ_;76K8sJn|J{2t7xw>OAizZ4aR!tj3hT2$1voHy5};9y#2yo+k6`MwI!#dXBv1QX7~=&yqwR*H!oIv6i+S5xm9Ww4)1|XGxr+a3@L=)PtsjTY z;@eC#{gpD!0!5l*J6Hx;x4^2+#u~QNw2=PM$a2x~E$9^sth2mpmr~MErDqAYuc7O9 zV*;s~csZeXFyHL#44n~8TvJ(p-88(ovX{x(2R%})?Vr94u5|xA@GsyBsIevSkQo%B zjI9$6PglY$WonuXYOZ$D_vSrQ2K$XX-lSu9zZMp+$;yi1f)=f0=MGAsITk?0!2+@s+@hK5FeKKA2CUa|DyU;6&pdsd0~ZSv_{VjMA(_^x8o$Ct+@n@bW_balBia z=^?i^VoI8}NNtwwX8U=+Ij8emC&fsJkOe%2eI*hv6F~^s|0mAv`DdN0^{#H!!nd^_ zOyE$D9UaNX`?D{l0?KpK0z&32RA;g{IoeOe|7cgu`s7nCtJJjK5!l?1m4>5DzRPEv zBGDOZWE(g2F7G~v^{9AxR${SW)l4CGuXCeR{Zp39ygyg|>w-^7aX;msdt#h;2919o za`?p7MCn+Vtw>-vWcx=VAz-0$B6+F|Jf)(bm%CbRUI6l1OHjtWRTtk^n!4r>wUEyJ-&iOlDvA8Ul&ef=(`&n6`Iju^N+PtHE?I(%owA^t5WM6vC# zd~t7~xef33$4Uym+0iKoic2V*N3a>5O$Pd_xo>`9 za$4OcsbaB=rvn)df-h9ScL$dqJDOxyDXB%(6|$CIBAe_cd z(?+lUj}JkMBfj(UQ1w{J%!J`f`W2I&znWS!<(8>_HRVca-u=kzribkN zR~o=aLZd@1Dgrvs(eXVh%U0Pxd=gEM2XU9Jsyf2sYQ04=^p|g=f=zOhI@eMuZc@#VAXq8B(7Z9*ie2fIF`;J+RA<`5)6YwqAxLfk>7A;w~~0SW94jBwJ5((l>q z(Udp~L02Z8!2vWXA3s{Ct;6A$mTt)d5W3;Mz#Mk~DE=+rxDdBl&9aVo-#@bLC~3HR zjQm_%WLUa0j*ypA{4cG?@R=_8mfElQeVLZq@hXnf`$YzbFgMIe6|<_}z|1b>HAh`@ z>KZTjHv1B2H5{UP0^^pT1=*vvIXfw9HXwIyIQtv@&bN`sW=}$bxM85Gn;$DDa@HGC zV5KkjtG=@A;K_Fu(bao2O+h}Qq_qc6tqiYI89)mf^yN09Z|@!LqJ1Ue@pjG(u?_c( zz>CiHQ03;cl$7ZNBaqy&u7je)nDS}q)^bIYH3RSYILO@ECg}*FT?@^91p4l`FfHL6 zGMg`n!>>LULAt95FGP6^_T&H_)Km3}hrenM7stC|8wE56uw4>G`2`x^(THz(reLC}aUq=?z{&qF~c|K;>=NN`Ts zbCm^MBtBq?$5u7$+#LRdlJw-a|H%89idJ(sZMe1-H|becG{Xg`)Q9F+-oSRyVuF=_V2y>O8^5t~dvlzHTx%E=vYFJroRybR#Vv`ArEk8HD~N-D z>3HwgmsQTET)5(CfM~GZN@@MleM(*ep)QO|lL<4W`ab1vbuU7Lb*!J`R}{e9+Rt<0 zFc;)s_+1Cz?dfSZ4gK}f&iccJ+Pe3f{-2yIKJM)Fm3F8Ajr7`^1ZxtJ}b)9@m63I%^9wo35=OUMQ z!9Yh#mfj%rga539LO#POV{EV9MdOXzR?+qopNuE(6iq94Q<~)XsI)$_{#mfDI9^52_IE8KR^-r=xlR6-x)@Lkvb@LwXx z%>yh$T;s$;b=-3Ix~S%OWxc`1oFq+pqw;~L-)ckcDHo5D#4$li1|(#sq3_ndoCi(S zkXMdgVYJ0PTy@(qAGP`$${taHs6sDj{4@4_CL5>XrMg|!dG7s_b`fK;4e0!4b1tKh z(QUuuKJnxLCwE*_Jv=@rDI1pFpS2y)CL0e%N0NHP*L^8T<4=^fzC?Uc-)eqi#THhO z4Eb^FOy* zf4Ff>{(5RDPXE_>*nf*r01Z>$H#fD9jYDr3sKpBQMF!f<4khZn!B6aw+9ejP2M956 zHG8=v`LWto*n~#nkMc@saYPr$@b$sKqkF~m^dB>#Z=L>Rk({9KJyPaVWVXoFFeNk#|A?jvH9Yp+cF8YgRC@W~z#o3ciz-Y!>-napYQj>!^c zelS78ztFk*nXW!-ekU)uPHuq%v`cAyPyQ$XkS9rZKPx&s~JdB%N_!DZpbLLzd;N?jBgxsxU* zS#JK#DYQ=*f{U!pggC?v@4W}q+!j-du=Yisnn8#o7wje@AY^OMi|o-)dY*Z>bBXd0 z|KSa*S@JiWrn>#?EC3iI(F;Q9r03hi>LaJkhocXk-I#A1xf5-rWP1@4x+kP699gi@FO!)3 zi#+@3JjmQ}IudT4t4?__5VSNOU=N*XFn|eh`Xfr0g%`Zv#eR+s2LDXAx6|% z1Q)b!9lSbiM9oZ$Hd_6L4LL%!c^#DCc**CdO7u>c&---bL49sxPqS(=fm5YE?@L)KpEHjRC0J}32lDnv09gzd7+;JtYD z{7X`cjh}k-*i9{#at7_F_^)B*Azm+#OsDJRcgZn~`F*}G-!2SpmlQkL+ZRk0 zUo`bQ$un~9?0HhsnqlJm&yv?Ww0}BT@__FIjzG-Ctri@(dz*LW@paudVxP-!qAYtN z;+|mu6a)<)&c4!*y0<%fKTRXNa%~958@AdX^;Yn*noyKip6Qy&r=BfNR6%bD#AcVZ zi}mH>QO6MX`r*1KlkbtJdFE1~s5^exgf4|BiabLP=$1I;9;eS8FoSvaB zXoUmO_kg|AF+W`ys`Rye==Ja~K{)@)J^Iqzo zOBoJdi~T~F67D>nn1Px6lZrQ#np(FY1&IZ2wSu~A8i6wo+qPU|jkSJ+me6zLX|+dM zI^;7eFo$W~OM(Ng#(JghhtA>_fFbP6TYu3Q;a|HUBb49K-bcu0)TX_ctjip|evhL+oAUx$NA=&v?j>D*_Fsa zUB%X;xJ=CXbRGJuBAJr5N~nz(JD-{_B!DD-%O^} zwdQTPa39vr4)2sc`RMVLW&6gwfWCCZ%F5_@%!20u{HbLvN!*KDYClw581ikt6RFnZ z_*)Arlznd%htq-Y>Zczrm>`E#iaKw?(=P4^!4_Wy0AGf8lwAHyGVgpvkk_b=IEl1%7-+4H@ct0ixPv5F5pbu^%s;%X?dUvGI-9 z;Rm=7Iaa2xc#k;ZPgXnWBG7+2vfTQBs{PCkYuI`;ywz z&v4K{i z`&kR)bA+UD<(U_pF38}c{!^Pl8&vc*Lf>Un-VK!vRG>AABJ?ipOZvTJkq&M7xRw3w z;ETj+<&+rxZ5QW6oc)AK4V3w%jgox<`jhZod=uw@rX-i zRg1`YWK1`}fj(=c!ZJyGJ%g|$hiU8gO6lhYB<^=q1m4flhgUI8y0}!F$?fQBoL@wR z?GF`JuNx>WCWzhZm*E|-hr4C8lh!#vjxr%!Xc}uW2o8celP|RH#WqBzUv@QXar5bI z+PVA4T8qqWQ zmz~WLls0DfUOVe2@qiMIzNVzn6w+((6ckyUT(Lh}xqtoR=5etz)@!x5Pm`77Y+fIE zFV90+zDaAnB#uwUze8l-j-`~%G7|2Eiq{~XEnR-|2a-W-eE7Yi^rP>2-*ZmiX0BY2 zc_9rpsI^xHmEm<0vooYWMjXept_GssEtwd?`>kk4%1pZrEwUIR_wS;CpgzB-0B}Xo ztSF;JF0&!W^9Z;13-f3JYA#2NTOYFcYHq3Q?Bd(!%ec`#vaX0TRBx$F4QAgBfT!DM zcE%Vb8uk`Ps?2M=^v>~)8Lkz6bnB^ATJ~sbaQhp40y39>WYH@d5CR0uJ+=2A>HmG& zv3}KJEaWD8xhzU5Inwu4PEox$C7pig*=o4y^L(km z+&?y56O4w+*oZ1o_DOu`A?4_*Wbw6IO6My2W8WE>OuftN*8bIBel6|8d>UU!f7Y@y zWcqBXeb^VzFJ&74MB^djHxlQ+8Jw<7{uHrd&INfT=NVQjDN9~LAGy~}t_XNQ5rp(^ zG#1=i&;MN0BE)#ZaXvnCr%09yS4{SDUS|lK4k>NKszADbAlX>V_XAz~%e9-U{?~>AxDMqtD6op1n8!JUczK82uJSe^ zVkvP~8x_sN)kylcTv>@5#K$K$yNtx&I1tB~cnn;C8h z_W#TDGEd)3hii0)MPvT;vW6y)1nw96VeGvgfl;XF!+12{ghng2ghO3nVVc>`m_Q@g zKcGGG3gx5Mck}Lh5a1pyW&UGpbDI-qe{YhabeAxgMok?SVd02J>!Uitw?<57bMO6Q zeX06KPUhXN?XW7PI2Cm2_agUBPHE)7xu)g0mx@zi3*B+nQQ!xNQzk3HdEdI}}8CBbk z&4AnTJjKJ@`GMn32Xa;d!f@-0@Tz?iVTy47i01WYv*&)wMxW3ww?Gm}6<@RGXO;@z zl2I*@XFdV2gP+=@W6+S9m^VgZ`7_rwk%P0{VzM$UXkp)8N&oG@;I*yJU+VjvFn3Om z2%3oi?s?>b$2DAcs0jTFky$t8M8Tl;uJ8U56uE6?QiPxVBe{nnrN{RXoh?AxBbw6< zxV1=x4jYpIf;V|o?!4#rXWgTdvp8gOa2$vOdSQGcP4*i zmL63=u#9y9+CvOS6NX}sHli9E4}358IWwobc1$rInj5*wUTmD()trZlSm$F@v-(E( zHiBVq4oQD8)_bxBK%<+zJ1lzq_wc1BnOgL|7!Y+Zb`num^M_xoa6UM`Zrs&*Ck6Ma zL61^6IPXUXlT2tsB(Q1L^!%&4P@)xF{!LG1a^LHu;xB$)q=ASJTA!$%+(NBXj9)2X zXCeR5h{{Qx`LQ$jHLSZBIq@}_GiV^Hh1kgfIeqd20ig$X#XKaM<*Hd&mqgMkx{%mB7oxu+|%5K3yi3}9Tl zlqhsk8_V9)Y}9_PM12MtKLV>Wi5VL*0jZA>^JQ6Sh@Bu!L7T%!yla%zep=l_m!q=Q zgd2UM%m9>i7ENQQAp>OF=KI=R<+B;H8M2puHhs|eVFn|Xwf0%gd3%j02vFEZoTjucYOT*SOD_O& znP&Xw&6xI$t9t8IGX1Ww9d&DRCA5g}Q{lal|I~?n7d>ol6Ho(D2-gd@uP4cmBojrWn<;|dm z&CdHTzr)y0xI07_nc~8eOExNF&N65=KhfpbG6vbkH6|=>vYaBD1;E-YBw_wfZLEaV z9jO7KAJw^Ao@U+;~K<8*(88s`vl=B8d3mOns zT7q-I(VMM&Z#m_io?*WJB^&?(xx#b&8KNthl2wBY`H&XXhA2w|-O~&0Hse^BP%+#Y z3}mb$)K>vJKaXT-0lXL?ln4)T5#sT?VJ z#rg4S{+WyFKNKLR+R8KWQ%o+=Ic!lt{sSlN*7~rD(GD(fXE6D-Zo5e&l9BFMXOiZT z-t53ZAT?DYP*DpiH^6DR15F+!APi;$r-6yJS^M?vqvT}iEdAXJMtf4^oz<5@Qnt@bvsu zG7yM0Kxoq5%xqH6S8+_*wa~aRV>h02HDNIMfp~{RV)BnV|2bYtN{^`LX@D3m5Iz;! zaDVzRaEvN}{vdPV8x1}VFUFRlBNFW&K^yD?A4des6h*`lM>)35U;QvsExtjj!uldd zyubXpn<6lMzjL#@Wz{qh4u4g;CiY$CXngzEytCopEnG3=ejz8|e)(;q_Fcg&aOuJ+ zE!8QYErvs(5!)59$o4yj54|?$Dmc)V69SCQQTh~~?&|zAtWMvMp&+sI)wj^1d6ntR z=ed#t@w;XQIU*%J)>HY7UEUo>Xt+xu8lYSGj*G&%Ll&h6(Z8que`sy92Fi_mz_(vZ&Kx$_Z9Lvv)lRE zHA?-DsWjanhTZG$VUiD|B&Ch5gb9Oq@=!+<8FgqCZeIW!52V>tdkV344INv8TrnKD ze_k5#ALsT#%@zhQjeWT^F^9>;4$=gqJFQK#AYAg*iTTQvL>{ zdqaG`M7CTKG(MCheHqk{!FRR?v~650VME@nj8+ZMhI|3!X*%r#OqM!C6r!Qy;V4Xf z*NlvS_|#TrBN2qUwUlkXnFQmxWh}S(7Wd%ez%K?EGVsy~WoAiImYjYbh1%ACUB?kQ z>W_JP<*6Qy;>9as>6@+g-)4Gfu->j5AmG3WQABcCZhI{{Z+C~}RP$Qxet`polHeIO`j#}+|S|tHVa;? zx-prBi?FT@dpIx$j9h8Dun!K7Rou4=_EKuiQ!>`V6wm#;L1>fmz?jG^J+u?~@@jR8 zEJ1Rr8|s%?68MXT*O`1RygVyDrE&a*%#azV!cnP+jk^pUgqIa$X)^8QUWIpGf0BUf zq5$Xi>9s7)=Q^_jfN$}F#*v=&0B6EFI(@Ne7!cUZ^xODrXfd42w|T8(?JD;U6<_kF z%(?D531`{Y?X*QdH@-i$k{JDU51%iq`w>Xp1QW&+*;?_%>?GW0pt#39u@lgM+B@Br zcW9fRxqC=0UxaV4!lo{wUX))tJ#@7w*M+2W|DecU_@eP!LVSS5_t0pSAN}9L`mVGb zJ#r8)wgPb(C?RQ2R;h;wgI25&0P}npuL^o7szdUn*CMCmf8j2L9z6MiGDWJ`D4mK6 zkE5fV^pBSfb|epao)4MnF$D)ap(@eTEJS(Ig*S5`uVju`+C`VYvOHQ14?yQsZHMe* zw?}?|l(|Y#scp1uTc=h!x|6?&39E9Xx5JweM)6Op5Al+iNB^?M1Ny`QQ@a~vhcR@cvN zw#}5Rm7uk71tI9z&;&-)gQ6dYye6MZPc9y!8gd2=hJDeuPk)B;ZzlO;1YV9z(M#Q? zSBi3ESr~3)8wB>VhFZ+{6e0>LrORD6DoTwCD*R?|1Q78I;dq!r7>-X^$o)&j$Q-HW zduX8$poNX~&|HL^9yZ3l9IZ7F{F7w7!Tb>LZ*I==UY!J0u^xTbVrb;=cIpOM9#eK7 zhrRMqzjQ+=4V+3cb`YF~mB&>A>#3EHlZ*MAOhg^I&q62iDfGdi1n^G16K^r(B;m=y zHq4N>C)mZHVhcr_9G30q!zI{LDxxAGMPUC!Xj9mul>lB)M6v6?E1i_df3nO4P!RZY zHDI}->a9>3!^mhpE@NaWSBXJ3)$kQcIT;)Xvw!-!F-0eVO>`-Be6-}_sXVoWfE$y~ zHlCsz$+{V`c_3HJc|7LxVYZwtHMZqd8gppReM%mE_{<9$sGLGQJE_DCf_~wmW_h!3 z?9D*yw*7*pfkOwuAzm9ETsYhorF}i@bk65B&@x8l9{%aKQXT3DhI`;R3KyPcqC>Hs zR3|d1@ppHZ%nv{sqIK)#16Iv)=;khk;e|J;!%yZaqXyTNiBYjnFsxfxr>*y^UV-QaI|Tdf^Q@uv>%7;O;UT0qa0(g^+gtR;|Bb&yio(XMl4suqQw6T6!;h56VHE zNVdT(Ev1>6(!YPOZtZ^)K_Oy=+SZ<7%%AJoPi$ZP zSMM$wy5-;v9!LxmIwogYem5gJd4!1=oDP*u5ig$16O-_N8&NLtV3&#|Cp91-H3l6y zrRl|Z)B)8a#cIYmBxSgL?YNThrZL}Pt zarcKXg8rk`T2uS;pU%cn4yXC%n7laiflQ)y zJWbd>{2f{z)P+ZaMB#S$6465>8UZQhOx`uo*p+pQm@sING z@5vh&!+m;gh@mrmreB*>OgrOee2R_fbf-ICV~LR<JHw9fuRJZ3uMz z^SeUJNJjL}o|-y?-y8bbN$P2j`Caa$L!%MfGX9&^uGwlz&;`LPDC`##DL5*&JRlMm zG(fT){+aJ8!QbtekAP>QH6Cd9=s5V<0{Ddma1F?~cVUb1q%##(!r>^_24VugiNje` z65{;WiW(vQ)LJRAsk%C3ySS>FQct_Bd0J=3BmkbEPg0#UYWRT8j~x<*8XSJe|1|8{ z7n_iw?nKUkIXaJL++R)>4LQL-cVyImDh!Spu$gj|M+XJBOpX?Jd`D2OeXoqQnbIyq zwdrmPIaaZqIUtgyJ61VEF(0j_BCp*kT?2!EznUrVRXFd^w2Y>lr53JeA{pHf5HV@p ztw0I$L{VkZd-{J|=iV8ZGGk{!bNITcSP)7NZl(TQxUS0TW$9W|Nt%`UR`l`;*w8f# z0sB1Q`JQ0q#YFP_|7oK2;C0l973ONi8aL zsE6k-3QnK@I()4pO)TbY2_%|CEJQP_^1;W30Rr{O92%xjJ=!&HkB*7!FM#9m>AXE5 zv+ZxBJlA7EaDym>$A@{$Zv3Kr%7c^BByFmLhW=$O`@%0VFdv}~C3cnqTalZ11ryOp zH*iL=mp(j+f}DtZu0PBBl-%|oXw`P)S%hLLFSy{CiL9#r(gbkusIG+G%NNuT4+rb` zS7hz9d>bm=jUuWXsJY_OG&lCy=f?R<+xLG=_R5sPdz0iFYl&Y;rvGW{P8oyJ`t?kJ z3!^g7)L*7U5`Ywwh=KdSr_QkJ%I0B>v=Fkp|JHbeE5ydW`VYokFyj5mkdU9np$~v@ zua~w|MNXNM#8X-!Qd-x&(o(ogHiyuEPB%fq1>UFeXlBZr=ebi8cp5WF&m* zcn6m>(elKGD%7ia3>}H&c8{WTk5PdfP*`X93Jb9=z^@}wv+(+ok?c|IPq2giP@F42 z;6=V_JdC?8CKMPb1;z9(9eli>16&tyz#GMDn%cED>PZMR9i~|a8;FMaaP%N|dw!Wv zd7s>sb*-%Uu!q%8-3LZw(SOZL3>zFVZzDC@c=LY6h~zOF0 z1$Ne8#$-lI*f%5>26v-Fq^Hvfx78Dz$euX}q6_1JVntrL)T`uc*0#Ew`+Seax@Mhx@|X?f)mG!fsT#e0OT|iQY>AjVURzQNii0 z^Aw`A$|?D;#eo$xA;41n&zHSdV!t%5%L$h@r&tR8$QBM@lCPpuU!yDz|Fp3os>Byo zC)+Sr3gJXj?DI8!;jiHv_8#?B_Tu(~cf zm%%H}5D8lluXSd5M6nRt9@T(=r2^j}uqsc6HN`1%j?&zCt4AOHrs@}Aog}OfbAlX! z(3_;^9emH1}iK5w7l(bP=NU)GfmtSb#qSayC8yhJ-C z|NNp0J7`d2#yy(i*=EJbHzdyK_C(id3ee(+fDT-CE}=w=*1pta{Fq zTMl6xN3@g%NzyM+TzE#go)7OqtR-VGZMGxjBkN1d17Mp24N0?FC4SGuxx&4AHx{+x z%`doqn`-RMF&jXGzxXSemRiYaVYi4>bU>e7BHIH%!y+aJ#zPmBW|0B9{QNn6 z?2tj&jQGZ45QV?UuvGD-jDSFQH;tbx&qKAJaUCP*$g^$c(ZmZfx=H6Cl(@ux!Q*n9 zD&v|Epn+Hsl&;@d;BkB)pXOevI_z_87FM-5i2!sFpTgz6)w{arrlI zvZJoN(QG9qvbx*a`sLRUq`)iTN?2vaz(W%Dg2N;7_Z{`1mzwK|^;g;rH{P86L~u!1 zQ>t#%b@v065^$k%d8Yn!_^I$V=diSH&6w0knhe1wXDx41>D8=O-?SV@4?J*f(wl;PEFcRP>)?*vqdTZD^0vh}S#hp8e=xUV^_N&ZUJ6r&i?tiJdKNGJ1E zJMqm-np^>%?$w!Y=`&1o2X3O{1m=!E#=EEAn^L3s%|wut>27u5nQd=76@Pxk z-8$|Kj^gvAPMll9e&CpqlCznmQ6l4T3?8wiPSs&}>A-aVJ78UsV^91X>p}eN^9rov zF_wM;V}!4L?IeIr0$4-rL%Ae|P5zQi#f>fSL+7U|gsZ;}CKNh3&aj_{wQ@*wUVnKh zf0Gc$nS2`LVL-Uh8)rc3kYPPwIK{@$UbhbxeoH6nx zl)OzM*%aM2`d0%G_04O*3L+Vg+>4pN?~Z08*>`5`ZbYC+zhw5=zJC4a2A;?aer(l9 zC%7V?68{V&9ZIkpf|>v{?udYC#Na!LRRoD)(#dwzM=Q#R3^nkt>6{hSIPyy$K3<_1 z1Y&FFgX7+^V-5VED4&QqLw^R{pvO4Q@%Wxws=*YzBj8a#tLMTM(>Q8dgzWPWWfxsp z&x$ui+eS)iZw~HzUv{tNbpJ(`ST>=vXDTm+ZL{DUw(Z0A9=Ij$%eqMDuRg-Zi|q{v zfARzbRWp-iqD?QQ3d4&y%Uw^k#0b3gpVIV{43%60xH=1bGl)=LkuM*UQ)xa0vW23e zcbhe`e`#e$ZW{*d#qQ;%-VOR3RaOxyL`t`Hwx$Y7?d>AL1==I>UQ!x z{Ydc$nQ#UebvsaipP0WFj4`h;0Mtc|#icNFoF>+av+(iDXj$6nT~tzG4C-u3TN)ZC zy{y@Pg&ZlYcJ1JsjaTpw|GF*Y(wc7>sFegqMZVLAN)YwU=5)oM`QK@XWA96|UXk`I zVA#%=a@@XB>~%LInno2bGqphr8~vP4)0|D5SHNnnTH_vwQo^Ii&0N_0U36eJ8)Xd@ zt2N#ywQ zjNeW6^xJyn*7gf4gVt;gNiFtQM3sC$7Tc$<-4sftIVu-Zg~HO86LYSaFYA3Szd_(4 z7J`a6t(m*40EPhFZ9CD^(Q1{U-Z=&8wcazn+=<8h#EX<G(5{1C=-*NTJDH{K7I zerSKXBOK-@Ob^+>$6Gn)Oe%18q?5d3)q#eGjx2EEp3tXNUg2V^CED@m5b4v{+*^5>gDG_O3G{(}EfzGHa z`3Hr-KyPEJn4XYspp&j92C?fnctUSYc(rw<()^_@U7SQr=55*XMbVJ1K z>5NUNS-P!41AgPs)v$>Fn6~hr?LYsKr=n}5B(?~k&*u*R=P9be;Kl%66a9azlQo;f zs=^`K?*BY0^K*m!iTE^BQHs2!P<$g}SWy+sb-wugYojIG!2!KVD-wgXJ`vQRfM+UY zDB>%-Pi6)f`I*OYUw7AlrIylB`M||wUqDZZ>zTN*3)Z_MoVNj;jY;Gvtk!1%*v={| zfCkooWeVs^hlm63?S^u1{Fv%!{xl@!dLb(oG`CZD|8i8w-NB??WNFLfnt?7sbY?_xephlr)3S(ln(`_6?8=UnP+Bk=8LS?^!C3^EF>*dqK?Gkb{bAfl`F!rM zfUlQH+)0`L6TeWDPGy)Uh(Bj}5-RfYC*HwLH2Q}7eC~jc4cx&wc$e1WU8fIRvX~t$!A|Vjj-)2vjNr5Yr9(9Xw z3NY_3J`^N+#g=Os%(b`vBs*ZE;H54#z5uBLHa$)YJyDPcJ%W!so#~ThCK2hl zA1%ztfx>tvIM(QcOXo0WItC!oThN{)M}PIN)@mV;-;H)4*;rA74)7JMC!Dv|SReB+ z9{H%e5G~ARIM8=9U<1tA3ajW~C4Hd(T@A#j(M=PWd&b-taSRf^f5vluOIj)<2m1|mNH+?mX-E`Oij{hQeSXQk zg^PzmSf*u?d!Yt1Bk~KySe<9TfSy|F^=0|5m0)N9q=Q#8#LuC8*EZe}ZVifD`u6uk z#i`v(Tq>g1wf}Y)Lpcv6V=?QnEkk_%UP=Iu)Af@6S4&w3cmaM*)wJeIDEBPTzCiua zB_KHQU6bantl(iS*OBBLwW+}Ewg!&$i4|Zd`i36NOB2B;9d}9*hMF8+$0F7Ktb|VA z(Z0OLepN5Z@;5;G)IUarQNfD{fd2-a|9lz^pZ8CB{A#Fvdw&{oaWm+f*zU*3O6>RK z$hJjh9p)m19G@N#x-eeGX7D?~OEJF)U$$BGO z_ZYnHd0FmO!-{>o7iutVvAciwR>C#r;iix8IjKR6%E?r(v>4{ybq_t%=)Y{WR}HB4 zsL0C8@3)e3xvi>K#Wa~;?U5@^+ZY+OD4}c)lQQ3#g4*PgiL-$Z`fqR47rWK_0ak_3 z&uz(nuDs3@(|Pegq`OVkA7}CiXPAdrlR56W1Mrm)YBoJ0UTcfbZMG@dgt|rn{DLH& zprWPk>FlD(f}G$H<`E@Ik4Kuy`WKWmgwbB_IFKa^L79HIq>qZtZJM)us~%x9Np$H9 zFGCCzs3#hWNiVk$W3qF>vG_9dUQS!;b?iVcQD;rp9QfoDK=+g?Tp~31vPE)H@V7Y3 zm*~^6k8Sqv6a>giGEZN@4gDGN$k!=o7;LK@bHC%Y5!=z+@LqcR?A!SR)KPSxrvFBF zivby$|L^D@fiFN^{&*AxC6gkGqx44R@4dc!w3r6KvUZ&0d|||@Ju(~DihV9tMenCF z)%gBCiXYpp#`L~VwmTGarP(@f!+i$?yUFw->d5-JH^4G+t_;||K6A%N=QlGPq z`0R4!m(sQAH?~dvfo|KuqEG@UXzszcY6XB6QGN2~Zm+-(Q{~?}6w2p(;7+e_(Ra&s zJq15WfWyN#L`+T6t!5>1?E8b2X;e}7zk3IZ=zZSs+03<@{}jo{GIX52xS7iU=Sww| z%G{eoy_c#Vc0tv>DHXe2#k0h9FqPCG$%A{|T~u@Kpp2?Qiif=~PNd`%c!=19=VP_K z+U;4ZNXD5O-n3IdC6ZtzfQC`_P)zP?R>>f z{LB5>vZ~K;=ODf;du$}3u46m6S!v_HL8vK*^*uWH_Q&lqJ!VQPdl05gE8gmT0QPjp)T#IVM&O;W`eb9dfcf`o z*0QS~fcVGK&7YJ`kK4np`qr7;wtP-m%a5M6J@K6ZH}G8at6IJ7{`G)?DUNDk0~&s#-Njt)#fVY=fKE2k zxR=*;(xF?@I|CADnXA!X_5Q3^_#(BO2^+wPhFL4m$ysp16D{>K`5*6j#f};n7aoNO z&uaJ*z?@EWkRoa(?35t0Mj&De?`J7_DH2MQPrwOSI?$MUqvoH*sy$B97yp9x)hItV zkq7Fh>@h79`Hcn*xKp|QICct+Ad8}sn+XFOQ2mrvPraVLTr8-Y!3F>kQig4FTr-{z za_x<0Xl91G^f-Ti=2wU<7FE5@St|TJ$!S6|emo9(qM?2=)1ig?_GdQ=HZf7M%KIn2%I((%wq%hb<~;`L*qaB zD{aNEjLN z{pU7wW}-Ix&njOTi}FAddc|-$`A&z%&fFV=w9cdrPV2F1=GRm^UtO^3PJ)mBVvJ2w zqvPl$h&CV0emoFGQL8T3mtk98{}OZ98K*6Ubvh_kHh>K%P=;z=i>M>bs6jw&uDyx) zPo;IdST<0>KtUkV_wopHIY%ipDz~n}eZc;ol<4xu2wHW$#*bI_aDfTh`Dq@Nn#nMP zs>bhX{+IQG`kpXu1FW_*WT~Y4O>=p;qy!u7q-48O&H*i$HZ!JC!;H`>JhJHNycR36 zkmZy}D@dWvuqC`oPr$y!5-TkTcgZnL4~?h1H<&-dAnaiA!!x-9HG(aF7|vs$g5v3BP3XM{0AE5RsL6N1cU}Gf4qV^_E%RJR~i0O{Ern!6597CL-$1mQft}YMYBIv!U*_X%&+E9Z06e1tp+Au2VAH-0Dz18Q?b4x5m1-tF_SK<7tRc?36lT#5z8aPCg&t1Qh zNp-m^BzZVH_IH02v*gQ80B6otFFnb=0IMS7ye+ZDXt?qyzSbA{L=Hj&|7e-Y-1o2M zNmhtJlL~F6=w($uGoc8gC!eI~p~SZTIK33V?RL$PgbT3D%G;J`TW^4@ zaU#3J|U($KPV2~o^>98r{pyIC(PuuAMd0>w!rFl~I9H6yiJui^)tXdq! z316hATd%>p?R;*L298HRT-mkXe#GBnKW{(Pcu1&rB5bK5S;T#n7Se?OF&nTnH?EAT zgT_}T&Rb-xjoy4vq~vvobWlc)UT&LNRP#nFdiqB-%0`DIPUzdR4&!O#Z|&hrKGtkZ zHQ#bPnr4!_mCWhQMoN1ZNL{wkfB-vX54F`dHtd_tH)zhnx2D>k3*YZWzx5)lIZIRr z7ZsRJkv~gabHP8DO_BWU20~@+$y%&SCR^UjtX#Wz7WK|kCsv16AR{HCJdc_<4dRH> zX8TGf$TZ+l&u(uw&)a8Y|1`bT(e7fh!yyO6cHr8t{WMJGiN8hRWVE`(Y7*kU8J;;= zxYw){h)o+N5v2+xpTik8lhjDj*Qu!lsABOcwSxz)dC7g?d{`ENL~4DShxtYve7FJC zs@C*z)H<7E8_Aku-I3Gcf7M@OFr;;x39GS+!xY>GYB&ZhvAn1^78X3qXX>F}!EEcA zsWFqIn&de*1dNl7g%4u?Rd`87V*_aTWnhY&Sl>^48%pzs|2 zTE(b1|K|0w??uj98o*%Ac@Y}Ictf%-)MtQyZ=oLthDA=eHy$BWMnzBvlBc?_GLIIlziW<{l{R7#CkIspTCzz2D<%;oam3e_ z^zhg;kE=bEF1w0B3B86RR&iEzLGQW@>Z7{`4X5onucb;ZNdEQo2HBml%6K6Is27ln zdDk76-R_VRzzenDqDHAVuyR#KqVZa3j)9MzH@IU1bNMFXF$NitLUzY#FWZ`>Ez!|w zd)TJfD3yE$oRWP+aEL;=F4R!;q8s<-F@)YDi0Gv#b8IjaR<2cjZW$9q8J}~G28*uW z9+5fE>(Fuy?a9C0zA>$Lh4Oe&#IO;gv+7oqeEH6|@8rRVZPTn>Nn?G;R8!RO&;J@L zl;QMBBZDPDK!V|{(?nNwOAK%=7IA5zAHSX!uRrxJGOMTEendu-5Ib{uUW zs78VP9-SKpY^lzdxcG@)c@N`B#+KQfW?DV!7<*u#M+xd~d1;6heRWk&&aoRKSZLol zntjQz5laioCw8IcFPrViS-rhW9XE#)fkhXrCsHeU#v8oVAl&uj6b-D~RNO97MUY;) zz0*vKhEUd0eJjz?7)*_4jVGIyR)}Kzbz1?YCk`qln*{8Ud+o_?QIbaYm7*|N^EOlr_X9@HA6 znrTcB$XEoddQXLUjZW13V1w}&>Bn)bKIJBYBJyfhV?Dk;QPdi4t#Q34JPtD!&$+Q9 z9+kYi`k6x0D7UFu%g9-zr1jJs`%!;8mjNP%jNssy zg9;H{Kf|4rsu3Bx?NO7t_O~0)coXb}D?A(Y){K$i&|HJ*)u-wDEEAS-fi-Vg1eiVB z#aG7~e*V-uBaHHUx&BChcN{;$Yyb44R^<}P{Y$|TT*2~btHXFKvx!a=&_g8n z+AvvqNZ19iVBDI?yR)pL%%#2+TU#?Da&Ui0*3qyzt&{kC%;sylL)TYJu=DT3SM4XW z`h4;>UR_;VY*vz&Y_%Un*>aDE{n2<`;+XyO;|Ku4Z$0s0y!|!k)J_&`F&-UcnV>3} z?#Lu8n%BVq@ktbl(D8ubd!EGU^IgIy>brKgtK5JO(!bY8)-X2Epq3f&SF?t9SP8<0 z%VEbGUws%BbKbR^AOANg+uEaAz_Jmyx6NaNHNRwRvl7;M>%+r7GN^9{DL&lAtt{RC zTnT2GuaBVSW{pY#Z!WK3!~HlU*gE1>S9HrxHfq+BtYH%`L}uQSwSj%NR+8C~hOJ`v zb}uRe`~$pNg~g|?{5{A81DsF!w*@R-w1~8{`}EFCtSu$C+V+{~`$`#F*o??z2Z4oM*4 z#=VnD&b>zRjohXyqANcT_bPB-S8-!1OL?;%R+1l{L*jV zja@XTUKc3{E}Zp8YY%U}a<0Uz=-STDc)H$LS&~)U1p3(&m`}d?o3pWto_g+)6ez&c z2|70`EM%YKx~jXu<*u00`~o?k1Ac-Uq+LK4uWB19^@J|p@Zjik3}c>$(mnU<-)(9O zJV0Z*eiamMtbfcl}Z%&90#Rf7nw{c9bW)Y@AxxriM(SclDNf8T#9n(bv;xqNfxBrtf58Y;M< zd5DjwlR2dCvWQ57BnZ$zBl&$13^-YcM-ZTJD16UY$4?2%Exoq%r|ls~WAT=BLU9ch zOpGtu4ox=fNMC*+=&rvV7ZAE-h?hn!96IJmPVbwF0wW^xlS(!jm*otxHUuq45y^3x zNJp*H~eT!{eLjzoc4jE?3)DDELs`O#5p0%52ZKj-W%$G{?jCH4-Ok*Nv zuS$3De%#u;4KtmdS`fbFKIj}DV5zXhj7kHWjR4;yL<-qp-$ye9&Pta9frrlfEPEF| zPscu?Pp>*3+*tYy%*dyIU!%+a`2$(`pm$p$^0VZfZ|71|T$=?`XyzK`x);FC!LdaB z8}%jmFNN&FptZ#B{Lpt+MzdEPlc5JP>7vKHinYxMm_xZ{@4Se;_ur4%bF2=>6|j>X z(A4W)gPqjalD67Nr0coMyu3T0lt^ppdNFi1>z<1*clZBBs(Il@+0*=h;I{u}z9To- zCBUp5wg_BzEEnepJ?!QvuVJ;EE9vD_U44h&2^7*>AdB#aXtJPgs{2K}dx?A(CJ5h* z9izCwCNhuKmj5sXQ{NvVNN}Z!gLnXl5keG^h;)(RMGdlnf;U(KGdh}qGzCry$Ot8q z#kS#}Zyy-Ump6D@^wFJ;9yMw4qJEsdAP(Vi$JW&p5nRdTWgzG9F3DIBB4_1?xMc=_ zdVPA^XWBmIQ#j{61@lSLZcB^0e7r)>w~P-023DQXDMvS0cd@kJDxK3ml58&ne> z8OiunV?tBh8ZL2*F8?F4B_?Dr&cKbjXHgDu{B6sm%|dumsm3|+N8WkEHt3rHu)*fT zpX_*QrPW^33`;$)JVj2~;`|LZXha#HHk+@E8<_vxb^Mn4yfURu$-FFv{^}zhSEz!+ zx}*X~Cne|EA-u-v(=!Amzr_p3v3lySq1yf6Ck_NwI10aQXIWwEfRvOvg8?K<2V74(W;yLu&6e&^Mg2>m`& zGNr=clw4A|JC{;z-K4*Bj>rCVOZP!FY?!4 zysNr0Vaj-FPBV{sPaMM8Zt1h9Oqj%lU^N|LtSn;5*XuKneV*bafd7)TZmw}>3)AZ! zcduY{s%|eQNiew3@6%{!U zJK`X12m=>{AoIXU!d76<3;jwXFJyS2sR5PH`}dOFl~{@b~x_ z7Zg`D(fJvug^;R@bS5Rxd8r_q=_9n3<_(kSU`?M~QkqqOwx45V$L6>GsU0ENn2B1p z0S0=RP5i=V%>@O=lZtaQLuUu0b^;@z6!=`<`c;O0v`C2fSzGVaXpoIKealeLJGs;+ zn1SQ&&tVnq<%);r6aM-F$87su@P`(inJ}-y=MN)ks#SwWlnd|FG_Gfn&F%FYDnX3p z^dbNL?ZrQ;l+%CI&+flbaszE^EyJ-Lb=v>IFvAoc+o3A*i71UDgMW;2d|DQH@uKy& zwkgSGZ1Q>?e(!4`!-R}<#D^d0rR0 z4VKhI1id>;LKESxsors6W?yP#0yvI%=Qvd!panw}4j&H)d>2*8i7aHllpU~zE=1=D z^nLkN;!M(dMx&1nK?3f~23|*JUk~fw;D;Y0>Fx9@MJsPH%wl`J}Np zIKNbqIaR+;D83uavN~<+x{~<&{5-+6K={O0^rF7iZ@3Jt;sY|846R@{aCSBbi*f~z zGod#})%6PrUo6W+)Ccr+sj1i%8eK{T?L^jzt6uw7aXqK#M&?cwB21UHQ~~z-iXcTG zI15y5*ptn{nbjNz!rco+Fvh1vr;- z_9^qJ_0qy+^sl zguV2;Mp3G=e`-~vyb@T7MmW+6Lb%ZNtc08|6?v%v)90;Ea@o)y!arQ9-PE<$ynZ$j zBK>mkmpmSgwkM9{L+|f-Yhm3!YzK<)67FITZ^fuofsZFS%5xdFpfpfWnzEeBb; zwbLA;ITLhoW`s&AUjfO2ePM2}$m@k)j*ZCndQoR4TVzbJ?a+N$yd|WiFMw zxrAI-xy^O%b0=)r+&0_n?z`XbZ+KsxujhH4^EkHa#U;+yQKNOXQC;6*4fdJeVx*3B zhS(apxF1$Je1tL#nJf$L0RMiQ19ds;+?21v*pKu|K>XBLNj`TkPB3oh-y)y&`}AGk z@9pNExij+;#wIi~*@mlm-fhJ?cUxL4)4MGWxV3mH`P^uWHAOu=5$V#WNTnM7&NW7{ zZ@=#=ASLXx$?!GM=`>T$h6VMz`m7C{I{_=&YZAbwTC(mI`j0r91T0=)918d(z$7W! zg(gyNmY7X19schN>&2~sr;cv3(F)31Z|%(+2hLqc9d9#0G5o5s9ObZk@REefjt>)XI zj!fM3l=4Sh9v@DiSWtY)Uy zxe2&3y<#z*Cxz&_`!@S6tXmp8I!;+`+RO2s{*{DKg2=MpC@Frg%*{u9Fdeo!PkJVZ znx1p_T6xepE9g}ks`VdF?Nu~h(^$!k^l4w|VG6uYaJNQMyqzn5@U-MB@lH|C!}4_( z2cF6Z0@sHXgU{Bu0(5kdA+;0_Na#fsA%K9-{7Pck0>L=EtvULOmDIdg@{M=M-R0f$ z40fhKIrC3YGhoUxhCQNhy#vcbf|UUDL+sP*mt|`yx|c(@O$wm#o=Vu)aIt%Le+#`m zeEN-~c=~ zRKx_Ni&L1))xtQfbik6NMR5DAlwq;Gbq$6EMWIJS6Araasiirn7o2}2{kegDAIdcu zUY)m5x}tgubTLgo)O|85vXxtWG@{Zg)$+|X*pCae6_K_uajZ2#C+pGG@J}zfRIJJO zfa@)SN)~B2`?Iyt`qfqYf9W2N@;7uY&;F~kf`xMB7G1w7L5xVK7Y6*V~Vvf$LOBMHZqpS3SUrBn~3~*maaDLY8 zub*8tNz)%1L9yecK*S+K%2m;MAyyHz1)=;(vgoKww+bojQim#&Qc83mr?Q;j(E==wn(QyeUE-JY%x5h zfPdOJDMK?~P0rkxV49{l`@#PO(1v!W1#8vawma-nmDVE<3^R2zp1{wo08Waqe>6wP zZv#&A)ho@EIc=W3`N}kB#U=558Uu6k!HXS1z3s=BP6A*~g==-3O-xFY!R)Ui249zl z1pPe>Zslp;y$gBL@}45w7GBI#ate&RIi^`(ox2}5uY1UT{esp9(ED*L$d6w0@y@<* zp#iH6!!U7|J?{AXCqhaEA+r5`=4j0&6KTcJhh^?bMh`*m1!xCvx5y#-E#+`o?C(1& zh#cklI16?{KtKC|Q^>MHxm0EtECB?l_c4m_h($OrP5ur(95nk8AAt4S47zEcP@+2| z`}r~xOa3Z4PG?*Aj8SfzZO8+vVuj{@s^y6Te-3%DB`$g#{_R4#8mp9gP+G+I)p-+S9Dhb;K>%EI3M2ll?H;kw{*gf%z?5F>2ZpQ|3E8~r_O(31g zBRn@K>^CA6W1z--0%9Q&;e&Knm5lNs*`g-%Js+OERDMA?~sVT2JW<@~gmqM( zB04wjfrz*QJAR)E{%Rp{SfFRpT8`PF#x{vj?@p?kbV&U4GjJqX*c`V*G|4`-D%Kgh zs?%*QTf+SPtHk@or+%dr<@MN{i2m}XB-lSUkAJ9r0pN}WQ$wpa4G2BS$FcQpDY>Nq zdy8W$ZEuhcg&wZ`Szubo8(R(u;!5ZRLH}%WDkgrjFdi$ zCdHo)dDmducjuj{cZBu)H)CnwORW=yc*7GNmNqm{l#W!J0rDK~-GTM`U-a*$-vcyV zWlY8&^URm-p~jm-x1aPo^Gb+E1`bq?gbHn~+W+|PYFv#y)8x}OHq{**}{|yc;aj0-*W4R)?+CPQAYk=CAOSc@1O5t-!|7XmubXTvHLnG zd%SwAHhgM3!E~}|?2G<^?^>cX-U|^!krl(>K-Expz?@btdP8Z;Vzx&24cOm>qwGjG zAWdQpjazic0q2EbL(O{~JFcFs@D{~%G#!eU`wwYTz?eX*$Omm{-&Kb?B;4)R!O4!M z7J@VJ;jgL8e4kPcU$cX@#r+aCd8l_GLvDc;DFs5vSW&=O?%gdJsZZ{``EcdV>$XyJ zdqU+dAedn#FO)hCX4k}QU9f8C-`6dm{0p&ku!)^4 ze0$z6&a;3D?M?^-cFE&1(UVr!vq7$xU;P^N+ptnJLzn?7=30`@b%2)}srOuI)-#Jv z{Act(;|KDkh{XRu59tX&}oJ$iDWUJ5z~Cx`I*fZ%BrFQ>A&`K$o=}KUR&F8J}3)v zt5EGE*YXcCb{yJmR1c=|#*);;q-6r#Dt2SD`*$nEpGnmD4{?(ww3PU|^J=2|SiwG6 zap6U^XRV5F4lUUAH=yhmBWqs)%l5YXY>kuC$4Z}GTs--OZ|p%y8?7s_=2rZ5YZ5pG73pKg7}0~FPmDnp1*D;nI;vTX36x>PSSGc(Mqg8~7PhEY_sV<#u+;s)#x5#_6U01G`9+kuz zfgW^N0>X?uSV7*K!(%6F3q6buyQ3L#7R}PMyDh<%4pWmqF4>p6hP;WhF<}-Wwg#@^ zemz&3$X*(aj4BQK01o}Fbk`wdRKHUQF)HBWC^vSjz1IW`f$7~M>^JiH@P`0X`ZIyY zxX4#g9o^zC)II8V<+K=m5AeG7-+k_-7n$E(I>!N04#XrdG2wfR=>;upupFE=!F0Cr>QBKQ7U4cuRF8>uA2@~$aofG!fy6?-oSwVLPvsh)2{QZayfu-! z@*|B@zIW|}c42kreUb4CkO|1Dt)SnEcqH4nc}R?%g-%I#`p-j&ar=4ekYR{dByy6N zq1V|Y_L!qmk(qGZS7kXFN}$Xv7xrA9u>|b-eg)95CnM3c^K$q|5U3)4BZw11d6X0U=kxqul{ z1MoLT5yfimNQy8D{$GM6Y476oaB~MKF#oKl*UE5kpRWB(2W?+}63#VNHphsR#Bc6*PyD+y=mD`Kv+ukQ)+&Cr_~Hd^^!2RRPt3>Is}J@s z?J@4wL9*O_YUeI8X@bVD{V}ClM57Tyo0DEb?#aanxsr7wJ7>`h_wsXzexS1@+LLO< z-a+3!qObm-uB!=H?fMyG*B^>w@BVH*@I5F877gZRK8Y9dNB)hqeoB)lPVkFmDkjuS z!h$NbeXoobErlp0``udsw0KH58RL#tUNBf$ z9sYEG528cIEncLzWHG5iQ>sz+u7_-K8F#T)=H2N2XQ?`A7M-?;0RQE^vF`g-DjoI` zR73hT8zv86g_e39Pj@;+8!hFbVTb$OM})?Q3N(H`d5uj6kc~l`6%Co(QOF06MHp+Cgm^6S2-2Sw5z(1A=&VjR9Dz zia_j}ZwLdstl>RI1f#8kVIx7W4!BH7?sZEPSIO%;`NK}CSZt*%XVQPKfP!GCy7>BB z=Hd0jcqgw>tJ7RV{Tu$llbNV}UU53H7dCECJ!AWY7mKSp`sC9B*h#Q=#Tr61dvk@~ z#)8^P5WQ&?on<7r@GQPXuy~cW;0wzNT{?%Xa0G5GW@CB-f_#$ z`bd(s1Y1ulSAsVP%@_)@bof)i<5qlurti3$!gW{XZVt8hxu#CLDyj&Mc{E`fsp(nC zC;yeKpO()NwA|S=C_`%J$K4ZBZBOB5fWsAN>c)Y`%S$DIR}p58#Vva-mn>wUk(;1eR7IZ@=Y9Q=gsjFhIv_J{z1Ka|Fy)CU2X^5 z#k&(M^dzZeUi(dpY86aEEwY_rc|+$)G20-4soBZA2~iMHqm;3AiSov{4ZTrjf7lF( zkb7@fD8<;8+i>VqG3)G1V?OwTUQ>R$neizp)~4g$R7%U^SINq|%#Z2d*`^n_&Kw`V z^n`@Sr8j{88L6s%X*$hb3fyc{rT~;{8( z0(~*D@)JV&j(s#t>s3#B6AMG+tRD*PLebIz>t-DXe(q=6*CJG;Dc-6M2k>=jG*-gZ z-ajSUKW~7lWYxsf276hXfTROqvs8&=<|A@Ptz4bkh-VkG-cs{`-L$J~Tf+6=GkIuq z>Pq&bLcE`Fz&W91=$vd&@~v?5Nf=Yqg#F|^miRgbzBMZHQ+GGnmos1yH54{#oz->V zLh$-IdqSl-cO*@KBLd}>X_VnSL#0OYV|?I@m_wRu=}M055+r#=fre`pr8*e z#**HmfZK=1Sdh*+%hK>0Dpq}+d!$qLnoli=9r>W>%QKK zyZtXiCN!mf=M*}%^3X|pTBp-niAhiRMH}yrA`elO*{TUTW6wn}buZcPMCCO4(+`fC zVWFpuR(%a0#X9}+Zw&?eG=%JnhLRh_sR(G>J)G;ZHXytk{ubh|J8Sy5KTjL4#fmMD zJ@<%8`QmdSy3%4Pq0We5aF;&r*)$TTxS;8G*ndkwEQsCT_GfT+1yCP&epSo7w4=w+ zY54OB+EeJa8gL?^SzR>BK$0HndcJfTj0TN#`HfjG(4#2mqy4) zdNc3`xV<^OkfDb=aCmm|ScH=HsD(}l_5_)!B&M?jzkH(G^j@n3`S@R(i0YyApCuA_ zME;`DScx!6$uQ78Z)wjY8@hxGW_Uq}hKblK5;t}s$OBL!&{ z+WAoYaMk3Ow}O^30DABN)Ky0(_xP6!xgVJv)Hbt$eexgw;z%H|RD(|@Yb zRC{xWg_CD)lYzM;`&d)A90`G2B<8p_P?}hXY%uJ`$gap0^GSw+%m~{-Eag?bqJTVb zto*T8o|VJ1eW)A-_jfv%^(3(rX4kl8%A0%}8!caW^X_}Fb_n5F zPg7SN`VG={xk#nQ9U1N1NVhCzZ^_(Z|19xkj#xF`g=G+xv;Fq&oI0q$N!$)84Y+~{ zvYldxbzE{u>-(c4-J^kSs=_Lml1OS+x13`8`x>h{Yy$*DqKg}Y_ulcwN5S4}L$xli zW9@FQ3tUZr#WPUiwQ(tc!k9$Up|M)e0}h>=@+%f{e}Ued#Jj0%!(dXpn95sa_J{q- zlWm;_ugCKeG8_rHU$sNAm0w5?4wq^RBBQb-i^=w5K_B4EV1r3!&Xoh7d`k}pg~VP* z#Y&iLX$X0JRrDUWl=`psvf`rqvfsUsfNu`ATyVBSlpSa94Q%0GZXCS-7a?6|c ztwegs059|(3Rt**g0ykEcJN(6?BZ~$KpsMRI_@3M*?4!{d;M;4VSRJp>X4gho5(zl z6=``Qszm@ERQ<(#6YKX`^Izrb^>c#LZN3yCMOmjCwXgG)CZfUR)I<2sq8_=Rmgb6m zDdTSo6$6w3VP*;lAu{_I+iYj|=JZ_cb^lY#>H4n@Jb5pu>jp7~s~=oHRRc-c4N3JK zdNHs^1p=ZLS23bXi#x# zP@>pJS?jjO5;ZVn_$3&-^cX=5%u}+N2g(#=0Rp{T2P2Tvk$r(X8gN@JZjXR{qjr-PBnC2^+uuI5}Nw}7)7KMh!Yjkj6Xn@N2X&$v#4G+$CzJ@ z5`|s#pLd@D6^;caThB269B(RQW&d(wMFXgJHv0ZFOg`$&X@NK5d ztLcRZ2UhN0>Zb`!2&I#o5L5zecT^*9MIc! z+vD7nBYbBb!ree?n8M8h7W>z~f5w0NHSa0JOvd))>qS_?+*Nf^JW7LGe5$pb*6ayZ zqxRZuu0m@QJ|SyPe%aJHxNNv68+2O2G$+7vZHpe8 z=9@qaK{w#k&7B$m8k4w}i)YD3!pDTiW;|j(+tiy~oCosQm6!w7a7)-iu`fHaeWGFE zaX|aTur}9en{peB65y12Ox$(0xbt#dV zkYzcd#Hn8S0OZ&^IoW*vv@82aUCcn5>6+qPD*z#v7DN;88gF{%Z{A+~#pG+6Y0%v2 z9@N4>=orfDHY>;fve!)FrrWJs;Rbmjg!_^g7Ei+KvsmVg6;B;bCLn+=OQzi%n+Q4J z56Prorq`qeFQiUg@jch(&;LE?6#sOxsMFMV&`89;Rwj#5v?IO-1$lzwaMTxCBX_;& zzru(L>YZ?!{>^c+6(g|BW7ff%c67^C8RlR&(bx+rhQ*G$l zkuwz%S}*kO2;9>Gd$Q|02XlyER}MrR^w`F_~B*TndR zu-Uy*dk4wB@qWlk7oz>2&nqG``OHwlZ;4_TgT1U+55%%eRS(1S_gt^&pI*XS-kI&a zTjGIDw!E*IzooQ!d+yl8na@#3&1v-IwWzQG$F$lPj0Ps4D0<@=DoY0zXO7EhNZ#pq zqrD48cr>J`xbJ(aD$#Z+y=FGaDHAoE#z5aFqvKo6CNTKaZsdG=nO%a^rFmlf+| zRux$*v9tq~_y2?jHs`VTS?Vu5!F}QHoA_x?>qbA=15xJc%BjC}Pq9YEdJUW0Mm?Dw z)a?yvH$}+pN)ld@ZlO*T2z-e7LCw8U#%nioqSpRYD*>?+2Cl!jh!iL#I_)*JZd@;AC%33V(XJ&J1`C^8W)RVpr<##=y;A{JLjgLf)%3p2TkE ziNtHr@f9r}!zeILfZ(~G^q|3@=w~cvFeABP3=mHdhaYdLPs9NhfThr_;Vj@mP&o?$?9D(D{n`#BY`UNEY8xCtvESIivmm` zeMe8<4l&=QbdnZ$C?LEZHA!7DLFlww&B03w+QNSMGo)GiscNqud=H_occSnaOZ4Re z*x0)z(I+OD(_3@L=|w>ZFaA2UIXTR>d4`9evA^TimMZxl2&;#ukj?xNh;4GH$18FA z-`92F?23uy1y>OwpFRsq1loEr4!Jq0wxwhY+PjUnf}v6`;&QHQXnU;Iluuw3WVV)Uz!4$op(9dNM3a{4220>-XHZ`RW^D&D#2VO- ztUAkIie8`H&e+6@@h`GYZR*)@h+Zot9$-?EBy#&JpMznS@MxblDmmnH8ywPozf#IB zvy&`y*spdo3d0Nh)=6&TFTQbBn}p^%RAo(`guaqZ_*}_-wrb=HIz@Mk<(4FgeN_)NkIOpo}KV0D^X#@Nj;71lN z-fYPO)-AlhX@hqNZ(erxgP~)%BAni2Fr!T)0537{SdFpK-o08^0!8r-_ab?$zV5k| zF01D|f#@vkNwTsx&VEg=Is3e2i}IS}sy)=7eXk|lU)q7p{a4l=BRPfh)ZQiSU?NsZ z0oZ%KkTP9fW6*)!3PxXYT6z9Ad;CP1+;&4G!(zr3@KudtvCNs{Rg^aaFszO6oso7} z;LIkvDP$Cik7?Rn?+gMs>Ah#XMf>7o=t27E?bR+fRLk~g9XVT=R=3f=-0;H`v|&Kz zn(VCYch=g0qjm*vRS;u!QIR(hR&sXgiDtQO0G+u1X5XF9v>Lq061^w6mlh$zIKH}$ zuhkfk;~U4&tBh58Qjr$nTdYBgom$Vim`*7W z_lJW#`+gL-SF+YX>ti9WwpXTeCbkY58fd?Gi0Z?;O&$f_PsVX`GEatRFtYgQc3qA_ zME|BgO3nEap1utlh#9wHnIi7jy~NSf(iVH4kt%j?=4GUrw$JaH`pOVK`Rt<;HNPdh z1o4hPa^zCK9`>LP>&>pB24d6^b~7JtDfuQAYhsp0kAJd`pb%pWk8;%J^T&0c7`uP>*LZJGx69e(V=zkrdD+=I8z-_AYj5{D`bn?qnQ!rTq?HV-2i!~VjYNQ~C`rF8F~5!7A6rQF4aY=8aR<7f zco&-9uNeAyeysBBM=S06%IaV?)MJAa{xC9At+}PT9k?kHbAs<2N4@!FH~B=CTdgHL z(_<~B_s7L+6=KwQ|7*MD*NoRN#|XBWqJB$3$n%*SKkIwWPOt7h5U@0kKB?|$AAbiZ zt^@1iVEQ3I?3v2wGt^M_Lp2C@)q{je$;vGD9SiB;2e@Jipp~;9|Mgzg#f+`O_j$~~ z#DWPXoG>?HYDpfBB_1WUo#P2rax#)t(Ck zKA8mw@vh70N=7V&osu%71E(YSsNLn=(61t>=V8af|7OI8sp`-850U$Kbz$`W`^p!{ z8i4R09n>F=rFSAu?lQCPs2Q3NP~M@J5^OT7NSm3&y6x-eU*HKtK>c+FdY6snB*)Db z?v3C#fAxQ(@bZmhW)=T-+xCOk@KAGuVqw<5H<)y>6wlDdx_^$LRgUL-gnZ%D`$&;H z73RV|>8dXmHl5kZqnZXiB!Ps}4c7>TXts-Xh6ufvo(_rV5M_s0`i(q2nz|c+8pc`P z(g!jRZn)>#rS4o4+t<@`K(YLj=LHyRsb`ao`6_@lRVGt z0*&jIWN=|uVEq@|2T&X#B9or?729=YcQ}GSh2e?(-3#0rWZ165QShKW2hT#%}A-=N)XGPQI?sHastNIF;`jxHVce5#{CGo4T{ins|Gtdp-5$TF>?6Zg^TO-* zF-^0!F~ezEn7{%TFx5Modpbt;(~LGa*cseimyrOpzu!vJBY%LoxOOUl@w+a>z;#>M(u^6ZtC2I532ESO;HObA6H2IR4~Td?Eb0a-c^ zdOW5i6^?e&p)VQYREobcXpDZyn?n%6WlC*3wAO}~wxc0kPd57;w=1_@(){oholI_0 zjpf9C|1cM?9?vOLqSunkY=?iT_B{FcBNeC^e1M#MAgqJ9dg<5{Gi{@uPwnZjSNoX0 z-nNupQetGsi3PmN4!H|n7t0EfS=#sqhenu;4dKdF-UohC+>x@;XffhVz>M8;NjNQ| zb1%a#c#3*G(OT#STQEAf`r1S(NE6>Ve=TQv!2t(9P9`&&Nk4QwCELx)c7A;**K_1E zq_CJ~eqX%Xu{lpXO_;cJu<8$rBU~28l7=+En;9BYW0n`BQn@vC>W!aAV{8@)%j_M? z1rg9G6drpM0zmfBuQw@sOcZrCD6L!x?2ghdM6v^WDSNZG16?9iBRFI$PZxMo^zcTC z9Ov8GN5B(U*qoj@Z1(0B@FI3M(+W<_+Km%|IvJCG-qW}w*yJB~IYzD1?x6KqH;8I3 z9N~$?L4$j9FOLoGi(JuMI%=(Go(wgOG0+LJX?Ezn`7h?&+6XG`qQrcZbCfC!VBWBH zW&yM8LDUvWlaoyRZjabxNq7KCfdr0Pnm*wo2Sj*iDiv}qiocJ??PV3&OVSY?u}umZ zm1dIKq&ZgZ%An?J?_t zGi0*hUqt5ZqmZmelo4;=c2R=LN4d|-y?xpDQMJG-5&bbQ?u(J^g_+k#&OfK6Wd|OR zw7+pXtV_hf=v@ebe;$K2*J;!IQdw{Kv>V#%G!)Z~H`?2fRp~Ksr#7s0?i7466!ah_ zfDw?FnUmSWQK*tm?wj6>4m|UuNoF))GV|B=ZEjuI!RPsrUt6okSM$Om7)GI?pA}u2 zO2Kj<_L9B?p^3iP8RrvP z*BYGDJWx=(DaX*$CPCS+RZw0%a@Hu|VAOWvlT_0}(9|~3{|(M1W#i!V$j4FUF;J^+ zR#!yKN04{1C(-aR+naxTX>slB(VNgsZdLRTI90l(Wyei=E1xldJ zNmt0aGyL30`CKE&M5f@^(SiQci+F=Nh-Jy4>81Gw7ZbJp>9yePh#0`>n+B&+=adH5 z@TZz+XGZRBe#$ZiGPe&j@?t-|TR4C$i*q}UKw*>$;C~+=AFUDvV#7|R05f-Mi`;h( zwEZ;CbnY_JIiRI@6n}wzPTqJM-xvz|rkmu={-czjnE^kU<~MGFVqZY)Gc_ii2mH>! zN}))!pr3&j^;_;P8!}#b)R&en=q8n?=Eq6~4 z?|`d)E(|qR3nsRe()M**0FnPbu)F$e>?0!m8%AtM?{Q`tsH=rcK1FG;IkSaR0uuQ{ z8e@)yT7Lh05=^B0^Axj;pkM26-O3Qm-3~|Fxu10#>|fO=xc;b~>f91b06sr^Q!qq$ zn*y2fzZ-jW6;2GN@KTbkhOYGCy~-M&IkUY$=I;etxj4Gg1#%Bg-#yI?d|j}(Dv`>n zA!>$_?5=;buEpN5Mc&ujG}>j}#4y*oWw*X6It*kXUTciX`nFF(t5}aI za)W&+v9W3JETTqgE$Uf)YfLsUSxFsoiLA3T5_du?vF|~_`l%*SeG1mGry{$!sK9Xz zSQT2_r{zi@be-dbIShBg+9w%O5Z!WVEW>((@-2n{-|<+k3@k@GP_ANAk58a8z5`#C zgpwn#TVf;G04&)LmK)^_DZ2C0LL)Saj=;PM3Hv` z%{^)Sw7jPoPBe8G$CIehUtXXVXOg~?kI#Bc@s38+U(TKmM#1 zqU$NOtOe{0KCZo7RgG-+Av}t3-5hMFEI))txRqgcU0Hs(7n}Dzek1O=Y@GCriKzA; z(k%oWq*c0@Q)kGJcSD`=jH@-NH(Jn;>;w9!BcsURgnu}78<6I)HDGXAP`IrNx2PH< z1#+c+tYapGf+x1#jj#K)(?;~5jsXz?xPXWaZqrIxCA*9;`2jEgWBMR#Pd@O)^>J|i zto=I3X_1DK%CB*`2MtK$_sAWGEy2H{DPfmqy1gm(ofzh#O3Y@-w~jL1wbH(7-`J*O zKTu8V?)HiG)Z+v$@MnL8-@^AVooUm*<`zr0)q3YC^yR$o&=u1b!S6J=UiVCtgW{=VD+cbw9co}}rhR@xzQx$^k@M;Mw2YE0@wAjv-5ZuU`uHFaCb5wEB}_(0P|I}m*_;ZW0tH9qX>^dil~ zZ=z|e0^dHFY2UO|NnBktC+l8@`z}n32^ch4bN;_GLO&G%+A_c=Kvf?~(PGx&+YEQA zs&ku&a>Ch}Fi-T30}$3Qo5-)2JsQ0z;_iGl3jX<~Z)tD)M%)c!cv^vbX3aZtRDwP4 z!Vkrz0t7kdm}&jzmqu7=+y|>4E3_sGsYR^aLKotm13Nzsmg~lib0t~2U#vK3@Vxt8 z#fw9j*`*4L;muxyh^~=o(?kA6TJsq8E1&R+^ zaHXfHQ`7=kZrT$2M+75~)_)k!-du}XUlVa~Zy9XgtrEH8;m3fFxoxyqZHTBQjLzol zFdGxEVdAJcCIKk{+dL0u6#NR@$qzPXFW)?9icSrjc;^zc^`w+%(I?E6-Mqq0Hdd_0 zn{~`_{|OJOMUwXDCH4R?PJd}A?R|~2dP5Mzl7T`RUd@;W1oSfn4&O2!#;9@YJH5~x zoWDtMJ#VERRmgF!eAurFnX$hN)`xN{pWK=CkbEe$YK>VfTBKcFZk)i1_Ak_kiqBo9 z7Qu#y+HuW72>&ZDheY{AS2N`ws|89&+4sD#*;;RO^&hL~i(Po@ z1wD#F8V`#4jp}=UG_ayhU|_<*9{{10QRvjQQf_`-BDV~*r12(jJE2YcNmxgiKfd*P zU|#fdBUYj>L#BFJhR#!nAj;JLOKGK<6gBhpZk60Md=xaKr+-VYRO}nE}3GaaG{kPI`I;2~0Cedz_#X zXhBvjqt2Ee*j~M1ZMyYXC5eCuq2y+EHCW<~uOvIZguK8sw#F(`dg2o{hT%VVJ(_+W zOUMG;>n%BbAJtY4m!4x?mKlY2lW|2-?W*nut2QvLL}!}Hcvr%l$(H$8_B88sNrzx` zWL-+)b)gWRn?Dj(JZ&>~yh?OQo55Y~@viJEUhF^TXNaS@JJ%ANmYqF2!e+4j%wt2S zc`?kkPOcpHqmj-c|G3@aGgx28b-F4w(xv%T^_dd^K2Fs#ZnJ~29%aFmXFiGqVhj3| z5p3;<-MQUAkB(csS7_Crtj0g-UEqF^#T@vO^XQ*fTkE>m4HEkxP47B*qTlI($Z-0d zs%NR1BT7_iX3H=z1`5G+4KC>!^n=qZ^mBu1@91ye=m6|(N++My-ce^x_NmAvNL})q z%+zT}-^f&{icYt$HzRx1@mhl;9{qY4M#puzEM!5sLx5Bw>L;Fkc@YV7<)!%Z@=we;%+61~v2 z7Wvfj3?|p^G6;OHoKd#3CD#6qSr#Kg#Kvfh)b(ras=CZ4D@AnZS+)FURvTM8)9<>v zmI**|^+O`)-b;<%fN(Kgzz9#V7T3O=mjDUS>8wWnnrsk|?(pfaZu&0men?K3uk%=? z3b{Gp(ad?zYp@P@Gr$PfXeH(~I;eQ8st6^ec1fGDk5~V4wH8(&#kO^^yn^RpSzC{Q z4C;+KKlU?FbXLPF6~ILDV=K#DS|tL)PI2ZYO33dLV0;2W!kTh2yaAnSh3H6EQzmo! z3@f%BjBmPf&iMx92ejM6Pl+ICL4aCTZ|Yt40Bg!mrO+PF)$`GRgs-nB#aeAvA~ z)_Mht_wxdS?F(ZumQ)tK-SRLxElaOuf~ZKfs?#y~30Y@T8s>)Mv}Ww5&boW_Mg*R8 z!Pi!XKV<3comhfmbQ4Hk)^)nKy|ZGxP2dv-yzYLioXWRU&9;0zKdC_Ni~};3_A>J{ zPNgaaTE~A>$A7shZc^xy0%%IKzF4SjSwFm)Dsh3{zVq29ZATJouqE4Dq96pSb;)>z zrcP9W!bOhe*V$6{AN=%nKR5iv4qJ&&@I%Rsut3CS~m~&6^<(8D$N59n6<6CS4 zC?jL0Geeq6eAyOE1eE5>z!%5_uBLATcjz_gR0hcCcBy}t6G;)*g#1RI*vhh=&tdhVDeME}ibqB8ZN+^z{1N$Zg2(%P{knz>*rJUSKwX z`F%{rR2NJ+KX@n%$H)C~UQ6FTTNl4`E0~J<=OE5J4k>V9Ekl;Jmn;zRD@IoUf1VjE zn&!*+QWUq1+%xxeXuZ<84Pn1uLk&=*5UJ-O2{yg#B$Yy8 z4E;*jQ#a}a^lQrxj1dk+={@@u@d3}(OqA2$L{kNaDE3Qz;7Wx~Z7PfPfu}rP6iU3r zODFsOPI#i(WiwBaV#U1)^@HxE^c8s9ZOAZbJ$=WSp(XdyxCejqJLbH!lA%j{ig7O; z8|$NRR4b805vi5r8gLSNRro8^=;N}4jI!OWdc(+euWX6?`CbFMw?c!5^-(el3k8nK zI5T{+O*u>R%+vz?$2%m|Ok~Z<&c_4JUD=0$_W`^B>e%ZVwj4G;at(a1D;CRfR(k*#Ac1q1cJr9k+d zyG*LomwwPSUq(>;%M%%(^p=gaZpX~E((P6)ScK?O$$eV{@P`(bqCksBm9M^-9Eq%! zL-EOTJRW2%VY&T*ki8hAldjQs)BR6p#+xTlGUV9L&&1eL;Ek3pJBX`Du7 z%)Ot=7|0yrf!~*>yH}6#Q*$x*>oNT5l}~r>8<<55dg49@^1k0}@f>niaV|BhV{er= zxlm%QApDe=#r9LXulujJixUTFfU4JPv2L{tH#2A)F>JoG9|wt;g`S*LW~4|0WYJ%a z0s$+I1}7>3-@3;nY`ceu@xL?7zxg;Jj97?`lnMBv-Qx!8r)-fRsUOQGlZvH{y z0$d|NL8`m$Ugh`3>EPdUYwr5=C+u`RJ4KZ>LHaFl?6@;NkskJE8g{TsJH(T*UIoj? zyj{`0&HrN`t^%@~D?pToj`<=Qh}kJMQ&rA9YTpi|G~ju%ihmg1YH>ExDLC731f06N zKj;%nwWsf|7^genT@j3Nt!z~65feu9Zl7-E@{Q$);odE@KlvwNNU?$rtMeaY0^(u< zV|roTN8NXV|9PB~sv?Ikqqn9CluYhi>zvZPwCq|QHzAB@)Ar@Bh0h#nz*PP6w+4a| zH<#&ep2R`iUm1Zv$Sow<2Q&?&pYn~Mrb=*s_D=in;LVhdZGWytjbd5 z8ca8sh2wwCC!H7B(T9V!K)%~?vWy##S@#!lm{M*hC_I!&jG8OuEbuLSqU73+xlEUp z>`IO0LHJXEm!KAv3UpQ{*sR`1jvPVNcnK@oo_dLY=h9sl-s;c@l^VSqbsp38TC<*= z+b|5&C2~lqE-+S5vkNRP5Zyf1LEp7rYhRW4^nl=V6wU368FjIwn_1H)9xPT*L8Bjl zX%lyh}>d2`1Ps&mmJ*`|_{+n?bJdHT7UZzq!1a{wJ$cT-oJAyS$Qlv|SCcctJ zV?-*+4%$!*i*Hc!{&Q!8*%t;sz*$1Bm_>zBv7Fmh&Fn=COOwx59g~?XJU1c#+FiY6jPl&jn_zuw-5hhiuz9O!`2K9W zw#)V=fS;r*XsTWj3+K7)dP{jugJAxgpc#&q5%(wa5vNyssRW8x>h{$;>gyt>i}yFI z+z!zC;skKEDv#lk%&Yv;@~2}il|7Nq0OEY! z^wSguF|E_zFsHgH4o-=3P2VlPWc#UP%B-4KQqF*cC)Oy+SSRtBqqCOdv+~Cv05UP77)a|FZZqBfxO`lbB1hIQ{WtcF0YJcss_Ix5LBl@oO&ITMp*Ohu_vOiqi0nL?%_b8KPORFbVBm3=1Z zP+2B~Y%`U8n;|jw5wjSBVfNk6_xE_*f877v|J;xJabNH2x?Zp6EBj|$tA2n*(Q;#} z#WA_H18bJXaK3DMJ@7P1X>dum3j{E@M4+83aru0Z%K3uX0OSBKLkg;;IgsY|ZCu5v zY;wCY$c0Cb*K0i;rv%$Z;?EQuxJ*<0+3s$u@w_I&3R6_D)CGCEfT`|dHnk>M$Qx(J zs}WqQy!pB#+)d2m=qDDP5AI3NAXMU=9@iB9cWL-FYHnVSGr>Sg9gn|wV8E}&hY*@t*?L01b zEW}GTnA#;TZt3c30KA<}H62Si%KRVKV5d$_2U?GPo<4C;%NuNObX#6G^fkdb>5W1jVbrF(8#t1^PNH)VwN!aem2@{{ZutuM zhCfNT&pTUcAo+D31anCqaHf7mEoF*sgX0WhGrM_jFWKZ~D**}EOyfM1_v)z-$$jio zY&&pfd_3a3)U5S2x(@NxCT!uCzbtJy?iUNDYjRDeCL)Ca`Sqn%xzi<0X#E?W1kxoy zGD9LabJ1i`RVt0(!BIE+0NrMn-%uxwKd;7Tyxj1--)DCGA2K1yExj*8{wsSKp30pGZM{(Stx_v%-`)<>aSlYy-9)U931X~T$oPC6E2p8FKC z*z2Wnh?Hgc+QUb{5r^7)2RljI`%-Q`8?YhZCw^TSBr4>F!IS&2dt;XCH2vohW5%UB zQNQb$vH}F4!o`$0;owy6#KCW$T7VP`bS^%$b9kq;EiZ1Qs*r&7&gsl3s+>Z-~*2IH)bI39ImwJs0oA@0Ip;T{H9L@cju6{YeuO zRb5oVhe65AJIK^K&1dQ7YhSi?kB>RK%;;5<=|Fi;Q$+bvm#8VQ^CQPe2)uW%G@cjWLIR z+`nW8@P{a80m|9U%yo;F;P6gx8*fz((Grl_6~JmZV`A!U;HPJGk+G?n zAkn#Y#)p4J^1m$`)z6K(oVb#G(=UCM?N;qO8IFze$h7-mA?5e^tQ#=cN?)BIadi|b zg;}z;@b;LmEEuM*gTxMprVPcoj?2u8`G0geX|-b`4@D<+q0SNTmB+%pEdt5j=9%Sv zhPc*)y3hleS#jJj*}n>LjVS0rjK3=*?-&Nx{gaHVqcLVn?ZfiVeEKFZc_Ke3(W+!!5%yet|Dja_iN4UF zIre&{e~Wp0#Qiiq-t#*0I|e*_(bhDwsdEphB93njr=D7EkCRjGajw(+lT`<3l0io0gTs|$nvfh_q#cY1S8!7oF%cX zQ~JW&@~_oRo`A1EYf55pOA*@K?3?XJWRQ*y^lRfQz9AqR)ei&2!|O$aX=_av-!C6A z*5`;;I5320y)F^lBj!tqrLWMlJ=$5oe%ep}f*(d8>lao}i=NFS z4B~PArINz{;T1i|Xhu#6kZW+s%;Sd>ikowSBOk0#@InHVaT_I31a68JIMMbk#nHQD zDiz=TV~O~aDBhyDmx|lk>J<4v?LjReih#V|VmtB;@D<)K1kD=lY|R0|uY zP3WL2+_)z>?v!3GF5h7$(_3UJM3ileS>{e*?D*!J#Dd%pcpXuciuq!xvWDNjG$ z{FR1$fp_GzSLpF&6(<{Tc`$*w%P29rMkdVuNISD__)N(CF3YmPL$q@SL)(U~Rj}`m z{UBwM)-Ibr>e@FI(+7!Lgh*>|>haI~ubUkQ9!H0>Z)(;QOREAGCwNMZ@rT+Rw6kcb zhG&j`!aw&qZq&C1zoH1IlNJnK9Z;|9 zI>a@uq{GlRqzdB>qHS0~aUux#uU|zORHnUzubI!ZV&AWF@vn!Lvf@+-p zMxJ^WAam^pMwMT{Q#S(X!W`$f6;YPO6US|D0qIGxma9emkJ@?sMhnEZ=Sj!L&X%~g zZ=_n}OJkbqjz%l+!36hbe$Kx-NbixWNAA0bjDK7M zBbo(2dmn*UO1~_#<+Xk4=e(ZNaTsUo3i9mLwC}Q1}NNzq;G}iYtwv zY1lTco_`ur$Jq zy-Sa-;1#sWHaG0u<^aacf?~7<1yQYk022cq4~u&=sc@n?-3N5l+cv`_*Zd$sJmBUq zkn_=Hv5M^r$+ydnPPj9hm>*hJB1jLb=?j%ZW7cAEtEP-s#`T+c!Dwz^!2D?gcKnaO z_(x|7qY!Ffu&@hBU+ORE6$~=W;;(thVoqWSRf0d1a0kD&Z1PdjY^R|$2rc&a zVKAoG((hYTwrS_R{Km$ERelX2m8)!)-I8Ez`;wwc z5jR?9a^KebE+5aIVbA_8PLRr)3>8bkgx8{Xf9scw5Ip{~;bK!Lx1$5Plv)QB|6hUf zRXda<`I7gn=f3JHx9VjuArSjkeJV>}^~wcVF!?NnTlwCs=Fj1szBc!xZOnVqww70i zY%7PO$bj>;RO7~=PZfgyDDAl}wb0q`9h3O1c(Vk-j&>b%Z%A`V3t(9^YQDj6IX@}l zF|G40cDr>!kQgNR68+=|MwJqYu<`c$dG%@AXcK9;o}(MAhQ@|?zM+`C=Z44n2ChhD zfAI=C@@=lR-Usv0xNop3?`WRDeBeZjCMENLVO<{~234F!1)D@G)aI{&<` zKC@ECKOnPc9SyjI$6c5GEvkkFEe2}ZZD95*)0yrsQ|jjGs1o1s`+sDa%%KN+EFnz1 zz+f9eA~wt>chptQ<}uIhwV6h6>_t4o-^mKaJ{ft~&t`~c^&iz=L4g^x>Db=|!K8*v zeSj1p8U_$%esS1v?cNNT%-CY+uw6U?>3q2D4ih1J6axuW1GEu(Wp*zgF z;(F^BrXyPZk073oDGz6)nCTI&6xRioh5H_+Fg}&bPVrY$kWG!$Q=+?xi;OX!Dch^2 zgyU#RkhBc=OSSX{Mc_-TkUYXICyjR_n3tMx*5g)B81JH8vILC5@DqDC_nwKD{L!^{ z^Z)WR`HYgoLdU!*4p9*IBAJ7ZkdtAqjz1h&KG@vdTG zY~&GH#HLGd7|-(>H1{?*Bq3_8oo?)zwPx`@{mdgroIxN{?D%g2^&t<1+{DRLg!Amr z!9z=bDA)WDyA4VJuR+M%6Hn;SN{dPoH%16auEP{nTLMW&jgDR-On(SC17BpQt|&)L zXXTR{n;t9}$t^+Bm;`wS+yS=(7;}FCZ!L`HH07dN_O$LVrO%%OEk`QBaU~bPxJ~~G ztSl6dCDpK(nawN$02K-Esll`r4(4g4cJ)xwa@!xk68t|38M3JwV!Ghe9bR2ujUH^(VRQzz}W86mEJbgo>uoLoz&OFw<> zC(D9U4gA$%Va=O2vzenQ%PGcWhs#{|48l3ZQOG`*ze{Yj8+_DG@RjdgeBg4zlKOF7 zkb+DaUM5lz_0T`a&oKC{@^@LlDPE6xMuDD9K3&+Ye}O7FI-eHIb!4e%_$HPY^6%f6 zD}&_(QQtksAb)T6D;vpknMK=LP{&tCEQTL?(izg(AFr-1u?cHJU4%8?0R=zu%-1}^ zaJ&!K?68sVC{(g~S6`4`qZ8Gy^uU*?OyTCCSN`eV*g4`M1SD15a!JE8J7dW*ta&mz zn3PjePwY&jzxO4wQOb2vuiHfEJ3%_trzMHz=zsqpejtfBNxN9TES}kKWRkc36s=F)48vdy*SG6(Fds) zltNJEX(qNIba3nWhK>bGX@}erIcl>A`6=-84&B=*K5~uTat?Go*_TLd=UbWlt0_LK z9p~D>!-Af6lnglLW;=S-e&iBrJ06L1p_KR{&NEG;oCYJ0+aBt^Ahe5r@|M~2FK zIPIvW>`&@7oo1-2be~}ra2N8F;3nR5eqSW#i&Cr~%kbU_Q(a0M57v0OuAst40q2f9 z49Z(g=Z1)CHT*n8Cq3H3Pdcc--o{gXLOXI{l7;DTjcj&Y?wqZ%f?Pflw0s&&z_>cF z#;>V^6q`liStaG*yrwVi6cKWzH=x1#gE84_?zNC!JzhVd z+cqcsOb!^ni>uba9!{gFQ+>2`ZFXB4@a5!yZc^`aDF{Egw41~d~#m`?-6{#6E2Zxtd zXL{Dy?gyySf0gBHYTj_TPZOpD#NaFqdfSjy$0^}=7Dfu{m3eq@-s-N-HvHmdKP@~& z4`@&2v^~4F^3+Bbe)GLy_0^TH&8_;FD2rmGs2%I_#8WFjQX=o)B$vKoiY;ae)wzr; zQ|>5;aF6v{h5X!>}0u}zhhKmd-u8m#bI8G_5Qrq%%`=qH^14uWg6XWrgyv2KckO@ zBB=JroC7VHS%AGU_jemj#NQO}`a5jC@AWVDH{HEnRTq$t3t5|v+^onWIgUaB1CO1} zJ2{>*n|NNGf}D1Vwt#5Pba^P2JJ8Q5`tp|CHJ-hD@pcn_N!1_~W*E@&#gY^>LbJJbtxNb(^@L8+IdTNHm%&y7M0Vhi)r<7(;Y zU{j?R@}KlvNtH=5)FwZUwYKFW#a-(NxsbK^UO%>NzOMxIg6%eCR^Z?v=0FRo?PpW- z2=WrO5$lphoHBrH6M2<)=1=I~v`jXBnRR@4f&bN1`SYwA+x~@aAw4r(aGU_(i{b(YvWVoG>UwNXA--Q`o$60$~=8aHKVPzR8 za_VOnWiRxwjXDvU0XKfN!o{xc5{AB zh-RdQA}cvP}Al`M+Prt+W>Mr4!#6 z@`7xQ+ZTp=h~Qx?--Ow=DWLM6TU2fxu_2Q%^#L6BgYt%_cSZE+EAV0USsN|zg<*dU zp%dq0Nmzbkz}w)+7WZ0o?wtC*d5~;7{x8QEiKFNHM?Lg7Ci;_8w(>aSbxGF+7P(2D zMvO1RJ~lgq=G-_^$M;}F7x=FXX|Ln$F68b_j4}_=_Ol8%^Y8viuhush9TdHPpk5LG z7H@c=Nj;QOH~-*$Oyd00*5#zfpF>AqGB+4u72p30T+HZ}Hcza0z6jCs{L%N>Bb~dh zM25eSo#^lZ%~Jt?wnq6oxpG4SDwXq@(0Ge(-F4I$evD2!7%2YHeFMmN@A`~`0j;Ns_d?=r(09aLyWXm{ z0HqrM>RFOQQv%AiaMwX( zl=p{QV}*p)hgs@fSS4h2oVkSGjCG1V8gl)&Ez*ug662Q-M^nKSI@-m*ZwxlXUhT+U zDzQ6StzDarfvkRNYVz5FED}W_);uTQ|Bqj4#s6z6@(Bf24cT*DsIl9`Y%#mlru1X%k%8u=UMkxm%UuuFF#HOWq%jOY7s9g@% zkrZoIQA^)DxO0F(5iEw{P`Ud)kd+qxJA_^~EA z@>Ugh{wf*dqFkpK3aL`o&idUtEMH{GRClbj>^oC3Mm%6P8V|P-Gs&v%Dw~cq8_an0 z>-iymX2p*<&FjY}wuN?9Sb8?kGmt7a=7r_%(j;ey_ks=ie8_7OtoBAZjSuHY+wVmJ z6x4R-3=&J(wED~3Ex4KXaKa=A(UZgHrDdS~kdKoSS$i_x109HxPqv2qZoNxNV9;?Ny)dx%iN)3 za5oEjh1InKNG;Jx$H`D>2oN+?l>LOp5**CF89)<1+@$JWE0XCH#|uKG>gWK#!HSJgeugFv$|suzXuBbQ_X$92bdptK9XKgeNZ`1Y(!Td z>j{Lc{QLg804;pJ2;4{eZpVd|2f(n{=3QndV+#6YC@7h7W}Hxc$FF$FU?$XGsxDtu z<~+#KP!_jGjzi8g*MHVu2wEfIJlMcrtp&iF<@8!BmUe{eD$@>y(Y^Q+ma;WL$BjqWB6Yt=wn_LZCin_lzU-XL@H+5h!kID(jo>O0-HN2*v8Zls(NX<4!>z+YM{(mzOjl^ zsJeGQazj<9Fr@s+lG9V|Tk$EJh0Sup0=u3haSg26kH@>TSC19~b_*^ghR6 z=O1n7q-z4Z4XOao{5Y4E-jEreCWA|4KN_Z()(X@HU_ZI9bV09Khu{3Bp zzmkgZr^M91C2)uy#*SVROT6Bq(VmdedLbf{T(OPB!oMXqMV{ zL$F76QC%|$;_A(pAjXcg)N7cBAZYB}0vE>?_Qn{OmIW{ScN1?|X|V;qMb7#AF4Mn> z2S*|3N5xZa{7dd;|7O{I0KMCN1KVErY$Sdv+kIiJB5yU)#NBh%iVrm3(CqplStx~8 zzpA^qgz4(5Ke;e!VbG#9^5}JZ?#+F%GHRA^xA2mnFs}7Tw@q*Lm4%svoDS2KJ8x$t z-6mzKpT}7x&LZsdhNbyi-V>X{7j*C(){yUETvs`r@dV?^jHD4@g}@T|J9YlnmAPae zvmj2;Z-CVDGy}74Qitu7rj)Fp^s7YGTI3bDn2V%rLdM> zgXRR~(+66X2kvo<5?c!3nL9Xzur=RgJIWHZ=i|4e?eOGk`n0i^5T;puR*JP~7U0nZ z4~0}>S;V8e=dn-Fo1#%MBQAi0o*ymnHTb1On)B{HQI7sBtBra$w)}llv9o5AbcFj} zZ#b$4J%3v91~@wnopx9rU&`8!e9-m^puUPZbAl`{&l3;=0e_(pMTX#3xtb?%k$eWjCaAG^H=rjZGBMX+=;EHDa$jUEIl#nqX;eUgS^mf)e(8j9{w)L z+mAl5ltOEvy)$Q@hfqw?!v6N}*$Z;E7xyXb-6he|y*~CgoY`$74MoouY6UNCn`0Fp zE0CinA|#*hRIU>S1nILRce$1FP@5^fQKM6&qHB0JJZ#XSU{k8N^Es4aYjo_Pdfq90 zk$ee!BiVfokiyY5ei6K8eq-0{#<_`C#F}ZORpqq}Yymf=;py9X zHE!M1Ob#8C*ERPruAW;IQZkjelf7@PGyM1x1S#iDuLJWd?qD3*BCQYK>VWsh8T>#>$EK*f#B$NJQQf`SM;&++dprH}ZnXCFM2F)f z&9_QI%~HUq(~>5(&BqR>TV;HQ?+`~7z|QX=VTJ`*9@?NHHVmsu2lP~>?s}4Yd=B^b zMe>0It}}3#3gGW73cBuWMOW1<0r^`@2WE2wFChYSrXXh#&HM15sAc%G>~5ih3pSDr z=&Gnz>@hBb$Lgt~J3hxo6i^i9F8ulCV`g7oXWu;7AN68sgM;rZkmaOGF4)_Xs9?PD zgQE0Ie@6}7&Of#f>0A#j$ZC-uUskv(S_2KiuGqPa67GqKfR~1-C+|gGA80;-=I=U; zL%!hkMtLGP3Ib0zqq#tP)z6s&YkxVnh_(AjvDb)zJfI7ndoqaJW5KdCoST6JI`hYq z=CM%0Hg(FQk)BB9U(!brjO_ZA-Ynf-Yy=7}Pw{)O=yC;o|}iksan3r;hD4>b+5 z+*z@!OBW>{(x3161>`JpQo+ETO~C&8zY_1Bq-~@qHfS)O%MOuwl#vmA+3ApmvzQP( zB>tHsNjkd?_+*4F-7+&ctKT=KqhcwRYM$YyE#n-nLZ$R{|5kyi#|4+Xi{Mzv^e3+N*-O4Mu-FI(R zkMnCpCUkD-1+-wB3so*@Ga=idHll=g{%?O>Zl-;M$aVz$HwxmX`-O@#932zImJN3@ z=(`O@^Mx}|g{eoYZ{x?+^~a7qsi(&rEJm@?h=r8=xTaqkFwz!NKnYf1)YWrmrh*wW zZGP9LM+N@qK<^amPA1-166N?h(%h<|==sZS`3E^-e0#RzfICWT<_x~AJ!3>uNwjw`KEO8^I;sU>}3k@}t1TQn+2BQ(W&A zdjDc7Wq&IK8>q_1s}D9Bp@(P6UW+|*f2%XmG3DPLHeJs5k50hkONX|x9U?E6f_|z8 zLRP=|hoVMHzczf9;5ZxEH{9l3s11*v7h(2TdUVz`^s-wBin2CJrlJtho~>a1EHj5( zwAt_Cn5DeaH)VqPUAF}KrE#_;^{4J_TOwNzyFQTMSY0AO*&m`P-^^UT6g4(^lauy< zDy%P!o6l;*mXT(_)nG3T;u-q^@g~PM1f0~=)caK(5{TI`h*U+6m8xi#FvSkT^3tW# zuc){8D>h4#N5T8X9TFR{=B4oV&1i4yHcuPoAXki@8C;dbtkH|ML>9;W0@B5NVXl52 z%2l03;GI9kZlYg0j(Xnt$HAN8U%OzlIAzNoY>>~9_UH6%fS*~0hiS^ym!xnH`*Po@ z@4ozk5607yH??hqk<#Y{GKml8I=TSROH`$+JO(hv`sft?9&F{Ex5%6oSxJ7ZBXJzGOA*eUV| z!GRCm9O~xo0sr#QgEG$$Pb%^pIkCTyh=e1CfgQq?;@GEWlnauFT8Ud`=@|_%{3}X! zZyjN(AMf^xOk0+utD@2yPE`~kCpVtMdVR{d4{BUWsV3~D{b;yU|Goa7)+Jdet%Oa9@ zs^uM$jWOHuwTrDE@g2yy|u|tiVIVGx3SchVTcrVqJ zstqp~kHEja`u>_9;#yj~?|SN@sv)d`A{;Vk`~gFLo$4AgzFey~sp3Tv>MhS{S32lS zwKRr0PVr`)N3=cTWU?vn+U8o>+jp8VLWh7R7^_xF_Jk~U1mfCmXdE}%U)p7z=yYVE zgB9k^$7fZSSF4ampp`K;aBTC!s(HInijAri&)bN-VaSZ8GA+w$EDe`R1N&qK^j9W} z%t2S|Q zAi4!k?Df%VTVs0?%ktKFywaAG9i4G{O$KXEnzMeoZlT!2?x!e(g1n$}N#+(uI<``S zImnDiwx~)$F7AolC`4&?O(n+&UpJrCrgjz)Zp@PykvqnyNddz>=~PUA^|NGy?|Ez6 z$qSQC>54@M1?4MP+NL~$lduiJI?Z(vdZNSGhEBv96Geyzj*|$$?zp>@5IX#VB)zau z4dJ!BPA`;PdKR@T3h}fLd@RSj8=vd5m|D2wEIrd&J2GwdeXP@EHB;WH&+5qbaF{I; zTg*LQ8De&2m3mG>X|JLKzJ+6wW~M4Urq$T?$+Hsh)k<0@+}jWS$;nt@JLjoW=^1Bd0olz?)oQPEIeTMX%9z6-^}!a zwhS9I|0@g>w`Y_`hPBe6)1~=H44bC?>P-6*vBz5@Kp&Mu5=lwcT}X~mtA)^)B1tSkxQ4> zNN0|{$K&;z>Si(wtpJLz=KLmN6=%(0+a+qbkB!wI+%@79x!njNnR<#ay9Mbud(SJv zJ}uxv5JPR=S#0w4GxcFKx7WFiW8ZHwy5$(?rNpOoEf^3(*}Xv>l{P#XC0awI$bL}; z4y*};7YN-k`8_4!-3o`iH^0x;)?E**hq=Izn}7tKRqjVl>F2bs`I^+cDak0)YOd?_ zDv!n0%e&&#RK`46%l^%pbKW1R*hhec8U~ZOaXI00pJ-FNAs2jX{Im$;YWa-I=0`QV0_r@Q@}}fu%5F*>1fv;pnYE8~azEi9ZV} zDVM(*G_xy02nd}-gYt7yCFzC z?_dgtM}$29Pg+U&al8vDia*Ina{a7vp+jCo+a>q=Q-5E8^o_=yB7Sa*pk*5Ml!u@y zVVM4N(58T5XfO;sV8u~?AT*Ot7!9-{hno|rw620}y}N-Gdn}=_qgX#X7uwhF0{%5| zqkY2^n)!3;P7qKQ>`{wTt#nhR)<4X-w^m&<&4aZQ#>)c>B`$`BxAHtGF<^aWPXzz1 z9$NdfBlsbyKVPeD7;5SGWGfpY!(w=^3oOrww_na?4Y;STJ~xnC|2S^{oFu{&BHn#j z!|Gsbn%Ml+^Oql)K$20Hm{a_g$1NdHdh8(G9lPjSw?Uz~YDSM^gJ$;H7B1L>d{o{yW_LuF;uce1tc=TdP z_Xh>O{}N6PUft4!kv>W`4vhYq>Sd;Q+TqQ;JwNSh&d8K}sZ7&6XgvW1L8O?jU&}#{Hl?cDqDg67y z!o@^=eB%G+D$(Q$*+rYL*H#rIJM4yt_wIM&=VwZyDQTIl+AO>xOLLBZ?=$XB@UP!r zNyD8s811)8JW=OtDKEAnMN|_v$YZ3IbDcjosOG0dKfaPncn_NTR>sJ;zl|xx#>mS{ zq0dRUlQ7O1M~=eXa-zl4G>$859KK|shO03R^-W_if=(f`u8~A{!4K4t&XDb~Z{qS07c@ZWlzKU#N z&k2fBl$r@cMQcS_^OQN~MxkFbfNOL*f2{5?&OS#?5I2 z2a6ByJqVPIh$i7vmxq|A_i$rbgT5}j3ytq(q1b;U%&sccLBFPfPd4qTnF~hW^BhZD z@Qbsg6wK3`kT+eV?3y>?!lt4_dL?T<8f}tDy#{stxV40Gy_fwPSv{HEI7)X;`+}sD zcwWvQj;eM~Z&K1+b`%|l>q$X>zGjkn#vEs{ju!Z_p1%)=en@NHDp@jmPO@E2DSzfPf^>LS=Qq+1 zBDuUtQugW_0fzk{2l45UAhYD11#^^_))DudOG6%R>kb=E2b-;S$#+HWhny|Q{P402 z@HgraHW63prFMFel5bp;)I~aW(|S10lV5kO&)i--9vD6I(%U(fBkR=>m&9U@aeFo` zypad=_i-1{V43SjhmT2)q!s2VmkjkAL^?D&|NrY*s8qG<;};v~H{QHCe(2<3b?H+Q zRk4V~H7cT(i{NwC_|6UG_GLF4Y}s_`X&#tQUVIB0|Xo4nP> z{nokG*B{l8xm)F9^1rb1^lm!SU-z5AwjVdNdC@mIy*mY z4PS1`5NscEvb7B54KonW3Z{-E<7YYmn)Yvf51}SX=}hwWu0wFIxQDSJ9WiNZXYh*} zOd1J~!+K3N`_8^(Mn5q}SCTp_NlleAHr|j5jdHl%+W5LO9H1A8QOW0YsRlv=#2ZJ} zKFD!C5Luw_SemTablu^&Z=Vc%Grq#uhAAFh@e13toN1R>y-~aTTe<@PE?tf$c*Y$i zJfLw`zQK;Dc#oWZd>>?OwXK+VeO&REMV|9zt(xD{W=O~W2R(UYjZ%x1qWZxlg77{am1k6ACFHM7^ppnsvozfxg5vgI>Pa5LG95z#oiZdJIe)b>xhUIiL?u%NC~ z)=t7j1WP8p%bRkjN;VI#!uAL&|BQ?KK8*uMaCYS%vTe)3+LDT%!7J_;j<4bfRk1x1 zi-=iC1N)*i7@^%hI5xNEf2fhPyQLlP6m|NInYT5cmJTeyRkhhp4DhHT1~4JH$2+aE zD^|EtMLLV?%*OeCl&Q>;u)TS*GLB^EETY5i*G6FsXBmcZxm%33CTm7(Fh2fLu*}t-z3T(2W*J%J%y*P^|6}^jQnj7}=jZxUY7(+Vnx@gkkTikBo_P2`l z`-~Io@-*v$V&=KJce_oGfw~iI$2kM;Kl{H^oyt~WzdqT(S>1NWxCdz^!o<6IgHW>ihFQNaqnuQyyo7!wXNaY=Y7u_vi!A*V~GpU3HJXMMK4N=oc`t2SG(PVgfe{#J(|p$r^O-jHgDfpkBAPggd#2wV6j5|-ik%nisK$*IVTXiz z0^-A1x-Lr17hpznc)NC!qfI-^yWcmx%Z)>sQt@`SD)R{QX3yqr_;3+~x zsbRYiJWG6MZy!@RO0O1O#VJlHzXU6ZwjAecDKSFmj=(q9O99Cl^lC$eLlQZH92Pk} zOM|YNGw~a%Zoi2Q_&n_Lur5Zv5$Ll6dV*S*;RY&{EtmZ!jotR`P~Ppxe(@DpW}-{7 z{d7p^DaDHx_W@+)2cC60eT=Kzc1d8JJ56`ljnE&sQvw$gZ_ayuY~g>ae#S7%Hk7$x zSZ8!ZeVw1!0`R+d7-)7dSc!RpvLI2c%szCDq}&9Zjiju-yOmwv!C0T3kl`;fx8_G- zdxyGf`4JVC$sYDeTlbR`ZG^SsLdR&Lu*>^m;#jJrK7;Jju>nVMgc`^P$^_QSYgQzo zXWg}G1RG)-cp>E}(A`h;6tDn^Me{ zf(W6G7Y*7CAt?{%)FxCXniqjX)m z6sM1d9D{t#qVUe$$NbMMuI74AxwE(_E--Q>HENADyBQ^cZ&PF+gg6u`pL{5X?WC@` zu1?WdF&YQ#I?bA8!oqUR^RB(>9`)v0(85yGH?b>7!^srJjqN54UGBT7R2=+%tJG5I z)jI>xG5TO>AlXF%XdCV?rIU>a1PpUvgOhEsCaH0^u@x2XTd(*uJLss(C^>A%uEx0y zGTyS-*S4azJ4QZL=V*W|)sLIH5!m|x#}yuAb&y3&fg z14K8;dV~&jx z6wxVi2180IE1U?v@Fiufr!P~*s$Ljbt^<^;2HhyG9Srj@bLB2~vq982O^nW%;pYX| zJ&So?@t%SMC!z+k?(z?A3BO_=&uzW!~5A>Jq?}A@O8eSHyUL4m0|`Er58AM zCzMY;DOhcRJ3I-fFhfJY} zYmi?q9``=)Fd%A~^6uwNS0b}ZU-%^8e(+4?%FbV1uDjY9b)g1-ZKot(rbOh`ysi%; zEtie*Ce2pmiPl+p*VOwO+DBEf!%A=@tRt#OZiA^=w30oqjKsy1Y6HPc^vU0`c z#t~0$izJ226}m;LAEK2`Utz`Y%j@_jXnKT%rGah(|w|DMS zULW6V&+hd``>j5Nu3!GSFa$*DvB&dD?_>%Hdm-END|wAwINIzgwCC-|`Vw07EUz8llo%t+Z9P6^?EVPYe|F7~OMC&rDUe&04hsQ$CUas%p8=NR1R{bA|qR7YHC()$SkcK zq-N#-@|as8Q$bwhK-|dQ@ZNG8g&d;vfR=r~nWHc$_!2)-JN3(;jgdMi){UrFSx*Epz4&_;lbk}easreMv7;_-Du?zLB@B{J9|LP{*qe$ej4h> zbWxm3-M6-k#wF#S-cV?P{%tt-L>euUVE!|H+DxIZJTvO1Jv{&;;oTM)Zglici@DyN z2zk!_+S_xNgOT^%#c4jbNoj92=)QsGs4jgT@2>$gzFCZ$_6J(bfgBSoh=PkLGph^u zx1krH+xh`N2=V@5&+ySz=kYdJY!&4ZIG2AX4J!CIi^V?~u!Cuf@Cv=|r|K!a_0G4Q z#5>0K$&cf<+7pg7d7W-;BQ`PT5r5!R5pBqqI<1^J%g+Jkrh`n4p_g_j{&nb%Y=#G` z^c`*aL5nDCJi?G`}yA-qJ)6{x$Kr@A!pLrRPicsDL?M$=b=OqPs52d|6V# z!fBr&-1oVGmJbwI-(B%!(z%A( z+dL-R!SCzWnA1}a!eqHnm*@h8ZWarA2KMo~H+34*6D)r$s;VW(-w_lYYgokN?q8wx zMb#fIPQ6vVe_FHj%UJfjGqSbrXsoN35jRq~x8;x%lg7&}BJJ>jz+&XSape6s<0q-S?MCbeWaH2NGoLF{Eb#=Z# zzd@JBj9nUSiE)v76);#mf)A${9=+4Bs5!-CP; z<>q`EMx~t5XDJMpkAo;>@t5t9@~F~T;eecDyPQc>**@Q=0IIRSj3~pf4cDqZB#UR` z2I+01PGu^JySO~Q{2zusVYv{A=T4zM3WWYgwbNb}(w z>C6*DMxAC$UHmiXU3CwVVO&sybl*Qh&r#oy$aw>X*1H{cs@9_$KfX0gGtGWv3ydn5FZJn?%rz}FR}EBiaZ+_2 zE_2usN@rZWRY9q4!ikJz!nI|r1s}tb`P=)xOfDl+x#QRTUqCUMW*CHd;YGs=XKK-61)V z>At?v_2#}MY3johs`?UsFu^MoRTKA^+8k}3zeZhQ>MQa;*u~8)jw5A#rx*JF4xOT* z)o;yc%#wwdPnc;@Jr*rRUEk(+!{@Tw0ZbvV7gQT%e53VoL~R=NNn|M8Ng=GVr;OQH zvHat$8R#?q3}!Ga>W7^7LYhZ|V*T%z+A)e1D@eD}+S*=sn3bFvL$C&1d5#;s#_}W& zOn&0)PH_;CK*%rb!Rc#VJBte>+d!_#jrQ_|T!~J5@^7;h>r9tztrPb>sd8bAYc5JF z_`3$r5x(TTZ2=HYJSBd?G^0a~{9+m|ppuXzWSP5!FEY~cUoDZ>vXIV`WUOn-LMpLRy)C4J z>@0xenE~5D1Rj42ZCyMWA$glcT+i5@4@T?BK0ih5zY^XDaxKDUTY%CQsuy)P&j-f* z0Ra^onJ4at@%5EioYTrhLB>T#>G=N{E8tN&p3s|6 zb6*Ysi)_<*qsDpb#j%myh?|(;jj{BJ>}2gFfuGo}T%KgjW|PxdLz1-ymA0p%b&)Gb zT1t(TC|Ns9JKETaU9l1(k)fs8b-Ex;td=*Ki>=0{cj_wmmcZTIo`cJNga;$hb|KtRlSa3$FY7LSgtQEZK!&6i$W1X*Kr5uOC)X70HYai_G!grVKw$?E)7q`P6= zl7;4^fYZOo{K)CmB_KyJAjvikoiEq#nCWF9;&{svLh~Cg9l~t;f#Hd5@U*EnRsrsY0AXgB zgtXw(7rH4>MseY%J*;RnSH9&qs?sz(DCD?gM)%`f(p+5Jt5V?6?iL$KUIch6EVUXG z^M7?Ahi4gM1&{&>8th_CZoL9SZ=JbVJ+T+-2-8-s4nIVD{;9Fho)&W=Nnh<}c2aHn z>j$}oBR`M1*;v*0oxF$$m?OwAmRcV{>|JyzbsSh#OpM>}+TdEI>5@*r{!Jth3oc&fW0~CXLu1 zuq+e)?3(7|8s4dP*6Ojp@4bPMMzdP-IO}*gFPuHSLhl<}kA3Z2q7mRXO#QC<2LZbj z94O7L#QAe90)yXYQT8+E_;?*s)G$kYV1Xzoj}E`Vsf_2d{DvtTn8`zK7?@)U$7y%D`L&L^@oY6(l(MNxJcI&g8fg9~>AQV)Jk z6y$>LTNj!jx)0!zYFa<((9!p&%erXJcRgU9{2~iCGt;YHx>G*TjuT*6$_kKEJ$*q^ zva<_1_BCl{NAfP1ZntcU{#2;vwSw~tD%-r4G8}=WPVNIRLetjR^EIW*wbKHusyoC$#ECwUTe-#YzF3)(^R4-|L${+Z%kT~ zj-65}+(m(%dRzIu#UL4|=6y?Rad-1{y_(Oy4Xa&z|3Ua44ESwf?XllQX52reHv&Z~ z7ZrZ+CdbPEN%#J$ew*MzE&Stpk{xLJ#39j829i{^zp8Cpl)N4>5lfe4N0&74XKq~g zj;!zGqxWsM(#t2T<7*D+PVO{AiSFGP@^wJ3M<1X6-nTLEA5F=wZihjARHhS#w!dWY z=hvLXg`fR-gARu^nb=x?^o)~>-}&>Vv$nW%72zw>dXg6s?vkx$=GU&CO{_t6S2Qwx zrAJ*ksIlF}K*8CLn8qzG1=?WX4`gKJOI#8Nj&2q*>K!Kv92O}GUV76s`1UCisIz>d zA5Qlt11!yPNUU2Te_{1I%d;ANgFMsy6^1Vnnf^zz08DZdCZ0{#qxFxQE$b|Z;p==I zpLtGoCgCP_YHa^I#E+-{B`%7MS1r%K`A#uYej$NB zo#SPO(ViJ`(9NqG=T5b>)q2wN){;(~u!m1iT|Z4?K2V-QC5)Bnd)v3#vqYOn*CFHt z(N-ObO$O1Bz{12qX)NsrrA0pB(fbR0(x4L5`ag23?sNTUQtetq;16c@B|U;XpUAiCWAvZpc5{oeu?d8A6RdGq2;<&wwca<_ z5kP-(n*CgM9jU|~qu$pGVU4FS>K^h>j;07MT9&BXew|s%^n#|B=zFC1f^Yi3pfTV2 zf~doc^pLr8=O_qdm*%t`nhIehcve=&2LpMsd|MxAA0fTeSjdTPj??3JP_!z^7AwiU zHkv7H6Y02?NSNj%uh~yadwbj_O!T-Ra`W6M<7fVUPiyI{;~IrGAt(iIOathLwB*&n z<~**Ej!34bf~gZ{TaNLaCii5cBQe?AI^B`oTb5x+`C}UZ^bdmL;V1T^q1*Hplo5Z* zC|93(DAu&BxX)~balzd?Zqrwxy*Uh%pIzqp!Sa}FnGsj`JS${cU*wX8sU$ZbJR7t% zj@iUItEGh+!C&$Sf7pI4PP!=D!7!db_Aqv_*JmcbM3Ujm`kh05D0=^^zJ4jnb7tRY z18I}Y#UdzWO8kPduAO(GzRv(i`$*&bLuanA6JT8cT2hG_MO<9nY`*J9vbj0#H$g9) z{oI@^-9X>w4?BJ>^U)PYc$uVak_YGK>;8A`qCr-V%j_2Z8ry=NyR-HL99cb1C`ZD; z;9D8QlLOr$_tl5|D2vLL%yK1NkX4gFz)Gj9iMVofI>0Uk8ypMf-5{kOK`Z}t+lY1K z0(--=Ki^VZz`=ziaOXPFMrdW^F4W2`E)L zyv}Q$sUO`Bs2|WrF0sF9?hjN&_|Xly93(|{!%rhdhL$dr1`s7Cnv-J27?pKY9MA&% zRZS6+;Yd`E1pd)iE;JuX3>B=P%wA5e91Fq!#fW8EVrp=dvFn;DF}?58GX{|HN?+cF zQ#4~&{XPv|d9(7GuHcgs?Jq1PI^VG=7v^{ZvE^sIf$69DjfD^ za)c|%eK`tNa*fGgPxgbv&s(&eL4)^Bsxv2O05>#@z<#LPS8VOA0!)S6m_F$Cr-60Q z<)|5a$)lolF(9L4Je%UY^Ip#=F&{{nX)u)qAZhZb54oxTq(pe@Vq|_8KYsL`MWXKB z#7x+5zzCt$a*SiEQ75vF_&6LUoq?$S1dBfjDiw9=g+@a^!u0GgpW@#(+KdSm*YC)G z#pZ?=?2UHCFKAzBm945_|CMwl5i4m>iS&ax<=5#}7Lp@Uu@fv-Iq5kpZ3a*?kE5_p z?jZa3O6rgx1wXqeNo=JY1~SMH`Q-YWta35Vhf6%D%xU_B~NJUNaTL z=zPt6x#UYXeJ(mP=7YIOsQ}aA3po(b7g0I@@xx1;B^Dvrv$L79Mt6x*~FW&zZzzKXe*;-V^9)EUfBVg{@ zN%~>O%!{4x!*WQkMFVF2-ZmKmIaWD8V&3fG)rq)dt%$WUw zYHt8nE~aj{w_>7bQ&Ml?WfR9p%uYtDe*IDPyo}hgU~>+B7a!+I(pJ1wgfG(os`^|%HK&Lz-Gre33PydOUVHOUM9ft~QB;h~uxbN;IaRu&ZXwXKghhQY^Q9aVbFz!-{@ z0$PV2Y4aPOW7eTdQwgTtGS5+`ys3+TssFrcj5|^-;3R~HHYE@ob%lQtyOb1nY|^!S zK1VG&un`M6rA7Ev;-2Ox@=J4AvG=BTjuSW~BU`*l$9`*WseWAWw{bl#Na$LENu-w2 z22Yd);3gwnjmX!N5FK!zV`z_ZCcC{i#n^R}EETYvqCh8lS{yEf+=l*2a`JKLA%&f8 z(H=qz;Lxkh-vs)ffW`Ekc@T?}GS6q3nyHr5pVycn8(MTDe*!QlcstOxfLCrol=-k6 zKic2k3%6h~dLP`z-UW5C!Xh0kDN6`w%X!#Z_jnBcgKyx&Z+d-nc&76i;mwLt07er9)uYC zR7rYT!$_&9+&;{P7!iz~wm(iF{e#^W@h@e^It?inS*V2N-rH0^uBuBv^pzF!5ignO zO~SL)S*I(fET|)yPJbgJS5fAZ{f}8sI)FrBds#7z2RmjM$`$+&Kv~y-ukSJ1KMuTv zG{Y8ds@0##J)i*O_=2wH_C$(dXAXc@;#ZIM?0-OhTl$b(e(G3&6Mu zkIyj7@5n^uA}a`lbNx2GFyL@f^Y>;7wzA-#E94AfH=EFi_uM7?tB+vxT+nSN+tq7J z{$QiRtriYE?q(l?LCoh2$#Kyh%T3>4Iyzu-ubV)=uCs8+Vmvd3{9nI)TCwHByV$je z^Q6|a-8j)ZCHpoeQM|SXO=tpiM7-1d6;rd8+!Z>9{y%I1PNDl`Z0Bmh)bxhZ8I$lO zpkacY1yclI`>vs;=2`ECy2nS0Y^V8EoQBHxW(31BQ6ulM%C^*v9O6m%s6&=1Q_@m1 zWaL;n5Q~2NZ600~D){13s6Mx#%py8@|MSApIaVvG37D?+?J`qOJ)s9qbT=pH_6&bO zzh-n>FxNw#e@KMT3$8Z<2->cJjrbc31Gr1{|L_J zDs~LvNn7UI&YHTkjFmKe=xCy6JFS~(LPOEFRaslb#CJn99h0_{nVPlxwYvFOz9*7z zLA-Eow>v|0EVR=w8uQKd$oys8Gu^1t(h(oca^Cy_Px8BtESz)ryt7ib9&I$+*I{US z7h*lx^hz=G26j=B`MGTI(T-#{C}rZl>4YuOb6y;NhS{j%G7h(~H>Q56$S1vMON_q( zvI?lGX>AKmLs;E@=Ub@U4R)?8wpr}qW!NuI_{-oNJ!pLRePwj{YmRV0z~1BZaqaDe zgagPqhY zerE*E+>M5_mqGV6JzDrQ^)&#E_=XkeD~t8Djln_GFc>Z9t5IkhCKoE$?bNGa8G`l{ z277bpKHn9RKnsvwD|H@pyF`+;cdPhuto5>u7x09a*%NFR{aBnrvo_QG=*$*Jo2rZMZ7?}piVfn6RW;HXC#|1z3IeiGnd}Yw!I5a82vU{pt-oLGh3ad zDUuuh&C*;I$!!FyL~$DozOd>nb5yE|Db3dXw-dPO%KnUFLu)qede!aApM|9#`0DWR zZbPXxDT;fd^}amLU1K?A0oQ0fF9;mI(3hGU1kZ(yF|H3ObLG_zi}fF;8%2!0!`0-S zc_ZIJ`EF^mS&Xl?FawW~#fxH^P+%|e42-wXW4{5uC0b2(&r-ddqvX#e!AG>1-V}y^ zSFI{p@>icmxP}%0BYgsvm6Yc>kLBpq#rN+lGW;Nn&-h|zKvQe^JPy6dJO4$>9d2ss zHkWfn9o*vJs=*cLh)P%Mx;$-y{A3 z^2Rft-9h5<(b3v<$d(RoK#IEXR3uoOH-Xqp1P0)5bO!BWKcLDdV8hzi@Ev>AXXE95 zyR%lkKG)-?H}qLNgNn);3>yt6wU%nkVT((PQjW;rgPyi`?P)nR5T&c`G@Hr?}q)-2TT87Zgb!DXXc zRJCF=mW+^%#gFHx+(HUb#lTBcHgvZCj5ag={^ke4By2vF0V@4Jze9^rISeY21dqc# zBy0bt^y5=K^&ElRRhJY22^iHlE#i6*p)Yew`BH;cIg!|7J0-nKq507_R) zzSd_#K^>+ERab`P-73pvH{A3`x1Q19_MTaTF7!j^gNaIf)L!H8mf*CphUxhy8SqG1 zCGn{|u(3!u=E5kw3L$OPn|RI5hq}njcojrkDzI(gd6shd#?&Kn_$nH} z8ChsV#Y}pcAkTLlYCj-fCoS?RXL}!xqr0GD;d&53jQGYoli#U{^{tTSsF>EtEJDPA zX)OsUQDp1b%lrzR<}l6l8T+m3ta1N@u@k3WvJktAV&?wbf==T1o1>nh{-Y6+QFz+& zgseP(wW=WmQOJYN)lLVmgJxc*d1<%MsaJM*8>cM)q)C1b<<6J->p9W3n>%VLG01^e zW4rhQJk^9^5PDRe8*A}711&#&QOx;6tEnxC#Bs&4q8VL1k;g(cZ}(9Lr<tkGjlk%%_soNj#n!lPzAX8Jwq9&QiIj z9sU!F@S{n}-QP;!@L9z;4;j5slDz|{0@H3ws-$8^5?awFTOOVCRIIO8%0kP@Kl(v! zlx?3Iz6Wfty?S@WJk|OrK}_@iOAxu2a^z;V+rSG@5P!Bh&W?5jQ+4ugm?i}iI$@UW z@L2hc@iE`1qpLaFeBE>C&6QZ}?*mxy3Ai!$@%QSI^Cr6)93j~N;fLTnwTvz| zS&rNJvQN-nM}-5@^1f)|H8DDVG>(v6S$!xi2Uc~!5QGA-Wt_LZO}skx2A)QZEGgrEpS6+|Gd4p?)4pqq84V6nk19 zjo95snqDGSXn2!PCQwm>dUWba3>chFY?Il zH@qvz6`w>jQ@!s2owCLmVW-3S<^{pp61_n9!jsL(xDO;{rX?2h)=4qtc<=X)&!ZoU zgR!%&El1W03QDd*8*-kTfsmJGejhAKu5d%D!%6%7H7l+gV#vfgZq|I)84(&9Bsdr* zm}qm)^8XgdfTmmIoSoMk^0&^5!FC-0H%1g7pO?)iIAn8q9Cja2lKk2$0=jO{=NeT= z9&5>(cMC>(Us(** z-c%-dj1%4PBdTp@w|AJuq>|^m82<)wdh5E1oz22?bp>O}Uar!o7IaYqKBqBFR*sg~ zvK-!RpR62HT|+Tqo_Y~XS-bG!MF(m8Mk%kGZ4S?t?fr-1-*0$?xI|a5e*`dP@mr{3 z82))RU6J4CClFDBttM^Xa8sN(`uu&F!I~AO?<^8e(2SWaew>UR)TE+_>ken^o@m1y zZkX6GThEdtwoug6(bo-(tI_ezX3Zg8pH#YLnrfKf+F}2yP%Z8CA!V{GT>dwb^=)j> z?5K5$K6Akzykz4w7>pc=7vF3))MWx0ZCjV3ZxT-~ewZ9Ax`JpnWDAfTM8EMG8Y6SC8PQ75vsarX?!xty&cmI?zor@Q7w-Sm1yeF zGez|z>jA-hqo5Fw4)^W~NAPFT9R8yOGMFc>D55d!8-XW=Sr@K55;Na!dhDjI;-&>_ zn?fG>8Tj{H5Tkc*W0qu1tX|8~NRP?e`4)>Cfkd!$YX?7LvWNIfVF?Px)Z;sd14M{w^B) zNF2?1@A>6z7wu(76WOmZu``#0Z2g40IK8DSm_O)lyBx#*1UN>-Hi}#4O9Qk+qZiZI za<)m(7K#D-pNF*PgqGDF;7Nyj+lSh9Np@=~J4#reoG#=`l+-xK5)gW3Eh_Pj=E9eR zh>bRcB)Yc4A*A~9JIIFXL3Wh2vQJN)y7Ap{KTVOpZ7vCRBIS8+)7&Tyni34i#G)!e zS&P4($3;X>X{eB2IpT6-W^TjNkwLNX>y|{6{!IPKZ?z$R%(T|iW4#_3cx(AOJbOcj z^mVl@Nm*p$b~|nAa;pB4CDkF`E{eZWnkq0^cA90JC{vI3Dxc?3s%!NJq;IH6^2eWh z(XIINTw?j6Wq%iC^^`w;Ac}5%l2UygJJe%aR~b2p%Bf@IF=0^?mdssB(n6EPPh{%~F zvK!TH@myw03|D@%CsZRp3i!7B(;Ae|&CFRJZFU4%xyDD~yAEij9P*30Fi*B5I0GuY z@az+{nvS^V@r&dHXaOsn1a~#Rrn+=sAoFE26pxCYU!2u~E?~b~ar1fg2-R)Ed^Lk?^wh2zl_si};7o`z9s4A&Z_tlt>wFqiKmJRfW%ap!0 zfu$wx>UYr4Jnr3g3vaMv|8mry@R8c6~tipMQbW_7cBFla_PP>JxW`#+OO= zNIM$HL5ESjNwwNcz;NCt@qqwVoG7WKdwZwuc#kqAN)f-+CW|h68e-9r^g@{u8*yaf zB(_AOKVYk+8XaQ&Lphn!$4!BTS`_!(ff;hYj)V3R-UA{)&~KSBoYLb*f;UW+_&p;c z3;Oy@r4}%jBc)H0?-Kn1(6^~WwzGKbas9ZrDfgu1Xzg6Eh}A?IvXx({u$VKT?<^hpPk3|buR!|?oBG77^JaDyFId7mQrM~HW7Q={O+OqC z)%s{OT+Q+?=8pw?lj(iZqZQCK|4sH^T_K3#?KK|%@;k}G(-7D457mt|l@4mxiX_*U zkfROn8AC*h^+w3fZUIuAVotUFIsb>3MbmG=^K*h7zTGLTFZPHI9c!-e|6o|% z-dz#-a>eArlMm60Ew5YOEaEn@0H*G^9`SeCylI=RioX_ezpP0I9(`!q;c3L7n8ziO z>yWsfrjfkT3Pb(@CqYt{CqHYjbXr^}T?rhVHj6(h7eKgjU9!1bmMe83#nGEXlgr6o_gmx(L;2pL5B*NzseE1WezOd+MB2EA?4sI~*2 zIf+zd=wws=j2ka6?izM{Yu_O|Xn0dSQ8$wu?6(mSavEt3r`sfAD6um-J0ZB~;rlBA zGvcA|i*B1*Z{M*RV{`0p(hv(IsF}EQF^drr`$=V;81icua;Uj%`^@9%fIgRqODCnqc_4YomCqXF-i2MVr`F+8QL-%{$XJVmOeJepu+M}h_ zbcyPHg!TQU2PpstZ8y^ne0uCSr!aqa!PG1)ueFC&?Pc12N8>(oWMhv-1e#A-`x3h6 zzS4;mJGJS#xhIglYs$1&OSiNOpt@9QOxk-BPV_jfLyiYeT#39?X5%_vD^7o*lx8a) zCQ88ye*!h1&~kvbkb8NkKBRcl7-I<`zECL<^F<5)kTT+1p{` zG{ks+KevgeQQUi3!%6alZsseE z%{Bp;r7@ksTF0+o?|SW1vxf0HI7L-G5d!Qw0 zpJF=kP4HJsiEl%sIhXtq*ozuVw9te#UIF5sgdi+|+_o4+>I3Zex}Y?3Y0+>Tmit$q zTL}UFDCZ(J!^YgAP6&>5L}-dVWamufTZuIu1vzfmQ;=y{OQw5O+I4v-warkO=+s=C zsIe)58s1IfW61Xi(ItRU!P0UHFvvsTm`jQ>Xm~@5|L$xC*-J{9D5zT=U~UDBGNCTu zcJqfzPNvMc`UV%<&ZZG5o%G(h^wH96{B-;@HEam_$Y|!{_@;q&oCC)g#4pZo1fF={ z3BBE0`C^U`r;2~0vs00ze7hdfXIcBpaaVLZQrzyGyWfj5^MB?3S`w-Rf;SSjE7!36 zDYvF4nRu?nxGb5YH~)CS8l6G=onyU)vY6UyM&P|$ANOf;inXU8z*}l6L$~zCw9oz^KVKfW_6!Lz2QpA%dxzAtC#b44wrr;c-<6h|CLdHv5v|x z56J)=VF*^)<#0uy(j#D>qLQ?Y3^p zCvkn=d*JF;O0QcAKD&~jJ^|Ti7-T9s6B_zg9C(EwFdc)rGxkgy#jDp5{wA>rDPzCK zM!T_l$6mcoyGE?=QU=An=#przRLTT=$b47X((z}=|Bk^ z3GKL1kP+bIbdtQN-7C+ZxdGjItK-c(DEUhD*2yqV1m+mE;|!D-*(ewzWq?Sw`z~`H z{bYiB)2vr90Z`@r(ZKwjtS6*7SDU5R2jL9qXy*koc;Dxd+U!=dFu^bMv>lsXAY14= ziyL~6EHiIUmdXS)i=br%o4pX2qjBe zk`v=ks!NgcmX~V3SL34Ee(uL?sm2bQ*41VsWpXZv0??HR?tR54sYu z>Pjp{?oJTdk#FMn#WVtu*d3?C_o8S%^ zMaA{IAxs98`PZN&s>xu-xxh;CkG}D4u=VZr60oTD5RTUk9$k-vzL7UI$jKG<5L2>$ z1&N(`&aygaCU+GkEFZ?QiGer%{z@bsWn?He$gsfW88_Q<4KcoGSMNJ6S!NI8_*SVN ze;jCiJv7aAyh1-r_KVX7A;yxjI?MDgtZwkaZ;iu z``8d{P`vT)Jn?l8`#28zx9|*LSzPD;wvVKfR)(2Lc`S`;e_pAUoKh_Kg^nDppP0K5 z_r@)JyoK@2PZKZwzI5`C8zW(aj$%ccqGZG0^h8xV(qF`iij>K$x-YI58M)m?Ikae0 z%ZOugjm=P8*mT9@@5Upl2jQ(x7K8ncE26lv&!MAU&K~n@{q*v$CM$I};{y1LZ{K{`6PGwkTLX-^4X|kMywQpU%u*7C zkazKWog7H78BDmSaX^qH-jsv0oK|nQf#f4hJOTkW>TYm@({NOUVJ5@)z|d?0>l--Yy(%XgqFmvI7@9`D!%yUu z7=l#F&o*%iI_gviS*h3)i4#2Hr+GpY|MWxxf0uHn^{byo!FFLk8@4#z8G_a8s1WTz z^6d;?jBCvV2k~MyYd-#ZreEcFnZ&HUZD+%d3vXliseV8~{l77%4lDj`i|w@dtyuS2 z$D=!1fI#&cLLdBnsk;MU=T#Ne_z}I@w((IoC+1Yq?@x8TZa;#yE)VqZDtc#0iB6=Q zH-9JDc>@RA*U;p_bMXK)f#*ZZOP9IrZkwr4FJD=V`4}YZjkLY_B_YgNi&A3xplIj) zLgxJtNoDrlA5AP8_hcWfndW?T3iavZ6<_yvuTG03k_}`o6OV0LA4l`!AZWie#lUP? zPwee?$4gW;zZwLOpm$n{i2{!|s_wQs@%)qca#?j7`cX70RX+yjcEW06WV8rhC`J5* zofG`*PEvl=TiEO9Dw?}|Ok_TDCg2ylnX%Mgfc^Gt#I~QZK3Z4BF2%)}@GTASu+__* zHKy-%>Fl+wAHhcqL4K1q6Hd=9vI3%rC_q%#g$3$os~1j7?yGx- zok)Tct86{svj&q?i*8)Q6aV_m3Bpl_XFkx$?JOgfcDeWPFHed-^%nH~K2X-#KJ4$+ zaJEA@r_H38aQ7Zyyv?Y}<_Zx_NN6-Y({cku^PitBV6@pxl{TJI&ZKNf0G`%*z2q=Z zBlR-)cmj9f*Cc={jRE8IL=#`fB|AONDPS6kM$Qs@ec69@wRouQVcOn~pd%=UeYGpS zs{M5`V%}EK+^|IA1wZw!fYhUIQXw->^6rV%FvH|}TwJ%6MtFZj7nB})_@sJ;=0!1j zuSS2?44k8S95@igq3maSEEP@2GBjU1N_>U!t=fB1R2pE6(D=o~{WoPE7}gk76!qX7zWfIELqg-w<$=a6GfA%r^4Dqq{~p(N zdn5XT&n}Uzv2FbwPp6NGEi3q5Sj5DZn1TYd^z*tr)xe=|UFC*>yFrOv>S!dwBr?Lb zJD)ed<($GbwtylA!BcrXiz~_4Kb3AR>oc=9spcCS@gF9(7m0+42upH&1f1}1+dmdl z7Q58GGrV3Q9Lru8d0M=$j<~U-85O`X1oBdPGIH4jfOD{8OVwIOGWOr;=);gHRGo3BCO0X$u$Pj;(?`oH(g|CyTxl{$nI1|WUqAtL5KS>Si`TG07L zsu$Sf3OL?ZG!EZmr8(ku$#mgLj5xo*Hm45v{V+UI`*5RxKeV&6lvBY9$M_#qFKLCu zk|_U0+A77qHYPe}#8dbAs0OR_P)%HF+=n0!?sFLm+T0e2**9O>CG0z+I7gleXKQj9 zhn6?1#O5TWADoF=^tS#z*?ebR1TkzDhodiJF_mn zA*TPeG?gsKCUtHp&5}K1#ERF{0N75gj8<(N;8)HG?5T|(1Y2&0*+1KAPeZE9wm*VA zV64 z1`Od=YYjg2h-bhA?Et`fFdFi1VVs~P>DZ@1$kusj56IxT+QjSKhUZx90RK(EmGK|f z9_!7eeR?D;W_{`C$@^d9Cl`ZH>`j5c#^^=T!f0gF+s2?YZU9VpY8M4N-oaDu(UF?L zTIr6%J0&|S3*pqhF%#-{WP(-vH;%2f^?aZUCI9mW;2+;Cc93&ITN=3C@EHN*=t??8 z57dv{@~foJo1(Lemr`JJ8_VxIgG|5=im`KIy-g8j-XchI*{8VqA8C#PCVA#g#N$Lq z;t>q~SO)Ug$uwg1CKRu_p&Fokc41)whLN#k?J>uiK=}@ygPhtaZ7yGyJ$bsuL+umi z692SVWn&y%cN`FL-tgb7#WGt}yQ7nJsg8y=dx7_VS)o%rxKIq`1RZIT_&Bf%O?Sr+ z^~|yKZ2XT$nm5n8`oY-ti{|)(jsS4=qmWW3m3ZH9xumB)#_~V2OvGx^o_pL**kc-k zQnOltq)Heg+y@(dtYwu}fSdCZG-pKLFPjc58%vCvDOKUGKARf;lHZWAT67 z$3n&&z0kv1a+er!&wledqU#kM$1TJW<_R>p>ch=^)Sg|Z?{{*4z{0oqa2{Af@*`2e zgvNqL{1`}j;@;&FM(YwVMyl)+4M1K&uK8ha`_3#l2KzDCopckX1)SEI1^d8X-^y%r z$`?WVO0tkzu!Udz{+)UBR{g2D+>fod9}*(s);iw(o-En&j0t&Se}83{qnL>yjm-4F@t@Yp+-qL=OOvA-OT6Ef?sG?UklRqb=zVbe z>yxvFS*0y!fIrJz_7I%!G@BCZwuCZIfx}d>yE`uz5s~G+Ll<-Dn}`DwpaT5X$~OCS z?!*HN6FNkpHcZ+~Nal`9qa1U-ox( zMtVxOo9$HRMA{{o6rk(dF-hnAXTK+gjotJBNY7%y9h~j6J7!;5JVfba0s_(Y9GCLe zvnT!Wf2Kb$_*N$Y8FVP=9$EYXSFy?`{g`~@e@HWa=qi(gl7+V2N?a*R$jZH6!6!ne7HpQN~Q5|W3{1k&5to-RcDSA~BOp#h+)s15-ta2QG zXe1X}H9mIo z?6ny;#_UV3@0*@YqV_{GveuV^j8J*HXSlINr(St&W~nBYQ77vEd|61QIo+J&c3fcu zFR$`(CiC8OUlgNju1<=fJNB2wch6l`JsHia0iu_xt6G`%bpuWevFDOvAAGw%vB(`! zX=jOZt@_c5Ul_VS(pIzlcHZ`s1CbX5^?XHp-FGW;G*T^0idyu7_;8#w16iqCJa89+ zj_71QGY^^&9IN8}w1s)w_#=iZuaW7o1u>Gc*TeG3u_#`aCh^6` zfsNJT9$UEF6(Wu|{~FS1dr3nkK&Y>c#KGe(9NH?5;*@;F%!Z}i5SKNlx8ECH)_qyD z>G2N!=Zp@n@@pl+Ki1}(1EIXbqP<9;HbGO84HT>5PSJktv3{fRBLiDT$7&HYYDk~WePGx7EdoeBL;BnjhkNKjJ?90B6Hq)!2_wb8?g^34zF#}B8bV=2d4Br%ko#iDU zt*~iL8w1geul3VwOZ1sNO3#9{hs4|RgOs})FXHx&#n+|RW#x-o_ITOU+25KSuhqI# z4ST_nYn;{7@+fy-t{(9U^URF0o=< zjBT~r#1vlk^aEyyoPE#_>XbCo6VW~2nQMZv+=UJ)C37@k?5qu9KJ66n`tTx?kkl|i zDD;Rsbfap6%Xs;Yi$P^E|JY8m4=bMSGcxI#kR&^eusK)NMha^3xx2{C6w%r2~*tH!c2C? zN7`8YNf)mde|$UyZx+oZm$7I6$leIO;!ZvLaIVsv^h00gNG>}ARtV;8i7SfPk`Inp zX!7My{?~Yykwc?%IO&u6rG^^h|3Q)QaJ0#WyxGHCp&-zh3PY#_qt9Nkj=G_G^l8_B z-azhO34OwUpt8JGW}4%p5lx+RarD1_T-3n z%^s{AJa`!al>Ba>tkpzNZs4t?!&}=-CgU_ixhsi`Z|TjdNj_5$ZwCj)YgSIIeFe1^ zd8f-X&s;;kXSG&&No zHXybn(SP${s6V}wD}N@3kC9Qw7~rLMFU0MAIr!lE6+0;)jW-qkj)8afUyKy91vAr? zDWU?(W5QLf1l29;Hg30piS$8ei6F{>!n3bMTE>%koDisf>XhH<$xYm?k{Hn*#L= zmh~}#>?hafbL$W;ieOF(T%AbC*N@p>PQ}J6rm5Qd(a9OdI;OjSixsuASi33wgq}<7 zks=4>4cO)BwyKE=QQ3<0hJqFQb;bc6B3w)G7w zz5?A^$p?N;imc5jqQ#vrxMbNdIz>cW9h4Fh&F>o+v{?IP;jcPyx67}?b#D@|sKL|ZO>4e$e z@{Q8!T5lS#8=Oj7J8Q28O*Lq8SN()vuzs_J9|X2&{tS7%xw|I1MyFkB84`)WlpaV8 z1VNLYEKCP9)vp*SVm9>OhJE=c;+`J&S)umf%M^LVlfv*@uaXO7ed+l;xXI z_Z(gcxomXGYnrzLxqt;BkDIwzhuZ+s8JCCmTbChj^7p!%7qA$X8RQ`e@J`<5Y5hbT zR}n&cInEdZpV)moz;qvo-OApUnQ4Ug(|!v7@BG<20CUIth_BN0vojwnsaakmp z2u+Yzia4A~ixfWzglVECs6~47C;vOYSK?qc5K^HJTjdY&FN&Mz%x%mbE4$;H8(Die z%?q0$AtPGbE>d|~oAuXZ1y9WP^q@i${^9ewPuK2rk;JM9#!4gL|1t7tAEtD4i~!%w zv9zB^up&BkS)}!1Ww-r_qyA%apK+I52av69(IIMa`<3$KPj%f8{EMSEiV`hF0H+1mlG8z3w*)>8DtR#-q%|GObF$#K@_+l!{!f z&3@RIkYBE)9Uc@ub%AOQaF^!E6*uq0o2Wl|zQtW?FS<>VPsoFq+wLsfkAxh~24!#r z4&Mt>wrKxlG_#6_ENP_8_Q@^!Hk>=S<0tGil3@6Si$(dlg!Y`S?I)5ezc{QEu@(S_ zqan%1VfINamzJ-dCAA(KfnejSkIJ2&12W`|d*QTq82HMU?H69E3H^?{7cFyGWNx3{ z1<5g8i1~mS?O8%@?>~=3rq+c3^|i(Kp0lcH$pHxN2HTd}ms8f@w{aI8Hn0s%A61Di zm{%fBQh%IRs4i!}2K8vF=rncBt@zm|qPO)fdv7L$>m^FIK6Vs;-pHtd;huq3XMDQG z4`|Vlk$`t|&#-a5S)qSpn_Kf97@?0%4ea$C21us&0E95Mhpj#&da;qPT zqJ8OA*r7-B561tde?gzKtPyfqjoT{gD$<fpbygdQZ5xl9HP%f* z_>K8bW(UXp4RQqQkc8?AyM`+Z?X0ys-8RIBT&iAGdf(y+xp(6SVw#&tDIWIV$Di&( zJu@3W9>vT{w5+d>&~E&q5wcTEtQ}U;(A5r`M^z3n^so{}$kcrJi|c85*rLw|iQ#9( zYxGC@h1|)+)6WUP*aYu!%7pD!4SnR}99lBT*xVgSuiieEVcA(GtzWn3%Gw6e1P6Nc z2Y+ebxD_Z9PXF{Up1u+jzz@H?M#MmoF9Hc@1Q=X{9Sx=)K9}2mPR-l?0o{tVUoZ%> z=2Cr+O`ThP)jxH+C3LEE`=a4}&Ja#K##9E?kyLA!i#yS&&yHgn$O774pkSG7l z0;DWQxJ5y}br} z1vy`Mt7!_!GaaSk{{Yayzq6{7FY!wKekD|faoZ~opV3u0`Peh808 zm=HIfgLGxL3mSfvPwqx($qVdE*Phmns0{ql;MU|=vbW5lZRgfM)BLY>RCgpB?DOEC zGItM{A1;rS!=0h6nGsH; zSjuJ{%fmrnIHT5w^}xdq2?8fI>nE^;6Q;$&A(Dj=^a*34PW&&^e^4k)Ct@RZVey3! ziiPmb)J((F3lLJ|D(Xqu&7c)mi!csWLfh!d$q+%QjCGp@l!;z%!Fmmh#ER{l=$}FZ z{mHqrUw)brV!T-}{o1gvmdFA3GmC?v+u`56(Autq5%mwO`JQvmqsEZKga3LH@Y9*A zheu+mC-#R)8z&ZXsEDboZvnZhAGMeHU}T)0#pgR_W2c^UJ&I5}eU0nGNB7L?bEf}C%9~ANl-JzX5oBjxA1;}^5EYL3DuR9CciV4O-)juN4Jh(R-jbxdP0Oo z+0WE~Q1SKAzreQ@!;e>w;-@4ycimrh9A(}YOkV+^B@Sfztz|}OZ2D1sT!SK&0?0vU z()S?F`m5dfV1(_DjRhDn-ZgCwmT$irlC&bdT@bt|8Y%$Q|0+MW38?}>%ArpW5=+V< z)C5_q#Oo(_({6s1{K!cKb&8;xo%ptp1&26eYQh|hxZ$ocp&>83f*A(DoyDTcFQM2i z#G1Z75R!A2NJ?gbS}s^$Y*q zrn-rpOiF8RxLqj(o(6@iyNUfRusF|2m_3LR2m#%Ui~)PzVxfC};sty9wUXPFPZ@OQ zV(qg(g)wOuwaFJl!Mmo{Q;qWKpB9;q!=)qgYT|8kr8c;Lk66(j(g(>RrkWgH?tP8} zA>a=HFcXdGP`ioNY$~9kgwe=cRmbcQ=AWyBf2|M_g(%mGxdBZ6RwsMC#wC(Vg&Xzf zH)66v3Zk)wN(sxTCO{7PHX`TE%hb_;9cGh0>tZQAM|=n)(>)ONHG=nIpLG&4Dcan# zz~N*;w*&zGC?xgB94HD`P$JtMy-d}3^RSb%A?$|u>w$T@O^D*MUnM}!fK_J~^} zO@Q|fFJ{^Wk+1B{2D>$rU%P}gF!bs7%_9ojW#2qIV>AFafc{;lE@%}6nS z@;G=X3fV6TQSWYiWT2BL^)(;3_h+kT31H0>qz}fb{s0!mxx6q;dWn>G%O>W9 zID~sl8p|n8?&;OWjrW4_9DRlTzC(EhccipEe=7M6MTY2S;7)m@w=iqkR4J2cAarLz z{7MscsnH~p2t9Xb#B!Ox3$b~+{4x|!zmcul7ES-`;hz$`0;b&5PycI~SI>Oj8f#(q zD2{&NPfcL_&kHs6XYK86;{0!FYC&B?Ne}9Ygqc3c(7p8SlY<5DJPkE(AGSuEe?GrQ z*}fW1#lS;h%-KrUtJJ{1+HJF#NikzaaKGqeynV-$%WVQMz{SQE95)2Zh zhZ8rhiOTbN_arf_R8+0H=6-Yo+x~u35(TQ*mu2wCGHaTpY0tkvjTLp#<*+}@76#97 z^{B~(d8r{K9PMc94l8*DQ#TFTbuu-X)A0{~pP49I2LL_GH4oYvZrFt?jB9;CDoM*l zrjkoQqZG$nffh=q3|RXy;uJ)5iqQS%KykfD?{?f0e#Hmt|F0|4DLnh^OxtRqIz ztFbj0|16UVl%2vMaeb9sNL=3Oy$C4w}E3#*^0oM`cpA<9#M%*$mF*zMH*) z1AxAAwCgE2!S5i~g7={LDO&1Fh-Z$s}Y~Q!f2LORvGV8zfmowgPpqgtg+@eH1+@*=N%Sk90e$B-H-=(fBsBHkfVrE5AA9Q$5;`%uM= z#3}oSe=>SB&2fOg7PhO^#nM@tH4ye^aC^lHMJhmgSfQc8O8X$SJ? zjwM>fldedc@F5lgR0Ur0t=6Bc8BfGm{kJbAyiQAsDWxT&lUyeSCbzL2b<)IDarv)4 zN#3`{#+zSy8H18W`N`9t{q)P(UmgV96>zb?(orX~F%sgH&<+pD;v(1^tX^TL3ZgXl zEtT3i<#Z)vBSzvkaCegtMi+U3pPCAU##x_tk%L=qV9~yUn3h!4@4CwIrZYJ8>qQ$D zsMX4__>n>A)Xc3H4Gy@dCn{S|PMoN%l)D(G|LX7;Ocs?)aGvLY5myU|Eo&slqeR|~ zEa6QNYOF*_xri)8>F>0of@skx0V*6igJlnn%Gey@piKNv?4Q%dbbKVQ=I&x60PYnE z0r=kPnjbzrepAhY-C{iwL1k7OrD;RI@Im0}F+fsUGRX*)F?d<1VKSq3tLJ`YgxSW^ z8NU6YOkRYNU)8|iEjqGE*wi^XCTzZJfPEk4T_Nc&btyv1Z+cKg*yW&}@715=-d*SP zU6FXF7iJmmXUaP|u4qKUI4P%ko0F$-9`P@!&>+yhH=*<=U#|8h}sX$mrs!Cc2^h^ zkR%12A7fvw(^wx80)z|*MTM<(6bcBujX^-KC>tX-Jxrz?q^ib+jhok z=p}8gAN_XRArgC4lTVdq?sOxZ!1a8Dq-~n|a7tU!Lu7G^$HjpF2ZpL6r{K!JBLRJK zZpP2>*H@2sch5o+++(PunW$fe3g(kPeICZ9Y1Z-Zxg#_xxLn{W7|VA$o}Qz;7ebgZ zH4tNur@HaKUr?u{s|>~0-C!V_71|7Q!o4p=!_Roh(?f&Z9v#443uDg#YRY@-*627L!9q3kC0bIttMtV6lg?8&rY>@J zioX+4zLOw>-h@ieo|jC_ZBeY4nb}0g*>D`L&cr3sT!xx|N|eB*_{mL*dS1iRdza86 zx)Xe>;MO*6NBbpF<5%zHg9E?#L>EYneHj@;9m^nB_#kU1R^NA1c#r)C+B7p36UwAs zq#MB{%wIO$afMx8e}ws*Y-ukqbM(V%lA1_OKBT$l*u`yg(&^1H?Q zDz{OK$7>Jm3Fxw|ZOvO%jq-wUC?p3Ekf2w)f7&I!S6lA4!NUJiX}=FoQF~1qrvP7p zLo%fRNSK%fiZT8i^i#$i_g(YJrXoZ!(CgfF#UA?m3N!xJID99%*Y9|?o_Q3$@+2m0 z*Y8nd-d%*Xx?IN~-7ja4{-W=i@9VT_+v~OSaJdK7RvIe>YvX$@Uk<4YC-2ESOk@1a zNe?S$Z2ZX(V%eDiU7%?8oiMh5O07pTtv_?Lnr)OE8tiJVHdd|F5C81#V?Av`b5@q? z%E0o)#E)|oecE#4|8zFGnPdL`@vsAFpL*+$N1om?{*?i_9_$DbyB)ZP#P)1qi>r&r zp#QgT@g)P0TTv#pH5hp5W`i1LqsLBAWYBVh=agLU@(K2Os&&S|!q ztviwN#B;7}aF?ag7&bMS-AZJP=eK?Ep{08vvI*v9zdrv?(70%=`rttZ)mXV9%=Llw z#@Wh)xt#dZq94lUJC-I1IsbdV7bOy*_#^c7yO*cJA{if8+Qk~XOAe(b1CRT)PF^4V z1{?jZV5zjKXup|8Ri!?Y9_$^Hu_-zOO-VYXeUVL~c7}^hj{tq`NSXeXLirUJUy(f> zHc*ij`WtYQJGnL8 z=ikYoHf?2@leGOmFFw(SyVGuP-wOdKAWZ*eNj~s5vM`@{vb{7Yz56w@Ad}yy* zvlVCJBEg=z+|-@eoWTEvm$l(dxSXCl2AOIh*>CHTHW|_+>Z#%s6>c(jDX$)Z)mEf> zUqZghiwTj0_1HqaI(*8jV?^!q%N(%gZTv zYz^osh}K!uSBcTL#EOS@4s%NRUNYAER4$UOqVb`H;VesXSCL-=z~20H^#S5UsO+nd zDE(EeIIX0Z{I97ENS>6tyRiNaVYB(~lPW!hVC)USmNhX-)(`O=&{`cp7dPLocH0A0>jO{MIzqrGmpjtrK^&2G0#=qP=BQz-H~yPO^&Klqlh zM|FNHQsLbVQPq*Ri($>iYCj`f#5e<~+frg*U|z1GUViP(4%C_t?ON{<`}J;pBYtY) zoEr6PB$HgdK;;>%0K^C=LO6v@H(vrZbK1?3XAbN z!(Lx(Jg2|Cc>QG9g>SV15YoC6ldsT_*zE}KbBo{gSD>qxVR!#t8_=duFVi$U?6F~q zI*XitYYqf-w{AMM8h{pwh&Z$0Bm`j`koegN+0jq>(o~`S%DLqH(YN4d)Bka{BHu?nX*7>0dURiOz`9YKtL7`8vx*e*GP+OHa$Z@K z9CCaqT4wRgbAs#Toc5yk>6&~i67dLP1)TrMIjVMk^3oUQigibfS=S`2KtlQjN^Z$$ zpaVFqGO6LI&~UdhgjQfS0@Mn4D@Suym1vA-YA8vZ_LOY99f{ zKGbIO;bF{PwibumD0fe$i*Ul(DZ`27Z2LVG+Kx) z8_bb^wY~7YyTWu|xho4ODivxCJ{OVhZw#7I+LbPEv&^AS^uL;|1cfX#yKeV(k@JB2 zuNgwEcx3AK5$brRqO#SRF09!w$C7?=uP-nbkX*9UT=m2p^%8tiF)w{^ zNs3v8KD|NA=mFU7l*nthsfS-NMj$X)|(uzY--c}sZIl{+9s`lK%wdFYy>(ZIJ#QQTQ*gBEYm;jid$*}49h}5_{ZC47 zu)hRs{w-}xmgHiqEJvN2xhdu8J=B@p-YX>~?(5)adJeIrZ9y^c9PA$67R8PlYR;06a_D@A3ku*k$ze@vUkVPQl(6V2I+ z(O4xi_=0Pu3taWt$ngnJ#X=^sX$FAJ=;)*=;MJ}d;w zxY90*K)^FofHni4XQTqu%B2G_9Z-DCMHb6hQOPT{`rFgp9p3^LLf}pPesYQ5v7|1( z>?r-jo}nDJ?Ss7YF~F98Zm_xn?(q{&e~MDvn+*?|nu3PAhJ7pMR!qNcYbmfC;pfGS zu86-aA=)Qar~(`&UE!^7iJ)-P2uAM$IQt^!h1C-0%Bt4?x3Zdype_<5IaY;;!}1r5 z4b!wj8qs}v&{uXltA!oa-B~{@a(0qN?nXlhvzAE+I8A3VRjopTx$ipXK4-AVDP80P zGj2;P34M^)7{ zHIpD5`^z@#by!hKP+=R8u^z;;_1Ir6v1uX3?>z0gResQ4t1K>Iu0BJ7?rE)S$x>2_ zRr<_Mw<*_36^q9q&GFX$$`^mI)4M&t`B;dtjO#M4b-sQlAVgjvfxfC06gte%yAq$ShGp_74NlwAF5d!y9trX!lgaiW953Ax7J&bU z_gjz*`aCnSeQo=IVUgZSu{`c3RR~!V|p1#QIsemO|3!tS*52l~R)O{}8*0u>1UA-kr zD8cZ7G8a=se1iQ!ChXP|f5IIjkrrOg3&9_-b-PZ7)MOcDq9L%X0TFL~QfG)fit#=Y zwG<%I5@s`s+dy9>j`+OqO-7f>r>o*b@>NyRAs5z-zoh$G{3A?KbZ8(xMnA%*1IeFGh-K9(E>AQ+DTj8WWJ{JUi?BE-LOX>Bj{__g4Q<;}@@ zNt(jT^tYQ_PafGy^p0})nEcEc{u%z?xz-fl(5Rs&Q}atjK{DO82K&MqdiQN>Up!UH zyCTckN`rMgveqepO$PTsW(evL3&Pa+d)X zYXL;x=n&pC6Nl@xK`oNy=^m05VTqy+#~(RY6mhZ+$4Tcy8;_l|y{ctthCpk>VzhH9 z^GP%emxGLw*n)`ZxIXee;MAs$ta2CqGZ^uctpRr zPp-3q0fxe@HNVw4GZfq*?!P(cI#jzdp4F%^(K}IXh^`ZuaOWWAXfAA|fXb6h=VC@C zo?i98Iru^L?(c(sd?)iR1CL_h$@??4eJAAZ6F1mq`aDMHuC>yxN_C~3QuDT-_Q`MM z)X}}%*qG!l@+1-TG;AY%{)tkV_vcWDK(KbuE~BE~M{irmB2M`jI5ts#ygPLt7VGNn z*D|QhPJXROs(sNhuYR zi_E*c1}IZGUrz zLVGk_o`)MvJVJP1sXUKJ^uCuppvE5=b#Ymb?P|9~#ix~?Khq_zmJOGM+dJAK^*s$A zR{zZvc(#+gX*AUTbmGPO%JQJ^Mu4B2y}iHGBjey-BDe8hZjJcBC%-6Zs&$^tFP*5` zI?-T>=*z~>eRGVq3!QncUp}Tk{QXxqvzvYGY-ovD)rKv$bPoCg`g}nTalOEBLZ9